@skaile/workspaces 4.32.1 → 4.34.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 (248) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +3 -3
  3. package/dist/app-sdk/index.js +1 -1
  4. package/dist/{asset-feeds-TOJQTJYS.js → asset-feeds-EIHLRBUG.js} +11 -11
  5. package/dist/{asset-feeds-TOJQTJYS.js.map → asset-feeds-EIHLRBUG.js.map} +1 -1
  6. package/dist/asset-manager/catalog-deployer.js +5 -5
  7. package/dist/asset-manager/index.js +11 -11
  8. package/dist/asset-manager/installer.js +8 -8
  9. package/dist/asset-manager/renderers.js +2 -2
  10. package/dist/asset-manager/src/index.d.ts +30 -24
  11. package/dist/asset-manager/src/index.d.ts.map +1 -1
  12. package/dist/asset-manager/src/renderers.d.ts +2 -2
  13. package/dist/bridge/drivers/claude-sdk.js +10 -10
  14. package/dist/bridge/drivers/codex.js +8 -8
  15. package/dist/bridge/drivers/continue.js +10 -10
  16. package/dist/bridge/drivers/continue.js.map +1 -1
  17. package/dist/bridge/drivers/echo.js +3 -3
  18. package/dist/bridge/drivers/gemini.js +6 -6
  19. package/dist/bridge/drivers/goose.js +10 -10
  20. package/dist/bridge/drivers/goose.js.map +1 -1
  21. package/dist/bridge/drivers/omp.js +4 -4
  22. package/dist/bridge/drivers/omp.js.map +1 -1
  23. package/dist/bridge/drivers/opencode.js +11 -11
  24. package/dist/bridge/drivers/opencode.js.map +1 -1
  25. package/dist/bridge/drivers/qwen.js +6 -6
  26. package/dist/bridge/index.js +11 -11
  27. package/dist/bridge/src/capability-dispatch.d.ts +1 -1
  28. package/dist/bridge/src/drivers/_subprocess-cli.d.ts +3 -3
  29. package/dist/bridge/src/drivers/continue.d.ts +1 -1
  30. package/dist/bridge/src/drivers/gemini.d.ts +3 -3
  31. package/dist/bridge/src/drivers/goose.d.ts +1 -1
  32. package/dist/bridge/src/drivers/opencode.d.ts +1 -1
  33. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +2 -2
  34. package/dist/bridge/src/provider-materialize/credential-env.d.ts +4 -4
  35. package/dist/bridge/src/provider-materialize/env-drivers.d.ts +18 -18
  36. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +1 -1
  37. package/dist/bridge/src/provider-materialize/opencode-config.d.ts +1 -1
  38. package/dist/bridge/src/provider-materialize/session-config-home.d.ts +5 -5
  39. package/dist/bridge/src/registry.d.ts +10 -10
  40. package/dist/bridge/src/types.d.ts +9 -9
  41. package/dist/{chunk-JYWEWJ46.js → chunk-2EUW6NZD.js} +2 -2
  42. package/dist/{chunk-JYWEWJ46.js.map → chunk-2EUW6NZD.js.map} +1 -1
  43. package/dist/{chunk-WPISSDEI.js → chunk-3ELIPWCH.js} +6 -6
  44. package/dist/{chunk-WPISSDEI.js.map → chunk-3ELIPWCH.js.map} +1 -1
  45. package/dist/{chunk-HL6SZ7Z3.js → chunk-5YXKEM7Q.js} +7 -7
  46. package/dist/{chunk-HL6SZ7Z3.js.map → chunk-5YXKEM7Q.js.map} +1 -1
  47. package/dist/{chunk-ZRE4N6ZA.js → chunk-75LXFKQR.js} +4 -4
  48. package/dist/{chunk-ZRE4N6ZA.js.map → chunk-75LXFKQR.js.map} +1 -1
  49. package/dist/{chunk-GMXG2JGN.js → chunk-7ERHZQ7O.js} +3 -3
  50. package/dist/{chunk-GMXG2JGN.js.map → chunk-7ERHZQ7O.js.map} +1 -1
  51. package/dist/{chunk-JULFGNQN.js → chunk-7HJ6SFFF.js} +3 -3
  52. package/dist/{chunk-JULFGNQN.js.map → chunk-7HJ6SFFF.js.map} +1 -1
  53. package/dist/{chunk-DKCFWSVW.js → chunk-7LBPHRRP.js} +3 -3
  54. package/dist/chunk-7LBPHRRP.js.map +1 -0
  55. package/dist/{chunk-3GMRVUDA.js → chunk-AKBPLLFB.js} +5 -5
  56. package/dist/{chunk-3GMRVUDA.js.map → chunk-AKBPLLFB.js.map} +1 -1
  57. package/dist/{chunk-54A5QAIV.js → chunk-C3256F2F.js} +2 -2
  58. package/dist/{chunk-54A5QAIV.js.map → chunk-C3256F2F.js.map} +1 -1
  59. package/dist/{chunk-2JANXYTJ.js → chunk-DHLE66FV.js} +3 -3
  60. package/dist/{chunk-2JANXYTJ.js.map → chunk-DHLE66FV.js.map} +1 -1
  61. package/dist/{chunk-BR2IXOWX.js → chunk-DOF77WEV.js} +6 -6
  62. package/dist/{chunk-BR2IXOWX.js.map → chunk-DOF77WEV.js.map} +1 -1
  63. package/dist/{chunk-MENCWIHW.js → chunk-EB4ZTESQ.js} +4 -4
  64. package/dist/chunk-EB4ZTESQ.js.map +1 -0
  65. package/dist/{chunk-E2IZD74W.js → chunk-ENV5DDQ7.js} +6 -6
  66. package/dist/{chunk-E2IZD74W.js.map → chunk-ENV5DDQ7.js.map} +1 -1
  67. package/dist/{chunk-IXGNQP7Z.js → chunk-FDZL5QVZ.js} +3 -3
  68. package/dist/{chunk-IXGNQP7Z.js.map → chunk-FDZL5QVZ.js.map} +1 -1
  69. package/dist/{chunk-NJVXDRQY.js → chunk-GKTFGCQZ.js} +3 -3
  70. package/dist/chunk-GKTFGCQZ.js.map +1 -0
  71. package/dist/{chunk-CYESHAXV.js → chunk-JR2QQLAQ.js} +21 -21
  72. package/dist/{chunk-CYESHAXV.js.map → chunk-JR2QQLAQ.js.map} +1 -1
  73. package/dist/{chunk-5RHPNNWP.js → chunk-JRIU5GA7.js} +3 -3
  74. package/dist/{chunk-5RHPNNWP.js.map → chunk-JRIU5GA7.js.map} +1 -1
  75. package/dist/{chunk-OS4SXZTQ.js → chunk-JRSCSYRF.js} +6 -6
  76. package/dist/chunk-JRSCSYRF.js.map +1 -0
  77. package/dist/{chunk-34ZVTPDV.js → chunk-JS7DCCDA.js} +4 -4
  78. package/dist/{chunk-34ZVTPDV.js.map → chunk-JS7DCCDA.js.map} +1 -1
  79. package/dist/{chunk-F3HNW354.js → chunk-KIFJWSNC.js} +3 -3
  80. package/dist/{chunk-F3HNW354.js.map → chunk-KIFJWSNC.js.map} +1 -1
  81. package/dist/{chunk-TGLCW25T.js → chunk-LA7DCX2U.js} +4 -4
  82. package/dist/{chunk-TGLCW25T.js.map → chunk-LA7DCX2U.js.map} +1 -1
  83. package/dist/{chunk-DF7C3KZK.js → chunk-LRCSWOZO.js} +14 -14
  84. package/dist/chunk-LRCSWOZO.js.map +1 -0
  85. package/dist/{chunk-MVSF6AB4.js → chunk-MTWZ7KHZ.js} +3 -3
  86. package/dist/{chunk-MVSF6AB4.js.map → chunk-MTWZ7KHZ.js.map} +1 -1
  87. package/dist/{chunk-BU53MUL5.js → chunk-N2UGG6WV.js} +4 -4
  88. package/dist/{chunk-BU53MUL5.js.map → chunk-N2UGG6WV.js.map} +1 -1
  89. package/dist/{chunk-MNA22VPT.js → chunk-NVQLE4MK.js} +4 -4
  90. package/dist/{chunk-MNA22VPT.js.map → chunk-NVQLE4MK.js.map} +1 -1
  91. package/dist/{chunk-EOX3QH74.js → chunk-OS6256B2.js} +291 -27
  92. package/dist/chunk-OS6256B2.js.map +1 -0
  93. package/dist/{chunk-223FKFTC.js → chunk-OWN2W2IW.js} +109 -37
  94. package/dist/chunk-OWN2W2IW.js.map +1 -0
  95. package/dist/{chunk-U2I2BRCP.js → chunk-RHESVS7V.js} +9 -9
  96. package/dist/{chunk-U2I2BRCP.js.map → chunk-RHESVS7V.js.map} +1 -1
  97. package/dist/{chunk-G3N2ZCOJ.js → chunk-RR4PJZLK.js} +36 -35
  98. package/dist/chunk-RR4PJZLK.js.map +1 -0
  99. package/dist/{chunk-6GSZLKA5.js → chunk-T762W5CI.js} +3 -3
  100. package/dist/chunk-T762W5CI.js.map +1 -0
  101. package/dist/{chunk-3ZE7X5Y6.js → chunk-TB3LJ6NA.js} +3 -3
  102. package/dist/{chunk-3ZE7X5Y6.js.map → chunk-TB3LJ6NA.js.map} +1 -1
  103. package/dist/{chunk-N7B3LZ7V.js → chunk-TGE33MKN.js} +2 -2
  104. package/dist/{chunk-N7B3LZ7V.js.map → chunk-TGE33MKN.js.map} +1 -1
  105. package/dist/{chunk-3DZGPJU5.js → chunk-TGJIX77V.js} +11 -11
  106. package/dist/chunk-TGJIX77V.js.map +1 -0
  107. package/dist/{chunk-XVGB3K4B.js → chunk-TTITGVXV.js} +3 -3
  108. package/dist/{chunk-XVGB3K4B.js.map → chunk-TTITGVXV.js.map} +1 -1
  109. package/dist/{chunk-HGPSZXZP.js → chunk-VOXFI3XS.js} +3 -3
  110. package/dist/{chunk-HGPSZXZP.js.map → chunk-VOXFI3XS.js.map} +1 -1
  111. package/dist/{chunk-IT7ZHRCK.js → chunk-WFRVQ2RY.js} +10 -10
  112. package/dist/{chunk-IT7ZHRCK.js.map → chunk-WFRVQ2RY.js.map} +1 -1
  113. package/dist/{chunk-UNUQGYCW.js → chunk-Z2QI42YH.js} +3 -3
  114. package/dist/{chunk-UNUQGYCW.js.map → chunk-Z2QI42YH.js.map} +1 -1
  115. package/dist/{chunk-DMNYWLED.js → chunk-ZWTCXL3H.js} +3 -3
  116. package/dist/{chunk-DMNYWLED.js.map → chunk-ZWTCXL3H.js.map} +1 -1
  117. package/dist/cli/index.js +121 -121
  118. package/dist/cli/index.js.map +1 -1
  119. package/dist/cli/src/commands/catalog.d.ts +1 -1
  120. package/dist/cli/src/commands/integration.d.ts +2 -2
  121. package/dist/cli/src/commands/plugin/claude-code.d.ts +2 -2
  122. package/dist/cli/src/commands/plugin/codex.d.ts +2 -2
  123. package/dist/cli/src/commands/plugin/omp.d.ts +2 -2
  124. package/dist/cli/src/commands/plugin/types.d.ts +13 -13
  125. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  126. package/dist/cli/src/commands/run.d.ts +1 -1
  127. package/dist/connectors/config.js +3 -3
  128. package/dist/connectors/index.js +15 -15
  129. package/dist/connectors/src/watcher.d.ts +27 -0
  130. package/dist/connectors/src/watcher.d.ts.map +1 -1
  131. package/dist/connectors-shared/index.js +2 -2
  132. package/dist/core/driver-targets.js +1 -1
  133. package/dist/core/index.js +5 -5
  134. package/dist/core/runtime-assets.js +3 -3
  135. package/dist/core/src/driver-targets.d.ts +8 -8
  136. package/dist/core/src/index.d.ts +8 -2
  137. package/dist/core/src/index.d.ts.map +1 -1
  138. package/dist/core/src/settings.d.ts +1 -1
  139. package/dist/core/src/workspace-config.d.ts +16 -15
  140. package/dist/core/src/workspace-config.d.ts.map +1 -1
  141. package/dist/core/store.js +2 -2
  142. package/dist/core/workspace-config.js +2 -2
  143. package/dist/deploy/index.js +5 -5
  144. package/dist/discovery/index.js +2 -2
  145. package/dist/{ensure-sources-UJBLBTXI.js → ensure-sources-JR4QI2MY.js} +14 -14
  146. package/dist/{ensure-sources-UJBLBTXI.js.map → ensure-sources-JR4QI2MY.js.map} +1 -1
  147. package/dist/factory-assets/connectors/box.js +15 -15
  148. package/dist/factory-assets/connectors/deploy.js +15 -15
  149. package/dist/factory-assets/connectors/devserver.js +15 -15
  150. package/dist/factory-assets/connectors/flow/CONNECTOR.md +2 -2
  151. package/dist/factory-assets/connectors/flow/adapter.js +15 -15
  152. package/dist/factory-assets/connectors/flow/engine.js +6 -6
  153. package/dist/factory-assets/connectors/flow/run-flow.d.ts +1 -1
  154. package/dist/factory-assets/connectors/flow/run-flow.js +16 -16
  155. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +3 -3
  156. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  157. package/dist/factory-assets/connectors/flow.js +15 -15
  158. package/dist/factory-assets/connectors/git.js +15 -15
  159. package/dist/factory-assets/connectors/gmail.js +15 -15
  160. package/dist/factory-assets/connectors/googledrive.js +15 -15
  161. package/dist/factory-assets/connectors/local.js +15 -15
  162. package/dist/factory-assets/connectors/mattermost.js +15 -15
  163. package/dist/factory-assets/connectors/memory.js +15 -15
  164. package/dist/factory-assets/connectors/minio.js +15 -15
  165. package/dist/factory-assets/connectors/postgres.js +15 -15
  166. package/dist/factory-assets/connectors/s3.js +15 -15
  167. package/dist/factory-assets/connectors/sharepoint.js +15 -15
  168. package/dist/factory-assets/connectors/sqlite.js +15 -15
  169. package/dist/factory-assets/connectors/static-server.js +15 -15
  170. package/dist/factory-assets/connectors/tunnel.js +15 -15
  171. package/dist/factory-assets/connectors/webdav.js +15 -15
  172. package/dist/factory-assets/connectors/xstate-store.js +15 -15
  173. package/dist/factory-assets/connectors/xstate.js +15 -15
  174. package/dist/{flows-QTUSWYKY.js → flows-X7JFAVRR.js} +8 -8
  175. package/dist/{flows-QTUSWYKY.js.map → flows-X7JFAVRR.js.map} +1 -1
  176. package/dist/{helpers-QSRBM6LP.js → helpers-HTET53KB.js} +14 -14
  177. package/dist/{helpers-QSRBM6LP.js.map → helpers-HTET53KB.js.map} +1 -1
  178. package/dist/library/index.js +8 -8
  179. package/dist/{library-publish-JTS2PA2P.js → library-publish-T6KHQ3TE.js} +18 -18
  180. package/dist/{library-publish-JTS2PA2P.js.map → library-publish-T6KHQ3TE.js.map} +1 -1
  181. package/dist/{open-library-PIUYBOZI.js → open-library-O5I2DAEK.js} +16 -16
  182. package/dist/{open-library-PIUYBOZI.js.map → open-library-O5I2DAEK.js.map} +1 -1
  183. package/dist/{paths-IOOMNHTC.js → paths-OI5IIS22.js} +8 -8
  184. package/dist/{paths-IOOMNHTC.js.map → paths-OI5IIS22.js.map} +1 -1
  185. package/dist/plugin-registry/src/targets.d.ts +5 -5
  186. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  187. package/dist/{plugin-store-OIIPB2MQ.js → plugin-store-C67RLSPD.js} +7 -7
  188. package/dist/{plugin-store-OIIPB2MQ.js.map → plugin-store-C67RLSPD.js.map} +1 -1
  189. package/dist/{project-Y2BU3TSB.js → project-QIOXU2NS.js} +15 -15
  190. package/dist/{project-Y2BU3TSB.js.map → project-QIOXU2NS.js.map} +1 -1
  191. package/dist/resolver/index.js +5 -5
  192. package/dist/runner/index.js +20 -20
  193. package/dist/runner/src/external-mcp.d.ts +10 -0
  194. package/dist/runner/src/external-mcp.d.ts.map +1 -1
  195. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  196. package/dist/runner/src/logging-bootstrap.d.ts +5 -0
  197. package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
  198. package/dist/runner/src/manifest.d.ts +1 -1
  199. package/dist/runner/src/resources.d.ts.map +1 -1
  200. package/dist/runner/src/runner-capabilities.d.ts +2 -0
  201. package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
  202. package/dist/runner/src/serve.d.ts +1 -1
  203. package/dist/runner/src/serve.d.ts.map +1 -1
  204. package/dist/runner/src/session-builder.d.ts +2 -2
  205. package/dist/runner/src/session.d.ts +1 -1
  206. package/dist/runner/src/session.d.ts.map +1 -1
  207. package/dist/runner/src/stall-watchdog.d.ts +53 -0
  208. package/dist/runner/src/stall-watchdog.d.ts.map +1 -0
  209. package/dist/sdk/asset-manager.js +11 -11
  210. package/dist/sdk/bridge.js +11 -11
  211. package/dist/sdk/core.js +5 -5
  212. package/dist/sdk/flow.js +6 -6
  213. package/dist/sdk/index.js +20 -20
  214. package/dist/sdk/resolver.js +5 -5
  215. package/dist/sdk/runner.js +20 -20
  216. package/dist/sdk/session.js +2 -2
  217. package/dist/sdk/types.js +1 -1
  218. package/dist/session/index.js +2 -2
  219. package/dist/{setup-VY5L44XZ.js → setup-SSGPDDWL.js} +20 -20
  220. package/dist/{setup-VY5L44XZ.js.map → setup-SSGPDDWL.js.map} +1 -1
  221. package/dist/{skills-DH75K326.js → skills-4YTVHMOH.js} +7 -7
  222. package/dist/{skills-DH75K326.js.map → skills-4YTVHMOH.js.map} +1 -1
  223. package/dist/{source-CKD4YPK4.js → source-NPU7ZWID.js} +17 -17
  224. package/dist/{source-CKD4YPK4.js.map → source-NPU7ZWID.js.map} +1 -1
  225. package/dist/{source-manifest-publish-KTSEBNHY.js → source-manifest-publish-4EYDVPR3.js} +19 -19
  226. package/dist/{source-manifest-publish-KTSEBNHY.js.map → source-manifest-publish-4EYDVPR3.js.map} +1 -1
  227. package/dist/tui/index.js +20 -20
  228. package/dist/types/index.js +1 -1
  229. package/dist/types/manifests.js +1 -1
  230. package/dist/types/src/manifests/agent.d.ts +4 -4
  231. package/dist/types/src/runtime.d.ts +4 -4
  232. package/dist/types/src/version.d.ts +10 -1
  233. package/dist/types/src/version.d.ts.map +1 -1
  234. package/dist/workspace-plugin/adapters/mcp.js +8 -8
  235. package/dist/workspace-plugin/adapters/omp.js +7 -7
  236. package/dist/workspace-plugin/index.js +1 -1
  237. package/dist/workspace-plugin/src/plugin.d.ts +1 -1
  238. package/package.json +1 -1
  239. package/dist/chunk-223FKFTC.js.map +0 -1
  240. package/dist/chunk-3DZGPJU5.js.map +0 -1
  241. package/dist/chunk-6GSZLKA5.js.map +0 -1
  242. package/dist/chunk-DF7C3KZK.js.map +0 -1
  243. package/dist/chunk-DKCFWSVW.js.map +0 -1
  244. package/dist/chunk-EOX3QH74.js.map +0 -1
  245. package/dist/chunk-G3N2ZCOJ.js.map +0 -1
  246. package/dist/chunk-MENCWIHW.js.map +0 -1
  247. package/dist/chunk-NJVXDRQY.js.map +0 -1
  248. package/dist/chunk-OS4SXZTQ.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-NJVXDRQY.js';
