@skaile/workspaces 6.1.0 → 6.3.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 (406) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/ai-sdk.d.ts +2 -0
  3. package/dist/ai-sdk.js +111 -0
  4. package/dist/ai-sdk.js.map +1 -0
  5. package/dist/{asset-feeds-HJFV7UPW.js → asset-feeds-3YO2352Y.js} +26 -26
  6. package/dist/{asset-feeds-HJFV7UPW.js.map → asset-feeds-3YO2352Y.js.map} +1 -1
  7. package/dist/asset-manager/catalog-deployer.js +10 -10
  8. package/dist/asset-manager/fragments.js +1 -1
  9. package/dist/asset-manager/index.js +18 -18
  10. package/dist/asset-manager/installer.js +13 -13
  11. package/dist/asset-manager/renderers.js +11 -11
  12. package/dist/asset-manager/src/index.d.ts +149 -16
  13. package/dist/asset-manager/src/index.d.ts.map +1 -1
  14. package/dist/asset-manager/src/installer.d.ts +9 -0
  15. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  16. package/dist/asset-manager/src/renderers.d.ts +7 -0
  17. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  18. package/dist/bridge/harnesses/claude-sdk.js +16 -15
  19. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  20. package/dist/bridge/harnesses/codex.js +25 -17
  21. package/dist/bridge/harnesses/codex.js.map +1 -1
  22. package/dist/bridge/harnesses/continue.js +15 -14
  23. package/dist/bridge/harnesses/continue.js.map +1 -1
  24. package/dist/bridge/harnesses/echo.js +5 -4
  25. package/dist/bridge/harnesses/echo.js.map +1 -1
  26. package/dist/bridge/harnesses/gemini.js +11 -10
  27. package/dist/bridge/harnesses/goose.js +15 -14
  28. package/dist/bridge/harnesses/goose.js.map +1 -1
  29. package/dist/bridge/harnesses/omp.js +16 -8
  30. package/dist/bridge/harnesses/omp.js.map +1 -1
  31. package/dist/bridge/harnesses/opencode.js +15 -14
  32. package/dist/bridge/harnesses/opencode.js.map +1 -1
  33. package/dist/bridge/harnesses/qwen.js +11 -10
  34. package/dist/bridge/harnesses/qwen.js.map +1 -1
  35. package/dist/bridge/index.js +21 -19
  36. package/dist/bridge/src/ai-sdk.d.ts +46 -0
  37. package/dist/bridge/src/ai-sdk.d.ts.map +1 -0
  38. package/dist/bridge/src/harness-model-check.d.ts +15 -0
  39. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  40. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
  41. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  42. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  43. package/dist/bridge/src/index.d.ts +2 -1
  44. package/dist/bridge/src/index.d.ts.map +1 -1
  45. package/dist/bridge/src/provider-registry-load.d.ts +30 -0
  46. package/dist/bridge/src/provider-registry-load.d.ts.map +1 -0
  47. package/dist/bridge/src/runner-private-env.d.ts +7 -0
  48. package/dist/bridge/src/runner-private-env.d.ts.map +1 -1
  49. package/dist/{chunk-SVTMNSPI.js → chunk-2TFKXSB5.js} +5 -5
  50. package/dist/{chunk-SVTMNSPI.js.map → chunk-2TFKXSB5.js.map} +1 -1
  51. package/dist/{chunk-NB7SYQYP.js → chunk-32FYVSSW.js} +9 -28
  52. package/dist/chunk-32FYVSSW.js.map +1 -0
  53. package/dist/{chunk-QAKUD6QN.js → chunk-4QRJBY2P.js} +3 -3
  54. package/dist/{chunk-QAKUD6QN.js.map → chunk-4QRJBY2P.js.map} +1 -1
  55. package/dist/{chunk-XFIEVEU7.js → chunk-6OHZUUR7.js} +5 -4
  56. package/dist/chunk-6OHZUUR7.js.map +1 -0
  57. package/dist/{chunk-ILLTBKDJ.js → chunk-6UP2EDFN.js} +4 -313
  58. package/dist/chunk-6UP2EDFN.js.map +1 -0
  59. package/dist/{chunk-ZDLUQLI6.js → chunk-6WH2WE4B.js} +15 -5
  60. package/dist/chunk-6WH2WE4B.js.map +1 -0
  61. package/dist/{chunk-HPMQRAIF.js → chunk-72NT2TJU.js} +8 -7
  62. package/dist/chunk-72NT2TJU.js.map +1 -0
  63. package/dist/{chunk-E572OHGY.js → chunk-76FLBODK.js} +4 -3
  64. package/dist/chunk-76FLBODK.js.map +1 -0
  65. package/dist/{chunk-5Y2KGB4H.js → chunk-7MV3NHPT.js} +35 -9
  66. package/dist/chunk-7MV3NHPT.js.map +1 -0
  67. package/dist/{chunk-QEULL4Q3.js → chunk-7QG2WRSN.js} +77 -18
  68. package/dist/chunk-7QG2WRSN.js.map +1 -0
  69. package/dist/{chunk-6YR4ALVX.js → chunk-7RH6E332.js} +7 -7
  70. package/dist/{chunk-6YR4ALVX.js.map → chunk-7RH6E332.js.map} +1 -1
  71. package/dist/{chunk-BBBCJSSU.js → chunk-7TSNR5H5.js} +4 -4
  72. package/dist/{chunk-BBBCJSSU.js.map → chunk-7TSNR5H5.js.map} +1 -1
  73. package/dist/{chunk-3GMOPFWH.js → chunk-AMJ6KEV7.js} +4 -4
  74. package/dist/{chunk-3GMOPFWH.js.map → chunk-AMJ6KEV7.js.map} +1 -1
  75. package/dist/{chunk-X3YGUKCG.js → chunk-BPTWWKGF.js} +3 -3
  76. package/dist/{chunk-X3YGUKCG.js.map → chunk-BPTWWKGF.js.map} +1 -1
  77. package/dist/{chunk-Z7ZEZZB6.js → chunk-C5HFK34M.js} +3 -3
  78. package/dist/chunk-C5HFK34M.js.map +1 -0
  79. package/dist/{chunk-EJPMNDTP.js → chunk-COUJOTAJ.js} +3 -3
  80. package/dist/{chunk-EJPMNDTP.js.map → chunk-COUJOTAJ.js.map} +1 -1
  81. package/dist/{chunk-J72MO2WA.js → chunk-DU26AVK2.js} +10 -9
  82. package/dist/chunk-DU26AVK2.js.map +1 -0
  83. package/dist/{chunk-YLLVSR2U.js → chunk-E5NQRHEB.js} +30 -7
  84. package/dist/chunk-E5NQRHEB.js.map +1 -0
  85. package/dist/{chunk-XGULGQA3.js → chunk-ELSGFI3I.js} +5 -4
  86. package/dist/chunk-ELSGFI3I.js.map +1 -0
  87. package/dist/{chunk-IHFGPHCT.js → chunk-EQNIBBB6.js} +49 -25
  88. package/dist/chunk-EQNIBBB6.js.map +1 -0
  89. package/dist/{chunk-BFMYYNDT.js → chunk-F3D25RGM.js} +11 -3
  90. package/dist/chunk-F3D25RGM.js.map +1 -0
  91. package/dist/{chunk-GNZBFSRB.js → chunk-H622YULS.js} +5 -4
  92. package/dist/chunk-H622YULS.js.map +1 -0
  93. package/dist/{chunk-FKQNBCDW.js → chunk-HDVLBEEX.js} +4 -4
  94. package/dist/{chunk-FKQNBCDW.js.map → chunk-HDVLBEEX.js.map} +1 -1
  95. package/dist/{chunk-AATHJRKL.js → chunk-HGOJEVHY.js} +4 -4
  96. package/dist/{chunk-AATHJRKL.js.map → chunk-HGOJEVHY.js.map} +1 -1
  97. package/dist/{chunk-CEKW3KXP.js → chunk-HH2H2ZV7.js} +18 -15
  98. package/dist/chunk-HH2H2ZV7.js.map +1 -0
  99. package/dist/{chunk-ZFUZ5AKM.js → chunk-HTGTNN2B.js} +3 -3
  100. package/dist/{chunk-ZFUZ5AKM.js.map → chunk-HTGTNN2B.js.map} +1 -1
  101. package/dist/{chunk-LSSYC5IC.js → chunk-IZQOO6MN.js} +2 -2
  102. package/dist/{chunk-LSSYC5IC.js.map → chunk-IZQOO6MN.js.map} +1 -1
  103. package/dist/{chunk-VMVDAZLA.js → chunk-J5JRGBKK.js} +108 -19
  104. package/dist/chunk-J5JRGBKK.js.map +1 -0
  105. package/dist/{chunk-7LP7RCZI.js → chunk-JGH7NB47.js} +5 -5
  106. package/dist/{chunk-7LP7RCZI.js.map → chunk-JGH7NB47.js.map} +1 -1
  107. package/dist/{chunk-RHN5MRQO.js → chunk-JMIKGAUA.js} +27 -5
  108. package/dist/chunk-JMIKGAUA.js.map +1 -0
  109. package/dist/{chunk-HWNK3F3X.js → chunk-KGHYXXXV.js} +588 -76
  110. package/dist/chunk-KGHYXXXV.js.map +1 -0
  111. package/dist/{chunk-7HX6FNKL.js → chunk-KIPCBIFJ.js} +41 -56
  112. package/dist/chunk-KIPCBIFJ.js.map +1 -0
  113. package/dist/{chunk-ZBHZLWV3.js → chunk-KPKGWXUJ.js} +4 -4
  114. package/dist/{chunk-ZBHZLWV3.js.map → chunk-KPKGWXUJ.js.map} +1 -1
  115. package/dist/{chunk-ABFPSVIS.js → chunk-LD6O6QKU.js} +31 -7
  116. package/dist/chunk-LD6O6QKU.js.map +1 -0
  117. package/dist/{chunk-AZ2H6R5I.js → chunk-LEJQAX7G.js} +74 -39
  118. package/dist/chunk-LEJQAX7G.js.map +1 -0
  119. package/dist/{chunk-ZAELRYKS.js → chunk-MD3FUZS3.js} +3 -3
  120. package/dist/{chunk-ZAELRYKS.js.map → chunk-MD3FUZS3.js.map} +1 -1
  121. package/dist/{chunk-NUA33BYO.js → chunk-MYXFR27L.js} +42 -15
  122. package/dist/chunk-MYXFR27L.js.map +1 -0
  123. package/dist/{chunk-KUQAJVYT.js → chunk-PHAMYCZH.js} +142 -28
  124. package/dist/chunk-PHAMYCZH.js.map +1 -0
  125. package/dist/{chunk-NOA6EJXE.js → chunk-PKE3PXOK.js} +3 -3
  126. package/dist/{chunk-NOA6EJXE.js.map → chunk-PKE3PXOK.js.map} +1 -1
  127. package/dist/{chunk-RDTLPOPD.js → chunk-PL52CI4U.js} +4 -4
  128. package/dist/{chunk-RDTLPOPD.js.map → chunk-PL52CI4U.js.map} +1 -1
  129. package/dist/{chunk-VYVTEMAW.js → chunk-PNUM7GUY.js} +3 -3
  130. package/dist/{chunk-VYVTEMAW.js.map → chunk-PNUM7GUY.js.map} +1 -1
  131. package/dist/{chunk-DIGFA7Z5.js → chunk-Q7CU5GQO.js} +13 -5
  132. package/dist/chunk-Q7CU5GQO.js.map +1 -0
  133. package/dist/chunk-QFFMFZIR.js +32 -0
  134. package/dist/chunk-QFFMFZIR.js.map +1 -0
  135. package/dist/{chunk-HMISULVD.js → chunk-QK7AG5AV.js} +4 -4
  136. package/dist/{chunk-HMISULVD.js.map → chunk-QK7AG5AV.js.map} +1 -1
  137. package/dist/{chunk-2LAPHLDH.js → chunk-QTLUZUF2.js} +45 -35
  138. package/dist/chunk-QTLUZUF2.js.map +1 -0
  139. package/dist/{chunk-4MUDQCBP.js → chunk-RFQONXET.js} +3 -3
  140. package/dist/{chunk-4MUDQCBP.js.map → chunk-RFQONXET.js.map} +1 -1
  141. package/dist/{chunk-AITJ7ELM.js → chunk-ROVZCGTN.js} +59 -23
  142. package/dist/chunk-ROVZCGTN.js.map +1 -0
  143. package/dist/{chunk-LSI2IVFT.js → chunk-RXGPFAMN.js} +4 -3
  144. package/dist/chunk-RXGPFAMN.js.map +1 -0
  145. package/dist/chunk-S6KZHPR4.js +315 -0
  146. package/dist/chunk-S6KZHPR4.js.map +1 -0
  147. package/dist/{chunk-EX3GLAL6.js → chunk-TGV2EWGL.js} +5 -5
  148. package/dist/{chunk-EX3GLAL6.js.map → chunk-TGV2EWGL.js.map} +1 -1
  149. package/dist/{chunk-QSYQOTWN.js → chunk-TO5SSMRI.js} +58 -5
  150. package/dist/chunk-TO5SSMRI.js.map +1 -0
  151. package/dist/{chunk-Z3VKUWAX.js → chunk-TSTRH4SM.js} +3 -3
  152. package/dist/{chunk-Z3VKUWAX.js.map → chunk-TSTRH4SM.js.map} +1 -1
  153. package/dist/{chunk-5J4NPGFM.js → chunk-U3SXCVR7.js} +5 -5
  154. package/dist/{chunk-5J4NPGFM.js.map → chunk-U3SXCVR7.js.map} +1 -1
  155. package/dist/{chunk-IRYKRKVQ.js → chunk-URCJIV7T.js} +3 -3
  156. package/dist/{chunk-IRYKRKVQ.js.map → chunk-URCJIV7T.js.map} +1 -1
  157. package/dist/{chunk-ASWTQQ7E.js → chunk-V5BPDB4J.js} +3 -3
  158. package/dist/{chunk-ASWTQQ7E.js.map → chunk-V5BPDB4J.js.map} +1 -1
  159. package/dist/{chunk-ADPM6AYF.js → chunk-VSX2G7LA.js} +3 -3
  160. package/dist/{chunk-ADPM6AYF.js.map → chunk-VSX2G7LA.js.map} +1 -1
  161. package/dist/{chunk-4FVIT5DI.js → chunk-VUWRGMT6.js} +3 -3
  162. package/dist/{chunk-4FVIT5DI.js.map → chunk-VUWRGMT6.js.map} +1 -1
  163. package/dist/{chunk-ZHGKAZJ7.js → chunk-XBQTXGY4.js} +56 -8
  164. package/dist/chunk-XBQTXGY4.js.map +1 -0
  165. package/dist/{chunk-UI745XC3.js → chunk-XEVFSDIF.js} +13 -7
  166. package/dist/chunk-XEVFSDIF.js.map +1 -0
  167. package/dist/{chunk-S2XHGWQC.js → chunk-Y3I4KGLX.js} +44 -15
  168. package/dist/chunk-Y3I4KGLX.js.map +1 -0
  169. package/dist/{chunk-COYF6IG2.js → chunk-YW4ASEUP.js} +5 -5
  170. package/dist/{chunk-COYF6IG2.js.map → chunk-YW4ASEUP.js.map} +1 -1
  171. package/dist/{chunk-DGTI65OC.js → chunk-ZEH4WFEG.js} +17 -11
  172. package/dist/chunk-ZEH4WFEG.js.map +1 -0
  173. package/dist/{claude-code-RE46FJXI.js → claude-code-EUKDGOOO.js} +5 -5
  174. package/dist/{claude-code-RE46FJXI.js.map → claude-code-EUKDGOOO.js.map} +1 -1
  175. package/dist/cli/index.js +350 -141
  176. package/dist/cli/index.js.map +1 -1
  177. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  178. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  179. package/dist/cli/src/commands/config.d.ts.map +1 -1
  180. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  181. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  182. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  183. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  184. package/dist/cli/src/commands/library-index.d.ts +8 -1
  185. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  186. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  187. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  188. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  189. package/dist/cli/src/commands/project.d.ts.map +1 -1
  190. package/dist/cli/src/commands/providers.d.ts.map +1 -1
  191. package/dist/cli/src/commands/rebuild.d.ts.map +1 -1
  192. package/dist/cli/src/commands/run.d.ts.map +1 -1
  193. package/dist/cli/src/commands/serve-preflight.d.ts +31 -1
  194. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  195. package/dist/cli/src/commands/serve.d.ts +10 -0
  196. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  197. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  198. package/dist/cli/src/commands/source-manifest.d.ts +19 -7
  199. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  200. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  201. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  202. package/dist/cli/src/commands/why.d.ts.map +1 -1
  203. package/dist/cli/src/config-checks.d.ts +23 -5
  204. package/dist/cli/src/config-checks.d.ts.map +1 -1
  205. package/dist/cli/src/harness-error.d.ts +12 -1
  206. package/dist/cli/src/harness-error.d.ts.map +1 -1
  207. package/dist/cli/src/helpers.d.ts +18 -8
  208. package/dist/cli/src/helpers.d.ts.map +1 -1
  209. package/dist/cli/src/plugin-store/index.d.ts +10 -1
  210. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  211. package/dist/cli/src/plugin-store/spec.d.ts +8 -0
  212. package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
  213. package/dist/cli/src/skill-checks.d.ts +2 -2
  214. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  215. package/dist/connectors/config.js +5 -5
  216. package/dist/connectors/index.js +24 -22
  217. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  218. package/dist/connectors-XYPE2DCQ.js +50 -0
  219. package/dist/{connectors-7THEF7YA.js.map → connectors-XYPE2DCQ.js.map} +1 -1
  220. package/dist/core/framework.js +1 -1
  221. package/dist/core/index.js +9 -9
  222. package/dist/core/manifest.js +2 -2
  223. package/dist/core/models.js +1 -1
  224. package/dist/core/provider-registry-credentials.js +2 -2
  225. package/dist/core/provider-registry.js +1 -1
  226. package/dist/core/publish-manifest.js +3 -3
  227. package/dist/core/ref.js +1 -1
  228. package/dist/core/runtime-assets.js +5 -5
  229. package/dist/core/src/framework.d.ts +5 -3
  230. package/dist/core/src/framework.d.ts.map +1 -1
  231. package/dist/core/src/index.d.ts +2 -1
  232. package/dist/core/src/index.d.ts.map +1 -1
  233. package/dist/core/src/lock.d.ts +12 -0
  234. package/dist/core/src/lock.d.ts.map +1 -1
  235. package/dist/core/src/manifest.d.ts +15 -0
  236. package/dist/core/src/manifest.d.ts.map +1 -1
  237. package/dist/core/src/models.d.ts +7 -0
  238. package/dist/core/src/models.d.ts.map +1 -1
  239. package/dist/core/src/provider-registry.d.ts +6 -0
  240. package/dist/core/src/provider-registry.d.ts.map +1 -1
  241. package/dist/core/src/workspace-config.d.ts +10 -1
  242. package/dist/core/src/workspace-config.d.ts.map +1 -1
  243. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  244. package/dist/core/workspace-config.js +4 -4
  245. package/dist/deploy/index.js +9 -9
  246. package/dist/discovery/index.js +5 -5
  247. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  248. package/dist/{ensure-sources-IH7CHSJF.js → ensure-sources-IN3VKHUA.js} +37 -21
  249. package/dist/ensure-sources-IN3VKHUA.js.map +1 -0
  250. package/dist/factory-assets/connectors/box.js +24 -22
  251. package/dist/factory-assets/connectors/deploy.js +24 -22
  252. package/dist/factory-assets/connectors/devserver.js +24 -22
  253. package/dist/factory-assets/connectors/flow/adapter.js +24 -22
  254. package/dist/factory-assets/connectors/flow/engine.js +10 -10
  255. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  256. package/dist/factory-assets/connectors/flow/run-flow.js +26 -24
  257. package/dist/factory-assets/connectors/flow.js +24 -22
  258. package/dist/factory-assets/connectors/git.js +24 -22
  259. package/dist/factory-assets/connectors/gmail.js +24 -22
  260. package/dist/factory-assets/connectors/googledrive.js +24 -22
  261. package/dist/factory-assets/connectors/local.js +24 -22
  262. package/dist/factory-assets/connectors/mattermost.js +24 -22
  263. package/dist/factory-assets/connectors/memory.js +24 -22
  264. package/dist/factory-assets/connectors/minio.js +24 -22
  265. package/dist/factory-assets/connectors/postgres.js +24 -22
  266. package/dist/factory-assets/connectors/s3.js +24 -22
  267. package/dist/factory-assets/connectors/sharepoint.js +24 -22
  268. package/dist/factory-assets/connectors/sqlite.js +24 -22
  269. package/dist/factory-assets/connectors/static-server.js +24 -22
  270. package/dist/factory-assets/connectors/tunnel.js +24 -22
  271. package/dist/factory-assets/connectors/webdav.js +24 -22
  272. package/dist/factory-assets/connectors/xstate-store.js +24 -22
  273. package/dist/factory-assets/connectors/xstate.js +24 -22
  274. package/dist/flows-QAO63TDV.js +26 -0
  275. package/dist/{flows-4JZQ3XFK.js.map → flows-QAO63TDV.js.map} +1 -1
  276. package/dist/helpers-HDVGCF3M.js +54 -0
  277. package/dist/{helpers-JNMK3FC2.js.map → helpers-HDVGCF3M.js.map} +1 -1
  278. package/dist/library/index.js +14 -14
  279. package/dist/library/install.js +5 -5
  280. package/dist/library/src/index.d.ts +1 -1
  281. package/dist/library/src/index.d.ts.map +1 -1
  282. package/dist/library/src/install/index.d.ts +1 -1
  283. package/dist/library/src/install/index.d.ts.map +1 -1
  284. package/dist/library/src/install/install-from-manifest.d.ts +13 -0
  285. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  286. package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
  287. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  288. package/dist/library/src/remote/remote-catalog-source.d.ts +3 -1
  289. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  290. package/dist/library/src/remote/rest-catalog-source.d.ts +3 -2
  291. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  292. package/dist/{library-publish-I3UWXAHI.js → library-publish-62OWCNB5.js} +56 -55
  293. package/dist/library-publish-62OWCNB5.js.map +1 -0
  294. package/dist/model-endpoint/index.js +13 -12
  295. package/dist/model-endpoint/src/openai-chat.d.ts +7 -2
  296. package/dist/model-endpoint/src/openai-chat.d.ts.map +1 -1
  297. package/dist/model-endpoint/src/openai-shared.d.ts +8 -0
  298. package/dist/model-endpoint/src/openai-shared.d.ts.map +1 -1
  299. package/dist/model-endpoint/src/server.d.ts.map +1 -1
  300. package/dist/model-endpoint/src/types.d.ts +1 -1
  301. package/dist/model-endpoint/src/types.d.ts.map +1 -1
  302. package/dist/model-endpoint/src/usage-cost.d.ts +23 -0
  303. package/dist/model-endpoint/src/usage-cost.d.ts.map +1 -0
  304. package/dist/open-library-TZ7OSDEJ.js +58 -0
  305. package/dist/{open-library-NKKUJLWA.js.map → open-library-TZ7OSDEJ.js.map} +1 -1
  306. package/dist/open-registry-RLZKTJG3.js +32 -0
  307. package/dist/{open-registry-BYAXSHUI.js.map → open-registry-RLZKTJG3.js.map} +1 -1
  308. package/dist/paths-D6LBQETQ.js +22 -0
  309. package/dist/{paths-UKWE35XS.js.map → paths-D6LBQETQ.js.map} +1 -1
  310. package/dist/plugin-store-A5J4TLCH.js +23 -0
  311. package/dist/{plugin-store-ABE35NRX.js.map → plugin-store-A5J4TLCH.js.map} +1 -1
  312. package/dist/project-4AVRES3M.js +88 -0
  313. package/dist/{project-BIPK47JK.js.map → project-4AVRES3M.js.map} +1 -1
  314. package/dist/resolver/index.js +10 -10
  315. package/dist/runner/index.js +41 -39
  316. package/dist/runner/src/capability-roundtrip.d.ts +7 -6
  317. package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
  318. package/dist/runner/src/serve.d.ts +6 -5
  319. package/dist/runner/src/serve.d.ts.map +1 -1
  320. package/dist/sdk/asset-manager.js +18 -18
  321. package/dist/sdk/bridge.js +21 -19
  322. package/dist/sdk/core.js +9 -9
  323. package/dist/sdk/flow.js +10 -10
  324. package/dist/sdk/index.js +41 -39
  325. package/dist/sdk/index.js.map +1 -1
  326. package/dist/sdk/resolver.js +10 -10
  327. package/dist/sdk/runner.js +41 -39
  328. package/dist/sdk/transport/ws/server.js +10 -10
  329. package/dist/sdk/transport/ws.js +10 -10
  330. package/dist/sdk/transport.js +10 -10
  331. package/dist/{serve-preflight-FLTIBTEX.js → serve-preflight-H2AYMGJ6.js} +65 -35
  332. package/dist/serve-preflight-H2AYMGJ6.js.map +1 -0
  333. package/dist/{setup-AG6NFHSN.js → setup-NSPQD4V4.js} +33 -31
  334. package/dist/setup-NSPQD4V4.js.map +1 -0
  335. package/dist/skills-B533SRVZ.js +26 -0
  336. package/dist/{skills-UQYUHVKO.js.map → skills-B533SRVZ.js.map} +1 -1
  337. package/dist/source-VTECABUO.js +87 -0
  338. package/dist/{source-ASEHI2XS.js.map → source-VTECABUO.js.map} +1 -1
  339. package/dist/source-fetch-github-RWHV4I5Z.js +4 -0
  340. package/dist/{source-fetch-github-ST4MFL3D.js.map → source-fetch-github-RWHV4I5Z.js.map} +1 -1
  341. package/dist/{source-manifest-publish-IEVV3W6J.js → source-manifest-publish-YORI42MN.js} +56 -56
  342. package/dist/source-manifest-publish-YORI42MN.js.map +1 -0
  343. package/dist/transport/index.js +10 -10
  344. package/dist/transport/ws/server.js +10 -10
  345. package/dist/transport/ws.js +10 -10
  346. package/dist/tui/index.js +49 -40
  347. package/dist/tui/index.js.map +1 -1
  348. package/dist/tui/src/repl.d.ts.map +1 -1
  349. package/dist/types/manifests.js +1 -1
  350. package/dist/types/src/manifests/index.d.ts +1 -1
  351. package/dist/types/src/manifests/index.d.ts.map +1 -1
  352. package/dist/types/src/manifests/scaffold-body.d.ts +2 -0
  353. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  354. package/dist/workspace-plugin/adapters/mcp.js +31 -29
  355. package/dist/workspace-plugin/adapters/omp.js +15 -15
  356. package/dist/workspace-plugin/index.js +2 -2
  357. package/package.json +27 -1
  358. package/dist/chunk-2LAPHLDH.js.map +0 -1
  359. package/dist/chunk-5Y2KGB4H.js.map +0 -1
  360. package/dist/chunk-7HX6FNKL.js.map +0 -1
  361. package/dist/chunk-ABFPSVIS.js.map +0 -1
  362. package/dist/chunk-AITJ7ELM.js.map +0 -1
  363. package/dist/chunk-AZ2H6R5I.js.map +0 -1
  364. package/dist/chunk-BFMYYNDT.js.map +0 -1
  365. package/dist/chunk-CEKW3KXP.js.map +0 -1
  366. package/dist/chunk-DGTI65OC.js.map +0 -1
  367. package/dist/chunk-DIGFA7Z5.js.map +0 -1
  368. package/dist/chunk-E572OHGY.js.map +0 -1
  369. package/dist/chunk-GNZBFSRB.js.map +0 -1
  370. package/dist/chunk-HPMQRAIF.js.map +0 -1
  371. package/dist/chunk-HWNK3F3X.js.map +0 -1
  372. package/dist/chunk-IHFGPHCT.js.map +0 -1
  373. package/dist/chunk-ILLTBKDJ.js.map +0 -1
  374. package/dist/chunk-J72MO2WA.js.map +0 -1
  375. package/dist/chunk-KUQAJVYT.js.map +0 -1
  376. package/dist/chunk-LSI2IVFT.js.map +0 -1
  377. package/dist/chunk-NB7SYQYP.js.map +0 -1
  378. package/dist/chunk-NUA33BYO.js.map +0 -1
  379. package/dist/chunk-QEULL4Q3.js.map +0 -1
  380. package/dist/chunk-QSYQOTWN.js.map +0 -1
  381. package/dist/chunk-RHN5MRQO.js.map +0 -1
  382. package/dist/chunk-S2XHGWQC.js.map +0 -1
  383. package/dist/chunk-UI745XC3.js.map +0 -1
  384. package/dist/chunk-VMVDAZLA.js.map +0 -1
  385. package/dist/chunk-XFIEVEU7.js.map +0 -1
  386. package/dist/chunk-XGULGQA3.js.map +0 -1
  387. package/dist/chunk-YLLVSR2U.js.map +0 -1
  388. package/dist/chunk-Z7ZEZZB6.js.map +0 -1
  389. package/dist/chunk-ZDLUQLI6.js.map +0 -1
  390. package/dist/chunk-ZHGKAZJ7.js.map +0 -1
  391. package/dist/connectors-7THEF7YA.js +0 -48
  392. package/dist/ensure-sources-IH7CHSJF.js.map +0 -1
  393. package/dist/flows-4JZQ3XFK.js +0 -26
  394. package/dist/helpers-JNMK3FC2.js +0 -38
  395. package/dist/library-publish-I3UWXAHI.js.map +0 -1
  396. package/dist/open-library-NKKUJLWA.js +0 -42
  397. package/dist/open-registry-BYAXSHUI.js +0 -32
  398. package/dist/paths-UKWE35XS.js +0 -22
  399. package/dist/plugin-store-ABE35NRX.js +0 -23
  400. package/dist/project-BIPK47JK.js +0 -86
  401. package/dist/serve-preflight-FLTIBTEX.js.map +0 -1
  402. package/dist/setup-AG6NFHSN.js.map +0 -1
  403. package/dist/skills-UQYUHVKO.js +0 -26
  404. package/dist/source-ASEHI2XS.js +0 -85
  405. package/dist/source-fetch-github-ST4MFL3D.js +0 -4
  406. package/dist/source-manifest-publish-IEVV3W6J.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../sdk/src/agent-session.ts","../../sdk/src/transport.ts","../../sdk/src/local-runtime.ts","../../sdk/src/workspace.ts","../../sdk/src/factory.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * AgentSession — stateful wrapper over any IAgentRuntime-compatible object.\n *\n * Provides:\n * - AgentEvent → OutputLine conversion with streaming text accumulation\n * - State machine: starting → idle ↔ active ↔ waiting → stopped\n * - Circular output buffer (500 lines, see {@link MAX_OUTPUT_LINES})\n * - send() routes to prompt() or reply() based on current state\n * - stop() disposes the runtime and fires optional cleanup\n * - onChange callback for reactive UIs (React forceUpdate, EventEmitter, etc.)\n *\n * Works with LocalRuntime (in-process) and AgentClient (remote/WebSocket).\n * Extend to add identity fields (id, name, profileName…):\n *\n * class MySession extends AgentSession {\n * constructor(readonly id: string, runtime: LocalRuntime | AgentClient) {\n * super(runtime);\n * }\n * }\n *\n * @docLink packages/sdk/concepts#agent-session\n */\n\nimport { AskSlots } from \"../../types/src/ask-slots.js\";\nimport type { AgentEvent } from \"@skaile/workspaces/types\";\nimport type { OutputLine, SessionState } from \"./types.js\";\n\n/**\n * Maximum number of {@link OutputLine} entries retained in {@link AgentSession.output}.\n *\n * When the buffer exceeds this limit the oldest lines are dropped from the front,\n * keeping memory use bounded for long-running sessions.\n *\n * @docLink packages/sdk/concepts#agent-session\n */\nexport const MAX_OUTPUT_LINES = 500;\n\ninterface MinimalRuntime {\n prompt(message: string): Promise<void>;\n reply(answer: string): Promise<void>;\n abort(): Promise<void>;\n dispose(): Promise<void>;\n onEvent(handler: (e: AgentEvent) => void): void;\n offEvent(handler: (e: AgentEvent) => void): void;\n}\n\nexport class AgentSession {\n state: SessionState = \"starting\";\n readonly output: OutputLine[] = [];\n onChange?: () => void;\n\n /** The parked multi-question ask; null when no question waits for an answer. */\n private ask: AskSlots | null = null;\n\n /** Pointer to the streaming text line being accumulated in-place. */\n private currentTextLine: (OutputLine & { type: \"text\" }) | null = null;\n /** Registered in constructor so we can offEvent on stop. */\n private readonly eventHandler: (e: AgentEvent) => void;\n /** Optional cleanup hook registered by the factory (temp dir removal, etc.). */\n private cleanupFn?: () => void;\n\n constructor(protected readonly runtime: MinimalRuntime) {\n this.eventHandler = (e) => this.handleEvent(e);\n runtime.onEvent(this.eventHandler);\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n\n /** Send a user message. Routes to reply() or prompt() based on state. */\n send(text: string): void {\n if (this.state === \"stopped\" || this.state === \"starting\") return;\n this.appendLine({ type: \"user\", content: text });\n if (this.state === \"waiting\") {\n // A multi-question ask stays parked until every sub-question has an answer.\n // `reply()` carries no question name, so each answer fills the oldest open one.\n const complete = this.ask === null || this.ask.answer().complete;\n if (complete) {\n this.ask = null;\n this.state = \"active\";\n }\n void this.runtime.reply(text);\n } else {\n // A prompt abandons any unanswered question.\n this.ask = null;\n this.state = \"active\";\n void this.runtime.prompt(text);\n }\n }\n\n /** Stop the session and dispose the runtime. */\n stop(): void {\n if (this.state === \"stopped\") return;\n this.ask = null;\n this.state = \"stopped\";\n this.runtime.offEvent(this.eventHandler);\n void this.runtime.dispose();\n this.appendLine({ type: \"system\", message: \"Session stopped.\" });\n this.notify();\n this.cleanupFn?.();\n }\n\n /** Register a cleanup function called when the session stops. Used by the factory. */\n _registerCleanup(fn: () => void): void {\n this.cleanupFn = fn;\n }\n\n // ── Event → OutputLine ────────────────────────────────────────────────────\n\n protected handleEvent(event: AgentEvent): void {\n switch (event.type) {\n case \"text\":\n this.handleTextEvent(event);\n break;\n case \"text_retract\":\n this.handleTextRetractEvent(event.content);\n break;\n case \"tool_call\":\n this.handleToolCallEvent(event);\n break;\n case \"question\":\n this.handleQuestionEvent(event);\n break;\n case \"error\":\n this.handleErrorEvent(event);\n break;\n case \"status\":\n this.handleStatusEvent(event);\n break;\n case \"subagent\":\n this.handleSubagentEvent(event);\n break;\n case \"finished\":\n this.handleFinishedEvent();\n break;\n case \"state_changed\":\n this.handleStateChangedEvent(event);\n break;\n }\n\n this.notify();\n }\n\n private handleTextEvent(event: AgentEvent): void {\n const content = \"content\" in event ? String(event.content) : \"\";\n if (this.currentTextLine) {\n this.currentTextLine.content += content;\n } else {\n const line: OutputLine & { type: \"text\" } = { type: \"text\", content };\n this.output.push(line);\n this.currentTextLine = line;\n this.trimOutput();\n }\n this.markActive();\n }\n\n /**\n * Cut an abandoned attempt's fragment off the open text line, dropping the\n * line when nothing is left. A sealed line or a mismatched tail stays as is.\n */\n private handleTextRetractEvent(content: string): void {\n const line = this.currentTextLine;\n if (!line || !content || !line.content.endsWith(content)) return;\n line.content = line.content.slice(0, line.content.length - content.length);\n if (line.content.length === 0) {\n const index = this.output.indexOf(line);\n if (index !== -1) this.output.splice(index, 1);\n this.currentTextLine = null;\n }\n }\n\n private handleToolCallEvent(event: AgentEvent): void {\n this.sealText();\n const name =\n \"name\" in event ? String(event.name) : \"tool\" in event ? String(event.tool) : \"tool\";\n this.appendLine({ type: \"tool\", name });\n this.markActive();\n }\n\n private handleQuestionEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const text =\n \"question\" in e\n ? String(e.question)\n : \"text\" in e\n ? String(e.text)\n : \"The agent has a question.\";\n this.appendLine({ type: \"question\", text });\n // One event arrives per sub-question; they share an ask until it is answered.\n const requestId = typeof e.requestId === \"string\" ? e.requestId : undefined;\n this.ask ??= new AskSlots();\n this.ask.add(text, requestId);\n this.state = \"waiting\";\n }\n\n private handleErrorEvent(event: AgentEvent): void {\n this.sealText();\n const message = \"message\" in event ? String(event.message) : \"An error occurred.\";\n this.appendLine({ type: \"error\", message });\n if (\"fatal\" in event && event.fatal) this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStatusEvent(event: AgentEvent): void {\n const phase = \"phase\" in event ? String(event.phase) : \"\";\n if (phase === \"thinking\" && this.currentTextLine !== null) return;\n if (phase) this.appendLine({ type: \"status\", phase });\n }\n\n private handleSubagentEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const name = \"name\" in e ? String(e.name) : \"unknown\";\n const status = \"status\" in e ? (String(e.status) as \"started\" | \"finished\") : \"started\";\n const description = \"description\" in e ? String(e.description) : \"\";\n this.appendLine({ type: \"subagent\", name, status, description });\n if (status === \"started\") {\n this.markActive();\n }\n }\n\n private handleFinishedEvent(): void {\n this.sealText();\n this.appendLine({ type: \"separator\" });\n this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStateChangedEvent(event: AgentEvent): void {\n if (\"state\" in event && (event as Record<string, unknown>).state === \"stopped\") {\n this.sealText();\n this.appendLine({ type: \"system\", message: \"Agent stopped.\" });\n this.ask = null;\n this.state = \"stopped\";\n }\n }\n\n /**\n * The agent is working. Not while an ask is parked: the harness keeps the turn\n * paused until every sub-question has an answer, and follows the question\n * events with tool activity for the same block.\n */\n private markActive(): void {\n if (this.ask !== null && this.state === \"waiting\") return;\n this.state = \"active\";\n }\n\n // ── Internals ─────────────────────────────────────────────────────────────\n\n protected appendLine(line: OutputLine): void {\n this.output.push(line);\n this.trimOutput();\n }\n\n protected notify(): void {\n this.onChange?.();\n }\n\n private sealText(): void {\n this.currentTextLine = null;\n }\n\n private trimOutput(): void {\n while (this.output.length > MAX_OUTPUT_LINES) {\n this.output.shift();\n }\n }\n}\n","/**\n * InProcessTransport — ServerTransport that runs entirely in-process.\n *\n * Used internally by {@link LocalRuntime}. Also exported for consumers building\n * custom integrations that need direct transport access without WebSocket overhead.\n *\n * Runner side (startAgentServer):\n * onCommand(handler) — registers the runner's command handler\n * send(event) — delivers AgentEvents to onEvent subscribers\n *\n * Application side:\n * inject(command) — sends a command to the agent (deferred to avoid re-entrancy)\n * onEvent(handler) — subscribes to AgentEvents; returns unsubscribe fn\n *\n * @docLink packages/sdk/concepts#in-process-transport\n */\n\nimport type { AgentCommand, AgentEvent, ServerTransport } from \"@skaile/workspaces/types\";\n\nexport class InProcessTransport implements ServerTransport {\n private readonly commandHandlers = new Set<(cmd: AgentCommand) => void>();\n private readonly eventHandlers = new Set<(event: AgentEvent) => void>();\n // Commands injected before any handler is registered are buffered here and\n // flushed on the first onCommand() — without this they iterate an empty set\n // and are silently lost (e.g. a prompt sent during start()'s wiring window).\n private readonly pendingCommands: AgentCommand[] = [];\n\n // ── ServerTransport ───────────────────────────────────────────────────────\n\n // In-process: no socket to open or tear down — both are no-ops so serve()\n // can drive any transport's lifecycle without an instanceof check.\n async listen(): Promise<void> {}\n\n async close(): Promise<void> {}\n\n send(event: AgentEvent): void {\n for (const h of this.eventHandlers) h(event);\n }\n\n onCommand(handler: (cmd: AgentCommand) => void): () => void {\n const wasEmpty = this.commandHandlers.size === 0;\n this.commandHandlers.add(handler);\n if (wasEmpty && this.pendingCommands.length > 0) {\n const buffered = this.pendingCommands.splice(0);\n for (const cmd of buffered) {\n void Promise.resolve().then(() => handler(cmd));\n }\n }\n return () => this.commandHandlers.delete(handler);\n }\n\n onConnect(_handler: () => void): () => void {\n return () => {};\n }\n\n onDisconnect(_handler: () => void): () => void {\n return () => {};\n }\n\n /** True once a command handler is wired (i.e. the runner has started). */\n get connected(): boolean {\n return this.commandHandlers.size > 0;\n }\n\n // ── Application API ───────────────────────────────────────────────────────\n\n /**\n * Send a command into the agent runner. Deferred to avoid re-entrancy.\n * Commands injected before a handler is registered are buffered and\n * flushed when the runner wires its handler, so none are dropped.\n */\n inject(command: AgentCommand): void {\n if (this.commandHandlers.size === 0) {\n this.pendingCommands.push(command);\n return;\n }\n for (const h of this.commandHandlers) {\n void Promise.resolve().then(() => h(command));\n }\n }\n\n /** Subscribe to AgentEvents. Returns an unsubscribe function. */\n onEvent(handler: (event: AgentEvent) => void): () => void {\n this.eventHandlers.add(handler);\n return () => this.eventHandlers.delete(handler);\n }\n}\n","/**\n * LocalRuntime — IAgentRuntime implementation that runs the agent in the same process.\n *\n * Mirror image of AgentClient: same interface, no WebSocket.\n * Uses InProcessTransport + startAgentServer() internally.\n *\n * Usage:\n * const runtime = new LocalRuntime();\n * runtime.onEvent(e => console.log(e));\n * await runtime.start({ projectDir: \"/path/to/workspace\" });\n * await runtime.prompt(\"Hello\");\n * await runtime.dispose();\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\n\nimport { startAgentServer } from \"@skaile/workspaces/runner\";\nimport type { AgentEvent, IAgentRuntime } from \"@skaile/workspaces/types\";\nimport { InProcessTransport } from \"./transport.js\";\n\n/**\n * Options passed to {@link LocalRuntime.start}.\n *\n * `projectDir` is the only required field — it points to the workspace directory\n * containing `skaile.yaml`. All other fields override the manifest's agent configuration.\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\nexport interface LocalRuntimeStartOptions {\n projectDir: string;\n agentDir?: string;\n harness?: string;\n model?: string;\n provider?: string;\n onLog?: (line: string) => void;\n}\n\nexport class LocalRuntime implements Omit<IAgentRuntime, \"start\" | \"configure\"> {\n private readonly transport = new InProcessTransport();\n private readonly handlers = new Set<(e: AgentEvent) => void>();\n private started = false;\n private resolveReady!: () => void;\n private readonly readyPromise = new Promise<void>((resolve) => {\n this.resolveReady = resolve;\n });\n\n constructor() {\n this.transport.onEvent((e) => {\n for (const h of this.handlers) h(e);\n });\n }\n\n /**\n * Start the agent server. Resolves when the runner is wired and ready\n * to accept commands. Must be called before prompt() / reply().\n */\n async start(opts: LocalRuntimeStartOptions): Promise<void> {\n if (this.started) return;\n this.started = true;\n await startAgentServer({\n projectDir: opts.projectDir,\n agentDir: opts.agentDir,\n harness: opts.harness,\n model: opts.model,\n provider: opts.provider,\n transport: this.transport,\n onLog: opts.onLog,\n // The embedder owns stdout; log records go to the project's log db and to `onLog`.\n stdout: false,\n });\n this.resolveReady();\n }\n\n /**\n * Resolves once the runner is wired and accepting commands. Await this\n * before issuing commands that expect a reply (e.g. debug queries) so a\n * pre-start command isn't buffered indefinitely. Never rejects.\n */\n whenReady(): Promise<void> {\n return this.readyPromise;\n }\n\n async prompt(message: string): Promise<void> {\n this.transport.inject({ type: \"prompt\", prompt: message });\n }\n\n async reply(answer: string): Promise<void> {\n this.transport.inject({ type: \"reply\", answer });\n }\n\n async abort(): Promise<void> {\n this.transport.inject({ type: \"cancel\" });\n }\n\n async dispose(): Promise<void> {\n this.transport.inject({ type: \"shutdown\" });\n }\n\n onEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.add(handler);\n }\n\n offEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.delete(handler);\n }\n\n get isRunning(): boolean {\n return this.transport.connected;\n }\n}\n","/**\n * Workspace utilities — prepare session directories and write skaile.yaml.\n */\n\nimport { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\n\n/**\n * Prepare a workspace directory for a session. Returns the path and cleanup fn.\n *\n * If `opts.workspaceDir` is set, that directory is created (if needed) and returned\n * with no cleanup. Otherwise a unique temporary directory (`skaile-sdk-*` under the\n * OS temp dir) is created via `mkdtempSync`; the cleanup function removes it on\n * session stop unless `keepWorkspace` is true.\n *\n * @param opts - Session creation options providing `workspaceDir` and `keepWorkspace`.\n * @returns An object with the resolved `dir` path and an optional `cleanup` function.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function prepareWorkspace(opts: CreateAgentSessionOptions): {\n dir: string;\n cleanup: (() => void) | undefined;\n} {\n if (opts.workspaceDir) {\n mkdirSync(opts.workspaceDir, { recursive: true });\n return { dir: opts.workspaceDir, cleanup: undefined };\n }\n\n // mkdtemp yields an unpredictable, collision-free name (vs. a guessable\n // timestamp path) — avoids cross-session clobbering and symlink races in /tmp.\n const dir = mkdtempSync(join(tmpdir(), \"skaile-sdk-\"));\n\n const cleanup = opts.keepWorkspace\n ? undefined\n : () => rmSync(dir, { recursive: true, force: true });\n\n return { dir, cleanup };\n}\n\n/**\n * Write skaile.yaml from inline {@link CreateAgentSessionOptions}.\n *\n * Only writes if `agent`, `mounts`, or `connectors` are provided and no `skaile.yaml`\n * already exists in `dir` (existing config takes precedence). Connector `adapter` fields\n * are mapped to the `driver` field expected by the core runtime.\n *\n * @param dir - Absolute path to the workspace directory.\n * @param opts - Session options containing agent config, mounts, and connectors to serialize.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function writeSkaileYaml(dir: string, opts: CreateAgentSessionOptions): void {\n if (!opts.agent && !opts.mounts?.length && !opts.connectors?.length) return;\n const dest = join(dir, \"skaile.yaml\");\n if (existsSync(dest)) return; // existing config wins\n\n const cfg: Record<string, unknown> = {\n name: \"sdk-session\",\n };\n\n if (opts.agent) {\n cfg[\"agent-config\"] = {\n default: {\n ...(opts.agent.harness && { harness: opts.agent.harness }),\n ...(opts.agent.provider && { provider: opts.agent.provider }),\n ...(opts.agent.model && { model: opts.agent.model }),\n },\n };\n\n if (opts.agent.maxTurns !== undefined || opts.agent.permissionMode !== undefined) {\n cfg.agent = {\n permissions: {\n ...(opts.agent.maxTurns !== undefined && { max_turns: opts.agent.maxTurns }),\n ...(opts.agent.permissionMode !== undefined && {\n permission_mode: opts.agent.permissionMode,\n }),\n },\n };\n }\n }\n\n if (opts.mounts?.length) {\n cfg.mounts = opts.mounts;\n }\n\n if (opts.connectors?.length) {\n // Map SDK field names to core's ConnectorDeclaration field names:\n // SDK uses `adapter` → core expects `driver`\n cfg.connectors = opts.connectors.map((c) => ({\n id: c.id,\n driver: c.adapter,\n ...(c.access && { access: c.access }),\n ...(c.auth && { auth: c.auth }),\n ...(c.options && { options: c.options }),\n }));\n }\n\n writeFileSync(dest, stringify(cfg));\n}\n","/**\n * createAgentSession() — universal factory for agent sessions.\n *\n * Handles workspace preparation, skaile.yaml writing, runtime selection,\n * startup, and cleanup registration. Returns a ready-to-use {@link AgentSession}.\n *\n * For multi-session managers (forge-tui) or bots (forge-mattermost) that need\n * custom session subclasses, use LocalRuntime directly:\n *\n * const runtime = new LocalRuntime();\n * await runtime.start({ projectDir: dir, agentDir });\n * const session = new MySession(id, name, runtime);\n *\n * @docLink packages/sdk/concepts#create-agent-session\n */\n\nimport { AgentClient } from \"@skaile/workspaces/client\";\nimport { WebSocketClientTransport } from \"@skaile/workspaces/transport/ws/client\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { LocalRuntime } from \"./local-runtime.js\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\nimport { prepareWorkspace, writeSkaileYaml } from \"./workspace.js\";\n\nexport async function createAgentSession(\n opts: CreateAgentSessionOptions = {},\n): Promise<AgentSession> {\n const { dir, cleanup } = prepareWorkspace(opts);\n writeSkaileYaml(dir, opts);\n\n const mode = opts.mode ?? { type: \"local\" };\n let runtime: LocalRuntime | AgentClient;\n\n if (mode.type === \"local\") {\n const r = new LocalRuntime();\n await r.start({ projectDir: dir, agentDir: opts.agentDir });\n runtime = r;\n } else {\n const transport = new WebSocketClientTransport({ url: mode.url });\n await transport.connect();\n runtime = new AgentClient(transport);\n }\n\n const session = new AgentSession(runtime);\n session.state = \"idle\";\n\n if (cleanup) {\n session._registerCleanup(cleanup);\n }\n\n if (opts.initialPrompt?.trim()) {\n session.send(opts.initialPrompt.trim());\n }\n\n return session;\n}\n"]}
