@skaile/workspaces 5.18.1 → 6.0.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 (746) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +8 -8
  3. package/dist/app-sdk/index.js +1 -1
  4. package/dist/{asset-feeds-MKB5JUML.js → asset-feeds-PXUWCXVI.js} +21 -21
  5. package/dist/{asset-feeds-MKB5JUML.js.map → asset-feeds-PXUWCXVI.js.map} +1 -1
  6. package/dist/asset-manager/catalog-deployer.js +10 -10
  7. package/dist/asset-manager/index.js +17 -17
  8. package/dist/asset-manager/installer.js +13 -13
  9. package/dist/asset-manager/renderers.js +12 -12
  10. package/dist/asset-manager/src/index.d.ts +113 -24
  11. package/dist/asset-manager/src/index.d.ts.map +1 -1
  12. package/dist/asset-manager/src/install-agent.d.ts +2 -2
  13. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  14. package/dist/asset-manager/src/install-instances.d.ts +8 -8
  15. package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
  16. package/dist/asset-manager/src/installer.d.ts +3 -3
  17. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  18. package/dist/asset-manager/src/mcp-config.d.ts +39 -13
  19. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  20. package/dist/asset-manager/src/renderers.d.ts +12 -12
  21. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  22. package/dist/bridge/codex-app-server.js +2 -2
  23. package/dist/bridge/harnesses/claude-sdk.d.ts +2 -0
  24. package/dist/bridge/{drivers → harnesses}/claude-sdk.js +75 -73
  25. package/dist/bridge/harnesses/claude-sdk.js.map +1 -0
  26. package/dist/bridge/{drivers/gemini.d.ts → harnesses/codex.d.ts} +1 -1
  27. package/dist/bridge/{drivers → harnesses}/codex.js +52 -52
  28. package/dist/bridge/harnesses/codex.js.map +1 -0
  29. package/dist/bridge/{drivers/claude-sdk.d.ts → harnesses/continue.d.ts} +1 -1
  30. package/dist/bridge/{drivers → harnesses}/continue.js +29 -29
  31. package/dist/bridge/harnesses/continue.js.map +1 -0
  32. package/dist/bridge/{drivers → harnesses}/echo.d.ts +1 -1
  33. package/dist/bridge/{drivers → harnesses}/echo.js +27 -27
  34. package/dist/bridge/harnesses/echo.js.map +1 -0
  35. package/dist/bridge/{drivers/continue.d.ts → harnesses/gemini.d.ts} +1 -1
  36. package/dist/bridge/harnesses/gemini.js +18 -0
  37. package/dist/bridge/{drivers → harnesses}/goose.d.ts +1 -1
  38. package/dist/bridge/{drivers → harnesses}/goose.js +29 -29
  39. package/dist/bridge/harnesses/goose.js.map +1 -0
  40. package/dist/bridge/{drivers → harnesses}/omp.d.ts +1 -1
  41. package/dist/bridge/{drivers → harnesses}/omp.js +43 -485
  42. package/dist/bridge/harnesses/omp.js.map +1 -0
  43. package/dist/bridge/{drivers → harnesses}/opencode.d.ts +1 -1
  44. package/dist/bridge/{drivers → harnesses}/opencode.js +30 -30
  45. package/dist/bridge/harnesses/opencode.js.map +1 -0
  46. package/dist/bridge/{drivers → harnesses}/qwen.d.ts +1 -1
  47. package/dist/bridge/{drivers → harnesses}/qwen.js +20 -20
  48. package/dist/bridge/harnesses/qwen.js.map +1 -0
  49. package/dist/bridge/index.js +24 -22
  50. package/dist/bridge/src/agent-exec.d.ts +2 -2
  51. package/dist/bridge/src/agent-transcript.d.ts +1 -1
  52. package/dist/bridge/src/agent-transcript.d.ts.map +1 -1
  53. package/dist/bridge/src/approval-card.d.ts +3 -3
  54. package/dist/bridge/src/capability-dispatch.d.ts +5 -5
  55. package/dist/bridge/src/cloud.d.ts +4 -4
  56. package/dist/bridge/src/codex/config-toml.d.ts +3 -3
  57. package/dist/bridge/src/codex/friendly-error.d.ts +1 -1
  58. package/dist/bridge/src/codex/friendly-error.d.ts.map +1 -1
  59. package/dist/bridge/src/codex/{managed-driver.d.ts → managed-harness.d.ts} +5 -5
  60. package/dist/bridge/src/codex/managed-harness.d.ts.map +1 -0
  61. package/dist/bridge/src/codex/native-approvals.d.ts +1 -1
  62. package/dist/bridge/src/codex/native-approvals.d.ts.map +1 -1
  63. package/dist/bridge/src/error-classifier.d.ts +7 -7
  64. package/dist/bridge/src/{driver-capabilities.d.ts → harness-capabilities.d.ts} +18 -18
  65. package/dist/bridge/src/harness-capabilities.d.ts.map +1 -0
  66. package/dist/bridge/src/harness-model-check.d.ts +25 -0
  67. package/dist/bridge/src/harness-model-check.d.ts.map +1 -0
  68. package/dist/bridge/src/{drivers → harnesses}/_subprocess-cli.d.ts +8 -8
  69. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -0
  70. package/dist/bridge/src/{drivers → harnesses}/claude-context-usage.d.ts +5 -5
  71. package/dist/bridge/src/harnesses/claude-context-usage.d.ts.map +1 -0
  72. package/dist/bridge/src/{drivers → harnesses}/claude-sdk.d.ts +27 -27
  73. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -0
  74. package/dist/bridge/src/{drivers → harnesses}/claude-self-turns.d.ts +5 -5
  75. package/dist/bridge/src/harnesses/claude-self-turns.d.ts.map +1 -0
  76. package/dist/bridge/src/{drivers → harnesses}/claude-tool-allowlist.d.ts +4 -4
  77. package/dist/bridge/src/harnesses/claude-tool-allowlist.d.ts.map +1 -0
  78. package/dist/bridge/src/{drivers → harnesses}/codex.d.ts +14 -14
  79. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -0
  80. package/dist/bridge/src/{drivers → harnesses}/continue.d.ts +12 -12
  81. package/dist/bridge/src/harnesses/continue.d.ts.map +1 -0
  82. package/dist/bridge/src/{drivers → harnesses}/echo.d.ts +16 -16
  83. package/dist/bridge/src/harnesses/echo.d.ts.map +1 -0
  84. package/dist/bridge/src/{drivers → harnesses}/flow-script.d.ts +9 -9
  85. package/dist/bridge/src/harnesses/flow-script.d.ts.map +1 -0
  86. package/dist/bridge/src/{drivers → harnesses}/gemini.d.ts +15 -15
  87. package/dist/bridge/src/harnesses/gemini.d.ts.map +1 -0
  88. package/dist/bridge/src/{drivers → harnesses}/goose.d.ts +10 -10
  89. package/dist/bridge/src/harnesses/goose.d.ts.map +1 -0
  90. package/dist/bridge/src/{drivers → harnesses}/omp-models-yml.d.ts +23 -12
  91. package/dist/bridge/src/harnesses/omp-models-yml.d.ts.map +1 -0
  92. package/dist/bridge/src/{drivers → harnesses}/omp.d.ts +23 -23
  93. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -0
  94. package/dist/bridge/src/{drivers → harnesses}/opencode.d.ts +11 -11
  95. package/dist/bridge/src/harnesses/opencode.d.ts.map +1 -0
  96. package/dist/bridge/src/{drivers → harnesses}/qwen.d.ts +12 -12
  97. package/dist/bridge/src/harnesses/qwen.d.ts.map +1 -0
  98. package/dist/bridge/src/{drivers → harnesses}/recovery-policy.d.ts +4 -4
  99. package/dist/bridge/src/harnesses/recovery-policy.d.ts.map +1 -0
  100. package/dist/bridge/src/{drivers → harnesses}/resume-probe.d.ts +3 -3
  101. package/dist/bridge/src/harnesses/resume-probe.d.ts.map +1 -0
  102. package/dist/bridge/src/{drivers → harnesses}/sanitize-assistant-text.d.ts +1 -1
  103. package/dist/bridge/src/harnesses/sanitize-assistant-text.d.ts.map +1 -0
  104. package/dist/bridge/src/{drivers → harnesses}/scrub-transcript.d.ts +1 -1
  105. package/dist/bridge/src/harnesses/scrub-transcript.d.ts.map +1 -0
  106. package/dist/bridge/src/index.d.ts +4 -4
  107. package/dist/bridge/src/index.d.ts.map +1 -1
  108. package/dist/bridge/src/logger.d.ts +4 -4
  109. package/dist/bridge/src/models.d.ts +1 -1
  110. package/dist/bridge/src/normalizer.d.ts +2 -2
  111. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +5 -5
  112. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
  113. package/dist/bridge/src/provider-materialize/credential-env.d.ts +3 -3
  114. package/dist/bridge/src/provider-materialize/{env-drivers.d.ts → env-harnesses.d.ts} +19 -19
  115. package/dist/bridge/src/provider-materialize/env-harnesses.d.ts.map +1 -0
  116. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +5 -5
  117. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts.map +1 -1
  118. package/dist/bridge/src/provider-materialize/opencode-config.d.ts +7 -7
  119. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
  120. package/dist/bridge/src/provider-materialize/session-config-home.d.ts +5 -5
  121. package/dist/bridge/src/provider-materialize/session-config-home.d.ts.map +1 -1
  122. package/dist/bridge/src/provider-registry-derive.d.ts +4 -4
  123. package/dist/bridge/src/provider-registry-derive.d.ts.map +1 -1
  124. package/dist/bridge/src/reconfigure-ledger.d.ts +8 -8
  125. package/dist/bridge/src/reconfigure-ledger.d.ts.map +1 -1
  126. package/dist/bridge/src/registry.d.ts +34 -41
  127. package/dist/bridge/src/registry.d.ts.map +1 -1
  128. package/dist/bridge/src/runner-private-env.d.ts +2 -2
  129. package/dist/bridge/src/runtime.d.ts +11 -11
  130. package/dist/bridge/src/runtime.d.ts.map +1 -1
  131. package/dist/bridge/src/types.d.ts +158 -158
  132. package/dist/bridge/src/types.d.ts.map +1 -1
  133. package/dist/{chunk-CKBCX3HQ.js → chunk-2UUKCROR.js} +4 -4
  134. package/dist/{chunk-CKBCX3HQ.js.map → chunk-2UUKCROR.js.map} +1 -1
  135. package/dist/{chunk-7ANRSTNR.js → chunk-3IXIEHUB.js} +36 -17
  136. package/dist/chunk-3IXIEHUB.js.map +1 -0
  137. package/dist/{chunk-YZ3N7IUU.js → chunk-3JKGY2YC.js} +91 -55
  138. package/dist/chunk-3JKGY2YC.js.map +1 -0
  139. package/dist/{chunk-X5YPJV4N.js → chunk-3MWQKQUB.js} +2 -2
  140. package/dist/{chunk-X5YPJV4N.js.map → chunk-3MWQKQUB.js.map} +1 -1
  141. package/dist/{chunk-EPBKISS5.js → chunk-3TG2NV2F.js} +2 -2
  142. package/dist/chunk-3TG2NV2F.js.map +1 -0
  143. package/dist/{chunk-L2AMXONH.js → chunk-3X7VTCPG.js} +2 -2
  144. package/dist/chunk-3X7VTCPG.js.map +1 -0
  145. package/dist/{chunk-3KMREAR2.js → chunk-4DWBSTYA.js} +24 -24
  146. package/dist/chunk-4DWBSTYA.js.map +1 -0
  147. package/dist/{chunk-YARXR3CN.js → chunk-4XWLB7JB.js} +52 -46
  148. package/dist/chunk-4XWLB7JB.js.map +1 -0
  149. package/dist/{chunk-5TBFN46Z.js → chunk-5KRMNUL4.js} +4 -4
  150. package/dist/chunk-5KRMNUL4.js.map +1 -0
  151. package/dist/{chunk-YIF2IJUA.js → chunk-6GWSDPBP.js} +3 -3
  152. package/dist/{chunk-YIF2IJUA.js.map → chunk-6GWSDPBP.js.map} +1 -1
  153. package/dist/{chunk-BBWSGVVE.js → chunk-7CV3HFWJ.js} +5 -5
  154. package/dist/chunk-7CV3HFWJ.js.map +1 -0
  155. package/dist/{chunk-YROR332M.js → chunk-7DN6JKP2.js} +2 -2
  156. package/dist/chunk-7DN6JKP2.js.map +1 -0
  157. package/dist/{chunk-IZCR27MU.js → chunk-7EKQDY2T.js} +3 -3
  158. package/dist/chunk-7EKQDY2T.js.map +1 -0
  159. package/dist/{chunk-VOBXINUZ.js → chunk-7TPYPVAH.js} +4 -4
  160. package/dist/{chunk-VOBXINUZ.js.map → chunk-7TPYPVAH.js.map} +1 -1
  161. package/dist/{chunk-U2FI547Z.js → chunk-7XSAW5OC.js} +3 -3
  162. package/dist/{chunk-U2FI547Z.js.map → chunk-7XSAW5OC.js.map} +1 -1
  163. package/dist/{chunk-ICSCSM5D.js → chunk-ADPM6AYF.js} +3 -3
  164. package/dist/{chunk-ICSCSM5D.js.map → chunk-ADPM6AYF.js.map} +1 -1
  165. package/dist/{chunk-LW7ZI6EQ.js → chunk-AF432MS3.js} +3 -3
  166. package/dist/chunk-AF432MS3.js.map +1 -0
  167. package/dist/{chunk-WJLYL6RY.js → chunk-ARWKK325.js} +5 -5
  168. package/dist/{chunk-WJLYL6RY.js.map → chunk-ARWKK325.js.map} +1 -1
  169. package/dist/{chunk-AJ7EGIFR.js → chunk-BIRW3HOG.js} +3 -3
  170. package/dist/chunk-BIRW3HOG.js.map +1 -0
  171. package/dist/{chunk-X3AUS4RW.js → chunk-DHYSUJ3H.js} +4 -4
  172. package/dist/{chunk-X3AUS4RW.js.map → chunk-DHYSUJ3H.js.map} +1 -1
  173. package/dist/{chunk-SRNCN4X2.js → chunk-DUMTLYSO.js} +10 -10
  174. package/dist/chunk-DUMTLYSO.js.map +1 -0
  175. package/dist/{chunk-GOK4QRJR.js → chunk-E3GPGTW3.js} +8 -8
  176. package/dist/chunk-E3GPGTW3.js.map +1 -0
  177. package/dist/{chunk-CKNIYIV2.js → chunk-E572OHGY.js} +5 -5
  178. package/dist/chunk-E572OHGY.js.map +1 -0
  179. package/dist/{chunk-KY4UXX7M.js → chunk-F2GOZMRA.js} +63 -64
  180. package/dist/chunk-F2GOZMRA.js.map +1 -0
  181. package/dist/{chunk-6E6PKKAD.js → chunk-G5SUWZEU.js} +18 -8
  182. package/dist/chunk-G5SUWZEU.js.map +1 -0
  183. package/dist/{chunk-7FHZB2QU.js → chunk-GEQSUC6U.js} +12 -12
  184. package/dist/chunk-GEQSUC6U.js.map +1 -0
  185. package/dist/{chunk-AIBAOXDU.js → chunk-GN4VVSAA.js} +18 -18
  186. package/dist/chunk-GN4VVSAA.js.map +1 -0
  187. package/dist/{chunk-XTO436PV.js → chunk-HK7HMEPT.js} +13 -13
  188. package/dist/chunk-HK7HMEPT.js.map +1 -0
  189. package/dist/{chunk-Y56YIT6J.js → chunk-JCPD4QRM.js} +4 -4
  190. package/dist/chunk-JCPD4QRM.js.map +1 -0
  191. package/dist/{chunk-GBYNC5V3.js → chunk-JDR6ILCW.js} +4 -4
  192. package/dist/chunk-JDR6ILCW.js.map +1 -0
  193. package/dist/{chunk-K4O6L3WH.js → chunk-KNY356I3.js} +3 -3
  194. package/dist/{chunk-K4O6L3WH.js.map → chunk-KNY356I3.js.map} +1 -1
  195. package/dist/{chunk-4ZTPYIBE.js → chunk-KW37WNXY.js} +12 -12
  196. package/dist/chunk-KW37WNXY.js.map +1 -0
  197. package/dist/{chunk-BO426QWN.js → chunk-KX2PT5Q4.js} +8 -8
  198. package/dist/chunk-KX2PT5Q4.js.map +1 -0
  199. package/dist/{chunk-T2TQAH2X.js → chunk-L4YKW5AY.js} +105 -38
  200. package/dist/chunk-L4YKW5AY.js.map +1 -0
  201. package/dist/{chunk-WJCQFNF6.js → chunk-LN6QB7XI.js} +3 -3
  202. package/dist/{chunk-WJCQFNF6.js.map → chunk-LN6QB7XI.js.map} +1 -1
  203. package/dist/{chunk-MJHSLODD.js → chunk-LSI2IVFT.js} +2 -2
  204. package/dist/chunk-LSI2IVFT.js.map +1 -0
  205. package/dist/{chunk-2ABUJYVI.js → chunk-MCUJTNY5.js} +3 -3
  206. package/dist/{chunk-2ABUJYVI.js.map → chunk-MCUJTNY5.js.map} +1 -1
  207. package/dist/{chunk-A2ULN3KX.js → chunk-MWXYN6NY.js} +2 -2
  208. package/dist/{chunk-A2ULN3KX.js.map → chunk-MWXYN6NY.js.map} +1 -1
  209. package/dist/{chunk-EAZECHPM.js → chunk-NBAGV6L2.js} +5 -5
  210. package/dist/chunk-NBAGV6L2.js.map +1 -0
  211. package/dist/{chunk-U7V5SIFW.js → chunk-NMI2TWMH.js} +46 -18
  212. package/dist/chunk-NMI2TWMH.js.map +1 -0
  213. package/dist/{chunk-VM3PH7BB.js → chunk-OAHVKSQJ.js} +604 -178
  214. package/dist/chunk-OAHVKSQJ.js.map +1 -0
  215. package/dist/{chunk-2NOLF7B2.js → chunk-OHNKYHRR.js} +53 -17
  216. package/dist/chunk-OHNKYHRR.js.map +1 -0
  217. package/dist/{chunk-KC6HGWXN.js → chunk-OTIB4D2K.js} +3 -3
  218. package/dist/{chunk-KC6HGWXN.js.map → chunk-OTIB4D2K.js.map} +1 -1
  219. package/dist/{chunk-WMF2C5U7.js → chunk-OULSJRXV.js} +17 -17
  220. package/dist/chunk-OULSJRXV.js.map +1 -0
  221. package/dist/{chunk-HPVMTX6M.js → chunk-QOM5Z62G.js} +47 -12
  222. package/dist/chunk-QOM5Z62G.js.map +1 -0
  223. package/dist/{chunk-ZBMC6IAE.js → chunk-SNEE6UGY.js} +33 -32
  224. package/dist/chunk-SNEE6UGY.js.map +1 -0
  225. package/dist/{chunk-RD6N2D7I.js → chunk-SRODW6M2.js} +4 -4
  226. package/dist/{chunk-RD6N2D7I.js.map → chunk-SRODW6M2.js.map} +1 -1
  227. package/dist/{chunk-D6UBEYQH.js → chunk-SZXGRHQQ.js} +6 -6
  228. package/dist/chunk-SZXGRHQQ.js.map +1 -0
  229. package/dist/{chunk-X6GUNN7X.js → chunk-T2BDID2J.js} +39 -39
  230. package/dist/chunk-T2BDID2J.js.map +1 -0
  231. package/dist/{chunk-RP3FZ2T6.js → chunk-TKHJXPSB.js} +110 -37
  232. package/dist/chunk-TKHJXPSB.js.map +1 -0
  233. package/dist/{chunk-CD7SVH6W.js → chunk-U56GGCC2.js} +4 -4
  234. package/dist/{chunk-CD7SVH6W.js.map → chunk-U56GGCC2.js.map} +1 -1
  235. package/dist/{chunk-VKPBUPH7.js → chunk-UL22SDGR.js} +36 -11
  236. package/dist/chunk-UL22SDGR.js.map +1 -0
  237. package/dist/{chunk-CKICWXMU.js → chunk-UQ33Y4DM.js} +139 -10
  238. package/dist/chunk-UQ33Y4DM.js.map +1 -0
  239. package/dist/{chunk-34C2EKWJ.js → chunk-UVVVR4XO.js} +38 -38
  240. package/dist/chunk-UVVVR4XO.js.map +1 -0
  241. package/dist/{chunk-KSBDLCZI.js → chunk-VBI7HGHB.js} +11 -11
  242. package/dist/{chunk-KSBDLCZI.js.map → chunk-VBI7HGHB.js.map} +1 -1
  243. package/dist/{chunk-PBSN4RTV.js → chunk-VJRTDKXS.js} +590 -450
  244. package/dist/chunk-VJRTDKXS.js.map +1 -0
  245. package/dist/{chunk-IG5LZ3WU.js → chunk-VTETQCR6.js} +10 -10
  246. package/dist/chunk-VTETQCR6.js.map +1 -0
  247. package/dist/{chunk-EFLKSMCO.js → chunk-VUJXZDCY.js} +5 -5
  248. package/dist/{chunk-EFLKSMCO.js.map → chunk-VUJXZDCY.js.map} +1 -1
  249. package/dist/{chunk-V3D4HQMS.js → chunk-VXEYX73S.js} +4 -4
  250. package/dist/{chunk-V3D4HQMS.js.map → chunk-VXEYX73S.js.map} +1 -1
  251. package/dist/{chunk-M3WPBTGJ.js → chunk-WD3L5QSU.js} +2 -2
  252. package/dist/{chunk-M3WPBTGJ.js.map → chunk-WD3L5QSU.js.map} +1 -1
  253. package/dist/chunk-WDAIWDLK.js +505 -0
  254. package/dist/chunk-WDAIWDLK.js.map +1 -0
  255. package/dist/{chunk-IW6F6R2W.js → chunk-WEH33JSG.js} +105 -35
  256. package/dist/chunk-WEH33JSG.js.map +1 -0
  257. package/dist/{chunk-OYIENLJI.js → chunk-WYHQUCHR.js} +15 -15
  258. package/dist/{chunk-OYIENLJI.js.map → chunk-WYHQUCHR.js.map} +1 -1
  259. package/dist/{chunk-R6O6YWU7.js → chunk-WYZXSJBK.js} +3 -3
  260. package/dist/{chunk-R6O6YWU7.js.map → chunk-WYZXSJBK.js.map} +1 -1
  261. package/dist/{chunk-B4X2N7JQ.js → chunk-XFIEVEU7.js} +14 -14
  262. package/dist/chunk-XFIEVEU7.js.map +1 -0
  263. package/dist/{chunk-Q6E6FM7P.js → chunk-XKNXPLKR.js} +6 -6
  264. package/dist/{chunk-Q6E6FM7P.js.map → chunk-XKNXPLKR.js.map} +1 -1
  265. package/dist/chunk-Y2TO2U7W.js +285 -0
  266. package/dist/chunk-Y2TO2U7W.js.map +1 -0
  267. package/dist/{chunk-JYWW32JI.js → chunk-YGRZNFRO.js} +18 -6
  268. package/dist/chunk-YGRZNFRO.js.map +1 -0
  269. package/dist/{chunk-5BEFNLOR.js → chunk-Z7ZEZZB6.js} +8 -8
  270. package/dist/chunk-Z7ZEZZB6.js.map +1 -0
  271. package/dist/{chunk-PHRNUTSG.js → chunk-ZFUZ5AKM.js} +4 -4
  272. package/dist/{chunk-PHRNUTSG.js.map → chunk-ZFUZ5AKM.js.map} +1 -1
  273. package/dist/claude-code-VJGYBXQR.js +10 -0
  274. package/dist/claude-code-VJGYBXQR.js.map +1 -0
  275. package/dist/cli/index.js +930 -685
  276. package/dist/cli/index.js.map +1 -1
  277. package/dist/cli/src/agent-checks.d.ts +5 -0
  278. package/dist/cli/src/agent-checks.d.ts.map +1 -1
  279. package/dist/cli/src/agent-pins.d.ts +18 -0
  280. package/dist/cli/src/agent-pins.d.ts.map +1 -0
  281. package/dist/cli/src/commands/catalog.d.ts +9 -3
  282. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  283. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  284. package/dist/cli/src/commands/config.d.ts +2 -2
  285. package/dist/cli/src/commands/config.d.ts.map +1 -1
  286. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  287. package/dist/cli/src/commands/flow.d.ts +8 -8
  288. package/dist/cli/src/commands/flow.d.ts.map +1 -1
  289. package/dist/cli/src/commands/integration.d.ts +1 -1
  290. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  291. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  292. package/dist/cli/src/commands/library-index.d.ts +17 -5
  293. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  294. package/dist/cli/src/commands/library-publish.d.ts +3 -0
  295. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  296. package/dist/cli/src/commands/migrate-assets.d.ts +2 -0
  297. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  298. package/dist/cli/src/commands/migrate-files.d.ts +14 -0
  299. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  300. package/dist/cli/src/commands/migrate-harness.d.ts +49 -0
  301. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -0
  302. package/dist/cli/src/commands/migrate.d.ts +4 -2
  303. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  304. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  305. package/dist/cli/src/commands/plugin/claude-code.d.ts +6 -0
  306. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  307. package/dist/cli/src/commands/plugin/codex.d.ts +19 -4
  308. package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
  309. package/dist/cli/src/commands/plugin/types.d.ts +1 -6
  310. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  311. package/dist/cli/src/commands/plugin-registry-cmd.d.ts +1 -1
  312. package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
  313. package/dist/cli/src/commands/preset-export.d.ts +1 -1
  314. package/dist/cli/src/commands/project.d.ts +7 -4
  315. package/dist/cli/src/commands/project.d.ts.map +1 -1
  316. package/dist/cli/src/commands/providers.d.ts +13 -0
  317. package/dist/cli/src/commands/providers.d.ts.map +1 -1
  318. package/dist/cli/src/commands/run.d.ts +2 -2
  319. package/dist/cli/src/commands/run.d.ts.map +1 -1
  320. package/dist/cli/src/commands/serve-preflight.d.ts +30 -7
  321. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  322. package/dist/cli/src/commands/serve.d.ts +1 -1
  323. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  324. package/dist/cli/src/commands/update.d.ts.map +1 -1
  325. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  326. package/dist/cli/src/flow-discovery.d.ts +69 -53
  327. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  328. package/dist/cli/src/harness-error.d.ts +47 -0
  329. package/dist/cli/src/harness-error.d.ts.map +1 -0
  330. package/dist/cli/src/helpers.d.ts +5 -5
  331. package/dist/cli/src/helpers.d.ts.map +1 -1
  332. package/dist/cli/src/plugin-store/index.d.ts +8 -4
  333. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  334. package/dist/cli/src/setup.d.ts +3 -3
  335. package/dist/cli/src/setup.d.ts.map +1 -1
  336. package/dist/cli/src/skill-checks.d.ts +32 -1
  337. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  338. package/dist/connectors/config.js +4 -4
  339. package/dist/connectors/index.js +29 -27
  340. package/dist/connectors/src/connector-prompt.d.ts +5 -5
  341. package/dist/connectors/src/connector-registry.d.ts +1 -1
  342. package/dist/connectors-CXZLXAFZ.js +48 -0
  343. package/dist/{connectors-YNQ3WJGM.js.map → connectors-CXZLXAFZ.js.map} +1 -1
  344. package/dist/connectors-shared/index.js +2 -2
  345. package/dist/core/discovery.js +1 -1
  346. package/dist/core/framework.js +1 -1
  347. package/dist/{bridge/drivers/codex.d.ts → core/harness-targets.d.ts} +1 -1
  348. package/dist/core/harness-targets.js +4 -0
  349. package/dist/core/harness-targets.js.map +1 -0
  350. package/dist/core/index.js +10 -10
  351. package/dist/core/provider-registry-credentials.js +2 -2
  352. package/dist/core/provider-registry.js +1 -1
  353. package/dist/core/publish-manifest.js +1 -1
  354. package/dist/core/runtime-assets.js +4 -4
  355. package/dist/core/src/asset-roots.d.ts +16 -2
  356. package/dist/core/src/asset-roots.d.ts.map +1 -1
  357. package/dist/core/src/bind.d.ts +33 -14
  358. package/dist/core/src/bind.d.ts.map +1 -1
  359. package/dist/core/src/discovery.d.ts +1 -1
  360. package/dist/core/src/framework.d.ts +21 -21
  361. package/dist/core/src/framework.d.ts.map +1 -1
  362. package/dist/core/src/{driver-sdk.d.ts → harness-sdk.d.ts} +9 -9
  363. package/dist/core/src/harness-sdk.d.ts.map +1 -0
  364. package/dist/core/src/harness-targets.d.ts +71 -0
  365. package/dist/core/src/harness-targets.d.ts.map +1 -0
  366. package/dist/core/src/index.d.ts +11 -11
  367. package/dist/core/src/index.d.ts.map +1 -1
  368. package/dist/core/src/lock.d.ts +8 -0
  369. package/dist/core/src/lock.d.ts.map +1 -1
  370. package/dist/core/src/provider-registry.d.ts +2 -2
  371. package/dist/core/src/publish-manifest.d.ts +45 -10
  372. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  373. package/dist/core/src/settings.d.ts +17 -16
  374. package/dist/core/src/settings.d.ts.map +1 -1
  375. package/dist/core/src/store.d.ts +12 -12
  376. package/dist/core/src/store.d.ts.map +1 -1
  377. package/dist/core/src/workspace-config.d.ts +49 -22
  378. package/dist/core/src/workspace-config.d.ts.map +1 -1
  379. package/dist/core/src/workspace-yaml-editor.d.ts +1 -1
  380. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  381. package/dist/core/store.js +2 -2
  382. package/dist/core/workspace-config.js +3 -3
  383. package/dist/deploy/index.js +11 -11
  384. package/dist/discovery/index.js +3 -3
  385. package/dist/discovery/src/discover-manifest.d.ts +1 -1
  386. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  387. package/dist/discovery/src/discover.d.ts.map +1 -1
  388. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  389. package/dist/{ensure-sources-UJWEZSR3.js → ensure-sources-UPTHZKGF.js} +20 -20
  390. package/dist/{ensure-sources-UJWEZSR3.js.map → ensure-sources-UPTHZKGF.js.map} +1 -1
  391. package/dist/factory-assets/connectors/box.js +29 -27
  392. package/dist/factory-assets/connectors/deploy.js +29 -27
  393. package/dist/factory-assets/connectors/devserver.js +29 -27
  394. package/dist/factory-assets/connectors/flow/CONNECTOR.md +5 -5
  395. package/dist/factory-assets/connectors/flow/adapter.d.ts +3 -3
  396. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  397. package/dist/factory-assets/connectors/flow/adapter.js +29 -27
  398. package/dist/factory-assets/connectors/flow/engine/loader.d.ts +1 -1
  399. package/dist/factory-assets/connectors/flow/engine/locate.d.ts +8 -5
  400. package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
  401. package/dist/factory-assets/connectors/flow/engine/types.d.ts +1 -1
  402. package/dist/factory-assets/connectors/flow/engine.js +11 -11
  403. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts +2 -2
  404. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
  405. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts +4 -4
  406. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts.map +1 -1
  407. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +1 -1
  408. package/dist/factory-assets/connectors/flow/prompt-fragments.js +1 -1
  409. package/dist/factory-assets/connectors/flow/run-flow.d.ts +12 -12
  410. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  411. package/dist/factory-assets/connectors/flow/run-flow.js +30 -28
  412. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +1 -1
  413. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
  414. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +22 -22
  415. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  416. package/dist/factory-assets/connectors/flow.js +29 -27
  417. package/dist/factory-assets/connectors/git.js +29 -27
  418. package/dist/factory-assets/connectors/gmail.js +29 -27
  419. package/dist/factory-assets/connectors/googledrive.js +29 -27
  420. package/dist/factory-assets/connectors/local.js +29 -27
  421. package/dist/factory-assets/connectors/mattermost.js +29 -27
  422. package/dist/factory-assets/connectors/memory.js +29 -27
  423. package/dist/factory-assets/connectors/minio.js +29 -27
  424. package/dist/factory-assets/connectors/postgres.js +29 -27
  425. package/dist/factory-assets/connectors/s3.js +29 -27
  426. package/dist/factory-assets/connectors/sharepoint.js +29 -27
  427. package/dist/factory-assets/connectors/sqlite.js +29 -27
  428. package/dist/factory-assets/connectors/static-server.js +29 -27
  429. package/dist/factory-assets/connectors/tunnel.js +29 -27
  430. package/dist/factory-assets/connectors/webdav.js +29 -27
  431. package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
  432. package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
  433. package/dist/factory-assets/connectors/xstate-store.js +29 -27
  434. package/dist/factory-assets/connectors/xstate.js +29 -27
  435. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  436. package/dist/flows-TJQIMGUX.js +26 -0
  437. package/dist/{flows-BHY73K3O.js.map → flows-TJQIMGUX.js.map} +1 -1
  438. package/dist/{helpers-3CG7ZVX4.js → helpers-DE53KG3E.js} +20 -20
  439. package/dist/{helpers-3CG7ZVX4.js.map → helpers-DE53KG3E.js.map} +1 -1
  440. package/dist/library/index.js +14 -14
  441. package/dist/library/install.js +2 -2
  442. package/dist/library/src/index.d.ts +1 -1
  443. package/dist/library/src/index.d.ts.map +1 -1
  444. package/dist/library/src/manifest-writer.d.ts +13 -0
  445. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  446. package/dist/{library-publish-NWWVYJUK.js → library-publish-KKQ2ULLX.js} +140 -63
  447. package/dist/library-publish-KKQ2ULLX.js.map +1 -0
  448. package/dist/model-endpoint/index.js +14 -14
  449. package/dist/model-endpoint/src/resolve.d.ts +1 -1
  450. package/dist/open-library-RJGJIW5H.js +42 -0
  451. package/dist/{open-library-7ZG2FFAX.js.map → open-library-RJGJIW5H.js.map} +1 -1
  452. package/dist/open-registry-3QS3J7KO.js +32 -0
  453. package/dist/{open-registry-RBELV5YH.js.map → open-registry-3QS3J7KO.js.map} +1 -1
  454. package/dist/paths-QAV4C3KX.js +22 -0
  455. package/dist/{paths-BFM6K2QO.js.map → paths-QAV4C3KX.js.map} +1 -1
  456. package/dist/plugin-registry/index.js +1 -1
  457. package/dist/plugin-registry/src/context.d.ts +3 -3
  458. package/dist/plugin-registry/src/context.d.ts.map +1 -1
  459. package/dist/plugin-registry/src/deploy-handle.d.ts +1 -1
  460. package/dist/plugin-registry/src/index.d.ts +2 -2
  461. package/dist/plugin-registry/src/index.d.ts.map +1 -1
  462. package/dist/plugin-registry/src/internal.d.ts.map +1 -1
  463. package/dist/plugin-registry/src/registry.d.ts +3 -3
  464. package/dist/plugin-registry/src/registry.d.ts.map +1 -1
  465. package/dist/plugin-registry/src/targets.d.ts +9 -9
  466. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  467. package/dist/plugin-store-MSH6GK6T.js +23 -0
  468. package/dist/{plugin-store-QOQDM24E.js.map → plugin-store-MSH6GK6T.js.map} +1 -1
  469. package/dist/plugins/src/asset-kind-provider.d.ts +1 -1
  470. package/dist/project-HZW2MZPA.js +84 -0
  471. package/dist/{project-YQM3I25D.js.map → project-HZW2MZPA.js.map} +1 -1
  472. package/dist/resolver/index.js +10 -10
  473. package/dist/runner/index.js +45 -44
  474. package/dist/runner/src/agent.d.ts +3 -3
  475. package/dist/runner/src/agent.d.ts.map +1 -1
  476. package/dist/runner/src/agents/in-process-host.d.ts +1 -1
  477. package/dist/runner/src/agents/instances.d.ts +1 -1
  478. package/dist/runner/src/agents/instances.d.ts.map +1 -1
  479. package/dist/runner/src/agents/run-controller.d.ts +7 -7
  480. package/dist/runner/src/agents/run-controller.d.ts.map +1 -1
  481. package/dist/runner/src/agents/standalone-surface.d.ts +2 -2
  482. package/dist/runner/src/agents/standalone-surface.d.ts.map +1 -1
  483. package/dist/runner/src/ai-provider-switch.d.ts +7 -7
  484. package/dist/runner/src/assistant-home.d.ts +1 -1
  485. package/dist/runner/src/capability-registry.d.ts +2 -2
  486. package/dist/runner/src/coalesced-restart.d.ts +2 -2
  487. package/dist/runner/src/compaction/context-window.d.ts +8 -8
  488. package/dist/runner/src/compaction/context-window.d.ts.map +1 -1
  489. package/dist/runner/src/compaction/orchestrator.d.ts +24 -24
  490. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  491. package/dist/runner/src/compaction-gate.d.ts +30 -30
  492. package/dist/runner/src/compaction-gate.d.ts.map +1 -1
  493. package/dist/runner/src/composition/compile.d.ts +11 -0
  494. package/dist/runner/src/composition/compile.d.ts.map +1 -1
  495. package/dist/runner/src/composition/dry-run.d.ts +2 -2
  496. package/dist/runner/src/composition/dry-run.d.ts.map +1 -1
  497. package/dist/runner/src/composition/index.d.ts +1 -1
  498. package/dist/runner/src/composition/index.d.ts.map +1 -1
  499. package/dist/runner/src/composition/resolve-instance.d.ts +2 -2
  500. package/dist/runner/src/composition/resolve.d.ts +1 -1
  501. package/dist/runner/src/config.d.ts +3 -3
  502. package/dist/runner/src/config.d.ts.map +1 -1
  503. package/dist/runner/src/context-usage/collector.d.ts +15 -15
  504. package/dist/runner/src/context-usage/collector.d.ts.map +1 -1
  505. package/dist/runner/src/context-usage/compose.d.ts +6 -6
  506. package/dist/runner/src/context-usage/compose.d.ts.map +1 -1
  507. package/dist/runner/src/context-usage/estimator.d.ts +1 -1
  508. package/dist/runner/src/context-usage/index.d.ts +1 -1
  509. package/dist/runner/src/context-usage/index.d.ts.map +1 -1
  510. package/dist/runner/src/context-usage/transcript-tracker.d.ts +2 -2
  511. package/dist/runner/src/context-usage/transcript-tracker.d.ts.map +1 -1
  512. package/dist/runner/src/credential-notice.d.ts +3 -3
  513. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  514. package/dist/runner/src/credential-rotated.d.ts +1 -1
  515. package/dist/runner/src/final-text.d.ts +1 -1
  516. package/dist/runner/src/{driver-swap-gate.d.ts → harness-swap-gate.d.ts} +21 -21
  517. package/dist/runner/src/harness-swap-gate.d.ts.map +1 -0
  518. package/dist/runner/src/late-mcp-rebuild.d.ts +6 -6
  519. package/dist/runner/src/late-mcp-rebuild.d.ts.map +1 -1
  520. package/dist/runner/src/lifecycle-handler.d.ts +1 -1
  521. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  522. package/dist/runner/src/manifest.d.ts +1 -1
  523. package/dist/runner/src/mcp-runtime-handlers.d.ts +6 -6
  524. package/dist/runner/src/mcp-runtime-handlers.d.ts.map +1 -1
  525. package/dist/runner/src/model-endpoint-discovery.d.ts +1 -1
  526. package/dist/runner/src/pending-turns.d.ts +3 -3
  527. package/dist/runner/src/platform-blocks.d.ts +5 -5
  528. package/dist/runner/src/platform-blocks.d.ts.map +1 -1
  529. package/dist/runner/src/prompt-turn-queue.d.ts +1 -1
  530. package/dist/runner/src/provider-quota-forwarder.d.ts +1 -1
  531. package/dist/runner/src/provider-quota-forwarder.d.ts.map +1 -1
  532. package/dist/runner/src/reconfigure-handler.d.ts +14 -14
  533. package/dist/runner/src/reconfigure-handler.d.ts.map +1 -1
  534. package/dist/runner/src/resource-handler.d.ts +1 -1
  535. package/dist/runner/src/resources.d.ts +5 -5
  536. package/dist/runner/src/resources.d.ts.map +1 -1
  537. package/dist/runner/src/runner-capabilities.d.ts +7 -7
  538. package/dist/runner/src/runtime-session-emit.d.ts +5 -5
  539. package/dist/runner/src/runtime-session-emit.d.ts.map +1 -1
  540. package/dist/runner/src/s3-presign-client.d.ts +1 -1
  541. package/dist/runner/src/serve-credentials.d.ts +7 -7
  542. package/dist/runner/src/serve-credentials.d.ts.map +1 -1
  543. package/dist/runner/src/serve.d.ts +32 -32
  544. package/dist/runner/src/serve.d.ts.map +1 -1
  545. package/dist/runner/src/session-builder.d.ts +41 -41
  546. package/dist/runner/src/session-builder.d.ts.map +1 -1
  547. package/dist/runner/src/session-capability-wiring.d.ts +9 -9
  548. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  549. package/dist/runner/src/session-stimulus.d.ts +1 -1
  550. package/dist/runner/src/session.d.ts +5 -5
  551. package/dist/runner/src/session.d.ts.map +1 -1
  552. package/dist/runner/src/skill-staging.d.ts +16 -16
  553. package/dist/runner/src/skill-staging.d.ts.map +1 -1
  554. package/dist/runner/src/turn-end-contract.d.ts +55 -0
  555. package/dist/runner/src/turn-end-contract.d.ts.map +1 -0
  556. package/dist/runner/src/turn-scheduler.d.ts +27 -22
  557. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  558. package/dist/runner/src/turn-status-replay.d.ts +1 -1
  559. package/dist/runner/src/usage-limit-turn-hold.d.ts +1 -1
  560. package/dist/sdk/asset-manager.js +17 -17
  561. package/dist/sdk/bridge.js +24 -22
  562. package/dist/sdk/core.js +10 -10
  563. package/dist/sdk/flow.js +11 -11
  564. package/dist/sdk/index.js +49 -48
  565. package/dist/sdk/index.js.map +1 -1
  566. package/dist/sdk/resolver.js +10 -10
  567. package/dist/sdk/runner.js +45 -44
  568. package/dist/sdk/session.js +2 -2
  569. package/dist/sdk/src/agent-session.d.ts +1 -1
  570. package/dist/sdk/src/local-runtime.d.ts +1 -1
  571. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  572. package/dist/sdk/src/types.d.ts +1 -1
  573. package/dist/sdk/src/types.d.ts.map +1 -1
  574. package/dist/sdk/store.js +2 -2
  575. package/dist/sdk/transport/ws/server.js +11 -11
  576. package/dist/sdk/transport/ws.js +11 -11
  577. package/dist/sdk/transport.js +11 -11
  578. package/dist/sdk/types.js +1 -1
  579. package/dist/serve-preflight-L4POEHNQ.js +108 -0
  580. package/dist/serve-preflight-L4POEHNQ.js.map +1 -0
  581. package/dist/session/index.js +2 -2
  582. package/dist/session/src/dispatcher.d.ts +2 -2
  583. package/dist/sessions-2Q7SSYPT.js +5 -0
  584. package/dist/{sessions-DICDEONJ.js.map → sessions-2Q7SSYPT.js.map} +1 -1
  585. package/dist/{setup-AAHVAXRA.js → setup-AGYB4PKR.js} +50 -48
  586. package/dist/setup-AGYB4PKR.js.map +1 -0
  587. package/dist/skills-2LMQ2IAD.js +26 -0
  588. package/dist/{skills-RSZVUIYZ.js.map → skills-2LMQ2IAD.js.map} +1 -1
  589. package/dist/source-GBMYD3RO.js +85 -0
  590. package/dist/{source-KWMCMEMB.js.map → source-GBMYD3RO.js.map} +1 -1
  591. package/dist/{source-manifest-publish-EDYKM4YZ.js → source-manifest-publish-FK22TVQT.js} +57 -56
  592. package/dist/source-manifest-publish-FK22TVQT.js.map +1 -0
  593. package/dist/store/index.js +2 -2
  594. package/dist/store/src/store.d.ts +3 -3
  595. package/dist/store/src/store.d.ts.map +1 -1
  596. package/dist/transport/index.js +11 -11
  597. package/dist/transport/src/ws/server.d.ts +1 -1
  598. package/dist/transport/src/ws/server.d.ts.map +1 -1
  599. package/dist/transport/ws/server.js +11 -11
  600. package/dist/transport/ws.js +11 -11
  601. package/dist/tui/index.js +65 -64
  602. package/dist/tui/index.js.map +1 -1
  603. package/dist/tui/src/repl-session.d.ts +5 -5
  604. package/dist/tui/src/repl.d.ts +5 -5
  605. package/dist/tui/src/repl.d.ts.map +1 -1
  606. package/dist/types/index.js +1 -1
  607. package/dist/types/manifests.js +1 -1
  608. package/dist/types/src/agent-lifecycle.d.ts +1 -1
  609. package/dist/types/src/agent-lifecycle.d.ts.map +1 -1
  610. package/dist/types/src/ask-slots.d.ts +1 -1
  611. package/dist/types/src/capabilities.d.ts +1 -1
  612. package/dist/types/src/context-usage.d.ts +22 -22
  613. package/dist/types/src/context-usage.d.ts.map +1 -1
  614. package/dist/types/src/events.d.ts +49 -49
  615. package/dist/types/src/events.d.ts.map +1 -1
  616. package/dist/types/src/index.d.ts +2 -2
  617. package/dist/types/src/index.d.ts.map +1 -1
  618. package/dist/types/src/lifecycle.d.ts +6 -6
  619. package/dist/types/src/lifecycle.d.ts.map +1 -1
  620. package/dist/types/src/logging.d.ts +1 -1
  621. package/dist/types/src/manifests/agent.d.ts +3 -3
  622. package/dist/types/src/manifests/scaffold-body.d.ts +6 -3
  623. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  624. package/dist/types/src/protocol.d.ts +4 -4
  625. package/dist/types/src/runtime.d.ts +38 -38
  626. package/dist/types/src/runtime.d.ts.map +1 -1
  627. package/dist/types/src/version.d.ts +22 -11
  628. package/dist/types/src/version.d.ts.map +1 -1
  629. package/dist/validator-DRHMJ457.js +5 -0
  630. package/dist/{validator-FA2PFW6N.js.map → validator-DRHMJ457.js.map} +1 -1
  631. package/dist/workspace-plugin/adapters/mcp.js +36 -34
  632. package/dist/workspace-plugin/adapters/omp.js +26 -26
  633. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  634. package/dist/workspace-plugin/index.js +3 -3
  635. package/dist/workspace-plugin/src/plugin.d.ts +5 -5
  636. package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
  637. package/dist/workspace-plugin/src/tools/flows.d.ts +1 -1
  638. package/dist/workspace-plugin/src/tools/validator.d.ts +6 -6
  639. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  640. package/dist/workspace-plugin/src/types.d.ts +2 -2
  641. package/dist/workspace-plugin/src/types.d.ts.map +1 -1
  642. package/package.json +59 -59
  643. package/dist/bridge/drivers/claude-sdk.js.map +0 -1
  644. package/dist/bridge/drivers/codex.js.map +0 -1
  645. package/dist/bridge/drivers/continue.js.map +0 -1
  646. package/dist/bridge/drivers/echo.js.map +0 -1
  647. package/dist/bridge/drivers/gemini.js +0 -18
  648. package/dist/bridge/drivers/goose.js.map +0 -1
  649. package/dist/bridge/drivers/omp.js.map +0 -1
  650. package/dist/bridge/drivers/opencode.js.map +0 -1
  651. package/dist/bridge/drivers/qwen.js.map +0 -1
  652. package/dist/bridge/src/codex/managed-driver.d.ts.map +0 -1
  653. package/dist/bridge/src/driver-capabilities.d.ts.map +0 -1
  654. package/dist/bridge/src/driver-model-check.d.ts +0 -21
  655. package/dist/bridge/src/driver-model-check.d.ts.map +0 -1
  656. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +0 -1
  657. package/dist/bridge/src/drivers/claude-context-usage.d.ts.map +0 -1
  658. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +0 -1
  659. package/dist/bridge/src/drivers/claude-self-turns.d.ts.map +0 -1
  660. package/dist/bridge/src/drivers/claude-tool-allowlist.d.ts.map +0 -1
  661. package/dist/bridge/src/drivers/codex.d.ts.map +0 -1
  662. package/dist/bridge/src/drivers/continue.d.ts.map +0 -1
  663. package/dist/bridge/src/drivers/echo.d.ts.map +0 -1
  664. package/dist/bridge/src/drivers/flow-script.d.ts.map +0 -1
  665. package/dist/bridge/src/drivers/gemini.d.ts.map +0 -1
  666. package/dist/bridge/src/drivers/goose.d.ts.map +0 -1
  667. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +0 -1
  668. package/dist/bridge/src/drivers/omp.d.ts.map +0 -1
  669. package/dist/bridge/src/drivers/opencode.d.ts.map +0 -1
  670. package/dist/bridge/src/drivers/qwen.d.ts.map +0 -1
  671. package/dist/bridge/src/drivers/recovery-policy.d.ts.map +0 -1
  672. package/dist/bridge/src/drivers/resume-probe.d.ts.map +0 -1
  673. package/dist/bridge/src/drivers/sanitize-assistant-text.d.ts.map +0 -1
  674. package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +0 -1
  675. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +0 -1
  676. package/dist/chunk-2NOLF7B2.js.map +0 -1
  677. package/dist/chunk-34C2EKWJ.js.map +0 -1
  678. package/dist/chunk-3KMREAR2.js.map +0 -1
  679. package/dist/chunk-4ZTPYIBE.js.map +0 -1
  680. package/dist/chunk-5BEFNLOR.js.map +0 -1
  681. package/dist/chunk-5TBFN46Z.js.map +0 -1
  682. package/dist/chunk-6E6PKKAD.js.map +0 -1
  683. package/dist/chunk-7ANRSTNR.js.map +0 -1
  684. package/dist/chunk-7FHZB2QU.js.map +0 -1
  685. package/dist/chunk-AIBAOXDU.js.map +0 -1
  686. package/dist/chunk-AJ7EGIFR.js.map +0 -1
  687. package/dist/chunk-B4X2N7JQ.js.map +0 -1
  688. package/dist/chunk-BBWSGVVE.js.map +0 -1
  689. package/dist/chunk-BO426QWN.js.map +0 -1
  690. package/dist/chunk-CKICWXMU.js.map +0 -1
  691. package/dist/chunk-CKNIYIV2.js.map +0 -1
  692. package/dist/chunk-D6UBEYQH.js.map +0 -1
  693. package/dist/chunk-EAZECHPM.js.map +0 -1
  694. package/dist/chunk-EPBKISS5.js.map +0 -1
  695. package/dist/chunk-GBYNC5V3.js.map +0 -1
  696. package/dist/chunk-GOK4QRJR.js.map +0 -1
  697. package/dist/chunk-HPVMTX6M.js.map +0 -1
  698. package/dist/chunk-IG5LZ3WU.js.map +0 -1
  699. package/dist/chunk-IW6F6R2W.js.map +0 -1
  700. package/dist/chunk-IZCR27MU.js.map +0 -1
  701. package/dist/chunk-JYWW32JI.js.map +0 -1
  702. package/dist/chunk-KY4UXX7M.js.map +0 -1
  703. package/dist/chunk-L2AMXONH.js.map +0 -1
  704. package/dist/chunk-LW7ZI6EQ.js.map +0 -1
  705. package/dist/chunk-MJHSLODD.js.map +0 -1
  706. package/dist/chunk-PBSN4RTV.js.map +0 -1
  707. package/dist/chunk-RP3FZ2T6.js.map +0 -1
  708. package/dist/chunk-SRNCN4X2.js.map +0 -1
  709. package/dist/chunk-T2TQAH2X.js.map +0 -1
  710. package/dist/chunk-U7V5SIFW.js.map +0 -1
  711. package/dist/chunk-VKPBUPH7.js.map +0 -1
  712. package/dist/chunk-VM3PH7BB.js.map +0 -1
  713. package/dist/chunk-WMF2C5U7.js.map +0 -1
  714. package/dist/chunk-X6GUNN7X.js.map +0 -1
  715. package/dist/chunk-XTO436PV.js.map +0 -1
  716. package/dist/chunk-Y56YIT6J.js.map +0 -1
  717. package/dist/chunk-YARXR3CN.js.map +0 -1
  718. package/dist/chunk-YROR332M.js.map +0 -1
  719. package/dist/chunk-YZ3N7IUU.js.map +0 -1
  720. package/dist/chunk-ZBMC6IAE.js.map +0 -1
  721. package/dist/cli/src/driver-error.d.ts +0 -21
  722. package/dist/cli/src/driver-error.d.ts.map +0 -1
  723. package/dist/connectors-YNQ3WJGM.js +0 -46
  724. package/dist/core/driver-targets.d.ts +0 -2
  725. package/dist/core/driver-targets.js +0 -4
  726. package/dist/core/driver-targets.js.map +0 -1
  727. package/dist/core/src/driver-sdk.d.ts.map +0 -1
  728. package/dist/core/src/driver-targets.d.ts +0 -71
  729. package/dist/core/src/driver-targets.d.ts.map +0 -1
  730. package/dist/flows-BHY73K3O.js +0 -26
  731. package/dist/library-publish-NWWVYJUK.js.map +0 -1
  732. package/dist/open-library-7ZG2FFAX.js +0 -42
  733. package/dist/open-registry-RBELV5YH.js +0 -32
  734. package/dist/paths-BFM6K2QO.js +0 -22
  735. package/dist/plugin-store-QOQDM24E.js +0 -23
  736. package/dist/project-YQM3I25D.js +0 -83
  737. package/dist/runner/src/driver-swap-gate.d.ts.map +0 -1
  738. package/dist/serve-preflight-5QMY7DBC.js +0 -60
  739. package/dist/serve-preflight-5QMY7DBC.js.map +0 -1
  740. package/dist/sessions-DICDEONJ.js +0 -5
  741. package/dist/setup-AAHVAXRA.js.map +0 -1
  742. package/dist/skills-RSZVUIYZ.js +0 -26
  743. package/dist/source-KWMCMEMB.js +0 -84
  744. package/dist/source-manifest-publish-EDYKM4YZ.js.map +0 -1
  745. package/dist/validator-FA2PFW6N.js +0 -5
  746. /package/dist/bridge/{drivers → harnesses}/gemini.js.map +0 -0
