@nodetool-ai/execution 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +129 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/app-debug/app-spec.d.ts +94 -0
  4. package/dist/app-debug/app-spec.d.ts.map +1 -0
  5. package/dist/app-debug/app-spec.js +710 -0
  6. package/dist/app-debug/app-spec.js.map +1 -0
  7. package/dist/app-debug/application-target.d.ts +53 -0
  8. package/dist/app-debug/application-target.d.ts.map +1 -0
  9. package/dist/app-debug/application-target.js +126 -0
  10. package/dist/app-debug/application-target.js.map +1 -0
  11. package/dist/app-debug/bundle-target.d.ts +21 -0
  12. package/dist/app-debug/bundle-target.d.ts.map +1 -0
  13. package/dist/app-debug/bundle-target.js +51 -0
  14. package/dist/app-debug/bundle-target.js.map +1 -0
  15. package/dist/app-debug/graph-shape.d.ts +14 -0
  16. package/dist/app-debug/graph-shape.d.ts.map +1 -0
  17. package/dist/app-debug/graph-shape.js +23 -0
  18. package/dist/app-debug/graph-shape.js.map +1 -0
  19. package/dist/app-debug/index.d.ts +26 -0
  20. package/dist/app-debug/index.d.ts.map +1 -0
  21. package/dist/app-debug/index.js +19 -0
  22. package/dist/app-debug/index.js.map +1 -0
  23. package/dist/app-debug/markdown.d.ts +6 -0
  24. package/dist/app-debug/markdown.d.ts.map +1 -0
  25. package/dist/app-debug/markdown.js +133 -0
  26. package/dist/app-debug/markdown.js.map +1 -0
  27. package/dist/app-debug/runtime.d.ts +267 -0
  28. package/dist/app-debug/runtime.d.ts.map +1 -0
  29. package/dist/app-debug/runtime.js +633 -0
  30. package/dist/app-debug/runtime.js.map +1 -0
  31. package/dist/app-debug/script-operation.d.ts +58 -0
  32. package/dist/app-debug/script-operation.d.ts.map +1 -0
  33. package/dist/app-debug/script-operation.js +44 -0
  34. package/dist/app-debug/script-operation.js.map +1 -0
  35. package/dist/app-debug/simulate.d.ts +85 -0
  36. package/dist/app-debug/simulate.d.ts.map +1 -0
  37. package/dist/app-debug/simulate.js +991 -0
  38. package/dist/app-debug/simulate.js.map +1 -0
  39. package/dist/app-debug/summarize.d.ts +64 -0
  40. package/dist/app-debug/summarize.d.ts.map +1 -0
  41. package/dist/app-debug/summarize.js +65 -0
  42. package/dist/app-debug/summarize.js.map +1 -0
  43. package/dist/app-debug/types.d.ts +343 -0
  44. package/dist/app-debug/types.d.ts.map +1 -0
  45. package/dist/app-debug/types.js +2 -0
  46. package/dist/app-debug/types.js.map +1 -0
  47. package/dist/cost-ledger.d.ts +147 -0
  48. package/dist/cost-ledger.d.ts.map +1 -0
  49. package/dist/cost-ledger.js +288 -0
  50. package/dist/cost-ledger.js.map +1 -0
  51. package/dist/debug/collector.d.ts +28 -0
  52. package/dist/debug/collector.d.ts.map +1 -0
  53. package/dist/debug/collector.js +284 -0
  54. package/dist/debug/collector.js.map +1 -0
  55. package/dist/debug/index.d.ts +15 -0
  56. package/dist/debug/index.d.ts.map +1 -0
  57. package/dist/debug/index.js +16 -0
  58. package/dist/debug/index.js.map +1 -0
  59. package/dist/debug/types.d.ts +179 -0
  60. package/dist/debug/types.d.ts.map +1 -0
  61. package/dist/debug/types.js +11 -0
  62. package/dist/debug/types.js.map +1 -0
  63. package/dist/debug/verdict.d.ts +27 -0
  64. package/dist/debug/verdict.d.ts.map +1 -0
  65. package/dist/debug/verdict.js +51 -0
  66. package/dist/debug/verdict.js.map +1 -0
  67. package/dist/executor-resolver.d.ts +13 -0
  68. package/dist/executor-resolver.d.ts.map +1 -0
  69. package/dist/executor-resolver.js +13 -0
  70. package/dist/executor-resolver.js.map +1 -0
  71. package/dist/fal-output-decoder.d.ts +36 -0
  72. package/dist/fal-output-decoder.d.ts.map +1 -0
  73. package/dist/fal-output-decoder.js +129 -0
  74. package/dist/fal-output-decoder.js.map +1 -0
  75. package/dist/generation-lifecycle.d.ts +54 -0
  76. package/dist/generation-lifecycle.d.ts.map +1 -0
  77. package/dist/generation-lifecycle.js +431 -0
  78. package/dist/generation-lifecycle.js.map +1 -0
  79. package/dist/generation-recovery-worker.d.ts +100 -0
  80. package/dist/generation-recovery-worker.d.ts.map +1 -0
  81. package/dist/generation-recovery-worker.js +995 -0
  82. package/dist/generation-recovery-worker.js.map +1 -0
  83. package/dist/generation-tracker.d.ts +83 -0
  84. package/dist/generation-tracker.d.ts.map +1 -0
  85. package/dist/generation-tracker.js +436 -0
  86. package/dist/generation-tracker.js.map +1 -0
  87. package/dist/index.d.ts +28 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +21 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/js-script-debug/index.d.ts +13 -0
  92. package/dist/js-script-debug/index.d.ts.map +1 -0
  93. package/dist/js-script-debug/index.js +12 -0
  94. package/dist/js-script-debug/index.js.map +1 -0
  95. package/dist/js-script-debug/markdown.d.ts +6 -0
  96. package/dist/js-script-debug/markdown.d.ts.map +1 -0
  97. package/dist/js-script-debug/markdown.js +62 -0
  98. package/dist/js-script-debug/markdown.js.map +1 -0
  99. package/dist/js-script-debug/outputs.d.ts +20 -0
  100. package/dist/js-script-debug/outputs.d.ts.map +1 -0
  101. package/dist/js-script-debug/outputs.js +30 -0
  102. package/dist/js-script-debug/outputs.js.map +1 -0
  103. package/dist/js-script-debug/report.d.ts +15 -0
  104. package/dist/js-script-debug/report.d.ts.map +1 -0
  105. package/dist/js-script-debug/report.js +90 -0
  106. package/dist/js-script-debug/report.js.map +1 -0
  107. package/dist/js-script-debug/types.d.ts +63 -0
  108. package/dist/js-script-debug/types.d.ts.map +1 -0
  109. package/dist/js-script-debug/types.js +10 -0
  110. package/dist/js-script-debug/types.js.map +1 -0
  111. package/dist/js-script-debug/validate.d.ts +38 -0
  112. package/dist/js-script-debug/validate.d.ts.map +1 -0
  113. package/dist/js-script-debug/validate.js +137 -0
  114. package/dist/js-script-debug/validate.js.map +1 -0
  115. package/dist/message-stream.d.ts +33 -0
  116. package/dist/message-stream.d.ts.map +1 -0
  117. package/dist/message-stream.js +58 -0
  118. package/dist/message-stream.js.map +1 -0
  119. package/dist/normalize-graph.d.ts +13 -0
  120. package/dist/normalize-graph.d.ts.map +1 -0
  121. package/dist/normalize-graph.js +63 -0
  122. package/dist/normalize-graph.js.map +1 -0
  123. package/dist/output-names.d.ts +13 -0
  124. package/dist/output-names.d.ts.map +1 -0
  125. package/dist/output-names.js +13 -0
  126. package/dist/output-names.js.map +1 -0
  127. package/dist/predicates.d.ts +6 -0
  128. package/dist/predicates.d.ts.map +1 -0
  129. package/dist/predicates.js +6 -0
  130. package/dist/predicates.js.map +1 -0
  131. package/dist/preflight.d.ts +87 -0
  132. package/dist/preflight.d.ts.map +1 -0
  133. package/dist/preflight.js +139 -0
  134. package/dist/preflight.js.map +1 -0
  135. package/dist/provider-secret-key.d.ts +3 -0
  136. package/dist/provider-secret-key.d.ts.map +1 -0
  137. package/dist/provider-secret-key.js +7 -0
  138. package/dist/provider-secret-key.js.map +1 -0
  139. package/dist/service/app-debug-service.d.ts +78 -0
  140. package/dist/service/app-debug-service.d.ts.map +1 -0
  141. package/dist/service/app-debug-service.js +201 -0
  142. package/dist/service/app-debug-service.js.map +1 -0
  143. package/dist/service/app-run-server.d.ts +28 -0
  144. package/dist/service/app-run-server.d.ts.map +1 -0
  145. package/dist/service/app-run-server.js +104 -0
  146. package/dist/service/app-run-server.js.map +1 -0
  147. package/dist/service/debug-sessions.d.ts +158 -0
  148. package/dist/service/debug-sessions.d.ts.map +1 -0
  149. package/dist/service/debug-sessions.js +358 -0
  150. package/dist/service/debug-sessions.js.map +1 -0
  151. package/dist/service/index.d.ts +22 -0
  152. package/dist/service/index.d.ts.map +1 -0
  153. package/dist/service/index.js +17 -0
  154. package/dist/service/index.js.map +1 -0
  155. package/dist/service/job-progress.d.ts +40 -0
  156. package/dist/service/job-progress.d.ts.map +1 -0
  157. package/dist/service/job-progress.js +53 -0
  158. package/dist/service/job-progress.js.map +1 -0
  159. package/dist/service/workflow-run.d.ts +279 -0
  160. package/dist/service/workflow-run.d.ts.map +1 -0
  161. package/dist/service/workflow-run.js +598 -0
  162. package/dist/service/workflow-run.js.map +1 -0
  163. package/dist/service/workflow-workspace.d.ts +89 -0
  164. package/dist/service/workflow-workspace.d.ts.map +1 -0
  165. package/dist/service/workflow-workspace.js +160 -0
  166. package/dist/service/workflow-workspace.js.map +1 -0
  167. package/dist/session.d.ts +62 -0
  168. package/dist/session.d.ts.map +1 -0
  169. package/dist/session.js +353 -0
  170. package/dist/session.js.map +1 -0
  171. package/dist/sketch-debug/index.d.ts +11 -0
  172. package/dist/sketch-debug/index.d.ts.map +1 -0
  173. package/dist/sketch-debug/index.js +10 -0
  174. package/dist/sketch-debug/index.js.map +1 -0
  175. package/dist/sketch-debug/markdown.d.ts +6 -0
  176. package/dist/sketch-debug/markdown.d.ts.map +1 -0
  177. package/dist/sketch-debug/markdown.js +93 -0
  178. package/dist/sketch-debug/markdown.js.map +1 -0
  179. package/dist/sketch-debug/report.d.ts +15 -0
  180. package/dist/sketch-debug/report.d.ts.map +1 -0
  181. package/dist/sketch-debug/report.js +98 -0
  182. package/dist/sketch-debug/report.js.map +1 -0
  183. package/dist/sketch-debug/types.d.ts +62 -0
  184. package/dist/sketch-debug/types.d.ts.map +1 -0
  185. package/dist/sketch-debug/types.js +10 -0
  186. package/dist/sketch-debug/types.js.map +1 -0
  187. package/dist/sketch-debug/validate.d.ts +14 -0
  188. package/dist/sketch-debug/validate.d.ts.map +1 -0
  189. package/dist/sketch-debug/validate.js +478 -0
  190. package/dist/sketch-debug/validate.js.map +1 -0
  191. package/dist/supervisor.d.ts +45 -0
  192. package/dist/supervisor.d.ts.map +1 -0
  193. package/dist/supervisor.js +97 -0
  194. package/dist/supervisor.js.map +1 -0
  195. package/dist/timeline-debug/index.d.ts +11 -0
  196. package/dist/timeline-debug/index.d.ts.map +1 -0
  197. package/dist/timeline-debug/index.js +10 -0
  198. package/dist/timeline-debug/index.js.map +1 -0
  199. package/dist/timeline-debug/legibility.d.ts +23 -0
  200. package/dist/timeline-debug/legibility.d.ts.map +1 -0
  201. package/dist/timeline-debug/legibility.js +240 -0
  202. package/dist/timeline-debug/legibility.js.map +1 -0
  203. package/dist/timeline-debug/markdown.d.ts +6 -0
  204. package/dist/timeline-debug/markdown.d.ts.map +1 -0
  205. package/dist/timeline-debug/markdown.js +103 -0
  206. package/dist/timeline-debug/markdown.js.map +1 -0
  207. package/dist/timeline-debug/motion.d.ts +20 -0
  208. package/dist/timeline-debug/motion.d.ts.map +1 -0
  209. package/dist/timeline-debug/motion.js +362 -0
  210. package/dist/timeline-debug/motion.js.map +1 -0
  211. package/dist/timeline-debug/report.d.ts +16 -0
  212. package/dist/timeline-debug/report.d.ts.map +1 -0
  213. package/dist/timeline-debug/report.js +100 -0
  214. package/dist/timeline-debug/report.js.map +1 -0
  215. package/dist/timeline-debug/showcase.d.ts +7 -0
  216. package/dist/timeline-debug/showcase.d.ts.map +1 -0
  217. package/dist/timeline-debug/showcase.js +347 -0
  218. package/dist/timeline-debug/showcase.js.map +1 -0
  219. package/dist/timeline-debug/types.d.ts +64 -0
  220. package/dist/timeline-debug/types.d.ts.map +1 -0
  221. package/dist/timeline-debug/types.js +10 -0
  222. package/dist/timeline-debug/types.js.map +1 -0
  223. package/dist/timeline-debug/validate.d.ts +24 -0
  224. package/dist/timeline-debug/validate.d.ts.map +1 -0
  225. package/dist/timeline-debug/validate.js +1432 -0
  226. package/dist/timeline-debug/validate.js.map +1 -0
  227. package/dist/types.d.ts +211 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +2 -0
  230. package/dist/types.js.map +1 -0
  231. package/package.json +103 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Sketch debug vocabulary.