1
+ {"version":3,"sources":["../../sdk/src/agent-session.ts","../../sdk/src/transport.ts","../../sdk/src/local-runtime.ts","../../sdk/src/workspace.ts","../../sdk/src/factory.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * AgentSession — stateful wrapper over any IAgentRuntime-compatible object.\n *\n * Provides:\n * - AgentEvent → OutputLine conversion with streaming text accumulation\n * - State machine: starting → idle ↔ active ↔ waiting → stopped\n * - Circular output buffer (500 lines, see {@link MAX_OUTPUT_LINES})\n * - send() routes to prompt() or reply() based on current state\n * - stop() disposes the runtime and fires optional cleanup\n * - onChange callback for reactive UIs (React forceUpdate, EventEmitter, etc.)\n *\n * Works with LocalRuntime (in-process) and AgentClient (remote/WebSocket).\n * Extend to add identity fields (id, name, profileName…):\n *\n * class MySession extends AgentSession {\n * constructor(readonly id: string, runtime: LocalRuntime | AgentClient) {\n * super(runtime);\n * }\n * }\n *\n * @docLink packages/sdk/concepts#agent-session\n */\n\nimport { AskSlots } from \"../../types/src/ask-slots.js\";\nimport type { AgentEvent } from \"@skaile/workspaces/types\";\nimport type { OutputLine, SessionState } from \"./types.js\";\n\n/**\n * Maximum number of {@link OutputLine} entries retained in {@link AgentSession.output}.\n *\n * When the buffer exceeds this limit the oldest lines are dropped from the front,\n * keeping memory use bounded for long-running sessions.\n *\n * @docLink packages/sdk/concepts#agent-session\n */\nexport const MAX_OUTPUT_LINES = 500;\n\ninterface MinimalRuntime {\n prompt(message: string): Promise<void>;\n reply(answer: string): Promise<void>;\n abort(): Promise<void>;\n dispose(): Promise<void>;\n onEvent(handler: (e: AgentEvent) => void): void;\n offEvent(handler: (e: AgentEvent) => void): void;\n}\n\nexport class AgentSession {\n state: SessionState = \"starting\";\n readonly output: OutputLine[] = [];\n onChange?: () => void;\n\n /** The parked multi-question ask; null when no question waits for an answer. */\n private ask: AskSlots | null = null;\n\n /** Pointer to the streaming text line being accumulated in-place. */\n private currentTextLine: (OutputLine & { type: \"text\" }) | null = null;\n /** Registered in constructor so we can offEvent on stop. */\n private readonly eventHandler: (e: AgentEvent) => void;\n /** Optional cleanup hook registered by the factory (temp dir removal, etc.). */\n private cleanupFn?: () => void;\n\n constructor(protected readonly runtime: MinimalRuntime) {\n this.eventHandler = (e) => this.handleEvent(e);\n runtime.onEvent(this.eventHandler);\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n\n /** Send a user message. Routes to reply() or prompt() based on state. */\n send(text: string): void {\n if (this.state === \"stopped\" || this.state === \"starting\") return;\n this.appendLine({ type: \"user\", content: text });\n if (this.state === \"waiting\") {\n // A multi-question ask stays parked until every sub-question has an answer.\n // `reply()` carries no question name, so each answer fills the oldest open one.\n const complete = this.ask === null || this.ask.answer().complete;\n if (complete) {\n this.ask = null;\n this.state = \"active\";\n }\n void this.runtime.reply(text);\n } else {\n // A prompt abandons any unanswered question.\n this.ask = null;\n this.state = \"active\";\n void this.runtime.prompt(text);\n }\n }\n\n /** Stop the session and dispose the runtime. */\n stop(): void {\n if (this.state === \"stopped\") return;\n this.ask = null;\n this.state = \"stopped\";\n this.runtime.offEvent(this.eventHandler);\n void this.runtime.dispose();\n this.appendLine({ type: \"system\", message: \"Session stopped.\" });\n this.notify();\n this.cleanupFn?.();\n }\n\n /** Register a cleanup function called when the session stops. Used by the factory. */\n _registerCleanup(fn: () => void): void {\n this.cleanupFn = fn;\n }\n\n // ── Event → OutputLine ────────────────────────────────────────────────────\n\n protected handleEvent(event: AgentEvent): void {\n switch (event.type) {\n case \"text\":\n this.handleTextEvent(event);\n break;\n case \"text_retract\":\n this.handleTextRetractEvent(event.content);\n break;\n case \"tool_call\":\n this.handleToolCallEvent(event);\n break;\n case \"question\":\n this.handleQuestionEvent(event);\n break;\n case \"error\":\n this.handleErrorEvent(event);\n break;\n case \"status\":\n this.handleStatusEvent(event);\n break;\n case \"subagent\":\n this.handleSubagentEvent(event);\n break;\n case \"finished\":\n this.handleFinishedEvent();\n break;\n case \"state_changed\":\n this.handleStateChangedEvent(event);\n break;\n }\n\n this.notify();\n }\n\n private handleTextEvent(event: AgentEvent): void {\n const content = \"content\" in event ? String(event.content) : \"\";\n if (this.currentTextLine) {\n this.currentTextLine.content += content;\n } else {\n const line: OutputLine & { type: \"text\" } = { type: \"text\", content };\n this.output.push(line);\n this.currentTextLine = line;\n this.trimOutput();\n }\n this.markActive();\n }\n\n /**\n * Cut an abandoned attempt's fragment off the open text line, dropping the\n * line when nothing is left. A sealed line or a mismatched tail stays as is.\n */\n private handleTextRetractEvent(content: string): void {\n const line = this.currentTextLine;\n if (!line || !content || !line.content.endsWith(content)) return;\n line.content = line.content.slice(0, line.content.length - content.length);\n if (line.content.length === 0) {\n const index = this.output.indexOf(line);\n if (index !== -1) this.output.splice(index, 1);\n this.currentTextLine = null;\n }\n }\n\n private handleToolCallEvent(event: AgentEvent): void {\n this.sealText();\n const name =\n \"name\" in event ? String(event.name) : \"tool\" in event ? String(event.tool) : \"tool\";\n this.appendLine({ type: \"tool\", name });\n this.markActive();\n }\n\n private handleQuestionEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const text =\n \"question\" in e\n ? String(e.question)\n : \"text\" in e\n ? String(e.text)\n : \"The agent has a question.\";\n this.appendLine({ type: \"question\", text });\n // One event arrives per sub-question; they share an ask until it is answered.\n const requestId = typeof e.requestId === \"string\" ? e.requestId : undefined;\n this.ask ??= new AskSlots();\n this.ask.add(text, requestId);\n this.state = \"waiting\";\n }\n\n private handleErrorEvent(event: AgentEvent): void {\n this.sealText();\n const message = \"message\" in event ? String(event.message) : \"An error occurred.\";\n this.appendLine({ type: \"error\", message });\n if (\"fatal\" in event && event.fatal) this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStatusEvent(event: AgentEvent): void {\n const phase = \"phase\" in event ? String(event.phase) : \"\";\n if (phase === \"thinking\" && this.currentTextLine !== null) return;\n if (phase) this.appendLine({ type: \"status\", phase });\n }\n\n private handleSubagentEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const name = \"name\" in e ? String(e.name) : \"unknown\";\n const status = \"status\" in e ? (String(e.status) as \"started\" | \"finished\") : \"started\";\n const description = \"description\" in e ? String(e.description) : \"\";\n this.appendLine({ type: \"subagent\", name, status, description });\n if (status === \"started\") {\n this.markActive();\n }\n }\n\n private handleFinishedEvent(): void {\n this.sealText();\n this.appendLine({ type: \"separator\" });\n this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStateChangedEvent(event: AgentEvent): void {\n if (\"state\" in event && (event as Record<string, unknown>).state === \"stopped\") {\n this.sealText();\n this.appendLine({ type: \"system\", message: \"Agent stopped.\" });\n this.ask = null;\n this.state = \"stopped\";\n }\n }\n\n /**\n * The agent is working. Not while an ask is parked: the harness keeps the turn\n * paused until every sub-question has an answer, and follows the question\n * events with tool activity for the same block.\n */\n private markActive(): void {\n if (this.ask !== null && this.state === \"waiting\") return;\n this.state = \"active\";\n }\n\n // ── Internals ─────────────────────────────────────────────────────────────\n\n protected appendLine(line: OutputLine): void {\n this.output.push(line);\n this.trimOutput();\n }\n\n protected notify(): void {\n this.onChange?.();\n }\n\n private sealText(): void {\n this.currentTextLine = null;\n }\n\n private trimOutput(): void {\n while (this.output.length > MAX_OUTPUT_LINES) {\n this.output.shift();\n }\n }\n}\n","/**\n * InProcessTransport — ServerTransport that runs entirely in-process.\n *\n * Used internally by {@link LocalRuntime}. Also exported for consumers building\n * custom integrations that need direct transport access without WebSocket overhead.\n *\n * Runner side (startAgentServer):\n * onCommand(handler) — registers the runner's command handler\n * send(event) — delivers AgentEvents to onEvent subscribers\n *\n * Application side:\n * inject(command) — sends a command to the agent (deferred to avoid re-entrancy)\n * onEvent(handler) — subscribes to AgentEvents; returns unsubscribe fn\n *\n * @docLink packages/sdk/concepts#in-process-transport\n */\n\nimport type { AgentCommand, AgentEvent, ServerTransport } from \"@skaile/workspaces/types\";\n\nexport class InProcessTransport implements ServerTransport {\n private readonly commandHandlers = new Set<(cmd: AgentCommand) => void>();\n private readonly eventHandlers = new Set<(event: AgentEvent) => void>();\n // Commands injected before any handler is registered are buffered here and\n // flushed on the first onCommand() — without this they iterate an empty set\n // and are silently lost (e.g. a prompt sent during start()'s wiring window).\n private readonly pendingCommands: AgentCommand[] = [];\n\n // ── ServerTransport ───────────────────────────────────────────────────────\n\n // In-process: no socket to open or tear down — both are no-ops so serve()\n // can drive any transport's lifecycle without an instanceof check.\n async listen(): Promise<void> {}\n\n async close(): Promise<void> {}\n\n send(event: AgentEvent): void {\n for (const h of this.eventHandlers) h(event);\n }\n\n onCommand(handler: (cmd: AgentCommand) => void): () => void {\n const wasEmpty = this.commandHandlers.size === 0;\n this.commandHandlers.add(handler);\n if (wasEmpty && this.pendingCommands.length > 0) {\n const buffered = this.pendingCommands.splice(0);\n for (const cmd of buffered) {\n void Promise.resolve().then(() => handler(cmd));\n }\n }\n return () => this.commandHandlers.delete(handler);\n }\n\n onConnect(_handler: () => void): () => void {\n return () => {};\n }\n\n onDisconnect(_handler: () => void): () => void {\n return () => {};\n }\n\n /** True once a command handler is wired (i.e. the runner has started). */\n get connected(): boolean {\n return this.commandHandlers.size > 0;\n }\n\n // ── Application API ───────────────────────────────────────────────────────\n\n /**\n * Send a command into the agent runner. Deferred to avoid re-entrancy.\n * Commands injected before a handler is registered are buffered and\n * flushed when the runner wires its handler, so none are dropped.\n */\n inject(command: AgentCommand): void {\n if (this.commandHandlers.size === 0) {\n this.pendingCommands.push(command);\n return;\n }\n for (const h of this.commandHandlers) {\n void Promise.resolve().then(() => h(command));\n }\n }\n\n /** Subscribe to AgentEvents. Returns an unsubscribe function. */\n onEvent(handler: (event: AgentEvent) => void): () => void {\n this.eventHandlers.add(handler);\n return () => this.eventHandlers.delete(handler);\n }\n}\n","/**\n * LocalRuntime — IAgentRuntime implementation that runs the agent in the same process.\n *\n * Mirror image of AgentClient: same interface, no WebSocket.\n * Uses InProcessTransport + startAgentServer() internally.\n *\n * Usage:\n * const runtime = new LocalRuntime();\n * runtime.onEvent(e => console.log(e));\n * await runtime.start({ projectDir: \"/path/to/workspace\" });\n * await runtime.prompt(\"Hello\");\n * await runtime.dispose();\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\n\nimport { startAgentServer } from \"@skaile/workspaces/runner\";\nimport type { AgentEvent, IAgentRuntime } from \"@skaile/workspaces/types\";\nimport { InProcessTransport } from \"./transport.js\";\n\n/**\n * Options passed to {@link LocalRuntime.start}.\n *\n * `projectDir` is the only required field — it points to the workspace directory\n * containing `skaile.yaml`. All other fields override the manifest's agent configuration.\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\nexport interface LocalRuntimeStartOptions {\n projectDir: string;\n agentDir?: string;\n harness?: string;\n model?: string;\n provider?: string;\n onLog?: (line: string) => void;\n}\n\nexport class LocalRuntime implements Omit<IAgentRuntime, \"start\" | \"configure\"> {\n private readonly transport = new InProcessTransport();\n private readonly handlers = new Set<(e: AgentEvent) => void>();\n private started = false;\n private resolveReady!: () => void;\n private readonly readyPromise = new Promise<void>((resolve) => {\n this.resolveReady = resolve;\n });\n\n constructor() {\n this.transport.onEvent((e) => {\n for (const h of this.handlers) h(e);\n });\n }\n\n /**\n * Start the agent server. Resolves when the runner is wired and ready\n * to accept commands. Must be called before prompt() / reply().\n */\n async start(opts: LocalRuntimeStartOptions): Promise<void> {\n if (this.started) return;\n this.started = true;\n await startAgentServer({\n projectDir: opts.projectDir,\n agentDir: opts.agentDir,\n harness: opts.harness,\n model: opts.model,\n provider: opts.provider,\n transport: this.transport,\n onLog: opts.onLog,\n // The embedder owns stdout; log records go to the project's log db and to `onLog`.\n stdout: false,\n });\n this.resolveReady();\n }\n\n /**\n * Resolves once the runner is wired and accepting commands. Await this\n * before issuing commands that expect a reply (e.g. debug queries) so a\n * pre-start command isn't buffered indefinitely. Never rejects.\n */\n whenReady(): Promise<void> {\n return this.readyPromise;\n }\n\n async prompt(message: string): Promise<void> {\n this.transport.inject({ type: \"prompt\", prompt: message });\n }\n\n async reply(answer: string): Promise<void> {\n this.transport.inject({ type: \"reply\", answer });\n }\n\n async abort(): Promise<void> {\n this.transport.inject({ type: \"cancel\" });\n }\n\n async dispose(): Promise<void> {\n this.transport.inject({ type: \"shutdown\" });\n }\n\n onEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.add(handler);\n }\n\n offEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.delete(handler);\n }\n\n get isRunning(): boolean {\n return this.transport.connected;\n }\n}\n","/**\n * Workspace utilities — prepare session directories and write skaile.yaml.\n */\n\nimport { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\n\n/**\n * Prepare a workspace directory for a session. Returns the path and cleanup fn.\n *\n * If `opts.workspaceDir` is set, that directory is created (if needed) and returned\n * with no cleanup. Otherwise a unique temporary directory (`skaile-sdk-*` under the\n * OS temp dir) is created via `mkdtempSync`; the cleanup function removes it on\n * session stop unless `keepWorkspace` is true.\n *\n * @param opts - Session creation options providing `workspaceDir` and `keepWorkspace`.\n * @returns An object with the resolved `dir` path and an optional `cleanup` function.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function prepareWorkspace(opts: CreateAgentSessionOptions): {\n dir: string;\n cleanup: (() => void) | undefined;\n} {\n if (opts.workspaceDir) {\n mkdirSync(opts.workspaceDir, { recursive: true });\n return { dir: opts.workspaceDir, cleanup: undefined };\n }\n\n // mkdtemp yields an unpredictable, collision-free name (vs. a guessable\n // timestamp path) — avoids cross-session clobbering and symlink races in /tmp.\n const dir = mkdtempSync(join(tmpdir(), \"skaile-sdk-\"));\n\n const cleanup = opts.keepWorkspace\n ? undefined\n : () => rmSync(dir, { recursive: true, force: true });\n\n return { dir, cleanup };\n}\n\n/**\n * Write skaile.yaml from inline {@link CreateAgentSessionOptions}.\n *\n * Only writes if `agent`, `mounts`, or `connectors` are provided and no `skaile.yaml`\n * already exists in `dir` (existing config takes precedence). Connector `adapter` fields\n * are mapped to the `driver` field expected by the core runtime.\n *\n * @param dir - Absolute path to the workspace directory.\n * @param opts - Session options containing agent config, mounts, and connectors to serialize.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function writeSkaileYaml(dir: string, opts: CreateAgentSessionOptions): void {\n if (!opts.agent && !opts.mounts?.length && !opts.connectors?.length) return;\n const dest = join(dir, \"skaile.yaml\");\n if (existsSync(dest)) return; // existing config wins\n\n const cfg: Record<string, unknown> = {\n name: \"sdk-session\",\n };\n\n if (opts.agent) {\n cfg[\"agent-config\"] = {\n default: {\n ...(opts.agent.harness && { harness: opts.agent.harness }),\n ...(opts.agent.provider && { provider: opts.agent.provider }),\n ...(opts.agent.model && { model: opts.agent.model }),\n },\n };\n\n if (opts.agent.maxTurns !== undefined || opts.agent.permissionMode !== undefined) {\n cfg.agent = {\n permissions: {\n ...(opts.agent.maxTurns !== undefined && { max_turns: opts.agent.maxTurns }),\n ...(opts.agent.permissionMode !== undefined && {\n permission_mode: opts.agent.permissionMode,\n }),\n },\n };\n }\n }\n\n if (opts.mounts?.length) {\n cfg.mounts = opts.mounts;\n }\n\n if (opts.connectors?.length) {\n // Map SDK field names to core's ConnectorDeclaration field names:\n // SDK uses `adapter` → core expects `driver`\n cfg.connectors = opts.connectors.map((c) => ({\n id: c.id,\n driver: c.adapter,\n ...(c.access && { access: c.access }),\n ...(c.auth && { auth: c.auth }),\n ...(c.options && { options: c.options }),\n }));\n }\n\n writeFileSync(dest, stringify(cfg));\n}\n","/**\n * createAgentSession() — universal factory for agent sessions.\n *\n * Handles workspace preparation, skaile.yaml writing, runtime selection,\n * startup, and cleanup registration. Returns a ready-to-use {@link AgentSession}.\n *\n * For multi-session managers (forge-tui) or bots (forge-mattermost) that need\n * custom session subclasses, use LocalRuntime directly:\n *\n * const runtime = new LocalRuntime();\n * await runtime.start({ projectDir: dir, agentDir });\n * const session = new MySession(id, name, runtime);\n *\n * @docLink packages/sdk/concepts#create-agent-session\n */\n\nimport { AgentClient } from \"@skaile/workspaces/client\";\nimport { WebSocketClientTransport } from \"@skaile/workspaces/transport/ws/client\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { LocalRuntime } from \"./local-runtime.js\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\nimport { prepareWorkspace, writeSkaileYaml } from \"./workspace.js\";\n\nexport async function createAgentSession(\n opts: CreateAgentSessionOptions = {},\n): Promise<AgentSession> {\n const { dir, cleanup } = prepareWorkspace(opts);\n writeSkaileYaml(dir, opts);\n\n const mode = opts.mode ?? { type: \"local\" };\n let runtime: LocalRuntime | AgentClient;\n\n if (mode.type === \"local\") {\n const r = new LocalRuntime();\n await r.start({ projectDir: dir, agentDir: opts.agentDir });\n runtime = r;\n } else {\n const transport = new WebSocketClientTransport({ url: mode.url });\n await transport.connect();\n runtime = new AgentClient(transport);\n }\n\n const session = new AgentSession(runtime);\n session.state = \"idle\";\n\n if (cleanup) {\n session._registerCleanup(cleanup);\n }\n\n if (opts.initialPrompt?.trim()) {\n session.send(opts.initialPrompt.trim());\n }\n\n return session;\n}\n"]}
@@ -1,20 +1,20 @@
1
- export { buildRequiresPreamble, parseCompactionDirectives, parseSkillFrontmatter, parseSkillRequirements, validateConnectorRequirements, validateFlowVersions, validateRequirements } from '../chunk-IRYKRKVQ.js';
2
- import '../chunk-VMVDAZLA.js';
1
+ export { buildRequiresPreamble, parseCompactionDirectives, parseSkillFrontmatter, parseSkillRequirements, validateConnectorRequirements, validateFlowVersions, validateRequirements } from '../chunk-URCJIV7T.js';
2
+ import '../chunk-J5JRGBKK.js';
3
3
  import '../chunk-4GY63JU6.js';
