@skaile/workspaces 4.39.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/asset-feeds-TU5CS6QL.js +131 -0
  3. package/dist/asset-feeds-TU5CS6QL.js.map +1 -0
  4. package/dist/asset-manager/catalog-deployer.js +12 -11
  5. package/dist/asset-manager/index.js +17 -16
  6. package/dist/asset-manager/installer.js +12 -11
  7. package/dist/asset-manager/src/catalog-deployer.d.ts +1 -3
  8. package/dist/asset-manager/src/catalog-deployer.d.ts.map +1 -1
  9. package/dist/asset-manager/src/index.d.ts +8 -9
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/bridge/drivers/claude-sdk.js +25 -13
  12. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  13. package/dist/bridge/drivers/codex.js +13 -12
  14. package/dist/bridge/drivers/codex.js.map +1 -1
  15. package/dist/bridge/drivers/continue.js +14 -13
  16. package/dist/bridge/drivers/continue.js.map +1 -1
  17. package/dist/bridge/drivers/echo.js +2 -2
  18. package/dist/bridge/drivers/gemini.js +6 -6
  19. package/dist/bridge/drivers/goose.js +14 -13
  20. package/dist/bridge/drivers/goose.js.map +1 -1
  21. package/dist/bridge/drivers/omp.js +3 -3
  22. package/dist/bridge/drivers/opencode.js +14 -13
  23. package/dist/bridge/drivers/opencode.js.map +1 -1
  24. package/dist/bridge/drivers/qwen.js +6 -6
  25. package/dist/bridge/index.js +15 -14
  26. package/dist/bridge/src/drivers/claude-sdk.d.ts +4 -0
  27. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  28. package/dist/bridge/src/types.d.ts +7 -0
  29. package/dist/bridge/src/types.d.ts.map +1 -1
  30. package/dist/{chunk-NLKIW2VI.js → chunk-2Y6DSR36.js} +5 -4
  31. package/dist/chunk-2Y6DSR36.js.map +1 -0
  32. package/dist/{chunk-H7N6RWNF.js → chunk-3KSAFYD4.js} +9 -5
  33. package/dist/chunk-3KSAFYD4.js.map +1 -0
  34. package/dist/{chunk-SM6EUQMY.js → chunk-3NGPZC44.js} +11 -11
  35. package/dist/chunk-3NGPZC44.js.map +1 -0
  36. package/dist/{chunk-A5EDMBFG.js → chunk-43ZBF3WH.js} +5 -8
  37. package/dist/chunk-43ZBF3WH.js.map +1 -0
  38. package/dist/{chunk-P7BU6DAC.js → chunk-55RMUF4G.js} +76 -33
  39. package/dist/chunk-55RMUF4G.js.map +1 -0
  40. package/dist/{chunk-TQ6XNACF.js → chunk-6LDUA57J.js} +25 -26
  41. package/dist/chunk-6LDUA57J.js.map +1 -0
  42. package/dist/chunk-A2ULN3KX.js +40 -0
  43. package/dist/chunk-A2ULN3KX.js.map +1 -0
  44. package/dist/{chunk-DSB6X25D.js → chunk-AG44ZJ7W.js} +3 -3
  45. package/dist/{chunk-DSB6X25D.js.map → chunk-AG44ZJ7W.js.map} +1 -1
  46. package/dist/{chunk-YCMZHL4T.js → chunk-AGWYBS2E.js} +6 -6
  47. package/dist/{chunk-YCMZHL4T.js.map → chunk-AGWYBS2E.js.map} +1 -1
  48. package/dist/{chunk-35G4M33T.js → chunk-AOMWF2OE.js} +4 -4
  49. package/dist/chunk-AOMWF2OE.js.map +1 -0
  50. package/dist/{chunk-X4DKUGV4.js → chunk-AYNPGPT5.js} +9 -15
  51. package/dist/chunk-AYNPGPT5.js.map +1 -0
  52. package/dist/{chunk-SSCPTAFJ.js → chunk-CI6FQ654.js} +3 -3
  53. package/dist/{chunk-SSCPTAFJ.js.map → chunk-CI6FQ654.js.map} +1 -1
  54. package/dist/{chunk-6X4DHKHP.js → chunk-CT6NQSA4.js} +3 -3
  55. package/dist/{chunk-6X4DHKHP.js.map → chunk-CT6NQSA4.js.map} +1 -1
  56. package/dist/{chunk-5K2VT6E2.js → chunk-DXUQCMVT.js} +3 -3
  57. package/dist/{chunk-5K2VT6E2.js.map → chunk-DXUQCMVT.js.map} +1 -1
  58. package/dist/{chunk-3C3ODIDE.js → chunk-E3ZACBHD.js} +13 -16
  59. package/dist/chunk-E3ZACBHD.js.map +1 -0
  60. package/dist/{chunk-C75VKXAM.js → chunk-E67J56FJ.js} +3 -3
  61. package/dist/{chunk-C75VKXAM.js.map → chunk-E67J56FJ.js.map} +1 -1
  62. package/dist/{chunk-B4IAZTZZ.js → chunk-EB6OPURC.js} +3 -3
  63. package/dist/{chunk-B4IAZTZZ.js.map → chunk-EB6OPURC.js.map} +1 -1
  64. package/dist/{chunk-VXPFSZDT.js → chunk-EPHQWHOH.js} +6 -6
  65. package/dist/{chunk-VXPFSZDT.js.map → chunk-EPHQWHOH.js.map} +1 -1
  66. package/dist/chunk-F7JHP7JV.js +122 -0
  67. package/dist/chunk-F7JHP7JV.js.map +1 -0
  68. package/dist/{chunk-FTPKMJFD.js → chunk-G47EV3V6.js} +2 -2
  69. package/dist/{chunk-FTPKMJFD.js.map → chunk-G47EV3V6.js.map} +1 -1
  70. package/dist/{chunk-252TK4RU.js → chunk-G4T7MYTA.js} +12 -14
  71. package/dist/chunk-G4T7MYTA.js.map +1 -0
  72. package/dist/{chunk-2EL2PBRC.js → chunk-H4EGUQ7M.js} +3 -3
  73. package/dist/{chunk-2EL2PBRC.js.map → chunk-H4EGUQ7M.js.map} +1 -1
  74. package/dist/{chunk-YV3YI3TA.js → chunk-IWCCZL7C.js} +17 -11
  75. package/dist/chunk-IWCCZL7C.js.map +1 -0
  76. package/dist/{chunk-QVLQGXT6.js → chunk-IYIIT4R3.js} +5 -5
  77. package/dist/{chunk-QVLQGXT6.js.map → chunk-IYIIT4R3.js.map} +1 -1
  78. package/dist/{chunk-YYH5EVPM.js → chunk-JUXQUZOQ.js} +12 -4
  79. package/dist/{chunk-YYH5EVPM.js.map → chunk-JUXQUZOQ.js.map} +1 -1
  80. package/dist/{chunk-BCUVRJXV.js → chunk-KAYH6AXN.js} +3 -3
  81. package/dist/{chunk-BCUVRJXV.js.map → chunk-KAYH6AXN.js.map} +1 -1
  82. package/dist/{chunk-JEPSP6XK.js → chunk-MXXKTQXJ.js} +18 -12
  83. package/dist/chunk-MXXKTQXJ.js.map +1 -0
  84. package/dist/{chunk-UDFWBALP.js → chunk-NFGRW3L7.js} +3 -3
  85. package/dist/{chunk-UDFWBALP.js.map → chunk-NFGRW3L7.js.map} +1 -1
  86. package/dist/{chunk-WCWFS36P.js → chunk-P5UQ56RA.js} +3 -3
  87. package/dist/{chunk-WCWFS36P.js.map → chunk-P5UQ56RA.js.map} +1 -1
  88. package/dist/{chunk-ORH2BZEM.js → chunk-QCI6D7E4.js} +69 -22
  89. package/dist/chunk-QCI6D7E4.js.map +1 -0
  90. package/dist/{chunk-5RWL4L3X.js → chunk-QFZFZXQW.js} +171 -28
  91. package/dist/chunk-QFZFZXQW.js.map +1 -0
  92. package/dist/{chunk-DIQDYNXZ.js → chunk-QZLWJETK.js} +3 -3
  93. package/dist/{chunk-DIQDYNXZ.js.map → chunk-QZLWJETK.js.map} +1 -1
  94. package/dist/{chunk-TSVRKUGV.js → chunk-RDTHJSGY.js} +11 -2
  95. package/dist/chunk-RDTHJSGY.js.map +1 -0
  96. package/dist/{chunk-QBQITQAM.js → chunk-RNNUYFFD.js} +3 -3
  97. package/dist/{chunk-QBQITQAM.js.map → chunk-RNNUYFFD.js.map} +1 -1
  98. package/dist/chunk-RVRB27AN.js +64 -0
  99. package/dist/chunk-RVRB27AN.js.map +1 -0
  100. package/dist/{chunk-XU7JET5Z.js → chunk-SP47UJKE.js} +37 -109
  101. package/dist/chunk-SP47UJKE.js.map +1 -0
  102. package/dist/{chunk-EB4ZTESQ.js → chunk-TOSHZX4C.js} +8 -3
  103. package/dist/chunk-TOSHZX4C.js.map +1 -0
  104. package/dist/{chunk-5NYBY6ZE.js → chunk-TVOODIZE.js} +3 -3
  105. package/dist/{chunk-5NYBY6ZE.js.map → chunk-TVOODIZE.js.map} +1 -1
  106. package/dist/{chunk-EOKAFBJ7.js → chunk-TYUJB336.js} +3 -3
  107. package/dist/{chunk-EOKAFBJ7.js.map → chunk-TYUJB336.js.map} +1 -1
  108. package/dist/{chunk-KAJH3XPW.js → chunk-U6K3I3AX.js} +3 -3
  109. package/dist/{chunk-KAJH3XPW.js.map → chunk-U6K3I3AX.js.map} +1 -1
  110. package/dist/{chunk-7RC37XFW.js → chunk-UMSWQKCY.js} +59 -12
  111. package/dist/chunk-UMSWQKCY.js.map +1 -0
  112. package/dist/{chunk-OLMNDIAU.js → chunk-UVOJSWD2.js} +95 -320
  113. package/dist/chunk-UVOJSWD2.js.map +1 -0
  114. package/dist/{chunk-DOVURNRK.js → chunk-VDJKWKH2.js} +3 -3
  115. package/dist/chunk-VDJKWKH2.js.map +1 -0
  116. package/dist/{chunk-VDBP6Y5M.js → chunk-WCQMXBO5.js} +21 -47
  117. package/dist/chunk-WCQMXBO5.js.map +1 -0
  118. package/dist/{chunk-YQEF36D5.js → chunk-WKIOWDLQ.js} +4 -4
  119. package/dist/{chunk-YQEF36D5.js.map → chunk-WKIOWDLQ.js.map} +1 -1
  120. package/dist/{chunk-5LF27VUB.js → chunk-X6E7Y4JD.js} +17 -15
  121. package/dist/chunk-X6E7Y4JD.js.map +1 -0
  122. package/dist/chunk-XUQBVK4R.js +15 -0
  123. package/dist/chunk-XUQBVK4R.js.map +1 -0
  124. package/dist/{chunk-K3IBZ2UZ.js → chunk-XUUYAS3Z.js} +3 -3
  125. package/dist/{chunk-K3IBZ2UZ.js.map → chunk-XUUYAS3Z.js.map} +1 -1
  126. package/dist/{chunk-36ML6SFP.js → chunk-YDJZRLGN.js} +4 -4
  127. package/dist/{chunk-36ML6SFP.js.map → chunk-YDJZRLGN.js.map} +1 -1
  128. package/dist/{chunk-M7GPCWEV.js → chunk-YIVB7GIP.js} +3 -3
  129. package/dist/{chunk-M7GPCWEV.js.map → chunk-YIVB7GIP.js.map} +1 -1
  130. package/dist/{chunk-VJNTB4DN.js → chunk-YMOZC2D3.js} +4 -4
  131. package/dist/{chunk-VJNTB4DN.js.map → chunk-YMOZC2D3.js.map} +1 -1
  132. package/dist/{chunk-OQRB7JUS.js → chunk-YV4J7V53.js} +3 -3
  133. package/dist/{chunk-OQRB7JUS.js.map → chunk-YV4J7V53.js.map} +1 -1
  134. package/dist/{chunk-JXT46QFC.js → chunk-ZDKJHQY2.js} +2 -2
  135. package/dist/{chunk-JXT46QFC.js.map → chunk-ZDKJHQY2.js.map} +1 -1
  136. package/dist/cli/index.js +777 -1120
  137. package/dist/cli/index.js.map +1 -1
  138. package/dist/cli/src/asset-feeds.d.ts +1 -8
  139. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  140. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  141. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  142. package/dist/cli/src/commands/flow.d.ts +5 -5
  143. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  144. package/dist/cli/src/commands/library-index.d.ts +5 -12
  145. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  146. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  147. package/dist/cli/src/commands/manage.d.ts +74 -58
  148. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  149. package/dist/cli/src/commands/project.d.ts.map +1 -1
  150. package/dist/cli/src/commands/publish-core.d.ts +10 -0
  151. package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
  152. package/dist/cli/src/commands/run.d.ts.map +1 -1
  153. package/dist/cli/src/commands/show.d.ts +1 -1
  154. package/dist/cli/src/commands/skailify-lib.d.ts +17 -31
  155. package/dist/cli/src/commands/skailify-lib.d.ts.map +1 -1
  156. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  157. package/dist/cli/src/commands/validate.d.ts +20 -2
  158. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  159. package/dist/cli/src/flow-discovery.d.ts +46 -3
  160. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  161. package/dist/cli/src/helpers.d.ts +6 -0
  162. package/dist/cli/src/helpers.d.ts.map +1 -1
  163. package/dist/cli/src/hooks/pre-commit-version.d.ts +1 -1
  164. package/dist/cli/src/open-library.d.ts +11 -0
  165. package/dist/cli/src/open-library.d.ts.map +1 -1
  166. package/dist/cli/src/skill-walker.d.ts +7 -10
  167. package/dist/cli/src/skill-walker.d.ts.map +1 -1
  168. package/dist/connectors/config.js +7 -6
  169. package/dist/connectors/index.js +23 -22
  170. package/dist/connectors/src/connector-manager.d.ts +53 -3
  171. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  172. package/dist/connectors/src/connector-prompt.d.ts +16 -2
  173. package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
  174. package/dist/connectors/src/fleet-utils.d.ts +3 -4
  175. package/dist/connectors/src/fleet-utils.d.ts.map +1 -1
  176. package/dist/connectors/src/index.d.ts +3 -3
  177. package/dist/connectors/src/index.d.ts.map +1 -1
  178. package/dist/connectors-VX7YRFFS.js +45 -0
  179. package/dist/{connectors-T57XL7EA.js.map → connectors-VX7YRFFS.js.map} +1 -1
  180. package/dist/core/discovery.js +1 -1
  181. package/dist/core/driver-targets.js +1 -1
  182. package/dist/core/index.js +11 -10
  183. package/dist/core/manifest.js +2 -2
  184. package/dist/core/models.js +1 -1
  185. package/dist/core/plugin-groupings.d.ts +2 -0
  186. package/dist/core/plugin-groupings.js +4 -0
  187. package/dist/core/plugin-groupings.js.map +1 -0
  188. package/dist/core/publish-manifest.js +2 -2
  189. package/dist/core/ref.js +1 -1
  190. package/dist/core/runtime-assets.js +7 -6
  191. package/dist/core/src/discovery.d.ts +11 -51
  192. package/dist/core/src/discovery.d.ts.map +1 -1
  193. package/dist/core/src/driver-targets.d.ts +10 -0
  194. package/dist/core/src/driver-targets.d.ts.map +1 -1
  195. package/dist/core/src/index.d.ts +5 -4
  196. package/dist/core/src/index.d.ts.map +1 -1
  197. package/dist/core/src/models.d.ts +6 -33
  198. package/dist/core/src/models.d.ts.map +1 -1
  199. package/dist/core/src/plugin-groupings.d.ts +31 -0
  200. package/dist/core/src/plugin-groupings.d.ts.map +1 -0
  201. package/dist/core/src/repo-manager.d.ts.map +1 -1
  202. package/dist/core/src/settings.d.ts +14 -1
  203. package/dist/core/src/settings.d.ts.map +1 -1
  204. package/dist/core/src/workspace-config.d.ts +1 -1
  205. package/dist/core/store.js +2 -2
  206. package/dist/core/workspace-config.js +6 -5
  207. package/dist/deploy/index.js +11 -10
  208. package/dist/deploy/index.js.map +1 -1
  209. package/dist/discovery/index.js +6 -5
  210. package/dist/discovery/src/discover.d.ts +9 -25
  211. package/dist/discovery/src/discover.d.ts.map +1 -1
  212. package/dist/discovery/src/index.d.ts +0 -2
  213. package/dist/discovery/src/index.d.ts.map +1 -1
  214. package/dist/discovery/src/source-config.d.ts +13 -9
  215. package/dist/discovery/src/source-config.d.ts.map +1 -1
  216. package/dist/discovery/src/tree-entries.d.ts +6 -11
  217. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  218. package/dist/{ensure-sources-J5CDTQ36.js → ensure-sources-2XQS32WI.js} +20 -19
  219. package/dist/ensure-sources-2XQS32WI.js.map +1 -0
  220. package/dist/factory-assets/README.md +1 -1
  221. package/dist/factory-assets/connectors/box.js +23 -22
  222. package/dist/factory-assets/connectors/deploy.js +23 -22
  223. package/dist/factory-assets/connectors/devserver.js +23 -22
  224. package/dist/factory-assets/connectors/flow/CONNECTOR.md +6 -1
  225. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  226. package/dist/factory-assets/connectors/flow/adapter.js +23 -22
  227. package/dist/factory-assets/connectors/flow/contract/flow.v2.schema.json +13 -3
  228. package/dist/factory-assets/connectors/flow/contract/index.d.ts +1 -0
  229. package/dist/factory-assets/connectors/flow/contract/index.d.ts.map +1 -1
  230. package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts +21 -5
  231. package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts.map +1 -1
  232. package/dist/factory-assets/connectors/flow/contract/schema.d.ts +2 -0
  233. package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
  234. package/dist/factory-assets/connectors/flow/contract/sub-flow-output.d.ts +20 -0
  235. package/dist/factory-assets/connectors/flow/contract/sub-flow-output.d.ts.map +1 -0
  236. package/dist/factory-assets/connectors/flow/contract.js +4 -4
  237. package/dist/factory-assets/connectors/flow/engine/bindings.d.ts.map +1 -1
  238. package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts +12 -0
  239. package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts.map +1 -0
  240. package/dist/factory-assets/connectors/flow/engine/index.d.ts +1 -0
  241. package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
  242. package/dist/factory-assets/connectors/flow/engine/loader.d.ts +3 -3
  243. package/dist/factory-assets/connectors/flow/engine/locate.d.ts +2 -2
  244. package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
  245. package/dist/factory-assets/connectors/flow/engine/types.d.ts +0 -2
  246. package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
  247. package/dist/factory-assets/connectors/flow/engine.js +15 -14
  248. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
  249. package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -3
  250. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  251. package/dist/factory-assets/connectors/flow/run-flow.js +25 -24
  252. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +6 -5
  253. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
  254. package/dist/factory-assets/connectors/flow.js +23 -22
  255. package/dist/factory-assets/connectors/git.js +23 -22
  256. package/dist/factory-assets/connectors/gmail.js +23 -22
  257. package/dist/factory-assets/connectors/googledrive.js +23 -22
  258. package/dist/factory-assets/connectors/local.js +23 -22
  259. package/dist/factory-assets/connectors/mattermost.js +23 -22
  260. package/dist/factory-assets/connectors/memory.js +23 -22
  261. package/dist/factory-assets/connectors/minio.js +23 -22
  262. package/dist/factory-assets/connectors/postgres.js +23 -22
  263. package/dist/factory-assets/connectors/s3.js +23 -22
  264. package/dist/factory-assets/connectors/sharepoint.js +23 -22
  265. package/dist/factory-assets/connectors/sqlite.js +23 -22
  266. package/dist/factory-assets/connectors/static-server.js +23 -22
  267. package/dist/factory-assets/connectors/tunnel.js +23 -22
  268. package/dist/factory-assets/connectors/webdav.js +23 -22
  269. package/dist/factory-assets/connectors/xstate-store.js +23 -22
  270. package/dist/factory-assets/connectors/xstate.js +23 -22
  271. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +37 -26
  272. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +2 -2
  273. package/dist/factory-assets/skills/skailify/SKILL.md +10 -19
  274. package/dist/flows-SVCCADGE.js +26 -0
  275. package/dist/{flows-PX53XFV7.js.map → flows-SVCCADGE.js.map} +1 -1
  276. package/dist/helpers-IELQGVGB.js +34 -0
  277. package/dist/{helpers-EP6H3O3S.js.map → helpers-IELQGVGB.js.map} +1 -1
  278. package/dist/library/index.js +15 -14
  279. package/dist/library/install.js +2 -2
  280. package/dist/library/src/index.d.ts +1 -1
  281. package/dist/library/src/index.d.ts.map +1 -1
  282. package/dist/library/src/local/db.d.ts.map +1 -1
  283. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  284. package/dist/library/src/local/library.d.ts.map +1 -1
  285. package/dist/library/src/local/local-catalog-source.d.ts +14 -10
  286. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  287. package/dist/library/src/local/schema.d.ts +1 -20
  288. package/dist/library/src/local/schema.d.ts.map +1 -1
  289. package/dist/library/src/remote/remote-catalog-source.d.ts +1 -11
  290. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  291. package/dist/library/src/sync/manifest-writeback.d.ts +5 -5
  292. package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -1
  293. package/dist/library/src/user-library.d.ts +1 -9
  294. package/dist/library/src/user-library.d.ts.map +1 -1
  295. package/dist/{library-publish-KKT73FJK.js → library-publish-TCFU3X5L.js} +39 -26
  296. package/dist/library-publish-TCFU3X5L.js.map +1 -0
  297. package/dist/open-library-SSBN4FX2.js +40 -0
  298. package/dist/{open-library-R62UBL6E.js.map → open-library-SSBN4FX2.js.map} +1 -1
  299. package/dist/open-registry-CHCWKV5W.js +32 -0
  300. package/dist/open-registry-CHCWKV5W.js.map +1 -0
  301. package/dist/paths-MKSI52PF.js +22 -0
  302. package/dist/{paths-W4LDORQQ.js.map → paths-MKSI52PF.js.map} +1 -1
  303. package/dist/{plugin-store-D45CREMJ.js → plugin-store-SVYV7L4C.js} +13 -12
  304. package/dist/plugin-store-SVYV7L4C.js.map +1 -0
  305. package/dist/plugins/index.js +1 -1
  306. package/dist/plugins/src/catalog-source.d.ts +4 -55
  307. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  308. package/dist/plugins/src/index.d.ts +1 -1
  309. package/dist/plugins/src/index.d.ts.map +1 -1
  310. package/dist/project-PJ37PM6N.js +35 -0
  311. package/dist/{project-GCW5DFAB.js.map → project-PJ37PM6N.js.map} +1 -1
  312. package/dist/resolver/index.js +12 -11
  313. package/dist/runner/index.js +35 -34
  314. package/dist/runner/src/compaction/orchestrator.d.ts +2 -1
  315. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  316. package/dist/runner/src/compaction-gate.d.ts +13 -0
  317. package/dist/runner/src/compaction-gate.d.ts.map +1 -1
  318. package/dist/runner/src/fleet-health-flag-dispatcher.d.ts +14 -11
  319. package/dist/runner/src/fleet-health-flag-dispatcher.d.ts.map +1 -1
  320. package/dist/runner/src/serve.d.ts.map +1 -1
  321. package/dist/sdk/asset-manager.js +17 -16
  322. package/dist/sdk/bridge.js +15 -14
  323. package/dist/sdk/core.js +11 -10
  324. package/dist/sdk/flow.js +15 -14
  325. package/dist/sdk/index.js +35 -34
  326. package/dist/sdk/index.js.map +1 -1
  327. package/dist/sdk/resolver.js +12 -11
  328. package/dist/sdk/runner.js +35 -34
  329. package/dist/secrets/index.js +2 -2
  330. package/dist/{setup-Q3LXY5AE.js → setup-JW2ZGCUG.js} +25 -24
  331. package/dist/setup-JW2ZGCUG.js.map +1 -0
  332. package/dist/skills-7K2YO3KN.js +26 -0
  333. package/dist/{skills-R3RPIPWP.js.map → skills-7K2YO3KN.js.map} +1 -1
  334. package/dist/source-F2VO32W6.js +41 -0
  335. package/dist/{source-CFQESKJU.js.map → source-F2VO32W6.js.map} +1 -1
  336. package/dist/{source-manifest-publish-3TCBA2RV.js → source-manifest-publish-AXNII2J4.js} +29 -27
  337. package/dist/source-manifest-publish-AXNII2J4.js.map +1 -0
  338. package/dist/tui/index.js +35 -34
  339. package/dist/tui/index.js.map +1 -1
  340. package/dist/workspace-plugin/adapters/mcp.js +40 -18
  341. package/dist/workspace-plugin/adapters/omp.js +21 -21
  342. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  343. package/dist/workspace-plugin/index.js +1 -1
  344. package/dist/workspace-plugin/src/adapters/mcp.d.ts +4 -4
  345. package/dist/workspace-plugin/src/adapters/mcp.d.ts.map +1 -1
  346. package/dist/workspace-plugin/src/adapters/omp.d.ts +2 -2
  347. package/dist/workspace-plugin/src/tools/connectors.d.ts +1 -1
  348. package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -1
  349. package/dist/workspace-plugin/src/tools/skills.d.ts +5 -17
  350. package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -1
  351. package/package.json +7 -1
  352. package/dist/asset-feeds-KXL45ALC.js +0 -210
  353. package/dist/asset-feeds-KXL45ALC.js.map +0 -1
  354. package/dist/chunk-252TK4RU.js.map +0 -1
  355. package/dist/chunk-35G4M33T.js.map +0 -1
  356. package/dist/chunk-3C3ODIDE.js.map +0 -1
  357. package/dist/chunk-5LF27VUB.js.map +0 -1
  358. package/dist/chunk-5RWL4L3X.js.map +0 -1
  359. package/dist/chunk-7RC37XFW.js.map +0 -1
  360. package/dist/chunk-A5EDMBFG.js.map +0 -1
  361. package/dist/chunk-DOVURNRK.js.map +0 -1
  362. package/dist/chunk-EB4ZTESQ.js.map +0 -1
  363. package/dist/chunk-H7N6RWNF.js.map +0 -1
  364. package/dist/chunk-JEPSP6XK.js.map +0 -1
  365. package/dist/chunk-NLKIW2VI.js.map +0 -1
  366. package/dist/chunk-OLMNDIAU.js.map +0 -1
  367. package/dist/chunk-ORH2BZEM.js.map +0 -1
  368. package/dist/chunk-P7BU6DAC.js.map +0 -1
  369. package/dist/chunk-QVZA2MDT.js +0 -81
  370. package/dist/chunk-QVZA2MDT.js.map +0 -1
  371. package/dist/chunk-SM6EUQMY.js.map +0 -1
  372. package/dist/chunk-TQ6XNACF.js.map +0 -1
  373. package/dist/chunk-TSVRKUGV.js.map +0 -1
  374. package/dist/chunk-VDBP6Y5M.js.map +0 -1
  375. package/dist/chunk-X4DKUGV4.js.map +0 -1
  376. package/dist/chunk-XU7JET5Z.js.map +0 -1
  377. package/dist/chunk-YV3YI3TA.js.map +0 -1
  378. package/dist/connectors-T57XL7EA.js +0 -5
  379. package/dist/discovery/src/domains.d.ts +0 -149
  380. package/dist/discovery/src/domains.d.ts.map +0 -1
  381. package/dist/ensure-sources-J5CDTQ36.js.map +0 -1
  382. package/dist/flows-PX53XFV7.js +0 -25
  383. package/dist/helpers-EP6H3O3S.js +0 -33
  384. package/dist/library-publish-KKT73FJK.js.map +0 -1
  385. package/dist/open-library-R62UBL6E.js +0 -38
  386. package/dist/paths-W4LDORQQ.js +0 -21
  387. package/dist/plugin-store-D45CREMJ.js.map +0 -1
  388. package/dist/project-GCW5DFAB.js +0 -34
  389. package/dist/setup-Q3LXY5AE.js.map +0 -1
  390. package/dist/skills-R3RPIPWP.js +0 -25
  391. package/dist/source-CFQESKJU.js +0 -39
  392. package/dist/source-manifest-publish-3TCBA2RV.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { tryWithFsDeadline, withFsDeadline, fsDeadlineMs } from './chunk-5K2VT6E2.js';
