@skaile/workspaces 4.11.0 → 4.12.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 (260) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{asset-feeds-3TOP4ZKE.js → asset-feeds-WSKIL5GA.js} +13 -13
  3. package/dist/{asset-feeds-3TOP4ZKE.js.map → asset-feeds-WSKIL5GA.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +9 -9
  5. package/dist/asset-manager/index.js +13 -13
  6. package/dist/asset-manager/installer.js +9 -9
  7. package/dist/bridge/drivers/claude-sdk.js +16 -14
  8. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  9. package/dist/bridge/drivers/codex.js +11 -11
  10. package/dist/bridge/drivers/continue.js +13 -12
  11. package/dist/bridge/drivers/continue.js.map +1 -1
  12. package/dist/bridge/drivers/echo.js +10 -8
  13. package/dist/bridge/drivers/echo.js.map +1 -1
  14. package/dist/bridge/drivers/gemini.js +9 -8
  15. package/dist/bridge/drivers/goose.js +12 -11
  16. package/dist/bridge/drivers/goose.js.map +1 -1
  17. package/dist/bridge/drivers/omp.js +7 -6
  18. package/dist/bridge/drivers/omp.js.map +1 -1
  19. package/dist/bridge/drivers/opencode.js +14 -12
  20. package/dist/bridge/drivers/opencode.js.map +1 -1
  21. package/dist/bridge/drivers/qwen.js +9 -8
  22. package/dist/bridge/drivers/qwen.js.map +1 -1
  23. package/dist/bridge/index.js +13 -13
  24. package/dist/bridge/src/cloud.d.ts.map +1 -1
  25. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  26. package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
  27. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  28. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
  29. package/dist/bridge/src/provider-materialize/env-drivers.d.ts +20 -5
  30. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +1 -1
  31. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
  32. package/dist/bridge/src/types.d.ts +6 -2
  33. package/dist/bridge/src/types.d.ts.map +1 -1
  34. package/dist/{chunk-MKZOK4JU.js → chunk-2FBPAR2V.js} +3 -3
  35. package/dist/{chunk-MKZOK4JU.js.map → chunk-2FBPAR2V.js.map} +1 -1
  36. package/dist/{chunk-HO4UO25I.js → chunk-2J3PASYF.js} +3 -3
  37. package/dist/{chunk-HO4UO25I.js.map → chunk-2J3PASYF.js.map} +1 -1
  38. package/dist/{chunk-JECDED7B.js → chunk-3QCLMSXU.js} +5 -5
  39. package/dist/{chunk-JECDED7B.js.map → chunk-3QCLMSXU.js.map} +1 -1
  40. package/dist/{chunk-BXV6RLF4.js → chunk-4G6HFU27.js} +4 -4
  41. package/dist/{chunk-BXV6RLF4.js.map → chunk-4G6HFU27.js.map} +1 -1
  42. package/dist/{chunk-OUJVFZWJ.js → chunk-4SIMGJIU.js} +4 -9
  43. package/dist/chunk-4SIMGJIU.js.map +1 -0
  44. package/dist/{chunk-L3PZINDD.js → chunk-5UPJWC3M.js} +8 -8
  45. package/dist/{chunk-L3PZINDD.js.map → chunk-5UPJWC3M.js.map} +1 -1
  46. package/dist/{chunk-O3DHAGBO.js → chunk-626UIDZT.js} +6 -5
  47. package/dist/chunk-626UIDZT.js.map +1 -0
  48. package/dist/{chunk-2HUQUTJ3.js → chunk-6XIIGQXL.js} +4 -4
  49. package/dist/{chunk-2HUQUTJ3.js.map → chunk-6XIIGQXL.js.map} +1 -1
  50. package/dist/{chunk-A3X4LDOD.js → chunk-7EYRYGIM.js} +6 -6
  51. package/dist/{chunk-A3X4LDOD.js.map → chunk-7EYRYGIM.js.map} +1 -1
  52. package/dist/{chunk-7IRJ4K4F.js → chunk-7IH3RKKK.js} +3 -3
  53. package/dist/{chunk-7IRJ4K4F.js.map → chunk-7IH3RKKK.js.map} +1 -1
  54. package/dist/chunk-ALLCAFHQ.js +365 -0
  55. package/dist/chunk-ALLCAFHQ.js.map +1 -0
  56. package/dist/{chunk-W4IPN3DD.js → chunk-BOFL7GIF.js} +62 -10
  57. package/dist/chunk-BOFL7GIF.js.map +1 -0
  58. package/dist/{chunk-JM2LRJ46.js → chunk-BVYTXIN5.js} +3 -3
  59. package/dist/{chunk-JM2LRJ46.js.map → chunk-BVYTXIN5.js.map} +1 -1
  60. package/dist/{chunk-S2MT6SDZ.js → chunk-BYBIEHQX.js} +98 -39
  61. package/dist/chunk-BYBIEHQX.js.map +1 -0
  62. package/dist/{chunk-WXB6YEHZ.js → chunk-C7DPL3YA.js} +3 -3
  63. package/dist/{chunk-WXB6YEHZ.js.map → chunk-C7DPL3YA.js.map} +1 -1
  64. package/dist/{chunk-CJXSTOGW.js → chunk-C7R65ZTD.js} +4 -4
  65. package/dist/{chunk-CJXSTOGW.js.map → chunk-C7R65ZTD.js.map} +1 -1
  66. package/dist/{chunk-35PMOWAD.js → chunk-CPIAQTYM.js} +4 -4
  67. package/dist/chunk-CPIAQTYM.js.map +1 -0
  68. package/dist/{chunk-REYJKU7T.js → chunk-DHMBE5J7.js} +12 -364
  69. package/dist/chunk-DHMBE5J7.js.map +1 -0
  70. package/dist/chunk-DMJ4FUEO.js +141 -0
  71. package/dist/chunk-DMJ4FUEO.js.map +1 -0
  72. package/dist/{chunk-7ZJXFQ42.js → chunk-DPKRBLYC.js} +3 -3
  73. package/dist/{chunk-7ZJXFQ42.js.map → chunk-DPKRBLYC.js.map} +1 -1
  74. package/dist/{chunk-KSIRR5PL.js → chunk-DPLIN2RA.js} +3 -3
  75. package/dist/{chunk-KSIRR5PL.js.map → chunk-DPLIN2RA.js.map} +1 -1
  76. package/dist/{chunk-ILG4BXYE.js → chunk-GZZPKAV5.js} +27 -3
  77. package/dist/chunk-GZZPKAV5.js.map +1 -0
  78. package/dist/{chunk-M5H4DWIA.js → chunk-HGPSZXZP.js} +3 -3
  79. package/dist/{chunk-M5H4DWIA.js.map → chunk-HGPSZXZP.js.map} +1 -1
  80. package/dist/{chunk-MMLXSVQ3.js → chunk-IGI6M7MS.js} +5 -5
  81. package/dist/{chunk-MMLXSVQ3.js.map → chunk-IGI6M7MS.js.map} +1 -1
  82. package/dist/{chunk-VLXODO37.js → chunk-KECSNBET.js} +3 -3
  83. package/dist/{chunk-VLXODO37.js.map → chunk-KECSNBET.js.map} +1 -1
  84. package/dist/{chunk-3YTFHHMI.js → chunk-LHBWHIIT.js} +3 -3
  85. package/dist/{chunk-3YTFHHMI.js.map → chunk-LHBWHIIT.js.map} +1 -1
  86. package/dist/{chunk-IGGHUTOW.js → chunk-MH4GYGOW.js} +4 -4
  87. package/dist/{chunk-IGGHUTOW.js.map → chunk-MH4GYGOW.js.map} +1 -1
  88. package/dist/{chunk-WILO77HE.js → chunk-N4DHPRBS.js} +4 -4
  89. package/dist/{chunk-WILO77HE.js.map → chunk-N4DHPRBS.js.map} +1 -1
  90. package/dist/{chunk-SIGVAFRJ.js → chunk-N5O6Z7HV.js} +10 -10
  91. package/dist/{chunk-SIGVAFRJ.js.map → chunk-N5O6Z7HV.js.map} +1 -1
  92. package/dist/{chunk-FAI2SMFE.js → chunk-P2DLXBZK.js} +4 -4
  93. package/dist/{chunk-FAI2SMFE.js.map → chunk-P2DLXBZK.js.map} +1 -1
  94. package/dist/{chunk-GUZNTYHE.js → chunk-PCM75ICY.js} +4 -4
  95. package/dist/{chunk-GUZNTYHE.js.map → chunk-PCM75ICY.js.map} +1 -1
  96. package/dist/{chunk-7BUZQVRR.js → chunk-Q6NDQ6BH.js} +4 -4
  97. package/dist/{chunk-7BUZQVRR.js.map → chunk-Q6NDQ6BH.js.map} +1 -1
  98. package/dist/{chunk-PBCNRS7Q.js → chunk-QOCH3LO7.js} +6 -6
  99. package/dist/{chunk-PBCNRS7Q.js.map → chunk-QOCH3LO7.js.map} +1 -1
  100. package/dist/{chunk-GXACG5ZE.js → chunk-QUSE2T4N.js} +50 -41
  101. package/dist/chunk-QUSE2T4N.js.map +1 -0
  102. package/dist/{chunk-AT2TJEWG.js → chunk-RE2XE2AP.js} +11 -11
  103. package/dist/chunk-RE2XE2AP.js.map +1 -0
  104. package/dist/{chunk-DMUY5C3X.js → chunk-RJNBMEFG.js} +7 -7
  105. package/dist/{chunk-DMUY5C3X.js.map → chunk-RJNBMEFG.js.map} +1 -1
  106. package/dist/{chunk-2D5BYAL6.js → chunk-RQLL7L72.js} +3 -3
  107. package/dist/{chunk-2D5BYAL6.js.map → chunk-RQLL7L72.js.map} +1 -1
  108. package/dist/{chunk-3T5DRUNZ.js → chunk-RQRWMKST.js} +5 -5
  109. package/dist/{chunk-3T5DRUNZ.js.map → chunk-RQRWMKST.js.map} +1 -1
  110. package/dist/{chunk-3HKYCT2M.js → chunk-RUBPZLMO.js} +3 -3
  111. package/dist/{chunk-3HKYCT2M.js.map → chunk-RUBPZLMO.js.map} +1 -1
  112. package/dist/{chunk-3XXQPHGL.js → chunk-T3YUSWVK.js} +4 -4
  113. package/dist/{chunk-3XXQPHGL.js.map → chunk-T3YUSWVK.js.map} +1 -1
  114. package/dist/{chunk-6XKQEDF7.js → chunk-TMOS6KL5.js} +6 -5
  115. package/dist/chunk-TMOS6KL5.js.map +1 -0
  116. package/dist/{chunk-7SNYWCQS.js → chunk-TVQPJZSO.js} +3 -3
  117. package/dist/{chunk-7SNYWCQS.js.map → chunk-TVQPJZSO.js.map} +1 -1
  118. package/dist/{chunk-IECQMSQ5.js → chunk-UE4AKJNQ.js} +4 -129
  119. package/dist/chunk-UE4AKJNQ.js.map +1 -0
  120. package/dist/{chunk-ELPR5XBG.js → chunk-V4RGCKYC.js} +5 -3
  121. package/dist/chunk-V4RGCKYC.js.map +1 -0
  122. package/dist/{chunk-UKJMQZV6.js → chunk-VOEBLPXO.js} +2 -2
  123. package/dist/chunk-VOEBLPXO.js.map +1 -0
  124. package/dist/{chunk-KJM7Y2FW.js → chunk-WNDDWWGU.js} +7 -7
  125. package/dist/{chunk-KJM7Y2FW.js.map → chunk-WNDDWWGU.js.map} +1 -1
  126. package/dist/{chunk-KLMXMW6Z.js → chunk-XPDB4O4H.js} +3 -3
  127. package/dist/{chunk-KLMXMW6Z.js.map → chunk-XPDB4O4H.js.map} +1 -1
  128. package/dist/{chunk-I3UWSGEB.js → chunk-ZK7DQRB2.js} +3 -3
  129. package/dist/{chunk-I3UWSGEB.js.map → chunk-ZK7DQRB2.js.map} +1 -1
  130. package/dist/{chunk-UXUDNBJM.js → chunk-ZSB2SPV4.js} +3 -3
  131. package/dist/{chunk-UXUDNBJM.js.map → chunk-ZSB2SPV4.js.map} +1 -1
  132. package/dist/cli/index.js +69 -68
  133. package/dist/cli/index.js.map +1 -1
  134. package/dist/connectors/config.js +4 -13
  135. package/dist/connectors/index.js +21 -20
  136. package/dist/connectors/src/config.d.ts.map +1 -1
  137. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  138. package/dist/connectors/src/materialized-connectors.d.ts.map +1 -1
  139. package/dist/connectors/src/secrets.d.ts.map +1 -1
  140. package/dist/core/index.js +8 -8
  141. package/dist/core/logging.js +2 -2
  142. package/dist/core/manifest.js +2 -2
  143. package/dist/core/provider-registry-credentials.js +2 -2
  144. package/dist/core/provider-registry.js +1 -1
  145. package/dist/core/runtime-assets.js +4 -4
  146. package/dist/core/src/index.d.ts +1 -1
  147. package/dist/core/src/index.d.ts.map +1 -1
  148. package/dist/core/src/logging/create-logger.d.ts.map +1 -1
  149. package/dist/core/src/logging/index.d.ts +1 -0
  150. package/dist/core/src/logging/index.d.ts.map +1 -1
  151. package/dist/core/src/logging/redact.d.ts +33 -0
  152. package/dist/core/src/logging/redact.d.ts.map +1 -0
  153. package/dist/core/src/logging/sanitize.d.ts +11 -0
  154. package/dist/core/src/logging/sanitize.d.ts.map +1 -1
  155. package/dist/core/src/provider-registry.d.ts +22 -0
  156. package/dist/core/src/provider-registry.d.ts.map +1 -1
  157. package/dist/core/workspace-config.js +3 -3
  158. package/dist/deploy/index.js +8 -8
  159. package/dist/discovery/index.js +3 -3
  160. package/dist/{ensure-sources-2OC2X3ZM.js → ensure-sources-ZZRU74UG.js} +16 -16
  161. package/dist/{ensure-sources-2OC2X3ZM.js.map → ensure-sources-ZZRU74UG.js.map} +1 -1
  162. package/dist/factory-assets/connectors/box.js +21 -20
  163. package/dist/factory-assets/connectors/deploy.js +21 -20
  164. package/dist/factory-assets/connectors/devserver.js +21 -20
  165. package/dist/factory-assets/connectors/flow/CONNECTOR.md +4 -2
  166. package/dist/factory-assets/connectors/flow/adapter.js +21 -20
  167. package/dist/factory-assets/connectors/flow/contract/schema.d.ts +12 -0
  168. package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
  169. package/dist/factory-assets/connectors/flow/contract.js +4 -3
  170. package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts.map +1 -1
  171. package/dist/factory-assets/connectors/flow/engine.js +12 -11
  172. package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -2
  173. package/dist/factory-assets/connectors/flow/run-flow.js +23 -22
  174. package/dist/factory-assets/connectors/flow.js +21 -20
  175. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  176. package/dist/factory-assets/connectors/git.js +21 -20
  177. package/dist/factory-assets/connectors/gmail.js +21 -20
  178. package/dist/factory-assets/connectors/googledrive.js +21 -20
  179. package/dist/factory-assets/connectors/local.js +21 -20
  180. package/dist/factory-assets/connectors/mattermost.js +21 -20
  181. package/dist/factory-assets/connectors/memory.js +21 -20
  182. package/dist/factory-assets/connectors/minio.js +21 -20
  183. package/dist/factory-assets/connectors/postgres.js +21 -20
  184. package/dist/factory-assets/connectors/s3.js +21 -20
  185. package/dist/factory-assets/connectors/sharepoint.js +21 -20
  186. package/dist/factory-assets/connectors/sqlite.js +21 -20
  187. package/dist/factory-assets/connectors/static-server.js +21 -20
  188. package/dist/factory-assets/connectors/tunnel.js +21 -20
  189. package/dist/factory-assets/connectors/webdav.js +21 -20
  190. package/dist/factory-assets/connectors/xstate-store.js +21 -20
  191. package/dist/factory-assets/connectors/xstate.js +21 -20
  192. package/dist/flows-XHRUNYJV.js +23 -0
  193. package/dist/{flows-H6FL4NZU.js.map → flows-XHRUNYJV.js.map} +1 -1
  194. package/dist/{helpers-RPJUSSG3.js → helpers-M76C6JVC.js} +16 -16
  195. package/dist/{helpers-RPJUSSG3.js.map → helpers-M76C6JVC.js.map} +1 -1
  196. package/dist/library/index.js +11 -11
  197. package/dist/library/install.js +1 -15
  198. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  199. package/dist/{library-publish-AAD6GTIF.js → library-publish-EQYEJXWO.js} +23 -22
  200. package/dist/library-publish-EQYEJXWO.js.map +1 -0
  201. package/dist/open-library-YTP7CVVT.js +36 -0
  202. package/dist/{open-library-HDOM4MLS.js.map → open-library-YTP7CVVT.js.map} +1 -1
  203. package/dist/paths-BG3I2LPM.js +19 -0
  204. package/dist/{paths-RL6NZW5X.js.map → paths-BG3I2LPM.js.map} +1 -1
  205. package/dist/{plugin-store-ZTAJCMTY.js → plugin-store-BCNR6ZBP.js} +10 -10
  206. package/dist/{plugin-store-ZTAJCMTY.js.map → plugin-store-BCNR6ZBP.js.map} +1 -1
  207. package/dist/{project-2B52FKAY.js → project-THCZLS67.js} +17 -17
  208. package/dist/{project-2B52FKAY.js.map → project-THCZLS67.js.map} +1 -1
  209. package/dist/resolver/index.js +9 -9
  210. package/dist/runner/index.js +32 -31
  211. package/dist/runner/src/capability-registry.d.ts +13 -1
  212. package/dist/runner/src/capability-registry.d.ts.map +1 -1
  213. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  214. package/dist/runner/src/log-content.d.ts +22 -0
  215. package/dist/runner/src/log-content.d.ts.map +1 -0
  216. package/dist/runner/src/serve.d.ts.map +1 -1
  217. package/dist/runner/src/session-builder.d.ts.map +1 -1
  218. package/dist/sdk/asset-manager.js +13 -13
  219. package/dist/sdk/bridge.js +13 -13
  220. package/dist/sdk/core.js +8 -8
  221. package/dist/sdk/flow.js +12 -11
  222. package/dist/sdk/index.js +32 -31
  223. package/dist/sdk/index.js.map +1 -1
  224. package/dist/sdk/resolver.js +9 -9
  225. package/dist/sdk/runner.js +32 -31
  226. package/dist/{setup-MVBITSVT.js → setup-QN4HKSFJ.js} +22 -22
  227. package/dist/{setup-MVBITSVT.js.map → setup-QN4HKSFJ.js.map} +1 -1
  228. package/dist/skills-FKVBIDNM.js +23 -0
  229. package/dist/{skills-Y6MU2NRI.js.map → skills-FKVBIDNM.js.map} +1 -1
  230. package/dist/source-5EAGZA6K.js +37 -0
  231. package/dist/{source-53PY7DXF.js.map → source-5EAGZA6K.js.map} +1 -1
  232. package/dist/{source-manifest-publish-ALRZKEBO.js → source-manifest-publish-57SGT7Q3.js} +24 -23
  233. package/dist/source-manifest-publish-57SGT7Q3.js.map +1 -0
  234. package/dist/tui/index.js +32 -31
  235. package/dist/tui/index.js.map +1 -1
  236. package/dist/types/src/manifests/preset.d.ts +5 -5
  237. package/dist/workspace-plugin/adapters/mcp.js +14 -14
  238. package/dist/workspace-plugin/adapters/omp.js +7 -7
  239. package/dist/workspace-plugin/index.js +3 -3
  240. package/package.json +2 -1
  241. package/dist/chunk-35PMOWAD.js.map +0 -1
  242. package/dist/chunk-6XKQEDF7.js.map +0 -1
  243. package/dist/chunk-AT2TJEWG.js.map +0 -1
  244. package/dist/chunk-ELPR5XBG.js.map +0 -1
  245. package/dist/chunk-GXACG5ZE.js.map +0 -1
  246. package/dist/chunk-IECQMSQ5.js.map +0 -1
  247. package/dist/chunk-ILG4BXYE.js.map +0 -1
  248. package/dist/chunk-O3DHAGBO.js.map +0 -1
  249. package/dist/chunk-OUJVFZWJ.js.map +0 -1
  250. package/dist/chunk-REYJKU7T.js.map +0 -1
  251. package/dist/chunk-S2MT6SDZ.js.map +0 -1
  252. package/dist/chunk-UKJMQZV6.js.map +0 -1
  253. package/dist/chunk-W4IPN3DD.js.map +0 -1
  254. package/dist/flows-H6FL4NZU.js +0 -23
  255. package/dist/library-publish-AAD6GTIF.js.map +0 -1
  256. package/dist/open-library-HDOM4MLS.js +0 -35
  257. package/dist/paths-RL6NZW5X.js +0 -19
  258. package/dist/skills-Y6MU2NRI.js +0 -23
  259. package/dist/source-53PY7DXF.js +0 -36
  260. package/dist/source-manifest-publish-ALRZKEBO.js.map +0 -1
@@ -597,15 +597,15 @@ function inspectFlowExpression(expression, requireBoolean = true) {
597
597
  const tokens = tokenize(expression);
598
598
  if (expression.trim() === "default") return [];
599
599
  const references = /* @__PURE__ */ new Map();
600
- const record3 = (path, booleanOperand) => {
600
+ const record2 = (path, booleanOperand) => {
601
601
  references.set(path, (references.get(path) ?? false) || booleanOperand);
602
602
  };
603
603
  const context = { flow: { input: {} }, nodes: {} };
604
604
  const result = new Parser(
605
605
  tokens,
606
606
  context,
607
- (path) => record3(path, false),
608
- (path) => record3(path, true)
607
+ (path) => record2(path, false),
608
+ (path) => record2(path, true)
609
609
  ).parse(false);
610
610
  if (requireBoolean && typeof result !== "boolean" && result !== STATIC_BOOLEAN) {
611
611
  throw expressionError("must evaluate to a boolean");
@@ -1028,8 +1028,14 @@ function knownNonBooleanType(schema) {
1028
1028
  }
1029
1029
  return void 0;
1030
1030
  }
1031
+ function hasConstantlyFalsePrecondition(node) {
1032
+ return node.contract?.requires?.some((requirement) => requirement.expr.trim() === "false") ?? false;
1033
+ }
1031
1034
  function optionalRefusalReason(node) {
1032
1035
  if (node.run.kind === "gate") return "a first-class gate node cannot be optional";
1036
+ if (node.run.kind === "router" && !hasConstantlyFalsePrecondition(node)) {
1037
+ return `router ${node.id} cannot be optional \u2014 skipping it would satisfy every outgoing edge at once and admit every branch instead of selecting one; only an inert placeholder router (contract.requires containing { expr: "false" }) may carry control.optional`;
1038
+ }
1033
1039
  if (node.run.kind === "check") {
1034
1040
  return "a check node cannot be optional \u2014 an optional verification either hides a false green (escalate) or hangs the run forever (fail); reject the check entirely if it should not gate the run";
1035
1041
  }
@@ -1304,365 +1310,7 @@ function validateClassifierRules(flow, context) {
1304
1310
  }
1305
1311
  }
1306
1312
  }
1307
- var successfullyParsedDefinitions = /* @__PURE__ */ new WeakMap();
1308
- function valueFingerprint(value, ancestors) {
1309
- if (value === null) return "null";
1310
- if (value === void 0) return "undefined";
1311
- if (typeof value === "string") return `string:${JSON.stringify(value)}`;
1312
- if (typeof value === "boolean") return `boolean:${value}`;
1313
- if (typeof value === "number") {
1314
- if (!Number.isFinite(value)) return null;
1315
- return `number:${Object.is(value, -0) ? "-0" : value}`;
1316
- }
1317
- if (typeof value !== "object" || ancestors.has(value)) return null;
1318
- ancestors.add(value);
1319
- try {
1320
- if (Array.isArray(value)) {
1321
- if (Object.getPrototypeOf(value) !== Array.prototype) return null;
1322
- if (Object.getOwnPropertySymbols(value).length > 0) return null;
1323
- const names = Object.getOwnPropertyNames(value);
1324
- if (names.length !== value.length + 1 || !names.includes("length")) return null;
1325
- const items = [];
1326
- for (let index = 0; index < value.length; index += 1) {
1327
- const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
1328
- if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) return null;
1329
- const item = valueFingerprint(descriptor.value, ancestors);
1330
- if (item === null) return null;
1331
- items.push(item);
1332
- }
1333
- return `array:[${items.join(",")}]`;
1334
- }
1335
- const prototype = Object.getPrototypeOf(value);
1336
- if (prototype !== Object.prototype && prototype !== null) return null;
1337
- if (Object.getOwnPropertySymbols(value).length > 0) return null;
1338
- const entries = [];
1339
- for (const key of Object.getOwnPropertyNames(value).sort()) {
1340
- const descriptor = Object.getOwnPropertyDescriptor(value, key);
1341
- if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) return null;
1342
- const nested = valueFingerprint(descriptor.value, ancestors);
1343
- if (nested === null) return null;
1344
- entries.push(`${JSON.stringify(key)}:${nested}`);
1345
- }
1346
- return `object:{${entries.join(",")}}`;
1347
- } finally {
1348
- ancestors.delete(value);
1349
- }
1350
- }
1351
- function definitionFingerprint(data) {
1352
- return valueFingerprint(data, /* @__PURE__ */ new Set());
1353
- }
1354
- var LegacyRouteSchema = z.looseObject({
1355
- condition: z.string().min(1),
1356
- target: z.string().min(1).nullable()
1357
- });
1358
- var LegacyNodeDataSchema = z.looseObject({
1359
- skill: z.string().min(1).optional(),
1360
- version: z.string().min(1).optional(),
1361
- label: z.string().min(1).optional(),
1362
- description: z.string().min(1).optional(),
1363
- optional: z.boolean().optional(),
1364
- approval: z.looseObject({ mandatory: z.boolean().optional() }).optional(),
1365
- parameters: z.record(z.string(), z.unknown()).optional(),
1366
- phase: z.string().min(1).optional(),
1367
- parallel_group: z.string().min(1).optional(),
1368
- flow: z.string().min(1).optional(),
1369
- pass_context: z.boolean().optional(),
1370
- message: z.string().min(1).optional(),
1371
- routes: z.array(LegacyRouteSchema).optional(),
1372
- assets: z.array(z.string().min(1)).optional()
1373
- });
1374
- var LegacyNodeSchema = z.looseObject({
1375
- id: z.string().min(1),
1376
- type: z.string().min(1).optional(),
1377
- skill: z.string().min(1).optional(),
1378
- label: z.string().min(1).optional(),
1379
- description: z.string().min(1).optional(),
1380
- data: LegacyNodeDataSchema.optional()
1381
- });
1382
- var LegacyEdgeSchema = z.looseObject({
1383
- id: z.string().min(1).optional(),
1384
- source: z.string().min(1),
1385
- target: z.string().min(1),
1386
- type: z.string().min(1).optional()
1387
- });
1388
- var LegacyFlowSchema = z.looseObject({
1389
- id: z.string().min(1),
1390
- version: z.string().min(1).optional(),
1391
- name: z.string().min(1),
1392
- description: z.string().min(1).optional(),
1393
- requires: z.array(z.string().min(1)).optional(),
1394
- globals: z.record(z.string(), z.unknown()).optional(),
1395
- entry: z.string().min(1).optional(),
1396
- nodes: z.array(LegacyNodeSchema).optional(),
1397
- edges: z.array(LegacyEdgeSchema).optional(),
1398
- meta: z.record(z.string(), z.unknown()).optional(),
1399
- metadata: z.record(z.string(), z.unknown()).optional()
1400
- });
1401
- function success(data) {
1402
- const fingerprint = definitionFingerprint(data);
1403
- if (fingerprint !== null) successfullyParsedDefinitions.set(data, fingerprint);
1404
- return { ok: true, data };
1405
- }
1406
- function failure(error) {
1407
- return {
1408
- ok: false,
1409
- errors: error.issues.map((issue) => ({
1410
- path: issue.path.map(String).join("."),
1411
- message: issue.message
1412
- }))
1413
- };
1414
- }
1415
- var LEGACY_DEFAULT_KEYS = {
1416
- approval_mode: "approval",
1417
- research_depth: "researchDepth",
1418
- auto_review: "autoReview",
1419
- verbosity: "verbosity",
1420
- cli_mode: "cliMode",
1421
- run_input: "run_input"
1422
- };
1423
- var DROPPED_LEGACY_DEFAULT_KEYS = /* @__PURE__ */ new Set(["subagent_mode"]);
1424
- function normalizeDefaults(globals) {
1425
- if (!globals) return void 0;
1426
- const known = {};
1427
- const parameters = {};
1428
- for (const [key, value] of Object.entries(globals)) {
1429
- if (DROPPED_LEGACY_DEFAULT_KEYS.has(key)) continue;
1430
- const normalizedKey = LEGACY_DEFAULT_KEYS[key];
1431
- if (normalizedKey) {
1432
- known[normalizedKey] = key === "approval_mode" && value === "auto_approve" ? "auto" : value;
1433
- } else {
1434
- parameters[key] = value;
1435
- }
1436
- }
1437
- if (Object.keys(parameters).length > 0) known.parameters = parameters;
1438
- return Object.keys(known).length > 0 ? known : void 0;
1439
- }
1440
- function normalizeMeta(value) {
1441
- if (!value) return void 0;
1442
- const meta = {};
1443
- if (typeof value.icon === "string") meta.icon = value.icon;
1444
- if (typeof value.category === "string") meta.category = value.category;
1445
- if (Array.isArray(value.tags)) meta.tags = value.tags;
1446
- if (typeof value.stage === "string") meta.stage = value.stage;
1447
- if (typeof value.onboarding === "object" && value.onboarding !== null) {
1448
- const onboarding = value.onboarding;
1449
- if (onboarding.input_style === "freeform" || onboarding.input_style === "structured" || onboarding.input_style === "repo") {
1450
- meta.onboarding = {
1451
- input_style: onboarding.input_style,
1452
- ...typeof onboarding.placeholder === "string" ? { placeholder: onboarding.placeholder } : {},
1453
- ...Array.isArray(onboarding.fields) ? { fields: onboarding.fields } : {}
1454
- };
1455
- }
1456
- }
1457
- return Object.keys(meta).length > 0 ? meta : void 0;
1458
- }
1459
- function normalizeLegacyBinding(value) {
1460
- if (typeof value === "string") {
1461
- return value.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_match, key) => {
1462
- const normalized = LEGACY_DEFAULT_KEYS[key];
1463
- return `\${defaults.${normalized ?? `parameters.${key}`}}`;
1464
- });
1465
- }
1466
- if (Array.isArray(value)) return value.map(normalizeLegacyBinding);
1467
- if (typeof value !== "object" || value === null) return value;
1468
- return Object.fromEntries(
1469
- Object.entries(value).map(([key, nested]) => [key, normalizeLegacyBinding(nested)])
1470
- );
1471
- }
1472
- function renderLegacyCheck(check) {
1473
- try {
1474
- return JSON.stringify(check) ?? String(check);
1475
- } catch {
1476
- return String(check);
1477
- }
1478
- }
1479
- var LEGACY_GATE_ON_FAIL = "pause-for-human";
1480
- function normalizeLegacyGate(node, index, label, description) {
1481
- const data = node.data ?? {};
1482
- const raw = data;
1483
- const refuse = (field, message) => ({
1484
- ok: false,
1485
- error: { path: `nodes.${index}.data.${field}`, message }
1486
- });
1487
- if (data.optional === true) {
1488
- return refuse("optional", `gate ${node.id} cannot be optional \u2014 a skippable gate never gates`);
1489
- }
1490
- if (raw.on_fail !== void 0 && raw.on_fail !== LEGACY_GATE_ON_FAIL) {
1491
- return refuse(
1492
- "on_fail",
1493
- `gate ${node.id} has unsupported on_fail ${JSON.stringify(raw.on_fail)}; only "${LEGACY_GATE_ON_FAIL}" can be preserved`
1494
- );
1495
- }
1496
- const check = raw.check === void 0 || raw.check === null || raw.check === "" ? void 0 : typeof raw.check === "string" ? raw.check : renderLegacyCheck(raw.check);
1497
- const basePrompt = data.message ?? description;
1498
- const prompt = check !== void 0 ? `${basePrompt}
1499
-
1500
- Approval criterion (not evaluated automatically): ${check}` : basePrompt;
1501
- return {
1502
- ok: true,
1503
- node: {
1504
- id: node.id,
1505
- label,
1506
- description,
1507
- phase: data.phase,
1508
- run: {
1509
- kind: "gate",
1510
- prompt,
1511
- schema: { kind: "text" },
1512
- assets: data.assets && data.assets.length > 0 ? [...new Set(data.assets)] : void 0
1513
- },
1514
- // No `contract.input`: a gate resolves no bindings, so v1 parameters would be dead weight.
1515
- control: data.parallel_group ? { parallelGroup: data.parallel_group } : void 0
1516
- }
1517
- };
1518
- }
1519
- function normalizeV1(data) {
1520
- const legacyResult = LegacyFlowSchema.safeParse(data);
1521
- if (!legacyResult.success) return failure(legacyResult.error);
1522
- const legacy = legacyResult.data;
1523
- const contradiction = (legacy.nodes ?? []).findIndex(
1524
- (node) => node.data?.optional === true && node.data.approval?.mandatory === true
1525
- );
1526
- if (contradiction !== -1) {
1527
- return {
1528
- ok: false,
1529
- errors: [
1530
- {
1531
- path: `nodes.${contradiction}.data`,
1532
- message: "a node cannot be both optional and a mandatory approval gate"
1533
- }
1534
- ]
1535
- };
1536
- }
1537
- const nodes = [];
1538
- for (const [index, node] of (legacy.nodes ?? []).entries()) {
1539
- const data2 = node.data ?? {};
1540
- const kind = node.type;
1541
- const label = data2.label ?? node.label ?? data2.skill ?? node.skill ?? node.id;
1542
- const description = node.description ?? data2.description ?? data2.message ?? label;
1543
- if (kind === "sub-flow" && data2.flow) {
1544
- const delegatedAsset = `flow:${data2.flow}`;
1545
- const assets2 = [.../* @__PURE__ */ new Set([delegatedAsset, ...data2.assets ?? []])];
1546
- const parameters2 = data2.parameters ?? {};
1547
- const control2 = {
1548
- optional: data2.optional,
1549
- parallelGroup: data2.parallel_group
1550
- };
1551
- nodes.push({
1552
- id: node.id,
1553
- label,
1554
- description,
1555
- phase: data2.phase,
1556
- run: {
1557
- kind: "sub-flow",
1558
- flow: data2.flow,
1559
- passContext: data2.pass_context,
1560
- assets: assets2
1561
- },
1562
- contract: Object.keys(parameters2).length > 0 ? { input: normalizeLegacyBinding(parameters2) } : void 0,
1563
- control: Object.values(control2).some((value) => value !== void 0) ? control2 : void 0
1564
- });
1565
- continue;
1566
- }
1567
- if (kind === "gate") {
1568
- const gateResult = normalizeLegacyGate(node, index, label, description);
1569
- if (!gateResult.ok) return { ok: false, errors: [gateResult.error] };
1570
- nodes.push(gateResult.node);
1571
- continue;
1572
- }
1573
- if (kind !== "skill") {
1574
- const delegatedAsset = kind === "sub-flow" && data2.flow ? `flow:${data2.flow}` : void 0;
1575
- const assets2 = [
1576
- .../* @__PURE__ */ new Set([...delegatedAsset ? [delegatedAsset] : [], ...data2.assets ?? []])
1577
- ];
1578
- const parameters2 = data2.parameters ?? {};
1579
- nodes.push({
1580
- id: node.id,
1581
- label,
1582
- description,
1583
- phase: data2.phase,
1584
- run: {
1585
- kind: "router",
1586
- routes: [{ when: "default", target: null }],
1587
- assets: assets2.length > 0 ? assets2 : void 0
1588
- },
1589
- contract: {
1590
- requires: [{ expr: "false" }],
1591
- input: Object.keys(parameters2).length > 0 ? normalizeLegacyBinding(parameters2) : void 0
1592
- },
1593
- control: { optional: true, parallelGroup: data2.parallel_group }
1594
- });
1595
- continue;
1596
- }
1597
- const parameters = { ...data2.parameters ?? {} };
1598
- const authoredInstruction = parameters.instructions;
1599
- delete parameters.instructions;
1600
- const instruction = typeof authoredInstruction === "string" && authoredInstruction.length > 0 ? authoredInstruction : description;
1601
- const skill = data2.skill ?? node.skill;
1602
- const skillAsset = skill ? `skill:${skill}${data2.version !== void 0 ? `#${data2.version}` : ""}` : void 0;
1603
- const assets = [...skillAsset ? [skillAsset] : [], ...data2.assets ?? []];
1604
- const control = {
1605
- optional: data2.optional,
1606
- parallelGroup: data2.parallel_group
1607
- };
1608
- nodes.push({
1609
- id: node.id,
1610
- label,
1611
- description,
1612
- phase: data2.phase,
1613
- run: {
1614
- kind: "agent",
1615
- instruction,
1616
- assets: assets.length > 0 ? assets : void 0
1617
- },
1618
- contract: Object.keys(parameters).length > 0 ? { input: normalizeLegacyBinding(parameters) } : void 0,
1619
- gate: data2.approval?.mandatory === true ? { approval: "mandatory" } : void 0,
1620
- control: Object.values(control).some((value) => value !== void 0) ? control : void 0
1621
- });
1622
- }
1623
- const nodeIds = new Set(nodes.map((node) => node.id));
1624
- const edges = (legacy.edges ?? []).map((edge, index) => ({
1625
- ...edge,
1626
- id: edge.id ?? `${edge.source}-${edge.target}-${index}`,
1627
- type: edge.type ?? "optional"
1628
- }));
1629
- const anchor = nodes.find((node) => node.id === legacy.entry) ?? (nodes.length > 0 ? nodes[0] : void 0);
1630
- if (anchor && legacy.requires && legacy.requires.length > 0) {
1631
- const run = anchor.run;
1632
- const existingAssets = Array.isArray(run.assets) ? run.assets : [];
1633
- run.assets = [.../* @__PURE__ */ new Set([...existingAssets, ...legacy.requires])];
1634
- }
1635
- const candidate = {
1636
- schemaVersion: 2,
1637
- id: legacy.id,
1638
- version: legacy.version ?? "1.0.0",
1639
- name: legacy.name,
1640
- description: legacy.description,
1641
- defaults: normalizeDefaults(legacy.globals),
1642
- entry: legacy.entry !== void 0 && nodeIds.has(legacy.entry) ? legacy.entry : void 0,
1643
- nodes,
1644
- edges,
1645
- meta: normalizeMeta({ ...legacy.metadata ?? {}, ...legacy.meta ?? {} })
1646
- };
1647
- const normalized = parseFlowDefinitionStructure({ ...candidate, edges: [] });
1648
- if (!normalized.success) return failure(normalized.error);
1649
- const parsed = { ...normalized.data, edges };
1650
- return success(parsed);
1651
- }
1652
- function parseFlowDefinition(data) {
1653
- if (typeof data === "object" && data !== null) {
1654
- const recorded = successfullyParsedDefinitions.get(data);
1655
- if (recorded !== void 0 && definitionFingerprint(data) === recorded) {
1656
- return { ok: true, data };
1657
- }
1658
- }
1659
- if (typeof data === "object" && data !== null && Object.hasOwn(data, "schemaVersion")) {
1660
- const result = FlowDefinitionSchema.safeParse(data);
1661
- return result.success ? success(result.data) : failure(result.error);
1662
- }
1663
- return normalizeV1(data);
1664
- }
1665
1313
 
