beth-copilot 1.0.18 → 1.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.
Files changed (291) hide show
  1. package/CHANGELOG.md +41 -28
  2. package/README.md +87 -247
  3. package/bin/cli.js +158 -358
  4. package/dist/__tests__/smoke.test.d.ts +8 -0
  5. package/dist/__tests__/smoke.test.d.ts.map +1 -0
  6. package/dist/__tests__/smoke.test.js +49 -0
  7. package/dist/__tests__/smoke.test.js.map +1 -0
  8. package/dist/cli/commands/beads.e2e.test.d.ts +13 -0
  9. package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
  10. package/dist/cli/commands/beads.e2e.test.js +526 -0
  11. package/dist/cli/commands/beads.e2e.test.js.map +1 -0
  12. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
  13. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
  14. package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
  15. package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
  16. package/dist/cli/commands/close.d.ts +89 -0
  17. package/dist/cli/commands/close.d.ts.map +1 -0
  18. package/dist/cli/commands/close.e2e.test.d.ts +27 -0
  19. package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
  20. package/dist/cli/commands/close.e2e.test.js +252 -0
  21. package/dist/cli/commands/close.e2e.test.js.map +1 -0
  22. package/dist/cli/commands/close.js +309 -0
  23. package/dist/cli/commands/close.js.map +1 -0
  24. package/dist/cli/commands/close.test.d.ts +15 -0
  25. package/dist/cli/commands/close.test.d.ts.map +1 -0
  26. package/dist/cli/commands/close.test.js +634 -0
  27. package/dist/cli/commands/close.test.js.map +1 -0
  28. package/dist/cli/commands/doctor.d.ts +23 -0
  29. package/dist/cli/commands/doctor.d.ts.map +1 -1
  30. package/dist/cli/commands/doctor.js +93 -0
  31. package/dist/cli/commands/doctor.js.map +1 -1
  32. package/dist/cli/commands/doctor.test.js +209 -0
  33. package/dist/cli/commands/doctor.test.js.map +1 -1
  34. package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
  35. package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
  36. package/dist/cli/commands/framework-isolation.test.js +119 -0
  37. package/dist/cli/commands/framework-isolation.test.js.map +1 -0
  38. package/dist/cli/commands/help.e2e.test.js +4 -4
  39. package/dist/cli/commands/help.e2e.test.js.map +1 -1
  40. package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
  41. package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
  42. package/dist/cli/commands/init-logic.e2e.test.js +305 -0
  43. package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
  44. package/dist/cli/commands/land.d.ts +142 -0
  45. package/dist/cli/commands/land.d.ts.map +1 -0
  46. package/dist/cli/commands/land.js +647 -0
  47. package/dist/cli/commands/land.js.map +1 -0
  48. package/dist/cli/commands/land.test.d.ts +20 -0
  49. package/dist/cli/commands/land.test.d.ts.map +1 -0
  50. package/dist/cli/commands/land.test.js +622 -0
  51. package/dist/cli/commands/land.test.js.map +1 -0
  52. package/dist/cli/commands/mcp.e2e.test.js +22 -29
  53. package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
  54. package/dist/cli/commands/pipeline.e2e.test.js +20 -20
  55. package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
  56. package/dist/cli/commands/pre-push-guard.d.ts +84 -0
  57. package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
  58. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
  59. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
  60. package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
  61. package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
  62. package/dist/cli/commands/pre-push-guard.js +257 -0
  63. package/dist/cli/commands/pre-push-guard.js.map +1 -0
  64. package/dist/cli/commands/pre-push-guard.test.d.ts +15 -0
  65. package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
  66. package/dist/cli/commands/pre-push-guard.test.js +397 -0
  67. package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
  68. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
  69. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
  70. package/dist/cli/commands/quickstart-expanded.e2e.test.js +179 -0
  71. package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
  72. package/dist/cli/commands/quickstart.d.ts.map +1 -1
  73. package/dist/cli/commands/quickstart.js +7 -23
  74. package/dist/cli/commands/quickstart.js.map +1 -1
  75. package/dist/cli/commands/quickstart.test.js +40 -67
  76. package/dist/cli/commands/quickstart.test.js.map +1 -1
  77. package/dist/core/agents/suite.test.js +4 -2
  78. package/dist/core/agents/suite.test.js.map +1 -1
  79. package/dist/core/agents/tools.test.js +5 -1
  80. package/dist/core/agents/tools.test.js.map +1 -1
  81. package/dist/index.d.ts +3 -10
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +5 -10
  84. package/dist/index.js.map +1 -1
  85. package/package.json +15 -9
  86. package/sbom.json +2011 -819
  87. package/templates/.github/agents/beth.agent.md +220 -66
  88. package/templates/.github/agents/developer.agent.md +53 -90
  89. package/templates/.github/agents/product-manager.agent.md +15 -68
  90. package/templates/.github/agents/researcher.agent.md +20 -71
  91. package/templates/.github/agents/security-reviewer.agent.md +29 -81
  92. package/templates/.github/agents/tester.agent.md +40 -69
  93. package/templates/.github/agents/ux-designer.agent.md +20 -74
  94. package/templates/.github/copilot-instructions.md +217 -225
  95. package/templates/AGENTS.md +108 -20
  96. package/templates/mcp.json.example +0 -3
  97. package/dist/cli/commands/client-config.d.ts +0 -31
  98. package/dist/cli/commands/client-config.d.ts.map +0 -1
  99. package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
  100. package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
  101. package/dist/cli/commands/client-config.e2e.test.js +0 -556
  102. package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
  103. package/dist/cli/commands/client-config.js +0 -73
  104. package/dist/cli/commands/client-config.js.map +0 -1
  105. package/dist/cli/commands/client-config.test.d.ts +0 -6
  106. package/dist/cli/commands/client-config.test.d.ts.map +0 -1
  107. package/dist/cli/commands/client-config.test.js +0 -133
  108. package/dist/cli/commands/client-config.test.js.map +0 -1
  109. package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
  110. package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
  111. package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
  112. package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
  113. package/dist/core/context.d.ts +0 -171
  114. package/dist/core/context.d.ts.map +0 -1
  115. package/dist/core/context.js +0 -353
  116. package/dist/core/context.js.map +0 -1
  117. package/dist/core/context.test.d.ts +0 -8
  118. package/dist/core/context.test.d.ts.map +0 -1
  119. package/dist/core/context.test.js +0 -253
  120. package/dist/core/context.test.js.map +0 -1
  121. package/dist/core/handoffs.d.ts +0 -151
  122. package/dist/core/handoffs.d.ts.map +0 -1
  123. package/dist/core/handoffs.js +0 -220
  124. package/dist/core/handoffs.js.map +0 -1
  125. package/dist/core/handoffs.test.d.ts +0 -8
  126. package/dist/core/handoffs.test.d.ts.map +0 -1
  127. package/dist/core/handoffs.test.js +0 -231
  128. package/dist/core/handoffs.test.js.map +0 -1
  129. package/dist/core/orchestrator.d.ts +0 -246
  130. package/dist/core/orchestrator.d.ts.map +0 -1
  131. package/dist/core/orchestrator.js +0 -514
  132. package/dist/core/orchestrator.js.map +0 -1
  133. package/dist/core/orchestrator.test.d.ts +0 -8
  134. package/dist/core/orchestrator.test.d.ts.map +0 -1
  135. package/dist/core/orchestrator.test.js +0 -517
  136. package/dist/core/orchestrator.test.js.map +0 -1
  137. package/dist/core/router.d.ts +0 -102
  138. package/dist/core/router.d.ts.map +0 -1
  139. package/dist/core/router.js +0 -178
  140. package/dist/core/router.js.map +0 -1
  141. package/dist/core/router.test.d.ts +0 -8
  142. package/dist/core/router.test.d.ts.map +0 -1
  143. package/dist/core/router.test.js +0 -215
  144. package/dist/core/router.test.js.map +0 -1
  145. package/dist/init.test.js +0 -288
  146. package/dist/providers/azure.d.ts +0 -147
  147. package/dist/providers/azure.d.ts.map +0 -1
  148. package/dist/providers/azure.js +0 -491
  149. package/dist/providers/azure.js.map +0 -1
  150. package/dist/providers/azure.test.d.ts +0 -11
  151. package/dist/providers/azure.test.d.ts.map +0 -1
  152. package/dist/providers/azure.test.js +0 -330
  153. package/dist/providers/azure.test.js.map +0 -1
  154. package/dist/providers/config.d.ts +0 -87
  155. package/dist/providers/config.d.ts.map +0 -1
  156. package/dist/providers/config.js +0 -193
  157. package/dist/providers/config.js.map +0 -1
  158. package/dist/providers/config.test.d.ts +0 -7
  159. package/dist/providers/config.test.d.ts.map +0 -1
  160. package/dist/providers/config.test.js +0 -370
  161. package/dist/providers/config.test.js.map +0 -1
  162. package/dist/providers/index.d.ts +0 -18
  163. package/dist/providers/index.d.ts.map +0 -1
  164. package/dist/providers/index.js +0 -14
  165. package/dist/providers/index.js.map +0 -1
  166. package/dist/providers/interface.d.ts +0 -191
  167. package/dist/providers/interface.d.ts.map +0 -1
  168. package/dist/providers/interface.js +0 -94
  169. package/dist/providers/interface.js.map +0 -1
  170. package/dist/providers/retry.d.ts +0 -128
  171. package/dist/providers/retry.d.ts.map +0 -1
  172. package/dist/providers/retry.js +0 -205
  173. package/dist/providers/retry.js.map +0 -1
  174. package/dist/providers/retry.test.d.ts +0 -7
  175. package/dist/providers/retry.test.d.ts.map +0 -1
  176. package/dist/providers/retry.test.js +0 -439
  177. package/dist/providers/retry.test.js.map +0 -1
  178. package/dist/providers/streaming.d.ts +0 -157
  179. package/dist/providers/streaming.d.ts.map +0 -1
  180. package/dist/providers/streaming.js +0 -233
  181. package/dist/providers/streaming.js.map +0 -1
  182. package/dist/providers/streaming.test.d.ts +0 -7
  183. package/dist/providers/streaming.test.d.ts.map +0 -1
  184. package/dist/providers/streaming.test.js +0 -372
  185. package/dist/providers/streaming.test.js.map +0 -1
  186. package/dist/providers/types.d.ts +0 -209
  187. package/dist/providers/types.d.ts.map +0 -1
  188. package/dist/providers/types.js +0 -53
  189. package/dist/providers/types.js.map +0 -1
  190. package/dist/providers/types.test.d.ts +0 -7
  191. package/dist/providers/types.test.d.ts.map +0 -1
  192. package/dist/providers/types.test.js +0 -141
  193. package/dist/providers/types.test.js.map +0 -1
  194. package/dist/tools/cli/beads.d.ts +0 -27
  195. package/dist/tools/cli/beads.d.ts.map +0 -1
  196. package/dist/tools/cli/beads.js +0 -172
  197. package/dist/tools/cli/beads.js.map +0 -1
  198. package/dist/tools/cli/beads.test.d.ts +0 -8
  199. package/dist/tools/cli/beads.test.d.ts.map +0 -1
  200. package/dist/tools/cli/beads.test.js +0 -264
  201. package/dist/tools/cli/beads.test.js.map +0 -1
  202. package/dist/tools/cli/editFile.d.ts +0 -17
  203. package/dist/tools/cli/editFile.d.ts.map +0 -1
  204. package/dist/tools/cli/editFile.js +0 -125
  205. package/dist/tools/cli/editFile.js.map +0 -1
  206. package/dist/tools/cli/editFile.test.d.ts +0 -8
  207. package/dist/tools/cli/editFile.test.d.ts.map +0 -1
  208. package/dist/tools/cli/editFile.test.js +0 -177
  209. package/dist/tools/cli/editFile.test.js.map +0 -1
  210. package/dist/tools/cli/readFile.d.ts +0 -25
  211. package/dist/tools/cli/readFile.d.ts.map +0 -1
  212. package/dist/tools/cli/readFile.js +0 -118
  213. package/dist/tools/cli/readFile.js.map +0 -1
  214. package/dist/tools/cli/readFile.test.d.ts +0 -8
  215. package/dist/tools/cli/readFile.test.d.ts.map +0 -1
  216. package/dist/tools/cli/readFile.test.js +0 -194
  217. package/dist/tools/cli/readFile.test.js.map +0 -1
  218. package/dist/tools/cli/search.d.ts +0 -16
  219. package/dist/tools/cli/search.d.ts.map +0 -1
  220. package/dist/tools/cli/search.js +0 -261
  221. package/dist/tools/cli/search.js.map +0 -1
  222. package/dist/tools/cli/search.test.d.ts +0 -8
  223. package/dist/tools/cli/search.test.d.ts.map +0 -1
  224. package/dist/tools/cli/search.test.js +0 -172
  225. package/dist/tools/cli/search.test.js.map +0 -1
  226. package/dist/tools/cli/subagent.d.ts +0 -43
  227. package/dist/tools/cli/subagent.d.ts.map +0 -1
  228. package/dist/tools/cli/subagent.js +0 -99
  229. package/dist/tools/cli/subagent.js.map +0 -1
  230. package/dist/tools/cli/subagent.test.d.ts +0 -8
  231. package/dist/tools/cli/subagent.test.d.ts.map +0 -1
  232. package/dist/tools/cli/subagent.test.js +0 -190
  233. package/dist/tools/cli/subagent.test.js.map +0 -1
  234. package/dist/tools/cli/terminal.d.ts +0 -19
  235. package/dist/tools/cli/terminal.d.ts.map +0 -1
  236. package/dist/tools/cli/terminal.js +0 -164
  237. package/dist/tools/cli/terminal.js.map +0 -1
  238. package/dist/tools/cli/terminal.test.d.ts +0 -8
  239. package/dist/tools/cli/terminal.test.d.ts.map +0 -1
  240. package/dist/tools/cli/terminal.test.js +0 -161
  241. package/dist/tools/cli/terminal.test.js.map +0 -1
  242. package/dist/tools/index.d.ts +0 -25
  243. package/dist/tools/index.d.ts.map +0 -1
  244. package/dist/tools/index.js +0 -41
  245. package/dist/tools/index.js.map +0 -1
  246. package/dist/tools/interface.d.ts +0 -64
  247. package/dist/tools/interface.d.ts.map +0 -1
  248. package/dist/tools/interface.js +0 -37
  249. package/dist/tools/interface.js.map +0 -1
  250. package/dist/tools/interface.test.d.ts +0 -7
  251. package/dist/tools/interface.test.d.ts.map +0 -1
  252. package/dist/tools/interface.test.js +0 -179
  253. package/dist/tools/interface.test.js.map +0 -1
  254. package/dist/tools/mcp/bridge.d.ts +0 -48
  255. package/dist/tools/mcp/bridge.d.ts.map +0 -1
  256. package/dist/tools/mcp/bridge.js +0 -128
  257. package/dist/tools/mcp/bridge.js.map +0 -1
  258. package/dist/tools/mcp/bridge.test.d.ts +0 -8
  259. package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
  260. package/dist/tools/mcp/bridge.test.js +0 -300
  261. package/dist/tools/mcp/bridge.test.js.map +0 -1
  262. package/dist/tools/mcp/client.d.ts +0 -135
  263. package/dist/tools/mcp/client.d.ts.map +0 -1
  264. package/dist/tools/mcp/client.js +0 -263
  265. package/dist/tools/mcp/client.js.map +0 -1
  266. package/dist/tools/mcp/client.test.d.ts +0 -8
  267. package/dist/tools/mcp/client.test.d.ts.map +0 -1
  268. package/dist/tools/mcp/client.test.js +0 -390
  269. package/dist/tools/mcp/client.test.js.map +0 -1
  270. package/dist/tools/registry.d.ts +0 -82
  271. package/dist/tools/registry.d.ts.map +0 -1
  272. package/dist/tools/registry.js +0 -99
  273. package/dist/tools/registry.js.map +0 -1
  274. package/dist/tools/registry.test.d.ts +0 -7
  275. package/dist/tools/registry.test.d.ts.map +0 -1
  276. package/dist/tools/registry.test.js +0 -199
  277. package/dist/tools/registry.test.js.map +0 -1
  278. package/dist/tools/suite.test.d.ts +0 -11
  279. package/dist/tools/suite.test.d.ts.map +0 -1
  280. package/dist/tools/suite.test.js +0 -119
  281. package/dist/tools/suite.test.js.map +0 -1
  282. package/dist/tools/types.d.ts +0 -75
  283. package/dist/tools/types.d.ts.map +0 -1
  284. package/dist/tools/types.js +0 -30
  285. package/dist/tools/types.js.map +0 -1
  286. package/dist/tools/types.test.d.ts +0 -7
  287. package/dist/tools/types.test.d.ts.map +0 -1
  288. package/dist/tools/types.test.js +0 -178
  289. package/dist/tools/types.test.js.map +0 -1
  290. package/templates/.vscode/mcp.json +0 -20
  291. package/templates/CLAUDE.md +0 -129