1
+ import { tryWithFsDeadline, withFsDeadline, fsDeadlineMs } from './chunk-DXUQCMVT.js';
2
2
  import { createLogger } from './chunk-BOFL7GIF.js';
3
3
  import { stat, mkdir, cp, writeFile, rm } from 'fs/promises';
4
4
  import { resolve, sep, join } from 'path';
@@ -155,5 +155,5 @@ function resolveFlowSkills(flow, allEntries) {
155
155
  }
156
156
 
157
157
  export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs };
158
- //# sourceMappingURL=chunk-DOVURNRK.js.map
159
- //# sourceMappingURL=chunk-DOVURNRK.js.map
158
+ //# sourceMappingURL=chunk-VDJKWKH2.js.map
159
+ //# sourceMappingURL=chunk-VDJKWKH2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../asset-manager/src/catalog-deployer.ts"],"names":[],"mappings":"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","file":"chunk-VDJKWKH2.js","sourcesContent":["/**\n * Platform-triggered asset deployment.\n *\n * Takes catalog entries (with source_path relative to ai-assets/) and deploys\n * them to a session's .claude/skills/ directory. Handles skill context injection\n * and catalog priority-based name resolution.\n */\n\nimport { cp, mkdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport { join, resolve, sep } from \"node:path\";\nimport { fsDeadlineMs, tryWithFsDeadline, withFsDeadline } from \"@skaile/workspaces/core\";\nimport { createLogger } from \"@skaile/workspaces/core/logging\";\n\n// ---------------------------------------------------------------------------\n// Types (formerly in catalog-compiler.ts, inlined after tear-out in Task 1.5)\n// ---------------------------------------------------------------------------\n\n/**\n * A single user-facing input parameter declared in a SKILL.md.\n *\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport interface InputSpec {\n /** Input parameter key used in skill invocation. */\n key: string;\n /** Whether the input must be provided before running the skill. */\n required?: boolean;\n /** Question string shown to the user when collecting this input. */\n prompt?: string;\n /** Short display label for UI forms. */\n label?: string;\n /** Input data type hint (e.g. `\"string\"`, `\"number\"`, `\"file\"`). */\n type?: string;\n /** Additional guidance text shown alongside the input field. */\n hint?: string;\n}\n\n/**\n * A compiled catalog entry (skill or flow).\n *\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport interface CatalogEntryCompiled {\n /** Unique ID in `publisher/name` form (e.g. `skaileup/cf_overview`). */\n id: string;\n /** Asset kind. */\n kind: \"skill\" | \"flow\";\n /** Human-readable asset name. */\n name: string;\n /** One-line description. */\n description: string;\n /** Semantic version string. */\n version: string;\n /** Maturity stage. */\n stage: \"alpha\" | \"beta\" | \"stable\";\n /** Searchable keywords. */\n keywords: string[];\n /** User-facing input specifications. */\n inputs: InputSpec[];\n /** Asset path relative to assetsRoot. */\n source_path: string;\n /** Optional icon identifier. */\n icon?: string;\n /** Flow-only: required skill names. */\n required_skills?: string[];\n /** Flow-only: optional skill names. */\n optional_skills?: string[];\n}\n\n/**\n * Options controlling how platform-triggered skill deployment is performed.\n *\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport interface DeployFromCatalogOptions {\n /** Root directory of ai-assets (where `source_path` in catalog entries is relative to). */\n assetsRoot: string;\n /** Target directory for deployed skills (e.g. `/workspace/.claude/skills/`). */\n skillsDir: string;\n /** Optional context markdown appended to the deployed skill directory as `CONTEXT.md`. */\n context?: string;\n}\n\n/**\n * Result of a platform-triggered batch skill deployment.\n *\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport interface DeployResult {\n /** IDs of catalog entries successfully deployed. */\n deployed: string[];\n /** IDs of catalog entries skipped (non-skill kinds). */\n skipped: string[];\n /** Error messages for entries that could not be deployed. */\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Workspace-mount awareness\n// ---------------------------------------------------------------------------\n\n/**\n * Multiplier applied to the base filesystem deadline for whole-tree operations\n * (recursive copy / remove), which legitimately outlast a single `stat`.\n */\nconst TREE_OP_DEADLINE_FACTOR = 4;\n\n/** Default number of parent levels {@link findAiAssetsRoot} inspects. */\nconst AI_ASSETS_WALK_LEVELS = 6;\n\nlet deployerLogger: ReturnType<typeof createLogger> | undefined;\n\nfunction log(): ReturnType<typeof createLogger> {\n deployerLogger ??= createLogger({ kind: \"runner\", subkind: \"catalog-deployer\" });\n return deployerLogger;\n}\n\n/**\n * Where the agent container binds its rclone FUSE mount. Nothing under this\n * path is a safe place to read an asset tree from: the mount is remote\n * (SharePoint / OneDrive / WebDAV) and can wedge indefinitely.\n */\nconst DEFAULT_WORKSPACE_MOUNT_DIR = \"/skaile/workspace\";\n\n/**\n * Env override for the workspace-mount path(s), comma-separated.\n *\n * Set it when the runner binds the mount somewhere other than\n * {@link DEFAULT_WORKSPACE_MOUNT_DIR}; set it to the empty string to disable\n * the guard entirely (single-machine dev, where nothing is a network mount).\n */\nexport const WORKSPACE_MOUNT_ENV_VAR = \"SKAILE_WORKSPACE_MOUNT_DIR\";\n\n/**\n * Resolve the directories treated as network mounts.\n *\n * Read per call rather than cached: the runner mutates `process.env` while\n * wiring a session, so a module-load snapshot would pin a pre-configuration\n * value.\n *\n * @returns Absolute mount paths; empty when the guard is disabled.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport function workspaceMountDirs(): string[] {\n const raw = process.env[WORKSPACE_MOUNT_ENV_VAR];\n if (raw === undefined) return [DEFAULT_WORKSPACE_MOUNT_DIR];\n return raw\n .split(\",\")\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0)\n .map((segment) => resolve(segment));\n}\n\n/**\n * Is `candidate` at, or inside, one of the known workspace mount paths?\n *\n * Pure path arithmetic — deliberately no filesystem access, because the whole\n * point is to decide *before* touching a path that might be unresponsive.\n *\n * @param candidate - Path to test.\n * @param mountDirs - Mount roots; defaults to {@link workspaceMountDirs}.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport function isUnderWorkspaceMount(\n candidate: string,\n mountDirs: string[] = workspaceMountDirs(),\n): boolean {\n const target = resolve(candidate);\n return mountDirs.some((dir) => {\n const root = resolve(dir);\n return target === root || target.startsWith(root + sep);\n });\n}\n\n/**\n * Walk upward from `startDir` looking for an `ai-assets/` directory.\n *\n * Two properties matter beyond \"find the folder\":\n *\n * 1. **Never synchronous.** The walk probes up to six directories; any one of\n * them can be on a FUSE mount, and the former `existsSync` chain blocked the\n * event loop on the first unresponsive probe. Each probe is now awaited and\n * deadline-bounded, so a wedged mount costs one skipped candidate.\n * 2. **Never resolves onto a mount.** A hit under the workspace mount is\n * skipped with a warning rather than returned: accepting it would wire every\n * later skill deploy — a recursive copy — to a remote filesystem. The walk\n * continues upward, so a legitimate `ai-assets/` in a parent still wins.\n *\n * Only a **directory** counts. An `ai-assets` file would otherwise be returned\n * as a root and every later `join(root, source_path)` would fail with ENOTDIR.\n *\n * @param startDir - Directory to start from (typically the project dir).\n * @param opts - `levels` caps the upward walk; `mountDirs` overrides the mount\n * roots (defaults to {@link workspaceMountDirs}).\n * @returns Absolute path to the `ai-assets/` directory, or `null` if none is\n * reachable within `levels`.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport async function findAiAssetsRoot(\n startDir: string,\n opts?: { levels?: number; mountDirs?: string[] },\n): Promise<string | null> {\n const mountDirs = opts?.mountDirs ?? workspaceMountDirs();\n const levels = opts?.levels ?? AI_ASSETS_WALK_LEVELS;\n let dir = resolve(startDir);\n // Every level of a `/skaile/workspace/...` start dir is under the mount, so\n // an unconditional warn would fire once per level for one lookup. Collect and\n // report once — the operator needs the fact, not six copies of it.\n const refused: string[] = [];\n\n for (let i = 0; i < levels; i++) {\n const candidate = join(dir, \"ai-assets\");\n if (isUnderWorkspaceMount(candidate, mountDirs)) {\n refused.push(candidate);\n } else {\n const isDir = await tryWithFsDeadline(\n `stat ${candidate}`,\n async () => (await stat(candidate)).isDirectory(),\n false,\n );\n if (isDir) {\n if (refused.length > 0) warnRefused(refused, mountDirs);\n return candidate;\n }\n }\n const parent = resolve(dir, \"..\");\n if (parent === dir) break; // filesystem root — nothing further up\n dir = parent;\n }\n if (refused.length > 0) warnRefused(refused, mountDirs);\n return null;\n}\n\n/** Single warning for every `ai-assets` candidate skipped for sitting on a mount. */\nfunction warnRefused(refused: string[], mountDirs: string[]): void {\n log().warn(\n \"findAiAssetsRoot refused candidates under a workspace mount — deploying skills from a network mount can stall the session\",\n { refused, mountDirs },\n );\n}\n\n/**\n * Deploy a single catalog entry to the session skills directory.\n *\n * Copies the entire skill source directory into `skillsDir/<entry.name>/`.\n * If `context` is provided, a separate `CONTEXT.md` is written alongside\n * `SKILL.md` so the source file is never modified.\n *\n * Only `skill` entries are deployable; other kinds return an error.\n *\n * **Async by necessity.** This runs from the `session_init` command handler\n * with the WebSocket live, and both `assetsRoot` and `skillsDir` can sit on a\n * network mount. The former `cpSync`/`rmSync` pair parked the event loop for\n * the whole copy; every call is now awaited and deadline-bounded, so an\n * unresponsive mount fails one deployment instead of the session.\n *\n * @param entry - Compiled catalog entry to deploy.\n * @param options - Deployment target and optional context.\n * @returns `{ success: true }` on success, `{ success: false, error }` on failure.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport async function deployCatalogEntry(\n entry: CatalogEntryCompiled,\n options: DeployFromCatalogOptions,\n): Promise<{ success: boolean; error?: string }> {\n const { assetsRoot, skillsDir, context } = options;\n\n if (entry.kind !== \"skill\") {\n return { success: false, error: `Cannot deploy ${entry.kind} directly — only skills` };\n }\n\n const sourcePath = join(assetsRoot, entry.source_path);\n const skillMdPath = join(sourcePath, \"SKILL.md\");\n\n const hasSkillMd = await tryWithFsDeadline(\n `stat ${skillMdPath}`,\n async () => {\n await stat(skillMdPath);\n return true;\n },\n false,\n );\n if (!hasSkillMd) {\n return { success: false, error: `SKILL.md not found at ${skillMdPath}` };\n }\n\n const destDir = join(skillsDir, entry.name);\n\n try {\n await withFsDeadline(`mkdir ${destDir}`, () => mkdir(destDir, { recursive: true }));\n\n // Copy the entire skill directory\n await withFsDeadline(\n `cp ${sourcePath} -> ${destDir}`,\n () => cp(sourcePath, destDir, { recursive: true }),\n fsDeadlineMs() * TREE_OP_DEADLINE_FACTOR,\n );\n\n // Write context to a separate CONTEXT.md — never modify the original SKILL.md.\n // The agent discovers both files in the skill directory.\n const contextPath = join(destDir, \"CONTEXT.md\");\n if (context) {\n await withFsDeadline(`write ${contextPath}`, () =>\n writeFile(contextPath, `# Additional Context\\n\\n${context}\\n`, \"utf8\"),\n );\n } else {\n // `force: true` makes this a single call: a stale CONTEXT.md is removed,\n // an absent one is a no-op. The former existsSync probe only added a\n // second trip to the same possibly-wedged mount.\n await withFsDeadline(`rm ${contextPath}`, () => rm(contextPath, { force: true }));\n }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) };\n }\n\n return { success: true };\n}\n\n/**\n * Remove a deployed skill directory from the session skills directory.\n *\n * @param name - Skill name (directory basename under `skillsDir`).\n * @param skillsDir - Absolute path to the session skills directory.\n * @returns `true` if the skill was found and removed; `false` if it was not\n * deployed, or if the directory could not be reached within the deadline.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport async function undeployCatalogEntry(name: string, skillsDir: string): Promise<boolean> {\n const destDir = join(skillsDir, name);\n const exists = await tryWithFsDeadline(\n `stat ${destDir}`,\n async () => {\n await stat(destDir);\n return true;\n },\n false,\n );\n if (!exists) return false;\n await withFsDeadline(\n `rm -r ${destDir}`,\n () => rm(destDir, { recursive: true, force: true }),\n fsDeadlineMs() * TREE_OP_DEADLINE_FACTOR,\n );\n return true;\n}\n\n/**\n * Deploy multiple catalog entries in a single batch operation.\n *\n * Non-skill entries (flows, agents, etc.) are automatically skipped and\n * recorded in `result.skipped`. Deployment failures are collected in\n * `result.errors` without aborting the rest of the batch.\n *\n * @param entries - Compiled catalog entries to deploy.\n * @param options - Deployment target and optional context.\n * @returns Aggregated {@link DeployResult} with deployed, skipped, and error lists.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport async function deployAll(\n entries: CatalogEntryCompiled[],\n options: DeployFromCatalogOptions,\n): Promise<DeployResult> {\n const result: DeployResult = { deployed: [], skipped: [], errors: [] };\n\n for (const entry of entries) {\n if (entry.kind !== \"skill\") {\n result.skipped.push(entry.id);\n continue;\n }\n\n // Serial on purpose: concurrent recursive copies onto one mount multiply\n // the queue depth on the exact resource that is already the bottleneck.\n const r = await deployCatalogEntry(entry, options);\n if (r.success) {\n result.deployed.push(entry.id);\n } else {\n result.errors.push(`${entry.id}: ${r.error}`);\n }\n }\n\n return result;\n}\n\n/**\n * Resolve a flow's skill dependencies from the full catalog entry list.\n *\n * Partitions `flow.required_skills` and `flow.optional_skills` into resolved\n * entries and a list of names that could not be found. Missing optional skills\n * are silently ignored (they do not appear in `missing`).\n *\n * @param flow - Compiled flow entry whose skill dependencies should be resolved.\n * @param allEntries - Full set of compiled catalog entries to search.\n * @returns Object containing resolved `required` entries, resolved `optional` entries,\n * and `missing` skill names that were listed as required but not found.\n * @docLink packages/asset-manager/concepts#catalog-deployer\n */\nexport function resolveFlowSkills(\n flow: CatalogEntryCompiled,\n allEntries: CatalogEntryCompiled[],\n): { required: CatalogEntryCompiled[]; optional: CatalogEntryCompiled[]; missing: string[] } {\n const skillsByName = new Map<string, CatalogEntryCompiled>();\n for (const e of allEntries) {\n if (e.kind === \"skill\") skillsByName.set(e.name, e);\n }\n\n const required: CatalogEntryCompiled[] = [];\n const optional: CatalogEntryCompiled[] = [];\n const missing: string[] = [];\n\n for (const name of flow.required_skills ?? []) {\n const entry = skillsByName.get(name);\n if (entry) required.push(entry);\n else missing.push(name);\n }\n\n for (const name of flow.optional_skills ?? []) {\n const entry = skillsByName.get(name);\n if (entry) optional.push(entry);\n // Optional skills don't count as missing\n }\n\n return { required, optional, missing };\n}\n"]}
@@ -1,10 +1,11 @@
1
- import { findAiAssetsRoot } from './chunk-EOKAFBJ7.js';
1
+ import { findAiAssetsRoot } from './chunk-TYUJB336.js';
2
2
  import { okJson, err, ok } from './chunk-X5YPJV4N.js';