2
- import { resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-3DZGPJU5.js';
3
- import { getStaticModels, fetchProviderModels } from './chunk-ZRE4N6ZA.js';
4
- import { getProviderPreset, BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from './chunk-MVSF6AB4.js';
1
+ import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-GKTFGCQZ.js';
2
+ import { resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-TGJIX77V.js';
3
+ import { getStaticModels, fetchProviderModels } from './chunk-75LXFKQR.js';
4
+ import { getProviderPreset, BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from './chunk-MTWZ7KHZ.js';
5
5
  import * as z from 'zod';
6
6
 
7
7
  var GOOGLE_DEFAULT_BASE_URL = getProviderPreset("google")?.base_url;
@@ -61,7 +61,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
61
61
  * The AI provider entry this session's model selector names, memoized until
62
62
  * the model changes.
63
63
  *
64
- * Gemini CLI and Qwen Code are `single`-plurality backends (§2.3): they
64
+ * Gemini CLI and Qwen Code are `single`-plurality harnesses (§2.3): they
65
65
  * address one endpoint, so the bound entry supplies both the credential and
66
66
  * the base URL. Resolving through {@link bindSingleProviderEntry} is what
67
67
  * puts the surface check — which throws — on the start path.
@@ -80,7 +80,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
80
80
  }
81
81
  /**
82
82
  * Fail before the first spawn when the bound entry speaks a surface this
83
- * backend cannot — the error names the surface.
83
+ * harness cannot — the error names the surface.
84
84
  */
85
85
  async start() {
86
86
  this.registryBinding();
@@ -93,7 +93,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
93
93
  this.bindingResolved = false;
94
94
  }
95
95
  }
96
- /** The provider-side model id the backend is actually run with. */
96
+ /** The provider-side model id the harness is actually run with. */
97
97
  getModel() {
98
98
  return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;
99
99
  }
@@ -184,5 +184,5 @@ var geminiDriverTarget = {
184
184
  };
185
185
 
186
186
  export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget };
187
- //# sourceMappingURL=chunk-U2I2BRCP.js.map
188
- //# sourceMappingURL=chunk-U2I2BRCP.js.map
187
+ //# sourceMappingURL=chunk-RHESVS7V.js.map
188
+ //# sourceMappingURL=chunk-RHESVS7V.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-U2I2BRCP.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport {\n bindSingleProviderEntry,\n type EnvDriverSession,\n type RegistryModelBinding,\n resolveEnvDriverSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-drivers.js\";\nimport { registryDriverConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * The Gemini API host the CLI talks to unless told otherwise — the catalog's\n * `google` preset, so the two can never drift apart.\n */\nconst GOOGLE_DEFAULT_BASE_URL = getProviderPreset(\"google\")?.base_url;\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n this.captureSession(json.sessionId ?? json.session_id);\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n\n // ── Registry binding ──────────────────────────────────────────────────────\n\n private providers?: EnvDriverSession;\n private boundEntry?: RegistryModelBinding;\n private bindingResolved = false;\n\n /** This session's AI providers, resolved once from the config. */\n protected providerSession(): EnvDriverSession {\n this.providers ??= resolveEnvDriverSession(this.config);\n return this.providers;\n }\n\n /**\n * The AI provider entry this session's model selector names, memoized until\n * the model changes.\n *\n * Gemini CLI and Qwen Code are `single`-plurality backends (§2.3): they\n * address one endpoint, so the bound entry supplies both the credential and\n * the base URL. Resolving through {@link bindSingleProviderEntry} is what\n * puts the surface check — which throws — on the start path.\n */\n protected registryBinding(): RegistryModelBinding | undefined {\n if (this.bindingResolved) return this.boundEntry;\n const binding = bindSingleProviderEntry(\n this.driverInfo.id,\n this.productName,\n this.providerSession(),\n );\n for (const warning of binding?.warnings ?? []) this.log.warn(warning);\n this.boundEntry = binding;\n this.bindingResolved = true;\n return binding;\n }\n\n /**\n * Fail before the first spawn when the bound entry speaks a surface this\n * backend cannot — the error names the surface.\n */\n override async start(): Promise<void> {\n this.registryBinding();\n await super.start();\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n super.reconfigure(patch);\n if (patch.model !== undefined) {\n this.providers = undefined;\n this.bindingResolved = false;\n }\n }\n\n /** The provider-side model id the backend is actually run with. */\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n}\n\n/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google\n * models only (`surface: google-generative-ai`): the AI provider entry the\n * session's model selector names supplies `GEMINI_API_KEY`, the `-m` model id\n * and — for a non-default endpoint — `GOOGLE_GEMINI_BASE_URL`.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n const model = this.registryBinding()?.providerModelId ?? this.config.model;\n if (model) args.push(\"-m\", model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\", \"GOOGLE_GEMINI_BASE_URL\"]);\n const binding = this.registryBinding();\n if (!binding) return env;\n\n // The entry is the authority: inherited Google carriers are dropped so an\n // ambient key cannot authenticate a session pointed somewhere else.\n delete env.GEMINI_API_KEY;\n delete env.GOOGLE_API_KEY;\n delete env.GOOGLE_GEMINI_BASE_URL;\n const key = entryCredentialValue(binding.providerId, binding.entry, {\n env: this.providerSession().lookupEnv,\n });\n if (key) env.GEMINI_API_KEY = key;\n // Only a non-default endpoint is worth naming: Gemini CLI reads\n // GOOGLE_GEMINI_BASE_URL as an override of its own default host.\n if (binding.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL) {\n env.GOOGLE_GEMINI_BASE_URL = binding.baseUrl;\n }\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n /**\n * Discovery runs against the bound entry: its credential and, for a\n * non-default endpoint, its base URL. Without an entry the ambient\n * `GEMINI_API_KEY` is the last resort, and an unreachable API falls back to\n * the static Google catalog.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const session = this.providerSession();\n const binding = resolveRegistryBinding(session);\n const key = binding\n ? entryCredentialValue(binding.providerId, binding.entry, { env: session.lookupEnv })\n : session.lookupEnv.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\n \"google\",\n key,\n binding?.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL\n ? { baseUrl: binding.baseUrl }\n : {},\n );\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (registry, options) =>\n new GeminiDriver({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryDriverConfig(registry, options),\n }).listModels(),\n};\n"]}
1
+ {"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-RHESVS7V.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport {\n bindSingleProviderEntry,\n type EnvDriverSession,\n type RegistryModelBinding,\n resolveEnvDriverSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-drivers.js\";\nimport { registryDriverConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * The Gemini API host the CLI talks to unless told otherwise — the catalog's\n * `google` preset, so the two can never drift apart.\n */\nconst GOOGLE_DEFAULT_BASE_URL = getProviderPreset(\"google\")?.base_url;\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n this.captureSession(json.sessionId ?? json.session_id);\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n\n // ── Registry binding ──────────────────────────────────────────────────────\n\n private providers?: EnvDriverSession;\n private boundEntry?: RegistryModelBinding;\n private bindingResolved = false;\n\n /** This session's AI providers, resolved once from the config. */\n protected providerSession(): EnvDriverSession {\n this.providers ??= resolveEnvDriverSession(this.config);\n return this.providers;\n }\n\n /**\n * The AI provider entry this session's model selector names, memoized until\n * the model changes.\n *\n * Gemini CLI and Qwen Code are `single`-plurality harnesses (§2.3): they\n * address one endpoint, so the bound entry supplies both the credential and\n * the base URL. Resolving through {@link bindSingleProviderEntry} is what\n * puts the surface check — which throws — on the start path.\n */\n protected registryBinding(): RegistryModelBinding | undefined {\n if (this.bindingResolved) return this.boundEntry;\n const binding = bindSingleProviderEntry(\n this.driverInfo.id,\n this.productName,\n this.providerSession(),\n );\n for (const warning of binding?.warnings ?? []) this.log.warn(warning);\n this.boundEntry = binding;\n this.bindingResolved = true;\n return binding;\n }\n\n /**\n * Fail before the first spawn when the bound entry speaks a surface this\n * harness cannot — the error names the surface.\n */\n override async start(): Promise<void> {\n this.registryBinding();\n await super.start();\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n super.reconfigure(patch);\n if (patch.model !== undefined) {\n this.providers = undefined;\n this.bindingResolved = false;\n }\n }\n\n /** The provider-side model id the harness is actually run with. */\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n}\n\n/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google\n * models only (`surface: google-generative-ai`): the AI provider entry the\n * session's model selector names supplies `GEMINI_API_KEY`, the `-m` model id\n * and — for a non-default endpoint — `GOOGLE_GEMINI_BASE_URL`.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n const model = this.registryBinding()?.providerModelId ?? this.config.model;\n if (model) args.push(\"-m\", model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\", \"GOOGLE_GEMINI_BASE_URL\"]);\n const binding = this.registryBinding();\n if (!binding) return env;\n\n // The entry is the authority: inherited Google carriers are dropped so an\n // ambient key cannot authenticate a session pointed somewhere else.\n delete env.GEMINI_API_KEY;\n delete env.GOOGLE_API_KEY;\n delete env.GOOGLE_GEMINI_BASE_URL;\n const key = entryCredentialValue(binding.providerId, binding.entry, {\n env: this.providerSession().lookupEnv,\n });\n if (key) env.GEMINI_API_KEY = key;\n // Only a non-default endpoint is worth naming: Gemini CLI reads\n // GOOGLE_GEMINI_BASE_URL as an override of its own default host.\n if (binding.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL) {\n env.GOOGLE_GEMINI_BASE_URL = binding.baseUrl;\n }\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n /**\n * Discovery runs against the bound entry: its credential and, for a\n * non-default endpoint, its base URL. Without an entry the ambient\n * `GEMINI_API_KEY` is the last resort, and an unreachable API falls back to\n * the static Google catalog.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const session = this.providerSession();\n const binding = resolveRegistryBinding(session);\n const key = binding\n ? entryCredentialValue(binding.providerId, binding.entry, { env: session.lookupEnv })\n : session.lookupEnv.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\n \"google\",\n key,\n binding?.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL\n ? { baseUrl: binding.baseUrl }\n : {},\n );\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (registry, options) =>\n new GeminiDriver({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryDriverConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,9 +1,9 @@
1
- import { getStoreManifestsDir } from './chunk-BR2IXOWX.js';
2
- import { deployAll, removeAsset, createScaffold } from './chunk-HL6SZ7Z3.js';
3
- import { resolveLibraryDir, writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-WPISSDEI.js';
4
- import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-5RHPNNWP.js';
5
- import { deployedBase, isDeployed, deployedDir } from './chunk-F3HNW354.js';
6
- import { loadMcpServerDeclarations, globalSkaileDir, resolveGlobalBackends, globalCacheRoot, migrateLegacyDir, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, coerceVersion, matchPin, resolveAll, buildProvenanceIndex, ensureRepo, sourceShortName, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, readLinks, storeManifestSlug } from './chunk-DF7C3KZK.js';
1
+ import { getStoreManifestsDir } from './chunk-DOF77WEV.js';
2
+ import { deployAll, removeAsset, createScaffold } from './chunk-5YXKEM7Q.js';
3
+ import { resolveLibraryDir, writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-3ELIPWCH.js';
4
+ import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-JRIU5GA7.js';
5
+ import { deployedBase, isDeployed, deployedDir } from './chunk-KIFJWSNC.js';
6
+ import { loadMcpServerDeclarations, globalSkaileDir, resolveGlobalHarnesses, globalCacheRoot, migrateLegacyDir, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, coerceVersion, matchPin, resolveAll, buildProvenanceIndex, ensureRepo, sourceShortName, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, readLinks, storeManifestSlug } from './chunk-LRCSWOZO.js';
7
7
  import { scanDirectory, parseRequires } from './chunk-2FBPAR2V.js';
8
8
  import { parseAssetRef, slugifyAssetName, assetRefToStr } from './chunk-GEEW6SY2.js';
9
9
  import { appendHistory, getRecentHistory, clearHistory } from './chunk-KTBKW2FI.js';
@@ -381,8 +381,8 @@ var AssetManager = class {
381
381
  driverTarget;
382
382
  /** Whether this instance operates in global-install mode. */
383
383
  global;
384
- /** Explicit global-backend override (global mode only); else auto-resolved. */
385
- backendsOverride;
384
+ /** Explicit global-harness override (global mode only); else auto-resolved. */
385
+ harnessesOverride;
386
386
  /** Injected catalog fetcher (tests / custom); falls back to a built one. */
387
387
  injectedStoreFetcher;
388
388
  /** Injected byte fetcher for store staging; falls back to GitHub. */
@@ -395,7 +395,7 @@ var AssetManager = class {
395
395
  this.projectDir = resolve(opts.projectDir);
396
396
  this.driverTarget = opts.driverTarget ?? "claude-code";
397
397
  this.global = opts.global ?? false;
398
- this.backendsOverride = opts.backends;
398
+ this.harnessesOverride = opts.harnesses ?? opts.backends;
399
399
  this.injectedStoreFetcher = opts.storeFetcher;
400
400
  this.injectedAssetFetcher = opts.assetFetcher;
401
401
  this.catalogUrlOverride = opts.catalogUrl;
@@ -403,22 +403,22 @@ var AssetManager = class {
403
403
  }
404
404
  /**
405
405
  * Root for this manager's **state** — config SSOT, lock, cache, history.
406
- * `~/.skaile` in global mode (the cross-backend SSOT), else the project dir.
406
+ * `~/.skaile` in global mode (the cross-harness SSOT), else the project dir.
407
407
  * Deploy dirs are unaffected; they come from `DRIVER_TARGETS[target]`.
408
408
  */
409
409
  get stateRoot() {
410
410
  return this.global ? globalSkaileDir() : this.projectDir;
411
411
  }
412
412
  /**
413
- * The backends a global deploy fans out to: the explicit `backends` override
414
- * (a `--backend` filter), else `resolveGlobalBackends()`. In project mode this
413
+ * The harnesses a global deploy fans out to: the explicit `harnesses` override
414
+ * (a `--harness` filter), else `resolveGlobalHarnesses()`. In project mode this
415
415
  * is exactly `[driverTarget]`, so the shared fan-out loop degenerates to the
416
416
  * single-target path.
417
417
  */
418
- targetBackends() {
418
+ targetHarnesses() {
419
419
  if (!this.global) return [this.driverTarget];
420
- if (this.backendsOverride && this.backendsOverride.length > 0) return this.backendsOverride;
421
- return resolveGlobalBackends();
420
+ if (this.harnessesOverride && this.harnessesOverride.length > 0) return this.harnessesOverride;
421
+ return resolveGlobalHarnesses();
422
422
  }
423
423
  get storeCacheDir() {
424
424
  if (this.global) return join(globalCacheRoot(), "store");
@@ -448,7 +448,7 @@ var AssetManager = class {
448
448
  get patchDir() {
449
449
  return join(this.projectDir, ".skaile", "patches");
450
450
  }
451
- /** Deploy options for one backend. In global mode, `driverTarget` is the
451
+ /** Deploy options for one harness. In global mode, `driverTarget` is the
452
452
  * fan-out target (not the constructor's `driverTarget`, which is project-only). */
453
453
  deployOptsFor(target, link) {
454
454
  return { driverTarget: target, global: this.global, cwd: this.projectDir, link: link === true };
@@ -841,7 +841,7 @@ var AssetManager = class {
841
841
  const entries = [...await this.buildCatalogEntries(resolved, repositories), ...lib.entries];
842
842
  const deployed = [
843
843
  ...new Set(
844
- this.targetBackends().flatMap(
844
+ this.targetHarnesses().flatMap(
845
845
  (t) => deployAll(entries, repositories, patches, this.deployOptsFor(t, opts?.link))
846
846
  )
847
847
  )
@@ -913,7 +913,7 @@ var AssetManager = class {
913
913
  if (!resolvedRefs.has(ref)) {
914
914
  const { kind, name } = parseCanonicalLockKey(ref);
915
915
  if (kind && name) {
916
- for (const t of this.targetBackends()) removeAsset(kind, name, this.deployOptsFor(t));
916
+ for (const t of this.targetHarnesses()) removeAsset(kind, name, this.deployOptsFor(t));
917
917
  removed.push(ref);
918
918
  } else {
919
919
  console.warn(`skaile: cannot reconcile unparseable lock key "${ref}" \u2014 left in place.`);
@@ -1069,7 +1069,7 @@ var AssetManager = class {
1069
1069
  }
1070
1070
  const deployed = [
1071
1071
  ...new Set(
1072
- this.targetBackends().flatMap(
1072
+ this.targetHarnesses().flatMap(
1073
1073
  (t) => deployAll(resolved, repositories, patches, this.deployOptsFor(t))
1074
1074
  )
1075
1075
  )
@@ -1112,7 +1112,7 @@ var AssetManager = class {
1112
1112
  const entries = [...await this.buildCatalogEntries(resolved, repositories), ...lib.entries];
1113
1113
  const deployed = [
1114
1114
  ...new Set(
1115
- this.targetBackends().flatMap(
1115
+ this.targetHarnesses().flatMap(
1116
1116
  (t) => deployAll(entries, repositories, patches, this.deployOptsFor(t, opts?.link))
1117
1117
  )
1118
1118
  )
@@ -1353,7 +1353,7 @@ var AssetManager = class {
1353
1353
  remove(ref) {
1354
1354
  const parsed = parseAssetRef(ref);
1355
1355
  let ok = false;
1356
- for (const t of this.targetBackends()) {
1356
+ for (const t of this.targetHarnesses()) {
1357
1357
  if (removeAsset(parsed.kind, parsed.name, this.deployOptsFor(t))) ok = true;
1358
1358
  }
1359
1359
  if (ok) {
@@ -1576,10 +1576,10 @@ var AssetManager = class {
1576
1576
  return out;
1577
1577
  }
1578
1578
  /**
1579
- * Per-backend reconciliation of the **global** declared deps
1580
- * (`~/.skaile/skaile.yaml`) against each global backend's deploy dir. The
1579
+ * Per-harness reconciliation of the **global** declared deps
1580
+ * (`~/.skaile/skaile.yaml`) against each global harness's deploy dir. The
1581
1581
  * global twin of {@link listDeclared}: the same `declared` / `installed` /
1582
- * `drift` / `invalid` vocabulary, but one row **per (ref, backend)** so an
1582
+ * `drift` / `invalid` vocabulary, but one row **per (ref, harness)** so an
1583
1583
  * asset can be `installed` for `claude-code` and `drift`/`declared` for
1584
1584
  * `codex` at once.
1585
1585
  *
@@ -1587,17 +1587,18 @@ var AssetManager = class {
1587
1587
  * the manager with `global: true`. Unlike `listDeclared`, a missing SSOT is
1588
1588
  * **not** an error: it yields an empty list (a fresh machine has no globals).
1589
1589
  *
1590
- * @param opts.backend - Reconcile against this one backend only (the
1591
- * `--backend` filter); omit for every backend in {@link targetBackends}.
1590
+ * @param opts.harness - Reconcile against this one harness only (the
1591
+ * `--harness` filter); omit for every harness in {@link targetHarnesses}.
1592
1592
  * @param opts.kind - Filter by asset kind.
1593
- * @returns One {@link BackendDeclaredAsset} per declared dep × backend.
1593
+ * @returns One {@link HarnessDeclaredAsset} per declared dep × harness.
1594
1594
  * @throws {Error} on legacy keys in `~/.skaile/skaile.yaml` (migration hint).
1595
1595
  */
1596
1596
  globalState(opts) {
1597
1597
  const dependencies = resolveGlobalSkWorkspaceConfig().dependencies ?? [];
1598
1598
  const lock = this.tryReadLock();
1599
1599
  const lockKeys = lock ? Object.keys(lock.assets).map(parseCanonicalLockKey) : [];
1600
- const backends = opts?.backend ? [opts.backend] : this.targetBackends();
1600
+ const harnessFilter = opts?.harness ?? opts?.backend;
1601
+ const harnesses = harnessFilter ? [harnessFilter] : this.targetHarnesses();
1601
1602
  const out = [];
1602
1603
  for (const ref of dependencies) {
1603
1604
  let parsed;
@@ -1605,8 +1606,8 @@ var AssetManager = class {
1605
1606
  parsed = parseAssetRef(ref);
1606
1607
  } catch {
1607
1608
  if (!opts?.kind) {
1608
- for (const backend of backends)
1609
- out.push({ ref, kind: "", name: ref, state: "invalid", backend });
1609
+ for (const harness of harnesses)
1610
+ out.push({ ref, kind: "", name: ref, state: "invalid", harness });
1610
1611
  }
1611
1612
  continue;
1612
1613
  }
@@ -1614,17 +1615,17 @@ var AssetManager = class {
1614
1615
  const locked = lockKeys.some(
1615
1616
  (k) => k.kind === parsed.kind && k.name === parsed.name && (!parsed.publisher || k.publisher === parsed.publisher)
1616
1617
  );
1617
- for (const backend of backends) {
1618
+ for (const harness of harnesses) {
1618
1619
  let state;
1619
1620
  if (!locked) {
1620
1621
  state = "declared";
1621
1622
  } else if (NON_DEPLOYABLE_KINDS.has(parsed.kind)) {
1622
1623
  state = "installed";
1623
1624
  } else {
1624
- const onDisk = isDeployed(parsed.kind, parsed.name, backend, true);
1625
+ const onDisk = isDeployed(parsed.kind, parsed.name, harness, true);
1625
1626
  state = onDisk ? "installed" : "drift";
1626
1627
  }
1627
- out.push({ ref, kind: parsed.kind, name: parsed.name, state, backend });
1628
+ out.push({ ref, kind: parsed.kind, name: parsed.name, state, harness });
1628
1629
  }
1629
1630
  }
1630
1631
  return out;
@@ -2096,5 +2097,5 @@ var AssetManager = class {
2096
2097
  };
2097
2098
 
2098
2099
  export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, NON_DEPLOYABLE_KINDS, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName };
2099
- //# sourceMappingURL=chunk-G3N2ZCOJ.js.map
2100
- //# sourceMappingURL=chunk-G3N2ZCOJ.js.map
2100
+ //# sourceMappingURL=chunk-RR4PJZLK.js.map
2101
+ //# sourceMappingURL=chunk-RR4PJZLK.js.map