@skaile/workspaces 5.5.0 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-KTFUB7EX.js → asset-feeds-LU7NHOAP.js} +27 -14
  4. package/dist/asset-feeds-LU7NHOAP.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +9 -9
  6. package/dist/asset-manager/index.js +18 -18
  7. package/dist/asset-manager/installer.js +11 -11
  8. package/dist/asset-manager/renderers.js +20 -2
  9. package/dist/asset-manager/src/index.d.ts +66 -24
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/install-agent.d.ts +22 -14
  12. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  13. package/dist/asset-manager/src/install-instances.d.ts +55 -0
  14. package/dist/asset-manager/src/install-instances.d.ts.map +1 -0
  15. package/dist/asset-manager/src/installer.d.ts +30 -7
  16. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  17. package/dist/asset-manager/src/renderers.d.ts +29 -8
  18. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  19. package/dist/bridge/drivers/claude-sdk.js +14 -14
  20. package/dist/bridge/drivers/codex.js +20 -14
  21. package/dist/bridge/drivers/codex.js.map +1 -1
  22. package/dist/bridge/drivers/continue.js +11 -11
  23. package/dist/bridge/drivers/echo.js +3 -3
  24. package/dist/bridge/drivers/gemini.js +6 -6
  25. package/dist/bridge/drivers/goose.js +11 -11
  26. package/dist/bridge/drivers/omp.js +4 -4
  27. package/dist/bridge/drivers/opencode.js +11 -11
  28. package/dist/bridge/drivers/qwen.js +6 -6
  29. package/dist/bridge/index.js +15 -15
  30. package/dist/bridge/src/codex/native-policy.d.ts +1 -1
  31. package/dist/bridge/src/drivers/codex.d.ts +2 -1
  32. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  33. package/dist/{chunk-LCULZ4ED.js → chunk-27HS2DHB.js} +4 -4
  34. package/dist/{chunk-LCULZ4ED.js.map → chunk-27HS2DHB.js.map} +1 -1
  35. package/dist/{chunk-X4GO3GJZ.js → chunk-2GRB5ITE.js} +4 -4
  36. package/dist/{chunk-X4GO3GJZ.js.map → chunk-2GRB5ITE.js.map} +1 -1
  37. package/dist/{chunk-75EX5GY4.js → chunk-2KOKBTR4.js} +197 -118
  38. package/dist/chunk-2KOKBTR4.js.map +1 -0
  39. package/dist/{chunk-ES2FXWQ4.js → chunk-2NYXQYHN.js} +4 -4
  40. package/dist/{chunk-ES2FXWQ4.js.map → chunk-2NYXQYHN.js.map} +1 -1
  41. package/dist/{chunk-ORUHADS6.js → chunk-2W4LBLIN.js} +386 -60
  42. package/dist/chunk-2W4LBLIN.js.map +1 -0
  43. package/dist/{chunk-SNVOASTL.js → chunk-2XFUXGV6.js} +3 -3
  44. package/dist/{chunk-SNVOASTL.js.map → chunk-2XFUXGV6.js.map} +1 -1
  45. package/dist/{chunk-ZDKJHQY2.js → chunk-3TXEJN4W.js} +2 -2
  46. package/dist/{chunk-ZDKJHQY2.js.map → chunk-3TXEJN4W.js.map} +1 -1
  47. package/dist/{chunk-JELTQ4H7.js → chunk-45VFGT7A.js} +3 -3
  48. package/dist/{chunk-JELTQ4H7.js.map → chunk-45VFGT7A.js.map} +1 -1
  49. package/dist/{chunk-XGIS325V.js → chunk-46OVMT76.js} +3 -3
  50. package/dist/{chunk-XGIS325V.js.map → chunk-46OVMT76.js.map} +1 -1
  51. package/dist/{chunk-37GBJLF5.js → chunk-47ZD34KB.js} +3 -3
  52. package/dist/{chunk-37GBJLF5.js.map → chunk-47ZD34KB.js.map} +1 -1
  53. package/dist/{chunk-LFEGIZTW.js → chunk-4GNJELPH.js} +2 -2
  54. package/dist/{chunk-LFEGIZTW.js.map → chunk-4GNJELPH.js.map} +1 -1
  55. package/dist/{chunk-V7VDSFPS.js → chunk-5B5IZVEP.js} +2 -2
  56. package/dist/{chunk-V7VDSFPS.js.map → chunk-5B5IZVEP.js.map} +1 -1
  57. package/dist/{chunk-EJYZ3MKJ.js → chunk-65EYRFZJ.js} +4 -4
  58. package/dist/{chunk-EJYZ3MKJ.js.map → chunk-65EYRFZJ.js.map} +1 -1
  59. package/dist/{chunk-CODXK5L5.js → chunk-6NPINANG.js} +6 -6
  60. package/dist/{chunk-CODXK5L5.js.map → chunk-6NPINANG.js.map} +1 -1
  61. package/dist/{chunk-XBM5ND55.js → chunk-7KLC4LZO.js} +8 -8
  62. package/dist/{chunk-XBM5ND55.js.map → chunk-7KLC4LZO.js.map} +1 -1
  63. package/dist/{chunk-SR4RFKHM.js → chunk-7ZHLYXTI.js} +3 -3
  64. package/dist/{chunk-SR4RFKHM.js.map → chunk-7ZHLYXTI.js.map} +1 -1
  65. package/dist/{chunk-WX74MVNA.js → chunk-AO7VJ6G6.js} +3 -24
  66. package/dist/chunk-AO7VJ6G6.js.map +1 -0
  67. package/dist/{chunk-DPMKI26Y.js → chunk-AOAZCSDI.js} +4 -3
  68. package/dist/chunk-AOAZCSDI.js.map +1 -0
  69. package/dist/{chunk-YK7WJSTD.js → chunk-BF33SCLY.js} +10 -5
  70. package/dist/chunk-BF33SCLY.js.map +1 -0
  71. package/dist/{chunk-VKSA2CDJ.js → chunk-BTISGSK4.js} +4 -4
  72. package/dist/{chunk-VKSA2CDJ.js.map → chunk-BTISGSK4.js.map} +1 -1
  73. package/dist/{chunk-TOSHZX4C.js → chunk-CPSIPIX7.js} +2 -2
  74. package/dist/chunk-CPSIPIX7.js.map +1 -0
  75. package/dist/{chunk-5Y3L7XWH.js → chunk-D2V42LUE.js} +15 -15
  76. package/dist/chunk-D2V42LUE.js.map +1 -0
  77. package/dist/{chunk-K2K7OF4P.js → chunk-DMLDYFDS.js} +23 -6
  78. package/dist/chunk-DMLDYFDS.js.map +1 -0
  79. package/dist/{chunk-QMWMSZQ4.js → chunk-FK6HPLQA.js} +3 -3
  80. package/dist/{chunk-QMWMSZQ4.js.map → chunk-FK6HPLQA.js.map} +1 -1
  81. package/dist/chunk-FRHE7FFB.js +655 -0
  82. package/dist/chunk-FRHE7FFB.js.map +1 -0
  83. package/dist/{chunk-UFS3FEBA.js → chunk-GP6ZL7PE.js} +3 -3
  84. package/dist/{chunk-UFS3FEBA.js.map → chunk-GP6ZL7PE.js.map} +1 -1
  85. package/dist/{chunk-P6KFWTGP.js → chunk-I4QBZLOR.js} +7 -12
  86. package/dist/chunk-I4QBZLOR.js.map +1 -0
  87. package/dist/{chunk-C4GF7RSQ.js → chunk-KUFNKVBM.js} +3 -3
  88. package/dist/{chunk-C4GF7RSQ.js.map → chunk-KUFNKVBM.js.map} +1 -1
  89. package/dist/{chunk-GCYD4EGY.js → chunk-KYXOGHY6.js} +4 -4
  90. package/dist/{chunk-GCYD4EGY.js.map → chunk-KYXOGHY6.js.map} +1 -1
  91. package/dist/{chunk-G474PBUQ.js → chunk-LLKKLKZJ.js} +3 -3
  92. package/dist/{chunk-G474PBUQ.js.map → chunk-LLKKLKZJ.js.map} +1 -1
  93. package/dist/{chunk-AC2N5BRP.js → chunk-MX3UQXLU.js} +18 -30
  94. package/dist/chunk-MX3UQXLU.js.map +1 -0
  95. package/dist/{chunk-BNUZEYC3.js → chunk-NARITJS2.js} +3 -3
  96. package/dist/{chunk-BNUZEYC3.js.map → chunk-NARITJS2.js.map} +1 -1
  97. package/dist/{chunk-Y4QWHIHB.js → chunk-OGLDAJFL.js} +4 -4
  98. package/dist/{chunk-Y4QWHIHB.js.map → chunk-OGLDAJFL.js.map} +1 -1
  99. package/dist/chunk-OLLAQLFJ.js +17 -0
  100. package/dist/chunk-OLLAQLFJ.js.map +1 -0
  101. package/dist/{chunk-LFMX2UEF.js → chunk-PA7WLID3.js} +86 -69
  102. package/dist/chunk-PA7WLID3.js.map +1 -0
  103. package/dist/{chunk-K2NUT3HO.js → chunk-PJS2YWGG.js} +6 -6
  104. package/dist/{chunk-K2NUT3HO.js.map → chunk-PJS2YWGG.js.map} +1 -1
  105. package/dist/{chunk-MMC24L2W.js → chunk-PTO2YDDG.js} +286 -121
  106. package/dist/chunk-PTO2YDDG.js.map +1 -0
  107. package/dist/{chunk-3665M43C.js → chunk-QD772CGQ.js} +5 -5
  108. package/dist/{chunk-3665M43C.js.map → chunk-QD772CGQ.js.map} +1 -1
  109. package/dist/{chunk-G2O2AARG.js → chunk-RGXVQZOV.js} +6021 -3099
  110. package/dist/chunk-RGXVQZOV.js.map +1 -0
  111. package/dist/{chunk-JKWU6ULI.js → chunk-SDFROXSA.js} +3 -3
  112. package/dist/{chunk-JKWU6ULI.js.map → chunk-SDFROXSA.js.map} +1 -1
  113. package/dist/{chunk-WHSQSVN2.js → chunk-SX4UIDKT.js} +3 -3
  114. package/dist/{chunk-WHSQSVN2.js.map → chunk-SX4UIDKT.js.map} +1 -1
  115. package/dist/{chunk-3JHFFIQ6.js → chunk-TZCQ7ZWQ.js} +83 -9
  116. package/dist/chunk-TZCQ7ZWQ.js.map +1 -0
  117. package/dist/{chunk-UHLBDAJR.js → chunk-UAP2XHRF.js} +10 -10
  118. package/dist/{chunk-UHLBDAJR.js.map → chunk-UAP2XHRF.js.map} +1 -1
  119. package/dist/{chunk-LAI7X6I2.js → chunk-VBBBZDI7.js} +3 -3
  120. package/dist/{chunk-LAI7X6I2.js.map → chunk-VBBBZDI7.js.map} +1 -1
  121. package/dist/{chunk-R4G7XI7A.js → chunk-VJENKWXF.js} +4 -5
  122. package/dist/chunk-VJENKWXF.js.map +1 -0
  123. package/dist/{chunk-TNWXGHLD.js → chunk-VKSXST23.js} +51 -42
  124. package/dist/chunk-VKSXST23.js.map +1 -0
  125. package/dist/{chunk-HTKZ4AOW.js → chunk-VSQFGU5D.js} +3 -3
  126. package/dist/{chunk-HTKZ4AOW.js.map → chunk-VSQFGU5D.js.map} +1 -1
  127. package/dist/{chunk-JBPG5KQC.js → chunk-VX3INFBA.js} +4 -4
  128. package/dist/{chunk-JBPG5KQC.js.map → chunk-VX3INFBA.js.map} +1 -1
  129. package/dist/{chunk-N3Y43LMZ.js → chunk-WIHQWVWL.js} +34 -11
  130. package/dist/chunk-WIHQWVWL.js.map +1 -0
  131. package/dist/{chunk-Y7UBRRKG.js → chunk-XOGG7VDZ.js} +40 -31
  132. package/dist/chunk-XOGG7VDZ.js.map +1 -0
  133. package/dist/{chunk-JAJG4G5E.js → chunk-ZBBM6O6P.js} +3 -3
  134. package/dist/{chunk-JAJG4G5E.js.map → chunk-ZBBM6O6P.js.map} +1 -1
  135. package/dist/cli/index.js +5025 -3406
  136. package/dist/cli/index.js.map +1 -1
  137. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  138. package/dist/cli/src/commands/catalog.d.ts +7 -7
  139. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  140. package/dist/cli/src/commands/connector.d.ts +2 -2
  141. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  142. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  143. package/dist/cli/src/commands/history.d.ts.map +1 -1
  144. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  145. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  146. package/dist/cli/src/commands/migrate-agents.d.ts +131 -0
  147. package/dist/cli/src/commands/migrate-agents.d.ts.map +1 -0
  148. package/dist/cli/src/commands/migrate-assets.d.ts +54 -0
  149. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -0
  150. package/dist/cli/src/commands/migrate-files.d.ts +52 -0
  151. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -0
  152. package/dist/cli/src/commands/migrate-providers.d.ts +5 -8
  153. package/dist/cli/src/commands/migrate-providers.d.ts.map +1 -1
  154. package/dist/cli/src/commands/migrate.d.ts +21 -0
  155. package/dist/cli/src/commands/migrate.d.ts.map +1 -0
  156. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  157. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  158. package/dist/cli/src/commands/patch.d.ts.map +1 -1
  159. package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
  160. package/dist/cli/src/commands/project.d.ts +13 -1
  161. package/dist/cli/src/commands/project.d.ts.map +1 -1
  162. package/dist/cli/src/commands/rebuild.d.ts.map +1 -1
  163. package/dist/cli/src/commands/run.d.ts.map +1 -1
  164. package/dist/cli/src/commands/show.d.ts.map +1 -1
  165. package/dist/cli/src/commands/tree.d.ts.map +1 -1
  166. package/dist/cli/src/commands/update.d.ts.map +1 -1
  167. package/dist/cli/src/commands/validate-instances.d.ts +17 -0
  168. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -0
  169. package/dist/cli/src/commands/validate.d.ts +14 -0
  170. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  171. package/dist/cli/src/commands/why.d.ts.map +1 -1
  172. package/dist/cli/src/helpers.d.ts.map +1 -1
  173. package/dist/cli/src/open-library.d.ts.map +1 -1
  174. package/dist/cli/src/open-registry.d.ts +13 -16
  175. package/dist/cli/src/open-registry.d.ts.map +1 -1
  176. package/dist/cli/src/type-guards.d.ts +3 -0
  177. package/dist/cli/src/type-guards.d.ts.map +1 -0
  178. package/dist/connectors/config.js +6 -6
  179. package/dist/connectors/index.js +19 -19
  180. package/dist/{connectors-MPYCSQNG.js → connectors-HWENZFKW.js} +22 -22
  181. package/dist/{connectors-MPYCSQNG.js.map → connectors-HWENZFKW.js.map} +1 -1
  182. package/dist/connectors-shared/index.js +2 -2
  183. package/dist/core/driver-targets.js +1 -1
  184. package/dist/core/index.js +8 -8
  185. package/dist/core/manifest.js +2 -2
  186. package/dist/core/models.js +1 -1
  187. package/dist/core/publish-manifest.js +2 -2
  188. package/dist/core/ref.js +1 -1
  189. package/dist/core/runtime-assets.js +6 -6
  190. package/dist/core/src/agent-instances.d.ts +93 -0
  191. package/dist/core/src/agent-instances.d.ts.map +1 -0
  192. package/dist/core/src/agent-prompt-sections.d.ts +90 -0
  193. package/dist/core/src/agent-prompt-sections.d.ts.map +1 -0
  194. package/dist/core/src/driver-targets.d.ts +4 -2
  195. package/dist/core/src/driver-targets.d.ts.map +1 -1
  196. package/dist/core/src/index.d.ts +12 -8
  197. package/dist/core/src/index.d.ts.map +1 -1
  198. package/dist/core/src/manifest.d.ts +71 -27
  199. package/dist/core/src/manifest.d.ts.map +1 -1
  200. package/dist/core/src/models.d.ts +6 -92
  201. package/dist/core/src/models.d.ts.map +1 -1
  202. package/dist/core/src/repo-manager.d.ts +47 -3
  203. package/dist/core/src/repo-manager.d.ts.map +1 -1
  204. package/dist/core/src/type-guards.d.ts +3 -0
  205. package/dist/core/src/type-guards.d.ts.map +1 -0
  206. package/dist/core/src/walker.d.ts +7 -3
  207. package/dist/core/src/walker.d.ts.map +1 -1
  208. package/dist/core/src/workspace-config.d.ts +19 -15
  209. package/dist/core/src/workspace-config.d.ts.map +1 -1
  210. package/dist/core/store.js +2 -2
  211. package/dist/core/workspace-config.js +5 -5
  212. package/dist/deploy/index.js +8 -8
  213. package/dist/discovery/index.js +6 -6
  214. package/dist/discovery/src/builtin-providers.d.ts +5 -4
  215. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  216. package/dist/discovery/src/default-registry.d.ts +23 -0
  217. package/dist/discovery/src/default-registry.d.ts.map +1 -0
  218. package/dist/discovery/src/discover.d.ts +0 -6
  219. package/dist/discovery/src/discover.d.ts.map +1 -1
  220. package/dist/discovery/src/index.d.ts +2 -1
  221. package/dist/discovery/src/index.d.ts.map +1 -1
  222. package/dist/discovery/src/tree-entries.d.ts +1 -1
  223. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  224. package/dist/{ensure-sources-QFRA46DJ.js → ensure-sources-DSTSXJWK.js} +21 -21
  225. package/dist/{ensure-sources-QFRA46DJ.js.map → ensure-sources-DSTSXJWK.js.map} +1 -1
  226. package/dist/factory-assets/README.md +3 -3
  227. package/dist/factory-assets/connectors/box.js +19 -19
  228. package/dist/factory-assets/connectors/deploy.js +19 -19
  229. package/dist/factory-assets/connectors/devserver.js +19 -19
  230. package/dist/factory-assets/connectors/flow/adapter.js +19 -19
  231. package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -1
  232. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  233. package/dist/factory-assets/connectors/flow/run-flow.js +21 -21
  234. package/dist/factory-assets/connectors/flow.js +19 -19
  235. package/dist/factory-assets/connectors/git.js +19 -19
  236. package/dist/factory-assets/connectors/gmail.js +19 -19
  237. package/dist/factory-assets/connectors/googledrive.js +19 -19
  238. package/dist/factory-assets/connectors/local.js +19 -19
  239. package/dist/factory-assets/connectors/mattermost.js +19 -19
  240. package/dist/factory-assets/connectors/memory.js +19 -19
  241. package/dist/factory-assets/connectors/minio.js +19 -19
  242. package/dist/factory-assets/connectors/postgres.js +19 -19
  243. package/dist/factory-assets/connectors/s3.js +19 -19
  244. package/dist/factory-assets/connectors/sharepoint.js +19 -19
  245. package/dist/factory-assets/connectors/sqlite.js +19 -19
  246. package/dist/factory-assets/connectors/static-server.js +19 -19
  247. package/dist/factory-assets/connectors/tunnel.js +19 -19
  248. package/dist/factory-assets/connectors/webdav.js +19 -19
  249. package/dist/factory-assets/connectors/xstate-store.js +19 -19
  250. package/dist/factory-assets/connectors/xstate.js +19 -19
  251. package/dist/factory-assets/index.js.map +1 -1
  252. package/dist/factory-assets/presets/workspaces-authoring/workspaces-authoring.preset.yaml +9 -0
  253. package/dist/factory-assets/skaile.manifest.yaml +2 -2
  254. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +16 -12
  255. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +8 -8
  256. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +13 -11
  257. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  258. package/dist/{flows-KCARGXRT.js → flows-ENQY2DV7.js} +13 -13
  259. package/dist/{flows-KCARGXRT.js.map → flows-ENQY2DV7.js.map} +1 -1
  260. package/dist/{helpers-PSROT7CU.js → helpers-R44RUTDY.js} +21 -21
  261. package/dist/{helpers-PSROT7CU.js.map → helpers-R44RUTDY.js.map} +1 -1
  262. package/dist/library/index.js +13 -13
  263. package/dist/library/install.js +3 -3
  264. package/dist/library/src/index.d.ts +2 -2
  265. package/dist/library/src/index.d.ts.map +1 -1
  266. package/dist/library/src/library.d.ts +2 -12
  267. package/dist/library/src/library.d.ts.map +1 -1
  268. package/dist/library/src/local/local-catalog-source.d.ts +2 -2
  269. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  270. package/dist/library/src/manifest-writer.d.ts +4 -1
  271. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  272. package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -1
  273. package/dist/{library-publish-YAI7WOXC.js → library-publish-LFOJJVMK.js} +27 -27
  274. package/dist/{library-publish-YAI7WOXC.js.map → library-publish-LFOJJVMK.js.map} +1 -1
  275. package/dist/open-library-4WUMQHES.js +40 -0
  276. package/dist/{open-library-Z5NJU4Z5.js.map → open-library-4WUMQHES.js.map} +1 -1
  277. package/dist/open-registry-NVPCQPND.js +32 -0
  278. package/dist/{open-registry-TYUVN5SG.js.map → open-registry-NVPCQPND.js.map} +1 -1
  279. package/dist/paths-YUCP7K6U.js +22 -0
  280. package/dist/{paths-HKAXUR3W.js.map → paths-YUCP7K6U.js.map} +1 -1
  281. package/dist/{plugin-store-N6SI2TYM.js → plugin-store-66QFBNEO.js} +10 -10
  282. package/dist/{plugin-store-N6SI2TYM.js.map → plugin-store-66QFBNEO.js.map} +1 -1
  283. package/dist/plugins/index.js +1 -1
  284. package/dist/plugins/src/asset-kind-provider.d.ts +14 -2
  285. package/dist/plugins/src/asset-kind-provider.d.ts.map +1 -1
  286. package/dist/plugins/src/index.d.ts +1 -1
  287. package/dist/plugins/src/index.d.ts.map +1 -1
  288. package/dist/project-VMOHUXBD.js +41 -0
  289. package/dist/{project-SVS4UMGL.js.map → project-VMOHUXBD.js.map} +1 -1
  290. package/dist/resolver/index.js +9 -9
  291. package/dist/runner/index.js +34 -29
  292. package/dist/runner/src/agent-capabilities.d.ts +101 -0
  293. package/dist/runner/src/agent-capabilities.d.ts.map +1 -0
  294. package/dist/runner/src/agent.d.ts.map +1 -1
  295. package/dist/runner/src/agents/in-process-host.d.ts +56 -0
  296. package/dist/runner/src/agents/in-process-host.d.ts.map +1 -0
  297. package/dist/runner/src/agents/instances.d.ts +62 -0
  298. package/dist/runner/src/agents/instances.d.ts.map +1 -0
  299. package/dist/runner/src/agents/json-schema.d.ts +16 -0
  300. package/dist/runner/src/agents/json-schema.d.ts.map +1 -0
  301. package/dist/runner/src/agents/memory-run-store.d.ts +19 -0
  302. package/dist/runner/src/agents/memory-run-store.d.ts.map +1 -0
  303. package/dist/runner/src/agents/run-controller.d.ts +208 -0
  304. package/dist/runner/src/agents/run-controller.d.ts.map +1 -0
  305. package/dist/runner/src/agents/standalone-surface.d.ts +30 -0
  306. package/dist/runner/src/agents/standalone-surface.d.ts.map +1 -0
  307. package/dist/runner/src/capability-registry.d.ts.map +1 -1
  308. package/dist/runner/src/composition/bootstrap.d.ts +13 -51
  309. package/dist/runner/src/composition/bootstrap.d.ts.map +1 -1
  310. package/dist/runner/src/composition/compile.d.ts +43 -27
  311. package/dist/runner/src/composition/compile.d.ts.map +1 -1
  312. package/dist/runner/src/composition/content-source.d.ts +94 -0
  313. package/dist/runner/src/composition/content-source.d.ts.map +1 -0
  314. package/dist/runner/src/composition/dry-run.d.ts +34 -0
  315. package/dist/runner/src/composition/dry-run.d.ts.map +1 -0
  316. package/dist/runner/src/composition/errors.d.ts +41 -0
  317. package/dist/runner/src/composition/errors.d.ts.map +1 -0
  318. package/dist/runner/src/composition/index.d.ts +10 -3
  319. package/dist/runner/src/composition/index.d.ts.map +1 -1
  320. package/dist/runner/src/composition/prompt-sections.d.ts +31 -0
  321. package/dist/runner/src/composition/prompt-sections.d.ts.map +1 -0
  322. package/dist/runner/src/composition/resolve-instance.d.ts +140 -0
  323. package/dist/runner/src/composition/resolve-instance.d.ts.map +1 -0
  324. package/dist/runner/src/composition/resolve.d.ts +43 -25
  325. package/dist/runner/src/composition/resolve.d.ts.map +1 -1
  326. package/dist/runner/src/composition/revision-hash.d.ts +58 -0
  327. package/dist/runner/src/composition/revision-hash.d.ts.map +1 -0
  328. package/dist/runner/src/composition/run-snapshot.d.ts +37 -0
  329. package/dist/runner/src/composition/run-snapshot.d.ts.map +1 -0
  330. package/dist/runner/src/composition/types.d.ts +79 -12
  331. package/dist/runner/src/composition/types.d.ts.map +1 -1
  332. package/dist/runner/src/index.d.ts +2 -0
  333. package/dist/runner/src/index.d.ts.map +1 -1
  334. package/dist/runner/src/manifest.d.ts +1 -1
  335. package/dist/runner/src/manifest.d.ts.map +1 -1
  336. package/dist/runner/src/mixin-resolver.d.ts +14 -15
  337. package/dist/runner/src/mixin-resolver.d.ts.map +1 -1
  338. package/dist/runner/src/serve.d.ts +6 -0
  339. package/dist/runner/src/serve.d.ts.map +1 -1
  340. package/dist/runner/src/session-builder.d.ts +35 -6
  341. package/dist/runner/src/session-builder.d.ts.map +1 -1
  342. package/dist/sdk/asset-manager.js +18 -18
  343. package/dist/sdk/bridge.js +15 -15
  344. package/dist/sdk/core.js +8 -8
  345. package/dist/sdk/flow.js +9 -9
  346. package/dist/sdk/index.js +34 -29
  347. package/dist/sdk/index.js.map +1 -1
  348. package/dist/sdk/resolver.js +9 -9
  349. package/dist/sdk/runner.js +34 -29
  350. package/dist/sdk/session.js +2 -2
  351. package/dist/sdk/types.js +1 -1
  352. package/dist/secrets/index.js +2 -2
  353. package/dist/session/index.js +2 -2
  354. package/dist/{setup-IOEZGJNC.js → setup-PYY23HGZ.js} +28 -28
  355. package/dist/{setup-IOEZGJNC.js.map → setup-PYY23HGZ.js.map} +1 -1
  356. package/dist/skills-CS7NE5TT.js +26 -0
  357. package/dist/{skills-HW6I6ZZ7.js.map → skills-CS7NE5TT.js.map} +1 -1
  358. package/dist/source-JCF6KSQN.js +41 -0
  359. package/dist/{source-OKRJT53H.js.map → source-JCF6KSQN.js.map} +1 -1
  360. package/dist/{source-manifest-publish-MILEQDRD.js → source-manifest-publish-O6P7G2M7.js} +27 -27
  361. package/dist/{source-manifest-publish-MILEQDRD.js.map → source-manifest-publish-O6P7G2M7.js.map} +1 -1
  362. package/dist/tui/index.js +34 -29
  363. package/dist/tui/index.js.map +1 -1
  364. package/dist/types/index.js +1 -1
  365. package/dist/types/manifests.js +1 -1
  366. package/dist/types/src/agent-lifecycle.d.ts +402 -0
  367. package/dist/types/src/agent-lifecycle.d.ts.map +1 -0
  368. package/dist/types/src/capabilities.d.ts +0 -4
  369. package/dist/types/src/capabilities.d.ts.map +1 -1
  370. package/dist/types/src/delivery.d.ts.map +1 -1
  371. package/dist/types/src/events.d.ts +66 -4
  372. package/dist/types/src/events.d.ts.map +1 -1
  373. package/dist/types/src/index.d.ts +3 -1
  374. package/dist/types/src/index.d.ts.map +1 -1
  375. package/dist/types/src/lifecycle.d.ts +21 -3
  376. package/dist/types/src/lifecycle.d.ts.map +1 -1
  377. package/dist/types/src/manifests/_shared.d.ts +1 -16
  378. package/dist/types/src/manifests/_shared.d.ts.map +1 -1
  379. package/dist/types/src/manifests/agent-composition.d.ts +44 -0
  380. package/dist/types/src/manifests/agent-composition.d.ts.map +1 -0
  381. package/dist/types/src/manifests/agent.d.ts +184 -6
  382. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  383. package/dist/types/src/manifests/index.d.ts +6 -15
  384. package/dist/types/src/manifests/index.d.ts.map +1 -1
  385. package/dist/types/src/manifests/preset.d.ts +5 -5
  386. package/dist/types/src/version.d.ts +16 -1
  387. package/dist/types/src/version.d.ts.map +1 -1
  388. package/dist/workspace-plugin/adapters/mcp.js +26 -26
  389. package/dist/workspace-plugin/adapters/omp.js +14 -14
  390. package/dist/workspace-plugin/index.js +1 -1
  391. package/package.json +3 -1
  392. package/dist/asset-feeds-KTFUB7EX.js.map +0 -1
  393. package/dist/chunk-2D2P7HSR.js +0 -15
  394. package/dist/chunk-2D2P7HSR.js.map +0 -1
  395. package/dist/chunk-3JHFFIQ6.js.map +0 -1
  396. package/dist/chunk-5CYEWBPB.js +0 -440
  397. package/dist/chunk-5CYEWBPB.js.map +0 -1
  398. package/dist/chunk-5Y3L7XWH.js.map +0 -1
  399. package/dist/chunk-75EX5GY4.js.map +0 -1
  400. package/dist/chunk-AC2N5BRP.js.map +0 -1
  401. package/dist/chunk-DPMKI26Y.js.map +0 -1
  402. package/dist/chunk-G2O2AARG.js.map +0 -1
  403. package/dist/chunk-K2K7OF4P.js.map +0 -1
  404. package/dist/chunk-LFMX2UEF.js.map +0 -1
  405. package/dist/chunk-MMC24L2W.js.map +0 -1
  406. package/dist/chunk-N3Y43LMZ.js.map +0 -1
  407. package/dist/chunk-ORUHADS6.js.map +0 -1
  408. package/dist/chunk-P6KFWTGP.js.map +0 -1
  409. package/dist/chunk-R4G7XI7A.js.map +0 -1
  410. package/dist/chunk-TNWXGHLD.js.map +0 -1
  411. package/dist/chunk-TOSHZX4C.js.map +0 -1
  412. package/dist/chunk-WX74MVNA.js.map +0 -1
  413. package/dist/chunk-Y7UBRRKG.js.map +0 -1
  414. package/dist/chunk-YK7WJSTD.js.map +0 -1
  415. package/dist/factory-assets/bundles/workspaces-authoring/workspaces-authoring.bundle.yaml +0 -9
  416. package/dist/open-library-Z5NJU4Z5.js +0 -40
  417. package/dist/open-registry-TYUVN5SG.js +0 -32
  418. package/dist/paths-HKAXUR3W.js +0 -22
  419. package/dist/project-SVS4UMGL.js +0 -36
  420. package/dist/skills-HW6I6ZZ7.js +0 -26
  421. package/dist/source-OKRJT53H.js +0 -41
  422. package/dist/types/src/manifests/mount.d.ts +0 -21
  423. package/dist/types/src/manifests/mount.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { err, okJson, ok } from './chunk-X5YPJV4N.js';