3
+ *
4
+ * One report shape for "is this image document sound, and what did a scripted
5
+ * edit session leave behind" — shared by the CLI `sketch validate` /
6
+ * `sketch debug` commands and any future server surface, the same way
7
+ * `../timeline-debug/types.ts` is shared by the timeline surfaces.
8
+ */
9
+ import type { DebugVerdict } from "../debug/types.js";
10
+ /** One finding against an image document. */
11
+ export interface SketchDebugIssue {
12
+ severity: "error" | "warning";
13
+ /** Stable machine code, e.g. `field_stripped`, `binding_layer_missing`. */
14
+ code: string;
15
+ message: string;
16
+ layerId?: string;
17
+ /** JSON path of the offending field, for schema/round-trip findings. */
18
+ path?: string;
19
+ }
20
+ export interface SketchValidation {
21
+ /** True when there are no errors. Warnings do not clear `ok`. */
22
+ ok: boolean;
23
+ errors: SketchDebugIssue[];
24
+ warnings: SketchDebugIssue[];
25
+ }
26
+ /** One executed step of a `--interact` script. */
27
+ export interface SketchInteractionRecord {
28
+ /** Tool name as invoked (canonical `ui_sketch_*` form). */
29
+ tool: string;
30
+ input: unknown;
31
+ ok: boolean;
32
+ result?: unknown;
33
+ error?: string;
34
+ }
35
+ export interface SketchDebugTarget {
36
+ kind: "file" | "id";
37
+ ref: string;
38
+ name?: string;
39
+ }
40
+ export interface SketchDocumentMeta {
41
+ width: number;
42
+ height: number;
43
+ backgroundColor: string;
44
+ layerCount: number;
45
+ bindingCount: number;
46
+ }
47
+ export interface SketchDebugReport {
48
+ target: SketchDebugTarget;
49
+ meta: SketchDocumentMeta;
50
+ /** Static validation of the input document. */
51
+ validation: SketchValidation;
52
+ /** Scripted edit session, when one ran. */
53
+ interactions: SketchInteractionRecord[];
54
+ /** Bridge snapshot after the script (SketchBridgeFinalState shape). */
55
+ finalState?: unknown;
56
+ /** Validation of the document reconstructed from the final state. */
57
+ finalValidation?: SketchValidation;
58
+ /** What a headless run cannot answer (pixels, rendering, assets …). */
59
+ notSimulated: string[];
60
+ verdict: DebugVerdict;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sketch-debug/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,+CAA+C;IAC/C,UAAU,EAAE,gBAAgB,CAAC;IAC7B,2CAA2C;IAC3C,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,uEAAuE;IACvE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC;CACvB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Sketch debug vocabulary.
3
+ *
4
+ * One report shape for "is this image document sound, and what did a scripted
5
+ * edit session leave behind" — shared by the CLI `sketch validate` /
6
+ * `sketch debug` commands and any future server surface, the same way
7
+ * `../timeline-debug/types.ts` is shared by the timeline surfaces.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sketch-debug/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,14 @@
1
+ import type { SketchValidation } from "./types.js";
2
+ /** Canvas settings the row carries beside the document. */
3
+ export interface SketchValidationMeta {
4
+ width?: number;
5
+ height?: number;
6
+ backgroundColor?: string;
7
+ }
8
+ /**
9
+ * Validate a parsed-JSON image document (`{sketch, layerBindings}`). `raw` is
10
+ * untrusted: a document that is not an object, or has no `sketch`, is reported
11
+ * and the rest of the pass is skipped, since there is nothing left to read.
12
+ */
13
+ export declare function validateSketchDocument(raw: unknown, meta?: SketchValidationMeta): SketchValidation;
14
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/sketch-debug/validate.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAErE,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkiBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,IAAI,CAAC,EAAE,oBAAoB,GAC1B,gBAAgB,CAkDlB"}
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Static validation of a sketch (image document).
3
+ *
4
+ * Pure and structural: everything here is decidable from the document alone —
5
+ * no database, no assets, no canvas. Layer bitmaps stay opaque: a layer's
6
+ * `data` is a serialized raster payload or a data URL, and nothing offline
7
+ * decides whether it still decodes, so pixel decode is out of scope.
8
+ *
9
+ * Unlike the timeline validator, a schema failure does not stop the structural
10
+ * pass. `imageDocumentData` leaves layers as `z.array(z.unknown())`, so almost
11
+ * everything checked here is read by this module anyway; a document that fails
12
+ * on one binding field should still report the layer stack around it.
13
+ */
14
+ import { BLEND_MODE_TUPLE } from "@nodetool-ai/gpu";
15
+ import { imageDocumentData, sketchLayerLike } from "@nodetool-ai/protocol/api-schemas/sketch.js";
16
+ import { isFiniteNumber, isNonBlankString, isNonEmptyString, isPositiveFiniteNumber, isString } from "../predicates.js";
17
+ const BLEND_MODES = new Set(BLEND_MODE_TUPLE);
18
+ const BINDING_KINDS = new Set([
19
+ "workflow",
20
+ "text-to-image",
21
+ "image-to-image",
22
+ "inpaint"
23
+ ]);
24
+ const BINDING_STATUSES = new Set([
25
+ "draft",
26
+ "queued",
27
+ "generating",
28
+ "generated",
29
+ "stale",
30
+ "failed",
31
+ "locked",
32
+ "missing"
33
+ ]);
34
+ const VERSION_STATUSES = new Set(["success", "failed", "cancelled"]);
35
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
36
+ const asArray = (value) => Array.isArray(value) ? value : [];
37
+ /**
38
+ * A binding issue, with `layerId` left out when the binding names no layer.
39
+ * Kept in one place so every binding finding carries the same field order.
40
+ */
41
+ function bindingIssue(severity, code, message, layerId, path) {
42
+ const issue = { severity, code, message };
43
+ if (layerId) {
44
+ issue.layerId = layerId;
45
+ }
46
+ issue.path = path;
47
+ return issue;
48
+ }
49
+ /** Collect every leaf/branch path the parse output dropped from the input. */
50
+ function collectStrippedPaths(input, output, path, found) {
51
+ if (Array.isArray(input)) {
52
+ if (!Array.isArray(output))
53
+ return;
54
+ input.forEach((item, index) => {
55
+ collectStrippedPaths(item, output[index], `${path}[*]`, found);
56
+ });
57
+ return;
58
+ }
59
+ if (!isRecord(input) || !isRecord(output))
60
+ return;
61
+ for (const [key, value] of Object.entries(input)) {
62
+ // An explicit `undefined` carries nothing, so its absence loses nothing.
63
+ if (value === undefined)
64
+ continue;
65
+ const childPath = path ? `${path}.${key}` : key;
66
+ if (!(key in output) || output[key] === undefined) {
67
+ found.add(childPath);
68
+ continue;
69
+ }
70
+ collectStrippedPaths(value, output[key], childPath, found);
71
+ }
72
+ }
73
+ /**
74
+ * Fields the schema silently drops. A stripped field survives in memory and
75
+ * disappears on the next autosave round trip, so it never fails loudly — the
76
+ * only way to see it is to diff the input against what Zod handed back.
77
+ *
78
+ * The document schema keeps layers as `unknown`, so nothing inside a layer is
79
+ * ever reported here; layer fields are checked directly instead.
80
+ */
81
+ function checkFieldStripping(raw, parsed) {
82
+ const paths = new Set();
83
+ collectStrippedPaths(raw, parsed, "", paths);
84
+ return [...paths].sort().map((path) => ({
85
+ severity: "warning",
86
+ code: "field_stripped",
87
+ path,
88
+ message: `\`${path}\` is present in the document but absent after schema parse — the schema strips it, so it is lost on the next save.`
89
+ }));
90
+ }
91
+ function checkSchema(raw) {
92
+ const result = imageDocumentData.safeParse(raw);
93
+ if (result.success) {
94
+ return {
95
+ issues: checkFieldStripping(raw, result.data),
96
+ parsed: result.data
97
+ };
98
+ }
99
+ const issues = result.error.issues
100
+ .slice(0, 25)
101
+ .map((issue) => {
102
+ const path = issue.path.map((part) => String(part)).join(".");
103
+ const schemaIssue = {
104
+ severity: "error",
105
+ code: "schema_invalid",
106
+ message: `${path || "(root)"}: ${issue.message}`
107
+ };
108
+ if (path) {
109
+ schemaIssue.path = path;
110
+ }
111
+ return schemaIssue;
112
+ });
113
+ if (issues.length === 0) {
114
+ issues.push({
115
+ severity: "error",
116
+ code: "schema_invalid",
117
+ message: "Document does not match the image-document schema."
118
+ });
119
+ }
120
+ return { issues, parsed: undefined };
121
+ }
122
+ function checkCanvas(sketch, meta) {
123
+ const issues = [];
124
+ const canvas = isRecord(sketch.canvas) ? sketch.canvas : undefined;
125
+ if (!canvas) {
126
+ issues.push({
127
+ severity: "error",
128
+ code: "canvas_missing",
129
+ message: "The sketch has no `canvas` — nothing declares the artboard size.",
130
+ path: "sketch.canvas"
131
+ });
132
+ return issues;
133
+ }
134
+ for (const axis of ["width", "height"]) {
135
+ if (!isPositiveFiniteNumber(canvas[axis])) {
136
+ issues.push({
137
+ severity: "error",
138
+ code: "canvas_invalid",
139
+ message: `Canvas ${axis} is ${JSON.stringify(canvas[axis])} — the artboard must have a positive ${axis}.`,
140
+ path: `sketch.canvas.${axis}`
141
+ });
142
+ }
143
+ }
144
+ if (canvas.backgroundColor !== undefined &&
145
+ !isString(canvas.backgroundColor)) {
146
+ issues.push({
147
+ severity: "error",
148
+ code: "canvas_invalid",
149
+ message: `Canvas backgroundColor is ${JSON.stringify(canvas.backgroundColor)} — expected a color string.`,
150
+ path: "sketch.canvas.backgroundColor"
151
+ });
152
+ }
153
+ // The row's width/height are what the editor opens and what thumbnails are
154
+ // cut at; a document that disagrees renders at one size and is stored at
155
+ // another.
156
+ for (const axis of ["width", "height"]) {
157
+ const outer = meta?.[axis];
158
+ if (isPositiveFiniteNumber(outer) &&
159
+ isPositiveFiniteNumber(canvas[axis]) &&
160
+ outer !== canvas[axis]) {
161
+ issues.push({
162
+ severity: "warning",
163
+ code: "canvas_size_mismatch",
164
+ message: `Canvas ${axis} is ${String(canvas[axis])} but the image document records ${String(outer)}.`,
165
+ path: `sketch.canvas.${axis}`
166
+ });
167
+ }
168
+ }
169
+ return issues;
170
+ }
171
+ function readLayers(sketch) {
172
+ const issues = [];
173
+ const layers = [];
174
+ const seen = new Set();
175
+ asArray(sketch.layers).forEach((entry, index) => {
176
+ const path = `sketch.layers[${index}]`;
177
+ if (!isRecord(entry)) {
178
+ issues.push({
179
+ severity: "error",
180
+ code: "layer_invalid",
181
+ message: `Layer at index ${index} is ${JSON.stringify(entry)} — expected an object.`,
182
+ path
183
+ });
184
+ return;
185
+ }
186
+ const parsed = sketchLayerLike.safeParse(entry);
187
+ if (!parsed.success) {
188
+ for (const issue of parsed.error.issues.slice(0, 5)) {
189
+ const field = issue.path.map((part) => String(part)).join(".");
190
+ const layerIssue = {
191
+ severity: "error",
192
+ code: "layer_invalid",
193
+ message: `Layer at index ${index}: ${field || "(root)"}: ${issue.message}`,
194
+ path: field ? `${path}.${field}` : path
195
+ };
196
+ if (isString(entry.id)) {
197
+ layerIssue.layerId = entry.id;
198
+ }
199
+ issues.push(layerIssue);
200
+ }
201
+ if (!isNonEmptyString(entry.id))
202
+ return;
203
+ }
204
+ const id = String(entry.id);
205
+ const label = isNonEmptyString(entry.name) ? entry.name : id;
206
+ if (seen.has(id)) {
207
+ issues.push({
208
+ severity: "error",
209
+ code: "duplicate_layer_id",
210
+ message: `Duplicate layer id "${id}" — every reference to it is ambiguous.`,
211
+ layerId: id,
212
+ path
213
+ });
214
+ }
215
+ seen.add(id);
216
+ layers.push({
217
+ id,
218
+ label,
219
+ type: isString(entry.type) ? entry.type : "raster",
220
+ record: entry
221
+ });
222
+ });
223
+ return { layers, issues };
224
+ }
225
+ function checkLayer(layer, ids) {
226
+ const issues = [];
227
+ const { record, id, label } = layer;
228
+ const { opacity } = record;
229
+ if (opacity !== undefined) {
230
+ if (!isFiniteNumber(opacity) ||
231
+ opacity < 0 ||
232
+ opacity > 1) {
233
+ issues.push({
234
+ severity: "error",
235
+ code: "layer_opacity_invalid",
236
+ message: `Layer "${label}" has opacity ${JSON.stringify(opacity)} — compositing expects a number in [0, 1].`,
237
+ layerId: id,
238
+ path: "opacity"
239
+ });
240
+ }
241
+ }
242
+ const { blendMode } = record;
243
+ if (blendMode !== undefined && !BLEND_MODES.has(String(blendMode))) {
244
+ issues.push({
245
+ severity: "error",
246
+ code: "unknown_blend_mode",
247
+ message: `Layer "${label}" blends with "${String(blendMode)}", which no NodeTool compositor ships.`,
248
+ layerId: id,
249
+ path: "blendMode"
250
+ });
251
+ }
252
+ const bounds = record.contentBounds;
253
+ if (bounds !== undefined) {
254
+ if (!isRecord(bounds)) {
255
+ issues.push({
256
+ severity: "error",
257
+ code: "content_bounds_invalid",
258
+ message: `Layer "${label}" has contentBounds ${JSON.stringify(bounds)} — expected an object.`,
259
+ layerId: id,
260
+ path: "contentBounds"
261
+ });
262
+ }
263
+ else {
264
+ for (const axis of ["width", "height"]) {
265
+ const value = bounds[axis];
266
+ if (!isFiniteNumber(value) || value < 0) {
267
+ issues.push({
268
+ severity: "error",
269
+ code: "content_bounds_invalid",
270
+ message: `Layer "${label}" has contentBounds.${axis} ${JSON.stringify(value)} — a backing raster cannot be smaller than nothing.`,
271
+ layerId: id,
272
+ path: `contentBounds.${axis}`
273
+ });
274
+ }
275
+ }
276
+ }
277
+ }
278
+ const { parentId } = record;
279
+ if (isNonEmptyString(parentId) && !ids.has(parentId)) {
280
+ issues.push({
281
+ severity: "warning",
282
+ code: "layer_parent_missing",
283
+ message: `Layer "${label}" names parent "${parentId}", which the document does not contain — it renders at the root.`,
284
+ layerId: id,
285
+ path: "parentId"
286
+ });
287
+ }
288
+ return issues;
289
+ }
290
+ function checkSelection(sketch, layers, ids) {
291
+ const issues = [];
292
+ if (layers.length === 0) {
293
+ issues.push({
294
+ severity: "warning",
295
+ code: "document_empty",
296
+ message: "The sketch has no layers — nothing composites onto the canvas.",
297
+ path: "sketch.layers"
298
+ });
299
+ }
300
+ const active = sketch.activeLayerId;
301
+ if (layers.length > 0) {
302
+ if (!isNonEmptyString(active)) {
303
+ issues.push({
304
+ severity: "error",
305
+ code: "active_layer_missing",
306
+ message: `activeLayerId is ${JSON.stringify(active)} — edits have no layer to land on.`,
307
+ path: "sketch.activeLayerId"
308
+ });
309
+ }
310
+ else if (!ids.has(active)) {
311
+ issues.push({
312
+ severity: "error",
313
+ code: "active_layer_missing",
314
+ message: `activeLayerId "${active}" names a layer the document does not contain.`,
315
+ layerId: active,
316
+ path: "sketch.activeLayerId"
317
+ });
318
+ }
319
+ }
320
+ const mask = sketch.maskLayerId;
321
+ if (isNonEmptyString(mask) && !ids.has(mask)) {
322
+ issues.push({
323
+ severity: "warning",
324
+ code: "mask_layer_missing",
325
+ message: `maskLayerId "${mask}" names a layer the document does not contain — masked edits fall back to the whole canvas.`,
326
+ layerId: mask,
327
+ path: "sketch.maskLayerId"
328
+ });
329
+ }
330
+ return issues;
331
+ }
332
+ function checkBindings(document, ids) {
333
+ const issues = [];
334
+ const raw = document.layerBindings;
335
+ if (raw === undefined || !Array.isArray(raw)) {
336
+ issues.push({
337
+ severity: "error",
338
+ code: "bindings_missing",
339
+ message: "`layerBindings` is missing or not an array — the document does not declare how any layer generates.",
340
+ path: "layerBindings"
341
+ });
342
+ return issues;
343
+ }
344
+ const bound = new Set();
345
+ raw.forEach((entry, index) => {
346
+ const path = `layerBindings[${index}]`;
347
+ if (!isRecord(entry)) {
348
+ issues.push({
349
+ severity: "error",
350
+ code: "binding_invalid",
351
+ message: `Binding at index ${index} is ${JSON.stringify(entry)} — expected an object.`,
352
+ path
353
+ });
354
+ return;
355
+ }
356
+ const layerId = isString(entry.layerId) ? entry.layerId : "";
357
+ if (layerId === "") {
358
+ issues.push({
359
+ severity: "error",
360
+ code: "binding_invalid",
361
+ message: `Binding at index ${index} has no \`layerId\` — nothing says which layer it generates.`,
362
+ path: `${path}.layerId`
363
+ });
364
+ }
365
+ else if (!ids.has(layerId)) {
366
+ issues.push({
367
+ severity: "error",
368
+ code: "binding_layer_missing",
369
+ message: `Binding at index ${index} generates layer "${layerId}", which the document does not contain.`,
370
+ layerId,
371
+ path: `${path}.layerId`
372
+ });
373
+ }
374
+ else if (bound.has(layerId)) {
375
+ issues.push({
376
+ severity: "error",
377
+ code: "duplicate_binding",
378
+ message: `Layer "${layerId}" carries more than one binding — which one generates it is undefined.`,
379
+ layerId,
380
+ path: `${path}.layerId`
381
+ });
382
+ }
383
+ if (layerId !== "")
384
+ bound.add(layerId);
385
+ // Absent `kind` is legacy data, which the editor reads as "workflow".
386
+ const kind = entry.kind === undefined ? "workflow" : String(entry.kind);
387
+ if (!BINDING_KINDS.has(kind)) {
388
+ issues.push(bindingIssue("error", "binding_kind_invalid", `Binding for "${layerId}" has kind "${kind}" — expected one of ${[...BINDING_KINDS].join(", ")}.`, layerId, `${path}.kind`));
389
+ }
390
+ if (kind === "workflow") {
391
+ const workflowId = entry.workflowId;
392
+ if (!isNonEmptyString(workflowId)) {
393
+ issues.push(bindingIssue("error", "binding_workflow_missing", `Workflow binding for "${layerId}" names no workflowId — nothing can produce its pixels.`, layerId, `${path}.workflowId`));
394
+ }
395
+ }
396
+ else {
397
+ const prompt = entry.prompt;
398
+ if (!isNonBlankString(prompt)) {
399
+ issues.push(bindingIssue("warning", "binding_incomplete", `${kind} binding for "${layerId}" carries no prompt — a generation would run on nothing.`, layerId, `${path}.prompt`));
400
+ }
401
+ const source = entry.sourceLayerId;
402
+ if ((kind === "image-to-image" || kind === "inpaint") &&
403
+ isNonEmptyString(source) &&
404
+ !ids.has(source)) {
405
+ issues.push(bindingIssue("warning", "binding_source_layer_missing", `${kind} binding for "${layerId}" reads source layer "${source}", which the document does not contain.`, layerId, `${path}.sourceLayerId`));
406
+ }
407
+ }
408
+ const status = entry.status;
409
+ if (!isString(status) || !BINDING_STATUSES.has(status)) {
410
+ issues.push(bindingIssue("error", "binding_status_invalid", `Binding for "${layerId}" has status ${JSON.stringify(status)} — expected one of ${[...BINDING_STATUSES].join(", ")}.`, layerId, `${path}.status`));
411
+ }
412
+ const versions = entry.versions;
413
+ if (versions !== undefined && !Array.isArray(versions)) {
414
+ issues.push(bindingIssue("error", "binding_invalid", `Binding for "${layerId}" has \`versions\` ${JSON.stringify(versions)} — expected an array.`, layerId, `${path}.versions`));
415
+ }
416
+ asArray(versions).forEach((version, versionIndex) => {
417
+ if (!isRecord(version))
418
+ return;
419
+ const versionStatus = version.status;
420
+ if (!isString(versionStatus) ||
421
+ !VERSION_STATUSES.has(versionStatus)) {
422
+ issues.push(bindingIssue("error", "version_status_invalid", `Version ${versionIndex} of the binding for "${layerId}" has status ${JSON.stringify(versionStatus)} — expected one of ${[...VERSION_STATUSES].join(", ")}.`, layerId, `${path}.versions[${versionIndex}].status`));
423
+ }
424
+ });
425
+ });
426
+ return issues;
427
+ }
428
+ /**
429
+ * Validate a parsed-JSON image document (`{sketch, layerBindings}`). `raw` is
430
+ * untrusted: a document that is not an object, or has no `sketch`, is reported
431
+ * and the rest of the pass is skipped, since there is nothing left to read.
432
+ */
433
+ export function validateSketchDocument(raw, meta) {
434
+ if (!isRecord(raw)) {
435
+ return {
436
+ ok: false,
437
+ errors: [
438
+ {
439
+ severity: "error",
440
+ code: "document_invalid",
441
+ message: `Document is ${JSON.stringify(raw)} — expected an object carrying \`sketch\` and \`layerBindings\`.`
442
+ }
443
+ ],
444
+ warnings: []
445
+ };
446
+ }
447
+ const { issues: schemaIssues } = checkSchema(raw);
448
+ if (!isRecord(raw.sketch)) {
449
+ return {
450
+ ok: false,
451
+ errors: [
452
+ ...schemaIssues.filter((issue) => issue.severity === "error"),
453
+ {
454
+ severity: "error",
455
+ code: "sketch_missing",
456
+ message: "Document has no `sketch` object — there is no layer stack to check.",
457
+ path: "sketch"
458
+ }
459
+ ],
460
+ warnings: schemaIssues.filter((issue) => issue.severity === "warning")
461
+ };
462
+ }
463
+ const sketch = raw.sketch;
464
+ const { layers, issues: layerIssues } = readLayers(sketch);
465
+ const ids = new Set(layers.map((layer) => layer.id));
466
+ const issues = [
467
+ ...schemaIssues,
468
+ ...checkCanvas(sketch, meta),
469
+ ...layerIssues,
470
+ ...layers.flatMap((layer) => checkLayer(layer, ids)),
471
+ ...checkSelection(sketch, layers, ids),
472
+ ...checkBindings(raw, ids)
473
+ ];
474
+ const errors = issues.filter((issue) => issue.severity === "error");
475
+ const warnings = issues.filter((issue) => issue.severity === "warning");
476
+ return { ok: errors.length === 0, errors, warnings };
477
+ }
478
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/sketch-debug/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Reporting for supervised runs: one vocabulary for "what did the supervisor
3
+ * do", shared by every surface that prints or serializes it.
4
+ *
5
+ * The record itself is `Intervention` from `@nodetool-ai/protocol` — minted by
6
+ * the kernel, carried on `RunResult.interventions` and on every
7
+ * `supervisor_decision` message. Nothing here reshapes it; these are the
8
+ * rollup and the two lines a surface prints.
9
+ *
10
+ * See docs/workflow-supervisor-design.md §4 and §7.
11
+ */
12
+ import type { DecidedBy, Intervention, VerdictAction } from "@nodetool-ai/protocol";
13
+ /** The shield that marks a supervised line. */
14
+ export declare const INTERVENTION_MARK = "\u26E8";
15
+ /** Per-run rollup of what supervision decided and what it cost. */
16
+ export interface SupervisedRunSummary {
17
+ /** Interventions recorded, whoever decided them. */
18
+ decisions: number;
19
+ /** Decisions that actually reached the model — the ones that cost money. */
20
+ agentDecisions: number;
21
+ byAction: Record<VerdictAction, number>;
22
+ byDecider: Record<DecidedBy, number>;
23
+ /** Supervisor spend for the run, in USD. */
24
+ costUsd: number;
25
+ }
26
+ export declare function summarizeInterventions(interventions: readonly Intervention[]): SupervisedRunSummary;
27
+ /**
28
+ * One inline line per intervention, e.g.
29
+ * `⛨ fetch-item [3] skipped — HTTP 404 (agent, $0.0041)`.
30
+ */
31
+ export declare function formatInterventionLine(intervention: Intervention): string;
32
+ /**
33
+ * The run's closing supervised line, e.g.
34
+ * `⛨ supervised: 3 decisions, 2 skipped, 1 retried, +$0.0200`.
35
+ *
36
+ * Item counts (`198/200 items`) are a fan-out property no run-level record
37
+ * carries — the kernel counts invocations, not the batch a user thinks in —
38
+ * so a caller that knows its item total passes it in; otherwise the line
39
+ * reports decisions.
40
+ */
41
+ export declare function formatSupervisedSummary(summary: SupervisedRunSummary, items?: {
42
+ total: number;
43
+ produced: number;
44
+ }): string;
45
+ //# sourceMappingURL=supervisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEpF,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,WAAM,CAAC;AAErC,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,SAAS,YAAY,EAAE,GACrC,oBAAoB,CAgBtB;AAuBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAYzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1C,MAAM,CAmBR"}