@herdctl/core 5.5.0 → 5.7.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/dist/config/__tests__/merge.test.js +1 -1
- package/dist/config/__tests__/merge.test.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +10 -2
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +6 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/distribution/__tests__/agent-discovery.test.d.ts +7 -0
- package/dist/distribution/__tests__/agent-discovery.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/agent-discovery.test.js +443 -0
- package/dist/distribution/__tests__/agent-discovery.test.js.map +1 -0
- package/dist/distribution/__tests__/agent-info.test.d.ts +7 -0
- package/dist/distribution/__tests__/agent-info.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/agent-info.test.js +568 -0
- package/dist/distribution/__tests__/agent-info.test.js.map +1 -0
- package/dist/distribution/__tests__/agent-remover.test.d.ts +7 -0
- package/dist/distribution/__tests__/agent-remover.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/agent-remover.test.js +498 -0
- package/dist/distribution/__tests__/agent-remover.test.js.map +1 -0
- package/dist/distribution/__tests__/agent-repo-metadata.test.d.ts +5 -0
- package/dist/distribution/__tests__/agent-repo-metadata.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/agent-repo-metadata.test.js +500 -0
- package/dist/distribution/__tests__/agent-repo-metadata.test.js.map +1 -0
- package/dist/distribution/__tests__/env-scanner.test.d.ts +5 -0
- package/dist/distribution/__tests__/env-scanner.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/env-scanner.test.js +576 -0
- package/dist/distribution/__tests__/env-scanner.test.js.map +1 -0
- package/dist/distribution/__tests__/file-installer.test.d.ts +7 -0
- package/dist/distribution/__tests__/file-installer.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/file-installer.test.js +714 -0
- package/dist/distribution/__tests__/file-installer.test.js.map +1 -0
- package/dist/distribution/__tests__/fleet-config-updater.test.d.ts +7 -0
- package/dist/distribution/__tests__/fleet-config-updater.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/fleet-config-updater.test.js +531 -0
- package/dist/distribution/__tests__/fleet-config-updater.test.js.map +1 -0
- package/dist/distribution/__tests__/installation-metadata.test.d.ts +2 -0
- package/dist/distribution/__tests__/installation-metadata.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/installation-metadata.test.js +292 -0
- package/dist/distribution/__tests__/installation-metadata.test.js.map +1 -0
- package/dist/distribution/__tests__/integration.test.d.ts +10 -0
- package/dist/distribution/__tests__/integration.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/integration.test.js +522 -0
- package/dist/distribution/__tests__/integration.test.js.map +1 -0
- package/dist/distribution/__tests__/repository-fetcher.test.d.ts +5 -0
- package/dist/distribution/__tests__/repository-fetcher.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/repository-fetcher.test.js +386 -0
- package/dist/distribution/__tests__/repository-fetcher.test.js.map +1 -0
- package/dist/distribution/__tests__/repository-validator.test.d.ts +7 -0
- package/dist/distribution/__tests__/repository-validator.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/repository-validator.test.js +447 -0
- package/dist/distribution/__tests__/repository-validator.test.js.map +1 -0
- package/dist/distribution/__tests__/source-specifier.test.d.ts +5 -0
- package/dist/distribution/__tests__/source-specifier.test.d.ts.map +1 -0
- package/dist/distribution/__tests__/source-specifier.test.js +533 -0
- package/dist/distribution/__tests__/source-specifier.test.js.map +1 -0
- package/dist/distribution/agent-discovery.d.ts +81 -0
- package/dist/distribution/agent-discovery.d.ts.map +1 -0
- package/dist/distribution/agent-discovery.js +264 -0
- package/dist/distribution/agent-discovery.js.map +1 -0
- package/dist/distribution/agent-info.d.ts +86 -0
- package/dist/distribution/agent-info.d.ts.map +1 -0
- package/dist/distribution/agent-info.js +225 -0
- package/dist/distribution/agent-info.js.map +1 -0
- package/dist/distribution/agent-remover.d.ts +83 -0
- package/dist/distribution/agent-remover.d.ts.map +1 -0
- package/dist/distribution/agent-remover.js +222 -0
- package/dist/distribution/agent-remover.js.map +1 -0
- package/dist/distribution/agent-repo-metadata.d.ts +181 -0
- package/dist/distribution/agent-repo-metadata.d.ts.map +1 -0
- package/dist/distribution/agent-repo-metadata.js +143 -0
- package/dist/distribution/agent-repo-metadata.js.map +1 -0
- package/dist/distribution/env-scanner.d.ts +78 -0
- package/dist/distribution/env-scanner.d.ts.map +1 -0
- package/dist/distribution/env-scanner.js +144 -0
- package/dist/distribution/env-scanner.js.map +1 -0
- package/dist/distribution/file-installer.d.ts +80 -0
- package/dist/distribution/file-installer.d.ts.map +1 -0
- package/dist/distribution/file-installer.js +268 -0
- package/dist/distribution/file-installer.js.map +1 -0
- package/dist/distribution/fleet-config-updater.d.ts +96 -0
- package/dist/distribution/fleet-config-updater.d.ts.map +1 -0
- package/dist/distribution/fleet-config-updater.js +266 -0
- package/dist/distribution/fleet-config-updater.js.map +1 -0
- package/dist/distribution/index.d.ts +23 -0
- package/dist/distribution/index.d.ts.map +1 -0
- package/dist/distribution/index.js +42 -0
- package/dist/distribution/index.js.map +1 -0
- package/dist/distribution/installation-metadata.d.ts +191 -0
- package/dist/distribution/installation-metadata.d.ts.map +1 -0
- package/dist/distribution/installation-metadata.js +100 -0
- package/dist/distribution/installation-metadata.js.map +1 -0
- package/dist/distribution/repository-fetcher.d.ts +104 -0
- package/dist/distribution/repository-fetcher.d.ts.map +1 -0
- package/dist/distribution/repository-fetcher.js +246 -0
- package/dist/distribution/repository-fetcher.js.map +1 -0
- package/dist/distribution/repository-validator.d.ts +86 -0
- package/dist/distribution/repository-validator.d.ts.map +1 -0
- package/dist/distribution/repository-validator.js +296 -0
- package/dist/distribution/repository-validator.js.map +1 -0
- package/dist/distribution/source-specifier.d.ts +106 -0
- package/dist/distribution/source-specifier.d.ts.map +1 -0
- package/dist/distribution/source-specifier.js +247 -0
- package/dist/distribution/source-specifier.js.map +1 -0
- package/dist/fleet-manager/errors.d.ts +15 -0
- package/dist/fleet-manager/errors.d.ts.map +1 -1
- package/dist/fleet-manager/errors.js +16 -0
- package/dist/fleet-manager/errors.js.map +1 -1
- package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.js +31 -9
- package/dist/fleet-manager/fleet-manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runner/message-processor.d.ts.map +1 -1
- package/dist/runner/message-processor.js +7 -2
- package/dist/runner/message-processor.js.map +1 -1
- package/dist/runner/runtime/container-manager.js +1 -1
- package/dist/runner/runtime/container-manager.js.map +1 -1
- package/dist/scheduler/errors.d.ts +15 -0
- package/dist/scheduler/errors.d.ts.map +1 -1
- package/dist/scheduler/schedule-runner.d.ts.map +1 -1
- package/dist/scheduler/schedule-runner.js +6 -5
- package/dist/scheduler/schedule-runner.js.map +1 -1
- package/dist/state/__tests__/jsonl-parser.test.d.ts +5 -0
- package/dist/state/__tests__/jsonl-parser.test.d.ts.map +1 -0
- package/dist/state/__tests__/jsonl-parser.test.js +307 -0
- package/dist/state/__tests__/jsonl-parser.test.js.map +1 -0
- package/dist/state/__tests__/session-attribution.test.d.ts +2 -0
- package/dist/state/__tests__/session-attribution.test.d.ts.map +1 -0
- package/dist/state/__tests__/session-attribution.test.js +567 -0
- package/dist/state/__tests__/session-attribution.test.js.map +1 -0
- package/dist/state/__tests__/session-discovery.test.d.ts +2 -0
- package/dist/state/__tests__/session-discovery.test.d.ts.map +1 -0
- package/dist/state/__tests__/session-discovery.test.js +941 -0
- package/dist/state/__tests__/session-discovery.test.js.map +1 -0
- package/dist/state/__tests__/session-metadata.test.d.ts +2 -0
- package/dist/state/__tests__/session-metadata.test.d.ts.map +1 -0
- package/dist/state/__tests__/session-metadata.test.js +422 -0
- package/dist/state/__tests__/session-metadata.test.js.map +1 -0
- package/dist/state/__tests__/tool-parsing.test.d.ts +5 -0
- package/dist/state/__tests__/tool-parsing.test.d.ts.map +1 -0
- package/dist/state/__tests__/tool-parsing.test.js +315 -0
- package/dist/state/__tests__/tool-parsing.test.js.map +1 -0
- package/dist/state/index.d.ts +5 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +10 -0
- package/dist/state/index.js.map +1 -1
- package/dist/state/jsonl-parser.d.ts +115 -0
- package/dist/state/jsonl-parser.d.ts.map +1 -0
- package/dist/state/jsonl-parser.js +437 -0
- package/dist/state/jsonl-parser.js.map +1 -0
- package/dist/state/session-attribution.d.ts +35 -0
- package/dist/state/session-attribution.d.ts.map +1 -0
- package/dist/state/session-attribution.js +179 -0
- package/dist/state/session-attribution.js.map +1 -0
- package/dist/state/session-discovery.d.ts +188 -0
- package/dist/state/session-discovery.d.ts.map +1 -0
- package/dist/state/session-discovery.js +513 -0
- package/dist/state/session-discovery.js.map +1 -0
- package/dist/state/session-metadata.d.ts +186 -0
- package/dist/state/session-metadata.d.ts.map +1 -0
- package/dist/state/session-metadata.js +297 -0
- package/dist/state/session-metadata.js.map +1 -0
- package/dist/state/tool-parsing.d.ts +88 -0
- package/dist/state/tool-parsing.d.ts.map +1 -0
- package/dist/state/tool-parsing.js +199 -0
- package/dist/state/tool-parsing.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for agent discovery
|
|
3
|
+
*
|
|
4
|
+
* Uses real file I/O with temporary directories to test discovery logic.
|
|
5
|
+
*/
|
|
6
|
+
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
10
|
+
import { AgentDiscoveryError, DISCOVERY_CONFIG_INVALID, DISCOVERY_CONFIG_NOT_FOUND, discoverAgents, } from "../agent-discovery.js";
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Test Setup
|
|
13
|
+
// =============================================================================
|
|
14
|
+
describe("discoverAgents", () => {
|
|
15
|
+
let tempDir;
|
|
16
|
+
beforeEach(async () => {
|
|
17
|
+
// Create fresh temp directory for each test
|
|
18
|
+
tempDir = await mkdtemp(join(tmpdir(), "herdctl-discovery-"));
|
|
19
|
+
});
|
|
20
|
+
afterEach(async () => {
|
|
21
|
+
// Clean up temp directory
|
|
22
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
23
|
+
});
|
|
24
|
+
// ===========================================================================
|
|
25
|
+
// Helper Functions
|
|
26
|
+
// ===========================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Create a minimal herdctl.yaml fleet config
|
|
29
|
+
*/
|
|
30
|
+
async function createFleetConfig(agentPaths = [], options = {}) {
|
|
31
|
+
const { name = "test-fleet" } = options;
|
|
32
|
+
const agentsYaml = agentPaths.length > 0 ? agentPaths.map((p) => ` - path: ${p}`).join("\n") : "";
|
|
33
|
+
const content = `version: 1
|
|
34
|
+
|
|
35
|
+
fleet:
|
|
36
|
+
name: ${name}
|
|
37
|
+
|
|
38
|
+
agents:
|
|
39
|
+
${agentsYaml}
|
|
40
|
+
`;
|
|
41
|
+
const configPath = join(tempDir, "herdctl.yaml");
|
|
42
|
+
await writeFile(configPath, content, "utf-8");
|
|
43
|
+
return configPath;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create an agent directory with agent.yaml
|
|
47
|
+
*/
|
|
48
|
+
async function createAgent(name, options = {}) {
|
|
49
|
+
const agentDir = join(tempDir, "agents", name);
|
|
50
|
+
await mkdir(agentDir, { recursive: true });
|
|
51
|
+
// Create agent.yaml
|
|
52
|
+
const agentYaml = `name: ${name}
|
|
53
|
+
permission_mode: default
|
|
54
|
+
runtime: sdk
|
|
55
|
+
${options.description ? `description: "${options.description}"` : ""}
|
|
56
|
+
`;
|
|
57
|
+
await writeFile(join(agentDir, "agent.yaml"), agentYaml, "utf-8");
|
|
58
|
+
// Create metadata.json if requested
|
|
59
|
+
if (options.withMetadata) {
|
|
60
|
+
const metadata = {
|
|
61
|
+
source: {
|
|
62
|
+
type: "github",
|
|
63
|
+
url: "https://github.com/user/repo",
|
|
64
|
+
ref: "v1.0.0",
|
|
65
|
+
version: options.metadata?.source?.version ?? "1.0.0",
|
|
66
|
+
...options.metadata?.source,
|
|
67
|
+
},
|
|
68
|
+
installed_at: options.metadata?.installed_at ?? new Date().toISOString(),
|
|
69
|
+
installed_by: options.metadata?.installed_by ?? "herdctl@0.5.0",
|
|
70
|
+
...options.metadata,
|
|
71
|
+
};
|
|
72
|
+
await writeFile(join(agentDir, "metadata.json"), JSON.stringify(metadata, null, 2), "utf-8");
|
|
73
|
+
}
|
|
74
|
+
// Create herdctl.json if requested
|
|
75
|
+
if (options.withHerdctlJson) {
|
|
76
|
+
const herdctlJson = {
|
|
77
|
+
name,
|
|
78
|
+
version: options.herdctlJsonVersion ?? "1.0.0",
|
|
79
|
+
};
|
|
80
|
+
await writeFile(join(agentDir, "herdctl.json"), JSON.stringify(herdctlJson, null, 2), "utf-8");
|
|
81
|
+
}
|
|
82
|
+
return agentDir;
|
|
83
|
+
}
|
|
84
|
+
// ===========================================================================
|
|
85
|
+
// Empty Fleet Tests
|
|
86
|
+
// ===========================================================================
|
|
87
|
+
describe("empty fleet config", () => {
|
|
88
|
+
it("returns empty result when no agents in config", async () => {
|
|
89
|
+
const configPath = await createFleetConfig([]);
|
|
90
|
+
const result = await discoverAgents({ configPath });
|
|
91
|
+
expect(result.agents).toHaveLength(0);
|
|
92
|
+
});
|
|
93
|
+
it("returns empty result when agents key is missing", async () => {
|
|
94
|
+
const configPath = join(tempDir, "herdctl.yaml");
|
|
95
|
+
await writeFile(configPath, `version: 1
|
|
96
|
+
fleet:
|
|
97
|
+
name: test-fleet
|
|
98
|
+
`, "utf-8");
|
|
99
|
+
const result = await discoverAgents({ configPath });
|
|
100
|
+
expect(result.agents).toHaveLength(0);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
// ===========================================================================
|
|
104
|
+
// Single Agent Tests
|
|
105
|
+
// ===========================================================================
|
|
106
|
+
describe("single agent", () => {
|
|
107
|
+
it("discovers installed agent with metadata.json", async () => {
|
|
108
|
+
await createAgent("my-agent", { withMetadata: true });
|
|
109
|
+
const configPath = await createFleetConfig(["./agents/my-agent/agent.yaml"]);
|
|
110
|
+
const result = await discoverAgents({ configPath });
|
|
111
|
+
expect(result.agents).toHaveLength(1);
|
|
112
|
+
expect(result.agents[0].name).toBe("my-agent");
|
|
113
|
+
expect(result.agents[0].installed).toBe(true);
|
|
114
|
+
expect(result.agents[0].metadata).toBeDefined();
|
|
115
|
+
expect(result.agents[0].metadata?.source.type).toBe("github");
|
|
116
|
+
});
|
|
117
|
+
it("discovers manual agent without metadata.json", async () => {
|
|
118
|
+
await createAgent("manual-agent", { withMetadata: false });
|
|
119
|
+
const configPath = await createFleetConfig(["./agents/manual-agent/agent.yaml"]);
|
|
120
|
+
const result = await discoverAgents({ configPath });
|
|
121
|
+
expect(result.agents).toHaveLength(1);
|
|
122
|
+
expect(result.agents[0].name).toBe("manual-agent");
|
|
123
|
+
expect(result.agents[0].installed).toBe(false);
|
|
124
|
+
expect(result.agents[0].metadata).toBeUndefined();
|
|
125
|
+
});
|
|
126
|
+
it("includes description from agent.yaml", async () => {
|
|
127
|
+
await createAgent("described-agent", {
|
|
128
|
+
description: "A helpful agent that does things",
|
|
129
|
+
});
|
|
130
|
+
const configPath = await createFleetConfig(["./agents/described-agent/agent.yaml"]);
|
|
131
|
+
const result = await discoverAgents({ configPath });
|
|
132
|
+
expect(result.agents).toHaveLength(1);
|
|
133
|
+
expect(result.agents[0].description).toBe("A helpful agent that does things");
|
|
134
|
+
});
|
|
135
|
+
it("includes version from metadata.json source", async () => {
|
|
136
|
+
await createAgent("versioned-agent", {
|
|
137
|
+
withMetadata: true,
|
|
138
|
+
metadata: { source: { type: "github", version: "2.0.0" } },
|
|
139
|
+
});
|
|
140
|
+
const configPath = await createFleetConfig(["./agents/versioned-agent/agent.yaml"]);
|
|
141
|
+
const result = await discoverAgents({ configPath });
|
|
142
|
+
expect(result.agents).toHaveLength(1);
|
|
143
|
+
expect(result.agents[0].version).toBe("2.0.0");
|
|
144
|
+
});
|
|
145
|
+
it("falls back to herdctl.json version when no metadata", async () => {
|
|
146
|
+
await createAgent("json-versioned-agent", {
|
|
147
|
+
withMetadata: false,
|
|
148
|
+
withHerdctlJson: true,
|
|
149
|
+
herdctlJsonVersion: "3.0.0",
|
|
150
|
+
});
|
|
151
|
+
const configPath = await createFleetConfig(["./agents/json-versioned-agent/agent.yaml"]);
|
|
152
|
+
const result = await discoverAgents({ configPath });
|
|
153
|
+
expect(result.agents).toHaveLength(1);
|
|
154
|
+
expect(result.agents[0].version).toBe("3.0.0");
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
// ===========================================================================
|
|
158
|
+
// Multiple Agents Tests
|
|
159
|
+
// ===========================================================================
|
|
160
|
+
describe("multiple agents", () => {
|
|
161
|
+
it("discovers multiple agents, some installed some manual", async () => {
|
|
162
|
+
await createAgent("agent-a", { withMetadata: true });
|
|
163
|
+
await createAgent("agent-b", { withMetadata: false });
|
|
164
|
+
await createAgent("agent-c", { withMetadata: true });
|
|
165
|
+
const configPath = await createFleetConfig([
|
|
166
|
+
"./agents/agent-a/agent.yaml",
|
|
167
|
+
"./agents/agent-b/agent.yaml",
|
|
168
|
+
"./agents/agent-c/agent.yaml",
|
|
169
|
+
]);
|
|
170
|
+
const result = await discoverAgents({ configPath });
|
|
171
|
+
expect(result.agents).toHaveLength(3);
|
|
172
|
+
// Should be sorted by name
|
|
173
|
+
expect(result.agents[0].name).toBe("agent-a");
|
|
174
|
+
expect(result.agents[0].installed).toBe(true);
|
|
175
|
+
expect(result.agents[1].name).toBe("agent-b");
|
|
176
|
+
expect(result.agents[1].installed).toBe(false);
|
|
177
|
+
expect(result.agents[2].name).toBe("agent-c");
|
|
178
|
+
expect(result.agents[2].installed).toBe(true);
|
|
179
|
+
});
|
|
180
|
+
it("sorts agents by name alphabetically", async () => {
|
|
181
|
+
await createAgent("zebra-agent", { withMetadata: false });
|
|
182
|
+
await createAgent("alpha-agent", { withMetadata: false });
|
|
183
|
+
await createAgent("middle-agent", { withMetadata: false });
|
|
184
|
+
const configPath = await createFleetConfig([
|
|
185
|
+
"./agents/zebra-agent/agent.yaml",
|
|
186
|
+
"./agents/alpha-agent/agent.yaml",
|
|
187
|
+
"./agents/middle-agent/agent.yaml",
|
|
188
|
+
]);
|
|
189
|
+
const result = await discoverAgents({ configPath });
|
|
190
|
+
expect(result.agents.map((a) => a.name)).toEqual([
|
|
191
|
+
"alpha-agent",
|
|
192
|
+
"middle-agent",
|
|
193
|
+
"zebra-agent",
|
|
194
|
+
]);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
// ===========================================================================
|
|
198
|
+
// Missing/Invalid Agent Tests
|
|
199
|
+
// ===========================================================================
|
|
200
|
+
describe("missing or invalid agents", () => {
|
|
201
|
+
it("skips agent when directory does not exist", async () => {
|
|
202
|
+
await createAgent("exists-agent", { withMetadata: false });
|
|
203
|
+
// Don't create "missing-agent" directory
|
|
204
|
+
const configPath = await createFleetConfig([
|
|
205
|
+
"./agents/exists-agent/agent.yaml",
|
|
206
|
+
"./agents/missing-agent/agent.yaml",
|
|
207
|
+
]);
|
|
208
|
+
const result = await discoverAgents({ configPath });
|
|
209
|
+
expect(result.agents).toHaveLength(1);
|
|
210
|
+
expect(result.agents[0].name).toBe("exists-agent");
|
|
211
|
+
});
|
|
212
|
+
it("handles invalid/corrupt metadata.json gracefully", async () => {
|
|
213
|
+
const agentDir = join(tempDir, "agents", "corrupt-metadata");
|
|
214
|
+
await mkdir(agentDir, { recursive: true });
|
|
215
|
+
await writeFile(join(agentDir, "agent.yaml"), "name: corrupt-metadata\nruntime: sdk\n", "utf-8");
|
|
216
|
+
// Write invalid JSON
|
|
217
|
+
await writeFile(join(agentDir, "metadata.json"), "{ invalid json }", "utf-8");
|
|
218
|
+
const configPath = await createFleetConfig(["./agents/corrupt-metadata/agent.yaml"]);
|
|
219
|
+
const result = await discoverAgents({ configPath });
|
|
220
|
+
expect(result.agents).toHaveLength(1);
|
|
221
|
+
expect(result.agents[0].name).toBe("corrupt-metadata");
|
|
222
|
+
expect(result.agents[0].installed).toBe(false);
|
|
223
|
+
expect(result.agents[0].metadata).toBeUndefined();
|
|
224
|
+
});
|
|
225
|
+
it("handles metadata.json that fails schema validation", async () => {
|
|
226
|
+
const agentDir = join(tempDir, "agents", "bad-schema");
|
|
227
|
+
await mkdir(agentDir, { recursive: true });
|
|
228
|
+
await writeFile(join(agentDir, "agent.yaml"), "name: bad-schema\nruntime: sdk\n", "utf-8");
|
|
229
|
+
// Write JSON that is valid but doesn't match schema
|
|
230
|
+
await writeFile(join(agentDir, "metadata.json"), JSON.stringify({ source: { type: "invalid-type" }, installed_at: "not-iso" }), "utf-8");
|
|
231
|
+
const configPath = await createFleetConfig(["./agents/bad-schema/agent.yaml"]);
|
|
232
|
+
const result = await discoverAgents({ configPath });
|
|
233
|
+
expect(result.agents).toHaveLength(1);
|
|
234
|
+
expect(result.agents[0].installed).toBe(false);
|
|
235
|
+
});
|
|
236
|
+
it("uses directory name when agent.yaml has no name field", async () => {
|
|
237
|
+
const agentDir = join(tempDir, "agents", "no-name-agent");
|
|
238
|
+
await mkdir(agentDir, { recursive: true });
|
|
239
|
+
// agent.yaml without name field
|
|
240
|
+
await writeFile(join(agentDir, "agent.yaml"), "runtime: sdk\npermission_mode: default\n", "utf-8");
|
|
241
|
+
const configPath = await createFleetConfig(["./agents/no-name-agent/agent.yaml"]);
|
|
242
|
+
const result = await discoverAgents({ configPath });
|
|
243
|
+
expect(result.agents).toHaveLength(1);
|
|
244
|
+
expect(result.agents[0].name).toBe("no-name-agent");
|
|
245
|
+
});
|
|
246
|
+
it("uses directory name when agent.yaml is missing", async () => {
|
|
247
|
+
const agentDir = join(tempDir, "agents", "no-yaml-agent");
|
|
248
|
+
await mkdir(agentDir, { recursive: true });
|
|
249
|
+
// No agent.yaml created
|
|
250
|
+
const configPath = await createFleetConfig(["./agents/no-yaml-agent/agent.yaml"]);
|
|
251
|
+
const result = await discoverAgents({ configPath });
|
|
252
|
+
expect(result.agents).toHaveLength(1);
|
|
253
|
+
expect(result.agents[0].name).toBe("no-yaml-agent");
|
|
254
|
+
});
|
|
255
|
+
it("uses directory name when agent.yaml is invalid YAML", async () => {
|
|
256
|
+
const agentDir = join(tempDir, "agents", "bad-yaml-agent");
|
|
257
|
+
await mkdir(agentDir, { recursive: true });
|
|
258
|
+
await writeFile(join(agentDir, "agent.yaml"), "name: test\n bad: indent\n invalid", "utf-8");
|
|
259
|
+
const configPath = await createFleetConfig(["./agents/bad-yaml-agent/agent.yaml"]);
|
|
260
|
+
const result = await discoverAgents({ configPath });
|
|
261
|
+
expect(result.agents).toHaveLength(1);
|
|
262
|
+
expect(result.agents[0].name).toBe("bad-yaml-agent");
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
// ===========================================================================
|
|
266
|
+
// Config Path Tests
|
|
267
|
+
// ===========================================================================
|
|
268
|
+
describe("config path handling", () => {
|
|
269
|
+
it("throws when config file does not exist", async () => {
|
|
270
|
+
const configPath = join(tempDir, "nonexistent.yaml");
|
|
271
|
+
await expect(discoverAgents({ configPath })).rejects.toThrow(AgentDiscoveryError);
|
|
272
|
+
try {
|
|
273
|
+
await discoverAgents({ configPath });
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
const error = err;
|
|
277
|
+
expect(error.code).toBe(DISCOVERY_CONFIG_NOT_FOUND);
|
|
278
|
+
expect(error.message).toContain("Fleet config not found");
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
it("throws when config file is invalid YAML", async () => {
|
|
282
|
+
const configPath = join(tempDir, "herdctl.yaml");
|
|
283
|
+
await writeFile(configPath, "invalid: yaml: content:\n bad", "utf-8");
|
|
284
|
+
await expect(discoverAgents({ configPath })).rejects.toThrow(AgentDiscoveryError);
|
|
285
|
+
try {
|
|
286
|
+
await discoverAgents({ configPath });
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
const error = err;
|
|
290
|
+
expect(error.code).toBe(DISCOVERY_CONFIG_INVALID);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
it("throws when config file is empty", async () => {
|
|
294
|
+
const configPath = join(tempDir, "herdctl.yaml");
|
|
295
|
+
await writeFile(configPath, "", "utf-8");
|
|
296
|
+
await expect(discoverAgents({ configPath })).rejects.toThrow(AgentDiscoveryError);
|
|
297
|
+
try {
|
|
298
|
+
await discoverAgents({ configPath });
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
const error = err;
|
|
302
|
+
expect(error.code).toBe(DISCOVERY_CONFIG_INVALID);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
it("uses custom baseDir when provided", async () => {
|
|
306
|
+
// Create agent in a different base directory
|
|
307
|
+
const customBase = join(tempDir, "custom-base");
|
|
308
|
+
const agentDir = join(customBase, "agents", "custom-agent");
|
|
309
|
+
await mkdir(agentDir, { recursive: true });
|
|
310
|
+
await writeFile(join(agentDir, "agent.yaml"), "name: custom-agent\nruntime: sdk\n", "utf-8");
|
|
311
|
+
// Config is in tempDir but baseDir is customBase
|
|
312
|
+
const configPath = await createFleetConfig(["./agents/custom-agent/agent.yaml"]);
|
|
313
|
+
const result = await discoverAgents({ configPath, baseDir: customBase });
|
|
314
|
+
expect(result.agents).toHaveLength(1);
|
|
315
|
+
expect(result.agents[0].name).toBe("custom-agent");
|
|
316
|
+
expect(result.agents[0].path).toBe(agentDir);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
// ===========================================================================
|
|
320
|
+
// Agent Reference Format Tests
|
|
321
|
+
// ===========================================================================
|
|
322
|
+
describe("agent reference formats", () => {
|
|
323
|
+
it("handles object form agent references", async () => {
|
|
324
|
+
await createAgent("object-ref", { withMetadata: false });
|
|
325
|
+
const configPath = await createFleetConfig(["./agents/object-ref/agent.yaml"]);
|
|
326
|
+
const result = await discoverAgents({ configPath });
|
|
327
|
+
expect(result.agents).toHaveLength(1);
|
|
328
|
+
expect(result.agents[0].configPath).toBe("./agents/object-ref/agent.yaml");
|
|
329
|
+
});
|
|
330
|
+
it("handles nested agent paths", async () => {
|
|
331
|
+
const nestedDir = join(tempDir, "deep", "nested", "agents", "nested-agent");
|
|
332
|
+
await mkdir(nestedDir, { recursive: true });
|
|
333
|
+
await writeFile(join(nestedDir, "agent.yaml"), "name: nested-agent\nruntime: sdk\n", "utf-8");
|
|
334
|
+
const configPath = await createFleetConfig(["./deep/nested/agents/nested-agent/agent.yaml"]);
|
|
335
|
+
const result = await discoverAgents({ configPath });
|
|
336
|
+
expect(result.agents).toHaveLength(1);
|
|
337
|
+
expect(result.agents[0].name).toBe("nested-agent");
|
|
338
|
+
});
|
|
339
|
+
it("skips invalid agent references in config", async () => {
|
|
340
|
+
await createAgent("valid-agent", { withMetadata: false });
|
|
341
|
+
// Create config manually with an invalid reference
|
|
342
|
+
const configPath = join(tempDir, "herdctl.yaml");
|
|
343
|
+
await writeFile(configPath, `version: 1
|
|
344
|
+
fleet:
|
|
345
|
+
name: test-fleet
|
|
346
|
+
agents:
|
|
347
|
+
- path: ./agents/valid-agent/agent.yaml
|
|
348
|
+
- invalid_key: not_a_path
|
|
349
|
+
- 12345
|
|
350
|
+
`, "utf-8");
|
|
351
|
+
const result = await discoverAgents({ configPath });
|
|
352
|
+
// Should only discover the valid agent
|
|
353
|
+
expect(result.agents).toHaveLength(1);
|
|
354
|
+
expect(result.agents[0].name).toBe("valid-agent");
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
// ===========================================================================
|
|
358
|
+
// Path Resolution Tests
|
|
359
|
+
// ===========================================================================
|
|
360
|
+
describe("path resolution", () => {
|
|
361
|
+
it("resolves agent path correctly", async () => {
|
|
362
|
+
await createAgent("path-test", { withMetadata: false });
|
|
363
|
+
const configPath = await createFleetConfig(["./agents/path-test/agent.yaml"]);
|
|
364
|
+
const result = await discoverAgents({ configPath });
|
|
365
|
+
expect(result.agents).toHaveLength(1);
|
|
366
|
+
expect(result.agents[0].path).toBe(join(tempDir, "agents", "path-test"));
|
|
367
|
+
expect(result.agents[0].configPath).toBe("./agents/path-test/agent.yaml");
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
// ===========================================================================
|
|
371
|
+
// Edge Cases
|
|
372
|
+
// ===========================================================================
|
|
373
|
+
describe("edge cases", () => {
|
|
374
|
+
it("handles agent with all optional fields", async () => {
|
|
375
|
+
await createAgent("full-agent", {
|
|
376
|
+
description: "A fully specified agent",
|
|
377
|
+
withMetadata: true,
|
|
378
|
+
metadata: {
|
|
379
|
+
source: {
|
|
380
|
+
type: "github",
|
|
381
|
+
url: "https://github.com/org/full-agent",
|
|
382
|
+
ref: "main",
|
|
383
|
+
version: "1.2.3",
|
|
384
|
+
},
|
|
385
|
+
installed_at: "2024-01-15T10:30:00Z",
|
|
386
|
+
installed_by: "herdctl@1.0.0",
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
const configPath = await createFleetConfig(["./agents/full-agent/agent.yaml"]);
|
|
390
|
+
const result = await discoverAgents({ configPath });
|
|
391
|
+
expect(result.agents).toHaveLength(1);
|
|
392
|
+
const agent = result.agents[0];
|
|
393
|
+
expect(agent.name).toBe("full-agent");
|
|
394
|
+
expect(agent.description).toBe("A fully specified agent");
|
|
395
|
+
expect(agent.installed).toBe(true);
|
|
396
|
+
expect(agent.version).toBe("1.2.3");
|
|
397
|
+
expect(agent.metadata?.installed_at).toBe("2024-01-15T10:30:00Z");
|
|
398
|
+
expect(agent.metadata?.installed_by).toBe("herdctl@1.0.0");
|
|
399
|
+
});
|
|
400
|
+
it("handles agent with minimal fields", async () => {
|
|
401
|
+
const agentDir = join(tempDir, "agents", "minimal");
|
|
402
|
+
await mkdir(agentDir, { recursive: true });
|
|
403
|
+
await writeFile(join(agentDir, "agent.yaml"), "name: minimal\n", "utf-8");
|
|
404
|
+
const configPath = await createFleetConfig(["./agents/minimal/agent.yaml"]);
|
|
405
|
+
const result = await discoverAgents({ configPath });
|
|
406
|
+
expect(result.agents).toHaveLength(1);
|
|
407
|
+
expect(result.agents[0].name).toBe("minimal");
|
|
408
|
+
expect(result.agents[0].description).toBeUndefined();
|
|
409
|
+
expect(result.agents[0].version).toBeUndefined();
|
|
410
|
+
expect(result.agents[0].installed).toBe(false);
|
|
411
|
+
});
|
|
412
|
+
it("handles local source type in metadata", async () => {
|
|
413
|
+
await createAgent("local-source", {
|
|
414
|
+
withMetadata: true,
|
|
415
|
+
metadata: {
|
|
416
|
+
source: {
|
|
417
|
+
type: "local",
|
|
418
|
+
url: "/path/to/local/agent",
|
|
419
|
+
},
|
|
420
|
+
},
|
|
421
|
+
});
|
|
422
|
+
const configPath = await createFleetConfig(["./agents/local-source/agent.yaml"]);
|
|
423
|
+
const result = await discoverAgents({ configPath });
|
|
424
|
+
expect(result.agents).toHaveLength(1);
|
|
425
|
+
expect(result.agents[0].installed).toBe(true);
|
|
426
|
+
expect(result.agents[0].metadata?.source.type).toBe("local");
|
|
427
|
+
});
|
|
428
|
+
it("handles duplicate agent paths in config (returns one entry)", async () => {
|
|
429
|
+
await createAgent("duplicate-agent", { withMetadata: false });
|
|
430
|
+
const configPath = await createFleetConfig([
|
|
431
|
+
"./agents/duplicate-agent/agent.yaml",
|
|
432
|
+
"./agents/duplicate-agent/agent.yaml",
|
|
433
|
+
]);
|
|
434
|
+
const result = await discoverAgents({ configPath });
|
|
435
|
+
// Both entries are processed, so we get two results
|
|
436
|
+
// (deduplication would be a feature enhancement)
|
|
437
|
+
expect(result.agents).toHaveLength(2);
|
|
438
|
+
expect(result.agents[0].name).toBe("duplicate-agent");
|
|
439
|
+
expect(result.agents[1].name).toBe("duplicate-agent");
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
});
|
|
443
|
+
//# sourceMappingURL=agent-discovery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-discovery.test.js","sourceRoot":"","sources":["../../../src/distribution/__tests__/agent-discovery.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,cAAc,GACf,MAAM,uBAAuB,CAAC;AAG/B,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,4CAA4C;QAC5C,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,0BAA0B;QAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,mBAAmB;IACnB,8EAA8E;IAE9E;;OAEG;IACH,KAAK,UAAU,iBAAiB,CAC9B,aAAuB,EAAE,EACzB,UAA6B,EAAE;QAE/B,MAAM,EAAE,IAAI,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;QAExC,MAAM,UAAU,GACd,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAElF,MAAM,OAAO,GAAG;;;UAGV,IAAI;;;EAGZ,UAAU;CACX,CAAC;QAEE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,UAMI,EAAE;QAEN,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,oBAAoB;QACpB,MAAM,SAAS,GAAG,SAAS,IAAI;;;EAGjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE;CACnE,CAAC;QACE,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAElE,oCAAoC;QACpC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAyB;gBACrC,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,8BAA8B;oBACnC,GAAG,EAAE,QAAQ;oBACb,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,IAAI,OAAO;oBACrD,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM;iBAC5B;gBACD,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACxE,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,IAAI,eAAe;gBAC/D,GAAG,OAAO,CAAC,QAAQ;aACpB,CAAC;YACF,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/F,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG;gBAClB,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,kBAAkB,IAAI,OAAO;aAC/C,CAAC;YACF,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EACpC,OAAO,CACR,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,SAAS,CACb,UAAU,EACV;;;CAGP,EACO,OAAO,CACR,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,qBAAqB;IACrB,8EAA8E;IAE9E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,WAAW,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAEjF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,WAAW,CAAC,iBAAiB,EAAE;gBACnC,WAAW,EAAE,kCAAkC;aAChD,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,WAAW,CAAC,iBAAiB,EAAE;gBACnC,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;aAC3D,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,WAAW,CAAC,sBAAsB,EAAE;gBACxC,YAAY,EAAE,KAAK;gBACnB,eAAe,EAAE,IAAI;gBACrB,kBAAkB,EAAE,OAAO;aAC5B,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC;YAEzF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAErD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;gBACzC,6BAA6B;gBAC7B,6BAA6B;gBAC7B,6BAA6B;aAC9B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEtC,2BAA2B;YAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,WAAW,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,MAAM,WAAW,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAE3D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;gBACzC,iCAAiC;gBACjC,iCAAiC;gBACjC,kCAAkC;aACnC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC/C,aAAa;gBACb,cAAc;gBACd,aAAa;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,8BAA8B;IAC9B,8EAA8E;IAE9E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,yCAAyC;YACzC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;gBACzC,kCAAkC;gBAClC,mCAAmC;aACpC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAC5B,wCAAwC,EACxC,OAAO,CACR,CAAC;YACF,qBAAqB;YACrB,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAE9E,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,kCAAkC,EAAE,OAAO,CAAC,CAAC;YAC3F,oDAAoD;YACpD,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAC/B,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAC7E,OAAO,CACR,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAE/E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,gCAAgC;YAChC,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAC5B,0CAA0C,EAC1C,OAAO,CACR,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAElF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,wBAAwB;YAExB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAElF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAC5B,wCAAwC,EACxC,OAAO,CACR,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAEnF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAErD,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAElF,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAA0B,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACpD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,SAAS,CAAC,UAAU,EAAE,gCAAgC,EAAE,OAAO,CAAC,CAAC;YAEvE,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAElF,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAA0B,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAEzC,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAElF,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAA0B,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,6CAA6C;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAE7F,iDAAiD;YACjD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAEjF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,+BAA+B;IAC/B,8EAA8E;IAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,WAAW,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAE/E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC5E,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAE9F,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC;YAE7F,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,WAAW,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAE1D,mDAAmD;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,SAAS,CACb,UAAU,EACV;;;;;;;CAOP,EACO,OAAO,CACR,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,uCAAuC;YACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,WAAW,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAE9E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,WAAW,CAAC,YAAY,EAAE;gBAC9B,WAAW,EAAE,yBAAyB;gBACtC,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,GAAG,EAAE,mCAAmC;wBACxC,GAAG,EAAE,MAAM;wBACX,OAAO,EAAE,OAAO;qBACjB;oBACD,YAAY,EAAE,sBAAsB;oBACpC,YAAY,EAAE,eAAe;iBAC9B;aACF,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAE/E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAE1E,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAE5E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,WAAW,CAAC,cAAc,EAAE;gBAChC,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,GAAG,EAAE,sBAAsB;qBAC5B;iBACF;aACF,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAEjF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,WAAW,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;gBACzC,qCAAqC;gBACrC,qCAAqC;aACtC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,oDAAoD;YACpD,iDAAiD;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-info.test.d.ts","sourceRoot":"","sources":["../../../src/distribution/__tests__/agent-info.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|