beth-copilot 1.0.14 → 1.0.16
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 +195 -177
- package/README.md +528 -185
- package/bin/cli.js +47 -0
- package/dist/cli/commands/doctor.e2e.test.d.ts +8 -0
- package/dist/cli/commands/doctor.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/doctor.e2e.test.js +428 -0
- package/dist/cli/commands/doctor.e2e.test.js.map +1 -0
- package/dist/cli/commands/doctor.test.js +1 -1
- package/dist/cli/commands/help.e2e.test.d.ts +9 -0
- package/dist/cli/commands/help.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/help.e2e.test.js +150 -0
- package/dist/cli/commands/help.e2e.test.js.map +1 -0
- package/dist/cli/commands/init.test.d.ts +6 -0
- package/dist/cli/commands/init.test.d.ts.map +1 -0
- package/dist/cli/commands/init.test.js +289 -0
- package/dist/cli/commands/init.test.js.map +1 -0
- package/dist/cli/commands/mcp.e2e.test.d.ts +9 -0
- package/dist/cli/commands/mcp.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/mcp.e2e.test.js +139 -0
- package/dist/cli/commands/mcp.e2e.test.js.map +1 -0
- package/dist/cli/commands/pipeline.e2e.test.d.ts +9 -0
- package/dist/cli/commands/pipeline.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/pipeline.e2e.test.js +192 -0
- package/dist/cli/commands/pipeline.e2e.test.js.map +1 -0
- package/dist/cli/commands/quickstart.test.d.ts +6 -0
- package/dist/cli/commands/quickstart.test.d.ts.map +1 -0
- package/dist/cli/commands/quickstart.test.js +232 -0
- package/dist/cli/commands/quickstart.test.js.map +1 -0
- package/dist/core/agents/frontmatter.test.d.ts +8 -0
- package/dist/core/agents/frontmatter.test.d.ts.map +1 -0
- package/dist/core/agents/frontmatter.test.js +589 -0
- package/dist/core/agents/frontmatter.test.js.map +1 -0
- package/dist/core/agents/handoffs.test.d.ts +8 -0
- package/dist/core/agents/handoffs.test.d.ts.map +1 -0
- package/dist/core/agents/handoffs.test.js +320 -0
- package/dist/core/agents/handoffs.test.js.map +1 -0
- package/dist/core/agents/loader.test.js +1 -1
- package/dist/core/agents/suite.test.d.ts +8 -0
- package/dist/core/agents/suite.test.d.ts.map +1 -0
- package/dist/core/agents/suite.test.js +207 -0
- package/dist/core/agents/suite.test.js.map +1 -0
- package/dist/core/agents/tools.test.d.ts +8 -0
- package/dist/core/agents/tools.test.d.ts.map +1 -0
- package/dist/core/agents/tools.test.js +332 -0
- package/dist/core/agents/tools.test.js.map +1 -0
- package/dist/core/context.d.ts +171 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +353 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/context.test.d.ts +8 -0
- package/dist/core/context.test.d.ts.map +1 -0
- package/dist/core/context.test.js +253 -0
- package/dist/core/context.test.js.map +1 -0
- package/dist/core/handoffs.d.ts +151 -0
- package/dist/core/handoffs.d.ts.map +1 -0
- package/dist/core/handoffs.js +220 -0
- package/dist/core/handoffs.js.map +1 -0
- package/dist/core/handoffs.test.d.ts +8 -0
- package/dist/core/handoffs.test.d.ts.map +1 -0
- package/dist/core/handoffs.test.js +231 -0
- package/dist/core/handoffs.test.js.map +1 -0
- package/dist/core/orchestrator.d.ts +246 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +514 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/orchestrator.test.d.ts +8 -0
- package/dist/core/orchestrator.test.d.ts.map +1 -0
- package/dist/core/orchestrator.test.js +517 -0
- package/dist/core/orchestrator.test.js.map +1 -0
- package/dist/core/router.d.ts +102 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +178 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/router.test.d.ts +8 -0
- package/dist/core/router.test.d.ts.map +1 -0
- package/dist/core/router.test.js +215 -0
- package/dist/core/router.test.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/init.test.js +288 -0
- package/dist/providers/azure.d.ts +147 -0
- package/dist/providers/azure.d.ts.map +1 -0
- package/dist/providers/azure.js +491 -0
- package/dist/providers/azure.js.map +1 -0
- package/dist/providers/azure.test.d.ts +11 -0
- package/dist/providers/azure.test.d.ts.map +1 -0
- package/dist/providers/azure.test.js +330 -0
- package/dist/providers/azure.test.js.map +1 -0
- package/dist/providers/config.d.ts +87 -0
- package/dist/providers/config.d.ts.map +1 -0
- package/dist/providers/config.js +193 -0
- package/dist/providers/config.js.map +1 -0
- package/dist/providers/config.test.d.ts +7 -0
- package/dist/providers/config.test.d.ts.map +1 -0
- package/dist/providers/config.test.js +370 -0
- package/dist/providers/config.test.js.map +1 -0
- package/dist/providers/index.d.ts +18 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +14 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/interface.d.ts +191 -0
- package/dist/providers/interface.d.ts.map +1 -0
- package/dist/providers/interface.js +94 -0
- package/dist/providers/interface.js.map +1 -0
- package/dist/providers/retry.d.ts +128 -0
- package/dist/providers/retry.d.ts.map +1 -0
- package/dist/providers/retry.js +205 -0
- package/dist/providers/retry.js.map +1 -0
- package/dist/providers/retry.test.d.ts +7 -0
- package/dist/providers/retry.test.d.ts.map +1 -0
- package/dist/providers/retry.test.js +439 -0
- package/dist/providers/retry.test.js.map +1 -0
- package/dist/providers/streaming.d.ts +157 -0
- package/dist/providers/streaming.d.ts.map +1 -0
- package/dist/providers/streaming.js +233 -0
- package/dist/providers/streaming.js.map +1 -0
- package/dist/providers/streaming.test.d.ts +7 -0
- package/dist/providers/streaming.test.d.ts.map +1 -0
- package/dist/providers/streaming.test.js +372 -0
- package/dist/providers/streaming.test.js.map +1 -0
- package/dist/providers/types.d.ts +209 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +53 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/types.test.d.ts +7 -0
- package/dist/providers/types.test.d.ts.map +1 -0
- package/dist/providers/types.test.js +141 -0
- package/dist/providers/types.test.js.map +1 -0
- package/dist/tools/cli/beads.d.ts +27 -0
- package/dist/tools/cli/beads.d.ts.map +1 -0
- package/dist/tools/cli/beads.js +172 -0
- package/dist/tools/cli/beads.js.map +1 -0
- package/dist/tools/cli/beads.test.d.ts +8 -0
- package/dist/tools/cli/beads.test.d.ts.map +1 -0
- package/dist/tools/cli/beads.test.js +264 -0
- package/dist/tools/cli/beads.test.js.map +1 -0
- package/dist/tools/cli/editFile.d.ts +17 -0
- package/dist/tools/cli/editFile.d.ts.map +1 -0
- package/dist/tools/cli/editFile.js +125 -0
- package/dist/tools/cli/editFile.js.map +1 -0
- package/dist/tools/cli/editFile.test.d.ts +8 -0
- package/dist/tools/cli/editFile.test.d.ts.map +1 -0
- package/dist/tools/cli/editFile.test.js +177 -0
- package/dist/tools/cli/editFile.test.js.map +1 -0
- package/dist/tools/cli/readFile.d.ts +25 -0
- package/dist/tools/cli/readFile.d.ts.map +1 -0
- package/dist/tools/cli/readFile.js +118 -0
- package/dist/tools/cli/readFile.js.map +1 -0
- package/dist/tools/cli/readFile.test.d.ts +8 -0
- package/dist/tools/cli/readFile.test.d.ts.map +1 -0
- package/dist/tools/cli/readFile.test.js +194 -0
- package/dist/tools/cli/readFile.test.js.map +1 -0
- package/dist/tools/cli/search.d.ts +16 -0
- package/dist/tools/cli/search.d.ts.map +1 -0
- package/dist/tools/cli/search.js +261 -0
- package/dist/tools/cli/search.js.map +1 -0
- package/dist/tools/cli/search.test.d.ts +8 -0
- package/dist/tools/cli/search.test.d.ts.map +1 -0
- package/dist/tools/cli/search.test.js +172 -0
- package/dist/tools/cli/search.test.js.map +1 -0
- package/dist/tools/cli/subagent.d.ts +43 -0
- package/dist/tools/cli/subagent.d.ts.map +1 -0
- package/dist/tools/cli/subagent.js +99 -0
- package/dist/tools/cli/subagent.js.map +1 -0
- package/dist/tools/cli/subagent.test.d.ts +8 -0
- package/dist/tools/cli/subagent.test.d.ts.map +1 -0
- package/dist/tools/cli/subagent.test.js +190 -0
- package/dist/tools/cli/subagent.test.js.map +1 -0
- package/dist/tools/cli/terminal.d.ts +19 -0
- package/dist/tools/cli/terminal.d.ts.map +1 -0
- package/dist/tools/cli/terminal.js +164 -0
- package/dist/tools/cli/terminal.js.map +1 -0
- package/dist/tools/cli/terminal.test.d.ts +8 -0
- package/dist/tools/cli/terminal.test.d.ts.map +1 -0
- package/dist/tools/cli/terminal.test.js +161 -0
- package/dist/tools/cli/terminal.test.js.map +1 -0
- package/dist/tools/index.d.ts +25 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +41 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/interface.d.ts +64 -0
- package/dist/tools/interface.d.ts.map +1 -0
- package/dist/tools/interface.js +37 -0
- package/dist/tools/interface.js.map +1 -0
- package/dist/tools/interface.test.d.ts +7 -0
- package/dist/tools/interface.test.d.ts.map +1 -0
- package/dist/tools/interface.test.js +179 -0
- package/dist/tools/interface.test.js.map +1 -0
- package/dist/tools/mcp/bridge.d.ts +48 -0
- package/dist/tools/mcp/bridge.d.ts.map +1 -0
- package/dist/tools/mcp/bridge.js +128 -0
- package/dist/tools/mcp/bridge.js.map +1 -0
- package/dist/tools/mcp/bridge.test.d.ts +8 -0
- package/dist/tools/mcp/bridge.test.d.ts.map +1 -0
- package/dist/tools/mcp/bridge.test.js +300 -0
- package/dist/tools/mcp/bridge.test.js.map +1 -0
- package/dist/tools/mcp/client.d.ts +135 -0
- package/dist/tools/mcp/client.d.ts.map +1 -0
- package/dist/tools/mcp/client.js +263 -0
- package/dist/tools/mcp/client.js.map +1 -0
- package/dist/tools/mcp/client.test.d.ts +8 -0
- package/dist/tools/mcp/client.test.d.ts.map +1 -0
- package/dist/tools/mcp/client.test.js +390 -0
- package/dist/tools/mcp/client.test.js.map +1 -0
- package/dist/tools/registry.d.ts +82 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +99 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/registry.test.d.ts +7 -0
- package/dist/tools/registry.test.d.ts.map +1 -0
- package/dist/tools/registry.test.js +199 -0
- package/dist/tools/registry.test.js.map +1 -0
- package/dist/tools/suite.test.d.ts +11 -0
- package/dist/tools/suite.test.d.ts.map +1 -0
- package/dist/tools/suite.test.js +119 -0
- package/dist/tools/suite.test.js.map +1 -0
- package/dist/tools/types.d.ts +75 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +30 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/types.test.d.ts +7 -0
- package/dist/tools/types.test.d.ts.map +1 -0
- package/dist/tools/types.test.js +178 -0
- package/dist/tools/types.test.js.map +1 -0
- package/package.json +60 -56
- package/sbom.json +3302 -8
- package/templates/.github/agents/beth.agent.md +329 -329
- package/templates/.github/agents/developer.agent.md +572 -572
- package/templates/.github/agents/product-manager.agent.md +272 -272
- package/templates/.github/agents/researcher.agent.md +338 -338
- package/templates/.github/agents/security-reviewer.agent.md +465 -465
- package/templates/.github/agents/tester.agent.md +496 -496
- package/templates/.github/agents/ux-designer.agent.md +393 -393
- package/templates/mcp.json.example +4 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Frontmatter Validation Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for YAML frontmatter parsing and validation in agent files.
|
|
5
|
+
* Uses temporary files with inline fixtures to test edge cases.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
8
|
+
import assert from 'node:assert';
|
|
9
|
+
import { writeFileSync, mkdirSync, rmSync, existsSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { loadAgent } from './loader.js';
|
|
12
|
+
// Temp directory for test fixtures
|
|
13
|
+
const TEST_DIR = join(process.cwd(), '.test-agents-frontmatter');
|
|
14
|
+
/**
|
|
15
|
+
* Helper to create a test agent file with given content.
|
|
16
|
+
*/
|
|
17
|
+
function createTestAgent(filename, content) {
|
|
18
|
+
const filePath = join(TEST_DIR, filename);
|
|
19
|
+
writeFileSync(filePath, content, 'utf-8');
|
|
20
|
+
return filePath;
|
|
21
|
+
}
|
|
22
|
+
describe('Agent Frontmatter Validation', () => {
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
if (!existsSync(TEST_DIR)) {
|
|
25
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
if (existsSync(TEST_DIR)) {
|
|
30
|
+
rmSync(TEST_DIR, { recursive: true, force: true });
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
describe('Valid frontmatter scenarios', () => {
|
|
34
|
+
it('1. valid frontmatter with all fields parses correctly', () => {
|
|
35
|
+
const content = `---
|
|
36
|
+
name: Test Agent
|
|
37
|
+
description: A test agent for validation
|
|
38
|
+
model: Claude Opus 4.6
|
|
39
|
+
tools:
|
|
40
|
+
- codebase
|
|
41
|
+
- readFile
|
|
42
|
+
- editFiles
|
|
43
|
+
handoffs:
|
|
44
|
+
- label: Hand to Developer
|
|
45
|
+
agent: developer
|
|
46
|
+
prompt: Please implement this feature
|
|
47
|
+
send: true
|
|
48
|
+
infer: true
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
# Test Agent Instructions
|
|
52
|
+
|
|
53
|
+
This is the body content.
|
|
54
|
+
`;
|
|
55
|
+
const filePath = createTestAgent('complete.agent.md', content);
|
|
56
|
+
const result = loadAgent(filePath);
|
|
57
|
+
assert.ok(!('error' in result), `Unexpected error: ${JSON.stringify(result)}`);
|
|
58
|
+
const { agent } = result;
|
|
59
|
+
assert.strictEqual(agent.id, 'complete');
|
|
60
|
+
assert.strictEqual(agent.frontmatter.name, 'Test Agent');
|
|
61
|
+
assert.strictEqual(agent.frontmatter.description, 'A test agent for validation');
|
|
62
|
+
assert.strictEqual(agent.frontmatter.model, 'Claude Opus 4.6');
|
|
63
|
+
assert.deepStrictEqual(agent.frontmatter.tools, ['codebase', 'readFile', 'editFiles']);
|
|
64
|
+
assert.strictEqual(agent.frontmatter.infer, true);
|
|
65
|
+
assert.ok(Array.isArray(agent.frontmatter.handoffs));
|
|
66
|
+
assert.strictEqual(agent.frontmatter.handoffs.length, 1);
|
|
67
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].label, 'Hand to Developer');
|
|
68
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].agent, 'developer');
|
|
69
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].prompt, 'Please implement this feature');
|
|
70
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].send, true);
|
|
71
|
+
assert.ok(agent.body.includes('Test Agent Instructions'));
|
|
72
|
+
});
|
|
73
|
+
it('4. valid tools array parses correctly', () => {
|
|
74
|
+
const content = `---
|
|
75
|
+
name: Tools Agent
|
|
76
|
+
tools:
|
|
77
|
+
- codebase
|
|
78
|
+
- readFile
|
|
79
|
+
- editFiles
|
|
80
|
+
- createFile
|
|
81
|
+
- runInTerminal
|
|
82
|
+
- custom-mcp-tool
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
Agent with tools.
|
|
86
|
+
`;
|
|
87
|
+
const filePath = createTestAgent('tools.agent.md', content);
|
|
88
|
+
const result = loadAgent(filePath);
|
|
89
|
+
assert.ok(!('error' in result));
|
|
90
|
+
const { agent } = result;
|
|
91
|
+
assert.deepStrictEqual(agent.frontmatter.tools, [
|
|
92
|
+
'codebase',
|
|
93
|
+
'readFile',
|
|
94
|
+
'editFiles',
|
|
95
|
+
'createFile',
|
|
96
|
+
'runInTerminal',
|
|
97
|
+
'custom-mcp-tool',
|
|
98
|
+
]);
|
|
99
|
+
});
|
|
100
|
+
it('6. valid handoffs array parses correctly', () => {
|
|
101
|
+
const content = `---
|
|
102
|
+
name: Handoff Agent
|
|
103
|
+
handoffs:
|
|
104
|
+
- label: Ask Developer
|
|
105
|
+
agent: developer
|
|
106
|
+
prompt: Implement this feature
|
|
107
|
+
- label: Review with PM
|
|
108
|
+
agent: product-manager
|
|
109
|
+
prompt: Review requirements
|
|
110
|
+
send: false
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
Agent with handoffs.
|
|
114
|
+
`;
|
|
115
|
+
const filePath = createTestAgent('handoffs.agent.md', content);
|
|
116
|
+
const result = loadAgent(filePath);
|
|
117
|
+
assert.ok(!('error' in result));
|
|
118
|
+
const { agent } = result;
|
|
119
|
+
assert.ok(Array.isArray(agent.frontmatter.handoffs));
|
|
120
|
+
assert.strictEqual(agent.frontmatter.handoffs.length, 2);
|
|
121
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].label, 'Ask Developer');
|
|
122
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].agent, 'developer');
|
|
123
|
+
assert.strictEqual(agent.frontmatter.handoffs[0].prompt, 'Implement this feature');
|
|
124
|
+
assert.strictEqual(agent.frontmatter.handoffs[1].label, 'Review with PM');
|
|
125
|
+
assert.strictEqual(agent.frontmatter.handoffs[1].agent, 'product-manager');
|
|
126
|
+
assert.strictEqual(agent.frontmatter.handoffs[1].send, false);
|
|
127
|
+
});
|
|
128
|
+
it('10. infer: true boolean parses correctly', () => {
|
|
129
|
+
const content = `---
|
|
130
|
+
name: Inferable Agent
|
|
131
|
+
infer: true
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
This agent can be invoked as a subagent.
|
|
135
|
+
`;
|
|
136
|
+
const filePath = createTestAgent('inferable.agent.md', content);
|
|
137
|
+
const result = loadAgent(filePath);
|
|
138
|
+
assert.ok(!('error' in result));
|
|
139
|
+
const { agent } = result;
|
|
140
|
+
assert.strictEqual(agent.frontmatter.infer, true);
|
|
141
|
+
});
|
|
142
|
+
it('10b. infer: false boolean parses correctly', () => {
|
|
143
|
+
const content = `---
|
|
144
|
+
name: Non-Inferable Agent
|
|
145
|
+
infer: false
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
This agent cannot be invoked as a subagent.
|
|
149
|
+
`;
|
|
150
|
+
const filePath = createTestAgent('non-inferable.agent.md', content);
|
|
151
|
+
const result = loadAgent(filePath);
|
|
152
|
+
assert.ok(!('error' in result));
|
|
153
|
+
const { agent } = result;
|
|
154
|
+
// infer: false is preserved in frontmatter (both true and false are set)
|
|
155
|
+
assert.strictEqual(agent.frontmatter.infer, false);
|
|
156
|
+
});
|
|
157
|
+
it('11. infer: "true" (string) gets handled correctly', () => {
|
|
158
|
+
// YAML parses unquoted `true` as boolean, but quoted "true" is string
|
|
159
|
+
// The loader should only accept boolean true
|
|
160
|
+
const content = `---
|
|
161
|
+
name: String Infer Agent
|
|
162
|
+
infer: "true"
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
This has infer as a string, not boolean.
|
|
166
|
+
`;
|
|
167
|
+
const filePath = createTestAgent('string-infer.agent.md', content);
|
|
168
|
+
const result = loadAgent(filePath);
|
|
169
|
+
assert.ok(!('error' in result));
|
|
170
|
+
const { agent } = result;
|
|
171
|
+
// String "true" should NOT be converted to boolean true
|
|
172
|
+
assert.strictEqual(agent.frontmatter.infer, undefined);
|
|
173
|
+
});
|
|
174
|
+
it('14. extra/unknown fields are ignored (no error)', () => {
|
|
175
|
+
const content = `---
|
|
176
|
+
name: Extended Agent
|
|
177
|
+
description: Standard description
|
|
178
|
+
customField: some value
|
|
179
|
+
extraData:
|
|
180
|
+
nested: true
|
|
181
|
+
value: 42
|
|
182
|
+
anotherUnknown: test
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
Agent with extra fields.
|
|
186
|
+
`;
|
|
187
|
+
const filePath = createTestAgent('extended.agent.md', content);
|
|
188
|
+
const result = loadAgent(filePath);
|
|
189
|
+
assert.ok(!('error' in result), 'Should not error on unknown fields');
|
|
190
|
+
const { agent } = result;
|
|
191
|
+
assert.strictEqual(agent.frontmatter.name, 'Extended Agent');
|
|
192
|
+
assert.strictEqual(agent.frontmatter.description, 'Standard description');
|
|
193
|
+
// Unknown fields should not appear in frontmatter
|
|
194
|
+
assert.strictEqual(agent.frontmatter.customField, undefined);
|
|
195
|
+
assert.strictEqual(agent.frontmatter.extraData, undefined);
|
|
196
|
+
});
|
|
197
|
+
it('15. model field accepts any string value', () => {
|
|
198
|
+
const content = `---
|
|
199
|
+
name: Custom Model Agent
|
|
200
|
+
model: gpt-4-turbo-preview
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
Agent with custom model.
|
|
204
|
+
`;
|
|
205
|
+
const filePath = createTestAgent('custom-model.agent.md', content);
|
|
206
|
+
const result = loadAgent(filePath);
|
|
207
|
+
assert.ok(!('error' in result));
|
|
208
|
+
const { agent } = result;
|
|
209
|
+
assert.strictEqual(agent.frontmatter.model, 'gpt-4-turbo-preview');
|
|
210
|
+
});
|
|
211
|
+
it('15b. model field accepts complex model strings', () => {
|
|
212
|
+
const content = `---
|
|
213
|
+
name: Complex Model Agent
|
|
214
|
+
model: "anthropic/claude-3.5-sonnet@20240620"
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
Agent with complex model identifier.
|
|
218
|
+
`;
|
|
219
|
+
const filePath = createTestAgent('complex-model.agent.md', content);
|
|
220
|
+
const result = loadAgent(filePath);
|
|
221
|
+
assert.ok(!('error' in result));
|
|
222
|
+
const { agent } = result;
|
|
223
|
+
assert.strictEqual(agent.frontmatter.model, 'anthropic/claude-3.5-sonnet@20240620');
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
describe('Invalid frontmatter scenarios', () => {
|
|
227
|
+
it('2. missing name field returns error', () => {
|
|
228
|
+
const content = `---
|
|
229
|
+
description: Agent without a name
|
|
230
|
+
model: Claude Opus 4.6
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
This agent is missing the required name field.
|
|
234
|
+
`;
|
|
235
|
+
const filePath = createTestAgent('no-name.agent.md', content);
|
|
236
|
+
const result = loadAgent(filePath);
|
|
237
|
+
assert.ok('error' in result, 'Should return error for missing name');
|
|
238
|
+
const { error } = result;
|
|
239
|
+
assert.ok(error.message.includes('name'), `Error should mention 'name', got: ${error.message}`);
|
|
240
|
+
});
|
|
241
|
+
it('3. invalid name type (non-string) returns error', () => {
|
|
242
|
+
const content = `---
|
|
243
|
+
name: 123
|
|
244
|
+
description: Agent with numeric name
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
Name should be a string.
|
|
248
|
+
`;
|
|
249
|
+
const filePath = createTestAgent('numeric-name.agent.md', content);
|
|
250
|
+
const result = loadAgent(filePath);
|
|
251
|
+
assert.ok('error' in result, 'Should return error for non-string name');
|
|
252
|
+
const { error } = result;
|
|
253
|
+
assert.ok(error.message.includes('name'), `Error should mention 'name', got: ${error.message}`);
|
|
254
|
+
});
|
|
255
|
+
it('3b. name as array returns error', () => {
|
|
256
|
+
const content = `---
|
|
257
|
+
name:
|
|
258
|
+
- First
|
|
259
|
+
- Second
|
|
260
|
+
description: Agent with array name
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
Name should be a string.
|
|
264
|
+
`;
|
|
265
|
+
const filePath = createTestAgent('array-name.agent.md', content);
|
|
266
|
+
const result = loadAgent(filePath);
|
|
267
|
+
assert.ok('error' in result, 'Should return error for array name');
|
|
268
|
+
const { error } = result;
|
|
269
|
+
assert.ok(error.message.includes('name'));
|
|
270
|
+
});
|
|
271
|
+
it('3c. name as null returns error', () => {
|
|
272
|
+
const content = `---
|
|
273
|
+
name: null
|
|
274
|
+
description: Agent with null name
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
Name should be a string.
|
|
278
|
+
`;
|
|
279
|
+
const filePath = createTestAgent('null-name.agent.md', content);
|
|
280
|
+
const result = loadAgent(filePath);
|
|
281
|
+
assert.ok('error' in result, 'Should return error for null name');
|
|
282
|
+
const { error } = result;
|
|
283
|
+
assert.ok(error.message.includes('name'));
|
|
284
|
+
});
|
|
285
|
+
it('5. invalid tools (non-array) returns error', () => {
|
|
286
|
+
const content = `---
|
|
287
|
+
name: Bad Tools Agent
|
|
288
|
+
tools: codebase
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
Tools should be an array.
|
|
292
|
+
`;
|
|
293
|
+
const filePath = createTestAgent('bad-tools.agent.md', content);
|
|
294
|
+
const result = loadAgent(filePath);
|
|
295
|
+
assert.ok('error' in result, 'Should return error for non-array tools');
|
|
296
|
+
const { error } = result;
|
|
297
|
+
assert.ok(error.message.includes('tools'), `Error should mention 'tools', got: ${error.message}`);
|
|
298
|
+
});
|
|
299
|
+
it('5b. tools as object returns error', () => {
|
|
300
|
+
const content = `---
|
|
301
|
+
name: Object Tools Agent
|
|
302
|
+
tools:
|
|
303
|
+
read: true
|
|
304
|
+
write: false
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
Tools should be an array, not an object.
|
|
308
|
+
`;
|
|
309
|
+
const filePath = createTestAgent('object-tools.agent.md', content);
|
|
310
|
+
const result = loadAgent(filePath);
|
|
311
|
+
assert.ok('error' in result, 'Should return error for object tools');
|
|
312
|
+
const { error } = result;
|
|
313
|
+
assert.ok(error.message.includes('tools'));
|
|
314
|
+
});
|
|
315
|
+
it('7. handoff missing label returns error', () => {
|
|
316
|
+
const content = `---
|
|
317
|
+
name: Missing Label Agent
|
|
318
|
+
handoffs:
|
|
319
|
+
- agent: developer
|
|
320
|
+
prompt: Please help
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
Handoff is missing label field.
|
|
324
|
+
`;
|
|
325
|
+
const filePath = createTestAgent('no-label.agent.md', content);
|
|
326
|
+
const result = loadAgent(filePath);
|
|
327
|
+
assert.ok('error' in result, 'Should return error for missing handoff label');
|
|
328
|
+
const { error } = result;
|
|
329
|
+
assert.ok(error.message.includes('Handoff') || error.message.includes('label'), `Error should mention handoff issue, got: ${error.message}`);
|
|
330
|
+
});
|
|
331
|
+
it('8. handoff missing agent returns error', () => {
|
|
332
|
+
const content = `---
|
|
333
|
+
name: Missing Agent Field
|
|
334
|
+
handoffs:
|
|
335
|
+
- label: Send to someone
|
|
336
|
+
prompt: Please help
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
Handoff is missing agent field.
|
|
340
|
+
`;
|
|
341
|
+
const filePath = createTestAgent('no-agent.agent.md', content);
|
|
342
|
+
const result = loadAgent(filePath);
|
|
343
|
+
assert.ok('error' in result, 'Should return error for missing handoff agent');
|
|
344
|
+
const { error } = result;
|
|
345
|
+
assert.ok(error.message.includes('Handoff') || error.message.includes('agent'), `Error should mention handoff issue, got: ${error.message}`);
|
|
346
|
+
});
|
|
347
|
+
it('9. handoff missing prompt returns error', () => {
|
|
348
|
+
const content = `---
|
|
349
|
+
name: Missing Prompt Agent
|
|
350
|
+
handoffs:
|
|
351
|
+
- label: Send to developer
|
|
352
|
+
agent: developer
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
Handoff is missing prompt field.
|
|
356
|
+
`;
|
|
357
|
+
const filePath = createTestAgent('no-prompt.agent.md', content);
|
|
358
|
+
const result = loadAgent(filePath);
|
|
359
|
+
assert.ok('error' in result, 'Should return error for missing handoff prompt');
|
|
360
|
+
const { error } = result;
|
|
361
|
+
assert.ok(error.message.includes('Handoff') || error.message.includes('prompt'), `Error should mention handoff issue, got: ${error.message}`);
|
|
362
|
+
});
|
|
363
|
+
it('12. empty frontmatter (only delimiters) returns error', () => {
|
|
364
|
+
const content = `---
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
This file has empty frontmatter.
|
|
368
|
+
`;
|
|
369
|
+
const filePath = createTestAgent('empty-frontmatter.agent.md', content);
|
|
370
|
+
const result = loadAgent(filePath);
|
|
371
|
+
assert.ok('error' in result, 'Should return error for empty frontmatter');
|
|
372
|
+
const { error } = result;
|
|
373
|
+
assert.ok(error.message.includes('name'), `Error should mention missing name, got: ${error.message}`);
|
|
374
|
+
});
|
|
375
|
+
it('13. malformed YAML returns error', () => {
|
|
376
|
+
const content = `---
|
|
377
|
+
name: Malformed Agent
|
|
378
|
+
tools:
|
|
379
|
+
- valid item
|
|
380
|
+
invalid: yaml: here
|
|
381
|
+
- another item
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
This YAML is malformed.
|
|
385
|
+
`;
|
|
386
|
+
const filePath = createTestAgent('malformed.agent.md', content);
|
|
387
|
+
const result = loadAgent(filePath);
|
|
388
|
+
assert.ok('error' in result, 'Should return error for malformed YAML');
|
|
389
|
+
const { error } = result;
|
|
390
|
+
assert.ok(error.message.includes('Failed to parse') || error.message.includes('YAML'), `Error should indicate parse failure, got: ${error.message}`);
|
|
391
|
+
});
|
|
392
|
+
it('13b. unclosed YAML block returns error', () => {
|
|
393
|
+
const content = `---
|
|
394
|
+
name: Unclosed Agent
|
|
395
|
+
description: This frontmatter never closes
|
|
396
|
+
|
|
397
|
+
Body content without closing delimiter.
|
|
398
|
+
`;
|
|
399
|
+
const filePath = createTestAgent('unclosed.agent.md', content);
|
|
400
|
+
const result = loadAgent(filePath);
|
|
401
|
+
// gray-matter treats everything after first --- as frontmatter if no closing ---
|
|
402
|
+
// This should still work but body will be empty
|
|
403
|
+
// Actually, let's see what happens
|
|
404
|
+
if ('error' in result) {
|
|
405
|
+
// If it errors, that's expected
|
|
406
|
+
assert.ok(true);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
// If it doesn't error, body should be empty and frontmatter parsed
|
|
410
|
+
// This is acceptable behavior for gray-matter
|
|
411
|
+
assert.strictEqual(result.agent.frontmatter.name, 'Unclosed Agent');
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
it('13c. invalid YAML indentation returns error', () => {
|
|
415
|
+
const content = `---
|
|
416
|
+
name: Bad Indent Agent
|
|
417
|
+
handoffs:
|
|
418
|
+
- label: No indent
|
|
419
|
+
agent: developer
|
|
420
|
+
prompt: Missing indent
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
Bad indentation in YAML.
|
|
424
|
+
`;
|
|
425
|
+
const filePath = createTestAgent('bad-indent.agent.md', content);
|
|
426
|
+
const result = loadAgent(filePath);
|
|
427
|
+
// gray-matter might parse this differently than expected
|
|
428
|
+
// The handoff array item would not have agent/prompt as nested fields
|
|
429
|
+
if ('error' in result) {
|
|
430
|
+
assert.ok(true, 'Returned error as expected');
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
// If parsed, handoffs[0] should be missing required fields
|
|
434
|
+
const handoffs = result.agent.frontmatter.handoffs;
|
|
435
|
+
if (handoffs && handoffs.length > 0) {
|
|
436
|
+
// The label is there but agent/prompt won't be nested
|
|
437
|
+
assert.ok(!handoffs[0].agent || !handoffs[0].prompt, 'Bad indent should result in missing handoff fields');
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
it('handoffs as non-array returns error', () => {
|
|
442
|
+
const content = `---
|
|
443
|
+
name: Bad Handoffs Agent
|
|
444
|
+
handoffs: developer
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
Handoffs should be an array.
|
|
448
|
+
`;
|
|
449
|
+
const filePath = createTestAgent('bad-handoffs.agent.md', content);
|
|
450
|
+
const result = loadAgent(filePath);
|
|
451
|
+
assert.ok('error' in result, 'Should return error for non-array handoffs');
|
|
452
|
+
const { error } = result;
|
|
453
|
+
assert.ok(error.message.includes('handoffs'), `Error should mention 'handoffs', got: ${error.message}`);
|
|
454
|
+
});
|
|
455
|
+
});
|
|
456
|
+
describe('Edge cases', () => {
|
|
457
|
+
it('should handle minimal valid agent (name only)', () => {
|
|
458
|
+
const content = `---
|
|
459
|
+
name: Minimal Agent
|
|
460
|
+
---
|
|
461
|
+
`;
|
|
462
|
+
const filePath = createTestAgent('minimal.agent.md', content);
|
|
463
|
+
const result = loadAgent(filePath);
|
|
464
|
+
assert.ok(!('error' in result), 'Minimal agent should be valid');
|
|
465
|
+
const { agent } = result;
|
|
466
|
+
assert.strictEqual(agent.frontmatter.name, 'Minimal Agent');
|
|
467
|
+
assert.strictEqual(agent.frontmatter.description, undefined);
|
|
468
|
+
assert.strictEqual(agent.frontmatter.model, undefined);
|
|
469
|
+
assert.strictEqual(agent.frontmatter.tools, undefined);
|
|
470
|
+
assert.strictEqual(agent.frontmatter.handoffs, undefined);
|
|
471
|
+
assert.strictEqual(agent.frontmatter.infer, undefined);
|
|
472
|
+
});
|
|
473
|
+
it('should handle empty body', () => {
|
|
474
|
+
const content = `---
|
|
475
|
+
name: Empty Body Agent
|
|
476
|
+
---
|
|
477
|
+
`;
|
|
478
|
+
const filePath = createTestAgent('empty-body.agent.md', content);
|
|
479
|
+
const result = loadAgent(filePath);
|
|
480
|
+
assert.ok(!('error' in result));
|
|
481
|
+
const { agent } = result;
|
|
482
|
+
assert.strictEqual(agent.body, '');
|
|
483
|
+
});
|
|
484
|
+
it('should handle empty tools array', () => {
|
|
485
|
+
const content = `---
|
|
486
|
+
name: No Tools Agent
|
|
487
|
+
tools: []
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
Agent with empty tools array.
|
|
491
|
+
`;
|
|
492
|
+
const filePath = createTestAgent('empty-tools.agent.md', content);
|
|
493
|
+
const result = loadAgent(filePath);
|
|
494
|
+
assert.ok(!('error' in result));
|
|
495
|
+
const { agent } = result;
|
|
496
|
+
assert.deepStrictEqual(agent.frontmatter.tools, []);
|
|
497
|
+
});
|
|
498
|
+
it('should handle empty handoffs array', () => {
|
|
499
|
+
const content = `---
|
|
500
|
+
name: No Handoffs Agent
|
|
501
|
+
handoffs: []
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
Agent with empty handoffs array.
|
|
505
|
+
`;
|
|
506
|
+
const filePath = createTestAgent('empty-handoffs.agent.md', content);
|
|
507
|
+
const result = loadAgent(filePath);
|
|
508
|
+
assert.ok(!('error' in result));
|
|
509
|
+
const { agent } = result;
|
|
510
|
+
assert.deepStrictEqual(agent.frontmatter.handoffs, []);
|
|
511
|
+
});
|
|
512
|
+
it('should handle special characters in name', () => {
|
|
513
|
+
const content = `---
|
|
514
|
+
name: "Agent: The Sequel (2.0)"
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
Agent with special characters in name.
|
|
518
|
+
`;
|
|
519
|
+
const filePath = createTestAgent('special-chars.agent.md', content);
|
|
520
|
+
const result = loadAgent(filePath);
|
|
521
|
+
assert.ok(!('error' in result));
|
|
522
|
+
const { agent } = result;
|
|
523
|
+
assert.strictEqual(agent.frontmatter.name, 'Agent: The Sequel (2.0)');
|
|
524
|
+
});
|
|
525
|
+
it('should handle multiline description', () => {
|
|
526
|
+
const content = `---
|
|
527
|
+
name: Multiline Agent
|
|
528
|
+
description: |
|
|
529
|
+
This is a multiline description
|
|
530
|
+
that spans several lines
|
|
531
|
+
and should be preserved.
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
Agent with multiline description.
|
|
535
|
+
`;
|
|
536
|
+
const filePath = createTestAgent('multiline-desc.agent.md', content);
|
|
537
|
+
const result = loadAgent(filePath);
|
|
538
|
+
assert.ok(!('error' in result));
|
|
539
|
+
const { agent } = result;
|
|
540
|
+
assert.ok(agent.frontmatter.description?.includes('multiline description'));
|
|
541
|
+
assert.ok(agent.frontmatter.description?.includes('spans several lines'));
|
|
542
|
+
});
|
|
543
|
+
it('should handle unicode in content', () => {
|
|
544
|
+
const content = `---
|
|
545
|
+
name: Unicode Agent 🤖
|
|
546
|
+
description: Supports émojis and ünïcödé
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
Content with unicode: 日本語, العربية, 中文
|
|
550
|
+
`;
|
|
551
|
+
const filePath = createTestAgent('unicode.agent.md', content);
|
|
552
|
+
const result = loadAgent(filePath);
|
|
553
|
+
assert.ok(!('error' in result));
|
|
554
|
+
const { agent } = result;
|
|
555
|
+
assert.strictEqual(agent.frontmatter.name, 'Unicode Agent 🤖');
|
|
556
|
+
assert.ok(agent.body.includes('日本語'));
|
|
557
|
+
});
|
|
558
|
+
it('should handle GitHub Copilot code fence wrapper', () => {
|
|
559
|
+
const content = `\`\`\`chatagent
|
|
560
|
+
---
|
|
561
|
+
name: Wrapped Agent
|
|
562
|
+
description: Agent wrapped in code fence
|
|
563
|
+
---
|
|
564
|
+
|
|
565
|
+
This is inside a code fence.
|
|
566
|
+
\`\`\``;
|
|
567
|
+
const filePath = createTestAgent('wrapped.agent.md', content);
|
|
568
|
+
const result = loadAgent(filePath);
|
|
569
|
+
assert.ok(!('error' in result), `Unexpected error: ${JSON.stringify(result)}`);
|
|
570
|
+
const { agent } = result;
|
|
571
|
+
assert.strictEqual(agent.frontmatter.name, 'Wrapped Agent');
|
|
572
|
+
assert.ok(agent.body.includes('inside a code fence'));
|
|
573
|
+
});
|
|
574
|
+
it('should derive agent ID from filename', () => {
|
|
575
|
+
const content = `---
|
|
576
|
+
name: My Complex Agent
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
Body content.
|
|
580
|
+
`;
|
|
581
|
+
const filePath = createTestAgent('my-complex-agent.agent.md', content);
|
|
582
|
+
const result = loadAgent(filePath);
|
|
583
|
+
assert.ok(!('error' in result));
|
|
584
|
+
const { agent } = result;
|
|
585
|
+
assert.strictEqual(agent.id, 'my-complex-agent');
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
});
|
|
589
|
+
//# sourceMappingURL=frontmatter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.test.js","sourceRoot":"","sources":["../../../src/core/agents/frontmatter.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,mCAAmC;AACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,0BAA0B,CAAC,CAAC;AAEjE;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;CAmBrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACzD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YACjF,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAC/D,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YAC9E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;YAC3F,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,OAAO,GAAG;;;;;;;;;;;;CAYrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE;gBAC9C,UAAU;gBACV,UAAU;gBACV,WAAW;gBACX,YAAY;gBACZ,eAAe;gBACf,iBAAiB;aAClB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,OAAO,GAAG;;;;;;;;;;;;;CAarB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE1D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAC1E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;YAEpF,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAC3E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAC5E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,yEAAyE;YACzE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,sEAAsE;YACtE,6CAA6C;YAC7C,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,wDAAwD;YACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,OAAO,GAAG;;;;;;;;;;;CAWrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,oCAAoC,CAAC,CAAC;YACtE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;YAC1E,kDAAkD;YAClD,MAAM,CAAC,WAAW,CAAE,KAAK,CAAC,WAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAE,KAAK,CAAC,WAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,sCAAsC,CAAC,CAAC;YACrE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC9B,qCAAqC,KAAK,CAAC,OAAO,EAAE,CACrD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,yCAAyC,CAAC,CAAC;YACxE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC9B,qCAAqC,KAAK,CAAC,OAAO,EAAE,CACrD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,OAAO,GAAG;;;;;;;;CAQrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,oCAAoC,CAAC,CAAC;YACnE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,mCAAmC,CAAC,CAAC;YAClE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,yCAAyC,CAAC,CAAC;YACxE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC/B,sCAAsC,KAAK,CAAC,OAAO,EAAE,CACtD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,OAAO,GAAG;;;;;;;;CAQrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,sCAAsC,CAAC,CAAC;YACrE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG;;;;;;;;CAQrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,+CAA+C,CAAC,CAAC;YAC9E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EACpE,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG;;;;;;;;CAQrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,+CAA+C,CAAC,CAAC;YAC9E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EACpE,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,OAAO,GAAG;;;;;;;;CAQrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,gDAAgD,CAAC,CAAC;YAC/E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACrE,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,OAAO,GAAG;;;;CAIrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,2CAA2C,CAAC,CAAC;YAC1E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC9B,2CAA2C,KAAK,CAAC,OAAO,EAAE,CAC3D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,OAAO,GAAG;;;;;;;;;CASrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,wCAAwC,CAAC,CAAC;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3E,6CAA6C,KAAK,CAAC,OAAO,EAAE,CAC7D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG;;;;;CAKrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,iFAAiF;YACjF,gDAAgD;YAChD,mCAAmC;YACnC,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,gCAAgC;gBAChC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,mEAAmE;gBACnE,8CAA8C;gBAC9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,OAAO,GAAG;;;;;;;;;CASrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,yDAAyD;YACzD,sEAAsE;YACtE,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,2DAA2D;gBAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;gBACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,sDAAsD;oBACtD,MAAM,CAAC,EAAE,CACP,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EACzC,oDAAoD,CACrD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,MAAM,EAAE,4CAA4C,CAAC,CAAC;YAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAClC,yCAAyC,KAAK,CAAC,OAAO,EAAE,CACzD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,OAAO,GAAG;;;CAGrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACjE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,OAAO,GAAG;;;CAGrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,OAAO,GAAG;;;;;CAKrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG;;;;;;;;;CASrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,OAAO,GAAG;;;;;;CAMrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC/D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,OAAO,GAAG;;;;;;;OAOf,CAAC;YACF,MAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,OAAO,GAAG;;;;;CAKrB,CAAC;YACI,MAAM,QAAQ,GAAG,eAAe,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAwB,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoffs.test.d.ts","sourceRoot":"","sources":["../../../src/core/agents/handoffs.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|