@skaile/workspaces 6.9.0 → 6.10.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 (345) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/ai-sdk.js +8 -8
  3. package/dist/{asset-feeds-JWRIWLVX.js → asset-feeds-UG3PG423.js} +22 -22
  4. package/dist/{asset-feeds-JWRIWLVX.js.map → asset-feeds-UG3PG423.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +8 -8
  6. package/dist/asset-manager/history.js +8 -8
  7. package/dist/asset-manager/index.js +14 -14
  8. package/dist/asset-manager/installer.js +9 -9
  9. package/dist/asset-manager/renderers.js +8 -8
  10. package/dist/asset-manager/src/harness-switch-state.d.ts +30 -0
  11. package/dist/asset-manager/src/harness-switch-state.d.ts.map +1 -0
  12. package/dist/asset-manager/src/index.d.ts +49 -12
  13. package/dist/asset-manager/src/index.d.ts.map +1 -1
  14. package/dist/asset-manager/src/mcp-config.d.ts +6 -0
  15. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  16. package/dist/bridge/codex-app-server.js +1 -2
  17. package/dist/bridge/harnesses/claude-sdk.js +11 -11
  18. package/dist/bridge/harnesses/codex.js +15 -1926
  19. package/dist/bridge/harnesses/codex.js.map +1 -1
  20. package/dist/bridge/harnesses/continue.js +11 -11
  21. package/dist/bridge/harnesses/echo.js +3 -3
  22. package/dist/bridge/harnesses/gemini.js +6 -6
  23. package/dist/bridge/harnesses/goose.js +11 -11
  24. package/dist/bridge/harnesses/omp.js +61 -9
  25. package/dist/bridge/harnesses/omp.js.map +1 -1
  26. package/dist/bridge/harnesses/opencode.js +11 -11
  27. package/dist/bridge/harnesses/qwen.js +6 -6
  28. package/dist/bridge/index.js +17 -16
  29. package/dist/bridge/src/harness-model-check.d.ts +5 -4
  30. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  31. package/dist/bridge/src/harnesses/codex.d.ts +13 -0
  32. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  33. package/dist/bridge/src/harnesses/omp.d.ts +22 -0
  34. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  35. package/dist/bridge/src/index.d.ts +1 -0
  36. package/dist/bridge/src/index.d.ts.map +1 -1
  37. package/dist/{chunk-XPKUFOS3.js → chunk-2D6HZAO5.js} +8 -8
  38. package/dist/{chunk-XPKUFOS3.js.map → chunk-2D6HZAO5.js.map} +1 -1
  39. package/dist/chunk-2MUUPRIG.js +688 -0
  40. package/dist/chunk-2MUUPRIG.js.map +1 -0
  41. package/dist/{chunk-TMQFOJ6F.js → chunk-2PVYDAFN.js} +3 -3
  42. package/dist/{chunk-TMQFOJ6F.js.map → chunk-2PVYDAFN.js.map} +1 -1
  43. package/dist/{chunk-YGT3CGPD.js → chunk-2U67XYZM.js} +3 -3
  44. package/dist/{chunk-YGT3CGPD.js.map → chunk-2U67XYZM.js.map} +1 -1
  45. package/dist/{chunk-5NTB64PW.js → chunk-375HN3FD.js} +18 -14
  46. package/dist/chunk-375HN3FD.js.map +1 -0
  47. package/dist/{chunk-23Q5LT4U.js → chunk-4I4SBOCS.js} +345 -88
  48. package/dist/chunk-4I4SBOCS.js.map +1 -0
  49. package/dist/{chunk-WPLZGT5Z.js → chunk-4Z4RULWQ.js} +59 -31
  50. package/dist/chunk-4Z4RULWQ.js.map +1 -0
  51. package/dist/{chunk-72BDCGBB.js → chunk-5JBMYZNA.js} +3 -3
  52. package/dist/{chunk-72BDCGBB.js.map → chunk-5JBMYZNA.js.map} +1 -1
  53. package/dist/{chunk-3EPRTMXY.js → chunk-5KQFR4D7.js} +6 -6
  54. package/dist/{chunk-3EPRTMXY.js.map → chunk-5KQFR4D7.js.map} +1 -1
  55. package/dist/{chunk-KNY356I3.js → chunk-5KSGZP3E.js} +11 -4
  56. package/dist/chunk-5KSGZP3E.js.map +1 -0
  57. package/dist/{chunk-DZRN3SNG.js → chunk-5P7LTPBR.js} +5 -5
  58. package/dist/{chunk-DZRN3SNG.js.map → chunk-5P7LTPBR.js.map} +1 -1
  59. package/dist/{chunk-PTJZCOBH.js → chunk-6O7VDKX3.js} +2 -2
  60. package/dist/{chunk-PTJZCOBH.js.map → chunk-6O7VDKX3.js.map} +1 -1
  61. package/dist/{chunk-B2DGCYVC.js → chunk-7DUOKE73.js} +27 -33
  62. package/dist/chunk-7DUOKE73.js.map +1 -0
  63. package/dist/{chunk-V5KG6CCV.js → chunk-7HRZACI4.js} +7 -2
  64. package/dist/chunk-7HRZACI4.js.map +1 -0
  65. package/dist/{chunk-U3FI4DVT.js → chunk-7K73MCI6.js} +7 -5
  66. package/dist/chunk-7K73MCI6.js.map +1 -0
  67. package/dist/{chunk-SE6OL7Y5.js → chunk-BCID52M5.js} +6 -6
  68. package/dist/{chunk-SE6OL7Y5.js.map → chunk-BCID52M5.js.map} +1 -1
  69. package/dist/{chunk-FZO64PLQ.js → chunk-BNLXZXZN.js} +81 -8
  70. package/dist/chunk-BNLXZXZN.js.map +1 -0
  71. package/dist/{chunk-O3FYOS64.js → chunk-C5UKYTTD.js} +13 -23
  72. package/dist/chunk-C5UKYTTD.js.map +1 -0
  73. package/dist/{chunk-LYVLDGML.js → chunk-CG63XGVV.js} +3 -3
  74. package/dist/{chunk-LYVLDGML.js.map → chunk-CG63XGVV.js.map} +1 -1
  75. package/dist/{chunk-4ROXSQEG.js → chunk-CJO3XKO7.js} +4 -4
  76. package/dist/{chunk-4ROXSQEG.js.map → chunk-CJO3XKO7.js.map} +1 -1
  77. package/dist/{chunk-OSABUEWA.js → chunk-CVUMZTNO.js} +4 -4
  78. package/dist/{chunk-OSABUEWA.js.map → chunk-CVUMZTNO.js.map} +1 -1
  79. package/dist/{chunk-E675QKFG.js → chunk-DOMRBOJZ.js} +5 -5
  80. package/dist/{chunk-E675QKFG.js.map → chunk-DOMRBOJZ.js.map} +1 -1
  81. package/dist/{chunk-GTAHU4N4.js → chunk-EB2LKPI6.js} +4 -4
  82. package/dist/{chunk-GTAHU4N4.js.map → chunk-EB2LKPI6.js.map} +1 -1
  83. package/dist/{chunk-GZL6RN4Z.js → chunk-FXBKBOI5.js} +169 -49
  84. package/dist/chunk-FXBKBOI5.js.map +1 -0
  85. package/dist/{chunk-AERQFD6T.js → chunk-GA4GUDTL.js} +4 -4
  86. package/dist/{chunk-AERQFD6T.js.map → chunk-GA4GUDTL.js.map} +1 -1
  87. package/dist/{chunk-NJVHGS7X.js → chunk-HE3TZYNG.js} +4 -4
  88. package/dist/{chunk-NJVHGS7X.js.map → chunk-HE3TZYNG.js.map} +1 -1
  89. package/dist/chunk-HLFLET7S.js +2443 -0
  90. package/dist/chunk-HLFLET7S.js.map +1 -0
  91. package/dist/{chunk-Y2BQWZXT.js → chunk-HQUF6O4B.js} +27 -56
  92. package/dist/chunk-HQUF6O4B.js.map +1 -0
  93. package/dist/{chunk-T5EIWWEJ.js → chunk-IMO4EHND.js} +5 -5
  94. package/dist/{chunk-T5EIWWEJ.js.map → chunk-IMO4EHND.js.map} +1 -1
  95. package/dist/{chunk-TUOHA6BM.js → chunk-IOXFT5D7.js} +3 -3
  96. package/dist/{chunk-TUOHA6BM.js.map → chunk-IOXFT5D7.js.map} +1 -1
  97. package/dist/{chunk-5AQLCRR7.js → chunk-JDZUQFN7.js} +4 -4
  98. package/dist/{chunk-5AQLCRR7.js.map → chunk-JDZUQFN7.js.map} +1 -1
  99. package/dist/{chunk-SQMDFM4N.js → chunk-KE5HDORU.js} +2 -2
  100. package/dist/{chunk-SQMDFM4N.js.map → chunk-KE5HDORU.js.map} +1 -1
  101. package/dist/{chunk-PTJTOPE5.js → chunk-KOI7QFDH.js} +3 -3
  102. package/dist/{chunk-PTJTOPE5.js.map → chunk-KOI7QFDH.js.map} +1 -1
  103. package/dist/{chunk-NDBHEOIA.js → chunk-KRL53RZB.js} +8 -8
  104. package/dist/{chunk-NDBHEOIA.js.map → chunk-KRL53RZB.js.map} +1 -1
  105. package/dist/{chunk-7QYBKUAS.js → chunk-LKBRBVVS.js} +3 -3
  106. package/dist/{chunk-7QYBKUAS.js.map → chunk-LKBRBVVS.js.map} +1 -1
  107. package/dist/{chunk-USSP43U3.js → chunk-LQWOU7S2.js} +3 -3
  108. package/dist/{chunk-USSP43U3.js.map → chunk-LQWOU7S2.js.map} +1 -1
  109. package/dist/{chunk-4KPQ6ILH.js → chunk-MEU2HHGV.js} +18 -9
  110. package/dist/chunk-MEU2HHGV.js.map +1 -0
  111. package/dist/{chunk-QC5BYUED.js → chunk-MS2IXLTC.js} +4 -4
  112. package/dist/{chunk-QC5BYUED.js.map → chunk-MS2IXLTC.js.map} +1 -1
  113. package/dist/{chunk-X2B5GMJO.js → chunk-NCJSYU6A.js} +16 -14
  114. package/dist/chunk-NCJSYU6A.js.map +1 -0
  115. package/dist/{chunk-CFTTXUM2.js → chunk-NFFBYG2W.js} +3 -3
  116. package/dist/{chunk-CFTTXUM2.js.map → chunk-NFFBYG2W.js.map} +1 -1
  117. package/dist/{chunk-AVRTZAH2.js → chunk-NTFP2XF4.js} +10 -10
  118. package/dist/chunk-NTFP2XF4.js.map +1 -0
  119. package/dist/{chunk-V2CONXKD.js → chunk-PSPFWTJI.js} +4 -4
  120. package/dist/{chunk-V2CONXKD.js.map → chunk-PSPFWTJI.js.map} +1 -1
  121. package/dist/{chunk-C7L5MFUL.js → chunk-PTXQMTCG.js} +3 -3
  122. package/dist/{chunk-C7L5MFUL.js.map → chunk-PTXQMTCG.js.map} +1 -1
  123. package/dist/{chunk-Y242OE4B.js → chunk-QBJQ426X.js} +3 -3
  124. package/dist/{chunk-Y242OE4B.js.map → chunk-QBJQ426X.js.map} +1 -1
  125. package/dist/{chunk-QBUJTVMY.js → chunk-R3ZNAPBV.js} +3 -3
  126. package/dist/{chunk-QBUJTVMY.js.map → chunk-R3ZNAPBV.js.map} +1 -1
  127. package/dist/{chunk-4WB4KSSQ.js → chunk-RTFH2QR2.js} +3 -3
  128. package/dist/{chunk-4WB4KSSQ.js.map → chunk-RTFH2QR2.js.map} +1 -1
  129. package/dist/{chunk-5KWQMCH7.js → chunk-RZ5R6GDJ.js} +5 -5
  130. package/dist/{chunk-5KWQMCH7.js.map → chunk-RZ5R6GDJ.js.map} +1 -1
  131. package/dist/{chunk-MDCI4RSG.js → chunk-RZL4TOK3.js} +20 -6
  132. package/dist/chunk-RZL4TOK3.js.map +1 -0
  133. package/dist/{chunk-LMADWO4Q.js → chunk-SBAUZ7XH.js} +4 -4
  134. package/dist/{chunk-LMADWO4Q.js.map → chunk-SBAUZ7XH.js.map} +1 -1
  135. package/dist/{chunk-MPRWVZXF.js → chunk-SKG6G4HO.js} +108 -44
  136. package/dist/chunk-SKG6G4HO.js.map +1 -0
  137. package/dist/{chunk-HQAPUPBE.js → chunk-V2VDTQ7A.js} +3 -3
  138. package/dist/{chunk-HQAPUPBE.js.map → chunk-V2VDTQ7A.js.map} +1 -1
  139. package/dist/{chunk-GNUA7XT2.js → chunk-VS6XC5JE.js} +3 -3
  140. package/dist/{chunk-GNUA7XT2.js.map → chunk-VS6XC5JE.js.map} +1 -1
  141. package/dist/{chunk-5J6JWGY4.js → chunk-WDG5IVEA.js} +3 -3
  142. package/dist/{chunk-5J6JWGY4.js.map → chunk-WDG5IVEA.js.map} +1 -1
  143. package/dist/{chunk-M4G2SVXI.js → chunk-XWCV2A2F.js} +4 -4
  144. package/dist/{chunk-M4G2SVXI.js.map → chunk-XWCV2A2F.js.map} +1 -1
  145. package/dist/{chunk-UWD7YBDR.js → chunk-ZLDAPZIX.js} +4 -4
  146. package/dist/{chunk-UWD7YBDR.js.map → chunk-ZLDAPZIX.js.map} +1 -1
  147. package/dist/{claude-code-YRJIGXTL.js → claude-code-CMFGCDMX.js} +5 -5
  148. package/dist/{claude-code-YRJIGXTL.js.map → claude-code-CMFGCDMX.js.map} +1 -1
  149. package/dist/cli/index.js +322 -196
  150. package/dist/cli/index.js.map +1 -1
  151. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  152. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  153. package/dist/cli/src/commands/config.d.ts.map +1 -1
  154. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  155. package/dist/cli/src/commands/harness-preflight.d.ts +3 -1
  156. package/dist/cli/src/commands/harness-preflight.d.ts.map +1 -1
  157. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  158. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  159. package/dist/cli/src/commands/library-index.d.ts +3 -3
  160. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  161. package/dist/cli/src/commands/migrate-files.d.ts +8 -0
  162. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  163. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
  164. package/dist/cli/src/commands/migrate-providers.d.ts.map +1 -1
  165. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  166. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  167. package/dist/cli/src/commands/project.d.ts.map +1 -1
  168. package/dist/cli/src/commands/run.d.ts.map +1 -1
  169. package/dist/cli/src/commands/serve-preflight.d.ts +7 -5
  170. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  171. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  172. package/dist/cli/src/commands/source.d.ts.map +1 -1
  173. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  174. package/dist/cli/src/config-checks.d.ts +50 -12
  175. package/dist/cli/src/config-checks.d.ts.map +1 -1
  176. package/dist/cli/src/ensure-sources.d.ts.map +1 -1
  177. package/dist/cli/src/harness-error.d.ts +7 -0
  178. package/dist/cli/src/harness-error.d.ts.map +1 -1
  179. package/dist/cli/src/helpers.d.ts.map +1 -1
  180. package/dist/connectors/config.js +5 -5
  181. package/dist/connectors/index.js +20 -19
  182. package/dist/connectors/src/index.d.ts +1 -1
  183. package/dist/connectors/src/index.d.ts.map +1 -1
  184. package/dist/connectors/src/managed-gitconfig.d.ts +12 -0
  185. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  186. package/dist/{connectors-JKT32HZT.js → connectors-P5M2D4MH.js} +23 -22
  187. package/dist/{connectors-JKT32HZT.js.map → connectors-P5M2D4MH.js.map} +1 -1
  188. package/dist/core/index.js +7 -7
  189. package/dist/core/logging.js +1 -1
  190. package/dist/core/manifest.js +2 -2
  191. package/dist/core/models.js +1 -1
  192. package/dist/core/publish-manifest.js +3 -3
  193. package/dist/core/ref.js +1 -1
  194. package/dist/core/runtime-assets.js +5 -5
  195. package/dist/core/src/index.d.ts +2 -2
  196. package/dist/core/src/index.d.ts.map +1 -1
  197. package/dist/core/src/lock.d.ts +7 -1
  198. package/dist/core/src/lock.d.ts.map +1 -1
  199. package/dist/core/src/models.d.ts.map +1 -1
  200. package/dist/core/src/repo-manager.d.ts +28 -0
  201. package/dist/core/src/repo-manager.d.ts.map +1 -1
  202. package/dist/core/src/run-state-ignore.d.ts +5 -3
  203. package/dist/core/src/run-state-ignore.d.ts.map +1 -1
  204. package/dist/core/src/workspace-config.d.ts.map +1 -1
  205. package/dist/core/workspace-config.js +4 -4
  206. package/dist/deploy/index.js +7 -7
  207. package/dist/discovery/index.js +4 -4
  208. package/dist/{ensure-sources-GUJODKY5.js → ensure-sources-MOGLBEUF.js} +31 -29
  209. package/dist/ensure-sources-MOGLBEUF.js.map +1 -0
  210. package/dist/factory-assets/connectors/box.js +20 -19
  211. package/dist/factory-assets/connectors/deploy.js +20 -19
  212. package/dist/factory-assets/connectors/devserver.js +20 -19
  213. package/dist/factory-assets/connectors/flow/adapter.js +20 -19
  214. package/dist/factory-assets/connectors/flow/engine.js +8 -8
  215. package/dist/factory-assets/connectors/flow/run-flow.js +22 -21
  216. package/dist/factory-assets/connectors/flow.js +20 -19
  217. package/dist/factory-assets/connectors/git/exec.d.ts +7 -0
  218. package/dist/factory-assets/connectors/git/exec.d.ts.map +1 -1
  219. package/dist/factory-assets/connectors/git/repo.d.ts.map +1 -1
  220. package/dist/factory-assets/connectors/git.js +20 -19
  221. package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -1
  222. package/dist/factory-assets/connectors/gmail.js +20 -19
  223. package/dist/factory-assets/connectors/googledrive.js +20 -19
  224. package/dist/factory-assets/connectors/local.js +20 -19
  225. package/dist/factory-assets/connectors/mattermost.js +20 -19
  226. package/dist/factory-assets/connectors/memory.js +20 -19
  227. package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -1
  228. package/dist/factory-assets/connectors/minio.js +20 -19
  229. package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -1
  230. package/dist/factory-assets/connectors/postgres.js +20 -19
  231. package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -1
  232. package/dist/factory-assets/connectors/s3.js +20 -19
  233. package/dist/factory-assets/connectors/sharepoint.js +20 -19
  234. package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -1
  235. package/dist/factory-assets/connectors/sqlite.js +20 -19
  236. package/dist/factory-assets/connectors/static-server.js +20 -19
  237. package/dist/factory-assets/connectors/tunnel.js +20 -19
  238. package/dist/factory-assets/connectors/webdav.js +20 -19
  239. package/dist/factory-assets/connectors/xstate-store.js +20 -19
  240. package/dist/factory-assets/connectors/xstate.js +20 -19
  241. package/dist/{flows-UCP6ZUYS.js → flows-J64L5MGJ.js} +12 -12
  242. package/dist/{flows-UCP6ZUYS.js.map → flows-J64L5MGJ.js.map} +1 -1
  243. package/dist/{helpers-SO53MRHF.js → helpers-JL5AEGDT.js} +28 -26
  244. package/dist/{helpers-SO53MRHF.js.map → helpers-JL5AEGDT.js.map} +1 -1
  245. package/dist/library/index.js +10 -10
  246. package/dist/library/install.js +4 -4
  247. package/dist/library/src/index.d.ts +2 -2
  248. package/dist/library/src/index.d.ts.map +1 -1
  249. package/dist/library/src/library.d.ts +6 -2
  250. package/dist/library/src/library.d.ts.map +1 -1
  251. package/dist/library/src/local/db.d.ts.map +1 -1
  252. package/dist/library/src/local/library.d.ts +10 -3
  253. package/dist/library/src/local/library.d.ts.map +1 -1
  254. package/dist/library/src/local/local-catalog-source.d.ts +0 -9
  255. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  256. package/dist/library/src/local/schema.d.ts +27 -20
  257. package/dist/library/src/local/schema.d.ts.map +1 -1
  258. package/dist/library/src/manifest-writer.d.ts +13 -0
  259. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  260. package/dist/library/src/remote/index.d.ts +1 -1
  261. package/dist/library/src/remote/index.d.ts.map +1 -1
  262. package/dist/library/src/remote/remote-catalog-source.d.ts +6 -0
  263. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  264. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  265. package/dist/{library-publish-Z5E3YZCZ.js → library-publish-DZNNZNMB.js} +49 -50
  266. package/dist/library-publish-DZNNZNMB.js.map +1 -0
  267. package/dist/model-endpoint/index.js +10 -10
  268. package/dist/open-library-OJREQ22B.js +61 -0
  269. package/dist/{open-library-A5OB72FD.js.map → open-library-OJREQ22B.js.map} +1 -1
  270. package/dist/{open-registry-BHBHQMBA.js → open-registry-OEU6QUK2.js} +14 -14
  271. package/dist/{open-registry-BHBHQMBA.js.map → open-registry-OEU6QUK2.js.map} +1 -1
  272. package/dist/paths-PXBWY532.js +22 -0
  273. package/dist/{paths-77PXOXZY.js.map → paths-PXBWY532.js.map} +1 -1
  274. package/dist/{plugin-store-XQP2CRYH.js → plugin-store-ZC3EGZ3D.js} +10 -10
  275. package/dist/{plugin-store-XQP2CRYH.js.map → plugin-store-ZC3EGZ3D.js.map} +1 -1
  276. package/dist/{project-KTEUN7KR.js → project-52UABBD5.js} +45 -46
  277. package/dist/{project-KTEUN7KR.js.map → project-52UABBD5.js.map} +1 -1
  278. package/dist/resolver/index.js +8 -8
  279. package/dist/runner/index.js +35 -35
  280. package/dist/runner/src/agent-loop.d.ts.map +1 -1
  281. package/dist/runner/src/serve.d.ts.map +1 -1
  282. package/dist/runner/src/turn-end-contract.d.ts.map +1 -1
  283. package/dist/runner/src/turn-scheduler.d.ts +8 -0
  284. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  285. package/dist/sdk/asset-manager.js +14 -14
  286. package/dist/sdk/bridge.js +17 -16
  287. package/dist/sdk/core.js +7 -7
  288. package/dist/sdk/flow.js +8 -8
  289. package/dist/sdk/index.js +35 -35
  290. package/dist/sdk/resolver.js +8 -8
  291. package/dist/sdk/runner.js +35 -35
  292. package/dist/sdk/transport/ws/server.js +8 -8
  293. package/dist/sdk/transport/ws.js +8 -8
  294. package/dist/sdk/transport.js +8 -8
  295. package/dist/{serve-preflight-ODQGVUFL.js → serve-preflight-HOQ7CGYR.js} +30 -30
  296. package/dist/{serve-preflight-ODQGVUFL.js.map → serve-preflight-HOQ7CGYR.js.map} +1 -1
  297. package/dist/{setup-QJDI5YAW.js → setup-JIDZ372C.js} +29 -27
  298. package/dist/setup-JIDZ372C.js.map +1 -0
  299. package/dist/{skills-DE2BDQ6G.js → skills-5D4KDVPJ.js} +13 -13
  300. package/dist/{skills-DE2BDQ6G.js.map → skills-5D4KDVPJ.js.map} +1 -1
  301. package/dist/{source-FKOUYMEM.js → source-P6ZFSSZZ.js} +47 -46
  302. package/dist/{source-FKOUYMEM.js.map → source-P6ZFSSZZ.js.map} +1 -1
  303. package/dist/{source-manifest-publish-JA4TY4Z6.js → source-manifest-publish-Y36FHVDS.js} +49 -48
  304. package/dist/source-manifest-publish-Y36FHVDS.js.map +1 -0
  305. package/dist/transport/index.js +8 -8
  306. package/dist/transport/src/ws/server.d.ts.map +1 -1
  307. package/dist/transport/ws/server.js +8 -8
  308. package/dist/transport/ws.js +8 -8
  309. package/dist/tui/index.js +35 -35
  310. package/dist/workspace-plugin/adapters/mcp.js +27 -26
  311. package/dist/workspace-plugin/adapters/omp.js +14 -14
  312. package/dist/workspace-plugin/index.js +2 -2
  313. package/package.json +1 -1
  314. package/dist/chunk-23Q5LT4U.js.map +0 -1
  315. package/dist/chunk-4KPQ6ILH.js.map +0 -1
  316. package/dist/chunk-5NTB64PW.js.map +0 -1
  317. package/dist/chunk-AVRTZAH2.js.map +0 -1
  318. package/dist/chunk-B2DGCYVC.js.map +0 -1
  319. package/dist/chunk-FZO64PLQ.js.map +0 -1
  320. package/dist/chunk-GYBDWW6K.js +0 -160
  321. package/dist/chunk-GYBDWW6K.js.map +0 -1
  322. package/dist/chunk-GYPPVANR.js +0 -357
  323. package/dist/chunk-GYPPVANR.js.map +0 -1
  324. package/dist/chunk-GZL6RN4Z.js.map +0 -1
  325. package/dist/chunk-JY2JXCL6.js +0 -334
  326. package/dist/chunk-JY2JXCL6.js.map +0 -1
  327. package/dist/chunk-KNY356I3.js.map +0 -1
  328. package/dist/chunk-LOO5CB5M.js +0 -12
  329. package/dist/chunk-LOO5CB5M.js.map +0 -1
  330. package/dist/chunk-MDCI4RSG.js.map +0 -1
  331. package/dist/chunk-MPRWVZXF.js.map +0 -1
  332. package/dist/chunk-O3FYOS64.js.map +0 -1
  333. package/dist/chunk-U3FI4DVT.js.map +0 -1
  334. package/dist/chunk-V3EJYOP2.js +0 -299
  335. package/dist/chunk-V3EJYOP2.js.map +0 -1
  336. package/dist/chunk-V5KG6CCV.js.map +0 -1
  337. package/dist/chunk-WPLZGT5Z.js.map +0 -1
  338. package/dist/chunk-X2B5GMJO.js.map +0 -1
  339. package/dist/chunk-Y2BQWZXT.js.map +0 -1
  340. package/dist/ensure-sources-GUJODKY5.js.map +0 -1
  341. package/dist/library-publish-Z5E3YZCZ.js.map +0 -1
  342. package/dist/open-library-A5OB72FD.js +0 -59
  343. package/dist/paths-77PXOXZY.js +0 -22
  344. package/dist/setup-QJDI5YAW.js.map +0 -1
  345. package/dist/source-manifest-publish-JA4TY4Z6.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Agents and protocol: `rebuild`, `outdated`, `update`, `list`, `show`, `why`, `tree` and `diff` print the same unknown-key warnings as `validate`, `check`, `doctor`, `install` and `run` (top-level keys, `agent-config` keys, and the keys of `agent:` and `agents:`), once per run; `list --json` prints them on stderr so stdout stays JSON. When omp exits with a non-zero code, the error now ends with omp's last stderr lines, or with `omp wrote nothing to stderr; its last event was <type> (<detail>)` when it said nothing, so a silent exit has a visible cause. A codex turn that failed (`turn.failed`) ends once: later retry notices of the stream no longer end the turn again (a dozen `status idle` events after `finished`), and codex error items and top-level retry notices (such as the fallback from WebSockets to HTTPS, or `Reconnecting... 1/5`) go to the log, not into a `tool_result CodexError`; a turn that recovers from a notice still delivers its answer. The error the WebSocket server sends for a message that is not JSON, or a `session_init` of the wrong shape, carries `category: "validation"`.
8
+
9
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Authoring: `library init --path <git clone>` with an `origin` adopts the clone as `reader` (new `--owner` makes it an owner; a folder with no `origin` stays `owner`). `library init` refuses a manifest with an invalid publisher (exit 1, nothing registered), like `library index`. A manifest entry without a `version` gets one at `init` (owner) and `index`, and the command prints `skaile.manifest.yaml changed: version … added to <ref>`; a reader clone is never written and `search` shows the version `add` locks. `validate` prints no `manifest version differs` warning next to the semver error for a non-semver file version. `asset migrate` prints the `add` ref from the name in the asset's own file, not the folder name.
10
+
11
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Connector fixes. Connector drivers (`sqlite`, `postgres`, `minio`, `s3`, `gmail`, `xstate`) load their npm package like the harness SDKs: from the project's `node_modules` first, then from next to `skaile`, so a package added with `connector add` is found when the CLI is installed elsewhere. `connector status` exits 1 when a connect fails. A failed `connector add` install prints the reason and names the `--no-install` way out. `serve` copies only `http.sslCAInfo` (the path) from the user gitconfig into the managed gitconfig, and sends a mount token on `http://` only to loopback hosts. `serve` stops on exactly what `validate` calls a connector error (a missing `mountPath`, a symlinked `mountPath` and an unknown `driver` now too).
12
+
13
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Harness fixes. `add` and `run` find a git work tree with a parent walk and write the run-state lines to a `.gitignore` in the project folder, so a project in a subfolder of a repository no longer leaves `.skaile/logs.db` and `history.yaml` untracked. `harness set <h> --clean` removes the emptied folders of the old harness, and a file it kept is recorded and no longer named as stale. claude-sdk refuses a `provider/` prefix that is no registered provider, with or without registry entries. `run --dry-run` for codex prints the credential refusal of the real run. `skaile clean` without a terminal says `Not a terminal: pass --yes to confirm`. `claude-code` is accepted as `claude-sdk` in `run`, `repl`, `serve` and `config set harness`. `check`, `doctor`, `list`, `install`, `config show` and `run` report a profile that sets both `harness` and `driver`, as `validate` does.
14
+
15
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Index: the library index keeps one row per library, ref and version, so a source clone of a fork of a library's repository no longer takes that library's row over. `search --local` in a project that does not declare the source lists the libraries' copies as it did before the `source add`; `asset show` and `asset install` skip the clone of a source the project does not declare. The rows live in a new table `library_assets`; the old `asset_definitions` table is left as it is, so an older CLI sharing `~/.skaile/index.db` keeps working, and the first open copies its rows over. `install --locked` takes, among the registered libraries of the locked remote, the one whose files hash to the lock, instead of stopping at the first one with `content changed since lock`.
16
+
17
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Sources: a `publisher: "@name"` in a `sources:` entry of `skaile.yaml` is loaded as `name`, so `add skill:@name/x` finds the assets (before, the repo was indexed under another publisher). The first `library push` to an empty bare remote on this machine points that remote's HEAD at the pushed branch, and `library init --git <url>` of a remote that holds `main` under another HEAD follows `main` instead of refusing it. `outdated` lists a source clone that holds a commit of its own and is also behind as a problem with the `git -C <dir> checkout -B <branch> <remote>/<branch>` line and exits 1, instead of advising `skaile update` (which refuses that clone). `add skill:@pub/name#` says `empty version after #` and no longer blames the publisher; `add ""` no longer suggests `skaile store search` with an empty query. A `pin:` that names no branch or tag of the remote is named by `source sync`, `source add --pin` and `install` (`pin "x" does not exist in <url> (branches: ...; tags: ...)`), and by `check` and `doctor` for a source that is not cloned yet (exit 1).
18
+
19
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Store: a store that does not answer is asked once per process, so `check`, `doctor`, `outdated`, `install` and `update` cost one 5 s wait at most, not one per command step. A store entry in the lock restores from its own recorded commit and file hashes: adding the repo that holds a store asset as a source no longer fails `install --locked` with `drifted:`, the registered clone is not moved to the store's commit, and the lock's `sources:` row takes the commit of a source asset before a store asset. `update --no-catalog` and `update` with `catalog.url: local` keep the `.mcp.json` entry and payload of a locked store `mcp-server`. A wrong file hash in the lock reads `the lock records another hash for <file>` and advises `skaile install` (re-lock), not `was edited` and not the command that just failed.
20
+
21
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Upgrade and migrate: a project from 5.11.0 or 5.13.0 that still holds the asset-named agent file (`.claude/agents/captain.md` next to the instance file `cap.md`; the omp and codex files too) now has it named by `check` and `doctor` (`<file> is left over from an older skaile: skaile install removes it`) and removed by `install --locked` with a `Removed:` line, as plain `install` and `update` do. An edited file stays and is named. The leftover is no `Missing` or edited copy any more while the instance file stands. `migrate assets`, `migrate agents`, `migrate harness` and `migrate providers` exit 1 with `Path does not exist` (or `is not a directory`) for a missing path, a file or a dangling symlink, instead of `Nothing to migrate.` with exit 0. `outdated` takes `--global`, like `check`, `doctor` and `clean`.
22
+
23
+ ### Patch Changes
24
+
25
+ - [#1141](https://github.com/skaile-ai/workspaces/pull/1141) [`38a1931`](https://github.com/skaile-ai/workspaces/commit/38a19312e12ffed4abf783f9585de2cfd2694815) Thanks [@mortegro](https://github.com/mortegro)! - Docs: fix commands and values that did not match the CLI. The protocol page names protocol 5.1.0. Tutorial 02 and the commands index no longer name the retired `agent:` key. The workspace-plugin tutorials name Node.js 22.5. The v2 to v3 migration page teaches `--harness`. The library docs name `source manifest yank <src> --asset <ref>` and `preset apply`. The commands index lists `auth`, and the resource explorer page uses refs with a publisher and the `index.db` path.
26
+
27
+ ## 6.9.1
28
+
29
+ ### Patch Changes
30
+
31
+ - [#1137](https://github.com/skaile-ai/workspaces/pull/1137) [`7a110ef`](https://github.com/skaile-ai/workspaces/commit/7a110ef663f009983f2e58ab4bf976c301bc85b6) Thanks [@mortegro](https://github.com/mortegro)! - A `skaile-agent` request whose client disconnects after its prompt left the queue (while the session got ready, the harness started or the prompt was routed) no longer starts an empty turn: platform clients no longer see a `finished` with no output, and the prompt is never handed to a running flow. The prompt is withdrawn before its turn begins.
32
+
33
+ - [#1139](https://github.com/skaile-ai/workspaces/pull/1139) [`076783d`](https://github.com/skaile-ai/workspaces/commit/076783d86b544f83b3ec143652a6ef603a9f6b6d) Thanks [@mortegro](https://github.com/mortegro)! - The `omp` harness now reports each tool run as a `tool_call` when it starts, and ends every turn with a `result` that carries the turn's tokens and USD cost (summed over every model call of the turn). Before, clients saw a tool's result but never its call, and an omp turn's `finished` always reported zero cost and no tokens. A `skaile-agent` client on the model endpoint now gets the `-> <tool> <input>` line in `reasoning_content` and a filled `usage`.
34
+
3
35
  ## 6.9.0
4
36
 
5
37
  ### Minor Changes
package/dist/ai-sdk.js CHANGED
@@ -1,21 +1,21 @@
1
- import { loadMergedProviderRegistry } from './chunk-LYVLDGML.js';
1
+ import { loadMergedProviderRegistry } from './chunk-CG63XGVV.js';
2
2
  import { buildCredentialHeaders } from './chunk-6UP2EDFN.js';
3
- import { installCommandFor } from './chunk-4KPQ6ILH.js';
3
+ import { installCommandFor } from './chunk-MEU2HHGV.js';
4
4
  import './chunk-4GY63JU6.js';
5
- import './chunk-4ROXSQEG.js';
5
+ import './chunk-CJO3XKO7.js';
6
6
  import './chunk-5KRMNUL4.js';
7
7
  import './chunk-C5HFK34M.js';
8
8
  import './chunk-MWXYN6NY.js';
9
- import './chunk-FZO64PLQ.js';
9
+ import './chunk-BNLXZXZN.js';
10
10
  import './chunk-L5VSIPQD.js';
11
11
  import './chunk-VTETQCR6.js';
12
- import './chunk-QC5BYUED.js';
13
- import './chunk-GNUA7XT2.js';
12
+ import './chunk-MS2IXLTC.js';
13
+ import './chunk-VS6XC5JE.js';
14
14
  import './chunk-RVRB27AN.js';
15
- import './chunk-V5KG6CCV.js';
15
+ import './chunk-7HRZACI4.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-MDCI4RSG.js';
18
+ import './chunk-RZL4TOK3.js';
19
19
  import './chunk-C3CAXQMA.js';
20
20
  import './chunk-BOFL7GIF.js';
21
21
  import './chunk-NSBPE2FW.js';
@@ -1,39 +1,39 @@
1
- import { storeNotInstallableReason } from './chunk-M4G2SVXI.js';
2
- import { getKnownKinds } from './chunk-E675QKFG.js';
3
- import './chunk-5J6JWGY4.js';
1
+ import { storeNotInstallableReason } from './chunk-XWCV2A2F.js';
2
+ import { getKnownKinds } from './chunk-DOMRBOJZ.js';
3
+ import './chunk-WDG5IVEA.js';
4
4
  import './chunk-7RGTAEG6.js';
5
- import './chunk-23Q5LT4U.js';
6
- import './chunk-GZL6RN4Z.js';
7
- import './chunk-5KWQMCH7.js';
8
- import './chunk-OSABUEWA.js';
5
+ import './chunk-4I4SBOCS.js';
6
+ import './chunk-FXBKBOI5.js';
7
+ import './chunk-RZ5R6GDJ.js';
8
+ import './chunk-CVUMZTNO.js';
9
9
  import './chunk-F3D25RGM.js';
10
10
  import './chunk-3TXEJN4W.js';
11
11
  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-NDBHEOIA.js';
15
+ import './chunk-KRL53RZB.js';
16
16
  import './chunk-PKE3PXOK.js';
17
- import './chunk-7QYBKUAS.js';
17
+ import './chunk-LKBRBVVS.js';
18
18
  import './chunk-UQ6LFBPZ.js';
19
- import './chunk-QBUJTVMY.js';
19
+ import './chunk-R3ZNAPBV.js';
20
20
  import './chunk-WS3BOCAT.js';
21
- import './chunk-4KPQ6ILH.js';
21
+ import './chunk-MEU2HHGV.js';
22
22
  import './chunk-4GY63JU6.js';
23
- import { factoryAssetRoots } from './chunk-4ROXSQEG.js';
23
+ import { factoryAssetRoots } from './chunk-CJO3XKO7.js';
24
24
  import './chunk-5KRMNUL4.js';
25
25
  import './chunk-C5HFK34M.js';
26
26
  import './chunk-MWXYN6NY.js';
27
- import { scanRepo } from './chunk-FZO64PLQ.js';
27
+ import { scanRepo } from './chunk-BNLXZXZN.js';
28
28
  import './chunk-L5VSIPQD.js';
29
29
  import './chunk-VTETQCR6.js';
30
- import './chunk-QC5BYUED.js';
31
- import { parseRequires } from './chunk-GNUA7XT2.js';
30
+ import './chunk-MS2IXLTC.js';
31
+ import { parseRequires } from './chunk-VS6XC5JE.js';
32
32
  import './chunk-RVRB27AN.js';
33
- import './chunk-V5KG6CCV.js';
33
+ import './chunk-7HRZACI4.js';
34
34
  import './chunk-VSX2G7LA.js';
35
35
  import './chunk-RXGPFAMN.js';
36
- import './chunk-MDCI4RSG.js';
36
+ import './chunk-RZL4TOK3.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-A5OB72FD.js');
64
- const { getKindRegistry } = await import('./open-registry-BHBHQMBA.js');
63
+ const { openLibraryManager } = await import('./open-library-OJREQ22B.js');
64
+ const { getKindRegistry } = await import('./open-registry-OEU6QUK2.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-A5OB72FD.js');
97
+ const { resolveCatalogSource } = await import('./open-library-OJREQ22B.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-JWRIWLVX.js.map
179
- //# sourceMappingURL=asset-feeds-JWRIWLVX.js.map
178
+ //# sourceMappingURL=asset-feeds-UG3PG423.js.map
179
+ //# sourceMappingURL=asset-feeds-UG3PG423.js.map
@@ -1 +1 @@
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
+ {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-UG3PG423.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,20 +1,20 @@
1
- export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-USSP43U3.js';
2
- import '../chunk-4KPQ6ILH.js';
1
+ export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-LQWOU7S2.js';
2
+ import '../chunk-MEU2HHGV.js';
3
3
  import '../chunk-4GY63JU6.js';
4
- import '../chunk-4ROXSQEG.js';
4
+ import '../chunk-CJO3XKO7.js';
5
5
  import '../chunk-5KRMNUL4.js';
6
6
  import '../chunk-C5HFK34M.js';
7
7
  import '../chunk-MWXYN6NY.js';
8
- import '../chunk-FZO64PLQ.js';
8
+ import '../chunk-BNLXZXZN.js';
9
9
  import '../chunk-L5VSIPQD.js';
10
10
  import '../chunk-VTETQCR6.js';
11
- import '../chunk-QC5BYUED.js';
12
- import '../chunk-GNUA7XT2.js';
11
+ import '../chunk-MS2IXLTC.js';
12
+ import '../chunk-VS6XC5JE.js';
13
13
  import '../chunk-RVRB27AN.js';
14
- import '../chunk-V5KG6CCV.js';
14
+ import '../chunk-7HRZACI4.js';
15
15
  import '../chunk-VSX2G7LA.js';
16
16
  import '../chunk-RXGPFAMN.js';
17
- import '../chunk-MDCI4RSG.js';
17
+ import '../chunk-RZL4TOK3.js';
18
18
  import '../chunk-C3CAXQMA.js';
19
19
  import '../chunk-BOFL7GIF.js';
20
20
  import '../chunk-NSBPE2FW.js';
@@ -1,20 +1,20 @@
1
- export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-7QYBKUAS.js';
2
- import '../chunk-4KPQ6ILH.js';
1
+ export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-LKBRBVVS.js';
2
+ import '../chunk-MEU2HHGV.js';
3
3
  import '../chunk-4GY63JU6.js';
4
- import '../chunk-4ROXSQEG.js';
4
+ import '../chunk-CJO3XKO7.js';
5
5
  import '../chunk-5KRMNUL4.js';
6
6
  import '../chunk-C5HFK34M.js';
7
7
  import '../chunk-MWXYN6NY.js';
8
- import '../chunk-FZO64PLQ.js';
8
+ import '../chunk-BNLXZXZN.js';
9
9
  import '../chunk-L5VSIPQD.js';
10
10
  import '../chunk-VTETQCR6.js';
11
- import '../chunk-QC5BYUED.js';
12
- import '../chunk-GNUA7XT2.js';
11
+ import '../chunk-MS2IXLTC.js';
12
+ import '../chunk-VS6XC5JE.js';
13
13
  import '../chunk-RVRB27AN.js';
14
- import '../chunk-V5KG6CCV.js';
14
+ import '../chunk-7HRZACI4.js';
15
15
  import '../chunk-VSX2G7LA.js';
16
16
  import '../chunk-RXGPFAMN.js';
17
- import '../chunk-MDCI4RSG.js';
17
+ import '../chunk-RZL4TOK3.js';
18
18
  import '../chunk-C3CAXQMA.js';
19
19
  import '../chunk-BOFL7GIF.js';
20
20
  import '../chunk-NSBPE2FW.js';
@@ -1,35 +1,35 @@
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
- import '../chunk-OSABUEWA.js';
1
+ export { AssetManager, LibraryEntryError, MissingManifestError, harnessSwitchKeptKey, harnessSwitchStateFile, installAgentInstances, labelDiffHeaders, mcpNotRunnableReason, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, readHarnessSwitchState, renderMcpServerConfig, setLibraryAssetCheck, setRenamedEntryLookup, softDepName, writeHarnessSwitchState } from '../chunk-4I4SBOCS.js';
2
+ import '../chunk-FXBKBOI5.js';
3
+ import '../chunk-RZ5R6GDJ.js';
4
+ import '../chunk-CVUMZTNO.js';
5
5
  import '../chunk-F3D25RGM.js';
6
6
  import '../chunk-3TXEJN4W.js';
7
7
  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-NDBHEOIA.js';
11
+ export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-KRL53RZB.js';
12
12
  export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-PKE3PXOK.js';
13
- export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-7QYBKUAS.js';
13
+ export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-LKBRBVVS.js';
14
14
  import '../chunk-UQ6LFBPZ.js';
15
- export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-QBUJTVMY.js';
15
+ export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-R3ZNAPBV.js';
16
16
  import '../chunk-WS3BOCAT.js';
17
- export { FACTORY_SOURCE_URL } from '../chunk-4KPQ6ILH.js';
17
+ export { FACTORY_SOURCE_URL } from '../chunk-MEU2HHGV.js';
18
18
  import '../chunk-4GY63JU6.js';
19
- import '../chunk-4ROXSQEG.js';
19
+ import '../chunk-CJO3XKO7.js';
20
20
  import '../chunk-5KRMNUL4.js';
21
21
  import '../chunk-C5HFK34M.js';
22
22
  import '../chunk-MWXYN6NY.js';
23
- import '../chunk-FZO64PLQ.js';
23
+ import '../chunk-BNLXZXZN.js';
24
24
  import '../chunk-L5VSIPQD.js';
25
25
  import '../chunk-VTETQCR6.js';
26
- import '../chunk-QC5BYUED.js';
27
- import '../chunk-GNUA7XT2.js';
26
+ import '../chunk-MS2IXLTC.js';
27
+ import '../chunk-VS6XC5JE.js';
28
28
  import '../chunk-RVRB27AN.js';
29
- import '../chunk-V5KG6CCV.js';
29
+ import '../chunk-7HRZACI4.js';
30
30
  import '../chunk-VSX2G7LA.js';
31
31
  import '../chunk-RXGPFAMN.js';
32
- import '../chunk-MDCI4RSG.js';
32
+ import '../chunk-RZL4TOK3.js';
33
33
  import '../chunk-C3CAXQMA.js';
34
34
  import '../chunk-BOFL7GIF.js';
35
35
  import '../chunk-NSBPE2FW.js';
@@ -1,23 +1,23 @@
1
- export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, cachedComposedFiles, canonicalEntryRef, composedDriftRefs, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, entriesNeedingDeploy, installTargetOf, readKeptLegacyCopies, removeAsset, sourceComposedFiles, writeKeptLegacyCopies } from '../chunk-NDBHEOIA.js';
1
+ export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, cachedComposedFiles, canonicalEntryRef, composedDriftRefs, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, entriesNeedingDeploy, installTargetOf, readKeptLegacyCopies, removeAsset, sourceComposedFiles, writeKeptLegacyCopies } from '../chunk-KRL53RZB.js';
2
2
  import '../chunk-PKE3PXOK.js';
3
- import '../chunk-QBUJTVMY.js';
3
+ import '../chunk-R3ZNAPBV.js';
4
4
  import '../chunk-WS3BOCAT.js';
5
- import '../chunk-4KPQ6ILH.js';
5
+ import '../chunk-MEU2HHGV.js';
6
6
  import '../chunk-4GY63JU6.js';
7
- import '../chunk-4ROXSQEG.js';
7
+ import '../chunk-CJO3XKO7.js';
8
8
  import '../chunk-5KRMNUL4.js';
9
9
  import '../chunk-C5HFK34M.js';
10
10
  import '../chunk-MWXYN6NY.js';
11
- import '../chunk-FZO64PLQ.js';
11
+ import '../chunk-BNLXZXZN.js';
12
12
  import '../chunk-L5VSIPQD.js';
13
13
  import '../chunk-VTETQCR6.js';
14
- import '../chunk-QC5BYUED.js';
15
- import '../chunk-GNUA7XT2.js';
14
+ import '../chunk-MS2IXLTC.js';
15
+ import '../chunk-VS6XC5JE.js';
16
16
  import '../chunk-RVRB27AN.js';
17
- import '../chunk-V5KG6CCV.js';
17
+ import '../chunk-7HRZACI4.js';
18
18
  import '../chunk-VSX2G7LA.js';
19
19
  import '../chunk-RXGPFAMN.js';
20
- import '../chunk-MDCI4RSG.js';
20
+ import '../chunk-RZL4TOK3.js';
21
21
  import '../chunk-C3CAXQMA.js';
22
22
  import '../chunk-BOFL7GIF.js';
23
23
  import '../chunk-NSBPE2FW.js';
@@ -1,21 +1,21 @@
1
- export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, agentRenderFiles, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-QBUJTVMY.js';
1
+ export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, agentRenderFiles, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-R3ZNAPBV.js';
2
2
  import '../chunk-WS3BOCAT.js';
3
- import '../chunk-4KPQ6ILH.js';
3
+ import '../chunk-MEU2HHGV.js';
4
4
  import '../chunk-4GY63JU6.js';
5
- import '../chunk-4ROXSQEG.js';
5
+ import '../chunk-CJO3XKO7.js';
6
6
  import '../chunk-5KRMNUL4.js';
7
7
  import '../chunk-C5HFK34M.js';
8
8
  import '../chunk-MWXYN6NY.js';
9
- import '../chunk-FZO64PLQ.js';
9
+ import '../chunk-BNLXZXZN.js';
10
10
  import '../chunk-L5VSIPQD.js';
11
11
  import '../chunk-VTETQCR6.js';
12
- import '../chunk-QC5BYUED.js';
13
- import '../chunk-GNUA7XT2.js';
12
+ import '../chunk-MS2IXLTC.js';
13
+ import '../chunk-VS6XC5JE.js';
14
14
  import '../chunk-RVRB27AN.js';
15
- import '../chunk-V5KG6CCV.js';
15
+ import '../chunk-7HRZACI4.js';
16
16
  import '../chunk-VSX2G7LA.js';
17
17
  import '../chunk-RXGPFAMN.js';
18
- import '../chunk-MDCI4RSG.js';
18
+ import '../chunk-RZL4TOK3.js';
19
19
  import '../chunk-C3CAXQMA.js';
20
20
  import '../chunk-BOFL7GIF.js';
21
21
  import '../chunk-NSBPE2FW.js';
@@ -0,0 +1,30 @@
1
+ /**
2
+ * What `skaile harness set` remembers about the harness a project left, in
3
+ * `.skaile/harness-switch-hashes.json` (per machine, ignored by git):
4
+ *
5
+ * - `hashes`: absolute path -> sha256 of every agent file the lock recorded for the old harness.
6
+ * An old copy that still hashes to its record is untouched, so `--clean` may delete it.
7
+ * - `kept`: project-relative paths (`/` separators) of old copies `--clean` kept because the user
8
+ * changed them. They leave the stale list: the hint to run `--clean` cannot remove them.
9
+ *
10
+ * The first versions wrote the hashes as one flat map; that shape is still read.
11
+ */
12
+ /** The remembered state of one project. */
13
+ export interface HarnessSwitchState {
14
+ /** Absolute path -> sha256 of an agent file the lock recorded. */
15
+ hashes: Map<string, string>;
16
+ /** Project-relative paths of old copies `--clean` kept. */
17
+ kept: Set<string>;
18
+ }
19
+ /** Where the state of a project is kept. */
20
+ export declare function harnessSwitchStateFile(projectDir: string): string;
21
+ /** Project-relative key of a path in {@link HarnessSwitchState.kept}. */
22
+ export declare function harnessSwitchKeptKey(projectDir: string, path: string): string;
23
+ /** Read the state; empty when there is none or the file is unreadable. */
24
+ export declare function readHarnessSwitchState(projectDir: string): HarnessSwitchState;
25
+ /**
26
+ * Save the state; an empty state removes the file. A failed write is ignored: the state is a
27
+ * courtesy, and `--clean` keeps what it cannot tell.
28
+ */
29
+ export declare function writeHarnessSwitchState(projectDir: string, state: HarnessSwitchState): void;
30
+ //# sourceMappingURL=harness-switch-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-switch-state.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/harness-switch-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnB;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7E;AAUD,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAkB7E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAgB3F"}
@@ -865,7 +865,7 @@ export declare class AssetManager {
865
865
  private readonly verboseCollisions;
866
866
  /** Store URLs whose failed version lookup was already reported (one warning per URL). */
867
867
  private readonly warnedStoreVersionLookups;
868
- /** Whether each store answers: one command asks a dead store once ({@link StoreProbe}). */
868
+ /** Whether each store answers: one process asks a dead store once (`processStoreProbe`). */
869
869
  private readonly storeProbe;
870
870
  /** Stores a lookup could not reach (store URL -> one line why); `add` reports them instead of "not found". */
871
871
  private readonly storeFailures;
@@ -1071,16 +1071,44 @@ export declare class AssetManager {
1071
1071
  */
1072
1072
  private renderHarnessMcpConfig;
1073
1073
  /**
1074
- * Remove the files named after an agent asset that an earlier CLI rendered and this one does
1075
- * not: the agent is bound by an instance (its rendering is the instance's file), or
1076
- * it only runs as a `binding: run` role. Only a file the lock lists for the agent, whose bytes
1077
- * still equal what the lock recorded, and that no instance of the ledger claims is removed;
1078
- * an edited one stays (it is the user's now) and is named. The old lock entry is rewritten
1079
- * by the same install, so the lock never keeps a path that is gone.
1074
+ * Whether a project-relative path is a file an agent instance renders (the ledger's files). An
1075
+ * instance claims files and folders (omp renders a folder): a file under a claimed folder is
1076
+ * claimed too.
1077
+ */
1078
+ private instanceClaims;
1079
+ /**
1080
+ * Whether the path `rel` that the lock lists under `rendered:` for the agent `name` is a file
1081
+ * named after the asset that an instance's file (or the `binding: run` role) stands for now.
1082
+ * Such a path is no part of the rendering the lock expects any more: a lock of 5.13.0 and older
1083
+ * still lists it, `install` drops it at the next lock write, and until then it is neither a
1084
+ * missing nor an edited copy. Always `false` in global mode.
1085
+ */
1086
+ private supersededRendering;
1087
+ /**
1088
+ * The files named after an agent asset that an earlier CLI rendered and this one does not: the
1089
+ * agent is bound by an instance (its rendering is the instance's file), or it only runs as a
1090
+ * `binding: run` role. A file counts when no instance of the ledger claims it and either the
1091
+ * lock lists it for the agent (`edited` when its bytes differ from the recorded ones), or the
1092
+ * lock records no rendering for the agent at all (5.11.0 and older) and the file is the
1093
+ * instance's render under the asset's name. A file of the second kind that differs from that
1094
+ * render may be the user's own and is not listed. Project mode only.
1095
+ */
1096
+ private leftoverAgentFiles;
1097
+ /**
1098
+ * Remove the leftover files {@link leftoverAgentFiles} lists. A file edited since the lock
1099
+ * stays (it is the user's now) and is named. The old lock entry is rewritten by the same
1100
+ * install, so the lock never keeps a path that is gone; `install --locked` leaves the lock,
1101
+ * which `check` does not read for a file that is gone.
1080
1102
  *
1081
1103
  * @returns The project-relative paths removed.
1082
1104
  */
1083
1105
  private pruneAssetNamedAgentFiles;
1106
+ /**
1107
+ * The `check`, `doctor` and `outdated` lines for the files {@link leftoverAgentFiles} lists: an
1108
+ * untouched one is removed by the next `install` (and by `install --locked`), an edited one
1109
+ * stays. Empty in global mode and when nothing is left over.
1110
+ */
1111
+ leftoverAgentFileNotices(): string[];
1084
1112
  /**
1085
1113
  * Render every agent instance of `skaile.yaml` into the harness target's native
1086
1114
  * agent files (`.claude/agents/<id>.md`, …) and prune the renderings of
@@ -1090,7 +1118,7 @@ export declare class AssetManager {
1090
1118
  *
1091
1119
  * @param opts.prune - Also remove the files named after the agent assets that an earlier CLI
1092
1120
  * rendered and an instance renders now ({@link pruneAssetNamedAgentFiles}). Set by the
1093
- * commands that rewrite the lock; `install --locked` leaves the lock, so it leaves them.
1121
+ * commands that deploy or re-lock; the lock is left as it is by `install --locked`.
1094
1122
  */
1095
1123
  private renderAgentInstances;
1096
1124
  private loadConfig;
@@ -1147,16 +1175,17 @@ export declare class AssetManager {
1147
1175
  /**
1148
1176
  * Every ref that more than one registered library holds, with one row per holder
1149
1177
  * (all libraries, all versions) in the order `add` prefers them: the first row is
1150
- * the one `add <ref>` deploys. The local index keeps a single row per ref and
1151
- * version, so `search` reads this to show equal-version copies in both libraries.
1178
+ * the one `add <ref>` deploys. `search` reads this to group the index rows of a ref
1179
+ * (one per library) and mark the copy `add` deploys; the versions come from the files
1180
+ * themselves, which the index follows only after the next `skaile library index`.
1152
1181
  *
1153
1182
  * @returns `kind:@publisher/name` → holders; refs held by one library are absent.
1154
1183
  */
1155
1184
  libraryHolders(): Promise<Map<string, LibraryHolder[]>>;
1156
1185
  /**
1157
1186
  * Every asset a registered library holds, read from the library directories themselves
1158
- * (not the local index, which keeps one row per ref and version and loses a ref when
1159
- * another library re-publishes it). One row per holder, all versions.
1187
+ * (not the local index, which lags behind them until the next `skaile library index`).
1188
+ * One row per holder, all versions.
1160
1189
  *
1161
1190
  * @returns `[]` when no library holds an asset. Never warns.
1162
1191
  */
@@ -1637,6 +1666,13 @@ export declare class AssetManager {
1637
1666
  * clone-relative entry.
1638
1667
  */
1639
1668
  private buildCatalogEntries;
1669
+ /**
1670
+ * The tail of a `hash mismatch for <file>: expected <lock>, got <fetched>` failure of a locked
1671
+ * restore when the deployed copy already holds the fetched bytes: the lock records another
1672
+ * hash for the file, and `install` (not `install --locked`) writes the right one. Empty for
1673
+ * any other failure, and when the copy is missing or differs from the fetched bytes.
1674
+ */
1675
+ private wrongLockHashHint;
1640
1676
  /**
1641
1677
  * Fetch + SHA-verify the bytes of every store-resolved candidate that needs
1642
1678
  * bytes on disk into `.skaile/cache/store/`, reusing the same verified-fetch
@@ -2964,6 +3000,7 @@ export declare class AssetManager {
2964
3000
  private resolveRepoDir;
2965
3001
  }
2966
3002
  export { installAgent } from "./install-agent.js";
3003
+ export { type HarnessSwitchState, harnessSwitchKeptKey, harnessSwitchStateFile, readHarnessSwitchState, writeHarnessSwitchState, } from "./harness-switch-state.js";
2967
3004
  export type { InstalledAgentInstance, InstallAgentInstancesOptions, InstallAgentInstancesResult, } from "./install-instances.js";
2968
3005
  export { installAgentInstances } from "./install-instances.js";
2969
3006
  export type { AgentRenderer, AgentRenderInput, AgentRenderResult } from "./renderers.js";