@the-open-engine/zeroshot 6.3.0 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/cli/commands/providers.js +11 -5
  2. package/cli/index.js +83 -17
  3. package/cli/lib/first-run.js +14 -3
  4. package/docker/zeroshot-cluster/Dockerfile +11 -1
  5. package/lib/agent-cli-provider/acp-stdio-runner.d.ts +4 -0
  6. package/lib/agent-cli-provider/acp-stdio-runner.d.ts.map +1 -0
  7. package/lib/agent-cli-provider/acp-stdio-runner.js +259 -0
  8. package/lib/agent-cli-provider/acp-stdio-runner.js.map +1 -0
  9. package/lib/agent-cli-provider/adapters/acp.d.ts +23 -0
  10. package/lib/agent-cli-provider/adapters/acp.d.ts.map +1 -0
  11. package/lib/agent-cli-provider/adapters/acp.js +373 -0
  12. package/lib/agent-cli-provider/adapters/acp.js.map +1 -0
  13. package/lib/agent-cli-provider/adapters/claude.d.ts.map +1 -1
  14. package/lib/agent-cli-provider/adapters/claude.js +2 -29
  15. package/lib/agent-cli-provider/adapters/claude.js.map +1 -1
  16. package/lib/agent-cli-provider/adapters/copilot-parser.d.ts +3 -0
  17. package/lib/agent-cli-provider/adapters/copilot-parser.d.ts.map +1 -0
  18. package/lib/agent-cli-provider/adapters/copilot-parser.js +154 -0
  19. package/lib/agent-cli-provider/adapters/copilot-parser.js.map +1 -0
  20. package/lib/agent-cli-provider/adapters/copilot.d.ts +3 -0
  21. package/lib/agent-cli-provider/adapters/copilot.d.ts.map +1 -0
  22. package/lib/agent-cli-provider/adapters/copilot.js +176 -0
  23. package/lib/agent-cli-provider/adapters/copilot.js.map +1 -0
  24. package/lib/agent-cli-provider/adapters/gateway.d.ts +6 -0
  25. package/lib/agent-cli-provider/adapters/gateway.d.ts.map +1 -0
  26. package/lib/agent-cli-provider/adapters/gateway.js +161 -0
  27. package/lib/agent-cli-provider/adapters/gateway.js.map +1 -0
  28. package/lib/agent-cli-provider/adapters/gemini.d.ts.map +1 -1
  29. package/lib/agent-cli-provider/adapters/gemini.js +9 -2
  30. package/lib/agent-cli-provider/adapters/gemini.js.map +1 -1
  31. package/lib/agent-cli-provider/adapters/index.d.ts.map +1 -1
  32. package/lib/agent-cli-provider/adapters/index.js +6 -34
  33. package/lib/agent-cli-provider/adapters/index.js.map +1 -1
  34. package/lib/agent-cli-provider/adapters/opencode.d.ts.map +1 -1
  35. package/lib/agent-cli-provider/adapters/opencode.js +5 -1
  36. package/lib/agent-cli-provider/adapters/opencode.js.map +1 -1
  37. package/lib/agent-cli-provider/adapters/pi.d.ts +3 -0
  38. package/lib/agent-cli-provider/adapters/pi.d.ts.map +1 -0
  39. package/lib/agent-cli-provider/adapters/pi.js +331 -0
  40. package/lib/agent-cli-provider/adapters/pi.js.map +1 -0
  41. package/lib/agent-cli-provider/claude-command.d.ts +6 -0
  42. package/lib/agent-cli-provider/claude-command.d.ts.map +1 -0
  43. package/lib/agent-cli-provider/claude-command.js +43 -0
  44. package/lib/agent-cli-provider/claude-command.js.map +1 -0
  45. package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -1
  46. package/lib/agent-cli-provider/contract-actions.js +13 -17
  47. package/lib/agent-cli-provider/contract-actions.js.map +1 -1
  48. package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -1
  49. package/lib/agent-cli-provider/contract-invoke.js +10 -3
  50. package/lib/agent-cli-provider/contract-invoke.js.map +1 -1
  51. package/lib/agent-cli-provider/contract-options.d.ts.map +1 -1
  52. package/lib/agent-cli-provider/contract-options.js +57 -2
  53. package/lib/agent-cli-provider/contract-options.js.map +1 -1
  54. package/lib/agent-cli-provider/contract-support.d.ts +1 -0
  55. package/lib/agent-cli-provider/contract-support.d.ts.map +1 -1
  56. package/lib/agent-cli-provider/contract-support.js +25 -3
  57. package/lib/agent-cli-provider/contract-support.js.map +1 -1
  58. package/lib/agent-cli-provider/errors.d.ts +1 -0
  59. package/lib/agent-cli-provider/errors.d.ts.map +1 -1
  60. package/lib/agent-cli-provider/errors.js +14 -5
  61. package/lib/agent-cli-provider/errors.js.map +1 -1
  62. package/lib/agent-cli-provider/gateway-client.d.ts +32 -0
  63. package/lib/agent-cli-provider/gateway-client.d.ts.map +1 -0
  64. package/lib/agent-cli-provider/gateway-client.js +135 -0
  65. package/lib/agent-cli-provider/gateway-client.js.map +1 -0
  66. package/lib/agent-cli-provider/gateway-runner.d.ts +9 -0
  67. package/lib/agent-cli-provider/gateway-runner.d.ts.map +1 -0
  68. package/lib/agent-cli-provider/gateway-runner.js +294 -0
  69. package/lib/agent-cli-provider/gateway-runner.js.map +1 -0
  70. package/lib/agent-cli-provider/gateway-tools.d.ts +14 -0
  71. package/lib/agent-cli-provider/gateway-tools.d.ts.map +1 -0
  72. package/lib/agent-cli-provider/gateway-tools.js +495 -0
  73. package/lib/agent-cli-provider/gateway-tools.js.map +1 -0
  74. package/lib/agent-cli-provider/index.d.ts +3 -2
  75. package/lib/agent-cli-provider/index.d.ts.map +1 -1
  76. package/lib/agent-cli-provider/index.js +14 -1
  77. package/lib/agent-cli-provider/index.js.map +1 -1
  78. package/lib/agent-cli-provider/invoke-evidence.d.ts +2 -2
  79. package/lib/agent-cli-provider/invoke-evidence.d.ts.map +1 -1
  80. package/lib/agent-cli-provider/invoke-evidence.js +17 -3
  81. package/lib/agent-cli-provider/invoke-evidence.js.map +1 -1
  82. package/lib/agent-cli-provider/provider-registry.d.ts +437 -0
  83. package/lib/agent-cli-provider/provider-registry.d.ts.map +1 -0
  84. package/lib/agent-cli-provider/provider-registry.js +411 -0
  85. package/lib/agent-cli-provider/provider-registry.js.map +1 -0
  86. package/lib/agent-cli-provider/single-agent-runtime.d.ts +7 -0
  87. package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -1
  88. package/lib/agent-cli-provider/single-agent-runtime.js +139 -19
  89. package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -1
  90. package/lib/agent-cli-provider/types.d.ts +106 -4
  91. package/lib/agent-cli-provider/types.d.ts.map +1 -1
  92. package/lib/agent-cli-provider/types.js.map +1 -1
  93. package/lib/detached-startup.js +4 -2
  94. package/lib/docker-config.js +24 -13
  95. package/lib/provider-defaults.js +15 -4
  96. package/lib/provider-detection.js +2 -0
  97. package/lib/provider-names.js +32 -12
  98. package/lib/repo-settings.js +15 -1
  99. package/lib/run-mode.js +18 -6
  100. package/lib/run-plan.js +32 -0
  101. package/lib/settings/claude-auth.js +3 -6
  102. package/lib/settings.js +17 -2
  103. package/lib/setup-apply.js +300 -0
  104. package/lib/setup-journal.js +109 -0
  105. package/lib/setup-plan.js +406 -0
  106. package/lib/setup-undo.js +88 -0
  107. package/lib/start-cluster.js +34 -9
  108. package/lib/stream-json-parser.js +7 -5
  109. package/package.json +33 -3
  110. package/scripts/live-provider-smoke.js +221 -0
  111. package/src/agent/agent-lifecycle.js +7 -4
  112. package/src/agent/agent-quality-gate-schema.js +2 -2
  113. package/src/agent/agent-task-executor.js +41 -2
  114. package/src/agent-cli-provider/acp-stdio-runner.ts +314 -0
  115. package/src/agent-cli-provider/adapters/acp.ts +493 -0
  116. package/src/agent-cli-provider/adapters/claude.ts +2 -32
  117. package/src/agent-cli-provider/adapters/copilot-parser.ts +166 -0
  118. package/src/agent-cli-provider/adapters/copilot.ts +231 -0
  119. package/src/agent-cli-provider/adapters/gateway.ts +186 -0
  120. package/src/agent-cli-provider/adapters/gemini.ts +9 -2
  121. package/src/agent-cli-provider/adapters/index.ts +5 -36
  122. package/src/agent-cli-provider/adapters/opencode.ts +4 -1
  123. package/src/agent-cli-provider/adapters/pi.ts +410 -0
  124. package/src/agent-cli-provider/claude-command.ts +47 -0
  125. package/src/agent-cli-provider/contract-actions.ts +14 -17
  126. package/src/agent-cli-provider/contract-invoke.ts +12 -3
  127. package/src/agent-cli-provider/contract-options.ts +72 -3
  128. package/src/agent-cli-provider/contract-support.ts +30 -3
  129. package/src/agent-cli-provider/errors.ts +14 -4
  130. package/src/agent-cli-provider/gateway-client.ts +170 -0
  131. package/src/agent-cli-provider/gateway-runner.ts +353 -0
  132. package/src/agent-cli-provider/gateway-tools.ts +616 -0
  133. package/src/agent-cli-provider/index.ts +28 -0
  134. package/src/agent-cli-provider/invoke-evidence.ts +24 -3
  135. package/src/agent-cli-provider/provider-registry.ts +515 -0
  136. package/src/agent-cli-provider/single-agent-runtime.ts +192 -18
  137. package/src/agent-cli-provider/types.ts +145 -4
  138. package/src/config-validator.js +33 -15
  139. package/src/isolation-manager.js +124 -19
  140. package/src/ledger.js +3 -0
  141. package/src/message-bus.js +12 -2
  142. package/src/orchestrator.js +37 -17
  143. package/src/preflight.js +83 -30
  144. package/src/providers/capabilities.js +15 -42
  145. package/src/providers/index.js +52 -72
  146. package/src/worktree-claude-config.js +17 -0
  147. package/task-lib/commands/run.js +1 -0
  148. package/task-lib/provider-helper-runtime.js +11 -0
  149. package/task-lib/runner.js +7 -0