@@ -1,6 +1,6 @@
1
- import { getProviderPreset, providerCredentialEnvName } from './chunk-KY4UXX7M.js';
1
+ import { getProviderPreset, providerCredentialEnvName } from './chunk-F2GOZMRA.js';
2
2
  import { globalSkaileDir } from './chunk-L5VSIPQD.js';
3
- import { registryEntries, parseModelRef, isEntryEnabled, resolveEntryBaseUrl } from './chunk-MJHSLODD.js';
3
+ import { registryEntries, parseModelRef, isEntryEnabled, resolveEntryBaseUrl } from './chunk-LSI2IVFT.js';
4
4
  import { createHash } from 'crypto';
5
5
  import { mkdirSync, rmSync, writeFileSync, renameSync } from 'fs';
6
6
  import { join } from 'path';
@@ -121,5 +121,5 @@ function writeCodexConfigToml(home, document) {
121
121
  }
122
122
 
123
123
  export { buildCodexConfigDocument, codexProviderTableId, codexSessionHome, writeCodexConfigToml };
124
- //# sourceMappingURL=chunk-GBYNC5V3.js.map
125
- //# sourceMappingURL=chunk-GBYNC5V3.js.map
124
+ //# sourceMappingURL=chunk-JDR6ILCW.js.map
125
+ //# sourceMappingURL=chunk-JDR6ILCW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../bridge/src/codex/config-toml.ts"],"names":["stringifyToml"],"mappings":"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","file":"chunk-JDR6ILCW.js","sourcesContent":["/**\n * Codex's `config.toml` adapter — the AI provider registry materialized into\n * the only provider surface the Codex CLI reads (plan §2.3, codex rows).\n *\n * Codex is a **file-shaped** harness: it takes its endpoints from\n * `$CODEX_HOME/config.toml`, never from per-request options. Both codex modes\n * therefore get a session-private `CODEX_HOME` holding a rendered document:\n *\n * - every addressable registry entry becomes `[model_providers.<id>]` with\n * `base_url`, `env_key`, `wire_api`, `query_params` and `http_headers`\n * mapping 1:1 onto the entry's `base_url`, `credential`, `surface`,\n * `query_params` and `headers`;\n * - `model_provider` and `model` at the top level name the selected entry.\n *\n * The rendered file never contains a credential **value** — `env_key` holds\n * the *name* of the per-entry variable (`SKAILE_AIP_<ID>_KEY`, minted by\n * {@link providerCredentialEnvName}), and the value rides in the child\n * environment. An `oauth` entry has no env carrier at all: it gets\n * `requires_openai_auth`, which routes codex to its own auth manager.\n *\n * **Surface coverage.** Codex names the wire protocol `wire_api` and, as of\n * codex-cli 0.154, accepts exactly one value: `responses`. `chat` was removed\n * (\"`wire_api = \\\"chat\\\"` is no longer supported\", openai/codex#7782), and an\n * unknown value fails the *whole* document at load time — one unaddressable\n * entry would take the rest of the registry down with it. Entries whose\n * surface codex cannot speak (`openai-completions`, `anthropic-messages`,\n * `bedrock-converse-stream`, `google-*`) are therefore left out and reported\n * in {@link CodexConfigBuild.skipped} for the harness to log.\n *\n * @docLink packages/bridge/harnesses#codex-harness\n */\n\nimport { createHash } from \"node:crypto\";\nimport { mkdirSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { globalSkaileDir } from \"@skaile/workspaces/core\";\nimport {\n type AIProviderEntry,\n type AIProviderLlmEntry,\n type AIProviderRegistry,\n type AIProviderSurface,\n isEntryEnabled,\n type MergedAIProviderRegistry,\n parseModelRef,\n registryEntries,\n type ResolvedModelRef,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { stringify as stringifyToml } from \"smol-toml\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { providerCredentialEnvName } from \"../provider-materialize/credential-env.js\";\n\n/**\n * `surface` → codex `wire_api`. Only the responses-flavoured surfaces have a\n * codex spelling; see the module docstring for why `openai-completions` is\n * absent rather than mapped to the removed `chat` value.\n */\nconst CODEX_WIRE_API: Partial<Record<AIProviderSurface, string>> = {\n \"openai-codex-responses\": \"responses\",\n \"openai-responses\": \"responses\",\n \"azure-openai-responses\": \"responses\",\n};\n\n/**\n * Provider ids codex reserves for its own built-ins. A `[model_providers.<id>]`\n * table under one of them fails the whole document (\"model_providers contains\n * reserved built-in provider IDs\"), so such an entry is rendered under\n * {@link codexProviderTableId}.\n */\nconst CODEX_RESERVED_PROVIDER_IDS: ReadonlySet<string> = new Set([\"openai\", \"ollama\", \"lmstudio\"]);\n\n/**\n * The `[model_providers.<id>]` table name for a registry entry: the entry id,\n * or `skaile-<id>` when codex reserves that id (the `openai` preset).\n */\nexport function codexProviderTableId(id: string): string {\n return CODEX_RESERVED_PROVIDER_IDS.has(id) ? `skaile-${id}` : id;\n}\n\n/** Credential kinds whose value the adapter hands over in an env var. */\nconst ENV_DELIVERED_CREDENTIALS: Record<string, true> = {\n api_key_header: true,\n bearer: true,\n command: true,\n};\n\n/** One `[model_providers.<id>]` table, in codex's own vocabulary. */\nexport interface CodexModelProviderTable {\n /** Display name. Codex rejects a provider table without one. */\n name: string;\n base_url?: string;\n /** Name of the variable carrying the credential — never the credential. */\n env_key?: string;\n wire_api?: string;\n /** Routes codex to its own auth manager (ChatGPT subscription / stored key). */\n requires_openai_auth?: boolean;\n query_params?: Record<string, string>;\n http_headers?: Record<string, string>;\n}\n\n/** The subset of codex's `config.toml` this adapter owns. */\nexport interface CodexConfigDocument {\n /** Table id the session addresses (see {@link codexProviderTableId}); absent when nothing rendered. */\n model_provider?: string;\n /** Provider-side model id. */\n model?: string;\n model_providers: Record<string, CodexModelProviderTable>;\n}\n\n/** An entry codex cannot address, and why. */\nexport interface CodexSkippedEntry {\n id: string;\n reason: string;\n}\n\n/** Result of {@link buildCodexConfigDocument}. */\nexport interface CodexConfigBuild {\n document: CodexConfigDocument;\n /** Selected registry entry id (not the table id), when it rendered. */\n providerId?: string;\n /** Provider-side model id of the selection, when the selector named one. */\n model?: string;\n /**\n * Entries left out of the document. Non-fatal: codex keeps its built-in\n * providers, so a session whose selection was skipped behaves exactly as it\n * did before the registry existed.\n */\n skipped: CodexSkippedEntry[];\n /** Notes from `modelRef` resolution (dangling role, disabled provider, …). */\n warnings: string[];\n /**\n * Set when the selector named an entry codex cannot address: the session\n * must stop with `reason`, not fall back to codex's built-in providers.\n */\n unaddressable?: { id: string; reason: string };\n}\n\n/**\n * Whether the session's selector named the entry `selected` resolved to, rather\n * than reaching it by registry order alone.\n */\nfunction selectionNamesEntry(\n input: CodexConfigInput,\n selected: ResolvedModelRef,\n registry: AIProviderRegistry | MergedAIProviderRegistry,\n): boolean {\n if (selected.role && selected.modelId !== undefined) return true;\n const selector = input.modelRef?.trim() || input.model?.trim() || \"\";\n if (selector.startsWith(`${selected.providerId}/`)) return true;\n const entry = registryEntries(registry).find(([id]) => id === selected.providerId)?.[1] as\n | AIProviderLlmEntry\n | undefined;\n const modelId = selected.modelId;\n return (\n modelId !== undefined &&\n (entry?.model_map?.[modelId] !== undefined || entry?.capabilities?.[modelId] !== undefined)\n );\n}\n\n/** Inputs {@link buildCodexConfigDocument} reads off an `AgentConfig`. */\nexport interface CodexConfigInput {\n registry?: AIProviderRegistry | MergedAIProviderRegistry;\n /** `\"<providerId>/<modelId>\"`, a bare model id, or `\"@role\"`. */\n modelRef?: string;\n /** Legacy model field, used as the selector when `modelRef` is absent. */\n model?: string;\n /** Roles table (`skaile.yaml`), consulted for an `@role` selector. */\n roles?: Record<string, string>;\n}\n\n/**\n * Render one entry as a codex provider table, or explain why codex cannot\n * address it.\n */\nexport function renderCodexProviderTable(\n id: string,\n entry: AIProviderEntry,\n): { table: CodexModelProviderTable } | { skipped: string } {\n if (!isEntryEnabled(entry)) return { skipped: \"entry is disabled\" };\n if (entry.kind !== \"llm\" && entry.kind !== \"embed\")\n return { skipped: `kind '${entry.kind}' is not a model endpoint` };\n const llm = entry as AIProviderLlmEntry;\n // `surface` and `base_url` may live on the catalog preset the entry names —\n // the catalog layer fills them during a merge, but an entry handed straight\n // to a harness has not necessarily been through one.\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n const surface = llm.surface ?? preset?.surface;\n const wireApi = surface ? CODEX_WIRE_API[surface] : undefined;\n if (!wireApi)\n return {\n skipped: surface\n ? `codex has no wire_api for surface '${surface}'`\n : \"entry declares no surface\",\n };\n const credentialKind = entry.credential?.kind;\n const table: CodexModelProviderTable = { name: entry.label ?? id };\n const baseUrl = resolveEntryBaseUrl(entry) ?? preset?.base_url;\n if (baseUrl) table.base_url = baseUrl;\n if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])\n table.env_key = providerCredentialEnvName(id);\n table.wire_api = wireApi;\n if (credentialKind === \"oauth\") table.requires_openai_auth = true;\n if (llm.query_params && Object.keys(llm.query_params).length > 0)\n table.query_params = { ...llm.query_params };\n if (entry.headers && Object.keys(entry.headers).length > 0)\n table.http_headers = { ...entry.headers };\n return { table };\n}\n\n/**\n * Build the document for a session: every addressable entry, plus the\n * selection when it resolved to one of them.\n */\nexport function buildCodexConfigDocument(input: CodexConfigInput): CodexConfigBuild {\n const document: CodexConfigDocument = { model_providers: {} };\n const skipped: CodexSkippedEntry[] = [];\n const entries = input.registry ? registryEntries(input.registry) : [];\n for (const [id, entry] of entries) {\n const rendered = renderCodexProviderTable(id, entry);\n if (\"skipped\" in rendered) skipped.push({ id, reason: rendered.skipped });\n else document.model_providers[codexProviderTableId(id)] = rendered.table;\n }\n\n if (!input.registry) return { document, skipped, warnings: [] };\n // An empty selector resolves the same way a bare one does — first entry in\n // registry order. A session that configured an endpoint and named no model\n // still means that endpoint, not codex's built-in default.\n const selected = parseModelRef(\n input.modelRef?.trim() || input.model?.trim() || \"\",\n input.registry,\n input.roles,\n );\n if (!selected) return { document, skipped, warnings: [] };\n const warnings = selected.warnings;\n const tableId = codexProviderTableId(selected.providerId);\n if (!document.model_providers[tableId]) {\n // A selector that names the entry (`ollama/llama3`, a role or a model its\n // `model_map` lists) and cannot be rendered must not fall through to\n // codex's built-in OpenAI: the prompt would go to a provider the user did\n // not pick. A bare model id that matched no entry only landed on the first\n // entry by registry order, so codex's own providers stay the right answer.\n const reason = skipped.find((s) => s.id === selected.providerId)?.reason;\n if (reason && selectionNamesEntry(input, selected, input.registry)) {\n return {\n document,\n skipped,\n warnings,\n unaddressable: { id: selected.providerId, reason },\n };\n }\n return { document, skipped, warnings };\n }\n document.model_provider = tableId;\n if (selected.providerModelId) document.model = selected.providerModelId;\n return {\n document,\n providerId: selected.providerId,\n ...(selected.providerModelId ? { model: selected.providerModelId } : {}),\n skipped,\n warnings,\n };\n}\n\n/** Serialize a document to TOML. Deterministic: registry order throughout. */\nexport function renderCodexConfigToml(document: CodexConfigDocument): string {\n const ordered: Record<string, unknown> = {};\n if (document.model_provider) ordered.model_provider = document.model_provider;\n if (document.model) ordered.model = document.model;\n ordered.model_providers = document.model_providers;\n return `${stringifyToml(ordered)}\\n`;\n}\n\n/**\n * The session-private codex home.\n *\n * Deliberately outside `cwd`: codex's `workspace-write` sandbox makes the\n * working tree writable by the model, and a config home inside it would let a\n * turn rewrite its own `base_url`. `$SKAILE_HOME` (honoured by\n * {@link globalSkaileDir}) relocates the whole tree, which is also the test\n * seam.\n */\nexport function codexSessionHome(config: { cwd: string; sessionId?: string }): string {\n const key =\n config.sessionId && /^[A-Za-z0-9._-]{1,128}$/.test(config.sessionId)\n ? config.sessionId\n : createHash(\"sha256\")\n .update(config.sessionId ?? config.cwd)\n .digest(\"hex\")\n .slice(0, 32);\n return join(globalSkaileDir(), \"codex\", key);\n}\n\n/**\n * Write `<home>/config.toml`, creating the home always. Atomic: a\n * partially written document would fail codex's config load for the whole\n * session.\n *\n * A document with no provider tables says nothing codex does not already\n * know, so nothing is written and a file left by an earlier render is\n * removed — a session that no longer carries a registry must not keep\n * answering to the one it used to have.\n *\n * @returns the absolute path written, or `undefined` when there was nothing\n * to render.\n */\nexport function writeCodexConfigToml(\n home: string,\n document: CodexConfigDocument,\n): string | undefined {\n const path = join(home, \"config.toml\");\n // codex exits when CODEX_HOME names a directory that does not exist, so the\n // home exists before the early return too.\n mkdirSync(home, { recursive: true, mode: 0o700 });\n if (Object.keys(document.model_providers).length === 0) {\n rmSync(path, { force: true });\n return undefined;\n }\n const temporary = join(home, \"config.toml.new\");\n rmSync(temporary, { force: true });\n writeFileSync(temporary, renderCodexConfigToml(document), { mode: 0o600, flag: \"wx\" });\n renameSync(temporary, path);\n return path;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { CodexNativeStateUnavailable } from './chunk-LOO5CB5M.js';
2
- import { wrapAgentCommand, resolveAgentExec } from './chunk-YROR332M.js';
2
+ import { wrapAgentCommand, resolveAgentExec } from './chunk-7DN6JKP2.js';
3
3
  import { processGroupAlive } from './chunk-4GY63JU6.js';
