@skaile/workspaces 6.8.1 → 6.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/ai-sdk.js +5 -5
  3. package/dist/{asset-feeds-R75MH2WW.js → asset-feeds-PANNQPEE.js} +19 -19
  4. package/dist/{asset-feeds-R75MH2WW.js.map → asset-feeds-PANNQPEE.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 +191 -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 +28 -0
  32. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  33. package/dist/{chunk-PKC2AHOB.js → chunk-2UKNI2HJ.js} +2 -2
  34. package/dist/{chunk-PKC2AHOB.js.map → chunk-2UKNI2HJ.js.map} +1 -1
  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-TMJBEGS4.js → chunk-4KPQ6ILH.js} +5 -34
  38. package/dist/chunk-4KPQ6ILH.js.map +1 -0
  39. package/dist/{chunk-G7NMF5WQ.js → chunk-4ROXSQEG.js} +3 -3
  40. package/dist/{chunk-G7NMF5WQ.js.map → chunk-4ROXSQEG.js.map} +1 -1
  41. package/dist/{chunk-WFK4MUBL.js → chunk-5J6JWGY4.js} +3 -3
  42. package/dist/{chunk-WFK4MUBL.js.map → chunk-5J6JWGY4.js.map} +1 -1
  43. package/dist/{chunk-ORXV3UB6.js → chunk-5J6N6LHL.js} +3 -3
  44. package/dist/{chunk-ORXV3UB6.js.map → chunk-5J6N6LHL.js.map} +1 -1
  45. package/dist/{chunk-O5Y7VMVQ.js → chunk-5KWQMCH7.js} +3 -3
  46. package/dist/{chunk-O5Y7VMVQ.js.map → chunk-5KWQMCH7.js.map} +1 -1
  47. package/dist/{chunk-KTBKW2FI.js → chunk-7QYBKUAS.js} +4 -3
  48. package/dist/chunk-7QYBKUAS.js.map +1 -0
  49. package/dist/{chunk-SILFO5RY.js → chunk-7TF5MNFK.js} +2 -2
  50. package/dist/{chunk-SILFO5RY.js.map → chunk-7TF5MNFK.js.map} +1 -1
  51. package/dist/{chunk-XIIIGLSL.js → chunk-7UCPGQCW.js} +9 -9
  52. package/dist/{chunk-XIIIGLSL.js.map → chunk-7UCPGQCW.js.map} +1 -1
  53. package/dist/{chunk-NAEXYRHR.js → chunk-AQTAULXT.js} +10 -10
  54. package/dist/{chunk-NAEXYRHR.js.map → chunk-AQTAULXT.js.map} +1 -1
  55. package/dist/{chunk-LL5GMUQG.js → chunk-BDAXHJC5.js} +7 -7
  56. package/dist/{chunk-LL5GMUQG.js.map → chunk-BDAXHJC5.js.map} +1 -1
  57. package/dist/{chunk-DXBHGNSI.js → chunk-BLBXOG5Q.js} +6 -6
  58. package/dist/{chunk-DXBHGNSI.js.map → chunk-BLBXOG5Q.js.map} +1 -1
  59. package/dist/{chunk-Y6LC5PEZ.js → chunk-C324IAXI.js} +14 -5
  60. package/dist/chunk-C324IAXI.js.map +1 -0
  61. package/dist/{chunk-NW7Y5SNK.js → chunk-CPMLMNI5.js} +4 -4
  62. package/dist/{chunk-NW7Y5SNK.js.map → chunk-CPMLMNI5.js.map} +1 -1
  63. package/dist/{chunk-DFP476EU.js → chunk-DJSGQW2Q.js} +89 -4
  64. package/dist/chunk-DJSGQW2Q.js.map +1 -0
  65. package/dist/{chunk-QCR5AE5E.js → chunk-E675QKFG.js} +5 -5
  66. package/dist/{chunk-QCR5AE5E.js.map → chunk-E675QKFG.js.map} +1 -1
  67. package/dist/{chunk-7RBFYW24.js → chunk-EMSU6L7K.js} +5 -5
  68. package/dist/{chunk-7RBFYW24.js.map → chunk-EMSU6L7K.js.map} +1 -1
  69. package/dist/{chunk-O7ADRMCR.js → chunk-FZO64PLQ.js} +45 -16
  70. package/dist/chunk-FZO64PLQ.js.map +1 -0
  71. package/dist/{chunk-I4DI5DAX.js → chunk-FZTHL6SK.js} +18 -18
  72. package/dist/chunk-FZTHL6SK.js.map +1 -0
  73. package/dist/{chunk-CMXDFTA2.js → chunk-GYPPVANR.js} +3 -3
  74. package/dist/{chunk-CMXDFTA2.js.map → chunk-GYPPVANR.js.map} +1 -1
  75. package/dist/{chunk-G44FFUMA.js → chunk-GZL6RN4Z.js} +92 -14
  76. package/dist/chunk-GZL6RN4Z.js.map +1 -0
  77. package/dist/{chunk-N65H7YYI.js → chunk-IISEBVMA.js} +5 -5
  78. package/dist/{chunk-N65H7YYI.js.map → chunk-IISEBVMA.js.map} +1 -1
  79. package/dist/{chunk-BGATDUYX.js → chunk-J45JCYS4.js} +4 -4
  80. package/dist/{chunk-BGATDUYX.js.map → chunk-J45JCYS4.js.map} +1 -1
  81. package/dist/{chunk-6ZM5X2XW.js → chunk-KVTV4LT2.js} +3 -3
  82. package/dist/{chunk-6ZM5X2XW.js.map → chunk-KVTV4LT2.js.map} +1 -1
  83. package/dist/{chunk-SAL72A7T.js → chunk-LMADWO4Q.js} +9 -6
  84. package/dist/chunk-LMADWO4Q.js.map +1 -0
  85. package/dist/{chunk-3HSLJAMJ.js → chunk-LYVLDGML.js} +3 -3
  86. package/dist/{chunk-3HSLJAMJ.js.map → chunk-LYVLDGML.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-QGA2OBUJ.js → chunk-MPO5CQUZ.js} +3 -3
  90. package/dist/{chunk-QGA2OBUJ.js.map → chunk-MPO5CQUZ.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-OLZE4IHX.js → chunk-PBEDRYHP.js} +4093 -3886
  94. package/dist/chunk-PBEDRYHP.js.map +1 -0
  95. package/dist/{chunk-YMO4ZDLC.js → chunk-PLVM6OIV.js} +45 -13
  96. package/dist/chunk-PLVM6OIV.js.map +1 -0
  97. package/dist/{chunk-LZ3E6TML.js → chunk-Q5SSRVD5.js} +18 -9
  98. package/dist/chunk-Q5SSRVD5.js.map +1 -0
  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-REAF7ZFA.js → chunk-QIV7H3GJ.js} +398 -36
  102. package/dist/chunk-QIV7H3GJ.js.map +1 -0
  103. package/dist/{chunk-I6XH46Q6.js → chunk-RP3ML3QD.js} +3 -3
  104. package/dist/{chunk-I6XH46Q6.js.map → chunk-RP3ML3QD.js.map} +1 -1
  105. package/dist/{chunk-SVMIUCTT.js → chunk-RZRJTCP2.js} +4 -4
  106. package/dist/{chunk-SVMIUCTT.js.map → chunk-RZRJTCP2.js.map} +1 -1
  107. package/dist/{chunk-N2W7OJC6.js → chunk-S47KU4YB.js} +3 -3
  108. package/dist/{chunk-N2W7OJC6.js.map → chunk-S47KU4YB.js.map} +1 -1
  109. package/dist/{chunk-EDKTS44C.js → chunk-SME3PK4L.js} +6 -6
  110. package/dist/{chunk-EDKTS44C.js.map → chunk-SME3PK4L.js.map} +1 -1
  111. package/dist/{chunk-QW5B3TEO.js → chunk-TMQFOJ6F.js} +3 -3
  112. package/dist/{chunk-QW5B3TEO.js.map → chunk-TMQFOJ6F.js.map} +1 -1
  113. package/dist/{chunk-BB5EJLKZ.js → chunk-TUOHA6BM.js} +2 -2
  114. package/dist/{chunk-BB5EJLKZ.js.map → chunk-TUOHA6BM.js.map} +1 -1
  115. package/dist/{chunk-HLAEYFUN.js → chunk-U3FI4DVT.js} +3 -3
  116. package/dist/{chunk-HLAEYFUN.js.map → chunk-U3FI4DVT.js.map} +1 -1
  117. package/dist/{chunk-237BMOZW.js → chunk-UWD7YBDR.js} +4 -4
  118. package/dist/{chunk-237BMOZW.js.map → chunk-UWD7YBDR.js.map} +1 -1
  119. package/dist/{chunk-56PIAGD6.js → chunk-VEIWFS7Z.js} +331 -59
  120. package/dist/chunk-VEIWFS7Z.js.map +1 -0
  121. package/dist/{chunk-7O2CR5SZ.js → chunk-WEPTGUR4.js} +41 -35
  122. package/dist/chunk-WEPTGUR4.js.map +1 -0
  123. package/dist/{chunk-VT6G5AJV.js → chunk-WS3BOCAT.js} +4 -3
  124. package/dist/chunk-WS3BOCAT.js.map +1 -0
  125. package/dist/{chunk-JAGBPHXB.js → chunk-X5SGUBUV.js} +3 -3
  126. package/dist/{chunk-JAGBPHXB.js.map → chunk-X5SGUBUV.js.map} +1 -1
  127. package/dist/{chunk-62NNP7LU.js → chunk-XB4XHGIE.js} +3 -3
  128. package/dist/{chunk-62NNP7LU.js.map → chunk-XB4XHGIE.js.map} +1 -1
  129. package/dist/{chunk-VQFA5DR7.js → chunk-YPTDPN2B.js} +3 -3
  130. package/dist/{chunk-VQFA5DR7.js.map → chunk-YPTDPN2B.js.map} +1 -1
  131. package/dist/{chunk-Z5EPCIB6.js → chunk-ZUROGXJM.js} +93 -14
  132. package/dist/chunk-ZUROGXJM.js.map +1 -0
  133. package/dist/{claude-code-DS26HI3K.js → claude-code-ILZ46SLO.js} +5 -5
  134. package/dist/{claude-code-DS26HI3K.js.map → claude-code-ILZ46SLO.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-KTRUUKWG.js} +20 -20
  172. package/dist/{connectors-3ST6PGWP.js.map → connectors-KTRUUKWG.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-5QWKUIUD.js} +23 -23
  190. package/dist/{ensure-sources-VELKRM6X.js.map → ensure-sources-5QWKUIUD.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-INS4B7OQ.js} +23 -23
  221. package/dist/{helpers-LWNKX56Y.js.map → helpers-INS4B7OQ.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-AZTYRASL.js} +61 -47
  230. package/dist/library-publish-AZTYRASL.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-3HMXYGUF.js} +26 -26
  244. package/dist/{open-library-Q7QZJY5D.js.map → open-library-3HMXYGUF.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-HVNPK2ZF.js} +39 -40
  252. package/dist/{project-WVPRL7CP.js.map → project-HVNPK2ZF.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-end-contract.d.ts.map +1 -1
  265. package/dist/runner/src/turn-scheduler.d.ts +37 -2
  266. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  267. package/dist/sdk/asset-manager.js +11 -11
  268. package/dist/sdk/bridge.js +14 -14
  269. package/dist/sdk/core.js +4 -4
  270. package/dist/sdk/flow.js +5 -5
  271. package/dist/sdk/index.js +28 -28
  272. package/dist/sdk/resolver.js +4 -4
  273. package/dist/sdk/runner.js +28 -28
  274. package/dist/sdk/transport/ws/server.js +5 -5
  275. package/dist/sdk/transport/ws.js +5 -5
  276. package/dist/sdk/transport.js +5 -5
  277. package/dist/{serve-preflight-24YWWYUG.js → serve-preflight-NHZOKHIC.js} +27 -26
  278. package/dist/{serve-preflight-24YWWYUG.js.map → serve-preflight-NHZOKHIC.js.map} +1 -1
  279. package/dist/{setup-F5JX64UP.js → setup-EX7Z7XRN.js} +24 -24
  280. package/dist/{setup-F5JX64UP.js.map → setup-EX7Z7XRN.js.map} +1 -1
  281. package/dist/{skills-KHHW3RZ3.js → skills-DE2BDQ6G.js} +6 -6
  282. package/dist/{skills-KHHW3RZ3.js.map → skills-DE2BDQ6G.js.map} +1 -1
  283. package/dist/{source-DG5IAAGZ.js → source-URRPRGMZ.js} +39 -39
  284. package/dist/{source-DG5IAAGZ.js.map → source-URRPRGMZ.js.map} +1 -1
  285. package/dist/{source-manifest-publish-76S2JD3O.js → source-manifest-publish-ZWRYRJ2U.js} +41 -41
  286. package/dist/{source-manifest-publish-76S2JD3O.js.map → source-manifest-publish-ZWRYRJ2U.js.map} +1 -1
  287. package/dist/transport/index.js +5 -5
  288. package/dist/transport/ws/server.js +5 -5
  289. package/dist/transport/ws.js +5 -5
  290. package/dist/tui/index.js +29 -29
  291. package/dist/tui/index.js.map +1 -1
  292. package/dist/tui/src/repl.d.ts.map +1 -1
  293. package/dist/types/manifests.js +1 -1
  294. package/dist/types/src/manifests/scaffold-body.d.ts +1 -1
  295. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  296. package/dist/workspace-plugin/adapters/mcp.js +20 -20
  297. package/dist/workspace-plugin/adapters/omp.js +14 -14
  298. package/dist/workspace-plugin/index.js +2 -2
  299. package/package.json +1 -1
  300. package/dist/chunk-56PIAGD6.js.map +0 -1
  301. package/dist/chunk-7O2CR5SZ.js.map +0 -1
  302. package/dist/chunk-DFP476EU.js.map +0 -1
  303. package/dist/chunk-E5AZA2FL.js +0 -83
  304. package/dist/chunk-E5AZA2FL.js.map +0 -1
  305. package/dist/chunk-G44FFUMA.js.map +0 -1
  306. package/dist/chunk-I4DI5DAX.js.map +0 -1
  307. package/dist/chunk-KTBKW2FI.js.map +0 -1
  308. package/dist/chunk-LZ3E6TML.js.map +0 -1
  309. package/dist/chunk-O7ADRMCR.js.map +0 -1
  310. package/dist/chunk-OLZE4IHX.js.map +0 -1
  311. package/dist/chunk-REAF7ZFA.js.map +0 -1
  312. package/dist/chunk-SAL72A7T.js.map +0 -1
  313. package/dist/chunk-SGI5MRKP.js.map +0 -1
  314. package/dist/chunk-TMJBEGS4.js.map +0 -1
  315. package/dist/chunk-VT6G5AJV.js.map +0 -1
  316. package/dist/chunk-Y6LC5PEZ.js.map +0 -1
  317. package/dist/chunk-YMO4ZDLC.js.map +0 -1
  318. package/dist/chunk-Z5EPCIB6.js.map +0 -1
  319. package/dist/library-publish-WJVCT2IK.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,71 +1,70 @@
1
1
  #!/usr/bin/env node
2
- import { status, enable, disable, install, uninstall } from '../chunk-JAGBPHXB.js';
3
- import { makeValidateCommand, scanIdentities } from '../chunk-7O2CR5SZ.js';
4
- import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-62NNP7LU.js';
5
- import { checkHarnessSdk } from '../chunk-LZ3E6TML.js';
6
- import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-N65H7YYI.js';
7
- import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, reportStoreNotCheckedForUpdates, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-YMO4ZDLC.js';
8
- import { reportUnknownHarnesses, reportProjectConfig, agentInstanceErrorLines } from '../chunk-E5AZA2FL.js';
9
- import { isRecord } from '../chunk-DFP476EU.js';
2
+ import { status, enable, disable, install, uninstall } from '../chunk-X5SGUBUV.js';
3
+ import { makeValidateCommand, scanIdentities } from '../chunk-WEPTGUR4.js';
4
+ import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-XB4XHGIE.js';
5
+ import { checkHarnessSdk } from '../chunk-Q5SSRVD5.js';
6
+ import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-IISEBVMA.js';
7
+ import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, reportStoreNotCheckedForUpdates, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-PLVM6OIV.js';
8
+ import { reportUnknownHarnesses, reportProjectConfig, agentInstanceErrorLines, isRecord } from '../chunk-DJSGQW2Q.js';
10
9
  import { createSpinner } from '../chunk-NESV47MF.js';
11
- import { loadDeclaredPlugins } from '../chunk-QW5B3TEO.js';
12
- import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-BGATDUYX.js';
13
- import { makeSourceCommand, dropVanishedSourceRows, syncProjectSources, divergedSourceClones, uncachedSources } from '../chunk-I4DI5DAX.js';
14
- import { manifestEntryRootRefusals, manifestEntryFilesRefusals, libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestPathProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, assetEntryRef, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, warnUntrackedAssetFiles, checkComposeKinds } from '../chunk-Z5EPCIB6.js';
15
- import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-SVMIUCTT.js';
16
- import { getKindRegistry, getKnownKinds } from '../chunk-QCR5AE5E.js';
17
- import { AI_RESOURCES } from '../chunk-237BMOZW.js';
18
- import { logErr, unknownHarnessTargetMessage, S, logOk, setActiveCommand, logInfo, logWarnErr, unknownHarnessMessage, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnStaleHarnessCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-DXBHGNSI.js';
10
+ import { loadDeclaredPlugins } from '../chunk-TMQFOJ6F.js';
11
+ import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-J45JCYS4.js';
12
+ import { makeSourceCommand, dropVanishedSourceRows, syncProjectSources, divergedSourceClones, uncachedSources } from '../chunk-FZTHL6SK.js';
13
+ import { manifestEntryRootRefusals, manifestEntryFilesRefusals, libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, exitOnRootSkillLibrary, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, rootLevelAssetFileProblem, assetEntryRef, manifestPublisherProblems, exitOnManifestPathProblems, exitOnRootSkillExtraAssets, manifestRequiresProblems, composeRefContext, registeredAssetKeys, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, warnUntrackedAssetFiles, checkComposeKinds } from '../chunk-ZUROGXJM.js';
14
+ import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-RZRJTCP2.js';
15
+ import { getKindRegistry, getKnownKinds } from '../chunk-E675QKFG.js';
16
+ import { AI_RESOURCES } from '../chunk-UWD7YBDR.js';
17
+ import { logErr, unknownHarnessTargetMessage, S, logOk, setActiveCommand, logInfo, logWarnErr, unknownHarnessMessage, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnStaleHarnessCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-BLBXOG5Q.js';
19
18
  import { LocalSecretsProvider } from '../chunk-ILFGVSTJ.js';
20
- import { resolveInstanceAgentDir, instanceSessionOverrides, loadAgentManifest, manifestModelForHarness, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, hashAgentFiles, createCompositionContentSource, compileComposition, MarkdownStreamer, createFinalTextFallback, instanceForSession, resolveAgentInstance, describeComposition } from '../chunk-OLZE4IHX.js';
21
- import '../chunk-PKC2AHOB.js';
22
- import '../chunk-7RBFYW24.js';
23
- import '../chunk-N2W7OJC6.js';
24
- import '../chunk-BB5EJLKZ.js';
19
+ import { resolveInstanceAgentDir, instanceSessionOverrides, modelForHarness, loadAgentManifest, manifestModelForHarness, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, hashAgentFiles, createCompositionContentSource, compileComposition, MarkdownStreamer, createFinalTextFallback, instanceForSession, resolveAgentInstance, describeComposition } from '../chunk-PBEDRYHP.js';
20
+ import '../chunk-2UKNI2HJ.js';
21
+ import '../chunk-EMSU6L7K.js';
22
+ import '../chunk-S47KU4YB.js';
23
+ import '../chunk-TUOHA6BM.js';
25
24
  import '../chunk-WYZXSJBK.js';
26
25
  import '../chunk-GTAHU4N4.js';
27
26
  import '../chunk-HQAPUPBE.js';
28
27
  import '../chunk-KW37WNXY.js';
29
28
  import '../chunk-3MWQKQUB.js';
30
- import '../chunk-REAF7ZFA.js';
29
+ import '../chunk-QIV7H3GJ.js';
31
30
  import '../chunk-O7SG5PC2.js';
32
31
  import '../chunk-7QBNJTTQ.js';
33
32
  import '../chunk-O2SYFJWP.js';
34
- import '../chunk-HLAEYFUN.js';
33
+ import '../chunk-U3FI4DVT.js';
35
34
  import '../chunk-32NA4TVC.js';
36
35
  import '../chunk-W3UDISS2.js';
37
- import '../chunk-CMXDFTA2.js';
38
- import { runFlow, resumeFlow } from '../chunk-EDKTS44C.js';
36
+ import '../chunk-GYPPVANR.js';
37
+ import { runFlow, resumeFlow } from '../chunk-SME3PK4L.js';
39
38
  import '../chunk-4R6DROGN.js';
40
39
  import { parseSkillRequirements, validateRequirements } from '../chunk-PTJTOPE5.js';
41
40
  import '../chunk-USSP43U3.js';
42
- import '../chunk-NAEXYRHR.js';
41
+ import '../chunk-AQTAULXT.js';
43
42
  import '../chunk-BRPEW3UL.js';
44
- import '../chunk-SAL72A7T.js';
45
- import { checkHarnessModel, checkOmpListedModel, isUnlistedModel, checkModelSurface } from '../chunk-XIIIGLSL.js';
46
- import '../chunk-NW7Y5SNK.js';
47
- import '../chunk-6ZM5X2XW.js';
48
- import '../chunk-Y6LC5PEZ.js';
43
+ import '../chunk-LMADWO4Q.js';
44
+ import { checkHarnessModel, checkOmpListedModel, isUnlistedModel, checkModelSurface } from '../chunk-7UCPGQCW.js';
45
+ import '../chunk-CPMLMNI5.js';
46
+ import '../chunk-KVTV4LT2.js';
47
+ import '../chunk-C324IAXI.js';
49
48
  import '../chunk-LOO5CB5M.js';
50
49
  import '../chunk-YEOG7CWQ.js';
51
- import '../chunk-SBNUXJ6E.js';
50
+ import '../chunk-3AIEJSQR.js';
52
51
  import { findHarnessBinary, HARNESS_BINARIES } from '../chunk-WWSRIT3J.js';
53
- import '../chunk-I6XH46Q6.js';
52
+ import '../chunk-RP3ML3QD.js';
54
53
  import '../chunk-5DE3DGVR.js';
55
54
  import '../chunk-7DN6JKP2.js';
56
- import '../chunk-ORXV3UB6.js';
57
- import { listHarnesses } from '../chunk-SILFO5RY.js';
55
+ import '../chunk-5J6N6LHL.js';
56
+ import { listHarnesses } from '../chunk-7TF5MNFK.js';
58
57
  import '../chunk-G5SUWZEU.js';
59
- import '../chunk-3HSLJAMJ.js';
58
+ import '../chunk-LYVLDGML.js';
60
59
  import { getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-6UP2EDFN.js';
61
60
  import '../chunk-IFGTRL2I.js';
62
- import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-WFK4MUBL.js';
61
+ import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-5J6JWGY4.js';
63
62
  import '../chunk-WD3L5QSU.js';
64
63
  import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind, nodeAssets } from '../chunk-7RGTAEG6.js';
65
64
  import '../chunk-7NN3P6VF.js';
66
- import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl } from '../chunk-56PIAGD6.js';
67
- import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-G44FFUMA.js';
68
- import { flowFileNameError, SEMVER_RE } from '../chunk-O5Y7VMVQ.js';
65
+ import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl } from '../chunk-VEIWFS7Z.js';
66
+ import { CatalogHttpError, OfflineError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, missingRootAssets, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-GZL6RN4Z.js';
67
+ import { flowFileNameError, SEMVER_RE } from '../chunk-5KWQMCH7.js';
69
68
  import '../chunk-OSABUEWA.js';
70
69
  import '../chunk-F3D25RGM.js';
71
70
  import '../chunk-3TXEJN4W.js';
@@ -73,19 +72,19 @@ import '../chunk-ISHJITXJ.js';
73
72
  import '../chunk-LNFKL23K.js';
74
73
  import '../chunk-JRN5QF4C.js';
75
74
  import '../chunk-NUELZWCF.js';
76
- import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-KO3VSZQP.js';
75
+ import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-NDBHEOIA.js';
77
76
  import '../chunk-PKE3PXOK.js';
78
- import '../chunk-KTBKW2FI.js';
77
+ import '../chunk-7QYBKUAS.js';
79
78
  import '../chunk-UQ6LFBPZ.js';
80
- import '../chunk-4CD2R4MJ.js';
81
- import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-VT6G5AJV.js';
82
- import { RUN_STATE_GITIGNORE_ENTRIES, LockParseError, loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, readLock, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, resolveConfiguredHarnessName, FACTORY_SOURCE_URL, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-TMJBEGS4.js';
79
+ import { CODEX_IDENTITY_DIR } from '../chunk-QBUJTVMY.js';
80
+ import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-WS3BOCAT.js';
81
+ import { LockParseError, loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, readLock, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, resolveConfiguredHarnessName, FACTORY_SOURCE_URL, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-4KPQ6ILH.js';
83
82
  import '../chunk-4GY63JU6.js';
84
- import { factoryAssetRoots } from '../chunk-G7NMF5WQ.js';
85
- import { deployedDir } from '../chunk-5KRMNUL4.js';
83
+ import { factoryAssetRoots } from '../chunk-4ROXSQEG.js';
84
+ import { deployedPaths, deployedBase, deployedDir } from '../chunk-5KRMNUL4.js';
86
85
  import { DEFAULT_HARNESS_ID, HARNESS_DEFAULTS } from '../chunk-C5HFK34M.js';
87
86
  import { findKindDirs } from '../chunk-MWXYN6NY.js';
88
- import { SourceEntryError, LegacyKeyError, ConfigParseError, resolveSkWorkspaceConfig, unselectedInstanceIds, instanceChoiceText, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, configParseErrorOf, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-O7ADRMCR.js';
87
+ import { SourceEntryError, LegacyKeyError, ConfigParseError, resolveSkWorkspaceConfig, unselectedInstanceIds, instanceChoiceText, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, isSameRemote, matchPin, coerceVersion, loadSkWorkspaceConfig, configParseErrorOf, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-FZO64PLQ.js';
89
88
  import { globalCacheRoot, globalSkaileDir, userConfigPath } from '../chunk-L5VSIPQD.js';
90
89
  import { HARNESS_TARGETS, SUPPORTED_HARNESSES, harnessNameForHarnessId } from '../chunk-VTETQCR6.js';
91
90
  import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-QC5BYUED.js';
@@ -94,7 +93,7 @@ import { pluginTitle } from '../chunk-RVRB27AN.js';
94
93
  import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-V5KG6CCV.js';
95
94
  import { portableSpawn, portableSpawnSync } from '../chunk-VSX2G7LA.js';
96
95
  import { parseModelRef, resolveEntryBaseUrl } from '../chunk-RXGPFAMN.js';
97
- import { openSqlite } from '../chunk-SGI5MRKP.js';
96
+ import { RUN_STATE_GITIGNORE_ENTRIES, openSqlite } from '../chunk-MDCI4RSG.js';
98
97
  import '../chunk-C3CAXQMA.js';
99
98
  import { registerLogStore, LogStore, StdoutSink } from '../chunk-BOFL7GIF.js';
100
99
  import '../chunk-NSBPE2FW.js';
@@ -241,7 +240,7 @@ async function runSearch(kind, query, opts) {
241
240
  }
242
241
  }
243
242
  async function searchIndex(query, kind, projectDir) {
244
- const { openLibrary: openLibrary2 } = await import('../open-library-Q7QZJY5D.js');
243
+ const { openLibrary: openLibrary2 } = await import('../open-library-3HMXYGUF.js');
245
244
  const library = await openLibrary2();
246
245
  try {
247
246
  const { libraryDirMissing: libraryDirMissing2 } = await import('../library/index.js');
@@ -417,14 +416,14 @@ async function withAddVersions(entries, projectDir) {
417
416
  }
418
417
  async function searchLocal(query, kind, opts, showStore, airGapped) {
419
418
  const projectDir = path19__default.resolve(opts.projectDir);
420
- const { restoreSourceReaders } = await import('../source-DG5IAAGZ.js');
419
+ const { restoreSourceReaders } = await import('../source-URRPRGMZ.js');
421
420
  for (const name of await restoreSourceReaders(projectDir)) {
422
421
  logInfo(`Re-registered source "${name}" (its library entry was removed elsewhere).`);
423
422
  }
424
423
  const factory = await searchFactory(projectDir, query, kind);
425
424
  let entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
426
425
  if (entries.length === 0 && !query && !kind && !airGapped) {
427
- const { autoSyncForSearch } = await import('../source-DG5IAAGZ.js');
426
+ const { autoSyncForSearch } = await import('../source-URRPRGMZ.js');
428
427
  if (await autoSyncForSearch(projectDir)) {
429
428
  entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
430
429
  }
@@ -478,7 +477,9 @@ function layoutLocalTable(rows, width, style = {}) {
478
477
  }
479
478
  return { ruleWidth: nameW + gap + descW + tailSpan, lines };
480
479
  }
481
- if (indent + nameW + tailSpan <= width) {
480
+ const stackedW = width - (indent + 2) - tailSpan;
481
+ const stackable = stackedW >= MIN_LOCAL_DESCRIPTION_WIDTH && rows.some((r) => r.description !== "");
482
+ if (!stackable && indent + nameW + tailSpan <= width) {
482
483
  for (const r of rows) {
483
484
  lines.push(tailSpan > 0 ? `${pad}${refCell(r.ref)}${tail(r)}` : `${pad}${styleRef(r.ref)}`);
484
485
  }
@@ -542,7 +543,7 @@ async function searchStore(query, kind, opts, airGapped) {
542
543
  logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
543
544
  return "skipped";
544
545
  }
545
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-Q7QZJY5D.js');
546
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
546
547
  try {
547
548
  const remote = await openCatalogSource2({ projectDir: path19__default.resolve(opts.projectDir) });
548
549
  const assets = await remote.listAssets(kind ? { kind } : {});
@@ -828,13 +829,29 @@ function makeAddCommand() {
828
829
  }
829
830
  });
830
831
  }
832
+ function globalDeployedFiles(component, name, harness) {
833
+ const paths = deployedPaths(component, name, harness, true);
834
+ if (component === "agent" && harness === "codex") {
835
+ paths.push(
836
+ path19__default.join(
837
+ path19__default.dirname(deployedBase(component, harness, true)),
838
+ CODEX_IDENTITY_DIR,
839
+ `${name}.md`
840
+ )
841
+ );
842
+ }
843
+ return paths.filter((p6) => existsSync(p6));
844
+ }
831
845
  function reportGlobalPaths(am2, assets) {
846
+ const harnesses = am2.deployTargets();
847
+ logInfo(S.dim(`harnesses: ${harnesses.join(", ")}`));
832
848
  for (const { kind, name } of assets) {
833
849
  const component = installTargetOf(getKindRegistry(), kind);
834
850
  if (!component) continue;
835
- for (const harness of am2.deployTargets()) {
836
- const dir = deployedDir(component, name, harness, true);
837
- if (existsSync(dir)) logInfo(S.dim(`${harness}: ${dir.replace(homedir(), "~")}`));
851
+ for (const harness of harnesses) {
852
+ for (const file of globalDeployedFiles(component, name, harness)) {
853
+ logInfo(S.dim(`${harness}: ${file.replace(homedir(), "~")}`));
854
+ }
838
855
  }
839
856
  }
840
857
  }
@@ -1135,7 +1152,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1135
1152
  return { entry: match ?? deployed, deployed: true };
1136
1153
  }
1137
1154
  const lookup = opts.storeLookup ?? (async (filter) => {
1138
- const { resolveCatalogSource } = await import('../open-library-Q7QZJY5D.js');
1155
+ const { resolveCatalogSource } = await import('../open-library-3HMXYGUF.js');
1139
1156
  const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
1140
1157
  try {
1141
1158
  return await source.listAssets(filter);
@@ -1151,7 +1168,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1151
1168
  );
1152
1169
  return { entry: hit ? catalogAssetToEntry(hit) : null };
1153
1170
  } catch (err) {
1154
- const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-Q7QZJY5D.js');
1171
+ const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
1155
1172
  const storeNote = err instanceof Error ? err.message : String(err);
1156
1173
  const disabled = err instanceof LocalCatalogDisabledError2 || /catalog\.url/i.test(storeNote);
1157
1174
  return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
@@ -1477,6 +1494,7 @@ function makeAssetCommand() {
1477
1494
  process.exit(1);
1478
1495
  }
1479
1496
  exitOnManifestPublisherProblems(target.path, target.name);
1497
+ exitOnRootSkillLibrary(target.path, target.name);
1480
1498
  if (reportLibrarySymlinks(src.dir, { rootIsAsset: true }) > 0) {
1481
1499
  logErr(
1482
1500
  `Not imported: ${src.dir} holds symlinks (listed above). Replace each with a copy of what it points at, or remove it, and run the import again.`
@@ -1867,7 +1885,7 @@ function makeCatalogCommand() {
1867
1885
  if (cfg.catalog.cache_ttl === 0 && !opts.force) {
1868
1886
  logOk(`Catalog mode: air-gapped (${S.heading(baseUrl)})`);
1869
1887
  logInfo(
1870
- "Network probe skipped because cache_ttl is 0. Use `skaile update` to refresh the cache, or `skaile catalog test --force` to probe anyway."
1888
+ "Network probe skipped because cache_ttl is 0. Use `skaile update --catalog-only` to refresh the cache, or `skaile catalog test --force` to probe anyway."
1871
1889
  );
1872
1890
  return;
1873
1891
  }
@@ -1888,7 +1906,7 @@ function makeCatalogCommand() {
1888
1906
  return catalog;
1889
1907
  }
1890
1908
  async function runLocalCatalogTest(projectDir) {
1891
- const { resolveCatalogSource } = await import('../open-library-Q7QZJY5D.js');
1909
+ const { resolveCatalogSource } = await import('../open-library-3HMXYGUF.js');
1892
1910
  let resolved;
1893
1911
  try {
1894
1912
  resolved = await resolveCatalogSource({ projectDir });
@@ -2064,7 +2082,7 @@ async function scanLibraryFlowEntries() {
2064
2082
  const { LocalIndex, resolveIndexPath, scanAuthoringLibraries } = await import('../library/index.js');
2065
2083
  const indexPath = resolveIndexPath();
2066
2084
  if (!existsSync(indexPath)) return entries;
2067
- const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-RZW2AFD6.js');
2085
+ const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-BHBHQMBA.js');
2068
2086
  const index = new LocalIndex({ indexPath });
2069
2087
  try {
2070
2088
  for (const { library, assets } of await scanAuthoringLibraries(index, getKindRegistry2())) {
@@ -2730,6 +2748,19 @@ function makeConnectCommand() {
2730
2748
  await client.disconnect();
2731
2749
  });
2732
2750
  }
2751
+
2752
+ // cli/src/group-help.ts
2753
+ function helpOnBareGroup(group) {
2754
+ group.allowExcessArguments(true);
2755
+ group.action(() => {
2756
+ if (group.args.length > 0) {
2757
+ group.unknownCommand();
2758
+ }
2759
+ group.help();
2760
+ });
2761
+ }
2762
+
2763
+ // cli/src/commands/connector.ts
2733
2764
  function parsePositiveIntOption(value) {
2734
2765
  const n = Number.parseInt(value, 10);
2735
2766
  if (!Number.isFinite(n) || n <= 0) {
@@ -3108,7 +3139,7 @@ ${installResult.output.trim() || "the package manager gave no output"}`
3108
3139
  await manager.disconnectAll();
3109
3140
  }
3110
3141
  });
3111
- cmd.action(() => cmd.help());
3142
+ helpOnBareGroup(cmd);
3112
3143
  return cmd;
3113
3144
  }
3114
3145
  async function runDebugQuery(query, parentOpts, args) {
@@ -3237,7 +3268,7 @@ async function ensureTargetsRegistered(projectDir) {
3237
3268
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
3238
3269
  const config = resolveSkWorkspaceConfig2(projectDir);
3239
3270
  if (config.plugins && config.plugins.length > 0) {
3240
- const { ensurePluginsLoaded } = await import('../plugin-store-OJTERUEZ.js');
3271
+ const { ensurePluginsLoaded } = await import('../plugin-store-XQP2CRYH.js');
3241
3272
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
3242
3273
  for (const f of result.failed) logWarn(f.error);
3243
3274
  }
@@ -3358,7 +3389,7 @@ function makeDeployCommand() {
3358
3389
  cmd.command("down").description("Tear down the active deploy and clear its handle").option("--project-dir <path>", "Project directory", process.cwd()).action(action(runDown));
3359
3390
  cmd.command("status").description("Show the active deploy's state, ws URL, and health").option("--project-dir <path>", "Project directory", process.cwd()).action(action(runStatus));
3360
3391
  cmd.command("logs").description("Stream logs from the active deploy (if the target supports it)").option("--project-dir <path>", "Project directory", process.cwd()).option("--follow", "Keep streaming new log lines").action(action(runLogs));
3361
- cmd.action(() => cmd.help());
3392
+ helpOnBareGroup(cmd);
3362
3393
  return cmd;
3363
3394
  }
3364
3395
  var DIFF_SHOWS = { content: true, modified: true, incomplete: true };
@@ -3500,7 +3531,7 @@ function makeFlowCommand() {
3500
3531
  }
3501
3532
  console.log();
3502
3533
  });
3503
- cmd.action(() => cmd.help());
3534
+ helpOnBareGroup(cmd);
3504
3535
  return cmd;
3505
3536
  }
3506
3537
  var HARNESS_ID_OF_TARGET = {
@@ -3522,7 +3553,7 @@ function makeHarnessCommand() {
3522
3553
  ).action(async (name, opts) => {
3523
3554
  await runHarnessSet(name, path19__default.resolve(opts.projectDir), opts);
3524
3555
  });
3525
- cmd.action(() => cmd.help());
3556
+ helpOnBareGroup(cmd);
3526
3557
  return cmd;
3527
3558
  }
3528
3559
  async function runHarnessSet(name, projectDir, opts) {
@@ -3557,13 +3588,42 @@ async function runHarnessSet(name, projectDir, opts) {
3557
3588
  `model ${profile.model} is kept. Check it fits ${target}: skaile run "hi there" --dry-run`
3558
3589
  );
3559
3590
  }
3591
+ const renderedBefore = rememberRenderedHashes(
3592
+ projectDir,
3593
+ new AssetManager({ registry: getKindRegistry(), projectDir }).lockedRenderedHashes()
3594
+ );
3560
3595
  logInfo(`Installing for ${target} (${HARNESS_TARGETS[target].local.skill})`);
3561
3596
  await runYamlInstall({ projectDir });
3562
- if (opts.clean) removeOldHarnessCopies(projectDir);
3597
+ if (opts.clean) {
3598
+ removeOldHarnessCopies(projectDir, renderedBefore);
3599
+ rmSync(switchHashesFile(projectDir), { force: true });
3600
+ }
3601
+ }
3602
+ function switchHashesFile(projectDir) {
3603
+ return path19__default.join(projectDir, ".skaile", "harness-switch-hashes.json");
3563
3604
  }
3564
- function removeOldHarnessCopies(projectDir) {
3605
+ function rememberRenderedHashes(projectDir, current) {
3606
+ const file = switchHashesFile(projectDir);
3607
+ const merged = /* @__PURE__ */ new Map();
3608
+ try {
3609
+ const kept = JSON.parse(readFileSync(file, "utf-8"));
3610
+ for (const [p6, sha] of Object.entries(kept)) if (typeof sha === "string") merged.set(p6, sha);
3611
+ } catch {
3612
+ }
3613
+ for (const [p6, sha] of current) merged.set(p6, sha);
3614
+ if (merged.size > 0) {
3615
+ try {
3616
+ mkdirSync(path19__default.dirname(file), { recursive: true });
3617
+ writeFileSync(file, `${JSON.stringify(Object.fromEntries(merged), null, 2)}
3618
+ `);
3619
+ } catch {
3620
+ }
3621
+ }
3622
+ return merged;
3623
+ }
3624
+ function removeOldHarnessCopies(projectDir, renderedBefore) {
3565
3625
  const am2 = new AssetManager({ registry: getKindRegistry(), projectDir });
3566
- const stale = am2.listStaleHarnessCopies();
3626
+ const stale = am2.listStaleHarnessCopies({ renderedBefore });
3567
3627
  if (stale.length === 0) {
3568
3628
  logInfo("No old harness copies to remove.");
3569
3629
  return;
@@ -3579,7 +3639,7 @@ function removeOldHarnessCopies(projectDir) {
3579
3639
  }
3580
3640
  if (foreign.length > 0) {
3581
3641
  logWarn(
3582
- `Kept ${foreign.length} cop${foreign.length === 1 ? "y" : "ies"} skaile did not write (the bytes differ from the new harness's copy, or it is not in the lock): ${rel(foreign)}. Delete ${foreign.length === 1 ? "it" : "them"} by hand if you do not need ${foreign.length === 1 ? "it" : "them"}.`
3642
+ `Kept ${foreign.length} cop${foreign.length === 1 ? "y" : "ies"} skaile did not write (the bytes differ from the new harness's copy or, for an agent file, from what the lock recorded, or it is not in the lock): ${rel(foreign)}. Delete ${foreign.length === 1 ? "it" : "them"} by hand if you do not need ${foreign.length === 1 ? "it" : "them"}.`
3583
3643
  );
3584
3644
  }
3585
3645
  }
@@ -4338,7 +4398,7 @@ function makeIntegrationCommand() {
4338
4398
  }
4339
4399
  process.exit(0);
4340
4400
  });
4341
- cmd.action(() => cmd.help());
4401
+ helpOnBareGroup(cmd);
4342
4402
  return cmd;
4343
4403
  }
4344
4404
  function exitOnSyncError(err) {
@@ -4368,6 +4428,7 @@ async function reindexLibrary(lib, library, name) {
4368
4428
  exitOnManifestPublisherProblems(lib.path, name);
4369
4429
  exitOnLibrarySymlinks(lib.path, `skaile library index ${name}`);
4370
4430
  exitOnManifestPathProblems(lib.path, `skaile library index ${name}`);
4431
+ exitOnRootSkillExtraAssets(lib.path, `skaile library index ${name}`);
4371
4432
  const badRequires = manifestRequiresProblems(lib.path);
4372
4433
  const resolved = resolveLibraryPublisherDetailed(lib, {}, getStoreIdentity());
4373
4434
  warnLibraryNameFallback(name, resolved);
@@ -4567,7 +4628,7 @@ function refuseDeployFolder(dir, force = false) {
4567
4628
  );
4568
4629
  process.exit(1);
4569
4630
  }
4570
- async function refuseUnusableLibraryDir(dir, force = false) {
4631
+ async function refuseUnusableLibraryDir(dir, force = false, ownership = "owner") {
4571
4632
  const deployed = DEPLOYED_COPY_DIRS.filter((d) => {
4572
4633
  const full = path19.join(dir, d);
4573
4634
  return fs8.existsSync(full) && fs8.statSync(full).isDirectory() && fs8.readdirSync(full).length > 0;
@@ -4588,6 +4649,31 @@ async function refuseUnusableLibraryDir(dir, force = false) {
4588
4649
  );
4589
4650
  process.exit(1);
4590
4651
  }
4652
+ const rootFile = rootLevelAssetFileProblem(dir);
4653
+ if (rootFile) {
4654
+ logErr(rootFile);
4655
+ process.exit(1);
4656
+ }
4657
+ const manifest = loadSkPublishManifest(dir);
4658
+ const missing = manifest ? missingRootAssets(dir, manifest) : [];
4659
+ if (manifest && missing.length > 0) {
4660
+ const report = ownership === "reader" ? logWarn : logErr;
4661
+ for (const a of missing) {
4662
+ report(
4663
+ `${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${assetEntryRef(a, manifest)}: root "${a.root}" does not exist.`
4664
+ );
4665
+ }
4666
+ if (ownership === "reader") {
4667
+ logWarn(
4668
+ `Ask the owner to push the folder(s) or drop the entry from ${SKAILE_MANIFEST_FILENAME}, then run \`skaile library pull <name>\`; \`add\` of those assets fails until then.`
4669
+ );
4670
+ return;
4671
+ }
4672
+ logErr(
4673
+ `Restore the folder(s) or drop the entry from ${SKAILE_MANIFEST_FILENAME}, then run \`skaile library init\` again; nothing was registered.`
4674
+ );
4675
+ process.exit(1);
4676
+ }
4591
4677
  }
4592
4678
  async function assertLibraryPathFree(manager, dir, exceptId) {
4593
4679
  const clash = (await manager.listLibraries()).find(
@@ -4736,7 +4822,7 @@ function readOriginTracking(dir) {
4736
4822
  });
4737
4823
  return { url, branch: head.status === 0 && head.stdout.trim() || "main" };
4738
4824
  }
4739
- function exitOnCloneWithoutCheckout(dir, name) {
4825
+ function exitOnCloneWithoutCheckout(dir, name, fresh) {
4740
4826
  const head = spawnSync("git", ["rev-parse", "--verify", "-q", "HEAD"], {
4741
4827
  cwd: dir,
4742
4828
  encoding: "utf-8"
@@ -4748,6 +4834,17 @@ function exitOnCloneWithoutCheckout(dir, name) {
4748
4834
  });
4749
4835
  const branches = (refs.stdout ?? "").split("\n").map((ref) => ref.trim().replace(/^refs\/remotes\/origin\//, "")).filter((branch) => branch !== "" && branch !== "HEAD" && !branch.startsWith("refs/"));
4750
4836
  if (branches.length === 0) return;
4837
+ if (fresh) {
4838
+ if (fresh.existed) fs8.rmSync(path19.join(dir, ".git"), { recursive: true, force: true });
4839
+ else {
4840
+ fs8.rmSync(dir, { recursive: true, force: true });
4841
+ pruneEmptyLibraryParents(dir);
4842
+ }
4843
+ logErr(
4844
+ `${fresh.url}: its remote HEAD names a branch that does not exist (remote branches: ${branches.join(", ")}); nothing was cloned or registered. Clone the branch you want, then adopt it: \`git clone --branch ${branches[0]} ${fresh.url} ${dir}\` and \`skaile library init ${name} --path ${dir}\`.`
4845
+ );
4846
+ process.exit(1);
4847
+ }
4751
4848
  logErr(
4752
4849
  `${dir} is a git clone with no branch checked out (its remote HEAD names a branch that does not exist): run \`git -C ${dir} checkout ${branches[0]}\` (remote branches: ${branches.join(", ")}), then re-run \`skaile library init ${name} --path ${dir}\`.`
4753
4850
  );
@@ -4799,7 +4896,7 @@ function remoteBranches(url) {
4799
4896
  return r.stdout.split("\n").map((line) => line.split(" ")[1]?.replace(/^refs\/heads\//, "")).filter((b) => !!b);
4800
4897
  }
4801
4898
  async function warnIfNotGithubRemote(name, url) {
4802
- const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-WJVCT2IK.js');
4899
+ const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-AZTYRASL.js');
4803
4900
  if (!isGithubRemote(url)) logWarn(notGithubRemoteMessage(name, url));
4804
4901
  }
4805
4902
  function scaffoldLibraryFiles(dir, name) {
@@ -4838,6 +4935,7 @@ by the same ref.
4838
4935
  }
4839
4936
  return written;
4840
4937
  }
4938
+ var GIT_IDENTITY_FIX = 'Set it with `git config --global user.name "<name>"` and `git config --global user.email "<email>"`.';
4841
4939
  function commitScaffold(dir, files) {
4842
4940
  const run2 = (args) => spawnSync("git", args, { cwd: dir, encoding: "utf-8" });
4843
4941
  const add = run2(["add", "--", ...files]);
@@ -4847,11 +4945,10 @@ function commitScaffold(dir, files) {
4847
4945
  return (commit.stderr.trim() || commit.stdout.trim()).split("\n")[0] || "git commit failed";
4848
4946
  }
4849
4947
  async function refuseRemoteOfSource(manager, url) {
4850
- const key = sourceCacheKey(url);
4851
4948
  const libraries = await manager.listLibraries();
4852
4949
  const cacheRoot = path19.resolve(getGlobalCacheDir()) + path19.sep;
4853
4950
  const clash = libraries.find(
4854
- (l) => path19.resolve(l.path).startsWith(cacheRoot) && "url" in l.backendConfig && sourceCacheKey(l.backendConfig.url) === key
4951
+ (l) => path19.resolve(l.path).startsWith(cacheRoot) && "url" in l.backendConfig && isSameRemote(l.backendConfig.url, url)
4855
4952
  );
4856
4953
  if (!clash) return;
4857
4954
  logErr(
@@ -4989,7 +5086,7 @@ function makeLibraryCommand() {
4989
5086
  await refuseNestedLibraryPath(manager, libPath);
4990
5087
  if (fs8.existsSync(libPath)) {
4991
5088
  exitOnLibrarySymlinks(libPath, `skaile library init ${name} --path ${libPath}`);
4992
- await refuseUnusableLibraryDir(libPath, opts.force);
5089
+ await refuseUnusableLibraryDir(libPath, opts.force, ownership);
4993
5090
  } else {
4994
5091
  refuseDeployFolder(libPath, opts.force);
4995
5092
  }
@@ -4997,7 +5094,9 @@ function makeLibraryCommand() {
4997
5094
  let backend = "local";
4998
5095
  let backendConfig;
4999
5096
  if (opts.git) {
5000
- const { branch, reason } = cloneOrInitGitRepo(libPath, opts.git, "main");
5097
+ const existed = fs8.existsSync(libPath);
5098
+ const { branch, reason, cloned } = cloneOrInitGitRepo(libPath, opts.git, "main");
5099
+ if (cloned) exitOnCloneWithoutCheckout(libPath, name, { url: opts.git, existed });
5001
5100
  if (reason) {
5002
5101
  logWarn(
5003
5102
  `Could not clone ${opts.git}; initialised an empty repo with that origin instead. git said: ${reason}`
@@ -5005,7 +5104,7 @@ function makeLibraryCommand() {
5005
5104
  }
5006
5105
  await warnIfNotGithubRemote(name, opts.git);
5007
5106
  trackOriginBranch(libPath, branch);
5008
- await refuseUnusableLibraryDir(libPath, opts.force);
5107
+ await refuseUnusableLibraryDir(libPath, opts.force, ownership);
5009
5108
  backend = "git";
5010
5109
  backendConfig = { url: opts.git, branch, authHint: "ssh" };
5011
5110
  } else if (adopted) {
@@ -5029,7 +5128,7 @@ function makeLibraryCommand() {
5029
5128
  `Library "${name}" ${blank ? "created" : "registered"} at ${libPath}${isDefault ? " (default)" : ""}`
5030
5129
  );
5031
5130
  if (scaffolded.length > 0) logInfo(`Scaffolded ${scaffolded.join(", ")}.`);
5032
- if (scaffolded.length > 0 && opts.git) {
5131
+ if (scaffolded.length > 0 && (opts.git || adopted)) {
5033
5132
  const failure = commitScaffold(libPath, scaffolded);
5034
5133
  if (failure) {
5035
5134
  logWarn(
@@ -5176,6 +5275,7 @@ function makeLibraryCommand() {
5176
5275
  const target = await resolveTargetLibrary(manager, opts.library);
5177
5276
  assertManifestEditableOrExit(target.path);
5178
5277
  exitOnManifestPublisherProblems(target.path, target.name);
5278
+ exitOnRootSkillLibrary(target.path, target.name);
5179
5279
  const effectiveKind = opts.kind ?? kind;
5180
5280
  const am2 = new AssetManager({ registry: getKindRegistry(), projectDir: process.cwd() });
5181
5281
  const libRoot = path19.resolve(target.path);
@@ -5408,6 +5508,7 @@ function makeLibraryCommand() {
5408
5508
  }
5409
5509
  await manager.updateLibrary(name, patch);
5410
5510
  logOk(`Updated ${name}.${field}`);
5511
+ if (field === "backendConfig.url") await warnIfNotGithubRemote(name, value);
5411
5512
  if (field === "path") {
5412
5513
  logInfo(`Run \`skaile library index ${name}\` to re-index its assets from the new path.`);
5413
5514
  }
@@ -5565,13 +5666,24 @@ function makeLibraryCommand() {
5565
5666
  }
5566
5667
  const r = spawnSync("git", ["commit", "-m", opts.message], {
5567
5668
  cwd: lib.path,
5568
- stdio: "inherit"
5669
+ encoding: "utf-8"
5569
5670
  });
5671
+ const gitOutput = `${r.stdout ?? ""}${r.stderr ?? ""}`;
5570
5672
  if (r.status !== 0) {
5571
- logErr("git commit failed.");
5673
+ const noIdentity = /tell me who you are|unable to auto-detect|empty ident name/i.test(
5674
+ gitOutput
5675
+ );
5676
+ logErr(
5677
+ noIdentity ? `git commit failed: no git identity is configured. ${GIT_IDENTITY_FIX}` : `git commit failed${gitOutput.trim() ? `: ${gitOutput.trim().split("\n")[0]}` : "."}`
5678
+ );
5572
5679
  process.exit(1);
5573
5680
  }
5574
5681
  logOk(`Committed in ${name}.`);
5682
+ if (/configured automatically/i.test(gitOutput)) {
5683
+ logWarn(
5684
+ `No git identity is configured, so git guessed one for this commit. ${GIT_IDENTITY_FIX} \`git -C ${lib.path} commit --amend --reset-author\` fixes this commit.`
5685
+ );
5686
+ }
5575
5687
  } finally {
5576
5688
  close();
5577
5689
  }
@@ -5602,16 +5714,16 @@ function makeLibraryCommand() {
5602
5714
  "With --create-repo: create the repo private (the store only accepts public repos)"
5603
5715
  ).option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; push nothing and call no store endpoint").action(
5604
5716
  async (lib, opts) => {
5605
- const { runLibraryPublish } = await import('../library-publish-WJVCT2IK.js');
5717
+ const { runLibraryPublish } = await import('../library-publish-AZTYRASL.js');
5606
5718
  await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
5607
5719
  }
5608
5720
  );
5609
5721
  cmd.command("register <lib>").description("Register the library's manifest without pushing (bytes already on github)").option("--asset <ref>", "Publish only the single asset matching this ref/name").option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; call no store endpoint").action(async (lib, opts) => {
5610
- const { runLibraryRegister } = await import('../library-publish-WJVCT2IK.js');
5722
+ const { runLibraryRegister } = await import('../library-publish-AZTYRASL.js');
5611
5723
  await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
5612
5724
  });
5613
5725
  cmd.command("yank <lib>").description("Retract the library's published assets from the store").option("--asset <ref>", "Yank only the single asset matching this ref/name").action(async (lib, opts) => {
5614
- const { runLibraryYank } = await import('../library-publish-WJVCT2IK.js');
5726
+ const { runLibraryYank } = await import('../library-publish-AZTYRASL.js');
5615
5727
  await withStoreErrorHandling(() => runLibraryYank(lib, opts));
5616
5728
  });
5617
5729
  return cmd;
@@ -6271,7 +6383,7 @@ function scheduleSoftDepPreview() {
6271
6383
  }
6272
6384
  async function loadAssets() {
6273
6385
  softDepPreviewCache.clear();
6274
- const { gatherAssetFeeds } = await import('../asset-feeds-R75MH2WW.js');
6386
+ const { gatherAssetFeeds } = await import('../asset-feeds-PANNQPEE.js');
6275
6387
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
6276
6388
  if (notes.length > 0) {
6277
6389
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -6475,7 +6587,7 @@ function reconcileCollapsedSets(rows) {
6475
6587
  async function loadSourcesAndLibraries() {
6476
6588
  try {
6477
6589
  const [{ openLibraryManager: openLibraryManager2 }, { getGlobalCacheDir: getGlobalCacheDir2, globalSkaileDir: globalSkaileDir2 }] = await Promise.all([
6478
- import('../open-library-Q7QZJY5D.js'),
6590
+ import('../open-library-3HMXYGUF.js'),
6479
6591
  import('../core/index.js')
6480
6592
  ]);
6481
6593
  const { manager, library, close } = await openLibraryManager2();
@@ -9419,8 +9531,8 @@ function makeNpxCommand() {
9419
9531
  process.exit(1);
9420
9532
  }
9421
9533
  });
9422
- npx.action(() => npx.help());
9423
- skills.action(() => skills.help());
9534
+ helpOnBareGroup(npx);
9535
+ helpOnBareGroup(skills);
9424
9536
  return npx;
9425
9537
  }
9426
9538
  function resolvePublisher(clonePath, url) {
@@ -9605,7 +9717,7 @@ function makePatchCommand() {
9605
9717
  am2.patchRemove(ref);
9606
9718
  logOk(`Patch removed for ${ref}`);
9607
9719
  });
9608
- cmd.action(() => cmd.help());
9720
+ helpOnBareGroup(cmd);
9609
9721
  return cmd;
9610
9722
  }
9611
9723
  function action2(fn) {
@@ -9613,14 +9725,14 @@ function action2(fn) {
9613
9725
  try {
9614
9726
  await fn(...args);
9615
9727
  } catch (err) {
9616
- const { condensePluginFailure } = await import('../plugin-store-OJTERUEZ.js');
9728
+ const { condensePluginFailure } = await import('../plugin-store-XQP2CRYH.js');
9617
9729
  logErr(condensePluginFailure(err instanceof Error ? err.message : String(err)));
9618
9730
  process.exitCode = 1;
9619
9731
  }
9620
9732
  };
9621
9733
  }
9622
9734
  async function reconcileAndReport(projectDir, plugins, opts = {}) {
9623
- const { reconcilePlugins } = await import('../plugin-store-OJTERUEZ.js');
9735
+ const { reconcilePlugins } = await import('../plugin-store-XQP2CRYH.js');
9624
9736
  if (plugins.length === 0) {
9625
9737
  logInfo("No plugins declared \u2014 nothing to reconcile.");
9626
9738
  return;
@@ -9631,14 +9743,14 @@ async function reconcileAndReport(projectDir, plugins, opts = {}) {
9631
9743
  else logInfo(`Plugin store ${result.reason}.`);
9632
9744
  } catch (err) {
9633
9745
  if (opts.strict) throw err;
9634
- const { condensePluginFailure } = await import('../plugin-store-OJTERUEZ.js');
9746
+ const { condensePluginFailure } = await import('../plugin-store-XQP2CRYH.js');
9635
9747
  logWarn(
9636
9748
  `reconcile skipped: ${condensePluginFailure(err instanceof Error ? err.message : String(err))}`
9637
9749
  );
9638
9750
  }
9639
9751
  }
9640
9752
  async function verifyPluginLoads(projectDir, spec, declared) {
9641
- const { loadPlugins } = await import('../plugin-store-OJTERUEZ.js');
9753
+ const { loadPlugins } = await import('../plugin-store-XQP2CRYH.js');
9642
9754
  const { createPluginRegistry } = await import('../plugin-registry/index.js');
9643
9755
  const registry = createPluginRegistry();
9644
9756
  await loadPlugins(
@@ -9661,7 +9773,7 @@ async function runInstall2(typedSpec, opts) {
9661
9773
  const rawSpec = typedSpec.trim();
9662
9774
  const projectDir = path19__default.resolve(opts.projectDir);
9663
9775
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9664
- const { specName, rollbackPluginStore, npmSpecError, projectRelativeFileSpec } = await import('../plugin-store-OJTERUEZ.js');
9776
+ const { specName, rollbackPluginStore, npmSpecError, projectRelativeFileSpec } = await import('../plugin-store-XQP2CRYH.js');
9665
9777
  const specError = npmSpecError(rawSpec);
9666
9778
  if (specError) throw new Error(specError);
9667
9779
  const spec = projectRelativeFileSpec(rawSpec, process.cwd(), projectDir);
@@ -9698,7 +9810,7 @@ async function runInstall2(typedSpec, opts) {
9698
9810
  async function runRemove(name, opts) {
9699
9811
  const projectDir = path19__default.resolve(opts.projectDir);
9700
9812
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9701
- const { specName } = await import('../plugin-store-OJTERUEZ.js');
9813
+ const { specName } = await import('../plugin-store-XQP2CRYH.js');
9702
9814
  const yamlPath = path19__default.join(projectDir, "skaile.yaml");
9703
9815
  if (!existsSync(yamlPath)) {
9704
9816
  logInfo(`No plugin matching ${S.cmd(name)}: there is no skaile.yaml in ${projectDir}.`);
@@ -9714,7 +9826,7 @@ async function runRemove(name, opts) {
9714
9826
  logOk(`Removed ${S.cmd(name)} from skaile.yaml plugins`);
9715
9827
  const remaining = editor.getPlugins();
9716
9828
  if (remaining.length === 0) {
9717
- const { rollbackPluginStore } = await import('../plugin-store-OJTERUEZ.js');
9829
+ const { rollbackPluginStore } = await import('../plugin-store-XQP2CRYH.js');
9718
9830
  await rollbackPluginStore(projectDir, []);
9719
9831
  logInfo("No plugins declared; removed .skaile/plugins/.");
9720
9832
  return;
@@ -9737,7 +9849,7 @@ async function runList(opts) {
9737
9849
  const registry = createPluginRegistry();
9738
9850
  if (declared.length > 0) {
9739
9851
  try {
9740
- const { loadPlugins } = await import('../plugin-store-OJTERUEZ.js');
9852
+ const { loadPlugins } = await import('../plugin-store-XQP2CRYH.js');
9741
9853
  const result = await loadPlugins(projectDir, declared, registry);
9742
9854
  for (const f of result.failed) logWarn(f.error);
9743
9855
  } catch (err) {
@@ -9768,7 +9880,7 @@ function makePluginCommand() {
9768
9880
  cmd.command("install <spec>").description("Add a plugin spec to skaile.yaml plugins and reconcile the store").option("--project-dir <path>", "Project directory", process.cwd()).action(action2(runInstall2));
9769
9881
  cmd.command("remove <name>").description("Remove a plugin (by package name) from skaile.yaml plugins and reconcile").option("--project-dir <path>", "Project directory", process.cwd()).action(action2(runRemove));
9770
9882
  cmd.command("list").description("List declared plugins and the targets they contribute").option("--project-dir <path>", "Project directory", process.cwd()).action(action2(runList));
9771
- cmd.action(() => cmd.help());
9883
+ helpOnBareGroup(cmd);
9772
9884
  return cmd;
9773
9885
  }
9774
9886
 
@@ -10984,7 +11096,7 @@ function makeRunCommand() {
10984
11096
  try {
10985
11097
  const agentDir = instanceId2 ? resolveInstanceAgentDir(projectDir, resolveSkWorkspaceConfig(projectDir), instanceId2) : resolveSingleShotAgentDir(projectDir, agentDefinition);
10986
11098
  const overrides = instanceId2 ? instanceSessionOverrides(resolveSkWorkspaceConfig(projectDir), instanceId2) : {};
10987
- const instanceModel = opts.model ? void 0 : overrides.model;
11099
+ const instanceModel = opts.model ? void 0 : modelForHarness(overrides.model, harness);
10988
11100
  const sessionModel = instanceModel ?? config.model;
10989
11101
  if (dryRun) {
10990
11102
  const problem = await printCompositionDryRun(
@@ -11104,6 +11216,19 @@ function makeResumeCommand() {
11104
11216
  else console.log(` ${S.dim("Run")} ${S.cmd("skaile run <flow-id>")} ${S.dim("first.")}`);
11105
11217
  process.exit(1);
11106
11218
  }
11219
+ const preflightLines = async () => {
11220
+ const settings = await resolveSettings(projectDir, {
11221
+ harness: session.harness,
11222
+ model: session.model
11223
+ });
11224
+ return preflightHarness({
11225
+ projectDir,
11226
+ harness: settings.harness ?? DEFAULT_HARNESS_ID,
11227
+ model: settings.model,
11228
+ roles: settings.roles
11229
+ });
11230
+ };
11231
+ if (!dryRun && reportPreflight(await preflightLines())) process.exit(1);
11107
11232
  console.log();
11108
11233
  console.log(
11109
11234
  ` ${S.label("Resuming:")} ${S.heading(session.flowId)}${session.label ? S.dim(` \u2014 ${session.label}`) : ""}`
@@ -11123,6 +11248,7 @@ function makeResumeCommand() {
11123
11248
  logErr(friendly ?? (err instanceof Error ? err.message : String(err)));
11124
11249
  process.exit(1);
11125
11250
  }
11251
+ if (dryRun && reportPreflight(await preflightLines())) process.exitCode = 1;
11126
11252
  });
11127
11253
  return cmd;
11128
11254
  }
@@ -11223,7 +11349,10 @@ function makeReplCommand() {
11223
11349
  let effectiveModel = effective.model;
11224
11350
  if (!opts.model && instanceId2) {
11225
11351
  try {
11226
- effectiveModel = instanceSessionOverrides(resolveSkWorkspaceConfig(projectDir), instanceId2).model ?? effectiveModel;
11352
+ effectiveModel = modelForHarness(
11353
+ instanceSessionOverrides(resolveSkWorkspaceConfig(projectDir), instanceId2).model,
11354
+ effective.harness ?? DEFAULT_HARNESS_ID
11355
+ ) ?? effectiveModel;
11227
11356
  } catch {
11228
11357
  }
11229
11358
  }
@@ -11262,14 +11391,15 @@ function valueNotFlag(flag) {
11262
11391
  function parseProviderIds(raw) {
11263
11392
  return (raw ?? "").split(",").map((id) => id.trim()).filter((id) => id.length > 0);
11264
11393
  }
11265
- function parseModelEndpointFlag(raw) {
11266
- if (raw === void 0) return void 0;
11267
- if (raw === true) return { enabled: true };
11394
+ function parseModelEndpointFlag(raw, agent) {
11395
+ const agentOverride = agent === true ? { agent: true } : {};
11396
+ if (raw === void 0) return agent === true ? { enabled: true, ...agentOverride } : void 0;
11397
+ if (raw === true) return { enabled: true, ...agentOverride };
11268
11398
  const port = Number(raw);
11269
11399
  if (raw === false || !/^\d+$/.test(raw) || port > 65535) {
11270
11400
  throw new Error(`--model-endpoint: invalid port '${String(raw)}'`);
11271
11401
  }
11272
- return { enabled: true, port };
11402
+ return { enabled: true, port, ...agentOverride };
11273
11403
  }
11274
11404
  function parsePortOption(raw) {
11275
11405
  const port = Number(raw);
@@ -11337,6 +11467,9 @@ function makeServeCommand() {
11337
11467
  ).option(
11338
11468
  "--model-endpoint [port]",
11339
11469
  "Serve an OpenAI-compatible model endpoint on loopback for apps next to the session (optional port; default from skaile.yaml model_endpoint.port, else ephemeral)"
11470
+ ).option(
11471
+ "--model-endpoint-agent",
11472
+ "Also offer the running agent as the model `skaile-agent` on the model endpoint (implies --model-endpoint)"
11340
11473
  ).option("--compile-test", "Build a compiled binary and run it (simulates Docker environment)").option(
11341
11474
  "--with-codex",
11342
11475
  "Include the Codex harness in the compiled binary (used with --compile-test)"
@@ -11367,7 +11500,7 @@ function makeServeCommand() {
11367
11500
  process.exitCode = 1;
11368
11501
  return;
11369
11502
  }
11370
- const dirProblem = (await import('../serve-preflight-24YWWYUG.js')).checkServeProjectDir(
11503
+ const dirProblem = (await import('../serve-preflight-NHZOKHIC.js')).checkServeProjectDir(
11371
11504
  opts.projectDir
11372
11505
  );
11373
11506
  if (dirProblem) {
@@ -11396,7 +11529,7 @@ function makeServeCommand() {
11396
11529
  }
11397
11530
  let providers = parseProviderIds(opts.providers);
11398
11531
  if (!managedCodex) {
11399
- const { resolveServeProvider } = await import('../serve-preflight-24YWWYUG.js');
11532
+ const { resolveServeProvider } = await import('../serve-preflight-NHZOKHIC.js');
11400
11533
  const picked = resolveServeProvider(opts.projectDir, opts.provider, providers);
11401
11534
  if ("problem" in picked) {
11402
11535
  logErr(picked.problem);
@@ -11405,10 +11538,10 @@ function makeServeCommand() {
11405
11538
  }
11406
11539
  providers = [...picked.providers];
11407
11540
  }
11408
- const modelEndpoint = parseModelEndpointFlag(opts.modelEndpoint);
11409
- const { checkHarnessSdk: checkHarnessSdk2, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-24YWWYUG.js');
11410
- const { checkServeHarness, checkServeAgents } = await import('../serve-preflight-24YWWYUG.js');
11411
- const startProblem = managedCodex ? null : await checkServeHarness(opts.projectDir, opts.harness) ?? checkServeAgents(opts.projectDir);
11541
+ const modelEndpoint = parseModelEndpointFlag(opts.modelEndpoint, opts.modelEndpointAgent);
11542
+ const { checkHarnessSdk: checkHarnessSdk2, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-NHZOKHIC.js');
11543
+ const { checkServeHarness, checkServeAgents, checkServeConnectors } = await import('../serve-preflight-NHZOKHIC.js');
11544
+ const startProblem = managedCodex ? null : await checkServeHarness(opts.projectDir, opts.harness) ?? checkServeAgents(opts.projectDir) ?? checkServeConnectors(opts.projectDir);
11412
11545
  if (startProblem) {
11413
11546
  logErr(startProblem);
11414
11547
  process.exitCode = 1;
@@ -11474,12 +11607,12 @@ function makeServeCommand() {
11474
11607
  );
11475
11608
  }
11476
11609
  async function ensurePluginsLoadedForServe(projectDir) {
11477
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-LWNKX56Y.js');
11610
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-INS4B7OQ.js');
11478
11611
  try {
11479
11612
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
11480
11613
  const config = resolveSkWorkspaceConfig2(projectDir);
11481
11614
  if (!config.plugins || config.plugins.length === 0) return;
11482
- const { ensurePluginsLoaded } = await import('../plugin-store-OJTERUEZ.js');
11615
+ const { ensurePluginsLoaded } = await import('../plugin-store-XQP2CRYH.js');
11483
11616
  const { pluginRegistry } = await import('../plugin-registry/index.js');
11484
11617
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
11485
11618
  if (result.loaded.length > 0) {
@@ -11493,14 +11626,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
11493
11626
  }
11494
11627
  }
11495
11628
  async function runCompileTest(opts) {
11496
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-LWNKX56Y.js');
11629
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-INS4B7OQ.js');
11497
11630
  const { tmpdir } = await import('os');
11498
11631
  const { dirname: dirname3, join: join6, resolve: resolve4 } = await import('path');
11499
11632
  const { fileURLToPath: fileURLToPath2 } = await import('url');
11500
11633
  const { unlinkSync, existsSync: existsSync22 } = await import('fs');
11501
11634
  const { spawn } = await import('child_process');
11502
11635
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
11503
- const { MONOREPO_ROOT } = await import('../paths-RPK5PNZQ.js');
11636
+ const { MONOREPO_ROOT } = await import('../paths-77PXOXZY.js');
11504
11637
  if (MONOREPO_ROOT === null) {
11505
11638
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
11506
11639
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -12272,7 +12405,7 @@ function makeSessionCommand() {
12272
12405
  logOk(`Deleted session: ${S.dim(runId.slice(0, 8))}`);
12273
12406
  });
12274
12407
  cmd.addCommand(makeSessionLogsCommand());
12275
- cmd.action(() => cmd.help());
12408
+ helpOnBareGroup(cmd);
12276
12409
  return cmd;
12277
12410
  }
12278
12411
  var SYNC_ICONS = {
@@ -12460,8 +12593,8 @@ function makeStoreCommand() {
12460
12593
  "--all",
12461
12594
  `List every match (default: ${STORE_ROW_LIMIT} rows, only what \`skaile add\` can install)`
12462
12595
  ).option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
12463
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-Q7QZJY5D.js');
12464
- const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-RZW2AFD6.js');
12596
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
12597
+ const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-BHBHQMBA.js');
12465
12598
  const projectDir = path19__default.resolve(opts.projectDir);
12466
12599
  if (opts.kind && !getKnownKinds2().has(opts.kind)) {
12467
12600
  logErr(
@@ -12519,8 +12652,8 @@ function makeStoreCommand() {
12519
12652
  }
12520
12653
  });
12521
12654
  store.command("show <ref>").description("Show a store asset's details + provenance (source, files, integrity)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (ref, opts) => {
12522
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-Q7QZJY5D.js');
12523
- const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-WVPRL7CP.js');
12655
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
12656
+ const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-HVNPK2ZF.js');
12524
12657
  try {
12525
12658
  parseAssetRef(ref);
12526
12659
  } catch (e) {
@@ -12539,6 +12672,7 @@ function makeStoreCommand() {
12539
12672
  const manifestFailure = {};
12540
12673
  if (supportsInstallManifest2(remote)) {
12541
12674
  manifest = await remote.getInstallManifest(canonical).catch(async (err) => {
12675
+ if (err instanceof OfflineError) manifestFailure.airGapped = true;
12542
12676
  manifestFailure.text = await describeStoreFailure(err, path19__default.resolve(opts.projectDir));
12543
12677
  return null;
12544
12678
  });
@@ -12589,7 +12723,11 @@ function makeStoreCommand() {
12589
12723
  const notInstallable = storeNotInstallableReason(asset);
12590
12724
  const notRunnable = !notInstallable && asset.kind === "mcp-server" && manifest ? await mcpNotRunnableHere(manifest, asset.name) : void 0;
12591
12725
  if (notInstallable) console.log(` ${S.dim(`Not installable: ${notInstallable}`)}`);
12592
- else if (notRunnable) {
12726
+ else if (manifestFailure.airGapped) {
12727
+ console.log(
12728
+ ` ${S.dim(`Not installable offline: set catalog.cache_ttl above 0, then run skaile add ${canonical}`)}`
12729
+ );
12730
+ } else if (notRunnable) {
12593
12731
  console.log(` ${S.dim(`Not runnable here: ${notRunnable}`)}`);
12594
12732
  console.log(
12595
12733
  ` ${S.dim(`skaile add ${canonical} still records it in the lock, but writes no .mcp.json entry.`)}`
@@ -13349,7 +13487,7 @@ program.command("init [project-dir]").description("Initialize a project director
13349
13487
  (projectDir, opts) => runInit(projectDir, opts)
13350
13488
  );
13351
13489
  async function runInit(projectDir, opts) {
13352
- const { mkdirSync: mkdirSync5, writeFileSync: writeFileSync7 } = await import('fs');
13490
+ const { mkdirSync: mkdirSync6, writeFileSync: writeFileSync8 } = await import('fs');
13353
13491
  const { stringify: stringify2 } = await import('yaml');
13354
13492
  const { HARNESS_TARGETS: HARNESS_TARGETS2, SUPPORTED_HARNESSES: SUPPORTED_HARNESSES2, resolveConfiguredHarnessName: resolveConfiguredHarnessName2 } = await import('../core/index.js');
13355
13493
  const harness = opts.harness ?? "claude-code";
@@ -13373,28 +13511,28 @@ async function runInit(projectDir, opts) {
13373
13511
  const created = [];
13374
13512
  const { existsSync: existsSync22 } = await import('fs');
13375
13513
  if (!existsSync22(resolved)) {
13376
- mkdirSync5(resolved, { recursive: true });
13514
+ mkdirSync6(resolved, { recursive: true });
13377
13515
  created.push(".");
13378
13516
  }
13379
13517
  const skaileDir = path19__default.join(resolved, ".skaile");
13380
13518
  if (!existsSync22(skaileDir)) {
13381
- mkdirSync5(path19__default.join(skaileDir, "sessions"), { recursive: true });
13519
+ mkdirSync6(path19__default.join(skaileDir, "sessions"), { recursive: true });
13382
13520
  created.push(".skaile/");
13383
13521
  }
13384
13522
  const settingsPath = path19__default.join(skaileDir, "settings.json");
13385
13523
  if (!existsSync22(settingsPath)) {
13386
- writeFileSync7(settingsPath, "{}\n");
13524
+ writeFileSync8(settingsPath, "{}\n");
13387
13525
  created.push(".skaile/settings.json");
13388
13526
  }
13389
13527
  const wsConfigPath = path19__default.join(resolved, "skaile.yaml");
13390
13528
  if (!existsSync22(wsConfigPath)) {
13391
- writeFileSync7(wsConfigPath, stringify2(buildInitWorkspaceConfig(projectName, harness)));
13529
+ writeFileSync8(wsConfigPath, stringify2(buildInitWorkspaceConfig(projectName, harness)));
13392
13530
  created.push("skaile.yaml");
13393
13531
  }
13394
13532
  for (const dir of new Set(Object.values(HARNESS_TARGETS2[harness].local))) {
13395
13533
  const full = path19__default.join(resolved, dir);
13396
13534
  if (!existsSync22(full)) {
13397
- mkdirSync5(full, { recursive: true });
13535
+ mkdirSync6(full, { recursive: true });
13398
13536
  created.push(`${dir}/`);
13399
13537
  }
13400
13538
  }
@@ -13422,7 +13560,7 @@ function buildInitWorkspaceConfig(projectName, harness) {
13422
13560
  }
13423
13561
  async function initGitScaffold(resolved, created) {
13424
13562
  const { execSync: execSync2 } = await import('child_process');
13425
- const { existsSync: existsSync22, readFileSync: readFileSync13, writeFileSync: writeFileSync7 } = await import('fs');
13563
+ const { existsSync: existsSync22, readFileSync: readFileSync14, writeFileSync: writeFileSync8 } = await import('fs');
13426
13564
  const gitignorePath = path19__default.join(resolved, ".gitignore");
13427
13565
  const entries = [
13428
13566
  "node_modules/",
@@ -13431,18 +13569,14 @@ async function initGitScaffold(resolved, created) {
13431
13569
  "*.pyc",
13432
13570
  ".skaile/sessions/",
13433
13571
  ".skaile/cache/",
13434
- // skaile-created artifacts that must never be committed: the per-session log
13435
- // DB (SQLite incl. -shm/-wal, ends in .db — not caught by *.log), personal
13436
- // settings (holds API keys), the workspace AI provider registry (endpoints
13437
- // and credential references are per-machine), the install history, and the
13438
- // per-run model-endpoint discovery file (holds a bearer token).
13439
- ".skaile/logs.db*",
13572
+ // skaile-created artifacts that must never be committed: personal settings (holds API
13573
+ // keys), the workspace AI provider registry (endpoints and credential references are
13574
+ // per-machine), and the per-run model-endpoint discovery file (holds a bearer token).
13440
13575
  ".skaile/settings.json",
13441
13576
  ".skaile/providers.yml",
13442
- ".skaile/history.yaml",
13443
13577
  ".skaile/model-endpoint.json",
13444
- // Machine state of the runs: one compiled-prompt snapshot per run, and the ledger of the
13445
- // agent files an install wrote.
13578
+ // Machine state of the runs: the log database, the install history, one compiled-prompt
13579
+ // snapshot per run, and the ledger of the agent files an install wrote.
13446
13580
  ...RUN_STATE_GITIGNORE_ENTRIES,
13447
13581
  // Per-machine files a run writes into the project: the system prompt handed to the harness
13448
13582
  // (it carries the host path) and omp's session logs.
@@ -13463,12 +13597,12 @@ async function initGitScaffold(resolved, created) {
13463
13597
  ".env",
13464
13598
  ".env.local"
13465
13599
  ];
13466
- const existing = existsSync22(gitignorePath) ? readFileSync13(gitignorePath, "utf-8") : "";
13600
+ const existing = existsSync22(gitignorePath) ? readFileSync14(gitignorePath, "utf-8") : "";
13467
13601
  const have = new Set(existing.split("\n").map((l) => l.trim()));
13468
13602
  const append = entries.filter((e) => !have.has(e));
13469
13603
  if (append.length > 0) {
13470
13604
  const prefix = existing && !existing.endsWith("\n") ? "\n" : "";
13471
- writeFileSync7(gitignorePath, `${existing + prefix}${append.join("\n")}
13605
+ writeFileSync8(gitignorePath, `${existing + prefix}${append.join("\n")}
13472
13606
  `);
13473
13607
  if (!existing) created.push(".gitignore");
13474
13608
  }
@@ -13502,7 +13636,7 @@ async function bootstrapUserConfig() {
13502
13636
  }
13503
13637
  async function hydrateInitSources(resolved, created) {
13504
13638
  try {
13505
- const { ensureSourcesCloned } = await import('../ensure-sources-VELKRM6X.js');
13639
+ const { ensureSourcesCloned } = await import('../ensure-sources-5QWKUIUD.js');
13506
13640
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
13507
13641
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
13508
13642
  if (hydrate.failed.length > 0) {
@@ -13543,7 +13677,7 @@ function printInitSummary(resolved, projectDir, created) {
13543
13677
  }
13544
13678
  program.hook("preAction", (_program, actionCommand) => setActiveCommand(actionCommand));
13545
13679
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
13546
- const { cmdSetup } = await import('../setup-F5JX64UP.js');
13680
+ const { cmdSetup } = await import('../setup-EX7Z7XRN.js');
13547
13681
  await cmdSetup([], { projectDir: process.cwd() });
13548
13682
  });
13549
13683
  program.addCommand(makeInstallCommand());
@@ -13624,7 +13758,7 @@ program.hook("postAction", async (_thisCommand, actionCommand) => {
13624
13758
  const opts = actionCommand.opts();
13625
13759
  if (opts.global || opts.dryRun) return;
13626
13760
  const projectDir = path19__default.resolve(opts.projectDir ?? process.cwd());
13627
- const { refreshPluginSkills } = await import('../claude-code-DS26HI3K.js');
13761
+ const { refreshPluginSkills } = await import('../claude-code-ILZ46SLO.js');
13628
13762
  try {
13629
13763
  if (await refreshPluginSkills(projectDir)) {
13630
13764
  logInfo(`Updated ${S.cmd(".claude/plugins/skaile/skills")} (the --full plugin copy)`);