2
- import { buildConnectorListPayload } from './chunk-UHLBDAJR.js';
2
+ import { buildConnectorListPayload } from './chunk-UAP2XHRF.js';
3
3
  import { readFile } from 'fs/promises';
4
4
  import { join } from 'path';
5
5
 
@@ -117,5 +117,5 @@ async function connectorDescribe(manager, id) {
117
117
  }
118
118
 
119
119
  export { connectorDescribe, connectorExec, connectorList, connectorLoadSkill, connectorRead, connectorSearch, connectorWrite, mountList, mountRead, mountStatus, mountSync };
120
- //# sourceMappingURL=chunk-SNVOASTL.js.map
121
- //# sourceMappingURL=chunk-SNVOASTL.js.map
120
+ //# sourceMappingURL=chunk-2XFUXGV6.js.map
121
+ //# sourceMappingURL=chunk-2XFUXGV6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/tools/connectors.ts"],"names":[],"mappings":";;;;;AAwBA,SAAS,cAAc,OAAA,EAAiD;AACtE,EAAA,OAAO,OAAA,CACJ,gBAAe,CACf,MAAA,CAAO,CAAC,CAAA,KAA+B,OAAO,CAAA,CAAE,SAAA,KAAc,QAAQ,CAAA;AAC3E;AAaA,eAAe,YAAA,CACb,SACA,KAAA,EACoB;AAEpB,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,kBAAA,GAAqB,MAAM,EAAE,CAAA;AAC5D,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,KAAA,KAAU,QAAQ,OAAO,KAAA;AACnD,EAAA,IAAI,QAAA,CAAS,KAAA,KAAU,MAAA,EAAQ,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAO;AAC3F,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,SAAS,MAAA,EAAO;AAC7C;AAUA,eAAsB,UAAU,OAAA,EAAuD;AACrF,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,cAAc,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,YAAA,CAAa,OAAA,EAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,EAC9F,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAUA,eAAsB,SAAA,CACpB,SACA,OAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AACzC,IAAA,OAAO,OAAO,MAAM,CAAA;AAAA,EACtB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAUA,eAAsB,WAAA,CACpB,SACA,OAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,OAAO,CAAA;AACjE,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,GAAA,CAAI,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,CAAG,CAAA;AACtD,IAAA,OAAO,MAAA,CAAO,MAAM,YAAA,CAAa,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,EAClD,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAYA,eAAsB,SAAA,CACpB,OAAA,EACA,OAAA,EACA,QAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,OAAO,CAAA;AACjE,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,GAAA,CAAI,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,CAAG,CAAA;AACtD,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,MAAM,SAAA,EAAW,QAAQ,GAAG,OAAO,CAAA;AACvE,IAAA,OAAO,GAAG,OAAO,CAAA;AAAA,EACnB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAiBA,eAAsB,cAAc,OAAA,EAAuD;AACzF,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AAEF,IAAA,OAAO,MAAA,CAAO,MAAM,yBAAA,CAA0B,OAAO,CAAC,CAAA;AAAA,EACxD,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAcA,eAAsB,aAAA,CACpB,OAAA,EACA,EAAA,EACA,IAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,IAAI,CAAA;AAC3C,IAAA,IAAI,OAAA,KAAY,MAAM,OAAO,GAAA,CAAI,uBAAuB,IAAI,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,CAAG,CAAA;AACpF,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAcA,eAAsB,cAAA,CACpB,OAAA,EACA,EAAA,EACA,IAAA,EACA,OAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,KAAA,CAAM,EAAA,EAAI,MAAM,EAAE,IAAA,EAAM,SAAS,CAAA;AAC/C,IAAA,OAAO,EAAA,CAAG,CAAA,YAAA,EAAe,IAAI,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,EACvD,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAaA,eAAsB,eAAA,CACpB,OAAA,EACA,EAAA,EACA,KAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAK,CAAA;AAC9C,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAgBA,eAAsB,aAAA,CACpB,OAAA,EACA,EAAA,EACA,SAAA,EACA,IAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,EAAA,EAAI,WAAW,IAAI,CAAA;AAC1D,IAAA,OAAO,GAAG,MAAM,CAAA;AAAA,EAClB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAcA,eAAsB,kBAAA,CACpB,SACA,EAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,EAAE,CAAA;AAClC,IAAA,OAAO,GAAG,KAAK,CAAA;AAAA,EACjB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAcA,eAAsB,iBAAA,CACpB,SACA,EAAA,EACqB;AACrB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,yCAAyC,CAAA;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,QAAQ,UAAA,EAAW;AAClC,IAAA,MAAM,aAAa,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACjD,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,GAAA,CAAI,CAAA,mCAAA,EAAsC,EAAE,CAAA,CAAA,CAAG,CAAA;AACvE,IAAA,OAAO,OAAO,UAAU,CAAA;AAAA,EAC1B,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF","file":"chunk-SNVOASTL.js","sourcesContent":["// src/tools/connectors.ts\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { buildConnectorListPayload, type ConnectorManager } from \"@skaile/workspaces/connectors\";\nimport type { ToolResult } from \"../types.js\";\nimport { err, ok, okJson } from \"../types.js\";\n\n// ── Mountable-connector helpers ──────────────────────────────────────────────\n//\n// The unified ConnectorManager owns mountable (filesystem-face) connectors too.\n// A connector is mountable when its `listConnectors()` summary carries a\n// `mountPath`. The `mount*` helpers below project that subset for the legacy\n// `mount_*` tool surface.\n\n/**\n * A connector summary that carries a projected filesystem path. Unlike the raw\n * `listConnectors()` summary, `mountPath` is non-optional here — `listMountable()`\n * runtime-filters to exactly those entries before narrowing to this type.\n */\ntype MountableConnector = ReturnType<ConnectorManager[\"listConnectors\"]>[number] & {\n mountPath: string;\n};\n\n/** Return the mountable (filesystem-face) connectors from a manager. */\nfunction listMountable(manager: ConnectorManager): MountableConnector[] {\n return manager\n .listConnectors()\n .filter((c): c is MountableConnector => typeof c.mountPath === \"string\");\n}\n\n/**\n * A mountable connector as reported to the agent, with an optional `reason`.\n *\n * A fleet-managed mount whose path is gone reports `status: \"error\"` plus a\n * `reason`, even though the connector handle still reads `connected`. One whose\n * probe timed out keeps its cached status and gains a `reason` saying it is\n * unverified: a slow cloud mount is not reported dead.\n */\ntype MountView = MountableConnector & { reason?: string };\n\n/** Overlay a live re-check on the cached connect-time status where one applies. */\nasync function withLiveness(\n manager: ConnectorManager,\n mount: MountableConnector,\n): Promise<MountView> {\n // Optional call: the tool tests' manager doubles omit the method.\n const liveness = await manager.checkMountLiveness?.(mount.id);\n if (!liveness || liveness.state === \"live\") return mount;\n if (liveness.state === \"dead\") return { ...mount, status: \"error\", reason: liveness.reason };\n return { ...mount, reason: liveness.reason };\n}\n\n/**\n * List all mountable (filesystem-face) connectors declared in `skaile.yaml`\n * with their current mount status.\n *\n * @param manager - Active `ConnectorManager` or `null` when not configured.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountList(manager: ConnectorManager | null): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n return okJson(await Promise.all(listMountable(manager).map((m) => withLiveness(manager, m))));\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Sync a mountable connector — pull the latest content from its remote source.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param mountId - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountSync(\n manager: ConnectorManager | null,\n mountId: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const result = await manager.sync(mountId);\n return okJson(result);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get the current status and metadata for a single mountable connector.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param mountId - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountStatus(\n manager: ConnectorManager | null,\n mountId: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const mount = listMountable(manager).find((v) => v.id === mountId);\n if (!mount) return err(`Mount not found: \"${mountId}\"`);\n return okJson(await withLiveness(manager, mount));\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Read a file from within a mountable connector's projected directory by its\n * relative path.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param mountId - Connector ID declared in `skaile.yaml`.\n * @param filePath - Relative path within the projected mount directory.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountRead(\n manager: ConnectorManager | null,\n mountId: string,\n filePath: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const mount = listMountable(manager).find((v) => v.id === mountId);\n if (!mount) return err(`Mount not found: \"${mountId}\"`);\n const content = await readFile(join(mount.mountPath, filePath), \"utf-8\");\n return ok(content);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all connectors registered with the `ConnectorManager`.\n *\n * Returns `{ connected, failed }` — `connected` from `manager.listConnectors()`,\n * `failed` from `manager.listFailedConnectors()`. A connector that threw during\n * `connect()` never enters the active map, so it is absent from the first list\n * entirely; without the second one an agent driven through MCP or OMP has no\n * way to learn that a mount it is about to write into is dead. Returns an error\n * result when no manager is configured (i.e. `skaile.yaml` has no `connectors`\n * section).\n *\n * @param manager - Active `ConnectorManager` or `null` when not configured.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorList(manager: ConnectorManager | null): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n // Same payload as the Claude SDK tool: per-mount health and a notice when one is not ok.\n return okJson(await buildConnectorListPayload(manager));\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Read content from a connector at the given path.\n *\n * Delegates to `manager.read(id, path)`. Returns an error result when the\n * path yields `null` (not found) or the manager is absent.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param path - Resource path within the connector (connector-specific format).\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorRead(\n manager: ConnectorManager | null,\n id: string,\n path: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const content = await manager.read(id, path);\n if (content === null) return err(`No content at path \"${path}\" in connector \"${id}\"`);\n return okJson(content);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Write string content to a connector at the given path.\n *\n * Delegates to `manager.write(id, path, { data: content })`.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param path - Destination path within the connector.\n * @param content - String payload to write.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorWrite(\n manager: ConnectorManager | null,\n id: string,\n path: string,\n content: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n await manager.write(id, path, { data: content });\n return ok(`Written to \"${path}\" in connector \"${id}\"`);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Search a connector's data using a query string.\n *\n * Delegates to `manager.search(id, query)` and returns the result set as JSON.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param query - Free-text or structured query (connector-specific format).\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorSearch(\n manager: ConnectorManager | null,\n id: string,\n query: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const results = await manager.search(id, query);\n return okJson(results);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Execute a named operation on a connector.\n *\n * Delegates to `manager.executeOp(id, operation, args)`. Operations and\n * their argument shapes are connector-specific; use {@link connectorDescribe}\n * to discover what operations a connector supports.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param operation - Operation name (from the connector's `RuntimeSkillDescriptor`).\n * @param args - Named arguments for the operation.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorExec(\n manager: ConnectorManager | null,\n id: string,\n operation: string,\n args: Record<string, unknown>,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const result = await manager.executeOp(id, operation, args);\n return ok(result);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Load the rendered skill body for a connector.\n *\n * Delegates to `manager.loadSkill(id)` and returns the skill content as\n * plain text. Useful when the agent needs the connector's operations and\n * usage instructions injected as prompt context.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorLoadSkill(\n manager: ConnectorManager | null,\n id: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const skill = manager.loadSkill(id);\n return ok(skill);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Describe a connector's capabilities via its `RuntimeSkillDescriptor`.\n *\n * Finds the matching skill descriptor from `manager.listSkills()` and returns\n * it as JSON. The descriptor includes the connector's operations, argument\n * shapes, and usage instructions.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorDescribe(\n manager: ConnectorManager | null,\n id: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const skills = manager.listSkills();\n const descriptor = skills.find((s) => s.id === id);\n if (!descriptor) return err(`No skill descriptor for connector \"${id}\"`);\n return okJson(descriptor);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/tools/connectors.ts"],"names":[],"mappings":"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","file":"chunk-2XFUXGV6.js","sourcesContent":["// src/tools/connectors.ts\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { buildConnectorListPayload, type ConnectorManager } from \"@skaile/workspaces/connectors\";\nimport type { ToolResult } from \"../types.js\";\nimport { err, ok, okJson } from \"../types.js\";\n\n// ── Mountable-connector helpers ──────────────────────────────────────────────\n//\n// The unified ConnectorManager owns mountable (filesystem-face) connectors too.\n// A connector is mountable when its `listConnectors()` summary carries a\n// `mountPath`. The `mount*` helpers below project that subset for the legacy\n// `mount_*` tool surface.\n\n/**\n * A connector summary that carries a projected filesystem path. Unlike the raw\n * `listConnectors()` summary, `mountPath` is non-optional here — `listMountable()`\n * runtime-filters to exactly those entries before narrowing to this type.\n */\ntype MountableConnector = ReturnType<ConnectorManager[\"listConnectors\"]>[number] & {\n mountPath: string;\n};\n\n/** Return the mountable (filesystem-face) connectors from a manager. */\nfunction listMountable(manager: ConnectorManager): MountableConnector[] {\n return manager\n .listConnectors()\n .filter((c): c is MountableConnector => typeof c.mountPath === \"string\");\n}\n\n/**\n * A mountable connector as reported to the agent, with an optional `reason`.\n *\n * A fleet-managed mount whose path is gone reports `status: \"error\"` plus a\n * `reason`, even though the connector handle still reads `connected`. One whose\n * probe timed out keeps its cached status and gains a `reason` saying it is\n * unverified: a slow cloud mount is not reported dead.\n */\ntype MountView = MountableConnector & { reason?: string };\n\n/** Overlay a live re-check on the cached connect-time status where one applies. */\nasync function withLiveness(\n manager: ConnectorManager,\n mount: MountableConnector,\n): Promise<MountView> {\n // Optional call: the tool tests' manager doubles omit the method.\n const liveness = await manager.checkMountLiveness?.(mount.id);\n if (!liveness || liveness.state === \"live\") return mount;\n if (liveness.state === \"dead\") return { ...mount, status: \"error\", reason: liveness.reason };\n return { ...mount, reason: liveness.reason };\n}\n\n/**\n * List all mountable (filesystem-face) connectors declared in `skaile.yaml`\n * with their current mount status.\n *\n * @param manager - Active `ConnectorManager` or `null` when not configured.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountList(manager: ConnectorManager | null): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n return okJson(await Promise.all(listMountable(manager).map((m) => withLiveness(manager, m))));\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Sync a mountable connector — pull the latest content from its remote source.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param mountId - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountSync(\n manager: ConnectorManager | null,\n mountId: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const result = await manager.sync(mountId);\n return okJson(result);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get the current status and metadata for a single mountable connector.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param mountId - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountStatus(\n manager: ConnectorManager | null,\n mountId: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const mount = listMountable(manager).find((v) => v.id === mountId);\n if (!mount) return err(`Mount not found: \"${mountId}\"`);\n return okJson(await withLiveness(manager, mount));\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Read a file from within a mountable connector's projected directory by its\n * relative path.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param mountId - Connector ID declared in `skaile.yaml`.\n * @param filePath - Relative path within the projected mount directory.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function mountRead(\n manager: ConnectorManager | null,\n mountId: string,\n filePath: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const mount = listMountable(manager).find((v) => v.id === mountId);\n if (!mount) return err(`Mount not found: \"${mountId}\"`);\n const content = await readFile(join(mount.mountPath, filePath), \"utf-8\");\n return ok(content);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all connectors registered with the `ConnectorManager`.\n *\n * Returns `{ connected, failed }` — `connected` from `manager.listConnectors()`,\n * `failed` from `manager.listFailedConnectors()`. A connector that threw during\n * `connect()` never enters the active map, so it is absent from the first list\n * entirely; without the second one an agent driven through MCP or OMP has no\n * way to learn that a mount it is about to write into is dead. Returns an error\n * result when no manager is configured (i.e. `skaile.yaml` has no `connectors`\n * section).\n *\n * @param manager - Active `ConnectorManager` or `null` when not configured.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorList(manager: ConnectorManager | null): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n // Same payload as the Claude SDK tool: per-mount health and a notice when one is not ok.\n return okJson(await buildConnectorListPayload(manager));\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Read content from a connector at the given path.\n *\n * Delegates to `manager.read(id, path)`. Returns an error result when the\n * path yields `null` (not found) or the manager is absent.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param path - Resource path within the connector (connector-specific format).\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorRead(\n manager: ConnectorManager | null,\n id: string,\n path: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const content = await manager.read(id, path);\n if (content === null) return err(`No content at path \"${path}\" in connector \"${id}\"`);\n return okJson(content);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Write string content to a connector at the given path.\n *\n * Delegates to `manager.write(id, path, { data: content })`.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param path - Destination path within the connector.\n * @param content - String payload to write.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorWrite(\n manager: ConnectorManager | null,\n id: string,\n path: string,\n content: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n await manager.write(id, path, { data: content });\n return ok(`Written to \"${path}\" in connector \"${id}\"`);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Search a connector's data using a query string.\n *\n * Delegates to `manager.search(id, query)` and returns the result set as JSON.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param query - Free-text or structured query (connector-specific format).\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorSearch(\n manager: ConnectorManager | null,\n id: string,\n query: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const results = await manager.search(id, query);\n return okJson(results);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Execute a named operation on a connector.\n *\n * Delegates to `manager.executeOp(id, operation, args)`. Operations and\n * their argument shapes are connector-specific; use {@link connectorDescribe}\n * to discover what operations a connector supports.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n * @param operation - Operation name (from the connector's `RuntimeSkillDescriptor`).\n * @param args - Named arguments for the operation.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorExec(\n manager: ConnectorManager | null,\n id: string,\n operation: string,\n args: Record<string, unknown>,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const result = await manager.executeOp(id, operation, args);\n return ok(result);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Load the rendered skill body for a connector.\n *\n * Delegates to `manager.loadSkill(id)` and returns the skill content as\n * plain text. Useful when the agent needs the connector's operations and\n * usage instructions injected as prompt context.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorLoadSkill(\n manager: ConnectorManager | null,\n id: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const skill = manager.loadSkill(id);\n return ok(skill);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Describe a connector's capabilities via its `RuntimeSkillDescriptor`.\n *\n * Finds the matching skill descriptor from `manager.listSkills()` and returns\n * it as JSON. The descriptor includes the connector's operations, argument\n * shapes, and usage instructions.\n *\n * @param manager - Active `ConnectorManager` or `null`.\n * @param id - Connector ID declared in `skaile.yaml`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function connectorDescribe(\n manager: ConnectorManager | null,\n id: string,\n): Promise<ToolResult> {\n if (!manager) return err(\"No connectors configured in skaile.yaml\");\n try {\n const skills = manager.listSkills();\n const descriptor = skills.find((s) => s.id === id);\n if (!descriptor) return err(`No skill descriptor for connector \"${id}\"`);\n return okJson(descriptor);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
@@ -83,5 +83,5 @@ var ProviderUnavailableError = class extends SecretsError {
83
83
  var VERSION = "0.0.0";
84
84
 
85
85
  export { AssetKindConflictError, AssetKindPathAmbiguityError, AssetKindPatternConflictError, AssetKindRegistryFrozenError, ProviderUnavailableError, SecretAccessDeniedError, SecretExpiredError, SecretNotFoundError, SecretsError, VERSION };
86
- //# sourceMappingURL=chunk-ZDKJHQY2.js.map
87
- //# sourceMappingURL=chunk-ZDKJHQY2.js.map
86
+ //# sourceMappingURL=chunk-3TXEJN4W.js.map
87
+ //# sourceMappingURL=chunk-3TXEJN4W.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../plugins/src/asset-kind-registry.ts","../plugins/src/secrets-provider.ts","../plugins/src/index.ts"],"names":[],"mappings":"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","file":"chunk-ZDKJHQY2.js","sourcesContent":["/**\n * IAssetKindRegistry — contract for the frozen-state asset kind registry.\n *\n * Library-bound, not process-global. Follows a frozen-state machine:\n * - register() is valid only in the \"open\" state\n * - First read operation auto-freezes the registry\n * - freeze() is idempotent\n *\n * Conflicts on registration are hard errors (A4):\n * - Same kind registered twice → AssetKindConflictError\n * - Overlapping glob patterns → AssetKindPatternConflictError\n * - Multiple providers match a path → AssetKindPathAmbiguityError\n *\n * Design decisions A3, A4: locked in Phase 1.7 planning.\n */\n\nimport type { ManifestValidationResult } from \"@skaile/workspaces/types/manifests\";\nimport type {\n AssetKindFileFilter,\n AssetKindRequiresEdge,\n IAssetKindProvider,\n} from \"./asset-kind-provider.js\";\n\n// ---------------------------------------------------------------------------\n// Error classes (A4)\n// ---------------------------------------------------------------------------\n\n/**\n * Thrown when a kind is registered that already exists in the registry.\n */\nexport class AssetKindConflictError extends Error {\n readonly kind: string;\n\n constructor(kind: string) {\n super(`Asset kind \"${kind}\" is already registered. Each kind must have exactly one provider.`);\n this.name = \"AssetKindConflictError\";\n this.kind = kind;\n }\n}\n\n/**\n * Thrown when a provider's discovery patterns overlap with an\n * already-registered provider's patterns.\n */\nexport class AssetKindPatternConflictError extends Error {\n readonly newKind: string;\n readonly existingKind: string;\n readonly conflictingPattern: string;\n\n constructor(newKind: string, existingKind: string, conflictingPattern: string) {\n super(\n `Discovery pattern \"${conflictingPattern}\" from kind \"${newKind}\" conflicts with kind \"${existingKind}\". Patterns must not overlap across providers.`,\n );\n this.name = \"AssetKindPatternConflictError\";\n this.newKind = newKind;\n this.existingKind = existingKind;\n this.conflictingPattern = conflictingPattern;\n }\n}\n\n/**\n * Thrown at discovery time when multiple providers claim the same path.\n * This indicates a bug in matchesPath implementations — should be caught\n * earlier by pattern conflict detection, but serves as a runtime safety net.\n */\nexport class AssetKindPathAmbiguityError extends Error {\n readonly path: string;\n readonly matchingKinds: string[];\n\n constructor(path: string, matchingKinds: string[]) {\n super(\n `Path \"${path}\" matches multiple providers: [${matchingKinds.join(\", \")}]. Only one provider may claim a path.`,\n );\n this.name = \"AssetKindPathAmbiguityError\";\n this.path = path;\n this.matchingKinds = matchingKinds;\n }\n}\n\n/**\n * Thrown when register() is called on a frozen registry.\n */\nexport class AssetKindRegistryFrozenError extends Error {\n constructor() {\n super(\n \"Cannot register providers after the registry is frozen. All providers must be registered before the first read operation.\",\n );\n this.name = \"AssetKindRegistryFrozenError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Interface\n// ---------------------------------------------------------------------------\n\n/**\n * Frozen-state asset kind registry.\n *\n * Lifecycle:\n * 1. Created in \"open\" state\n * 2. Providers registered via register()\n * 3. First read operation (getProvider, getAllProviders, resolveKind,\n * validateManifest, defaultFileFilter, extractRequires) auto-freezes\n * 4. No further registrations allowed\n *\n * Implementations: AssetKindRegistry in @skaile/discovery.\n */\nexport interface IAssetKindRegistry {\n /** Whether the registry is frozen (no further registrations allowed). */\n readonly frozen: boolean;\n\n /**\n * Register a provider. Must be called before the registry is frozen.\n * @throws AssetKindConflictError if kind already registered\n * @throws AssetKindPatternConflictError if patterns overlap\n * @throws AssetKindRegistryFrozenError if registry is frozen\n */\n register(provider: IAssetKindProvider): void;\n\n /**\n * Explicitly freeze the registry. Idempotent — calling on an already-frozen\n * registry is a no-op.\n */\n freeze(): void;\n\n // -- Read operations (auto-freeze on first call) --\n\n /** Get a provider by kind name. Returns undefined for unregistered kinds. */\n getProvider(kind: string): IAssetKindProvider | undefined;\n\n /** Get all registered providers (snapshot, not live). */\n getAllProviders(): IAssetKindProvider[];\n\n /** Get all registered kind names. */\n getAllKinds(): string[];\n\n /**\n * Resolve a relative path to an asset kind.\n * @throws AssetKindPathAmbiguityError if multiple providers match\n * @returns The kind string, or undefined if no provider matches\n */\n resolveKind(relativePath: string): string | undefined;\n\n // -- Convenience delegates (auto-freeze on first call) --\n\n /**\n * Validate a manifest for a given kind.\n * @returns Validation result, or a failure if the kind is unregistered\n */\n validateManifest(kind: string, data: unknown): ManifestValidationResult<unknown>;\n\n /**\n * Compute the default file filter for an asset.\n * @returns The file filter, or undefined if the kind is unregistered\n */\n defaultFileFilter(kind: string, manifestPath: string): AssetKindFileFilter | undefined;\n\n /**\n * Extract requires edges from a manifest.\n * @returns The edges, or an empty array if the kind has no extractRequires\n */\n extractRequires(\n kind: string,\n assetRef: string,\n manifest: Record<string, unknown>,\n ): AssetKindRequiresEdge[];\n}\n","/**\n * ISecretsProvider — pluggable secret storage/retrieval interface.\n *\n * Lives in workspaces/plugins (all pluggable interface contracts centralized here).\n * Built-in implementations live in workspaces/secrets.\n *\n * Signature locked per Phase 1 plan decision E5.\n */\n\n// ---------------------------------------------------------------------------\n// Helper types\n// ---------------------------------------------------------------------------\n\n/**\n * Metadata record returned by {@link ISecretsProvider.getMetadata}.\n *\n * Carries audit timestamps and optional ownership information without\n * exposing the secret value itself.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface SecretMetadata {\n ref: string;\n createdAt: Date;\n updatedAt: Date;\n lastAccessedAt?: Date;\n owner?: string;\n scopeSummary?: string;\n}\n\n/**\n * Feature flags advertised by a secrets provider via\n * {@link ISecretsProvider.getCapabilities}.\n *\n * Consumers use this to determine whether rotation, TTL, or batch operations\n * are available before calling the corresponding methods.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface ProviderCapabilities {\n supportsRotation: boolean;\n supportsExpiry: boolean;\n supportsBatch: boolean;\n scopeModel: \"flat\" | \"hierarchical\";\n}\n\n/**\n * Options accepted by {@link ISecretsProvider.setSecret}.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface SetSecretOptions {\n ttlSeconds?: number;\n metadata?: Record<string, string>;\n}\n\n/**\n * Filter parameters accepted by {@link ISecretsProvider.listSecrets}.\n *\n * All fields are optional — an empty filter returns all accessible secrets.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface ListFilter {\n prefix?: string;\n owner?: string;\n limit?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Error hierarchy\n// ---------------------------------------------------------------------------\n\n/**\n * Base error class for all secrets-layer failures.\n *\n * Carries a machine-readable `code` string alongside the human-readable\n * message so callers can switch on error type without instanceof chains.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretsError extends Error {\n code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = \"SecretsError\";\n this.code = code;\n }\n}\n\n/**\n * Thrown by {@link ISecretsProvider.getSecret} when the requested `ref` does\n * not exist in the provider's backing store.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretNotFoundError extends SecretsError {\n constructor(ref: string) {\n super(`Secret not found: ${ref}`, \"SECRET_NOT_FOUND\");\n this.name = \"SecretNotFoundError\";\n }\n}\n\n/**\n * Thrown when the caller does not have permission to access a secret.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretAccessDeniedError extends SecretsError {\n constructor(message = \"Access denied\") {\n super(message, \"SECRET_ACCESS_DENIED\");\n this.name = \"SecretAccessDeniedError\";\n }\n}\n\n/**\n * Thrown by {@link ISecretsProvider.getSecret} when the secret exists but its\n * TTL has elapsed.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretExpiredError extends SecretsError {\n constructor(ref: string) {\n super(`Secret expired: ${ref}`, \"SECRET_EXPIRED\");\n this.name = \"SecretExpiredError\";\n }\n}\n\n/**\n * Thrown when the backing secrets provider cannot be reached.\n *\n * Carries an optional `cause` string with provider-specific diagnostics.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class ProviderUnavailableError extends SecretsError {\n constructor(providerId: string, cause?: string) {\n super(\n `Provider unavailable: ${providerId}${cause ? ` (${cause})` : \"\"}`,\n \"PROVIDER_UNAVAILABLE\",\n );\n this.name = \"ProviderUnavailableError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Interface\n// ---------------------------------------------------------------------------\n\n/**\n * Pluggable interface for secret storage and retrieval.\n *\n * Built-in implementations (Phase 1): `LocalSecretsProvider`, `EnvSecretsProvider`\n * (in `workspaces/secrets`). Future implementations include Vault, AWS SM,\n * GCP SM, Azure Key Vault, Infisical, Doppler, and Bitwarden Secrets.\n *\n * Registration is explicit and programmatic: `pluginRegistry.register(impl)`.\n * Third-party providers are loaded via dynamic import driven by config.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface ISecretsProvider {\n /** Unique provider identifier used for registration and diagnostics. */\n readonly id: string;\n /** Retrieve a secret by ref, returning the raw bytes. */\n getSecret(ref: string): Promise<Uint8Array>;\n /** Store or update a secret. Optional TTL and metadata can be attached. */\n setSecret(ref: string, value: Uint8Array, opts?: SetSecretOptions): Promise<void>;\n /** Permanently remove a secret. */\n deleteSecret(ref: string): Promise<void>;\n /** List secret refs accessible to the caller, with optional filtering. */\n listSecrets(filter?: ListFilter): Promise<string[]>;\n /** Verify the provider is reachable and measure round-trip latency. */\n testConnection(): Promise<{ ok: boolean; latencyMs?: number; error?: string }>;\n /** Return audit metadata for a secret without revealing its value. */\n getMetadata(ref: string): Promise<SecretMetadata>;\n /** Advertise which optional capabilities this provider supports. */\n getCapabilities(): ProviderCapabilities;\n}\n","export const VERSION = \"0.0.0\";\n\n// Pluggable interface contracts — Asset Kind Provider\nexport type {\n AssetKindFileFilter,\n AssetKindRequiresEdge,\n IAssetKindProvider,\n} from \"./asset-kind-provider.js\";\nexport type { IAssetKindRegistry } from \"./asset-kind-registry.js\";\n// Pluggable interface contracts — Asset Kind Registry\nexport {\n AssetKindConflictError,\n AssetKindPathAmbiguityError,\n AssetKindPatternConflictError,\n AssetKindRegistryFrozenError,\n} from \"./asset-kind-registry.js\";\n// Pluggable interface contracts — Catalog Source\nexport type {\n CatalogAsset,\n CatalogAssetFilter,\n CatalogSourceInfo,\n ICatalogSource,\n} from \"./catalog-source.js\";\n\nexport type {\n ISecretsProvider,\n ListFilter,\n ProviderCapabilities,\n SecretMetadata,\n SetSecretOptions,\n} from \"./secrets-provider.js\";\n// Pluggable interface contracts — Secrets\nexport {\n ProviderUnavailableError,\n SecretAccessDeniedError,\n SecretExpiredError,\n SecretNotFoundError,\n SecretsError,\n} from \"./secrets-provider.js\";\n"]}
1
+ {"version":3,"sources":["../plugins/src/asset-kind-registry.ts","../plugins/src/secrets-provider.ts","../plugins/src/index.ts"],"names":[],"mappings":";AA8BO,IAAM,sBAAA,GAAN,cAAqC,KAAA,CAAM;AAAA,EACvC,IAAA;AAAA,EAET,YAAY,IAAA,EAAc;AACxB,IAAA,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kEAAA,CAAoE,CAAA;AAC7F,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF;AAMO,IAAM,6BAAA,GAAN,cAA4C,KAAA,CAAM;AAAA,EAC9C,OAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAiB,YAAA,EAAsB,kBAAA,EAA4B;AAC7E,IAAA,KAAA;AAAA,MACE,CAAA,mBAAA,EAAsB,kBAAkB,CAAA,aAAA,EAAgB,OAAO,0BAA0B,YAAY,CAAA,8CAAA;AAAA,KACvG;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,+BAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,kBAAA,GAAqB,kBAAA;AAAA,EAC5B;AACF;AAOO,IAAM,2BAAA,GAAN,cAA0C,KAAA,CAAM;AAAA,EAC5C,IAAA;AAAA,EACA,aAAA;AAAA,EAET,WAAA,CAAY,MAAc,aAAA,EAAyB;AACjD,IAAA,KAAA;AAAA,MACE,SAAS,IAAI,CAAA,+BAAA,EAAkC,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,sCAAA;AAAA,KACzE;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AACF;AAKO,IAAM,4BAAA,GAAN,cAA2C,KAAA,CAAM;AAAA,EACtD,WAAA,GAAc;AACZ,IAAA,KAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,8BAAA;AAAA,EACd;AACF;;;ACRO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EACtC,IAAA;AAAA,EAEA,WAAA,CAAY,SAAiB,IAAA,EAAc;AACzC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF;AAQO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,YAAY,GAAA,EAAa;AACvB,IAAA,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAA,EAAI,kBAAkB,CAAA;AACpD,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAOO,IAAM,uBAAA,GAAN,cAAsC,YAAA,CAAa;AAAA,EACxD,WAAA,CAAY,UAAU,eAAA,EAAiB;AACrC,IAAA,KAAA,CAAM,SAAS,sBAAsB,CAAA;AACrC,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF;AAQO,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EACnD,YAAY,GAAA,EAAa;AACvB,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAG,CAAA,CAAA,EAAI,gBAAgB,CAAA;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AASO,IAAM,wBAAA,GAAN,cAAuC,YAAA,CAAa;AAAA,EACzD,WAAA,CAAY,YAAoB,KAAA,EAAgB;AAC9C,IAAA,KAAA;AAAA,MACE,yBAAyB,UAAU,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,KAAK,MAAM,EAAE,CAAA,CAAA;AAAA,MAChE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EACd;AACF;;;AChJO,IAAM,OAAA,GAAU","file":"chunk-3TXEJN4W.js","sourcesContent":["/**\n * IAssetKindRegistry — contract for the frozen-state asset kind registry.\n *\n * Library-bound, not process-global. Follows a frozen-state machine:\n * - register() is valid only in the \"open\" state\n * - First read operation auto-freezes the registry\n * - freeze() is idempotent\n *\n * Conflicts on registration are hard errors (A4):\n * - Same kind registered twice → AssetKindConflictError\n * - Overlapping glob patterns → AssetKindPatternConflictError\n * - Multiple providers match a path → AssetKindPathAmbiguityError\n *\n * Design decisions A3, A4: locked in Phase 1.7 planning.\n */\n\nimport type { ManifestValidationResult } from \"@skaile/workspaces/types/manifests\";\nimport type {\n AssetKindFileFilter,\n AssetKindRequiresEdge,\n IAssetKindProvider,\n} from \"./asset-kind-provider.js\";\n\n// ---------------------------------------------------------------------------\n// Error classes (A4)\n// ---------------------------------------------------------------------------\n\n/**\n * Thrown when a kind is registered that already exists in the registry.\n */\nexport class AssetKindConflictError extends Error {\n readonly kind: string;\n\n constructor(kind: string) {\n super(`Asset kind \"${kind}\" is already registered. Each kind must have exactly one provider.`);\n this.name = \"AssetKindConflictError\";\n this.kind = kind;\n }\n}\n\n/**\n * Thrown when a provider's discovery patterns overlap with an\n * already-registered provider's patterns.\n */\nexport class AssetKindPatternConflictError extends Error {\n readonly newKind: string;\n readonly existingKind: string;\n readonly conflictingPattern: string;\n\n constructor(newKind: string, existingKind: string, conflictingPattern: string) {\n super(\n `Discovery pattern \"${conflictingPattern}\" from kind \"${newKind}\" conflicts with kind \"${existingKind}\". Patterns must not overlap across providers.`,\n );\n this.name = \"AssetKindPatternConflictError\";\n this.newKind = newKind;\n this.existingKind = existingKind;\n this.conflictingPattern = conflictingPattern;\n }\n}\n\n/**\n * Thrown at discovery time when multiple providers claim the same path.\n * This indicates a bug in matchesPath implementations — should be caught\n * earlier by pattern conflict detection, but serves as a runtime safety net.\n */\nexport class AssetKindPathAmbiguityError extends Error {\n readonly path: string;\n readonly matchingKinds: string[];\n\n constructor(path: string, matchingKinds: string[]) {\n super(\n `Path \"${path}\" matches multiple providers: [${matchingKinds.join(\", \")}]. Only one provider may claim a path.`,\n );\n this.name = \"AssetKindPathAmbiguityError\";\n this.path = path;\n this.matchingKinds = matchingKinds;\n }\n}\n\n/**\n * Thrown when register() is called on a frozen registry.\n */\nexport class AssetKindRegistryFrozenError extends Error {\n constructor() {\n super(\n \"Cannot register providers after the registry is frozen. All providers must be registered before the first read operation.\",\n );\n this.name = \"AssetKindRegistryFrozenError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Interface\n// ---------------------------------------------------------------------------\n\n/**\n * Frozen-state asset kind registry.\n *\n * Lifecycle:\n * 1. Created in \"open\" state\n * 2. Providers registered via register()\n * 3. First read operation (getProvider, getAllProviders, resolveKind,\n * validateManifest, defaultFileFilter, extractRequires) auto-freezes\n * 4. No further registrations allowed\n *\n * Implementations: AssetKindRegistry in @skaile/discovery.\n */\nexport interface IAssetKindRegistry {\n /** Whether the registry is frozen (no further registrations allowed). */\n readonly frozen: boolean;\n\n /**\n * Register a provider. Must be called before the registry is frozen.\n * @throws AssetKindConflictError if kind already registered\n * @throws AssetKindPatternConflictError if patterns overlap\n * @throws AssetKindRegistryFrozenError if registry is frozen\n */\n register(provider: IAssetKindProvider): void;\n\n /**\n * Explicitly freeze the registry. Idempotent — calling on an already-frozen\n * registry is a no-op.\n */\n freeze(): void;\n\n // -- Read operations (auto-freeze on first call) --\n\n /** Get a provider by kind name. Returns undefined for unregistered kinds. */\n getProvider(kind: string): IAssetKindProvider | undefined;\n\n /** Get all registered providers (snapshot, not live). */\n getAllProviders(): IAssetKindProvider[];\n\n /** Get all registered kind names. */\n getAllKinds(): string[];\n\n /**\n * Resolve a relative path to an asset kind.\n * @throws AssetKindPathAmbiguityError if multiple providers match\n * @returns The kind string, or undefined if no provider matches\n */\n resolveKind(relativePath: string): string | undefined;\n\n // -- Convenience delegates (auto-freeze on first call) --\n\n /**\n * Validate a manifest for a given kind.\n * @returns Validation result, or a failure if the kind is unregistered\n */\n validateManifest(kind: string, data: unknown): ManifestValidationResult<unknown>;\n\n /**\n * Compute the default file filter for an asset.\n * @returns The file filter, or undefined if the kind is unregistered\n */\n defaultFileFilter(kind: string, manifestPath: string): AssetKindFileFilter | undefined;\n\n /**\n * Extract requires edges from a manifest.\n * @returns The edges, or an empty array if the kind has no extractRequires\n */\n extractRequires(\n kind: string,\n assetRef: string,\n manifest: Record<string, unknown>,\n ): AssetKindRequiresEdge[];\n}\n","/**\n * ISecretsProvider — pluggable secret storage/retrieval interface.\n *\n * Lives in workspaces/plugins (all pluggable interface contracts centralized here).\n * Built-in implementations live in workspaces/secrets.\n *\n * Signature locked per Phase 1 plan decision E5.\n */\n\n// ---------------------------------------------------------------------------\n// Helper types\n// ---------------------------------------------------------------------------\n\n/**\n * Metadata record returned by {@link ISecretsProvider.getMetadata}.\n *\n * Carries audit timestamps and optional ownership information without\n * exposing the secret value itself.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface SecretMetadata {\n ref: string;\n createdAt: Date;\n updatedAt: Date;\n lastAccessedAt?: Date;\n owner?: string;\n scopeSummary?: string;\n}\n\n/**\n * Feature flags advertised by a secrets provider via\n * {@link ISecretsProvider.getCapabilities}.\n *\n * Consumers use this to determine whether rotation, TTL, or batch operations\n * are available before calling the corresponding methods.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface ProviderCapabilities {\n supportsRotation: boolean;\n supportsExpiry: boolean;\n supportsBatch: boolean;\n scopeModel: \"flat\" | \"hierarchical\";\n}\n\n/**\n * Options accepted by {@link ISecretsProvider.setSecret}.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface SetSecretOptions {\n ttlSeconds?: number;\n metadata?: Record<string, string>;\n}\n\n/**\n * Filter parameters accepted by {@link ISecretsProvider.listSecrets}.\n *\n * All fields are optional — an empty filter returns all accessible secrets.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface ListFilter {\n prefix?: string;\n owner?: string;\n limit?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Error hierarchy\n// ---------------------------------------------------------------------------\n\n/**\n * Base error class for all secrets-layer failures.\n *\n * Carries a machine-readable `code` string alongside the human-readable\n * message so callers can switch on error type without instanceof chains.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretsError extends Error {\n code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = \"SecretsError\";\n this.code = code;\n }\n}\n\n/**\n * Thrown by {@link ISecretsProvider.getSecret} when the requested `ref` does\n * not exist in the provider's backing store.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretNotFoundError extends SecretsError {\n constructor(ref: string) {\n super(`Secret not found: ${ref}`, \"SECRET_NOT_FOUND\");\n this.name = \"SecretNotFoundError\";\n }\n}\n\n/**\n * Thrown when the caller does not have permission to access a secret.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretAccessDeniedError extends SecretsError {\n constructor(message = \"Access denied\") {\n super(message, \"SECRET_ACCESS_DENIED\");\n this.name = \"SecretAccessDeniedError\";\n }\n}\n\n/**\n * Thrown by {@link ISecretsProvider.getSecret} when the secret exists but its\n * TTL has elapsed.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class SecretExpiredError extends SecretsError {\n constructor(ref: string) {\n super(`Secret expired: ${ref}`, \"SECRET_EXPIRED\");\n this.name = \"SecretExpiredError\";\n }\n}\n\n/**\n * Thrown when the backing secrets provider cannot be reached.\n *\n * Carries an optional `cause` string with provider-specific diagnostics.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport class ProviderUnavailableError extends SecretsError {\n constructor(providerId: string, cause?: string) {\n super(\n `Provider unavailable: ${providerId}${cause ? ` (${cause})` : \"\"}`,\n \"PROVIDER_UNAVAILABLE\",\n );\n this.name = \"ProviderUnavailableError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Interface\n// ---------------------------------------------------------------------------\n\n/**\n * Pluggable interface for secret storage and retrieval.\n *\n * Built-in implementations (Phase 1): `LocalSecretsProvider`, `EnvSecretsProvider`\n * (in `workspaces/secrets`). Future implementations include Vault, AWS SM,\n * GCP SM, Azure Key Vault, Infisical, Doppler, and Bitwarden Secrets.\n *\n * Registration is explicit and programmatic: `pluginRegistry.register(impl)`.\n * Third-party providers are loaded via dynamic import driven by config.\n *\n * @docLink packages/workspace-plugin/index#plugin-interfaces\n */\nexport interface ISecretsProvider {\n /** Unique provider identifier used for registration and diagnostics. */\n readonly id: string;\n /** Retrieve a secret by ref, returning the raw bytes. */\n getSecret(ref: string): Promise<Uint8Array>;\n /** Store or update a secret. Optional TTL and metadata can be attached. */\n setSecret(ref: string, value: Uint8Array, opts?: SetSecretOptions): Promise<void>;\n /** Permanently remove a secret. */\n deleteSecret(ref: string): Promise<void>;\n /** List secret refs accessible to the caller, with optional filtering. */\n listSecrets(filter?: ListFilter): Promise<string[]>;\n /** Verify the provider is reachable and measure round-trip latency. */\n testConnection(): Promise<{ ok: boolean; latencyMs?: number; error?: string }>;\n /** Return audit metadata for a secret without revealing its value. */\n getMetadata(ref: string): Promise<SecretMetadata>;\n /** Advertise which optional capabilities this provider supports. */\n getCapabilities(): ProviderCapabilities;\n}\n","export const VERSION = \"0.0.0\";\n\n// Pluggable interface contracts — Asset Kind Provider\nexport type {\n AssetInstallTarget,\n AssetKindFileFilter,\n AssetKindRequiresEdge,\n IAssetKindProvider,\n} from \"./asset-kind-provider.js\";\nexport type { IAssetKindRegistry } from \"./asset-kind-registry.js\";\n// Pluggable interface contracts — Asset Kind Registry\nexport {\n AssetKindConflictError,\n AssetKindPathAmbiguityError,\n AssetKindPatternConflictError,\n AssetKindRegistryFrozenError,\n} from \"./asset-kind-registry.js\";\n// Pluggable interface contracts — Catalog Source\nexport type {\n CatalogAsset,\n CatalogAssetFilter,\n CatalogSourceInfo,\n ICatalogSource,\n} from \"./catalog-source.js\";\n\nexport type {\n ISecretsProvider,\n ListFilter,\n ProviderCapabilities,\n SecretMetadata,\n SetSecretOptions,\n} from \"./secrets-provider.js\";\n// Pluggable interface contracts — Secrets\nexport {\n ProviderUnavailableError,\n SecretAccessDeniedError,\n SecretExpiredError,\n SecretNotFoundError,\n SecretsError,\n} from \"./secrets-provider.js\";\n"]}
@@ -1,4 +1,4 @@
1
- import { findAiAssetsRoot } from './chunk-JKWU6ULI.js';
1
+ import { findAiAssetsRoot } from './chunk-SDFROXSA.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-JELTQ4H7.js.map
10
- //# sourceMappingURL=chunk-JELTQ4H7.js.map
9
+ //# sourceMappingURL=chunk-45VFGT7A.js.map
10
+ //# sourceMappingURL=chunk-45VFGT7A.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-JELTQ4H7.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-45VFGT7A.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,5 +1,5 @@
1
1
  import { globalSkaileDir } from './chunk-MFHKHXDE.js';
2
- import { DRIVER_TARGETS } from './chunk-TOSHZX4C.js';
2
+ import { DRIVER_TARGETS } from './chunk-CPSIPIX7.js';
3
3
  import { lstatSync } from 'fs';
4
4
  import { homedir } from 'os';
5
5
  import { join, resolve } from 'path';
@@ -31,5 +31,5 @@ function isDeployed(kind, name, target, globalInstall, cwd) {
31
31
  }
32
32
 
33
33
  export { deployedBase, deployedDir, isDeployed };
34
- //# sourceMappingURL=chunk-XGIS325V.js.map
35
- //# sourceMappingURL=chunk-XGIS325V.js.map
34
+ //# sourceMappingURL=chunk-46OVMT76.js.map
35
+ //# sourceMappingURL=chunk-46OVMT76.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/src/store.ts"],"names":[],"mappings":";;;;;;AA6BO,SAAS,YAAA,CACd,IAAA,EACA,MAAA,EACA,aAAA,EACA,GAAA,EACQ;AACR,EAAA,MAAM,SAAA,GAAY,eAAe,MAAM,CAAA;AACvC,EAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,CAAG,CAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,gBAAgB,QAAA,GAAW,OAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAI,CAAA,IAAK,MAAM,KAAA,IAAS,EAAA;AAC9C,EAAA,IAAI,aAAA,EAAe;AAGjB,IAAA,IAAI,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/D,MAAA,OAAO,KAAK,eAAA,EAAgB,EAAG,QAAQ,KAAA,CAAM,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,IAAO,OAAO,CAAA;AAC9C;AAaO,SAAS,WAAA,CACd,IAAA,EACA,IAAA,EACA,MAAA,EACA,eACA,GAAA,EACQ;AACR,EAAA,OAAO,KAAK,YAAA,CAAa,IAAA,EAAM,QAAQ,aAAA,EAAe,GAAG,GAAG,IAAI,CAAA;AAClE;AAcO,SAAS,UAAA,CACd,IAAA,EACA,IAAA,EACA,MAAA,EACA,eACA,GAAA,EACS;AACT,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,YAAY,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,aAAA,EAAe,GAAG,CAAC,CAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-XGIS325V.js","sourcesContent":["/**\n * Deploy-target helpers — resolve framework-specific install paths.\n *\n * This module contains only deploy path resolution. All catalog, repository,\n * and history I/O has moved to @skaile/asset-manager (project-local).\n */\n\nimport { lstatSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { globalSkaileDir } from \"./cache-paths.js\";\nimport type { DriverTarget } from \"./driver-targets.js\";\nimport { type AiComponent, DRIVER_TARGETS } from \"./driver-targets.js\";\n\n// ── Deploy-target helpers ─────────────────────────────────────────────────────\n\n/**\n * Resolve the base deploy directory for an asset kind in a given driver target + scope.\n * For local scope, the path is relative to `cwd` (defaults to `process.cwd()`).\n * For global scope, `~` is expanded to the home directory.\n *\n * @param kind - Asset component type (e.g. `\"skill\"`, `\"agent\"`)\n * @param target - Driver target identifier (e.g. `\"claude-code\"`, `\"omp\"`)\n * @param globalInstall - `true` for user-global install, `false` for project-local\n * @param cwd - Working directory for project-local installs (default: `process.cwd()`)\n * @returns Absolute path to the base deploy directory\n * @throws When `target` is not found in `DRIVER_TARGETS`\n * @docLink packages/core/concepts#deployed-base\n */\nexport function deployedBase(\n kind: AiComponent,\n target: DriverTarget,\n globalInstall: boolean,\n cwd?: string,\n): string {\n const targetMap = DRIVER_TARGETS[target];\n if (!targetMap) throw new Error(`Unknown deploy target: '${target}'`);\n const scope = globalInstall ? \"global\" : \"local\";\n const paths = targetMap[scope];\n const destStr = paths[kind] ?? paths.skill ?? \"\";\n if (globalInstall) {\n // `~/.skaile/...` is skaile's own per-user root, so it follows `$SKAILE_HOME`;\n // every other `~/...` is a driver's home dir (`~/.claude`, `~/.omp`, ...).\n if (destStr === \"~/.skaile\" || destStr.startsWith(\"~/.skaile/\")) {\n return join(globalSkaileDir(), destStr.slice(\"~/.skaile\".length));\n }\n return destStr.replace(/^~/, homedir());\n }\n return resolve(cwd ?? process.cwd(), destStr);\n}\n\n/**\n * Return the full deploy path for a named asset: `<deployedBase>/<name>`.\n *\n * @param kind - Asset component type\n * @param name - Asset name (becomes the directory/file name under the base)\n * @param target - Driver target identifier\n * @param globalInstall - `true` for user-global, `false` for project-local\n * @param cwd - Working directory for local installs\n * @returns Absolute path to the asset's deploy directory\n * @docLink packages/core/concepts#deployed-dir\n */\nexport function deployedDir(\n kind: AiComponent,\n name: string,\n target: DriverTarget,\n globalInstall: boolean,\n cwd?: string,\n): string {\n return join(deployedBase(kind, target, globalInstall, cwd), name);\n}\n\n/**\n * Check whether an asset is already deployed at its expected location.\n * Uses `lstatSync` so symlinks are treated as deployed.\n *\n * @param kind - Asset component type\n * @param name - Asset name\n * @param target - Driver target identifier\n * @param globalInstall - `true` for user-global, `false` for project-local\n * @param cwd - Working directory for local installs\n * @returns `true` if the deploy path exists, `false` otherwise\n * @docLink packages/core/concepts#is-deployed\n */\nexport function isDeployed(\n kind: AiComponent,\n name: string,\n target: DriverTarget,\n globalInstall: boolean,\n cwd?: string,\n): boolean {\n try {\n lstatSync(deployedDir(kind, name, target, globalInstall, cwd));\n return true;\n } catch {\n return false;\n }\n}\n"]}
1
+ {"version":3,"sources":["../core/src/store.ts"],"names":[],"mappings":";;;;;;AA6BO,SAAS,YAAA,CACd,IAAA,EACA,MAAA,EACA,aAAA,EACA,GAAA,EACQ;AACR,EAAA,MAAM,SAAA,GAAY,eAAe,MAAM,CAAA;AACvC,EAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,CAAG,CAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,gBAAgB,QAAA,GAAW,OAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAI,CAAA,IAAK,MAAM,KAAA,IAAS,EAAA;AAC9C,EAAA,IAAI,aAAA,EAAe;AAGjB,IAAA,IAAI,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/D,MAAA,OAAO,KAAK,eAAA,EAAgB,EAAG,QAAQ,KAAA,CAAM,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,IAAO,OAAO,CAAA;AAC9C;AAaO,SAAS,WAAA,CACd,IAAA,EACA,IAAA,EACA,MAAA,EACA,eACA,GAAA,EACQ;AACR,EAAA,OAAO,KAAK,YAAA,CAAa,IAAA,EAAM,QAAQ,aAAA,EAAe,GAAG,GAAG,IAAI,CAAA;AAClE;AAcO,SAAS,UAAA,CACd,IAAA,EACA,IAAA,EACA,MAAA,EACA,eACA,GAAA,EACS;AACT,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,YAAY,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,aAAA,EAAe,GAAG,CAAC,CAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-46OVMT76.js","sourcesContent":["/**\n * Deploy-target helpers — resolve framework-specific install paths.\n *\n * This module contains only deploy path resolution. All catalog, repository,\n * and history I/O has moved to @skaile/asset-manager (project-local).\n */\n\nimport { lstatSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { globalSkaileDir } from \"./cache-paths.js\";\nimport type { DriverTarget } from \"./driver-targets.js\";\nimport { type AiComponent, DRIVER_TARGETS } from \"./driver-targets.js\";\n\n// ── Deploy-target helpers ─────────────────────────────────────────────────────\n\n/**\n * Resolve the base deploy directory for an asset kind in a given driver target + scope.\n * For local scope, the path is relative to `cwd` (defaults to `process.cwd()`).\n * For global scope, `~` is expanded to the home directory.\n *\n * @param kind - Asset component type (e.g. `\"skill\"`, `\"agent\"`)\n * @param target - Driver target identifier (e.g. `\"claude-code\"`, `\"omp\"`)\n * @param globalInstall - `true` for user-global install, `false` for project-local\n * @param cwd - Working directory for project-local installs (default: `process.cwd()`)\n * @returns Absolute path to the base deploy directory\n * @throws When `target` is not found in `DRIVER_TARGETS`\n * @docLink packages/core/concepts#deployed-base\n */\nexport function deployedBase(\n kind: AiComponent,\n target: DriverTarget,\n globalInstall: boolean,\n cwd?: string,\n): string {\n const targetMap = DRIVER_TARGETS[target];\n if (!targetMap) throw new Error(`Unknown deploy target: '${target}'`);\n const scope = globalInstall ? \"global\" : \"local\";\n const paths = targetMap[scope];\n const destStr = paths[kind] ?? paths.skill ?? \"\";\n if (globalInstall) {\n // `~/.skaile/...` is skaile's own per-user root, so it follows `$SKAILE_HOME`;\n // every other `~/...` is a driver's home dir (`~/.claude`, `~/.omp`, ...).\n if (destStr === \"~/.skaile\" || destStr.startsWith(\"~/.skaile/\")) {\n return join(globalSkaileDir(), destStr.slice(\"~/.skaile\".length));\n }\n return destStr.replace(/^~/, homedir());\n }\n return resolve(cwd ?? process.cwd(), destStr);\n}\n\n/**\n * Return the full deploy path for a named asset: `<deployedBase>/<name>`.\n *\n * @param kind - Asset component type\n * @param name - Asset name (becomes the directory/file name under the base)\n * @param target - Driver target identifier\n * @param globalInstall - `true` for user-global, `false` for project-local\n * @param cwd - Working directory for local installs\n * @returns Absolute path to the asset's deploy directory\n * @docLink packages/core/concepts#deployed-dir\n */\nexport function deployedDir(\n kind: AiComponent,\n name: string,\n target: DriverTarget,\n globalInstall: boolean,\n cwd?: string,\n): string {\n return join(deployedBase(kind, target, globalInstall, cwd), name);\n}\n\n/**\n * Check whether an asset is already deployed at its expected location.\n * Uses `lstatSync` so symlinks are treated as deployed.\n *\n * @param kind - Asset component type\n * @param name - Asset name\n * @param target - Driver target identifier\n * @param globalInstall - `true` for user-global, `false` for project-local\n * @param cwd - Working directory for local installs\n * @returns `true` if the deploy path exists, `false` otherwise\n * @docLink packages/core/concepts#is-deployed\n */\nexport function isDeployed(\n kind: AiComponent,\n name: string,\n target: DriverTarget,\n globalInstall: boolean,\n cwd?: string,\n): boolean {\n try {\n lstatSync(deployedDir(kind, name, target, globalInstall, cwd));\n return true;\n } catch {\n return false;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { MENTION_GROUPS, deliveryClassOf } from './chunk-K2K7OF4P.js';
1
+ import { MENTION_GROUPS, deliveryClassOf } from './chunk-DMLDYFDS.js';
2
2
  import { createHash } from 'crypto';
3
3
 
4
4
  // session/src/bounded-subscriber-transport.ts
@@ -901,5 +901,5 @@ function isAgentAddressed(mentions) {
901
901
  }
902
902
 
903
903
  export { BoundedSubscriberTransport, DEFAULT_SUBSCRIBER_BUFFER_LIMITS, SessionDispatcher, SubscriberBufferOverflowError, UNSIZED_EVENT, approxEventSize, isAddressedByKind, isAgentAddressed, isMentioned, parseMentions };
904
- //# sourceMappingURL=chunk-37GBJLF5.js.map
905
- //# sourceMappingURL=chunk-37GBJLF5.js.map
904
+ //# sourceMappingURL=chunk-47ZD34KB.js.map
905
+ //# sourceMappingURL=chunk-47ZD34KB.js.map