4
4
  import { spawn } from 'child_process';
5
5
 
@@ -241,5 +241,5 @@ var CodexAppServerClient = class _CodexAppServerClient {
241
241
  };
242
242
 
243
243
  export { CodexAppServerClient, CodexAppServerError };
244
- //# sourceMappingURL=chunk-K4O6L3WH.js.map
245
- //# sourceMappingURL=chunk-K4O6L3WH.js.map
244
+ //# sourceMappingURL=chunk-KNY356I3.js.map
245
+ //# sourceMappingURL=chunk-KNY356I3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../bridge/src/codex-app-server.ts"],"names":[],"mappings":"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","file":"chunk-K4O6L3WH.js","sourcesContent":["import { CodexNativeStateUnavailable } from \"./codex/native-state.js\";\nimport { spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\n// Narrow module, not the `core` barrel: the barrel's chunks carry `import.meta`,\n// which breaks consumers that transpile this entry to CommonJS.\nimport { resolveAgentExec, wrapAgentCommand } from \"./agent-exec.js\";\nimport { processGroupAlive } from \"../../core/src/process-alive.js\";\nimport type { NativeRequests, NativeServerRequests } from \"./codex/native-protocol.generated.js\";\n\n/** The retained native request types, exposed only through this client surface. */\nexport type CodexRequestMethod = keyof NativeRequests;\n/** Native callback handlers receive cancellation when their process is disposed. */\nexport type CodexServerRequestHandlers = {\n [M in keyof NativeServerRequests]?: (\n params: NativeServerRequests[M][\"params\"],\n signal: AbortSignal,\n ) => Promise<NativeServerRequests[M][\"result\"]>;\n};\n/** Explicit process inputs keep managed callers from inheriting ambient credentials. */\nexport interface CodexAppServerOptions {\n command: string;\n args: string[];\n cwd: string;\n env: Record<string, string>;\n clientInfo: NativeRequests[\"initialize\"][\"params\"][\"clientInfo\"];\n requestTimeoutMs?: number;\n serverRequestTimeoutMs?: number;\n maxPendingRequests?: number;\n maxFrameBytes?: number;\n /** Isolate and reap the native process group on POSIX. */\n processGroup?: boolean;\n onServerRequest?: CodexServerRequestHandlers;\n /** Final synchronous lifecycle veto before a callback reply; cannot grant a missing handler. */\n canReplyToServerRequest?: (method: string, params: unknown) => boolean;\n onNotification?: (method: string, params: unknown) => void;\n /** Exactly once on terminal failure or disposal, even with no RPC pending. */\n onClose?: (error: CodexAppServerError) => void;\n}\n/** Safe error codes never contain stderr, native errors, RPC payloads or credentials. */\nexport class CodexAppServerError extends Error {\n constructor(\n readonly code: \"closed\" | \"process\" | \"protocol\" | \"timeout\" | \"rejected\" | \"capacity\",\n ) {\n super(`Codex App Server ${code}`);\n this.name = \"CodexAppServerError\";\n }\n}\ntype Pending = {\n resolve: (value: unknown) => void;\n reject: (error: CodexAppServerError | CodexNativeStateUnavailable) => void;\n timer: ReturnType<typeof setTimeout>;\n resumeThreadId?: string;\n};\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst validId = (value: unknown): value is string | number =>\n typeof value === \"string\" || (typeof value === \"number\" && Number.isSafeInteger(value));\nfunction bound(value: number | undefined, fallback: number, maximum: number): number {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0 || result > maximum)\n throw new CodexAppServerError(\"protocol\");\n return result;\n}\n\n/** One initialized stdio process with correlated, bounded requests and terminal disposal. */\nexport class CodexAppServerClient {\n private readonly pending = new Map<number, Pending>();\n private readonly callbacks = new Map<string | number, AbortController>();\n private readonly timeout: number;\n private readonly callbackTimeout: number;\n private readonly capacity: number;\n private readonly frameLimit: number;\n private readonly child: ChildProcessWithoutNullStreams;\n private readonly closed: Promise<void>;\n private terminal = false;\n private childClosed = false;\n private nextId = 1;\n private buffer = \"\";\n\n private constructor(private readonly options: CodexAppServerOptions) {\n this.timeout = bound(options.requestTimeoutMs, 15_000, 300_000);\n this.callbackTimeout = bound(options.serverRequestTimeoutMs, 30_000, 300_000);\n this.capacity = bound(options.maxPendingRequests, 64, 1024);\n this.frameLimit = bound(options.maxFrameBytes, 1024 * 1024, 16 * 1024 * 1024);\n // With the uid split on, the app server runs as the agent uid through the\n // launch shim. A process-group kill of the shim still ends it: the launcher\n // kills the agent's whole group when the shim dies.\n const target = wrapAgentCommand(options.command, options.args, resolveAgentExec());\n this.child = spawn(target.command, target.args, {\n cwd: options.cwd,\n env: options.env,\n stdio: \"pipe\",\n detached: options.processGroup === true && process.platform !== \"win32\",\n });\n this.closed = new Promise((resolve) =>\n this.child.once(\"close\", () => {\n this.childClosed = true;\n resolve();\n }),\n );\n this.child.stdout.setEncoding(\"utf8\");\n this.child.stdout.on(\"data\", (chunk: string) => this.receive(chunk));\n // Drain without retaining raw diagnostic output: native stderr can contain secrets.\n this.child.stderr.resume();\n this.child.on(\"error\", () => this.fail(\"process\"));\n this.child.stdin.on(\"error\", () => this.fail(\"process\"));\n this.child.stdout.on(\"error\", () => this.fail(\"process\"));\n this.child.stderr.on(\"error\", () => this.fail(\"process\"));\n this.child.once(\"exit\", () => this.fail(\"process\"));\n }\n\n /** Spawn and finish the native initialize/initialized handshake before returning. */\n static async connect(\n options: CodexAppServerOptions,\n signal?: AbortSignal,\n ): Promise<CodexAppServerClient> {\n let client: CodexAppServerClient | undefined;\n const abort = () => client?.fail(\"closed\");\n try {\n if (signal?.aborted) throw new CodexAppServerError(\"closed\");\n client = new CodexAppServerClient(options);\n signal?.addEventListener(\"abort\", abort, { once: true });\n await client.request(\"initialize\", {\n clientInfo: options.clientInfo,\n capabilities: { experimentalApi: true },\n });\n client.write({ method: \"initialized\" });\n return client;\n } catch (error) {\n await client?.dispose();\n throw error instanceof CodexAppServerError ? error : new CodexAppServerError(\"process\");\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n }\n }\n\n /** Timeout closes this generation, so late replies can never satisfy a later request. */\n request<M extends CodexRequestMethod>(\n method: M,\n params: NativeRequests[M][\"params\"],\n ): Promise<NativeRequests[M][\"result\"]> {\n if (this.terminal) return Promise.reject(new CodexAppServerError(\"closed\"));\n if (this.pending.size >= this.capacity)\n return Promise.reject(new CodexAppServerError(\"capacity\"));\n const id = this.nextId++;\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => this.fail(\"timeout\"), this.timeout);\n this.pending.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n timer,\n ...(method === \"thread/resume\" &&\n params !== null &&\n \"threadId\" in params &&\n typeof params.threadId === \"string\"\n ? { resumeThreadId: params.threadId }\n : {}),\n });\n try {\n this.write({ id, method, params });\n } catch {\n this.fail(\"protocol\");\n }\n });\n }\n\n /** Reject pending work immediately and wait a bounded interval for process shutdown. */\n async dispose(): Promise<void> {\n this.fail(\"closed\");\n let timer: ReturnType<typeof setTimeout> | undefined;\n await Promise.race([\n this.closed,\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, 1000);\n }),\n ]);\n clearTimeout(timer);\n }\n\n /** Positive exit proof for callers that may replace a failed native generation. */\n get terminationConfirmed(): boolean {\n if (!this.childClosed) return false;\n if (!this.options.processGroup || process.platform === \"win32\" || !this.child.pid) return true;\n // A group left holding only unreaped zombies runs nothing; a bare kill(-pid, 0) says otherwise.\n return !processGroupAlive(this.child.pid);\n }\n\n private fail(code: CodexAppServerError[\"code\"]): void {\n if (this.terminal) return;\n this.terminal = true;\n this.buffer = \"\";\n for (const request of this.pending.values()) {\n clearTimeout(request.timer);\n request.reject(new CodexAppServerError(code));\n }\n this.pending.clear();\n for (const controller of this.callbacks.values()) controller.abort();\n this.callbacks.clear();\n if (this.options.processGroup && process.platform !== \"win32\" && this.child.pid) {\n try {\n process.kill(-this.child.pid, \"SIGKILL\");\n } catch {\n this.child.kill(\"SIGKILL\");\n }\n } else this.child.kill(\"SIGKILL\");\n try {\n this.options.onClose?.(new CodexAppServerError(code));\n } catch {\n // Observer failures cannot interrupt transport cleanup.\n }\n }\n\n private write(frame: unknown): void {\n if (this.terminal) throw new CodexAppServerError(\"closed\");\n const line = `${JSON.stringify(frame)}\\n`;\n if (Buffer.byteLength(line) > this.frameLimit) throw new CodexAppServerError(\"protocol\");\n this.child.stdin.write(line);\n }\n\n private receive(chunk: string): void {\n if (this.terminal) return;\n this.buffer += chunk;\n try {\n for (;;) {\n const end = this.buffer.indexOf(\"\\n\");\n if (end < 0) break;\n const line = this.buffer.slice(0, end);\n this.buffer = this.buffer.slice(end + 1);\n if (Buffer.byteLength(line) > this.frameLimit) throw new CodexAppServerError(\"protocol\");\n if (!line.trim()) continue;\n const frame: unknown = JSON.parse(line);\n if (!record(frame)) throw new CodexAppServerError(\"protocol\");\n if (typeof frame.method === \"string\") {\n if (\"id\" in frame) {\n if (!validId(frame.id)) throw new CodexAppServerError(\"protocol\");\n void this.handleServerRequest(frame.id, frame.method, frame.params);\n } else this.options.onNotification?.(frame.method, frame.params);\n } else {\n if (\n typeof frame.id !== \"number\" ||\n !Number.isSafeInteger(frame.id) ||\n \"error\" in frame === \"result\" in frame\n )\n throw new CodexAppServerError(\"protocol\");\n const request = this.pending.get(frame.id);\n if (!request) throw new CodexAppServerError(\"protocol\");\n clearTimeout(request.timer);\n this.pending.delete(frame.id);\n if (\"error\" in frame) {\n // Pinned 0.153.4 thread_store_resume_read_error maps only missing rollout\n // to this exact invalid-request message. Never retain raw native errors.\n const missing =\n request.resumeThreadId &&\n record(frame.error) &&\n frame.error.code === -32600 &&\n frame.error.message === `no rollout found for thread id ${request.resumeThreadId}`;\n request.reject(\n missing ? new CodexNativeStateUnavailable() : new CodexAppServerError(\"rejected\"),\n );\n } else request.resolve(frame.result);\n }\n if (this.terminal) return;\n }\n if (Buffer.byteLength(this.buffer) > this.frameLimit)\n throw new CodexAppServerError(\"protocol\");\n } catch {\n this.fail(\"protocol\");\n }\n }\n\n private async handleServerRequest(\n id: string | number,\n method: string,\n params: unknown,\n ): Promise<void> {\n if (this.callbacks.has(id) || this.callbacks.size >= this.capacity)\n return this.fail(\"protocol\");\n const controller = new AbortController();\n this.callbacks.set(id, controller);\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const handler = Object.hasOwn(this.options.onServerRequest ?? {}, method)\n ? this.options.onServerRequest?.[method as keyof NativeServerRequests]\n : undefined;\n if (!handler) throw new CodexAppServerError(\"rejected\");\n const result = await Promise.race([\n Promise.resolve().then(() => {\n if (this.terminal || controller.signal.aborted) throw new CodexAppServerError(\"closed\");\n return (handler as (params: unknown, signal: AbortSignal) => Promise<unknown>)(\n params,\n controller.signal,\n );\n }),\n new Promise<never>((_, reject) => {\n controller.signal.addEventListener(\n \"abort\",\n () => reject(new CodexAppServerError(\"closed\")),\n { once: true },\n );\n timer = setTimeout(() => {\n controller.abort();\n reject(new CodexAppServerError(\"timeout\"));\n }, this.callbackTimeout);\n }),\n ]);\n const current = this.options.canReplyToServerRequest?.(method, params) ?? true;\n if (\n !current ||\n this.terminal ||\n controller.signal.aborted ||\n this.callbacks.get(id) !== controller\n )\n throw new CodexAppServerError(\"closed\");\n this.write({ id, result });\n } catch {\n if (!this.terminal) {\n try {\n this.write({ id, error: { code: -32603, message: \"Codex client request failed\" } });\n } catch {\n this.fail(\"protocol\");\n }\n }\n } finally {\n clearTimeout(timer);\n controller.abort();\n this.callbacks.delete(id);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../bridge/src/codex-app-server.ts"],"names":[],"mappings":"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","file":"chunk-KNY356I3.js","sourcesContent":["import { CodexNativeStateUnavailable } from \"./codex/native-state.js\";\nimport { spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\n// Narrow module, not the `core` barrel: the barrel's chunks carry `import.meta`,\n// which breaks consumers that transpile this entry to CommonJS.\nimport { resolveAgentExec, wrapAgentCommand } from \"./agent-exec.js\";\nimport { processGroupAlive } from \"../../core/src/process-alive.js\";\nimport type { NativeRequests, NativeServerRequests } from \"./codex/native-protocol.generated.js\";\n\n/** The retained native request types, exposed only through this client surface. */\nexport type CodexRequestMethod = keyof NativeRequests;\n/** Native callback handlers receive cancellation when their process is disposed. */\nexport type CodexServerRequestHandlers = {\n [M in keyof NativeServerRequests]?: (\n params: NativeServerRequests[M][\"params\"],\n signal: AbortSignal,\n ) => Promise<NativeServerRequests[M][\"result\"]>;\n};\n/** Explicit process inputs keep managed callers from inheriting ambient credentials. */\nexport interface CodexAppServerOptions {\n command: string;\n args: string[];\n cwd: string;\n env: Record<string, string>;\n clientInfo: NativeRequests[\"initialize\"][\"params\"][\"clientInfo\"];\n requestTimeoutMs?: number;\n serverRequestTimeoutMs?: number;\n maxPendingRequests?: number;\n maxFrameBytes?: number;\n /** Isolate and reap the native process group on POSIX. */\n processGroup?: boolean;\n onServerRequest?: CodexServerRequestHandlers;\n /** Final synchronous lifecycle veto before a callback reply; cannot grant a missing handler. */\n canReplyToServerRequest?: (method: string, params: unknown) => boolean;\n onNotification?: (method: string, params: unknown) => void;\n /** Exactly once on terminal failure or disposal, even with no RPC pending. */\n onClose?: (error: CodexAppServerError) => void;\n}\n/** Safe error codes never contain stderr, native errors, RPC payloads or credentials. */\nexport class CodexAppServerError extends Error {\n constructor(\n readonly code: \"closed\" | \"process\" | \"protocol\" | \"timeout\" | \"rejected\" | \"capacity\",\n ) {\n super(`Codex App Server ${code}`);\n this.name = \"CodexAppServerError\";\n }\n}\ntype Pending = {\n resolve: (value: unknown) => void;\n reject: (error: CodexAppServerError | CodexNativeStateUnavailable) => void;\n timer: ReturnType<typeof setTimeout>;\n resumeThreadId?: string;\n};\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst validId = (value: unknown): value is string | number =>\n typeof value === \"string\" || (typeof value === \"number\" && Number.isSafeInteger(value));\nfunction bound(value: number | undefined, fallback: number, maximum: number): number {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0 || result > maximum)\n throw new CodexAppServerError(\"protocol\");\n return result;\n}\n\n/** One initialized stdio process with correlated, bounded requests and terminal disposal. */\nexport class CodexAppServerClient {\n private readonly pending = new Map<number, Pending>();\n private readonly callbacks = new Map<string | number, AbortController>();\n private readonly timeout: number;\n private readonly callbackTimeout: number;\n private readonly capacity: number;\n private readonly frameLimit: number;\n private readonly child: ChildProcessWithoutNullStreams;\n private readonly closed: Promise<void>;\n private terminal = false;\n private childClosed = false;\n private nextId = 1;\n private buffer = \"\";\n\n private constructor(private readonly options: CodexAppServerOptions) {\n this.timeout = bound(options.requestTimeoutMs, 15_000, 300_000);\n this.callbackTimeout = bound(options.serverRequestTimeoutMs, 30_000, 300_000);\n this.capacity = bound(options.maxPendingRequests, 64, 1024);\n this.frameLimit = bound(options.maxFrameBytes, 1024 * 1024, 16 * 1024 * 1024);\n // With the uid split on, the app server runs as the agent uid through the\n // launch shim. A process-group kill of the shim still ends it: the launcher\n // kills the agent's whole group when the shim dies.\n const target = wrapAgentCommand(options.command, options.args, resolveAgentExec());\n this.child = spawn(target.command, target.args, {\n cwd: options.cwd,\n env: options.env,\n stdio: \"pipe\",\n detached: options.processGroup === true && process.platform !== \"win32\",\n });\n this.closed = new Promise((resolve) =>\n this.child.once(\"close\", () => {\n this.childClosed = true;\n resolve();\n }),\n );\n this.child.stdout.setEncoding(\"utf8\");\n this.child.stdout.on(\"data\", (chunk: string) => this.receive(chunk));\n // Drain without retaining raw diagnostic output: native stderr can contain secrets.\n this.child.stderr.resume();\n this.child.on(\"error\", () => this.fail(\"process\"));\n this.child.stdin.on(\"error\", () => this.fail(\"process\"));\n this.child.stdout.on(\"error\", () => this.fail(\"process\"));\n this.child.stderr.on(\"error\", () => this.fail(\"process\"));\n this.child.once(\"exit\", () => this.fail(\"process\"));\n }\n\n /** Spawn and finish the native initialize/initialized handshake before returning. */\n static async connect(\n options: CodexAppServerOptions,\n signal?: AbortSignal,\n ): Promise<CodexAppServerClient> {\n let client: CodexAppServerClient | undefined;\n const abort = () => client?.fail(\"closed\");\n try {\n if (signal?.aborted) throw new CodexAppServerError(\"closed\");\n client = new CodexAppServerClient(options);\n signal?.addEventListener(\"abort\", abort, { once: true });\n await client.request(\"initialize\", {\n clientInfo: options.clientInfo,\n capabilities: { experimentalApi: true },\n });\n client.write({ method: \"initialized\" });\n return client;\n } catch (error) {\n await client?.dispose();\n throw error instanceof CodexAppServerError ? error : new CodexAppServerError(\"process\");\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n }\n }\n\n /** Timeout closes this generation, so late replies can never satisfy a later request. */\n request<M extends CodexRequestMethod>(\n method: M,\n params: NativeRequests[M][\"params\"],\n ): Promise<NativeRequests[M][\"result\"]> {\n if (this.terminal) return Promise.reject(new CodexAppServerError(\"closed\"));\n if (this.pending.size >= this.capacity)\n return Promise.reject(new CodexAppServerError(\"capacity\"));\n const id = this.nextId++;\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => this.fail(\"timeout\"), this.timeout);\n this.pending.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n timer,\n ...(method === \"thread/resume\" &&\n params !== null &&\n \"threadId\" in params &&\n typeof params.threadId === \"string\"\n ? { resumeThreadId: params.threadId }\n : {}),\n });\n try {\n this.write({ id, method, params });\n } catch {\n this.fail(\"protocol\");\n }\n });\n }\n\n /** Reject pending work immediately and wait a bounded interval for process shutdown. */\n async dispose(): Promise<void> {\n this.fail(\"closed\");\n let timer: ReturnType<typeof setTimeout> | undefined;\n await Promise.race([\n this.closed,\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, 1000);\n }),\n ]);\n clearTimeout(timer);\n }\n\n /** Positive exit proof for callers that may replace a failed native generation. */\n get terminationConfirmed(): boolean {\n if (!this.childClosed) return false;\n if (!this.options.processGroup || process.platform === \"win32\" || !this.child.pid) return true;\n // A group left holding only unreaped zombies runs nothing; a bare kill(-pid, 0) says otherwise.\n return !processGroupAlive(this.child.pid);\n }\n\n private fail(code: CodexAppServerError[\"code\"]): void {\n if (this.terminal) return;\n this.terminal = true;\n this.buffer = \"\";\n for (const request of this.pending.values()) {\n clearTimeout(request.timer);\n request.reject(new CodexAppServerError(code));\n }\n this.pending.clear();\n for (const controller of this.callbacks.values()) controller.abort();\n this.callbacks.clear();\n if (this.options.processGroup && process.platform !== \"win32\" && this.child.pid) {\n try {\n process.kill(-this.child.pid, \"SIGKILL\");\n } catch {\n this.child.kill(\"SIGKILL\");\n }\n } else this.child.kill(\"SIGKILL\");\n try {\n this.options.onClose?.(new CodexAppServerError(code));\n } catch {\n // Observer failures cannot interrupt transport cleanup.\n }\n }\n\n private write(frame: unknown): void {\n if (this.terminal) throw new CodexAppServerError(\"closed\");\n const line = `${JSON.stringify(frame)}\\n`;\n if (Buffer.byteLength(line) > this.frameLimit) throw new CodexAppServerError(\"protocol\");\n this.child.stdin.write(line);\n }\n\n private receive(chunk: string): void {\n if (this.terminal) return;\n this.buffer += chunk;\n try {\n for (;;) {\n const end = this.buffer.indexOf(\"\\n\");\n if (end < 0) break;\n const line = this.buffer.slice(0, end);\n this.buffer = this.buffer.slice(end + 1);\n if (Buffer.byteLength(line) > this.frameLimit) throw new CodexAppServerError(\"protocol\");\n if (!line.trim()) continue;\n const frame: unknown = JSON.parse(line);\n if (!record(frame)) throw new CodexAppServerError(\"protocol\");\n if (typeof frame.method === \"string\") {\n if (\"id\" in frame) {\n if (!validId(frame.id)) throw new CodexAppServerError(\"protocol\");\n void this.handleServerRequest(frame.id, frame.method, frame.params);\n } else this.options.onNotification?.(frame.method, frame.params);\n } else {\n if (\n typeof frame.id !== \"number\" ||\n !Number.isSafeInteger(frame.id) ||\n \"error\" in frame === \"result\" in frame\n )\n throw new CodexAppServerError(\"protocol\");\n const request = this.pending.get(frame.id);\n if (!request) throw new CodexAppServerError(\"protocol\");\n clearTimeout(request.timer);\n this.pending.delete(frame.id);\n if (\"error\" in frame) {\n // Pinned 0.153.4 thread_store_resume_read_error maps only missing rollout\n // to this exact invalid-request message. Never retain raw native errors.\n const missing =\n request.resumeThreadId &&\n record(frame.error) &&\n frame.error.code === -32600 &&\n frame.error.message === `no rollout found for thread id ${request.resumeThreadId}`;\n request.reject(\n missing ? new CodexNativeStateUnavailable() : new CodexAppServerError(\"rejected\"),\n );\n } else request.resolve(frame.result);\n }\n if (this.terminal) return;\n }\n if (Buffer.byteLength(this.buffer) > this.frameLimit)\n throw new CodexAppServerError(\"protocol\");\n } catch {\n this.fail(\"protocol\");\n }\n }\n\n private async handleServerRequest(\n id: string | number,\n method: string,\n params: unknown,\n ): Promise<void> {\n if (this.callbacks.has(id) || this.callbacks.size >= this.capacity)\n return this.fail(\"protocol\");\n const controller = new AbortController();\n this.callbacks.set(id, controller);\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const handler = Object.hasOwn(this.options.onServerRequest ?? {}, method)\n ? this.options.onServerRequest?.[method as keyof NativeServerRequests]\n : undefined;\n if (!handler) throw new CodexAppServerError(\"rejected\");\n const result = await Promise.race([\n Promise.resolve().then(() => {\n if (this.terminal || controller.signal.aborted) throw new CodexAppServerError(\"closed\");\n return (handler as (params: unknown, signal: AbortSignal) => Promise<unknown>)(\n params,\n controller.signal,\n );\n }),\n new Promise<never>((_, reject) => {\n controller.signal.addEventListener(\n \"abort\",\n () => reject(new CodexAppServerError(\"closed\")),\n { once: true },\n );\n timer = setTimeout(() => {\n controller.abort();\n reject(new CodexAppServerError(\"timeout\"));\n }, this.callbackTimeout);\n }),\n ]);\n const current = this.options.canReplyToServerRequest?.(method, params) ?? true;\n if (\n !current ||\n this.terminal ||\n controller.signal.aborted ||\n this.callbacks.get(id) !== controller\n )\n throw new CodexAppServerError(\"closed\");\n this.write({ id, result });\n } catch {\n if (!this.terminal) {\n try {\n this.write({ id, error: { code: -32603, message: \"Codex client request failed\" } });\n } catch {\n this.fail(\"protocol\");\n }\n }\n } finally {\n clearTimeout(timer);\n controller.abort();\n this.callbacks.delete(id);\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { okJson, err } from './chunk-X5YPJV4N.js';
1
+ import { okJson, err } from './chunk-3MWQKQUB.js';
2
2
  import { execFile } from 'child_process';
