@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
@@ -1,4 +1,4 @@
1
- import { findAiAssetsRoot } from './chunk-7BUZQVRR.js';
1
+ import { findAiAssetsRoot } from './chunk-Q6NDQ6BH.js';
2
2
 
3
3
  // workspace-plugin/src/utils/ai-assets.ts
4
4
  function findAiAssetsRoot2(startDir) {
@@ -6,5 +6,5 @@ function findAiAssetsRoot2(startDir) {
6
6
  }
7
7
 
8
8
  export { findAiAssetsRoot2 as findAiAssetsRoot };
9
- //# sourceMappingURL=chunk-7IRJ4K4F.js.map
10
- //# sourceMappingURL=chunk-7IRJ4K4F.js.map
9
+ //# sourceMappingURL=chunk-7IH3RKKK.js.map
10
+ //# sourceMappingURL=chunk-7IH3RKKK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/utils/ai-assets.ts"],"names":["findAiAssetsRoot"],"mappings":";;;AA+BO,SAASA,kBAAiB,QAAA,EAA0C;AACzE,EAAA,OAAO,iBAAuB,QAAQ,CAAA;AACxC","file":"chunk-7IRJ4K4F.js","sourcesContent":["// utils/ai-assets.ts\n// Shared utility for locating the ai-assets root directory.\n//\n// This is NOT a startup path (an earlier comment here claimed it was). Every\n// caller is an agent-invokable tool in `tools/flows.ts` / `tools/skills.ts`, so\n// the walk runs on a request path inside the long-lived `skaile serve` process,\n// once per tool invocation. With `projectDir = /skaile` the upward walk passes\n// directly beside the rclone FUSE workspace mount, so a synchronous `statSync`\n// here parks the whole event loop when that mount wedges — the failure mode\n// behind the 2026-08-07 outages. See issue #454.\nimport { findAiAssetsRoot as findAiAssetsRootShared } from \"@skaile/workspaces/asset-manager/catalog-deployer\";\n\n/**\n * Walk up from `startDir` looking for an `ai-assets/` directory.\n *\n * Delegates to the shared implementation in `asset-manager/catalog-deployer`,\n * which is async, deadline-bounded, level-capped, and refuses a candidate that\n * resolves at or under a workspace mount (continuing upward so a legitimate\n * parent still wins).\n *\n * @param startDir - Absolute path to begin the upward search from (typically\n * the skaile `projectDir`).\n * Note the upward walk is now level-capped rather than running to the\n * filesystem root. Six levels covers every real layout and stops an\n * unbounded climb across mount boundaries.\n *\n * @returns Absolute path to the first usable `ai-assets/` directory found, or\n * `null` if no match exists within the cap.\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport function findAiAssetsRoot(startDir: string): Promise<string | null> {\n return findAiAssetsRootShared(startDir);\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/utils/ai-assets.ts"],"names":["findAiAssetsRoot"],"mappings":";;;AA+BO,SAASA,kBAAiB,QAAA,EAA0C;AACzE,EAAA,OAAO,iBAAuB,QAAQ,CAAA;AACxC","file":"chunk-7IH3RKKK.js","sourcesContent":["// utils/ai-assets.ts\n// Shared utility for locating the ai-assets root directory.\n//\n// This is NOT a startup path (an earlier comment here claimed it was). Every\n// caller is an agent-invokable tool in `tools/flows.ts` / `tools/skills.ts`, so\n// the walk runs on a request path inside the long-lived `skaile serve` process,\n// once per tool invocation. With `projectDir = /skaile` the upward walk passes\n// directly beside the rclone FUSE workspace mount, so a synchronous `statSync`\n// here parks the whole event loop when that mount wedges — the failure mode\n// behind the 2026-08-07 outages. See issue #454.\nimport { findAiAssetsRoot as findAiAssetsRootShared } from \"@skaile/workspaces/asset-manager/catalog-deployer\";\n\n/**\n * Walk up from `startDir` looking for an `ai-assets/` directory.\n *\n * Delegates to the shared implementation in `asset-manager/catalog-deployer`,\n * which is async, deadline-bounded, level-capped, and refuses a candidate that\n * resolves at or under a workspace mount (continuing upward so a legitimate\n * parent still wins).\n *\n * @param startDir - Absolute path to begin the upward search from (typically\n * the skaile `projectDir`).\n * Note the upward walk is now level-capped rather than running to the\n * filesystem root. Six levels covers every real layout and stops an\n * unbounded climb across mount boundaries.\n *\n * @returns Absolute path to the first usable `ai-assets/` directory found, or\n * `null` if no match exists within the cap.\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport function findAiAssetsRoot(startDir: string): Promise<string | null> {\n return findAiAssetsRootShared(startDir);\n}\n"]}
@@ -0,0 +1,365 @@
1
+ import { parseFlowDefinitionStructure, FlowDefinitionSchema } from './chunk-DHMBE5J7.js';
2
+ import * as z from 'zod';
3
+
4
+ var successfullyParsedDefinitions = /* @__PURE__ */ new WeakMap();
5
+ function valueFingerprint(value, ancestors) {
6
+ if (value === null) return "null";
7
+ if (value === void 0) return "undefined";
8
+ if (typeof value === "string") return `string:${JSON.stringify(value)}`;
9
+ if (typeof value === "boolean") return `boolean:${value}`;
10
+ if (typeof value === "number") {
11
+ if (!Number.isFinite(value)) return null;
12
+ return `number:${Object.is(value, -0) ? "-0" : value}`;
13
+ }
14
+ if (typeof value !== "object" || ancestors.has(value)) return null;
15
+ ancestors.add(value);
16
+ try {
17
+ if (Array.isArray(value)) {
18
+ if (Object.getPrototypeOf(value) !== Array.prototype) return null;
19
+ if (Object.getOwnPropertySymbols(value).length > 0) return null;
20
+ const names = Object.getOwnPropertyNames(value);
21
+ if (names.length !== value.length + 1 || !names.includes("length")) return null;
22
+ const items = [];
23
+ for (let index = 0; index < value.length; index += 1) {
24
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
25
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) return null;
26
+ const item = valueFingerprint(descriptor.value, ancestors);
27
+ if (item === null) return null;
28
+ items.push(item);
29
+ }
30
+ return `array:[${items.join(",")}]`;
31
+ }
32
+ const prototype = Object.getPrototypeOf(value);
33
+ if (prototype !== Object.prototype && prototype !== null) return null;
34
+ if (Object.getOwnPropertySymbols(value).length > 0) return null;
35
+ const entries = [];
36
+ for (const key of Object.getOwnPropertyNames(value).sort()) {
37
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
38
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) return null;
39
+ const nested = valueFingerprint(descriptor.value, ancestors);
40
+ if (nested === null) return null;
41
+ entries.push(`${JSON.stringify(key)}:${nested}`);
42
+ }
43
+ return `object:{${entries.join(",")}}`;
44
+ } finally {
45
+ ancestors.delete(value);
46
+ }
47
+ }
48
+ function definitionFingerprint(data) {
49
+ return valueFingerprint(data, /* @__PURE__ */ new Set());
50
+ }
51
+ var LegacyRouteSchema = z.looseObject({
52
+ condition: z.string().min(1),
53
+ target: z.string().min(1).nullable()
54
+ });
55
+ var LegacyNodeDataSchema = z.looseObject({
56
+ skill: z.string().min(1).optional(),
57
+ version: z.string().min(1).optional(),
58
+ label: z.string().min(1).optional(),
59
+ description: z.string().min(1).optional(),
60
+ optional: z.boolean().optional(),
61
+ approval: z.looseObject({ mandatory: z.boolean().optional() }).optional(),
62
+ parameters: z.record(z.string(), z.unknown()).optional(),
63
+ phase: z.string().min(1).optional(),
64
+ parallel_group: z.string().min(1).optional(),
65
+ flow: z.string().min(1).optional(),
66
+ pass_context: z.boolean().optional(),
67
+ message: z.string().min(1).optional(),
68
+ routes: z.array(LegacyRouteSchema).optional(),
69
+ assets: z.array(z.string().min(1)).optional()
70
+ });
71
+ var LegacyNodeSchema = z.looseObject({
72
+ id: z.string().min(1),
73
+ type: z.string().min(1).optional(),
74
+ skill: z.string().min(1).optional(),
75
+ label: z.string().min(1).optional(),
76
+ description: z.string().min(1).optional(),
77
+ data: LegacyNodeDataSchema.optional()
78
+ });
79
+ var LegacyEdgeSchema = z.looseObject({
80
+ id: z.string().min(1).optional(),
81
+ source: z.string().min(1),
82
+ target: z.string().min(1),
83
+ type: z.string().min(1).optional()
84
+ });
85
+ var LegacyFlowSchema = z.looseObject({
86
+ id: z.string().min(1),
87
+ version: z.string().min(1).optional(),
88
+ name: z.string().min(1),
89
+ description: z.string().min(1).optional(),
90
+ requires: z.array(z.string().min(1)).optional(),
91
+ globals: z.record(z.string(), z.unknown()).optional(),
92
+ entry: z.string().min(1).optional(),
93
+ nodes: z.array(LegacyNodeSchema).optional(),
94
+ edges: z.array(LegacyEdgeSchema).optional(),
95
+ meta: z.record(z.string(), z.unknown()).optional(),
96
+ metadata: z.record(z.string(), z.unknown()).optional()
97
+ });
98
+ function success(data) {
99
+ const fingerprint = definitionFingerprint(data);
100
+ if (fingerprint !== null) successfullyParsedDefinitions.set(data, fingerprint);
101
+ return { ok: true, data };
102
+ }
103
+ function failure(error) {
104
+ return {
105
+ ok: false,
106
+ errors: error.issues.map((issue) => ({
107
+ path: issue.path.map(String).join("."),
108
+ message: issue.message
109
+ }))
110
+ };
111
+ }
112
+ var LEGACY_DEFAULT_KEYS = {
113
+ approval_mode: "approval",
114
+ research_depth: "researchDepth",
115
+ auto_review: "autoReview",
116
+ verbosity: "verbosity",
117
+ cli_mode: "cliMode",
118
+ run_input: "run_input"
119
+ };
120
+ var DROPPED_LEGACY_DEFAULT_KEYS = /* @__PURE__ */ new Set(["subagent_mode"]);
121
+ function normalizeDefaults(globals) {
122
+ if (!globals) return void 0;
123
+ const known = {};
124
+ const parameters = {};
125
+ for (const [key, value] of Object.entries(globals)) {
126
+ if (DROPPED_LEGACY_DEFAULT_KEYS.has(key)) continue;
127
+ const normalizedKey = LEGACY_DEFAULT_KEYS[key];
128
+ if (normalizedKey) {
129
+ known[normalizedKey] = key === "approval_mode" && value === "auto_approve" ? "auto" : value;
130
+ } else {
131
+ parameters[key] = value;
132
+ }
133
+ }
134
+ if (Object.keys(parameters).length > 0) known.parameters = parameters;
135
+ return Object.keys(known).length > 0 ? known : void 0;
136
+ }
137
+ function normalizeMeta(value) {
138
+ if (!value) return void 0;
139
+ const meta = {};
140
+ if (typeof value.icon === "string") meta.icon = value.icon;
141
+ if (typeof value.category === "string") meta.category = value.category;
142
+ if (Array.isArray(value.tags)) meta.tags = value.tags;
143
+ if (typeof value.stage === "string") meta.stage = value.stage;
144
+ if (typeof value.onboarding === "object" && value.onboarding !== null) {
145
+ const onboarding = value.onboarding;
146
+ if (onboarding.input_style === "freeform" || onboarding.input_style === "structured" || onboarding.input_style === "repo") {
147
+ meta.onboarding = {
148
+ input_style: onboarding.input_style,
149
+ ...typeof onboarding.placeholder === "string" ? { placeholder: onboarding.placeholder } : {},
150
+ ...Array.isArray(onboarding.fields) ? { fields: onboarding.fields } : {}
151
+ };
152
+ }
153
+ }
154
+ return Object.keys(meta).length > 0 ? meta : void 0;
155
+ }
156
+ function normalizeLegacyBinding(value) {
157
+ if (typeof value === "string") {
158
+ return value.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_match, key) => {
159
+ const normalized = LEGACY_DEFAULT_KEYS[key];
160
+ return `\${defaults.${normalized ?? `parameters.${key}`}}`;
161
+ });
162
+ }
163
+ if (Array.isArray(value)) return value.map(normalizeLegacyBinding);
164
+ if (typeof value !== "object" || value === null) return value;
165
+ return Object.fromEntries(
166
+ Object.entries(value).map(([key, nested]) => [key, normalizeLegacyBinding(nested)])
167
+ );
168
+ }
169
+ function renderLegacyCheck(check) {
170
+ try {
171
+ return JSON.stringify(check) ?? String(check);
172
+ } catch {
173
+ return String(check);
174
+ }
175
+ }
176
+ var LEGACY_GATE_ON_FAIL = "pause-for-human";
177
+ function normalizeLegacyGate(node, index, label, description) {
178
+ const data = node.data ?? {};
179
+ const raw = data;
180
+ const refuse = (field, message) => ({
181
+ ok: false,
182
+ error: { path: `nodes.${index}.data.${field}`, message }
183
+ });
184
+ if (data.optional === true) {
185
+ return refuse("optional", `gate ${node.id} cannot be optional \u2014 a skippable gate never gates`);
186
+ }
187
+ if (raw.on_fail !== void 0 && raw.on_fail !== LEGACY_GATE_ON_FAIL) {
188
+ return refuse(
189
+ "on_fail",
190
+ `gate ${node.id} has unsupported on_fail ${JSON.stringify(raw.on_fail)}; only "${LEGACY_GATE_ON_FAIL}" can be preserved`
191
+ );
192
+ }
193
+ const check = raw.check === void 0 || raw.check === null || raw.check === "" ? void 0 : typeof raw.check === "string" ? raw.check : renderLegacyCheck(raw.check);
194
+ const basePrompt = data.message ?? description;
195
+ const prompt = check !== void 0 ? `${basePrompt}
196
+
197
+ Approval criterion (not evaluated automatically): ${check}` : basePrompt;
198
+ return {
199
+ ok: true,
200
+ node: {
201
+ id: node.id,
202
+ label,
203
+ description,
204
+ phase: data.phase,
205
+ run: {
206
+ kind: "gate",
207
+ prompt,
208
+ schema: { kind: "text" },
209
+ assets: data.assets && data.assets.length > 0 ? [...new Set(data.assets)] : void 0
210
+ },
211
+ // No `contract.input`: a gate resolves no bindings, so v1 parameters would be dead weight.
212
+ control: data.parallel_group ? { parallelGroup: data.parallel_group } : void 0
213
+ }
214
+ };
215
+ }
216
+ function normalizeV1(data) {
217
+ const legacyResult = LegacyFlowSchema.safeParse(data);
218
+ if (!legacyResult.success) return failure(legacyResult.error);
219
+ const legacy = legacyResult.data;
220
+ const contradiction = (legacy.nodes ?? []).findIndex(
221
+ (node) => node.data?.optional === true && node.data.approval?.mandatory === true
222
+ );
223
+ if (contradiction !== -1) {
224
+ return {
225
+ ok: false,
226
+ errors: [
227
+ {
228
+ path: `nodes.${contradiction}.data`,
229
+ message: "a node cannot be both optional and a mandatory approval gate"
230
+ }
231
+ ]
232
+ };
233
+ }
234
+ const nodes = [];
235
+ for (const [index, node] of (legacy.nodes ?? []).entries()) {
236
+ const data2 = node.data ?? {};
237
+ const kind = node.type;
238
+ const label = data2.label ?? node.label ?? data2.skill ?? node.skill ?? node.id;
239
+ const description = node.description ?? data2.description ?? data2.message ?? label;
240
+ if (kind === "sub-flow" && data2.flow) {
241
+ const delegatedAsset = `flow:${data2.flow}`;
242
+ const assets2 = [.../* @__PURE__ */ new Set([delegatedAsset, ...data2.assets ?? []])];
243
+ const parameters2 = data2.parameters ?? {};
244
+ const control2 = {
245
+ optional: data2.optional,
246
+ parallelGroup: data2.parallel_group
247
+ };
248
+ nodes.push({
249
+ id: node.id,
250
+ label,
251
+ description,
252
+ phase: data2.phase,
253
+ run: {
254
+ kind: "sub-flow",
255
+ flow: data2.flow,
256
+ passContext: data2.pass_context,
257
+ assets: assets2
258
+ },
259
+ contract: Object.keys(parameters2).length > 0 ? { input: normalizeLegacyBinding(parameters2) } : void 0,
260
+ control: Object.values(control2).some((value) => value !== void 0) ? control2 : void 0
261
+ });
262
+ continue;
263
+ }
264
+ if (kind === "gate") {
265
+ const gateResult = normalizeLegacyGate(node, index, label, description);
266
+ if (!gateResult.ok) return { ok: false, errors: [gateResult.error] };
267
+ nodes.push(gateResult.node);
268
+ continue;
269
+ }
270
+ if (kind !== "skill") {
271
+ const delegatedAsset = kind === "sub-flow" && data2.flow ? `flow:${data2.flow}` : void 0;
272
+ const assets2 = [
273
+ .../* @__PURE__ */ new Set([...delegatedAsset ? [delegatedAsset] : [], ...data2.assets ?? []])
274
+ ];
275
+ const parameters2 = data2.parameters ?? {};
276
+ nodes.push({
277
+ id: node.id,
278
+ label,
279
+ description,
280
+ phase: data2.phase,
281
+ run: {
282
+ kind: "router",
283
+ routes: [{ when: "default", target: null }],
284
+ assets: assets2.length > 0 ? assets2 : void 0
285
+ },
286
+ contract: {
287
+ requires: [{ expr: "false" }],
288
+ input: Object.keys(parameters2).length > 0 ? normalizeLegacyBinding(parameters2) : void 0
289
+ },
290
+ control: { optional: true, parallelGroup: data2.parallel_group }
291
+ });
292
+ continue;
293
+ }
294
+ const parameters = { ...data2.parameters ?? {} };
295
+ const authoredInstruction = parameters.instructions;
296
+ delete parameters.instructions;
297
+ const instruction = typeof authoredInstruction === "string" && authoredInstruction.length > 0 ? authoredInstruction : description;
298
+ const skill = data2.skill ?? node.skill;
299
+ const skillAsset = skill ? `skill:${skill}${data2.version !== void 0 ? `#${data2.version}` : ""}` : void 0;
300
+ const assets = [...skillAsset ? [skillAsset] : [], ...data2.assets ?? []];
301
+ const control = {
302
+ optional: data2.optional,
303
+ parallelGroup: data2.parallel_group
304
+ };
305
+ nodes.push({
306
+ id: node.id,
307
+ label,
308
+ description,
309
+ phase: data2.phase,
310
+ run: {
311
+ kind: "agent",
312
+ instruction,
313
+ assets: assets.length > 0 ? assets : void 0
314
+ },
315
+ contract: Object.keys(parameters).length > 0 ? { input: normalizeLegacyBinding(parameters) } : void 0,
316
+ gate: data2.approval?.mandatory === true ? { approval: "mandatory" } : void 0,
317
+ control: Object.values(control).some((value) => value !== void 0) ? control : void 0
318
+ });
319
+ }
320
+ const nodeIds = new Set(nodes.map((node) => node.id));
321
+ const edges = (legacy.edges ?? []).map((edge, index) => ({
322
+ ...edge,
323
+ id: edge.id ?? `${edge.source}-${edge.target}-${index}`,
324
+ type: edge.type ?? "optional"
325
+ }));
326
+ const anchor = nodes.find((node) => node.id === legacy.entry) ?? (nodes.length > 0 ? nodes[0] : void 0);
327
+ if (anchor && legacy.requires && legacy.requires.length > 0) {
328
+ const run = anchor.run;
329
+ const existingAssets = Array.isArray(run.assets) ? run.assets : [];
330
+ run.assets = [.../* @__PURE__ */ new Set([...existingAssets, ...legacy.requires])];
331
+ }
332
+ const candidate = {
333
+ schemaVersion: 2,
334
+ id: legacy.id,
335
+ version: legacy.version ?? "1.0.0",
336
+ name: legacy.name,
337
+ description: legacy.description,
338
+ defaults: normalizeDefaults(legacy.globals),
339
+ entry: legacy.entry !== void 0 && nodeIds.has(legacy.entry) ? legacy.entry : void 0,
340
+ nodes,
341
+ edges,
342
+ meta: normalizeMeta({ ...legacy.metadata ?? {}, ...legacy.meta ?? {} })
343
+ };
344
+ const normalized = parseFlowDefinitionStructure({ ...candidate, edges: [] });
345
+ if (!normalized.success) return failure(normalized.error);
346
+ const parsed = { ...normalized.data, edges };
347
+ return success(parsed);
348
+ }
349
+ function parseFlowDefinition(data) {
350
+ if (typeof data === "object" && data !== null) {
351
+ const recorded = successfullyParsedDefinitions.get(data);
352
+ if (recorded !== void 0 && definitionFingerprint(data) === recorded) {
353
+ return { ok: true, data };
354
+ }
355
+ }
356
+ if (typeof data === "object" && data !== null && Object.hasOwn(data, "schemaVersion")) {
357
+ const result = FlowDefinitionSchema.safeParse(data);
358
+ return result.success ? success(result.data) : failure(result.error);
359
+ }
360
+ return normalizeV1(data);
361
+ }
362
+
363
+ export { normalizeV1, parseFlowDefinition };
364
+ //# sourceMappingURL=chunk-ALLCAFHQ.js.map
365
+ //# sourceMappingURL=chunk-ALLCAFHQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../factory-assets/connectors/flow/contract/normalize.ts"],"names":["data","assets","parameters","control"],"mappings":"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","file":"chunk-ALLCAFHQ.js","sourcesContent":["import * as z from \"zod\";\nimport {\n FlowDefinitionSchema,\n parseFlowDefinitionStructure,\n type FlowDefinition,\n} from \"./schema.js\";\n\nconst successfullyParsedDefinitions = new WeakMap<object, string>();\n\nfunction valueFingerprint(value: unknown, ancestors: Set<object>): string | null {\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (typeof value === \"string\") return `string:${JSON.stringify(value)}`;\n if (typeof value === \"boolean\") return `boolean:${value}`;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) return null;\n return `number:${Object.is(value, -0) ? \"-0\" : value}`;\n }\n if (typeof value !== \"object\" || ancestors.has(value)) return null;\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n if (Object.getPrototypeOf(value) !== Array.prototype) return null;\n if (Object.getOwnPropertySymbols(value).length > 0) return null;\n const names = Object.getOwnPropertyNames(value);\n if (names.length !== value.length + 1 || !names.includes(\"length\")) return null;\n const items: string[] = [];\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) return null;\n const item = valueFingerprint(descriptor.value, ancestors);\n if (item === null) return null;\n items.push(item);\n }\n return `array:[${items.join(\",\")}]`;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return null;\n if (Object.getOwnPropertySymbols(value).length > 0) return null;\n const entries: string[] = [];\n for (const key of Object.getOwnPropertyNames(value).sort()) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) return null;\n const nested = valueFingerprint(descriptor.value, ancestors);\n if (nested === null) return null;\n entries.push(`${JSON.stringify(key)}:${nested}`);\n }\n return `object:{${entries.join(\",\")}}`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction definitionFingerprint(data: object): string | null {\n return valueFingerprint(data, new Set());\n}\n\nconst LegacyRouteSchema = z.looseObject({\n condition: z.string().min(1),\n target: z.string().min(1).nullable(),\n});\n\nconst LegacyNodeDataSchema = z.looseObject({\n skill: z.string().min(1).optional(),\n version: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n optional: z.boolean().optional(),\n approval: z.looseObject({ mandatory: z.boolean().optional() }).optional(),\n parameters: z.record(z.string(), z.unknown()).optional(),\n phase: z.string().min(1).optional(),\n parallel_group: z.string().min(1).optional(),\n flow: z.string().min(1).optional(),\n pass_context: z.boolean().optional(),\n message: z.string().min(1).optional(),\n routes: z.array(LegacyRouteSchema).optional(),\n assets: z.array(z.string().min(1)).optional(),\n});\n\nconst LegacyNodeSchema = z.looseObject({\n id: z.string().min(1),\n type: z.string().min(1).optional(),\n skill: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n data: LegacyNodeDataSchema.optional(),\n});\n\nconst LegacyEdgeSchema = z.looseObject({\n id: z.string().min(1).optional(),\n source: z.string().min(1),\n target: z.string().min(1),\n type: z.string().min(1).optional(),\n});\n\nconst LegacyFlowSchema = z.looseObject({\n id: z.string().min(1),\n version: z.string().min(1).optional(),\n name: z.string().min(1),\n description: z.string().min(1).optional(),\n requires: z.array(z.string().min(1)).optional(),\n globals: z.record(z.string(), z.unknown()).optional(),\n entry: z.string().min(1).optional(),\n nodes: z.array(LegacyNodeSchema).optional(),\n edges: z.array(LegacyEdgeSchema).optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\n/** Stable authored-path failure returned without exposing Zod as part of the public boundary. */\nexport interface FlowDefinitionIssue {\n /** Dot-separated authored-data path; the empty string identifies the root. */\n path: string;\n /** Human-readable reason the value failed contract validation. */\n message: string;\n}\n\n/** Inert legacy edge retained for round-tripping outside the closed authored-v2 vocabulary. */\nexport type LegacyCompatibilityEdge = {\n id: string;\n source: string;\n target: string;\n type: string;\n} & Record<string, unknown>;\n\n/** Normalized content whose nodes are strict v2 while inert legacy edges remain lossless. */\nexport type ParsedFlowDefinition = Omit<FlowDefinition, \"edges\"> & {\n edges: Array<FlowDefinition[\"edges\"][number] | LegacyCompatibilityEdge>;\n};\n\n/** Normalized authoring or compatibility content, or complete authored-path failures. */\nexport type FlowDefinitionParseResult =\n | { ok: true; data: ParsedFlowDefinition }\n | { ok: false; errors: FlowDefinitionIssue[] };\n\nfunction success(data: ParsedFlowDefinition): FlowDefinitionParseResult {\n const fingerprint = definitionFingerprint(data);\n if (fingerprint !== null) successfullyParsedDefinitions.set(data, fingerprint);\n return { ok: true, data };\n}\n\nfunction failure(error: z.ZodError): FlowDefinitionParseResult {\n return {\n ok: false,\n errors: error.issues.map((issue) => ({\n path: issue.path.map(String).join(\".\"),\n message: issue.message,\n })),\n };\n}\n\nconst LEGACY_DEFAULT_KEYS: Record<string, string> = {\n approval_mode: \"approval\",\n research_depth: \"researchDepth\",\n auto_review: \"autoReview\",\n verbosity: \"verbosity\",\n cli_mode: \"cliMode\",\n run_input: \"run_input\",\n};\n\n/**\n * v1 default keys that are dropped outright rather than carried through.\n * Deleting a key from {@link LEGACY_DEFAULT_KEYS} alone does not remove it —\n * `parameters` is an open passthrough bag, so an unmapped key survives under\n * `parameters.<key>`. Dropping has to be explicit.\n */\nconst DROPPED_LEGACY_DEFAULT_KEYS = new Set([\"subagent_mode\"]);\n\nfunction normalizeDefaults(globals: Record<string, unknown> | undefined): unknown {\n if (!globals) return undefined;\n const known: Record<string, unknown> = {};\n const parameters: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(globals)) {\n if (DROPPED_LEGACY_DEFAULT_KEYS.has(key)) continue;\n const normalizedKey = LEGACY_DEFAULT_KEYS[key];\n if (normalizedKey) {\n known[normalizedKey] = key === \"approval_mode\" && value === \"auto_approve\" ? \"auto\" : value;\n } else {\n parameters[key] = value;\n }\n }\n\n if (Object.keys(parameters).length > 0) known.parameters = parameters;\n return Object.keys(known).length > 0 ? known : undefined;\n}\n\nfunction normalizeMeta(value: Record<string, unknown> | undefined): unknown {\n if (!value) return undefined;\n const meta: Record<string, unknown> = {};\n if (typeof value.icon === \"string\") meta.icon = value.icon;\n if (typeof value.category === \"string\") meta.category = value.category;\n if (Array.isArray(value.tags)) meta.tags = value.tags;\n if (typeof value.stage === \"string\") meta.stage = value.stage;\n if (typeof value.onboarding === \"object\" && value.onboarding !== null) {\n const onboarding = value.onboarding as Record<string, unknown>;\n if (\n onboarding.input_style === \"freeform\" ||\n onboarding.input_style === \"structured\" ||\n onboarding.input_style === \"repo\"\n ) {\n meta.onboarding = {\n input_style: onboarding.input_style,\n ...(typeof onboarding.placeholder === \"string\"\n ? { placeholder: onboarding.placeholder }\n : {}),\n ...(Array.isArray(onboarding.fields) ? { fields: onboarding.fields } : {}),\n };\n }\n }\n return Object.keys(meta).length > 0 ? meta : undefined;\n}\n\nfunction normalizeLegacyBinding(value: unknown): unknown {\n if (typeof value === \"string\") {\n return value.replace(/\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g, (_match, key: string) => {\n const normalized = LEGACY_DEFAULT_KEYS[key];\n return `\\${defaults.${normalized ?? `parameters.${key}`}}`;\n });\n }\n if (Array.isArray(value)) return value.map(normalizeLegacyBinding);\n if (typeof value !== \"object\" || value === null) return value;\n return Object.fromEntries(\n Object.entries(value).map(([key, nested]) => [key, normalizeLegacyBinding(nested)]),\n );\n}\n\n/** Renders a non-string v1 check for display; a cyclic value must not escape as a throw. */\nfunction renderLegacyCheck(check: unknown): string {\n try {\n return JSON.stringify(check) ?? String(check);\n } catch {\n return String(check);\n }\n}\n\n/** The only v1 `on_fail` a gate can keep: a v2 gate always pauses for a human. */\nconst LEGACY_GATE_ON_FAIL = \"pause-for-human\";\n\ntype LegacyNode = z.infer<typeof LegacyNodeSchema>;\n\n/**\n * Converts a v1 `type: gate` into a first-class v2 gate that parks for a human.\n * A v1 `check` is legacy syntax the v2 evaluator cannot run, so the gate pauses\n * unconditionally and shows the criterion to the approver — pausing too often is\n * recoverable, silently never pausing is not. Shapes a v2 gate cannot honour are refused.\n */\nfunction normalizeLegacyGate(\n node: LegacyNode,\n index: number,\n label: string,\n description: string,\n):\n | { ok: true; node: { id: string } & Record<string, unknown> }\n | { ok: false; error: FlowDefinitionIssue } {\n const data = node.data ?? {};\n const raw = data as Record<string, unknown>;\n const refuse = (field: string, message: string) => ({\n ok: false as const,\n error: { path: `nodes.${index}.data.${field}`, message },\n });\n\n if (data.optional === true) {\n return refuse(\"optional\", `gate ${node.id} cannot be optional — a skippable gate never gates`);\n }\n if (raw.on_fail !== undefined && raw.on_fail !== LEGACY_GATE_ON_FAIL) {\n return refuse(\n \"on_fail\",\n `gate ${node.id} has unsupported on_fail ${JSON.stringify(raw.on_fail)}; only \"${LEGACY_GATE_ON_FAIL}\" can be preserved`,\n );\n }\n\n // The check is only ever shown, never evaluated, so an odd shape is rendered, not refused.\n const check =\n raw.check === undefined || raw.check === null || raw.check === \"\"\n ? undefined\n : typeof raw.check === \"string\"\n ? raw.check\n : renderLegacyCheck(raw.check);\n const basePrompt = data.message ?? description;\n const prompt =\n check !== undefined\n ? `${basePrompt}\\n\\nApproval criterion (not evaluated automatically): ${check}`\n : basePrompt;\n return {\n ok: true,\n node: {\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"gate\",\n prompt,\n schema: { kind: \"text\" },\n assets: data.assets && data.assets.length > 0 ? [...new Set(data.assets)] : undefined,\n },\n // No `contract.input`: a gate resolves no bindings, so v1 parameters would be dead weight.\n control: data.parallel_group ? { parallelGroup: data.parallel_group } : undefined,\n },\n };\n}\n\n/**\n * Converts a recognized v1 definition to strict v2 without mutating the authored input.\n * A v1 gate becomes a real v2 gate; other non-executable legacy nodes become inert\n * placeholders so dependency and terminal semantics survive.\n */\nexport function normalizeV1(data: unknown): FlowDefinitionParseResult {\n const legacyResult = LegacyFlowSchema.safeParse(data);\n if (!legacyResult.success) return failure(legacyResult.error);\n const legacy = legacyResult.data;\n\n const contradiction = (legacy.nodes ?? []).findIndex(\n (node) => node.data?.optional === true && node.data.approval?.mandatory === true,\n );\n if (contradiction !== -1) {\n return {\n ok: false,\n errors: [\n {\n path: `nodes.${contradiction}.data`,\n message: \"a node cannot be both optional and a mandatory approval gate\",\n },\n ],\n };\n }\n\n const nodes: Array<{ id: string } & Record<string, unknown>> = [];\n for (const [index, node] of (legacy.nodes ?? []).entries()) {\n const data = node.data ?? {};\n const kind = node.type;\n\n const label = data.label ?? node.label ?? data.skill ?? node.skill ?? node.id;\n const description = node.description ?? data.description ?? data.message ?? label;\n if (kind === \"sub-flow\" && data.flow) {\n const delegatedAsset = `flow:${data.flow}`;\n const assets = [...new Set([delegatedAsset, ...(data.assets ?? [])])];\n const parameters = data.parameters ?? {};\n const control = {\n optional: data.optional,\n parallelGroup: data.parallel_group,\n };\n nodes.push({\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"sub-flow\",\n flow: data.flow,\n passContext: data.pass_context,\n assets,\n },\n contract:\n Object.keys(parameters).length > 0\n ? { input: normalizeLegacyBinding(parameters) }\n : undefined,\n control: Object.values(control).some((value) => value !== undefined) ? control : undefined,\n });\n continue;\n }\n\n if (kind === \"gate\") {\n const gateResult = normalizeLegacyGate(node, index, label, description);\n if (!gateResult.ok) return { ok: false, errors: [gateResult.error] };\n nodes.push(gateResult.node);\n continue;\n }\n\n if (kind !== \"skill\") {\n const delegatedAsset = kind === \"sub-flow\" && data.flow ? `flow:${data.flow}` : undefined;\n const assets = [\n ...new Set([...(delegatedAsset ? [delegatedAsset] : []), ...(data.assets ?? [])]),\n ];\n const parameters = data.parameters ?? {};\n nodes.push({\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"router\",\n routes: [{ when: \"default\", target: null }],\n assets: assets.length > 0 ? assets : undefined,\n },\n contract: {\n requires: [{ expr: \"false\" }],\n input:\n Object.keys(parameters).length > 0 ? normalizeLegacyBinding(parameters) : undefined,\n },\n control: { optional: true, parallelGroup: data.parallel_group },\n });\n continue;\n }\n\n const parameters = { ...(data.parameters ?? {}) };\n const authoredInstruction = parameters.instructions;\n delete parameters.instructions;\n const instruction =\n typeof authoredInstruction === \"string\" && authoredInstruction.length > 0\n ? authoredInstruction\n : description;\n const skill = data.skill ?? node.skill;\n const skillAsset = skill\n ? `skill:${skill}${data.version !== undefined ? `#${data.version}` : \"\"}`\n : undefined;\n const assets = [...(skillAsset ? [skillAsset] : []), ...(data.assets ?? [])];\n const control = {\n optional: data.optional,\n parallelGroup: data.parallel_group,\n };\n\n nodes.push({\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"agent\",\n instruction,\n assets: assets.length > 0 ? assets : undefined,\n },\n contract:\n Object.keys(parameters).length > 0\n ? { input: normalizeLegacyBinding(parameters) }\n : undefined,\n gate: data.approval?.mandatory === true ? { approval: \"mandatory\" } : undefined,\n control: Object.values(control).some((value) => value !== undefined) ? control : undefined,\n });\n }\n\n const nodeIds = new Set(nodes.map((node) => node.id));\n const edges = (legacy.edges ?? []).map((edge, index) => ({\n ...edge,\n id: edge.id ?? `${edge.source}-${edge.target}-${index}`,\n type: edge.type ?? \"optional\",\n }));\n\n const anchor =\n nodes.find((node) => node.id === legacy.entry) ?? (nodes.length > 0 ? nodes[0] : undefined);\n if (anchor && legacy.requires && legacy.requires.length > 0) {\n const run = anchor.run as Record<string, unknown>;\n const existingAssets = Array.isArray(run.assets) ? run.assets : [];\n run.assets = [...new Set([...existingAssets, ...legacy.requires])];\n }\n\n const candidate = {\n schemaVersion: 2,\n id: legacy.id,\n version: legacy.version ?? \"1.0.0\",\n name: legacy.name,\n description: legacy.description,\n defaults: normalizeDefaults(legacy.globals),\n entry: legacy.entry !== undefined && nodeIds.has(legacy.entry) ? legacy.entry : undefined,\n nodes,\n edges,\n meta: normalizeMeta({ ...(legacy.metadata ?? {}), ...(legacy.meta ?? {}) }),\n };\n const normalized = parseFlowDefinitionStructure({ ...candidate, edges: [] });\n if (!normalized.success) return failure(normalized.error);\n const parsed: ParsedFlowDefinition = { ...normalized.data, edges };\n return success(parsed);\n}\n\n/**\n * Parses strict v2 or normalizes v1, reusing an unchanged successful result across boundaries.\n * Only an absent own schema version permits compatibility normalization.\n */\nexport function parseFlowDefinition(data: unknown): FlowDefinitionParseResult {\n if (typeof data === \"object\" && data !== null) {\n const recorded = successfullyParsedDefinitions.get(data);\n if (recorded !== undefined && definitionFingerprint(data) === recorded) {\n return { ok: true, data: data as ParsedFlowDefinition };\n }\n }\n if (typeof data === \"object\" && data !== null && Object.hasOwn(data, \"schemaVersion\")) {\n const result = FlowDefinitionSchema.safeParse(data);\n return result.success ? success(result.data) : failure(result.error);\n }\n return normalizeV1(data);\n}\n"]}
@@ -162,23 +162,73 @@ function reportSinkFailure(err) {
162
162
  }
