agentic-flow 2.0.13 ā 2.1.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 +87 -0
- package/README.md +376 -186
- package/dist/.tsbuildinfo +1 -1
- package/dist/agent-booster/index.d.ts +14 -0
- package/dist/agent-booster/index.d.ts.map +1 -0
- package/dist/agent-booster/index.js +25 -0
- package/dist/agent-booster/index.js.map +1 -0
- package/dist/agents/directApiAgent.d.ts.map +1 -1
- package/dist/agents/directApiAgent.js +37 -19
- package/dist/agents/directApiAgent.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts.map +1 -1
- package/dist/cli/commands/hooks.js +4 -1
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli/mcp-manager.js +13 -6
- package/dist/cli/mcp-manager.js.map +1 -1
- package/dist/harness/provenance.d.ts +72 -0
- package/dist/harness/provenance.d.ts.map +1 -0
- package/dist/harness/provenance.js +92 -0
- package/dist/harness/provenance.js.map +1 -0
- package/dist/intelligence/EmbeddingService.js +3 -3
- package/dist/intelligence/EmbeddingService.js.map +1 -1
- package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
- package/dist/intelligence/agent-booster-enhanced.js +5 -3
- package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +76 -29
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +27 -22
- package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -1
- package/dist/mcp/fastmcp/servers/http-sse.js +31 -20
- package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -1
- package/dist/mcp/fastmcp/servers/http-streaming-updated.js +33 -32
- package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -1
- package/dist/mcp/fastmcp/servers/poc-stdio.js +10 -11
- package/dist/mcp/fastmcp/servers/poc-stdio.js.map +1 -1
- package/dist/mcp/fastmcp/servers/stdio-full.js +33 -32
- package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -1
- package/dist/mcp/fastmcp/tools/agent/execute.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/agent/execute.js +8 -5
- package/dist/mcp/fastmcp/tools/agent/execute.js.map +1 -1
- package/dist/mcp/fastmcp/tools/agent/list.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/agent/list.js +4 -2
- package/dist/mcp/fastmcp/tools/agent/list.js.map +1 -1
- package/dist/mcp/fastmcp/tools/agent/parallel.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/agent/parallel.js +4 -2
- package/dist/mcp/fastmcp/tools/agent/parallel.js.map +1 -1
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js +11 -3
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/orchestrate.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +9 -5
- package/dist/mcp/fastmcp/tools/swarm/orchestrate.js.map +1 -1
- package/dist/mcp/standalone-stdio.js +76 -57
- package/dist/mcp/standalone-stdio.js.map +1 -1
- package/dist/mcp/tools/harness-tools.d.ts +28 -0
- package/dist/mcp/tools/harness-tools.d.ts.map +1 -0
- package/dist/mcp/tools/harness-tools.js +90 -0
- package/dist/mcp/tools/harness-tools.js.map +1 -0
- package/dist/optimizations/configuration-tuning.d.ts +1 -1
- package/dist/reasoningbank/utils/embeddings.d.ts +0 -6
- package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
- package/dist/reasoningbank/utils/embeddings.js +9 -43
- package/dist/reasoningbank/utils/embeddings.js.map +1 -1
- package/dist/repair/cli.d.ts +24 -0
- package/dist/repair/cli.d.ts.map +1 -0
- package/dist/repair/cli.js +69 -0
- package/dist/repair/cli.js.map +1 -0
- package/dist/repair/darwin-repair.d.ts +80 -0
- package/dist/repair/darwin-repair.d.ts.map +1 -0
- package/dist/repair/darwin-repair.js +81 -0
- package/dist/repair/darwin-repair.js.map +1 -0
- package/dist/router/cost-optimal-router.d.ts +89 -0
- package/dist/router/cost-optimal-router.d.ts.map +1 -0
- package/dist/router/cost-optimal-router.js +94 -0
- package/dist/router/cost-optimal-router.js.map +1 -0
- package/dist/router/providers/onnx-local-optimized.d.ts +1 -10
- package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
- package/dist/router/providers/onnx-local-optimized.js +9 -10
- package/dist/router/providers/onnx-local-optimized.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts +0 -9
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +7 -22
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/router/router.d.ts +29 -0
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +83 -0
- package/dist/router/router.js.map +1 -1
- package/dist/router/types.d.ts +1 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/sdk/plugins.d.ts +6 -6
- package/dist/sdk/plugins.d.ts.map +1 -1
- package/dist/sdk/plugins.js +37 -0
- package/dist/sdk/plugins.js.map +1 -1
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.d.ts.map +1 -1
- package/dist/transport/index.js +1 -0
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/quic-loader.d.ts +250 -0
- package/dist/transport/quic-loader.d.ts.map +1 -0
- package/dist/transport/quic-loader.js +507 -0
- package/dist/transport/quic-loader.js.map +1 -0
- package/dist/utils/agentBoosterPreprocessor.js +16 -22
- package/dist/utils/agentBoosterPreprocessor.js.map +1 -1
- package/package.json +21 -6
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentic-flow/agent-booster ā public entrypoint for the Agent Booster API.
|
|
3
|
+
*
|
|
4
|
+
* Fixes #167: `package.json`'s `./agent-booster` subpath export pointed at
|
|
5
|
+
* `dist/agent-booster/index.js`, which was never emitted ā the booster code
|
|
6
|
+
* lives under `intelligence/` and `optimizations/`, so importing
|
|
7
|
+
* `agentic-flow/agent-booster` failed with `ERR_MODULE_NOT_FOUND`. This barrel
|
|
8
|
+
* is that missing entrypoint: it re-exports the booster surface and provides
|
|
9
|
+
* the documented `AgentBooster` name (docs reference
|
|
10
|
+
* `import { AgentBooster } from 'agentic-flow/agent-booster'`).
|
|
11
|
+
*/
|
|
12
|
+
export * from '../intelligence/agent-booster-enhanced.js';
|
|
13
|
+
export { EnhancedAgentBooster as AgentBooster, getEnhancedBooster as getAgentBooster, default, } from '../intelligence/agent-booster-enhanced.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-booster/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,2CAA2C,CAAC;AAa1D,OAAO,EACL,oBAAoB,IAAI,YAAY,EACpC,kBAAkB,IAAI,eAAe,EACrC,OAAO,GACR,MAAM,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentic-flow/agent-booster ā public entrypoint for the Agent Booster API.
|
|
3
|
+
*
|
|
4
|
+
* Fixes #167: `package.json`'s `./agent-booster` subpath export pointed at
|
|
5
|
+
* `dist/agent-booster/index.js`, which was never emitted ā the booster code
|
|
6
|
+
* lives under `intelligence/` and `optimizations/`, so importing
|
|
7
|
+
* `agentic-flow/agent-booster` failed with `ERR_MODULE_NOT_FOUND`. This barrel
|
|
8
|
+
* is that missing entrypoint: it re-exports the booster surface and provides
|
|
9
|
+
* the documented `AgentBooster` name (docs reference
|
|
10
|
+
* `import { AgentBooster } from 'agentic-flow/agent-booster'`).
|
|
11
|
+
*/
|
|
12
|
+
export * from '../intelligence/agent-booster-enhanced.js';
|
|
13
|
+
// Canonical public names. The booster's primary class is the enhanced
|
|
14
|
+
// implementation; expose it under the documented `AgentBooster` alias
|
|
15
|
+
// (and a matching `getAgentBooster` accessor) without breaking the
|
|
16
|
+
// existing `EnhancedAgentBooster` / `getEnhancedBooster` names above.
|
|
17
|
+
//
|
|
18
|
+
// NOTE: `optimizations/agent-booster-migration` is intentionally NOT
|
|
19
|
+
// re-exported here ā it is not part of the documented `agentic-flow/
|
|
20
|
+
// agent-booster` surface and currently mixes a CommonJS `require.main`
|
|
21
|
+
// CLI guard with top-level `await`, which is invalid under this
|
|
22
|
+
// package's ESM (`"type": "module"`) and throws on import. Tracked
|
|
23
|
+
// separately from #167.
|
|
24
|
+
export { EnhancedAgentBooster as AgentBooster, getEnhancedBooster as getAgentBooster, default, } from '../intelligence/agent-booster-enhanced.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-booster/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,2CAA2C,CAAC;AAE1D,sEAAsE;AACtE,sEAAsE;AACtE,mEAAmE;AACnE,sEAAsE;AACtE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,gEAAgE;AAChE,mEAAmE;AACnE,wBAAwB;AACxB,OAAO,EACL,oBAAoB,IAAI,YAAY,EACpC,kBAAkB,IAAI,eAAe,EACrC,OAAO,GACR,MAAM,2CAA2C,CAAC","sourcesContent":["/**\n * agentic-flow/agent-booster ā public entrypoint for the Agent Booster API.\n *\n * Fixes #167: `package.json`'s `./agent-booster` subpath export pointed at\n * `dist/agent-booster/index.js`, which was never emitted ā the booster code\n * lives under `intelligence/` and `optimizations/`, so importing\n * `agentic-flow/agent-booster` failed with `ERR_MODULE_NOT_FOUND`. This barrel\n * is that missing entrypoint: it re-exports the booster surface and provides\n * the documented `AgentBooster` name (docs reference\n * `import { AgentBooster } from 'agentic-flow/agent-booster'`).\n */\n\nexport * from '../intelligence/agent-booster-enhanced.js';\n\n// Canonical public names. The booster's primary class is the enhanced\n// implementation; expose it under the documented `AgentBooster` alias\n// (and a matching `getAgentBooster` accessor) without breaking the\n// existing `EnhancedAgentBooster` / `getEnhancedBooster` names above.\n//\n// NOTE: `optimizations/agent-booster-migration` is intentionally NOT\n// re-exported here ā it is not part of the documented `agentic-flow/\n// agent-booster` surface and currently mixes a CommonJS `require.main`\n// CLI guard with top-level `await`, which is invalid under this\n// package's ESM (`\"type\": \"module\"`) and throws on import. Tracked\n// separately from #167.\nexport {\n EnhancedAgentBooster as AgentBooster,\n getEnhancedBooster as getAgentBooster,\n default,\n} from '../intelligence/agent-booster-enhanced.js';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directApiAgent.d.ts","sourceRoot":"","sources":["../../src/agents/directApiAgent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"directApiAgent.d.ts","sourceRoot":"","sources":["../../src/agents/directApiAgent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAsO1D;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmM5C"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import Anthropic from '@anthropic-ai/sdk';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
4
|
import { withRetry } from '../utils/retry.js';
|
|
5
|
-
import {
|
|
5
|
+
import { execFileSync } from 'child_process';
|
|
6
6
|
import { ModelRouter } from '../router/router.js';
|
|
7
7
|
// Lazy initialize clients
|
|
8
8
|
let anthropic = null;
|
|
@@ -139,52 +139,70 @@ const claudeFlowTools = [
|
|
|
139
139
|
async function executeToolCall(toolName, toolInput) {
|
|
140
140
|
try {
|
|
141
141
|
logger.info('Executing tool', { toolName, input: toolInput });
|
|
142
|
+
// Helper: run npx claude-flow@alpha with safe argument array (no shell interpolation)
|
|
143
|
+
const runClaudeFlow = (args) => execFileSync('npx', ['claude-flow@alpha', ...args], { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
|
|
142
144
|
switch (toolName) {
|
|
143
145
|
case 'memory_store': {
|
|
144
146
|
const { key, value, namespace = 'default', ttl } = toolInput;
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
+
const args = ['memory', 'store', String(key), String(value), '--namespace', String(namespace)];
|
|
148
|
+
if (ttl !== undefined)
|
|
149
|
+
args.push('--ttl', String(Number(ttl)));
|
|
150
|
+
runClaudeFlow(args);
|
|
147
151
|
logger.info('Memory stored', { key, namespace });
|
|
148
|
-
return `ā
Stored successfully\nš Key: ${key}\nš¦ Namespace: ${namespace}\nš¾ Size: ${value.length} bytes`;
|
|
152
|
+
return `ā
Stored successfully\nš Key: ${key}\nš¦ Namespace: ${namespace}\nš¾ Size: ${String(value).length} bytes`;
|
|
149
153
|
}
|
|
150
154
|
case 'memory_retrieve': {
|
|
151
155
|
const { key, namespace = 'default' } = toolInput;
|
|
152
|
-
const
|
|
153
|
-
const result = execSync(cmd, { encoding: 'utf-8' });
|
|
156
|
+
const result = runClaudeFlow(['memory', 'retrieve', String(key), '--namespace', String(namespace)]);
|
|
154
157
|
logger.info('Memory retrieved', { key });
|
|
155
158
|
return `ā
Retrieved:\n${result}`;
|
|
156
159
|
}
|
|
157
160
|
case 'memory_search': {
|
|
158
161
|
const { pattern, namespace, limit = 10 } = toolInput;
|
|
159
|
-
const
|
|
160
|
-
|
|
162
|
+
const args = ['memory', 'search', String(pattern), '--limit', String(Number(limit))];
|
|
163
|
+
if (namespace)
|
|
164
|
+
args.push('--namespace', String(namespace));
|
|
165
|
+
const result = runClaudeFlow(args);
|
|
161
166
|
return `š Search results:\n${result}`;
|
|
162
167
|
}
|
|
163
168
|
case 'swarm_init': {
|
|
164
169
|
const { topology, maxAgents = 8, strategy = 'balanced' } = toolInput;
|
|
165
|
-
const
|
|
166
|
-
|
|
170
|
+
const result = runClaudeFlow([
|
|
171
|
+
'swarm', 'init',
|
|
172
|
+
'--topology', String(topology),
|
|
173
|
+
'--max-agents', String(Number(maxAgents)),
|
|
174
|
+
'--strategy', String(strategy),
|
|
175
|
+
]);
|
|
167
176
|
return `š Swarm initialized:\n${result}`;
|
|
168
177
|
}
|
|
169
178
|
case 'agent_spawn': {
|
|
170
179
|
const { type, capabilities, name } = toolInput;
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
180
|
+
const args = ['agent', 'spawn', '--type', String(type)];
|
|
181
|
+
if (capabilities)
|
|
182
|
+
args.push('--capabilities', capabilities.map(String).join(','));
|
|
183
|
+
if (name)
|
|
184
|
+
args.push('--name', String(name));
|
|
185
|
+
const result = runClaudeFlow(args);
|
|
175
186
|
return `š¤ Agent spawned:\n${result}`;
|
|
176
187
|
}
|
|
177
188
|
case 'task_orchestrate': {
|
|
178
189
|
const { task, strategy = 'adaptive', priority = 'medium', maxAgents } = toolInput;
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
190
|
+
const args = [
|
|
191
|
+
'task', 'orchestrate', String(task),
|
|
192
|
+
'--strategy', String(strategy),
|
|
193
|
+
'--priority', String(priority),
|
|
194
|
+
];
|
|
195
|
+
if (maxAgents !== undefined)
|
|
196
|
+
args.push('--max-agents', String(Number(maxAgents)));
|
|
197
|
+
const result = runClaudeFlow(args);
|
|
182
198
|
return `ā” Task orchestrated:\n${result}`;
|
|
183
199
|
}
|
|
184
200
|
case 'swarm_status': {
|
|
185
201
|
const { verbose = false } = toolInput;
|
|
186
|
-
const
|
|
187
|
-
|
|
202
|
+
const args = ['swarm', 'status'];
|
|
203
|
+
if (verbose)
|
|
204
|
+
args.push('--verbose');
|
|
205
|
+
const result = runClaudeFlow(args);
|
|
188
206
|
return `š Swarm status:\n${result}`;
|
|
189
207
|
}
|
|
190
208
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directApiAgent.js","sourceRoot":"","sources":["../../src/agents/directApiAgent.ts"],"names":[],"mappings":"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","sourcesContent":["// Direct API agent with multi-provider support (Anthropic, OpenRouter, Gemini)\nimport Anthropic from '@anthropic-ai/sdk';\nimport { logger } from '../utils/logger.js';\nimport { withRetry } from '../utils/retry.js';\nimport { AgentDefinition } from '../utils/agentLoader.js';\nimport { execSync } from 'child_process';\nimport { ModelRouter } from '../router/router.js';\nimport { ChatParams, ContentBlock, Message } from '../router/types.js';\n\n// Lazy initialize clients\nlet anthropic: Anthropic | null = null;\nlet router: ModelRouter | null = null;\n\nfunction getAnthropicClient(): Anthropic {\n if (!anthropic) {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n\n // Validate API key format\n if (!apiKey) {\n throw new Error('ANTHROPIC_API_KEY is required but not set');\n }\n\n if (!apiKey.startsWith('sk-ant-')) {\n throw new Error(\n `Invalid ANTHROPIC_API_KEY format. Expected format: sk-ant-...\\n` +\n `Got: ${apiKey.substring(0, 10)}...\\n\\n` +\n `Please check your API key at: https://console.anthropic.com/settings/keys`\n );\n }\n\n anthropic = new Anthropic({ apiKey });\n }\n\n return anthropic;\n}\n\nfunction getRouter(): ModelRouter {\n if (!router) {\n // Router will now auto-create config from environment variables if no file exists\n router = new ModelRouter();\n }\n return router;\n}\n\nfunction getCurrentProvider(): string {\n // Determine provider from environment\n if (process.env.PROVIDER === 'gemini' || process.env.USE_GEMINI === 'true') {\n return 'gemini';\n }\n if (process.env.PROVIDER === 'openrouter' || process.env.USE_OPENROUTER === 'true') {\n return 'openrouter';\n }\n if (process.env.PROVIDER === 'onnx' || process.env.USE_ONNX === 'true') {\n return 'onnx';\n }\n return 'anthropic';\n}\n\n// Define claude-flow tools as native Anthropic tool definitions\nconst claudeFlowTools: Anthropic.Tool[] = [\n {\n name: 'memory_store',\n description: 'Store a value in persistent memory with optional namespace and TTL',\n input_schema: {\n type: 'object',\n properties: {\n key: { type: 'string', description: 'Memory key' },\n value: { type: 'string', description: 'Value to store' },\n namespace: { type: 'string', description: 'Memory namespace', default: 'default' },\n ttl: { type: 'number', description: 'Time-to-live in seconds' }\n },\n required: ['key', 'value']\n }\n },\n {\n name: 'memory_retrieve',\n description: 'Retrieve a value from persistent memory',\n input_schema: {\n type: 'object',\n properties: {\n key: { type: 'string', description: 'Memory key' },\n namespace: { type: 'string', description: 'Memory namespace', default: 'default' }\n },\n required: ['key']\n }\n },\n {\n name: 'memory_search',\n description: 'Search for keys matching a pattern in memory',\n input_schema: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'Search pattern (supports wildcards)' },\n namespace: { type: 'string', description: 'Memory namespace to search in' },\n limit: { type: 'number', description: 'Maximum results to return', default: 10 }\n },\n required: ['pattern']\n }\n },\n {\n name: 'swarm_init',\n description: 'Initialize a multi-agent swarm with specified topology',\n input_schema: {\n type: 'object',\n properties: {\n topology: { type: 'string', enum: ['mesh', 'hierarchical', 'ring', 'star'], description: 'Swarm topology' },\n maxAgents: { type: 'number', description: 'Maximum number of agents', default: 8 },\n strategy: { type: 'string', enum: ['balanced', 'specialized', 'adaptive'], description: 'Agent distribution strategy', default: 'balanced' }\n },\n required: ['topology']\n }\n },\n {\n name: 'agent_spawn',\n description: 'Spawn a new agent in the swarm',\n input_schema: {\n type: 'object',\n properties: {\n type: { type: 'string', enum: ['researcher', 'coder', 'analyst', 'optimizer', 'coordinator'], description: 'Agent type' },\n capabilities: { type: 'array', items: { type: 'string' }, description: 'Agent capabilities' },\n name: { type: 'string', description: 'Custom agent name' }\n },\n required: ['type']\n }\n },\n {\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm',\n input_schema: {\n type: 'object',\n properties: {\n task: { type: 'string', description: 'Task description or instructions' },\n strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'], description: 'Execution strategy', default: 'adaptive' },\n priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], description: 'Task priority', default: 'medium' },\n maxAgents: { type: 'number', description: 'Maximum agents to use for this task' }\n },\n required: ['task']\n }\n },\n {\n name: 'swarm_status',\n description: 'Get current swarm status and metrics',\n input_schema: {\n type: 'object',\n properties: {\n verbose: { type: 'boolean', description: 'Include detailed metrics', default: false }\n }\n }\n }\n];\n\n// Execute tool calls using claude-flow CLI\nasync function executeToolCall(toolName: string, toolInput: any): Promise<string> {\n try {\n logger.info('Executing tool', { toolName, input: toolInput });\n\n switch (toolName) {\n case 'memory_store': {\n const { key, value, namespace = 'default', ttl } = toolInput;\n const cmd = `npx claude-flow@alpha memory store \"${key}\" \"${value}\" --namespace \"${namespace}\"${ttl ? ` --ttl ${ttl}` : ''}`;\n const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n logger.info('Memory stored', { key, namespace });\n return `ā
Stored successfully\\nš Key: ${key}\\nš¦ Namespace: ${namespace}\\nš¾ Size: ${value.length} bytes`;\n }\n\n case 'memory_retrieve': {\n const { key, namespace = 'default' } = toolInput;\n const cmd = `npx claude-flow@alpha memory retrieve \"${key}\" --namespace \"${namespace}\"`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n logger.info('Memory retrieved', { key });\n return `ā
Retrieved:\\n${result}`;\n }\n\n case 'memory_search': {\n const { pattern, namespace, limit = 10 } = toolInput;\n const cmd = `npx claude-flow@alpha memory search \"${pattern}\"${namespace ? ` --namespace \"${namespace}\"` : ''} --limit ${limit}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n return `š Search results:\\n${result}`;\n }\n\n case 'swarm_init': {\n const { topology, maxAgents = 8, strategy = 'balanced' } = toolInput;\n const cmd = `npx claude-flow@alpha swarm init --topology ${topology} --max-agents ${maxAgents} --strategy ${strategy}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n return `š Swarm initialized:\\n${result}`;\n }\n\n case 'agent_spawn': {\n const { type, capabilities, name } = toolInput;\n const capStr = capabilities ? ` --capabilities \"${capabilities.join(',')}\"` : '';\n const nameStr = name ? ` --name \"${name}\"` : '';\n const cmd = `npx claude-flow@alpha agent spawn --type ${type}${capStr}${nameStr}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n return `š¤ Agent spawned:\\n${result}`;\n }\n\n case 'task_orchestrate': {\n const { task, strategy = 'adaptive', priority = 'medium', maxAgents } = toolInput;\n const maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';\n const cmd = `npx claude-flow@alpha task orchestrate \"${task}\" --strategy ${strategy} --priority ${priority}${maxStr}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n return `ā” Task orchestrated:\\n${result}`;\n }\n\n case 'swarm_status': {\n const { verbose = false } = toolInput;\n const cmd = `npx claude-flow@alpha swarm status${verbose ? ' --verbose' : ''}`;\n const result = execSync(cmd, { encoding: 'utf-8' });\n return `š Swarm status:\\n${result}`;\n }\n\n default:\n throw new Error(`Unknown tool: ${toolName}`);\n }\n } catch (error: any) {\n logger.error('Tool execution failed', { toolName, error: error.message });\n return `ā Tool execution failed: ${error.message}`;\n }\n}\n\n/**\n * Direct API agent using Anthropic SDK with native tool calling\n * Bypasses Claude Agent SDK subprocess issues entirely\n */\nexport async function directApiAgent(\n agent: AgentDefinition,\n input: string,\n onStream?: (chunk: string) => void\n): Promise<{ output: string; agent: string }> {\n const startTime = Date.now();\n logger.info('Starting direct API agent', {\n agent: agent.name,\n input: input.substring(0, 100)\n });\n\n return withRetry(async () => {\n const messages: Anthropic.MessageParam[] = [\n { role: 'user', content: input }\n ];\n\n let finalOutput = '';\n let toolUseCount = 0;\n const maxToolUses = 10; // Prevent infinite loops\n\n // Agentic loop: keep calling API until no more tool uses\n while (toolUseCount < maxToolUses) {\n logger.debug('API call iteration', { toolUseCount, messagesLength: messages.length });\n\n const provider = getCurrentProvider();\n let response;\n\n try {\n // Use router for non-Anthropic providers\n if (provider === 'gemini' || provider === 'openrouter') {\n const routerInstance = getRouter();\n\n // Convert Anthropic messages format to router format\n const routerMessages: Message[] = messages.map(msg => ({\n role: msg.role,\n content: typeof msg.content === 'string' ? msg.content : msg.content.map((block: any) => {\n if ('text' in block) return { type: 'text' as const, text: block.text };\n if ('tool_use_id' in block) return {\n type: 'tool_result' as const,\n content: block.content\n };\n if ('name' in block && 'input' in block) return {\n type: 'tool_use' as const,\n id: block.id,\n name: block.name,\n input: block.input\n };\n return { type: 'text' as const, text: '' };\n }).filter((b: ContentBlock) => b.type === 'text' || b.type === 'tool_use' || b.type === 'tool_result')\n }));\n\n // Add system prompt as first message if needed\n const messagesWithSystem = agent.systemPrompt\n ? [{ role: 'system' as const, content: agent.systemPrompt }, ...routerMessages]\n : routerMessages;\n\n const params: ChatParams = {\n model: provider === 'gemini'\n ? (process.env.COMPLETION_MODEL || 'gemini-2.0-flash-exp')\n : (process.env.COMPLETION_MODEL || 'deepseek/deepseek-chat'),\n messages: messagesWithSystem,\n maxTokens: 8192,\n temperature: 0.7\n };\n\n const routerResponse = await routerInstance.chat(params);\n\n // Convert router response to Anthropic format\n response = {\n id: routerResponse.id,\n model: routerResponse.model,\n stop_reason: routerResponse.stopReason,\n content: routerResponse.content.map(block => {\n if (block.type === 'text') return { type: 'text' as const, text: block.text || '' };\n if (block.type === 'tool_use') return {\n type: 'tool_use' as const,\n id: block.id || '',\n name: block.name || '',\n input: block.input || {}\n };\n return { type: 'text' as const, text: '' };\n }) as any\n };\n } else {\n // Use Anthropic client for Anthropic provider\n const client = getAnthropicClient();\n response = await client.messages.create({\n model: process.env.COMPLETION_MODEL || 'claude-sonnet-4-5-20250929',\n max_tokens: 8192,\n system: agent.systemPrompt || 'You are a helpful AI assistant.',\n messages,\n tools: claudeFlowTools\n });\n }\n } catch (error: any) {\n // Enhance authentication errors with helpful guidance\n if (error?.status === 401 || error?.statusCode === 401) {\n const providerName = provider === 'gemini' ? 'Google Gemini' : provider === 'openrouter' ? 'OpenRouter' : 'Anthropic';\n const apiKey = provider === 'gemini'\n ? process.env.GOOGLE_GEMINI_API_KEY\n : provider === 'openrouter'\n ? process.env.OPENROUTER_API_KEY\n : process.env.ANTHROPIC_API_KEY;\n\n throw new Error(\n `ā ${providerName} API authentication failed (401)\\n\\n` +\n `Your API key is invalid, expired, or lacks permissions.\\n` +\n `Current key: ${apiKey?.substring(0, 15)}...\\n\\n` +\n `Please check your ${providerName} API key and update your .env file.\\n\\n` +\n `Alternative providers:\\n` +\n ` --provider anthropic (Claude models)\\n` +\n ` --provider openrouter (100+ models, 99% cost savings)\\n` +\n ` --provider gemini (Google models)\\n` +\n ` --provider onnx (free local inference)`\n );\n }\n throw error;\n }\n\n logger.debug('API response', {\n stopReason: response.stop_reason,\n contentBlocks: response.content.length\n });\n\n // Process response content\n const toolResults: any[] = [];\n for (const block of response.content) {\n if (block.type === 'text') {\n finalOutput += block.text;\n if (onStream) {\n onStream(block.text);\n }\n } else if (block.type === 'tool_use') {\n toolUseCount++;\n logger.info('Tool use requested', {\n toolName: block.name,\n toolUseId: block.id\n });\n\n // Execute the tool\n const toolResult = await executeToolCall(block.name, block.input);\n\n // Collect tool result\n toolResults.push({\n type: 'tool_result',\n tool_use_id: block.id,\n content: toolResult\n });\n\n logger.debug('Tool result collected', {\n toolUseId: block.id,\n resultLength: toolResult.length\n });\n }\n }\n\n // If there were tool uses, add assistant message and all tool results\n if (toolResults.length > 0) {\n // Add assistant message with tool uses\n messages.push({\n role: 'assistant',\n content: response.content\n });\n\n // Add all tool results in one user message\n messages.push({\n role: 'user',\n content: toolResults\n });\n\n logger.debug('Tool results added to conversation', {\n count: toolResults.length\n });\n }\n\n // Stop if no tool use or end_turn\n if (response.stop_reason === 'end_turn' || response.content.every((b: any) => b.type === 'text')) {\n // Add final assistant message if it has text\n const textContent = response.content.filter((b: any) => b.type === 'text');\n if (textContent.length > 0 && messages[messages.length - 1].role !== 'assistant') {\n messages.push({\n role: 'assistant',\n content: response.content\n });\n }\n break;\n }\n }\n\n const duration = Date.now() - startTime;\n logger.info('Direct API agent completed', {\n agent: agent.name,\n duration,\n toolUseCount,\n outputLength: finalOutput.length\n });\n\n return { output: finalOutput, agent: agent.name };\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"directApiAgent.js","sourceRoot":"","sources":["../../src/agents/directApiAgent.ts"],"names":[],"mappings":"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","sourcesContent":["// Direct API agent with multi-provider support (Anthropic, OpenRouter, Gemini)\nimport Anthropic from '@anthropic-ai/sdk';\nimport { logger } from '../utils/logger.js';\nimport { withRetry } from '../utils/retry.js';\nimport { AgentDefinition } from '../utils/agentLoader.js';\nimport { execFileSync } from 'child_process';\nimport { ModelRouter } from '../router/router.js';\nimport { ChatParams, ContentBlock, Message } from '../router/types.js';\n\n// Lazy initialize clients\nlet anthropic: Anthropic | null = null;\nlet router: ModelRouter | null = null;\n\nfunction getAnthropicClient(): Anthropic {\n if (!anthropic) {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n\n // Validate API key format\n if (!apiKey) {\n throw new Error('ANTHROPIC_API_KEY is required but not set');\n }\n\n if (!apiKey.startsWith('sk-ant-')) {\n throw new Error(\n `Invalid ANTHROPIC_API_KEY format. Expected format: sk-ant-...\\n` +\n `Got: ${apiKey.substring(0, 10)}...\\n\\n` +\n `Please check your API key at: https://console.anthropic.com/settings/keys`\n );\n }\n\n anthropic = new Anthropic({ apiKey });\n }\n\n return anthropic;\n}\n\nfunction getRouter(): ModelRouter {\n if (!router) {\n // Router will now auto-create config from environment variables if no file exists\n router = new ModelRouter();\n }\n return router;\n}\n\nfunction getCurrentProvider(): string {\n // Determine provider from environment\n if (process.env.PROVIDER === 'gemini' || process.env.USE_GEMINI === 'true') {\n return 'gemini';\n }\n if (process.env.PROVIDER === 'openrouter' || process.env.USE_OPENROUTER === 'true') {\n return 'openrouter';\n }\n if (process.env.PROVIDER === 'onnx' || process.env.USE_ONNX === 'true') {\n return 'onnx';\n }\n return 'anthropic';\n}\n\n// Define claude-flow tools as native Anthropic tool definitions\nconst claudeFlowTools: Anthropic.Tool[] = [\n {\n name: 'memory_store',\n description: 'Store a value in persistent memory with optional namespace and TTL',\n input_schema: {\n type: 'object',\n properties: {\n key: { type: 'string', description: 'Memory key' },\n value: { type: 'string', description: 'Value to store' },\n namespace: { type: 'string', description: 'Memory namespace', default: 'default' },\n ttl: { type: 'number', description: 'Time-to-live in seconds' }\n },\n required: ['key', 'value']\n }\n },\n {\n name: 'memory_retrieve',\n description: 'Retrieve a value from persistent memory',\n input_schema: {\n type: 'object',\n properties: {\n key: { type: 'string', description: 'Memory key' },\n namespace: { type: 'string', description: 'Memory namespace', default: 'default' }\n },\n required: ['key']\n }\n },\n {\n name: 'memory_search',\n description: 'Search for keys matching a pattern in memory',\n input_schema: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'Search pattern (supports wildcards)' },\n namespace: { type: 'string', description: 'Memory namespace to search in' },\n limit: { type: 'number', description: 'Maximum results to return', default: 10 }\n },\n required: ['pattern']\n }\n },\n {\n name: 'swarm_init',\n description: 'Initialize a multi-agent swarm with specified topology',\n input_schema: {\n type: 'object',\n properties: {\n topology: { type: 'string', enum: ['mesh', 'hierarchical', 'ring', 'star'], description: 'Swarm topology' },\n maxAgents: { type: 'number', description: 'Maximum number of agents', default: 8 },\n strategy: { type: 'string', enum: ['balanced', 'specialized', 'adaptive'], description: 'Agent distribution strategy', default: 'balanced' }\n },\n required: ['topology']\n }\n },\n {\n name: 'agent_spawn',\n description: 'Spawn a new agent in the swarm',\n input_schema: {\n type: 'object',\n properties: {\n type: { type: 'string', enum: ['researcher', 'coder', 'analyst', 'optimizer', 'coordinator'], description: 'Agent type' },\n capabilities: { type: 'array', items: { type: 'string' }, description: 'Agent capabilities' },\n name: { type: 'string', description: 'Custom agent name' }\n },\n required: ['type']\n }\n },\n {\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm',\n input_schema: {\n type: 'object',\n properties: {\n task: { type: 'string', description: 'Task description or instructions' },\n strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'], description: 'Execution strategy', default: 'adaptive' },\n priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], description: 'Task priority', default: 'medium' },\n maxAgents: { type: 'number', description: 'Maximum agents to use for this task' }\n },\n required: ['task']\n }\n },\n {\n name: 'swarm_status',\n description: 'Get current swarm status and metrics',\n input_schema: {\n type: 'object',\n properties: {\n verbose: { type: 'boolean', description: 'Include detailed metrics', default: false }\n }\n }\n }\n];\n\n// Execute tool calls using claude-flow CLI\nasync function executeToolCall(toolName: string, toolInput: any): Promise<string> {\n try {\n logger.info('Executing tool', { toolName, input: toolInput });\n\n // Helper: run npx claude-flow@alpha with safe argument array (no shell interpolation)\n const runClaudeFlow = (args: string[]): string =>\n execFileSync('npx', ['claude-flow@alpha', ...args], { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });\n\n switch (toolName) {\n case 'memory_store': {\n const { key, value, namespace = 'default', ttl } = toolInput;\n const args = ['memory', 'store', String(key), String(value), '--namespace', String(namespace)];\n if (ttl !== undefined) args.push('--ttl', String(Number(ttl)));\n runClaudeFlow(args);\n logger.info('Memory stored', { key, namespace });\n return `ā
Stored successfully\\nš Key: ${key}\\nš¦ Namespace: ${namespace}\\nš¾ Size: ${String(value).length} bytes`;\n }\n\n case 'memory_retrieve': {\n const { key, namespace = 'default' } = toolInput;\n const result = runClaudeFlow(['memory', 'retrieve', String(key), '--namespace', String(namespace)]);\n logger.info('Memory retrieved', { key });\n return `ā
Retrieved:\\n${result}`;\n }\n\n case 'memory_search': {\n const { pattern, namespace, limit = 10 } = toolInput;\n const args = ['memory', 'search', String(pattern), '--limit', String(Number(limit))];\n if (namespace) args.push('--namespace', String(namespace));\n const result = runClaudeFlow(args);\n return `š Search results:\\n${result}`;\n }\n\n case 'swarm_init': {\n const { topology, maxAgents = 8, strategy = 'balanced' } = toolInput;\n const result = runClaudeFlow([\n 'swarm', 'init',\n '--topology', String(topology),\n '--max-agents', String(Number(maxAgents)),\n '--strategy', String(strategy),\n ]);\n return `š Swarm initialized:\\n${result}`;\n }\n\n case 'agent_spawn': {\n const { type, capabilities, name } = toolInput;\n const args = ['agent', 'spawn', '--type', String(type)];\n if (capabilities) args.push('--capabilities', capabilities.map(String).join(','));\n if (name) args.push('--name', String(name));\n const result = runClaudeFlow(args);\n return `š¤ Agent spawned:\\n${result}`;\n }\n\n case 'task_orchestrate': {\n const { task, strategy = 'adaptive', priority = 'medium', maxAgents } = toolInput;\n const args = [\n 'task', 'orchestrate', String(task),\n '--strategy', String(strategy),\n '--priority', String(priority),\n ];\n if (maxAgents !== undefined) args.push('--max-agents', String(Number(maxAgents)));\n const result = runClaudeFlow(args);\n return `ā” Task orchestrated:\\n${result}`;\n }\n\n case 'swarm_status': {\n const { verbose = false } = toolInput;\n const args = ['swarm', 'status'];\n if (verbose) args.push('--verbose');\n const result = runClaudeFlow(args);\n return `š Swarm status:\\n${result}`;\n }\n\n default:\n throw new Error(`Unknown tool: ${toolName}`);\n }\n } catch (error: any) {\n logger.error('Tool execution failed', { toolName, error: error.message });\n return `ā Tool execution failed: ${error.message}`;\n }\n}\n\n/**\n * Direct API agent using Anthropic SDK with native tool calling\n * Bypasses Claude Agent SDK subprocess issues entirely\n */\nexport async function directApiAgent(\n agent: AgentDefinition,\n input: string,\n onStream?: (chunk: string) => void\n): Promise<{ output: string; agent: string }> {\n const startTime = Date.now();\n logger.info('Starting direct API agent', {\n agent: agent.name,\n input: input.substring(0, 100)\n });\n\n return withRetry(async () => {\n const messages: Anthropic.MessageParam[] = [\n { role: 'user', content: input }\n ];\n\n let finalOutput = '';\n let toolUseCount = 0;\n const maxToolUses = 10; // Prevent infinite loops\n\n // Agentic loop: keep calling API until no more tool uses\n while (toolUseCount < maxToolUses) {\n logger.debug('API call iteration', { toolUseCount, messagesLength: messages.length });\n\n const provider = getCurrentProvider();\n let response;\n\n try {\n // Use router for non-Anthropic providers\n if (provider === 'gemini' || provider === 'openrouter') {\n const routerInstance = getRouter();\n\n // Convert Anthropic messages format to router format\n const routerMessages: Message[] = messages.map(msg => ({\n role: msg.role,\n content: typeof msg.content === 'string' ? msg.content : msg.content.map((block: any) => {\n if ('text' in block) return { type: 'text' as const, text: block.text };\n if ('tool_use_id' in block) return {\n type: 'tool_result' as const,\n content: block.content\n };\n if ('name' in block && 'input' in block) return {\n type: 'tool_use' as const,\n id: block.id,\n name: block.name,\n input: block.input\n };\n return { type: 'text' as const, text: '' };\n }).filter((b: ContentBlock) => b.type === 'text' || b.type === 'tool_use' || b.type === 'tool_result')\n }));\n\n // Add system prompt as first message if needed\n const messagesWithSystem = agent.systemPrompt\n ? [{ role: 'system' as const, content: agent.systemPrompt }, ...routerMessages]\n : routerMessages;\n\n const params: ChatParams = {\n model: provider === 'gemini'\n ? (process.env.COMPLETION_MODEL || 'gemini-2.0-flash-exp')\n : (process.env.COMPLETION_MODEL || 'deepseek/deepseek-chat'),\n messages: messagesWithSystem,\n maxTokens: 8192,\n temperature: 0.7\n };\n\n const routerResponse = await routerInstance.chat(params);\n\n // Convert router response to Anthropic format\n response = {\n id: routerResponse.id,\n model: routerResponse.model,\n stop_reason: routerResponse.stopReason,\n content: routerResponse.content.map(block => {\n if (block.type === 'text') return { type: 'text' as const, text: block.text || '' };\n if (block.type === 'tool_use') return {\n type: 'tool_use' as const,\n id: block.id || '',\n name: block.name || '',\n input: block.input || {}\n };\n return { type: 'text' as const, text: '' };\n }) as any\n };\n } else {\n // Use Anthropic client for Anthropic provider\n const client = getAnthropicClient();\n response = await client.messages.create({\n model: process.env.COMPLETION_MODEL || 'claude-sonnet-4-5-20250929',\n max_tokens: 8192,\n system: agent.systemPrompt || 'You are a helpful AI assistant.',\n messages,\n tools: claudeFlowTools\n });\n }\n } catch (error: any) {\n // Enhance authentication errors with helpful guidance\n if (error?.status === 401 || error?.statusCode === 401) {\n const providerName = provider === 'gemini' ? 'Google Gemini' : provider === 'openrouter' ? 'OpenRouter' : 'Anthropic';\n const apiKey = provider === 'gemini'\n ? process.env.GOOGLE_GEMINI_API_KEY\n : provider === 'openrouter'\n ? process.env.OPENROUTER_API_KEY\n : process.env.ANTHROPIC_API_KEY;\n\n throw new Error(\n `ā ${providerName} API authentication failed (401)\\n\\n` +\n `Your API key is invalid, expired, or lacks permissions.\\n` +\n `Current key: ${apiKey?.substring(0, 15)}...\\n\\n` +\n `Please check your ${providerName} API key and update your .env file.\\n\\n` +\n `Alternative providers:\\n` +\n ` --provider anthropic (Claude models)\\n` +\n ` --provider openrouter (100+ models, 99% cost savings)\\n` +\n ` --provider gemini (Google models)\\n` +\n ` --provider onnx (free local inference)`\n );\n }\n throw error;\n }\n\n logger.debug('API response', {\n stopReason: response.stop_reason,\n contentBlocks: response.content.length\n });\n\n // Process response content\n const toolResults: any[] = [];\n for (const block of response.content) {\n if (block.type === 'text') {\n finalOutput += block.text;\n if (onStream) {\n onStream(block.text);\n }\n } else if (block.type === 'tool_use') {\n toolUseCount++;\n logger.info('Tool use requested', {\n toolName: block.name,\n toolUseId: block.id\n });\n\n // Execute the tool\n const toolResult = await executeToolCall(block.name, block.input);\n\n // Collect tool result\n toolResults.push({\n type: 'tool_result',\n tool_use_id: block.id,\n content: toolResult\n });\n\n logger.debug('Tool result collected', {\n toolUseId: block.id,\n resultLength: toolResult.length\n });\n }\n }\n\n // If there were tool uses, add assistant message and all tool results\n if (toolResults.length > 0) {\n // Add assistant message with tool uses\n messages.push({\n role: 'assistant',\n content: response.content\n });\n\n // Add all tool results in one user message\n messages.push({\n role: 'user',\n content: toolResults\n });\n\n logger.debug('Tool results added to conversation', {\n count: toolResults.length\n });\n }\n\n // Stop if no tool use or end_turn\n if (response.stop_reason === 'end_turn' || response.content.every((b: any) => b.type === 'text')) {\n // Add final assistant message if it has text\n const textContent = response.content.filter((b: any) => b.type === 'text');\n if (textContent.length > 0 && messages[messages.length - 1].role !== 'assistant') {\n messages.push({\n role: 'assistant',\n content: response.content\n });\n }\n break;\n }\n }\n\n const duration = Date.now() - startTime;\n logger.info('Direct API agent completed', {\n agent: agent.name,\n duration,\n toolUseCount,\n outputLength: finalOutput.length\n });\n\n return { output: finalOutput, agent: agent.name };\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,wBAAgB,kBAAkB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,wBAAgB,kBAAkB,IAAI,OAAO,CAkkC5C;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -464,8 +464,11 @@ function readJson(file) {
|
|
|
464
464
|
}
|
|
465
465
|
|
|
466
466
|
function querySqlite(db, sql) {
|
|
467
|
+
// Pass db path and sql as separate arguments to avoid shell injection
|
|
467
468
|
try {
|
|
468
|
-
|
|
469
|
+
const { spawnSync } = require('child_process');
|
|
470
|
+
const result = spawnSync('sqlite3', [db, sql], { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 1000 });
|
|
471
|
+
return result.stdout ? result.stdout.trim() : null;
|
|
469
472
|
} catch { return null; }
|
|
470
473
|
}
|
|
471
474
|
|