agentic-flow 2.0.13 → 2.0.14

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 (71) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agents/directApiAgent.d.ts.map +1 -1
  3. package/dist/agents/directApiAgent.js +37 -19
  4. package/dist/agents/directApiAgent.js.map +1 -1
  5. package/dist/cli/commands/hooks.d.ts.map +1 -1
  6. package/dist/cli/commands/hooks.js +4 -1
  7. package/dist/cli/commands/hooks.js.map +1 -1
  8. package/dist/cli/mcp-manager.js +13 -6
  9. package/dist/cli/mcp-manager.js.map +1 -1
  10. package/dist/intelligence/EmbeddingService.js +3 -3
  11. package/dist/intelligence/EmbeddingService.js.map +1 -1
  12. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  13. package/dist/intelligence/agent-booster-enhanced.js +5 -3
  14. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  15. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  16. package/dist/mcp/claudeFlowSdkServer.js +76 -29
  17. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  18. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +27 -22
  19. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -1
  20. package/dist/mcp/fastmcp/servers/http-sse.js +31 -20
  21. package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -1
  22. package/dist/mcp/fastmcp/servers/http-streaming-updated.js +33 -32
  23. package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -1
  24. package/dist/mcp/fastmcp/servers/poc-stdio.js +10 -11
  25. package/dist/mcp/fastmcp/servers/poc-stdio.js.map +1 -1
  26. package/dist/mcp/fastmcp/servers/stdio-full.js +33 -32
  27. package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -1
  28. package/dist/mcp/fastmcp/tools/agent/execute.d.ts.map +1 -1
  29. package/dist/mcp/fastmcp/tools/agent/execute.js +8 -5
  30. package/dist/mcp/fastmcp/tools/agent/execute.js.map +1 -1
  31. package/dist/mcp/fastmcp/tools/agent/list.d.ts.map +1 -1
  32. package/dist/mcp/fastmcp/tools/agent/list.js +4 -2
  33. package/dist/mcp/fastmcp/tools/agent/list.js.map +1 -1
  34. package/dist/mcp/fastmcp/tools/agent/parallel.d.ts.map +1 -1
  35. package/dist/mcp/fastmcp/tools/agent/parallel.js +4 -2
  36. package/dist/mcp/fastmcp/tools/agent/parallel.js.map +1 -1
  37. package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -1
  38. package/dist/mcp/fastmcp/tools/hooks/pretrain.js +11 -3
  39. package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -1
  40. package/dist/mcp/fastmcp/tools/swarm/orchestrate.d.ts.map +1 -1
  41. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +9 -5
  42. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js.map +1 -1
  43. package/dist/mcp/standalone-stdio.js +72 -57
  44. package/dist/mcp/standalone-stdio.js.map +1 -1
  45. package/dist/reasoningbank/utils/embeddings.d.ts +0 -6
  46. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  47. package/dist/reasoningbank/utils/embeddings.js +9 -43
  48. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  49. package/dist/router/providers/onnx-local-optimized.d.ts +1 -10
  50. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  51. package/dist/router/providers/onnx-local-optimized.js +9 -10
  52. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  53. package/dist/router/providers/onnx-local.d.ts +0 -9
  54. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  55. package/dist/router/providers/onnx-local.js +7 -22
  56. package/dist/router/providers/onnx-local.js.map +1 -1
  57. package/dist/sdk/plugins.d.ts +6 -6
  58. package/dist/sdk/plugins.d.ts.map +1 -1
  59. package/dist/sdk/plugins.js +37 -0
  60. package/dist/sdk/plugins.js.map +1 -1
  61. package/dist/transport/index.d.ts +1 -0
  62. package/dist/transport/index.d.ts.map +1 -1
  63. package/dist/transport/index.js +1 -0
  64. package/dist/transport/index.js.map +1 -1
  65. package/dist/transport/quic-loader.d.ts +217 -0
  66. package/dist/transport/quic-loader.d.ts.map +1 -0
  67. package/dist/transport/quic-loader.js +412 -0
  68. package/dist/transport/quic-loader.js.map +1 -0
  69. package/dist/utils/agentBoosterPreprocessor.js +16 -22
  70. package/dist/utils/agentBoosterPreprocessor.js.map +1 -1
  71. package/package.json +5 -4