1666
- export { FLOW_EXPRESSION_LIMITS, FlowDefinitionSchema, FlowExpressionError, InputSchema, RESERVED_CLASSIFIER_FIELDS, checkClassifierShape, classifierDecision, collectFlowBindingExpressions, declaresReservedClassifierField, evaluate, evaluateFlowExpression, inspectFlowExpression, inspectFlowExpressionComparisons, normalizeV1, parseFlowDefinition, resolveFlowBindings, stableFlowJson, withoutReservedClassifierFields };
1667
- //# sourceMappingURL=chunk-REYJKU7T.js.map
1668
- //# sourceMappingURL=chunk-REYJKU7T.js.map
1314
+ export { FLOW_EXPRESSION_LIMITS, FlowDefinitionSchema, FlowExpressionError, InputSchema, RESERVED_CLASSIFIER_FIELDS, checkClassifierShape, classifierDecision, collectFlowBindingExpressions, declaresReservedClassifierField, evaluate, evaluateFlowExpression, hasConstantlyFalsePrecondition, inspectFlowExpression, inspectFlowExpressionComparisons, parseFlowDefinitionStructure, resolveFlowBindings, stableFlowJson, withoutReservedClassifierFields };
1315
+ //# sourceMappingURL=chunk-DHMBE5J7.js.map
1316
+ //# sourceMappingURL=chunk-DHMBE5J7.js.map