4
- import '../chunk-ZDLUQLI6.js';
4
+ import '../chunk-6WH2WE4B.js';
5
5
  import '../chunk-5KRMNUL4.js';
6
- import '../chunk-Z7ZEZZB6.js';
6
+ import '../chunk-C5HFK34M.js';
7
7
  import '../chunk-MWXYN6NY.js';
8
- import '../chunk-ZHGKAZJ7.js';
8
+ import '../chunk-XBQTXGY4.js';
9
9
  import '../chunk-L5VSIPQD.js';
10
10
  import '../chunk-VTETQCR6.js';
11
- import '../chunk-ZBHZLWV3.js';
11
+ import '../chunk-KPKGWXUJ.js';
12
+ import '../chunk-JMIKGAUA.js';
12
13
  import '../chunk-RVRB27AN.js';
13
- import '../chunk-RHN5MRQO.js';
14
- import '../chunk-LSSYC5IC.js';
15
- import '../chunk-ADPM6AYF.js';
14
+ import '../chunk-IZQOO6MN.js';
15
+ import '../chunk-VSX2G7LA.js';
16
+ import '../chunk-RXGPFAMN.js';
16
17
  import '../chunk-DKXNKFKP.js';
17
- import '../chunk-LSI2IVFT.js';
18
18
  import '../chunk-C3CAXQMA.js';
