@pasko70/pibo 3.2.7 → 3.4.0

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 (254) hide show
  1. package/dist/agent-runtime/capabilities.js +5 -0
  2. package/dist/agent-runtime/contract.js +2 -0
  3. package/dist/agent-runtime/routed-session.js +68 -11
  4. package/dist/agent-runtimes/codex-native/adapter.js +4 -1
  5. package/dist/agent-runtimes/codex-native/process.js +1 -1
  6. package/dist/agent-runtimes/codex-native/protocol-version.js +6 -6
  7. package/dist/agent-runtimes/codex-native/thread.js +26 -4
  8. package/dist/agent-runtimes/omp/adapter.js +1 -0
  9. package/dist/agent-runtimes/omp/process.js +23 -3
  10. package/dist/agent-runtimes/omp/protocol-version.js +2 -0
  11. package/dist/agent-runtimes/pi/adapter.js +5 -1
  12. package/dist/agent-runtimes/pi/model-catalog.js +2 -2
  13. package/dist/agent-runtimes/pi/routed-session.js +53 -5
  14. package/dist/agent-runtimes/pi/runtime.js +6 -3
  15. package/dist/apps/chat/chat-api-routes.js +12 -38
  16. package/dist/apps/chat/chat-request-normalizers.js +15 -50
  17. package/dist/apps/chat/data/legacy-project-migration.js +492 -0
  18. package/dist/apps/chat/data/room-service.js +2 -2
  19. package/dist/apps/chat/data/workflow-session-model.js +1 -0
  20. package/dist/apps/chat/data/workflow-session-service.js +352 -0
  21. package/dist/apps/chat/rooms.js +1 -1
  22. package/dist/apps/chat/session-metadata.js +30 -0
  23. package/dist/apps/chat/trace.js +15 -2
  24. package/dist/apps/chat/types/rooms.js +30 -0
  25. package/dist/apps/chat/web-app.js +355 -651
  26. package/dist/apps/chat/workflow-catalog.js +18 -18
  27. package/dist/apps/chat/{project-workflow-human-actions.js → workflow-human-actions.js} +14 -14
  28. package/dist/apps/chat/workflow-manual-trigger-runtime.js +5 -1
  29. package/dist/apps/chat/workflow-persistence.js +20 -28
  30. package/dist/apps/chat/{project-workflow-sessions.js → workflow-sessions.js} +18 -17
  31. package/dist/apps/chat-ui/assets/{dist-ENXYFYda.js → dist-AhtdAETR.js} +1 -1
  32. package/dist/apps/chat-ui/assets/{dist-CGgUuVB6.js → dist-Bk_L1qbJ.js} +1 -1
  33. package/dist/apps/chat-ui/assets/{dist-DG6T1maU.js → dist-Dyp6sLQn.js} +1 -1
  34. package/dist/apps/chat-ui/assets/{dist-CFtZTGHa.js → dist-jVaiGXFD.js} +1 -1
  35. package/dist/apps/chat-ui/assets/{dist-BikaGikn.js → dist-t25moyJS.js} +1 -1
  36. package/dist/apps/chat-ui/assets/index-CZjNw-aK.js +228 -0
  37. package/dist/apps/chat-ui/assets/index-CcEjFITM.css +1 -0
  38. package/dist/apps/chat-ui/index.html +2 -2
  39. package/dist/apps/chat-vscode-web/assets/index-Spj6M0tn.js +43 -0
  40. package/dist/apps/chat-vscode-web/index.html +1 -1
  41. package/dist/compute/pool/cli.js +1 -1
  42. package/dist/compute/pool/seeds.js +2 -3
  43. package/dist/config/config.js +1 -1
  44. package/dist/core/session-router.js +19 -10
  45. package/dist/debug/agents.js +9 -3
  46. package/dist/plugins/builtin.js +2 -0
  47. package/dist/plugins/registry.js +1 -0
  48. package/dist/previews/cli.js +154 -79
  49. package/dist/previews/compute-worker.js +37 -0
  50. package/dist/previews/config.js +2 -1
  51. package/dist/previews/migrations/session-ownership.js +7 -0
  52. package/dist/previews/proxy.js +4 -2
  53. package/dist/previews/public-setup.js +108 -0
  54. package/dist/previews/store.js +20 -13
  55. package/dist/previews/web-app.js +12 -2
  56. package/dist/providers/openai-gpt56.js +41 -3
  57. package/dist/sessions/workflow-session-kind.js +0 -3
  58. package/dist/subagents/context.js +2 -2
  59. package/dist/subagents/observation-query.js +49 -6
  60. package/dist/subagents/observation-text-regex.js +124 -0
  61. package/dist/subagents/tool.js +3 -2
  62. package/dist/tools/hashline.js +64 -0
  63. package/npm-shrinkwrap.json +786 -284
  64. package/package.json +11 -6
  65. package/packages/workflows/README.md +21 -0
  66. package/packages/workflows/dist/api/index.d.ts +48 -0
  67. package/packages/workflows/dist/api/index.d.ts.map +1 -0
  68. package/packages/workflows/dist/api/index.js +96 -0
  69. package/packages/workflows/dist/api/index.js.map +1 -0
  70. package/packages/workflows/dist/definition-hash.d.ts +4 -0
  71. package/packages/workflows/dist/definition-hash.d.ts.map +1 -0
  72. package/packages/workflows/dist/definition-hash.js +27 -0
  73. package/packages/workflows/dist/definition-hash.js.map +1 -0
  74. package/packages/workflows/dist/fixtures/index.d.ts +39 -0
  75. package/packages/workflows/dist/fixtures/index.d.ts.map +1 -0
  76. package/packages/workflows/dist/fixtures/index.js +608 -0
  77. package/packages/workflows/dist/fixtures/index.js.map +1 -0
  78. package/packages/workflows/dist/index.d.ts +16 -0
  79. package/packages/workflows/dist/index.d.ts.map +1 -0
  80. package/packages/workflows/dist/index.js +10 -0
  81. package/packages/workflows/dist/index.js.map +1 -0
  82. package/packages/workflows/dist/inspection/index.d.ts +47 -0
  83. package/packages/workflows/dist/inspection/index.d.ts.map +1 -0
  84. package/packages/workflows/dist/inspection/index.js +131 -0
  85. package/packages/workflows/dist/inspection/index.js.map +1 -0
  86. package/packages/workflows/dist/registry/index.d.ts +30 -0
  87. package/packages/workflows/dist/registry/index.d.ts.map +1 -0
  88. package/packages/workflows/dist/registry/index.js +161 -0
  89. package/packages/workflows/dist/registry/index.js.map +1 -0
  90. package/packages/workflows/dist/runtime/adapter-node.d.ts +28 -0
  91. package/packages/workflows/dist/runtime/adapter-node.d.ts.map +1 -0
  92. package/packages/workflows/dist/runtime/adapter-node.js +172 -0
  93. package/packages/workflows/dist/runtime/adapter-node.js.map +1 -0
  94. package/packages/workflows/dist/runtime/agent-node.d.ts +32 -0
  95. package/packages/workflows/dist/runtime/agent-node.d.ts.map +1 -0
  96. package/packages/workflows/dist/runtime/agent-node.js +231 -0
  97. package/packages/workflows/dist/runtime/agent-node.js.map +1 -0
  98. package/packages/workflows/dist/runtime/agent-runtime.d.ts +25 -0
  99. package/packages/workflows/dist/runtime/agent-runtime.d.ts.map +1 -0
  100. package/packages/workflows/dist/runtime/agent-runtime.js +111 -0
  101. package/packages/workflows/dist/runtime/agent-runtime.js.map +1 -0
  102. package/packages/workflows/dist/runtime/code-node.d.ts +31 -0
  103. package/packages/workflows/dist/runtime/code-node.d.ts.map +1 -0
  104. package/packages/workflows/dist/runtime/code-node.js +223 -0
  105. package/packages/workflows/dist/runtime/code-node.js.map +1 -0
  106. package/packages/workflows/dist/runtime/dispatch-failures.d.ts +36 -0
  107. package/packages/workflows/dist/runtime/dispatch-failures.d.ts.map +1 -0
  108. package/packages/workflows/dist/runtime/dispatch-failures.js +80 -0
  109. package/packages/workflows/dist/runtime/dispatch-failures.js.map +1 -0
  110. package/packages/workflows/dist/runtime/edge-payloads.d.ts +3 -0
  111. package/packages/workflows/dist/runtime/edge-payloads.d.ts.map +1 -0
  112. package/packages/workflows/dist/runtime/edge-payloads.js +11 -0
  113. package/packages/workflows/dist/runtime/edge-payloads.js.map +1 -0
  114. package/packages/workflows/dist/runtime/edge-transfer.d.ts +39 -0
  115. package/packages/workflows/dist/runtime/edge-transfer.d.ts.map +1 -0
  116. package/packages/workflows/dist/runtime/edge-transfer.js +356 -0
  117. package/packages/workflows/dist/runtime/edge-transfer.js.map +1 -0
  118. package/packages/workflows/dist/runtime/human-action.d.ts +43 -0
  119. package/packages/workflows/dist/runtime/human-action.d.ts.map +1 -0
  120. package/packages/workflows/dist/runtime/human-action.js +231 -0
  121. package/packages/workflows/dist/runtime/human-action.js.map +1 -0
  122. package/packages/workflows/dist/runtime/human-node.d.ts +27 -0
  123. package/packages/workflows/dist/runtime/human-node.d.ts.map +1 -0
  124. package/packages/workflows/dist/runtime/human-node.js +126 -0
  125. package/packages/workflows/dist/runtime/human-node.js.map +1 -0
  126. package/packages/workflows/dist/runtime/ids.d.ts +2 -0
  127. package/packages/workflows/dist/runtime/ids.d.ts.map +1 -0
  128. package/packages/workflows/dist/runtime/ids.js +4 -0
  129. package/packages/workflows/dist/runtime/ids.js.map +1 -0
  130. package/packages/workflows/dist/runtime/index.d.ts +23 -0
  131. package/packages/workflows/dist/runtime/index.d.ts.map +1 -0
  132. package/packages/workflows/dist/runtime/index.js +12 -0
  133. package/packages/workflows/dist/runtime/index.js.map +1 -0
  134. package/packages/workflows/dist/runtime/manual-trigger.d.ts +51 -0
  135. package/packages/workflows/dist/runtime/manual-trigger.d.ts.map +1 -0
  136. package/packages/workflows/dist/runtime/manual-trigger.js +403 -0
  137. package/packages/workflows/dist/runtime/manual-trigger.js.map +1 -0
  138. package/packages/workflows/dist/runtime/nested-workflow-node.d.ts +48 -0
  139. package/packages/workflows/dist/runtime/nested-workflow-node.d.ts.map +1 -0
  140. package/packages/workflows/dist/runtime/nested-workflow-node.js +246 -0
  141. package/packages/workflows/dist/runtime/nested-workflow-node.js.map +1 -0
  142. package/packages/workflows/dist/runtime/one-node-agent.d.ts +34 -0
  143. package/packages/workflows/dist/runtime/one-node-agent.d.ts.map +1 -0
  144. package/packages/workflows/dist/runtime/one-node-agent.js +334 -0
  145. package/packages/workflows/dist/runtime/one-node-agent.js.map +1 -0
  146. package/packages/workflows/dist/runtime/persistence.d.ts +9 -0
  147. package/packages/workflows/dist/runtime/persistence.d.ts.map +1 -0
  148. package/packages/workflows/dist/runtime/persistence.js +67 -0
  149. package/packages/workflows/dist/runtime/persistence.js.map +1 -0
  150. package/packages/workflows/dist/runtime/pibo-routing.d.ts +126 -0
  151. package/packages/workflows/dist/runtime/pibo-routing.d.ts.map +1 -0
  152. package/packages/workflows/dist/runtime/pibo-routing.js +96 -0
  153. package/packages/workflows/dist/runtime/pibo-routing.js.map +1 -0
  154. package/packages/workflows/dist/runtime/prompts.d.ts +20 -0
  155. package/packages/workflows/dist/runtime/prompts.d.ts.map +1 -0
  156. package/packages/workflows/dist/runtime/prompts.js +235 -0
  157. package/packages/workflows/dist/runtime/prompts.js.map +1 -0
  158. package/packages/workflows/dist/runtime/retry.d.ts +35 -0
  159. package/packages/workflows/dist/runtime/retry.d.ts.map +1 -0
  160. package/packages/workflows/dist/runtime/retry.js +80 -0
  161. package/packages/workflows/dist/runtime/retry.js.map +1 -0
  162. package/packages/workflows/dist/runtime/state.d.ts +14 -0
  163. package/packages/workflows/dist/runtime/state.d.ts.map +1 -0
  164. package/packages/workflows/dist/runtime/state.js +139 -0
  165. package/packages/workflows/dist/runtime/state.js.map +1 -0
  166. package/packages/workflows/dist/runtime/time.d.ts +6 -0
  167. package/packages/workflows/dist/runtime/time.d.ts.map +1 -0
  168. package/packages/workflows/dist/runtime/time.js +42 -0
  169. package/packages/workflows/dist/runtime/time.js.map +1 -0
  170. package/packages/workflows/dist/store/catalog-records.d.ts +18 -0
  171. package/packages/workflows/dist/store/catalog-records.d.ts.map +1 -0
  172. package/packages/workflows/dist/store/catalog-records.js +59 -0
  173. package/packages/workflows/dist/store/catalog-records.js.map +1 -0
  174. package/packages/workflows/dist/store/contracts.d.ts +149 -0
  175. package/packages/workflows/dist/store/contracts.d.ts.map +1 -0
  176. package/packages/workflows/dist/store/contracts.js +2 -0
  177. package/packages/workflows/dist/store/contracts.js.map +1 -0
  178. package/packages/workflows/dist/store/draft-writes.d.ts +7 -0
  179. package/packages/workflows/dist/store/draft-writes.d.ts.map +1 -0
  180. package/packages/workflows/dist/store/draft-writes.js +18 -0
  181. package/packages/workflows/dist/store/draft-writes.js.map +1 -0
  182. package/packages/workflows/dist/store/index.d.ts +55 -0
  183. package/packages/workflows/dist/store/index.d.ts.map +1 -0
  184. package/packages/workflows/dist/store/index.js +650 -0
  185. package/packages/workflows/dist/store/index.js.map +1 -0
  186. package/packages/workflows/dist/store/list-query.d.ts +13 -0
  187. package/packages/workflows/dist/store/list-query.d.ts.map +1 -0
  188. package/packages/workflows/dist/store/list-query.js +20 -0
  189. package/packages/workflows/dist/store/list-query.js.map +1 -0
  190. package/packages/workflows/dist/store/row-mappers.d.ts +206 -0
  191. package/packages/workflows/dist/store/row-mappers.d.ts.map +1 -0
  192. package/packages/workflows/dist/store/row-mappers.js +262 -0
  193. package/packages/workflows/dist/store/row-mappers.js.map +1 -0
  194. package/packages/workflows/dist/store/schema.d.ts +13 -0
  195. package/packages/workflows/dist/store/schema.d.ts.map +1 -0
  196. package/packages/workflows/dist/store/schema.js +458 -0
  197. package/packages/workflows/dist/store/schema.js.map +1 -0
  198. package/packages/workflows/dist/store/write-values.d.ts +18 -0
  199. package/packages/workflows/dist/store/write-values.d.ts.map +1 -0
  200. package/packages/workflows/dist/store/write-values.js +227 -0
  201. package/packages/workflows/dist/store/write-values.js.map +1 -0
  202. package/packages/workflows/dist/types/index.d.ts +1202 -0
  203. package/packages/workflows/dist/types/index.d.ts.map +1 -0
  204. package/packages/workflows/dist/types/index.js +8 -0
  205. package/packages/workflows/dist/types/index.js.map +1 -0
  206. package/packages/workflows/dist/validation/diagnostics.d.ts +27 -0
  207. package/packages/workflows/dist/validation/diagnostics.d.ts.map +1 -0
  208. package/packages/workflows/dist/validation/diagnostics.js +104 -0
  209. package/packages/workflows/dist/validation/diagnostics.js.map +1 -0
  210. package/packages/workflows/dist/validation/graph-cycles.d.ts +4 -0
  211. package/packages/workflows/dist/validation/graph-cycles.d.ts.map +1 -0
  212. package/packages/workflows/dist/validation/graph-cycles.js +130 -0
  213. package/packages/workflows/dist/validation/graph-cycles.js.map +1 -0
  214. package/packages/workflows/dist/validation/graph-edges.d.ts +5 -0
  215. package/packages/workflows/dist/validation/graph-edges.d.ts.map +1 -0
  216. package/packages/workflows/dist/validation/graph-edges.js +48 -0
  217. package/packages/workflows/dist/validation/graph-edges.js.map +1 -0
  218. package/packages/workflows/dist/validation/graph-ports.d.ts +5 -0
  219. package/packages/workflows/dist/validation/graph-ports.d.ts.map +1 -0
  220. package/packages/workflows/dist/validation/graph-ports.js +55 -0
  221. package/packages/workflows/dist/validation/graph-ports.js.map +1 -0
  222. package/packages/workflows/dist/validation/index.d.ts +18 -0
  223. package/packages/workflows/dist/validation/index.d.ts.map +1 -0
  224. package/packages/workflows/dist/validation/index.js +175 -0
  225. package/packages/workflows/dist/validation/index.js.map +1 -0
  226. package/packages/workflows/dist/validation/json-schema.d.ts +12 -0
  227. package/packages/workflows/dist/validation/json-schema.d.ts.map +1 -0
  228. package/packages/workflows/dist/validation/json-schema.js +556 -0
  229. package/packages/workflows/dist/validation/json-schema.js.map +1 -0
  230. package/packages/workflows/dist/validation/registry-refs.d.ts +21 -0
  231. package/packages/workflows/dist/validation/registry-refs.d.ts.map +1 -0
  232. package/packages/workflows/dist/validation/registry-refs.js +283 -0
  233. package/packages/workflows/dist/validation/registry-refs.js.map +1 -0
  234. package/packages/workflows/dist/validation/retry-policy.d.ts +3 -0
  235. package/packages/workflows/dist/validation/retry-policy.d.ts.map +1 -0
  236. package/packages/workflows/dist/validation/retry-policy.js +114 -0
  237. package/packages/workflows/dist/validation/retry-policy.js.map +1 -0
  238. package/packages/workflows/dist/validation/schema-declarations.d.ts +5 -0
  239. package/packages/workflows/dist/validation/schema-declarations.d.ts.map +1 -0
  240. package/packages/workflows/dist/validation/schema-declarations.js +36 -0
  241. package/packages/workflows/dist/validation/schema-declarations.js.map +1 -0
  242. package/packages/workflows/dist/validation/state-access.d.ts +4 -0
  243. package/packages/workflows/dist/validation/state-access.d.ts.map +1 -0
  244. package/packages/workflows/dist/validation/state-access.js +121 -0
  245. package/packages/workflows/dist/validation/state-access.js.map +1 -0
  246. package/packages/workflows/dist/xstate/index.d.ts +73 -0
  247. package/packages/workflows/dist/xstate/index.d.ts.map +1 -0
  248. package/packages/workflows/dist/xstate/index.js +728 -0
  249. package/packages/workflows/dist/xstate/index.js.map +1 -0
  250. package/packages/workflows/package.json +23 -0
  251. package/dist/apps/chat/data/project-service.js +0 -1029
  252. package/dist/apps/chat-ui/assets/index-BwT5grLv.css +0 -1
  253. package/dist/apps/chat-ui/assets/index-PTJanD3E.js +0 -228
  254. package/dist/apps/chat-vscode-web/assets/index-D1bpAUkR.js +0 -43