@@ -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;AAwN1D;;;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"}
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 { execSync } from 'child_process';
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 cmd = `npx claude-flow@alpha memory store "${key}" "${value}" --namespace "${namespace}"${ttl ? ` --ttl ${ttl}` : ''}`;
146
- const result = execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
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 cmd = `npx claude-flow@alpha memory retrieve "${key}" --namespace "${namespace}"`;
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 cmd = `npx claude-flow@alpha memory search "${pattern}"${namespace ? ` --namespace "${namespace}"` : ''} --limit ${limit}`;
160
- const result = execSync(cmd, { encoding: 'utf-8' });
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 cmd = `npx claude-flow@alpha swarm init --topology ${topology} --max-agents ${maxAgents} --strategy ${strategy}`;
166
- const result = execSync(cmd, { encoding: 'utf-8' });
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 capStr = capabilities ? ` --capabilities "${capabilities.join(',')}"` : '';
172
- const nameStr = name ? ` --name "${name}"` : '';
173
- const cmd = `npx claude-flow@alpha agent spawn --type ${type}${capStr}${nameStr}`;
174
- const result = execSync(cmd, { encoding: 'utf-8' });
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 maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';
180
- const cmd = `npx claude-flow@alpha task orchestrate "${task}" --strategy ${strategy} --priority ${priority}${maxStr}`;
181
- const result = execSync(cmd, { encoding: 'utf-8' });
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 cmd = `npx claude-flow@alpha swarm status${verbose ? ' --verbose' : ''}`;
187
- const result = execSync(cmd, { encoding: 'utf-8' });
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":"AAAA,+EAA+E;AAC/E,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,0BAA0B;AAC1B,IAAI,SAAS,GAAqB,IAAI,CAAC;AACvC,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,SAAS,kBAAkB;IACzB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAE7C,0BAA0B;QAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,iEAAiE;gBACjE,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS;gBACxC,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,kFAAkF;QAClF,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB;IACzB,sCAAsC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC3E,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QACnF,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,gEAAgE;AAChE,MAAM,eAAe,GAAqB;IACxC;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,oEAAoE;QACjF,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;gBAClD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;gBACxD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;gBAClF,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;aAChE;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;SAC3B;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yCAAyC;QACtD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;gBAClD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;aACnF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8CAA8C;QAC3D,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;gBAC/E,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;gBAC3E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,EAAE,EAAE;aACjF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,wDAAwD;QACrE,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE;gBAC3G,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,EAAE;gBAClF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,UAAU,EAAE;aAC7I;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gCAAgC;QAC7C,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE;gBACzH,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE;gBAC7F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;aAC3D;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,6CAA6C;QAC1D,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBACzE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE;gBAClI,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAC1H,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;aAClF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,KAAK,EAAE;aACtF;SACF;KACF;CACF,CAAC;AAEF,2CAA2C;AAC3C,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,SAAc;IAC7D,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAE9D,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;gBAC7D,MAAM,GAAG,GAAG,uCAAuC,GAAG,MAAM,KAAK,kBAAkB,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7H,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;gBACjF,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;gBACjD,OAAO,kCAAkC,GAAG,mBAAmB,SAAS,cAAc,KAAK,CAAC,MAAM,QAAQ,CAAC;YAC7G,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC;gBACjD,MAAM,GAAG,GAAG,0CAA0C,GAAG,kBAAkB,SAAS,GAAG,CAAC;gBACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzC,OAAO,iBAAiB,MAAM,EAAE,CAAC;YACnC,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,SAAS,CAAC;gBACrD,MAAM,GAAG,GAAG,wCAAwC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,EAAE,CAAC;gBACjI,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,uBAAuB,MAAM,EAAE,CAAC;YACzC,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC;gBACrE,MAAM,GAAG,GAAG,+CAA+C,QAAQ,iBAAiB,SAAS,eAAe,QAAQ,EAAE,CAAC;gBACvH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,0BAA0B,MAAM,EAAE,CAAC;YAC5C,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;gBAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,oBAAoB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,4CAA4C,IAAI,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;gBAClF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,sBAAsB,MAAM,EAAE,CAAC;YACxC,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;gBAClF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,GAAG,GAAG,2CAA2C,IAAI,gBAAgB,QAAQ,eAAe,QAAQ,GAAG,MAAM,EAAE,CAAC;gBACtH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,yBAAyB,MAAM,EAAE,CAAC;YAC3C,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC;gBACtC,MAAM,GAAG,GAAG,qCAAqC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,qBAAqB,MAAM,EAAE,CAAC;YACvC,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,OAAO,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAsB,EACtB,KAAa,EACb,QAAkC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;QACvC,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;KAC/B,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,KAAK,IAAI,EAAE;QAC1B,MAAM,QAAQ,GAA6B;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;SACjC,CAAC;QAEF,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,yBAAyB;QAEjD,yDAAyD;QACzD,OAAO,YAAY,GAAG,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAEtF,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;YACtC,IAAI,QAAQ,CAAC;YAEb,IAAI,CAAC;gBACH,yCAAyC;gBACzC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBACvD,MAAM,cAAc,GAAG,SAAS,EAAE,CAAC;oBAEnC,qDAAqD;oBACrD,MAAM,cAAc,GAAc,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACrD,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE;4BACtF,IAAI,MAAM,IAAI,KAAK;gCAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;4BACxE,IAAI,aAAa,IAAI,KAAK;gCAAE,OAAO;oCACjC,IAAI,EAAE,aAAsB;oCAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;iCACvB,CAAC;4BACF,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK;gCAAE,OAAO;oCAC9C,IAAI,EAAE,UAAmB;oCACzB,EAAE,EAAE,KAAK,CAAC,EAAE;oCACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oCAChB,KAAK,EAAE,KAAK,CAAC,KAAK;iCACnB,CAAC;4BACF,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;wBAC7C,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;qBACvG,CAAC,CAAC,CAAC;oBAEJ,+CAA+C;oBAC/C,MAAM,kBAAkB,GAAG,KAAK,CAAC,YAAY;wBAC3C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,GAAG,cAAc,CAAC;wBAC/E,CAAC,CAAC,cAAc,CAAC;oBAEnB,MAAM,MAAM,GAAe;wBACzB,KAAK,EAAE,QAAQ,KAAK,QAAQ;4BAC1B,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,sBAAsB,CAAC;4BAC1D,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,wBAAwB,CAAC;wBAC9D,QAAQ,EAAE,kBAAkB;wBAC5B,SAAS,EAAE,IAAI;wBACf,WAAW,EAAE,GAAG;qBACjB,CAAC;oBAEF,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAEzD,8CAA8C;oBAC9C,QAAQ,GAAG;wBACT,EAAE,EAAE,cAAc,CAAC,EAAE;wBACrB,KAAK,EAAE,cAAc,CAAC,KAAK;wBAC3B,WAAW,EAAE,cAAc,CAAC,UAAU;wBACtC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;4BAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gCAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;4BACpF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gCAAE,OAAO;oCACpC,IAAI,EAAE,UAAmB;oCACzB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;oCAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;oCACtB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;iCACzB,CAAC;4BACF,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;wBAC7C,CAAC,CAAQ;qBACV,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,8CAA8C;oBAC9C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;oBACpC,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;wBACtC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,4BAA4B;wBACnE,UAAU,EAAE,IAAI;wBAChB,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,iCAAiC;wBAC/D,QAAQ;wBACR,KAAK,EAAE,eAAe;qBACvB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,sDAAsD;gBACtD,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;oBACvD,MAAM,YAAY,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;oBACtH,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ;wBAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB;wBACnC,CAAC,CAAC,QAAQ,KAAK,YAAY;4BAC3B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;4BAChC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBAElC,MAAM,IAAI,KAAK,CACb,KAAK,YAAY,sCAAsC;wBACvD,2DAA2D;wBAC3D,gBAAgB,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS;wBACjD,qBAAqB,YAAY,yCAAyC;wBAC1E,0BAA0B;wBAC1B,2CAA2C;wBAC3C,2DAA2D;wBAC3D,2CAA2C;wBAC3C,gDAAgD,CACjD,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;gBAC3B,UAAU,EAAE,QAAQ,CAAC,WAAW;gBAChC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;aACvC,CAAC,CAAC;YAEH,2BAA2B;YAC3B,MAAM,WAAW,GAAU,EAAE,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC;oBAC1B,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACrC,YAAY,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;wBAChC,QAAQ,EAAE,KAAK,CAAC,IAAI;wBACpB,SAAS,EAAE,KAAK,CAAC,EAAE;qBACpB,CAAC,CAAC;oBAEH,mBAAmB;oBACnB,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBAElE,sBAAsB;oBACtB,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;wBACrB,OAAO,EAAE,UAAU;qBACpB,CAAC,CAAC;oBAEH,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;wBACpC,SAAS,EAAE,KAAK,CAAC,EAAE;wBACnB,YAAY,EAAE,UAAU,CAAC,MAAM;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,uCAAuC;gBACvC,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC,CAAC;gBAEH,2CAA2C;gBAC3C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,WAAW;iBACrB,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;oBACjD,KAAK,EAAE,WAAW,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,kCAAkC;YAClC,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;gBACjG,6CAA6C;gBAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;gBAC3E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACjF,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxC,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ;YACR,YAAY;YACZ,YAAY,EAAE,WAAW,CAAC,MAAM;SACjC,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC","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,CA+jC5C;AAED,eAAe,kBAAkB,CAAC"}
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
- return execSync(\`sqlite3 "\${db}" "\${sql}"\`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 1000 }).trim();
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