163
163
  }
164
164
 
165
+ // core/src/logging/redact.ts
166
+ var URL_USERINFO = /\/\/[^/?#\s"'<>]*@/g;
167
+ var SCHEMED_USERINFO = /(?<![a-z0-9+.-])([a-z][a-z0-9+.-]{0,31}:\/\/)[^\s/"'=]{0,512}@/gi;
168
+ var SCHEMELESS_USERINFO = /(^|[\s"'(<=,])[^\s/@:"'()<>,=]{1,256}:[^\s/"'()<>]{1,256}@/g;
169
+ var SECRET_NAMES = [
170
+ "access[_-]?token",
171
+ "refresh[_-]?token",
172
+ "id[_-]?token",
173
+ "session[_-]?token",
174
+ "security[_-]?token",
175
+ "bearer[_-]?token",
176
+ "token",
177
+ "api[_-]?key",
178
+ "apikey",
179
+ "client[_-]?secret",
180
+ "secret[_-]?access[_-]?key",
181
+ "secret",
182
+ "access[_-]?key[_-]?id",
183
+ "account[_-]?key",
184
+ "sas[_-]?url",
185
+ "key",
186
+ "password",
187
+ "passwd",
188
+ "pass",
189
+ "pwd",
190
+ "sig",
191
+ "signature",
192
+ "x-amz-signature",
193
+ "x-amz-credential",
194
+ "x-amz-security-token",
195
+ "auth"
196
+ ].join("|");
197
+ var SECRET_FIELD = new RegExp(
198
+ `^(?:${SECRET_NAMES.split("|").filter((n) => n !== "key" && n !== "auth" && n !== "sig").join("|")})$`,
199
+ "i"
200
+ );
201
+ function isSecretFieldName(name) {
202
+ return SECRET_FIELD.test(name);
203
+ }
204
+ var QUERY_SECRET = new RegExp(`([?&#;][a-z0-9_-]{0,32}(?:${SECRET_NAMES})=)[^&#;\\s"']+`, "gi");
205
+ var RCLONE_SECRET = new RegExp(
206
+ `([:,][a-z0-9_-]{0,32}(?:${SECRET_NAMES})=)(?:"[^"]*"|'[^']*'|[^:,\\s"']+)`,
207
+ "gi"
208
+ );
209
+ var SECRET_FLAG = /(?<![\w-])(--[a-z0-9-]{0,64}(?:pass|password|token|secret)[a-z0-9-]{0,64}=)[^\s"',]+/gi;
210
+ function redactCredentials(text) {
211
+ if (!text.includes("@") && !text.includes("=")) return text;
212
+ return text.replace(URL_USERINFO, "//***@").replace(SCHEMED_USERINFO, "$1***@").replace(SCHEMELESS_USERINFO, "$1***@").replace(QUERY_SECRET, "$1***").replace(RCLONE_SECRET, "$1***").replace(SECRET_FLAG, "$1***");
213
+ }
214
+
165
215
  // core/src/logging/sanitize.ts
166
216
  function normalizeError(value) {
167
217
  if (value === void 0 || value === null) return void 0;
168
218
  if (value instanceof Error) {
169
219
  return {
170
220
  name: value.name,
171
- message: value.message,
172
- stack: value.stack
221
+ message: redactCredentials(value.message),
222
+ stack: value.stack === void 0 ? void 0 : redactCredentials(value.stack)
173
223
  };
174
224
  }
175
225
  if (typeof value === "string") {
176
- return { name: "Error", message: value };
226
+ return { name: "Error", message: redactCredentials(value) };
177
227
  }
178
228
  try {
179
- return { name: "Error", message: JSON.stringify(value) };
229
+ return { name: "Error", message: redactCredentials(JSON.stringify(value)) };
180
230
  } catch {
181
- return { name: "Error", message: String(value) };
231
+ return { name: "Error", message: redactCredentials(String(value)) };
182
232
  }
183
233
  }
184
234
  function sanitizeData(value) {
@@ -186,6 +236,7 @@ function sanitizeData(value) {
186
236
  const seen = /* @__PURE__ */ new WeakSet();
187
237
  const walk = (v) => {
188
238
  if (v === null || v === void 0) return v;
239
+ if (typeof v === "string") return redactCredentials(v);
189
240
  if (typeof v === "bigint") return v.toString();
190
241
  if (typeof v === "function") return "[Function]";
191
242
  if (typeof v === "symbol") return v.toString();
@@ -196,7 +247,8 @@ function sanitizeData(value) {
196
247
  if (Array.isArray(v)) return v.map(walk);
197
248
  const out = {};
198
249
  for (const [k, child] of Object.entries(v)) {
199
- out[k] = walk(child);
250
+ const bare = typeof child === "string" || typeof child === "number";
251
+ out[k] = bare && isSecretFieldName(k) ? "***" : walk(child);
200
252
  }
201
253
  return out;
202
254
  };
@@ -324,7 +376,7 @@ function makeLogger(source, store) {
324
376
  store.record({
325
377
  source,
326
378
  level,
327
- message,
379
+ message: redactCredentials(message),
328
380
  data: sanitizeData(data),
329
381
  error: normalizeError(err)
330
382
  });
@@ -348,6 +400,6 @@ function makeLogger(source, store) {
348
400
  };
349
401
  }
350
402
 
351
- export { LogStore, LogStoreDisabledError, NoOpSink, StdoutSink, __resetBrokenStreams, createLogger, getLogStore, isBrokenPipeError, isStreamOpen, isStreamUsable, isUnwritableStreamError, markStreamBroken, normalizeError, registerLogStore, resetLogStore, sanitizeData };
352
- //# sourceMappingURL=chunk-W4IPN3DD.js.map
353
- //# sourceMappingURL=chunk-W4IPN3DD.js.map
403
+ export { LogStore, LogStoreDisabledError, NoOpSink, StdoutSink, __resetBrokenStreams, createLogger, getLogStore, isBrokenPipeError, isStreamOpen, isStreamUsable, isUnwritableStreamError, markStreamBroken, normalizeError, redactCredentials, registerLogStore, resetLogStore, sanitizeData };
404
+ //# sourceMappingURL=chunk-BOFL7GIF.js.map
405
+ //# sourceMappingURL=chunk-BOFL7GIF.js.map