@skaile/workspaces 5.4.0 → 5.5.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 (172) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{asset-feeds-3MVRNS5U.js → asset-feeds-KTFUB7EX.js} +7 -7
  3. package/dist/{asset-feeds-3MVRNS5U.js.map → asset-feeds-KTFUB7EX.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +3 -3
  5. package/dist/asset-manager/index.js +6 -6
  6. package/dist/asset-manager/installer.js +4 -4
  7. package/dist/asset-manager/src/index.d.ts +9 -0
  8. package/dist/asset-manager/src/index.d.ts.map +1 -1
  9. package/dist/bridge/drivers/claude-sdk.js +5 -5
  10. package/dist/bridge/drivers/codex.js +5 -5
  11. package/dist/bridge/drivers/continue.js +6 -6
  12. package/dist/bridge/drivers/echo.js +1 -1
  13. package/dist/bridge/drivers/gemini.js +5 -5
  14. package/dist/bridge/drivers/goose.js +6 -6
  15. package/dist/bridge/drivers/omp.js +2 -2
  16. package/dist/bridge/drivers/opencode.js +6 -6
  17. package/dist/bridge/drivers/qwen.js +5 -5
  18. package/dist/bridge/index.js +6 -6
  19. package/dist/{chunk-5NH3U6N5.js → chunk-2D2P7HSR.js} +4 -4
  20. package/dist/{chunk-5NH3U6N5.js.map → chunk-2D2P7HSR.js.map} +1 -1
  21. package/dist/{chunk-OANSNVCP.js → chunk-3665M43C.js} +5 -5
  22. package/dist/{chunk-OANSNVCP.js.map → chunk-3665M43C.js.map} +1 -1
  23. package/dist/{chunk-QEXEHXX5.js → chunk-3JHFFIQ6.js} +4 -4
  24. package/dist/{chunk-QEXEHXX5.js.map → chunk-3JHFFIQ6.js.map} +1 -1
  25. package/dist/{chunk-QK756IRJ.js → chunk-5Y3L7XWH.js} +10 -10
  26. package/dist/{chunk-QK756IRJ.js.map → chunk-5Y3L7XWH.js.map} +1 -1
  27. package/dist/{chunk-37DN45RR.js → chunk-75EX5GY4.js} +4 -4
  28. package/dist/{chunk-37DN45RR.js.map → chunk-75EX5GY4.js.map} +1 -1
  29. package/dist/{chunk-Y5OCUOXF.js → chunk-AC2N5BRP.js} +38 -9
  30. package/dist/chunk-AC2N5BRP.js.map +1 -0
  31. package/dist/{chunk-2XXAVTTO.js → chunk-C4GF7RSQ.js} +3 -3
  32. package/dist/{chunk-2XXAVTTO.js.map → chunk-C4GF7RSQ.js.map} +1 -1
  33. package/dist/{chunk-BHUHGLNS.js → chunk-CODXK5L5.js} +4 -4
  34. package/dist/{chunk-BHUHGLNS.js.map → chunk-CODXK5L5.js.map} +1 -1
  35. package/dist/{chunk-UAAAERXI.js → chunk-DPMKI26Y.js} +3 -3
  36. package/dist/{chunk-UAAAERXI.js.map → chunk-DPMKI26Y.js.map} +1 -1
  37. package/dist/{chunk-A67BHJCH.js → chunk-EJYZ3MKJ.js} +4 -4
  38. package/dist/{chunk-A67BHJCH.js.map → chunk-EJYZ3MKJ.js.map} +1 -1
  39. package/dist/{chunk-UKDFOOEG.js → chunk-ES2FXWQ4.js} +3 -3
  40. package/dist/{chunk-UKDFOOEG.js.map → chunk-ES2FXWQ4.js.map} +1 -1
  41. package/dist/{chunk-VETH6MDG.js → chunk-G2O2AARG.js} +13 -13
  42. package/dist/{chunk-VETH6MDG.js.map → chunk-G2O2AARG.js.map} +1 -1
  43. package/dist/{chunk-ZIYYMR6Y.js → chunk-G474PBUQ.js} +3 -3
  44. package/dist/{chunk-ZIYYMR6Y.js.map → chunk-G474PBUQ.js.map} +1 -1
  45. package/dist/{chunk-IDUGP4V7.js → chunk-JBPG5KQC.js} +3 -3
  46. package/dist/{chunk-IDUGP4V7.js.map → chunk-JBPG5KQC.js.map} +1 -1
  47. package/dist/{chunk-UNRZCQD4.js → chunk-K2NUT3HO.js} +6 -6
  48. package/dist/{chunk-UNRZCQD4.js.map → chunk-K2NUT3HO.js.map} +1 -1
  49. package/dist/{chunk-LUBS5DXY.js → chunk-LCULZ4ED.js} +3 -3
  50. package/dist/{chunk-LUBS5DXY.js.map → chunk-LCULZ4ED.js.map} +1 -1
  51. package/dist/{chunk-DTV7HL5R.js → chunk-LFEGIZTW.js} +2 -2
  52. package/dist/{chunk-DTV7HL5R.js.map → chunk-LFEGIZTW.js.map} +1 -1
  53. package/dist/{chunk-BATL2CWI.js → chunk-MMC24L2W.js} +30 -10
  54. package/dist/chunk-MMC24L2W.js.map +1 -0
  55. package/dist/{chunk-7KITVWXK.js → chunk-N3Y43LMZ.js} +17 -9
  56. package/dist/chunk-N3Y43LMZ.js.map +1 -0
  57. package/dist/{chunk-6IGFSUTE.js → chunk-ORUHADS6.js} +4 -3
  58. package/dist/chunk-ORUHADS6.js.map +1 -0
  59. package/dist/{chunk-JF26V3BC.js → chunk-P6KFWTGP.js} +5 -5
  60. package/dist/{chunk-JF26V3BC.js.map → chunk-P6KFWTGP.js.map} +1 -1
  61. package/dist/{chunk-JEA32KB6.js → chunk-R4G7XI7A.js} +18 -4
  62. package/dist/chunk-R4G7XI7A.js.map +1 -0
  63. package/dist/{chunk-OXE5A6H6.js → chunk-SNVOASTL.js} +3 -3
  64. package/dist/{chunk-OXE5A6H6.js.map → chunk-SNVOASTL.js.map} +1 -1
  65. package/dist/{chunk-U6ORGQHZ.js → chunk-UFS3FEBA.js} +3 -3
  66. package/dist/{chunk-U6ORGQHZ.js.map → chunk-UFS3FEBA.js.map} +1 -1
  67. package/dist/{chunk-ONWTPXVU.js → chunk-UHLBDAJR.js} +7 -7
  68. package/dist/{chunk-ONWTPXVU.js.map → chunk-UHLBDAJR.js.map} +1 -1
  69. package/dist/{chunk-AE42DHSH.js → chunk-V7VDSFPS.js} +2 -2
  70. package/dist/{chunk-AE42DHSH.js.map → chunk-V7VDSFPS.js.map} +1 -1
  71. package/dist/{chunk-XMQAV6T3.js → chunk-WHSQSVN2.js} +2 -2
  72. package/dist/{chunk-XMQAV6T3.js.map → chunk-WHSQSVN2.js.map} +1 -1
  73. package/dist/{chunk-RD6GE4HU.js → chunk-X4GO3GJZ.js} +3 -3
  74. package/dist/{chunk-RD6GE4HU.js.map → chunk-X4GO3GJZ.js.map} +1 -1
  75. package/dist/{chunk-SQBPE66C.js → chunk-XBM5ND55.js} +6 -6
  76. package/dist/{chunk-SQBPE66C.js.map → chunk-XBM5ND55.js.map} +1 -1
  77. package/dist/{chunk-ZUZ5LLZ2.js → chunk-Y4QWHIHB.js} +4 -4
  78. package/dist/{chunk-ZUZ5LLZ2.js.map → chunk-Y4QWHIHB.js.map} +1 -1
  79. package/dist/{chunk-JCATNLY3.js → chunk-YK7WJSTD.js} +3 -3
  80. package/dist/{chunk-JCATNLY3.js.map → chunk-YK7WJSTD.js.map} +1 -1
  81. package/dist/cli/index.js +136 -76
  82. package/dist/cli/index.js.map +1 -1
  83. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  84. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  85. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  86. package/dist/cli/src/commands/project.d.ts.map +1 -1
  87. package/dist/cli/src/commands/update.d.ts.map +1 -1
  88. package/dist/cli/src/helpers.d.ts +10 -0
  89. package/dist/cli/src/helpers.d.ts.map +1 -1
  90. package/dist/connectors/config.js +2 -2
  91. package/dist/connectors/index.js +9 -9
  92. package/dist/{connectors-OB3OAZTK.js → connectors-MPYCSQNG.js} +12 -12
  93. package/dist/{connectors-OB3OAZTK.js.map → connectors-MPYCSQNG.js.map} +1 -1
  94. package/dist/core/index.js +3 -3
  95. package/dist/core/runtime-assets.js +2 -2
  96. package/dist/core/src/repo-manager.d.ts +7 -0
  97. package/dist/core/src/repo-manager.d.ts.map +1 -1
  98. package/dist/core/workspace-config.js +1 -1
  99. package/dist/deploy/index.js +3 -3
  100. package/dist/{ensure-sources-Z3KKLEM6.js → ensure-sources-QFRA46DJ.js} +9 -9
  101. package/dist/{ensure-sources-Z3KKLEM6.js.map → ensure-sources-QFRA46DJ.js.map} +1 -1
  102. package/dist/factory-assets/connectors/box.js +9 -9
  103. package/dist/factory-assets/connectors/deploy.js +9 -9
  104. package/dist/factory-assets/connectors/devserver.js +9 -9
  105. package/dist/factory-assets/connectors/flow/adapter.js +9 -9
  106. package/dist/factory-assets/connectors/flow/engine.js +4 -4
  107. package/dist/factory-assets/connectors/flow/run-flow.js +10 -10
  108. package/dist/factory-assets/connectors/flow.js +9 -9
  109. package/dist/factory-assets/connectors/git.js +9 -9
  110. package/dist/factory-assets/connectors/gmail.js +9 -9
  111. package/dist/factory-assets/connectors/googledrive.js +9 -9
  112. package/dist/factory-assets/connectors/local.js +9 -9
  113. package/dist/factory-assets/connectors/mattermost.js +9 -9
  114. package/dist/factory-assets/connectors/memory.js +9 -9
  115. package/dist/factory-assets/connectors/minio.js +9 -9
  116. package/dist/factory-assets/connectors/postgres.js +9 -9
  117. package/dist/factory-assets/connectors/s3.js +9 -9
  118. package/dist/factory-assets/connectors/sharepoint.js +9 -9
  119. package/dist/factory-assets/connectors/sqlite.js +9 -9
  120. package/dist/factory-assets/connectors/static-server.js +9 -9
  121. package/dist/factory-assets/connectors/tunnel.js +9 -9
  122. package/dist/factory-assets/connectors/webdav.js +9 -9
  123. package/dist/factory-assets/connectors/xstate-store.js +9 -9
  124. package/dist/factory-assets/connectors/xstate.js +9 -9
  125. package/dist/{flows-DTADYIXH.js → flows-KCARGXRT.js} +6 -6
  126. package/dist/{flows-DTADYIXH.js.map → flows-KCARGXRT.js.map} +1 -1
  127. package/dist/{helpers-F2RFRT5D.js → helpers-PSROT7CU.js} +9 -9
  128. package/dist/{helpers-F2RFRT5D.js.map → helpers-PSROT7CU.js.map} +1 -1
  129. package/dist/library/index.js +4 -4
  130. package/dist/library/src/remote/remote-catalog-source.d.ts +11 -2
  131. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  132. package/dist/{library-publish-62RFU74A.js → library-publish-YAI7WOXC.js} +15 -15
  133. package/dist/{library-publish-62RFU74A.js.map → library-publish-YAI7WOXC.js.map} +1 -1
  134. package/dist/{open-library-NVG3CZUO.js → open-library-Z5NJU4Z5.js} +12 -12
  135. package/dist/{open-library-NVG3CZUO.js.map → open-library-Z5NJU4Z5.js.map} +1 -1
  136. package/dist/{open-registry-IYH6W6CN.js → open-registry-TYUVN5SG.js} +8 -8
  137. package/dist/{open-registry-IYH6W6CN.js.map → open-registry-TYUVN5SG.js.map} +1 -1
  138. package/dist/{paths-STQO4FYF.js → paths-HKAXUR3W.js} +6 -6
  139. package/dist/{paths-STQO4FYF.js.map → paths-HKAXUR3W.js.map} +1 -1
  140. package/dist/{plugin-store-2DTEIJTG.js → plugin-store-N6SI2TYM.js} +5 -5
  141. package/dist/{plugin-store-2DTEIJTG.js.map → plugin-store-N6SI2TYM.js.map} +1 -1
  142. package/dist/plugins/src/catalog-source.d.ts +7 -0
  143. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  144. package/dist/{project-44LM6SRV.js → project-SVS4UMGL.js} +10 -10
  145. package/dist/{project-44LM6SRV.js.map → project-SVS4UMGL.js.map} +1 -1
  146. package/dist/resolver/index.js +3 -3
  147. package/dist/runner/index.js +15 -15
  148. package/dist/sdk/asset-manager.js +6 -6
  149. package/dist/sdk/bridge.js +6 -6
  150. package/dist/sdk/core.js +3 -3
  151. package/dist/sdk/flow.js +4 -4
  152. package/dist/sdk/index.js +15 -15
  153. package/dist/sdk/resolver.js +3 -3
  154. package/dist/sdk/runner.js +15 -15
  155. package/dist/{setup-4BV5ZWOZ.js → setup-IOEZGJNC.js} +13 -13
  156. package/dist/{setup-4BV5ZWOZ.js.map → setup-IOEZGJNC.js.map} +1 -1
  157. package/dist/{skills-M7OU3WMP.js → skills-HW6I6ZZ7.js} +5 -5
  158. package/dist/{skills-M7OU3WMP.js.map → skills-HW6I6ZZ7.js.map} +1 -1
  159. package/dist/{source-HTT6CXUP.js → source-OKRJT53H.js} +13 -13
  160. package/dist/{source-HTT6CXUP.js.map → source-OKRJT53H.js.map} +1 -1
  161. package/dist/{source-manifest-publish-CPXUX3CL.js → source-manifest-publish-MILEQDRD.js} +15 -15
  162. package/dist/{source-manifest-publish-CPXUX3CL.js.map → source-manifest-publish-MILEQDRD.js.map} +1 -1
  163. package/dist/tui/index.js +15 -15
  164. package/dist/workspace-plugin/adapters/mcp.js +12 -12
  165. package/dist/workspace-plugin/adapters/omp.js +14 -14
  166. package/dist/workspace-plugin/index.js +1 -1
  167. package/package.json +1 -1
  168. package/dist/chunk-6IGFSUTE.js.map +0 -1
  169. package/dist/chunk-7KITVWXK.js.map +0 -1
  170. package/dist/chunk-BATL2CWI.js.map +0 -1
  171. package/dist/chunk-JEA32KB6.js.map +0 -1
  172. package/dist/chunk-Y5OCUOXF.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { classifyGenericErrorMessage, stripRunnerPrivateEnv } from './chunk-XBSQ4KMC.js';
2
2
  import { wrapAgentCommand, resolveAgentExec } from './chunk-YROR332M.js';
3
- import { AgentDriver } from './chunk-AE42DHSH.js';
3
+ import { AgentDriver } from './chunk-V7VDSFPS.js';
4
4
  import { spawn } from 'child_process';
5
5
  import { createInterface } from 'readline';
6
6
 
@@ -429,5 +429,5 @@ function extractCost(json) {
429
429
  }
430
430
 
431
431
  export { SubprocessCliDriver, extractCost, extractText, extractTokens };
432
- //# sourceMappingURL=chunk-2XXAVTTO.js.map
433
- //# sourceMappingURL=chunk-2XXAVTTO.js.map
432
+ //# sourceMappingURL=chunk-C4GF7RSQ.js.map
433
+ //# sourceMappingURL=chunk-C4GF7RSQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../bridge/src/drivers/_subprocess-cli.ts"],"names":[],"mappings":";;;;;;AAuCO,IAAe,mBAAA,GAAf,cAA2C,WAAA,CAAY;AAAA;AAAA,EAezC,IAAA,GAA6B,OAAA;AAAA,EAEtC,MAAA;AAAA,EAEF,IAAA,GAA4B,IAAA;AAAA,EAC5B,EAAA,GAAuB,IAAA;AAAA,EACvB,eAAyB,EAAC;AAAA,EAC1B,YAAA,GAAe,EAAA;AAAA,EACf,OAAA,GAAU,KAAA;AAAA;AAAA,EAGV,QAAA,GAAW,EAAA;AAAA,EACX,eAAA,GAAkB,KAAA;AAAA,EAClB,qBAAqC,EAAC;AAAA,EACtC,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAmC,IAAA;AAAA,EACnC,UAAA,GAA4C,IAAA;AAAA,EAE1C,UAAA;AAAA,EACA,WAAA,GAAiC,IAAA;AAAA,EAE3C,YAAY,MAAA,EAAqB;AAC/B,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,IAAa,gBAAA,GAAuC;AAClD,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAES,QAAA,GAA+B;AACtC,IAAA,OAAO,KAAK,MAAA,CAAO,KAAA;AAAA,EACrB;AAAA,EAES,aAAA,GAAmC;AAC1C,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAES,YAAY,KAAA,EAA0E;AAC7F,IAAA,IAAI,MAAM,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA;AACzD,IAAA,IAAI,MAAM,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,MAAA,CAAO,WAAW,KAAA,CAAM,QAAA;AAC/D,IAAA,IAAI,MAAM,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,MAAA,CAAO,SAAS,KAAA,CAAM,MAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA,KAAS,IAAA,IAAQ,CAAC,KAAK,IAAA,CAAK,MAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,OAAA,EAAgC;AAC3C,IAAA,IAAI,IAAA,CAAK,MAAM,MAAM,IAAI,MAAM,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,yBAAA,CAA2B,CAAA;AAC7E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,KAAK,KAAA,EAAM;AAEpC,IAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAChB,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,IAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAA,CAAK,eAAe,EAAC;AACrB,IAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,MAAM,cAAc,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,WAAA,CAAa,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,CAAA,EAAG,KAAK,SAAS,CAAA,eAAA,CAAiB,IACzD,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,SAAS,iBAAiB,CAAA,CAAa,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GACvF,EAAC;AACL,IAAA,MAAM,GAAA,GAAM,eAAe,IAAA,CAAK,UAAA;AAChC,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,OAAA,EAAS,GAAG,KAAK,SAAA,CAAU,QAAA,EAAU,IAAA,CAAK,UAAU,CAAC,CAAA;AACtE,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAE1B,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC5C,MAAA,IAAA,CAAK,WAAA,GAAc,OAAA;AACnB,MAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,cAAA,EAAgB;AAAA,QAC5B,GAAA;AAAA,QACA,GAAA,EAAK,KAAK,MAAA,CAAO,GAAA;AAAA,QACjB,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,UAAU;AAAA,OAChC,CAAA;AAGD,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,EAAK,IAAA,EAAM,kBAAkB,CAAA;AAC7D,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,OAAO,IAAA,EAAM;AAAA,QAC9C,GAAA,EAAK,KAAK,MAAA,CAAO,GAAA;AAAA,QACjB,GAAA;AAAA,QACA,KAAA,EAAO,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAM;AAAA,OACjC,CAAA;AACD,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,MAAM,WAAA,GAAc,IAAA;AAEpB,MAAA,WAAA,CAAY,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAe;AACtC,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,oBAAA,CAAqB,GAA4B,CAAA;AACrE,QAAA,IAAA,CAAK,IAAI,KAAA,CAAM,aAAA,EAAe,GAAA,EAAK,EAAE,QAAQ,CAAA;AAC7C,QAAA,IAAA,CAAK,UAAU,MAAM,CAAA;AACrB,QAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,MACxE,CAAC,CAAA;AAED,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,KAAK,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AACjD,UAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,UAAC,EAAA,CAA+B,GAAG,MAAA,EAAQ,CAAC,SAAiB,IAAA,CAAK,YAAA,CAAa,IAAI,CAAC,CAAA;AAAA,QACtF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,MAAA,CAAO,YAAY,MAAM,CAAA;AAC9B,UAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAkB;AACxC,YAAA,IAAA,CAAK,YAAA,IAAgB,KAAA;AAAA,UACvB,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,MAAM,WAAW,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AACvD,QAAC,QAAA,CAAqC,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AACjE,UAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,EAAE,MAAM,CAAA;AACjC,UAAA,IAAA,CAAK,YAAA,CAAa,KAAK,IAAI,CAAA;AAC3B,UAAA,IAAI,KAAK,YAAA,CAAa,MAAA,GAAS,EAAA,EAAI,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,QAC7D,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,WAAA,CAAY,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,EAAqB,MAAA,KAAkC;AAC7E,QAAA,IAAA,CAAK,IAAI,IAAA,CAAK,YAAA,EAAc,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC5C,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC1B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,EAC3B;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,IAAA,EAAM,KAAK,SAAS,CAAA;AACzB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA;AAAA,EAWU,WAAW,KAAA,EAAsB;AAAA,EAAC;AAAA;AAAA,EAGlC,eAAe,IAAA,EAAoB;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUpC,YAAA,CAAa,MAAqB,MAAA,EAAkD;AAC5F,IAAA,IAAI,SAAS,CAAA,IAAM,IAAA,KAAS,IAAA,IAAQ,MAAA,KAAW,MAAO,OAAO,IAAA;AAC7D,IAAA,MAAM,OAAO,IAAA,CAAK,YAAA,CAAa,MAAM,GAAG,CAAA,CAAE,KAAK,IAAI,CAAA;AACnD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,kBAAA,EAAqB,IAAA,IAAQ,MAAM,CAAA,EAAG,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAAA,MACzF,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,IAAA,IAAQ,CAAA,IAAA,EAAO,IAAA,CAAK,WAAW,CAAA,mDAAA;AAAA,KACvC;AAAA,EACF;AAAA;AAAA;AAAA,EAKU,cAAc,OAAA,EAAyB;AAC/C,IAAA,OAAO,KAAK,MAAA,CAAO,YAAA,GAAe,CAAA,EAAG,IAAA,CAAK,OAAO,YAAY;;AAAA;;AAAA,EAAc,OAAO,CAAA,CAAA,GAAK,OAAA;AAAA,EACzF;AAAA,EAEU,mBAAmB,QAAA,EAAwB;AACnD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAChB,MAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,QACvB,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,YAAY,EAAE;AAAA,OACH,CAAA;AAAA,IACxB;AACA,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,GAC3C,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,GACnC,QAAA;AACJ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,QACvB,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,YAAY,QAAQ,CAAA;AAAA,QAC7B,UAAA,EAAY;AAAA,OACQ,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEU,iBAAiB,QAAA,EAAyB;AAClD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AAC3B,IAAA,MAAM,IAAA,GAAO,YAAY,IAAA,CAAK,QAAA;AAC9B,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,YAAY,IAAI;AAAA,KACL,CAAA;AACtB,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAAA,EAClB;AAAA,EAEU,YAAA,CAAa,MAAc,KAAA,EAAsB;AACzD,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,WAAA;AAAA,MACN,IAAA;AAAA,MACA,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,MACb;AAAA,KACoB,CAAA;AAAA,EACxB;AAAA,EAEU,cAAA,CAAe,IAAA,EAAc,IAAA,EAAe,OAAA,GAAU,KAAA,EAAa;AAC3E,IAAA,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,CAAA;AACzF,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,oBAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACU,CAAA;AAAA,EACxB;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,UAAA;AAAA,MACN,WAAA,EAAa,CAAC,GAAG,IAAA,CAAK,kBAAkB;AAAA,KACpB,CAAA;AACtB,IAAA,IAAA,CAAK,qBAAqB,EAAC;AAAA,EAC7B;AAAA,EAEU,WAAW,IAAA,EAKZ;AACP,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,MAAA;AACzC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,KAAK,OAAA,IAAW,SAAA;AAAA,MACzB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAA,EAAS,KAAK,OAAA,IAAW,CAAA;AAAA,MACzB,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW;AAAC,KACzB,CAAA;AAAA,EACxB;AAAA,EAEU,SAAA,CAAU,MAAA,EAAoB,KAAA,GAAQ,KAAA,EAAa;AAC3D,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,OAAA;AAAA,MACN,OAAO,MAAA,CAAO,OAAA;AAAA,MACd,MAAA;AAAA,MACA;AAAA,KACoB,CAAA;AAAA,EACxB;AAAA,EAEU,cAAA,CAAe,IAAa,IAAA,EAAqB;AACzD,IAAA,IAAI,CAAC,EAAA,IAAM,EAAA,KAAO,IAAA,CAAK,UAAA,EAAY;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,EAAA;AAClB,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,cAAA;AAAA,MACN,eAAA,EAAiB,EAAA;AAAA,MACjB,GAAI,IAAA,GAAO,EAAE,WAAA,EAAa,IAAA,KAAS;AAAC,KAChB,CAAA;AAAA,EACxB;AAAA;AAAA,EAGU,gBAAgB,OAAA,EAA6B;AACrD,IAAA,MAAM,OAAA,GAAU,4BAA4B,OAAO,CAAA;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAM,CAAA,cAAA,EAAiB,IAAA,CAAK,WAAW,CAAA,sCAAA;AAAA,OACzC;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GACJ,QAAQ,QAAA,KAAa,MAAA,GACjB,4CAA4C,IAAA,CAAK,WAAW,MAC5D,OAAA,CAAQ,QAAA,KAAa,eACnB,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,wDAAA,CAAA,GACnB,OAAA,CAAQ,aAAa,OAAA,GACnB,wGAAA,GACA,CAAA,0CAAA,EAA6C,IAAA,CAAK,WAAW,CAAA,CAAA,CAAA;AACvE,IAAA,OAAO,EAAE,SAAS,QAAA,EAAU,OAAA,CAAQ,UAAU,SAAA,EAAW,OAAA,CAAQ,WAAW,IAAA,EAAK;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBU,OAAA,CAAQ,SAAA,GAAsB,EAAC,EAA2B;AAClE,IAAA,MAAM,MAA8B,EAAC;AACrC,IAAA,MAAM,QAAA,GAAW,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ,UAAA,EAAY,mBAAA,EAAqB,GAAG,SAAS,CAAA;AACvF,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACzB,MAAA,IAAI,CAAA,KAAM,MAAA,EAAW,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA;AAAA,IAClC;AACA,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtD,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC/B,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,CAAA,EAAG,IAAA,CAAK,SAAS,UAAU,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC9E,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,MACb;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AAC1B,MAAA,GAAA,CAAI,eAAA,GAAkB,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,qCAAA,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,GAAA,EAAK,MAAA,CAAO,OAAO,GAAA,EAAK,IAAA,CAAK,OAAO,GAAG,CAAA;AACvD,IAAA,OAAO,sBAAsB,GAAG,CAAA;AAAA,EAClC;AAAA;AAAA,EAIQ,aAAa,IAAA,EAAoB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,sBAAA,EAAwB,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,kBAAA,EAAoB,EAAE,OAAO,MAAA,CAAO,GAAG,GAAG,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,MAAA,CAAO,MAAqB,MAAA,EAAqC;AACvE,IAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,IAAA,KAAS,UAAA,KAAe,IAAA,KAAS,CAAA,IAAK,SAAS,IAAA,CAAA,EAAO;AAC7D,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,cAAA,CAAe,KAAK,YAAY,CAAA;AAAA,MACvC,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,sBAAA,EAAwB,EAAE,OAAO,MAAA,CAAO,GAAG,GAAG,CAAA;AAAA,MAC9D;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA;AAC9C,IAAA,IAAI,OAAA,IAAW,CAAC,IAAA,CAAK,SAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,UAAU,OAAO,CAAA;AACtB,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAC,CAAA;AAChF,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW,IAAA,CAAK,WAAW,EAAE,OAAA,EAAS,kBAAkB,CAAA;AAAA,SAC7D;AACH,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,IACxB;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,MAAM,UAAU,IAAA,CAAK,WAAA;AACrB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,OAAA,IAAU;AAAA,EACZ;AAAA,EAEQ,aAAa,GAAA,EAAkB;AACrC,IAAA,MAAM,SAAS,IAAA,CAAK,UAAA;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,MAAA,GAAS,GAAG,CAAA;AAAA,EACd;AAAA,EAEQ,OAAA,GAAgB;AACtB,IAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AACf,IAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEQ,qBAAqB,GAAA,EAAwC;AACnE,IAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,kBAAA,CAAA;AAAA,QAC3B,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAM,KAAK,WAAA;AAAY,OACzB;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,0BAAA,EAA6B,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,QACrD,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAM,CAAA,+BAAA,EAAkC,IAAA,CAAK,UAAU,CAAA,QAAA;AAAA,OACzD;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,CAAA,6CAAA,EAAgD,IAAA,CAAK,WAAW,CAAA,YAAA;AAAA,KACxE;AAAA,EACF;AACF;AAOA,SAAS,YAAY,IAAA,EAA4B;AAC/C,EAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAE;AAChE;AAGO,SAAS,YAAY,IAAA,EAAmB;AAC7C,EAAA,IAAI,OAAO,IAAA,EAAM,IAAA,KAAS,QAAA,SAAiB,IAAA,CAAK,IAAA;AAChD,EAAA,IAAI,OAAO,IAAA,EAAM,KAAA,KAAU,QAAA,SAAiB,IAAA,CAAK,KAAA;AACjD,EAAA,IAAI,OAAO,IAAA,EAAM,OAAA,KAAY,QAAA,SAAiB,IAAA,CAAK,OAAA;AACnD,EAAA,IAAI,OAAO,IAAA,EAAM,QAAA,KAAa,QAAA,SAAiB,IAAA,CAAK,QAAA;AACpD,EAAA,MAAM,MAAM,IAAA,EAAM,OAAA;AAClB,EAAA,IAAI,OAAO,GAAA,EAAK,OAAA,KAAY,QAAA,SAAiB,GAAA,CAAI,OAAA;AACjD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAI,OAAA,CACR,MAAA;AAAA,MACC,CAAC,CAAA,KAAA,CAAY,CAAA,EAAG,IAAA,KAAS,MAAA,IAAU,GAAG,IAAA,KAAS,MAAA,KAAc,OAAO,CAAA,EAAG,IAAA,KAAS;AAAA,KAClF,CACC,IAAI,CAAC,CAAA,KAAW,EAAE,IAAI,CAAA,CACtB,KAAK,EAAE,CAAA;AAAA,EACZ;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAK,KAAA,CACT,MAAA,CAAO,CAAC,CAAA,KAAW,OAAO,CAAA,EAAG,IAAA,KAAS,QAAQ,CAAA,CAC9C,IAAI,CAAC,CAAA,KAAW,EAAE,IAAI,CAAA,CACtB,KAAK,EAAE,CAAA;AAAA,EACZ;AAEA,EAAA,IAAI,OAAO,IAAA,EAAM,IAAA,EAAM,SAAS,QAAA,EAAU,OAAO,KAAK,IAAA,CAAK,IAAA;AAC3D,EAAA,OAAO,EAAA;AACT;AAGO,SAAS,cAAc,IAAA,EAA8B;AAC1D,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,IAAS,IAAA,EAAM,OAAO,KAAA,IAAS,IAAA,EAAM,KAAA,IAAS,IAAA,EAAM,MAAA,IAAU,IAAA;AAC9E,EAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,UAAU,OAAO,IAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,EAAE,YAAA,IAAgB,CAAA,CAAE,eAAe,CAAA,CAAE,aAAA,IAAiB,CAAA,CAAE,gBAAA,IAAoB,CAAA,CAAE,KAAA;AAC5F,EAAA,MAAM,MAAA,GACJ,EAAE,aAAA,IAAiB,CAAA,CAAE,gBAAgB,CAAA,CAAE,iBAAA,IAAqB,CAAA,CAAE,oBAAA,IAAwB,CAAA,CAAE,MAAA;AAC1F,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,mBAAA,IAAuB,CAAA,CAAE,mBAAmB,CAAA,CAAE,uBAAA;AAClE,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW,OAAO,IAAA;AACxD,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,MAAA,CAAO,WAAA,GAAc,KAAA;AACpD,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,MAAA,CAAO,YAAA,GAAe,MAAA;AACtD,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,EAAU,MAAA,CAAO,eAAA,GAAkB,SAAA;AAC5D,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,YAAY,IAAA,EAA+B;AACzD,EAAA,MAAM,CAAA,GACJ,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,OAAA,IAAW,IAAA,EAAM,cAAA,IAAkB,IAAA,EAAM,KAAA,EAAO,IAAA,IAAQ,IAAA,EAAM,KAAA,EAAO,IAAA;AAC3F,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,MAAA;AACrC","file":"chunk-2XXAVTTO.js","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport type { EventEmitter } from \"node:events\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport { resolveAgentExec, wrapAgentCommand } from \"../agent-exec.js\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport { stripRunnerPrivateEnv } from \"../runner-private-env.js\";\nimport {\n type AgentConfig,\n AgentDriver,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n} from \"../types.js\";\n\n/**\n * Shared base for one-shot **subprocess CLI** agent harnesses (Gemini, Qwen,\n * OpenCode, Goose, Continue).\n *\n * These harnesses are neither persistent JSON-RPC subprocesses (`omp`) nor\n * in-process SDKs (`claude-sdk`, `codex`). In headless mode each is invoked\n * **once per turn** — `prompt()` spawns the CLI fresh, a `readline` loop maps\n * newline-delimited JSON on stdout to the unified {@link AgentEvent} stream, and\n * **process exit marks the end of the turn**. Multi-turn continuity comes from\n * capturing a harness session id (emitted as `session_info`) and replaying it\n * via a resume flag on the next spawn.\n *\n * Subclasses implement {@link buildArgs}, {@link buildEnv}, and either\n * {@link handleJson} (streaming JSONL, the default) or {@link handleBuffered}\n * (`mode = \"buffered\"`, for CLIs that print a single JSON blob at the end).\n *\n * **Terminal-sequence invariant.** Subclasses MUST NOT emit `agent_end`. The\n * base emits exactly one `result` (synthesizing a success result when the\n * stream produced none) followed by a single `agent_end` on clean exit, or an\n * `error` + `agent_end` on crash. This keeps the turn-completion contract\n * (`prompt()` resolves after `agent_end`) identical across every CLI driver.\n *\n * @docLink packages/bridge/drivers#subprocess-cli\n */\nexport abstract class SubprocessCliDriver extends AgentDriver {\n /** Per-driver logger, constructed once by the subclass. */\n protected abstract readonly log: Logger;\n /** Default binary name spawned in production (e.g. `\"gemini\"`). */\n protected abstract readonly defaultBin: string;\n /** Human product name used in error messages / hints (e.g. `\"Gemini CLI\"`). */\n protected abstract readonly productName: string;\n /**\n * Test-seam env prefix. `<PREFIX>_BRIDGE_BIN` overrides the spawn binary and\n * `<PREFIX>_BRIDGE_PREARGS` (space-delimited) supplies leading argv — used by\n * the fake-CLI harness to redirect spawn without monkey-patching\n * `child_process`. Both are ignored in production.\n */\n protected abstract readonly envPrefix: string;\n /** `\"jsonl\"` streams events line-by-line; `\"buffered\"` parses all stdout once on exit. */\n protected readonly mode: \"jsonl\" | \"buffered\" = \"jsonl\";\n\n protected config: AgentConfig;\n\n private proc: ChildProcess | null = null;\n private rl: Interface | null = null;\n private stderrBuffer: string[] = [];\n private stdoutBuffer = \"\";\n private started = false;\n\n // ── Per-turn state ──────────────────────────────────────────────────────\n private prevText = \"\";\n private activeAssistant = false;\n private pendingToolResults: AgentMessage[] = [];\n private sawResult = false;\n private aborting = false;\n private turnResolve: (() => void) | null = null;\n private turnReject: ((err: Error) => void) | null = null;\n\n protected _sessionId?: string;\n protected _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n this.config = config;\n }\n\n override get runtimeSessionId(): string | undefined {\n return this._sessionId;\n }\n\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n override getTokenUsage(): TokenUsage | null {\n return this._lastTokens;\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n if (patch.model !== undefined) this.config.model = patch.model;\n if (patch.thinking !== undefined) this.config.thinking = patch.thinking;\n if (patch.effort !== undefined) this.config.effort = patch.effort;\n }\n\n /**\n * No-op for one-shot CLIs — there is no long-lived process to spawn until the\n * first prompt. Kept so the runner's `start()` → `prompt()` ordering works\n * uniformly; binary-presence failures surface as a `config` error on the\n * first spawn (see {@link classifyProcessError}).\n */\n async start(): Promise<void> {\n this.started = true;\n }\n\n get isRunning(): boolean {\n return this.proc !== null && !this.proc.killed;\n }\n\n /**\n * Sends a user message to the CLI and resolves after the turn completes\n * (`agent_end`). Spawns a fresh child per call; rejects if the child exits\n * non-zero before emitting a result, so the caller never hangs.\n */\n async prompt(message: string): Promise<void> {\n if (this.proc) throw new Error(`${this.productName} turn already in progress`);\n if (!this.started) await this.start();\n\n this.prevText = \"\";\n this.activeAssistant = false;\n this.pendingToolResults = [];\n this.sawResult = false;\n this.aborting = false;\n this.stderrBuffer = [];\n this.stdoutBuffer = \"\";\n this._lastTokens = null;\n\n const composed = this.composePrompt(message);\n const overrideBin = process.env[`${this.envPrefix}_BRIDGE_BIN`];\n const preArgs = process.env[`${this.envPrefix}_BRIDGE_PREARGS`]\n ? (process.env[`${this.envPrefix}_BRIDGE_PREARGS`] as string).split(/\\s+/).filter(Boolean)\n : [];\n const bin = overrideBin || this.defaultBin;\n const args = [...preArgs, ...this.buildArgs(composed, this._sessionId)];\n const env = this.buildEnv();\n\n return new Promise<void>((resolve, reject) => {\n this.turnResolve = resolve;\n this.turnReject = reject;\n this.log.info(\"spawning CLI\", {\n bin,\n cwd: this.config.cwd,\n resume: Boolean(this._sessionId),\n });\n\n // With the uid split on, the CLI runs as the agent uid through the launch shim.\n const target = wrapAgentCommand(bin, args, resolveAgentExec());\n const proc = spawn(target.command, target.args, {\n cwd: this.config.cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as ChildProcess;\n this.proc = proc;\n const procEmitter = proc as unknown as EventEmitter;\n\n procEmitter.on(\"error\", (err: Error) => {\n const detail = this.classifyProcessError(err as NodeJS.ErrnoException);\n this.log.error(\"spawn error\", err, { detail });\n this.pushError(detail);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleReject(Object.assign(new Error(detail.message), { detail }));\n });\n\n if (proc.stdout) {\n if (this.mode === \"jsonl\") {\n const rl = createInterface({ input: proc.stdout });\n this.rl = rl;\n (rl as unknown as EventEmitter).on(\"line\", (line: string) => this.onStdoutLine(line));\n } else {\n proc.stdout.setEncoding(\"utf8\");\n proc.stdout.on(\"data\", (chunk: string) => {\n this.stdoutBuffer += chunk;\n });\n }\n }\n\n if (proc.stderr) {\n const stderrRl = createInterface({ input: proc.stderr });\n (stderrRl as unknown as EventEmitter).on(\"line\", (line: string) => {\n this.log.debug(\"stderr\", { line });\n this.stderrBuffer.push(line);\n if (this.stderrBuffer.length > 20) this.stderrBuffer.shift();\n });\n }\n\n procEmitter.on(\"exit\", (code: number | null, signal: NodeJS.Signals | null) => {\n this.log.info(\"CLI exited\", { code, signal });\n this.onExit(code, signal);\n });\n });\n }\n\n /** Out-of-band abort: terminates the current child. Driver stays usable for the next prompt. */\n async abort(): Promise<void> {\n this.aborting = true;\n this.proc?.kill(\"SIGTERM\");\n }\n\n kill(): void {\n this.aborting = true;\n this.proc?.kill(\"SIGTERM\");\n this.cleanup();\n }\n\n async resetSession(): Promise<void> {\n this.kill();\n this._sessionId = undefined;\n this._lastTokens = null;\n }\n\n // ── Subclass hooks ────────────────────────────────────────────────────────\n\n /** Build the CLI argv (binary excluded) for one turn. `resumeId` is the captured session id, if any. */\n protected abstract buildArgs(message: string, resumeId: string | undefined): string[];\n\n /** Build the child-process env (explicit allowlist — see {@link baseEnv}). */\n protected abstract buildEnv(): Record<string, string>;\n\n /** Map one parsed stdout JSON object to events via the `push*` helpers. Streaming (`jsonl`) mode only. */\n protected handleJson(_json: unknown): void {}\n\n /** Parse the full stdout blob once on clean exit. `buffered` mode only. */\n protected handleBuffered(_raw: string): void {}\n\n /** Install-failure hint surfaced when the binary is missing. */\n protected abstract installHint(): string;\n\n /**\n * Classify a non-zero exit into an {@link AgentError}, or `null` to treat the\n * exit as success (e.g. a turn-limit code where a result was already\n * emitted). Default: code `0` / clean signal → success; otherwise `process`.\n */\n protected classifyExit(code: number | null, signal: NodeJS.Signals | null): AgentError | null {\n if (code === 0 || (code === null && signal === null)) return null;\n const tail = this.stderrBuffer.slice(-10).join(\"\\n\");\n return {\n message: `${this.productName} exited with code ${code ?? \"null\"}${tail ? `: ${tail}` : \"\"}`,\n category: \"process\",\n retryable: true,\n hint: tail || `The ${this.productName} process exited unexpectedly. Try the prompt again.`,\n };\n }\n\n // ── Protected emit helpers (used by handleJson / handleBuffered) ────────────\n\n /** Prepend `systemPrompt` to the user message — uniform across CLIs lacking a reliable system flag. */\n protected composePrompt(message: string): string {\n return this.config.systemPrompt ? `${this.config.systemPrompt}\\n\\n---\\n\\n${message}` : message;\n }\n\n protected pushAssistantDelta(fullText: string): void {\n if (!this.activeAssistant) {\n this.activeAssistant = true;\n this.prevText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: asstMessage(\"\"),\n } satisfies AgentEvent);\n }\n const delta = fullText.startsWith(this.prevText)\n ? fullText.slice(this.prevText.length)\n : fullText;\n this.prevText = fullText;\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: asstMessage(fullText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n }\n\n protected pushAssistantEnd(fullText?: string): void {\n if (!this.activeAssistant) return;\n const text = fullText ?? this.prevText;\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: asstMessage(text),\n } satisfies AgentEvent);\n this.activeAssistant = false;\n this.prevText = \"\";\n }\n\n protected pushToolCall(name: string, input: unknown): void {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name,\n tool: { name },\n input,\n } satisfies AgentEvent);\n }\n\n protected pushToolResult(name: string, data: unknown, isError = false): void {\n this.pendingToolResults.push({ role: \"tool\", toolName: name, content: \"\", data, isError });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: name,\n } satisfies AgentEvent);\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n protected pushResult(opts: {\n tokens?: TokenUsage | null;\n costUsd?: number;\n summary?: string;\n subtype?: string;\n }): void {\n this.pushAssistantEnd();\n this.flushToolResults();\n if (opts.tokens) this._lastTokens = opts.tokens;\n this.sawResult = true;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: opts.subtype ?? \"success\",\n summary: opts.summary,\n costUsd: opts.costUsd ?? 0,\n ...(opts.tokens ? { tokens: opts.tokens } : {}),\n } satisfies AgentEvent);\n }\n\n protected pushError(detail: AgentError, fatal = false): void {\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n fatal,\n } satisfies AgentEvent);\n }\n\n protected captureSession(id?: string, file?: string): void {\n if (!id || id === this._sessionId) return;\n this._sessionId = id;\n this.emit(\"agent-event\", {\n type: \"session_info\",\n driverSessionId: id,\n ...(file ? { sessionFile: file } : {}),\n } satisfies AgentEvent);\n }\n\n /** Shared keyword classification + per-driver hint copy (mirrors omp/codex). */\n protected classifyMessage(message: string): AgentError {\n const generic = classifyGenericErrorMessage(message);\n if (!generic) {\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: `An unexpected ${this.productName} error occurred. Try the prompt again.`,\n };\n }\n const hint =\n generic.category === \"auth\"\n ? `Check the API key / login configured for ${this.productName}.`\n : generic.category === \"rate_limit\"\n ? `${this.productName} hit a provider rate limit. Wait a moment and try again.`\n : generic.category === \"model\"\n ? \"The selected model is unavailable or the context is too long. Change the model or start a new session.\"\n : `A network error occurred while talking to ${this.productName}.`;\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n\n // ── Env allowlist ──────────────────────────────────────────────────────────\n\n /**\n * Explicit env whitelist forwarded to the child. Omits anything provisioned\n * by `provision_secrets` so user credentials stay out of the subprocess\n * environment. Always passes through the driver's test-seam vars and\n * `FAKE_CLI_*`.\n *\n * `config.env` is merged **over** the whitelist, not in place of it. It used\n * to replace it wholesale, which meant any caller that set a single variable\n * silently dropped `PATH` and `HOME` and the spawn failed with ENOENT —\n * unusable as the delivery channel for registry-derived endpoint variables\n * (plan §2.3, \"Delivery rule\"). Widening keeps both: the caller's variables\n * win per key, the process still has a `PATH`.\n */\n protected baseEnv(extraKeys: string[] = []): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\"PATH\", \"HOME\", \"USER\", \"HOSTNAME\", \"SKAILE_SESSION_ID\", ...extraKeys];\n for (const key of explicit) {\n const v = process.env[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(process.env)) {\n if (typeof value !== \"string\") continue;\n if (key.startsWith(`${this.envPrefix}_BRIDGE_`) || key.startsWith(\"FAKE_CLI_\")) {\n out[key] = value;\n }\n }\n if (this.config.sshKeyPath) {\n out.GIT_SSH_COMMAND = `ssh -i \"${this.config.sshKeyPath}\" -o StrictHostKeyChecking=accept-new`;\n }\n if (this.config.env) Object.assign(out, this.config.env);\n return stripRunnerPrivateEnv(out);\n }\n\n // ── Internals ────────────────────────────────────────────────────────────\n\n private onStdoutLine(line: string): void {\n if (!line.trim()) return;\n let json: unknown;\n try {\n json = JSON.parse(line);\n } catch {\n this.log.debug(\"non-JSON stdout line\", { line });\n return;\n }\n try {\n this.handleJson(json);\n } catch (err) {\n this.log.warn(\"handleJson threw\", { error: String(err) });\n }\n }\n\n private onExit(code: number | null, signal: NodeJS.Signals | null): void {\n this.cleanup();\n\n if (this.aborting) {\n this.pushAssistantEnd();\n this.flushToolResults();\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleResolve();\n return;\n }\n\n if (this.mode === \"buffered\" && (code === 0 || code === null)) {\n try {\n this.handleBuffered(this.stdoutBuffer);\n } catch (err) {\n this.log.warn(\"handleBuffered threw\", { error: String(err) });\n }\n }\n\n const exitErr = this.classifyExit(code, signal);\n if (exitErr && !this.sawResult) {\n this.pushAssistantEnd();\n this.flushToolResults();\n this.pushError(exitErr);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleReject(Object.assign(new Error(exitErr.message), { detail: exitErr }));\n return;\n }\n\n // Clean exit (or non-zero exit after a result already streamed): close any\n // open assistant message, synthesize a success result if none arrived, end.\n if (!this.sawResult) this.pushResult({ summary: \"Task completed\" });\n else {\n this.pushAssistantEnd();\n this.flushToolResults();\n }\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleResolve();\n }\n\n private settleResolve(): void {\n const resolve = this.turnResolve;\n this.turnResolve = null;\n this.turnReject = null;\n resolve?.();\n }\n\n private settleReject(err: Error): void {\n const reject = this.turnReject;\n this.turnResolve = null;\n this.turnReject = null;\n reject?.(err);\n }\n\n private cleanup(): void {\n this.rl?.close();\n this.rl = null;\n this.proc = null;\n }\n\n private classifyProcessError(err: NodeJS.ErrnoException): AgentError {\n if (err.code === \"ENOENT\") {\n return {\n message: `${this.defaultBin} command not found`,\n category: \"config\",\n retryable: false,\n hint: this.installHint(),\n };\n }\n if (err.code === \"EACCES\") {\n return {\n message: `Permission denied running ${this.defaultBin}`,\n category: \"config\",\n retryable: false,\n hint: `Check file permissions for the ${this.defaultBin} binary.`,\n };\n }\n return {\n message: err.message,\n category: \"process\",\n retryable: true,\n hint: `An unexpected process error occurred running ${this.productName}. Try again.`,\n };\n }\n}\n\n// ───────────────────────────────────────────────────────────────────────────\n// Tolerant JSON extractors — shared because the upstream stream-json schemas\n// are not fully pinned; read the common field-name variants defensively.\n// ───────────────────────────────────────────────────────────────────────────\n\nfunction asstMessage(text: string): AgentMessage {\n return { role: \"assistant\", content: [{ type: \"text\", text }] };\n}\n\n/** Pull assistant text out of a CLI event, trying the common field names. */\nexport function extractText(json: any): string {\n if (typeof json?.text === \"string\") return json.text;\n if (typeof json?.delta === \"string\") return json.delta;\n if (typeof json?.content === \"string\") return json.content;\n if (typeof json?.response === \"string\") return json.response;\n const msg = json?.message;\n if (typeof msg?.content === \"string\") return msg.content;\n if (Array.isArray(msg?.content)) {\n return msg.content\n .filter(\n (b: any) => (b?.type === \"text\" || b?.type === undefined) && typeof b?.text === \"string\",\n )\n .map((b: any) => b.text)\n .join(\"\");\n }\n if (Array.isArray(json?.parts)) {\n return json.parts\n .filter((p: any) => typeof p?.text === \"string\")\n .map((p: any) => p.text)\n .join(\"\");\n }\n // OpenCode (`run --format json`) nests the payload under `part`.\n if (typeof json?.part?.text === \"string\") return json.part.text;\n return \"\";\n}\n\n/** Map a CLI usage/stats object onto {@link TokenUsage}, trying common field names. */\nexport function extractTokens(json: any): TokenUsage | null {\n const u = json?.usage ?? json?.stats?.usage ?? json?.stats ?? json?.tokens ?? json;\n if (!u || typeof u !== \"object\") return null;\n const input = u.input_tokens ?? u.inputTokens ?? u.prompt_tokens ?? u.promptTokenCount ?? u.input;\n const output =\n u.output_tokens ?? u.outputTokens ?? u.completion_tokens ?? u.candidatesTokenCount ?? u.output;\n const cacheRead = u.cached_input_tokens ?? u.cacheReadTokens ?? u.cachedContentTokenCount;\n if (input === undefined && output === undefined) return null;\n const tokens: TokenUsage = {};\n if (typeof input === \"number\") tokens.inputTokens = input;\n if (typeof output === \"number\") tokens.outputTokens = output;\n if (typeof cacheRead === \"number\") tokens.cacheReadTokens = cacheRead;\n return tokens;\n}\n\n/** Pull a per-turn USD cost from a CLI result object, or `undefined`. */\nexport function extractCost(json: any): number | undefined {\n const c =\n json?.cost ?? json?.costUsd ?? json?.total_cost_usd ?? json?.stats?.cost ?? json?.usage?.cost;\n return typeof c === \"number\" ? c : undefined;\n}\n"]}
1
+ {"version":3,"sources":["../bridge/src/drivers/_subprocess-cli.ts"],"names":[],"mappings":"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","file":"chunk-C4GF7RSQ.js","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport type { EventEmitter } from \"node:events\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport { resolveAgentExec, wrapAgentCommand } from \"../agent-exec.js\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport { stripRunnerPrivateEnv } from \"../runner-private-env.js\";\nimport {\n type AgentConfig,\n AgentDriver,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n} from \"../types.js\";\n\n/**\n * Shared base for one-shot **subprocess CLI** agent harnesses (Gemini, Qwen,\n * OpenCode, Goose, Continue).\n *\n * These harnesses are neither persistent JSON-RPC subprocesses (`omp`) nor\n * in-process SDKs (`claude-sdk`, `codex`). In headless mode each is invoked\n * **once per turn** — `prompt()` spawns the CLI fresh, a `readline` loop maps\n * newline-delimited JSON on stdout to the unified {@link AgentEvent} stream, and\n * **process exit marks the end of the turn**. Multi-turn continuity comes from\n * capturing a harness session id (emitted as `session_info`) and replaying it\n * via a resume flag on the next spawn.\n *\n * Subclasses implement {@link buildArgs}, {@link buildEnv}, and either\n * {@link handleJson} (streaming JSONL, the default) or {@link handleBuffered}\n * (`mode = \"buffered\"`, for CLIs that print a single JSON blob at the end).\n *\n * **Terminal-sequence invariant.** Subclasses MUST NOT emit `agent_end`. The\n * base emits exactly one `result` (synthesizing a success result when the\n * stream produced none) followed by a single `agent_end` on clean exit, or an\n * `error` + `agent_end` on crash. This keeps the turn-completion contract\n * (`prompt()` resolves after `agent_end`) identical across every CLI driver.\n *\n * @docLink packages/bridge/drivers#subprocess-cli\n */\nexport abstract class SubprocessCliDriver extends AgentDriver {\n /** Per-driver logger, constructed once by the subclass. */\n protected abstract readonly log: Logger;\n /** Default binary name spawned in production (e.g. `\"gemini\"`). */\n protected abstract readonly defaultBin: string;\n /** Human product name used in error messages / hints (e.g. `\"Gemini CLI\"`). */\n protected abstract readonly productName: string;\n /**\n * Test-seam env prefix. `<PREFIX>_BRIDGE_BIN` overrides the spawn binary and\n * `<PREFIX>_BRIDGE_PREARGS` (space-delimited) supplies leading argv — used by\n * the fake-CLI harness to redirect spawn without monkey-patching\n * `child_process`. Both are ignored in production.\n */\n protected abstract readonly envPrefix: string;\n /** `\"jsonl\"` streams events line-by-line; `\"buffered\"` parses all stdout once on exit. */\n protected readonly mode: \"jsonl\" | \"buffered\" = \"jsonl\";\n\n protected config: AgentConfig;\n\n private proc: ChildProcess | null = null;\n private rl: Interface | null = null;\n private stderrBuffer: string[] = [];\n private stdoutBuffer = \"\";\n private started = false;\n\n // ── Per-turn state ──────────────────────────────────────────────────────\n private prevText = \"\";\n private activeAssistant = false;\n private pendingToolResults: AgentMessage[] = [];\n private sawResult = false;\n private aborting = false;\n private turnResolve: (() => void) | null = null;\n private turnReject: ((err: Error) => void) | null = null;\n\n protected _sessionId?: string;\n protected _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n this.config = config;\n }\n\n override get runtimeSessionId(): string | undefined {\n return this._sessionId;\n }\n\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n override getTokenUsage(): TokenUsage | null {\n return this._lastTokens;\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n if (patch.model !== undefined) this.config.model = patch.model;\n if (patch.thinking !== undefined) this.config.thinking = patch.thinking;\n if (patch.effort !== undefined) this.config.effort = patch.effort;\n }\n\n /**\n * No-op for one-shot CLIs — there is no long-lived process to spawn until the\n * first prompt. Kept so the runner's `start()` → `prompt()` ordering works\n * uniformly; binary-presence failures surface as a `config` error on the\n * first spawn (see {@link classifyProcessError}).\n */\n async start(): Promise<void> {\n this.started = true;\n }\n\n get isRunning(): boolean {\n return this.proc !== null && !this.proc.killed;\n }\n\n /**\n * Sends a user message to the CLI and resolves after the turn completes\n * (`agent_end`). Spawns a fresh child per call; rejects if the child exits\n * non-zero before emitting a result, so the caller never hangs.\n */\n async prompt(message: string): Promise<void> {\n if (this.proc) throw new Error(`${this.productName} turn already in progress`);\n if (!this.started) await this.start();\n\n this.prevText = \"\";\n this.activeAssistant = false;\n this.pendingToolResults = [];\n this.sawResult = false;\n this.aborting = false;\n this.stderrBuffer = [];\n this.stdoutBuffer = \"\";\n this._lastTokens = null;\n\n const composed = this.composePrompt(message);\n const overrideBin = process.env[`${this.envPrefix}_BRIDGE_BIN`];\n const preArgs = process.env[`${this.envPrefix}_BRIDGE_PREARGS`]\n ? (process.env[`${this.envPrefix}_BRIDGE_PREARGS`] as string).split(/\\s+/).filter(Boolean)\n : [];\n const bin = overrideBin || this.defaultBin;\n const args = [...preArgs, ...this.buildArgs(composed, this._sessionId)];\n const env = this.buildEnv();\n\n return new Promise<void>((resolve, reject) => {\n this.turnResolve = resolve;\n this.turnReject = reject;\n this.log.info(\"spawning CLI\", {\n bin,\n cwd: this.config.cwd,\n resume: Boolean(this._sessionId),\n });\n\n // With the uid split on, the CLI runs as the agent uid through the launch shim.\n const target = wrapAgentCommand(bin, args, resolveAgentExec());\n const proc = spawn(target.command, target.args, {\n cwd: this.config.cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as ChildProcess;\n this.proc = proc;\n const procEmitter = proc as unknown as EventEmitter;\n\n procEmitter.on(\"error\", (err: Error) => {\n const detail = this.classifyProcessError(err as NodeJS.ErrnoException);\n this.log.error(\"spawn error\", err, { detail });\n this.pushError(detail);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleReject(Object.assign(new Error(detail.message), { detail }));\n });\n\n if (proc.stdout) {\n if (this.mode === \"jsonl\") {\n const rl = createInterface({ input: proc.stdout });\n this.rl = rl;\n (rl as unknown as EventEmitter).on(\"line\", (line: string) => this.onStdoutLine(line));\n } else {\n proc.stdout.setEncoding(\"utf8\");\n proc.stdout.on(\"data\", (chunk: string) => {\n this.stdoutBuffer += chunk;\n });\n }\n }\n\n if (proc.stderr) {\n const stderrRl = createInterface({ input: proc.stderr });\n (stderrRl as unknown as EventEmitter).on(\"line\", (line: string) => {\n this.log.debug(\"stderr\", { line });\n this.stderrBuffer.push(line);\n if (this.stderrBuffer.length > 20) this.stderrBuffer.shift();\n });\n }\n\n procEmitter.on(\"exit\", (code: number | null, signal: NodeJS.Signals | null) => {\n this.log.info(\"CLI exited\", { code, signal });\n this.onExit(code, signal);\n });\n });\n }\n\n /** Out-of-band abort: terminates the current child. Driver stays usable for the next prompt. */\n async abort(): Promise<void> {\n this.aborting = true;\n this.proc?.kill(\"SIGTERM\");\n }\n\n kill(): void {\n this.aborting = true;\n this.proc?.kill(\"SIGTERM\");\n this.cleanup();\n }\n\n async resetSession(): Promise<void> {\n this.kill();\n this._sessionId = undefined;\n this._lastTokens = null;\n }\n\n // ── Subclass hooks ────────────────────────────────────────────────────────\n\n /** Build the CLI argv (binary excluded) for one turn. `resumeId` is the captured session id, if any. */\n protected abstract buildArgs(message: string, resumeId: string | undefined): string[];\n\n /** Build the child-process env (explicit allowlist — see {@link baseEnv}). */\n protected abstract buildEnv(): Record<string, string>;\n\n /** Map one parsed stdout JSON object to events via the `push*` helpers. Streaming (`jsonl`) mode only. */\n protected handleJson(_json: unknown): void {}\n\n /** Parse the full stdout blob once on clean exit. `buffered` mode only. */\n protected handleBuffered(_raw: string): void {}\n\n /** Install-failure hint surfaced when the binary is missing. */\n protected abstract installHint(): string;\n\n /**\n * Classify a non-zero exit into an {@link AgentError}, or `null` to treat the\n * exit as success (e.g. a turn-limit code where a result was already\n * emitted). Default: code `0` / clean signal → success; otherwise `process`.\n */\n protected classifyExit(code: number | null, signal: NodeJS.Signals | null): AgentError | null {\n if (code === 0 || (code === null && signal === null)) return null;\n const tail = this.stderrBuffer.slice(-10).join(\"\\n\");\n return {\n message: `${this.productName} exited with code ${code ?? \"null\"}${tail ? `: ${tail}` : \"\"}`,\n category: \"process\",\n retryable: true,\n hint: tail || `The ${this.productName} process exited unexpectedly. Try the prompt again.`,\n };\n }\n\n // ── Protected emit helpers (used by handleJson / handleBuffered) ────────────\n\n /** Prepend `systemPrompt` to the user message — uniform across CLIs lacking a reliable system flag. */\n protected composePrompt(message: string): string {\n return this.config.systemPrompt ? `${this.config.systemPrompt}\\n\\n---\\n\\n${message}` : message;\n }\n\n protected pushAssistantDelta(fullText: string): void {\n if (!this.activeAssistant) {\n this.activeAssistant = true;\n this.prevText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: asstMessage(\"\"),\n } satisfies AgentEvent);\n }\n const delta = fullText.startsWith(this.prevText)\n ? fullText.slice(this.prevText.length)\n : fullText;\n this.prevText = fullText;\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: asstMessage(fullText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n }\n\n protected pushAssistantEnd(fullText?: string): void {\n if (!this.activeAssistant) return;\n const text = fullText ?? this.prevText;\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: asstMessage(text),\n } satisfies AgentEvent);\n this.activeAssistant = false;\n this.prevText = \"\";\n }\n\n protected pushToolCall(name: string, input: unknown): void {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name,\n tool: { name },\n input,\n } satisfies AgentEvent);\n }\n\n protected pushToolResult(name: string, data: unknown, isError = false): void {\n this.pendingToolResults.push({ role: \"tool\", toolName: name, content: \"\", data, isError });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: name,\n } satisfies AgentEvent);\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n protected pushResult(opts: {\n tokens?: TokenUsage | null;\n costUsd?: number;\n summary?: string;\n subtype?: string;\n }): void {\n this.pushAssistantEnd();\n this.flushToolResults();\n if (opts.tokens) this._lastTokens = opts.tokens;\n this.sawResult = true;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: opts.subtype ?? \"success\",\n summary: opts.summary,\n costUsd: opts.costUsd ?? 0,\n ...(opts.tokens ? { tokens: opts.tokens } : {}),\n } satisfies AgentEvent);\n }\n\n protected pushError(detail: AgentError, fatal = false): void {\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n fatal,\n } satisfies AgentEvent);\n }\n\n protected captureSession(id?: string, file?: string): void {\n if (!id || id === this._sessionId) return;\n this._sessionId = id;\n this.emit(\"agent-event\", {\n type: \"session_info\",\n driverSessionId: id,\n ...(file ? { sessionFile: file } : {}),\n } satisfies AgentEvent);\n }\n\n /** Shared keyword classification + per-driver hint copy (mirrors omp/codex). */\n protected classifyMessage(message: string): AgentError {\n const generic = classifyGenericErrorMessage(message);\n if (!generic) {\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: `An unexpected ${this.productName} error occurred. Try the prompt again.`,\n };\n }\n const hint =\n generic.category === \"auth\"\n ? `Check the API key / login configured for ${this.productName}.`\n : generic.category === \"rate_limit\"\n ? `${this.productName} hit a provider rate limit. Wait a moment and try again.`\n : generic.category === \"model\"\n ? \"The selected model is unavailable or the context is too long. Change the model or start a new session.\"\n : `A network error occurred while talking to ${this.productName}.`;\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n\n // ── Env allowlist ──────────────────────────────────────────────────────────\n\n /**\n * Explicit env whitelist forwarded to the child. Omits anything provisioned\n * by `provision_secrets` so user credentials stay out of the subprocess\n * environment. Always passes through the driver's test-seam vars and\n * `FAKE_CLI_*`.\n *\n * `config.env` is merged **over** the whitelist, not in place of it. It used\n * to replace it wholesale, which meant any caller that set a single variable\n * silently dropped `PATH` and `HOME` and the spawn failed with ENOENT —\n * unusable as the delivery channel for registry-derived endpoint variables\n * (plan §2.3, \"Delivery rule\"). Widening keeps both: the caller's variables\n * win per key, the process still has a `PATH`.\n */\n protected baseEnv(extraKeys: string[] = []): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\"PATH\", \"HOME\", \"USER\", \"HOSTNAME\", \"SKAILE_SESSION_ID\", ...extraKeys];\n for (const key of explicit) {\n const v = process.env[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(process.env)) {\n if (typeof value !== \"string\") continue;\n if (key.startsWith(`${this.envPrefix}_BRIDGE_`) || key.startsWith(\"FAKE_CLI_\")) {\n out[key] = value;\n }\n }\n if (this.config.sshKeyPath) {\n out.GIT_SSH_COMMAND = `ssh -i \"${this.config.sshKeyPath}\" -o StrictHostKeyChecking=accept-new`;\n }\n if (this.config.env) Object.assign(out, this.config.env);\n return stripRunnerPrivateEnv(out);\n }\n\n // ── Internals ────────────────────────────────────────────────────────────\n\n private onStdoutLine(line: string): void {\n if (!line.trim()) return;\n let json: unknown;\n try {\n json = JSON.parse(line);\n } catch {\n this.log.debug(\"non-JSON stdout line\", { line });\n return;\n }\n try {\n this.handleJson(json);\n } catch (err) {\n this.log.warn(\"handleJson threw\", { error: String(err) });\n }\n }\n\n private onExit(code: number | null, signal: NodeJS.Signals | null): void {\n this.cleanup();\n\n if (this.aborting) {\n this.pushAssistantEnd();\n this.flushToolResults();\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleResolve();\n return;\n }\n\n if (this.mode === \"buffered\" && (code === 0 || code === null)) {\n try {\n this.handleBuffered(this.stdoutBuffer);\n } catch (err) {\n this.log.warn(\"handleBuffered threw\", { error: String(err) });\n }\n }\n\n const exitErr = this.classifyExit(code, signal);\n if (exitErr && !this.sawResult) {\n this.pushAssistantEnd();\n this.flushToolResults();\n this.pushError(exitErr);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleReject(Object.assign(new Error(exitErr.message), { detail: exitErr }));\n return;\n }\n\n // Clean exit (or non-zero exit after a result already streamed): close any\n // open assistant message, synthesize a success result if none arrived, end.\n if (!this.sawResult) this.pushResult({ summary: \"Task completed\" });\n else {\n this.pushAssistantEnd();\n this.flushToolResults();\n }\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleResolve();\n }\n\n private settleResolve(): void {\n const resolve = this.turnResolve;\n this.turnResolve = null;\n this.turnReject = null;\n resolve?.();\n }\n\n private settleReject(err: Error): void {\n const reject = this.turnReject;\n this.turnResolve = null;\n this.turnReject = null;\n reject?.(err);\n }\n\n private cleanup(): void {\n this.rl?.close();\n this.rl = null;\n this.proc = null;\n }\n\n private classifyProcessError(err: NodeJS.ErrnoException): AgentError {\n if (err.code === \"ENOENT\") {\n return {\n message: `${this.defaultBin} command not found`,\n category: \"config\",\n retryable: false,\n hint: this.installHint(),\n };\n }\n if (err.code === \"EACCES\") {\n return {\n message: `Permission denied running ${this.defaultBin}`,\n category: \"config\",\n retryable: false,\n hint: `Check file permissions for the ${this.defaultBin} binary.`,\n };\n }\n return {\n message: err.message,\n category: \"process\",\n retryable: true,\n hint: `An unexpected process error occurred running ${this.productName}. Try again.`,\n };\n }\n}\n\n// ───────────────────────────────────────────────────────────────────────────\n// Tolerant JSON extractors — shared because the upstream stream-json schemas\n// are not fully pinned; read the common field-name variants defensively.\n// ───────────────────────────────────────────────────────────────────────────\n\nfunction asstMessage(text: string): AgentMessage {\n return { role: \"assistant\", content: [{ type: \"text\", text }] };\n}\n\n/** Pull assistant text out of a CLI event, trying the common field names. */\nexport function extractText(json: any): string {\n if (typeof json?.text === \"string\") return json.text;\n if (typeof json?.delta === \"string\") return json.delta;\n if (typeof json?.content === \"string\") return json.content;\n if (typeof json?.response === \"string\") return json.response;\n const msg = json?.message;\n if (typeof msg?.content === \"string\") return msg.content;\n if (Array.isArray(msg?.content)) {\n return msg.content\n .filter(\n (b: any) => (b?.type === \"text\" || b?.type === undefined) && typeof b?.text === \"string\",\n )\n .map((b: any) => b.text)\n .join(\"\");\n }\n if (Array.isArray(json?.parts)) {\n return json.parts\n .filter((p: any) => typeof p?.text === \"string\")\n .map((p: any) => p.text)\n .join(\"\");\n }\n // OpenCode (`run --format json`) nests the payload under `part`.\n if (typeof json?.part?.text === \"string\") return json.part.text;\n return \"\";\n}\n\n/** Map a CLI usage/stats object onto {@link TokenUsage}, trying common field names. */\nexport function extractTokens(json: any): TokenUsage | null {\n const u = json?.usage ?? json?.stats?.usage ?? json?.stats ?? json?.tokens ?? json;\n if (!u || typeof u !== \"object\") return null;\n const input = u.input_tokens ?? u.inputTokens ?? u.prompt_tokens ?? u.promptTokenCount ?? u.input;\n const output =\n u.output_tokens ?? u.outputTokens ?? u.completion_tokens ?? u.candidatesTokenCount ?? u.output;\n const cacheRead = u.cached_input_tokens ?? u.cacheReadTokens ?? u.cachedContentTokenCount;\n if (input === undefined && output === undefined) return null;\n const tokens: TokenUsage = {};\n if (typeof input === \"number\") tokens.inputTokens = input;\n if (typeof output === \"number\") tokens.outputTokens = output;\n if (typeof cacheRead === \"number\") tokens.cacheReadTokens = cacheRead;\n return tokens;\n}\n\n/** Pull a per-turn USD cost from a CLI result object, or `undefined`. */\nexport function extractCost(json: any): number | undefined {\n const c =\n json?.cost ?? json?.costUsd ?? json?.total_cost_usd ?? json?.stats?.cost ?? json?.usage?.cost;\n return typeof c === \"number\" ? c : undefined;\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { flowList, flowShow, flowListSessions, flowGetSession, flowFindFlowForSession } from './chunk-XMQAV6T3.js';
1
+ import { flowList, flowShow, flowListSessions, flowGetSession, flowFindFlowForSession } from './chunk-WHSQSVN2.js';
2
2
  import { sessionList, sessionGet } from './chunk-R6O6YWU7.js';
3
3
  import { skillList, skillShow, skillSearch, skillCheckRequirements, skillGetPreamble } from './chunk-GCYD4EGY.js';
4
4
  import { workspaceValidate, workspaceInfo, workspaceTestSecret, workspaceReload } from './chunk-4ZTPYIBE.js';
5
- import { mountList, mountSync, mountStatus, mountRead, connectorList, connectorRead, connectorWrite, connectorSearch, connectorExec, connectorLoadSkill, connectorDescribe } from './chunk-OXE5A6H6.js';
5
+ import { mountList, mountSync, mountStatus, mountRead, connectorList, connectorRead, connectorWrite, connectorSearch, connectorExec, connectorLoadSkill, connectorDescribe } from './chunk-SNVOASTL.js';
6
6
  import { withActivityLabelDefs } from './chunk-K2K7OF4P.js';
7
7
  import { DEFAULT_DRIVER_ID } from './chunk-5BEFNLOR.js';
8
8
  import * as zNS from 'zod';
@@ -246,5 +246,5 @@ async function runMcpServerStdio(plugin) {
246
246
  }
247
247
 
248
248
  export { buildWorkspaceMcpServer, buildWorkspaceMcpStdioServer, buildWorkspaceToolDefs, runMcpServerStdio };
249
- //# sourceMappingURL=chunk-BHUHGLNS.js.map
250
- //# sourceMappingURL=chunk-BHUHGLNS.js.map
249
+ //# sourceMappingURL=chunk-CODXK5L5.js.map
250
+ //# sourceMappingURL=chunk-CODXK5L5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/adapters/mcp.ts"],"names":["z"],"mappings":"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","file":"chunk-BHUHGLNS.js","sourcesContent":["// Static namespace import so bun --compile bundles zod into the binary.\n// Dynamic import(\"zod\") via a string variable evades bun's static analysis\n// and fails at runtime inside /$bunfs/. The unwrap (zNS.z ?? zNS.default\n// ?? zNS) handles both bun's native ESM and vitest's CJS-interop resolver,\n// which return the zod namespace at different keys.\nimport * as zNS from \"zod\";\nimport { DEFAULT_DRIVER_ID } from \"@skaile/workspaces/core/framework\";\nimport { withActivityLabelDefs } from \"@skaile/workspaces/types\";\nimport type { WorkspacePlugin } from \"../plugin.js\";\nimport {\n connectorDescribe,\n connectorExec,\n connectorList,\n connectorLoadSkill,\n connectorRead,\n connectorSearch,\n connectorWrite,\n mountList,\n mountRead,\n mountStatus,\n mountSync,\n} from \"../tools/connectors.js\";\nimport {\n flowFindFlowForSession,\n flowGetSession,\n flowList,\n flowListSessions,\n flowShow,\n} from \"../tools/flows.js\";\nimport { sessionGet, sessionList } from \"../tools/sessions.js\";\nimport {\n skillCheckRequirements,\n skillGetPreamble,\n skillList,\n skillSearch,\n skillShow,\n} from \"../tools/skills.js\";\nimport {\n workspaceInfo,\n workspaceReload,\n workspaceTestSecret,\n workspaceValidate,\n} from \"../tools/validator.js\";\n\nconst zStatic: any = (zNS as any).z ?? (zNS as any).default ?? zNS;\n\n/**\n * One workspace plugin tool — name, description, a zod raw-shape input schema,\n * and an async handler returning a `ToolResult`.\n *\n * Carries **zero MCP/SDK dependency**: the same definitions feed both the\n * in-process Claude Agent SDK server ({@link buildWorkspaceMcpServer}) and the\n * raw stdio MCP server ({@link buildWorkspaceMcpStdioServer}).\n */\nexport interface WorkspaceToolDef {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n handler: (args: any) => Promise<unknown>;\n}\n\n/**\n * Build the 27 workspace plugin tool definitions.\n *\n * Tool groups:\n * - 4 mount tools (`mount_list`, `mount_sync`, `mount_status`, `mount_read`)\n * - 5 flow tools (`flow_list`, `flow_show`, `flow_list_sessions`, `flow_get_session`, `flow_find_flow_for_session`)\n * - 5 skill tools (`skill_list`, `skill_show`, `skill_search`, `skill_check_requirements`, `skill_get_preamble`)\n * - 2 session tools (`session_list`, `session_get`)\n * - 7 connector tools (`connector_list`, `connector_read`, `connector_write`, `connector_search`, `connector_exec`, `connector_load_skill`, `connector_describe`)\n * - 4 workspace tools (`workspace_validate`, `workspace_info`, `workspace_test_secret`, `workspace_reload`)\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns The 27 tool definitions, free of any MCP/SDK coupling.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildWorkspaceToolDefs(plugin: WorkspacePlugin): WorkspaceToolDef[] {\n const z: any = zStatic;\n\n const driver = plugin.driver ?? DEFAULT_DRIVER_ID;\n const p = plugin.projectDir;\n\n return [\n // Mount tools\n {\n name: \"mount_list\",\n description: \"List all mounts declared in skaile.yaml with their mount status.\",\n inputSchema: {},\n handler: async () => mountList(plugin.connectorManager),\n },\n {\n name: \"mount_sync\",\n description: \"Sync a mount — pull latest from remote (git, S3, WebDAV).\",\n inputSchema: { mount_id: z.string().describe(\"Mount ID from mount_list\") },\n handler: async ({ mount_id }: { mount_id: string }) =>\n mountSync(plugin.connectorManager, mount_id),\n },\n {\n name: \"mount_status\",\n description: \"Get the mount status and last sync time for a mount.\",\n inputSchema: { mount_id: z.string() },\n handler: async ({ mount_id }: { mount_id: string }) =>\n mountStatus(plugin.connectorManager, mount_id),\n },\n {\n name: \"mount_read\",\n description: \"Read a file from a mounted mount by path.\",\n inputSchema: {\n mount_id: z.string(),\n path: z.string().describe(\"Relative path within the mount\"),\n },\n handler: async ({ mount_id, path }: { mount_id: string; path: string }) =>\n mountRead(plugin.connectorManager, mount_id, path),\n },\n // Flow tools\n {\n name: \"flow_list\",\n description: \"List all available flow definitions from ai-assets.\",\n inputSchema: {},\n handler: async () => flowList(p),\n },\n {\n name: \"flow_show\",\n description: \"Show full flow definition (nodes + edges) for a flow ID.\",\n inputSchema: { flow_id: z.string().describe(\"Flow ID from flow_list\") },\n handler: async ({ flow_id }: { flow_id: string }) => flowShow(p, flow_id),\n },\n {\n name: \"flow_list_sessions\",\n description: \"List past and active flow run sessions for this workspace.\",\n inputSchema: {},\n handler: async () => flowListSessions(p),\n },\n {\n name: \"flow_get_session\",\n description: \"Get driver metadata for a specific flow run session.\",\n inputSchema: { run_id: z.string().describe(\"Run ID from flow_list_sessions\") },\n handler: async ({ run_id }: { run_id: string }) => flowGetSession(p, run_id),\n },\n {\n name: \"flow_find_flow_for_session\",\n description: \"Resolve and return the flow definition used in a past session.\",\n inputSchema: { run_id: z.string() },\n handler: async ({ run_id }: { run_id: string }) => flowFindFlowForSession(p, run_id),\n },\n // Skill tools\n {\n name: \"skill_list\",\n description: \"List all skills in the ai-assets catalog.\",\n inputSchema: {},\n handler: async () => skillList(p),\n },\n {\n name: \"skill_show\",\n description: \"Show the full SKILL.md content for a skill ID.\",\n inputSchema: { skill_id: z.string().describe(\"Skill ID from skill_list\") },\n handler: async ({ skill_id }: { skill_id: string }) => skillShow(p, skill_id),\n },\n {\n name: \"skill_search\",\n description: \"Search skills by name, description, or keywords.\",\n inputSchema: { query: z.string() },\n handler: async ({ query }: { query: string }) => skillSearch(p, query),\n },\n {\n name: \"skill_check_requirements\",\n description: \"Validate that all skill prerequisites are met in the target directory.\",\n inputSchema: {\n skill_id: z.string(),\n target_dir: z\n .string()\n .optional()\n .describe(\"Directory to check against (default: projectDir)\"),\n },\n handler: async ({ skill_id, target_dir }: { skill_id: string; target_dir?: string }) =>\n skillCheckRequirements(p, skill_id, target_dir ?? p),\n },\n {\n name: \"skill_get_preamble\",\n description: \"Get the REQUIRES/INPUT/READS/WRITES DSL preamble for a skill.\",\n inputSchema: { skill_id: z.string() },\n handler: async ({ skill_id }: { skill_id: string }) => skillGetPreamble(p, skill_id),\n },\n // Session tools\n {\n name: \"session_list\",\n description: \"List all past agent run sessions for this workspace, sorted newest first.\",\n inputSchema: {},\n handler: async () => sessionList(p),\n },\n {\n name: \"session_get\",\n description: \"Get full metadata for a specific session by run ID.\",\n inputSchema: { run_id: z.string() },\n handler: async ({ run_id }: { run_id: string }) => sessionGet(p, run_id),\n },\n // Connector tools\n {\n name: \"connector_list\",\n description:\n \"List connectors declared in skaile.yaml as {connected, failed, notice?}. A host-managed mount in `connected` carries `health` {status: ok|stale|failed, errorClass, checkedAt}; if it is not ok, tell the user and do not write to it. `failed` holds connectors that did not connect this session, with the failure reason — their mount paths are dead directories, not synced workspaces.\",\n inputSchema: {},\n handler: async () => connectorList(plugin.connectorManager),\n },\n {\n name: \"connector_read\",\n description: \"Read content from a connector by path.\",\n inputSchema: {\n connector_id: z.string().describe(\"Connector ID from connector_list\"),\n path: z.string().describe(\"Path within the connector\"),\n },\n handler: async ({ connector_id, path }: { connector_id: string; path: string }) =>\n connectorRead(plugin.connectorManager, connector_id, path),\n },\n {\n name: \"connector_write\",\n description: \"Write content to a connector by path.\",\n inputSchema: {\n connector_id: z.string(),\n path: z.string(),\n content: z.string().describe(\"Content to write\"),\n },\n handler: async ({\n connector_id,\n path,\n content,\n }: {\n connector_id: string;\n path: string;\n content: string;\n }) => connectorWrite(plugin.connectorManager, connector_id, path, content),\n },\n {\n name: \"connector_search\",\n description: \"Search within a connector by query string.\",\n inputSchema: {\n connector_id: z.string(),\n query: z.string().describe(\"Search query\"),\n },\n handler: async ({ connector_id, query }: { connector_id: string; query: string }) =>\n connectorSearch(plugin.connectorManager, connector_id, query),\n },\n {\n name: \"connector_exec\",\n description: \"Execute a custom operation on a connector.\",\n inputSchema: {\n connector_id: z.string(),\n operation: z.string().describe(\"Operation name from connector_describe\"),\n args: z.record(z.string(), z.unknown()).describe(\"Operation arguments\"),\n },\n handler: async ({\n connector_id,\n operation,\n args,\n }: {\n connector_id: string;\n operation: string;\n args: Record<string, unknown>;\n }) => connectorExec(plugin.connectorManager, connector_id, operation, args),\n },\n {\n name: \"connector_load_skill\",\n description: \"Load the rendered skill body for a connector (operations + usage).\",\n inputSchema: {\n connector_id: z.string(),\n },\n handler: async ({ connector_id }: { connector_id: string }) =>\n connectorLoadSkill(plugin.connectorManager, connector_id),\n },\n {\n name: \"connector_describe\",\n description: \"Describe a connector's capabilities via its RuntimeSkillDescriptor.\",\n inputSchema: {\n connector_id: z.string(),\n },\n handler: async ({ connector_id }: { connector_id: string }) =>\n connectorDescribe(plugin.connectorManager, connector_id),\n },\n // Validator tools\n {\n name: \"workspace_validate\",\n description: \"Run a full health check: connectors, mounts, secrets, driver binary.\",\n inputSchema: {},\n handler: async () => workspaceValidate(plugin, driver),\n },\n {\n name: \"workspace_info\",\n description: \"Show workspace configuration: driver, model, provider, resource counts.\",\n inputSchema: {},\n handler: async () => workspaceInfo(plugin, driver, plugin.model),\n },\n {\n name: \"workspace_test_secret\",\n description: \"Test resolution of one secret reference (env:VAR, forge:key).\",\n inputSchema: { ref: z.string().describe(\"Secret ref e.g. env:ANTHROPIC_API_KEY\") },\n handler: async ({ ref }: { ref: string }) => workspaceTestSecret(ref),\n },\n {\n name: \"workspace_reload\",\n description: \"Re-read skaile.yaml and re-sync the plugin state.\",\n inputSchema: {},\n handler: async () => workspaceReload(plugin),\n },\n ];\n}\n\n/**\n * Build the **in-process** workspace MCP server via the Claude Agent SDK's\n * `createSdkMcpServer`. This shape is what the runner embeds into a Claude\n * Agent SDK `query()` call — the runner *is* the Claude Agent SDK host.\n *\n * Returns `null` when `@anthropic-ai/claude-agent-sdk` is not installed\n * (graceful degradation for non-Claude-Code environments).\n *\n * For the standalone `skaile mcp-server` stdio subprocess use\n * {@link buildWorkspaceMcpStdioServer} / {@link runMcpServerStdio} instead —\n * those carry no Claude Agent SDK dependency.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns The SDK MCP server object or `null` if the SDK is unavailable.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function buildWorkspaceMcpServer(plugin: WorkspacePlugin): Promise<unknown | null> {\n let sdk: any;\n try {\n sdk = await import(\"@anthropic-ai/claude-agent-sdk\");\n } catch {\n return null;\n }\n return sdk.createSdkMcpServer({\n name: \"skaile-workspace\",\n tools: withActivityLabelDefs(buildWorkspaceToolDefs(plugin), zStatic),\n });\n}\n\n/**\n * Build a **raw stdio** workspace MCP server on `@modelcontextprotocol/sdk` —\n * no Claude Agent SDK. This is the correct shape for the `skaile mcp-server`\n * stdio subprocess that MCP-client agents (Claude Code, Codex, …) spawn.\n * Runs on plain Node.\n *\n * The returned server is not yet connected — call `.connect(transport)` (or\n * use {@link runMcpServerStdio}).\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns A `McpServer` with all 27 workspace tools registered.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function buildWorkspaceMcpStdioServer(plugin: WorkspacePlugin): Promise<any> {\n const { McpServer } = await import(\"@modelcontextprotocol/sdk/server/mcp.js\" as string);\n const server = new McpServer({ name: \"skaile-workspace\", version: \"1.0.0\" });\n for (const def of buildWorkspaceToolDefs(plugin)) {\n server.registerTool(\n def.name,\n { description: def.description, inputSchema: def.inputSchema },\n def.handler,\n );\n }\n return server;\n}\n\n/**\n * Start the workspace MCP server over stdio transport.\n *\n * Builds the raw `@modelcontextprotocol/sdk` server via\n * {@link buildWorkspaceMcpStdioServer} and connects a `StdioServerTransport`.\n * No `@anthropic-ai/claude-agent-sdk` dependency anywhere on this path.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function runMcpServerStdio(plugin: WorkspacePlugin): Promise<void> {\n const server = await buildWorkspaceMcpStdioServer(plugin);\n const { StdioServerTransport } = await import(\n \"@modelcontextprotocol/sdk/server/stdio.js\" as string\n );\n await server.connect(new StdioServerTransport());\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/adapters/mcp.ts"],"names":["z"],"mappings":"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","file":"chunk-CODXK5L5.js","sourcesContent":["// Static namespace import so bun --compile bundles zod into the binary.\n// Dynamic import(\"zod\") via a string variable evades bun's static analysis\n// and fails at runtime inside /$bunfs/. The unwrap (zNS.z ?? zNS.default\n// ?? zNS) handles both bun's native ESM and vitest's CJS-interop resolver,\n// which return the zod namespace at different keys.\nimport * as zNS from \"zod\";\nimport { DEFAULT_DRIVER_ID } from \"@skaile/workspaces/core/framework\";\nimport { withActivityLabelDefs } from \"@skaile/workspaces/types\";\nimport type { WorkspacePlugin } from \"../plugin.js\";\nimport {\n connectorDescribe,\n connectorExec,\n connectorList,\n connectorLoadSkill,\n connectorRead,\n connectorSearch,\n connectorWrite,\n mountList,\n mountRead,\n mountStatus,\n mountSync,\n} from \"../tools/connectors.js\";\nimport {\n flowFindFlowForSession,\n flowGetSession,\n flowList,\n flowListSessions,\n flowShow,\n} from \"../tools/flows.js\";\nimport { sessionGet, sessionList } from \"../tools/sessions.js\";\nimport {\n skillCheckRequirements,\n skillGetPreamble,\n skillList,\n skillSearch,\n skillShow,\n} from \"../tools/skills.js\";\nimport {\n workspaceInfo,\n workspaceReload,\n workspaceTestSecret,\n workspaceValidate,\n} from \"../tools/validator.js\";\n\nconst zStatic: any = (zNS as any).z ?? (zNS as any).default ?? zNS;\n\n/**\n * One workspace plugin tool — name, description, a zod raw-shape input schema,\n * and an async handler returning a `ToolResult`.\n *\n * Carries **zero MCP/SDK dependency**: the same definitions feed both the\n * in-process Claude Agent SDK server ({@link buildWorkspaceMcpServer}) and the\n * raw stdio MCP server ({@link buildWorkspaceMcpStdioServer}).\n */\nexport interface WorkspaceToolDef {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n handler: (args: any) => Promise<unknown>;\n}\n\n/**\n * Build the 27 workspace plugin tool definitions.\n *\n * Tool groups:\n * - 4 mount tools (`mount_list`, `mount_sync`, `mount_status`, `mount_read`)\n * - 5 flow tools (`flow_list`, `flow_show`, `flow_list_sessions`, `flow_get_session`, `flow_find_flow_for_session`)\n * - 5 skill tools (`skill_list`, `skill_show`, `skill_search`, `skill_check_requirements`, `skill_get_preamble`)\n * - 2 session tools (`session_list`, `session_get`)\n * - 7 connector tools (`connector_list`, `connector_read`, `connector_write`, `connector_search`, `connector_exec`, `connector_load_skill`, `connector_describe`)\n * - 4 workspace tools (`workspace_validate`, `workspace_info`, `workspace_test_secret`, `workspace_reload`)\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns The 27 tool definitions, free of any MCP/SDK coupling.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildWorkspaceToolDefs(plugin: WorkspacePlugin): WorkspaceToolDef[] {\n const z: any = zStatic;\n\n const driver = plugin.driver ?? DEFAULT_DRIVER_ID;\n const p = plugin.projectDir;\n\n return [\n // Mount tools\n {\n name: \"mount_list\",\n description: \"List all mounts declared in skaile.yaml with their mount status.\",\n inputSchema: {},\n handler: async () => mountList(plugin.connectorManager),\n },\n {\n name: \"mount_sync\",\n description: \"Sync a mount — pull latest from remote (git, S3, WebDAV).\",\n inputSchema: { mount_id: z.string().describe(\"Mount ID from mount_list\") },\n handler: async ({ mount_id }: { mount_id: string }) =>\n mountSync(plugin.connectorManager, mount_id),\n },\n {\n name: \"mount_status\",\n description: \"Get the mount status and last sync time for a mount.\",\n inputSchema: { mount_id: z.string() },\n handler: async ({ mount_id }: { mount_id: string }) =>\n mountStatus(plugin.connectorManager, mount_id),\n },\n {\n name: \"mount_read\",\n description: \"Read a file from a mounted mount by path.\",\n inputSchema: {\n mount_id: z.string(),\n path: z.string().describe(\"Relative path within the mount\"),\n },\n handler: async ({ mount_id, path }: { mount_id: string; path: string }) =>\n mountRead(plugin.connectorManager, mount_id, path),\n },\n // Flow tools\n {\n name: \"flow_list\",\n description: \"List all available flow definitions from ai-assets.\",\n inputSchema: {},\n handler: async () => flowList(p),\n },\n {\n name: \"flow_show\",\n description: \"Show full flow definition (nodes + edges) for a flow ID.\",\n inputSchema: { flow_id: z.string().describe(\"Flow ID from flow_list\") },\n handler: async ({ flow_id }: { flow_id: string }) => flowShow(p, flow_id),\n },\n {\n name: \"flow_list_sessions\",\n description: \"List past and active flow run sessions for this workspace.\",\n inputSchema: {},\n handler: async () => flowListSessions(p),\n },\n {\n name: \"flow_get_session\",\n description: \"Get driver metadata for a specific flow run session.\",\n inputSchema: { run_id: z.string().describe(\"Run ID from flow_list_sessions\") },\n handler: async ({ run_id }: { run_id: string }) => flowGetSession(p, run_id),\n },\n {\n name: \"flow_find_flow_for_session\",\n description: \"Resolve and return the flow definition used in a past session.\",\n inputSchema: { run_id: z.string() },\n handler: async ({ run_id }: { run_id: string }) => flowFindFlowForSession(p, run_id),\n },\n // Skill tools\n {\n name: \"skill_list\",\n description: \"List all skills in the ai-assets catalog.\",\n inputSchema: {},\n handler: async () => skillList(p),\n },\n {\n name: \"skill_show\",\n description: \"Show the full SKILL.md content for a skill ID.\",\n inputSchema: { skill_id: z.string().describe(\"Skill ID from skill_list\") },\n handler: async ({ skill_id }: { skill_id: string }) => skillShow(p, skill_id),\n },\n {\n name: \"skill_search\",\n description: \"Search skills by name, description, or keywords.\",\n inputSchema: { query: z.string() },\n handler: async ({ query }: { query: string }) => skillSearch(p, query),\n },\n {\n name: \"skill_check_requirements\",\n description: \"Validate that all skill prerequisites are met in the target directory.\",\n inputSchema: {\n skill_id: z.string(),\n target_dir: z\n .string()\n .optional()\n .describe(\"Directory to check against (default: projectDir)\"),\n },\n handler: async ({ skill_id, target_dir }: { skill_id: string; target_dir?: string }) =>\n skillCheckRequirements(p, skill_id, target_dir ?? p),\n },\n {\n name: \"skill_get_preamble\",\n description: \"Get the REQUIRES/INPUT/READS/WRITES DSL preamble for a skill.\",\n inputSchema: { skill_id: z.string() },\n handler: async ({ skill_id }: { skill_id: string }) => skillGetPreamble(p, skill_id),\n },\n // Session tools\n {\n name: \"session_list\",\n description: \"List all past agent run sessions for this workspace, sorted newest first.\",\n inputSchema: {},\n handler: async () => sessionList(p),\n },\n {\n name: \"session_get\",\n description: \"Get full metadata for a specific session by run ID.\",\n inputSchema: { run_id: z.string() },\n handler: async ({ run_id }: { run_id: string }) => sessionGet(p, run_id),\n },\n // Connector tools\n {\n name: \"connector_list\",\n description:\n \"List connectors declared in skaile.yaml as {connected, failed, notice?}. A host-managed mount in `connected` carries `health` {status: ok|stale|failed, errorClass, checkedAt}; if it is not ok, tell the user and do not write to it. `failed` holds connectors that did not connect this session, with the failure reason — their mount paths are dead directories, not synced workspaces.\",\n inputSchema: {},\n handler: async () => connectorList(plugin.connectorManager),\n },\n {\n name: \"connector_read\",\n description: \"Read content from a connector by path.\",\n inputSchema: {\n connector_id: z.string().describe(\"Connector ID from connector_list\"),\n path: z.string().describe(\"Path within the connector\"),\n },\n handler: async ({ connector_id, path }: { connector_id: string; path: string }) =>\n connectorRead(plugin.connectorManager, connector_id, path),\n },\n {\n name: \"connector_write\",\n description: \"Write content to a connector by path.\",\n inputSchema: {\n connector_id: z.string(),\n path: z.string(),\n content: z.string().describe(\"Content to write\"),\n },\n handler: async ({\n connector_id,\n path,\n content,\n }: {\n connector_id: string;\n path: string;\n content: string;\n }) => connectorWrite(plugin.connectorManager, connector_id, path, content),\n },\n {\n name: \"connector_search\",\n description: \"Search within a connector by query string.\",\n inputSchema: {\n connector_id: z.string(),\n query: z.string().describe(\"Search query\"),\n },\n handler: async ({ connector_id, query }: { connector_id: string; query: string }) =>\n connectorSearch(plugin.connectorManager, connector_id, query),\n },\n {\n name: \"connector_exec\",\n description: \"Execute a custom operation on a connector.\",\n inputSchema: {\n connector_id: z.string(),\n operation: z.string().describe(\"Operation name from connector_describe\"),\n args: z.record(z.string(), z.unknown()).describe(\"Operation arguments\"),\n },\n handler: async ({\n connector_id,\n operation,\n args,\n }: {\n connector_id: string;\n operation: string;\n args: Record<string, unknown>;\n }) => connectorExec(plugin.connectorManager, connector_id, operation, args),\n },\n {\n name: \"connector_load_skill\",\n description: \"Load the rendered skill body for a connector (operations + usage).\",\n inputSchema: {\n connector_id: z.string(),\n },\n handler: async ({ connector_id }: { connector_id: string }) =>\n connectorLoadSkill(plugin.connectorManager, connector_id),\n },\n {\n name: \"connector_describe\",\n description: \"Describe a connector's capabilities via its RuntimeSkillDescriptor.\",\n inputSchema: {\n connector_id: z.string(),\n },\n handler: async ({ connector_id }: { connector_id: string }) =>\n connectorDescribe(plugin.connectorManager, connector_id),\n },\n // Validator tools\n {\n name: \"workspace_validate\",\n description: \"Run a full health check: connectors, mounts, secrets, driver binary.\",\n inputSchema: {},\n handler: async () => workspaceValidate(plugin, driver),\n },\n {\n name: \"workspace_info\",\n description: \"Show workspace configuration: driver, model, provider, resource counts.\",\n inputSchema: {},\n handler: async () => workspaceInfo(plugin, driver, plugin.model),\n },\n {\n name: \"workspace_test_secret\",\n description: \"Test resolution of one secret reference (env:VAR, forge:key).\",\n inputSchema: { ref: z.string().describe(\"Secret ref e.g. env:ANTHROPIC_API_KEY\") },\n handler: async ({ ref }: { ref: string }) => workspaceTestSecret(ref),\n },\n {\n name: \"workspace_reload\",\n description: \"Re-read skaile.yaml and re-sync the plugin state.\",\n inputSchema: {},\n handler: async () => workspaceReload(plugin),\n },\n ];\n}\n\n/**\n * Build the **in-process** workspace MCP server via the Claude Agent SDK's\n * `createSdkMcpServer`. This shape is what the runner embeds into a Claude\n * Agent SDK `query()` call — the runner *is* the Claude Agent SDK host.\n *\n * Returns `null` when `@anthropic-ai/claude-agent-sdk` is not installed\n * (graceful degradation for non-Claude-Code environments).\n *\n * For the standalone `skaile mcp-server` stdio subprocess use\n * {@link buildWorkspaceMcpStdioServer} / {@link runMcpServerStdio} instead —\n * those carry no Claude Agent SDK dependency.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns The SDK MCP server object or `null` if the SDK is unavailable.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function buildWorkspaceMcpServer(plugin: WorkspacePlugin): Promise<unknown | null> {\n let sdk: any;\n try {\n sdk = await import(\"@anthropic-ai/claude-agent-sdk\");\n } catch {\n return null;\n }\n return sdk.createSdkMcpServer({\n name: \"skaile-workspace\",\n tools: withActivityLabelDefs(buildWorkspaceToolDefs(plugin), zStatic),\n });\n}\n\n/**\n * Build a **raw stdio** workspace MCP server on `@modelcontextprotocol/sdk` —\n * no Claude Agent SDK. This is the correct shape for the `skaile mcp-server`\n * stdio subprocess that MCP-client agents (Claude Code, Codex, …) spawn.\n * Runs on plain Node.\n *\n * The returned server is not yet connected — call `.connect(transport)` (or\n * use {@link runMcpServerStdio}).\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns A `McpServer` with all 27 workspace tools registered.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function buildWorkspaceMcpStdioServer(plugin: WorkspacePlugin): Promise<any> {\n const { McpServer } = await import(\"@modelcontextprotocol/sdk/server/mcp.js\" as string);\n const server = new McpServer({ name: \"skaile-workspace\", version: \"1.0.0\" });\n for (const def of buildWorkspaceToolDefs(plugin)) {\n server.registerTool(\n def.name,\n { description: def.description, inputSchema: def.inputSchema },\n def.handler,\n );\n }\n return server;\n}\n\n/**\n * Start the workspace MCP server over stdio transport.\n *\n * Builds the raw `@modelcontextprotocol/sdk` server via\n * {@link buildWorkspaceMcpStdioServer} and connects a `StdioServerTransport`.\n * No `@anthropic-ai/claude-agent-sdk` dependency anywhere on this path.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function runMcpServerStdio(plugin: WorkspacePlugin): Promise<void> {\n const server = await buildWorkspaceMcpStdioServer(plugin);\n const { StdioServerTransport } = await import(\n \"@modelcontextprotocol/sdk/server/stdio.js\" as string\n );\n await server.connect(new StdioServerTransport());\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { parseFlowDefinition } from './chunk-QZLWJETK.js';
2
2
  import { isAgentNode, isSubpromptNode, isSubFlowNode, nodeBindings, isRouterNode, nodeIsOptional, nodeSkillId, nodeLabel, isActiveRuntimeNode } from './chunk-NFGRW3L7.js';
3
3
  import { resolveFlowBindings, stableFlowJson, evaluateFlowExpression, FlowExpressionError, getConsumedOutputSchema, compileOutputFieldsSchema, invalidOutputFieldsSchemaMessage } from './chunk-QCI6D7E4.js';
4
- import { aiResourceRoots } from './chunk-QEXEHXX5.js';
4
+ import { aiResourceRoots } from './chunk-3JHFFIQ6.js';
5
5
  import { findKindDirs } from './chunk-A2ULN3KX.js';
6
6
  import * as path2 from 'path';
7
7
  import path2__default from 'path';
@@ -992,5 +992,5 @@ function findFlowFileInRoots(flowId, roots, opts = {}) {
992
992
  }
993
993
 
994
994
  export { FLOW_FILE_EXTENSIONS, FlowManifestSchema, appendAttempt, availableRouterFrontier, buildFlowExpressionContext, computeFlowState, computeFlowStateFromSnapshots, computeSkippable, countFailedAttempts, deriveCheckEvidence, evaluateRouterSelection, findFlowFileInRoots, flowFileCandidates, flowKindProvider, flowLookupRoots, hasAutomaticRetryBudget, interpolateNodeInstruction, isActiveExecutionExpired, isBlocking, loadAllFlowEntries, loadAllFlows, loadFlow, loadFlowEntriesFromDir, loadFlowsFromDir, nextAttemptNumber, persistedRouterSelection, planRouterSkips, producerOutputObtainedBy, projectAiAssetsRoots, remainingActiveExecutionMs, resolveAvailableRouter, resolveFlowOutputFields, resolveNextNodes, resolveNodeBindings, resolveTerminalFailureStatus, routerSelectionOutput, unsettledRouterBranchIds, validateConsumedNodeOutput, validateFlow };
995
- //# sourceMappingURL=chunk-UAAAERXI.js.map
996
- //# sourceMappingURL=chunk-UAAAERXI.js.map
995
+ //# sourceMappingURL=chunk-DPMKI26Y.js.map
996
+ //# sourceMappingURL=chunk-DPMKI26Y.js.map