@skaile/workspaces 2.1.0 → 2.3.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 (198) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +33 -3
  3. package/dist/{asset-feeds-FBGBQEYD.js → asset-feeds-DKNYRLED.js} +10 -10
  4. package/dist/{asset-feeds-FBGBQEYD.js.map → asset-feeds-DKNYRLED.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +5 -5
  6. package/dist/asset-manager/index.js +9 -9
  7. package/dist/asset-manager/installer.js +6 -6
  8. package/dist/bridge/drivers/claude-sdk.js +9 -6
  9. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  10. package/dist/bridge/drivers/codex.js +1 -1
  11. package/dist/bridge/drivers/continue.js +2 -2
  12. package/dist/bridge/drivers/echo.js +1 -1
  13. package/dist/bridge/drivers/gemini.js +3 -3
  14. package/dist/bridge/drivers/goose.js +2 -2
  15. package/dist/bridge/drivers/omp.js +1 -1
  16. package/dist/bridge/drivers/opencode.js +2 -2
  17. package/dist/bridge/drivers/qwen.js +3 -3
  18. package/dist/bridge/index.js +2 -2
  19. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  20. package/dist/{chunk-ZWFLEMI4.js → chunk-3F54MH2T.js} +4 -4
  21. package/dist/{chunk-ZWFLEMI4.js.map → chunk-3F54MH2T.js.map} +1 -1
  22. package/dist/{chunk-RTLQAZAE.js → chunk-63ZPKREA.js} +3 -3
  23. package/dist/{chunk-RTLQAZAE.js.map → chunk-63ZPKREA.js.map} +1 -1
  24. package/dist/{chunk-MLYV6WEM.js → chunk-7IRH7MGV.js} +10 -10
  25. package/dist/{chunk-MLYV6WEM.js.map → chunk-7IRH7MGV.js.map} +1 -1
  26. package/dist/{chunk-Y6VSFX2A.js → chunk-7UZGKVSK.js} +3 -3
  27. package/dist/{chunk-Y6VSFX2A.js.map → chunk-7UZGKVSK.js.map} +1 -1
  28. package/dist/{chunk-XQVP6XWR.js → chunk-BFIK6NPZ.js} +3 -3
  29. package/dist/{chunk-XQVP6XWR.js.map → chunk-BFIK6NPZ.js.map} +1 -1
  30. package/dist/{chunk-L26NGI43.js → chunk-BLWNI5KW.js} +2 -2
  31. package/dist/{chunk-L26NGI43.js.map → chunk-BLWNI5KW.js.map} +1 -1
  32. package/dist/{chunk-CTWE7I7Z.js → chunk-CERGXDGG.js} +4 -4
  33. package/dist/{chunk-CTWE7I7Z.js.map → chunk-CERGXDGG.js.map} +1 -1
  34. package/dist/{chunk-VPXBAEWE.js → chunk-CILACPUC.js} +8 -8
  35. package/dist/{chunk-VPXBAEWE.js.map → chunk-CILACPUC.js.map} +1 -1
  36. package/dist/{chunk-43TAGQ3Z.js → chunk-CXX3UGJP.js} +8 -8
  37. package/dist/{chunk-43TAGQ3Z.js.map → chunk-CXX3UGJP.js.map} +1 -1
  38. package/dist/chunk-DZM33LQO.js +38 -0
  39. package/dist/chunk-DZM33LQO.js.map +1 -0
  40. package/dist/{chunk-PSVF3LDU.js → chunk-ETFETLLB.js} +6 -6
  41. package/dist/{chunk-PSVF3LDU.js.map → chunk-ETFETLLB.js.map} +1 -1
  42. package/dist/{chunk-Y662DNQQ.js → chunk-FB4GPWYC.js} +18 -15
  43. package/dist/chunk-FB4GPWYC.js.map +1 -0
  44. package/dist/{chunk-BTR3ZJ7S.js → chunk-G2ILW47R.js} +4 -4
  45. package/dist/{chunk-BTR3ZJ7S.js.map → chunk-G2ILW47R.js.map} +1 -1
  46. package/dist/{chunk-2BSXXTUP.js → chunk-LD6YGIKZ.js} +105 -16
  47. package/dist/chunk-LD6YGIKZ.js.map +1 -0
  48. package/dist/{chunk-HOL5KD7U.js → chunk-PTS3QN5P.js} +67 -25
  49. package/dist/chunk-PTS3QN5P.js.map +1 -0
  50. package/dist/{chunk-YODP3STD.js → chunk-Q26C5GLO.js} +3 -3
  51. package/dist/{chunk-YODP3STD.js.map → chunk-Q26C5GLO.js.map} +1 -1
  52. package/dist/{chunk-GUKMNUQK.js → chunk-RIEXN7WA.js} +2 -2
  53. package/dist/{chunk-GUKMNUQK.js.map → chunk-RIEXN7WA.js.map} +1 -1
  54. package/dist/chunk-SIF5F5SN.js +86 -0
  55. package/dist/chunk-SIF5F5SN.js.map +1 -0
  56. package/dist/{chunk-RBOPTTTK.js → chunk-TAJBFYCT.js} +32 -17
  57. package/dist/chunk-TAJBFYCT.js.map +1 -0
  58. package/dist/{chunk-MAN7AGQJ.js → chunk-TK66CMXV.js} +21 -6
  59. package/dist/chunk-TK66CMXV.js.map +1 -0
  60. package/dist/{chunk-5BGEYZ7I.js → chunk-UFY2HFLO.js} +3 -3
  61. package/dist/{chunk-5BGEYZ7I.js.map → chunk-UFY2HFLO.js.map} +1 -1
  62. package/dist/{chunk-N6TYW6EB.js → chunk-UNP4M5ZZ.js} +4 -4
  63. package/dist/{chunk-N6TYW6EB.js.map → chunk-UNP4M5ZZ.js.map} +1 -1
  64. package/dist/{chunk-HPGV54O4.js → chunk-UQ3RJKDD.js} +41 -23
  65. package/dist/chunk-UQ3RJKDD.js.map +1 -0
  66. package/dist/{chunk-XSIXGVH6.js → chunk-W3Q37HEF.js} +4 -4
  67. package/dist/{chunk-XSIXGVH6.js.map → chunk-W3Q37HEF.js.map} +1 -1
  68. package/dist/{chunk-WVPL4OGD.js → chunk-WG3L5VHF.js} +2 -2
  69. package/dist/{chunk-WVPL4OGD.js.map → chunk-WG3L5VHF.js.map} +1 -1
  70. package/dist/{chunk-SGLGA2AZ.js → chunk-X6BPVUV2.js} +3 -3
  71. package/dist/{chunk-SGLGA2AZ.js.map → chunk-X6BPVUV2.js.map} +1 -1
  72. package/dist/chunk-ZE2KEPE2.js +1002 -0
  73. package/dist/chunk-ZE2KEPE2.js.map +1 -0
  74. package/dist/{chunk-BHLNQ4L5.js → chunk-ZNIHTT22.js} +3 -3
  75. package/dist/{chunk-BHLNQ4L5.js.map → chunk-ZNIHTT22.js.map} +1 -1
  76. package/dist/{chunk-PYYL5XMA.js → chunk-ZR5Q4KZK.js} +3 -3
  77. package/dist/{chunk-PYYL5XMA.js.map → chunk-ZR5Q4KZK.js.map} +1 -1
  78. package/dist/cli/index.js +53 -50
  79. package/dist/cli/index.js.map +1 -1
  80. package/dist/connectors/config.js +6 -6
  81. package/dist/connectors/index.js +11 -9
  82. package/dist/core/index.js +5 -5
  83. package/dist/core/runtime-assets.js +3 -3
  84. package/dist/core/workspace-config.js +2 -2
  85. package/dist/deploy/index.js +5 -5
  86. package/dist/discovery/index.js +1 -1
  87. package/dist/discovery/src/requires-graph.d.ts +1 -1
  88. package/dist/discovery/src/requires-graph.d.ts.map +1 -1
  89. package/dist/{ensure-sources-AVCVX7CV.js → ensure-sources-R6KW7K3M.js} +12 -12
  90. package/dist/{ensure-sources-AVCVX7CV.js.map → ensure-sources-R6KW7K3M.js.map} +1 -1
  91. package/dist/factory-assets/connectors/box.js +11 -9
  92. package/dist/factory-assets/connectors/deploy.js +11 -9
  93. package/dist/factory-assets/connectors/devserver.js +11 -9
  94. package/dist/factory-assets/connectors/flow/CONNECTOR.md +7 -1
  95. package/dist/factory-assets/connectors/flow/adapter.d.ts +2 -3
  96. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  97. package/dist/factory-assets/connectors/flow/adapter.js +11 -9
  98. package/dist/factory-assets/connectors/flow/contract/expression.d.ts +46 -0
  99. package/dist/factory-assets/connectors/flow/contract/expression.d.ts.map +1 -0
  100. package/dist/factory-assets/connectors/flow/contract/flow.v2.schema.json +948 -0
  101. package/dist/factory-assets/connectors/flow/contract/hash.d.ts +6 -0
  102. package/dist/factory-assets/connectors/flow/contract/hash.d.ts.map +1 -0
  103. package/dist/factory-assets/connectors/flow/contract/index.d.ts +6 -0
  104. package/dist/factory-assets/connectors/flow/contract/index.d.ts.map +1 -0
  105. package/dist/factory-assets/connectors/flow/contract/json-schema.d.ts +6 -0
  106. package/dist/factory-assets/connectors/flow/contract/json-schema.d.ts.map +1 -0
  107. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts +38 -0
  108. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -0
  109. package/dist/factory-assets/connectors/flow/contract/schema.d.ts +364 -0
  110. package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -0
  111. package/dist/factory-assets/connectors/flow/contract.d.ts +2 -0
  112. package/dist/factory-assets/connectors/flow/contract.js +5 -0
  113. package/dist/factory-assets/connectors/flow/contract.js.map +1 -0
  114. package/dist/factory-assets/connectors/flow/engine/engine.d.ts +4 -4
  115. package/dist/factory-assets/connectors/flow/engine/engine.d.ts.map +1 -1
  116. package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts +1 -1
  117. package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -1
  118. package/dist/factory-assets/connectors/flow/engine/loader.d.ts.map +1 -1
  119. package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts +20 -0
  120. package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts.map +1 -0
  121. package/dist/factory-assets/connectors/flow/engine/types.d.ts +56 -28
  122. package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
  123. package/dist/factory-assets/connectors/flow/engine.js +8 -6
  124. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +4 -6
  125. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts.map +1 -1
  126. package/dist/factory-assets/connectors/flow/prompt-fragments.js +2 -1
  127. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  128. package/dist/factory-assets/connectors/flow/run-flow.js +12 -10
  129. package/dist/factory-assets/connectors/flow.js +11 -9
  130. package/dist/factory-assets/connectors/git.js +11 -9
  131. package/dist/factory-assets/connectors/gmail.js +11 -9
  132. package/dist/factory-assets/connectors/googledrive.js +11 -9
  133. package/dist/factory-assets/connectors/local.js +11 -9
  134. package/dist/factory-assets/connectors/mattermost.js +11 -9
  135. package/dist/factory-assets/connectors/memory.js +11 -9
  136. package/dist/factory-assets/connectors/minio.js +11 -9
  137. package/dist/factory-assets/connectors/postgres.js +11 -9
  138. package/dist/factory-assets/connectors/s3.js +11 -9
  139. package/dist/factory-assets/connectors/sharepoint.js +11 -9
  140. package/dist/factory-assets/connectors/sqlite.js +11 -9
  141. package/dist/factory-assets/connectors/static-server.js +11 -9
  142. package/dist/factory-assets/connectors/tunnel.js +11 -9
  143. package/dist/factory-assets/connectors/webdav.js +11 -9
  144. package/dist/factory-assets/connectors/xstate-store.js +11 -9
  145. package/dist/factory-assets/connectors/xstate.js +11 -9
  146. package/dist/{flows-CXVFGR27.js → flows-F3CJNMK6.js} +8 -8
  147. package/dist/{flows-CXVFGR27.js.map → flows-F3CJNMK6.js.map} +1 -1
  148. package/dist/{helpers-M5SXB4LL.js → helpers-KPOLCGKX.js} +12 -12
  149. package/dist/{helpers-M5SXB4LL.js.map → helpers-KPOLCGKX.js.map} +1 -1
  150. package/dist/library/index.js +7 -7
  151. package/dist/library/install.js +5 -5
  152. package/dist/{library-publish-HVIIQMI6.js → library-publish-ZAPZS64O.js} +18 -16
  153. package/dist/library-publish-ZAPZS64O.js.map +1 -0
  154. package/dist/{open-library-EJQISBWV.js → open-library-I4F2UNOY.js} +16 -14
  155. package/dist/{open-library-EJQISBWV.js.map → open-library-I4F2UNOY.js.map} +1 -1
  156. package/dist/{paths-2HMHL25W.js → paths-KBACHM5B.js} +10 -10
  157. package/dist/{paths-2HMHL25W.js.map → paths-KBACHM5B.js.map} +1 -1
  158. package/dist/{plugin-store-TLBQ5XRS.js → plugin-store-CYSNVZIX.js} +7 -7
  159. package/dist/{plugin-store-TLBQ5XRS.js.map → plugin-store-CYSNVZIX.js.map} +1 -1
  160. package/dist/{project-M2COJFPZ.js → project-SIHZBTGB.js} +13 -13
  161. package/dist/{project-M2COJFPZ.js.map → project-SIHZBTGB.js.map} +1 -1
  162. package/dist/resolver/index.js +5 -5
  163. package/dist/runner/index.js +17 -14
  164. package/dist/runner/src/serve.d.ts.map +1 -1
  165. package/dist/sdk/asset-manager.js +9 -9
  166. package/dist/sdk/bridge.js +2 -2
  167. package/dist/sdk/core.js +5 -5
  168. package/dist/sdk/flow.js +8 -6
  169. package/dist/sdk/index.js +17 -14
  170. package/dist/sdk/index.js.map +1 -1
  171. package/dist/sdk/resolver.js +5 -5
  172. package/dist/sdk/runner.js +17 -14
  173. package/dist/sdk/transport/ws.js +1 -1
  174. package/dist/sdk/transport.js +1 -1
  175. package/dist/{setup-GWXEG3G2.js → setup-KMBXMV25.js} +9 -9
  176. package/dist/{setup-GWXEG3G2.js.map → setup-KMBXMV25.js.map} +1 -1
  177. package/dist/{skills-YTMGG23D.js → skills-LHS4TOKK.js} +7 -7
  178. package/dist/{skills-YTMGG23D.js.map → skills-LHS4TOKK.js.map} +1 -1
  179. package/dist/{source-WMXH2OBW.js → source-X226ZJPR.js} +17 -15
  180. package/dist/{source-WMXH2OBW.js.map → source-X226ZJPR.js.map} +1 -1
  181. package/dist/{source-manifest-publish-MTHUGBAY.js → source-manifest-publish-N2QVUR5U.js} +19 -17
  182. package/dist/source-manifest-publish-N2QVUR5U.js.map +1 -0
  183. package/dist/transport/index.js +1 -1
  184. package/dist/transport/ws.js +1 -1
  185. package/dist/tui/index.js +17 -14
  186. package/dist/tui/index.js.map +1 -1
  187. package/dist/workspace-plugin/adapters/mcp.js +6 -6
  188. package/dist/workspace-plugin/adapters/omp.js +7 -7
  189. package/dist/workspace-plugin/index.js +1 -1
  190. package/package.json +18 -1
  191. package/dist/chunk-2BSXXTUP.js.map +0 -1
  192. package/dist/chunk-HOL5KD7U.js.map +0 -1
  193. package/dist/chunk-HPGV54O4.js.map +0 -1
  194. package/dist/chunk-MAN7AGQJ.js.map +0 -1
  195. package/dist/chunk-RBOPTTTK.js.map +0 -1
  196. package/dist/chunk-Y662DNQQ.js.map +0 -1
  197. package/dist/library-publish-HVIIQMI6.js.map +0 -1
  198. package/dist/source-manifest-publish-MTHUGBAY.js.map +0 -1
@@ -68,5 +68,5 @@ async function flowFindFlowForSession(projectDir, runId) {
68
68
  }
69
69
 
70
70
  export { flowFindFlowForSession, flowGetSession, flowList, flowListSessions, flowShow };
71
- //# sourceMappingURL=chunk-GUKMNUQK.js.map
72
- //# sourceMappingURL=chunk-GUKMNUQK.js.map
71
+ //# sourceMappingURL=chunk-RIEXN7WA.js.map
72
+ //# sourceMappingURL=chunk-RIEXN7WA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/tools/flows.ts"],"names":[],"mappings":"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","file":"chunk-GUKMNUQK.js","sourcesContent":["// src/tools/flows.ts\n\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\nimport { readAllSessions } from \"./sessions.js\";\n\n// ── Flow tools ────────────────────────────────────────────────────────────────\n\n/**\n * List all flow definitions available in the project's `ai-assets` directory.\n *\n * Returns a JSON array of summary objects `{ id, name, nodeCount }`.\n * Returns an empty array when no `ai-assets` root is found.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowList(projectDir: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return okJson([]);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const summary = flows.map((f: any) => ({\n id: f.id,\n name: f.name ?? f.id,\n nodeCount: f.nodes?.length ?? 0,\n }));\n return okJson(summary);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full flow definition (nodes, edges, metadata) for a specific flow.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param flowId - Flow ID as returned by {@link flowList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowShow(projectDir: string, flowId: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found: ${flowId}`);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === flowId);\n if (!flow) return err(`Flow not found: ${flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all past and active flow run sessions for the workspace.\n *\n * Delegates to {@link readAllSessions} (reads `.skaile/sessions/*.json`),\n * sorted newest-first by `updatedAt`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowListSessions(projectDir: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n return okJson(sessions);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get driver metadata for a specific flow run session.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowGetSession(projectDir: string, runId: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n return okJson(session);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Resolve and return the flow definition that was used in a past session.\n *\n * Looks up the session by `runId`, reads its `flowId`, then returns the full\n * flow definition from `ai-assets`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowFindFlowForSession(\n projectDir: string,\n runId: string,\n): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found for session: ${runId} (no ai-assets root)`);\n\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === session.flowId);\n if (!flow) return err(`Flow not found: ${session.flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/tools/flows.ts"],"names":[],"mappings":";;;;;AAmBA,eAAsB,SAAS,UAAA,EAAyC;AACtE,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,UAAU,CAAA;AACpD,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,MAAA,CAAO,EAAE,CAAA;AACjC,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAC7B,4CACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,aAAa,UAAU,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,MACrC,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,EAAA;AAAA,MAClB,SAAA,EAAW,CAAA,CAAE,KAAA,EAAO,MAAA,IAAU;AAAA,KAChC,CAAE,CAAA;AACF,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAUA,eAAsB,QAAA,CAAS,YAAoB,MAAA,EAAqC;AACtF,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,UAAU,CAAA;AACpD,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,GAAA,CAAI,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AACvD,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAC7B,4CACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,aAAa,UAAU,CAAA;AACrC,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,OAAO,MAAM,CAAA;AACnD,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,GAAA,CAAI,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AACjD,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACpB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAYA,eAAsB,iBAAiB,UAAA,EAAyC;AAC9E,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,UAAU,CAAA;AACjD,IAAA,OAAO,OAAO,QAAQ,CAAA;AAAA,EACxB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAUA,eAAsB,cAAA,CAAe,YAAoB,KAAA,EAAoC;AAC3F,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,UAAU,CAAA;AACjD,IAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AACtD,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AACtD,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAaA,eAAsB,sBAAA,CACpB,YACA,KAAA,EACqB;AACrB,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,UAAU,CAAA;AACjD,IAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AACtD,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAEtD,IAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,UAAU,CAAA;AACpD,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,GAAA,CAAI,CAAA,4BAAA,EAA+B,KAAK,CAAA,oBAAA,CAAsB,CAAA;AAEtF,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAC7B,4CACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,aAAa,UAAU,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,CAAC,MAAW,CAAA,CAAE,EAAA,KAAO,QAAQ,MAAM,CAAA;AAC3D,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,IAAI,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AACzD,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACpB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF","file":"chunk-RIEXN7WA.js","sourcesContent":["// src/tools/flows.ts\n\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\nimport { readAllSessions } from \"./sessions.js\";\n\n// ── Flow tools ────────────────────────────────────────────────────────────────\n\n/**\n * List all flow definitions available in the project's `ai-assets` directory.\n *\n * Returns a JSON array of summary objects `{ id, name, nodeCount }`.\n * Returns an empty array when no `ai-assets` root is found.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowList(projectDir: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return okJson([]);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const summary = flows.map((f: any) => ({\n id: f.id,\n name: f.name ?? f.id,\n nodeCount: f.nodes?.length ?? 0,\n }));\n return okJson(summary);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full flow definition (nodes, edges, metadata) for a specific flow.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param flowId - Flow ID as returned by {@link flowList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowShow(projectDir: string, flowId: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found: ${flowId}`);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === flowId);\n if (!flow) return err(`Flow not found: ${flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all past and active flow run sessions for the workspace.\n *\n * Delegates to {@link readAllSessions} (reads `.skaile/sessions/*.json`),\n * sorted newest-first by `updatedAt`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowListSessions(projectDir: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n return okJson(sessions);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get driver metadata for a specific flow run session.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowGetSession(projectDir: string, runId: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n return okJson(session);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Resolve and return the flow definition that was used in a past session.\n *\n * Looks up the session by `runId`, reads its `flowId`, then returns the full\n * flow definition from `ai-assets`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowFindFlowForSession(\n projectDir: string,\n runId: string,\n): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found for session: ${runId} (no ai-assets root)`);\n\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === session.flowId);\n if (!flow) return err(`Flow not found: ${session.flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
@@ -0,0 +1,86 @@
1
+ import { FlowDefinitionSchema } from './chunk-ZE2KEPE2.js';
2
+ import * as z from 'zod';
3
+
4
+ // factory-assets/connectors/flow/contract/hash.ts
5
+ function semanticHashInput(definition) {
6
+ const defaults = definition.defaults ? { ...definition.defaults } : void 0;
7
+ if (defaults?.parameters && Object.keys(defaults.parameters).length === 0) {
8
+ delete defaults.parameters;
9
+ }
10
+ const meta = definition.meta ? { ...definition.meta } : void 0;
11
+ if (meta?.tags?.length === 0) delete meta.tags;
12
+ const normalized = {
13
+ ...definition,
14
+ nodes: definition.nodes.map((node) => {
15
+ const run = { ...node.run };
16
+ if (node.run.assets) {
17
+ const assets = [...new Set(node.run.assets)].sort();
18
+ if (assets.length > 0) run.assets = assets;
19
+ else delete run.assets;
20
+ }
21
+ if ("capture" in node.run && node.run.capture !== void 0 && Object.keys(node.run.capture).length === 0) {
22
+ delete run.capture;
23
+ }
24
+ const control = node.control ? { ...node.control } : void 0;
25
+ if (control?.optional === false) delete control.optional;
26
+ if (control?.retries === 0) delete control.retries;
27
+ const contract = node.contract ? { ...node.contract } : void 0;
28
+ if (contract?.requires?.length === 0) delete contract.requires;
29
+ if (contract?.input && Object.keys(contract.input).length === 0) delete contract.input;
30
+ if (contract?.output) {
31
+ const output = { ...contract.output };
32
+ if (output.artifacts?.length === 0) delete output.artifacts;
33
+ contract.output = Object.keys(output).length > 0 ? output : void 0;
34
+ }
35
+ const normalizedNode = { ...node, run };
36
+ if (control && Object.keys(control).length > 0) normalizedNode.control = control;
37
+ else delete normalizedNode.control;
38
+ if (contract && Object.values(contract).some((value) => value !== void 0)) {
39
+ normalizedNode.contract = contract;
40
+ } else {
41
+ delete normalizedNode.contract;
42
+ }
43
+ if (node.gate?.approval === "none") delete normalizedNode.gate;
44
+ return normalizedNode;
45
+ })
46
+ };
47
+ normalized.defaults = defaults && Object.keys(defaults).length > 0 ? defaults : void 0;
48
+ normalized.meta = meta && Object.keys(meta).length > 0 ? meta : void 0;
49
+ return normalized;
50
+ }
51
+ function canonicalize(value) {
52
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
53
+ if (Array.isArray(value)) {
54
+ return `[${value.map((item) => canonicalize(item) ?? "null").join(",")}]`;
55
+ }
56
+ const object = value;
57
+ const entries = [];
58
+ for (const key of Object.keys(object).sort()) {
59
+ const serialized = canonicalize(object[key]);
60
+ if (serialized !== void 0) entries.push(`${JSON.stringify(key)}:${serialized}`);
61
+ }
62
+ return `{${entries.join(",")}}`;
63
+ }
64
+ function canonicalizeFlowDefinition(definition) {
65
+ return canonicalize(semanticHashInput(definition)) ?? "null";
66
+ }
67
+ async function hashFlowDefinition(definition) {
68
+ const bytes = new TextEncoder().encode(canonicalizeFlowDefinition(definition));
69
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
70
+ return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
71
+ }
72
+ var FLOW_DEFINITION_JSON_SCHEMA_ID = "https://skaile.ai/schemas/flow/v2.json";
73
+ function generateFlowDefinitionJsonSchema() {
74
+ return {
75
+ $id: FLOW_DEFINITION_JSON_SCHEMA_ID,
76
+ ...z.toJSONSchema(FlowDefinitionSchema, {
77
+ target: "draft-2020-12",
78
+ io: "input",
79
+ reused: "inline"
80
+ })
81
+ };
82
+ }
83
+
84
+ export { FLOW_DEFINITION_JSON_SCHEMA_ID, canonicalizeFlowDefinition, generateFlowDefinitionJsonSchema, hashFlowDefinition };
85
+ //# sourceMappingURL=chunk-SIF5F5SN.js.map
86
+ //# sourceMappingURL=chunk-SIF5F5SN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../factory-assets/connectors/flow/contract/hash.ts","../factory-assets/connectors/flow/contract/json-schema.ts"],"names":[],"mappings":"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","file":"chunk-SIF5F5SN.js","sourcesContent":["import type { ParsedFlowDefinition } from \"./normalize.js\";\n\nfunction semanticHashInput(definition: ParsedFlowDefinition): ParsedFlowDefinition {\n const defaults = definition.defaults ? { ...definition.defaults } : undefined;\n if (defaults?.parameters && Object.keys(defaults.parameters).length === 0) {\n delete defaults.parameters;\n }\n\n const meta = definition.meta ? { ...definition.meta } : undefined;\n if (meta?.tags?.length === 0) delete meta.tags;\n\n const normalized: ParsedFlowDefinition = {\n ...definition,\n nodes: definition.nodes.map((node) => {\n const run: Record<string, unknown> = { ...node.run };\n if (node.run.assets) {\n const assets = [...new Set(node.run.assets)].sort();\n if (assets.length > 0) run.assets = assets;\n else delete run.assets;\n }\n if (\n \"capture\" in node.run &&\n node.run.capture !== undefined &&\n Object.keys(node.run.capture).length === 0\n ) {\n delete run.capture;\n }\n\n const control = node.control ? { ...node.control } : undefined;\n if (control?.optional === false) delete control.optional;\n if (control?.retries === 0) delete control.retries;\n\n const contract = node.contract ? { ...node.contract } : undefined;\n if (contract?.requires?.length === 0) delete contract.requires;\n if (contract?.input && Object.keys(contract.input).length === 0) delete contract.input;\n if (contract?.output) {\n const output = { ...contract.output };\n if (output.artifacts?.length === 0) delete output.artifacts;\n contract.output = Object.keys(output).length > 0 ? output : undefined;\n }\n\n const normalizedNode: Record<string, unknown> = { ...node, run };\n if (control && Object.keys(control).length > 0) normalizedNode.control = control;\n else delete normalizedNode.control;\n if (contract && Object.values(contract).some((value) => value !== undefined)) {\n normalizedNode.contract = contract;\n } else {\n delete normalizedNode.contract;\n }\n if (node.gate?.approval === \"none\") delete normalizedNode.gate;\n return normalizedNode as ParsedFlowDefinition[\"nodes\"][number];\n }),\n };\n normalized.defaults = defaults && Object.keys(defaults).length > 0 ? defaults : undefined;\n normalized.meta = meta && Object.keys(meta).length > 0 ? meta : undefined;\n return normalized;\n}\n\nfunction canonicalize(value: unknown): string | undefined {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) {\n return `[${value.map((item) => canonicalize(item) ?? \"null\").join(\",\")}]`;\n }\n const object = value as Record<string, unknown>;\n const entries: string[] = [];\n for (const key of Object.keys(object).sort()) {\n const serialized = canonicalize(object[key]);\n if (serialized !== undefined) entries.push(`${JSON.stringify(key)}:${serialized}`);\n }\n return `{${entries.join(\",\")}}`;\n}\n\n/** Gives equivalent definitions identical bytes while preserving content-significant array order. */\nexport function canonicalizeFlowDefinition(definition: ParsedFlowDefinition): string {\n return canonicalize(semanticHashInput(definition)) ?? \"null\";\n}\n\n/** Creates a browser-safe content identity for caching, pinning, and change detection. */\nexport async function hashFlowDefinition(definition: ParsedFlowDefinition): Promise<string> {\n const bytes = new TextEncoder().encode(canonicalizeFlowDefinition(definition));\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n","import * as z from \"zod\";\nimport { FlowDefinitionSchema } from \"./schema.js\";\n\n/** Canonical URI editors can use to identify the published Flow v2 vocabulary. */\nexport const FLOW_DEFINITION_JSON_SCHEMA_ID = \"https://skaile.ai/schemas/flow/v2.json\";\n\n/** Keeps editor tooling downstream of Zod so the checked-in artifact cannot become an authority. */\nexport function generateFlowDefinitionJsonSchema(): z.core.JSONSchema.JSONSchema {\n return {\n $id: FLOW_DEFINITION_JSON_SCHEMA_ID,\n ...z.toJSONSchema(FlowDefinitionSchema, {\n target: \"draft-2020-12\",\n io: \"input\",\n reused: \"inline\",\n }),\n };\n}\n"]}
@@ -1,19 +1,20 @@
1
- import { WorkspacePlugin } from './chunk-L26NGI43.js';
1
+ import { WorkspacePlugin } from './chunk-BLWNI5KW.js';
2
2
  import { assembleSystemPrompt, buildCapabilitiesPromptSection } from './chunk-W3UDISS2.js';
3
3
  import { WebSocketServerTransport } from './chunk-WQ7DE5UC.js';
4
- import { EventNormalizer } from './chunk-PYYL5XMA.js';
4
+ import { EventNormalizer } from './chunk-ZR5Q4KZK.js';
5
5
  import { SUPPORTED_CLOUDS, CLOUD_SECRET_ENV_KEYS } from './chunk-ISQWMBKD.js';
6
6
  import { classifyClaudeSdkError } from './chunk-GAH4YRCI.js';
7
- import { createDriver } from './chunk-WVPL4OGD.js';
7
+ import { createDriver } from './chunk-WG3L5VHF.js';
8
8
  import { findAiAssetsRoot, deployCatalogEntry, undeployCatalogEntry } from './chunk-BEAIJRVF.js';
9
- import { registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, ConnectorStartupError, buildSdkConnectorTools, buildSdkFlowTools } from './chunk-HOL5KD7U.js';
10
- import { loadConnectorDeclarations, SecretProviderChain, PreMintedSecretProvider, InMemorySecretProvider, resolvedConfigToDeclarations, isKnownSecretRef, deriveSingleMaterializedConnectorDeclaration } from './chunk-BHLNQ4L5.js';
11
- import { renderStimulusPrompt, buildOrchestratorPrompt } from './chunk-Y662DNQQ.js';
9
+ import { registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, ConnectorStartupError, buildSdkConnectorTools, buildSdkFlowTools } from './chunk-PTS3QN5P.js';
10
+ import { loadConnectorDeclarations, SecretProviderChain, PreMintedSecretProvider, InMemorySecretProvider, resolvedConfigToDeclarations, isKnownSecretRef, deriveSingleMaterializedConnectorDeclaration } from './chunk-ZNIHTT22.js';
11
+ import { parseFlowDefinition } from './chunk-ZE2KEPE2.js';
12
+ import { renderStimulusPrompt, buildOrchestratorPrompt } from './chunk-FB4GPWYC.js';
12
13
  import { PROTOCOL_VERSION } from './chunk-RDE43ORT.js';
13
- import { resolveSettings, resolveApiKey, providerEnvKey } from './chunk-RTLQAZAE.js';
14
+ import { resolveSettings, resolveApiKey, providerEnvKey } from './chunk-63ZPKREA.js';
14
15
  import { resolveDriverPaths } from './chunk-K5GBV4SA.js';
15
- import { resolveRuntimeAssets } from './chunk-5BGEYZ7I.js';
16
- import { resolveSkWorkspaceConfig, resolveAgentDir, cloudConfigFromProfile, stageMaterializedSkills, loadMcpServerDeclarations, COMPACTION_DEFAULTS, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration } from './chunk-YODP3STD.js';
16
+ import { resolveRuntimeAssets } from './chunk-UFY2HFLO.js';
17
+ import { resolveSkWorkspaceConfig, resolveAgentDir, cloudConfigFromProfile, stageMaterializedSkills, loadMcpServerDeclarations, COMPACTION_DEFAULTS, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration } from './chunk-Q26C5GLO.js';
17
18
  import { withFsDeadline, fsDeadlineMs, FsDeadlineError, tryWithFsDeadline } from './chunk-DYMWJAL4.js';
18
19
  import { parseAssetRef } from './chunk-GEEW6SY2.js';
19
20
  import { resolveLogStoreConfig, createLogStoreFromConfig, OnLogBridgeSink, WsLogSink } from './chunk-U5POE4BA.js';
@@ -4443,26 +4444,36 @@ function buildConnectorTokenMediator(deps) {
4443
4444
  }
4444
4445
  };