19
19
  import '../chunk-BOFL7GIF.js';
20
20
  import '../chunk-NSBPE2FW.js';
@@ -1,72 +1,74 @@
1
- export { AgentRunError, CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CONNECTOR_MUTATE_NOT_READY, CapabilityRegistry, CompileManifestEntrySchema, CompositionError, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, DEFAULT_MAX_FINISHED_TREES, DEFAULT_RUN_LIMITS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_READ_MAX_CHUNK_BYTES, MOUNT_STAT_BUDGET_MS, MOUNT_STAT_MAX_ENTRIES, MOUNT_TREE_OP_DEADLINE_FACTOR, MOUNT_WRITE_MAX_CHUNK_BYTES, MarkdownStreamer, PreInitRingSink, ResourceOperationError, SESSION_ROOT_WRITABLE_DIRS, SESSION_ROOT_WRITABLE_FILES, UnknownCompositionKindError, WRITE_RANGE_PARTIAL_TTL_MS, WS_AUTH_TOKEN_ENV, WS_AUTH_TOKEN_FILE_ENV, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildCompositionRunSnapshot, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildRunnerAgentSections, buildStoreSnapshotReplay, builtinCapabilities, canonicalJson, capabilityLogInstance, capabilitySignatureInputs, clearPreInitRingSink, clearSession, compileComposition, compositionRunSnapshotPath, computeCapabilitySignature, computeDirectoryTotals, computeRevisionHash, connectorRefreshKind, createAgentSession, createCompositionContentSource, createFinalTextFallback, createFlowConnectorReadiness, createInMemoryRunStore, createManagedCodexSubpromptHarness, createRunController, createSessionStimulusBus, defineCapability, deleteSession, describeComposition, dispatchResourceRequest, dispatchRunnerCapabilityInvocation, emitSystemPromptComposed, ensureClaudeSettingsDisablesConnectors, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, flowStartNeedsHarnessRestart, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, handleSessionRootResourceRequest, harnessActiveAfterTurnEnd, hasNonTerminalFlow, hashAgentFiles, hashContent, hostOpResumeStimulus, installPreInitRingSink, instanceForSession, instanceSessionOverrides, isCompilePinCurrent, isCompositionError, isEmptyKnowledgeIndex, isSessionRootPathAllowed, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadCompositionRunSnapshot, loadKnowledgeDir, loadManagedCodexHostConfig, loadSession, loadSessionById, manifestModelForHarness, mcpAuthSecretKey, newSession, nulTailPaddingLength, pickChatFlowTarget, pickFlowToolTarget, pickRepointedManager, planFlowMutate, prepareCodexTools, reconcilePendingDecisions, reconnectedRunNeedsAgentTurn, recreateKeepingLiveFlows, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, rejectPendingCapabilityCallsOnDisconnect, resetRunnerLogStore, resolveAgentInstance, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveInstanceAgentDir, resolveMixin, resolveSessionId, restoredRunHasWorkToResume, runAgentChat, saveCompositionRunSnapshot, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, stripFrontmatter, takeRunnerWsAuthToken, toActiveFlowTarget, touchSession, unresolvedCredentialNotices, validateInputResponse, verifyConventionItems, writeClaudeCodeCredentialsFile, writeRangeChunk, writeRangePartialPath } from '../chunk-2LAPHLDH.js';
2
- import '../chunk-QAKUD6QN.js';
3
- import '../chunk-6YR4ALVX.js';
4
- import '../chunk-ZAELRYKS.js';
5
- import '../chunk-X3YGUKCG.js';
1
+ export { AgentRunError, CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CONNECTOR_MUTATE_NOT_READY, CapabilityRegistry, CompileManifestEntrySchema, CompositionError, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, DEFAULT_MAX_FINISHED_TREES, DEFAULT_RUN_LIMITS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_READ_MAX_CHUNK_BYTES, MOUNT_STAT_BUDGET_MS, MOUNT_STAT_MAX_ENTRIES, MOUNT_TREE_OP_DEADLINE_FACTOR, MOUNT_WRITE_MAX_CHUNK_BYTES, MarkdownStreamer, PreInitRingSink, ResourceOperationError, SESSION_ROOT_WRITABLE_DIRS, SESSION_ROOT_WRITABLE_FILES, UnknownCompositionKindError, WRITE_RANGE_PARTIAL_TTL_MS, WS_AUTH_TOKEN_ENV, WS_AUTH_TOKEN_FILE_ENV, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildCompositionRunSnapshot, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildRunnerAgentSections, buildStoreSnapshotReplay, builtinCapabilities, canonicalJson, capabilityLogInstance, capabilitySignatureInputs, clearPreInitRingSink, clearSession, compileComposition, compositionRunSnapshotPath, computeCapabilitySignature, computeDirectoryTotals, computeRevisionHash, connectorRefreshKind, createAgentSession, createCompositionContentSource, createFinalTextFallback, createFlowConnectorReadiness, createInMemoryRunStore, createManagedCodexSubpromptHarness, createRunController, createSessionStimulusBus, defineCapability, deleteSession, describeComposition, dispatchResourceRequest, dispatchRunnerCapabilityInvocation, emitSystemPromptComposed, ensureClaudeSettingsDisablesConnectors, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, flowStartNeedsHarnessRestart, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, handleSessionRootResourceRequest, harnessActiveAfterTurnEnd, hasNonTerminalFlow, hashAgentFiles, hashContent, hostOpResumeStimulus, installPreInitRingSink, instanceForSession, instanceSessionOverrides, isCompilePinCurrent, isCompositionError, isEmptyKnowledgeIndex, isSessionRootPathAllowed, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadCompositionRunSnapshot, loadKnowledgeDir, loadManagedCodexHostConfig, loadSession, loadSessionById, manifestModelForHarness, mcpAuthSecretKey, newSession, nulTailPaddingLength, pickChatFlowTarget, pickFlowToolTarget, pickRepointedManager, planFlowMutate, prepareCodexTools, reconcilePendingDecisions, reconnectedRunNeedsAgentTurn, recreateKeepingLiveFlows, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, rejectPendingCapabilityCallsOnDisconnect, resetRunnerLogStore, resolveAgentInstance, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveInstanceAgentDir, resolveMixin, resolveSessionId, restoredRunHasWorkToResume, runAgentChat, saveCompositionRunSnapshot, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, stripFrontmatter, takeRunnerWsAuthToken, toActiveFlowTarget, touchSession, unresolvedCredentialNotices, validateInputResponse, verifyConventionItems, writeClaudeCodeCredentialsFile, writeRangeChunk, writeRangePartialPath } from '../chunk-QTLUZUF2.js';
2
+ import '../chunk-4QRJBY2P.js';
3
+ import '../chunk-7RH6E332.js';
4
+ import '../chunk-MD3FUZS3.js';
5
+ import '../chunk-BPTWWKGF.js';
6
6
  import '../chunk-WYZXSJBK.js';
