@skaile/workspaces 4.6.0 → 4.7.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 (182) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{asset-feeds-3XUEJHLJ.js → asset-feeds-CV7EE4GI.js} +7 -7
  3. package/dist/{asset-feeds-3XUEJHLJ.js.map → asset-feeds-CV7EE4GI.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/bridge/codex-app-server.js +4 -4
  8. package/dist/bridge/drivers/claude-sdk.js +52 -9
  9. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  10. package/dist/bridge/drivers/codex.js +6 -6
  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 +4 -4
  14. package/dist/bridge/drivers/goose.js +6 -6
  15. package/dist/bridge/drivers/omp.js +1 -1
  16. package/dist/bridge/drivers/opencode.js +6 -6
  17. package/dist/bridge/drivers/qwen.js +4 -4
  18. package/dist/bridge/index.js +6 -6
  19. package/dist/bridge/src/drivers/claude-sdk.d.ts +16 -0
  20. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  21. package/dist/{chunk-YNZ5FIFH.js → chunk-4AAEBUX7.js} +7 -7
  22. package/dist/{chunk-YNZ5FIFH.js.map → chunk-4AAEBUX7.js.map} +1 -1
  23. package/dist/{chunk-JXCUUZA3.js → chunk-4ZTPYIBE.js} +9 -6
  24. package/dist/chunk-4ZTPYIBE.js.map +1 -0
  25. package/dist/{chunk-KMFZVPYR.js → chunk-5GYFYGVW.js} +2 -2
  26. package/dist/{chunk-KMFZVPYR.js.map → chunk-5GYFYGVW.js.map} +1 -1
  27. package/dist/{chunk-2HZJKDLG.js → chunk-7UM46L33.js} +2 -2
  28. package/dist/{chunk-2HZJKDLG.js.map → chunk-7UM46L33.js.map} +1 -1
  29. package/dist/{chunk-EVVE4SL4.js → chunk-A42QGGSB.js} +3 -3
  30. package/dist/{chunk-EVVE4SL4.js.map → chunk-A42QGGSB.js.map} +1 -1
  31. package/dist/{chunk-UJPVUN6H.js → chunk-BCXZ74DM.js} +4 -4
  32. package/dist/{chunk-UJPVUN6H.js.map → chunk-BCXZ74DM.js.map} +1 -1
  33. package/dist/{chunk-PTETBRRC.js → chunk-DS7B54NF.js} +3 -3
  34. package/dist/{chunk-PTETBRRC.js.map → chunk-DS7B54NF.js.map} +1 -1
  35. package/dist/{chunk-KW7YIRYL.js → chunk-DYT3AQBM.js} +44 -4
  36. package/dist/chunk-DYT3AQBM.js.map +1 -0
  37. package/dist/{chunk-6ZQU5WKJ.js → chunk-HBBVWZ4T.js} +4 -4
  38. package/dist/{chunk-6ZQU5WKJ.js.map → chunk-HBBVWZ4T.js.map} +1 -1
  39. package/dist/{chunk-K27T47OO.js → chunk-HKOC273F.js} +71 -5
  40. package/dist/chunk-HKOC273F.js.map +1 -0
  41. package/dist/{chunk-COK4WPU4.js → chunk-HR2AGPLJ.js} +4 -4
  42. package/dist/{chunk-COK4WPU4.js.map → chunk-HR2AGPLJ.js.map} +1 -1
  43. package/dist/{chunk-SAXTWLXZ.js → chunk-HVTU3CVF.js} +187 -48
  44. package/dist/chunk-HVTU3CVF.js.map +1 -0
  45. package/dist/{chunk-W3YYB7K7.js → chunk-IECSLI55.js} +3 -3
  46. package/dist/{chunk-W3YYB7K7.js.map → chunk-IECSLI55.js.map} +1 -1
  47. package/dist/{chunk-QVTROHEZ.js → chunk-IUVPPJ4T.js} +3 -3
  48. package/dist/{chunk-QVTROHEZ.js.map → chunk-IUVPPJ4T.js.map} +1 -1
  49. package/dist/{chunk-35XUCUKZ.js → chunk-J2NEKEZK.js} +3 -3
  50. package/dist/{chunk-35XUCUKZ.js.map → chunk-J2NEKEZK.js.map} +1 -1
  51. package/dist/{chunk-DXXIALYF.js → chunk-JH63TVZG.js} +5 -5
  52. package/dist/{chunk-DXXIALYF.js.map → chunk-JH63TVZG.js.map} +1 -1
  53. package/dist/{chunk-WVSF3IEQ.js → chunk-JWWER4L5.js} +2 -2
  54. package/dist/{chunk-WVSF3IEQ.js.map → chunk-JWWER4L5.js.map} +1 -1
  55. package/dist/{chunk-63PBQN5U.js → chunk-MHROUPZN.js} +9 -9
  56. package/dist/{chunk-63PBQN5U.js.map → chunk-MHROUPZN.js.map} +1 -1
  57. package/dist/{chunk-NWZQMJTI.js → chunk-NIHNZC6E.js} +3 -3
  58. package/dist/{chunk-NWZQMJTI.js.map → chunk-NIHNZC6E.js.map} +1 -1
  59. package/dist/{chunk-VZOUBMM4.js → chunk-NV6R6HJR.js} +5 -5
  60. package/dist/{chunk-VZOUBMM4.js.map → chunk-NV6R6HJR.js.map} +1 -1
  61. package/dist/{chunk-TRGMQUAZ.js → chunk-NYRLSXTB.js} +66 -47
  62. package/dist/chunk-NYRLSXTB.js.map +1 -0
  63. package/dist/{chunk-D3332IMQ.js → chunk-P2PXD3AF.js} +6 -6
  64. package/dist/{chunk-D3332IMQ.js.map → chunk-P2PXD3AF.js.map} +1 -1
  65. package/dist/{chunk-CU32AWH5.js → chunk-Q5WGUPC5.js} +3 -3
  66. package/dist/{chunk-CU32AWH5.js.map → chunk-Q5WGUPC5.js.map} +1 -1
  67. package/dist/{chunk-ZGYPEVZW.js → chunk-RN3N7PHY.js} +5 -5
  68. package/dist/{chunk-ZGYPEVZW.js.map → chunk-RN3N7PHY.js.map} +1 -1
  69. package/dist/{chunk-5CDL6VZQ.js → chunk-S5TEP5WI.js} +7 -7
  70. package/dist/{chunk-5CDL6VZQ.js.map → chunk-S5TEP5WI.js.map} +1 -1
  71. package/dist/{chunk-REILIKVM.js → chunk-SU5LVG6T.js} +3 -3
  72. package/dist/{chunk-REILIKVM.js.map → chunk-SU5LVG6T.js.map} +1 -1
  73. package/dist/{chunk-23BTREZQ.js → chunk-TKHJXUG3.js} +4 -4
  74. package/dist/{chunk-23BTREZQ.js.map → chunk-TKHJXUG3.js.map} +1 -1
  75. package/dist/{chunk-V7SHQXDI.js → chunk-U4LC6PLI.js} +3 -3
  76. package/dist/{chunk-V7SHQXDI.js.map → chunk-U4LC6PLI.js.map} +1 -1
  77. package/dist/{chunk-YSJKLJD4.js → chunk-VRBEMXEM.js} +3 -3
  78. package/dist/{chunk-YSJKLJD4.js.map → chunk-VRBEMXEM.js.map} +1 -1
  79. package/dist/{chunk-2CFREMKM.js → chunk-XENB453B.js} +4 -4
  80. package/dist/{chunk-2CFREMKM.js.map → chunk-XENB453B.js.map} +1 -1
  81. package/dist/cli/index.js +50 -50
  82. package/dist/connectors/config.js +4 -4
  83. package/dist/connectors/index.js +9 -9
  84. package/dist/connectors/src/config.d.ts.map +1 -1
  85. package/dist/connectors/src/connector-manager.d.ts +9 -0
  86. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  87. package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
  88. package/dist/connectors/src/connector-types.d.ts +25 -0
  89. package/dist/connectors/src/connector-types.d.ts.map +1 -1
  90. package/dist/connectors/src/index.d.ts +2 -2
  91. package/dist/connectors/src/index.d.ts.map +1 -1
  92. package/dist/core/index.js +3 -3
  93. package/dist/core/runtime-assets.js +2 -2
  94. package/dist/core/src/index.d.ts +1 -1
  95. package/dist/core/src/index.d.ts.map +1 -1
  96. package/dist/core/src/workspace-config.d.ts +64 -0
  97. package/dist/core/src/workspace-config.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-MFQDQPYL.js → ensure-sources-E5C3NAZ5.js} +9 -9
  101. package/dist/{ensure-sources-MFQDQPYL.js.map → ensure-sources-E5C3NAZ5.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-X4KJC4RH.js → flows-DAA2HPCK.js} +6 -6
  126. package/dist/{flows-X4KJC4RH.js.map → flows-DAA2HPCK.js.map} +1 -1
  127. package/dist/{helpers-VQLLQ6HB.js → helpers-B37XGJHI.js} +9 -9
  128. package/dist/{helpers-VQLLQ6HB.js.map → helpers-B37XGJHI.js.map} +1 -1
  129. package/dist/library/index.js +4 -4
  130. package/dist/library/install.js +3 -3
  131. package/dist/{library-publish-73SFVNCE.js → library-publish-ANMJDDZH.js} +13 -13
  132. package/dist/{library-publish-73SFVNCE.js.map → library-publish-ANMJDDZH.js.map} +1 -1
  133. package/dist/{open-library-QGTUQMUG.js → open-library-O5HS654Y.js} +11 -11
  134. package/dist/{open-library-QGTUQMUG.js.map → open-library-O5HS654Y.js.map} +1 -1
  135. package/dist/{paths-FRD62K2N.js → paths-LH7LD4CC.js} +6 -6
  136. package/dist/{paths-FRD62K2N.js.map → paths-LH7LD4CC.js.map} +1 -1
  137. package/dist/{plugin-store-54SEASTK.js → plugin-store-A6VLQHCT.js} +5 -5
  138. package/dist/{plugin-store-54SEASTK.js.map → plugin-store-A6VLQHCT.js.map} +1 -1
  139. package/dist/{project-LWS5PYIF.js → project-DLAPSJ36.js} +10 -10
  140. package/dist/{project-LWS5PYIF.js.map → project-DLAPSJ36.js.map} +1 -1
  141. package/dist/resolver/index.js +3 -3
  142. package/dist/runner/index.js +15 -15
  143. package/dist/runner/src/runner-capabilities.d.ts +33 -2
  144. package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
  145. package/dist/runner/src/serial-lock.d.ts +17 -0
  146. package/dist/runner/src/serial-lock.d.ts.map +1 -0
  147. package/dist/runner/src/serve.d.ts.map +1 -1
  148. package/dist/runner/src/session-capability-wiring.d.ts +5 -0
  149. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  150. package/dist/runner/src/session-resource-handlers.d.ts.map +1 -1
  151. package/dist/runner/src/skill-staging.d.ts +76 -0
  152. package/dist/runner/src/skill-staging.d.ts.map +1 -0
  153. package/dist/sdk/asset-manager.js +6 -6
  154. package/dist/sdk/bridge.js +6 -6
  155. package/dist/sdk/core.js +3 -3
  156. package/dist/sdk/flow.js +4 -4
  157. package/dist/sdk/index.js +15 -15
  158. package/dist/sdk/resolver.js +3 -3
  159. package/dist/sdk/runner.js +15 -15
  160. package/dist/{setup-EOJWDJK2.js → setup-TMPJSDCX.js} +13 -13
  161. package/dist/{setup-EOJWDJK2.js.map → setup-TMPJSDCX.js.map} +1 -1
  162. package/dist/{skills-C6NOMIBV.js → skills-ZO66BL2Y.js} +5 -5
  163. package/dist/{skills-C6NOMIBV.js.map → skills-ZO66BL2Y.js.map} +1 -1
  164. package/dist/{source-Q5IIYTRA.js → source-5WMBWNO7.js} +12 -12
  165. package/dist/{source-Q5IIYTRA.js.map → source-5WMBWNO7.js.map} +1 -1
  166. package/dist/{source-manifest-publish-Z3WC4HA2.js → source-manifest-publish-WBVQV3JC.js} +14 -14
  167. package/dist/{source-manifest-publish-Z3WC4HA2.js.map → source-manifest-publish-WBVQV3JC.js.map} +1 -1
  168. package/dist/tui/index.js +15 -15
  169. package/dist/validator-FA2PFW6N.js +5 -0
  170. package/dist/{validator-P5ESKTW5.js.map → validator-FA2PFW6N.js.map} +1 -1
  171. package/dist/workspace-plugin/adapters/mcp.js +6 -6
  172. package/dist/workspace-plugin/adapters/omp.js +10 -10
  173. package/dist/workspace-plugin/index.js +1 -1
  174. package/dist/workspace-plugin/src/tools/validator.d.ts +1 -0
  175. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  176. package/package.json +1 -1
  177. package/dist/chunk-JXCUUZA3.js.map +0 -1
  178. package/dist/chunk-K27T47OO.js.map +0 -1
  179. package/dist/chunk-KW7YIRYL.js.map +0 -1
  180. package/dist/chunk-SAXTWLXZ.js.map +0 -1
  181. package/dist/chunk-TRGMQUAZ.js.map +0 -1
  182. package/dist/validator-P5ESKTW5.js +0 -5
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, extractText, extractCost, extractTokens, resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-CU32AWH5.js';
2
- import { getStaticModels, fetchProviderModels } from './chunk-QVTROHEZ.js';
3
- import { getProviderPreset, BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from './chunk-KMFZVPYR.js';
1
+ import { SubprocessCliDriver, extractText, extractCost, extractTokens, resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-Q5WGUPC5.js';
2
+ import { getStaticModels, fetchProviderModels } from './chunk-IUVPPJ4T.js';
3
+ import { getProviderPreset, BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from './chunk-5GYFYGVW.js';
4
4
  import * as z from 'zod';
5
5
 
6
6
  var GOOGLE_DEFAULT_BASE_URL = getProviderPreset("google")?.base_url;
@@ -183,5 +183,5 @@ var geminiDriverTarget = {
183
183
  };
184
184
 
185
185
  export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget };
186
- //# sourceMappingURL=chunk-VZOUBMM4.js.map
187
- //# sourceMappingURL=chunk-VZOUBMM4.js.map
186
+ //# sourceMappingURL=chunk-NV6R6HJR.js.map
187
+ //# sourceMappingURL=chunk-NV6R6HJR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-VZOUBMM4.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-NV6R6HJR.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,17 +1,17 @@
1
1
  import { declaredConnectErrorKind, ClassifiedConnectError, withConnectErrorKind } from './chunk-SDNGG6FB.js';
2
- import { OAuthRequiredError, LegacyAuthGrammarError, resolveAuthRef } from './chunk-KW7YIRYL.js';
3
- import { EventNormalizer } from './chunk-V7SHQXDI.js';
4
- import { resolveModelTier } from './chunk-QVTROHEZ.js';
5
- import { createDriver } from './chunk-KMFZVPYR.js';
2
+ import { OAuthRequiredError, ConnectorFieldMissingError, LegacyAuthGrammarError, resolveAuthRef, readUnavailableMarker, ConnectorStartupError } from './chunk-DYT3AQBM.js';
3
+ import { EventNormalizer } from './chunk-U4LC6PLI.js';
4
+ import { resolveModelTier } from './chunk-IUVPPJ4T.js';
5
+ import { createDriver } from './chunk-5GYFYGVW.js';
6
6
  import { pluginRegistry } from './chunk-6E6PKKAD.js';
7
7
  import { computeStimulus } from './chunk-IFGTRL2I.js';
8
- import { interpolateNodeInstruction, resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-NWZQMJTI.js';
8
+ import { interpolateNodeInstruction, resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-NIHNZC6E.js';
9
9
  import { INPUT_SCHEMA_SHAPES_HINT, coerceInputSchema } from './chunk-TIOT3ZOQ.js';
10
10
  import { classifierDecision, withoutReservedClassifierFields, parseFlowDefinition } from './chunk-53ORCYPJ.js';
11
11
  import { describeStimulus, buildOrchestratorPrompt, renderSubpromptPrompt, renderStimulusPrompt } from './chunk-2D5BYAL6.js';
12
12
  import { deterministicNodeKindLabel, nodeInstruction, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, isRouterNode, isActiveRuntimeNode, nodeIsOptional, nodeLabel, nodeAssets } from './chunk-ELPR5XBG.js';
13
13
  import { withActivityLabelDefs } from './chunk-QAH24E5U.js';
14
- import { processAlive } from './chunk-UJPVUN6H.js';
14
+ import { processAlive } from './chunk-BCXZ74DM.js';
15
15
  import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-MKZOK4JU.js';
16
16
  import { portableSpawn } from './chunk-KSIRR5PL.js';
17
17
  import { createLogger } from './chunk-W4IPN3DD.js';
@@ -736,34 +736,6 @@ function runIsolatedPrompt(driver, prompt) {
736
736
  });
737
737
  }
738
738
 
739
- // connectors/src/connector-types.ts
740
- var ConnectorFieldMissingError = class extends Error {
741
- connectorId;
742
- field;
743
- triedRef;
744
- availableProviders;
745
- constructor(opts) {
746
- super(
747
- `Connector "${opts.connectorId}" is missing required field "${opts.field.key}" (tried: ${opts.triedRef || "(none)"}). Available providers: ${opts.availableProviders.join(", ") || "(none)"}`
748
- );
749
- this.name = "ConnectorFieldMissingError";
750
- this.connectorId = opts.connectorId;
751
- this.field = opts.field;
752
- this.triedRef = opts.triedRef;
753
- this.availableProviders = opts.availableProviders;
754
- }
755
- };
756
- var ConnectorStartupError = class extends Error {
757
- report;
758
- failedReadWrite;
759
- constructor(message, report, failedReadWrite) {
760
- super(message);
761
- this.name = "ConnectorStartupError";
762
- this.report = report;
763
- this.failedReadWrite = failedReadWrite;
764
- }
765
- };
766
-
767
739
  // connectors/src/classify-connect-error.ts
768
740
  function classifyConnectError(err) {
769
741
  const declared = declaredConnectErrorKind(err);
@@ -6587,7 +6559,7 @@ var ConnectorManager = class {
6587
6559
  * Remember a connect failure so the agent can be told about it. Called from
6588
6560
  * both the bulk (`attemptConnect`) and hot-plug (`connect`) failure paths.
6589
6561
  */
6590
- recordFailure(decl, error) {
6562
+ recordFailure(decl, error, unavailable) {
6591
6563
  if (this.active.has(decl.id)) return;
6592
6564
  let mountPath;
6593
6565
  if (decl.mount != null) {
@@ -6603,9 +6575,29 @@ var ConnectorManager = class {
6603
6575
  ...decl.label !== void 0 ? { label: decl.label } : {},
6604
6576
  ...decl.mount?.source !== void 0 ? { source: decl.mount.source } : {},
6605
6577
  ...mountPath !== void 0 ? { mountPath } : {},
6606
- required: decl.access === "read-write" && decl.mount != null,
6607
- error
6578
+ // A host-declared unavailable connector is never fail-fast material.
6579
+ required: unavailable === void 0 && decl.access === "read-write" && decl.mount != null,
6580
+ error,
6581
+ ...unavailable !== void 0 ? { unavailable } : {}
6582
+ });
6583
+ }
6584
+ /**
6585
+ * Record a host-declared unavailable connector as failed without touching its
6586
+ * driver or mount target. Returns the failure message.
6587
+ *
6588
+ * No `connector_status` is emitted: the host that wrote the marker already
6589
+ * holds this failure with its own typed reason, and an echoed event would be
6590
+ * newer than that record and replace it in a host's newest-wins failure view.
6591
+ */
6592
+ recordUnavailable(decl, unavailable) {
6593
+ const msg = `Not attached by the host (${unavailable.reason})` + (unavailable.detail ? `: ${unavailable.detail}` : "");
6594
+ this.recordFailure(decl, msg, unavailable);
6595
+ this.mgrLog.warn("connector declared unavailable by the host", {
6596
+ id: decl.id,
6597
+ driver: decl.driver,
6598
+ reason: unavailable.reason
6608
6599
  });
6600
+ return msg;
6609
6601
  }
6610
6602
  /** Release every mount target owned by `id` (on disconnect). */
6611
6603
  releaseMountTarget(id) {
@@ -6687,7 +6679,7 @@ var ConnectorManager = class {
6687
6679
  const claimed = [];
6688
6680
  try {
6689
6681
  for (const decl of declarations) {
6690
- if (decl.mount == null) continue;
6682
+ if (decl.mount == null || readUnavailableMarker(decl.unavailable)) continue;
6691
6683
  const absPath = this.resolveMountTarget(decl);
6692
6684
  const isNew = !this.mountTargets.has(absPath);
6693
6685
  this.reserveMountTarget(decl.id, absPath);
@@ -6708,9 +6700,10 @@ var ConnectorManager = class {
6708
6700
  });
6709
6701
  if (options?.failOnReadWriteError) {
6710
6702
  const declById = new Map(declarations.map((d) => [d.id, d]));
6711
- const failedRw = results.filter(
6712
- (r) => !r.connected && r.access === "read-write" && declById.get(r.id)?.mount != null
6713
- ).map((r) => ({ id: r.id, error: r.error ?? "unknown error" }));
6703
+ const failedRw = results.filter((r) => {
6704
+ const decl = declById.get(r.id);
6705
+ return !r.connected && r.access === "read-write" && decl?.mount != null && !readUnavailableMarker(decl.unavailable);
6706
+ }).map((r) => ({ id: r.id, error: r.error ?? "unknown error" }));
6714
6707
  if (failedRw.length > 0) {
6715
6708
  const summary = failedRw.map((f) => `"${f.id}": ${f.error}`).join("; ");
6716
6709
  this.mgrLog.error("connectAll failed: required read-write connector(s) failed", void 0, {
@@ -6731,6 +6724,11 @@ var ConnectorManager = class {
6731
6724
  * can keep going.
6732
6725
  */
6733
6726
  async attemptConnect(decl, preResolved) {
6727
+ const unavailable = readUnavailableMarker(decl.unavailable);
6728
+ if (unavailable) {
6729
+ const msg = this.recordUnavailable(decl, unavailable);
6730
+ return { id: decl.id, connected: false, error: msg, access: decl.access };
6731
+ }
6734
6732
  this.opts.onStatusChange?.({
6735
6733
  type: "connector_status",
6736
6734
  connectorId: decl.id,
@@ -6836,6 +6834,20 @@ var ConnectorManager = class {
6836
6834
  * @returns The `ConnectorHandle` for subsequent operations.
6837
6835
  */
6838
6836
  async connect(declaration) {
6837
+ const unavailable = readUnavailableMarker(declaration.unavailable);
6838
+ if (unavailable) {
6839
+ if (this.active.has(declaration.id)) {
6840
+ try {
6841
+ await this.disconnect(declaration.id);
6842
+ } catch (err) {
6843
+ this.mgrLog.warn("disconnect before marking unavailable failed", {
6844
+ id: declaration.id,
6845
+ error: err instanceof Error ? err.message : String(err)
6846
+ });
6847
+ }
6848
+ }
6849
+ throw new Error(this.recordUnavailable(declaration, unavailable));
6850
+ }
6839
6851
  this.opts.onStatusChange?.({
6840
6852
  type: "connector_status",
6841
6853
  connectorId: declaration.id,
@@ -7604,16 +7616,17 @@ function buildFailedConnectorSection(failed) {
7604
7616
  const lines = [
7605
7617
  "## Mount failures \u2014 read this first",
7606
7618
  "",
7607
- "The following connectors **failed to connect** in this session. Their directories are ordinary local folders: **not** connected, **not** synced, and **not** backend-managed git worktrees. Any other statement in this prompt \u2014 including the host platform's own description of the workspace \u2014 that describes these paths as a managed, synced, or version-controlled workspace **is superseded by this section**.",
7619
+ "The following connectors **failed to connect** in this session. Their directories, where they exist, are ordinary local folders: **not** connected, **not** synced, and **not** backend-managed git worktrees. Any other statement in this prompt \u2014 including the host platform's own description of the workspace \u2014 that describes these paths as a managed, synced, or version-controlled workspace **is superseded by this section**.",
7608
7620
  "",
7609
7621
  "| Mount | Driver | Path | Access | Required | Failure |",
7610
7622
  "|---|---|---|---|---|---|"
7611
7623
  ];
7612
7624
  for (const f of failed) {
7613
- const path = f.mountPath ?? f.source ?? "(no mount)";
7625
+ const where = f.mountPath ?? f.source;
7626
+ const path = where === void 0 ? "`(no mount)`" : f.unavailable !== void 0 ? `\`${where}\` (not created by this declaration \u2014 do not write here)` : `\`${where}\``;
7614
7627
  const required = f.required ? "yes" : "no";
7615
7628
  lines.push(
7616
- `| ${f.id} | ${f.driver} | \`${path}\` | ${f.access} | ${required} | ${oneLine(f.error)} |`
7629
+ `| ${f.id} | ${f.driver} | ${path} | ${f.access} | ${required} | ${oneLine(f.error)} |`
7617
7630
  );
7618
7631
  }
7619
7632
  lines.push("");
@@ -7624,6 +7637,12 @@ function buildFailedConnectorSection(failed) {
7624
7637
  lines.push(
7625
7638
  "**There is nothing to fix inside this workspace.** The credential for a mount is minted by the host platform, not by anything in here and not by any project setting \u2014 there is no credential field to fill in. Report the failure text above verbatim to the user and ask them to reconnect the connector's provider link on the platform, then restart the session. Do not retry the connection yourself; a connector that failed at startup stays failed until the session restarts."
7626
7639
  );
7640
+ if (failed.some((f) => f.unavailable !== void 0)) {
7641
+ lines.push("");
7642
+ lines.push(
7643
+ "**`Not attached by the host`** means the host platform declined the mount before this session started, so no connection was attempted here. The reason and detail are the platform's own: pass them on, since the fix may be the mount's declaration in the platform's settings rather than its credential. Such a mount's directory was **not created by this declaration**, so reading it normally fails with `ENOENT` (a directory left by an earlier, replaced connection may remain). Do not create it or write there: a path inside the primary workspace would put the files into that workspace, where they are synced and committed as if they belonged to it."
7644
+ );
7645
+ }
7627
7646
  if (failed.some((f) => f.driver === "git")) {
7628
7647
  lines.push("");
7629
7648
  lines.push(
@@ -11120,6 +11139,6 @@ function describeFlowOperations() {
11120
11139
  return new FlowAdapter().tools.describeOperations({ access: "read-write" });
11121
11140
  }
11122
11141
 
11123
- export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, MAX_REARM_MS, MIN_REFRESH_DELAY_MS, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NO_ACTIVE_FLOW_ERROR, PortPool, PostgresConnector, REFRESH_LEAD_MS, S3Connector, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, classifierQuestion, classifyConnectError, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, describeFlowOperations, driveOrchestratorTurn, ensureDirMode, ensureFleetMounted, ensureRefreshAttemptStamp, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
11124
- //# sourceMappingURL=chunk-TRGMQUAZ.js.map
11125
- //# sourceMappingURL=chunk-TRGMQUAZ.js.map
11142
+ export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorManager, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, MAX_REARM_MS, MIN_REFRESH_DELAY_MS, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NO_ACTIVE_FLOW_ERROR, PortPool, PostgresConnector, REFRESH_LEAD_MS, S3Connector, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, classifierQuestion, classifyConnectError, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, describeFlowOperations, driveOrchestratorTurn, ensureDirMode, ensureFleetMounted, ensureRefreshAttemptStamp, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
11143
+ //# sourceMappingURL=chunk-NYRLSXTB.js.map
11144
+ //# sourceMappingURL=chunk-NYRLSXTB.js.map