4445
4446
  }
4447
+ function normalizeFlowMutateDefinition(authored) {
4448
+ const parsed = parseFlowDefinition(authored);
4449
+ if (parsed.ok) return { ok: true, flowDef: parsed.data };
4450
+ const details = parsed.errors.map((issue) => `${issue.path || "<root>"}: ${issue.message}`).join("; ");
4451
+ return { ok: false, reason: `invalid flow definition: ${details}` };
4452
+ }
4446
4453
  function planFlowMutate(cmd, ctx) {
4447
4454
  const isBareFlowId = cmd.id === "flow";
4448
4455
  const flowIntercept = ctx.isExistingFlow || isBareFlowId;
4449
4456
  const payload = cmd.payload ?? {};
4450
4457
  if (cmd.op === "start" && flowIntercept) {
4451
- const flowDef = payload.flow;
4458
+ const authoredFlow = payload.flow;
4452
4459
  const seed = payload.seed;
4453
- if (!flowDef?.id || !seed?.runId || !seed?.startedBy) {
4460
+ if (!authoredFlow || !seed?.runId || !seed?.startedBy) {
4454
4461
  return {
4455
4462
  kind: "reject",
4456
4463
  reason: "flow.start payload missing required fields (need payload.flow.id, payload.seed.runId, payload.seed.startedBy)"
4457
4464
  };
4458
4465
  }
4466
+ const normalized = normalizeFlowMutateDefinition(authoredFlow);
4467
+ if (!normalized.ok) {
4468
+ return { kind: "reject", reason: `flow.start ${normalized.reason}` };
4469
+ }
4459
4470
  if (ctx.hasRunningFlow) {
4460
4471
  return {
4461
4472
  kind: "reject",
4462
4473
  reason: "flow.start ignored: a flow is still running (one active flow per session; cancel it, then start the next)"
4463
4474
  };
4464
4475
  }
4465
- return { kind: "create-start", flowDef, seed };
4476
+ return { kind: "create-start", flowDef: normalized.flowDef, seed };
4466
4477
  }
4467
4478
  if (cmd.op === "hydrate" && flowIntercept && !ctx.hasActiveFlow) {
4468
4479
  const state = payload.state;
@@ -4472,14 +4483,18 @@ function planFlowMutate(cmd, ctx) {
4472
4483
  reason: "flow.hydrate payload missing required field payload.state (FlowExecution snapshot)"
4473
4484
  };
4474
4485
  }
4475
- const flowDef = payload.flow;
4476
- if (!flowDef?.id) {
4486
+ const authoredFlow = payload.flow;
4487
+ if (!authoredFlow) {
4477
4488
  return {
4478
4489
  kind: "reject",
4479
4490
  reason: "flow.hydrate cannot bootstrap a cold container without payload.flow (FlowDefinition required when no flow is active)"
4480
4491
  };
4481
4492
  }
4482
- return { kind: "create-hydrate", flowDef, execution: state };
4493
+ const normalized = normalizeFlowMutateDefinition(authoredFlow);
4494
+ if (!normalized.ok) {
4495
+ return { kind: "reject", reason: `flow.hydrate ${normalized.reason}` };
4496
+ }
4497
+ return { kind: "create-hydrate", flowDef: normalized.flowDef, execution: state };
4483
4498
  }
4484
4499
  let dispatchId = cmd.id;
4485
4500
  if (!ctx.targetExists && isBareFlowId && ctx.onlyActiveConnectorId) {
@@ -6702,5 +6717,5 @@ function touchSession(state) {
6702
6717
  }
6703
6718
 
6704
6719
  export { CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CapabilityRegistry, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_TREE_OP_DEADLINE_FACTOR, MarkdownStreamer, PreInitRingSink, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildStoreSnapshotReplay, builtinCapabilities, capabilityLogInstance, clearPreInitRingSink, clearSession, compileComposition, computeCapabilitySignature, connectorRefreshKind, createAgentSession, createFlowConnectorReadiness, createSessionStimulusBus, defineCapability, deleteSession, dispatchRunnerCapabilityInvocation, emitSystemPromptComposed, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, hasNonTerminalFlow, hostOpResumeStimulus, installPreInitRingSink, isTerminalFlowStatus, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadSession, loadSessionById, mcpAuthSecretKey, newSession, pickRepointedManager, planFlowMutate, reconcilePendingDecisions, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, resetRunnerLogStore, resolveAgentComposition, resolveAgentMixins, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveMixin, runAgentChat, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, touchSession, validateInputResponse, writeClaudeCodeCredentialsFile };
6705
- //# sourceMappingURL=chunk-RBOPTTTK.js.map
6706
- //# sourceMappingURL=chunk-RBOPTTTK.js.map
6720
+ //# sourceMappingURL=chunk-TAJBFYCT.js.map
6721
+ //# sourceMappingURL=chunk-TAJBFYCT.js.map