@@ -1,61 +1,16 @@
1
1
  const BaseProvider = require('./base-provider');
2
- const { getClaudeCommand } = require('../../lib/settings');
3
- const { normalizeProviderName } = require('../../lib/provider-names');
2
+ const {
3
+ getProviderMetadata,
4
+ normalizeProviderName,
5
+ resolveProviderCommand,
6
+ } = require('../../lib/provider-names');
4
7
  const { commandExists, getCommandPath } = require('../../lib/provider-detection');
5
8
  const helper = require('../../lib/agent-cli-provider');
6
9
 
7
- const PROVIDER_METADATA = {
8
- claude: {
9
- displayName: 'Claude',
10
- cliCommand: 'claude',
11
- helpArgs: () => getClaudeCommand().args,
12
- commandParts: () => getClaudeCommand(),
13
- installInstructions:
14
- 'npm install -g @anthropic-ai/claude-code\nOr (macOS): brew install claude',
15
- authInstructions: 'claude login',
16
- credentialPaths: ['~/.claude'],
17
- settingsFields: ['anthropicApiKey', 'bedrockApiKey', 'bedrockRegion'],
18
- },
19
- codex: {
20
- displayName: 'Codex',
21
- cliCommand: 'codex',
22
- helpArgs: () => ['exec'],
23
- commandParts: () => ({ command: 'codex', args: [] }),
24
- installInstructions: 'npm install -g @openai/codex',
25
- authInstructions: 'codex login',
26
- credentialPaths: ['~/.config/codex', '~/.codex'],
27
- settingsFields: [],
28
- },
29
- gemini: {
30
- displayName: 'Gemini',
31
- cliCommand: 'gemini',
32
- helpArgs: () => [],
33
- commandParts: () => ({ command: 'gemini', args: [] }),
34
- installInstructions: 'npm install -g @google/gemini-cli',
35
- authInstructions: 'gemini auth login',
36
- credentialPaths: ['~/.config/gcloud', '~/.config/gemini', '~/.gemini'],
37
- settingsFields: [],
38
- },
39
- opencode: {
40
- displayName: 'Opencode',
41
- cliCommand: 'opencode',
42
- helpArgs: () => ['run'],
43
- commandParts: () => ({ command: 'opencode', args: [] }),
44
- installInstructions: 'See https://opencode.ai for installation instructions.',
45
- authInstructions: 'opencode auth login',
46
- credentialPaths: ['~/.local/share/opencode'],
47
- settingsFields: [],
48
- },
49
- };
50
-
51
10
  const warned = new Set();