@@ -1,514 +0,0 @@
1
- /**
2
- * Orchestrator — Beth's Brain
3
- *
4
- * The main agentic loop that ties everything together:
5
- *
6
- * User message
7
- * → Route to agent (AgentRouter)
8
- * → Build context (ConversationContext)
9
- * → Inject skills (if triggers match)
10
- * → Send to LLM (Provider)
11
- * → If tool calls → execute tools (ToolRegistry)
12
- * → If subagent request → spawn child conversation
13
- * → Return tool results to LLM → loop
14
- * → If handoff → transfer to new agent (HandoffManager)
15
- * → If text response → return to caller
16
- *
17
- * The orchestrator supports both streaming and non-streaming modes,
18
- * and handles the full tool-calling loop until the model produces
19
- * a final text response or a handoff.
20
- */
21
- import { isSubagentRequest } from '../tools/cli/subagent.js';
22
- import { ConversationContext } from './context.js';
23
- import { AgentRouter } from './router.js';
24
- import { HandoffManager } from './handoffs.js';
25
- // =============================================================================
26
- // Orchestrator
27
- // =============================================================================
28
- /** Default maximum tool-call iterations per user turn */
29
- const DEFAULT_MAX_ITERATIONS = 25;
30
- /** Default maximum subagent nesting depth */
31
- const DEFAULT_MAX_SUBAGENT_DEPTH = 3;
32
- /**
33
- * The Orchestrator — Beth's brain.
34
- *
35
- * Manages the full agent loop: routing → LLM → tool calls → response.
36
- *
37
- * @example
38
- * ```typescript
39
- * const orchestrator = new Orchestrator({
40
- * agents: loadAgents('.github/agents'),
41
- * skills: loadSkills('.github/skills'),
42
- * provider: new AzureOpenAIProvider(config),
43
- * toolRegistry: createDefaultRegistry(),
44
- * toolContext: { workingDir: process.cwd(), permissions: { ... } },
45
- * });
46
- *
47
- * const result = await orchestrator.processMessage('Implement the login page');
48
- * console.log(result.response);
49
- * ```
50
- */
51
- export class Orchestrator {
52
- router;
53
- handoffs;
54
- provider;
55
- toolRegistry;
56
- toolContext;
57
- maxIterations;
58
- maxSubagentDepth;
59
- contextOptions;
60
- /** Active conversation contexts by agent ID */
61
- contexts = new Map();
62
- /** Currently active agent ID */
63
- activeAgentId;
64
- /** Observer for event callbacks */
65
- observer;
66
- constructor(config) {
67
- this.router = new AgentRouter(config.agents, config.skills, config.defaultAgentId);
68
- this.handoffs = new HandoffManager(this.router, {
69
- maxDepth: config.maxHandoffDepth,
70
- });
71
- this.provider = config.provider;
72
- this.toolRegistry = config.toolRegistry;
73
- this.toolContext = config.toolContext;
74
- this.maxIterations = config.maxIterations ?? DEFAULT_MAX_ITERATIONS;
75
- this.maxSubagentDepth = config.maxSubagentDepth ?? DEFAULT_MAX_SUBAGENT_DEPTH;
76
- this.contextOptions = config.contextOptions;
77
- // Start with the default agent
78
- this.activeAgentId = config.defaultAgentId ?? 'beth';
79
- }
80
- // ===========================================================================
81
- // Public API
82
- // ===========================================================================
83
- /**
84
- * Set an observer for orchestrator events.
85
- */
86
- setObserver(observer) {
87
- this.observer = observer;
88
- }
89
- /**
90
- * Process a user message through the full agent loop.
91
- *
92
- * This is the main entry point. It:
93
- * 1. Routes the message to the appropriate agent
94
- * 2. Injects any matching skills
95
- * 3. Runs the agent loop (LLM → tools → LLM → ...)
96
- * 4. Returns the final response
97
- *
98
- * @param userMessage - The user's input
99
- * @returns The complete turn result
100
- */
101
- async processMessage(userMessage) {
102
- return this.processMessageAtDepth(userMessage, 0);
103
- }
104
- /**
105
- * Process a message at a specific subagent depth.
106
- * Used internally for subagent chains.
107
- */
108
- async processMessageAtDepth(userMessage, subagentDepth) {
109
- // 1. Route the message
110
- const routeResult = this.router.route(userMessage, this.activeAgentId);
111
- this.observer?.onRoute?.(routeResult);
112
- // Switch active agent if routing changed it
113
- const agent = routeResult.agent;
114
- this.activeAgentId = agent.id;
115
- // 2. Get or create conversation context
116
- const context = this.getOrCreateContext(agent);
117
- // 3. Inject matched skills
118
- const injectedSkills = [];
119
- for (const skill of routeResult.matchedSkills) {
120
- if (context.injectSkill(skill)) {
121
- injectedSkills.push(skill.id);
122
- }
123
- }
124
- // 4. Add user message
125
- const prompt = routeResult.cleanedPrompt ?? userMessage;
126
- context.addUserMessage(prompt);
127
- // 5. Run the agent loop
128
- const toolCallsExecuted = [];
129
- const subagentResults = [];
130
- let iterations = 0;
131
- let handoffResult;
132
- let finalResponse = '';
133
- while (iterations < this.maxIterations) {
134
- iterations++;
135
- this.observer?.onIteration?.(iterations, agent.id);
136
- // Build messages and tool definitions
137
- const messages = context.getMessages();
138
- const toolDefs = this.getToolDefinitions(agent);
139
- // Call the LLM
140
- this.observer?.onLLMCall?.(agent.id, messages.length);
141
- const requestOptions = {};
142
- if (toolDefs.length > 0) {
143
- requestOptions.tools = toolDefs;
144
- }
145
- const llmResult = await this.callLLM(messages, requestOptions);
146
- // Process the LLM response
147
- if (llmResult.toolCalls.length > 0) {
148
- // LLM wants to call tools
149
- context.addAssistantToolCalls(llmResult.toolCalls, llmResult.content || undefined);
150
- // Execute all tool calls
151
- for (const toolCall of llmResult.toolCalls) {
152
- const record = await this.executeToolCall(toolCall, subagentDepth, subagentResults);
153
- toolCallsExecuted.push(record);
154
- // Add tool result to context
155
- context.addToolResult(toolCall.id, record.output);
156
- }
157
- // Continue the loop — LLM needs to see tool results
158
- continue;
159
- }
160
- // No tool calls — this is the final response
161
- finalResponse = llmResult.content;
162
- this.observer?.onLLMResponse?.(agent.id, finalResponse);
163
- if (finalResponse) {
164
- context.addAssistantMessage(finalResponse);
165
- }
166
- break;
167
- }
168
- // Check if we hit the iteration limit
169
- if (iterations >= this.maxIterations && !finalResponse) {
170
- finalResponse = `[Agent reached maximum iterations (${this.maxIterations}). Last response may be incomplete.]`;
171
- context.addAssistantMessage(finalResponse);
172
- }
173
- return {
174
- response: finalResponse,
175
- agentId: agent.id,
176
- routeReason: routeResult.reason,
177
- toolCallsExecuted,
178
- handoff: handoffResult,
179
- subagentResults,
180
- iterations,
181
- injectedSkills,
182
- };
183
- }
184
- /**
185
- * Execute a handoff to a different agent.
186
- *
187
- * @param toAgentId - Target agent ID
188
- * @param prompt - Message to the new agent
189
- * @returns The handoff result and potentially a new TurnResult
190
- */
191
- async executeHandoff(toAgentId, prompt) {
192
- const currentAgent = this.router.resolveAgent(this.activeAgentId);
193
- if (!currentAgent) {
194
- return {
195
- handoff: {
196
- executed: false,
197
- reason: `Current agent "${this.activeAgentId}" not found`,
198
- request: {
199
- fromAgentId: this.activeAgentId,
200
- toAgentId,
201
- prompt,
202
- label: 'Handoff',
203
- autoSend: false,
204
- },
205
- },
206
- };
207
- }
208
- const currentContext = this.contexts.get(this.activeAgentId);
209
- const request = this.handoffs.prepareHandoff(currentAgent, toAgentId, prompt, currentContext);
210
- if (!request) {
211
- return {
212
- handoff: {
213
- executed: false,
214
- reason: `Target agent "${toAgentId}" not found`,
215
- request: {
216
- fromAgentId: this.activeAgentId,
217
- toAgentId,
218
- prompt,
219
- label: 'Handoff',
220
- autoSend: false,
221
- },
222
- },
223
- };
224
- }
225
- this.observer?.onHandoff?.(request);
226
- const handoffResult = this.handoffs.executeHandoff(request);
227
- if (!handoffResult.executed || !handoffResult.targetAgent) {
228
- return { handoff: handoffResult };
229
- }
230
- // Switch to the new agent
231
- this.activeAgentId = handoffResult.targetAgent.id;
232
- // Create new context for the target agent with handoff context
233
- const newContext = this.getOrCreateContext(handoffResult.targetAgent);
234
- const handoffContext = this.handoffs.buildHandoffContext(request);
235
- newContext.addContext(handoffContext);
236
- // If auto-send, process the prompt immediately
237
- if (request.autoSend && request.prompt) {
238
- const turnResult = await this.processMessage(request.prompt);
239
- return { handoff: handoffResult, turnResult };
240
- }
241
- return { handoff: handoffResult };
242
- }
243
- /**
244
- * Get the currently active agent ID.
245
- */
246
- getActiveAgentId() {
247
- return this.activeAgentId;
248
- }
249
- /**
250
- * Get the conversation context for the active agent.
251
- */
252
- getActiveContext() {
253
- return this.contexts.get(this.activeAgentId);
254
- }
255
- /**
256
- * Get the router for external agent queries.
257
- */
258
- getRouter() {
259
- return this.router;
260
- }
261
- /**
262
- * Get the handoff manager.
263
- */
264
- getHandoffManager() {
265
- return this.handoffs;
266
- }
267
- /**
268
- * Reset all conversation state.
269
- */
270
- reset() {
271
- this.contexts.clear();
272
- this.handoffs.clearHistory();
273
- const defaultAgent = this.router.getDefaultAgent();
274
- this.activeAgentId = defaultAgent.id;
275
- }
276
- // ===========================================================================
277
- // Internal: LLM Communication
278
- // ===========================================================================
279
- /**
280
- * Call the LLM and collect the full response.
281
- * Uses streaming internally for reliability, collects into a single result.
282
- */
283
- async callLLM(messages, options) {
284
- // Use non-streaming chat for simplicity and reliability
285
- const response = await this.provider.chat(messages, options);
286
- const choice = response.choices[0];
287
- if (!choice) {
288
- return { content: '', toolCalls: [] };
289
- }
290
- return {
291
- content: choice.message.content ?? '',
292
- toolCalls: choice.message.tool_calls ?? [],
293
- };
294
- }
295
- // ===========================================================================
296
- // Internal: Tool Execution
297
- // ===========================================================================
298
- /**
299
- * Execute a single tool call and return a record.
300
- */
301
- async executeToolCall(toolCall, subagentDepth, subagentResults) {
302
- const toolName = toolCall.function.name;
303
- this.observer?.onToolCallStart?.(toolName, toolCall.function.arguments);
304
- // Look up the tool
305
- const tool = this.toolRegistry.get(toolName);
306
- if (!tool) {
307
- const record = {
308
- id: toolCall.id,
309
- name: toolName,
310
- success: false,
311
- output: `Tool "${toolName}" not found in registry`,
312
- };
313
- this.observer?.onToolCallEnd?.(record);
314
- return record;
315
- }
316
- try {
317
- // Parse arguments
318
- let args;
319
- try {
320
- args = JSON.parse(toolCall.function.arguments);
321
- }
322
- catch {
323
- const record = {
324
- id: toolCall.id,
325
- name: toolName,
326
- success: false,
327
- output: `Invalid JSON arguments: ${toolCall.function.arguments.slice(0, 200)}`,
328
- };
329
- this.observer?.onToolCallEnd?.(record);
330
- return record;
331
- }
332
- // Execute the tool
333
- const result = await tool.execute(args, this.toolContext);
334
- // Check for subagent requests
335
- if (isSubagentRequest(result)) {
336
- const subResult = await this.handleSubagentRequest(result, subagentDepth, subagentResults);
337
- const record = {
338
- id: toolCall.id,
339
- name: toolName,
340
- success: subResult.success,
341
- output: subResult.response,
342
- };
343
- this.observer?.onToolCallEnd?.(record);
344
- return record;
345
- }
346
- const record = {
347
- id: toolCall.id,
348
- name: toolName,
349
- success: result.success,
350
- output: result.output,
351
- };
352
- this.observer?.onToolCallEnd?.(record);
353
- return record;
354
- }
355
- catch (error) {
356
- const errorMessage = error instanceof Error ? error.message : String(error);
357
- const record = {
358
- id: toolCall.id,
359
- name: toolName,
360
- success: false,
361
- output: `Tool execution error: ${errorMessage}`,
362
- };
363
- this.observer?.onToolCallEnd?.(record);
364
- return record;
365
- }
366
- }
367
- /**
368
- * Handle a subagent request from a tool call.
369
- */
370
- async handleSubagentRequest(toolResult, currentDepth, subagentResults) {
371
- const metadata = toolResult.metadata;
372
- const agentName = metadata.agentName;
373
- const prompt = metadata.prompt;
374
- // Check depth limit
375
- if (currentDepth >= this.maxSubagentDepth) {
376
- const result = {
377
- agentId: agentName,
378
- prompt,
379
- response: `Subagent depth limit (${this.maxSubagentDepth}) reached. Cannot spawn "${agentName}".`,
380
- success: false,
381
- };
382
- subagentResults.push(result);
383
- return result;
384
- }
385
- // Verify the target agent exists
386
- const targetAgent = this.router.resolveAgent(agentName);
387
- if (!targetAgent) {
388
- const result = {
389
- agentId: agentName,
390
- prompt,
391
- response: `Agent "${agentName}" not found. Available agents: ${this.router.getAgents().map((a) => a.id).join(', ')}`,
392
- success: false,
393
- };
394
- subagentResults.push(result);
395
- return result;
396
- }
397
- this.observer?.onSubagentStart?.(agentName, prompt);
398
- try {
399
- // Create a fresh orchestrator context for the subagent
400
- // This runs a full agent loop in a nested context
401
- const subContext = new ConversationContext(targetAgent, this.contextOptions);
402
- subContext.addUserMessage(prompt);
403
- // Run a mini agent loop for the subagent
404
- const subResult = await this.runSubagentLoop(targetAgent, subContext, currentDepth + 1);
405
- const result = {
406
- agentId: agentName,
407
- prompt,
408
- response: subResult,
409
- success: true,
410
- };
411
- this.observer?.onSubagentEnd?.(result);
412
- subagentResults.push(result);
413
- return result;
414
- }
415
- catch (error) {
416
- const errorMessage = error instanceof Error ? error.message : String(error);
417
- const result = {
418
- agentId: agentName,
419
- prompt,
420
- response: `Subagent "${agentName}" failed: ${errorMessage}`,
421
- success: false,
422
- };
423
- this.observer?.onSubagentEnd?.(result);
424
- subagentResults.push(result);
425
- return result;
426
- }
427
- }
428
- /**
429
- * Run a mini agent loop for a subagent.
430
- * Returns the final text response.
431
- */
432
- async runSubagentLoop(agent, context, depth) {
433
- const subagentResults = [];
434
- let iterations = 0;
435
- while (iterations < this.maxIterations) {
436
- iterations++;
437
- const messages = context.getMessages();
438
- const toolDefs = this.getToolDefinitions(agent);
439
- const requestOptions = {};
440
- if (toolDefs.length > 0) {
441
- requestOptions.tools = toolDefs;
442
- }
443
- const llmResult = await this.callLLM(messages, requestOptions);
444
- if (llmResult.toolCalls.length > 0) {
445
- context.addAssistantToolCalls(llmResult.toolCalls, llmResult.content || undefined);
446
- for (const toolCall of llmResult.toolCalls) {
447
- const record = await this.executeToolCall(toolCall, depth, subagentResults);
448
- context.addToolResult(toolCall.id, record.output);
449
- }
450
- continue;
451
- }
452
- // Final response
453
- return llmResult.content;
454
- }
455
- return `[Subagent ${agent.id} reached maximum iterations (${this.maxIterations})]`;
456
- }
457
- // ===========================================================================
458
- // Internal: Context & Tools
459
- // ===========================================================================
460
- /**
461
- * Get or create a ConversationContext for an agent.
462
- */
463
- getOrCreateContext(agent) {
464
- let context = this.contexts.get(agent.id);
465
- if (!context) {
466
- context = new ConversationContext(agent, this.contextOptions);
467
- this.contexts.set(agent.id, context);
468
- }
469
- return context;
470
- }
471
- /**
472
- * Get tool definitions for an agent based on its allowed tools.
473
- *
474
- * Filters the full tool registry to only include tools the agent
475
- * is allowed to use (from its frontmatter.tools list).
476
- */
477
- getToolDefinitions(agent) {
478
- const allowedTools = agent.frontmatter.tools;
479
- if (!allowedTools || allowedTools.length === 0) {
480
- // No tool restrictions — agent gets all tools
481
- return this.toolRegistry.getDefinitions();
482
- }
483
- // Map agent tool names to registry tool names
484
- // Agent tools use names like 'readFile', 'editFiles', 'runSubagent'
485
- // Registry tools use names like 'readFile', 'editFile', 'subagent'
486
- const toolNameMap = {
487
- editFiles: 'editFile',
488
- runSubagent: 'subagent',
489
- runInTerminal: 'terminal',
490
- getTerminalOutput: 'terminal', // Same tool handles both
491
- };
492
- const definitions = [];
493
- const seen = new Set();
494
- for (const agentToolName of allowedTools) {
495
- const registryName = toolNameMap[agentToolName] ?? agentToolName;
496
- if (seen.has(registryName))
497
- continue;
498
- seen.add(registryName);
499
- const tool = this.toolRegistry.get(registryName);
500
- if (tool) {
501
- definitions.push({
502
- type: 'function',
503
- function: {
504
- name: tool.name,
505
- description: tool.description,
506
- parameters: tool.inputSchema,
507
- },
508
- });
509
- }
510
- }
511
- return definitions;
512
- }
513
- }
514
- //# sourceMappingURL=orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Orchestrator Tests
3
- *
4
- * Integration tests for the full agent loop: routing → LLM → tool calls → response.
5
- * Uses mock LLM provider and tools to verify the orchestration flow.
6
- */
7
- export {};
8
- //# sourceMappingURL=orchestrator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.test.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}