7
- import '../chunk-HMISULVD.js';
8
- import '../chunk-Z3VKUWAX.js';
7
+ import '../chunk-QK7AG5AV.js';
8
+ import '../chunk-TSTRH4SM.js';
9
9
  import '../chunk-KW37WNXY.js';
10
10
  import '../chunk-3MWQKQUB.js';
11
- import '../chunk-KUQAJVYT.js';
11
+ import '../chunk-PHAMYCZH.js';
12
12
  import '../chunk-O7SG5PC2.js';
13
13
  import '../chunk-7QBNJTTQ.js';
14
14
  import '../chunk-O2SYFJWP.js';
15
- import '../chunk-EJPMNDTP.js';
15
+ import '../chunk-COUJOTAJ.js';
16
16
  import '../chunk-32NA4TVC.js';
17
17
  export { assembleSystemPrompt, buildCapabilitiesPromptSection, buildLinkedPeersPromptSection } from '../chunk-W3UDISS2.js';
18
- import '../chunk-ZFUZ5AKM.js';
19
- import '../chunk-J72MO2WA.js';
18
+ import '../chunk-HTGTNN2B.js';
19
+ import '../chunk-DU26AVK2.js';
20
20
  import '../chunk-4R6DROGN.js';
21
- import '../chunk-IRYKRKVQ.js';
22
- import '../chunk-VYVTEMAW.js';
23
- import '../chunk-DGTI65OC.js';
21
+ import '../chunk-URCJIV7T.js';
22
+ import '../chunk-PNUM7GUY.js';
23
+ import '../chunk-ZEH4WFEG.js';
24
24
  import '../chunk-6GWSDPBP.js';