3
- import { parseSkillRequirements, validateRequirements, buildRequiresPreamble, parseSkillFrontmatter } from './chunk-OQRB7JUS.js';
3
+ import { parseSkillRequirements, validateRequirements, buildRequiresPreamble, parseSkillFrontmatter } from './chunk-YV4J7V53.js';
4
+ import { findKindDirs } from './chunk-A2ULN3KX.js';
4
5
  import fs from 'fs/promises';
5
6
  import path from 'path';
6
7
 
7
- async function walkForSkillMd(dir, domain, acc) {
8
+ async function walkForSkillMd(dir, acc) {
8
9
  let entries;
9
10
  try {
10
11
  entries = await fs.readdir(dir, { withFileTypes: true });
@@ -29,8 +30,7 @@ async function walkForSkillMd(dir, domain, acc) {
29
30
  source,
30
31
  version,
31
32
  keywords,
32
- path: skillMdPath,
33
- domain
33
+ path: skillMdPath
34
34
  });
35
35
  } catch {
36
36
  }
@@ -38,35 +38,22 @@ async function walkForSkillMd(dir, domain, acc) {
38
38
  }
39
39
  for (const entry of entries) {
40
40
  if (entry.isDirectory()) {
41
- await walkForSkillMd(path.join(dir, entry.name), domain, acc);
41
+ await walkForSkillMd(path.join(dir, entry.name), acc);
42
42
  }
43
43
  }
44
44
  }
