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.
- package/CHANGELOG.md +41 -28
- package/README.md +87 -247
- package/bin/cli.js +158 -358
- package/dist/__tests__/smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke.test.js +49 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/cli/commands/beads.e2e.test.d.ts +13 -0
- package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/beads.e2e.test.js +526 -0
- package/dist/cli/commands/beads.e2e.test.js.map +1 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.d.ts +89 -0
- package/dist/cli/commands/close.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.d.ts +27 -0
- package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.js +252 -0
- package/dist/cli/commands/close.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.js +309 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/close.test.d.ts +15 -0
- package/dist/cli/commands/close.test.d.ts.map +1 -0
- package/dist/cli/commands/close.test.js +634 -0
- package/dist/cli/commands/close.test.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +23 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +93 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/doctor.test.js +209 -0
- package/dist/cli/commands/doctor.test.js.map +1 -1
- package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
- package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
- package/dist/cli/commands/framework-isolation.test.js +119 -0
- package/dist/cli/commands/framework-isolation.test.js.map +1 -0
- package/dist/cli/commands/help.e2e.test.js +4 -4
- package/dist/cli/commands/help.e2e.test.js.map +1 -1
- package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
- package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/init-logic.e2e.test.js +305 -0
- package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
- package/dist/cli/commands/land.d.ts +142 -0
- package/dist/cli/commands/land.d.ts.map +1 -0
- package/dist/cli/commands/land.js +647 -0
- package/dist/cli/commands/land.js.map +1 -0
- package/dist/cli/commands/land.test.d.ts +20 -0
- package/dist/cli/commands/land.test.d.ts.map +1 -0
- package/dist/cli/commands/land.test.js +622 -0
- package/dist/cli/commands/land.test.js.map +1 -0
- package/dist/cli/commands/mcp.e2e.test.js +22 -29
- package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
- package/dist/cli/commands/pipeline.e2e.test.js +20 -20
- package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.d.ts +84 -0
- package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.js +257 -0
- package/dist/cli/commands/pre-push-guard.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts +15 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.js +397 -0
- package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js +179 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
- package/dist/cli/commands/quickstart.d.ts.map +1 -1
- package/dist/cli/commands/quickstart.js +7 -23
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/quickstart.test.js +40 -67
- package/dist/cli/commands/quickstart.test.js.map +1 -1
- package/dist/core/agents/suite.test.js +4 -2
- package/dist/core/agents/suite.test.js.map +1 -1
- package/dist/core/agents/tools.test.js +5 -1
- package/dist/core/agents/tools.test.js.map +1 -1
- package/dist/index.d.ts +3 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -10
- package/dist/index.js.map +1 -1
- package/package.json +15 -9
- package/sbom.json +2011 -819
- package/templates/.github/agents/beth.agent.md +220 -66
- package/templates/.github/agents/developer.agent.md +53 -90
- package/templates/.github/agents/product-manager.agent.md +15 -68
- package/templates/.github/agents/researcher.agent.md +20 -71
- package/templates/.github/agents/security-reviewer.agent.md +29 -81
- package/templates/.github/agents/tester.agent.md +40 -69
- package/templates/.github/agents/ux-designer.agent.md +20 -74
- package/templates/.github/copilot-instructions.md +217 -225
- package/templates/AGENTS.md +108 -20
- package/templates/mcp.json.example +0 -3
- package/dist/cli/commands/client-config.d.ts +0 -31
- package/dist/cli/commands/client-config.d.ts.map +0 -1
- package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
- package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
- package/dist/cli/commands/client-config.e2e.test.js +0 -556
- package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
- package/dist/cli/commands/client-config.js +0 -73
- package/dist/cli/commands/client-config.js.map +0 -1
- package/dist/cli/commands/client-config.test.d.ts +0 -6
- package/dist/cli/commands/client-config.test.d.ts.map +0 -1
- package/dist/cli/commands/client-config.test.js +0 -133
- package/dist/cli/commands/client-config.test.js.map +0 -1
- package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
- package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
- package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
- package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
- package/dist/core/context.d.ts +0 -171
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -353
- package/dist/core/context.js.map +0 -1
- package/dist/core/context.test.d.ts +0 -8
- package/dist/core/context.test.d.ts.map +0 -1
- package/dist/core/context.test.js +0 -253
- package/dist/core/context.test.js.map +0 -1
- package/dist/core/handoffs.d.ts +0 -151
- package/dist/core/handoffs.d.ts.map +0 -1
- package/dist/core/handoffs.js +0 -220
- package/dist/core/handoffs.js.map +0 -1
- package/dist/core/handoffs.test.d.ts +0 -8
- package/dist/core/handoffs.test.d.ts.map +0 -1
- package/dist/core/handoffs.test.js +0 -231
- package/dist/core/handoffs.test.js.map +0 -1
- package/dist/core/orchestrator.d.ts +0 -246
- package/dist/core/orchestrator.d.ts.map +0 -1
- package/dist/core/orchestrator.js +0 -514
- package/dist/core/orchestrator.js.map +0 -1
- package/dist/core/orchestrator.test.d.ts +0 -8
- package/dist/core/orchestrator.test.d.ts.map +0 -1
- package/dist/core/orchestrator.test.js +0 -517
- package/dist/core/orchestrator.test.js.map +0 -1
- package/dist/core/router.d.ts +0 -102
- package/dist/core/router.d.ts.map +0 -1
- package/dist/core/router.js +0 -178
- package/dist/core/router.js.map +0 -1
- package/dist/core/router.test.d.ts +0 -8
- package/dist/core/router.test.d.ts.map +0 -1
- package/dist/core/router.test.js +0 -215
- package/dist/core/router.test.js.map +0 -1
- package/dist/init.test.js +0 -288
- package/dist/providers/azure.d.ts +0 -147
- package/dist/providers/azure.d.ts.map +0 -1
- package/dist/providers/azure.js +0 -491
- package/dist/providers/azure.js.map +0 -1
- package/dist/providers/azure.test.d.ts +0 -11
- package/dist/providers/azure.test.d.ts.map +0 -1
- package/dist/providers/azure.test.js +0 -330
- package/dist/providers/azure.test.js.map +0 -1
- package/dist/providers/config.d.ts +0 -87
- package/dist/providers/config.d.ts.map +0 -1
- package/dist/providers/config.js +0 -193
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/config.test.d.ts +0 -7
- package/dist/providers/config.test.d.ts.map +0 -1
- package/dist/providers/config.test.js +0 -370
- package/dist/providers/config.test.js.map +0 -1
- package/dist/providers/index.d.ts +0 -18
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -14
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/interface.d.ts +0 -191
- package/dist/providers/interface.d.ts.map +0 -1
- package/dist/providers/interface.js +0 -94
- package/dist/providers/interface.js.map +0 -1
- package/dist/providers/retry.d.ts +0 -128
- package/dist/providers/retry.d.ts.map +0 -1
- package/dist/providers/retry.js +0 -205
- package/dist/providers/retry.js.map +0 -1
- package/dist/providers/retry.test.d.ts +0 -7
- package/dist/providers/retry.test.d.ts.map +0 -1
- package/dist/providers/retry.test.js +0 -439
- package/dist/providers/retry.test.js.map +0 -1
- package/dist/providers/streaming.d.ts +0 -157
- package/dist/providers/streaming.d.ts.map +0 -1
- package/dist/providers/streaming.js +0 -233
- package/dist/providers/streaming.js.map +0 -1
- package/dist/providers/streaming.test.d.ts +0 -7
- package/dist/providers/streaming.test.d.ts.map +0 -1
- package/dist/providers/streaming.test.js +0 -372
- package/dist/providers/streaming.test.js.map +0 -1
- package/dist/providers/types.d.ts +0 -209
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -53
- package/dist/providers/types.js.map +0 -1
- package/dist/providers/types.test.d.ts +0 -7
- package/dist/providers/types.test.d.ts.map +0 -1
- package/dist/providers/types.test.js +0 -141
- package/dist/providers/types.test.js.map +0 -1
- package/dist/tools/cli/beads.d.ts +0 -27
- package/dist/tools/cli/beads.d.ts.map +0 -1
- package/dist/tools/cli/beads.js +0 -172
- package/dist/tools/cli/beads.js.map +0 -1
- package/dist/tools/cli/beads.test.d.ts +0 -8
- package/dist/tools/cli/beads.test.d.ts.map +0 -1
- package/dist/tools/cli/beads.test.js +0 -264
- package/dist/tools/cli/beads.test.js.map +0 -1
- package/dist/tools/cli/editFile.d.ts +0 -17
- package/dist/tools/cli/editFile.d.ts.map +0 -1
- package/dist/tools/cli/editFile.js +0 -125
- package/dist/tools/cli/editFile.js.map +0 -1
- package/dist/tools/cli/editFile.test.d.ts +0 -8
- package/dist/tools/cli/editFile.test.d.ts.map +0 -1
- package/dist/tools/cli/editFile.test.js +0 -177
- package/dist/tools/cli/editFile.test.js.map +0 -1
- package/dist/tools/cli/readFile.d.ts +0 -25
- package/dist/tools/cli/readFile.d.ts.map +0 -1
- package/dist/tools/cli/readFile.js +0 -118
- package/dist/tools/cli/readFile.js.map +0 -1
- package/dist/tools/cli/readFile.test.d.ts +0 -8
- package/dist/tools/cli/readFile.test.d.ts.map +0 -1
- package/dist/tools/cli/readFile.test.js +0 -194
- package/dist/tools/cli/readFile.test.js.map +0 -1
- package/dist/tools/cli/search.d.ts +0 -16
- package/dist/tools/cli/search.d.ts.map +0 -1
- package/dist/tools/cli/search.js +0 -261
- package/dist/tools/cli/search.js.map +0 -1
- package/dist/tools/cli/search.test.d.ts +0 -8
- package/dist/tools/cli/search.test.d.ts.map +0 -1
- package/dist/tools/cli/search.test.js +0 -172
- package/dist/tools/cli/search.test.js.map +0 -1
- package/dist/tools/cli/subagent.d.ts +0 -43
- package/dist/tools/cli/subagent.d.ts.map +0 -1
- package/dist/tools/cli/subagent.js +0 -99
- package/dist/tools/cli/subagent.js.map +0 -1
- package/dist/tools/cli/subagent.test.d.ts +0 -8
- package/dist/tools/cli/subagent.test.d.ts.map +0 -1
- package/dist/tools/cli/subagent.test.js +0 -190
- package/dist/tools/cli/subagent.test.js.map +0 -1
- package/dist/tools/cli/terminal.d.ts +0 -19
- package/dist/tools/cli/terminal.d.ts.map +0 -1
- package/dist/tools/cli/terminal.js +0 -164
- package/dist/tools/cli/terminal.js.map +0 -1
- package/dist/tools/cli/terminal.test.d.ts +0 -8
- package/dist/tools/cli/terminal.test.d.ts.map +0 -1
- package/dist/tools/cli/terminal.test.js +0 -161
- package/dist/tools/cli/terminal.test.js.map +0 -1
- package/dist/tools/index.d.ts +0 -25
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -41
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/interface.d.ts +0 -64
- package/dist/tools/interface.d.ts.map +0 -1
- package/dist/tools/interface.js +0 -37
- package/dist/tools/interface.js.map +0 -1
- package/dist/tools/interface.test.d.ts +0 -7
- package/dist/tools/interface.test.d.ts.map +0 -1
- package/dist/tools/interface.test.js +0 -179
- package/dist/tools/interface.test.js.map +0 -1
- package/dist/tools/mcp/bridge.d.ts +0 -48
- package/dist/tools/mcp/bridge.d.ts.map +0 -1
- package/dist/tools/mcp/bridge.js +0 -128
- package/dist/tools/mcp/bridge.js.map +0 -1
- package/dist/tools/mcp/bridge.test.d.ts +0 -8
- package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
- package/dist/tools/mcp/bridge.test.js +0 -300
- package/dist/tools/mcp/bridge.test.js.map +0 -1
- package/dist/tools/mcp/client.d.ts +0 -135
- package/dist/tools/mcp/client.d.ts.map +0 -1
- package/dist/tools/mcp/client.js +0 -263
- package/dist/tools/mcp/client.js.map +0 -1
- package/dist/tools/mcp/client.test.d.ts +0 -8
- package/dist/tools/mcp/client.test.d.ts.map +0 -1
- package/dist/tools/mcp/client.test.js +0 -390
- package/dist/tools/mcp/client.test.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -82
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -99
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/registry.test.d.ts +0 -7
- package/dist/tools/registry.test.d.ts.map +0 -1
- package/dist/tools/registry.test.js +0 -199
- package/dist/tools/registry.test.js.map +0 -1
- package/dist/tools/suite.test.d.ts +0 -11
- package/dist/tools/suite.test.d.ts.map +0 -1
- package/dist/tools/suite.test.js +0 -119
- package/dist/tools/suite.test.js.map +0 -1
- package/dist/tools/types.d.ts +0 -75
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -30
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/types.test.d.ts +0 -7
- package/dist/tools/types.test.d.ts.map +0 -1
- package/dist/tools/types.test.js +0 -178
- package/dist/tools/types.test.js.map +0 -1
- package/templates/.vscode/mcp.json +0 -20
- package/templates/CLAUDE.md +0 -129
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handoffs.test.d.ts","sourceRoot":"","sources":["../../src/core/handoffs.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HandoffManager Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for agent-to-agent transfers: preparation, execution,
|
|
5
|
-
* context building, depth limits, and loop detection.
|
|
6
|
-
*/
|
|
7
|
-
import { describe, it } from 'node:test';
|
|
8
|
-
import assert from 'node:assert';
|
|
9
|
-
import { HandoffManager } from './handoffs.js';
|
|
10
|
-
import { AgentRouter } from './router.js';
|
|
11
|
-
import { ConversationContext } from './context.js';
|
|
12
|
-
// =============================================================================
|
|
13
|
-
// Test Fixtures
|
|
14
|
-
// =============================================================================
|
|
15
|
-
function createAgent(id, name, handoffs) {
|
|
16
|
-
return {
|
|
17
|
-
id,
|
|
18
|
-
frontmatter: {
|
|
19
|
-
name,
|
|
20
|
-
description: `${name} agent`,
|
|
21
|
-
tools: ['readFile'],
|
|
22
|
-
handoffs: handoffs ?? [],
|
|
23
|
-
},
|
|
24
|
-
body: `# ${name}`,
|
|
25
|
-
sourcePath: `/agents/${id}.agent.md`,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function createTestSetup(maxDepth) {
|
|
29
|
-
const beth = createAgent('beth', 'Beth', [
|
|
30
|
-
{ label: 'Development', agent: 'developer', prompt: 'Implement this', send: false },
|
|
31
|
-
{ label: 'Testing', agent: 'tester', prompt: 'Test this', send: true },
|
|
32
|
-
{ label: 'Design', agent: 'ux-designer', prompt: 'Design this' },
|
|
33
|
-
]);
|
|
34
|
-
const developer = createAgent('developer', 'developer', [
|
|
35
|
-
{ label: 'QA', agent: 'tester', prompt: 'Test the implementation', send: false },
|
|
36
|
-
{ label: 'Review', agent: 'beth', prompt: 'Review complete' },
|
|
37
|
-
]);
|
|
38
|
-
const tester = createAgent('tester', 'tester', [
|
|
39
|
-
{ label: 'Fix Issue', agent: 'developer', prompt: 'Fix this bug', send: false },
|
|
40
|
-
]);
|
|
41
|
-
const designer = createAgent('ux-designer', 'ux-designer', []);
|
|
42
|
-
const agentResult = {
|
|
43
|
-
agents: [beth, developer, tester, designer],
|
|
44
|
-
errors: [],
|
|
45
|
-
};
|
|
46
|
-
const skillResult = { skills: [], errors: [] };
|
|
47
|
-
const router = new AgentRouter(agentResult, skillResult, 'beth');
|
|
48
|
-
const manager = new HandoffManager(router, { maxDepth: maxDepth ?? 10 });
|
|
49
|
-
return { router, manager, beth, developer, tester, designer };
|
|
50
|
-
}
|
|
51
|
-
// =============================================================================
|
|
52
|
-
// Tests
|
|
53
|
-
// =============================================================================
|
|
54
|
-
describe('HandoffManager', () => {
|
|
55
|
-
describe('Handoff Discovery', () => {
|
|
56
|
-
it('should list available handoffs for an agent', () => {
|
|
57
|
-
const { manager, beth } = createTestSetup();
|
|
58
|
-
const handoffs = manager.getAvailableHandoffs(beth);
|
|
59
|
-
assert.strictEqual(handoffs.length, 3);
|
|
60
|
-
assert.strictEqual(handoffs[0].label, 'Development');
|
|
61
|
-
assert.strictEqual(handoffs[0].agent, 'developer');
|
|
62
|
-
});
|
|
63
|
-
it('should return empty array for agent with no handoffs', () => {
|
|
64
|
-
const { manager, designer } = createTestSetup();
|
|
65
|
-
const handoffs = manager.getAvailableHandoffs(designer);
|
|
66
|
-
assert.strictEqual(handoffs.length, 0);
|
|
67
|
-
});
|
|
68
|
-
it('should find a specific handoff by target', () => {
|
|
69
|
-
const { manager, beth } = createTestSetup();
|
|
70
|
-
const handoff = manager.findHandoff(beth, 'developer');
|
|
71
|
-
assert.ok(handoff);
|
|
72
|
-
assert.strictEqual(handoff.label, 'Development');
|
|
73
|
-
assert.strictEqual(handoff.prompt, 'Implement this');
|
|
74
|
-
});
|
|
75
|
-
it('should return undefined for unknown target', () => {
|
|
76
|
-
const { manager, beth } = createTestSetup();
|
|
77
|
-
const handoff = manager.findHandoff(beth, 'nonexistent');
|
|
78
|
-
assert.strictEqual(handoff, undefined);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
describe('Handoff Preparation', () => {
|
|
82
|
-
it('should prepare a handoff with defaults from definition', () => {
|
|
83
|
-
const { manager, beth } = createTestSetup();
|
|
84
|
-
const request = manager.prepareHandoff(beth, 'developer');
|
|
85
|
-
assert.ok(request);
|
|
86
|
-
assert.strictEqual(request.fromAgentId, 'beth');
|
|
87
|
-
assert.strictEqual(request.toAgentId, 'developer');
|
|
88
|
-
assert.strictEqual(request.prompt, 'Implement this');
|
|
89
|
-
assert.strictEqual(request.label, 'Development');
|
|
90
|
-
assert.strictEqual(request.autoSend, false);
|
|
91
|
-
});
|
|
92
|
-
it('should override prompt when provided', () => {
|
|
93
|
-
const { manager, beth } = createTestSetup();
|
|
94
|
-
const request = manager.prepareHandoff(beth, 'developer', 'Build the login page');
|
|
95
|
-
assert.ok(request);
|
|
96
|
-
assert.strictEqual(request.prompt, 'Build the login page');
|
|
97
|
-
});
|
|
98
|
-
it('should include conversation summary when context provided', () => {
|
|
99
|
-
const { manager, beth } = createTestSetup();
|
|
100
|
-
const ctx = new ConversationContext(beth);
|
|
101
|
-
ctx.addUserMessage('Plan authentication');
|
|
102
|
-
ctx.addAssistantMessage('I recommend JWT tokens.');
|
|
103
|
-
const request = manager.prepareHandoff(beth, 'developer', 'Implement auth', ctx);
|
|
104
|
-
assert.ok(request);
|
|
105
|
-
assert.ok(request.conversationSummary);
|
|
106
|
-
assert.strictEqual(request.conversationSummary.agentId, 'beth');
|
|
107
|
-
assert.strictEqual(request.conversationSummary.turnCount, 1);
|
|
108
|
-
});
|
|
109
|
-
it('should return null for unknown target agent', () => {
|
|
110
|
-
const { manager, beth } = createTestSetup();
|
|
111
|
-
const request = manager.prepareHandoff(beth, 'nonexistent');
|
|
112
|
-
assert.strictEqual(request, null);
|
|
113
|
-
});
|
|
114
|
-
it('should use autoSend from handoff definition', () => {
|
|
115
|
-
const { manager, beth } = createTestSetup();
|
|
116
|
-
// Tester handoff has send: true
|
|
117
|
-
const request = manager.prepareHandoff(beth, 'tester');
|
|
118
|
-
assert.ok(request);
|
|
119
|
-
assert.strictEqual(request.autoSend, true);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
describe('Handoff Execution', () => {
|
|
123
|
-
it('should execute a valid handoff', () => {
|
|
124
|
-
const { manager, beth } = createTestSetup();
|
|
125
|
-
const request = manager.prepareHandoff(beth, 'developer');
|
|
126
|
-
const result = manager.executeHandoff(request);
|
|
127
|
-
assert.strictEqual(result.executed, true);
|
|
128
|
-
assert.ok(result.targetAgent);
|
|
129
|
-
assert.strictEqual(result.targetAgent.id, 'developer');
|
|
130
|
-
});
|
|
131
|
-
it('should fail for unknown target agent', () => {
|
|
132
|
-
const { manager } = createTestSetup();
|
|
133
|
-
const request = {
|
|
134
|
-
fromAgentId: 'beth',
|
|
135
|
-
toAgentId: 'nonexistent',
|
|
136
|
-
prompt: 'Do something',
|
|
137
|
-
label: 'Test',
|
|
138
|
-
autoSend: false,
|
|
139
|
-
};
|
|
140
|
-
const result = manager.executeHandoff(request);
|
|
141
|
-
assert.strictEqual(result.executed, false);
|
|
142
|
-
assert.ok(result.reason?.includes('not found'));
|
|
143
|
-
});
|
|
144
|
-
it('should record handoff in history', () => {
|
|
145
|
-
const { manager, beth } = createTestSetup();
|
|
146
|
-
const request = manager.prepareHandoff(beth, 'developer');
|
|
147
|
-
manager.executeHandoff(request);
|
|
148
|
-
const history = manager.getHistory();
|
|
149
|
-
assert.strictEqual(history.length, 1);
|
|
150
|
-
assert.strictEqual(history[0].executed, true);
|
|
151
|
-
assert.strictEqual(history[0].request.toAgentId, 'developer');
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
describe('Depth Limits', () => {
|
|
155
|
-
it('should enforce maximum handoff depth', () => {
|
|
156
|
-
const { manager, beth, developer, tester } = createTestSetup(3);
|
|
157
|
-
// Execute 3 handoffs
|
|
158
|
-
manager.executeHandoff(manager.prepareHandoff(beth, 'developer'));
|
|
159
|
-
manager.executeHandoff(manager.prepareHandoff(developer, 'tester'));
|
|
160
|
-
manager.executeHandoff(manager.prepareHandoff(tester, 'developer'));
|
|
161
|
-
// 4th should fail
|
|
162
|
-
const request = manager.prepareHandoff(developer, 'tester');
|
|
163
|
-
const result = manager.executeHandoff(request);
|
|
164
|
-
assert.strictEqual(result.executed, false);
|
|
165
|
-
assert.ok(result.reason?.includes('depth limit'));
|
|
166
|
-
});
|
|
167
|
-
it('should detect ping-pong loops (A→B→A→B)', () => {
|
|
168
|
-
const { manager, beth, developer } = createTestSetup(20);
|
|
169
|
-
// Create a ping-pong pattern
|
|
170
|
-
manager.executeHandoff(manager.prepareHandoff(beth, 'developer'));
|
|
171
|
-
manager.executeHandoff(manager.prepareHandoff(developer, 'beth'));
|
|
172
|
-
manager.executeHandoff(manager.prepareHandoff(beth, 'developer'));
|
|
173
|
-
manager.executeHandoff(manager.prepareHandoff(developer, 'beth'));
|
|
174
|
-
// 5th should be caught as a loop
|
|
175
|
-
const request = manager.prepareHandoff(beth, 'developer');
|
|
176
|
-
const result = manager.executeHandoff(request);
|
|
177
|
-
assert.strictEqual(result.executed, false);
|
|
178
|
-
});
|
|
179
|
-
it('should track depth correctly', () => {
|
|
180
|
-
const { manager, beth } = createTestSetup();
|
|
181
|
-
assert.strictEqual(manager.getDepth(), 0);
|
|
182
|
-
manager.executeHandoff(manager.prepareHandoff(beth, 'developer'));
|
|
183
|
-
assert.strictEqual(manager.getDepth(), 1);
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
describe('Context Transfer', () => {
|
|
187
|
-
it('should build handoff context string', () => {
|
|
188
|
-
const { manager, beth } = createTestSetup();
|
|
189
|
-
const ctx = new ConversationContext(beth);
|
|
190
|
-
ctx.addUserMessage('Build auth');
|
|
191
|
-
ctx.addAssistantMessage('I recommend JWT.');
|
|
192
|
-
const request = manager.prepareHandoff(beth, 'developer', 'Implement auth', ctx);
|
|
193
|
-
const context = manager.buildHandoffContext(request);
|
|
194
|
-
assert.ok(context.includes('Handoff from beth'));
|
|
195
|
-
assert.ok(context.includes('Development'));
|
|
196
|
-
assert.ok(context.includes('Implement auth'));
|
|
197
|
-
assert.ok(context.includes('JWT'));
|
|
198
|
-
});
|
|
199
|
-
it('should include tool call summary in context', () => {
|
|
200
|
-
const { manager, beth } = createTestSetup();
|
|
201
|
-
const ctx = new ConversationContext(beth);
|
|
202
|
-
ctx.addUserMessage('Read the config');
|
|
203
|
-
ctx.addAssistantToolCalls([{ id: 'tc1', type: 'function', function: { name: 'readFile', arguments: '{"path":"config.ts"}' } }]);
|
|
204
|
-
ctx.addToolResult('tc1', 'export const config = {};');
|
|
205
|
-
ctx.addAssistantMessage('Config is empty.');
|
|
206
|
-
const request = manager.prepareHandoff(beth, 'developer', 'Update config', ctx);
|
|
207
|
-
const context = manager.buildHandoffContext(request);
|
|
208
|
-
assert.ok(context.includes('Tools used'));
|
|
209
|
-
assert.ok(context.includes('readFile'));
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
describe('History Management', () => {
|
|
213
|
-
it('should clear history', () => {
|
|
214
|
-
const { manager, beth } = createTestSetup();
|
|
215
|
-
manager.executeHandoff(manager.prepareHandoff(beth, 'developer'));
|
|
216
|
-
assert.strictEqual(manager.getHistory().length, 1);
|
|
217
|
-
manager.clearHistory();
|
|
218
|
-
assert.strictEqual(manager.getHistory().length, 0);
|
|
219
|
-
assert.strictEqual(manager.getDepth(), 0);
|
|
220
|
-
});
|
|
221
|
-
it('should return a copy of history', () => {
|
|
222
|
-
const { manager, beth } = createTestSetup();
|
|
223
|
-
manager.executeHandoff(manager.prepareHandoff(beth, 'developer'));
|
|
224
|
-
const history1 = manager.getHistory();
|
|
225
|
-
const history2 = manager.getHistory();
|
|
226
|
-
assert.deepStrictEqual(history1, history2);
|
|
227
|
-
assert.notStrictEqual(history1, history2); // Different array instances
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
//# sourceMappingURL=handoffs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handoffs.test.js","sourceRoot":"","sources":["../../src/core/handoffs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,246 +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 type { LLMProviderBase } from '../providers/interface.js';
|
|
22
|
-
import type { ToolRegistry } from '../tools/registry.js';
|
|
23
|
-
import type { ToolContext } from '../tools/types.js';
|
|
24
|
-
import type { AgentLoadResult } from './agents/types.js';
|
|
25
|
-
import type { SkillLoadResult } from './skills/types.js';
|
|
26
|
-
import { ConversationContext } from './context.js';
|
|
27
|
-
import type { ConversationContextOptions } from './context.js';
|
|
28
|
-
import { AgentRouter } from './router.js';
|
|
29
|
-
import type { RouteResult } from './router.js';
|
|
30
|
-
import { HandoffManager } from './handoffs.js';
|
|
31
|
-
import type { HandoffRequest, HandoffResult } from './handoffs.js';
|
|
32
|
-
/**
|
|
33
|
-
* Configuration for the Orchestrator.
|
|
34
|
-
*/
|
|
35
|
-
export interface OrchestratorConfig {
|
|
36
|
-
/** Loaded agent definitions */
|
|
37
|
-
agents: AgentLoadResult;
|
|
38
|
-
/** Loaded skill definitions */
|
|
39
|
-
skills: SkillLoadResult;
|
|
40
|
-
/** LLM provider for chat completions */
|
|
41
|
-
provider: LLMProviderBase;
|
|
42
|
-
/** Tool registry with all available tools */
|
|
43
|
-
toolRegistry: ToolRegistry;
|
|
44
|
-
/** Tool execution context (working dir, permissions) */
|
|
45
|
-
toolContext: ToolContext;
|
|
46
|
-
/** Default agent ID (default: 'beth') */
|
|
47
|
-
defaultAgentId?: string;
|
|
48
|
-
/** Maximum tool-calling iterations per turn (default: 25) */
|
|
49
|
-
maxIterations?: number;
|
|
50
|
-
/** Maximum subagent depth (default: 3) */
|
|
51
|
-
maxSubagentDepth?: number;
|
|
52
|
-
/** Maximum handoff depth (default: 10) */
|
|
53
|
-
maxHandoffDepth?: number;
|
|
54
|
-
/** Options for conversation contexts */
|
|
55
|
-
contextOptions?: ConversationContextOptions;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* The result of processing a single user turn.
|
|
59
|
-
*/
|
|
60
|
-
export interface TurnResult {
|
|
61
|
-
/** The final text response from the agent */
|
|
62
|
-
response: string;
|
|
63
|
-
/** The agent that produced this response */
|
|
64
|
-
agentId: string;
|
|
65
|
-
/** How the agent was selected */
|
|
66
|
-
routeReason: RouteResult['reason'];
|
|
67
|
-
/** Tool calls that were executed during this turn */
|
|
68
|
-
toolCallsExecuted: ToolCallRecord[];
|
|
69
|
-
/** Any handoff that occurred */
|
|
70
|
-
handoff?: HandoffResult;
|
|
71
|
-
/** Any subagent results that were collected */
|
|
72
|
-
subagentResults: SubagentResult[];
|
|
73
|
-
/** Number of LLM iterations used */
|
|
74
|
-
iterations: number;
|
|
75
|
-
/** Skills that were injected for this turn */
|
|
76
|
-
injectedSkills: string[];
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Record of a tool call execution.
|
|
80
|
-
*/
|
|
81
|
-
export interface ToolCallRecord {
|
|
82
|
-
/** Tool call ID */
|
|
83
|
-
id: string;
|
|
84
|
-
/** Tool name */
|
|
85
|
-
name: string;
|
|
86
|
-
/** Whether the tool executed successfully */
|
|
87
|
-
success: boolean;
|
|
88
|
-
/** Brief output or error */
|
|
89
|
-
output: string;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Result from a subagent invocation.
|
|
93
|
-
*/
|
|
94
|
-
export interface SubagentResult {
|
|
95
|
-
/** The subagent's ID */
|
|
96
|
-
agentId: string;
|
|
97
|
-
/** The prompt sent to the subagent */
|
|
98
|
-
prompt: string;
|
|
99
|
-
/** The subagent's response */
|
|
100
|
-
response: string;
|
|
101
|
-
/** Whether the subagent completed successfully */
|
|
102
|
-
success: boolean;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Callback for observing orchestrator events.
|
|
106
|
-
* Useful for logging, UI updates, and debugging.
|
|
107
|
-
*/
|
|
108
|
-
export interface OrchestratorObserver {
|
|
109
|
-
/** Called when routing is decided */
|
|
110
|
-
onRoute?: (result: RouteResult) => void;
|
|
111
|
-
/** Called before each LLM call */
|
|
112
|
-
onLLMCall?: (agentId: string, messageCount: number) => void;
|
|
113
|
-
/** Called when the LLM responds with text */
|
|
114
|
-
onLLMResponse?: (agentId: string, content: string) => void;
|
|
115
|
-
/** Called when a tool call starts */
|
|
116
|
-
onToolCallStart?: (toolName: string, args: string) => void;
|
|
117
|
-
/** Called when a tool call completes */
|
|
118
|
-
onToolCallEnd?: (record: ToolCallRecord) => void;
|
|
119
|
-
/** Called when a handoff is initiated */
|
|
120
|
-
onHandoff?: (request: HandoffRequest) => void;
|
|
121
|
-
/** Called when a subagent starts */
|
|
122
|
-
onSubagentStart?: (agentId: string, prompt: string) => void;
|
|
123
|
-
/** Called when a subagent completes */
|
|
124
|
-
onSubagentEnd?: (result: SubagentResult) => void;
|
|
125
|
-
/** Called when an iteration completes */
|
|
126
|
-
onIteration?: (iteration: number, agentId: string) => void;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* The Orchestrator — Beth's brain.
|
|
130
|
-
*
|
|
131
|
-
* Manages the full agent loop: routing → LLM → tool calls → response.
|
|
132
|
-
*
|
|
133
|
-
* @example
|
|
134
|
-
* ```typescript
|
|
135
|
-
* const orchestrator = new Orchestrator({
|
|
136
|
-
* agents: loadAgents('.github/agents'),
|
|
137
|
-
* skills: loadSkills('.github/skills'),
|
|
138
|
-
* provider: new AzureOpenAIProvider(config),
|
|
139
|
-
* toolRegistry: createDefaultRegistry(),
|
|
140
|
-
* toolContext: { workingDir: process.cwd(), permissions: { ... } },
|
|
141
|
-
* });
|
|
142
|
-
*
|
|
143
|
-
* const result = await orchestrator.processMessage('Implement the login page');
|
|
144
|
-
* console.log(result.response);
|
|
145
|
-
* ```
|
|
146
|
-
*/
|
|
147
|
-
export declare class Orchestrator {
|
|
148
|
-
private readonly router;
|
|
149
|
-
private readonly handoffs;
|
|
150
|
-
private readonly provider;
|
|
151
|
-
private readonly toolRegistry;
|
|
152
|
-
private readonly toolContext;
|
|
153
|
-
private readonly maxIterations;
|
|
154
|
-
private readonly maxSubagentDepth;
|
|
155
|
-
private readonly contextOptions?;
|
|
156
|
-
/** Active conversation contexts by agent ID */
|
|
157
|
-
private readonly contexts;
|
|
158
|
-
/** Currently active agent ID */
|
|
159
|
-
private activeAgentId;
|
|
160
|
-
/** Observer for event callbacks */
|
|
161
|
-
private observer?;
|
|
162
|
-
constructor(config: OrchestratorConfig);
|
|
163
|
-
/**
|
|
164
|
-
* Set an observer for orchestrator events.
|
|
165
|
-
*/
|
|
166
|
-
setObserver(observer: OrchestratorObserver): void;
|
|
167
|
-
/**
|
|
168
|
-
* Process a user message through the full agent loop.
|
|
169
|
-
*
|
|
170
|
-
* This is the main entry point. It:
|
|
171
|
-
* 1. Routes the message to the appropriate agent
|
|
172
|
-
* 2. Injects any matching skills
|
|
173
|
-
* 3. Runs the agent loop (LLM → tools → LLM → ...)
|
|
174
|
-
* 4. Returns the final response
|
|
175
|
-
*
|
|
176
|
-
* @param userMessage - The user's input
|
|
177
|
-
* @returns The complete turn result
|
|
178
|
-
*/
|
|
179
|
-
processMessage(userMessage: string): Promise<TurnResult>;
|
|
180
|
-
/**
|
|
181
|
-
* Process a message at a specific subagent depth.
|
|
182
|
-
* Used internally for subagent chains.
|
|
183
|
-
*/
|
|
184
|
-
private processMessageAtDepth;
|
|
185
|
-
/**
|
|
186
|
-
* Execute a handoff to a different agent.
|
|
187
|
-
*
|
|
188
|
-
* @param toAgentId - Target agent ID
|
|
189
|
-
* @param prompt - Message to the new agent
|
|
190
|
-
* @returns The handoff result and potentially a new TurnResult
|
|
191
|
-
*/
|
|
192
|
-
executeHandoff(toAgentId: string, prompt: string): Promise<{
|
|
193
|
-
handoff: HandoffResult;
|
|
194
|
-
turnResult?: TurnResult;
|
|
195
|
-
}>;
|
|
196
|
-
/**
|
|
197
|
-
* Get the currently active agent ID.
|
|
198
|
-
*/
|
|
199
|
-
getActiveAgentId(): string;
|
|
200
|
-
/**
|
|
201
|
-
* Get the conversation context for the active agent.
|
|
202
|
-
*/
|
|
203
|
-
getActiveContext(): ConversationContext | undefined;
|
|
204
|
-
/**
|
|
205
|
-
* Get the router for external agent queries.
|
|
206
|
-
*/
|
|
207
|
-
getRouter(): AgentRouter;
|
|
208
|
-
/**
|
|
209
|
-
* Get the handoff manager.
|
|
210
|
-
*/
|
|
211
|
-
getHandoffManager(): HandoffManager;
|
|
212
|
-
/**
|
|
213
|
-
* Reset all conversation state.
|
|
214
|
-
*/
|
|
215
|
-
reset(): void;
|
|
216
|
-
/**
|
|
217
|
-
* Call the LLM and collect the full response.
|
|
218
|
-
* Uses streaming internally for reliability, collects into a single result.
|
|
219
|
-
*/
|
|
220
|
-
private callLLM;
|
|
221
|
-
/**
|
|
222
|
-
* Execute a single tool call and return a record.
|
|
223
|
-
*/
|
|
224
|
-
private executeToolCall;
|
|
225
|
-
/**
|
|
226
|
-
* Handle a subagent request from a tool call.
|
|
227
|
-
*/
|
|
228
|
-
private handleSubagentRequest;
|
|
229
|
-
/**
|
|
230
|
-
* Run a mini agent loop for a subagent.
|
|
231
|
-
* Returns the final text response.
|
|
232
|
-
*/
|
|
233
|
-
private runSubagentLoop;
|
|
234
|
-
/**
|
|
235
|
-
* Get or create a ConversationContext for an agent.
|
|
236
|
-
*/
|
|
237
|
-
private getOrCreateContext;
|
|
238
|
-
/**
|
|
239
|
-
* Get tool definitions for an agent based on its allowed tools.
|
|
240
|
-
*
|
|
241
|
-
* Filters the full tool registry to only include tools the agent
|
|
242
|
-
* is allowed to use (from its frontmatter.tools list).
|
|
243
|
-
*/
|
|
244
|
-
private getToolDefinitions;
|
|
245
|
-
}
|
|
246
|
-
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
|