adonis-ai-kit 0.0.0-stage → 1.2.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.
- package/CHANGELOG.md +74 -0
- package/LICENSE +21 -0
- package/README.md +397 -2
- package/dist/commands/ai_test.d.ts +12 -0
- package/dist/commands/ai_test.d.ts.map +1 -0
- package/dist/commands/ai_test.js +98 -0
- package/dist/commands/ai_test.js.map +1 -0
- package/dist/commands/main.d.ts +14 -0
- package/dist/commands/main.d.ts.map +1 -0
- package/dist/commands/main.js +31 -0
- package/dist/commands/main.js.map +1 -0
- package/dist/commands/make_agent.d.ts +13 -0
- package/dist/commands/make_agent.d.ts.map +1 -0
- package/dist/commands/make_agent.js +116 -0
- package/dist/commands/make_agent.js.map +1 -0
- package/dist/providers/ai_provider.d.ts +23 -0
- package/dist/providers/ai_provider.d.ts.map +1 -0
- package/dist/providers/ai_provider.js +34 -0
- package/dist/providers/ai_provider.js.map +1 -0
- package/dist/services/main.d.ts +4 -0
- package/dist/services/main.d.ts.map +1 -0
- package/dist/services/main.js +7 -0
- package/dist/services/main.js.map +1 -0
- package/dist/src/acp/acp_agents.d.ts +89 -0
- package/dist/src/acp/acp_agents.d.ts.map +1 -0
- package/dist/src/acp/acp_agents.js +367 -0
- package/dist/src/acp/acp_agents.js.map +1 -0
- package/dist/src/acp/index.d.ts +4 -0
- package/dist/src/acp/index.d.ts.map +1 -0
- package/dist/src/acp/index.js +4 -0
- package/dist/src/acp/index.js.map +1 -0
- package/dist/src/acp/provider.d.ts +74 -0
- package/dist/src/acp/provider.d.ts.map +1 -0
- package/dist/src/acp/provider.js +276 -0
- package/dist/src/acp/provider.js.map +1 -0
- package/dist/src/acp/types.d.ts +128 -0
- package/dist/src/acp/types.d.ts.map +1 -0
- package/dist/src/acp/types.js +2 -0
- package/dist/src/acp/types.js.map +1 -0
- package/dist/src/agents/agent_runner.d.ts +60 -0
- package/dist/src/agents/agent_runner.d.ts.map +1 -0
- package/dist/src/agents/agent_runner.js +134 -0
- package/dist/src/agents/agent_runner.js.map +1 -0
- package/dist/src/agents/index.d.ts +4 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +4 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/agents/loader.d.ts +56 -0
- package/dist/src/agents/loader.d.ts.map +1 -0
- package/dist/src/agents/loader.js +184 -0
- package/dist/src/agents/loader.js.map +1 -0
- package/dist/src/agents/manifest.d.ts +61 -0
- package/dist/src/agents/manifest.d.ts.map +1 -0
- package/dist/src/agents/manifest.js +35 -0
- package/dist/src/agents/manifest.js.map +1 -0
- package/dist/src/ai_manager.d.ts +140 -0
- package/dist/src/ai_manager.d.ts.map +1 -0
- package/dist/src/ai_manager.js +814 -0
- package/dist/src/ai_manager.js.map +1 -0
- package/dist/src/budget/budget_allocator.d.ts +37 -0
- package/dist/src/budget/budget_allocator.d.ts.map +1 -0
- package/dist/src/budget/budget_allocator.js +98 -0
- package/dist/src/budget/budget_allocator.js.map +1 -0
- package/dist/src/budget/budget_enforcer.d.ts +70 -0
- package/dist/src/budget/budget_enforcer.d.ts.map +1 -0
- package/dist/src/budget/budget_enforcer.js +195 -0
- package/dist/src/budget/budget_enforcer.js.map +1 -0
- package/dist/src/budget/cost_tracker.d.ts +71 -0
- package/dist/src/budget/cost_tracker.d.ts.map +1 -0
- package/dist/src/budget/cost_tracker.js +199 -0
- package/dist/src/budget/cost_tracker.js.map +1 -0
- package/dist/src/budget/index.d.ts +6 -0
- package/dist/src/budget/index.d.ts.map +1 -0
- package/dist/src/budget/index.js +6 -0
- package/dist/src/budget/index.js.map +1 -0
- package/dist/src/budget/pricing.d.ts +35 -0
- package/dist/src/budget/pricing.d.ts.map +1 -0
- package/dist/src/budget/pricing.js +129 -0
- package/dist/src/budget/pricing.js.map +1 -0
- package/dist/src/budget/types.d.ts +86 -0
- package/dist/src/budget/types.d.ts.map +1 -0
- package/dist/src/budget/types.js +2 -0
- package/dist/src/budget/types.js.map +1 -0
- package/dist/src/catalog/index.d.ts +3 -0
- package/dist/src/catalog/index.d.ts.map +1 -0
- package/dist/src/catalog/index.js +3 -0
- package/dist/src/catalog/index.js.map +1 -0
- package/dist/src/catalog/models_dev.d.ts +87 -0
- package/dist/src/catalog/models_dev.d.ts.map +1 -0
- package/dist/src/catalog/models_dev.js +38 -0
- package/dist/src/catalog/models_dev.js.map +1 -0
- package/dist/src/catalog/source.d.ts +67 -0
- package/dist/src/catalog/source.d.ts.map +1 -0
- package/dist/src/catalog/source.js +678 -0
- package/dist/src/catalog/source.js.map +1 -0
- package/dist/src/circuit_breaker.d.ts +61 -0
- package/dist/src/circuit_breaker.d.ts.map +1 -0
- package/dist/src/circuit_breaker.js +217 -0
- package/dist/src/circuit_breaker.js.map +1 -0
- package/dist/src/define_config.d.ts +11 -0
- package/dist/src/define_config.d.ts.map +1 -0
- package/dist/src/define_config.js +48 -0
- package/dist/src/define_config.js.map +1 -0
- package/dist/src/error_classifier.d.ts +50 -0
- package/dist/src/error_classifier.d.ts.map +1 -0
- package/dist/src/error_classifier.js +206 -0
- package/dist/src/error_classifier.js.map +1 -0
- package/dist/src/errors.d.ts +52 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +70 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/guard/confirmation.d.ts +67 -0
- package/dist/src/guard/confirmation.d.ts.map +1 -0
- package/dist/src/guard/confirmation.js +180 -0
- package/dist/src/guard/confirmation.js.map +1 -0
- package/dist/src/guard/errors.d.ts +10 -0
- package/dist/src/guard/errors.d.ts.map +1 -0
- package/dist/src/guard/errors.js +14 -0
- package/dist/src/guard/errors.js.map +1 -0
- package/dist/src/guard/guard.d.ts +47 -0
- package/dist/src/guard/guard.d.ts.map +1 -0
- package/dist/src/guard/guard.js +133 -0
- package/dist/src/guard/guard.js.map +1 -0
- package/dist/src/guard/index.d.ts +7 -0
- package/dist/src/guard/index.d.ts.map +1 -0
- package/dist/src/guard/index.js +7 -0
- package/dist/src/guard/index.js.map +1 -0
- package/dist/src/guard/registry.d.ts +72 -0
- package/dist/src/guard/registry.d.ts.map +1 -0
- package/dist/src/guard/registry.js +192 -0
- package/dist/src/guard/registry.js.map +1 -0
- package/dist/src/guard/schema_registry.d.ts +37 -0
- package/dist/src/guard/schema_registry.d.ts.map +1 -0
- package/dist/src/guard/schema_registry.js +57 -0
- package/dist/src/guard/schema_registry.js.map +1 -0
- package/dist/src/guard/types.d.ts +63 -0
- package/dist/src/guard/types.d.ts.map +1 -0
- package/dist/src/guard/types.js +2 -0
- package/dist/src/guard/types.js.map +1 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger.d.ts +7 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +2 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/models/catalog_resolver.d.ts +24 -0
- package/dist/src/models/catalog_resolver.d.ts.map +1 -0
- package/dist/src/models/catalog_resolver.js +66 -0
- package/dist/src/models/catalog_resolver.js.map +1 -0
- package/dist/src/models/index.d.ts +14 -0
- package/dist/src/models/index.d.ts.map +1 -0
- package/dist/src/models/index.js +8 -0
- package/dist/src/models/index.js.map +1 -0
- package/dist/src/models/keys.d.ts +9 -0
- package/dist/src/models/keys.d.ts.map +1 -0
- package/dist/src/models/keys.js +12 -0
- package/dist/src/models/keys.js.map +1 -0
- package/dist/src/models/language_model_factory.d.ts +44 -0
- package/dist/src/models/language_model_factory.d.ts.map +1 -0
- package/dist/src/models/language_model_factory.js +193 -0
- package/dist/src/models/language_model_factory.js.map +1 -0
- package/dist/src/models/model_chain.d.ts +58 -0
- package/dist/src/models/model_chain.d.ts.map +1 -0
- package/dist/src/models/model_chain.js +144 -0
- package/dist/src/models/model_chain.js.map +1 -0
- package/dist/src/models/model_ref.d.ts +12 -0
- package/dist/src/models/model_ref.d.ts.map +1 -0
- package/dist/src/models/model_ref.js +33 -0
- package/dist/src/models/model_ref.js.map +1 -0
- package/dist/src/models/protocols.d.ts +6 -0
- package/dist/src/models/protocols.d.ts.map +1 -0
- package/dist/src/models/protocols.js +33 -0
- package/dist/src/models/protocols.js.map +1 -0
- package/dist/src/models/provider_factories.d.ts +19 -0
- package/dist/src/models/provider_factories.d.ts.map +1 -0
- package/dist/src/models/provider_factories.js +70 -0
- package/dist/src/models/provider_factories.js.map +1 -0
- package/dist/src/models/types.d.ts +17 -0
- package/dist/src/models/types.d.ts.map +1 -0
- package/dist/src/models/types.js +2 -0
- package/dist/src/models/types.js.map +1 -0
- package/dist/src/response_macro.d.ts +16 -0
- package/dist/src/response_macro.d.ts.map +1 -0
- package/dist/src/response_macro.js +151 -0
- package/dist/src/response_macro.js.map +1 -0
- package/dist/src/types.d.ts +340 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/usage.d.ts +13 -0
- package/dist/src/usage.d.ts.map +1 -0
- package/dist/src/usage.js +61 -0
- package/dist/src/usage.js.map +1 -0
- package/package.json +208 -4
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { AiException, ProviderConfigError } from '../errors.js';
|
|
11
|
+
import { buildAcpRuntimeConfig, buildProjectMcpServer, getAcpAgentConfig, normalizeMcpServer, } from './acp_agents.js';
|
|
12
|
+
/** Variables a CLI needs to run at all. Everything else is withheld unless `inheritEnv` is set. */
|
|
13
|
+
const SAFE_ENV_KEYS = new Set([
|
|
14
|
+
'PATH',
|
|
15
|
+
'PATHEXT',
|
|
16
|
+
'HOME',
|
|
17
|
+
'USER',
|
|
18
|
+
'USERNAME',
|
|
19
|
+
'LOGNAME',
|
|
20
|
+
'SHELL',
|
|
21
|
+
'LANG',
|
|
22
|
+
'LANGUAGE',
|
|
23
|
+
'TERM',
|
|
24
|
+
'COLORTERM',
|
|
25
|
+
'TZ',
|
|
26
|
+
'TMPDIR',
|
|
27
|
+
'TMP',
|
|
28
|
+
'TEMP',
|
|
29
|
+
'SYSTEMROOT',
|
|
30
|
+
'WINDIR',
|
|
31
|
+
'COMSPEC',
|
|
32
|
+
'USERPROFILE',
|
|
33
|
+
'APPDATA',
|
|
34
|
+
'LOCALAPPDATA',
|
|
35
|
+
'PROGRAMFILES',
|
|
36
|
+
'PROGRAMFILES(X86)',
|
|
37
|
+
'PROGRAMDATA',
|
|
38
|
+
'HOMEDRIVE',
|
|
39
|
+
'HOMEPATH',
|
|
40
|
+
'NUMBER_OF_PROCESSORS',
|
|
41
|
+
'PROCESSOR_ARCHITECTURE',
|
|
42
|
+
'OS',
|
|
43
|
+
].map((k) => k.toUpperCase()));
|
|
44
|
+
const SAFE_ENV_PREFIXES = ['LC_', 'XDG_'];
|
|
45
|
+
/**
|
|
46
|
+
* Builds the environment for the agent process.
|
|
47
|
+
*
|
|
48
|
+
* `@mcpc-tech/acp-ai-provider` spawns the agent with `{ ...process.env, ...env }`, so the server's
|
|
49
|
+
* secrets cannot be left out by omission. Instead every variable that is not allowlisted is
|
|
50
|
+
* explicitly blanked, and only the allowlist plus `extra` (agent credentials, configured env)
|
|
51
|
+
* keep real values.
|
|
52
|
+
*/
|
|
53
|
+
export function buildAgentEnv(source, extra, inheritEnv = false) {
|
|
54
|
+
if (inheritEnv)
|
|
55
|
+
return { ...extra };
|
|
56
|
+
const env = {};
|
|
57
|
+
// The provider merges over `process.env`, so keys that only exist there must be blanked too.
|
|
58
|
+
const keys = new Set([...Object.keys(source), ...Object.keys(process.env)]);
|
|
59
|
+
for (const key of keys) {
|
|
60
|
+
const upper = key.toUpperCase();
|
|
61
|
+
const safe = SAFE_ENV_KEYS.has(upper) || SAFE_ENV_PREFIXES.some((p) => upper.startsWith(p));
|
|
62
|
+
env[key] = safe ? (source[key] ?? '') : '';
|
|
63
|
+
}
|
|
64
|
+
return { ...env, ...extra };
|
|
65
|
+
}
|
|
66
|
+
export class AcpDriver {
|
|
67
|
+
name;
|
|
68
|
+
defaultModel;
|
|
69
|
+
config;
|
|
70
|
+
logger;
|
|
71
|
+
confirmation;
|
|
72
|
+
env;
|
|
73
|
+
runtime;
|
|
74
|
+
cachedModels = new Map();
|
|
75
|
+
providers = new Set();
|
|
76
|
+
permissionPolicy;
|
|
77
|
+
constructor(name, config, deps = {}) {
|
|
78
|
+
this.name = name;
|
|
79
|
+
this.config = config;
|
|
80
|
+
this.logger = deps.logger;
|
|
81
|
+
this.confirmation = deps.confirmation;
|
|
82
|
+
this.env = deps.env ?? process.env;
|
|
83
|
+
this.runtime = deps.runtime;
|
|
84
|
+
this.defaultModel = config.agentId ?? config.defaultModel ?? 'claude-code';
|
|
85
|
+
this.permissionPolicy = config.permissionPolicy ?? 'ask';
|
|
86
|
+
if (this.permissionPolicy === 'allow') {
|
|
87
|
+
this.logger?.warn?.(`[AcpDriver] Provider "${name}" auto-approves every agent action (permissionPolicy: 'allow').`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Lazily loads and instantiates an AI SDK language model backed by the ACP agent.
|
|
92
|
+
* `modelName` selects among the built-in agents; it is never executed as a command.
|
|
93
|
+
*/
|
|
94
|
+
async getModel(modelName) {
|
|
95
|
+
const agentId = modelName ?? this.defaultModel;
|
|
96
|
+
const runtimeConfig = this.resolveRuntimeConfig(agentId);
|
|
97
|
+
const cacheKey = `${runtimeConfig.command}::${runtimeConfig.cwd}`;
|
|
98
|
+
let model = this.cachedModels.get(cacheKey);
|
|
99
|
+
if (!model) {
|
|
100
|
+
model = this.createModel(runtimeConfig);
|
|
101
|
+
this.cachedModels.set(cacheKey, model);
|
|
102
|
+
// Do not cache failures
|
|
103
|
+
model.catch(() => this.cachedModels.delete(cacheKey));
|
|
104
|
+
}
|
|
105
|
+
return model;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Tests whether the ACP agent can be resolved and its model instantiated.
|
|
109
|
+
*/
|
|
110
|
+
async ping() {
|
|
111
|
+
const startTime = Date.now();
|
|
112
|
+
try {
|
|
113
|
+
const runtimeConfig = this.resolveRuntimeConfig(this.defaultModel);
|
|
114
|
+
this.logger?.debug?.(`[AcpDriver] Pinging ACP agent command: ${runtimeConfig.command}`);
|
|
115
|
+
await this.getModel(this.defaultModel);
|
|
116
|
+
return { ok: true, latencyMs: Date.now() - startTime };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return {
|
|
120
|
+
ok: false,
|
|
121
|
+
latencyMs: Date.now() - startTime,
|
|
122
|
+
error: err instanceof Error ? err.message : String(err),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Terminates every agent process started by this driver.
|
|
128
|
+
*/
|
|
129
|
+
async shutdown() {
|
|
130
|
+
const providers = [...this.providers];
|
|
131
|
+
this.providers.clear();
|
|
132
|
+
this.cachedModels.clear();
|
|
133
|
+
for (const provider of providers) {
|
|
134
|
+
try {
|
|
135
|
+
provider.cleanup();
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
this.logger?.warn?.(`[AcpDriver] Failed to clean up ACP provider: ${String(err)}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
resolveRuntimeConfig(agentId) {
|
|
143
|
+
if (this.runtime) {
|
|
144
|
+
if (!path.isAbsolute(this.runtime.cwd)) {
|
|
145
|
+
throw new ProviderConfigError(this.name, `ACP "cwd" must be an absolute path, got "${this.runtime.cwd}"`);
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
...this.runtime,
|
|
149
|
+
env: buildAgentEnv(this.env, this.runtime.env, this.config.inheritEnv),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const predefined = getAcpAgentConfig(agentId);
|
|
153
|
+
const explicitCommand = this.config.command;
|
|
154
|
+
// A command is only ever taken from config or from the built-in agent table.
|
|
155
|
+
if (!explicitCommand && !predefined) {
|
|
156
|
+
throw new ProviderConfigError(this.name, `Unknown ACP agent "${agentId}". Use one of the built-in agents or set "command" explicitly in the provider config.`);
|
|
157
|
+
}
|
|
158
|
+
const builtFromEnv = predefined
|
|
159
|
+
? buildAcpRuntimeConfig(agentId, (key) => this.env[key], this.env, this.logger)
|
|
160
|
+
: null;
|
|
161
|
+
const command = explicitCommand ?? builtFromEnv?.command ?? predefined.command;
|
|
162
|
+
const args = this.config.args ?? (explicitCommand ? [] : (builtFromEnv?.args ?? predefined.args));
|
|
163
|
+
const cwd = this.config.cwd ?? builtFromEnv?.cwd ?? process.cwd();
|
|
164
|
+
if (!path.isAbsolute(cwd)) {
|
|
165
|
+
throw new ProviderConfigError(this.name, `ACP "cwd" must be an absolute path, got "${cwd}"`);
|
|
166
|
+
}
|
|
167
|
+
const env = buildAgentEnv(this.env, { ...(builtFromEnv?.env ?? {}), ...(this.config.env ?? {}) }, this.config.inheritEnv);
|
|
168
|
+
const mcpServers = [...(builtFromEnv?.mcpServers ?? [])];
|
|
169
|
+
for (const server of this.config.mcpServers ?? []) {
|
|
170
|
+
const normalized = normalizeMcpServer(server);
|
|
171
|
+
if (normalized)
|
|
172
|
+
mcpServers.push(normalized);
|
|
173
|
+
else
|
|
174
|
+
this.logger?.warn?.(`[AcpDriver] Ignoring invalid MCP server in provider "${this.name}"`);
|
|
175
|
+
}
|
|
176
|
+
if (this.config.enableProjectMcp) {
|
|
177
|
+
if (this.config.projectMcp) {
|
|
178
|
+
const project = buildProjectMcpServer(this.config.projectMcp, this.logger);
|
|
179
|
+
if (project)
|
|
180
|
+
mcpServers.push(project);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
this.logger?.warn?.(`[AcpDriver] enableProjectMcp is set on "${this.name}" but "projectMcp.path" is missing; skipping.`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
command,
|
|
188
|
+
args,
|
|
189
|
+
cwd,
|
|
190
|
+
env,
|
|
191
|
+
mcpServers,
|
|
192
|
+
authMethodId: this.config.authMethodId ?? builtFromEnv?.authMethodId ?? predefined?.authMethodId,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
async createModel(runtimeConfig) {
|
|
196
|
+
this.logger?.info?.(`[ACP] Starting ACP agent session: ${runtimeConfig.command} in ${runtimeConfig.cwd}`);
|
|
197
|
+
let acpModule;
|
|
198
|
+
try {
|
|
199
|
+
acpModule = await import(__rewriteRelativeImportExtension('@mcpc-tech/acp-ai-provider'));
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
throw new AiException(`Package "@mcpc-tech/acp-ai-provider" is required to use ACP drivers: ${err instanceof Error ? err.message : String(err)}`, 'E_AI_MISSING_DEPENDENCY', err);
|
|
203
|
+
}
|
|
204
|
+
const provider = acpModule.createACPProvider({
|
|
205
|
+
command: runtimeConfig.command,
|
|
206
|
+
args: runtimeConfig.args,
|
|
207
|
+
env: runtimeConfig.env,
|
|
208
|
+
authMethodId: runtimeConfig.authMethodId,
|
|
209
|
+
session: {
|
|
210
|
+
cwd: runtimeConfig.cwd,
|
|
211
|
+
mcpServers: runtimeConfig.mcpServers,
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
this.providers.add(provider);
|
|
215
|
+
const model = provider.languageModel();
|
|
216
|
+
this.installPermissionHandler(model, runtimeConfig.command);
|
|
217
|
+
return model;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* The ACP provider auto-selects the first permission option when no handler is set, and offers
|
|
221
|
+
* no public API to set one. The handler is installed on the model's client right after every
|
|
222
|
+
* connection is established. If it cannot be installed the model refuses to connect (fail-closed).
|
|
223
|
+
*/
|
|
224
|
+
installPermissionHandler(model, agentLabel) {
|
|
225
|
+
const connect = model.connectClient.bind(model);
|
|
226
|
+
const handler = (params) => this.answerPermission(params, agentLabel);
|
|
227
|
+
model.connectClient = async () => {
|
|
228
|
+
await connect();
|
|
229
|
+
const client = model.client;
|
|
230
|
+
if (!client || typeof client.setPermissionRequestHandler !== 'function') {
|
|
231
|
+
throw new AiException('Unable to install the ACP permission handler (unsupported @mcpc-tech/acp-ai-provider version); refusing to run the agent without permission control.', 'E_AI_ACP_UNSAFE');
|
|
232
|
+
}
|
|
233
|
+
client.setPermissionRequestHandler(handler);
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
async answerPermission(params, agentLabel) {
|
|
237
|
+
const options = params.options ?? [];
|
|
238
|
+
const select = (kinds) => {
|
|
239
|
+
const option = options.find((o) => kinds.includes(o.kind));
|
|
240
|
+
return option ? { outcome: { outcome: 'selected', optionId: option.optionId } } : null;
|
|
241
|
+
};
|
|
242
|
+
const reject = () => select(['reject_once', 'reject_always']) ?? { outcome: { outcome: 'cancelled' } };
|
|
243
|
+
// Never answer with `allow_always`: a single approval must not become a standing grant.
|
|
244
|
+
const allow = () => select(['allow_once']) ?? reject();
|
|
245
|
+
const title = params.toolCall?.title ?? params.toolCall?.kind ?? 'agent action';
|
|
246
|
+
if (this.permissionPolicy === 'deny') {
|
|
247
|
+
this.logger?.warn?.(`[ACP] Denied "${title}" requested by ${agentLabel} (policy: deny)`);
|
|
248
|
+
return reject();
|
|
249
|
+
}
|
|
250
|
+
if (this.permissionPolicy === 'allow') {
|
|
251
|
+
return allow();
|
|
252
|
+
}
|
|
253
|
+
if (!this.confirmation) {
|
|
254
|
+
this.logger?.warn?.(`[ACP] Denied "${title}" requested by ${agentLabel}: no ConfirmationService to ask a human`);
|
|
255
|
+
return reject();
|
|
256
|
+
}
|
|
257
|
+
const response = await this.confirmation.waitForResponse({
|
|
258
|
+
sessionId: params.sessionId,
|
|
259
|
+
toolName: `acp:${agentLabel}`,
|
|
260
|
+
action: String(title),
|
|
261
|
+
params: {
|
|
262
|
+
kind: params.toolCall?.kind ?? null,
|
|
263
|
+
rawInput: params.toolCall?.rawInput ?? null,
|
|
264
|
+
locations: params.toolCall?.locations ?? null,
|
|
265
|
+
},
|
|
266
|
+
}, this.config.permissionTimeoutMs);
|
|
267
|
+
return response.status === 'approved' ? allow() : reject();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Factory for creating an AcpDriver instance.
|
|
272
|
+
*/
|
|
273
|
+
export function createAcpDriver(name, config, deps = {}) {
|
|
274
|
+
return new AcpDriver(name, config, deps);
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/acp/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { BaseProviderConfig } from '../types.js';
|
|
2
|
+
import type { Logger } from '../logger.js';
|
|
3
|
+
/** `{ name, value }` pair as required by the ACP schema for `env` and `headers`. */
|
|
4
|
+
export interface AcpNameValue {
|
|
5
|
+
name: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
/** Stdio MCP server, exactly as in the ACP schema (`McpServerStdio`: no `type`, `env` is an array). */
|
|
9
|
+
export interface AcpStdioMcpServer {
|
|
10
|
+
type?: 'stdio';
|
|
11
|
+
name: string;
|
|
12
|
+
command: string;
|
|
13
|
+
args?: string[];
|
|
14
|
+
env?: AcpNameValue[];
|
|
15
|
+
}
|
|
16
|
+
/** Remote MCP server (`McpServerHttp` / `McpServerSse`), `headers` is an array of `{name,value}`. */
|
|
17
|
+
export interface AcpRemoteMcpServer {
|
|
18
|
+
type: 'http' | 'sse';
|
|
19
|
+
name: string;
|
|
20
|
+
url: string;
|
|
21
|
+
headers?: AcpNameValue[];
|
|
22
|
+
}
|
|
23
|
+
export type AcpMcpServerConfig = AcpStdioMcpServer | AcpRemoteMcpServer;
|
|
24
|
+
/**
|
|
25
|
+
* What to do when the ACP agent asks for permission (shell commands, file writes, ...).
|
|
26
|
+
* - `ask` (default) require a human decision via the ConfirmationService; denied if none
|
|
27
|
+
* - `deny` refuse everything
|
|
28
|
+
* - `allow` auto-approve (once). Only for fully trusted, sandboxed setups.
|
|
29
|
+
*/
|
|
30
|
+
export type AcpPermissionPolicy = 'ask' | 'deny' | 'allow';
|
|
31
|
+
export interface AcpAgentConfig {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
description: string;
|
|
35
|
+
command: string;
|
|
36
|
+
args: string[];
|
|
37
|
+
envVarPrefix: string;
|
|
38
|
+
supportsMcpServers: boolean;
|
|
39
|
+
authMethodId?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Environment variables the agent needs: for each `target`, the first of `sources`
|
|
42
|
+
* that is set is passed to the agent process as `target`.
|
|
43
|
+
*
|
|
44
|
+
* When omitted (`undefined`), the `credentialEnv` of the built-in default agent with the
|
|
45
|
+
* same id is used, if any. An explicit value, including `[]`, is used as-is, so `[]` opts out.
|
|
46
|
+
*/
|
|
47
|
+
credentialEnv?: Array<{
|
|
48
|
+
target: string;
|
|
49
|
+
sources: string[];
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
export interface AcpAgentRuntimeConfig {
|
|
53
|
+
command: string;
|
|
54
|
+
args: string[];
|
|
55
|
+
cwd: string;
|
|
56
|
+
env: Record<string, string>;
|
|
57
|
+
mcpServers: AcpMcpServerConfig[];
|
|
58
|
+
authMethodId?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface AcpRuntimeOptions {
|
|
61
|
+
/** Environment lookup. Default: `process.env` */
|
|
62
|
+
getEnv?: (key: string) => string | undefined;
|
|
63
|
+
/** Source scanned for `ACP_<AGENT>_ENV_*` entries. Default: `process.env` */
|
|
64
|
+
envSource?: Record<string, string | undefined>;
|
|
65
|
+
logger?: Logger;
|
|
66
|
+
/** Project MCP server file, used when `<prefix>_PROJECT_MCP_PATH` is not set. */
|
|
67
|
+
projectMcpPath?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface AcpProjectMcpConfig {
|
|
70
|
+
/** Absolute or cwd-relative path to the MCP server entry file. */
|
|
71
|
+
path: string;
|
|
72
|
+
/** Executable used to run it. Default: `node` */
|
|
73
|
+
command?: string;
|
|
74
|
+
/** Server name reported to the agent. Default: `project-tools` */
|
|
75
|
+
name?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface AcpProviderConfig extends BaseProviderConfig {
|
|
78
|
+
driver: 'acp';
|
|
79
|
+
/**
|
|
80
|
+
* Predefined agent ID (e.g. 'claude-code', 'gemini', 'codex', 'opencode', 'qwen-code').
|
|
81
|
+
* Defaults to 'claude-code'. Must be a known agent unless `command` is set.
|
|
82
|
+
*/
|
|
83
|
+
agentId?: string;
|
|
84
|
+
/**
|
|
85
|
+
* Explicit executable for a custom agent. Only values written in config are ever executed;
|
|
86
|
+
* a model name coming from a request is never treated as a command.
|
|
87
|
+
*/
|
|
88
|
+
command?: string;
|
|
89
|
+
/**
|
|
90
|
+
* Override CLI command arguments
|
|
91
|
+
*/
|
|
92
|
+
args?: string[];
|
|
93
|
+
/**
|
|
94
|
+
* Custom working directory for the agent process (must be an absolute path)
|
|
95
|
+
*/
|
|
96
|
+
cwd?: string;
|
|
97
|
+
/**
|
|
98
|
+
* Extra environment variables passed to the agent CLI
|
|
99
|
+
*/
|
|
100
|
+
env?: Record<string, string>;
|
|
101
|
+
/**
|
|
102
|
+
* Forward the complete server environment to the agent (secrets included).
|
|
103
|
+
* Default: false - only a safe allowlist plus the agent's own credentials is forwarded.
|
|
104
|
+
*/
|
|
105
|
+
inheritEnv?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* MCP servers to attach to the ACP agent session
|
|
108
|
+
*/
|
|
109
|
+
mcpServers?: AcpMcpServerConfig[];
|
|
110
|
+
/**
|
|
111
|
+
* Optional authentication method identifier
|
|
112
|
+
*/
|
|
113
|
+
authMethodId?: string;
|
|
114
|
+
/**
|
|
115
|
+
* Attach the project's own MCP server (requires `projectMcp.path`).
|
|
116
|
+
*/
|
|
117
|
+
enableProjectMcp?: boolean;
|
|
118
|
+
projectMcp?: AcpProjectMcpConfig;
|
|
119
|
+
/**
|
|
120
|
+
* How permission requests from the agent are answered. Default: 'ask'.
|
|
121
|
+
*/
|
|
122
|
+
permissionPolicy?: AcpPermissionPolicy;
|
|
123
|
+
/**
|
|
124
|
+
* How long to wait for a human to answer a permission request, in ms. Default: 60000
|
|
125
|
+
*/
|
|
126
|
+
permissionTimeoutMs?: number;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/acp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/acp/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { ToolSet } from 'ai';
|
|
3
|
+
import type { GenerateObjectOptions, GenerateObjectResult, GenerateTextOptions, GenerateTextResult, StreamTextOptions, StreamTextResult } from '../types.js';
|
|
4
|
+
import type { AiManager } from '../ai_manager.js';
|
|
5
|
+
import type { AgentPromptConfig } from './loader.js';
|
|
6
|
+
import type { ToolPermission } from './manifest.js';
|
|
7
|
+
export interface AgentRunnerOptions {
|
|
8
|
+
tools?: ToolSet;
|
|
9
|
+
system?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
provider?: string;
|
|
12
|
+
temperature?: number;
|
|
13
|
+
maxOutputTokens?: number;
|
|
14
|
+
/** @deprecated Use `maxOutputTokens`. */
|
|
15
|
+
maxTokens?: number;
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
toolGuard?: GenerateTextOptions['toolGuard'];
|
|
18
|
+
/**
|
|
19
|
+
* Permission of tools the agent manifest does not mention. Default: 'allow' (the manifest then
|
|
20
|
+
* acts as a deny/ask list). Use 'deny' for strict allow-list mode.
|
|
21
|
+
*/
|
|
22
|
+
defaultToolPermission?: ToolPermission;
|
|
23
|
+
}
|
|
24
|
+
export declare class AgentRunner {
|
|
25
|
+
private manager;
|
|
26
|
+
private config;
|
|
27
|
+
private defaultOptions;
|
|
28
|
+
constructor(manager: AiManager, config: AgentPromptConfig, options?: AgentRunnerOptions);
|
|
29
|
+
getId(): string;
|
|
30
|
+
getDescription(): string;
|
|
31
|
+
getSystemPrompt(): string;
|
|
32
|
+
getConfig(): AgentPromptConfig;
|
|
33
|
+
getPermissions(): Record<string, ToolPermission>;
|
|
34
|
+
private permissionFor;
|
|
35
|
+
/**
|
|
36
|
+
* Filters tools according to the agent manifest. `deny` tools are removed; the permissions map is
|
|
37
|
+
* returned so the manager enforces `ask` (human confirmation) and the tool guard at call time.
|
|
38
|
+
*/
|
|
39
|
+
private prepareTools;
|
|
40
|
+
private mergedSystem;
|
|
41
|
+
/**
|
|
42
|
+
* Executes a text generation step with agent instructions, budget tracking, and tool permissions.
|
|
43
|
+
*
|
|
44
|
+
* Security: `tools`, `toolPermissions`, `system` and `toolGuard` are spread AFTER the caller's
|
|
45
|
+
* options so a caller can neither re-introduce a denied tool nor replace the agent's prompt.
|
|
46
|
+
*/
|
|
47
|
+
run(promptOrOptions: string | GenerateTextOptions): Promise<GenerateTextResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Streams responses with agent instructions, skills, and budget attribution.
|
|
50
|
+
*/
|
|
51
|
+
runStream(promptOrOptions: string | StreamTextOptions): Promise<StreamTextResult>;
|
|
52
|
+
/** Alias of `runStream()`. */
|
|
53
|
+
stream(promptOrOptions: string | StreamTextOptions): Promise<StreamTextResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Generates structured output conforming to a Zod schema or the agent's outputSchema.
|
|
56
|
+
*/
|
|
57
|
+
runStructured<T>(schema?: z.ZodType<T>, promptOrOptions?: string | Partial<GenerateObjectOptions<T>>): Promise<GenerateObjectResult<T>>;
|
|
58
|
+
private maxOutputTokens;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=agent_runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_runner.d.ts","sourceRoot":"","sources":["../../../src/agents/agent_runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAC5C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,cAAc,CAAA;CACvC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,cAAc,CAAoB;gBAGxC,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,kBAAuB;IAOlC,KAAK,IAAI,MAAM;IAIf,cAAc,IAAI,MAAM;IAIxB,eAAe,IAAI,MAAM;IAIzB,SAAS,IAAI,iBAAiB;IAI9B,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAIhD,OAAO,CAAC,aAAa;IAOrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;IACG,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqBrF;;OAEG;IACG,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqBvF,8BAA8B;IAC9B,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9E;;OAEG;IACG,aAAa,CAAC,CAAC,EACnB,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACrB,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAC3D,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAsBnC,OAAO,CAAC,eAAe;CAWxB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export class AgentRunner {
|
|
2
|
+
manager;
|
|
3
|
+
config;
|
|
4
|
+
defaultOptions;
|
|
5
|
+
constructor(manager, config, options = {}) {
|
|
6
|
+
this.manager = manager;
|
|
7
|
+
this.config = config;
|
|
8
|
+
this.defaultOptions = options;
|
|
9
|
+
}
|
|
10
|
+
getId() {
|
|
11
|
+
return this.config.id;
|
|
12
|
+
}
|
|
13
|
+
getDescription() {
|
|
14
|
+
return this.config.description;
|
|
15
|
+
}
|
|
16
|
+
getSystemPrompt() {
|
|
17
|
+
return this.config.systemPrompt;
|
|
18
|
+
}
|
|
19
|
+
getConfig() {
|
|
20
|
+
return this.config;
|
|
21
|
+
}
|
|
22
|
+
getPermissions() {
|
|
23
|
+
return this.config.permissions;
|
|
24
|
+
}
|
|
25
|
+
permissionFor(toolName) {
|
|
26
|
+
const own = Object.hasOwn(this.config.permissions, toolName)
|
|
27
|
+
? this.config.permissions[toolName]
|
|
28
|
+
: undefined;
|
|
29
|
+
return own ?? this.defaultOptions.defaultToolPermission ?? 'allow';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Filters tools according to the agent manifest. `deny` tools are removed; the permissions map is
|
|
33
|
+
* returned so the manager enforces `ask` (human confirmation) and the tool guard at call time.
|
|
34
|
+
*/
|
|
35
|
+
prepareTools(runtimeTools) {
|
|
36
|
+
const rawTools = runtimeTools ?? this.defaultOptions.tools;
|
|
37
|
+
const toolPermissions = {};
|
|
38
|
+
if (!rawTools || Object.keys(rawTools).length === 0) {
|
|
39
|
+
return { tools: undefined, toolPermissions };
|
|
40
|
+
}
|
|
41
|
+
const filtered = {};
|
|
42
|
+
for (const [name, tool] of Object.entries(rawTools)) {
|
|
43
|
+
const permission = this.permissionFor(name);
|
|
44
|
+
if (permission === 'deny') {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
filtered[name] = tool;
|
|
48
|
+
toolPermissions[name] = permission;
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
tools: Object.keys(filtered).length > 0 ? filtered : undefined,
|
|
52
|
+
toolPermissions,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
mergedSystem(extra) {
|
|
56
|
+
return [this.config.systemPrompt, this.defaultOptions.system, extra].filter(Boolean).join('\n\n');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Executes a text generation step with agent instructions, budget tracking, and tool permissions.
|
|
60
|
+
*
|
|
61
|
+
* Security: `tools`, `toolPermissions`, `system` and `toolGuard` are spread AFTER the caller's
|
|
62
|
+
* options so a caller can neither re-introduce a denied tool nor replace the agent's prompt.
|
|
63
|
+
*/
|
|
64
|
+
async run(promptOrOptions) {
|
|
65
|
+
const baseOpts = typeof promptOrOptions === 'string' ? { prompt: promptOrOptions } : { ...promptOrOptions };
|
|
66
|
+
const { tools, toolPermissions } = this.prepareTools(baseOpts.tools);
|
|
67
|
+
return this.manager.generateText({
|
|
68
|
+
...baseOpts,
|
|
69
|
+
agentName: this.config.id,
|
|
70
|
+
system: this.mergedSystem(baseOpts.system),
|
|
71
|
+
model: baseOpts.model ?? this.defaultOptions.model ?? this.config.model,
|
|
72
|
+
provider: baseOpts.provider ?? this.defaultOptions.provider ?? this.config.provider,
|
|
73
|
+
temperature: baseOpts.temperature ?? this.defaultOptions.temperature ?? this.config.temperature,
|
|
74
|
+
maxOutputTokens: this.maxOutputTokens(baseOpts),
|
|
75
|
+
maxSteps: baseOpts.maxSteps ?? this.config.stopSteps,
|
|
76
|
+
tools,
|
|
77
|
+
toolPermissions,
|
|
78
|
+
toolGuard: baseOpts.toolGuard ?? this.defaultOptions.toolGuard,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Streams responses with agent instructions, skills, and budget attribution.
|
|
83
|
+
*/
|
|
84
|
+
async runStream(promptOrOptions) {
|
|
85
|
+
const baseOpts = typeof promptOrOptions === 'string' ? { prompt: promptOrOptions } : { ...promptOrOptions };
|
|
86
|
+
const { tools, toolPermissions } = this.prepareTools(baseOpts.tools);
|
|
87
|
+
return this.manager.streamText({
|
|
88
|
+
...baseOpts,
|
|
89
|
+
agentName: this.config.id,
|
|
90
|
+
system: this.mergedSystem(baseOpts.system),
|
|
91
|
+
model: baseOpts.model ?? this.defaultOptions.model ?? this.config.model,
|
|
92
|
+
provider: baseOpts.provider ?? this.defaultOptions.provider ?? this.config.provider,
|
|
93
|
+
temperature: baseOpts.temperature ?? this.defaultOptions.temperature ?? this.config.temperature,
|
|
94
|
+
maxOutputTokens: this.maxOutputTokens(baseOpts),
|
|
95
|
+
maxSteps: baseOpts.maxSteps ?? this.config.stopSteps,
|
|
96
|
+
tools,
|
|
97
|
+
toolPermissions,
|
|
98
|
+
toolGuard: baseOpts.toolGuard ?? this.defaultOptions.toolGuard,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** Alias of `runStream()`. */
|
|
102
|
+
stream(promptOrOptions) {
|
|
103
|
+
return this.runStream(promptOrOptions);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generates structured output conforming to a Zod schema or the agent's outputSchema.
|
|
107
|
+
*/
|
|
108
|
+
async runStructured(schema, promptOrOptions) {
|
|
109
|
+
const targetSchema = schema ?? this.config.outputSchema;
|
|
110
|
+
if (!targetSchema) {
|
|
111
|
+
throw new Error(`No schema provided for structured output in agent "${this.config.id}"`);
|
|
112
|
+
}
|
|
113
|
+
const baseOpts = typeof promptOrOptions === 'string' ? { prompt: promptOrOptions } : (promptOrOptions ?? {});
|
|
114
|
+
return this.manager.generateObject({
|
|
115
|
+
...baseOpts,
|
|
116
|
+
schema: targetSchema,
|
|
117
|
+
schemaName: baseOpts.schemaName ?? this.config.outputSchemaName ?? this.config.id,
|
|
118
|
+
agentName: this.config.id,
|
|
119
|
+
system: this.mergedSystem(baseOpts.system),
|
|
120
|
+
model: baseOpts.model ?? this.defaultOptions.model ?? this.config.model,
|
|
121
|
+
provider: baseOpts.provider ?? this.defaultOptions.provider ?? this.config.provider,
|
|
122
|
+
temperature: baseOpts.temperature ?? this.defaultOptions.temperature ?? this.config.temperature,
|
|
123
|
+
maxOutputTokens: this.maxOutputTokens(baseOpts),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
maxOutputTokens(opts) {
|
|
127
|
+
return (opts.maxOutputTokens ??
|
|
128
|
+
opts.maxTokens ??
|
|
129
|
+
this.defaultOptions.maxOutputTokens ??
|
|
130
|
+
this.defaultOptions.maxTokens ??
|
|
131
|
+
this.config.maxTokens);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=agent_runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_runner.js","sourceRoot":"","sources":["../../../src/agents/agent_runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA"}
|