@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
@@ -1,12 +1,12 @@
1
- import { agentInstanceWarningLines, agentInstanceErrorLines, reportUnknownHarnesses, reportProjectConfig } from './chunk-E5AZA2FL.js';
1
+ import { agentInstanceWarningLines, agentInstanceErrorLines, reportUnknownHarnesses, reportProjectConfig } from './chunk-DJSGQW2Q.js';
2
2
  import { createSpinner } from './chunk-NESV47MF.js';
3
- import { getKindRegistry } from './chunk-QCR5AE5E.js';
4
- import { logInfo, logWarn, S, logErr, TARGET_DEFAULT_HINT, logOk, colorRef, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, warnStaleHarnessCopies, formatSoftDepHint, reportLegacyOmpCopies } from './chunk-DXBHGNSI.js';
5
- import { loadAgentManifest, createCompositionContentSource, hashAgentFiles, isCompilePinCurrent, compileComposition, CompositionError, loadCompileManifestFromDir, verifyConventionItems, resolveAgentInstance, isCompositionError, resolveBinding } from './chunk-OLZE4IHX.js';
6
- import { AssetManager } from './chunk-56PIAGD6.js';
7
- import { effectiveComposes } from './chunk-VT6G5AJV.js';
8
- import { readLock } from './chunk-TMJBEGS4.js';
9
- import { agentSourceCacheDir, SourceEntryError, effectiveAgentInstances, resolveSkWorkspaceConfig, resolveAgentDefinitionDir, AgentRefResolutionError } from './chunk-O7ADRMCR.js';
3
+ import { getKindRegistry } from './chunk-E675QKFG.js';
4
+ import { logInfo, logWarn, S, logErr, TARGET_DEFAULT_HINT, logOk, colorRef, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, warnStaleHarnessCopies, formatSoftDepHint, reportLegacyOmpCopies } from './chunk-BLBXOG5Q.js';
5
+ import { loadAgentManifest, createCompositionContentSource, hashAgentFiles, isCompilePinCurrent, compileComposition, CompositionError, loadCompileManifestFromDir, verifyConventionItems, resolveAgentInstance, isCompositionError, resolveBinding } from './chunk-PBEDRYHP.js';
6
+ import { AssetManager } from './chunk-VEIWFS7Z.js';
7
+ import { effectiveComposes } from './chunk-WS3BOCAT.js';
8
+ import { readLock } from './chunk-4KPQ6ILH.js';
9
+ import { agentSourceCacheDir, SourceEntryError, effectiveAgentInstances, resolveSkWorkspaceConfig, resolveAgentDefinitionDir, AgentRefResolutionError } from './chunk-FZO64PLQ.js';
10
10
  import { userConfigPath, globalSkaileDir } from './chunk-L5VSIPQD.js';
11
11
  import { parseAssetRef } from './chunk-V5KG6CCV.js';
12
12
  import { homedir } from 'os';
@@ -98,6 +98,31 @@ async function missingLines(items, source, first, agentName) {
98
98
  }
99
99
  return [...new Set(lines)];
100
100
  }
101
+ async function lockBehindLibraryErrors(agentDir, projectDir) {
102
+ const manifest = await loadAgentManifest(agentDir);
103
+ if (!manifest) return [];
104
+ const files = await hashAgentFiles(agentDir);
105
+ const items = effectiveComposes(
106
+ manifest.composes,
107
+ files.map((f) => f.path)
108
+ );
109
+ const source = createCompositionContentSource({
110
+ agentDir,
111
+ projectDir,
112
+ registry: getKindRegistry()
113
+ });
114
+ const out = [];
115
+ for (const item of items) {
116
+ try {
117
+ await source.load(item.ref, item.kind);
118
+ } catch (err) {
119
+ if (err instanceof CompositionError && err.code === "composition_asset_missing" && err.moved) {
120
+ out.push(err);
121
+ }
122
+ }
123
+ }
124
+ return out;
125
+ }
101
126
 
102
127
  // cli/src/commands/project.ts
103
128
  var REF_HINT = "kind:@<publisher>/<name>#<version> (e.g. skill:@skaile-ai/use-exa#1.0.0)";
