@skaile/workspaces 6.8.1 → 6.9.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 (318) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/ai-sdk.js +5 -5
  3. package/dist/{asset-feeds-R75MH2WW.js → asset-feeds-JWRIWLVX.js} +19 -19
  4. package/dist/{asset-feeds-R75MH2WW.js.map → asset-feeds-JWRIWLVX.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +4 -4
  6. package/dist/asset-manager/history.js +19 -1
  7. package/dist/asset-manager/index.js +11 -11
  8. package/dist/asset-manager/installer.js +7 -7
  9. package/dist/asset-manager/renderers.js +6 -6
  10. package/dist/asset-manager/src/history.d.ts.map +1 -1
  11. package/dist/asset-manager/src/index.d.ts +65 -3
  12. package/dist/asset-manager/src/index.d.ts.map +1 -1
  13. package/dist/bridge/harnesses/claude-sdk.js +9 -9
  14. package/dist/bridge/harnesses/codex.js +29 -12
  15. package/dist/bridge/harnesses/codex.js.map +1 -1
  16. package/dist/bridge/harnesses/continue.js +8 -8
  17. package/dist/bridge/harnesses/echo.js +3 -3
  18. package/dist/bridge/harnesses/gemini.js +8 -8
  19. package/dist/bridge/harnesses/goose.js +8 -8
  20. package/dist/bridge/harnesses/omp.js +156 -24
  21. package/dist/bridge/harnesses/omp.js.map +1 -1
  22. package/dist/bridge/harnesses/opencode.js +8 -8
  23. package/dist/bridge/harnesses/qwen.js +8 -8
  24. package/dist/bridge/index.js +14 -14
  25. package/dist/bridge/src/codex/friendly-error.d.ts +7 -1
  26. package/dist/bridge/src/codex/friendly-error.d.ts.map +1 -1
  27. package/dist/bridge/src/codex/login-fallback.d.ts +5 -0
  28. package/dist/bridge/src/codex/login-fallback.d.ts.map +1 -1
  29. package/dist/bridge/src/harnesses/codex.d.ts +2 -0
  30. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  31. package/dist/bridge/src/harnesses/omp.d.ts +17 -0
  32. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  33. package/dist/{chunk-56PIAGD6.js → chunk-23Q5LT4U.js} +331 -59
  34. package/dist/chunk-23Q5LT4U.js.map +1 -0
  35. package/dist/{chunk-SBNUXJ6E.js → chunk-3AIEJSQR.js} +3 -3
  36. package/dist/{chunk-SBNUXJ6E.js.map → chunk-3AIEJSQR.js.map} +1 -1
  37. package/dist/{chunk-7RBFYW24.js → chunk-3EPRTMXY.js} +5 -5
  38. package/dist/{chunk-7RBFYW24.js.map → chunk-3EPRTMXY.js.map} +1 -1
  39. package/dist/{chunk-TMJBEGS4.js → chunk-4KPQ6ILH.js} +5 -34
  40. package/dist/chunk-4KPQ6ILH.js.map +1 -0
  41. package/dist/{chunk-G7NMF5WQ.js → chunk-4ROXSQEG.js} +3 -3
  42. package/dist/{chunk-G7NMF5WQ.js.map → chunk-4ROXSQEG.js.map} +1 -1
  43. package/dist/{chunk-I6XH46Q6.js → chunk-4WB4KSSQ.js} +3 -3
  44. package/dist/{chunk-I6XH46Q6.js.map → chunk-4WB4KSSQ.js.map} +1 -1
  45. package/dist/{chunk-NW7Y5SNK.js → chunk-5AQLCRR7.js} +4 -4
  46. package/dist/{chunk-NW7Y5SNK.js.map → chunk-5AQLCRR7.js.map} +1 -1
  47. package/dist/{chunk-WFK4MUBL.js → chunk-5J6JWGY4.js} +3 -3
  48. package/dist/{chunk-WFK4MUBL.js.map → chunk-5J6JWGY4.js.map} +1 -1
  49. package/dist/{chunk-O5Y7VMVQ.js → chunk-5KWQMCH7.js} +3 -3
  50. package/dist/{chunk-O5Y7VMVQ.js.map → chunk-5KWQMCH7.js.map} +1 -1
  51. package/dist/{chunk-YMO4ZDLC.js → chunk-5NTB64PW.js} +45 -13
  52. package/dist/chunk-5NTB64PW.js.map +1 -0
  53. package/dist/{chunk-QGA2OBUJ.js → chunk-72BDCGBB.js} +3 -3
  54. package/dist/{chunk-QGA2OBUJ.js.map → chunk-72BDCGBB.js.map} +1 -1
  55. package/dist/{chunk-KTBKW2FI.js → chunk-7QYBKUAS.js} +4 -3
  56. package/dist/chunk-7QYBKUAS.js.map +1 -0
  57. package/dist/{chunk-BGATDUYX.js → chunk-AERQFD6T.js} +4 -4
  58. package/dist/{chunk-BGATDUYX.js.map → chunk-AERQFD6T.js.map} +1 -1
  59. package/dist/{chunk-XIIIGLSL.js → chunk-AVRTZAH2.js} +9 -9
  60. package/dist/{chunk-XIIIGLSL.js.map → chunk-AVRTZAH2.js.map} +1 -1
  61. package/dist/{chunk-I4DI5DAX.js → chunk-B2DGCYVC.js} +18 -18
  62. package/dist/chunk-B2DGCYVC.js.map +1 -0
  63. package/dist/{chunk-VQFA5DR7.js → chunk-C7L5MFUL.js} +3 -3
  64. package/dist/{chunk-VQFA5DR7.js.map → chunk-C7L5MFUL.js.map} +1 -1
  65. package/dist/{chunk-ORXV3UB6.js → chunk-CFTTXUM2.js} +3 -3
  66. package/dist/{chunk-ORXV3UB6.js.map → chunk-CFTTXUM2.js.map} +1 -1
  67. package/dist/{chunk-N65H7YYI.js → chunk-DZRN3SNG.js} +5 -5
  68. package/dist/{chunk-N65H7YYI.js.map → chunk-DZRN3SNG.js.map} +1 -1
  69. package/dist/{chunk-QCR5AE5E.js → chunk-E675QKFG.js} +5 -5
  70. package/dist/{chunk-QCR5AE5E.js.map → chunk-E675QKFG.js.map} +1 -1
  71. package/dist/{chunk-O7ADRMCR.js → chunk-FZO64PLQ.js} +45 -16
  72. package/dist/chunk-FZO64PLQ.js.map +1 -0
  73. package/dist/{chunk-Y6LC5PEZ.js → chunk-GYBDWW6K.js} +14 -5
  74. package/dist/chunk-GYBDWW6K.js.map +1 -0
  75. package/dist/{chunk-CMXDFTA2.js → chunk-GYPPVANR.js} +3 -3
  76. package/dist/{chunk-CMXDFTA2.js.map → chunk-GYPPVANR.js.map} +1 -1
  77. package/dist/{chunk-G44FFUMA.js → chunk-GZL6RN4Z.js} +92 -14
  78. package/dist/chunk-GZL6RN4Z.js.map +1 -0
  79. package/dist/{chunk-DFP476EU.js → chunk-JY2JXCL6.js} +89 -4
  80. package/dist/chunk-JY2JXCL6.js.map +1 -0
  81. package/dist/{chunk-SAL72A7T.js → chunk-LMADWO4Q.js} +9 -6
  82. package/dist/chunk-LMADWO4Q.js.map +1 -0
  83. package/dist/{chunk-3HSLJAMJ.js → chunk-LYVLDGML.js} +3 -3
  84. package/dist/{chunk-3HSLJAMJ.js.map → chunk-LYVLDGML.js.map} +1 -1
  85. package/dist/{chunk-62NNP7LU.js → chunk-M4G2SVXI.js} +3 -3
  86. package/dist/{chunk-62NNP7LU.js.map → chunk-M4G2SVXI.js.map} +1 -1
  87. package/dist/{chunk-SGI5MRKP.js → chunk-MDCI4RSG.js} +40 -5
  88. package/dist/chunk-MDCI4RSG.js.map +1 -0
  89. package/dist/{chunk-NAEXYRHR.js → chunk-MPRWVZXF.js} +10 -10
  90. package/dist/{chunk-NAEXYRHR.js.map → chunk-MPRWVZXF.js.map} +1 -1
  91. package/dist/{chunk-KO3VSZQP.js → chunk-NDBHEOIA.js} +6 -6
  92. package/dist/{chunk-KO3VSZQP.js.map → chunk-NDBHEOIA.js.map} +1 -1
  93. package/dist/{chunk-SVMIUCTT.js → chunk-NJVHGS7X.js} +4 -4
  94. package/dist/{chunk-SVMIUCTT.js.map → chunk-NJVHGS7X.js.map} +1 -1
  95. package/dist/{chunk-Z5EPCIB6.js → chunk-O3FYOS64.js} +93 -14
  96. package/dist/chunk-O3FYOS64.js.map +1 -0
  97. package/dist/{chunk-PKC2AHOB.js → chunk-PTJZCOBH.js} +2 -2
  98. package/dist/{chunk-PKC2AHOB.js.map → chunk-PTJZCOBH.js.map} +1 -1
  99. package/dist/{chunk-4CD2R4MJ.js → chunk-QBUJTVMY.js} +4 -4
  100. package/dist/{chunk-4CD2R4MJ.js.map → chunk-QBUJTVMY.js.map} +1 -1
  101. package/dist/{chunk-LL5GMUQG.js → chunk-SE6OL7Y5.js} +7 -7
  102. package/dist/{chunk-LL5GMUQG.js.map → chunk-SE6OL7Y5.js.map} +1 -1
  103. package/dist/{chunk-SILFO5RY.js → chunk-SQMDFM4N.js} +2 -2
  104. package/dist/{chunk-SILFO5RY.js.map → chunk-SQMDFM4N.js.map} +1 -1
  105. package/dist/{chunk-REAF7ZFA.js → chunk-T5EIWWEJ.js} +398 -36
  106. package/dist/chunk-T5EIWWEJ.js.map +1 -0
  107. package/dist/{chunk-QW5B3TEO.js → chunk-TMQFOJ6F.js} +3 -3
  108. package/dist/{chunk-QW5B3TEO.js.map → chunk-TMQFOJ6F.js.map} +1 -1
  109. package/dist/{chunk-BB5EJLKZ.js → chunk-TUOHA6BM.js} +2 -2
  110. package/dist/{chunk-BB5EJLKZ.js.map → chunk-TUOHA6BM.js.map} +1 -1
  111. package/dist/{chunk-HLAEYFUN.js → chunk-U3FI4DVT.js} +3 -3
  112. package/dist/{chunk-HLAEYFUN.js.map → chunk-U3FI4DVT.js.map} +1 -1
  113. package/dist/{chunk-237BMOZW.js → chunk-UWD7YBDR.js} +4 -4
  114. package/dist/{chunk-237BMOZW.js.map → chunk-UWD7YBDR.js.map} +1 -1
  115. package/dist/{chunk-6ZM5X2XW.js → chunk-V2CONXKD.js} +3 -3
  116. package/dist/{chunk-6ZM5X2XW.js.map → chunk-V2CONXKD.js.map} +1 -1
  117. package/dist/{chunk-DXBHGNSI.js → chunk-V3EJYOP2.js} +6 -6
  118. package/dist/{chunk-DXBHGNSI.js.map → chunk-V3EJYOP2.js.map} +1 -1
  119. package/dist/{chunk-OLZE4IHX.js → chunk-WPLZGT5Z.js} +4088 -3889
  120. package/dist/chunk-WPLZGT5Z.js.map +1 -0
  121. package/dist/{chunk-VT6G5AJV.js → chunk-WS3BOCAT.js} +4 -3
  122. package/dist/chunk-WS3BOCAT.js.map +1 -0
  123. package/dist/{chunk-LZ3E6TML.js → chunk-X2B5GMJO.js} +18 -9
  124. package/dist/chunk-X2B5GMJO.js.map +1 -0
  125. package/dist/{chunk-EDKTS44C.js → chunk-XPKUFOS3.js} +6 -6
  126. package/dist/{chunk-EDKTS44C.js.map → chunk-XPKUFOS3.js.map} +1 -1
  127. package/dist/{chunk-JAGBPHXB.js → chunk-Y242OE4B.js} +3 -3
  128. package/dist/{chunk-JAGBPHXB.js.map → chunk-Y242OE4B.js.map} +1 -1
  129. package/dist/{chunk-7O2CR5SZ.js → chunk-Y2BQWZXT.js} +41 -35
  130. package/dist/chunk-Y2BQWZXT.js.map +1 -0
  131. package/dist/{chunk-N2W7OJC6.js → chunk-YGT3CGPD.js} +3 -3
  132. package/dist/{chunk-N2W7OJC6.js.map → chunk-YGT3CGPD.js.map} +1 -1
  133. package/dist/{claude-code-DS26HI3K.js → claude-code-YRJIGXTL.js} +5 -5
  134. package/dist/{claude-code-DS26HI3K.js.map → claude-code-YRJIGXTL.js.map} +1 -1
  135. package/dist/cli/index.js +277 -143
  136. package/dist/cli/index.js.map +1 -1
  137. package/dist/cli/src/agent-pins.d.ts +8 -0
  138. package/dist/cli/src/agent-pins.d.ts.map +1 -1
  139. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  140. package/dist/cli/src/commands/catalog.d.ts +4 -4
  141. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  142. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  143. package/dist/cli/src/commands/deploy.d.ts.map +1 -1
  144. package/dist/cli/src/commands/flow.d.ts.map +1 -1
  145. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  146. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  147. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  148. package/dist/cli/src/commands/library-index.d.ts +42 -0
  149. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  150. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  151. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  152. package/dist/cli/src/commands/patch.d.ts.map +1 -1
  153. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  154. package/dist/cli/src/commands/project.d.ts.map +1 -1
  155. package/dist/cli/src/commands/run.d.ts.map +1 -1
  156. package/dist/cli/src/commands/serve-preflight.d.ts +10 -0
  157. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  158. package/dist/cli/src/commands/serve.d.ts +5 -3
  159. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  160. package/dist/cli/src/commands/session.d.ts.map +1 -1
  161. package/dist/cli/src/commands/source.d.ts.map +1 -1
  162. package/dist/cli/src/commands/store.d.ts.map +1 -1
  163. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  164. package/dist/cli/src/config-checks.d.ts +13 -0
  165. package/dist/cli/src/config-checks.d.ts.map +1 -1
  166. package/dist/cli/src/group-help.d.ts +11 -0
  167. package/dist/cli/src/group-help.d.ts.map +1 -0
  168. package/dist/connectors/config.js +2 -2
  169. package/dist/connectors/index.js +17 -17
  170. package/dist/connectors/src/config.d.ts.map +1 -1
  171. package/dist/{connectors-3ST6PGWP.js → connectors-JKT32HZT.js} +20 -20
  172. package/dist/{connectors-3ST6PGWP.js.map → connectors-JKT32HZT.js.map} +1 -1
  173. package/dist/core/index.js +4 -4
  174. package/dist/core/logging.js +1 -1
  175. package/dist/core/runtime-assets.js +2 -2
  176. package/dist/core/src/index.d.ts +1 -1
  177. package/dist/core/src/index.d.ts.map +1 -1
  178. package/dist/core/src/logging/config.d.ts.map +1 -1
  179. package/dist/core/src/repo-manager.d.ts +6 -0
  180. package/dist/core/src/repo-manager.d.ts.map +1 -1
  181. package/dist/core/src/run-state-ignore.d.ts +6 -4
  182. package/dist/core/src/run-state-ignore.d.ts.map +1 -1
  183. package/dist/core/src/walker.d.ts.map +1 -1
  184. package/dist/core/src/workspace-config.d.ts +6 -0
  185. package/dist/core/src/workspace-config.d.ts.map +1 -1
  186. package/dist/core/workspace-config.js +1 -1
  187. package/dist/deploy/index.js +4 -4
  188. package/dist/discovery/index.js +2 -2
  189. package/dist/{ensure-sources-VELKRM6X.js → ensure-sources-GUJODKY5.js} +23 -23
  190. package/dist/{ensure-sources-VELKRM6X.js.map → ensure-sources-GUJODKY5.js.map} +1 -1
  191. package/dist/factory-assets/connectors/box.js +17 -17
  192. package/dist/factory-assets/connectors/deploy.js +17 -17
  193. package/dist/factory-assets/connectors/devserver.js +17 -17
  194. package/dist/factory-assets/connectors/flow/adapter.js +17 -17
  195. package/dist/factory-assets/connectors/flow/engine.js +5 -5
  196. package/dist/factory-assets/connectors/flow/run-flow.js +18 -18
  197. package/dist/factory-assets/connectors/flow.js +17 -17
  198. package/dist/factory-assets/connectors/git.js +17 -17
  199. package/dist/factory-assets/connectors/gmail.js +17 -17
  200. package/dist/factory-assets/connectors/googledrive.js +17 -17
  201. package/dist/factory-assets/connectors/local.js +17 -17
  202. package/dist/factory-assets/connectors/mattermost.js +17 -17
  203. package/dist/factory-assets/connectors/memory.js +17 -17
  204. package/dist/factory-assets/connectors/minio.js +17 -17
  205. package/dist/factory-assets/connectors/postgres.js +17 -17
  206. package/dist/factory-assets/connectors/s3.js +17 -17
  207. package/dist/factory-assets/connectors/sharepoint.js +17 -17
  208. package/dist/factory-assets/connectors/sqlite.js +17 -17
  209. package/dist/factory-assets/connectors/static-server.js +17 -17
  210. package/dist/factory-assets/connectors/tunnel.js +17 -17
  211. package/dist/factory-assets/connectors/webdav.js +17 -17
  212. package/dist/factory-assets/connectors/xstate-store.js +17 -17
  213. package/dist/factory-assets/connectors/xstate.js +17 -17
  214. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +4 -4
  215. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +10 -10
  216. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +15 -15
  217. package/dist/factory-assets/skills/manifest-compliance/SKILL.md +1 -1
  218. package/dist/{flows-I6ODIPZZ.js → flows-UCP6ZUYS.js} +7 -7
  219. package/dist/{flows-I6ODIPZZ.js.map → flows-UCP6ZUYS.js.map} +1 -1
  220. package/dist/{helpers-LWNKX56Y.js → helpers-SO53MRHF.js} +23 -23
  221. package/dist/{helpers-LWNKX56Y.js.map → helpers-SO53MRHF.js.map} +1 -1
  222. package/dist/library/index.js +7 -7
  223. package/dist/library/src/index.d.ts +1 -1
  224. package/dist/library/src/index.d.ts.map +1 -1
  225. package/dist/library/src/remote/index.d.ts +1 -1
  226. package/dist/library/src/remote/index.d.ts.map +1 -1
  227. package/dist/library/src/remote/remote-catalog-source.d.ts +33 -2
  228. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  229. package/dist/{library-publish-WJVCT2IK.js → library-publish-Z5E3YZCZ.js} +61 -47
  230. package/dist/library-publish-Z5E3YZCZ.js.map +1 -0
  231. package/dist/model-endpoint/index.js +7 -7
  232. package/dist/model-endpoint/src/index.d.ts +1 -1
  233. package/dist/model-endpoint/src/index.d.ts.map +1 -1
  234. package/dist/model-endpoint/src/openai-agent.d.ts +60 -0
  235. package/dist/model-endpoint/src/openai-agent.d.ts.map +1 -0
  236. package/dist/model-endpoint/src/resolve.d.ts +12 -3
  237. package/dist/model-endpoint/src/resolve.d.ts.map +1 -1
  238. package/dist/model-endpoint/src/server.d.ts.map +1 -1
  239. package/dist/model-endpoint/src/types.d.ts +33 -0
  240. package/dist/model-endpoint/src/types.d.ts.map +1 -1
  241. package/dist/model-endpoint/src/upstream-models.d.ts +20 -0
  242. package/dist/model-endpoint/src/upstream-models.d.ts.map +1 -0
  243. package/dist/{open-library-Q7QZJY5D.js → open-library-A5OB72FD.js} +26 -26
  244. package/dist/{open-library-Q7QZJY5D.js.map → open-library-A5OB72FD.js.map} +1 -1
  245. package/dist/{open-registry-RZW2AFD6.js → open-registry-BHBHQMBA.js} +11 -11
  246. package/dist/{open-registry-RZW2AFD6.js.map → open-registry-BHBHQMBA.js.map} +1 -1
  247. package/dist/{paths-RPK5PNZQ.js → paths-77PXOXZY.js} +7 -7
  248. package/dist/{paths-RPK5PNZQ.js.map → paths-77PXOXZY.js.map} +1 -1
  249. package/dist/{plugin-store-OJTERUEZ.js → plugin-store-XQP2CRYH.js} +7 -7
  250. package/dist/{plugin-store-OJTERUEZ.js.map → plugin-store-XQP2CRYH.js.map} +1 -1
  251. package/dist/{project-WVPRL7CP.js → project-KTEUN7KR.js} +39 -40
  252. package/dist/{project-WVPRL7CP.js.map → project-KTEUN7KR.js.map} +1 -1
  253. package/dist/resolver/index.js +4 -4
  254. package/dist/runner/index.js +28 -28
  255. package/dist/runner/src/agent-loop.d.ts +42 -0
  256. package/dist/runner/src/agent-loop.d.ts.map +1 -0
  257. package/dist/runner/src/agents/in-process-host.d.ts +9 -6
  258. package/dist/runner/src/agents/in-process-host.d.ts.map +1 -1
  259. package/dist/runner/src/model-endpoint-discovery.d.ts +3 -0
  260. package/dist/runner/src/model-endpoint-discovery.d.ts.map +1 -1
  261. package/dist/runner/src/serve.d.ts.map +1 -1
  262. package/dist/runner/src/session-builder.d.ts +6 -4
  263. package/dist/runner/src/session-builder.d.ts.map +1 -1
  264. package/dist/runner/src/turn-scheduler.d.ts +29 -2
  265. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  266. package/dist/sdk/asset-manager.js +11 -11
  267. package/dist/sdk/bridge.js +14 -14
  268. package/dist/sdk/core.js +4 -4
  269. package/dist/sdk/flow.js +5 -5
  270. package/dist/sdk/index.js +28 -28
  271. package/dist/sdk/resolver.js +4 -4
  272. package/dist/sdk/runner.js +28 -28
  273. package/dist/sdk/transport/ws/server.js +5 -5
  274. package/dist/sdk/transport/ws.js +5 -5
  275. package/dist/sdk/transport.js +5 -5
  276. package/dist/{serve-preflight-24YWWYUG.js → serve-preflight-ODQGVUFL.js} +27 -26
  277. package/dist/{serve-preflight-24YWWYUG.js.map → serve-preflight-ODQGVUFL.js.map} +1 -1
  278. package/dist/{setup-F5JX64UP.js → setup-QJDI5YAW.js} +24 -24
  279. package/dist/{setup-F5JX64UP.js.map → setup-QJDI5YAW.js.map} +1 -1
  280. package/dist/{skills-KHHW3RZ3.js → skills-DE2BDQ6G.js} +6 -6
  281. package/dist/{skills-KHHW3RZ3.js.map → skills-DE2BDQ6G.js.map} +1 -1
  282. package/dist/{source-DG5IAAGZ.js → source-FKOUYMEM.js} +39 -39
  283. package/dist/{source-DG5IAAGZ.js.map → source-FKOUYMEM.js.map} +1 -1
  284. package/dist/{source-manifest-publish-76S2JD3O.js → source-manifest-publish-JA4TY4Z6.js} +41 -41
  285. package/dist/{source-manifest-publish-76S2JD3O.js.map → source-manifest-publish-JA4TY4Z6.js.map} +1 -1
  286. package/dist/transport/index.js +5 -5
  287. package/dist/transport/ws/server.js +5 -5
  288. package/dist/transport/ws.js +5 -5
  289. package/dist/tui/index.js +29 -29
  290. package/dist/tui/index.js.map +1 -1
  291. package/dist/tui/src/repl.d.ts.map +1 -1
  292. package/dist/types/manifests.js +1 -1
  293. package/dist/types/src/manifests/scaffold-body.d.ts +1 -1
  294. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  295. package/dist/workspace-plugin/adapters/mcp.js +20 -20
  296. package/dist/workspace-plugin/adapters/omp.js +14 -14
  297. package/dist/workspace-plugin/index.js +2 -2
  298. package/package.json +1 -1
  299. package/dist/chunk-56PIAGD6.js.map +0 -1
  300. package/dist/chunk-7O2CR5SZ.js.map +0 -1
  301. package/dist/chunk-DFP476EU.js.map +0 -1
  302. package/dist/chunk-E5AZA2FL.js +0 -83
  303. package/dist/chunk-E5AZA2FL.js.map +0 -1
  304. package/dist/chunk-G44FFUMA.js.map +0 -1
  305. package/dist/chunk-I4DI5DAX.js.map +0 -1
  306. package/dist/chunk-KTBKW2FI.js.map +0 -1
  307. package/dist/chunk-LZ3E6TML.js.map +0 -1
  308. package/dist/chunk-O7ADRMCR.js.map +0 -1
  309. package/dist/chunk-OLZE4IHX.js.map +0 -1
  310. package/dist/chunk-REAF7ZFA.js.map +0 -1
  311. package/dist/chunk-SAL72A7T.js.map +0 -1
  312. package/dist/chunk-SGI5MRKP.js.map +0 -1
  313. package/dist/chunk-TMJBEGS4.js.map +0 -1
  314. package/dist/chunk-VT6G5AJV.js.map +0 -1
  315. package/dist/chunk-Y6LC5PEZ.js.map +0 -1
  316. package/dist/chunk-YMO4ZDLC.js.map +0 -1
  317. package/dist/chunk-Z5EPCIB6.js.map +0 -1
  318. package/dist/library-publish-WJVCT2IK.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1135](https://github.com/skaile-ai/workspaces/pull/1135) [`2bac4bb`](https://github.com/skaile-ai/workspaces/commit/2bac4bbb0b754a254a023a3d6747cee466c6ab00) Thanks [@mortegro](https://github.com/mortegro)! - A running `skaile serve` workspace can offer its own agent as a model. With `model_endpoint: { enabled: true, agent: true }` in `skaile.yaml`, or `skaile serve --model-endpoint-agent` (which implies the model endpoint and combines with `--model-endpoint <port>`), the loopback endpoint serves the pseudo-model `skaile-agent`. Any OpenAI chat-completions client (`curl`, Continue, aider, another skaile workspace) sends `POST /v1/chat/completions` with `"model": "skaile-agent"` and gets the live agent's turn back, streamed or not. The agent's text is `content`; each tool call, tool result and non-fatal error is one `reasoning_content` line (`→ <name> <input>`, `← <name>`, `! <message>`). Only the last `user` message is sent, because the session keeps its own context. A question the agent asks ends the turn and comes back as content with numbered options. A client that disconnects aborts the turn like a `cancel` (on Node and Bun ≥1.4.3; under Bun 1.3 the turn runs to its end), a failed turn answers 502 `turn_failed`, and `GET /v1/models` lists `skaile-agent`. The key is off by default: with it on, the endpoint token lets a client drive an agent that edits files and runs tools. It takes text only, chat completions only, and a tool of the agent must not call `skaile-agent` (it would wait on its own turn).
8
+
9
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - A Claude alias in an agent instance's `model.preferred` is no longer passed to codex or omp as the model, for `run --instance`, `repl --instance` and a nested `agent.run`: it goes through the mapping the manifest's model uses.
10
+
11
+ The private omp home of a harness (`$TMPDIR/skaile-omp-agent/...`) is deleted once omp has exited after `kill()`, so a nested `agent.run` that failed leaves nothing behind; `dispose()` resolves after the delete.
12
+
13
+ `skaile update <ref>` takes an agent that only an `agents.<id>.ref` instance binds (as `outdated` and `update` alone already did) and does not copy it into `dependencies:`. `skaile show` lists an agent that renders only as instance files.
14
+
15
+ In a fresh clone behind a persona or ruleset bump, `check` and `doctor` name `skaile update`, not a `skaile rebuild` that would fail.
16
+
17
+ When omp exits during a turn before it showed any output, the harness sends the prompt to a fresh omp once, so the client sees no error. A second early exit is one `omp process crashed (exit code N)` error whose hint names the exit code and the session directory when omp wrote nothing to stderr.
18
+
19
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Authoring fixes of the 6.7.0 critique. `library init --path` refuses a folder with a root-level agent, contract, prompt, flow, preset, ruleset or persona file (only `SKILL.md` can be a library root); a root-skill library holds one asset (`library create`, `asset import`, `validate`, `library index` and the publish plan refuse a second); a `RULESET.md` or `PERSONA.md` with an empty body fails like the other markdown kinds; `add preset:` runs the same manifest and file checks as the other kinds; `install` locks a preset that resolved to zero assets; the line for a renamed flow says to rename the file; reader and source clones get the owner's fix (`library pull`, `source sync`) instead of `library index`; adopting a clone whose manifest lists a missing folder says `does not exist` and exits 1 (a reader is registered with a warning); an adopted clone of an empty remote gets its scaffold committed; `publish --dry-run` reports a library without a commit the same with and without `--ref`; `library set backendConfig.url` warns about a non-GitHub url; `library commit` names the git identity fix; a mistyped subcommand of a command group prints `unknown command` with a suggestion; `validate versions --changed-only` names the changed files; `search --local` at 80 columns stacks the description under a long ref.
20
+
21
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Consume and harness: `check` and `doctor` name `skaile update` (not `skaile install --locked`) for a locked asset or bound agent whose deployed copy is gone while its library is at another version, the same advice `install --locked` and `outdated` give. `harness set <harness> --clean` deletes an old agent file only when it still has the hash the lock recorded for it before the switch; a file you edited stays and is named under `Kept`. `add <agent> --global` prints every agent file it wrote for claude-code, codex and omp, next to the skill folders.
22
+
23
+ `run` and `add` append `.skaile/logs.db*` and `.skaile/history.yaml` (with the other run-state lines) to the `.gitignore` of a project that `skaile init` did not create, and create one in a git checkout that has none; `skaile init` writes each line once. A codex `401` on a ChatGPT login reads `codex harness: the codex login was rejected (401): <cause>` and points at `codex login`; a stored API key keeps `the API key was rejected`. `check` prints the agent's `content changed since lock` line once: the skills it requires share the verdict and the fix, so they no longer repeat it, and a lock that holds an asset under two keys no longer doubles the line.
24
+
25
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - `skaile resume` runs the same harness preflight as `skaile run` for the harness and model the session recorded. A missing SDK or program, a provider the harness cannot use or a model it refuses now stops `resume` with one `✗` line per problem before the flow connector starts, and the session stays `paused` instead of becoming `failed`. `resume --dry-run` prints its plan, then the same lines, and exits 1 on a problem. The docs follow 6.7.0: tutorial 03 (the SDK-missing text of `run`, no session record), the flow node states of `concepts/flow-execution` (`not_started`, `available`, `awaiting_approval`, `awaiting_input`, `complete`, `failed`, `skipped`, `blocked`), `flow list` and library flows, `--force` of `remove`, `plugin remove`, `store` (`.mcp.json` paths, `Requires`), the `configure` samples of the types README, `runtime.md` and the types CLAUDE.md (retired in protocol 3; the README samples are type-checked by a test), and the example refs of the factory authoring skills (`@acme` placeholder publisher).
26
+
27
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - `serve --harness omp` no longer sends a fatal `omp process crashed (exit code N)` when omp exits between two turns, and the next prompt keeps the conversation. The omp harness now logs such an exit as a warning with omp's last stderr lines and the exit code, sends no `error` event, and starts omp again on the next prompt with `--session <id>` of the session it had (the id from the last `session_info`). A restart that omp cannot open on that session starts a new one instead of failing. An exit during a turn still fails that turn with the `process` error, and the next prompt resumes the session as well.
28
+
29
+ The model endpoint no longer sends a bare model id that no entry declares to the first registry entry: for an entry that declares no models the id must be listed by its upstream (`GET <base_url>/models`), else 404 `model_not_found`, and `/v1/models` lists what those upstreams answer.
30
+
31
+ `serve` refuses a project whose `skaile.yaml` has a connector that `validate` rejects (no `id`, duplicate `id`, unknown `access`): it prints the `connector_*` lines and exits 1. An `access` other than `read-write` now reads as `read-only`, so `access: rw` is no longer writable.
32
+
33
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Sources and clones: `outdated` names a source whose origin it cannot reach also when the clone has commits of its own and when the project has no lock yet (exit 1, never `All assets are up to date.`). A source clone with no usable git checkout (an empty `.git`, a `.git` whose `HEAD` is garbage) is named by `check`, `doctor` and `outdated` as `its clone is not a git checkout - run skaile source sync to clone it again`, before any publisher check, and `source sync` clones it again.
34
+
35
+ A publisher that a source repo's `skaile.manifest.yaml` names (repo level or per asset) is checked against the grammar of `source add --publisher`; `source add` refuses a bad one with one line. Any `branch:` key of a `skaile.yaml` `sources:` entry is refused with `use pin: <branch>`.
36
+
37
+ A declared `dependencies:` ref of the wrong kind gets the `It is a skill: skill:@pub/name.` hint on `check`, `doctor`, `outdated` and `install`. The recovery command of a diverged source clone is `git -C <dir> checkout -B <branch> origin/<branch>`, which also works on a detached HEAD. The "remote already registered as a library" guard compares GitHub owner and repo without case. `library init --git <remote>` refuses a remote whose HEAD names a missing branch while other branches exist.
38
+
39
+ - [#1134](https://github.com/skaile-ai/workspaces/pull/1134) [`329890d`](https://github.com/skaile-ai/workspaces/commit/329890d6ee2373d510e3fd5d584381f5a344cf4b) Thanks [@mortegro](https://github.com/mortegro)! - Store commands wait once for a dead store. `check`, `doctor`, `install`, `update` and `outdated` ask a store that does not answer once, with a 5 s limit, and every later ref of the command fails at once with the same cause, instead of waiting 10 s per locked store asset. `install --locked` never asks a store for a locked store asset (it asks only to restore a library asset whose library is not registered here).
40
+
41
+ `install` and `update` with `catalog.url: local` keep a deployed, locked store asset (`kept as locked (catalog.url is local: the store was not asked)`, exit 0) instead of `Missing:`. A store host that answers 404 for the catalog route ends with the `store unreachable` line, not `Missing:`.
42
+
43
+ A locked store asset (`origin: store`) is a pin: a registered source that holds the same ref no longer takes it on `update`, and the lock keeps `origin: store`, `store:` and the upstream url. `skaile remove <ref>` then `skaile add <ref>` switches it.
44
+
45
+ `diff <store ref>` of a clean locked store asset in a clone without `.skaile/cache/` prints `No differences.` (an edited file is named, with the advice `skaile install --locked`) instead of `Asset not found`.
46
+
47
+ In air-gapped mode (`catalog.cache_ttl: 0`) the advice for a cold cache is `skaile update --catalog-only`, and `store show` ends with `Not installable offline: set catalog.cache_ttl above 0 ...` instead of `Install: skaile add <ref>`.
48
+
3
49
  ## 6.8.1
4
50
 
5
51
  ### Patch Changes
package/dist/ai-sdk.js CHANGED
@@ -1,12 +1,12 @@
1
- import { loadMergedProviderRegistry } from './chunk-3HSLJAMJ.js';
1
+ import { loadMergedProviderRegistry } from './chunk-LYVLDGML.js';
2
2
  import { buildCredentialHeaders } from './chunk-6UP2EDFN.js';
3
- import { installCommandFor } from './chunk-TMJBEGS4.js';
3
+ import { installCommandFor } from './chunk-4KPQ6ILH.js';
4
4
  import './chunk-4GY63JU6.js';
5
- import './chunk-G7NMF5WQ.js';
5
+ import './chunk-4ROXSQEG.js';
6
6
  import './chunk-5KRMNUL4.js';
7
7
  import './chunk-C5HFK34M.js';
8
8
  import './chunk-MWXYN6NY.js';
9
- import './chunk-O7ADRMCR.js';
9
+ import './chunk-FZO64PLQ.js';
10
10
  import './chunk-L5VSIPQD.js';
11
11
  import './chunk-VTETQCR6.js';
12
12
  import './chunk-QC5BYUED.js';
@@ -15,7 +15,7 @@ import './chunk-RVRB27AN.js';
15
15
  import './chunk-V5KG6CCV.js';
16
16
  import { resolveCredential } from './chunk-VSX2G7LA.js';
17
17
  import { parseModelRef, registryEntries, isEntryEnabled, normalizeEntryBaseUrl, resolveEntryBaseUrl, normalizeAnthropicBaseUrl } from './chunk-RXGPFAMN.js';
18
- import './chunk-SGI5MRKP.js';
18
+ import './chunk-MDCI4RSG.js';
19
19
  import './chunk-C3CAXQMA.js';
20
20
  import './chunk-BOFL7GIF.js';
21
21
  import './chunk-NSBPE2FW.js';
@@ -1,10 +1,10 @@
1
- import { storeNotInstallableReason } from './chunk-62NNP7LU.js';
2
- import { getKnownKinds } from './chunk-QCR5AE5E.js';
3
- import './chunk-WFK4MUBL.js';
1
+ import { storeNotInstallableReason } from './chunk-M4G2SVXI.js';
2
+ import { getKnownKinds } from './chunk-E675QKFG.js';
3
+ import './chunk-5J6JWGY4.js';
4
4
  import './chunk-7RGTAEG6.js';
5
- import './chunk-56PIAGD6.js';
6
- import './chunk-G44FFUMA.js';
7
- import './chunk-O5Y7VMVQ.js';
5
+ import './chunk-23Q5LT4U.js';
6
+ import './chunk-GZL6RN4Z.js';
7
+ import './chunk-5KWQMCH7.js';
8
8
  import './chunk-OSABUEWA.js';
9
9
  import './chunk-F3D25RGM.js';
10
10
  import './chunk-3TXEJN4W.js';
@@ -12,19 +12,19 @@ import './chunk-ISHJITXJ.js';
12
12
  import './chunk-LNFKL23K.js';
13
13
  import './chunk-JRN5QF4C.js';
14
14
  import './chunk-NUELZWCF.js';
15
- import './chunk-KO3VSZQP.js';
15
+ import './chunk-NDBHEOIA.js';
16
16
  import './chunk-PKE3PXOK.js';
17
- import './chunk-KTBKW2FI.js';
17
+ import './chunk-7QYBKUAS.js';
18
18
  import './chunk-UQ6LFBPZ.js';
19
- import './chunk-4CD2R4MJ.js';
20
- import './chunk-VT6G5AJV.js';
21
- import './chunk-TMJBEGS4.js';
19
+ import './chunk-QBUJTVMY.js';
20
+ import './chunk-WS3BOCAT.js';
21
+ import './chunk-4KPQ6ILH.js';
22
22
  import './chunk-4GY63JU6.js';
23
- import { factoryAssetRoots } from './chunk-G7NMF5WQ.js';
23
+ import { factoryAssetRoots } from './chunk-4ROXSQEG.js';
24
24
  import './chunk-5KRMNUL4.js';
25
25
  import './chunk-C5HFK34M.js';
26
26
  import './chunk-MWXYN6NY.js';
27
- import { scanRepo } from './chunk-O7ADRMCR.js';
27
+ import { scanRepo } from './chunk-FZO64PLQ.js';
28
28
  import './chunk-L5VSIPQD.js';
29
29
  import './chunk-VTETQCR6.js';
30
30
  import './chunk-QC5BYUED.js';
@@ -33,7 +33,7 @@ import './chunk-RVRB27AN.js';
33
33
  import './chunk-V5KG6CCV.js';
34
34
  import './chunk-VSX2G7LA.js';
35
35
  import './chunk-RXGPFAMN.js';
36
- import './chunk-SGI5MRKP.js';
36
+ import './chunk-MDCI4RSG.js';
37
37
  import './chunk-C3CAXQMA.js';
38
38
  import './chunk-BOFL7GIF.js';
39
39
  import './chunk-NSBPE2FW.js';
@@ -60,8 +60,8 @@ function libraryEntryOf(asset) {
60
60
  async function libraryAssets() {
61
61
  const notes = [];
62
62
  try {
63
- const { openLibraryManager } = await import('./open-library-Q7QZJY5D.js');
64
- const { getKindRegistry } = await import('./open-registry-RZW2AFD6.js');
63
+ const { openLibraryManager } = await import('./open-library-A5OB72FD.js');
64
+ const { getKindRegistry } = await import('./open-registry-BHBHQMBA.js');
65
65
  const { scanAuthoringLibraries } = await import('./library/index.js');
66
66
  const { library: index, close } = await openLibraryManager();
67
67
  try {
@@ -94,7 +94,7 @@ async function libraryAssets() {
94
94
  async function storeAssets(projectDir) {
95
95
  const notes = [];
96
96
  try {
97
- const { resolveCatalogSource } = await import('./open-library-Q7QZJY5D.js');
97
+ const { resolveCatalogSource } = await import('./open-library-A5OB72FD.js');
98
98
  const { source, close } = await resolveCatalogSource({ projectDir });
99
99
  try {
100
100
  const assets = (await source.listAssets()).filter(
@@ -175,5 +175,5 @@ async function gatherAssetFeeds(am, projectDir) {
175
175
  }
176
176
 
177
177
  export { gatherAssetFeeds };
178
- //# sourceMappingURL=asset-feeds-R75MH2WW.js.map
179
- //# sourceMappingURL=asset-feeds-R75MH2WW.js.map
178
+ //# sourceMappingURL=asset-feeds-JWRIWLVX.js.map
179
+ //# sourceMappingURL=asset-feeds-JWRIWLVX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-R75MH2WW.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex`, read through\n * `scanAuthoringLibraries` (`@skaile/workspaces/library`): the same scan\n * `library index` / `search --local` use, so publishers and refs match them\n * (per-asset `publisher_overrides` honoured), `dev_paths` assets are left out,\n * and a library that fails to scan becomes one note while the rest stay listed.\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n parseRequires,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\nimport { storeNotInstallableReason } from \"./store-addable.ts\";\nimport type { DiscoveredAsset } from \"@skaile/workspaces/discovery\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Map one discovered library asset to the `CatalogEntry` the manage rows read.\n * `publisher` is the bare per-asset publisher (what `search --local` prints),\n * `source` the manifest path. `repo` is left unset: it only feeds the Sources-tree\n * org grouping. `requires` / `dependencies` come from the manifest the way the\n * scanner fills them — string `requires:` refs parsed to `{kind, name}`, a bundle's\n * string `dependencies:` list verbatim.\n */\nfunction libraryEntryOf(asset: DiscoveredAsset): CatalogEntry {\n const { manifest } = asset;\n const nested = (manifest.metadata as Record<string, unknown> | undefined)?.requires;\n const rawRequires = manifest.requires ?? nested;\n const requireRefs =\n typeof rawRequires === \"string\"\n ? rawRequires\n : Array.isArray(rawRequires)\n ? rawRequires.filter((r): r is string => typeof r === \"string\")\n : undefined;\n const deps = manifest.dependencies;\n return {\n name: asset.name,\n kind: asset.kind as AssetKind,\n description: typeof manifest.description === \"string\" ? manifest.description : \"\",\n source: asset.manifestPath,\n publisher: asset.publisher,\n ...(asset.plugin ? { plugin: asset.plugin } : {}),\n version: asset.version,\n requires: requireRefs === undefined ? [] : parseRequires({ requires: requireRefs }),\n dependencies:\n asset.kind === \"bundle\" && Array.isArray(deps)\n ? deps.filter((d): d is string => typeof d === \"string\" && d.length > 0)\n : [],\n };\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache) through\n * `scanAuthoringLibraries`, grouped under the bare library name\n * (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * comes from `DiscoveredAsset.plugin`. A library whose scan fails becomes one\n * `FeedNote`; the outer `catch` covers only opening the index.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n // Lazy: the library subpath pulls in SQLite, which the other feeds never need.\n const { openLibraryManager } = await import(\"./open-library.ts\");\n const { getKindRegistry } = await import(\"./open-registry.ts\");\n const { scanAuthoringLibraries } = await import(\"@skaile/workspaces/library\");\n const { library: index, close } = await openLibraryManager();\n try {\n const entries: OriginEntry[] = [];\n for (const scan of await scanAuthoringLibraries(index, getKindRegistry())) {\n if (scan.error !== undefined) {\n notes.push({ feed: \"libraries\", message: `${scan.library.name}: ${scan.error}` });\n continue;\n }\n for (const asset of scan.assets) {\n entries.push({\n origin: \"library\",\n entry: libraryEntryOf(asset),\n group: scan.library.name,\n });\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n // The store lists only what `skaile add` can install (see store-addable.ts).\n const assets = (await source.listAssets()).filter(\n (a) => storeNotInstallableReason(a) === undefined,\n );\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
1
+ {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-JWRIWLVX.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex`, read through\n * `scanAuthoringLibraries` (`@skaile/workspaces/library`): the same scan\n * `library index` / `search --local` use, so publishers and refs match them\n * (per-asset `publisher_overrides` honoured), `dev_paths` assets are left out,\n * and a library that fails to scan becomes one note while the rest stay listed.\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n parseRequires,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\nimport { storeNotInstallableReason } from \"./store-addable.ts\";\nimport type { DiscoveredAsset } from \"@skaile/workspaces/discovery\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Map one discovered library asset to the `CatalogEntry` the manage rows read.\n * `publisher` is the bare per-asset publisher (what `search --local` prints),\n * `source` the manifest path. `repo` is left unset: it only feeds the Sources-tree\n * org grouping. `requires` / `dependencies` come from the manifest the way the\n * scanner fills them — string `requires:` refs parsed to `{kind, name}`, a bundle's\n * string `dependencies:` list verbatim.\n */\nfunction libraryEntryOf(asset: DiscoveredAsset): CatalogEntry {\n const { manifest } = asset;\n const nested = (manifest.metadata as Record<string, unknown> | undefined)?.requires;\n const rawRequires = manifest.requires ?? nested;\n const requireRefs =\n typeof rawRequires === \"string\"\n ? rawRequires\n : Array.isArray(rawRequires)\n ? rawRequires.filter((r): r is string => typeof r === \"string\")\n : undefined;\n const deps = manifest.dependencies;\n return {\n name: asset.name,\n kind: asset.kind as AssetKind,\n description: typeof manifest.description === \"string\" ? manifest.description : \"\",\n source: asset.manifestPath,\n publisher: asset.publisher,\n ...(asset.plugin ? { plugin: asset.plugin } : {}),\n version: asset.version,\n requires: requireRefs === undefined ? [] : parseRequires({ requires: requireRefs }),\n dependencies:\n asset.kind === \"bundle\" && Array.isArray(deps)\n ? deps.filter((d): d is string => typeof d === \"string\" && d.length > 0)\n : [],\n };\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache) through\n * `scanAuthoringLibraries`, grouped under the bare library name\n * (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * comes from `DiscoveredAsset.plugin`. A library whose scan fails becomes one\n * `FeedNote`; the outer `catch` covers only opening the index.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n // Lazy: the library subpath pulls in SQLite, which the other feeds never need.\n const { openLibraryManager } = await import(\"./open-library.ts\");\n const { getKindRegistry } = await import(\"./open-registry.ts\");\n const { scanAuthoringLibraries } = await import(\"@skaile/workspaces/library\");\n const { library: index, close } = await openLibraryManager();\n try {\n const entries: OriginEntry[] = [];\n for (const scan of await scanAuthoringLibraries(index, getKindRegistry())) {\n if (scan.error !== undefined) {\n notes.push({ feed: \"libraries\", message: `${scan.library.name}: ${scan.error}` });\n continue;\n }\n for (const asset of scan.assets) {\n entries.push({\n origin: \"library\",\n entry: libraryEntryOf(asset),\n group: scan.library.name,\n });\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n // The store lists only what `skaile add` can install (see store-addable.ts).\n const assets = (await source.listAssets()).filter(\n (a) => storeNotInstallableReason(a) === undefined,\n );\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-USSP43U3.js';
2
- import '../chunk-TMJBEGS4.js';
2
+ import '../chunk-4KPQ6ILH.js';
3
3
  import '../chunk-4GY63JU6.js';
4
- import '../chunk-G7NMF5WQ.js';
4
+ import '../chunk-4ROXSQEG.js';
5
5
  import '../chunk-5KRMNUL4.js';
6
6
  import '../chunk-C5HFK34M.js';
7
7
  import '../chunk-MWXYN6NY.js';
8
- import '../chunk-O7ADRMCR.js';
8
+ import '../chunk-FZO64PLQ.js';
9
9
  import '../chunk-L5VSIPQD.js';
10
10
  import '../chunk-VTETQCR6.js';
11
11
  import '../chunk-QC5BYUED.js';
@@ -14,7 +14,7 @@ import '../chunk-RVRB27AN.js';
14
14
  import '../chunk-V5KG6CCV.js';
15
15
  import '../chunk-VSX2G7LA.js';
16
16
  import '../chunk-RXGPFAMN.js';
17
- import '../chunk-SGI5MRKP.js';
17
+ import '../chunk-MDCI4RSG.js';
18
18
  import '../chunk-C3CAXQMA.js';
19
19
  import '../chunk-BOFL7GIF.js';
20
20
  import '../chunk-NSBPE2FW.js';
@@ -1,4 +1,22 @@
1
- export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
1
+ export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-7QYBKUAS.js';
2
+ import '../chunk-4KPQ6ILH.js';
3
+ import '../chunk-4GY63JU6.js';
4
+ import '../chunk-4ROXSQEG.js';
5
+ import '../chunk-5KRMNUL4.js';
6
+ import '../chunk-C5HFK34M.js';
7
+ import '../chunk-MWXYN6NY.js';
8
+ import '../chunk-FZO64PLQ.js';
9
+ import '../chunk-L5VSIPQD.js';
10
+ import '../chunk-VTETQCR6.js';
11
+ import '../chunk-QC5BYUED.js';
12
+ import '../chunk-GNUA7XT2.js';
13
+ import '../chunk-RVRB27AN.js';
14
+ import '../chunk-V5KG6CCV.js';
15
+ import '../chunk-VSX2G7LA.js';
16
+ import '../chunk-RXGPFAMN.js';
17
+ import '../chunk-MDCI4RSG.js';
18
+ import '../chunk-C3CAXQMA.js';
19
+ import '../chunk-BOFL7GIF.js';
2
20
  import '../chunk-NSBPE2FW.js';
3
21
  //# sourceMappingURL=history.js.map
4
22
  //# sourceMappingURL=history.js.map
@@ -1,6 +1,6 @@
1
- export { AssetManager, LibraryEntryError, MissingManifestError, installAgentInstances, labelDiffHeaders, mcpNotRunnableReason, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, setLibraryAssetCheck, setRenamedEntryLookup, softDepName } from '../chunk-56PIAGD6.js';
2
- import '../chunk-G44FFUMA.js';
3
- import '../chunk-O5Y7VMVQ.js';
1
+ export { AssetManager, LibraryEntryError, MissingManifestError, installAgentInstances, labelDiffHeaders, mcpNotRunnableReason, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, setLibraryAssetCheck, setRenamedEntryLookup, softDepName } from '../chunk-23Q5LT4U.js';
2
+ import '../chunk-GZL6RN4Z.js';
3
+ import '../chunk-5KWQMCH7.js';
4
4
  import '../chunk-OSABUEWA.js';
5
5
  import '../chunk-F3D25RGM.js';
6
6
  import '../chunk-3TXEJN4W.js';
@@ -8,19 +8,19 @@ import '../chunk-ISHJITXJ.js';
8
8
  import '../chunk-LNFKL23K.js';
9
9
  import '../chunk-JRN5QF4C.js';
10
10
  import '../chunk-NUELZWCF.js';
11
- export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-KO3VSZQP.js';
11
+ export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-NDBHEOIA.js';
12
12
  export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-PKE3PXOK.js';
13
- export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
13
+ export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-7QYBKUAS.js';
14
14
  import '../chunk-UQ6LFBPZ.js';
15
- export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-4CD2R4MJ.js';
16
- import '../chunk-VT6G5AJV.js';
17
- export { FACTORY_SOURCE_URL } from '../chunk-TMJBEGS4.js';
15
+ export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-QBUJTVMY.js';
16
+ import '../chunk-WS3BOCAT.js';
17
+ export { FACTORY_SOURCE_URL } from '../chunk-4KPQ6ILH.js';
18
18
  import '../chunk-4GY63JU6.js';
19
- import '../chunk-G7NMF5WQ.js';
19
+ import '../chunk-4ROXSQEG.js';
20
20
  import '../chunk-5KRMNUL4.js';
21
21
  import '../chunk-C5HFK34M.js';
22
22
  import '../chunk-MWXYN6NY.js';
23
- import '../chunk-O7ADRMCR.js';
23
+ import '../chunk-FZO64PLQ.js';
24
24
  import '../chunk-L5VSIPQD.js';
25
25
  import '../chunk-VTETQCR6.js';
26
26
  import '../chunk-QC5BYUED.js';
@@ -29,7 +29,7 @@ import '../chunk-RVRB27AN.js';
29
29
  import '../chunk-V5KG6CCV.js';
30
30
  import '../chunk-VSX2G7LA.js';
31
31
  import '../chunk-RXGPFAMN.js';
32
- import '../chunk-SGI5MRKP.js';
32
+ import '../chunk-MDCI4RSG.js';
33
33
  import '../chunk-C3CAXQMA.js';
34
34
  import '../chunk-BOFL7GIF.js';
35
35
  import '../chunk-NSBPE2FW.js';
@@ -1,14 +1,14 @@
1
- export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, cachedComposedFiles, canonicalEntryRef, composedDriftRefs, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, entriesNeedingDeploy, installTargetOf, readKeptLegacyCopies, removeAsset, sourceComposedFiles, writeKeptLegacyCopies } from '../chunk-KO3VSZQP.js';
1
+ export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, cachedComposedFiles, canonicalEntryRef, composedDriftRefs, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, entriesNeedingDeploy, installTargetOf, readKeptLegacyCopies, removeAsset, sourceComposedFiles, writeKeptLegacyCopies } from '../chunk-NDBHEOIA.js';
2
2
  import '../chunk-PKE3PXOK.js';
3
- import '../chunk-4CD2R4MJ.js';
4
- import '../chunk-VT6G5AJV.js';
5
- import '../chunk-TMJBEGS4.js';
3
+ import '../chunk-QBUJTVMY.js';
4
+ import '../chunk-WS3BOCAT.js';
5
+ import '../chunk-4KPQ6ILH.js';
6
6
  import '../chunk-4GY63JU6.js';
7
- import '../chunk-G7NMF5WQ.js';
7
+ import '../chunk-4ROXSQEG.js';
8
8
  import '../chunk-5KRMNUL4.js';
9
9
  import '../chunk-C5HFK34M.js';
10
10
  import '../chunk-MWXYN6NY.js';
11
- import '../chunk-O7ADRMCR.js';
11
+ import '../chunk-FZO64PLQ.js';
12
12
  import '../chunk-L5VSIPQD.js';
13
13
  import '../chunk-VTETQCR6.js';
14
14
  import '../chunk-QC5BYUED.js';
@@ -17,7 +17,7 @@ import '../chunk-RVRB27AN.js';
17
17
  import '../chunk-V5KG6CCV.js';
18
18
  import '../chunk-VSX2G7LA.js';
19
19
  import '../chunk-RXGPFAMN.js';
20
- import '../chunk-SGI5MRKP.js';
20
+ import '../chunk-MDCI4RSG.js';
21
21
  import '../chunk-C3CAXQMA.js';
22
22
  import '../chunk-BOFL7GIF.js';
23
23
  import '../chunk-NSBPE2FW.js';
@@ -1,12 +1,12 @@
1
- export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, agentRenderFiles, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-4CD2R4MJ.js';
2
- import '../chunk-VT6G5AJV.js';
3
- import '../chunk-TMJBEGS4.js';
1
+ export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, agentRenderFiles, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-QBUJTVMY.js';
2
+ import '../chunk-WS3BOCAT.js';
3
+ import '../chunk-4KPQ6ILH.js';
4
4
  import '../chunk-4GY63JU6.js';
5
- import '../chunk-G7NMF5WQ.js';
5
+ import '../chunk-4ROXSQEG.js';
6
6
  import '../chunk-5KRMNUL4.js';
7
7
  import '../chunk-C5HFK34M.js';
8
8
  import '../chunk-MWXYN6NY.js';
9
- import '../chunk-O7ADRMCR.js';
9
+ import '../chunk-FZO64PLQ.js';
10
10
  import '../chunk-L5VSIPQD.js';
11
11
  import '../chunk-VTETQCR6.js';
12
12
  import '../chunk-QC5BYUED.js';
@@ -15,7 +15,7 @@ import '../chunk-RVRB27AN.js';
15
15
  import '../chunk-V5KG6CCV.js';
16
16
  import '../chunk-VSX2G7LA.js';
17
17
  import '../chunk-RXGPFAMN.js';
18
- import '../chunk-SGI5MRKP.js';
18
+ import '../chunk-MDCI4RSG.js';
19
19
  import '../chunk-C3CAXQMA.js';
20
20
  import '../chunk-BOFL7GIF.js';
21
21
  import '../chunk-NSBPE2FW.js';
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC/B;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAiB9D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAO3E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,EAAE,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAIrD"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC/B;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAiB9D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAQ3E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,EAAE,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAIrD"}
@@ -50,6 +50,11 @@ export interface RenamedLibraryEntry {
50
50
  publisher?: string;
51
51
  file: string;
52
52
  now: string;
53
+ /**
54
+ * The sentence that fixes the entry when `library index` cannot rename it (a flow whose `id:`
55
+ * no longer matches its file name: index drops the entry instead), `undefined` when index renames it.
56
+ */
57
+ fileFix?: string;
53
58
  }
54
59
  /** The {@link RenamedLibraryEntry}s of the library at `libraryPath`. Registered by the host, as {@link LibraryAssetCheck}. */
55
60
  export type RenamedEntryLookup = (libraryPath: string) => RenamedLibraryEntry[];
@@ -860,6 +865,8 @@ export declare class AssetManager {
860
865
  private readonly verboseCollisions;
861
866
  /** Store URLs whose failed version lookup was already reported (one warning per URL). */
862
867
  private readonly warnedStoreVersionLookups;
868
+ /** Whether each store answers: one command asks a dead store once ({@link StoreProbe}). */
869
+ private readonly storeProbe;
863
870
  /** Stores a lookup could not reach (store URL -> one line why); `add` reports them instead of "not found". */
864
871
  private readonly storeFailures;
865
872
  /** The agent `add` is about to bind to an instance: its deploy writes no file named after the asset. */
@@ -1087,7 +1094,7 @@ export declare class AssetManager {
1087
1094
  */
1088
1095
  private renderAgentInstances;
1089
1096
  private loadConfig;
1090
- /** Build provenance-index clones from the resolved source declarations. */
1097
+ /** Build provenance-index clones from the resolved source declarations; a clone folder with no git checkout goes to `onSourceError`. */
1091
1098
  private buildClones;
1092
1099
  /**
1093
1100
  * Bridge a resolved {@link ProvenanceCandidate} to a {@link CatalogEntry} for
@@ -1492,6 +1499,14 @@ export declare class AssetManager {
1492
1499
  * machine-local; the remote is what a clone shares.
1493
1500
  */
1494
1501
  private lockedLibrary;
1502
+ /**
1503
+ * Why `install --locked` cannot restore a locked library asset from its library: the library
1504
+ * holds another version than the lock (`library "x" is at 0.1.1, locked 0.1.0`) or the locked
1505
+ * version with other bytes (`library "x" content changed since lock`). Only `update` moves
1506
+ * the lock to it. `undefined` when the library is not here, no longer holds the asset, or
1507
+ * still holds the locked files (the other gaps say what is wrong then).
1508
+ */
1509
+ private libraryAheadOfLock;
1495
1510
  /** The registered library whose files for `asset` hash to `sha256` (the locked bytes), if any. */
1496
1511
  private libraryHoldingLockedBytes;
1497
1512
  /** On-disk root of the library `origin` names; `null` unless {@link lockedLibrary} says `ok`. */
@@ -1548,6 +1563,16 @@ export declare class AssetManager {
1548
1563
  * (`update`, `install`, `add`; OQ15, p1490).
1549
1564
  */
1550
1565
  private lockedOriginVersions;
1566
+ /**
1567
+ * The locked assets whose entry says `origin: store`, by identity -> the store URL. A store
1568
+ * origin is a pin: no source that holds the same ref takes the asset until `skaile remove`
1569
+ * and `skaile add` move it (`update`, `install`, `add`). A declared ref whose `#pin` the
1570
+ * locked version does not satisfy is the user asking for another version: it is not pinned.
1571
+ *
1572
+ * @param declared - The `dependencies:` refs of `skaile.yaml`.
1573
+ * @param asked - Refs being resolved now.
1574
+ */
1575
+ private storePinnedIdentities;
1551
1576
  /**
1552
1577
  * Say which registered library holds a ref the lock keeps on its source or the store: the
1553
1578
  * candidate that lost, with the way to switch (p1490). Printed once per `add`.
@@ -1677,6 +1702,12 @@ export declare class AssetManager {
1677
1702
  /** Deploy over a folder no lock entry owns (a hand-made skill of the same name) instead of refusing. */
1678
1703
  force?: boolean;
1679
1704
  }): Promise<InstallResult>;
1705
+ /**
1706
+ * Why `install` asks no store, or `undefined` when it does: `--no-catalog`, or `catalog.url:
1707
+ * local` with no `stores:` entry in `skaile.yaml`. A locked store asset is then kept as it is,
1708
+ * as for an air-gapped client.
1709
+ */
1710
+ private whyNoStoreAsked;
1680
1711
  /**
1681
1712
  * The kept refs whose locked copy came from a store that `install` did not (or could not)
1682
1713
  * ask, and whose deployed copy is still there: nothing says the copy is wrong, so it stays
@@ -2188,6 +2219,12 @@ export declare class AssetManager {
2188
2219
  * @returns Shallow {@link CatalogEntry} objects (description and version will be empty).
2189
2220
  */
2190
2221
  listDeployed(kind?: string): CatalogEntry[];
2222
+ /**
2223
+ * Absolute path → sha256 of every native agent file the lock records under `rendered:`. A
2224
+ * `harness set` rewrites the lock for the new harness, so a caller that cleans up afterwards
2225
+ * reads this first and hands it to {@link AssetManager.listStaleHarnessCopies}.
2226
+ */
2227
+ lockedRenderedHashes(): Map<string, string>;
2191
2228
  /**
2192
2229
  * Tracked assets (`skaile.lock.yaml` or declared in `skaile.yaml`) whose copy
2193
2230
  * still sits in the project dirs of another harness (`.claude/…`, `.omp/…`,
@@ -2198,9 +2235,14 @@ export declare class AssetManager {
2198
2235
  * Read-only: nothing is deleted. Empty for global mode and for kinds whose
2199
2236
  * dir is shared with the active target (flows).
2200
2237
  *
2238
+ * @param opts.renderedBefore - {@link AssetManager.lockedRenderedHashes} of the lock as it was
2239
+ * before the move to this harness. An agent copy counts as skaile's only when it matches a
2240
+ * hash the lock (now or then) recorded for its path.
2201
2241
  * @returns One {@link StaleHarnessCopy} per stale copy, sorted by harness, kind, then name.
2202
2242
  */
2203
- listStaleHarnessCopies(): StaleHarnessCopy[];
2243
+ listStaleHarnessCopies(opts?: {
2244
+ renderedBefore?: ReadonlyMap<string, string>;
2245
+ }): StaleHarnessCopy[];
2204
2246
  /**
2205
2247
  * @deprecated Use {@link AssetManager.listStaleHarnessCopies}, which covers every
2206
2248
  * other harness folder. This returns only its `.claude/` rows (the old default
@@ -2226,7 +2268,8 @@ export declare class AssetManager {
2226
2268
  * set is walked, so a lock entry with no matching `dependencies:` ref never shows.
2227
2269
  *
2228
2270
  * @param kind - Filter by asset kind. Omit to return all kinds.
2229
- * @returns One {@link DeclaredAsset} per declared dep (after the optional kind filter).
2271
+ * @returns One {@link DeclaredAsset} per declared dep (after the optional kind filter), plus
2272
+ * one per locked agent that only an agent instance of `skaile.yaml` binds.
2230
2273
  * @throws {MissingManifestError} when the project has no `skaile.yaml`.
2231
2274
  * @throws {Error} with a `migrate-skaile-manifest` hint on legacy `repositories:` / `ai_resources:` keys.
2232
2275
  */
@@ -2425,6 +2468,15 @@ export declare class AssetManager {
2425
2468
  * @param want - Kind, name and optional publisher of the asset.
2426
2469
  */
2427
2470
  private lockedSourceEntry;
2471
+ /** Whether the lock holds `want` as a store asset (`origin: store`, no library). */
2472
+ private isStorePinnedRef;
2473
+ /**
2474
+ * {@link AssetManager.diff} for a locked source or store asset whose bytes are not on disk:
2475
+ * the deployed copy against the per-file hashes the lock records. No text to show without the
2476
+ * locked bytes, so an edited file is named and the way to fetch them is. `null` when the lock
2477
+ * has no such entry or the kind is rendered (an agent), not copied.
2478
+ */
2479
+ private diffAgainstLock;
2428
2480
  /**
2429
2481
  * Produce a unified diff from the deployed asset to its catalog source: `-` lines
2430
2482
  * are in the deployed copy only (local edits `update` would overwrite), `+` lines
@@ -2742,6 +2794,11 @@ export declare class AssetManager {
2742
2794
  * @param named - `kind:name` identities already reported; they are skipped.
2743
2795
  */
2744
2796
  private undeployedLockGaps;
2797
+ /**
2798
+ * {@link declaredNoHolderReason} plus, when the name exists under another kind, the same
2799
+ * `It is a skill: skill:@pub/name.` tail `add` and `update` end their not-found line with.
2800
+ */
2801
+ private declaredNoHolderLine;
2745
2802
  /**
2746
2803
  * The `skaile.yaml` side of {@link AssetManager.projectState}: declared refs that do not
2747
2804
  * parse, never resolved into the lock, are not materialized, or contradict a `#pin`.
@@ -2872,6 +2929,11 @@ export declare class AssetManager {
2872
2929
  * @returns `true` when a declaration was removed.
2873
2930
  */
2874
2931
  private removeDependencyFromConfig;
2932
+ /**
2933
+ * Whether `target` is an agent that an agent instance of `skaile.yaml` binds and no
2934
+ * `dependencies:` line names. Project mode only.
2935
+ */
2936
+ private boundOnlyByInstance;
2875
2937
  /**
2876
2938
  * The locked agents an agent instance binds (`agents.<id>.ref`, `agent.definition`) that
2877
2939
  * `declared` does not name, as version-less `agent:@publisher/name`. An agent no lock entry