@@ -0,0 +1,175 @@
1
+ export * from "./diagnostics.js";
2
+ export { areWorkflowPortsDirectlyCompatible } from "./graph-ports.js";
3
+ export { validateJsonSchemaSubset, validateJsonValueAgainstSchema } from "./json-schema.js";
4
+ export { validateWorkflowPort } from "./schema-declarations.js";
5
+ import { validateWorkflowGraphCycles } from "./graph-cycles.js";
6
+ import { validateWorkflowEdgeAdapterRef, validateWorkflowEdgeNodeRefs } from "./graph-edges.js";
7
+ import { validateWorkflowEdgeAdapterOutputCompatibility, validateWorkflowEdgePortCompatibility, } from "./graph-ports.js";
8
+ import { validateJsonValueAgainstSchema } from "./json-schema.js";
9
+ import { validateWorkflowAdapterNodeRef, validateWorkflowAgentNodePromptBuilderRef, validateWorkflowAgentNodeRuntimeSelection, validateWorkflowCodeNodeRef, validateWorkflowEdgeGuardRef, validateWorkflowHumanActionRefs, } from "./registry-refs.js";
10
+ import { validateWorkflowRetryPolicy } from "./retry-policy.js";
11
+ import { validateWorkflowGlobalStateSchemaDeclarations, validateWorkflowNodeSchemaDeclarations, validateWorkflowPort, } from "./schema-declarations.js";
12
+ import { validateWorkflowGlobalStateWriteConflicts, validateWorkflowNodeStateAccess, } from "./state-access.js";
13
+ export function validateWorkflow(definition, options = {}) {
14
+ return validateWorkflowDefinitionSchemas(definition, options);
15
+ }
16
+ export function validateWorkflowDefinitionSchemas(definition, options = {}) {
17
+ const diagnostics = [];
18
+ validateWorkflowPort(definition.input, "$.input", diagnostics);
19
+ validateWorkflowPort(definition.output, "$.output", diagnostics);
20
+ validateWorkflowRetryPolicy(definition.retry, "$.retry", diagnostics);
21
+ for (const [nodeId, node] of Object.entries(definition.nodes)) {
22
+ validateWorkflowNodeSchemaDeclarations(nodeId, node, diagnostics);
23
+ validateWorkflowRetryPolicy(node.retry, `$.nodes.${nodeId}.retry`, diagnostics, { nodeId });
24
+ validateWorkflowAgentNodeRuntimeSelection(nodeId, node, diagnostics, options);
25
+ validateWorkflowAgentNodePromptBuilderRef(nodeId, node, diagnostics, options);
26
+ validateWorkflowCodeNodeRef(nodeId, node, diagnostics, options);
27
+ validateWorkflowAdapterNodeRef(nodeId, node, diagnostics, options);
28
+ validateWorkflowHumanActionRefs(nodeId, node, diagnostics, options);
29
+ validateWorkflowNodeStateAccess(definition, nodeId, node, diagnostics);
30
+ }
31
+ validateWorkflowGlobalStateWriteConflicts(definition, diagnostics);
32
+ validateWorkflowGraphCycles(definition, diagnostics, options);
33
+ for (const [edgeId, edge] of Object.entries(definition.edges)) {
34
+ validateWorkflowEdgeNodeRefs(definition, edgeId, edge, diagnostics);
35
+ validateWorkflowEdgeGuardRef(edgeId, edge, diagnostics, options);
36
+ validateWorkflowEdgeAdapterRef(edgeId, edge, diagnostics, options);
37
+ validateWorkflowEdgeAdapterOutputCompatibility(definition, edgeId, edge, diagnostics);
38
+ validateWorkflowEdgePortCompatibility(definition, edgeId, edge, diagnostics);
39
+ if (edge.adapter) {
40
+ validateWorkflowPort(edge.adapter.output, `$.edges.${edgeId}.adapter.output`, diagnostics, { edgeId });
41
+ }
42
+ }
43
+ validateWorkflowGlobalStateSchemaDeclarations(definition, diagnostics);
44
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error")
45
+ ? { ok: false, diagnostics }
46
+ : { ok: true, diagnostics };
47
+ }
48
+ export function validateWorkflowInput(definition, input, options = {}) {
49
+ return validateWorkflowPortValue(definition.input, input, {
50
+ path: options.path ?? "$.input",
51
+ });
52
+ }
53
+ export function validateWorkflowOutput(definition, output, options = {}) {
54
+ return validateWorkflowPortValue(definition.output, output, {
55
+ path: options.path ?? "$.output",
56
+ });
57
+ }
58
+ export function validateWorkflowGlobalState(definition, globalState, options = {}) {
59
+ const diagnostics = [];
60
+ const pathPrefix = options.path ?? "$.state.global";
61
+ for (const [path, field] of Object.entries(definition.state?.global ?? {})) {
62
+ if (!(path in globalState)) {
63
+ continue;
64
+ }
65
+ diagnostics.push(...validateJsonValueAgainstSchema(field.schema, globalState[path], {
66
+ path: `${pathPrefix}.${path}`,
67
+ }));
68
+ }
69
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error")
70
+ ? { ok: false, diagnostics }
71
+ : { ok: true, diagnostics };
72
+ }
73
+ export function validateNodeOutput(definition, nodeId, output, options = {}) {
74
+ const node = definition.nodes[nodeId];
75
+ if (!node) {
76
+ const diagnostics = [
77
+ {
78
+ code: "WorkflowInterfaceError.unknownNode",
79
+ message: `Workflow node '${nodeId}' does not exist, so its output cannot be validated.`,
80
+ severity: "error",
81
+ nodeId,
82
+ path: `$.nodes.${nodeId}`,
83
+ hint: "Validate outputs only for node ids declared in the workflow definition.",
84
+ },
85
+ ];
86
+ return { ok: false, diagnostics };
87
+ }
88
+ if (!node.output) {
89
+ return { ok: true, diagnostics: [] };
90
+ }
91
+ return withDiagnosticTarget(validateWorkflowPortValue(node.output, output, {
92
+ path: options.path ?? `$.nodes.${nodeId}.output`,
93
+ }), { nodeId });
94
+ }
95
+ export function validateWorkflowEdgeAdapterOutput(definition, edgeId, output, options = {}) {
96
+ const diagnostics = [];
97
+ const edge = definition.edges[edgeId];
98
+ if (!edge) {
99
+ diagnostics.push({
100
+ code: "WorkflowInterfaceError.unknownEdge",
101
+ message: `Workflow edge '${edgeId}' does not exist, so its adapter output cannot be validated.`,
102
+ severity: "error",
103
+ edgeId,
104
+ path: `$.edges.${edgeId}`,
105
+ hint: "Validate adapter outputs only for edge ids declared in the workflow definition.",
106
+ });
107
+ return { ok: false, diagnostics };
108
+ }
109
+ if (!edge.adapter) {
110
+ diagnostics.push({
111
+ code: "WorkflowInterfaceError.edgeAdapterExpected",
112
+ message: `Workflow edge '${edgeId}' does not declare an adapter output port.`,
113
+ severity: "error",
114
+ edgeId,
115
+ path: `$.edges.${edgeId}.adapter`,
116
+ hint: "Call validateWorkflowEdgeAdapterOutput only for edges that declare edgeAdapter(...).",
117
+ });
118
+ return { ok: false, diagnostics };
119
+ }
120
+ const adapterOutputPath = options.path ?? `$.edges.${edgeId}.adapter.outputValue`;
121
+ diagnostics.push(...validateWorkflowPortValue(edge.adapter.output, output, {
122
+ path: adapterOutputPath,
123
+ }).diagnostics.map((diagnostic) => ({ ...diagnostic, edgeId })));
124
+ const targetNode = definition.nodes[edge.to.nodeId];
125
+ if (!targetNode) {
126
+ diagnostics.push({
127
+ code: "WorkflowGraphError.unknownTargetNode",
128
+ message: `Workflow edge '${edgeId}' references missing target node '${edge.to.nodeId}'.`,
129
+ severity: "error",
130
+ edgeId,
131
+ nodeId: edge.to.nodeId,
132
+ path: `$.edges.${edgeId}.to.nodeId`,
133
+ hint: "Validate adapter outputs only after graph validation has accepted target node references.",
134
+ });
135
+ }
136
+ else if (targetNode.input) {
137
+ diagnostics.push(...validateWorkflowPortValue(targetNode.input, output, {
138
+ path: `$.edges.${edgeId}.targetInput`,
139
+ }).diagnostics.map((diagnostic) => ({ ...diagnostic, edgeId, nodeId: edge.to.nodeId })));
140
+ }
141
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error")
142
+ ? { ok: false, diagnostics }
143
+ : { ok: true, diagnostics };
144
+ }
145
+ export function validateWorkflowPortValue(port, value, options = {}) {
146
+ const path = options.path ?? "$.value";
147
+ const diagnostics = [];
148
+ if (port.kind === "text") {
149
+ if (typeof value !== "string") {
150
+ diagnostics.push({
151
+ code: "WorkflowInterfaceError.textValueExpected",
152
+ message: "Text workflow ports require a string value.",
153
+ severity: "error",
154
+ path,
155
+ hint: "Pass a string for text ports, or change the port to json(...) with an explicit schema.",
156
+ });
157
+ }
158
+ }
159
+ else {
160
+ validateWorkflowPort(port, path, diagnostics);
161
+ diagnostics.push(...validateJsonValueAgainstSchema(port.schema, value, {
162
+ path,
163
+ }));
164
+ }
165
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error")
166
+ ? { ok: false, diagnostics }
167
+ : { ok: true, diagnostics };
168
+ }
169
+ function withDiagnosticTarget(result, target) {
170
+ const diagnostics = result.diagnostics.map((diagnostic) => ({ ...diagnostic, ...target }));
171
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error")
172
+ ? { ok: false, diagnostics }
173
+ : { ok: true, diagnostics };
174
+ }
175
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { JsonSchema, WorkflowDiagnostic } from "../types/index.js";
2
+ export type JsonSchemaSubsetValidationOptions = {
3
+ path?: string;
4
+ requireObjectRoot?: boolean;
5
+ };
6
+ export type WorkflowValueValidationOptions = {
7
+ path?: string;
8
+ };
9
+ export declare function validateJsonSchemaSubset(schema: JsonSchema, options?: JsonSchemaSubsetValidationOptions): WorkflowDiagnostic[];
10
+ export declare function validateJsonValueAgainstSchema(schema: JsonSchema, value: unknown, options?: WorkflowValueValidationOptions): WorkflowDiagnostic[];
11
+ export declare function semanticJsonSchemasEqual(left: JsonSchema, right: JsonSchema): boolean;
12
+ //# sourceMappingURL=json-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/validation/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAsB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA8B5F,MAAM,MAAM,iCAAiC,GAAG;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAcF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,iCAAsC,GAAG,kBAAkB,EAAE,CAelI;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,8BAAmC,GAC3C,kBAAkB,EAAE,CAWtB;AAoeD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAErF"}