@@ -242,7 +267,7 @@ async function runRefInstall(ref, opts) {
242
267
  const spinner = createSpinner();
243
268
  spinner.start(`Installing ${ref}`);
244
269
  try {
245
- const { openCatalogSource, openLibrary } = await import('./open-library-Q7QZJY5D.js');
270
+ const { openCatalogSource, openLibrary } = await import('./open-library-3HMXYGUF.js');
246
271
  const catalog = await openCatalogSource({ projectDir: path2.resolve(opts.projectDir) });
247
272
  if (!supportsInstallManifest(catalog)) {
248
273
  throw new Error(
@@ -296,7 +321,7 @@ async function runYamlInstall(opts) {
296
321
  }
297
322
  if (await reportUnknownHarnesses(projectDir) > 0) process.exit(1);
298
323
  try {
299
- const { ensureSourcesCloned } = await import('./ensure-sources-VELKRM6X.js');
324
+ const { ensureSourcesCloned } = await import('./ensure-sources-5QWKUIUD.js');
300
325
  const hydrate = ensureSourcesCloned(projectDir, { quiet: true });
301
326
  if (hydrate.cloned.length > 0) {
302
327
  logOk(`Cloned source(s): ${hydrate.cloned.join(", ")}`);
@@ -546,7 +571,14 @@ async function editedConventionFiles(projectDir) {
546
571
  } catch (err) {
547
572
  if (!isCompositionError(err)) throw err;
548
573
  if (err.code === "composition_rebuild_required") {
549
- messages.push(`${ref} (${label}): ${err.code}: ${err.message}`);
574
+ const behind = await lockBehindLibraryErrors(agentDir, projectDir);
575
+ if (behind.length > 0) {
576
+ for (const e of behind) {
577
+ messages.push(`${ref} (${label}): ${e.code}: ${e.message}`);
578
+ }
579
+ } else {
580
+ messages.push(`${ref} (${label}): ${err.code}: ${err.message}`);
581
+ }
550
582
  }
551
583
  }
552
584
  }
@@ -618,5 +650,5 @@ function makeCleanCommand() {
618
650
  }
619
651
 
620
652
  export { REF_HINT, editedConventionFiles, globalProblems, makeCheckCommand, makeCleanCommand, makeInstallCommand, pinComposedAgents, reportAgentInstances, reportContentHeld, reportInferredHarnesses, reportInstalledSoftDeps, reportMoved, reportPresetExpansions, reportRelocked, reportReplaced, reportRewritten, reportStoreNotChecked, reportStoreNotCheckedForUpdates, runPointerOnlyInstall, runYamlInstall, supportsInstallManifest };
621
- //# sourceMappingURL=chunk-YMO4ZDLC.js.map
622
- //# sourceMappingURL=chunk-YMO4ZDLC.js.map
653
+ //# sourceMappingURL=chunk-PLVM6OIV.js.map
654
+ //# sourceMappingURL=chunk-PLVM6OIV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../cli/src/agent-pins.ts","../cli/src/commands/project.ts"],"names":["path","confirm"],"mappings":"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","file":"chunk-PLVM6OIV.js","sourcesContent":["/**\n * The compile pin of the agents `skaile add` keeps under `.skaile/cache/agents/<name>/`.\n *\n * An agent that composes an `inline-snapshot` item (a persona, a ruleset, …) runs from\n * `compile_manifest.json`, so it cannot run without one. `add`, `install` and `update` pin\n * such an agent themselves, once per lock revision: a pin that still matches the bytes the\n * lock serves (one `skaile rebuild` wrote, or an earlier add/install) is left alone, and\n * `skaile rebuild` only refreshes it. `update` also re-runs the rebuild for any\n * agent that holds a pin, a convention-only agent (SOUL.md) included, because the update\n * moved the bytes the pin hashes.\n */\n\nimport { existsSync, readdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { agentSourceCacheDir } from \"@skaile/workspaces/core\";\nimport {\n CompositionError,\n type CompositionContentSource,\n compileComposition,\n createCompositionContentSource,\n hashAgentFiles,\n isCompilePinCurrent,\n loadAgentManifest,\n loadCompileManifestFromDir,\n resolveBinding,\n} from \"@skaile/workspaces/runner\";\nimport { type AgentComposeItem, effectiveComposes } from \"@skaile/workspaces/types/manifests\";\nimport { logInfo, logWarn } from \"./helpers.ts\";\nimport { getKindRegistry } from \"./open-registry.ts\";\n\n/**\n * Whether `run` cannot start the agent without a compile pin: it declares an `inline-snapshot`\n * item (a persona, a ruleset bound so, ...). The convention files and the other bindings read\n * their source when no pin exists, so such an agent is left unpinned until `skaile rebuild`.\n */\nfunction needsPin(composes: readonly AgentComposeItem[]): boolean {\n try {\n return composes.some((item) => resolveBinding(item) === \"inline-snapshot\");\n } catch {\n // An item of a kind that has no binding: `run` and `rebuild` name it; nothing to pin here.\n return false;\n }\n}\n\n/**\n * Compile every cached agent of the project that declares an `inline-snapshot` composition item\n * and has no current pin. A compile that fails (an item no library or lock serves) is a warning\n * here: `skaile check` and `skaile run` raise the same error for the agent.\n *\n * @returns The names of the agents that were compiled.\n */\nexport async function pinComposedAgents(\n projectDir: string,\n opts: { repin?: boolean } = {},\n): Promise<string[]> {\n return (await pinComposedAgentsReport(projectDir, opts)).pinned;\n}\n\n/**\n * The `Missing:` line `install` prints for a composed asset the lock pins but no copy serves:\n * the same words as for a locked skill the library moved past (p1510).\n */\nfunction missingLine(err: CompositionError, agentName: string): string {\n if (err.moved) {\n const m = err.moved;\n return `${m.key} (library \"${m.library}\" is at ${m.libraryVersion}, locked ${m.lockedVersion}; \\`skaile update\\` moves the lock to it)`;\n }\n return `${err.ref ?? agentName} (agent ${agentName}: ${err.message})`;\n}\n\n/**\n * {@link pinComposedAgents}, plus the agents `run` could not start. An agent with no usable pin\n * whose locked persona or ruleset no library copy serves any more (the library moved on, or the\n * project is a fresh clone) is a `missing` line, not a warning: `install` exits 1 for it and\n * names `skaile update`, the only command that moves the lock (p1510). An agent that still has\n * its pin keeps running from it, so a library bump alone is silent.\n */\nexport async function pinComposedAgentsReport(\n projectDir: string,\n opts: { repin?: boolean } = {},\n): Promise<{ pinned: string[]; missing: string[] }> {\n const cacheDir = agentSourceCacheDir(projectDir);\n const pinned: string[] = [];\n const missing: string[] = [];\n if (!existsSync(cacheDir)) return { pinned, missing };\n for (const entry of readdirSync(cacheDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const agentDir = path.join(cacheDir, entry.name);\n const manifest = await loadAgentManifest(agentDir);\n if (!manifest) continue;\n const wanted = !!manifest.composes?.length && needsPin(manifest.composes);\n // `update` re-runs the rebuild for an agent that was pinned: the pin hashes bytes it moved.\n if (!wanted && !(opts.repin && (await hasCompilePin(agentDir)))) continue;\n const composes = manifest.composes ?? [];\n let items: AgentComposeItem[] = [];\n const source = createCompositionContentSource({\n agentDir,\n projectDir,\n registry: getKindRegistry(),\n });\n try {\n const files = await hashAgentFiles(agentDir);\n items = effectiveComposes(\n composes,\n files.map((f) => f.path),\n );\n if (await isCompilePinCurrent({ agentDir, items, source })) continue;\n const result = await compileComposition({ agentDir, items, source });\n pinned.push(entry.name);\n logInfo(\n `Compiled agent ${manifest.name ?? entry.name} (${result.resolvedCount} composition items) → prompt v${result.manifest.prompt_version}`,\n );\n } catch (err) {\n if (err instanceof CompositionError && err.code === \"composition_asset_missing\") {\n // The bytes the lock pins are gone, but the pin that was compiled from them still\n // serves `run`: nothing for install to report.\n if (await hasCompilePin(agentDir)) continue;\n for (const line of await missingLines(items, source, err, entry.name)) {\n if (!missing.includes(line)) missing.push(line);\n }\n continue;\n }\n const reason = err instanceof Error ? err.message : String(err);\n const code = err && typeof err === \"object\" && \"code\" in err ? `${String(err.code)}: ` : \"\";\n logWarn(`Could not compile agent ${entry.name}: ${code}${reason}`);\n }\n }\n return { pinned, missing };\n}\n\n/** Whether the agent folder holds a readable compile pin. */\nasync function hasCompilePin(agentDir: string): Promise<boolean> {\n try {\n return (await loadCompileManifestFromDir(agentDir)) !== undefined;\n } catch {\n return false;\n }\n}\n\n/** One line per item the source cannot serve (the compile names only the first). */\nasync function missingLines(\n items: readonly AgentComposeItem[],\n source: CompositionContentSource,\n first: CompositionError,\n agentName: string,\n): Promise<string[]> {\n const lines = [missingLine(first, agentName)];\n for (const item of items) {\n try {\n await source.load(item.ref, item.kind);\n } catch (err) {\n if (err instanceof CompositionError && err.code === \"composition_asset_missing\") {\n lines.push(missingLine(err, agentName));\n }\n }\n }\n return [...new Set(lines)];\n}\n\n/**\n * The items of the agent that a rebuild could not serve because a registered library moved past\n * the version the lock pins: each error names `skaile update`, the command that moves the lock.\n * `check` prints these instead of sending the user to a `skaile rebuild` that would fail with\n * the same lines. Empty when a rebuild can read every item.\n */\nexport async function lockBehindLibraryErrors(\n agentDir: string,\n projectDir: string,\n): Promise<CompositionError[]> {\n const manifest = await loadAgentManifest(agentDir);\n if (!manifest) return [];\n const files = await hashAgentFiles(agentDir);\n const items = effectiveComposes(\n manifest.composes,\n files.map((f) => f.path),\n );\n const source = createCompositionContentSource({\n agentDir,\n projectDir,\n registry: getKindRegistry(),\n });\n const out: CompositionError[] = [];\n for (const item of items) {\n try {\n await source.load(item.ref, item.kind);\n } catch (err) {\n if (\n err instanceof CompositionError &&\n err.code === \"composition_asset_missing\" &&\n err.moved\n ) {\n out.push(err);\n }\n }\n }\n return out;\n}\n","import { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport {\n AssetManager,\n type ContentHeld,\n type InstalledAgentInstance,\n type LibraryMove,\n type ReplacedAsset,\n type RewrittenAgent,\n} from \"@skaile/workspaces/asset-manager\";\nimport {\n type AgentInstanceConfig,\n AgentRefResolutionError,\n type HarnessName,\n effectiveAgentInstances,\n globalSkaileDir,\n type PresetExpansion,\n parseAssetRef,\n readLock,\n resolveAgentDefinitionDir,\n resolveSkWorkspaceConfig,\n SourceEntryError,\n userConfigPath,\n} from \"@skaile/workspaces/core\";\nimport {\n isCompositionError,\n loadAgentManifest,\n resolveAgentInstance,\n verifyConventionItems,\n} from \"@skaile/workspaces/runner\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { Command } from \"commander\";\nimport {\n colorRef,\n requireProjectConfig,\n formatSoftDepHint,\n deferredWarnings,\n logErr,\n logInfo,\n logOk,\n logWarn,\n parseHarnessFilter,\n reportLegacyOmpCopies,\n S,\n TARGET_DEFAULT_HINT,\n warnFilesOnlyDelegates,\n warnStaleHarnessCopies,\n warnPlaceholderBodies,\n} from \"../helpers.ts\";\nimport {\n agentInstanceErrorLines,\n agentInstanceWarningLines,\n reportProjectConfig,\n reportUnknownHarnesses,\n} from \"../config-checks.ts\";\nimport { createSpinner } from \"../spinner.ts\";\nimport { getKindRegistry } from \"../open-registry.ts\";\nimport { lockBehindLibraryErrors, pinComposedAgentsReport } from \"../agent-pins.ts\";\n\n/**\n * Canonical asset-ref shape accepted by `skaile install <ref>`:\n * `kind:@<publisher>/<name>#<version>` (the `#` version sigil). Validated via\n * `parseAssetRef` so the CLI shares the single canonical grammar; the legacy\n * trailing-`@version` shape is rejected.\n */\nexport const REF_HINT = \"kind:@<publisher>/<name>#<version> (e.g. skill:@skaile-ai/use-exa#1.0.0)\";\n\n/** True when `ref` parses as a canonical asset ref. */\nfunction isValidAssetRef(ref: string): boolean {\n try {\n parseAssetRef(ref);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Minimal catalog-source surface the pointer-only install path needs.\n * `RemoteCatalogSource` satisfies this — narrowing keeps {@link runPointerOnlyInstall}\n * testable with a hand-rolled stub.\n */\nexport interface InstallManifestSource {\n getInstallManifest(ref: string): Promise<InstallManifest>;\n}\n\n/**\n * Capability check: is this catalog source able to serve install manifests?\n *\n * `openCatalogSource` returns a `RemoteCatalogSource | RestCatalogSource`.\n * Only the tRPC-framed `RemoteCatalogSource` implements `getInstallManifest`;\n * the REST-framed `RestCatalogSource` (the default for any catalog URL other\n * than `https://skaile.store`) does not. Calling it unconditionally would be a\n * runtime `TypeError`, so the pointer-only install path must capability-detect\n * first and fail with a clear, actionable message.\n */\nexport function supportsInstallManifest(source: unknown): source is InstallManifestSource {\n return (\n typeof (source as { getInstallManifest?: unknown } | null | undefined)?.getInstallManifest ===\n \"function\"\n );\n}\n\n/**\n * Minimal library surface the pointer-only install path needs.\n * `LocalIndex` satisfies this.\n */\nexport interface InstallLibrary {\n install(manifest: InstallManifest): Promise<{ installPath: string }>;\n}\n\n/**\n * Result of a pointer-only catalog install.\n */\nexport interface PointerOnlyInstallResult {\n /** Absolute path the verified asset bytes were written to. */\n installPath: string;\n /** The pinned upstream commit SHA the asset was fetched at. */\n commitSha: string;\n /** Number of files in the install manifest. */\n fileCount: number;\n}\n\n/**\n * Pointer-only catalog install — the `skaile install <ref>` code path.\n *\n * 1. Resolves the pointer-only {@link InstallManifest} from the Catalog.\n * 2. Hands it to the library, which fetches each file's bytes directly from\n * the upstream repo at the pinned commit, verifies every per-file SHA256\n * plus the composite SHA256, and only then writes the verified files.\n *\n * Both dependencies are injected so the function is unit-testable without a\n * network round-trip. In production the CLI passes a `RemoteCatalogSource`\n * and a `LocalIndex`.\n *\n * @param ref - Canonical asset ref (`kind:@<publisher>/<name>#<version>`).\n * @param deps - Injected catalog source + library.\n * @returns The install path, pinned commit SHA, and file count.\n * @throws When the ref is malformed, the manifest cannot be resolved, or any\n * hash verification fails. The underlying error message is surfaced as-is.\n */\nexport async function runPointerOnlyInstall(\n ref: string,\n deps: { catalog: InstallManifestSource; library: InstallLibrary },\n): Promise<PointerOnlyInstallResult> {\n let requested: ReturnType<typeof parseAssetRef>;\n try {\n requested = parseAssetRef(ref);\n } catch (e) {\n throw new Error(\n `malformed asset ref '${ref}' — expected ${REF_HINT}: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n const manifest = await deps.catalog.getInstallManifest(ref);\n // [M1] Identity check: the catalog must not install a different asset than\n // requested. Compare the PARSED refs (kind/publisher/name/pin) so equivalent\n // spellings (optional `kind:`, default `skill`) are treated as the same ref.\n const got = parseAssetRef(manifest.ref);\n if (\n got.kind !== requested.kind ||\n got.publisher !== requested.publisher ||\n got.name !== requested.name ||\n got.pin !== requested.pin\n ) {\n throw new Error(\n `catalog identity mismatch: requested '${ref}' but the catalog returned a manifest for '${manifest.ref}'`,\n );\n }\n const { installPath } = await deps.library.install(manifest);\n return {\n installPath,\n commitSha: manifest.source.commitSha,\n fileCount: manifest.files.length,\n };\n}\n\n/**\n * Print one summary line per `preset:` dependency `skaile install` expanded: how many\n * asset items joined the install set and how many instance items (`library://`,\n * placeholders) were skipped, which only `skaile preset apply` materialises.\n */\nexport function reportPresetExpansions(\n presets: readonly PresetExpansion[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const preset of presets ?? []) {\n onLine(\n `preset ${preset.ref}: ${preset.assets} assets, ${preset.skipped} instance items skipped (apply with skaile preset apply)`,\n );\n }\n}\n\n/**\n * Print one line per agent instance `skaile install` rendered (with the files\n * written) and one per native agent file removed because its instance left `skaile.yaml`.\n */\nexport function reportAgentInstances(\n instances: readonly InstalledAgentInstance[] | undefined,\n removedFiles: readonly string[] | undefined,\n onLine: (line: string) => void = logInfo,\n onRemoved: (line: string) => void = logWarn,\n): void {\n for (const instance of instances ?? []) {\n onLine(`agent ${instance.id}: ${instance.files.join(\", \")}`);\n }\n for (const file of removedFiles ?? []) onRemoved(`Removed: ${file}`);\n}\n\n/** One `Re-locked` line per lock entry `install`/`update` rewrote for an already-locked asset. */\nexport function reportRelocked(\n relocked: string[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const ref of relocked ?? []) onLine(`Re-locked ${ref}`);\n}\n\n/**\n * One line per locked library asset whose library holds the locked version with other bytes.\n * `install` keeps the lock and the deployed copy; only `update` takes the edit (OQ13, p1911).\n * The project does not match its library, as `check` says, so the run exits 1.\n */\nexport function reportContentHeld(\n held: ContentHeld[] | undefined,\n onLine: (line: string) => void = logWarn,\n): void {\n for (const h of held ?? []) {\n onLine(\n `${h.ref.split(\"#\")[0]}: library \"${h.library}\" changed since lock (same version ${h.version}). Run ${S.cmd(\"skaile update\")} to take the change.`,\n );\n process.exitCode = 1;\n }\n}\n\n/** One line per global entry `install --global` limited to the one harness that holds its copy (p1442). */\nexport function reportInferredHarnesses(\n inferred: readonly { ref: string; harnesses: readonly string[] }[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const i of inferred ?? []) {\n onLine(\n `${i.ref} stays on ${i.harnesses.join(\", \")} (its only copy); add it to another harness with \\`skaile add ${i.ref} --global --harness <id>\\``,\n );\n }\n}\n\n/** One `! <ref> moved from <a> to <b>` line per locked asset that now resolves from another library. */\nexport function reportMoved(\n moved: readonly LibraryMove[] | undefined,\n onLine: (line: string) => void = logWarn,\n): void {\n for (const m of moved ?? []) onLine(`${m.ref} moved from ${m.from} to ${m.to}`);\n}\n\n/** One `replaced <old> → <new>` line per asset `install`/`update` moved to another locked version. */\nexport function reportReplaced(\n replaced: readonly ReplacedAsset[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const r of replaced ?? []) onLine(`${r.ref} replaced ${r.from} → ${r.to}`);\n}\n\n/** One `Rewrote <file> (agent render changed)` line per rendered agent file whose bytes the CLI's render changed. */\nexport function reportRewritten(\n rewritten: readonly RewrittenAgent[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const r of rewritten ?? []) {\n for (const f of r.files) onLine(`Rewrote ${f} (agent render changed)`);\n }\n}\n\n/**\n * Say which locked store assets `install`/`update` did not check against the store (p792,\n * p799). A chosen mode (air-gapped, `--no-catalog`) is one info line per asset; a store that\n * did not answer is an error line `store unreachable: could not check <ref> for updates`.\n *\n * @returns Whether any asset could not be checked because the store was unreachable: the\n * command then ends `Failed` with exit 1.\n */\nexport function reportStoreNotChecked(\n notChecked: readonly { ref: string; reason: string; detail: string }[] | undefined,\n): boolean {\n let unreachable = false;\n for (const n of notChecked ?? []) {\n if (n.reason === \"unreachable\") {\n unreachable = true;\n logErr(`store unreachable: could not check ${n.ref} for updates (${n.detail})`);\n } else if (n.reason === \"air-gapped\") {\n logInfo(`${n.ref} kept as locked (air-gapped: not checked against the store)`);\n } else {\n logInfo(`${n.ref} kept as locked (${n.detail})`);\n }\n }\n return unreachable;\n}\n\n/**\n * Say which refs `outdated`, `check` or `doctor` could not check against the store\n * (`AssetManager.takeStoreNotChecked`). A store that did not answer is one error\n * line per ref (`store unreachable: <ref> not checked (<why>)`); an air-gapped client\n * (`catalog.cache_ttl: 0`) chose not to ask, so its refs are one info line each.\n *\n * @returns Whether any ref was not checked because the store was unreachable: the command then\n * exits 1, as `install` and `update` do.\n */\nexport function reportStoreNotCheckedForUpdates(\n notChecked: readonly { ref: string; reason: string; detail: string }[],\n): boolean {\n let unreachable = false;\n for (const n of notChecked) {\n if (n.reason === \"air-gapped\") {\n logInfo(`${n.ref} not checked (air-gapped: the store was not asked)`);\n } else {\n unreachable = true;\n logErr(`store unreachable: ${n.ref} not checked (${n.detail})`);\n }\n }\n return unreachable;\n}\n\n/**\n * Creates the `skaile install` command.\n *\n * Two modes, selected by argument shape:\n *\n * - `skaile install` (no positional arg) — reads `skaile.yaml` and deploys all\n * declared assets (and their transitive dependencies) to the configured\n * harness target directory. Supports `--locked` for CI-mode install from a\n * lock file.\n * - `skaile install kind:@<publisher>/<name>#<version>` — pointer-only catalog\n * install: resolves the pointer-only install manifest from the configured\n * Catalog, fetches each file's bytes directly from the upstream repo at the\n * pinned commit, verifies every per-file + the composite SHA256, then writes\n * the verified files into the local Library.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-install-command\n */\nexport function makeInstallCommand(): Command {\n return new Command(\"install\")\n .description(`Install dependencies from skaile.yaml, or a single asset by ref (${REF_HINT})`)\n .argument(\"[ref]\", `Asset ref to install from the Catalog (${REF_HINT})`)\n .option(\"--locked\", \"Install from lock file (CI mode — fails on drift)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", `Agent framework (${TARGET_DEFAULT_HINT})`)\n .option(\n \"--global\",\n \"Install the global SSOT (~/.skaile/skaile.yaml), fanning out to every global harness\",\n )\n .option(\n \"--harness <ids>\",\n \"Comma-separated global harnesses to install into (default: all resolved); implies --global\",\n )\n .option(\n \"--link\",\n \"symlink local-path assets instead of copying (dev loop; machine-local, not for committing)\",\n )\n .option(\n \"--force\",\n \"Deploy over a folder no lock entry owns (a hand-made skill of the same name), and prune an undeclared asset whose folder holds your edits, instead of refusing\",\n )\n .option(\n \"--verbose\",\n \"also print the resolver's searched directories for an agent it cannot find\",\n )\n .action(runInstallCommand);\n}\n\n/** Options shape accepted by the `skaile install` command action. */\nexport interface InstallCommandOptions {\n locked?: boolean;\n projectDir: string;\n target?: string;\n global?: boolean;\n harness?: string;\n link?: boolean;\n force?: boolean;\n verbose?: boolean;\n}\n\n/**\n * `skaile install` action body. Dispatches by argument shape:\n * a positional `ref` selects pointer-only catalog install, otherwise the\n * legacy `skaile.yaml` install path runs.\n */\nasync function runInstallCommand(\n ref: string | undefined,\n opts: InstallCommandOptions,\n): Promise<void> {\n // ── Pointer-only catalog install: `skaile install <ref>` ──────────────\n if (ref !== undefined) {\n await runRefInstall(ref, opts);\n return;\n }\n\n // ── Legacy install: `skaile install` reads skaile.yaml ────────────────\n await runYamlInstall(opts);\n}\n\n/** Pointer-only catalog install path for `skaile install <ref>`. */\nasync function runRefInstall(ref: string, opts: InstallCommandOptions): Promise<void> {\n if (!isValidAssetRef(ref)) {\n logErr(`malformed asset ref '${ref}' — expected ${REF_HINT}`);\n process.exit(1);\n }\n // The store installs one exact version; without `#<version>` it answers a bare 400, so say\n // what is missing before the call.\n if (!parseAssetRef(ref).pin) {\n logErr(\n `${ref} needs a version: use ${ref}#<version>. A library asset is deployed with \\`skaile add ${ref}\\`, not \\`skaile install\\`.`,\n );\n process.exit(1);\n }\n const spinner = createSpinner();\n spinner.start(`Installing ${ref}`);\n try {\n const { openCatalogSource, openLibrary } = await import(\"../open-library.ts\");\n const catalog = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // [H2] REST-framed catalogs (the default for any catalog URL other\n // than https://skaile.store) cannot serve install manifests. Detect\n // and fail clearly rather than throwing a runtime TypeError.\n if (!supportsInstallManifest(catalog)) {\n throw new Error(\n \"pointer-only install (skaile install <ref>) requires a tRPC-framed Catalog. \" +\n \"The configured catalog uses REST framing, which does not serve install \" +\n \"manifests. Set catalog.url to https://skaile.store, or catalog.framing: trpc, \" +\n `in ${userConfigPath()}.`,\n );\n }\n const library = await openLibrary();\n try {\n const result = await runPointerOnlyInstall(ref, { catalog, library });\n spinner.stop(\"Done\");\n logOk(`Installed ${colorRef(ref)}`);\n logInfo(`Path: ${S.dim(result.installPath)}`);\n logInfo(`Commit: ${S.dim(result.commitSha)}`);\n logInfo(`Files: ${S.dim(String(result.fileCount))}`);\n logInfo(\n S.dim(\n `Installed globally (see Path above) — use \\`skaile add ${ref}\\` to deploy into this project.`,\n ),\n );\n } finally {\n library.close();\n }\n } catch (err) {\n spinner.stop(\"Failed\");\n const msg = err instanceof Error ? err.message : String(err);\n if (/failed: 404\\b/.test(msg)) {\n logErr(\n `${ref} is not in the store. For a library asset use \\`skaile add ${ref.replace(/#.*$/, \"\")}\\`.`,\n );\n } else if (/unreachable/i.test(msg)) {\n logErr(`asset uninstallable — source commit no longer available (${msg})`);\n } else {\n logErr(msg);\n }\n process.exit(1);\n }\n}\n\n/** Legacy install path for bare `skaile install` (reads skaile.yaml). Also runs `skaile harness set`. */\nexport async function runYamlInstall(opts: InstallCommandOptions): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n\n const harnesses = parseHarnessFilter(opts.harness);\n // `--harness` implies `--global`.\n if (opts.global || harnesses) {\n await runGlobalInstall(opts, harnesses);\n return;\n }\n\n // A project without a readable skaile.yaml stops here, before sources are cloned, assets\n // are deployed or undeployed, or the lock is written.\n requireProjectConfig(projectDir);\n\n // Refuse what `validate` rejects for the `agents:` map, before anything is written (p1512);\n // a key of `agent:` or `agents:` that nothing reads warns (p1712).\n for (const line of agentInstanceWarningLines(projectDir)) logWarn(line);\n const instanceErrors = agentInstanceErrorLines(projectDir);\n if (instanceErrors.length > 0) {\n for (const line of instanceErrors) logErr(line);\n process.exit(1);\n }\n // A `harness:` nothing registers fails as in `validate` and `check` (p1754).\n if ((await reportUnknownHarnesses(projectDir)) > 0) process.exit(1);\n\n // Hydrate sources declared in skaile.yaml before resolving assets, so\n // freshly checked-out projects pull their source clones automatically.\n try {\n const { ensureSourcesCloned } = await import(\"../ensure-sources.ts\");\n const hydrate = ensureSourcesCloned(projectDir, { quiet: true });\n if (hydrate.cloned.length > 0) {\n logOk(`Cloned source(s): ${hydrate.cloned.join(\", \")}`);\n }\n if (hydrate.failed.length > 0) {\n logErr(`Failed to clone source(s): ${hydrate.failed.join(\", \")}`);\n }\n } catch (err) {\n logWarn(`source hydration skipped: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const warnings = deferredWarnings();\n const am = new AssetManager({\n registry: getKindRegistry(),\n projectDir,\n harness: opts.target as HarnessName,\n onLibraryCollision: warnings.push,\n });\n const spinner = createSpinner();\n spinner.start(opts.locked ? \"Installing from lock file\" : \"Installing dependencies\");\n try {\n const result = await am.install({ locked: opts.locked, link: opts.link, force: opts.force });\n const storeUnreachable = result.storeNotChecked?.some((n) => n.reason === \"unreachable\");\n spinner.stop(\n result.agentInstanceErrors?.length ||\n result.missing.length > 0 ||\n storeUnreachable ||\n result.contentHeld?.length\n ? \"Failed\"\n : \"Done\",\n );\n warnings.flush();\n if (result.deployed.length > 0) {\n for (const d of result.deployed) logOk(d);\n }\n warnPlaceholderBodies(result.placeholderBodies, result.placeholderDescriptions);\n for (const r of result.restored ?? []) {\n for (const f of r.restored) logInfo(`Restored ${f}`);\n for (const f of r.removed) logInfo(`Removed ${f} (not part of ${r.ref})`);\n }\n reportRewritten(result.rewritten);\n for (const line of result.libraryNotices ?? []) logInfo(line);\n reportPresetExpansions(result.presets);\n reportAgentInstances(result.agentInstances, result.agentFilesRemoved);\n // Said when this install wrote an agent file (a fresh clone, a changed agent), not when it only\n // restored a skill or did nothing (p1673).\n if (\n result.deployed.some((d) => d.startsWith(\"agent:\")) ||\n result.replaced?.some((r) => r.ref.startsWith(\"agent:\")) ||\n result.agentInstancesChanged?.length\n ) {\n warnFilesOnlyDelegates(am.projectDir, am.harness);\n }\n if (result.removed.length > 0) {\n for (const r of result.removed) logWarn(`Removed: ${r}`);\n }\n reportReplaced(result.replaced);\n reportRelocked(result.relocked);\n reportMoved(result.moved);\n reportContentHeld(result.contentHeld);\n const pins = await pinComposedAgentsReport(projectDir);\n const missing = [...result.missing, ...pins.missing];\n if (\n result.deployed.length === 0 &&\n result.removed.length === 0 &&\n !result.replaced?.length &&\n missing.length === 0 &&\n !result.storeNotChecked?.length &&\n !result.restored?.length &&\n !result.relocked?.length &&\n !result.contentHeld?.length &&\n !result.moved?.length &&\n !result.agentInstanceErrors?.length\n ) {\n logInfo(\"Nothing to install (already up to date).\");\n }\n if (result.agentInstanceErrors?.length) {\n if (opts.verbose) for (const d of result.agentInstanceDetails ?? []) logInfo(S.dim(d));\n logErr(\n `${result.agentInstanceErrors.length} agent instance(s) could not be rendered (see above)`,\n );\n process.exitCode = 1;\n }\n if (missing.length > 0) {\n for (const m of missing) logErr(`Missing: ${m}${result.missingHints?.[m] ?? \"\"}`);\n // Partial-miss must fail the process — CI can't otherwise distinguish a\n // clean install from \"half the assets never resolved\".\n process.exitCode = 1;\n }\n if (reportStoreNotChecked(result.storeNotChecked)) process.exitCode = 1;\n // A ref that only resolved once the assets were installed (a catalog agent) is checked now.\n const lateInstanceErrors = agentInstanceErrorLines(projectDir);\n for (const line of lateInstanceErrors) logErr(line);\n if (lateInstanceErrors.length > 0) process.exitCode = 1;\n if (result.lockWritten) {\n logInfo(`Lock file written: ${S.dim(\"skaile.lock.yaml\")}`);\n }\n warnStaleHarnessCopies(am);\n // Report-only: surface soft deps the declared assets reference but aren't\n // present. Never a prompt — install is a batch/CI path. Skipped under\n // --locked: that mode is \"restore exactly\", so an `add` nudge would jar.\n if (!opts.locked) await reportInstalledSoftDeps(am);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(err instanceof SourceEntryError ? err.message : String(err));\n process.exit(1);\n }\n}\n\n/**\n * Report (never prompt) the body-link soft deps that the declared assets\n * reference but that aren't in the project — the `install` counterpart to the\n * `add`-time soft-dep surface. `install` is a batch/CI path (often non-TTY), so\n * it only ever prints a hint: pulling stays an explicit `skaile add`. Best-effort\n * — `reportSoftDeps` swallows any index failure and returns `[]`.\n */\nexport async function reportInstalledSoftDeps(\n am: Pick<AssetManager, \"listDeclared\" | \"reportSoftDeps\">,\n onHint: (line: string) => void = (l) => logInfo(S.dim(l)),\n): Promise<void> {\n try {\n const declared = (await am.listDeclared()).map((d) => d.ref);\n if (declared.length === 0) return;\n const edges = await am.reportSoftDeps(declared);\n for (const edge of edges) onHint(formatSoftDepHint(edge));\n } catch {\n // Best-effort: a soft-dep report must never fail an install that succeeded.\n }\n}\n\n/**\n * Global cross-harness install: deploy every dep declared in the global SSOT\n * (`~/.skaile/skaile.yaml`) into each resolved global harness's dir under `~`,\n * write the global lock (`~/.skaile/skaile.lock.yaml`), then print per-harness\n * state. `harnesses` is the `--harness` filter (omit for the full resolved set).\n */\nasync function runGlobalInstall(\n opts: InstallCommandOptions,\n harnesses: HarnessName[] | undefined,\n): Promise<void> {\n const am = new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n global: true,\n harnesses,\n });\n const spinner = createSpinner();\n spinner.start(\"Installing global dependencies\");\n try {\n const result = await am.install({ locked: opts.locked, link: opts.link, force: opts.force });\n const storeUnreachable = result.storeNotChecked?.some((n) => n.reason === \"unreachable\");\n spinner.stop(\n result.missing.length > 0 || storeUnreachable || result.contentHeld?.length\n ? \"Failed\"\n : \"Done\",\n );\n if (result.deployed.length > 0) for (const d of result.deployed) logOk(d);\n warnPlaceholderBodies(result.placeholderBodies, result.placeholderDescriptions);\n reportPresetExpansions(result.presets);\n if (result.removed.length > 0) for (const r of result.removed) logWarn(`Removed: ${r}`);\n reportReplaced(result.replaced);\n reportRelocked(result.relocked);\n reportInferredHarnesses(result.inferredHarnesses);\n reportMoved(result.moved);\n reportContentHeld(result.contentHeld);\n if (\n result.deployed.length === 0 &&\n result.removed.length === 0 &&\n !result.replaced?.length &&\n result.missing.length === 0 &&\n !result.storeNotChecked?.length &&\n !result.relocked?.length &&\n !result.contentHeld?.length &&\n !result.moved?.length\n )\n logInfo(\"Nothing to install (already up to date).\");\n if (reportStoreNotChecked(result.storeNotChecked)) process.exitCode = 1;\n if (result.missing.length > 0) {\n for (const m of result.missing) logErr(`Missing: ${m}${result.missingHints?.[m] ?? \"\"}`);\n process.exitCode = 1;\n }\n if (result.lockWritten) logInfo(`Global lock written: ${S.dim(\"~/.skaile/skaile.lock.yaml\")}`);\n reportLegacyOmpCopies(am.takeLegacyCopiesRemoved(), am.takeLegacyCopiesKept());\n\n // Per-harness reconciliation summary so a partial fan-out is visible.\n const state = am.globalState({});\n const byHarness = new Map<string, number>();\n for (const s of state)\n if (s.state === \"installed\") byHarness.set(s.harness, (byHarness.get(s.harness) ?? 0) + 1);\n for (const [harness, n] of byHarness) logInfo(`${harness}: ${n} installed`);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n}\n\n/** The `--global` options of `check`, `doctor` and `clean`. */\ninterface GlobalScopeOptions {\n global?: boolean;\n harness?: string;\n projectDir: string;\n}\n\n/** A manager over the user-scope SSOT (`~/.skaile`), limited to `--harness` when given. */\nfunction globalManager(opts: GlobalScopeOptions): AssetManager {\n return new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n global: true,\n harnesses: parseHarnessFilter(opts.harness),\n });\n}\n\n/**\n * What is wrong with the global install: one line per declared asset a harness does not hold\n * (`list --global` calls these `declared` and `drift`), per invalid entry, and per old\n * `~/.omp/<dir>` copy a 5.12.0 install left behind. Empty when the global state is clean (p911).\n */\nexport function globalProblems(am: AssetManager): string[] {\n const lines = new Set<string>();\n for (const row of am.globalState({})) {\n if (row.state === \"declared\") {\n lines.add(\n `${row.ref} is declared in ~/.skaile/skaile.yaml but not installed: run skaile install --global`,\n );\n } else if (row.state === \"drift\") {\n lines.add(\n `${row.ref} is missing from ${row.harness}: run skaile install --global --harness ${row.harness}`,\n );\n } else if (row.state === \"invalid\") {\n lines.add(`${row.ref} in ~/.skaile/skaile.yaml is not a valid asset ref`);\n }\n }\n for (const stale of am.staleLegacyOmpCopies()) {\n lines.add(\n `${stale.path.replace(homedir(), \"~\")} is an old omp copy of ${stale.ref} (omp reads ~/.omp/agent): run skaile install --global --harness omp, or delete it`,\n );\n }\n return [...lines];\n}\n\n/**\n * Creates the `skaile check` command.\n *\n * Fails (exit 1) on every problem {@link AssetManager.projectState} reports: unmet\n * requirements of deployed assets, a declared dep that never resolved into the lock (its\n * library or source is gone, like `skaile list` showing it as `declared`) or never\n * materialized (e.g. a store-sourced `mcp-server`, #462), a locked asset whose library is\n * gone or whose deployed copy or files are missing, a locked library asset whose files\n * changed since the lock (or whose lock hash predates the shared asset hash), and an\n * `agents.<id>.ref` that binds to no agent. `doctor`, `outdated`, `diff` and\n * `install --locked` take their verdict from the same state.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-check-command\n */\nexport function makeCheckCommand(): Command {\n return new Command(\"check\")\n .description(\"Check for unmet requirements\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Check the global install (~/.skaile) instead of the project\")\n .option(\"--harness <ids>\", \"With --global: only these harnesses (comma-separated)\")\n .action(async (opts) => {\n if (opts.global || opts.harness) {\n const problems = globalProblems(globalManager({ ...opts, global: true }));\n if (problems.length === 0) {\n logOk(\"All global dependencies satisfied.\");\n return;\n }\n for (const line of problems) logErr(line);\n process.exit(1);\n }\n requireProjectConfig(opts.projectDir);\n // A mistyped key warns; a `harness:` nothing registers fails like a gap (p1474, p1022).\n const configErrors = await reportProjectConfig(path.resolve(opts.projectDir), {\n harness: true,\n instances: true,\n });\n const am = new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n });\n const { gaps } = await am.projectState();\n const edited = await editedConventionFiles(path.resolve(opts.projectDir));\n // A skipped `mcp-server` or an unset required field fails nothing: a `!` line each.\n const notices = [\n ...(await am.mcpNotices()).map((n) => n.text),\n // A library that went back past the lock is no drift either (p1257).\n ...(await am.libraryOlderNotices()),\n // A lock written before it listed the instance files: the next write replaces them.\n ...am.legacyLockNotices(),\n ];\n // A store-origin ref the store could not be asked about is not \"satisfied\".\n await am.probeStoreOrigins();\n const notChecked = am.takeStoreNotChecked();\n const storeUnreachable = notChecked.some((n) => n.reason === \"unreachable\");\n if (gaps.length === 0 && edited.length === 0 && configErrors === 0 && !storeUnreachable) {\n logOk(\"All dependencies satisfied.\");\n for (const n of notices) logWarn(n);\n reportStoreNotCheckedForUpdates(notChecked);\n } else {\n for (const g of gaps) logErr(g.message);\n for (const e of edited) logErr(e);\n for (const n of notices) logWarn(n);\n reportStoreNotCheckedForUpdates(notChecked);\n process.exit(1);\n }\n });\n}\n\n/**\n * One message per convention file (SOUL.md, knowledge/, …) of a bound agent that was edited\n * after `skaile rebuild` pinned it: the compile manifest, not the file, is what the agent\n * runs from, so the edit never reaches it. Also one message per bound agent that `skaile run`\n * would refuse with `composition_rebuild_required` (an `inline-snapshot` item with no compile\n * pin, or a pin that is stale or malformed), in the words `run` prints (p1310). Instances bound\n * to the same agent directory share the files, so one message names every instance that runs\n * from them. A binding that resolves to no agent is a `projectState` gap, not reported here.\n * Shared by `check` and `doctor`.\n */\nexport async function editedConventionFiles(projectDir: string): Promise<string[]> {\n const instances = effectiveAgentInstances(resolveSkWorkspaceConfig(projectDir));\n const byDir = new Map<string, { ref: string; ids: string[]; instance: AgentInstanceConfig }>();\n for (const [id, instance] of Object.entries(instances)) {\n let agentDir: string | undefined;\n try {\n agentDir = resolveAgentDefinitionDir(projectDir, instance.ref);\n } catch (err) {\n if (err instanceof AgentRefResolutionError) continue;\n throw err;\n }\n if (!agentDir) continue;\n if (path.basename(agentDir) === \"agent.yaml\") agentDir = path.dirname(agentDir);\n const bound = byDir.get(agentDir);\n if (bound) bound.ids.push(id);\n else byDir.set(agentDir, { ref: instance.ref, ids: [id], instance });\n }\n const messages: string[] = [];\n for (const [agentDir, { ref, ids, instance }] of byDir) {\n const label = `${ids.length === 1 ? \"instance\" : \"instances\"} ${ids.join(\", \")}`;\n try {\n const drifted = await verifyConventionItems({\n agentDir,\n projectDir,\n registry: getKindRegistry(),\n });\n for (const err of drifted) messages.push(`${ref} (${label}): ${err.message}`);\n const manifest = await loadAgentManifest(agentDir);\n if (manifest) {\n await resolveAgentInstance({\n instanceId: ids[0]!,\n instance,\n asset: { manifest, dir: agentDir },\n projectDir,\n registry: getKindRegistry(),\n host: { nativeSubagents: true },\n dryRun: true,\n });\n }\n } catch (err) {\n if (!isCompositionError(err)) throw err;\n // Only the error `run` raises for a missing pin; other composition errors are not `check`'s.\n if (err.code === \"composition_rebuild_required\") {\n // A lock behind the library (a fresh clone after a persona bump): `rebuild` would fail\n // on it, so name `update` here, the same line `rebuild` and `install` give.\n const behind = await lockBehindLibraryErrors(agentDir, projectDir);\n if (behind.length > 0) {\n for (const e of behind) {\n messages.push(`${ref} (${label}): ${e.code}: ${e.message}`);\n }\n } else {\n messages.push(`${ref} (${label}): ${err.code}: ${err.message}`);\n }\n }\n }\n }\n return messages;\n}\n\n/**\n * Creates the `skaile clean` command.\n *\n * Removes all skaile-managed assets tracked in `skaile.lock.yaml` from the\n * workspace. With `--all` also removes history, patches, repos, and the lock\n * file itself. Preserves unmanaged (manually placed) assets.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-clean-command\n */\nexport function makeCleanCommand(): Command {\n return new Command(\"clean\")\n .description(\"Remove all skaile-managed assets from the workspace\")\n .option(\"--all\", \"Full reset: also remove history, patches, repos, and lock file\")\n .option(\"--dry-run\", \"Show what would be removed without doing it\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", `Agent framework (${TARGET_DEFAULT_HINT})`)\n .option(\"--global\", \"Clean the global install (~/.skaile and every global harness)\")\n .option(\"--harness <ids>\", \"With --global: only these harnesses (comma-separated)\")\n .action(async (opts) => {\n const isGlobal = Boolean(opts.global || opts.harness);\n // A skaile.yaml that does not parse stops `clean` with one `✗` line (p910).\n if (!isGlobal) requireProjectConfig(opts.projectDir, { allowMissing: true });\n const am = isGlobal\n ? globalManager({ ...opts, global: true })\n : new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n harness: opts.target as HarnessName,\n });\n\n // Preview: load lock file to show what will be cleaned\n const lock = readLock(\n isGlobal\n ? path.join(globalSkaileDir(), \"skaile.lock.yaml\")\n : path.resolve(opts.projectDir, \"skaile.lock.yaml\"),\n );\n\n if (!lock || Object.keys(lock.assets).length === 0) {\n logInfo(\"Nothing to clean (no skaile-managed assets found).\");\n return;\n }\n\n const assetRefs = Object.keys(lock.assets);\n console.log();\n console.log(` ${S.heading(\"Assets to remove:\")} ${S.dim(`(${assetRefs.length})`)}`);\n for (const ref of assetRefs) {\n console.log(` ${colorRef(ref)}`);\n }\n\n if (opts.all) {\n console.log();\n console.log(` ${S.heading(\"Also removing:\")}`);\n if (!isGlobal) {\n console.log(` ${S.dim(\".skaile/history.yaml\")}`);\n console.log(` ${S.dim(\".skaile/patches/\")}`);\n }\n console.log(` ${S.dim(isGlobal ? \"~/.skaile/skaile.lock.yaml\" : \"skaile.lock.yaml\")}`);\n }\n\n if (opts.dryRun) {\n console.log();\n logInfo(\"Dry run — no changes made.\");\n return;\n }\n\n if (!opts.yes) {\n const confirm = await p.confirm({ message: \"Proceed?\" });\n if (p.isCancel(confirm) || !confirm) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n\n const result = am.clean({ all: opts.all });\n\n console.log();\n for (const r of result.removed) {\n logOk(`Removed ${r}`);\n }\n for (const s of result.skipped) {\n logWarn(`Skipped ${s.ref}: ${s.reason}`);\n }\n if (result.unmanaged.length > 0) {\n console.log();\n logInfo(`Kept ${result.unmanaged.length} unmanaged asset(s):`);\n for (const u of result.unmanaged) {\n console.log(` ${S.dim(u)}`);\n }\n }\n if (opts.all) {\n console.log();\n logOk(\"Full reset complete.\");\n }\n });\n}\n"]}
@@ -1,10 +1,10 @@
1
- import { loadRegistryView } from './chunk-N65H7YYI.js';
2
- import { agentDefinitionProblem, instanceRefProblem } from './chunk-DFP476EU.js';
3
- import { unknownHarnessMessage } from './chunk-DXBHGNSI.js';
4
- import { checkOmpListedModel, checkHarnessModel, checkOmpServeModel, isUnlistedModel } from './chunk-XIIIGLSL.js';
5
- import { loadHarnessSdk, resolveSettings, sdkLookupPlaces, installCommandFor } from './chunk-TMJBEGS4.js';
1
+ import { loadRegistryView } from './chunk-IISEBVMA.js';
2
+ import { agentDefinitionProblem, instanceRefProblem, connectorErrorLines, CONNECTOR_SERVE_REFUSAL_CODES } from './chunk-DJSGQW2Q.js';
3
+ import { unknownHarnessMessage } from './chunk-BLBXOG5Q.js';
4
+ import { checkOmpListedModel, checkHarnessModel, checkOmpServeModel, isUnlistedModel } from './chunk-7UCPGQCW.js';
5
+ import { loadHarnessSdk, resolveSettings, sdkLookupPlaces, installCommandFor } from './chunk-4KPQ6ILH.js';
6
6
  import { DEFAULT_HARNESS_ID } from './chunk-C5HFK34M.js';
7
- import { resolveSkWorkspaceConfig, primaryAgentRef } from './chunk-O7ADRMCR.js';
7
+ import { resolveSkWorkspaceConfig, primaryAgentRef, loadSkWorkspaceConfig, SKAILE_YAML_DEFAULT } from './chunk-FZO64PLQ.js';
8
8
  import { pickRegistryEntries, registryEntries, isEntryEnabled } from './chunk-RXGPFAMN.js';
9
9
  import { statSync } from 'fs';
10
10
 
@@ -107,7 +107,16 @@ function checkServeAgents(projectDir) {
107
107
  }
108
108
  return null;
109
109
  }
110
+ function checkServeConnectors(projectDir) {
111
+ const file = loadSkWorkspaceConfig(projectDir);
112
+ const lines = connectorErrorLines(
113
+ file?.diagnostics ?? [],
114
+ SKAILE_YAML_DEFAULT,
115
+ CONNECTOR_SERVE_REFUSAL_CODES
116
+ );
117
+ return lines.length > 0 ? lines.join("\n") : null;
118
+ }
110
119
 
111
- export { checkHarnessSdk, checkModelEndpointPeer, checkServeAgents, checkServeHarness, checkServeModel, checkServeProjectDir, resolveServeProvider };
112
- //# sourceMappingURL=chunk-LZ3E6TML.js.map
113
- //# sourceMappingURL=chunk-LZ3E6TML.js.map
120
+ export { checkHarnessSdk, checkModelEndpointPeer, checkServeAgents, checkServeConnectors, checkServeHarness, checkServeModel, checkServeProjectDir, resolveServeProvider };
121
+ //# sourceMappingURL=chunk-Q5SSRVD5.js.map
122
+ //# sourceMappingURL=chunk-Q5SSRVD5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../cli/src/commands/serve-preflight.ts"],"names":[],"mappings":"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","file":"chunk-Q5SSRVD5.js","sourcesContent":["/**\n * Start-up checks for `skaile serve`: fail with one actionable line before the\n * runner reports ready, instead of on the first prompt.\n */\n\nimport { statSync } from \"node:fs\";\nimport {\n checkHarnessModel,\n checkOmpListedModel,\n checkOmpServeModel,\n isUnlistedModel,\n} from \"@skaile/workspaces/bridge\";\nimport {\n isEntryEnabled,\n type MergedAIProviderRegistry,\n pickRegistryEntries,\n registryEntries,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { loadRegistryView } from \"./providers.ts\";\nimport {\n DEFAULT_HARNESS_ID,\n installCommandFor,\n loadHarnessSdk,\n loadSkWorkspaceConfig,\n primaryAgentRef,\n resolveSettings,\n resolveSkWorkspaceConfig,\n SKAILE_YAML_DEFAULT,\n sdkLookupPlaces,\n} from \"@skaile/workspaces/core\";\nimport { CONNECTOR_SERVE_REFUSAL_CODES, connectorErrorLines } from \"../config-checks.ts\";\nimport { unknownHarnessMessage } from \"../harness-error.ts\";\nimport { agentDefinitionProblem, instanceRefProblem } from \"./validate-instances.ts\";\n\n/** Optional SDK a harness needs at run time, and how to probe that it loads from a project. */\nconst HARNESS_SDKS: Record<\n string,\n { pkg: string; load: (projectDir: string) => Promise<unknown> }\n> = {\n \"claude-sdk\": {\n pkg: \"@anthropic-ai/claude-agent-sdk\",\n load: (projectDir) =>\n loadHarnessSdk(\n \"@anthropic-ai/claude-agent-sdk\",\n projectDir,\n () => import(\"@anthropic-ai/claude-agent-sdk\"),\n ),\n },\n codex: {\n pkg: \"@openai/codex-sdk\",\n load: (projectDir) =>\n loadHarnessSdk(\"@openai/codex-sdk\", projectDir, () => import(\"@openai/codex-sdk\")),\n },\n};\n\n/**\n * Check that the harness `skaile serve` would start can load its SDK. The probe\n * is the same lookup the harness runs in `start()` (the project's `node_modules`,\n * then next to skaile), so a compiled binary that bundles the SDK passes.\n *\n * @param projectDir - Project the server serves.\n * @param harnessOverride - `--harness`, when given.\n * @param probe - Replaceable loader table, for tests.\n * @returns The one-line problem, or `null` when the harness can start.\n */\nexport async function checkHarnessSdk(\n projectDir: string,\n harnessOverride?: string,\n probe: typeof HARNESS_SDKS = HARNESS_SDKS,\n): Promise<string | null> {\n const settings = await resolveSettings(\n projectDir,\n harnessOverride ? { harness: harnessOverride } : {},\n );\n const harness = settings.harness ?? DEFAULT_HARNESS_ID;\n const sdk = probe[harness];\n if (!sdk) return null;\n try {\n await sdk.load(projectDir);\n return null;\n } catch {\n return `The ${harness} harness needs ${sdk.pkg}, which is not installed. Looked in ${sdkLookupPlaces(projectDir)}. Run in the project: ${installCommandFor(sdk.pkg, projectDir)} (or pick another harness with --harness).`;\n }\n}\n\n/**\n * Check that the model endpoint can load pi-ai, when `skaile serve` will start the\n * endpoint (`--model-endpoint`, or `model_endpoint.enabled` in skaile.yaml). Without\n * this the endpoint printed its ready line and answered every request with a 500.\n *\n * @param projectDir - Project the server serves.\n * @param flag - Parsed `--model-endpoint`, when given.\n * @param probe - Replaceable pi-ai check, for tests.\n * @returns The one-line problem (both places looked in, the install command), or `null`.\n */\nexport async function checkModelEndpointPeer(\n projectDir: string,\n flag: { enabled?: boolean } | undefined,\n probe?: (projectDir: string) => Promise<string | null>,\n): Promise<string | null> {\n const enabled =\n flag?.enabled ?? resolveSkWorkspaceConfig(projectDir).model_endpoint?.enabled === true;\n if (!enabled) return null;\n const check = probe ?? (await import(\"@skaile/workspaces/model-endpoint\")).checkPiAiInstalled;\n return check(projectDir);\n}\n\n/**\n * Check that the harness `skaile serve` would start can take the model given with `--model`: the\n * refusal a first prompt would raise as a fatal `error` (p1334), one line before the ready line.\n * The same check as `skaile run --dry-run`.\n *\n * Only an explicit `--model` is checked. A model that comes from `skaile.yaml` or the settings\n * files is not: the platform sends its registry layer at `session_init`, after the server is up,\n * so a provider the local `providers.yml` lacks may still be served. That model is checked at\n * the first prompt, as before. The check sees the local registry, narrowed by `--providers` as\n * the session narrows it, and is skipped when the registry comes from the host\n * (`secrets.provider` other than `env`).\n *\n * @param projectDir - Project the server serves.\n * @param overrides - `--harness`, `--model` and `--providers`, when given.\n * @param registry - Replaceable registry loader, for tests.\n * @param ompListed - Replaceable omp model lookup (`omp models find`), for tests.\n * @returns The one-line refusal, or `null` when the harness takes the model.\n */\nexport async function checkServeModel(\n projectDir: string,\n overrides: { harness?: string; model?: string; providers?: readonly string[] },\n registry: () => MergedAIProviderRegistry = () => loadRegistryView({ projectDir }).merged,\n ompListed: (model: string) => Promise<string | undefined> = checkOmpListedModel,\n): Promise<string | null> {\n if (!overrides.model) return null;\n // The platform delivers its registry layer over the transport after the server is up (p1332).\n const secretsProvider = resolveSkWorkspaceConfig(projectDir).secrets?.provider;\n if (secretsProvider && secretsProvider !== \"env\") return null;\n const settings = await resolveSettings(projectDir, {\n ...(overrides.harness ? { harness: overrides.harness } : {}),\n model: overrides.model,\n });\n if (!settings.model) return null;\n const local = registry();\n const narrowed = overrides.providers?.length\n ? pickRegistryEntries(local, overrides.providers)\n : local;\n const harness = settings.harness ?? DEFAULT_HARNESS_ID;\n const input = { registry: narrowed, model: settings.model };\n // A server answers its first prompt after it is ready: omp must be known to take the model now (p1334).\n const refusal =\n checkHarnessModel(harness, input) ??\n (harness === \"omp\" ? checkOmpServeModel(input) : undefined);\n if (refusal) return refusal;\n // No enabled registry entry, or an id no entry lists (it goes to omp as typed): omp serves\n // it from its own catalog, which only omp can list.\n const ownHome =\n harness === \"omp\" &&\n (isUnlistedModel(input) ||\n !registryEntries(narrowed).some(\n ([, entry]) => (entry.kind === \"llm\" || entry.kind === \"embed\") && isEntryEnabled(entry),\n ));\n return (ownHome ? await ompListed(settings.model) : undefined) ?? null;\n}\n\n/**\n * Resolve `--provider <name>`: it picks one AI provider registry entry, the way\n * `--providers <ids>` picks several. The session then holds that entry only.\n *\n * Fails, with one line, when the entry is not in the local registry\n * (`providers.yml` and the layers above it) or when `--providers` is given\n * too and does not list it. The registry check is skipped when the registry\n * comes from the host (`secrets.provider` other than `env`): the platform\n * sends its entries at `session_init`, after the server is up.\n *\n * @param projectDir - Project the server serves.\n * @param provider - `--provider`, when given.\n * @param providers - Ids of `--providers`, when given.\n * @param registry - Replaceable registry loader, for tests.\n * @returns The entry ids the session keeps, or the one-line problem.\n */\nexport function resolveServeProvider(\n projectDir: string,\n provider: string | undefined,\n providers: readonly string[],\n registry: () => MergedAIProviderRegistry = () => loadRegistryView({ projectDir }).merged,\n): { providers: readonly string[] } | { problem: string } {\n const id = provider?.trim();\n if (!id) return { providers };\n if (providers.length > 0 && !providers.includes(id)) {\n return {\n problem: `--provider '${id}' is not in --providers (${providers.join(\", \")}). Use one of the two flags.`,\n };\n }\n const secretsProvider = resolveSkWorkspaceConfig(projectDir).secrets?.provider;\n if (!secretsProvider || secretsProvider === \"env\") {\n const known = registryEntries(registry()).map(([entryId]) => entryId);\n if (!known.includes(id)) {\n return {\n problem:\n known.length > 0\n ? `--provider: '${id}' is not an AI provider entry. Defined: ${known.join(\", \")}. Run: skaile providers list`\n : `--provider: '${id}' is not an AI provider entry; none is defined. Run: skaile providers add`,\n };\n }\n }\n return { providers: providers.length > 0 ? providers : [id] };\n}\n\n/**\n * Check that `--project-dir` is an existing directory, before `serve` creates anything in it. A\n * missing folder used to fail with a raw `ENOENT` stack from the log store (p1732). A symlink to\n * a directory passes; a relative path is read from the current directory.\n *\n * @param projectDir - The `--project-dir` value as typed.\n * @returns The one-line problem, or `null` when the directory exists.\n */\nexport function checkServeProjectDir(projectDir: string): string | null {\n try {\n if (statSync(projectDir).isDirectory()) return null;\n } catch {\n // missing, a dangling link or unreadable: the same line\n }\n return `--project-dir: '${projectDir}' is not a directory`;\n}\n\n/**\n * Check that the harness `skaile serve` would start is one that is registered: `--harness`, else\n * the project's settings, else the default. The same refusal `run` prints; without it the first\n * session build died with a raw stack (p1731). Load the project's plugins first: a plugin's\n * harness counts.\n *\n * @param projectDir - Project the server serves.\n * @param harnessOverride - `--harness`, when given.\n * @returns The one-line problem, or `null` when the harness is known.\n */\nexport async function checkServeHarness(\n projectDir: string,\n harnessOverride?: string,\n): Promise<string | null> {\n const settings = await resolveSettings(\n projectDir,\n harnessOverride ? { harness: harnessOverride } : {},\n );\n return unknownHarnessMessage(settings.harness ?? DEFAULT_HARNESS_ID) ?? null;\n}\n\n/**\n * Check that `agent.definition` and the `ref` of every `agents:` instance in the project's\n * `skaile.yaml` resolve: the `agent_ref_unresolved` rule `validate` applies. Without it\n * `serve` died with a raw `AgentRefResolutionError` stack for the definition and started with no\n * word for an instance it could not resolve.\n *\n * @param projectDir - Project the server serves.\n * @returns The first error message, or `null` when nothing is set or everything resolves.\n */\nexport function checkServeAgents(projectDir: string): string | null {\n const config = resolveSkWorkspaceConfig(projectDir);\n const definition = primaryAgentRef(config);\n const definitionProblem = definition ? agentDefinitionProblem(projectDir, definition) : null;\n if (definitionProblem) return definitionProblem;\n for (const [id, instance] of Object.entries(config.agent?.instances ?? {})) {\n const problem = instanceRefProblem(projectDir, id, instance.ref);\n if (problem) return problem;\n }\n return null;\n}\n\n/**\n * Check that the connectors `skaile.yaml` declares are ones the runner can mount: the\n * `connector_*` rules `validate` applies (no `driver`, no `id`, a duplicate `id`, an `access`\n * that is neither `read-only` nor `read-write`). Without it `serve` mounted a connector with no\n * `id`, and one with `access: rw` that nothing stopped from writing.\n *\n * @param projectDir - Project the server serves.\n * @returns One line per error, joined by newlines, or `null` when every connector is fine.\n */\nexport function checkServeConnectors(projectDir: string): string | null {\n const file = loadSkWorkspaceConfig(projectDir);\n const lines = connectorErrorLines(\n file?.diagnostics ?? [],\n SKAILE_YAML_DEFAULT,\n CONNECTOR_SERVE_REFUSAL_CODES,\n );\n return lines.length > 0 ? lines.join(\"\\n\") : null;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { normalizeAnthropicModel, ANTHROPIC_MODEL_ALIASES } from './chunk-VT6G5AJV.js';
2
- import { buildAgentPromptSections } from './chunk-TMJBEGS4.js';
1
+ import { normalizeAnthropicModel, ANTHROPIC_MODEL_ALIASES } from './chunk-WS3BOCAT.js';
2
+ import { buildAgentPromptSections } from './chunk-4KPQ6ILH.js';
3
3
  import { existsSync, readFileSync, mkdirSync, writeFileSync, lstatSync, unlinkSync, readdirSync, chmodSync } from 'fs';
4
4
  import { join, dirname, relative, resolve, normalize, basename } from 'path';
5
5
  import { stringify } from 'yaml';
@@ -341,5 +341,5 @@ function agentRenderFiles(harnessTarget, agentDeployDir, agentName) {
341
341
  }
342
342
 
343
343
  export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, agentRenderFiles, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework };
344
- //# sourceMappingURL=chunk-4CD2R4MJ.js.map
345
- //# sourceMappingURL=chunk-4CD2R4MJ.js.map
344
+ //# sourceMappingURL=chunk-QBUJTVMY.js.map
345
+ //# sourceMappingURL=chunk-QBUJTVMY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../asset-manager/src/renderers.ts"],"names":["stringifyYaml"],"mappings":"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","file":"chunk-4CD2R4MJ.js","sourcesContent":["/**\n * Framework-specific renderers for GitAgent packages.\n *\n * Each renderer transforms a parsed GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the native file format that the target agent framework natively reads.\n *\n * Only harnesses with a full bridge harness (runtime execution) are included:\n * claude-code → .claude/agents/<name>.md (YAML frontmatter + markdown body)\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml (TOML)\n *\n * Removed (no bridge harness): cursor, roo, github-copilot, gemini, amp.\n * Add them back when a bridge harness is implemented.\n */\n\nimport {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { basename, dirname, join, normalize, relative, resolve } from \"node:path\";\nimport { buildAgentPromptSections } from \"@skaile/workspaces/core\";\nimport {\n ANTHROPIC_MODEL_ALIASES,\n type AgentLifecycle,\n type AgentManifest,\n normalizeAnthropicModel,\n} from \"@skaile/workspaces/types/manifests\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport type { AbilityRef, ContractRef } from \"./fragments.js\";\n\n// ── Types ─────────────────────────────────��───────────────────────────────────\n\nexport type { AgentManifest };\n\n/**\n * All data an {@link AgentRenderer} needs to produce a native agent definition file.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderInput {\n /** Parsed `agent.yaml` manifest for the GitAgent being rendered. */\n manifest: AgentManifest;\n /** Raw content of `SOUL.md`, or `null` if absent. */\n soul: string | null;\n /** Raw content of `RULES.md`, or `null` if absent. */\n rules: string | null;\n /** Raw content of `DUTIES.md`, or `null` if absent. */\n duties: string | null;\n /** Agent name used as the output filename and frontmatter `name` field. */\n agentName: string;\n /** Resolved absolute path to the framework's agent deploy directory (e.g. `.claude/agents/`). */\n agentDeployDir: string;\n /** Absolute path to the workspace root. */\n workspaceRoot: string;\n /** Resolved ability refs — installed skills referenced in the `## Installed Abilities` section. */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs — installed in the skills dir, listed in the `## Contracts` section. */\n contractRefs: ContractRef[];\n /** Resolved framework fragment markdown blocks (agent-mode, handoff, skill-discovery, etc.). */\n frameworkFragments: string[];\n /** Per-project prompt extension markdown blocks loaded from `skaile.yaml` `agent.prompt-extensions`. */\n promptExtensions: string[];\n /** `standing` (long-running identity) or `role` (short-lived, callable). */\n lifecycle: AgentLifecycle;\n /** Names of the skills the agent composes (`composes[{kind: skill}]`), as installed. */\n skills: string[];\n /** Names of the MCP servers the agent's `mcp-server` slots are bound to. */\n mcpServers: string[];\n /**\n * Absolute path of the agent's source directory (where `agent.yaml` lives). The omp renderer\n * copies the local `composes` directories out of it.\n */\n srcDir?: string;\n}\n\n/**\n * Result returned by every {@link AgentRenderer}.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderResult {\n /** Paths to files/dirs rendered, relative to `workspaceRoot`. */\n created: string[];\n /** The subset of `created` whose bytes differ from what was on disk before (new or edited); an identical rewrite is skipped. */\n changed: string[];\n /** Non-fatal warnings (e.g. experimental feature notices). */\n warnings: string[];\n}\n\n/**\n * A function that transforms an {@link AgentRenderInput} into framework-native agent definition files.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport type AgentRenderer = (input: AgentRenderInput) => AgentRenderResult;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/**\n * Unlink a symlink (dangling or not) at a path skaile is about to write. `writeFileSync` follows\n * a link, so the write would land in the file the link points at: the user's own file, outside\n * the project (p1060). The link is replaced by the rendered file instead.\n */\nfunction dropSymlink(path: string): void {\n try {\n if (lstatSync(path).isSymbolicLink()) unlinkSync(path);\n } catch {\n // nothing at the path: the write creates it\n }\n}\n\n/**\n * Write an agent definition file. Agents are compiled artifacts — they must\n * reflect the current canonical source — but a file that already holds exactly\n * these bytes is left untouched (mtime included), so a repeat install is a no-op.\n * `created` lists every rendered path; `changed` only those that were (re)written.\n */\nfunction writeAgent(\n filePath: string,\n content: string,\n workspaceRoot: string,\n created: string[],\n changed: string[],\n): void {\n const rel = relative(workspaceRoot, filePath);\n created.push(rel);\n dropSymlink(filePath);\n if (existsSync(filePath)) {\n try {\n if (readFileSync(filePath, \"utf-8\") === content) return;\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf-8\");\n changed.push(rel);\n}\n\n/**\n * Build the full agent system prompt body baked into the framework-native agent file.\n *\n * This is the sole source of the agent's system prompt body. Agent identity is rendered at install time; the harness reads it natively at runtime.\n * The rendered output ends up in .claude/agents/<name>.md, .omp/agents/<name>/SOUL.md,\n * .codex/agents/<name>.toml and is read natively by the framework on every agent invocation.\n *\n * Section order is owned by the shared builder (`buildAgentPromptSections` in\n * core, the same one the runner assembles its system prompt with):\n * soul → `<MEMORY>` → framework fragments → `## Constraints` (RULES) →\n * `## Duties` → `## Installed Abilities` → `## Contracts` → composed inline\n * blocks → prompt extensions.\n */\nfunction buildMarkdownBody(\n soul: string | null,\n rules: string | null,\n duties: string | null,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n frameworkFragments: string[],\n promptExtensions: string[],\n): string {\n const sections = buildAgentPromptSections({\n soul,\n constraints: rules,\n duties,\n abilities: abilityRefs,\n contracts: contractRefs,\n frameworkFragments,\n promptExtensions,\n });\n return `${sections.map((s) => s.text).join(\"\\n\\n\")}\\n`;\n}\n\n/** Escape a string for use as a TOML multi-line basic string (triple-quote). */\nfunction toTomlMultilineString(s: string): string {\n // Replace \"\"\" with \\\\\"\"\" to avoid breaking the TOML literal\n return s.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n}\n\n/**\n * The manifest's `model` as a harness other than Claude Code can take it: the Claude Code\n * aliases (`inherit`, `opus`, `sonnet`, `haiku`) name no model of another harness' provider, so a\n * `preferred` that is one of them is dropped (the harness starts the agent on its own default) and\n * so is a `fallback` entry that is. Any other selector (`provider/model`, a full id, `@role`) is\n * the author's choice and is passed through. `undefined` when nothing is left.\n */\nfunction harnessModel(model: AgentManifest[\"model\"]): AgentManifest[\"model\"] | undefined {\n if (!model) return undefined;\n const claudeOnly = (m: string): boolean =>\n (ANTHROPIC_MODEL_ALIASES as readonly string[]).includes(m);\n const { preferred, fallback, ...rest } = model;\n const kept: NonNullable<AgentManifest[\"model\"]> = { ...rest };\n if (preferred && !claudeOnly(preferred)) kept.preferred = preferred;\n const fallbacks = (fallback ?? []).filter((m) => !claudeOnly(m));\n if (fallbacks.length > 0) kept.fallback = fallbacks;\n return Object.keys(kept).length > 0 ? kept : undefined;\n}\n\n/** Directory entries that are never part of an asset (build and OS leftovers). */\nconst COPY_SKIP = new Set([\".git\", \".DS_Store\", \"node_modules\", \"__pycache__\"]);\n\n/** Copy a file or directory tree byte for byte; a file that already holds these bytes is left alone. */\nfunction copyTree(from: string, to: string, workspaceRoot: string, changed: string[]): void {\n const stat = lstatSync(from);\n if (stat.isSymbolicLink()) return;\n if (stat.isDirectory()) {\n for (const name of readdirSync(from)) {\n if (COPY_SKIP.has(name) || name.endsWith(\".pyc\")) continue;\n copyTree(join(from, name), join(to, name), workspaceRoot, changed);\n }\n return;\n }\n if (!stat.isFile()) return;\n const bytes = readFileSync(from);\n dropSymlink(to);\n // A script keeps its exec bit: a copy that loses it shows as a mode change in `git status` (p1657).\n const executable = (stat.mode & 0o111) !== 0;\n if (existsSync(to)) {\n try {\n if (bytes.equals(readFileSync(to))) {\n if (executable && (lstatSync(to).mode & 0o100) === 0) chmodSync(to, stat.mode & 0o777);\n return;\n }\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(to), { recursive: true });\n writeFileSync(to, bytes);\n if (executable) chmodSync(to, stat.mode & 0o777);\n changed.push(relative(workspaceRoot, to));\n}\n\n/**\n * Make the `composes` of an omp `agent.yaml` resolvable from where it is written: every local ref\n * (`./rules-local/house-rules`) is copied next to the `agent.yaml`, at the path the ref names, and a\n * local ref that climbs out of the agent directory (`../shared/rules`) is copied to\n * `composes/<name>` and rewritten to that path. Catalog refs (`skill:@pub/name`) are kept as written.\n */\nfunction bundleLocalComposes(\n composes: NonNullable<AgentManifest[\"composes\"]>,\n srcDir: string | undefined,\n destDir: string,\n workspaceRoot: string,\n changed: string[],\n warnings: string[],\n): NonNullable<AgentManifest[\"composes\"]> {\n if (!srcDir) return composes;\n return composes.map((item) => {\n if (!item.ref.startsWith(\"./\") && !item.ref.startsWith(\"../\")) return item;\n const from = resolve(srcDir, item.ref);\n if (!existsSync(from)) {\n warnings.push(`compose ref ${item.ref} not found at ${from}: not copied into ${destDir}`);\n return item;\n }\n const rel = normalize(item.ref);\n const inside = !rel.startsWith(\"..\");\n const target = inside ? rel : join(\"composes\", basename(from));\n copyTree(from, join(destDir, target), workspaceRoot, changed);\n return inside ? item : { ...item, ref: `./${target}` };\n });\n}\n\n// ── Claude Code ────────────��──────────────────────────────────────────────────\n// Format: .claude/agents/<name>.md\n// Sub-agent support: automatic (description-based) + @-mention\n// Required frontmatter: name, description\n//\n// Installation → runtime handoff:\n// skaile install (claudeCodeRenderer) creates the .md file from GitAgent source\n// ClaudeSdkHarness.startQuery() passes options.agent = agentName to the SDK query\n// The SDK reads .claude/agents/<agentName>.md to get model, tools, and system prompt\n// This is equivalent to running: claude --agent <agentName>\n\n/**\n * Render a GitAgent to Claude Code's `.claude/agents/<name>.md` format.\n *\n * Writes YAML frontmatter (name, description, model, tools, skills, mcpServers,\n * maxTurns, background) followed by the enriched system prompt body. `skills`\n * lists the composed skills, `mcpServers` the MCP servers the agent's\n * `mcp-server` slots are bound to, and `background: true` marks a `role`\n * instance whose `runtime.background` is set. Always overwrites to reflect\n * current source.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const claudeCodeRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n skills,\n mcpServers,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n\n // Model: map to Claude Code's model field. Accepts aliases (sonnet/opus/haiku/inherit)\n // or a full Anthropic ID. Unrecognized values (e.g. legacy `claude-opus-4`) are\n // coerced to the matching family alias so the agent still loads.\n if (manifest.model?.preferred) {\n const raw = manifest.model.preferred;\n const normalized = normalizeAnthropicModel(raw);\n if (normalized !== raw) {\n warnings.push(\n `agent ${agentName}: model \"${raw}\" is not a valid Claude model ID; normalized to alias \"${normalized}\". Update agent.yaml.`,\n );\n }\n frontmatter.model = normalized;\n }\n\n // Tool restrictions\n if (manifest.tools?.allowed?.length) {\n frontmatter.tools = manifest.tools.allowed.join(\", \");\n }\n if (manifest.tools?.denied?.length) {\n frontmatter.disallowedTools = manifest.tools.denied.join(\", \");\n }\n\n if (skills.length > 0) frontmatter.skills = skills;\n if (mcpServers.length > 0) frontmatter.mcpServers = mcpServers;\n\n // Runtime\n if (manifest.runtime?.max_turns) {\n frontmatter.maxTurns = manifest.runtime.max_turns;\n }\n if (lifecycle === \"role\" && manifest.runtime?.background === true) {\n frontmatter.background = true;\n }\n\n // Metadata pass-through for Claude Code-specific fields\n if (manifest.metadata?.color) frontmatter.color = manifest.metadata.color;\n if (manifest.metadata?.effort) frontmatter.effort = manifest.metadata.effort;\n if (manifest.metadata?.isolation) frontmatter.isolation = manifest.metadata.isolation;\n\n const body = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const content = `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${body}`;\n const filePath = join(agentDeployDir, `${agentName}.md`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── OpenAI Codex ──────────────────────────────────────────────────────────────\n// Format: .codex/agents/<name>.toml\n// Sub-agent support: explicit user request only (not automatic)\n// Required fields: name, description, developer_instructions\n\n/**\n * Tools that change the workspace or run commands. Codex has no per-agent tool\n * allowlist; the closest per-agent control is `sandbox_mode`, so an agent whose\n * declared tool surface contains none of these is rendered `read-only`.\n */\nconst MUTATING_TOOLS = [\"Write\", \"Edit\", \"MultiEdit\", \"NotebookEdit\", \"Bash\"] as const;\n\n/** `read-only` when the manifest's tool surface cannot mutate anything, else `undefined` (inherit). */\nfunction codexSandboxMode(tools: AgentManifest[\"tools\"]): \"read-only\" | undefined {\n const allowed = tools?.allowed ?? [];\n const denied = new Set(tools?.denied ?? []);\n if (allowed.length > 0) {\n return allowed.some((t) => !denied.has(t) && (MUTATING_TOOLS as readonly string[]).includes(t))\n ? undefined\n : \"read-only\";\n }\n // No allowlist: everything not denied is available.\n return MUTATING_TOOLS.every((t) => denied.has(t)) ? \"read-only\" : undefined;\n}\n\n/** Directory (next to `agents/`) holding each Codex agent's markdown identity, one file per agent. */\nexport const CODEX_IDENTITY_DIR = \"skaile-agents\";\n\n/**\n * Render a GitAgent to OpenAI Codex's `.codex/agents/<name>.toml` format.\n *\n * Produces a TOML file with `name`, `description`, `model`, `sandbox_mode` and\n * `developer_instructions`. `sandbox_mode = \"read-only\"` is the per-agent tool\n * restriction: it is emitted when the manifest's `tools` leave the agent no way\n * to write or run commands (Codex has no per-tool allowlist). Triple-quoted\n * TOML multi-line strings are escaped to avoid syntax errors.\n *\n * Also writes the agent's identity as `.codex/skaile-agents/<name>.md`, which\n * the Codex harness combines with the session's runtime prompt (one file per\n * agent, so several instances never overwrite each other).\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const codexRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const instructions = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const escaped = toTomlMultilineString(instructions);\n\n const lines: string[] = [\n `name = ${JSON.stringify(agentName)}`,\n `description = ${JSON.stringify(manifest.description ?? `${agentName} agent`)}`,\n ];\n // A Claude Code alias (`sonnet`) names no Codex model: leave `model` out and Codex uses its own.\n const model = harnessModel(manifest.model)?.preferred;\n if (model) lines.push(`model = ${JSON.stringify(model)}`);\n const sandboxMode = codexSandboxMode(manifest.tools);\n if (sandboxMode) lines.push(`sandbox_mode = ${JSON.stringify(sandboxMode)}`);\n lines.push(`developer_instructions = \"\"\"`, escaped.trim(), `\"\"\"`);\n\n const content = `${lines.join(\"\\n\")}\\n`;\n const filePath = join(agentDeployDir, `${agentName}.toml`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n // Write the full agent identity as markdown for the Codex harness to read at runtime.\n // The harness combines this with the session's dynamic content (resources, context)\n // and passes the result via model_instructions_file.\n const agentMdPath = join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`);\n writeAgent(agentMdPath, instructions, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── oh-my-pi ─��────────────��────────────────────────────────��─────────────────\n// Format: .omp/agents/<name>/ (directory with agent.yaml + SOUL.md + RULES.md)\n// oh-my-pi reads GitAgent directories natively via PI_CODING_AGENT_DIR.\n// The renderer copies/enriches the source directory rather than flattening to .md.\n//\n// Installation → runtime handoff:\n// skaile install (ompRenderer) creates .omp/agents/<name>/ from GitAgent source\n// OmpHarness._start() sets env.PI_CODING_AGENT_DIR = agentDir in the child process\n// omp reads SOUL.md/RULES.md/knowledge/ from that directory natively on startup\n//\n// Note: REPL mode can bypass the install step — agentDir can point directly to the\n// GitAgent source directory, and omp will read it natively via PI_CODING_AGENT_DIR.\n// The rendered .omp/agents/ copy is only needed when the source is not accessible\n// from the project cwd (e.g. different repo, remote workspace).\n\n/**\n * Render a GitAgent to oh-my-pi's `.omp/agents/<name>/` directory format.\n *\n * Writes `agent.yaml` (resolved model/tools/delegation plus the 0.2\n * declaration — `composes` verbatim, `lifecycle`, `io`, `memory`, `triggers`,\n * `capabilities`) and an enriched `SOUL.md` that includes fragments and\n * extensions. omp reads this directory natively via the `PI_CODING_AGENT_DIR`\n * environment variable.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const ompRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n srcDir,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const destDir = join(agentDeployDir, agentName);\n\n // Write agent.yaml with tools resolved\n const agentYaml: Record<string, unknown> = {\n spec_version: manifest.spec_version ?? \"0.2\",\n name: agentName,\n // The version every library gives a file that declares none (`DEFAULT_ASSET_VERSION`).\n version: manifest.version ?? \"0.1.0\",\n description: manifest.description ?? `${agentName} agent`,\n lifecycle,\n };\n // The model: omp takes provider-prefixed full IDs and `@role` selectors, and resolves the\n // family aliases it knows (verified live 2026-09-20 against omp v18.1.10 through\n // teamclaude.postxl.com: `--model anthropic/opus` produced\n // `model_change {\"model\":\"anthropic/claude-opus-5\",\"resolvedModelIsFallback\":false}`).\n // The Claude Code aliases the manifest writes (`sonnet`, `haiku`, `opus`, `inherit`) name no\n // model of an omp deployment on another provider, so they are left out and omp starts the agent\n // on its own default. Any other selector is passed through verbatim: it is not checked here, and\n // not coerced by `normalizeAnthropicModel`, which would substitute a different model on any\n // provider but Anthropic (see `resolveManifestModel` in `@skaile/workspaces/bridge`).\n const model = harnessModel(manifest.model);\n if (model) agentYaml.model = model;\n if (manifest.tools) agentYaml.tools = manifest.tools;\n if (manifest.delegation) agentYaml.delegation = manifest.delegation;\n if (manifest.runtime) agentYaml.runtime = manifest.runtime;\n if (manifest.io) agentYaml.io = manifest.io;\n if (manifest.memory) agentYaml.memory = manifest.memory;\n if (manifest.triggers?.length) agentYaml.triggers = manifest.triggers;\n if (manifest.capabilities?.length) agentYaml.capabilities = manifest.capabilities;\n if (manifest.composes?.length) {\n agentYaml.composes = bundleLocalComposes(\n manifest.composes,\n srcDir,\n destDir,\n workspaceRoot,\n changed,\n warnings,\n );\n }\n if (manifest.tags?.length) agentYaml.tags = manifest.tags;\n if (manifest.metadata) agentYaml.metadata = manifest.metadata;\n\n writeAgent(join(destDir, \"agent.yaml\"), stringifyYaml(agentYaml), workspaceRoot, [], changed);\n\n // Write SOUL.md (enriched with fragments and extensions, like other renderers)\n const enrichedSoul = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n writeAgent(join(destDir, \"SOUL.md\"), enrichedSoul, workspaceRoot, [], changed);\n\n // omp lists the agents it can spawn from flat `.omp/agents/<name>.md` files only (verified live\n // against omp 18.12.5: a `<name>/agent.yaml` directory is not listed, a flat file is), so the\n // directory above carries the full GitAgent package and this file is what omp loads.\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n if (manifest.tools?.allowed?.length) frontmatter.tools = manifest.tools.allowed.join(\", \");\n const selector = model?.preferred;\n if (selector) frontmatter.model = selector;\n writeAgent(\n join(agentDeployDir, `${agentName}.md`),\n `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${enrichedSoul}`,\n workspaceRoot,\n created,\n changed,\n );\n\n created.push(relative(workspaceRoot, destDir));\n return { created, changed, warnings };\n};\n\n// ── Renderer registry ──────────────────────────────���──────────────────────────\n\nexport type Log = (msg: string) => void;\nconst noop: Log = () => {};\n\n/**\n * Render an agent to framework-native format via the renderer registry.\n *\n * Shared by both the simple deploy path (`deployAsset`) and the enriched scaffold path (agents layer).\n *\n * @param input - Full render input including manifest, SOUL/RULES text, and resolved refs.\n * @param harnessTarget - Agent framework ID to look up in {@link AGENT_RENDERERS}.\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function renderAgentToFramework(\n input: AgentRenderInput,\n harnessTarget: string,\n log: Log = noop,\n): AgentRenderResult {\n const renderer = AGENT_RENDERERS[harnessTarget];\n if (!renderer) {\n return {\n created: [],\n changed: [],\n warnings: [`No renderer for framework \"${harnessTarget}\"`],\n };\n }\n const result = renderer(input);\n for (const c of result.created) log(` rendered agent: ${c}`);\n for (const w of result.warnings) log(` warn: ${w}`);\n return result;\n}\n\n/**\n * Registry mapping framework IDs to their {@link AgentRenderer} functions.\n *\n * Only harnesses with a full bridge harness are registered. Add new entries\n * when a bridge harness is implemented in `workspaces/bridge/src/harnesses/`.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const AGENT_RENDERERS: Record<string, AgentRenderer> = {\n \"claude-code\": claudeCodeRenderer,\n omp: ompRenderer,\n codex: codexRenderer,\n};\n\n/**\n * Returns `true` if the given harness target supports file-based sub-agent installation.\n *\n * @param harnessTarget - Agent framework ID to check.\n * @returns `true` when `harnessTarget` has a registered entry in {@link AGENT_RENDERERS}.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function harnessTargetSupportsAgents(harnessTarget: string): boolean {\n return harnessTarget in AGENT_RENDERERS;\n}\n\n/**\n * The files the renderer of `harnessTarget` writes for the agent `agentName` into the agent deploy\n * directory `agentDeployDir` (`.claude/agents`, `.codex/agents`, `.omp/agents`): what `add\n * --dry-run` lists (p1621). Files a `composes:` of local refs adds to omp are not listed. Empty\n * for a harness target without an agent renderer.\n */\nexport function agentRenderFiles(\n harnessTarget: string,\n agentDeployDir: string,\n agentName: string,\n): string[] {\n switch (harnessTarget) {\n case \"claude-code\":\n return [join(agentDeployDir, `${agentName}.md`)];\n case \"codex\":\n return [\n join(agentDeployDir, `${agentName}.toml`),\n join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`),\n ];\n case \"omp\":\n return [\n join(agentDeployDir, agentName, \"agent.yaml\"),\n join(agentDeployDir, agentName, \"SOUL.md\"),\n join(agentDeployDir, `${agentName}.md`),\n ];\n default:\n return [];\n }\n}\n"]}
1
+ {"version":3,"sources":["../asset-manager/src/renderers.ts"],"names":["stringifyYaml"],"mappings":";;;;;;AA6GA,SAAS,YAAY,IAAA,EAAoB;AACvC,EAAA,IAAI;AACF,IAAA,IAAI,UAAU,IAAI,CAAA,CAAE,cAAA,EAAe,aAAc,IAAI,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAQA,SAAS,UAAA,CACP,QAAA,EACA,OAAA,EACA,aAAA,EACA,SACA,OAAA,EACM;AACN,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,EAAe,QAAQ,CAAA;AAC5C,EAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAChB,EAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,EAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,IAAA,IAAI;AACF,MAAA,IAAI,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA,KAAM,OAAA,EAAS;AAAA,IACnD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,SAAA,CAAU,QAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,EAAA,aAAA,CAAc,QAAA,EAAU,SAAS,OAAO,CAAA;AACxC,EAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAClB;AAeA,SAAS,kBACP,IAAA,EACA,KAAA,EACA,QACA,WAAA,EACA,YAAA,EACA,oBACA,gBAAA,EACQ;AACR,EAAA,MAAM,WAAW,wBAAA,CAAyB;AAAA,IACxC,IAAA;AAAA,IACA,WAAA,EAAa,KAAA;AAAA,IACb,MAAA;AAAA,IACA,SAAA,EAAW,WAAA;AAAA,IACX,SAAA,EAAW,YAAA;AAAA,IACX,kBAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC;AAAA,CAAA;AACpD;AAGA,SAAS,sBAAsB,CAAA,EAAmB;AAEhD,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,WAAW,CAAA;AACtC;AASA,SAAS,aAAa,KAAA,EAAmE;AACvF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KACjB,uBAAA,CAA8C,SAAS,CAAC,CAAA;AAC3D,EAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,MAAK,GAAI,KAAA;AACzC,EAAA,MAAM,IAAA,GAA4C,EAAE,GAAG,IAAA,EAAK;AAC5D,EAAA,IAAI,aAAa,CAAC,UAAA,CAAW,SAAS,CAAA,OAAQ,SAAA,GAAY,SAAA;AAC1D,EAAA,MAAM,SAAA,GAAA,CAAa,QAAA,IAAY,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,UAAA,CAAW,CAAC,CAAC,CAAA;AAC/D,EAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,QAAA,GAAW,SAAA;AAC1C,EAAA,OAAO,OAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,IAAA,GAAO,MAAA;AAC/C;AAGA,IAAM,SAAA,uBAAgB,GAAA,CAAI,CAAC,QAAQ,WAAA,EAAa,cAAA,EAAgB,aAAa,CAAC,CAAA;AAG9E,SAAS,QAAA,CAAS,IAAA,EAAc,EAAA,EAAY,aAAA,EAAuB,OAAA,EAAyB;AAC1F,EAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,EAAA,IAAI,IAAA,CAAK,gBAAe,EAAG;AAC3B,EAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,IAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,IAAI,CAAA,EAAG;AACpC,MAAA,IAAI,UAAU,GAAA,CAAI,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,IAAI,CAAA,EAAG,KAAK,EAAA,EAAI,IAAI,CAAA,EAAG,aAAA,EAAe,OAAO,CAAA;AAAA,IACnE;AACA,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAO,EAAG;AACpB,EAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAC/B,EAAA,WAAA,CAAY,EAAE,CAAA;AAEd,EAAA,MAAM,UAAA,GAAA,CAAc,IAAA,CAAK,IAAA,GAAO,EAAA,MAAW,CAAA;AAC3C,EAAA,IAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AAClB,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,CAAM,MAAA,CAAO,YAAA,CAAa,EAAE,CAAC,CAAA,EAAG;AAClC,QAAA,IAAI,UAAA,IAAA,CAAe,SAAA,CAAU,EAAE,CAAA,CAAE,IAAA,GAAO,EAAA,MAAW,CAAA,EAAG,SAAA,CAAU,EAAA,EAAI,IAAA,CAAK,IAAA,GAAO,GAAK,CAAA;AACrF,QAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,SAAA,CAAU,QAAQ,EAAE,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1C,EAAA,aAAA,CAAc,IAAI,KAAK,CAAA;AACvB,EAAA,IAAI,UAAA,EAAY,SAAA,CAAU,EAAA,EAAI,IAAA,CAAK,OAAO,GAAK,CAAA;AAC/C,EAAA,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,aAAA,EAAe,EAAE,CAAC,CAAA;AAC1C;AAQA,SAAS,oBACP,QAAA,EACA,MAAA,EACA,OAAA,EACA,aAAA,EACA,SACA,QAAA,EACwC;AACxC,EAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AACpB,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,CAAC,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,IAAA;AACtE,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAA;AACrC,IAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG;AACrB,MAAA,QAAA,CAAS,IAAA,CAAK,eAAe,IAAA,CAAK,GAAG,iBAAiB,IAAI,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAE,CAAA;AACxF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA;AACnC,IAAA,MAAM,SAAS,MAAA,GAAS,GAAA,GAAM,KAAK,UAAA,EAAY,QAAA,CAAS,IAAI,CAAC,CAAA;AAC7D,IAAA,QAAA,CAAS,MAAM,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA,EAAG,eAAe,OAAO,CAAA;AAC5D,IAAA,OAAO,MAAA,GAAS,OAAO,EAAE,GAAG,MAAM,GAAA,EAAK,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,EAAG;AAAA,EACvD,CAAC,CAAA;AACH;AAyBO,IAAM,qBAAoC,CAAC;AAAA,EAChD,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,MAAM,WAAA,GAAuC;AAAA,IAC3C,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,QAAA,CAAS,WAAA,IAAe,CAAA,EAAG,SAAS,CAAA,MAAA;AAAA,GACnD;AAKA,EAAA,IAAI,QAAA,CAAS,OAAO,SAAA,EAAW;AAC7B,IAAA,MAAM,GAAA,GAAM,SAAS,KAAA,CAAM,SAAA;AAC3B,IAAA,MAAM,UAAA,GAAa,wBAAwB,GAAG,CAAA;AAC9C,IAAA,IAAI,eAAe,GAAA,EAAK;AACtB,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,CAAA,MAAA,EAAS,SAAS,CAAA,SAAA,EAAY,GAAG,0DAA0D,UAAU,CAAA,qBAAA;AAAA,OACvG;AAAA,IACF;AACA,IAAA,WAAA,CAAY,KAAA,GAAQ,UAAA;AAAA,EACtB;AAGA,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ;AACnC,IAAA,WAAA,CAAY,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ;AAClC,IAAA,WAAA,CAAY,eAAA,GAAkB,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,WAAA,CAAY,MAAA,GAAS,MAAA;AAC5C,EAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,WAAA,CAAY,UAAA,GAAa,UAAA;AAGpD,EAAA,IAAI,QAAA,CAAS,SAAS,SAAA,EAAW;AAC/B,IAAA,WAAA,CAAY,QAAA,GAAW,SAAS,OAAA,CAAQ,SAAA;AAAA,EAC1C;AACA,EAAA,IAAI,SAAA,KAAc,MAAA,IAAU,QAAA,CAAS,OAAA,EAAS,eAAe,IAAA,EAAM;AACjE,IAAA,WAAA,CAAY,UAAA,GAAa,IAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,SAAS,QAAA,EAAU,KAAA,EAAO,WAAA,CAAY,KAAA,GAAQ,SAAS,QAAA,CAAS,KAAA;AACpE,EAAA,IAAI,SAAS,QAAA,EAAU,MAAA,EAAQ,WAAA,CAAY,MAAA,GAAS,SAAS,QAAA,CAAS,MAAA;AACtE,EAAA,IAAI,SAAS,QAAA,EAAU,SAAA,EAAW,WAAA,CAAY,SAAA,GAAY,SAAS,QAAA,CAAS,SAAA;AAE5E,EAAA,MAAM,IAAA,GAAO,iBAAA;AAAA,IACX,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAU,CAAA;AAAA,EAAQA,SAAA,CAAc,WAAW,CAAA,CAAE,IAAA,EAAM;AAAA;;AAAA,EAAY,IAAI,CAAA,CAAA;AACzE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,EAAgB,CAAA,EAAG,SAAS,CAAA,GAAA,CAAK,CAAA;AACvD,EAAA,UAAA,CAAW,QAAA,EAAU,OAAA,EAAS,aAAA,EAAe,OAAA,EAAS,OAAO,CAAA;AAE7D,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAS;AACtC;AAYA,IAAM,iBAAiB,CAAC,OAAA,EAAS,MAAA,EAAQ,WAAA,EAAa,gBAAgB,MAAM,CAAA;AAG5E,SAAS,iBAAiB,KAAA,EAAwD;AAChF,EAAA,MAAM,OAAA,GAAU,KAAA,EAAO,OAAA,IAAW,EAAC;AACnC,EAAA,MAAM,SAAS,IAAI,GAAA,CAAI,KAAA,EAAO,MAAA,IAAU,EAAE,CAAA;AAC1C,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,IAAM,cAAA,CAAqC,QAAA,CAAS,CAAC,CAAC,IAC1F,MAAA,GACA,WAAA;AAAA,EACN;AAEA,EAAA,OAAO,cAAA,CAAe,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,WAAA,GAAc,MAAA;AACpE;AAGO,IAAM,kBAAA,GAAqB;AAiB3B,IAAM,gBAA+B,CAAC;AAAA,EAC3C,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,MAAM,YAAA,GAAe,iBAAA;AAAA,IACnB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAU,sBAAsB,YAAY,CAAA;AAElD,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,CAAA,OAAA,EAAU,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,CAAA;AAAA,IACnC,CAAA,cAAA,EAAiB,KAAK,SAAA,CAAU,QAAA,CAAS,eAAe,CAAA,EAAG,SAAS,QAAQ,CAAC,CAAA;AAAA,GAC/E;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG,SAAA;AAC5C,EAAA,IAAI,KAAA,QAAa,IAAA,CAAK,CAAA,QAAA,EAAW,KAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAE,CAAA;AACxD,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AACnD,EAAA,IAAI,WAAA,QAAmB,IAAA,CAAK,CAAA,eAAA,EAAkB,KAAK,SAAA,CAAU,WAAW,CAAC,CAAA,CAAE,CAAA;AAC3E,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,4BAAA,CAAA,EAAgC,OAAA,CAAQ,IAAA,IAAQ,CAAA,GAAA,CAAK,CAAA;AAEhE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,EAAgB,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAA;AACzD,EAAA,UAAA,CAAW,QAAA,EAAU,OAAA,EAAS,aAAA,EAAe,OAAA,EAAS,OAAO,CAAA;AAK7D,EAAA,MAAM,WAAA,GAAc,KAAK,OAAA,CAAQ,cAAc,GAAG,kBAAA,EAAoB,CAAA,EAAG,SAAS,CAAA,GAAA,CAAK,CAAA;AACvF,EAAA,UAAA,CAAW,WAAA,EAAa,YAAA,EAAc,aAAA,EAAe,OAAA,EAAS,OAAO,CAAA;AAErE,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAS;AACtC;AA4BO,IAAM,cAA6B,CAAC;AAAA,EACzC,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,EAAgB,SAAS,CAAA;AAG9C,EAAA,MAAM,SAAA,GAAqC;AAAA,IACzC,YAAA,EAAc,SAAS,YAAA,IAAgB,KAAA;AAAA,IACvC,IAAA,EAAM,SAAA;AAAA;AAAA,IAEN,OAAA,EAAS,SAAS,OAAA,IAAW,OAAA;AAAA,IAC7B,WAAA,EAAa,QAAA,CAAS,WAAA,IAAe,CAAA,EAAG,SAAS,CAAA,MAAA,CAAA;AAAA,IACjD;AAAA,GACF;AAUA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA;AACzC,EAAA,IAAI,KAAA,YAAiB,KAAA,GAAQ,KAAA;AAC7B,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,SAAA,CAAU,KAAA,GAAQ,QAAA,CAAS,KAAA;AAC/C,EAAA,IAAI,QAAA,CAAS,UAAA,EAAY,SAAA,CAAU,UAAA,GAAa,QAAA,CAAS,UAAA;AACzD,EAAA,IAAI,QAAA,CAAS,OAAA,EAAS,SAAA,CAAU,OAAA,GAAU,QAAA,CAAS,OAAA;AACnD,EAAA,IAAI,QAAA,CAAS,EAAA,EAAI,SAAA,CAAU,EAAA,GAAK,QAAA,CAAS,EAAA;AACzC,EAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAA,GAAS,QAAA,CAAS,MAAA;AACjD,EAAA,IAAI,QAAA,CAAS,QAAA,EAAU,MAAA,EAAQ,SAAA,CAAU,WAAW,QAAA,CAAS,QAAA;AAC7D,EAAA,IAAI,QAAA,CAAS,YAAA,EAAc,MAAA,EAAQ,SAAA,CAAU,eAAe,QAAA,CAAS,YAAA;AACrE,EAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAQ;AAC7B,IAAA,SAAA,CAAU,QAAA,GAAW,mBAAA;AAAA,MACnB,QAAA,CAAS,QAAA;AAAA,MACT,MAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,SAAA,CAAU,OAAO,QAAA,CAAS,IAAA;AACrD,EAAA,IAAI,QAAA,CAAS,QAAA,EAAU,SAAA,CAAU,QAAA,GAAW,QAAA,CAAS,QAAA;AAErD,EAAA,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,YAAY,CAAA,EAAGA,SAAA,CAAc,SAAS,CAAA,EAAG,aAAA,EAAe,EAAC,EAAG,OAAO,CAAA;AAG5F,EAAA,MAAM,YAAA,GAAe,iBAAA;AAAA,IACnB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,UAAA,CAAW,IAAA,CAAK,SAAS,SAAS,CAAA,EAAG,cAAc,aAAA,EAAe,IAAI,OAAO,CAAA;AAK7E,EAAA,MAAM,WAAA,GAAuC;AAAA,IAC3C,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,QAAA,CAAS,WAAA,IAAe,CAAA,EAAG,SAAS,CAAA,MAAA;AAAA,GACnD;AACA,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,QAAQ,QAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACzF,EAAA,MAAM,WAAW,KAAA,EAAO,SAAA;AACxB,EAAA,IAAI,QAAA,cAAsB,KAAA,GAAQ,QAAA;AAClC,EAAA,UAAA;AAAA,IACE,IAAA,CAAK,cAAA,EAAgB,CAAA,EAAG,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,IACtC,CAAA;AAAA,EAAQA,SAAA,CAAc,WAAW,CAAA,CAAE,IAAA,EAAM;AAAA;;AAAA,EAAY,YAAY,CAAA,CAAA;AAAA,IACjE,aAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,aAAA,EAAe,OAAO,CAAC,CAAA;AAC7C,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAS;AACtC;AAKA,IAAM,OAAY,MAAM;AAAC,CAAA;AAalB,SAAS,sBAAA,CACd,KAAA,EACA,aAAA,EACA,GAAA,GAAW,IAAA,EACQ;AACnB,EAAA,MAAM,QAAA,GAAW,gBAAgB,aAAa,CAAA;AAC9C,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO;AAAA,MACL,SAAS,EAAC;AAAA,MACV,SAAS,EAAC;AAAA,MACV,QAAA,EAAU,CAAC,CAAA,2BAAA,EAA8B,aAAa,CAAA,CAAA,CAAG;AAAA,KAC3D;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,OAAA,EAAS,GAAA,CAAI,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAC5D,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,QAAA,EAAU,GAAA,CAAI,CAAA,QAAA,EAAW,CAAC,CAAA,CAAE,CAAA;AACnD,EAAA,OAAO,MAAA;AACT;AAUO,IAAM,eAAA,GAAiD;AAAA,EAC5D,aAAA,EAAe,kBAAA;AAAA,EACf,GAAA,EAAK,WAAA;AAAA,EACL,KAAA,EAAO;AACT;AASO,SAAS,4BAA4B,aAAA,EAAgC;AAC1E,EAAA,OAAO,aAAA,IAAiB,eAAA;AAC1B;AAQO,SAAS,gBAAA,CACd,aAAA,EACA,cAAA,EACA,SAAA,EACU;AACV,EAAA,QAAQ,aAAA;AAAe,IACrB,KAAK,aAAA;AACH,MAAA,OAAO,CAAC,IAAA,CAAK,cAAA,EAAgB,CAAA,EAAG,SAAS,KAAK,CAAC,CAAA;AAAA,IACjD,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,CAAK,cAAA,EAAgB,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAA;AAAA,QACxC,KAAK,OAAA,CAAQ,cAAc,GAAG,kBAAA,EAAoB,CAAA,EAAG,SAAS,CAAA,GAAA,CAAK;AAAA,OACrE;AAAA,IACF,KAAK,KAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,CAAK,cAAA,EAAgB,SAAA,EAAW,YAAY,CAAA;AAAA,QAC5C,IAAA,CAAK,cAAA,EAAgB,SAAA,EAAW,SAAS,CAAA;AAAA,QACzC,IAAA,CAAK,cAAA,EAAgB,CAAA,EAAG,SAAS,CAAA,GAAA,CAAK;AAAA,OACxC;AAAA,IACF;AACE,MAAA,OAAO,EAAC;AAAA;AAEd","file":"chunk-QBUJTVMY.js","sourcesContent":["/**\n * Framework-specific renderers for GitAgent packages.\n *\n * Each renderer transforms a parsed GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the native file format that the target agent framework natively reads.\n *\n * Only harnesses with a full bridge harness (runtime execution) are included:\n * claude-code → .claude/agents/<name>.md (YAML frontmatter + markdown body)\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml (TOML)\n *\n * Removed (no bridge harness): cursor, roo, github-copilot, gemini, amp.\n * Add them back when a bridge harness is implemented.\n */\n\nimport {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { basename, dirname, join, normalize, relative, resolve } from \"node:path\";\nimport { buildAgentPromptSections } from \"@skaile/workspaces/core\";\nimport {\n ANTHROPIC_MODEL_ALIASES,\n type AgentLifecycle,\n type AgentManifest,\n normalizeAnthropicModel,\n} from \"@skaile/workspaces/types/manifests\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport type { AbilityRef, ContractRef } from \"./fragments.js\";\n\n// ── Types ─────────────────────────────────��───────────────────────────────────\n\nexport type { AgentManifest };\n\n/**\n * All data an {@link AgentRenderer} needs to produce a native agent definition file.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderInput {\n /** Parsed `agent.yaml` manifest for the GitAgent being rendered. */\n manifest: AgentManifest;\n /** Raw content of `SOUL.md`, or `null` if absent. */\n soul: string | null;\n /** Raw content of `RULES.md`, or `null` if absent. */\n rules: string | null;\n /** Raw content of `DUTIES.md`, or `null` if absent. */\n duties: string | null;\n /** Agent name used as the output filename and frontmatter `name` field. */\n agentName: string;\n /** Resolved absolute path to the framework's agent deploy directory (e.g. `.claude/agents/`). */\n agentDeployDir: string;\n /** Absolute path to the workspace root. */\n workspaceRoot: string;\n /** Resolved ability refs — installed skills referenced in the `## Installed Abilities` section. */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs — installed in the skills dir, listed in the `## Contracts` section. */\n contractRefs: ContractRef[];\n /** Resolved framework fragment markdown blocks (agent-mode, handoff, skill-discovery, etc.). */\n frameworkFragments: string[];\n /** Per-project prompt extension markdown blocks loaded from `skaile.yaml` `agent.prompt-extensions`. */\n promptExtensions: string[];\n /** `standing` (long-running identity) or `role` (short-lived, callable). */\n lifecycle: AgentLifecycle;\n /** Names of the skills the agent composes (`composes[{kind: skill}]`), as installed. */\n skills: string[];\n /** Names of the MCP servers the agent's `mcp-server` slots are bound to. */\n mcpServers: string[];\n /**\n * Absolute path of the agent's source directory (where `agent.yaml` lives). The omp renderer\n * copies the local `composes` directories out of it.\n */\n srcDir?: string;\n}\n\n/**\n * Result returned by every {@link AgentRenderer}.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderResult {\n /** Paths to files/dirs rendered, relative to `workspaceRoot`. */\n created: string[];\n /** The subset of `created` whose bytes differ from what was on disk before (new or edited); an identical rewrite is skipped. */\n changed: string[];\n /** Non-fatal warnings (e.g. experimental feature notices). */\n warnings: string[];\n}\n\n/**\n * A function that transforms an {@link AgentRenderInput} into framework-native agent definition files.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport type AgentRenderer = (input: AgentRenderInput) => AgentRenderResult;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/**\n * Unlink a symlink (dangling or not) at a path skaile is about to write. `writeFileSync` follows\n * a link, so the write would land in the file the link points at: the user's own file, outside\n * the project (p1060). The link is replaced by the rendered file instead.\n */\nfunction dropSymlink(path: string): void {\n try {\n if (lstatSync(path).isSymbolicLink()) unlinkSync(path);\n } catch {\n // nothing at the path: the write creates it\n }\n}\n\n/**\n * Write an agent definition file. Agents are compiled artifacts — they must\n * reflect the current canonical source — but a file that already holds exactly\n * these bytes is left untouched (mtime included), so a repeat install is a no-op.\n * `created` lists every rendered path; `changed` only those that were (re)written.\n */\nfunction writeAgent(\n filePath: string,\n content: string,\n workspaceRoot: string,\n created: string[],\n changed: string[],\n): void {\n const rel = relative(workspaceRoot, filePath);\n created.push(rel);\n dropSymlink(filePath);\n if (existsSync(filePath)) {\n try {\n if (readFileSync(filePath, \"utf-8\") === content) return;\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf-8\");\n changed.push(rel);\n}\n\n/**\n * Build the full agent system prompt body baked into the framework-native agent file.\n *\n * This is the sole source of the agent's system prompt body. Agent identity is rendered at install time; the harness reads it natively at runtime.\n * The rendered output ends up in .claude/agents/<name>.md, .omp/agents/<name>/SOUL.md,\n * .codex/agents/<name>.toml and is read natively by the framework on every agent invocation.\n *\n * Section order is owned by the shared builder (`buildAgentPromptSections` in\n * core, the same one the runner assembles its system prompt with):\n * soul → `<MEMORY>` → framework fragments → `## Constraints` (RULES) →\n * `## Duties` → `## Installed Abilities` → `## Contracts` → composed inline\n * blocks → prompt extensions.\n */\nfunction buildMarkdownBody(\n soul: string | null,\n rules: string | null,\n duties: string | null,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n frameworkFragments: string[],\n promptExtensions: string[],\n): string {\n const sections = buildAgentPromptSections({\n soul,\n constraints: rules,\n duties,\n abilities: abilityRefs,\n contracts: contractRefs,\n frameworkFragments,\n promptExtensions,\n });\n return `${sections.map((s) => s.text).join(\"\\n\\n\")}\\n`;\n}\n\n/** Escape a string for use as a TOML multi-line basic string (triple-quote). */\nfunction toTomlMultilineString(s: string): string {\n // Replace \"\"\" with \\\\\"\"\" to avoid breaking the TOML literal\n return s.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n}\n\n/**\n * The manifest's `model` as a harness other than Claude Code can take it: the Claude Code\n * aliases (`inherit`, `opus`, `sonnet`, `haiku`) name no model of another harness' provider, so a\n * `preferred` that is one of them is dropped (the harness starts the agent on its own default) and\n * so is a `fallback` entry that is. Any other selector (`provider/model`, a full id, `@role`) is\n * the author's choice and is passed through. `undefined` when nothing is left.\n */\nfunction harnessModel(model: AgentManifest[\"model\"]): AgentManifest[\"model\"] | undefined {\n if (!model) return undefined;\n const claudeOnly = (m: string): boolean =>\n (ANTHROPIC_MODEL_ALIASES as readonly string[]).includes(m);\n const { preferred, fallback, ...rest } = model;\n const kept: NonNullable<AgentManifest[\"model\"]> = { ...rest };\n if (preferred && !claudeOnly(preferred)) kept.preferred = preferred;\n const fallbacks = (fallback ?? []).filter((m) => !claudeOnly(m));\n if (fallbacks.length > 0) kept.fallback = fallbacks;\n return Object.keys(kept).length > 0 ? kept : undefined;\n}\n\n/** Directory entries that are never part of an asset (build and OS leftovers). */\nconst COPY_SKIP = new Set([\".git\", \".DS_Store\", \"node_modules\", \"__pycache__\"]);\n\n/** Copy a file or directory tree byte for byte; a file that already holds these bytes is left alone. */\nfunction copyTree(from: string, to: string, workspaceRoot: string, changed: string[]): void {\n const stat = lstatSync(from);\n if (stat.isSymbolicLink()) return;\n if (stat.isDirectory()) {\n for (const name of readdirSync(from)) {\n if (COPY_SKIP.has(name) || name.endsWith(\".pyc\")) continue;\n copyTree(join(from, name), join(to, name), workspaceRoot, changed);\n }\n return;\n }\n if (!stat.isFile()) return;\n const bytes = readFileSync(from);\n dropSymlink(to);\n // A script keeps its exec bit: a copy that loses it shows as a mode change in `git status` (p1657).\n const executable = (stat.mode & 0o111) !== 0;\n if (existsSync(to)) {\n try {\n if (bytes.equals(readFileSync(to))) {\n if (executable && (lstatSync(to).mode & 0o100) === 0) chmodSync(to, stat.mode & 0o777);\n return;\n }\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(to), { recursive: true });\n writeFileSync(to, bytes);\n if (executable) chmodSync(to, stat.mode & 0o777);\n changed.push(relative(workspaceRoot, to));\n}\n\n/**\n * Make the `composes` of an omp `agent.yaml` resolvable from where it is written: every local ref\n * (`./rules-local/house-rules`) is copied next to the `agent.yaml`, at the path the ref names, and a\n * local ref that climbs out of the agent directory (`../shared/rules`) is copied to\n * `composes/<name>` and rewritten to that path. Catalog refs (`skill:@pub/name`) are kept as written.\n */\nfunction bundleLocalComposes(\n composes: NonNullable<AgentManifest[\"composes\"]>,\n srcDir: string | undefined,\n destDir: string,\n workspaceRoot: string,\n changed: string[],\n warnings: string[],\n): NonNullable<AgentManifest[\"composes\"]> {\n if (!srcDir) return composes;\n return composes.map((item) => {\n if (!item.ref.startsWith(\"./\") && !item.ref.startsWith(\"../\")) return item;\n const from = resolve(srcDir, item.ref);\n if (!existsSync(from)) {\n warnings.push(`compose ref ${item.ref} not found at ${from}: not copied into ${destDir}`);\n return item;\n }\n const rel = normalize(item.ref);\n const inside = !rel.startsWith(\"..\");\n const target = inside ? rel : join(\"composes\", basename(from));\n copyTree(from, join(destDir, target), workspaceRoot, changed);\n return inside ? item : { ...item, ref: `./${target}` };\n });\n}\n\n// ── Claude Code ────────────��──────────────────────────────────────────────────\n// Format: .claude/agents/<name>.md\n// Sub-agent support: automatic (description-based) + @-mention\n// Required frontmatter: name, description\n//\n// Installation → runtime handoff:\n// skaile install (claudeCodeRenderer) creates the .md file from GitAgent source\n// ClaudeSdkHarness.startQuery() passes options.agent = agentName to the SDK query\n// The SDK reads .claude/agents/<agentName>.md to get model, tools, and system prompt\n// This is equivalent to running: claude --agent <agentName>\n\n/**\n * Render a GitAgent to Claude Code's `.claude/agents/<name>.md` format.\n *\n * Writes YAML frontmatter (name, description, model, tools, skills, mcpServers,\n * maxTurns, background) followed by the enriched system prompt body. `skills`\n * lists the composed skills, `mcpServers` the MCP servers the agent's\n * `mcp-server` slots are bound to, and `background: true` marks a `role`\n * instance whose `runtime.background` is set. Always overwrites to reflect\n * current source.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const claudeCodeRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n skills,\n mcpServers,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n\n // Model: map to Claude Code's model field. Accepts aliases (sonnet/opus/haiku/inherit)\n // or a full Anthropic ID. Unrecognized values (e.g. legacy `claude-opus-4`) are\n // coerced to the matching family alias so the agent still loads.\n if (manifest.model?.preferred) {\n const raw = manifest.model.preferred;\n const normalized = normalizeAnthropicModel(raw);\n if (normalized !== raw) {\n warnings.push(\n `agent ${agentName}: model \"${raw}\" is not a valid Claude model ID; normalized to alias \"${normalized}\". Update agent.yaml.`,\n );\n }\n frontmatter.model = normalized;\n }\n\n // Tool restrictions\n if (manifest.tools?.allowed?.length) {\n frontmatter.tools = manifest.tools.allowed.join(\", \");\n }\n if (manifest.tools?.denied?.length) {\n frontmatter.disallowedTools = manifest.tools.denied.join(\", \");\n }\n\n if (skills.length > 0) frontmatter.skills = skills;\n if (mcpServers.length > 0) frontmatter.mcpServers = mcpServers;\n\n // Runtime\n if (manifest.runtime?.max_turns) {\n frontmatter.maxTurns = manifest.runtime.max_turns;\n }\n if (lifecycle === \"role\" && manifest.runtime?.background === true) {\n frontmatter.background = true;\n }\n\n // Metadata pass-through for Claude Code-specific fields\n if (manifest.metadata?.color) frontmatter.color = manifest.metadata.color;\n if (manifest.metadata?.effort) frontmatter.effort = manifest.metadata.effort;\n if (manifest.metadata?.isolation) frontmatter.isolation = manifest.metadata.isolation;\n\n const body = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const content = `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${body}`;\n const filePath = join(agentDeployDir, `${agentName}.md`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── OpenAI Codex ──────────────────────────────────────────────────────────────\n// Format: .codex/agents/<name>.toml\n// Sub-agent support: explicit user request only (not automatic)\n// Required fields: name, description, developer_instructions\n\n/**\n * Tools that change the workspace or run commands. Codex has no per-agent tool\n * allowlist; the closest per-agent control is `sandbox_mode`, so an agent whose\n * declared tool surface contains none of these is rendered `read-only`.\n */\nconst MUTATING_TOOLS = [\"Write\", \"Edit\", \"MultiEdit\", \"NotebookEdit\", \"Bash\"] as const;\n\n/** `read-only` when the manifest's tool surface cannot mutate anything, else `undefined` (inherit). */\nfunction codexSandboxMode(tools: AgentManifest[\"tools\"]): \"read-only\" | undefined {\n const allowed = tools?.allowed ?? [];\n const denied = new Set(tools?.denied ?? []);\n if (allowed.length > 0) {\n return allowed.some((t) => !denied.has(t) && (MUTATING_TOOLS as readonly string[]).includes(t))\n ? undefined\n : \"read-only\";\n }\n // No allowlist: everything not denied is available.\n return MUTATING_TOOLS.every((t) => denied.has(t)) ? \"read-only\" : undefined;\n}\n\n/** Directory (next to `agents/`) holding each Codex agent's markdown identity, one file per agent. */\nexport const CODEX_IDENTITY_DIR = \"skaile-agents\";\n\n/**\n * Render a GitAgent to OpenAI Codex's `.codex/agents/<name>.toml` format.\n *\n * Produces a TOML file with `name`, `description`, `model`, `sandbox_mode` and\n * `developer_instructions`. `sandbox_mode = \"read-only\"` is the per-agent tool\n * restriction: it is emitted when the manifest's `tools` leave the agent no way\n * to write or run commands (Codex has no per-tool allowlist). Triple-quoted\n * TOML multi-line strings are escaped to avoid syntax errors.\n *\n * Also writes the agent's identity as `.codex/skaile-agents/<name>.md`, which\n * the Codex harness combines with the session's runtime prompt (one file per\n * agent, so several instances never overwrite each other).\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const codexRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const instructions = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const escaped = toTomlMultilineString(instructions);\n\n const lines: string[] = [\n `name = ${JSON.stringify(agentName)}`,\n `description = ${JSON.stringify(manifest.description ?? `${agentName} agent`)}`,\n ];\n // A Claude Code alias (`sonnet`) names no Codex model: leave `model` out and Codex uses its own.\n const model = harnessModel(manifest.model)?.preferred;\n if (model) lines.push(`model = ${JSON.stringify(model)}`);\n const sandboxMode = codexSandboxMode(manifest.tools);\n if (sandboxMode) lines.push(`sandbox_mode = ${JSON.stringify(sandboxMode)}`);\n lines.push(`developer_instructions = \"\"\"`, escaped.trim(), `\"\"\"`);\n\n const content = `${lines.join(\"\\n\")}\\n`;\n const filePath = join(agentDeployDir, `${agentName}.toml`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n // Write the full agent identity as markdown for the Codex harness to read at runtime.\n // The harness combines this with the session's dynamic content (resources, context)\n // and passes the result via model_instructions_file.\n const agentMdPath = join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`);\n writeAgent(agentMdPath, instructions, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── oh-my-pi ─��────────────��────────────────────────────────��─────────────────\n// Format: .omp/agents/<name>/ (directory with agent.yaml + SOUL.md + RULES.md)\n// oh-my-pi reads GitAgent directories natively via PI_CODING_AGENT_DIR.\n// The renderer copies/enriches the source directory rather than flattening to .md.\n//\n// Installation → runtime handoff:\n// skaile install (ompRenderer) creates .omp/agents/<name>/ from GitAgent source\n// OmpHarness._start() sets env.PI_CODING_AGENT_DIR = agentDir in the child process\n// omp reads SOUL.md/RULES.md/knowledge/ from that directory natively on startup\n//\n// Note: REPL mode can bypass the install step — agentDir can point directly to the\n// GitAgent source directory, and omp will read it natively via PI_CODING_AGENT_DIR.\n// The rendered .omp/agents/ copy is only needed when the source is not accessible\n// from the project cwd (e.g. different repo, remote workspace).\n\n/**\n * Render a GitAgent to oh-my-pi's `.omp/agents/<name>/` directory format.\n *\n * Writes `agent.yaml` (resolved model/tools/delegation plus the 0.2\n * declaration — `composes` verbatim, `lifecycle`, `io`, `memory`, `triggers`,\n * `capabilities`) and an enriched `SOUL.md` that includes fragments and\n * extensions. omp reads this directory natively via the `PI_CODING_AGENT_DIR`\n * environment variable.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const ompRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n srcDir,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const destDir = join(agentDeployDir, agentName);\n\n // Write agent.yaml with tools resolved\n const agentYaml: Record<string, unknown> = {\n spec_version: manifest.spec_version ?? \"0.2\",\n name: agentName,\n // The version every library gives a file that declares none (`DEFAULT_ASSET_VERSION`).\n version: manifest.version ?? \"0.1.0\",\n description: manifest.description ?? `${agentName} agent`,\n lifecycle,\n };\n // The model: omp takes provider-prefixed full IDs and `@role` selectors, and resolves the\n // family aliases it knows (verified live 2026-09-20 against omp v18.1.10 through\n // teamclaude.postxl.com: `--model anthropic/opus` produced\n // `model_change {\"model\":\"anthropic/claude-opus-5\",\"resolvedModelIsFallback\":false}`).\n // The Claude Code aliases the manifest writes (`sonnet`, `haiku`, `opus`, `inherit`) name no\n // model of an omp deployment on another provider, so they are left out and omp starts the agent\n // on its own default. Any other selector is passed through verbatim: it is not checked here, and\n // not coerced by `normalizeAnthropicModel`, which would substitute a different model on any\n // provider but Anthropic (see `resolveManifestModel` in `@skaile/workspaces/bridge`).\n const model = harnessModel(manifest.model);\n if (model) agentYaml.model = model;\n if (manifest.tools) agentYaml.tools = manifest.tools;\n if (manifest.delegation) agentYaml.delegation = manifest.delegation;\n if (manifest.runtime) agentYaml.runtime = manifest.runtime;\n if (manifest.io) agentYaml.io = manifest.io;\n if (manifest.memory) agentYaml.memory = manifest.memory;\n if (manifest.triggers?.length) agentYaml.triggers = manifest.triggers;\n if (manifest.capabilities?.length) agentYaml.capabilities = manifest.capabilities;\n if (manifest.composes?.length) {\n agentYaml.composes = bundleLocalComposes(\n manifest.composes,\n srcDir,\n destDir,\n workspaceRoot,\n changed,\n warnings,\n );\n }\n if (manifest.tags?.length) agentYaml.tags = manifest.tags;\n if (manifest.metadata) agentYaml.metadata = manifest.metadata;\n\n writeAgent(join(destDir, \"agent.yaml\"), stringifyYaml(agentYaml), workspaceRoot, [], changed);\n\n // Write SOUL.md (enriched with fragments and extensions, like other renderers)\n const enrichedSoul = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n writeAgent(join(destDir, \"SOUL.md\"), enrichedSoul, workspaceRoot, [], changed);\n\n // omp lists the agents it can spawn from flat `.omp/agents/<name>.md` files only (verified live\n // against omp 18.12.5: a `<name>/agent.yaml` directory is not listed, a flat file is), so the\n // directory above carries the full GitAgent package and this file is what omp loads.\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n if (manifest.tools?.allowed?.length) frontmatter.tools = manifest.tools.allowed.join(\", \");\n const selector = model?.preferred;\n if (selector) frontmatter.model = selector;\n writeAgent(\n join(agentDeployDir, `${agentName}.md`),\n `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${enrichedSoul}`,\n workspaceRoot,\n created,\n changed,\n );\n\n created.push(relative(workspaceRoot, destDir));\n return { created, changed, warnings };\n};\n\n// ── Renderer registry ──────────────────────────────���──────────────────────────\n\nexport type Log = (msg: string) => void;\nconst noop: Log = () => {};\n\n/**\n * Render an agent to framework-native format via the renderer registry.\n *\n * Shared by both the simple deploy path (`deployAsset`) and the enriched scaffold path (agents layer).\n *\n * @param input - Full render input including manifest, SOUL/RULES text, and resolved refs.\n * @param harnessTarget - Agent framework ID to look up in {@link AGENT_RENDERERS}.\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function renderAgentToFramework(\n input: AgentRenderInput,\n harnessTarget: string,\n log: Log = noop,\n): AgentRenderResult {\n const renderer = AGENT_RENDERERS[harnessTarget];\n if (!renderer) {\n return {\n created: [],\n changed: [],\n warnings: [`No renderer for framework \"${harnessTarget}\"`],\n };\n }\n const result = renderer(input);\n for (const c of result.created) log(` rendered agent: ${c}`);\n for (const w of result.warnings) log(` warn: ${w}`);\n return result;\n}\n\n/**\n * Registry mapping framework IDs to their {@link AgentRenderer} functions.\n *\n * Only harnesses with a full bridge harness are registered. Add new entries\n * when a bridge harness is implemented in `workspaces/bridge/src/harnesses/`.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const AGENT_RENDERERS: Record<string, AgentRenderer> = {\n \"claude-code\": claudeCodeRenderer,\n omp: ompRenderer,\n codex: codexRenderer,\n};\n\n/**\n * Returns `true` if the given harness target supports file-based sub-agent installation.\n *\n * @param harnessTarget - Agent framework ID to check.\n * @returns `true` when `harnessTarget` has a registered entry in {@link AGENT_RENDERERS}.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function harnessTargetSupportsAgents(harnessTarget: string): boolean {\n return harnessTarget in AGENT_RENDERERS;\n}\n\n/**\n * The files the renderer of `harnessTarget` writes for the agent `agentName` into the agent deploy\n * directory `agentDeployDir` (`.claude/agents`, `.codex/agents`, `.omp/agents`): what `add\n * --dry-run` lists (p1621). Files a `composes:` of local refs adds to omp are not listed. Empty\n * for a harness target without an agent renderer.\n */\nexport function agentRenderFiles(\n harnessTarget: string,\n agentDeployDir: string,\n agentName: string,\n): string[] {\n switch (harnessTarget) {\n case \"claude-code\":\n return [join(agentDeployDir, `${agentName}.md`)];\n case \"codex\":\n return [\n join(agentDeployDir, `${agentName}.toml`),\n join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`),\n ];\n case \"omp\":\n return [\n join(agentDeployDir, agentName, \"agent.yaml\"),\n join(agentDeployDir, agentName, \"SOUL.md\"),\n join(agentDeployDir, `${agentName}.md`),\n ];\n default:\n return [];\n }\n}\n"]}