@skaile/workspaces 6.4.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/README.md +4 -0
  3. package/dist/ai-sdk.js +55 -25
  4. package/dist/ai-sdk.js.map +1 -1
  5. package/dist/app-sdk/index.js +1 -1
  6. package/dist/{asset-feeds-UJSYGKCX.js → asset-feeds-WQ6YQPHV.js} +22 -22
  7. package/dist/{asset-feeds-UJSYGKCX.js.map → asset-feeds-WQ6YQPHV.js.map} +1 -1
  8. package/dist/asset-manager/catalog-deployer.js +8 -8
  9. package/dist/asset-manager/index.js +14 -14
  10. package/dist/asset-manager/installer.js +10 -10
  11. package/dist/asset-manager/renderers.js +9 -9
  12. package/dist/asset-manager/src/index.d.ts +114 -12
  13. package/dist/asset-manager/src/index.d.ts.map +1 -1
  14. package/dist/asset-manager/src/installer.d.ts +6 -0
  15. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  16. package/dist/bridge/harnesses/claude-sdk.js +24 -19
  17. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  18. package/dist/bridge/harnesses/codex.js +38 -36
  19. package/dist/bridge/harnesses/codex.js.map +1 -1
  20. package/dist/bridge/harnesses/continue.js +12 -13
  21. package/dist/bridge/harnesses/continue.js.map +1 -1
  22. package/dist/bridge/harnesses/echo.js +5 -6
  23. package/dist/bridge/harnesses/echo.js.map +1 -1
  24. package/dist/bridge/harnesses/gemini.js +9 -10
  25. package/dist/bridge/harnesses/goose.js +12 -13
  26. package/dist/bridge/harnesses/goose.js.map +1 -1
  27. package/dist/bridge/harnesses/omp.js +17 -12
  28. package/dist/bridge/harnesses/omp.js.map +1 -1
  29. package/dist/bridge/harnesses/opencode.js +12 -13
  30. package/dist/bridge/harnesses/opencode.js.map +1 -1
  31. package/dist/bridge/harnesses/qwen.js +9 -10
  32. package/dist/bridge/harnesses/qwen.js.map +1 -1
  33. package/dist/bridge/index.js +20 -21
  34. package/dist/bridge/src/ai-sdk.d.ts +0 -2
  35. package/dist/bridge/src/ai-sdk.d.ts.map +1 -1
  36. package/dist/bridge/src/codex/login-fallback.d.ts +39 -0
  37. package/dist/bridge/src/codex/login-fallback.d.ts.map +1 -0
  38. package/dist/bridge/src/error-classifier.d.ts +6 -0
  39. package/dist/bridge/src/error-classifier.d.ts.map +1 -1
  40. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
  41. package/dist/bridge/src/harnesses/codex.d.ts +0 -6
  42. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  43. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  44. package/dist/bridge/src/index.d.ts +1 -0
  45. package/dist/bridge/src/index.d.ts.map +1 -1
  46. package/dist/{chunk-GTMANMBZ.js → chunk-2M3VLKT2.js} +3 -3
  47. package/dist/{chunk-GTMANMBZ.js.map → chunk-2M3VLKT2.js.map} +1 -1
  48. package/dist/{chunk-2WOA3TKK.js → chunk-2TLPC6TQ.js} +34 -19
  49. package/dist/chunk-2TLPC6TQ.js.map +1 -0
  50. package/dist/{chunk-O7KAQQAI.js → chunk-4BFEPZ6J.js} +4 -4
  51. package/dist/{chunk-O7KAQQAI.js.map → chunk-4BFEPZ6J.js.map} +1 -1
  52. package/dist/{chunk-TPQKFX6X.js → chunk-4J7JQX4G.js} +4 -4
  53. package/dist/{chunk-TPQKFX6X.js.map → chunk-4J7JQX4G.js.map} +1 -1
  54. package/dist/{chunk-6OHZUUR7.js → chunk-5DE3DGVR.js} +11 -5
  55. package/dist/chunk-5DE3DGVR.js.map +1 -0
  56. package/dist/{chunk-Q4XWCVFA.js → chunk-5ETYBC2X.js} +8 -8
  57. package/dist/{chunk-Q4XWCVFA.js.map → chunk-5ETYBC2X.js.map} +1 -1
  58. package/dist/{chunk-ZWCGJYR7.js → chunk-5XHQBCB5.js} +3 -3
  59. package/dist/{chunk-ZWCGJYR7.js.map → chunk-5XHQBCB5.js.map} +1 -1
  60. package/dist/{chunk-JSWMRYLM.js → chunk-65UAC3ZR.js} +31 -7
  61. package/dist/chunk-65UAC3ZR.js.map +1 -0
  62. package/dist/{chunk-UBLZALKP.js → chunk-6A6HE5LW.js} +3 -3
  63. package/dist/{chunk-UBLZALKP.js.map → chunk-6A6HE5LW.js.map} +1 -1
  64. package/dist/{chunk-ABVWUM2E.js → chunk-6ARPZHOV.js} +47 -25
  65. package/dist/chunk-6ARPZHOV.js.map +1 -0
  66. package/dist/{chunk-TDKZL5ZC.js → chunk-6RHWTZPT.js} +4 -4
  67. package/dist/{chunk-TDKZL5ZC.js.map → chunk-6RHWTZPT.js.map} +1 -1
  68. package/dist/{chunk-6WQGJF65.js → chunk-6SXSVKQY.js} +88 -17
  69. package/dist/chunk-6SXSVKQY.js.map +1 -0
  70. package/dist/{chunk-YFGXYQW4.js → chunk-7I5PNB2G.js} +3 -3
  71. package/dist/{chunk-YFGXYQW4.js.map → chunk-7I5PNB2G.js.map} +1 -1
  72. package/dist/{serve-preflight-NPWI4MV6.js → chunk-7PVGND4J.js} +30 -61
  73. package/dist/chunk-7PVGND4J.js.map +1 -0
  74. package/dist/{chunk-P7EL7QRD.js → chunk-7SJHSGUV.js} +34 -20
  75. package/dist/chunk-7SJHSGUV.js.map +1 -0
  76. package/dist/{chunk-VSCLUPGZ.js → chunk-AQNW2FET.js} +289 -44
  77. package/dist/chunk-AQNW2FET.js.map +1 -0
  78. package/dist/{chunk-45KLCFQB.js → chunk-B6N653ZG.js} +6 -6
  79. package/dist/{chunk-45KLCFQB.js.map → chunk-B6N653ZG.js.map} +1 -1
  80. package/dist/{chunk-6UP2EDFN.js → chunk-BSMW3PX2.js} +313 -4
  81. package/dist/chunk-BSMW3PX2.js.map +1 -0
  82. package/dist/{chunk-HTGTNN2B.js → chunk-CMXDFTA2.js} +3 -3
  83. package/dist/{chunk-HTGTNN2B.js.map → chunk-CMXDFTA2.js.map} +1 -1
  84. package/dist/{chunk-YJNE4V2M.js → chunk-DI6J2PJB.js} +70 -37
  85. package/dist/chunk-DI6J2PJB.js.map +1 -0
  86. package/dist/{chunk-V4OXHEWY.js → chunk-DS6UUCFG.js} +4 -4
  87. package/dist/{chunk-V4OXHEWY.js.map → chunk-DS6UUCFG.js.map} +1 -1
  88. package/dist/{chunk-U6S5CXKB.js → chunk-E2EC6SAX.js} +4 -4
  89. package/dist/{chunk-U6S5CXKB.js.map → chunk-E2EC6SAX.js.map} +1 -1
  90. package/dist/{chunk-TF5CWJQZ.js → chunk-EPXZQIC6.js} +23 -80
  91. package/dist/chunk-EPXZQIC6.js.map +1 -0
  92. package/dist/{chunk-6X3GDPCB.js → chunk-F4CZQD3T.js} +3 -4
  93. package/dist/chunk-F4CZQD3T.js.map +1 -0
  94. package/dist/{chunk-VZU67OKK.js → chunk-G5SYFFMD.js} +2 -2
  95. package/dist/{chunk-VZU67OKK.js.map → chunk-G5SYFFMD.js.map} +1 -1
  96. package/dist/{chunk-VV2DJT4I.js → chunk-GNUA7XT2.js} +4 -3
  97. package/dist/chunk-GNUA7XT2.js.map +1 -0
  98. package/dist/{chunk-E237FGGX.js → chunk-GTAHU4N4.js} +4 -4
  99. package/dist/{chunk-E237FGGX.js.map → chunk-GTAHU4N4.js.map} +1 -1
  100. package/dist/{chunk-SISUT7VR.js → chunk-GTGWRKMJ.js} +7 -7
  101. package/dist/{chunk-SISUT7VR.js.map → chunk-GTGWRKMJ.js.map} +1 -1
  102. package/dist/{chunk-BX7PSWJA.js → chunk-HGZN6JLP.js} +4 -4
  103. package/dist/{chunk-BX7PSWJA.js.map → chunk-HGZN6JLP.js.map} +1 -1
  104. package/dist/{chunk-L45IHRDH.js → chunk-HQAPUPBE.js} +3 -3
  105. package/dist/{chunk-L45IHRDH.js.map → chunk-HQAPUPBE.js.map} +1 -1
  106. package/dist/{chunk-L4OYPFLB.js → chunk-I5IF3JCG.js} +4 -4
  107. package/dist/{chunk-L4OYPFLB.js.map → chunk-I5IF3JCG.js.map} +1 -1
  108. package/dist/{chunk-IYZAJ2J2.js → chunk-J262X4JU.js} +36 -36
  109. package/dist/chunk-J262X4JU.js.map +1 -0
  110. package/dist/{chunk-WENTJ5KP.js → chunk-J4WKNJHO.js} +6 -6
  111. package/dist/{chunk-WENTJ5KP.js.map → chunk-J4WKNJHO.js.map} +1 -1
  112. package/dist/{chunk-3ENE6ZOF.js → chunk-JIQUF3X2.js} +9 -8
  113. package/dist/chunk-JIQUF3X2.js.map +1 -0
  114. package/dist/{chunk-TGB4E5Z6.js → chunk-JRVQV7WC.js} +414 -95
  115. package/dist/chunk-JRVQV7WC.js.map +1 -0
  116. package/dist/{chunk-BOS7P2Y4.js → chunk-KSH5CFQS.js} +3 -3
  117. package/dist/{chunk-BOS7P2Y4.js.map → chunk-KSH5CFQS.js.map} +1 -1
  118. package/dist/{chunk-UUKCPPTQ.js → chunk-KSUT5KAE.js} +3 -3
  119. package/dist/{chunk-UUKCPPTQ.js.map → chunk-KSUT5KAE.js.map} +1 -1
  120. package/dist/{chunk-DF5WJC3Q.js → chunk-LBJ4M5J2.js} +4 -4
  121. package/dist/{chunk-DF5WJC3Q.js.map → chunk-LBJ4M5J2.js.map} +1 -1
  122. package/dist/{chunk-GBXQFJ4G.js → chunk-MMOWIRHP.js} +310 -175
  123. package/dist/chunk-MMOWIRHP.js.map +1 -0
  124. package/dist/{chunk-G63KOHFS.js → chunk-MXI3XWV6.js} +4 -4
  125. package/dist/{chunk-G63KOHFS.js.map → chunk-MXI3XWV6.js.map} +1 -1
  126. package/dist/{chunk-ACBL7X62.js → chunk-N2PBAXAA.js} +3 -3
  127. package/dist/{chunk-ACBL7X62.js.map → chunk-N2PBAXAA.js.map} +1 -1
  128. package/dist/{chunk-5NHBLKKU.js → chunk-O7QZI6MQ.js} +3 -3
  129. package/dist/{chunk-5NHBLKKU.js.map → chunk-O7QZI6MQ.js.map} +1 -1
  130. package/dist/{chunk-U3SXCVR7.js → chunk-OY22B7E2.js} +4 -4
  131. package/dist/{chunk-U3SXCVR7.js.map → chunk-OY22B7E2.js.map} +1 -1
  132. package/dist/{chunk-C7TQARGC.js → chunk-PTJTOPE5.js} +3 -3
  133. package/dist/{chunk-C7TQARGC.js.map → chunk-PTJTOPE5.js.map} +1 -1
  134. package/dist/{chunk-HSF665NV.js → chunk-RAU5QPI6.js} +5 -5
  135. package/dist/{chunk-HSF665NV.js.map → chunk-RAU5QPI6.js.map} +1 -1
  136. package/dist/{chunk-RKI35EAN.js → chunk-RHCEX2EV.js} +3 -3
  137. package/dist/{chunk-RKI35EAN.js.map → chunk-RHCEX2EV.js.map} +1 -1
  138. package/dist/{chunk-76WSWPOB.js → chunk-SCRYXAHH.js} +15 -6
  139. package/dist/chunk-SCRYXAHH.js.map +1 -0
  140. package/dist/{chunk-DKXNKFKP.js → chunk-SGI5MRKP.js} +75 -3
  141. package/dist/chunk-SGI5MRKP.js.map +1 -0
  142. package/dist/{chunk-24D7IW5O.js → chunk-SHTXMERQ.js} +7 -8
  143. package/dist/chunk-SHTXMERQ.js.map +1 -0
  144. package/dist/{chunk-IZV3HDVG.js → chunk-SZKCE7EC.js} +5 -5
  145. package/dist/{chunk-IZV3HDVG.js.map → chunk-SZKCE7EC.js.map} +1 -1
  146. package/dist/{chunk-UAOHR6AL.js → chunk-TCH5UDKT.js} +4 -4
  147. package/dist/{chunk-UAOHR6AL.js.map → chunk-TCH5UDKT.js.map} +1 -1
  148. package/dist/{chunk-UVTN4O7N.js → chunk-TUFNY6OD.js} +33 -10
  149. package/dist/chunk-TUFNY6OD.js.map +1 -0
  150. package/dist/{chunk-PTBX55QF.js → chunk-U3UDOX6I.js} +4 -4
  151. package/dist/{chunk-PTBX55QF.js.map → chunk-U3UDOX6I.js.map} +1 -1
  152. package/dist/{chunk-BUU2DLPC.js → chunk-USSP43U3.js} +3 -3
  153. package/dist/{chunk-BUU2DLPC.js.map → chunk-USSP43U3.js.map} +1 -1
  154. package/dist/{chunk-IZQOO6MN.js → chunk-V5KG6CCV.js} +2 -2
  155. package/dist/{chunk-IZQOO6MN.js.map → chunk-V5KG6CCV.js.map} +1 -1
  156. package/dist/{chunk-CK3CJSRY.js → chunk-VJRL6ZK6.js} +4 -4
  157. package/dist/{chunk-CK3CJSRY.js.map → chunk-VJRL6ZK6.js.map} +1 -1
  158. package/dist/{chunk-76FLBODK.js → chunk-VT6G5AJV.js} +10 -7
  159. package/dist/chunk-VT6G5AJV.js.map +1 -0
  160. package/dist/{chunk-EXRQKOY6.js → chunk-VXYZ5M7Z.js} +83 -34
  161. package/dist/chunk-VXYZ5M7Z.js.map +1 -0
  162. package/dist/{chunk-QSIFEHSN.js → chunk-WW5NAU6N.js} +3 -3
  163. package/dist/{chunk-QSIFEHSN.js.map → chunk-WW5NAU6N.js.map} +1 -1
  164. package/dist/chunk-XD3RYAMR.js +83 -0
  165. package/dist/chunk-XD3RYAMR.js.map +1 -0
  166. package/dist/{chunk-HXZ3FQQN.js → chunk-XYCYGN3Q.js} +82 -50
  167. package/dist/chunk-XYCYGN3Q.js.map +1 -0
  168. package/dist/{chunk-5T3DTK7A.js → chunk-YN6N3RBM.js} +9 -10
  169. package/dist/chunk-YN6N3RBM.js.map +1 -0
  170. package/dist/{chunk-DCJ4BION.js → chunk-Z4FERR4U.js} +2 -2
  171. package/dist/{chunk-DCJ4BION.js.map → chunk-Z4FERR4U.js.map} +1 -1
  172. package/dist/{claude-code-UBT4ZME7.js → claude-code-LZH7Y4Y5.js} +5 -5
  173. package/dist/{claude-code-UBT4ZME7.js.map → claude-code-LZH7Y4Y5.js.map} +1 -1
  174. package/dist/cli/index.js +308 -162
  175. package/dist/cli/index.js.map +1 -1
  176. package/dist/cli/src/commands/cache.d.ts.map +1 -1
  177. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  178. package/dist/cli/src/commands/config.d.ts.map +1 -1
  179. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  180. package/dist/cli/src/commands/deploy.d.ts.map +1 -1
  181. package/dist/cli/src/commands/harness.d.ts +5 -4
  182. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  183. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  184. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  185. package/dist/cli/src/commands/library-index.d.ts +6 -0
  186. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  187. package/dist/cli/src/commands/migrate-files.d.ts +3 -6
  188. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  189. package/dist/cli/src/commands/migrate-harness.d.ts +4 -3
  190. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
  191. package/dist/cli/src/commands/migrate.d.ts +2 -2
  192. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  193. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  194. package/dist/cli/src/commands/project.d.ts +7 -1
  195. package/dist/cli/src/commands/project.d.ts.map +1 -1
  196. package/dist/cli/src/commands/run.d.ts.map +1 -1
  197. package/dist/cli/src/commands/serve-preflight.d.ts +21 -0
  198. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  199. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  200. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  201. package/dist/cli/src/commands/source.d.ts +8 -0
  202. package/dist/cli/src/commands/source.d.ts.map +1 -1
  203. package/dist/cli/src/commands/update.d.ts.map +1 -1
  204. package/dist/cli/src/commands/validate-instances.d.ts +6 -0
  205. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  206. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  207. package/dist/cli/src/commands/verify.d.ts.map +1 -1
  208. package/dist/cli/src/config-checks.d.ts +8 -0
  209. package/dist/cli/src/config-checks.d.ts.map +1 -1
  210. package/dist/cli/src/ensure-sources.d.ts.map +1 -1
  211. package/dist/cli/src/helpers.d.ts +3 -2
  212. package/dist/cli/src/helpers.d.ts.map +1 -1
  213. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  214. package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -1
  215. package/dist/cli/src/plugin-store/spec.d.ts +1 -0
  216. package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
  217. package/dist/cli/src/skill-checks.d.ts +2 -0
  218. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  219. package/dist/connectors/config.js +5 -5
  220. package/dist/connectors/index.js +24 -25
  221. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  222. package/dist/connectors/src/index.d.ts +2 -2
  223. package/dist/connectors/src/index.d.ts.map +1 -1
  224. package/dist/connectors/src/managed-gitconfig.d.ts +22 -0
  225. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  226. package/dist/connectors/src/mount-ledger.d.ts.map +1 -1
  227. package/dist/connectors/src/npm-installer.d.ts +11 -3
  228. package/dist/connectors/src/npm-installer.d.ts.map +1 -1
  229. package/dist/connectors-HU5MHSUJ.js +49 -0
  230. package/dist/{connectors-4WH32NK2.js.map → connectors-HU5MHSUJ.js.map} +1 -1
  231. package/dist/connectors-shared/index.js +2 -2
  232. package/dist/core/index.js +7 -7
  233. package/dist/core/logging.js +1 -1
  234. package/dist/core/manifest.js +2 -2
  235. package/dist/core/models.js +1 -1
  236. package/dist/core/publish-manifest.js +3 -3
  237. package/dist/core/ref.js +1 -1
  238. package/dist/core/runtime-assets.js +5 -5
  239. package/dist/core/src/agent-instances.d.ts +6 -0
  240. package/dist/core/src/agent-instances.d.ts.map +1 -1
  241. package/dist/core/src/config-key-diagnostics.d.ts +2 -1
  242. package/dist/core/src/config-key-diagnostics.d.ts.map +1 -1
  243. package/dist/core/src/index.d.ts +4 -4
  244. package/dist/core/src/index.d.ts.map +1 -1
  245. package/dist/core/src/lock.d.ts +20 -1
  246. package/dist/core/src/lock.d.ts.map +1 -1
  247. package/dist/core/src/logging/index.d.ts +1 -0
  248. package/dist/core/src/logging/index.d.ts.map +1 -1
  249. package/dist/core/src/logging/log-safe-text.d.ts +20 -0
  250. package/dist/core/src/logging/log-safe-text.d.ts.map +1 -0
  251. package/dist/core/src/manifest-yaml-editor.d.ts +4 -1
  252. package/dist/core/src/manifest-yaml-editor.d.ts.map +1 -1
  253. package/dist/core/src/manifest.d.ts.map +1 -1
  254. package/dist/core/src/models.d.ts +10 -0
  255. package/dist/core/src/models.d.ts.map +1 -1
  256. package/dist/core/src/repo-manager.d.ts +11 -0
  257. package/dist/core/src/repo-manager.d.ts.map +1 -1
  258. package/dist/core/src/runtime-assets.d.ts +12 -1
  259. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  260. package/dist/core/src/walker.d.ts +3 -0
  261. package/dist/core/src/walker.d.ts.map +1 -1
  262. package/dist/core/src/workspace-config.d.ts +10 -2
  263. package/dist/core/src/workspace-config.d.ts.map +1 -1
  264. package/dist/core/workspace-config.js +4 -4
  265. package/dist/deploy/index.js +7 -7
  266. package/dist/discovery/index.js +5 -5
  267. package/dist/{ensure-sources-UC2RBYMP.js → ensure-sources-CAMWJTMR.js} +32 -32
  268. package/dist/ensure-sources-CAMWJTMR.js.map +1 -0
  269. package/dist/factory-assets/connectors/box.js +24 -25
  270. package/dist/factory-assets/connectors/deploy.js +24 -25
  271. package/dist/factory-assets/connectors/devserver.js +24 -25
  272. package/dist/factory-assets/connectors/flow/adapter.js +24 -25
  273. package/dist/factory-assets/connectors/flow/engine.js +8 -8
  274. package/dist/factory-assets/connectors/flow/run-flow.js +26 -27
  275. package/dist/factory-assets/connectors/flow.js +24 -25
  276. package/dist/factory-assets/connectors/git.js +24 -25
  277. package/dist/factory-assets/connectors/gmail.js +24 -25
  278. package/dist/factory-assets/connectors/googledrive.js +24 -25
  279. package/dist/factory-assets/connectors/local.js +24 -25
  280. package/dist/factory-assets/connectors/mattermost.js +24 -25
  281. package/dist/factory-assets/connectors/memory.js +24 -25
  282. package/dist/factory-assets/connectors/minio.js +24 -25
  283. package/dist/factory-assets/connectors/postgres.js +24 -25
  284. package/dist/factory-assets/connectors/s3.js +24 -25
  285. package/dist/factory-assets/connectors/sharepoint.js +24 -25
  286. package/dist/factory-assets/connectors/sqlite.js +24 -25
  287. package/dist/factory-assets/connectors/static-server.js +24 -25
  288. package/dist/factory-assets/connectors/tunnel.js +24 -25
  289. package/dist/factory-assets/connectors/webdav.js +24 -25
  290. package/dist/factory-assets/connectors/xstate-store.js +24 -25
  291. package/dist/factory-assets/connectors/xstate.js +24 -25
  292. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +2 -1
  293. package/dist/{flows-LYTKNGKE.js → flows-GVOVQGQW.js} +12 -12
  294. package/dist/{flows-LYTKNGKE.js.map → flows-GVOVQGQW.js.map} +1 -1
  295. package/dist/{helpers-SSSKT5XK.js → helpers-WMCCODAV.js} +29 -30
  296. package/dist/{helpers-SSSKT5XK.js.map → helpers-WMCCODAV.js.map} +1 -1
  297. package/dist/library/index.js +11 -11
  298. package/dist/library/install.js +4 -4
  299. package/dist/library/src/manifest-writer.d.ts +9 -0
  300. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  301. package/dist/library/src/remote/remote-catalog-source.d.ts +9 -0
  302. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  303. package/dist/library/src/remote/rest-catalog-source.d.ts +1 -0
  304. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  305. package/dist/{library-publish-GQMNTAKK.js → library-publish-UQQMHTND.js} +55 -55
  306. package/dist/{library-publish-GQMNTAKK.js.map → library-publish-UQQMHTND.js.map} +1 -1
  307. package/dist/model-endpoint/index.js +10 -11
  308. package/dist/open-library-OJ4HT2X4.js +57 -0
  309. package/dist/{open-library-XGUCUJYE.js.map → open-library-OJ4HT2X4.js.map} +1 -1
  310. package/dist/open-registry-LWGIOJDK.js +32 -0
  311. package/dist/{open-registry-DIFEPDF6.js.map → open-registry-LWGIOJDK.js.map} +1 -1
  312. package/dist/paths-FR2752HV.js +22 -0
  313. package/dist/{paths-G4GFJLE2.js.map → paths-FR2752HV.js.map} +1 -1
  314. package/dist/{plugin-store-BBLDFD3L.js → plugin-store-IALJUBN2.js} +10 -10
  315. package/dist/{plugin-store-BBLDFD3L.js.map → plugin-store-IALJUBN2.js.map} +1 -1
  316. package/dist/project-UQFCYHYS.js +88 -0
  317. package/dist/{project-LB745WVZ.js.map → project-UQFCYHYS.js.map} +1 -1
  318. package/dist/resolver/index.js +8 -8
  319. package/dist/runner/index.js +40 -41
  320. package/dist/runner/src/composition/resolve-instance.d.ts.map +1 -1
  321. package/dist/runner/src/composition/resolve.d.ts +6 -0
  322. package/dist/runner/src/composition/resolve.d.ts.map +1 -1
  323. package/dist/runner/src/credential-notice.d.ts +3 -2
  324. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  325. package/dist/runner/src/external-mcp.d.ts +22 -0
  326. package/dist/runner/src/external-mcp.d.ts.map +1 -1
  327. package/dist/runner/src/mcp-tools-snapshot.d.ts +13 -0
  328. package/dist/runner/src/mcp-tools-snapshot.d.ts.map +1 -0
  329. package/dist/runner/src/resources.d.ts +14 -0
  330. package/dist/runner/src/resources.d.ts.map +1 -1
  331. package/dist/runner/src/serve.d.ts.map +1 -1
  332. package/dist/sdk/asset-manager.js +14 -14
  333. package/dist/sdk/bridge.js +20 -21
  334. package/dist/sdk/core.js +7 -7
  335. package/dist/sdk/flow.js +8 -8
  336. package/dist/sdk/index.js +40 -41
  337. package/dist/sdk/index.js.map +1 -1
  338. package/dist/sdk/resolver.js +8 -8
  339. package/dist/sdk/runner.js +40 -41
  340. package/dist/sdk/session.js +2 -2
  341. package/dist/sdk/transport/ws/server.js +8 -8
  342. package/dist/sdk/transport/ws.js +8 -8
  343. package/dist/sdk/transport.js +8 -8
  344. package/dist/sdk/types.js +1 -1
  345. package/dist/serve-preflight-TYEKHC32.js +56 -0
  346. package/dist/serve-preflight-TYEKHC32.js.map +1 -0
  347. package/dist/session/index.js +2 -2
  348. package/dist/{setup-X6ZYH2MW.js → setup-4JV2IMCB.js} +30 -31
  349. package/dist/setup-4JV2IMCB.js.map +1 -0
  350. package/dist/{skills-62PXDBPJ.js → skills-6QTKFMLW.js} +13 -13
  351. package/dist/{skills-62PXDBPJ.js.map → skills-6QTKFMLW.js.map} +1 -1
  352. package/dist/source-XYMMJVKR.js +86 -0
  353. package/dist/{source-LAYCTRHP.js.map → source-XYMMJVKR.js.map} +1 -1
  354. package/dist/{source-manifest-publish-3S6PJ25W.js → source-manifest-publish-SZFGGKB4.js} +52 -53
  355. package/dist/source-manifest-publish-SZFGGKB4.js.map +1 -0
  356. package/dist/transport/index.js +8 -8
  357. package/dist/transport/ws/server.js +8 -8
  358. package/dist/transport/ws.js +8 -8
  359. package/dist/tui/index.js +40 -41
  360. package/dist/tui/index.js.map +1 -1
  361. package/dist/types/index.js +1 -1
  362. package/dist/types/manifests.js +1 -1
  363. package/dist/types/src/manifests/agent.d.ts +2 -2
  364. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  365. package/dist/types/src/version.d.ts +8 -8
  366. package/dist/workspace-plugin/adapters/mcp.js +31 -32
  367. package/dist/workspace-plugin/adapters/omp.js +14 -14
  368. package/dist/workspace-plugin/index.js +2 -2
  369. package/package.json +1 -1
  370. package/dist/chunk-24D7IW5O.js.map +0 -1
  371. package/dist/chunk-2WOA3TKK.js.map +0 -1
  372. package/dist/chunk-3ENE6ZOF.js.map +0 -1
  373. package/dist/chunk-5T3DTK7A.js.map +0 -1
  374. package/dist/chunk-6OHZUUR7.js.map +0 -1
  375. package/dist/chunk-6UP2EDFN.js.map +0 -1
  376. package/dist/chunk-6WQGJF65.js.map +0 -1
  377. package/dist/chunk-6X3GDPCB.js.map +0 -1
  378. package/dist/chunk-76FLBODK.js.map +0 -1
  379. package/dist/chunk-76WSWPOB.js.map +0 -1
  380. package/dist/chunk-ABVWUM2E.js.map +0 -1
  381. package/dist/chunk-DKXNKFKP.js.map +0 -1
  382. package/dist/chunk-EXRQKOY6.js.map +0 -1
  383. package/dist/chunk-GBXQFJ4G.js.map +0 -1
  384. package/dist/chunk-HXZ3FQQN.js.map +0 -1
  385. package/dist/chunk-IYZAJ2J2.js.map +0 -1
  386. package/dist/chunk-JSWMRYLM.js.map +0 -1
  387. package/dist/chunk-P7EL7QRD.js.map +0 -1
  388. package/dist/chunk-QJQQNBVT.js +0 -315
  389. package/dist/chunk-QJQQNBVT.js.map +0 -1
  390. package/dist/chunk-TF5CWJQZ.js.map +0 -1
  391. package/dist/chunk-TGB4E5Z6.js.map +0 -1
  392. package/dist/chunk-UVTN4O7N.js.map +0 -1
  393. package/dist/chunk-VSCLUPGZ.js.map +0 -1
  394. package/dist/chunk-VV2DJT4I.js.map +0 -1
  395. package/dist/chunk-YJNE4V2M.js.map +0 -1
  396. package/dist/connectors-4WH32NK2.js +0 -50
  397. package/dist/ensure-sources-UC2RBYMP.js.map +0 -1
  398. package/dist/open-library-XGUCUJYE.js +0 -58
  399. package/dist/open-registry-DIFEPDF6.js +0 -32
  400. package/dist/paths-G4GFJLE2.js +0 -22
  401. package/dist/project-LB745WVZ.js +0 -88
  402. package/dist/serve-preflight-NPWI4MV6.js.map +0 -1
  403. package/dist/setup-X6ZYH2MW.js.map +0 -1
  404. package/dist/source-LAYCTRHP.js +0 -87
  405. package/dist/source-manifest-publish-3S6PJ25W.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../bridge/src/provider-materialize/env-harnesses.ts"],"names":[],"mappings":"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","file":"chunk-6X3GDPCB.js","sourcesContent":["/**\n * Registry adapter for the **env-shaped CLI harnesses** — Gemini, Qwen, OpenCode,\n * Goose and Continue (§2.3).\n *\n * These harnesses take their endpoint from the environment rather than from a\n * config file, so the adapter's job is three things: resolve which registry\n * entry the session's model selector names, refuse at start when that entry\n * speaks a wire surface the harness cannot, and hand the harness the\n * provider-side model id it must put on the command line.\n *\n * Two pluralities meet here (`BUILTIN_HARNESS_CATALOG.providerPlurality`):\n *\n * - `single` — Gemini and Qwen address exactly one endpoint. The bound entry\n * supplies the credential *and* the base URL, and a surface mismatch is\n * fatal: a Gemini CLI pointed at an `openai-completions` endpoint cannot\n * work, and failing at start names the surface instead of leaving the user\n * with an opaque error mid-turn.\n * - `credentials-n` — OpenCode, Goose and Continue accept every enabled\n * entry's credential at once and select one active model. The credential\n * fan-out is `registryCredentialEnv`; the active model is this module's\n * `<provider>/<model>` binding.\n *\n * Writing the per-endpoint config files those three need for *custom*\n * endpoints (`opencode.json`, Goose `custom_providers/*.json`, Continue\n * `config.yaml`) is the file half, and is deliberately not here.\n *\n * @see PROVIDER-CONFIG-PLAN.md §2.3\n */\n\nimport {\n type AIProviderLlmEntry,\n type AIProviderSurface,\n isEntryEnabled,\n type MergedAIProviderRegistry,\n mergeRegistries,\n normalizeEntryBaseUrl,\n parseModelRef,\n registryEntries,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport type { ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig } from \"../types.js\";\nimport { providerCredentialEnvName, registryCredentialEnv } from \"./credential-env.js\";\n\n/**\n * Everything a CLI harness needs to know about this session's AI providers,\n * resolved once from its {@link AgentConfig}.\n */\nexport interface EnvHarnessSession {\n /** The merged registry this session may address. Empty when none was configured. */\n registry: MergedAIProviderRegistry;\n /**\n * Environment `credential.ref` lookups resolve against — the process\n * environment widened with `config.env`, which is where the session\n * boundary delivered every resolved `SKAILE_AIP_<ID>_KEY`.\n */\n lookupEnv: Record<string, string | undefined>;\n /** Model selector: `<providerId>/<modelId>`, a bare id, or `@role`. */\n modelRef?: string;\n /** Roles table an `@role` selector resolves through. */\n roles?: Record<string, string>;\n}\n\n/**\n * Resolve the session's providers once, from its {@link AgentConfig}.\n *\n * `config.env` is folded into `lookupEnv` rather than kept apart: it is part\n * of the session's environment, not an extra, and a credential or\n * `*_BASE_URL` delivered there must be visible exactly as the child will see\n * it.\n */\nexport function resolveEnvHarnessSession(\n config: AgentConfig,\n processEnv: Record<string, string | undefined> = process.env,\n): EnvHarnessSession {\n return {\n registry: config.registry ?? mergeRegistries([]),\n lookupEnv: { ...processEnv, ...config.env },\n ...(config.modelRef ? { modelRef: config.modelRef } : {}),\n ...(config.roles ? { roles: config.roles } : {}),\n };\n}\n\n/** One resolved endpoint + model — everything a harness needs to spawn. */\nexport interface RegistryModelBinding {\n /** Registry id of the selected entry. */\n providerId: string;\n /** The selected entry itself. */\n entry: AIProviderLlmEntry;\n /** Logical model id, after `@role` expansion and before `model_map`. */\n modelId?: string;\n /** Provider-side model id — what goes on the wire / command line. */\n providerModelId?: string;\n /** Wire protocol, from the entry or its preset. */\n surface?: AIProviderSurface;\n /** Resolved endpoint, from the entry, its transport params, or its preset. */\n baseUrl?: string;\n /**\n * The provider name the *harness* knows this endpoint by — a catalog preset\n * id for a stock endpoint, the registry id for anything custom. See\n * {@link harnessProviderName}.\n */\n harnessProviderId: string;\n /** Non-fatal notes from `parseModelRef` (dangling role, disabled provider). */\n warnings: string[];\n}\n\n/** The entry's wire surface: its own, else its preset's. */\nexport function entrySurface(entry: AIProviderLlmEntry): AIProviderSurface | undefined {\n if (entry.surface) return entry.surface;\n return entry.preset ? getProviderPreset(entry.preset)?.surface : undefined;\n}\n\n/**\n * The entry's endpoint: its literal or transport-derived URL, else its\n * preset's literal, in the canonical spelling for its surface\n * (`normalizeEntryBaseUrl`: an `anthropic-messages` endpoint is its host root,\n * so `https://api.anthropic.com/v1` reads as `https://api.anthropic.com`).\n * Transport templates that still carry `{param}` placeholders never come\n * back — `resolveEntryBaseUrl` withholds those, and a preset's template is not\n * a URL.\n *\n * Every adapter reads the endpoint here and only re-spells it for a client\n * that wants something else ({@link versionedAnthropicBaseUrl}).\n */\nexport function entryBaseUrl(entry: AIProviderLlmEntry): string | undefined {\n const resolved =\n resolveEntryBaseUrl(entry) ??\n (entry.preset ? getProviderPreset(entry.preset)?.base_url : undefined);\n return normalizeEntryBaseUrl(resolved, entrySurface(entry));\n}\n\n/**\n * An `anthropic-messages` endpoint spelled for a client that appends only\n * `/messages` — `@ai-sdk/anthropic` (OpenCode) and Continue — rather than\n * `/v1/messages` like the Claude CLI, the Anthropic SDK and Goose. `baseUrl`\n * must already be canonical ({@link entryBaseUrl}); every other surface passes\n * through unchanged.\n */\nexport function versionedAnthropicBaseUrl(\n baseUrl: string,\n surface: AIProviderSurface | undefined,\n): string {\n if (surface !== \"anthropic-messages\") return baseUrl;\n // Append to the path, not the string: a query or fragment stays at the end.\n try {\n const url = new URL(baseUrl);\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/v1`;\n return url.toString();\n } catch {\n return `${baseUrl}/v1`;\n }\n}\n\n/**\n * True when a `credentials-n` harness already knows this endpoint under its\n * own catalog name — the entry names a preset and did not move it somewhere\n * else. Both sides are compared canonically, so `https://api.anthropic.com/v1`\n * is still the `anthropic` preset's endpoint.\n *\n * The one rule both halves of §2.3 read: it decides the name the env half\n * puts on the command line ({@link harnessProviderName}) *and* whether the\n * file half has to describe the endpoint at all. Reading it twice is what\n * keeps `-m <name>/<model>` and the generated provider file talking about the\n * same thing.\n */\nexport function isStockCatalogEndpoint(entry: AIProviderLlmEntry): boolean {\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n if (!preset) return false;\n return entryBaseUrl(entry) === normalizeEntryBaseUrl(preset.base_url, entrySurface(entry));\n}\n\n/**\n * The provider name to give a `credentials-n` harness (`-m <name>/<model>`,\n * `GOOSE_PROVIDER`).\n *\n * A stock catalog endpoint is named by its preset, because that is the name\n * OpenCode's models.dev list and Goose's built-in provider table already use —\n * `prod-claude: {preset: anthropic}` is still Anthropic to them. An entry with\n * an endpoint of its own is named by its registry id: no built-in table knows\n * it, so the id is what its generated provider file is keyed by (the file half\n * of §2.3).\n */\nexport function harnessProviderName(providerId: string, entry: AIProviderLlmEntry): string {\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n if (!preset || !isStockCatalogEndpoint(entry)) return providerId;\n return preset.id;\n}\n\n/**\n * Enabled `llm`/`embed` entries, in registry order. Also the set the file\n * adapters render (`opencode-config.ts`, `goose-custom-providers.ts`,\n * `continue-config-yaml.ts`): the env half and the file half must agree on\n * which entries exist before they can agree on what to call them.\n */\nexport function selectableEntries(\n registry: MergedAIProviderRegistry,\n): Array<[string, AIProviderLlmEntry]> {\n return registryEntries(registry).filter(\n (pair): pair is [string, AIProviderLlmEntry] =>\n (pair[1].kind === \"llm\" || pair[1].kind === \"embed\") && isEntryEnabled(pair[1]),\n );\n}\n\n/**\n * The provider-side model ids an entry declares, as `[logicalId, providerId]`\n * pairs in declaration order: every `model_map` entry, plus every\n * `capabilities` key the map does not rename.\n */\nexport function entryModelIds(entry: AIProviderLlmEntry): Array<[string, string]> {\n const logicalIds = [\n ...Object.keys(entry.model_map ?? {}),\n ...Object.keys(entry.capabilities ?? {}).filter((id) => !(id in (entry.model_map ?? {}))),\n ];\n return logicalIds.map((id) => [id, entry.model_map?.[id] ?? id]);\n}\n\nfunction describeBinding(\n providerId: string,\n entry: AIProviderLlmEntry,\n modelId: string | undefined,\n providerModelId: string | undefined,\n warnings: string[],\n): RegistryModelBinding {\n const surface = entrySurface(entry);\n const baseUrl = entryBaseUrl(entry);\n return {\n providerId,\n entry,\n ...(modelId === undefined ? {} : { modelId }),\n ...(providerModelId === undefined ? {} : { providerModelId }),\n ...(surface ? { surface } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n harnessProviderId: harnessProviderName(providerId, entry),\n warnings,\n };\n}\n\n/**\n * Resolve the session's endpoint + model.\n *\n * With no selector the first entry in registry order wins and the harness\n * keeps its own default model — exactly what an absent `model` meant before\n * the registry existed. Returns `undefined` when no entry can serve a model\n * (an empty, fully-disabled or voice-only registry).\n */\nexport function resolveRegistryBinding(\n session: EnvHarnessSession,\n): RegistryModelBinding | undefined {\n const entries = selectableEntries(session.registry);\n if (entries.length === 0) return undefined;\n\n const selector = session.modelRef?.trim();\n if (!selector) {\n const [providerId, entry] = entries[0];\n return describeBinding(providerId, entry, undefined, undefined, []);\n }\n\n // A selector that is exactly an entry id names the endpoint and nothing\n // else: the harness keeps its own default model. `parseModelRef` would read\n // it as a bare *model* id and fall back to registry order.\n const named = entries.find(([id]) => id === selector);\n if (named) return describeBinding(named[0], named[1], undefined, undefined, []);\n\n const resolved = parseModelRef(selector, session.registry, session.roles);\n if (!resolved) return undefined;\n const match = entries.find(([id]) => id === resolved.providerId);\n if (!match) return undefined;\n return describeBinding(\n match[0],\n match[1],\n resolved.modelId,\n resolved.providerModelId,\n resolved.warnings,\n );\n}\n\n/**\n * Every credential a `credentials-n` harness may use: one variable per\n * enabled registry entry. OpenCode, Goose and Continue have always received\n * *all* of them, not just the selected endpoint's, because they route across\n * providers inside a single session.\n */\nexport function credentialsForEveryProvider(session: EnvHarnessSession): Record<string, string> {\n return registryCredentialEnv(session.registry, { env: session.lookupEnv });\n}\n\n/**\n * Throw when the bound entry speaks a wire surface this harness cannot.\n *\n * The message names the offending surface and lists the ones the harness does\n * speak (`BUILTIN_HARNESS_CATALOG[harnessId].surfaces`). An entry that declares\n * no surface and names no preset is not judged — there is nothing to compare.\n */\nexport function assertHarnessSpeaksSurface(\n harnessId: string,\n productName: string,\n binding: RegistryModelBinding,\n): void {\n const supported = BUILTIN_HARNESS_CATALOG[harnessId]?.surfaces;\n if (!supported || supported.length === 0) return;\n const surface = binding.surface;\n if (!surface || supported.includes(surface)) return;\n throw new Error(\n `${productName} cannot speak the '${surface}' surface of AI provider entry ` +\n `'${binding.providerId}'. ${productName} speaks: ${supported.join(\", \")}. ` +\n `Point this session's model at an entry with one of those surfaces, ` +\n `or run it on a harness that speaks '${surface}'.`,\n );\n}\n\n/**\n * The models a `credentials-n` harness can be pointed at, straight from the\n * registry: every enabled entry's mapped ids, namespaced the way the harness\n * takes them (`-m <provider>/<model>`).\n *\n * These harnesses have no model-list endpoint of their own — OpenCode reads\n * models.dev, Goose and Continue read their config — so the registry is the\n * only list that describes *this* session's reachable models, and it needs no\n * network call to produce.\n */\nexport function registryModelEntries(session: EnvHarnessSession): ModelEntry[] {\n const out: ModelEntry[] = [];\n const seen = new Set<string>();\n for (const [providerId, entry] of selectableEntries(session.registry)) {\n const harnessId = harnessProviderName(providerId, entry);\n const label = entry.label ?? providerId;\n for (const [logicalId, providerModelId] of entryModelIds(entry)) {\n const id = `${harnessId}/${providerModelId}`;\n if (seen.has(id)) continue;\n seen.add(id);\n out.push({ id, name: `${label} ${logicalId}` });\n }\n }\n return out;\n}\n\n/**\n * Resolve the binding and enforce the surface — what a `single`-plurality\n * harness does at start.\n *\n * The registry is authoritative: pointing the harness at an entry it cannot\n * speak throws rather than silently running somewhere else. `undefined` when\n * the session configured no endpoint at all, which leaves the harness on its\n * own native auth.\n */\nexport function bindSingleProviderEntry(\n harnessId: string,\n productName: string,\n session: EnvHarnessSession,\n): RegistryModelBinding | undefined {\n const binding = resolveRegistryBinding(session);\n if (!binding) return undefined;\n assertHarnessSpeaksSurface(harnessId, productName, binding);\n return binding;\n}\n\n/**\n * The `<provider>/<model>` selector a `credentials-n` harness takes on its\n * command line (`opencode -m`). `undefined` when no model was selected — the\n * harness then uses its own default rather than being handed a bare provider.\n */\nexport function harnessModelSelector(binding: RegistryModelBinding): string | undefined {\n if (!binding.providerModelId) return undefined;\n return `${binding.harnessProviderId}/${binding.providerModelId}`;\n}\n\n/**\n * Continue's model selection is a **role binding**, not a flag: `cn` has no\n * `--model` option (only `--config <slug>`), and its `config.yaml` binds each\n * model to roles (`chat`, `edit`, `apply`, …). This is the binding for the\n * role a headless `cn -p` turn runs as, and the shape its generated\n * `config.yaml` is rendered from.\n *\n * `apiKeyEnv` is a variable *name*: the secret travels in the child\n * environment, never in a rendered config.\n */\nexport interface ContinueRoleBinding {\n /** Continue role this model serves. A headless prompt is a `chat` turn. */\n role: \"chat\";\n /** Registry id of the entry. */\n providerId: string;\n /** Provider name Continue knows the endpoint by. */\n provider: string;\n /** Provider-side model id. */\n model?: string;\n /** Endpoint, when the entry states one, spelled the way Continue's `apiBase` wants it. */\n apiBase?: string;\n /** Env var holding the credential — the name, never the value. */\n apiKeyEnv: string;\n}\n\n/**\n * Map the session's chosen endpoint onto the Continue role a headless turn\n * runs as. `undefined` when the session configured no endpoint — `cn` then\n * runs against whatever its own `config.yaml` / Hub login provides.\n */\nexport function continueRoleBinding(session: EnvHarnessSession): ContinueRoleBinding | undefined {\n const binding = resolveRegistryBinding(session);\n if (!binding) return undefined;\n return {\n role: \"chat\",\n providerId: binding.providerId,\n provider: binding.harnessProviderId,\n ...(binding.providerModelId ? { model: binding.providerModelId } : {}),\n ...(binding.baseUrl\n ? { apiBase: versionedAnthropicBaseUrl(binding.baseUrl, binding.surface) }\n : {}),\n apiKeyEnv: providerCredentialEnvName(binding.providerId),\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../types/src/manifests/_shared.ts","../types/src/manifests/agent-composition.ts","../types/src/manifests/cron.ts","../types/src/manifests/agent.ts","../types/src/manifests/connector.ts","../types/src/manifests/contract.ts","../types/src/manifests/preset.ts","../types/src/manifests/prompt.ts","../types/src/manifests/skill.ts","../types/src/manifests/scaffold-body.ts","../types/src/manifests/mcp-server.ts","../types/src/manifests/persona.ts","../types/src/manifests/ruleset.ts"],"names":["z","z3","z4","z5","z6","z7","z8","z9","z10"],"mappings":"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","file":"chunk-76FLBODK.js","sourcesContent":["/**\n * Shared manifest frontmatter schemas and types.\n * Common across all asset kinds + Preset.\n */\nimport * as z from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Shared metadata sub-schemas\n// ---------------------------------------------------------------------------\n\n/** Artifact dependency (requires/produces/consumes in skill metadata). */\nexport const ArtifactRefSchema = z.object({\n id: z.string().min(1),\n description: z.string().optional(),\n gate: z.enum([\"hard\", \"soft\"]).optional(),\n path: z.string().optional(),\n});\n\n/** File prerequisite for a skill. */\nexport const FilePrerequisiteSchema = z.object({\n path: z.string().min(1),\n gate: z.enum([\"hard\", \"soft\"]).optional(),\n description: z.string().optional(),\n});\n\n/** User input definition (for skill user_inputs or metadata.prerequisites.inputs_*). */\nexport const UserInputSchema = z.looseObject({\n key: z.string().min(1).optional(),\n id: z.string().min(1).optional(),\n label: z.string().optional(),\n prompt: z.string().optional(),\n type: z.string().optional(),\n required: z.boolean().optional(),\n options: z.array(z.string()).optional(),\n values: z.array(z.union([z.string(), z.number()])).optional(),\n default: z\n .union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number()]))])\n .optional(),\n hint: z.string().optional(),\n});\n\n/** Field definition for connectors/mounts. */\nexport const FieldSchema = z.object({\n key: z.string().min(1),\n label: z.string().optional(),\n required: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n type: z.string().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Common metadata block (appears inside metadata: in most manifest kinds)\n// ---------------------------------------------------------------------------\n\nexport const CommonMetadataSchema = z.looseObject({\n version: z.string().optional(),\n author: z.string().optional(),\n tags: z.array(z.string()).optional(),\n stage: z.enum([\"alpha\", \"beta\", \"stable\", \"deprecated\"]).optional(),\n source: z.string().optional(),\n do_not_invoke: z.boolean().optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Common frontmatter fields (top-level, shared across kinds)\n// ---------------------------------------------------------------------------\n\n/**\n * Fields that can appear at the top level of any manifest's frontmatter.\n * Not all are required -- each kind schema intersects with its own specifics.\n */\nexport const BaseFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n\n // Catalog identity (populated at discovery or authoring time)\n publisher: z.string().optional(),\n category: z.string().optional(),\n license: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Validation result type\n// ---------------------------------------------------------------------------\n\nexport interface ManifestValidationSuccess<T> {\n ok: true;\n data: T;\n}\n\nexport interface ManifestValidationFailure {\n ok: false;\n errors: Array<{ path: string; message: string }>;\n}\n\nexport type ManifestValidationResult<T> = ManifestValidationSuccess<T> | ManifestValidationFailure;\n\nexport function validateManifest<T>(\n schema: z.ZodType<T>,\n data: unknown,\n): ManifestValidationResult<T> {\n const result = schema.safeParse(data);\n if (result.success) {\n return { ok: true, data: result.data };\n }\n return {\n ok: false,\n errors: result.error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n };\n}\n","/**\n * Pure helpers over an agent asset's composition surface: the implicit\n * convention-file items, the deprecation diagnostics for 0.1 inputs, and the\n * slot-id conflict check. No I/O — callers pass file listings / parsed YAML.\n */\n\nimport type { AgentComposeItem } from \"./agent.js\";\n\n/** A structured note about an agent manifest; structurally a core `Diagnostic`. */\nexport interface AgentManifestDiagnostic {\n code: string;\n severity: \"error\" | \"warning\" | \"info\";\n message: string;\n /** Dotted/indexed path into the manifest, e.g. `composes[2].id`. */\n path?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Convention files → implicit composition items\n// ---------------------------------------------------------------------------\n\nconst CONVENTION_FILES: ReadonlyArray<{\n file: string;\n kind: string;\n binding: NonNullable<AgentComposeItem[\"binding\"]>;\n}> = [\n { file: \"SOUL.md\", kind: \"soul\", binding: \"inline-snapshot\" },\n { file: \"RULES.md\", kind: \"ruleset\", binding: \"inline-live\" },\n { file: \"DUTIES.md\", kind: \"prompt\", binding: \"inline-live\" },\n];\n\nconst KNOWLEDGE_DIR = \"knowledge\";\n\nconst stripDotSlash = (ref: string): string => ref.replace(/^\\.\\//, \"\").replace(/\\/+$/, \"\");\n\n/**\n * The implicit composition items of an agent directory: `SOUL.md` → `soul`\n * (inline-snapshot), `RULES.md` → `ruleset` (inline-live), `DUTIES.md` →\n * `prompt` (inline-live), `knowledge/` → `knowledge` (discoverable). An item\n * exists only when its file/directory does. Refs are `./`-relative to the\n * agent directory; order is soul, ruleset, prompt, knowledge.\n *\n * @param entries - Paths relative to the agent directory (files; directories\n * may appear as `knowledge` or as the prefix of `knowledge/<file>`).\n */\nexport function conventionItems(entries: Iterable<string>): AgentComposeItem[] {\n const present = [...entries].map(stripDotSlash);\n const items: AgentComposeItem[] = [];\n for (const { file, kind, binding } of CONVENTION_FILES) {\n if (present.includes(file)) items.push({ kind, ref: `./${file}`, binding });\n }\n if (present.some((p) => p === KNOWLEDGE_DIR || p.startsWith(`${KNOWLEDGE_DIR}/`))) {\n items.push({ kind: \"knowledge\", ref: `./${KNOWLEDGE_DIR}`, binding: \"discoverable\" });\n }\n return items;\n}\n\n/**\n * Effective composition: the convention items followed by the declared\n * `composes`. A declared item that repeats a convention item (same kind, same\n * path) replaces it in place — that is how an author changes its `binding`.\n */\nexport function effectiveComposes(\n composes: readonly AgentComposeItem[] | undefined,\n entries: Iterable<string>,\n): AgentComposeItem[] {\n const declared = composes ?? [];\n const key = (item: AgentComposeItem): string => `${item.kind}\\0${stripDotSlash(item.ref)}`;\n const declaredKeys = new Set(declared.map(key));\n const implicit = conventionItems(entries).filter((item) => !declaredKeys.has(key(item)));\n return [...implicit, ...declared];\n}\n\n// ---------------------------------------------------------------------------\n// Deprecated 0.1 inputs\n// ---------------------------------------------------------------------------\n\nconst DEPRECATED_TOP_LEVEL: ReadonlyArray<{ field: string; replacement: string }> = [\n { field: \"skills\", replacement: \"composes: [{ kind: skill, ref }]\" },\n { field: \"abilities\", replacement: \"composes: [{ kind: skill, ref }]\" },\n { field: \"contracts\", replacement: \"composes: [{ kind: contract, ref }]\" },\n { field: \"persona\", replacement: \"composes: [{ kind: persona, ref }] or SOUL.md\" },\n { field: \"rules\", replacement: \"composes: [{ kind: ruleset, ref }] or RULES.md\" },\n { field: \"knowledge\", replacement: \"composes: [{ kind: knowledge, ref }] or knowledge/\" },\n { field: \"requires\", replacement: \"composes: [{ kind: agent, ref, binding: delegate }]\" },\n { field: \"dependencies\", replacement: \"composes: [{ kind, ref }]\" },\n];\n\nconst DEPRECATED_METADATA: ReadonlyArray<{ field: string; replacement: string }> = [\n { field: \"soul\", replacement: \"SOUL.md or composes: [{ kind: persona, ref }]\" },\n { field: \"orchestrates\", replacement: \"composes: [{ kind: skill|agent, ref }]\" },\n { field: \"routes_to\", replacement: \"composes: [{ kind: agent, ref, binding: delegate }]\" },\n { field: \"knows\", replacement: \"composes: [{ kind: knowledge, ref }]\" },\n];\n\n/**\n * One named `warning` diagnostic per deprecated 0.1 field present on a parsed\n * `agent.yaml`: `deprecated_agent_<field>` for top-level fields and\n * `deprecated_agent_metadata_<field>` for `metadata.*`. Deprecated fields still\n * parse but are not read for composition.\n */\nexport function agentDeprecationDiagnostics(parsed: unknown): AgentManifestDiagnostic[] {\n if (parsed === null || typeof parsed !== \"object\") return [];\n const manifest = parsed as Record<string, unknown>;\n const out: AgentManifestDiagnostic[] = [];\n for (const { field, replacement } of DEPRECATED_TOP_LEVEL) {\n if (manifest[field] === undefined) continue;\n out.push({\n code: `deprecated_agent_${field}`,\n severity: \"warning\",\n message: `agent.yaml field \"${field}\" is deprecated and no longer read; use ${replacement}`,\n path: field,\n });\n }\n const metadata = manifest.metadata;\n if (metadata !== null && typeof metadata === \"object\") {\n for (const { field, replacement } of DEPRECATED_METADATA) {\n if ((metadata as Record<string, unknown>)[field] === undefined) continue;\n out.push({\n code: `deprecated_agent_metadata_${field}`,\n severity: \"warning\",\n message: `agent.yaml field \"metadata.${field}\" is deprecated and no longer read; use ${replacement}`,\n path: `metadata.${field}`,\n });\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Slot ids\n// ---------------------------------------------------------------------------\n\n/**\n * `composition_conflict` error per `composes[].id` already used by an earlier\n * item. Slot ids name connector / mcp-server slots, so two items must not share one.\n */\nexport function composeSlotDiagnostics(parsed: unknown): AgentManifestDiagnostic[] {\n if (parsed === null || typeof parsed !== \"object\") return [];\n const composes = (parsed as Record<string, unknown>).composes;\n if (!Array.isArray(composes)) return [];\n const firstSeen = new Map<string, number>();\n const out: AgentManifestDiagnostic[] = [];\n composes.forEach((item, i) => {\n if (item === null || typeof item !== \"object\") return;\n const id = (item as Record<string, unknown>).id;\n if (typeof id !== \"string\") return;\n const first = firstSeen.get(id);\n if (first === undefined) {\n firstSeen.set(id, i);\n return;\n }\n out.push({\n code: \"composition_conflict\",\n severity: \"error\",\n message: `composes slot id \"${id}\" is already used by composes[${first}]`,\n path: `composes[${i}].id`,\n });\n });\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Compose refs\n// ---------------------------------------------------------------------------\n\n/** What a `composes[].ref` points at: a path next to the agent, or a library asset. */\nexport type ComposeRefTarget =\n | { type: \"local\"; path: string }\n | { type: \"asset\"; kind: string; name: string; publisher?: string };\n\n/**\n * Read a `composes[]` item's `ref` the way the dependency walker does: a ref that\n * starts with `.` or `/` is a local path; `scheme://` refs are not library refs\n * (`undefined`); anything else is `[kind:][@publisher/]name[@range][#pin]`, the kind\n * defaulting to the item's own `kind`.\n */\nexport function composeRefTarget(item: {\n kind: string;\n ref: string;\n}): ComposeRefTarget | undefined {\n const ref = item.ref.trim();\n if (ref.startsWith(\".\") || ref.startsWith(\"/\")) return { type: \"local\", path: ref };\n if (ref.includes(\"://\")) return undefined;\n const colon = ref.indexOf(\":\");\n const kind = colon >= 0 ? ref.slice(0, colon).trim() : item.kind;\n let rest = (colon >= 0 ? ref.slice(colon + 1) : ref).trim();\n const pin = rest.indexOf(\"#\");\n if (pin >= 0) rest = rest.slice(0, pin).trim();\n let publisher: string | undefined;\n if (rest.startsWith(\"@\")) {\n const slash = rest.indexOf(\"/\");\n if (slash < 0) return undefined;\n publisher = rest.slice(1, slash);\n rest = rest.slice(slash + 1).trim();\n }\n const at = rest.indexOf(\"@\");\n const name = at >= 0 ? rest.slice(0, at).trim() : rest;\n if (!kind || !name) return undefined;\n return { type: \"asset\", kind: kind === \"mcp\" ? \"mcp-server\" : kind, name, publisher };\n}\n","/**\n * Syntax check for the standard 5-field cron expression a `schedule` trigger\n * carries (`minute hour day-of-month month day-of-week`). Pure; the framework\n * never runs a schedule, the host does, so this only refuses what no cron\n * scheduler can read.\n */\n\nconst MONTH_NAMES = [\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\",\n];\nconst DAY_NAMES = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"];\n\n/** The `@`-macros every common cron accepts. */\nconst CRON_MACROS: Record<string, true> = {\n \"@yearly\": true,\n \"@annually\": true,\n \"@monthly\": true,\n \"@weekly\": true,\n \"@daily\": true,\n \"@midnight\": true,\n \"@hourly\": true,\n};\n\ninterface CronField {\n name: string;\n min: number;\n max: number;\n /** Lowercase names that stand for `min + index`. */\n names?: readonly string[];\n /** First number the names map to (months start at 1, weekdays at 0). */\n nameBase?: number;\n}\n\nconst CRON_FIELDS: readonly CronField[] = [\n { name: \"minute\", min: 0, max: 59 },\n { name: \"hour\", min: 0, max: 23 },\n { name: \"day-of-month\", min: 1, max: 31 },\n { name: \"month\", min: 1, max: 12, names: MONTH_NAMES, nameBase: 1 },\n // 7 is Sunday, as in vixie cron.\n { name: \"day-of-week\", min: 0, max: 7, names: DAY_NAMES, nameBase: 0 },\n];\n\nfunction fieldValue(token: string, field: CronField): number | undefined {\n if (/^\\d+$/.test(token)) return Number(token);\n const idx = field.names?.indexOf(token.toLowerCase()) ?? -1;\n return idx >= 0 ? idx + (field.nameBase ?? 0) : undefined;\n}\n\nfunction fieldProblem(text: string, field: CronField): string | undefined {\n for (const part of text.split(\",\")) {\n const [range, step, extra] = part.split(\"/\");\n if (range === undefined || range === \"\" || extra !== undefined) {\n return `${field.name} \"${text}\" is not valid`;\n }\n if (step !== undefined && !(/^\\d+$/.test(step) && Number(step) > 0)) {\n return `${field.name} step \"${step}\" must be a positive integer`;\n }\n if (range === \"*\") continue;\n const ends = range.split(\"-\");\n if (ends.length > 2) return `${field.name} \"${text}\" is not valid`;\n const values = ends.map((e) => fieldValue(e, field));\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (v === undefined || v < field.min || v > field.max) {\n return `${field.name} \"${ends[i]}\" is out of range ${field.min}-${field.max}`;\n }\n }\n const [lo, hi] = values;\n if (lo !== undefined && hi !== undefined && lo > hi) {\n return `${field.name} range \"${range}\" runs backwards`;\n }\n }\n return undefined;\n}\n\n/**\n * Why `expr` is not a readable 5-field cron expression, or `undefined` when it is.\n * Accepts `*`, lists (`1,15`), ranges (`1-5`), steps (`*\\/10`, `0-30/5`), month and\n * weekday names (`jan`, `mon-fri`) and the `@daily`-style macros.\n *\n * @param expr The `cron` value of a `schedule` trigger.\n */\nexport function cronProblem(expr: string): string | undefined {\n const text = expr.trim();\n if (text.startsWith(\"@\")) {\n return Object.hasOwn(CRON_MACROS, text.toLowerCase())\n ? undefined\n : `unknown cron macro \"${text}\" (use ${Object.keys(CRON_MACROS).join(\", \")})`;\n }\n const parts = text.split(/\\s+/);\n if (parts.length !== CRON_FIELDS.length) {\n return `expected 5 fields (minute hour day-of-month month day-of-week), got ${text === \"\" ? 0 : parts.length}`;\n }\n for (let i = 0; i < CRON_FIELDS.length; i++) {\n const problem = fieldProblem(parts[i] as string, CRON_FIELDS[i] as CronField);\n if (problem) return problem;\n }\n return undefined;\n}\n","import * as z from \"zod\";\nimport { type ManifestValidationResult, validateManifest } from \"./_shared.js\";\nimport { composeRefTarget } from \"./agent-composition.js\";\nimport { cronProblem } from \"./cron.js\";\n\n/** Body the scaffold writes into a new agent's `SOUL.md`; an untouched body is a lint warning. */\nexport const AGENT_BODY_PLACEHOLDER = \"Agent prompt goes here.\";\n\n// ---------------------------------------------------------------------------\n// Model identifier validation + normalization\n// ---------------------------------------------------------------------------\n\n/**\n * Anthropic model aliases recognized by Claude Code and the Claude Agent SDK.\n *\n * - `inherit` — use the parent agent's model (Claude Code only).\n * - `opus` / `sonnet` / `haiku` — auto-rolling pointer to the current top model\n * in that family. Resolved by Claude Code / the Claude SDK at runtime.\n *\n * Use these in `agent.yaml` `model.preferred` for portability across Claude\n * Code and `claude-sdk`. Use a full ID (see {@link ANTHROPIC_FULL_ID_PATTERN})\n * when you need to pin to a specific Anthropic release.\n */\nexport const ANTHROPIC_MODEL_ALIASES = [\"inherit\", \"opus\", \"sonnet\", \"haiku\"] as const;\nexport type AnthropicModelAlias = (typeof ANTHROPIC_MODEL_ALIASES)[number];\n\n/**\n * Anthropic model family segments recognized inside a full model identifier.\n *\n * This is the *ID* vocabulary, deliberately wider than\n * {@link ANTHROPIC_MODEL_ALIASES}: `fable` ships as a real model family\n * (`claude-fable-5`) but has no Claude Code rolling alias, so it belongs here\n * and not there.\n *\n * @since 1.5.0\n */\nexport const ANTHROPIC_MODEL_FAMILIES = [\"opus\", \"sonnet\", \"haiku\", \"fable\"] as const;\nexport type AnthropicModelFamily = (typeof ANTHROPIC_MODEL_FAMILIES)[number];\n\nconst FAMILY_ALT = ANTHROPIC_MODEL_FAMILIES.join(\"|\");\n\n/**\n * Family + version core shared by the full / Bedrock / Vertex patterns.\n *\n * Matches both the Claude 4+ \"family-first\" form (`opus-4-6`, `opus-5`) and the\n * legacy \"version-first\" form used by Claude 3.x and some OpenRouter aliases\n * (`3-5-sonnet`).\n *\n * The version is `\\d+(?:[-.]\\d+)*` — one *or more* numeric components. It used\n * to demand two or more, which rejected every current single-digit-major ID\n * (`claude-opus-5`, `claude-sonnet-5`, `claude-fable-5`). Those are structurally\n * indistinguishable from the older partial IDs the two-component rule was\n * written to catch (`claude-opus-4`), so accepting the current lineup\n * necessarily accepts those too. This validator is structural, not a catalog\n * check — a well-formed ID that no provider serves is caught at dispatch, not\n * here.\n */\nconst FAMILY_VERSION_CORE = `(?:(?:${FAMILY_ALT})-\\\\d+(?:[-.]\\\\d+)*|\\\\d+(?:[-.]\\\\d+)*-(?:${FAMILY_ALT}))`;\n\n/**\n * Regex matching a full Anthropic model identifier, optionally provider-prefixed.\n *\n * Examples that match (family-first):\n * - `claude-opus-5`\n * - `claude-sonnet-5`\n * - `claude-fable-5`\n * - `claude-opus-4-6`\n * - `claude-haiku-4-5-20251001`\n * - `anthropic/claude-sonnet-4.6` (OpenRouter form)\n *\n * Examples that match (version-first / legacy):\n * - `claude-3-5-sonnet-20241022`\n * - `anthropic/claude-3.7-sonnet`\n *\n * Still rejected: a bare family (`claude-opus`), a non-Claude vendor\n * (`gpt-4o`), an unknown family (`claude-turbo-5`).\n */\nexport const ANTHROPIC_FULL_ID_PATTERN = new RegExp(\n `^(?:[a-z0-9-]+\\\\/)?claude-${FAMILY_VERSION_CORE}(?:-\\\\d{8})?$`,\n);\n\n/**\n * Regex matching an Amazon Bedrock-form Anthropic model identifier: an\n * optional region/scope prefix (`us.` / `eu.` / `apac.` / `global.`), the\n * `anthropic.` vendor segment, the same family/version core as\n * {@link ANTHROPIC_FULL_ID_PATTERN}, plus Bedrock's optional\n * `-v<major>[:<minor>]` suffix.\n *\n * Examples that match:\n * - `anthropic.claude-3-5-sonnet-20241022-v2:0`\n * - `us.anthropic.claude-opus-4-6-v1:0`\n * - `anthropic.claude-sonnet-4-5-20250929-v1:0`\n *\n * Does NOT match `anthropic.gpt-4` (not a Claude family) or a bare\n * `us.claude-…` (the `anthropic.` segment is required).\n *\n * @since 1.3.0\n */\nexport const BEDROCK_MODEL_ID_PATTERN = new RegExp(\n `^(?:(?:us|eu|apac|global)\\\\.)?anthropic\\\\.claude-${FAMILY_VERSION_CORE}(?:-\\\\d{8})?(?:-v\\\\d+(?::\\\\d+)?)?$`,\n);\n\n/**\n * Regex matching a Google Vertex AI publisher-form Anthropic identifier —\n * a first-party ID pinned with an `@YYYYMMDD` date suffix instead of the\n * native `-YYYYMMDD` (e.g. `claude-sonnet-4-5@20250929`).\n *\n * @since 1.3.0\n */\nexport const VERTEX_MODEL_ID_PATTERN = new RegExp(`^claude-${FAMILY_VERSION_CORE}@\\\\d{8}$`);\n\n/**\n * Zod schema for a **first-party Anthropic** model identifier: a Claude Code\n * alias, a full Anthropic ID, a Bedrock-form ID (see\n * {@link BEDROCK_MODEL_ID_PATTERN}), or a Vertex `@date`-pinned ID (see\n * {@link VERTEX_MODEL_ID_PATTERN}).\n *\n * This is **not** a universal model-id rule. It is the vocabulary of exactly\n * one wire target — `surface: anthropic-messages` on `transport: direct`\n * pointed at Anthropic's own host — because that is the only endpoint whose\n * model namespace this package knows. Every other endpoint names models it\n * cannot enumerate (a Bedrock ARN, an Azure deployment name,\n * `accounts/fireworks/models/…`, `meta-llama/Llama-3.3-70B`, an Ollama tag),\n * and applying this schema there rejected working configurations. Pick between\n * the two vocabularies with {@link modelIdSchemaForTarget}.\n *\n * Use {@link normalizeAnthropicModel} to coerce an unrecognized value to a safe\n * alias instead of failing.\n */\nexport const ModelIdSchema = z.union([\n z.enum(ANTHROPIC_MODEL_ALIASES),\n z\n .string()\n .regex(\n ANTHROPIC_FULL_ID_PATTERN,\n \"Invalid Anthropic model ID. Use an alias (opus | sonnet | haiku | inherit), a full ID (e.g. claude-opus-5, claude-sonnet-4-6), a Bedrock ID (e.g. us.anthropic.claude-opus-4-6-v1:0), or a Vertex ID (e.g. claude-sonnet-4-5@20250929).\",\n ),\n z.string().regex(BEDROCK_MODEL_ID_PATTERN),\n z.string().regex(VERTEX_MODEL_ID_PATTERN),\n]);\n\n/**\n * Hosts that serve the first-party Anthropic Messages API. An\n * `anthropic-messages` entry pointed anywhere else — a gateway, LiteLLM, an\n * Azure AI Foundry deployment — speaks the same wire protocol over its own\n * model namespace.\n *\n * @since 3.21.0\n */\nexport const ANTHROPIC_FIRST_PARTY_HOSTS: readonly string[] = [\"api.anthropic.com\"];\n\n/**\n * The slice of a provider-registry `llm` entry that decides which model-id\n * vocabulary applies.\n *\n * Structurally a subset of `AIProviderLlmEntry`\n * (`@skaile/workspaces/core/provider-registry`), so a registry entry can be\n * passed straight in. The fields are plain strings because this module sits\n * *below* the registry in the dependency graph and must not import it; the\n * enums live in exactly one place, and this is not it.\n *\n * @since 3.21.0\n */\nexport interface ModelIdTarget {\n /** omp `api` value — `anthropic-messages`, `openai-completions`, … */\n surface?: string;\n /** `direct` when absent. */\n transport?: string;\n /** Resolved endpoint: `resolveEntryBaseUrl(entry)`, or the preset literal. */\n base_url?: string;\n}\n\n/**\n * True when `baseUrl` is the first-party Anthropic API.\n *\n * An absent URL counts: an `anthropic-messages` entry with no endpoint of its\n * own is the first-party API (the catalog layer fills in\n * `https://api.anthropic.com` during the merge). A URL that will not parse is\n * treated as *not* first-party — guessing the other way would reject ids that\n * whatever is at the other end serves.\n *\n * @since 3.21.0\n */\nexport function isFirstPartyAnthropicEndpoint(baseUrl?: string): boolean {\n if (!baseUrl) return true;\n let host: string;\n try {\n host = new URL(baseUrl).hostname.toLowerCase();\n } catch {\n return false;\n }\n return ANTHROPIC_FIRST_PARTY_HOSTS.includes(host);\n}\n\n/**\n * Whether `target` demands an Anthropic-shaped model id.\n *\n * Exactly one combination does: the Anthropic Messages wire, spoken directly,\n * to Anthropic's own host. Every gateway transport (`bedrock`, `vertex`,\n * `foundry`, `azure-openai`) addresses the same models under a renamed\n * namespace — an inference-profile ARN, a publisher path, a deployment name —\n * and an `anthropic-messages` proxy owns its namespace outright.\n *\n * An absent `target` is the pre-registry default: first-party Anthropic is what\n * the Claude harnesses talk to when nothing says otherwise, so the strict\n * vocabulary still applies there and nothing that validates today stops\n * validating.\n *\n * @since 3.21.0\n */\nexport function requiresAnthropicModelId(target?: ModelIdTarget): boolean {\n if (!target) return true;\n if (target.surface !== \"anthropic-messages\") return false;\n if ((target.transport ?? \"direct\") !== \"direct\") return false;\n return isFirstPartyAnthropicEndpoint(target.base_url);\n}\n\n/**\n * Any non-empty, whitespace-free model id — the vocabulary of every endpoint\n * whose model namespace belongs to the operator rather than to us.\n *\n * @since 3.21.0\n */\nexport const FreeFormModelIdSchema = z\n .string()\n .regex(/^\\S+$/, \"Model ID must be a non-empty string with no whitespace.\");\n\n/**\n * The model-id schema a given wire target enforces: {@link ModelIdSchema} for\n * first-party Anthropic, {@link FreeFormModelIdSchema} everywhere else.\n *\n * @since 3.21.0\n */\nexport function modelIdSchemaForTarget(target?: ModelIdTarget): z.ZodType<string> {\n return requiresAnthropicModelId(target)\n ? (ModelIdSchema as z.ZodType<string>)\n : (FreeFormModelIdSchema as z.ZodType<string>);\n}\n\n/**\n * Contextual model-ID schema for the legacy `cloud` dimension.\n *\n * `default` (or absent) is the first-party Anthropic API, so the strict\n * vocabulary applies. Every other value either renames the namespace\n * (`bedrock` ARNs, `vertex` publisher paths, `azure` deployments) or is an\n * unknowable proxy (`gateway`) — all free-form, the same answer\n * {@link modelIdSchemaForTarget} gives for the equivalent registry entry.\n *\n * Superseded by {@link modelIdSchemaForTarget}; it goes when the rest of the\n * `cloud` surface does.\n *\n * @since 1.3.0\n */\nexport function modelIdSchemaForCloud(cloud?: string): z.ZodType<string> {\n return !cloud || cloud === \"default\"\n ? modelIdSchemaForTarget()\n : (FreeFormModelIdSchema as z.ZodType<string>);\n}\n\n/**\n * Normalize an arbitrary model string to a safe Claude Code value.\n *\n * - If `input` is a recognized alias or a full / Bedrock-form / Vertex-form ID,\n * returns it unchanged.\n * - If `input` looks like `claude-<family>-...` but doesn't match any full-ID\n * regex (e.g. the broken `claude-opus-4`), returns the family alias.\n * - Otherwise returns `fallback` (default `\"sonnet\"` — Claude Code's default).\n *\n * Used by renderers that target Claude Code / the Claude SDK to coerce stale\n * or malformed model fields into a working alias rather than propagating a\n * silent runtime failure. All full-pattern checks run BEFORE the family\n * fallback so a valid Bedrock/Vertex ID is never downgraded to an alias.\n */\nexport function normalizeAnthropicModel(\n input: string | undefined | null,\n fallback: AnthropicModelAlias = \"sonnet\",\n): string {\n if (!input) return fallback;\n if ((ANTHROPIC_MODEL_ALIASES as readonly string[]).includes(input)) return input;\n if (ANTHROPIC_FULL_ID_PATTERN.test(input)) return input;\n if (BEDROCK_MODEL_ID_PATTERN.test(input) || VERTEX_MODEL_ID_PATTERN.test(input)) return input;\n // Family fallback is restricted to the rolling *aliases* — `fable` has no\n // Claude Code alias, so a malformed `claude-fable-*` falls through to\n // `fallback` rather than to an alias the runtime would reject.\n const familyMatch = input.match(/claude-(opus|sonnet|haiku)/i);\n if (familyMatch) return familyMatch[1]!.toLowerCase() as AnthropicModelAlias;\n return fallback;\n}\n\n/**\n * A model *selector* as a manifest writes it: `@role`,\n * `<providerId>/<modelId>`, a bare provider-side id, or an Anthropic alias.\n * Resolved against the provider registry — and only then checked against the\n * selected entry's own vocabulary — by `resolveManifestModel`\n * (`@skaile/workspaces/bridge`).\n *\n * Structural on purpose. An agent manifest is portable across providers: it\n * cannot know which registry entry will serve it, so an id-vocabulary check\n * here would enforce one endpoint's namespace on every other one. That check\n * belongs to {@link modelIdSchemaForTarget}, at the point where the endpoint is\n * known.\n *\n * @since 3.21.0\n */\nexport const ModelSelectorSchema = z\n .string()\n .regex(\n /^\\S+$/,\n 'Model selector must be a non-empty string with no whitespace: \"@role\", \"provider/model\", a model ID, or an Anthropic alias.',\n );\n\nconst ModelConfigSchema = z.looseObject({\n preferred: ModelSelectorSchema.optional(),\n fallback: z.array(ModelSelectorSchema).optional(),\n constraints: z\n .looseObject({\n temperature: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Composition binding types (Task 1.7)\n// ---------------------------------------------------------------------------\n\n/** Bindings for content items: how the asset's bytes reach the prompt / tool surface. */\nexport const ContentBindingValues = [\"discoverable\", \"inline-live\", \"inline-snapshot\"] as const;\n/** Bindings for `kind: agent` items: how the sub-agent is invoked. */\nexport const AgentBindingValues = [\"delegate\", \"run\"] as const;\nexport const BindingValues = [...ContentBindingValues, ...AgentBindingValues] as const;\nexport const BindingSchema = z.enum(BindingValues);\nexport type Binding = z.infer<typeof BindingSchema>;\n\n/** Slot ids name a composed connector / mcp-server inside one agent: `composition.<id>`, `<id>.<operation>`. */\nexport const SLOT_ID_PATTERN = /^[a-z][a-z0-9_-]*$/;\n\n/** Kinds whose compose item MUST carry a slot `id`. */\nexport const SLOT_ID_REQUIRED_KINDS: Readonly<Record<string, true>> = {\n connector: true,\n \"mcp-server\": true,\n};\n\nconst SlotIdSchema = z\n .string()\n .regex(SLOT_ID_PATTERN, \"id must match [a-z][a-z0-9_-]* (lowercase, starts with a letter)\");\n\n/**\n * A single composition item within an agent's `composes:` field.\n *\n * - `kind`: the asset kind being composed. Any string here; `skaile validate`\n * checks it against the kind registry (plus the `soul` pseudo-kind).\n * - `ref`: asset ref (e.g. '@skaile/gmail@^1') or a local path.\n * - `id`: slot id; required for `connector` and `mcp-server` items.\n * - `as`: local alias under which the item is exposed (e.g. a sub-agent name); also the rendered\n * file name, so it must match `[a-z][a-z0-9_-]*`.\n * - `instance`: optional Library Instance ref to reuse (e.g. 'library://personal/instances/uuid')\n * - `config`: free-form per-item configuration.\n * - `binding`: how the asset integrates into the agent runtime; defaults per-kind.\n * `delegate | run` apply to `kind: agent` only.\n */\nexport const AgentComposeItemSchema = z\n .object({\n kind: z.string().min(1),\n ref: z.string().min(1),\n id: SlotIdSchema.optional(),\n as: z\n .string()\n .regex(\n SLOT_ID_PATTERN,\n \"as must match [a-z][a-z0-9_-]* (it names a rendered file: no path separators or dots)\",\n )\n .optional(),\n instance: z.string().optional(),\n config: z.record(z.string(), z.unknown()).optional(),\n binding: BindingSchema.optional(),\n })\n .superRefine((item, ctx) => {\n if (item.kind === \"memory\" || item.kind === \"trigger\") {\n ctx.addIssue({\n code: \"custom\",\n path: [\"kind\"],\n message: `\"${item.kind}\" is not a composes kind; declare ${item.kind === \"memory\" ? \"memory\" : \"triggers\"} as a top-level field`,\n });\n }\n if (Object.hasOwn(SLOT_ID_REQUIRED_KINDS, item.kind) && item.id === undefined) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"id\"],\n message: `composes item of kind \"${item.kind}\" requires a slot id`,\n });\n }\n if (item.binding === undefined) return;\n const isAgentBinding = (AgentBindingValues as readonly string[]).includes(item.binding);\n if (item.kind === \"agent\" && !isAgentBinding) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"binding\"],\n message: `composes item of kind \"agent\" accepts binding \"delegate\" or \"run\", not \"${item.binding}\"`,\n });\n } else if (item.kind !== \"agent\" && isAgentBinding) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"binding\"],\n message: `binding \"${item.binding}\" is only valid for kind \"agent\"`,\n });\n }\n });\n\nexport type AgentComposeItem = z.infer<typeof AgentComposeItemSchema>;\n\n// ---------------------------------------------------------------------------\n// Agent manifest\n// ---------------------------------------------------------------------------\n\n/**\n * Declared tool restrictions for an agent.\n *\n * `allowed` is an allowlist: when non-empty, the agent may invoke only these\n * tools. `denied` is a denylist applied on top. An absent block (or two empty\n * arrays) means \"no restriction\" — the harness's full default toolset.\n *\n * Tool names are written in the canonical Claude Code vocabulary (`Read`,\n * `Write`, `Bash`, `WebSearch`, …). Each harness maps them onto its own\n * runtime: `claude-sdk` passes them through as `allowedTools` /\n * `disallowedTools`; the omp harness translates them to omp's built-in tool\n * names and passes `--tools`. A name a harness does not recognize is dropped\n * for that harness rather than failing the manifest, because the same manifest\n * is expected to run on more than one harness.\n *\n * This was previously an undeclared field that survived only because\n * {@link AgentManifestSchema} is a loose object — so `AgentManifest.tools` was\n * typed `unknown` and every consumer read it through a cast.\n *\n * @since 1.5.0\n */\nexport const AgentToolsSchema = z.looseObject({\n /** Tool names the agent may invoke. Empty or absent means \"no allowlist\". */\n allowed: z.array(z.string().min(1)).optional(),\n /** Tool names the agent must not invoke. Applied after `allowed`. */\n denied: z.array(z.string().min(1)).optional(),\n});\n\nexport type AgentTools = z.infer<typeof AgentToolsSchema>;\n\n// ---------------------------------------------------------------------------\n// Spec 0.2: lifecycle, io, memory, triggers, capabilities\n// ---------------------------------------------------------------------------\n\n/** `standing` = long-running identity; `role` = short-lived, callable with typed I/O. */\nexport const AgentLifecycleValues = [\"standing\", \"role\"] as const;\nexport const AgentLifecycleSchema = z.enum(AgentLifecycleValues);\nexport type AgentLifecycle = z.infer<typeof AgentLifecycleSchema>;\n\n/** JSON Schema (object form) describing a role's input or output. */\nconst JsonSchemaObject = z.record(z.string(), z.unknown());\n\n/** Typed I/O of a role agent, validated by `agent.run`. */\nexport const AgentIoSchema = z.looseObject({\n input: JsonSchemaObject.optional(),\n output: JsonSchemaObject.optional(),\n});\nexport type AgentIo = z.infer<typeof AgentIoSchema>;\n\nexport const MemoryScopeValues = [\"instance\", \"user\", \"workspace\"] as const;\nexport const MemoryScopeSchema = z.enum(MemoryScopeValues);\nexport type MemoryScope = z.infer<typeof MemoryScopeSchema>;\n\n/** A named, scoped, bounded text block the host stores and the runner renders. */\nexport const MemoryBlockSchema = z.looseObject({\n name: z.string().regex(SLOT_ID_PATTERN, \"block name must match [a-z][a-z0-9_-]*\"),\n scope: MemoryScopeSchema,\n max_chars: z.number().int().positive(),\n /** Convention file the block is seeded from (e.g. `SOUL.md`). */\n source: z.string().min(1).optional(),\n});\nexport type MemoryBlock = z.infer<typeof MemoryBlockSchema>;\n\n/** Top-level memory declaration. Memory is never a `composes:` kind. */\nexport const AgentMemorySchema = z.looseObject({\n blocks: z.array(MemoryBlockSchema).optional(),\n /** Hint only; the host decides. */\n consolidation: z\n .looseObject({\n strategy: z.string().min(1),\n threshold: z.number().int().positive().optional(),\n })\n .optional(),\n});\nexport type AgentMemory = z.infer<typeof AgentMemorySchema>;\n\nconst TriggerIdSchema = z.string().regex(SLOT_ID_PATTERN, \"trigger id must match [a-z][a-z0-9_-]*\");\n\n/**\n * Default triggers declared on the asset; an instance may override or extend\n * them by `id`. Triggers are never a `composes:` kind.\n */\nexport const AgentTriggerSchema = z.discriminatedUnion(\"kind\", [\n z.looseObject({\n kind: z.literal(\"schedule\"),\n id: TriggerIdSchema,\n cron: z.string().min(1),\n prompt: z.string().min(1),\n timezone: z.string().min(1).optional(),\n enabled: z.boolean().optional(),\n }),\n z.looseObject({\n kind: z.literal(\"webhook\"),\n id: TriggerIdSchema,\n prompt: z.string().min(1),\n enabled: z.boolean().optional(),\n }),\n z.looseObject({\n kind: z.literal(\"channel\"),\n id: TriggerIdSchema,\n /** Which channel messages fire the trigger (e.g. `mention`). */\n when: z.string().min(1),\n prompt: z.string().min(1).optional(),\n enabled: z.boolean().optional(),\n }),\n z.looseObject({\n kind: z.literal(\"event\"),\n id: TriggerIdSchema,\n /** Protocol / host event name (e.g. `session_error`). */\n event: z.string().min(1),\n prompt: z.string().min(1).optional(),\n enabled: z.boolean().optional(),\n }),\n]);\nexport type AgentTrigger = z.infer<typeof AgentTriggerSchema>;\n\n/** A capability the agent needs at runtime; `connector` is a compose slot id. */\nexport const AgentCapabilityRequirementSchema = z.looseObject({\n name: z.string().min(1),\n connector: SlotIdSchema.optional(),\n required: z.boolean().default(false),\n});\nexport type AgentCapabilityRequirement = z.infer<typeof AgentCapabilityRequirementSchema>;\n\n// ---------------------------------------------------------------------------\n// Deprecated 0.1 inputs — still parsed, each yields a diagnostic\n// (see `agentDeprecationDiagnostics`); none is read for composition.\n// ---------------------------------------------------------------------------\n\n/** @deprecated 0.1 `requires[]` entry; replaced by `composes[{kind: agent}]`. */\nconst DeprecatedRequiresItemSchema = z.looseObject({\n name: z.string(),\n source: z.string().optional(),\n version: z.string().optional(),\n});\n\nexport const AgentManifestSchema = z\n .looseObject({\n spec_version: z.string().optional(),\n name: z.string().min(1),\n version: z.string().optional(),\n description: z.string().min(1),\n extends: z.string().optional(),\n\n model: ModelConfigSchema.optional(),\n tools: AgentToolsSchema.optional(),\n delegation: z.looseObject({ mode: z.string() }).optional(),\n runtime: z\n .looseObject({\n max_turns: z.number().optional(),\n timeout: z.number().optional(),\n /** Role instances only: render the harness sub-agent as a background agent. */\n background: z.boolean().optional(),\n })\n .optional(),\n\n author: z.string().optional(),\n license: z.string().optional(),\n tags: z.array(z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n\n // spec 0.2\n /** Default `standing`. */\n lifecycle: AgentLifecycleSchema.optional(),\n /** Required when `lifecycle: role`. */\n io: AgentIoSchema.optional(),\n memory: AgentMemorySchema.optional(),\n triggers: z.array(AgentTriggerSchema).optional(),\n capabilities: z.array(AgentCapabilityRequirementSchema).optional(),\n composes: z.array(AgentComposeItemSchema).optional(),\n\n metadata: z.record(z.string(), z.unknown()).optional(),\n\n // Deprecated 0.1 inputs.\n /** @deprecated Use `composes[{kind: skill}]`. */\n skills: z.array(z.string()).optional(),\n /** @deprecated Use `composes[{kind: skill}]`. */\n abilities: z.array(z.string()).optional(),\n /** @deprecated Use `composes[{kind: contract}]`. */\n contracts: z.array(z.string()).optional(),\n /** @deprecated Use `composes[{kind: persona}]`. */\n persona: z.array(z.string()).optional(),\n /** @deprecated Use `composes[{kind: ruleset}]`. */\n rules: z.array(z.string()).optional(),\n /** @deprecated Use `composes[{kind: knowledge}]`. */\n knowledge: z.array(z.string()).optional(),\n /** @deprecated Use `composes[{kind: agent}]`. */\n requires: z.array(DeprecatedRequiresItemSchema).optional(),\n })\n .superRefine((manifest, ctx) => {\n if (manifest.lifecycle === \"role\" && manifest.io === undefined) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"io\"],\n message: 'lifecycle \"role\" requires an io block ({ input, output } JSON Schemas)',\n });\n }\n addDuplicateIssues(\n ctx,\n \"triggers\",\n (manifest.triggers ?? []).map((t) => t.id),\n \"trigger id\",\n );\n addDuplicateIssues(\n ctx,\n \"memory.blocks\",\n (manifest.memory?.blocks ?? []).map((b) => b.name),\n \"memory block name\",\n );\n (manifest.triggers ?? []).forEach((trigger, i) => {\n if (trigger.kind !== \"schedule\") return;\n const problem = cronProblem(trigger.cron);\n if (problem) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"triggers\", i, \"cron\"],\n message: `cron \"${trigger.cron}\" is not a valid cron expression: ${problem}`,\n });\n }\n });\n // A capability's `connector` names a slot some composes item declares by `id`.\n const slotIds = new Set<string>();\n for (const item of manifest.composes ?? []) {\n if (item.id !== undefined && Object.hasOwn(SLOT_ID_REQUIRED_KINDS, item.kind)) {\n slotIds.add(item.id);\n }\n }\n (manifest.capabilities ?? []).forEach((cap, i) => {\n if (cap.connector === undefined || slotIds.has(cap.connector)) return;\n ctx.addIssue({\n code: \"custom\",\n path: [\"capabilities\", i, \"connector\"],\n message:\n `capability \"${cap.name}\" names connector slot \"${cap.connector}\", but no composes item ` +\n `of kind connector or mcp-server has id \"${cap.connector}\"` +\n (slotIds.size > 0 ? ` (declared slots: ${[...slotIds].join(\", \")})` : \"\"),\n });\n });\n // An agent cannot compose itself: it would resolve to its own sub-agent forever.\n (manifest.composes ?? []).forEach((item, i) => {\n if (item.kind !== \"agent\") return;\n const target = composeRefTarget(item);\n if (target?.type !== \"asset\" || target.kind !== \"agent\" || target.name !== manifest.name) {\n return;\n }\n const publisher = (manifest as Record<string, unknown>).publisher;\n if (\n target.publisher !== undefined &&\n typeof publisher === \"string\" &&\n target.publisher !== publisher\n ) {\n return;\n }\n ctx.addIssue({\n code: \"custom\",\n path: [\"composes\", i, \"ref\"],\n message: `agent \"${manifest.name}\" composes itself (${item.ref}); an agent cannot be its own sub-agent`,\n });\n });\n });\n\nfunction addDuplicateIssues(\n ctx: z.RefinementCtx,\n field: string,\n values: readonly string[],\n label: string,\n): void {\n const seen = new Set<string>();\n values.forEach((value, i) => {\n if (seen.has(value)) {\n ctx.addIssue({\n code: \"custom\",\n path: [...field.split(\".\"), i],\n message: `duplicate ${label} \"${value}\"`,\n });\n }\n seen.add(value);\n });\n}\n\nexport type AgentManifest = z.infer<typeof AgentManifestSchema>;\n\nexport function validateAgent(data: unknown): ManifestValidationResult<AgentManifest> {\n return validateManifest(AgentManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport { FieldSchema, type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\nexport const ConnectorManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n entry: z.string().min(1),\n npm_deps: z\n .object({\n required: z.array(z.string()).optional(),\n optional: z.array(z.string()).optional(),\n })\n .optional(),\n fields: z.array(FieldSchema).optional(),\n health_check: z.string().nullable().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n});\n\nexport type ConnectorManifest = z.infer<typeof ConnectorManifestSchema>;\n\nexport function validateConnector(data: unknown): ManifestValidationResult<ConnectorManifest> {\n return validateManifest(ConnectorManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\n/** Body the scaffold writes into a new `CONTRACT.md`; an untouched body is a lint warning. */\nexport const CONTRACT_BODY_PLACEHOLDER = \"Contract goes here.\";\n\nexport const ContractManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type ContractManifest = z.infer<typeof ContractManifestSchema>;\n\nexport function validateContract(data: unknown): ManifestValidationResult<ContractManifest> {\n return validateManifest(ContractManifestSchema, data);\n}\n","/**\n * Polymorphic Preset manifest schema.\n *\n * A Preset is the unified composition + configuration primitive. Items can be:\n * - Asset ref (plain or with inline config + placeholders)\n * - Library Instance ref (`library://tier/instances/id`)\n * - Nested Preset ref (resolved recursively, max depth 3)\n *\n * Apply semantics derive from ref type, not an explicit mode field.\n */\nimport * as z from \"zod\";\nimport { type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\n// ---------------------------------------------------------------------------\n// Placeholder types\n// ---------------------------------------------------------------------------\n\nconst PlaceholderTypeValues = [\n \"text\",\n \"multiline\",\n \"secret\",\n \"number\",\n \"boolean\",\n \"enum\",\n \"oauth\",\n \"instance-picker\",\n] as const;\n\nexport const PlaceholderTypeSchema = z.enum(PlaceholderTypeValues);\n\nexport const PlaceholderSchema = z.object({\n key: z.string().min(1),\n prompt: z.string().optional(),\n type: PlaceholderTypeSchema.optional(),\n required: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n values: z.array(z.union([z.string(), z.number()])).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Compose item (for agents within presets)\n// ---------------------------------------------------------------------------\n\nconst ComposeRefSchema = z.object({\n kind: z.string().min(1),\n ref: z.string().min(1),\n});\n\n// ---------------------------------------------------------------------------\n// Preset item\n// ---------------------------------------------------------------------------\n\nexport const PresetItemSchema = z.looseObject({\n /** Asset ref, Library Instance ref, or nested Preset ref. */\n ref: z.string().min(1),\n /** Local item ID for cross-item references (#item-id). */\n id: z.string().optional(),\n /** Author-prefilled non-secret config values. */\n config: z.record(z.string(), z.unknown()).optional(),\n /** User/secret values prompted at install. */\n placeholders: z.array(PlaceholderSchema).optional(),\n /** How placeholder values fold into the Instance config. */\n materialize: z.record(z.string(), z.string()).optional(),\n /** Composition for agent items. */\n composes: z.array(ComposeRefSchema).optional(),\n /** Outer-Preset-author-supplied placeholder values for nested Presets. */\n inputs: z.record(z.string(), z.unknown()).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Preset-level input (rare, shared across items)\n// ---------------------------------------------------------------------------\n\nconst PresetInputSchema = z.object({\n key: z.string().min(1),\n type: PlaceholderTypeSchema.optional(),\n prompt: z.string().optional(),\n required: z.boolean().optional(),\n values: z.array(z.union([z.string(), z.number()])).optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Source (git repo backing non-factory dependencies)\n// ---------------------------------------------------------------------------\n\n/**\n * A `{url, pin?, publisher?}` source the preset's dependencies resolve from (mirrors\n * `SourceEntry`); `publisher` is the one a non-GitHub source needs.\n */\nexport const PresetSourceSchema = z.object({\n url: z.string().min(1),\n pin: z.string().optional(),\n publisher: z.string().optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Scaffold placeholders (`library create preset`)\n// ---------------------------------------------------------------------------\n\n/** The `description:` `library create preset` writes when `--description` is omitted. */\nexport const PRESET_DESCRIPTION_PLACEHOLDER = \"A curated set of assets\";\n\n/** The single item ref `library create preset` writes; it names no real publisher or skill. */\nexport const PRESET_ITEM_PLACEHOLDER_REF = \"skill:@your-publisher/example-skill\";\n\n// ---------------------------------------------------------------------------\n// Preset manifest\n// ---------------------------------------------------------------------------\n\nexport const PresetManifestSchema = z.looseObject({\n publisher: z.string().optional(),\n name: z.string().min(1),\n version: z.union([z.string(), z.number()]).default(\"0.1.0\"),\n description: z.string().min(1),\n category: z.string().optional(),\n license: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n\n /** 1+ polymorphic items. */\n items: z.array(PresetItemSchema).min(1),\n\n /** Preset-level inputs shared across items (rare). */\n inputs: z.array(PresetInputSchema).optional(),\n\n /** Git sources the dependency items resolve from; `apply` registers these first. */\n sources: z.array(PresetSourceSchema).optional(),\n});\n\nexport type PresetManifest = z.infer<typeof PresetManifestSchema>;\nexport type PresetItem = z.infer<typeof PresetItemSchema>;\nexport type PresetSource = z.infer<typeof PresetSourceSchema>;\nexport type Placeholder = z.infer<typeof PlaceholderSchema>;\n\nexport function validatePreset(data: unknown): ManifestValidationResult<PresetManifest> {\n return validateManifest(PresetManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\n/** Body the scaffold writes into a new `<name>.prompt.md`; an untouched body is a lint warning. */\nexport const PROMPT_BODY_PLACEHOLDER = \"Prompt goes here.\";\n\nexport const PromptManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type PromptManifest = z.infer<typeof PromptManifestSchema>;\n\nexport function validatePrompt(data: unknown): ManifestValidationResult<PromptManifest> {\n return validateManifest(PromptManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n ArtifactRefSchema,\n CommonMetadataSchema,\n FilePrerequisiteSchema,\n type ManifestValidationResult,\n UserInputSchema,\n validateManifest,\n} from \"./_shared.js\";\n\nconst SkillMetadataSchema = CommonMetadataSchema.extend({\n parameters: z.record(z.string(), z.unknown()).optional(),\n artifacts: z\n .object({\n requires: z.array(ArtifactRefSchema).optional(),\n produces: z.array(ArtifactRefSchema).optional(),\n consumes: z.array(ArtifactRefSchema).optional(),\n })\n .optional(),\n prerequisites: z\n .object({\n files: z.array(FilePrerequisiteSchema).optional(),\n inputs_required: z.array(UserInputSchema).optional(),\n inputs_optional: z.array(UserInputSchema).optional(),\n // Parsed by the resolver's parseSkillRequirements; Zod would strip them otherwise.\n reads: z.array(z.object({ path: z.string(), description: z.string().optional() })).optional(),\n produces: z\n .array(z.object({ path: z.string(), description: z.string().optional() }))\n .optional(),\n resources: z\n .array(\n z.object({\n id: z.string(),\n operations: z.array(z.string()).optional(),\n optional: z.boolean().optional(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n connectors: z\n .array(\n z.object({\n driver: z.string(),\n access: z.enum([\"read-only\", \"read-write\"]).optional(),\n }),\n )\n .optional(),\n })\n .optional(),\n produces: z.array(z.object({ path: z.string(), description: z.string().optional() })).optional(),\n});\n\n/**\n * Prefix `skaile library create` writes into a new skill's `description`. The\n * Agent Skills spec requires a real description (what the skill does and when\n * to use it), so a description that still starts with this marker is rejected.\n */\nexport const SKILL_DESCRIPTION_PLACEHOLDER_PREFIX = \"TODO:\";\n\n/** Full placeholder description the scaffold writes when `--description` is omitted. */\nexport const SKILL_DESCRIPTION_PLACEHOLDER = `${SKILL_DESCRIPTION_PLACEHOLDER_PREFIX} describe what this skill does and when to use it.`;\n\n/** Body the scaffold writes into a new SKILL.md; an untouched body is a lint warning. */\nexport const SKILL_BODY_PLACEHOLDER = \"Skill prompt goes here.\";\n\nexport const SkillManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z\n .string()\n .refine((d) => d.trim().length > 0, {\n message:\n \"description is empty — say what the skill does and when to use it (Agent Skills spec: 1–1024 chars)\",\n })\n .refine((d) => !d.trim().startsWith(SKILL_DESCRIPTION_PLACEHOLDER_PREFIX), {\n message: `description is still the scaffold placeholder (${SKILL_DESCRIPTION_PLACEHOLDER_PREFIX} …) — say what the skill does and when to use it`,\n }),\n version: z.string().optional(),\n license: z.string().optional(),\n compatibility: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n // agentskills.io standard field. Kept as `unknown` (not `string`) so a legacy\n // array form never hard-fails validateSkill — the string-typing rule is\n // advisory, owned by checkAgentSkillConformance (warn, not error).\n \"allowed-tools\": z.unknown().optional(),\n\n // Legacy fields (SKILL.md convention)\n source: z.string().optional(),\n user_inputs: z.array(UserInputSchema).optional(),\n\n metadata: SkillMetadataSchema.optional(),\n});\n\nexport type SkillManifest = z.infer<typeof SkillManifestSchema>;\n\nexport function validateSkill(data: unknown): ManifestValidationResult<SkillManifest> {\n return validateManifest(SkillManifestSchema, data);\n}\n","import { AGENT_BODY_PLACEHOLDER } from \"./agent.js\";\nimport { CONTRACT_BODY_PLACEHOLDER } from \"./contract.js\";\nimport { PRESET_DESCRIPTION_PLACEHOLDER } from \"./preset.js\";\nimport { PROMPT_BODY_PLACEHOLDER } from \"./prompt.js\";\nimport { SKILL_BODY_PLACEHOLDER, SKILL_DESCRIPTION_PLACEHOLDER_PREFIX } from \"./skill.js\";\n\n/** The `description:` `library create flow` writes when `--description` is omitted. */\nexport const FLOW_DESCRIPTION_PLACEHOLDER = \"Flow description\";\n\n/** The `instruction:` of the example node `library create flow` writes: the author replaces it (p489). */\nexport const FLOW_NODE_INSTRUCTION_PLACEHOLDER = \"TODO: tell the agent what to do in this step.\";\n\n/** The body `library create` writes per markdown kind. */\nconst BODY_PLACEHOLDER_BY_KIND: Record<string, string> = {\n skill: SKILL_BODY_PLACEHOLDER,\n agent: AGENT_BODY_PLACEHOLDER,\n prompt: PROMPT_BODY_PLACEHOLDER,\n contract: CONTRACT_BODY_PLACEHOLDER,\n};\n\n/**\n * True when `body` is the untouched text `library create` scaffolds for `kind` (skill, agent,\n * prompt, contract), under its `# <name>` heading or without, or has no text at all (front\n * matter only, or only the heading): an asset with no instructions is the scaffold with the\n * placeholder line deleted. A prompt, contract or agent scaffolded by an older CLI carries the\n * skill wording: the same untouched scaffold. `undefined` means the kind has no body file (an\n * `agent.yaml` without `SOUL.md`) and is no finding. One rule for `validate`, `library index`,\n * the publish plan and `add` (p926, p1205).\n */\nexport function isScaffoldBody(kind: string, body: string | undefined): boolean {\n const expected = BODY_PLACEHOLDER_BY_KIND[kind];\n if (expected === undefined || body === undefined) return false;\n const bodyText = body.replace(/^#[^\\n]*(?:\\n+|$)/, \"\").trim();\n return bodyText === \"\" || bodyText === SKILL_BODY_PLACEHOLDER || bodyText === expected;\n}\n\n/**\n * True when `description` is the untouched text `library create` scaffolds for `kind`: the `TODO:`\n * line of a skill, agent, prompt or contract, the generic flow line, the generic preset line.\n * The same rule `validate` and the publish plan fail, so `add` and `install` can name it (p926).\n */\nexport function isScaffoldDescription(kind: string, description: string | undefined): boolean {\n const text = description?.trim();\n if (!text) return false;\n if (kind === \"flow\") return text === FLOW_DESCRIPTION_PLACEHOLDER;\n if (kind === \"preset\") return text === PRESET_DESCRIPTION_PLACEHOLDER;\n return text.startsWith(SKILL_DESCRIPTION_PLACEHOLDER_PREFIX);\n}\n","import * as z from \"zod\";\nimport { type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\nexport const McpServerManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.union([z.string(), z.number()]).optional(),\n // \"http\" is the runtime literal the runner honours (StreamableHTTPClientTransport);\n // \"streamable-http\" is accepted as an MCP-spec-aligned alias and normalized to\n // \"http\" in mcpDeclFromCatalogEntry. Keep both until the alias is retired.\n transport: z.enum([\"stdio\", \"sse\", \"http\", \"streamable-http\"]).optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n url: z.string().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n /** Remote only: PEM CA certificate (or a secret ref to one) pinned for this server's TLS. */\n ca: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n // Optional runnable payload fetched + sha256-verified by the platform\n // session-materializer into the asset dir at materialize time (e.g. a bundled\n // server.js shipped as a GitHub release asset). `dest` defaults to the URL\n // basename.\n payload: z\n .object({\n // https only — bare `z.string().url()` also accepts file:/data:/javascript: schemes.\n url: z\n .string()\n .url()\n .refine((u) => u.startsWith(\"https://\"), { message: \"payload url must be https\" }),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n // Plain filename, no path separators — schema-level guard against a traversal dest.\n dest: z\n .string()\n .regex(/^[^/\\\\]+$/, { message: \"dest must be a plain filename, not a path\" })\n .refine((d) => d !== \".\" && d !== \"..\", { message: \"dest must be a plain filename\" })\n .optional(),\n })\n .optional(),\n});\n\nexport type McpServerManifest = z.infer<typeof McpServerManifestSchema>;\n\nexport function validateMcpServer(data: unknown): ManifestValidationResult<McpServerManifest> {\n return validateManifest(McpServerManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\nexport const PersonaManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type PersonaManifest = z.infer<typeof PersonaManifestSchema>;\n\nexport function validatePersona(data: unknown): ManifestValidationResult<PersonaManifest> {\n return validateManifest(PersonaManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\nexport const RulesetManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type RulesetManifest = z.infer<typeof RulesetManifestSchema>;\n\nexport function validateRuleset(data: unknown): ManifestValidationResult<RulesetManifest> {\n return validateManifest(RulesetManifestSchema, data);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../cli/src/harness-error.ts","../cli/src/helpers.ts"],"names":[],"mappings":"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","file":"chunk-76WSWPOB.js","sourcesContent":["import { listHarnesses } from \"@skaile/workspaces/bridge\";\nimport { SUPPORTED_HARNESSES } from \"@skaile/workspaces/core\";\nimport { Option } from \"commander\";\n\n/**\n * The refusal for a harness name nothing registers, or `undefined` when it is known. One check\n * for `run` (also with `--dry-run`, so the plan never names a harness the real run refuses),\n * `repl` and `config set harness` (p1022). Load the project's plugins first: a plugin's harness\n * counts. The line names the other command group's names too (p1753), see\n * {@link unknownHarnessTargetMessage}.\n */\nexport function unknownHarnessMessage(harness: string): string | undefined {\n const known = listHarnesses().map((d) => d.id);\n if (known.includes(harness)) return undefined;\n return (\n `Unknown agent harness: \"${harness}\". Available: ${known.join(\", \")}. ` +\n `${DEPLOY_COMMANDS} take: ${SUPPORTED_HARNESSES.join(\", \")}.`\n );\n}\n\n/** The commands that write harness files, so they take the harness targets only. */\nconst DEPLOY_COMMANDS = \"harness set, init --harness and add --harness\";\n\n/**\n * The refusal for a name that is no harness target, for the commands that deploy files\n * (`harness set`, `init --harness`, `add --harness`, `integration --harness`). Same wording as\n * {@link unknownHarnessMessage}: the list is the targets, and the line names the commands that\n * run a session and take every registered harness (p1753).\n *\n * @param harness - The name the user typed.\n * @param extra - Further names the command takes, such as `all`.\n */\nexport function unknownHarnessTargetMessage(\n harness: string,\n extra: readonly string[] = [],\n): string {\n const targets = [...SUPPORTED_HARNESSES, ...extra];\n const registered = listHarnesses().map((d) => d.id);\n return (\n `Unknown agent harness: \"${harness}\". Available: ${targets.join(\", \")}. ` +\n `run, repl and config set harness take: ${registered.join(\", \")}.`\n );\n}\n\nlet warnedDriverFlag = false;\n\n/** Print the `--driver` deprecation line to stderr, once per process. */\nexport function warnDriverFlagDeprecated(): void {\n if (warnedDriverFlag) return;\n warnedDriverFlag = true;\n console.error(\"--driver is deprecated; use --harness\");\n}\n\n/**\n * The hidden `--driver <name>` option every command with `--harness <name>` keeps for one\n * major release: an alias that sets the same value (`--harness` wins when both are given).\n */\nexport function driverAliasOption(): Option {\n return new Option(\"--driver <name>\", \"Deprecated alias of --harness\").hideHelp();\n}\n\n/**\n * Fold a parsed `--driver` alias into `harness`: when `--driver` was given, print the\n * deprecation line once and use its value unless `--harness` (or `fallback`, when neither\n * flag was given) already decided. Returns `opts` with `harness` set and `driver` removed.\n */\nexport function foldDriverFlag<T extends { harness?: string; driver?: string }>(\n opts: T,\n fallback?: string,\n): Omit<T, \"driver\"> & { harness?: string } {\n const { driver, ...rest } = opts;\n if (driver !== undefined) warnDriverFlagDeprecated();\n return { ...rest, harness: rest.harness ?? driver ?? fallback };\n}\n\n/**\n * Turn a harness-start/prompt failure into a friendly, actionable message when the\n * cause is a missing/unusable agent binary; otherwise return `null` so the caller\n * surfaces the raw error unchanged.\n *\n * The bridge classifies these as `category: \"config\"` and carries a `hint`, but the\n * shape reaching the CLI varies: omp's `start()` rejects with the raw spawn error\n * (`code === \"ENOENT\"`), while the subprocess CLI harnesses reject with the classified\n * `AgentError` attached under `.detail`. Duck-type across all of them.\n */\nexport function friendlyHarnessError(err: unknown): string | null {\n const e = err as\n | {\n code?: string;\n syscall?: string;\n message?: string;\n category?: string;\n hint?: string;\n detail?: { category?: string; hint?: string };\n }\n | null\n | undefined;\n if (!e) return null;\n\n // A missing binary is a *spawn* ENOENT (`syscall: \"spawn <bin>\"` / \"spawn … ENOENT\");\n // a bare ENOENT from connector/mount setup is a different failure, not the harness.\n const isSpawnEnoent =\n e.code === \"ENOENT\" &&\n (e.syscall?.startsWith(\"spawn\") === true || /^spawn .*ENOENT/.test(e.message ?? \"\"));\n const isConfig = e.category === \"config\" || e.detail?.category === \"config\";\n if (!isSpawnEnoent && !isConfig) return null;\n\n const hint = e.hint ?? e.detail?.hint;\n const base = hint ?? \"The configured agent binary is not installed or not on your PATH.\";\n return `${base}\\nTry a different harness with \\`--harness claude-sdk\\`.`;\n}\n\n/**\n * Lines that follow the single `✗` line of a failed turn: the classifier's hint\n * (or, for a rejected credential, a pointer at the key), and where the full\n * records are. The JSON records themselves are not printed on the terminal:\n * they live in the project's log database. The pointer names the session whose records\n * the failure left (`logSessionId`); a failure before any session started has none and\n * gets no pointer.\n */\nexport function harnessErrorNotes(err: unknown): string[] {\n const e = err as\n | {\n category?: string;\n hint?: string;\n logSessionId?: string;\n detail?: { category?: string; hint?: string };\n }\n | null\n | undefined;\n const notes: string[] = [];\n const category = e?.category ?? e?.detail?.category;\n const hint = e?.hint ?? e?.detail?.hint;\n if (hint && category !== \"config\") notes.push(hint);\n else if (category === \"auth\") notes.push(\"Check your API key or login.\");\n if (e?.logSessionId) {\n notes.push(`Full records: .skaile/logs.db (skaile session logs ${e.logSessionId}).`);\n }\n return notes;\n}\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport { softDepName } from \"@skaile/workspaces/asset-manager\";\nimport {\n type HarnessName,\n resolveSkWorkspaceConfig,\n SKAILE_YAML_DEFAULT,\n SUPPORTED_HARNESSES,\n} from \"@skaile/workspaces/core\";\nimport pc from \"picocolors\";\nimport { unknownHarnessTargetMessage } from \"./harness-error.ts\";\n\n/**\n * Terminal styling helpers used across all CLI commands.\n *\n * @docLink cli/dev-guide#helpers\n */\nexport const S = {\n brand: (s: string) => pc.cyan(pc.bold(s)),\n cmd: (s: string) => pc.cyan(s),\n heading: (s: string) => pc.bold(s),\n bold: (s: string) => pc.bold(s),\n dim: (s: string) => pc.dim(s),\n ok: (s: string) => pc.green(s),\n warn: (s: string) => pc.yellow(s),\n err: (s: string) => pc.red(s),\n label: (s: string) => pc.dim(s),\n rule: (w = 40) => pc.dim(\"─\".repeat(w)),\n};\n\nconst KIND_COLORS: Record<string, (s: string) => string> = {\n skill: pc.blue,\n agent: pc.magenta,\n prompt: pc.yellow,\n flow: pc.green,\n preset: pc.cyan,\n contract: pc.red,\n connector: pc.green,\n knowledge: pc.cyan,\n persona: pc.cyan,\n ruleset: pc.cyan,\n \"mcp-server\": pc.magenta,\n};\n\n/**\n * Fit a plain (ANSI-free) string into exactly `width` columns: truncate with a\n * trailing `…` when too long, pad with spaces when too short. Keeps fixed-width\n * columns from overflowing the row when a value (e.g. an asset name) is wider\n * than its budget.\n */\nexport function fitWidth(s: string, width: number): string {\n if (width <= 0) return \"\";\n if (s.length > width) return width === 1 ? \"…\" : `${s.slice(0, width - 1)}…`;\n return s.padEnd(width);\n}\n\n/** Color-code an asset kind string. */\nexport function kindColor(kind: string): string {\n const colorFn = KIND_COLORS[kind] ?? pc.dim;\n return colorFn(kind);\n}\n\n/**\n * Widest kind label (`mcp-server`); the default kind-column width fits it so\n * long kinds don't shove the rest of the row out of alignment.\n */\nexport const KIND_COL_WIDTH = 10;\n\n/**\n * Shared `--target` help suffix: with no flag, the manager deploys into the\n * harness the project is configured for (the harness `skaile config show`\n * resolves), and only then falls back to `claude-code`.\n */\nexport const TARGET_DEFAULT_HINT = \"default: the project's configured harness, else claude-code\";\n\n/**\n * Color-code an asset kind string fit to exactly `width` columns — pads short\n * kinds, truncates over-long ones (via {@link fitWidth}) so the column can never\n * overflow and break row alignment.\n */\nexport function kindColorPad(kind: string, width = KIND_COL_WIDTH): string {\n const colorFn = KIND_COLORS[kind] ?? pc.dim;\n return colorFn(fitWidth(kind, width));\n}\n\n/** Color-code a \"kind:name\" reference string. */\nexport function colorRef(ref: string): string {\n const colonIdx = ref.indexOf(\":\");\n if (colonIdx === -1) return ref;\n const kind = ref.slice(0, colonIdx);\n const rest = ref.slice(colonIdx);\n return `${kindColor(kind)}${rest}`;\n}\n\n/**\n * Print a success line prefixed with a green check mark.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logOk(msg: string) {\n console.log(` ${pc.green(\"✓\")} ${msg}`);\n}\n/**\n * Print an error line prefixed with a red cross to stderr.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logErr(msg: string) {\n console.error(` ${pc.red(\"✗\")} ${msg}`);\n}\n/**\n * Print a warning line prefixed with a yellow exclamation mark.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logWarn(msg: string) {\n console.log(` ${pc.yellow(\"!\")} ${msg}`);\n}\n/**\n * Like {@link logWarn}, on stderr: a warning about the run itself (an asset scan that stopped\n * early) that must not land in the output a script reads from stdout.\n *\n * @param msg - Message to display.\n */\nexport function logWarnErr(msg: string) {\n console.error(` ${pc.yellow(\"!\")} ${msg}`);\n}\n/**\n * One `!` line per deployed library asset whose body or description is still the untouched\n * `library create` scaffold: `validate` and the publish plan fail both, so `add`, `install` and\n * `update` name every placeholder they fail (p926).\n *\n * @param bodies - Canonical refs the asset manager reported as placeholder bodies.\n * @param descriptions - Canonical refs the asset manager reported as placeholder descriptions.\n */\nexport function warnPlaceholderBodies(\n bodies: readonly string[] | undefined,\n descriptions?: readonly string[],\n) {\n const refs = [...new Set([...(bodies ?? []), ...(descriptions ?? [])])];\n for (const ref of refs) {\n const parts = [\n ...(descriptions?.includes(ref) ? [\"description\"] : []),\n ...(bodies?.includes(ref) ? [\"body\"] : []),\n ];\n const both = parts.length > 1;\n logWarn(\n `${ref} ${parts.join(\" and \")} ${both ? \"are\" : \"is\"} still the scaffold placeholder; write ${both ? \"them\" : \"it\"} (\\`skaile validate\\` fails ${both ? \"them\" : \"it\"})`,\n );\n }\n}\n/**\n * Print an info line prefixed with a dim dot.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logInfo(msg: string) {\n console.log(` ${pc.dim(\"·\")} ${msg}`);\n}\n\n/** Full command path of the command being run (`harness set`), set before its action runs. */\nlet activeCommandPath: string | undefined;\n\n/**\n * Record the command that is about to run, as the path of subcommand names from the root\n * (`harness set`), so advice that repeats the command shows the whole path (p1656).\n */\nexport function setActiveCommand(cmd: { name(): string; parent: unknown }): void {\n const names: string[] = [];\n for (\n let c: { name(): string; parent: unknown } | null = cmd;\n c && c.parent;\n c = c.parent as { name(): string; parent: unknown } | null\n ) {\n names.unshift(c.name());\n }\n activeCommandPath = names.length > 0 ? names.join(\" \") : undefined;\n}\n\n/** The nearest parent directory of `dir` that holds a `skaile.yaml`, or `undefined`. */\nfunction nearestParentProject(dir: string): string | undefined {\n for (let up = path.dirname(dir); up !== dir; dir = up, up = path.dirname(dir)) {\n if (existsSync(path.join(up, SKAILE_YAML_DEFAULT))) return up;\n }\n return undefined;\n}\n\n/**\n * Print the `No skaile.yaml found` line for `projectDir`, plus a second line naming the nearest\n * parent directory that holds a `skaile.yaml`, when there is one: skaile does not search parent\n * directories. The line shows `--project-dir` after the full command path (`skaile harness set\n * --project-dir /x`), the only place the option is accepted (p1656).\n */\nexport function logNoProject(projectDir: string): void {\n const dir = path.resolve(projectDir);\n logErr(`No ${S.cmd(\"skaile.yaml\")} found. Run ${S.cmd(\"skaile init\")} to create one.`);\n const parent = nearestParentProject(dir);\n if (parent) {\n const command =\n activeCommandPath ?? process.argv.slice(2).find((a) => !a.startsWith(\"-\")) ?? \"<command>\";\n logErr(\n `${S.cmd(parent)} holds a ${S.cmd(\"skaile.yaml\")}: run from there or put the option after the command name: ${S.cmd(`skaile ${command} --project-dir ${parent}`)}.`,\n );\n }\n}\n\n/**\n * Stop a project command that has no usable project: print one `✗` line and exit 1, before\n * the command deploys, undeploys, locks or clones anything. Two causes: no `skaile.yaml` in\n * `projectDir` (`No skaile.yaml found`), or a `skaile.yaml` — project, app or user scope —\n * that does not parse (`<file> — parse error: …`, a duplicate key included). Without this a\n * broken file would read as \"nothing declared\" and `install` would undeploy every asset.\n *\n * Library-level commands (`library …`, `search`, `init`) have no project and do not call it.\n */\nexport function requireProjectConfig(\n projectDir: string,\n opts: { allowMissing?: boolean } = {},\n): void {\n const dir = path.resolve(projectDir);\n if (!existsSync(path.join(dir, SKAILE_YAML_DEFAULT))) {\n if (opts.allowMissing) return;\n logNoProject(dir);\n process.exit(1);\n }\n try {\n resolveSkWorkspaceConfig(dir);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\n/**\n * Hold warnings raised while a spinner animates and print them once it stops:\n * on a TTY a line written mid-spin is overwritten by the next frame. Pass\n * `push` as `AssetManager`'s `onLibraryCollision`, call `flush()` after\n * `spinner.stop(...)`. Warnings pushed after `flush()` print immediately.\n */\nexport function deferredWarnings(): { push: (msg: string) => void; flush: () => void } {\n const held: string[] = [];\n let live = false;\n return {\n push: (msg) => {\n if (live) logWarn(msg);\n else held.push(msg);\n },\n flush: () => {\n for (const msg of held.splice(0)) logWarn(msg);\n live = true;\n },\n };\n}\n\n/** Max stale copies of one harness named inline by {@link warnStaleHarnessCopies}. */\nconst STALE_COPY_LIST_MAX = 5;\n\n/**\n * Print one warning per harness whose project dir (`.claude/`, `.omp/`, `.codex/`) still holds\n * copies of tracked assets although the project deploys to another harness: after `skaile\n * harness set`, or when a project moved off the old default. Those copies are orphans: `remove`\n * / `clean` / `list` only look in the active harness dir. Nothing is deleted. Silent when there\n * are none.\n */\nexport function warnStaleHarnessCopies(am: {\n projectDir: string;\n harness: string;\n listStaleHarnessCopies(): Array<{ harness: HarnessName; path: string }>;\n}): void {\n let stale: Array<{ harness: HarnessName; path: string }>;\n try {\n stale = am.listStaleHarnessCopies();\n } catch {\n return; // advisory only — never fail the command\n }\n for (const harness of SUPPORTED_HARNESSES) {\n const rel = stale\n .filter((s) => s.harness === harness)\n .map((s) => path.relative(am.projectDir, s.path));\n if (rel.length === 0) continue;\n const dir = `${rel[0]?.split(path.sep)[0] ?? harness}/`;\n const shown = rel.slice(0, STALE_COPY_LIST_MAX).join(\", \");\n const more =\n rel.length > STALE_COPY_LIST_MAX ? `, +${rel.length - STALE_COPY_LIST_MAX} more` : \"\";\n logWarn(\n `Stale ${S.cmd(dir)} copies no longer managed (deploying to ${am.harness}): ${shown}${more}. ` +\n `Delete them once ${S.cmd(\"skaile install\")} has deployed to ${am.harness}, or pass ${S.cmd(`--target ${harness}`)} to keep using ${dir}.`,\n );\n }\n}\n\n/**\n * Bare asset name of a canonical soft-dep target ref (`@pub/name@ver` → `name`),\n * for compact rendering in `info` / `tree` / `why`. Delegates to the asset-manager\n * parser (the soft-dep read surface) so the two never diverge.\n */\nexport function bareSoftDepName(ref: string): string {\n return softDepName(ref);\n}\n\n/**\n * The report-only soft-dep hint line shared by the `add` no-TTY branch and the\n * `install` surface, so the two user-facing wordings can't drift. Appends a\n * runnable `skaile add` suffix only when the target has a parseable ref.\n */\nexport function formatSoftDepHint(edge: { from: string; to: string; toRef?: string }): string {\n const suffix = edge.toRef ? ` — run \\`skaile add ${edge.toRef}\\` to include it.` : \"\";\n return `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency)${suffix}`;\n}\n\n/**\n * Build the \"Soft dependencies (inferred)\" section for `skaile info`. Returns one\n * header line plus one line per soft-dep target, each marked `(soft)` to read\n * differently from a typed `requires`. Empty array when there are no soft deps,\n * so the caller prints nothing.\n */\nexport function formatSoftDepSection(targets: string[]): string[] {\n if (targets.length === 0) return [];\n const out = [` ${S.label(\"Soft dependencies (inferred)\")}:`];\n for (const t of targets) out.push(` ${S.dim(\"·\")} ${t} ${S.dim(\"(soft)\")}`);\n return out;\n}\n\n/**\n * Footer line previewing the soft deps that *adding* the highlighted asset would\n * reference (manage TUI). \"references\" + \"not auto-added\" makes clear the pull is\n * report-only. Empty string when there are no targets, so the caller clears.\n */\nexport function formatSoftDepAddPreview(name: string, targets: string[]): string {\n if (targets.length === 0) return \"\";\n return S.dim(`${name} references ${targets.join(\", \")} (soft dep, not auto-added)`);\n}\n\n/**\n * Footer line previewing the soft deps that *removing* the highlighted asset\n * would orphan (manage TUI) — symmetric with {@link formatSoftDepAddPreview}.\n * Empty string when nothing would be orphaned, so the caller clears.\n */\nexport function formatSoftDepRemovePreview(name: string, targets: string[]): string {\n if (targets.length === 0) return \"\";\n return S.dim(`removing ${name} would orphan ${targets.join(\", \")} (soft dep)`);\n}\n\n/** Format a Date as a human-readable relative time string (e.g. \"5m ago\"). */\nexport function formatRelativeTime(date: Date): string {\n const diff = Date.now() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n if (seconds < 60) return \"just now\";\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n\n/** Name the old `~/.omp/<dir>` copies a global deploy replaced (omp reads `~/.omp/agent/<dir>`). */\nexport function reportLegacyOmpCopies(removed: string[], kept: string[] = []): void {\n for (const p of removed) {\n logInfo(\n S.dim(`removed the old omp copy ${p.replace(homedir(), \"~\")} (omp reads ~/.omp/agent)`),\n );\n }\n for (const p of kept) {\n logWarn(\n `${p.replace(homedir(), \"~\")} is an old omp location and skaile did not write this copy, so it was kept: delete it if you do not need it`,\n );\n }\n}\n\n/**\n * Parse a `--harness a,b` value into validated {@link HarnessName}s, exiting on\n * an unknown id. Returns `undefined` when the flag is absent (the caller then\n * resolves the full global harness set).\n */\nexport function parseHarnessFilter(raw: string | undefined): HarnessName[] | undefined {\n if (!raw) return undefined;\n const ids = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const out: HarnessName[] = [];\n for (const id of ids) {\n if (!(SUPPORTED_HARNESSES as string[]).includes(id)) {\n logErr(unknownHarnessTargetMessage(id));\n process.exit(1);\n }\n out.push(id as HarnessName);\n }\n return out.length > 0 ? out : undefined;\n}\n\n/** The sentence the agent renderer puts into a delegate sub-agent's file (`asset-manager` fragments). */\nconst SUB_AGENT_MARKER = \"You are a sub-agent:\";\n\n/**\n * One line when a Codex project holds delegate sub-agents. Codex does not load\n * `.codex/agents/*.toml` as spawnable agents (its `spawn_agent` has no `agent_type`), so the\n * delegate exists only as a file there and the orchestrator cannot call it (p428). A delegate is\n * found by the sentence the renderer writes into its file. Silent for every other harness.\n */\nexport function warnFilesOnlyDelegates(projectDir: string, target: string): void {\n if (target !== \"codex\") return;\n const dir = path.join(projectDir, \".codex\", \"skaile-agents\");\n let names: string[];\n try {\n names = readdirSync(dir).filter((f) => f.endsWith(\".md\"));\n } catch {\n return;\n }\n const delegates = names\n .filter((f) => {\n try {\n return readFileSync(path.join(dir, f), \"utf8\").includes(SUB_AGENT_MARKER);\n } catch {\n return false;\n }\n })\n .map((f) => f.replace(/\\.md$/, \"\"))\n .sort();\n if (delegates.length === 0) return;\n logWarn(\n `codex: delegate agents are files only (${delegates.join(\", \")}): Codex does not load .codex/agents as sub-agents, so the orchestrator cannot call them`,\n );\n}\n"]}