25
- import '../chunk-BBBCJSSU.js';
26
- import '../chunk-5Y2KGB4H.js';
27
- import '../chunk-7LP7RCZI.js';
28
- import '../chunk-SVTMNSPI.js';
29
- import '../chunk-XGULGQA3.js';
25
+ import '../chunk-7TSNR5H5.js';
26
+ import '../chunk-7MV3NHPT.js';
27
+ import '../chunk-JGH7NB47.js';
28
+ import '../chunk-2TFKXSB5.js';
29
+ import '../chunk-ELSGFI3I.js';
30
30
  import '../chunk-LOO5CB5M.js';
31
31
  import '../chunk-BIRW3HOG.js';
32
- import '../chunk-5J4NPGFM.js';
33
- import '../chunk-GNZBFSRB.js';
34
- import '../chunk-XFIEVEU7.js';
32
+ import '../chunk-U3SXCVR7.js';
33
+ import '../chunk-H622YULS.js';
34
+ import '../chunk-6OHZUUR7.js';
35
35
  import '../chunk-7DN6JKP2.js';
36
- import '../chunk-FKQNBCDW.js';
37
- import '../chunk-ILLTBKDJ.js';
36
+ import '../chunk-HDVLBEEX.js';
37
+ import '../chunk-S6KZHPR4.js';
38
38
  import '../chunk-G5SUWZEU.js';