45
- async function scanSkills(aiAssetsRoot, domainFilter) {
46
- let domains;
47
- try {
48
- const entries = await fs.readdir(aiAssetsRoot, { withFileTypes: true });
49
- domains = entries.filter((e) => e.isDirectory()).map((e) => e.name).filter((name) => !domainFilter || name === domainFilter);
50
- } catch {
51
- return [];
52
- }
45
+ async function scanSkills(aiAssetsRoot) {
53
46
  const acc = [];
54
- for (const domain of domains) {
55
- const skillsDir = path.join(aiAssetsRoot, domain, "skills");
56
- try {
57
- await fs.access(skillsDir);
58
- } catch {
59
- continue;
60
- }
61
- await walkForSkillMd(skillsDir, domain, acc);
47
+ for (const skillsDir of findKindDirs(aiAssetsRoot, "skills")) {
48
+ await walkForSkillMd(skillsDir, acc);
62
49
  }
63
- return acc;
50
+ return [...new Map(acc.map((s) => [s.path, s])).values()];
64
51
  }
65
- async function skillList(projectDir, domain) {
52
+ async function skillList(projectDir) {
66
53
  try {
67
54
  const aiAssetsRoot = await findAiAssetsRoot(projectDir);
68
55
  if (!aiAssetsRoot) return okJson([]);
69
- const skills = await scanSkills(aiAssetsRoot, domain);
56
+ const skills = await scanSkills(aiAssetsRoot);
70
57
  return okJson(
71
58
  skills.map((s) => ({
72
59
  id: s.id,
@@ -74,30 +61,18 @@ async function skillList(projectDir, domain) {
74
61
  description: s.description,
75
62
  source: s.source,
76
63
  version: s.version,
77
- keywords: s.keywords,
78
- domain: s.domain
64
+ keywords: s.keywords
79
65
  }))
80
66
  );
81
67
  } catch (e) {
82
68
  return err(e instanceof Error ? e.message : String(e));
83
69
  }
84
70
  }
85
- async function skillListDomains(projectDir) {
86
- try {
87
- const aiAssetsRoot = await findAiAssetsRoot(projectDir);
88
- if (!aiAssetsRoot) return okJson([]);
89
- const entries = await fs.readdir(aiAssetsRoot, { withFileTypes: true });
90
- const domains = entries.filter((e) => e.isDirectory()).map((e) => ({ name: e.name, path: path.join(aiAssetsRoot, e.name) }));
91
- return okJson(domains);
92
- } catch (e) {
93
- return err(e instanceof Error ? e.message : String(e));
94
- }
95
- }
96
71
  async function skillShow(projectDir, skillId) {
97
72
  try {
98
73
  const aiAssetsRoot = await findAiAssetsRoot(projectDir);
99
74
  if (!aiAssetsRoot) return err(`Skill not found: ${skillId}`);
100
- const skills = await scanSkills(aiAssetsRoot, void 0);
75
+ const skills = await scanSkills(aiAssetsRoot);
101
76
  const skill = skills.find((s) => s.id === skillId);
102
77
  if (!skill) return err(`Skill not found: ${skillId}`);
103
78
  const content = await fs.readFile(skill.path, "utf-8");
@@ -110,7 +85,7 @@ async function skillSearch(projectDir, query) {
110
85
  try {
111
86
  const aiAssetsRoot = await findAiAssetsRoot(projectDir);
112
87
  if (!aiAssetsRoot) return okJson([]);
113
- const skills = await scanSkills(aiAssetsRoot, void 0);
88
+ const skills = await scanSkills(aiAssetsRoot);
114
89
  const q = query.toLowerCase();
115
90
  const matched = skills.filter(
116
91
  (s) => s.name.toLowerCase().includes(q) || s.description.toLowerCase().includes(q) || s.id.toLowerCase().includes(q) || (s.keywords ?? []).some((k) => k.toLowerCase().includes(q))
@@ -122,8 +97,7 @@ async function skillSearch(projectDir, query) {
122
97
  description: s.description,
123
98
  source: s.source,
124
99
  version: s.version,
125
- keywords: s.keywords,
126
- domain: s.domain
100
+ keywords: s.keywords
127
101
  }))
128
102
  );
129
103
  } catch (e) {
@@ -134,7 +108,7 @@ async function skillCheckRequirements(projectDir, skillId, targetDir) {
134
108
  try {
135
109
  const aiAssetsRoot = await findAiAssetsRoot(projectDir);
136
110
  if (!aiAssetsRoot) return err(`Skill not found: ${skillId}`);
137
- const skills = await scanSkills(aiAssetsRoot, void 0);
111
+ const skills = await scanSkills(aiAssetsRoot);
138
112
  const skill = skills.find((s) => s.id === skillId);
139
113
  if (!skill) return err(`Skill not found: ${skillId}`);
140
114
  const content = await fs.readFile(skill.path, "utf-8");
@@ -149,7 +123,7 @@ async function skillGetPreamble(projectDir, skillId) {
149
123
  try {
150
124
  const aiAssetsRoot = await findAiAssetsRoot(projectDir);
151
125
  if (!aiAssetsRoot) return err(`Skill not found: ${skillId}`);
152
- const skills = await scanSkills(aiAssetsRoot, void 0);
126
+ const skills = await scanSkills(aiAssetsRoot);
153
127
  const skill = skills.find((s) => s.id === skillId);
154
128
  if (!skill) return err(`Skill not found: ${skillId}`);
155
129
  const content = await fs.readFile(skill.path, "utf-8");
@@ -161,6 +135,6 @@ async function skillGetPreamble(projectDir, skillId) {
161
135
  }
162
136
  }
163
137
 
164
- export { skillCheckRequirements, skillGetPreamble, skillList, skillListDomains, skillSearch, skillShow };
165
- //# sourceMappingURL=chunk-VDBP6Y5M.js.map
166
- //# sourceMappingURL=chunk-VDBP6Y5M.js.map
138
+ export { skillCheckRequirements, skillGetPreamble, skillList, skillSearch, skillShow };
139
+ //# sourceMappingURL=chunk-WCQMXBO5.js.map
140
+ //# sourceMappingURL=chunk-WCQMXBO5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workspace-plugin/src/tools/skills.ts"],"names":[],"mappings":"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","file":"chunk-WCQMXBO5.js","sourcesContent":["// src/tools/skills.ts\n\nimport type { Dirent } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { findKindDirs } from \"@skaile/workspaces/core/discovery\";\nimport {\n buildRequiresPreamble,\n parseSkillFrontmatter,\n parseSkillRequirements,\n validateRequirements,\n} from \"@skaile/workspaces/resolver\";\nimport type { ToolResult } from \"../types.js\";\nimport { err, ok, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\n\ninterface SkillEntry {\n id: string;\n name: string;\n description: string;\n source?: string;\n version?: string;\n keywords?: string[];\n path: string;\n}\n\nasync function walkForSkillMd(dir: string, acc: SkillEntry[]): Promise<void> {\n let entries: Dirent<string>[];\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n // Check if this directory contains a SKILL.md\n const hasSkillMd = entries.some((e) => e.isFile() && e.name === \"SKILL.md\");\n if (hasSkillMd) {\n const skillMdPath = path.join(dir, \"SKILL.md\");\n try {\n const content = await fs.readFile(skillMdPath, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n const name = typeof fm.name === \"string\" ? fm.name : path.basename(dir);\n const description = typeof fm.description === \"string\" ? fm.description : \"\";\n const source = typeof fm.source === \"string\" ? fm.source : undefined;\n const version = typeof fm.version === \"string\" ? fm.version : undefined;\n const keywords = Array.isArray(fm.keywords) ? (fm.keywords as string[]) : undefined;\n acc.push({\n id: path.basename(dir),\n name,\n description,\n source,\n version,\n keywords,\n path: skillMdPath,\n });\n } catch {\n // skip unreadable files\n }\n return; // don't recurse inside a skill directory\n }\n\n // Recurse into subdirectories\n for (const entry of entries) {\n if (entry.isDirectory()) {\n await walkForSkillMd(path.join(dir, entry.name), acc);\n }\n }\n}\n\nasync function scanSkills(aiAssetsRoot: string): Promise<SkillEntry[]> {\n const acc: SkillEntry[] = [];\n for (const skillsDir of findKindDirs(aiAssetsRoot, \"skills\")) {\n await walkForSkillMd(skillsDir, acc);\n }\n // A `skills/` dir nested inside another is walked twice; keep each SKILL.md once.\n return [...new Map(acc.map((s) => [s.path, s])).values()];\n}\n\n// ── Exported tool functions ────────────────────────────────────────────────────\n\n/**\n * List all skills in the `ai-assets` catalog.\n *\n * Walks every `skills/` directory at any depth under the `ai-assets` root\n * looking for `SKILL.md` files. Returns a JSON array of skill summaries\n * `{ id, name, description, source, version, keywords }`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function skillList(projectDir: string): Promise<ToolResult> {\n try {\n const aiAssetsRoot = await findAiAssetsRoot(projectDir);\n if (!aiAssetsRoot) return okJson([]);\n const skills = await scanSkills(aiAssetsRoot);\n return okJson(\n skills.map((s) => ({\n id: s.id,\n name: s.name,\n description: s.description,\n source: s.source,\n version: s.version,\n keywords: s.keywords,\n })),\n );\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full `SKILL.md` content for a skill.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param skillId - Skill ID (directory name) as returned by {@link skillList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function skillShow(projectDir: string, skillId: string): Promise<ToolResult> {\n try {\n const aiAssetsRoot = await findAiAssetsRoot(projectDir);\n if (!aiAssetsRoot) return err(`Skill not found: ${skillId}`);\n const skills = await scanSkills(aiAssetsRoot);\n const skill = skills.find((s) => s.id === skillId);\n if (!skill) return err(`Skill not found: ${skillId}`);\n const content = await fs.readFile(skill.path, \"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 * Search skills by name, description, ID, or keywords.\n *\n * Case-insensitive substring match against all text fields in every skill\n * entry. Returns the same summary shape as {@link skillList}.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param query - Search string.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function skillSearch(projectDir: string, query: string): Promise<ToolResult> {\n try {\n const aiAssetsRoot = await findAiAssetsRoot(projectDir);\n if (!aiAssetsRoot) return okJson([]);\n const skills = await scanSkills(aiAssetsRoot);\n const q = query.toLowerCase();\n const matched = skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n (s.keywords ?? []).some((k) => k.toLowerCase().includes(q)),\n );\n return okJson(\n matched.map((s) => ({\n id: s.id,\n name: s.name,\n description: s.description,\n source: s.source,\n version: s.version,\n keywords: s.keywords,\n })),\n );\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Validate that all prerequisites declared in a skill's `SKILL.md` are\n * satisfied in `targetDir`.\n *\n * Uses `@skaile/workspaces/resolver` to parse the `REQUIRES` / `READS` / `WRITES`\n * DSL and run the requirement checks against the filesystem. Returns a\n * validation report as JSON.\n *\n * @param projectDir - Absolute path to the skaile project root (for skill lookup).\n * @param skillId - Skill ID as returned by {@link skillList}.\n * @param targetDir - Directory to validate against (typically the user's project).\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function skillCheckRequirements(\n projectDir: string,\n skillId: string,\n targetDir: string,\n): Promise<ToolResult> {\n try {\n const aiAssetsRoot = await findAiAssetsRoot(projectDir);\n if (!aiAssetsRoot) return err(`Skill not found: ${skillId}`);\n const skills = await scanSkills(aiAssetsRoot);\n const skill = skills.find((s) => s.id === skillId);\n if (!skill) return err(`Skill not found: ${skillId}`);\n const content = await fs.readFile(skill.path, \"utf-8\");\n\n const requirements = parseSkillRequirements(content);\n const report = await validateRequirements(skillId, requirements, targetDir);\n return okJson(report);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get the formatted `REQUIRES`/`INPUT`/`READS`/`WRITES` DSL preamble for a skill.\n *\n * Uses `@skaile/workspaces/resolver` to build the requirements preamble that can be\n * prepended to the skill prompt for injection into the agent's context.\n * Returns `\"(no requirements declared)\"` when the skill has no requirements.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param skillId - Skill ID as returned by {@link skillList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function skillGetPreamble(projectDir: string, skillId: string): Promise<ToolResult> {\n try {\n const aiAssetsRoot = await findAiAssetsRoot(projectDir);\n if (!aiAssetsRoot) return err(`Skill not found: ${skillId}`);\n const skills = await scanSkills(aiAssetsRoot);\n const skill = skills.find((s) => s.id === skillId);\n if (!skill) return err(`Skill not found: ${skillId}`);\n const content = await fs.readFile(skill.path, \"utf-8\");\n\n const requirements = parseSkillRequirements(content);\n const preamble = buildRequiresPreamble(requirements, skillId);\n return ok(preamble || \"(no requirements declared)\");\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { resolveSkWorkspaceConfig } from './chunk-JEPSP6XK.js';
2
- import { parseFrontmatter } from './chunk-5K2VT6E2.js';
1
+ import { resolveSkWorkspaceConfig } from './chunk-MXXKTQXJ.js';
2
+ import { parseFrontmatter } from './chunk-DXUQCMVT.js';
3
3
  import { createLogger } from './chunk-BOFL7GIF.js';
4
4
  import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
5
5
  import { join } from 'path';
@@ -496,5 +496,5 @@ function resolveAuthRef(auth, mountId) {
496
496
  }
497
497
 
498
498
  export { ConnectorFieldMissingError, ConnectorStartupError, EnvSecretProvider, ForgeSecretProvider, InMemorySecretProvider, LegacyAuthGrammarError, LockedSecretProvider, OAuthRequiredError, PreMintedSecretProvider, SecretProviderChain, createCliSecretProviderChain, createForgeSecretProviderChain, deriveSingleMaterializedConnectorDeclaration, fromMaterializedConnectorMd, isKnownSecretRef, loadConnectorDeclarations, loadMaterializedConnectorDeclarations, loadYamlConnectorDeclarations, readUnavailableMarker, resolveAuthRef, resolveBackendAuthFor, resolvedConfigToDeclarations, withMaterializedConnectorDeclarations };
499
- //# sourceMappingURL=chunk-YQEF36D5.js.map
500
- //# sourceMappingURL=chunk-YQEF36D5.js.map
499
+ //# sourceMappingURL=chunk-WKIOWDLQ.js.map
500
+ //# sourceMappingURL=chunk-WKIOWDLQ.js.map