52
11
 
53
12
  function metadataForProvider(name) {
54
- const metadata = PROVIDER_METADATA[name];
55
- if (!metadata) {
56
- throw new Error(`Unknown provider: ${name}. Valid: ${listProviders().join(', ')}`);
57
- }
58
- return metadata;
13
+ return getProviderMetadata(name);
59
14
  }
60
15
 
61
16
  class RuntimeProvider extends BaseProvider {
@@ -65,7 +20,7 @@ class RuntimeProvider extends BaseProvider {
65
20
  super({
66
21
  name: normalized,
67
22
  displayName: metadata.displayName,
68
- cliCommand: metadata.cliCommand,
23
+ cliCommand: metadata.binary,
69
24
  });
70
25
  this._metadata = metadata;
71
26
  this._adapter = helper.getProviderAdapter(normalized);
@@ -78,12 +33,19 @@ class RuntimeProvider extends BaseProvider {
78
33
  }
79
34
 
80
35
  isAvailable() {
81
- const { command } = this._metadata.commandParts();
82
- return commandExists(command);
36
+ if (this._usesBundledRunner()) {
37
+ return helper.probeRuntimeProviderCli(this.name).available;
38
+ }
39
+ const { command } = resolveProviderCommand(this.name);
40
+ if (!commandExists(command)) return false;
41
+ return helper.probeRuntimeProviderCli(this.name).available;
83
42
  }
84
43
 
85
44
  getCliPath() {
86
- const { command } = this._metadata.commandParts();
45
+ if (this._usesBundledRunner()) {
46
+ return this._adapter.binary || process.execPath;
47
+ }
48
+ const { command } = resolveProviderCommand(this.name);
87
49
  return getCommandPath(command) || command;
88
50
  }
89
51
 
@@ -105,6 +67,10 @@ class RuntimeProvider extends BaseProvider {
105
67
  return this._metadata.credentialPaths;
106
68
  }
107
69
 
70
+ _usesBundledRunner() {
71
+ return this._adapter.detectCliFeatures('').supportsBundledRunner === true;
72
+ }
73
+
108
74
  buildCommand(context, options = {}) {
109
75
  const prepared = helper.prepareSingleAgentProviderCommand({
110
76
  provider: this.name,
@@ -169,30 +135,42 @@ class RuntimeProvider extends BaseProvider {
169
135
 
170
136
  getDefaultSettings() {
171
137
  const settings = super.getDefaultSettings();
172
- if (this.name !== 'claude') return settings;
173
- return {
174
- ...settings,
175
- anthropicApiKey: null,
176
- bedrockApiKey: null,
177
- bedrockRegion: null,
178
- };
138
+ if (this._metadata.settingsDefaults) {
139
+ return {
140
+ ...settings,
141
+ ...this._metadata.settingsDefaults,
142
+ };
143
+ }
144
+ if (this._metadata.settingsFields.length === 0) return settings;
145
+ return this._metadata.settingsFields.reduce(
146
+ (result, field) => ({
147
+ ...result,
148
+ [field]: null,
149
+ }),
150
+ { ...settings }
151
+ );
179
152
  }
180
153
 
181
154
  validateSettings(settings) {
182
155
  const baseError = super.validateSettings(settings);
183
156
  if (baseError) return baseError;
157
+ if (this._metadata.settingsValidator) {
158
+ const providerError = this._metadata.settingsValidator(settings);
159
+ if (providerError) return providerError;
160
+ } else {
161
+ for (const field of this._metadata.settingsFields) {
162
+ if (
163
+ settings[field] !== undefined &&
164
+ settings[field] !== null &&
165
+ typeof settings[field] !== 'string'
166
+ ) {
167
+ return `providerSettings.${this.name}.${field} must be a string or null`;
168
+ }
169
+ }
170
+ }
184
171
  if (this.name !== 'claude') return null;
185
172
 
186
173
  const { isValidAnthropicKey, ANTHROPIC_KEY_PREFIX } = require('../../lib/settings/claude-auth');
187
- for (const field of this._metadata.settingsFields) {
188
- if (
189
- settings[field] !== undefined &&
190
- settings[field] !== null &&
191
- typeof settings[field] !== 'string'
192
- ) {
193
- return `providerSettings.claude.${field} must be a string or null`;
194
- }
195
- }
196
174
  if (settings.anthropicApiKey && !isValidAnthropicKey(settings.anthropicApiKey)) {
197
175
  return `providerSettings.claude.anthropicApiKey must start with ${ANTHROPIC_KEY_PREFIX}`;
198
176
  }
@@ -206,7 +184,9 @@ class RuntimeProvider extends BaseProvider {
206
184
 
207
185
  function getProvider(name) {
208
186
  const normalized = normalizeProviderName(name || '');
209
- if (!PROVIDER_METADATA[normalized]) {
187
+ try {
188
+ metadataForProvider(normalized);
189
+ } catch {
210
190
  throw new Error(`Unknown provider: ${name}. Valid: ${listProviders().join(', ')}`);
211
191
  }
212
192
  return new RuntimeProvider(normalized);
@@ -119,6 +119,23 @@ function prepareClaudeConfigDir(options = {}) {
119
119
  return overlayDir;
120
120
  }
121
121
 
122
+ /**
123
+ * Resolve the repo's `.mcp.json` path (the same MCP-server source Claude consumes via
124
+ * prepareClaudeConfigDir) for a given worktree/cwd, or null if none exists. Reused by providers
125
+ * that consume MCP servers through a CLI flag instead of the Claude config-dir overlay (e.g.
126
+ * Copilot's `--additional-mcp-config`), so both providers share one MCP config surface.
127
+ */
128
+ function resolveRepoMcpConfigPath(options = {}) {
129
+ const worktreeRoot = resolveWorktreeRoot(options.worktreePath || options.cwd);
130
+ if (!worktreeRoot) {
131
+ return null;
132
+ }
133
+
134
+ const mcpPath = path.join(worktreeRoot, CLAUDE_DIRNAME, MCP_BASENAME);
135
+ return fs.existsSync(mcpPath) ? mcpPath : null;
136
+ }
137
+
122
138
  module.exports = {
123
139
  prepareClaudeConfigDir,
140
+ resolveRepoMcpConfigPath,
124
141
  };
@@ -38,6 +38,7 @@ export async function runTask(prompt, options = {}) {
38
38
  continue: options.continue,
39
39
  outputFormat,
40
40
  jsonSchema,
41
+ mcpConfig: options.mcpConfig,
41
42
  silentJsonOutput,
42
43
  });
43
44
 
@@ -19,11 +19,22 @@ export const {
19
19
  classifyProviderError,
20
20
  detectProviderFatalError,
21
21
  detectProviderStreamingModeError,
22
+ findProviderRegistryEntry,
22
23
  getProviderAdapter,
24
+ getProviderRegistryEntry,
25
+ knownProviderNames,
23
26
  listProviderAdapters,
27
+ listProviderRegistryEntries,
28
+ normalizeProviderName,
24
29
  parseProviderChunk,
25
30
  prepareSingleAgentProviderCommand,
26
31
  recoverProviderStructuredOutput,
32
+ resolveProviderCommand,
27
33
  resolveModelSpec,
34
+ supportsProviderCapability,
35
+ providerAliasMap,
36
+ providerAliases,
37
+ providerIds,
38
+ providerRegistry,
28
39
  supportsProviderStructuredOutputRecovery,
29
40
  } = helper;
@@ -80,11 +80,18 @@ function buildProviderOptions(options, outputFormat, jsonSchema, cwd) {
80
80
  cwd,
81
81
  autoApprove: true,
82
82
  ...modelSpecOption(options),
83
+ ...mcpConfigOption(options),
83
84
  ...(options.resume ? { resumeSessionId: options.resume } : {}),
84
85
  ...(options.continue ? { continueSession: true } : {}),
85
86
  };
86
87
  }
87
88
 
89
+ function mcpConfigOption(options) {
90
+ const entries = options.mcpConfig;
91
+ if (!Array.isArray(entries) || entries.length === 0) return {};
92
+ return { mcpConfig: entries };
93
+ }
94
+
88
95
  function modelSpecOption(options) {
89
96
  const modelSpec = resolveRequestedModelSpec(options);
90
97
  return modelSpec === undefined ? {} : { modelSpec };