39
+ import '../chunk-QFFMFZIR.js';
40
+ import '../chunk-6UP2EDFN.js';
39
41
  import '../chunk-IFGTRL2I.js';
40
- import '../chunk-4MUDQCBP.js';
42
+ import '../chunk-RFQONXET.js';
41
43
  import '../chunk-WD3L5QSU.js';
42
44
  import '../chunk-7RGTAEG6.js';
43
45
  import '../chunk-JCPD4QRM.js';
44
- import '../chunk-S2XHGWQC.js';
45
- import '../chunk-UI745XC3.js';
46
- import '../chunk-YLLVSR2U.js';
47
- import '../chunk-BFMYYNDT.js';
46
+ import '../chunk-Y3I4KGLX.js';
47
+ import '../chunk-XEVFSDIF.js';
48
+ import '../chunk-E5NQRHEB.js';
49
+ import '../chunk-F3D25RGM.js';
48
50
  import '../chunk-3TXEJN4W.js';
49
51
  import '../chunk-ISHJITXJ.js';
50
52
  import '../chunk-LNFKL23K.js';
51
53
  import '../chunk-JRN5QF4C.js';
52
54
  import '../chunk-NUELZWCF.js';
53
- import '../chunk-E572OHGY.js';
54
- export { globalSettingsPath, loadSettings, mapLegacyFields, projectSettingsPath, resolveSettings, saveSettings } from '../chunk-VMVDAZLA.js';
55
+ import '../chunk-76FLBODK.js';
56
+ export { globalSettingsPath, loadSettings, mapLegacyFields, projectSettingsPath, resolveSettings, saveSettings } from '../chunk-J5JRGBKK.js';
55
57
  import '../chunk-4GY63JU6.js';
56
- import '../chunk-ZDLUQLI6.js';
58
+ import '../chunk-6WH2WE4B.js';
57
59
  import '../chunk-5KRMNUL4.js';
58
- export { HARNESS_DEFAULTS, resolveHarnessPaths } from '../chunk-Z7ZEZZB6.js';
60
+ export { HARNESS_DEFAULTS, resolveHarnessPaths } from '../chunk-C5HFK34M.js';
59
61
  import '../chunk-MWXYN6NY.js';
60
- import '../chunk-ZHGKAZJ7.js';
62
+ import '../chunk-XBQTXGY4.js';
61
63
  import '../chunk-L5VSIPQD.js';
62
64
  export { HARNESS_TARGETS, SUPPORTED_HARNESSES } from '../chunk-VTETQCR6.js';
63
- import '../chunk-ZBHZLWV3.js';
65
+ import '../chunk-KPKGWXUJ.js';
66
+ import '../chunk-JMIKGAUA.js';
64
67
  import '../chunk-RVRB27AN.js';
65
- import '../chunk-RHN5MRQO.js';
66
- import '../chunk-LSSYC5IC.js';
67
- import '../chunk-ADPM6AYF.js';
68
+ import '../chunk-IZQOO6MN.js';
69
+ import '../chunk-VSX2G7LA.js';
70
+ import '../chunk-RXGPFAMN.js';
68
71
  import '../chunk-DKXNKFKP.js';
69
- import '../chunk-LSI2IVFT.js';
70
72
  import '../chunk-C3CAXQMA.js';
71
73
  import '../chunk-BOFL7GIF.js';
72
74
  import '../chunk-NSBPE2FW.js';
@@ -1,21 +1,21 @@
1
- export { WebSocketServerTransport } from '../../../chunk-EJPMNDTP.js';
1
+ export { WebSocketServerTransport } from '../../../chunk-COUJOTAJ.js';
2
2
  import '../../../chunk-32NA4TVC.js';
3
- export { needsWildcardProbe } from '../../../chunk-VMVDAZLA.js';
3
+ export { needsWildcardProbe } from '../../../chunk-J5JRGBKK.js';
4
4
  import '../../../chunk-4GY63JU6.js';
5
- import '../../../chunk-ZDLUQLI6.js';
5
+ import '../../../chunk-6WH2WE4B.js';
6
6
  import '../../../chunk-5KRMNUL4.js';
7
- import '../../../chunk-Z7ZEZZB6.js';
7
+ import '../../../chunk-C5HFK34M.js';
8
8
  import '../../../chunk-MWXYN6NY.js';
9
- import '../../../chunk-ZHGKAZJ7.js';
9
+ import '../../../chunk-XBQTXGY4.js';
10
10
  import '../../../chunk-L5VSIPQD.js';
11
11
  import '../../../chunk-VTETQCR6.js';
12
- import '../../../chunk-ZBHZLWV3.js';
12
+ import '../../../chunk-KPKGWXUJ.js';
13
+ import '../../../chunk-JMIKGAUA.js';
13
14
  import '../../../chunk-RVRB27AN.js';
14
- import '../../../chunk-RHN5MRQO.js';
15
- import '../../../chunk-LSSYC5IC.js';
16
- import '../../../chunk-ADPM6AYF.js';
15
+ import '../../../chunk-IZQOO6MN.js';
16
+ import '../../../chunk-VSX2G7LA.js';
17
+ import '../../../chunk-RXGPFAMN.js';
17
18
  import '../../../chunk-DKXNKFKP.js';
18
- import '../../../chunk-LSI2IVFT.js';
19
19
  import '../../../chunk-C3CAXQMA.js';
20
20
  import '../../../chunk-BOFL7GIF.js';
21
21
  import '../../../chunk-NSBPE2FW.js';
@@ -1,23 +1,23 @@
1
1
  import '../../chunk-7QBNJTTQ.js';
2
2
  export { WebSocketClientTransport } from '../../chunk-O2SYFJWP.js';
3
- export { WebSocketServerTransport } from '../../chunk-EJPMNDTP.js';
3
+ export { WebSocketServerTransport } from '../../chunk-COUJOTAJ.js';
4
4
  export { BEARER_SUBPROTOCOL_PREFIX, decodeBearerFromHeader, encodeBearerSubprotocol, tokensEqual } from '../../chunk-32NA4TVC.js';
5
- import '../../chunk-VMVDAZLA.js';
5
+ import '../../chunk-J5JRGBKK.js';
6
6
  import '../../chunk-4GY63JU6.js';
7
- import '../../chunk-ZDLUQLI6.js';
7
+ import '../../chunk-6WH2WE4B.js';
8
8
  import '../../chunk-5KRMNUL4.js';
9
- import '../../chunk-Z7ZEZZB6.js';
9
+ import '../../chunk-C5HFK34M.js';
10
10
  import '../../chunk-MWXYN6NY.js';
11
- import '../../chunk-ZHGKAZJ7.js';
11
+ import '../../chunk-XBQTXGY4.js';
12
12
  import '../../chunk-L5VSIPQD.js';
13
13
  import '../../chunk-VTETQCR6.js';
14
- import '../../chunk-ZBHZLWV3.js';
14
+ import '../../chunk-KPKGWXUJ.js';
15
+ import '../../chunk-JMIKGAUA.js';
15
16
  import '../../chunk-RVRB27AN.js';
16
- import '../../chunk-RHN5MRQO.js';
17
- import '../../chunk-LSSYC5IC.js';
18
- import '../../chunk-ADPM6AYF.js';
17
+ import '../../chunk-IZQOO6MN.js';
18
+ import '../../chunk-VSX2G7LA.js';
19
+ import '../../chunk-RXGPFAMN.js';
19
20
  import '../../chunk-DKXNKFKP.js';
20
- import '../../chunk-LSI2IVFT.js';
21
21
  import '../../chunk-C3CAXQMA.js';
22
22
  import '../../chunk-BOFL7GIF.js';
23
23
  import '../../chunk-NSBPE2FW.js';
@@ -1,24 +1,24 @@
1
1
  import '../chunk-O7SG5PC2.js';
2
2
  import '../chunk-7QBNJTTQ.js';
3
3
  export { WebSocketClientTransport } from '../chunk-O2SYFJWP.js';
4
- export { WebSocketServerTransport } from '../chunk-EJPMNDTP.js';
4
+ export { WebSocketServerTransport } from '../chunk-COUJOTAJ.js';
5
5
  import '../chunk-32NA4TVC.js';
6
- import '../chunk-VMVDAZLA.js';
6
+ import '../chunk-J5JRGBKK.js';
7
7
  import '../chunk-4GY63JU6.js';
8
- import '../chunk-ZDLUQLI6.js';
8
+ import '../chunk-6WH2WE4B.js';
9
9
  import '../chunk-5KRMNUL4.js';
10
- import '../chunk-Z7ZEZZB6.js';
10
+ import '../chunk-C5HFK34M.js';
11
11
  import '../chunk-MWXYN6NY.js';
12
- import '../chunk-ZHGKAZJ7.js';
12
+ import '../chunk-XBQTXGY4.js';
13
13
  import '../chunk-L5VSIPQD.js';
14
14
  import '../chunk-VTETQCR6.js';
15
- import '../chunk-ZBHZLWV3.js';
15
+ import '../chunk-KPKGWXUJ.js';
16
+ import '../chunk-JMIKGAUA.js';
16
17
  import '../chunk-RVRB27AN.js';
17
- import '../chunk-RHN5MRQO.js';
18
- import '../chunk-LSSYC5IC.js';
19
- import '../chunk-ADPM6AYF.js';
18
+ import '../chunk-IZQOO6MN.js';
19
+ import '../chunk-VSX2G7LA.js';
20
+ import '../chunk-RXGPFAMN.js';
20
21
  import '../chunk-DKXNKFKP.js';
21
- import '../chunk-LSI2IVFT.js';
22
22
  import '../chunk-C3CAXQMA.js';
23
23
  import '../chunk-BOFL7GIF.js';
24
24
  import '../chunk-NSBPE2FW.js';
@@ -1,56 +1,58 @@
1
- import { loadRegistryView } from './chunk-NB7SYQYP.js';
2
- import './chunk-QEULL4Q3.js';
3
- import { checkHarnessModel, checkOmpServeModel } from './chunk-5Y2KGB4H.js';
4
- import './chunk-7LP7RCZI.js';
5
- import './chunk-SVTMNSPI.js';
6
- import './chunk-XGULGQA3.js';
1
+ import { loadRegistryView } from './chunk-32FYVSSW.js';
2
+ import { unknownHarnessMessage } from './chunk-7QG2WRSN.js';
3
+ import { checkOmpListedModel, checkHarnessModel, checkOmpServeModel } from './chunk-7MV3NHPT.js';
4
+ import './chunk-JGH7NB47.js';
5
+ import './chunk-2TFKXSB5.js';
6
+ import './chunk-ELSGFI3I.js';
7
7
  import './chunk-LOO5CB5M.js';
8
8
  import './chunk-BIRW3HOG.js';
9
- import './chunk-5J4NPGFM.js';
10
- import './chunk-GNZBFSRB.js';
11
- import './chunk-XFIEVEU7.js';
9
+ import './chunk-U3SXCVR7.js';
10
+ import './chunk-H622YULS.js';
11
+ import './chunk-6OHZUUR7.js';
12
12
  import './chunk-7DN6JKP2.js';
13
- import './chunk-FKQNBCDW.js';
14
- import './chunk-ILLTBKDJ.js';
13
+ import './chunk-HDVLBEEX.js';
14
+ import './chunk-S6KZHPR4.js';
15
15
  import './chunk-G5SUWZEU.js';
16
+ import './chunk-QFFMFZIR.js';
17
+ import './chunk-6UP2EDFN.js';
16
18
  import './chunk-JCPD4QRM.js';
17
- import './chunk-HWNK3F3X.js';
18
- import './chunk-S2XHGWQC.js';
19
- import './chunk-UI745XC3.js';
20
- import './chunk-YLLVSR2U.js';
21
- import './chunk-BFMYYNDT.js';
19
+ import './chunk-KGHYXXXV.js';
20
+ import './chunk-Y3I4KGLX.js';
21
+ import './chunk-XEVFSDIF.js';
22
+ import './chunk-E5NQRHEB.js';
23
+ import './chunk-F3D25RGM.js';
22
24
  import './chunk-3TXEJN4W.js';
23
25
  import './chunk-ISHJITXJ.js';
24
26
  import './chunk-LNFKL23K.js';
25
27
  import './chunk-JRN5QF4C.js';
26
28
  import './chunk-NUELZWCF.js';
27
- import './chunk-NUA33BYO.js';
28
- import './chunk-NOA6EJXE.js';
29
+ import './chunk-MYXFR27L.js';
30
+ import './chunk-PKE3PXOK.js';
29
31
  import './chunk-KTBKW2FI.js';
30
32
  import './chunk-UQ6LFBPZ.js';
31
- import './chunk-ABFPSVIS.js';
32
- import './chunk-E572OHGY.js';
33
- import { loadHarnessSdk, resolveSettings, sdkLookupPlaces, installCommandFor } from './chunk-VMVDAZLA.js';
33
+ import './chunk-LD6O6QKU.js';
34
+ import './chunk-76FLBODK.js';
35
+ import { loadHarnessSdk, resolveSettings, sdkLookupPlaces, installCommandFor } from './chunk-J5JRGBKK.js';
34
36
  import './chunk-4GY63JU6.js';
35
- import './chunk-ZDLUQLI6.js';
37
+ import './chunk-6WH2WE4B.js';
36
38
  import './chunk-5KRMNUL4.js';