3
3
  import { promisify } from 'util';
4
4
 
@@ -31,11 +31,11 @@ function resolveEnvRef(ref) {
31
31
  if (val) return { resolved: true, value: val, provider: "env" };
32
32
  return { resolved: false, error: `'${ref}' not found in environment` };
33
33
  }
34
- async function workspaceInfo(plugin, driver, model) {
34
+ async function workspaceInfo(plugin, harness, model) {
35
35
  try {
36
36
  const { mounts, connectors } = splitConnectors(plugin);
37
37
  return okJson({
38
- driver,
38
+ harness,
39
39
  model,
40
40
  mountCount: mounts.length,
41
41
  connectorCount: connectors.length,
@@ -68,22 +68,22 @@ async function workspaceTestSecret(ref) {
68
68
  return err(e instanceof Error ? e.message : String(e));
69
69
  }
70
70
  }
71
- async function workspaceValidate(plugin, driver) {
71
+ async function workspaceValidate(plugin, harness) {
72
72
  const report = {
73
- driver: { name: driver, installed: false },
73
+ harness: { name: harness, installed: false },
74
74
  mounts: [],
75
75
  connectors: []
76
76
  };
77
77
  try {
78
- const binaryName = driver === "omp" ? "omp" : "claude";
78
+ const binaryName = harness === "omp" ? "omp" : "claude";
79
79
  await execFileAsync("which", [binaryName], {
80
80
  timeout: WHICH_TIMEOUT_MS,
81
81
  killSignal: "SIGKILL"
82
82
  });
83
- report.driver.installed = true;
83
+ report.harness.installed = true;
84
84
  } catch {
85
- report.driver.installed = false;
86
- report.driver.hint = `Install the '${driver}' binary to use this driver`;
85
+ report.harness.installed = false;
86
+ report.harness.hint = `Install the '${harness}' binary to use this harness`;
87
87
  }
88
88
  const { mounts, connectors } = splitConnectors(plugin);
89
89
  for (const v of mounts) {
@@ -102,7 +102,7 @@ async function workspaceValidate(plugin, driver) {
102
102
  ok: true
103
103
  });
104
104
  }
105
- report.passed = report.driver.installed && report.mounts.every((v) => v.ok) && report.connectors.every((c) => c.ok);
105
+ report.passed = report.harness.installed && report.mounts.every((v) => v.ok) && report.connectors.every((c) => c.ok);
106
106
  return okJson(report);
107
107
  }
108
108
  async function workspaceReload(plugin) {
@@ -117,5 +117,5 @@ async function workspaceReload(plugin) {
117
117
  }
118
118
 
119
119
  export { workspaceInfo, workspaceReload, workspaceTestSecret, workspaceValidate };
120
- //# sourceMappingURL=chunk-4ZTPYIBE.js.map
121
- //# sourceMappingURL=chunk-4ZTPYIBE.js.map
120
+ //# sourceMappingURL=chunk-KW37WNXY.js.map
121
+ //# sourceMappingURL=chunk-KW37WNXY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workspace-plugin/src/tools/validator.ts"],"names":["val"],"mappings":"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","file":"chunk-KW37WNXY.js","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Wall-clock ceiling for the harness-binary probe.\n *\n * `which` searches `PATH`, and a `PATH` entry on a wedged network mount makes\n * the lookup itself unbounded. This runs on an agent request path inside the\n * long-lived `skaile serve` process, so the probe must fail rather than wait.\n */\nconst WHICH_TIMEOUT_MS = 10_000;\n\n// Minimal interface for WorkspacePlugin to avoid circular dep.\n// The unified ConnectorManager owns both filesystem-face (mountable) and\n// tool-face connectors — `listConnectors()` returns both; filesystem-face\n// entries carry a `mountPath`.\ninterface ConnectorSummary {\n id: string;\n driver: string;\n mountPath?: string;\n}\ninterface PluginLike {\n projectDir: string;\n connectorManager: {\n listConnectors(): ConnectorSummary[];\n listFailedConnectors?(): unknown[];\n } | null;\n reload(): Promise<void>;\n}\n\n/** Split a manager's connectors into mountable / tool-face groups. */\nfunction splitConnectors(plugin: PluginLike): {\n mounts: ConnectorSummary[];\n connectors: ConnectorSummary[];\n} {\n const all = plugin.connectorManager?.listConnectors() ?? [];\n return {\n mounts: all.filter((c) => typeof c.mountPath === \"string\"),\n connectors: all.filter((c) => typeof c.mountPath !== \"string\"),\n };\n}\n\n/**\n * Connected mounts/connectors plus the declared-but-failed ones. Without\n * `failed`, a declaration that never connected leaves every count unchanged,\n * which reads the same as a declaration that was never saved.\n */\nfunction countConnectors(plugin: PluginLike): {\n mounts: number;\n connectors: number;\n failed: number;\n} {\n const { mounts, connectors } = splitConnectors(plugin);\n const failed = plugin.connectorManager?.listFailedConnectors?.() ?? [];\n return { mounts: mounts.length, connectors: connectors.length, failed: failed.length };\n}\n\nfunction maskSecret(value: string): string {\n if (value.length <= 4) return \"****\";\n return `${value.slice(0, 4)}****`;\n}\n\nfunction resolveEnvRef(ref: string): {\n resolved: boolean;\n value?: string;\n provider?: string;\n error?: string;\n} {\n if (ref.startsWith(\"env:\")) {\n const varName = ref.slice(4);\n const val = process.env[varName];\n if (val) return { resolved: true, value: val, provider: \"env\" };\n return { resolved: false, error: `env var '${varName}' is not set` };\n }\n const val = process.env[ref];\n if (val) return { resolved: true, value: val, provider: \"env\" };\n return { resolved: false, error: `'${ref}' not found in environment` };\n}\n\n/**\n * Return a summary of the current workspace configuration.\n *\n * Reports the active harness, model, mount count, connector count, and\n * per-resource descriptors. Endpoints are not summarised here: they live in\n * the session's AI provider registry, which `skaile providers list` prints.\n *\n * @param plugin - Plugin instance (or compatible shape) exposing managers.\n * @param harness - Harness name (e.g. `\"omp\"`, `\"claude-sdk\"`).\n * @param model - Model identifier, if resolved.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function workspaceInfo(\n plugin: PluginLike,\n harness: string,\n model: string | undefined,\n): Promise<ToolResult> {\n try {\n const { mounts, connectors } = splitConnectors(plugin);\n return okJson({\n harness,\n model,\n mountCount: mounts.length,\n connectorCount: connectors.length,\n mounts: mounts.map((v) => ({ id: v.id, driver: v.driver, mounted: true })),\n connectors: connectors.map((c) => ({ id: c.id, adapter: c.driver })),\n projectDir: plugin.projectDir,\n });\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Test resolution of a secret reference.\n *\n * Resolves `env:<VAR>` references against `process.env`. For other provider\n * schemes (e.g. `forge:key`) reports that a running forge/vault context is\n * required. Returns a JSON object with `{ resolved, provider?, masked? }` —\n * the secret value is never returned in plain text.\n *\n * @param ref - Secret reference string, e.g. `\"env:ANTHROPIC_API_KEY\"`.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function workspaceTestSecret(ref: string): Promise<ToolResult> {\n try {\n const result = resolveEnvRef(ref);\n if (result.resolved && result.value) {\n return okJson({\n resolved: true,\n provider: result.provider,\n masked: maskSecret(result.value),\n });\n }\n if (ref.includes(\":\") && !ref.startsWith(\"env:\")) {\n return okJson({\n resolved: false,\n error: `Provider '${ref.split(\":\")[0]}' requires a running forge/vault context. Use env: refs for standalone validation.`,\n });\n }\n return okJson({ resolved: false, error: result.error });\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Run a full health check on the workspace.\n *\n * Checks whether the harness binary is installed, then validates every\n * declared mount and connector. Returns a JSON report with a top-level\n * `passed` boolean and per-resource `ok` flags.\n *\n * @param plugin - Plugin instance (or compatible shape) exposing managers.\n * @param harness - Harness name used to locate the binary (`omp` or `claude`).\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function workspaceValidate(plugin: PluginLike, harness: string): Promise<ToolResult> {\n const report: Record<string, unknown> = {\n harness: { name: harness, installed: false },\n mounts: [] as unknown[],\n connectors: [] as unknown[],\n };\n\n try {\n const binaryName = harness === \"omp\" ? \"omp\" : \"claude\";\n // `killSignal: \"SIGKILL\"`: a process stuck in an uninterruptible wait on a\n // dead mount never receives SIGTERM, so a SIGTERM-based timeout would not\n // actually end it — the same reason the recipe resolver uses SIGKILL.\n await execFileAsync(\"which\", [binaryName], {\n timeout: WHICH_TIMEOUT_MS,\n killSignal: \"SIGKILL\",\n });\n (report.harness as any).installed = true;\n } catch {\n (report.harness as any).installed = false;\n (report.harness as any).hint = `Install the '${harness}' binary to use this harness`;\n }\n\n const { mounts, connectors } = splitConnectors(plugin);\n for (const v of mounts) {\n (report.mounts as any[]).push({\n id: v.id,\n driver: v.driver,\n mounted: true,\n ok: true,\n });\n }\n\n for (const c of connectors) {\n (report.connectors as any[]).push({\n id: c.id,\n adapter: c.driver,\n connected: true,\n ok: true,\n });\n }\n\n report.passed =\n (report.harness as any).installed &&\n (report.mounts as any[]).every((v) => v.ok) &&\n (report.connectors as any[]).every((c) => c.ok);\n\n return okJson(report);\n}\n\n/**\n * Re-read `skaile.yaml` and reinitialise all plugin resources.\n *\n * Delegates to `plugin.reload()`. Returns a JSON object comparing the\n * mount and connector counts before and after the reload.\n *\n * @param plugin - Plugin instance exposing a `reload()` method.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function workspaceReload(plugin: PluginLike): Promise<ToolResult> {\n try {\n const before = countConnectors(plugin);\n await plugin.reload();\n const after = countConnectors(plugin);\n return okJson({ reloaded: true, before, after });\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { softDepName } from './chunk-VM3PH7BB.js';
2
- import { SKAILE_YAML_DEFAULT, resolveSkWorkspaceConfig } from './chunk-2NOLF7B2.js';
3
- import { SUPPORTED_DRIVER_TARGETS } from './chunk-IG5LZ3WU.js';
1
+ import { softDepName } from './chunk-OAHVKSQJ.js';
2
+ import { SKAILE_YAML_DEFAULT, resolveSkWorkspaceConfig } from './chunk-OHNKYHRR.js';
3
+ import { SUPPORTED_HARNESSES } from './chunk-VTETQCR6.js';
4
4
  import { existsSync, readdirSync, readFileSync } from 'fs';
5
5
  import { homedir } from 'os';
6
6
  import path from 'path';
@@ -135,7 +135,7 @@ function warnLegacyClaudeCopies(am) {
135
135
  const shown = rel.slice(0, LEGACY_COPY_LIST_MAX).join(", ");
136
136
  const more = rel.length > LEGACY_COPY_LIST_MAX ? `, +${rel.length - LEGACY_COPY_LIST_MAX} more` : "";
137
137
  logWarn(
138
- `Stale ${S.cmd(".claude/")} copies no longer managed (deploying to ${am.driverTarget}): ${shown}${more}. Delete them once ${S.cmd("skaile install")} has deployed to ${am.driverTarget}, or pass ${S.cmd("--target claude-code")} to keep using .claude/.`
138
+ `Stale ${S.cmd(".claude/")} copies no longer managed (deploying to ${am.harness}): ${shown}${more}. Delete them once ${S.cmd("skaile install")} has deployed to ${am.harness}, or pass ${S.cmd("--target claude-code")} to keep using .claude/.`
139
139
  );
140
140
  }
141
141
  function bareSoftDepName(ref) {
@@ -187,8 +187,8 @@ function parseHarnessFilter(raw) {
187
187
  const ids = raw.split(",").map((s) => s.trim()).filter(Boolean);
188
188
  const out = [];
189
189
  for (const id of ids) {
190
- if (!SUPPORTED_DRIVER_TARGETS.includes(id)) {
191
- logErr(`unknown harness '${id}' \u2014 expected one of: ${SUPPORTED_DRIVER_TARGETS.join(", ")}`);
190
+ if (!SUPPORTED_HARNESSES.includes(id)) {
191
+ logErr(`unknown harness '${id}' \u2014 expected one of: ${SUPPORTED_HARNESSES.join(", ")}`);
192
192
  process.exit(1);
193
193
  }
194
194
  out.push(id);
@@ -219,5 +219,5 @@ function warnFilesOnlyDelegates(projectDir, target) {
219
219
  }
220
220
 
221
221
  export { KIND_COL_WIDTH, S, TARGET_DEFAULT_HINT, bareSoftDepName, colorRef, deferredWarnings, fitWidth, formatRelativeTime, formatSoftDepAddPreview, formatSoftDepHint, formatSoftDepRemovePreview, formatSoftDepSection, kindColor, kindColorPad, logErr, logInfo, logNoProject, logOk, logWarn, parseHarnessFilter, reportLegacyOmpCopies, requireProjectConfig, warnFilesOnlyDelegates, warnLegacyClaudeCopies, warnPlaceholderBodies };
222
- //# sourceMappingURL=chunk-BO426QWN.js.map
223
- //# sourceMappingURL=chunk-BO426QWN.js.map
222
+ //# sourceMappingURL=chunk-KX2PT5Q4.js.map
223
+ //# sourceMappingURL=chunk-KX2PT5Q4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../cli/src/helpers.ts"],"names":[],"mappings":"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","file":"chunk-KX2PT5Q4.js","sourcesContent":["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\";\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 * 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/** 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` and `--project-dir`, when there is one: skaile\n * does not search parent directories.\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 logErr(\n `${S.cmd(parent)} holds a ${S.cmd(\"skaile.yaml\")}: run from there or pass ${S.cmd(`--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 `.claude/` copies named inline by {@link warnLegacyClaudeCopies}. */\nconst LEGACY_COPY_LIST_MAX = 5;\n\n/**\n * Print ONE warning when tracked assets still have a copy in `.claude/` although\n * the project deploys to another harness (the old default target, see\n * MIGRATION.md). Those copies are orphans: `remove` / `clean` / `list` only look\n * in the active harness dir. Nothing is deleted. Silent when there are none.\n */\nexport function warnLegacyClaudeCopies(am: {\n projectDir: string;\n harness: string;\n listLegacyClaudeDeployed(): Array<{ path: string }>;\n}): void {\n let legacy: Array<{ path: string }>;\n try {\n legacy = am.listLegacyClaudeDeployed();\n } catch {\n return; // advisory only — never fail the command\n }\n if (legacy.length === 0) return;\n const rel = legacy.map((l) => path.relative(am.projectDir, l.path));\n const shown = rel.slice(0, LEGACY_COPY_LIST_MAX).join(\", \");\n const more =\n rel.length > LEGACY_COPY_LIST_MAX ? `, +${rel.length - LEGACY_COPY_LIST_MAX} more` : \"\";\n logWarn(\n `Stale ${S.cmd(\".claude/\")} 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 claude-code\")} to keep using .claude/.`,\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(`unknown harness '${id}' — expected one of: ${SUPPORTED_HARNESSES.join(\", \")}`);\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"]}