37
- import { DEFAULT_HARNESS_ID } from './chunk-Z7ZEZZB6.js';
39
+ import { DEFAULT_HARNESS_ID } from './chunk-C5HFK34M.js';
38
40
  import './chunk-MWXYN6NY.js';
39
- import { resolveSkWorkspaceConfig } from './chunk-ZHGKAZJ7.js';
41
+ import { resolveSkWorkspaceConfig, resolveAgentDir, AgentRefResolutionError } from './chunk-XBQTXGY4.js';
40
42
  import './chunk-L5VSIPQD.js';
41
43
  import './chunk-VTETQCR6.js';
42
- import './chunk-ZBHZLWV3.js';
44
+ import './chunk-KPKGWXUJ.js';
45
+ import './chunk-JMIKGAUA.js';
43
46
  import './chunk-RVRB27AN.js';
44
- import './chunk-RHN5MRQO.js';
45
- import './chunk-LSSYC5IC.js';
46
- import './chunk-ADPM6AYF.js';
47
+ import './chunk-IZQOO6MN.js';
48
+ import './chunk-VSX2G7LA.js';
49
+ import { pickRegistryEntries, registryEntries, isEntryEnabled } from './chunk-RXGPFAMN.js';
47
50
  import './chunk-DKXNKFKP.js';
48
- import { pickRegistryEntries } from './chunk-LSI2IVFT.js';
49
51
  import './chunk-C3CAXQMA.js';
50
52
  import './chunk-BOFL7GIF.js';
51
53
  import './chunk-NSBPE2FW.js';
54
+ import { statSync } from 'fs';
52
55
 
53
- // cli/src/commands/serve-preflight.ts
54
56
  var HARNESS_SDKS = {
55
57
  "claude-sdk": {
56
58
  pkg: "@anthropic-ai/claude-agent-sdk",
@@ -86,7 +88,7 @@ async function checkModelEndpointPeer(projectDir, flag, probe) {
86
88
  const check = probe ?? (await import('./model-endpoint/index.js')).checkPiAiInstalled;
87
89
  return check(projectDir);
88
90
  }
89
- async function checkServeModel(projectDir, overrides, registry = () => loadRegistryView({ projectDir }).merged) {
91
+ async function checkServeModel(projectDir, overrides, registry = () => loadRegistryView({ projectDir }).merged, ompListed = checkOmpListedModel) {
90
92
  if (!overrides.model) return null;
91
93
  const secretsProvider = resolveSkWorkspaceConfig(projectDir).secrets?.provider;
92
94
  if (secretsProvider && secretsProvider !== "env") return null;
@@ -99,9 +101,37 @@ async function checkServeModel(projectDir, overrides, registry = () => loadRegis
99
101
  const narrowed = overrides.providers?.length ? pickRegistryEntries(local, overrides.providers) : local;
100
102
  const harness = settings.harness ?? DEFAULT_HARNESS_ID;
101
103
  const input = { registry: narrowed, model: settings.model };
102
- return checkHarnessModel(harness, input) ?? (harness === "omp" ? checkOmpServeModel(input) : void 0) ?? null;
104
+ const refusal = checkHarnessModel(harness, input) ?? (harness === "omp" ? checkOmpServeModel(input) : void 0);
105
+ if (refusal) return refusal;
106
+ const ownHome = harness === "omp" && !registryEntries(narrowed).some(
107
+ ([, entry]) => (entry.kind === "llm" || entry.kind === "embed") && isEntryEnabled(entry)
108
+ );
109
+ return (ownHome ? await ompListed(settings.model) : void 0) ?? null;
110
+ }
111
+ function checkServeProjectDir(projectDir) {
112
+ try {
113
+ if (statSync(projectDir).isDirectory()) return null;
114
+ } catch {
115
+ }
116
+ return `--project-dir: '${projectDir}' is not a directory`;
117
+ }
118
+ async function checkServeHarness(projectDir, harnessOverride) {
119
+ const settings = await resolveSettings(
120
+ projectDir,
121
+ harnessOverride ? { harness: harnessOverride } : {}
122
+ );
123
+ return unknownHarnessMessage(settings.harness ?? DEFAULT_HARNESS_ID) ?? null;
124
+ }
125
+ function checkServeAgentDefinition(projectDir) {
126
+ try {
127
+ resolveAgentDir(projectDir);
128
+ return null;
129
+ } catch (err) {
130
+ if (err instanceof AgentRefResolutionError) return err.message;
131
+ throw err;
132
+ }
103
133
  }
104
134
 
105
- export { checkHarnessSdk, checkModelEndpointPeer, checkServeModel };
106
- //# sourceMappingURL=serve-preflight-FLTIBTEX.js.map
107
- //# sourceMappingURL=serve-preflight-FLTIBTEX.js.map
135
+ export { checkHarnessSdk, checkModelEndpointPeer, checkServeAgentDefinition, checkServeHarness, checkServeModel, checkServeProjectDir };
136
+ //# sourceMappingURL=serve-preflight-H2AYMGJ6.js.map
137
+ //# sourceMappingURL=serve-preflight-H2AYMGJ6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../cli/src/commands/serve-preflight.ts"],"names":[],"mappings":"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","file":"serve-preflight-H2AYMGJ6.js","sourcesContent":["/**\n * Start-up checks for `skaile serve`: fail with one actionable line before the\n * runner reports ready, instead of on the first prompt.\n */\n\nimport { statSync } from \"node:fs\";\nimport {\n checkHarnessModel,\n checkOmpListedModel,\n checkOmpServeModel,\n} from \"@skaile/workspaces/bridge\";\nimport {\n isEntryEnabled,\n type MergedAIProviderRegistry,\n pickRegistryEntries,\n registryEntries,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { loadRegistryView } from \"./providers.ts\";\nimport {\n AgentRefResolutionError,\n DEFAULT_HARNESS_ID,\n installCommandFor,\n loadHarnessSdk,\n resolveAgentDir,\n resolveSettings,\n resolveSkWorkspaceConfig,\n sdkLookupPlaces,\n} from \"@skaile/workspaces/core\";\nimport { unknownHarnessMessage } from \"../harness-error.ts\";\n\n/** Optional SDK a harness needs at run time, and how to probe that it loads from a project. */\nconst HARNESS_SDKS: Record<\n string,\n { pkg: string; load: (projectDir: string) => Promise<unknown> }\n> = {\n \"claude-sdk\": {\n pkg: \"@anthropic-ai/claude-agent-sdk\",\n load: (projectDir) =>\n loadHarnessSdk(\n \"@anthropic-ai/claude-agent-sdk\",\n projectDir,\n () => import(\"@anthropic-ai/claude-agent-sdk\"),\n ),\n },\n codex: {\n pkg: \"@openai/codex-sdk\",\n load: (projectDir) =>\n loadHarnessSdk(\"@openai/codex-sdk\", projectDir, () => import(\"@openai/codex-sdk\")),\n },\n};\n\n/**\n * Check that the harness `skaile serve` would start can load its SDK. The probe\n * is the same lookup the harness runs in `start()` (the project's `node_modules`,\n * then next to skaile), so a compiled binary that bundles the SDK passes.\n *\n * @param projectDir - Project the server serves.\n * @param harnessOverride - `--harness`, when given.\n * @param probe - Replaceable loader table, for tests.\n * @returns The one-line problem, or `null` when the harness can start.\n */\nexport async function checkHarnessSdk(\n projectDir: string,\n harnessOverride?: string,\n probe: typeof HARNESS_SDKS = HARNESS_SDKS,\n): Promise<string | null> {\n const settings = await resolveSettings(\n projectDir,\n harnessOverride ? { harness: harnessOverride } : {},\n );\n const harness = settings.harness ?? DEFAULT_HARNESS_ID;\n const sdk = probe[harness];\n if (!sdk) return null;\n try {\n await sdk.load(projectDir);\n return null;\n } catch {\n return `The ${harness} harness needs ${sdk.pkg}, which is not installed. Looked in ${sdkLookupPlaces(projectDir)}. Run in the project: ${installCommandFor(sdk.pkg, projectDir)} (or pick another harness with --harness).`;\n }\n}\n\n/**\n * Check that the model endpoint can load pi-ai, when `skaile serve` will start the\n * endpoint (`--model-endpoint`, or `model_endpoint.enabled` in skaile.yaml). Without\n * this the endpoint printed its ready line and answered every request with a 500.\n *\n * @param projectDir - Project the server serves.\n * @param flag - Parsed `--model-endpoint`, when given.\n * @param probe - Replaceable pi-ai check, for tests.\n * @returns The one-line problem (both places looked in, the install command), or `null`.\n */\nexport async function checkModelEndpointPeer(\n projectDir: string,\n flag: { enabled?: boolean } | undefined,\n probe?: (projectDir: string) => Promise<string | null>,\n): Promise<string | null> {\n const enabled =\n flag?.enabled ?? resolveSkWorkspaceConfig(projectDir).model_endpoint?.enabled === true;\n if (!enabled) return null;\n const check = probe ?? (await import(\"@skaile/workspaces/model-endpoint\")).checkPiAiInstalled;\n return check(projectDir);\n}\n\n/**\n * Check that the harness `skaile serve` would start can take the model given with `--model`: the\n * refusal a first prompt would raise as a fatal `error` (p1334), one line before the ready line.\n * The same check as `skaile run --dry-run`.\n *\n * Only an explicit `--model` is checked. A model that comes from `skaile.yaml` or the settings\n * files is not: the platform sends its registry layer at `session_init`, after the server is up,\n * so a provider the local `providers.yml` lacks may still be served. That model is checked at\n * the first prompt, as before. The check sees the local registry, narrowed by `--providers` as\n * the session narrows it, and is skipped when the registry comes from the host\n * (`secrets.provider` other than `env`).\n *\n * @param projectDir - Project the server serves.\n * @param overrides - `--harness`, `--model` and `--providers`, when given.\n * @param registry - Replaceable registry loader, for tests.\n * @param ompListed - Replaceable omp model lookup (`omp models find`), for tests.\n * @returns The one-line refusal, or `null` when the harness takes the model.\n */\nexport async function checkServeModel(\n projectDir: string,\n overrides: { harness?: string; model?: string; providers?: readonly string[] },\n registry: () => MergedAIProviderRegistry = () => loadRegistryView({ projectDir }).merged,\n ompListed: (model: string) => Promise<string | undefined> = checkOmpListedModel,\n): Promise<string | null> {\n if (!overrides.model) return null;\n // The platform delivers its registry layer over the transport after the server is up (p1332).\n const secretsProvider = resolveSkWorkspaceConfig(projectDir).secrets?.provider;\n if (secretsProvider && secretsProvider !== \"env\") return null;\n const settings = await resolveSettings(projectDir, {\n ...(overrides.harness ? { harness: overrides.harness } : {}),\n model: overrides.model,\n });\n if (!settings.model) return null;\n const local = registry();\n const narrowed = overrides.providers?.length\n ? pickRegistryEntries(local, overrides.providers)\n : local;\n const harness = settings.harness ?? DEFAULT_HARNESS_ID;\n const input = { registry: narrowed, model: settings.model };\n // A server answers its first prompt after it is ready: omp must be known to take the model now (p1334).\n const refusal =\n checkHarnessModel(harness, input) ??\n (harness === \"omp\" ? checkOmpServeModel(input) : undefined);\n if (refusal) return refusal;\n // No enabled registry entry: omp serves from its own agent directory, which only omp can list.\n const ownHome =\n harness === \"omp\" &&\n !registryEntries(narrowed).some(\n ([, entry]) => (entry.kind === \"llm\" || entry.kind === \"embed\") && isEntryEnabled(entry),\n );\n return (ownHome ? await ompListed(settings.model) : undefined) ?? null;\n}\n\n/**\n * Check that `--project-dir` is an existing directory, before `serve` creates anything in it. A\n * missing folder used to fail with a raw `ENOENT` stack from the log store (p1732). A symlink to\n * a directory passes; a relative path is read from the current directory.\n *\n * @param projectDir - The `--project-dir` value as typed.\n * @returns The one-line problem, or `null` when the directory exists.\n */\nexport function checkServeProjectDir(projectDir: string): string | null {\n try {\n if (statSync(projectDir).isDirectory()) return null;\n } catch {\n // missing, a dangling link or unreadable: the same line\n }\n return `--project-dir: '${projectDir}' is not a directory`;\n}\n\n/**\n * Check that the harness `skaile serve` would start is one that is registered: `--harness`, else\n * the project's settings, else the default. The same refusal `run` prints; without it the first\n * session build died with a raw stack (p1731). Load the project's plugins first: a plugin's\n * harness counts.\n *\n * @param projectDir - Project the server serves.\n * @param harnessOverride - `--harness`, when given.\n * @returns The one-line problem, or `null` when the harness is known.\n */\nexport async function checkServeHarness(\n projectDir: string,\n harnessOverride?: string,\n): Promise<string | null> {\n const settings = await resolveSettings(\n projectDir,\n harnessOverride ? { harness: harnessOverride } : {},\n );\n return unknownHarnessMessage(settings.harness ?? DEFAULT_HARNESS_ID) ?? null;\n}\n\n/**\n * Check that `agent.definition` of the project's `skaile.yaml` resolves, the rule `validate`\n * applies (`agent_ref_unresolved`, p1733). Without it `serve` died with a raw\n * `AgentRefResolutionError` stack.\n *\n * @param projectDir - Project the server serves.\n * @returns The error message, or `null` when no definition is set or it resolves.\n */\nexport function checkServeAgentDefinition(projectDir: string): string | null {\n try {\n resolveAgentDir(projectDir);\n return null;\n } catch (err) {\n if (err instanceof AgentRefResolutionError) return err.message;\n throw err;\n }\n}\n"]}