@agentvault/agentvault 0.15.0 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/_cp.d.ts +10 -0
  2. package/dist/_cp.d.ts.map +1 -0
  3. package/dist/cli.js +72036 -253
  4. package/dist/cli.js.map +7 -1
  5. package/dist/index.js +76351 -24
  6. package/dist/index.js.map +7 -1
  7. package/dist/openclaw-entry.js +1449 -1201
  8. package/dist/openclaw-entry.js.map +7 -1
  9. package/package.json +1 -1
  10. package/dist/__tests__/crypto-helpers.test.d.ts +0 -2
  11. package/dist/__tests__/crypto-helpers.test.d.ts.map +0 -1
  12. package/dist/__tests__/functional.test.d.ts +0 -21
  13. package/dist/__tests__/functional.test.d.ts.map +0 -1
  14. package/dist/__tests__/install-plugin.test.d.ts +0 -2
  15. package/dist/__tests__/install-plugin.test.d.ts.map +0 -1
  16. package/dist/__tests__/multi-session.test.d.ts +0 -2
  17. package/dist/__tests__/multi-session.test.d.ts.map +0 -1
  18. package/dist/__tests__/state.test.d.ts +0 -2
  19. package/dist/__tests__/state.test.d.ts.map +0 -1
  20. package/dist/__tests__/transport.test.d.ts +0 -2
  21. package/dist/__tests__/transport.test.d.ts.map +0 -1
  22. package/dist/account-config.js +0 -60
  23. package/dist/account-config.js.map +0 -1
  24. package/dist/channel.js +0 -3411
  25. package/dist/channel.js.map +0 -1
  26. package/dist/create-agent.js +0 -314
  27. package/dist/create-agent.js.map +0 -1
  28. package/dist/crypto-helpers.js +0 -4
  29. package/dist/crypto-helpers.js.map +0 -1
  30. package/dist/doctor.js +0 -415
  31. package/dist/doctor.js.map +0 -1
  32. package/dist/fetch-interceptor.js +0 -213
  33. package/dist/fetch-interceptor.js.map +0 -1
  34. package/dist/gateway-send.js +0 -114
  35. package/dist/gateway-send.js.map +0 -1
  36. package/dist/http-handlers.js +0 -131
  37. package/dist/http-handlers.js.map +0 -1
  38. package/dist/mcp-handlers.js +0 -48
  39. package/dist/mcp-handlers.js.map +0 -1
  40. package/dist/mcp-server.js +0 -192
  41. package/dist/mcp-server.js.map +0 -1
  42. package/dist/openclaw-compat.js +0 -94
  43. package/dist/openclaw-compat.js.map +0 -1
  44. package/dist/openclaw-plugin.js +0 -297
  45. package/dist/openclaw-plugin.js.map +0 -1
  46. package/dist/openclaw-types.js +0 -13
  47. package/dist/openclaw-types.js.map +0 -1
  48. package/dist/setup.js +0 -460
  49. package/dist/setup.js.map +0 -1
  50. package/dist/skill-invoker.js +0 -100
  51. package/dist/skill-invoker.js.map +0 -1
  52. package/dist/skill-manifest.js +0 -249
  53. package/dist/skill-manifest.js.map +0 -1
  54. package/dist/skill-telemetry.js +0 -146
  55. package/dist/skill-telemetry.js.map +0 -1
  56. package/dist/skills-publish.js +0 -133
  57. package/dist/skills-publish.js.map +0 -1
  58. package/dist/state.js +0 -178
  59. package/dist/state.js.map +0 -1
  60. package/dist/transport.js +0 -43
  61. package/dist/transport.js.map +0 -1
  62. package/dist/types.js +0 -2
  63. package/dist/types.js.map +0 -1
  64. package/dist/workspace-handlers.js +0 -177
  65. package/dist/workspace-handlers.js.map +0 -1
@@ -1,249 +0,0 @@
1
- /**
2
- * Skill manifest loader — loads skills from SKILL.md files and backend API.
3
- *
4
- * SKILL.md format:
5
- * ```
6
- * ---
7
- * name: code-review
8
- * version: "1.0.0"
9
- * description: Reviews code for issues
10
- * tags: [code-review, typescript]
11
- * sla:
12
- * p95_latency_ms: 5000
13
- * max_error_rate: 0.05
14
- * schema:
15
- * type: object
16
- * properties:
17
- * code:
18
- * type: string
19
- * description: Code to review
20
- * required: [code]
21
- * ---
22
- * # Code Review Skill
23
- *
24
- * Instructions for invoking this skill...
25
- * ```
26
- */
27
- import { readFileSync, existsSync, readdirSync } from "node:fs";
28
- import { resolve, join } from "node:path";
29
- /**
30
- * Parse a SKILL.md file into a SkillDefinition.
31
- *
32
- * Extracts YAML frontmatter between --- delimiters.
33
- * Everything after the closing --- is treated as instructions.
34
- */
35
- export function parseSkillMd(content) {
36
- const lines = content.split("\n");
37
- // Find frontmatter delimiters
38
- if (lines[0]?.trim() !== "---")
39
- return null;
40
- let endIdx = -1;
41
- for (let i = 1; i < lines.length; i++) {
42
- if (lines[i]?.trim() === "---") {
43
- endIdx = i;
44
- break;
45
- }
46
- }
47
- if (endIdx === -1)
48
- return null;
49
- // Parse YAML frontmatter (simple key-value parser)
50
- const frontmatterLines = lines.slice(1, endIdx);
51
- const frontmatter = parseSimpleYaml(frontmatterLines.join("\n"));
52
- if (!frontmatter.name)
53
- return null;
54
- // Everything after frontmatter is instructions
55
- const instructionLines = lines.slice(endIdx + 1);
56
- const instructions = instructionLines.join("\n").trim();
57
- return {
58
- name: frontmatter.name,
59
- version: frontmatter.version,
60
- description: frontmatter.description,
61
- tags: frontmatter.tags,
62
- inputSchema: frontmatter.schema,
63
- slaDefinition: frontmatter.sla,
64
- instructions: instructions || undefined,
65
- };
66
- }
67
- /**
68
- * Simple YAML parser for frontmatter (handles basic key-value, arrays, nested objects).
69
- * Not a full YAML parser — covers the subset used in SKILL.md files.
70
- */
71
- function parseSimpleYaml(yaml) {
72
- const result = {};
73
- const lines = yaml.split("\n");
74
- let currentKey = "";
75
- let currentIndent = 0;
76
- let nestedObj = null;
77
- for (const line of lines) {
78
- const trimmed = line.trim();
79
- if (!trimmed || trimmed.startsWith("#"))
80
- continue;
81
- const indent = line.length - line.trimStart().length;
82
- // Inline array: key: [val1, val2]
83
- const inlineArrayMatch = trimmed.match(/^(\w[\w-]*)\s*:\s*\[(.+)\]$/);
84
- if (inlineArrayMatch) {
85
- const key = inlineArrayMatch[1];
86
- const values = inlineArrayMatch[2]
87
- .split(",")
88
- .map((v) => v.trim().replace(/^["']|["']$/g, ""));
89
- if (nestedObj && indent > currentIndent) {
90
- nestedObj[key] = values;
91
- }
92
- else {
93
- if (nestedObj && currentKey) {
94
- result[currentKey] = nestedObj;
95
- nestedObj = null;
96
- }
97
- result[key] = values;
98
- }
99
- continue;
100
- }
101
- // Key-value pair
102
- const kvMatch = trimmed.match(/^(\w[\w-]*)\s*:\s*(.+)$/);
103
- if (kvMatch && indent === 0) {
104
- if (nestedObj && currentKey) {
105
- result[currentKey] = nestedObj;
106
- nestedObj = null;
107
- }
108
- const key = kvMatch[1];
109
- const value = kvMatch[2].replace(/^["']|["']$/g, "");
110
- // Try to parse numbers
111
- const num = Number(value);
112
- if (!isNaN(num) && value !== "") {
113
- result[key] = num;
114
- }
115
- else if (value === "true") {
116
- result[key] = true;
117
- }
118
- else if (value === "false") {
119
- result[key] = false;
120
- }
121
- else {
122
- result[key] = value;
123
- }
124
- continue;
125
- }
126
- // Nested object start (key with no value)
127
- const nestedMatch = trimmed.match(/^(\w[\w-]*)\s*:$/);
128
- if (nestedMatch && indent === 0) {
129
- if (nestedObj && currentKey) {
130
- result[currentKey] = nestedObj;
131
- }
132
- currentKey = nestedMatch[1];
133
- currentIndent = indent;
134
- nestedObj = {};
135
- continue;
136
- }
137
- // Nested key-value
138
- if (nestedObj && indent > 0) {
139
- const nestedKv = trimmed.match(/^(\w[\w-]*)\s*:\s*(.+)$/);
140
- if (nestedKv) {
141
- const key = nestedKv[1];
142
- const value = nestedKv[2].replace(/^["']|["']$/g, "");
143
- const num = Number(value);
144
- if (!isNaN(num) && value !== "") {
145
- nestedObj[key] = num;
146
- }
147
- else if (value === "true") {
148
- nestedObj[key] = true;
149
- }
150
- else if (value === "false") {
151
- nestedObj[key] = false;
152
- }
153
- else {
154
- nestedObj[key] = value;
155
- }
156
- }
157
- }
158
- }
159
- // Flush any remaining nested object
160
- if (nestedObj && currentKey) {
161
- result[currentKey] = nestedObj;
162
- }
163
- return result;
164
- }
165
- /**
166
- * Load skills from a directory by scanning for SKILL.md files.
167
- */
168
- export function loadSkillsFromDirectory(dir) {
169
- const skills = [];
170
- const absDir = resolve(dir);
171
- if (!existsSync(absDir))
172
- return skills;
173
- // Check for SKILL.md in the directory itself
174
- const rootSkill = join(absDir, "SKILL.md");
175
- if (existsSync(rootSkill)) {
176
- const content = readFileSync(rootSkill, "utf-8");
177
- const skill = parseSkillMd(content);
178
- if (skill)
179
- skills.push(skill);
180
- }
181
- // Check for SKILL.md in subdirectories (one level deep)
182
- try {
183
- const entries = readdirSync(absDir, { withFileTypes: true });
184
- for (const entry of entries) {
185
- if (entry.isDirectory()) {
186
- const subSkill = join(absDir, entry.name, "SKILL.md");
187
- if (existsSync(subSkill)) {
188
- const content = readFileSync(subSkill, "utf-8");
189
- const skill = parseSkillMd(content);
190
- if (skill)
191
- skills.push(skill);
192
- }
193
- }
194
- }
195
- }
196
- catch {
197
- // Directory not readable, skip
198
- }
199
- return skills;
200
- }
201
- /**
202
- * Load skills from backend API.
203
- */
204
- export async function loadSkillsFromApi(apiUrl, apiKey, hubId) {
205
- try {
206
- const res = await fetch(`${apiUrl}/api/v1/hub/identities/${hubId}/skills`, {
207
- headers: { Authorization: `Bearer ${apiKey}` },
208
- });
209
- if (!res.ok)
210
- return [];
211
- const data = (await res.json());
212
- return data.map((cap) => ({
213
- name: cap.capability_name,
214
- version: cap.capability_version,
215
- description: cap.description,
216
- inputSchema: cap.schema_definition,
217
- slaDefinition: cap.sla_definition,
218
- tags: cap.tags,
219
- instructions: cap.instructions,
220
- }));
221
- }
222
- catch {
223
- return [];
224
- }
225
- }
226
- /**
227
- * Merge local and remote skills. Local definitions take precedence.
228
- */
229
- export function mergeSkills(local, remote) {
230
- const byName = new Map();
231
- // Remote first (lower precedence)
232
- for (const skill of remote) {
233
- byName.set(skill.name, skill);
234
- }
235
- // Local overwrites (higher precedence)
236
- for (const skill of local) {
237
- byName.set(skill.name, skill);
238
- }
239
- const source = local.length > 0 && remote.length > 0
240
- ? "merged"
241
- : local.length > 0
242
- ? "local"
243
- : "remote";
244
- return {
245
- skills: Array.from(byName.values()),
246
- source,
247
- };
248
- }
249
- //# sourceMappingURL=skill-manifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-manifest.js","sourceRoot":"","sources":["../src/skill-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,146 +0,0 @@
1
- /**
2
- * Skill telemetry emission — wraps skill execution with lifecycle spans.
3
- *
4
- * Creates start -> processing -> completion spans for each skill invocation.
5
- * Auto-detects skill version from persisted manifest.
6
- */
7
- import { buildSkillInvocationSpan } from "@agentvault/crypto";
8
- let spanBuffer = [];
9
- /**
10
- * Get and clear the buffered spans (for batch reporting).
11
- */
12
- export function drainSkillSpans() {
13
- const spans = spanBuffer;
14
- spanBuffer = [];
15
- return spans;
16
- }
17
- /**
18
- * Generate a unique invocation ID.
19
- */
20
- function generateInvocationId() {
21
- const bytes = new Uint8Array(16);
22
- crypto.getRandomValues(bytes);
23
- let hex = "";
24
- for (let i = 0; i < bytes.length; i++) {
25
- hex += bytes[i].toString(16).padStart(2, "0");
26
- }
27
- return hex;
28
- }
29
- /**
30
- * Wrap a skill execution with lifecycle telemetry spans.
31
- *
32
- * Creates two spans:
33
- * 1. start — emitted immediately when invocation begins
34
- * 2. completion — emitted when execution completes (success or error)
35
- *
36
- * @param skillName — name of the skill being executed
37
- * @param version — semver version of the skill
38
- * @param fn — the async function to execute
39
- * @param instrument — optional InstrumentationContext for direct reporting
40
- * @returns The result of fn()
41
- */
42
- export async function wrapSkillExecution(skillName, version, fn, instrument) {
43
- const invocationId = generateInvocationId();
44
- const startTime = Date.now();
45
- // Emit start span
46
- const startSpan = buildSkillInvocationSpan({
47
- skillName,
48
- invocationId,
49
- phase: "start",
50
- version,
51
- latencyMs: 0,
52
- status: "ok",
53
- });
54
- if (instrument) {
55
- instrument.reportSkillInvocation({
56
- skillName,
57
- invocationId,
58
- phase: "start",
59
- version,
60
- latencyMs: 0,
61
- status: "ok",
62
- });
63
- }
64
- else {
65
- spanBuffer.push(startSpan);
66
- }
67
- try {
68
- const result = await fn();
69
- const latencyMs = Date.now() - startTime;
70
- // Emit completion span
71
- const completionSpan = buildSkillInvocationSpan({
72
- skillName,
73
- invocationId,
74
- phase: "completion",
75
- version,
76
- latencyMs,
77
- status: "ok",
78
- });
79
- if (instrument) {
80
- instrument.reportSkillInvocation({
81
- skillName,
82
- invocationId,
83
- phase: "completion",
84
- version,
85
- latencyMs,
86
- status: "ok",
87
- });
88
- }
89
- else {
90
- spanBuffer.push(completionSpan);
91
- }
92
- return result;
93
- }
94
- catch (err) {
95
- const latencyMs = Date.now() - startTime;
96
- const message = err instanceof Error ? err.message : String(err);
97
- // Emit error completion span
98
- const errorSpan = buildSkillInvocationSpan({
99
- skillName,
100
- invocationId,
101
- phase: "completion",
102
- version,
103
- latencyMs,
104
- status: "error",
105
- statusMessage: message,
106
- });
107
- if (instrument) {
108
- instrument.reportSkillInvocation({
109
- skillName,
110
- invocationId,
111
- phase: "completion",
112
- version,
113
- latencyMs,
114
- status: "error",
115
- statusMessage: message,
116
- });
117
- }
118
- else {
119
- spanBuffer.push(errorSpan);
120
- }
121
- throw err;
122
- }
123
- }
124
- /**
125
- * Report a completed skill invocation with full metadata.
126
- * Used for post-hoc reporting when the caller has already collected metrics.
127
- */
128
- export function reportSkillInvocation(opts) {
129
- const span = buildSkillInvocationSpan({
130
- skillName: opts.skillName,
131
- invocationId: generateInvocationId(),
132
- phase: "completion",
133
- version: opts.version,
134
- latencyMs: opts.latencyMs,
135
- inputTokens: opts.inputTokens,
136
- outputTokens: opts.outputTokens,
137
- costCents: opts.costCents,
138
- toolsUsed: opts.toolsUsed,
139
- schemaMatch: opts.schemaMatch,
140
- status: opts.success ? "ok" : "error",
141
- statusMessage: opts.errorMessage,
142
- });
143
- spanBuffer.push(span);
144
- return span;
145
- }
146
- //# sourceMappingURL=skill-telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-telemetry.js","sourceRoot":"","sources":["../src/skill-telemetry.ts"],"names":[],"mappings":"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"}
@@ -1,133 +0,0 @@
1
- import { readFileSync, existsSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- import { parseSkillMd } from "./skill-manifest.js";
4
- export async function publishSkills(opts) {
5
- if (!opts.manifest) {
6
- console.error("Error: --manifest is required");
7
- process.exit(1);
8
- }
9
- if (!opts.apiKey) {
10
- console.error("Error: --api-key or AGENTVAULT_API_KEY is required");
11
- process.exit(1);
12
- }
13
- // Read and parse manifest
14
- const manifestPath = resolve(opts.manifest);
15
- let raw;
16
- try {
17
- raw = readFileSync(manifestPath, "utf-8");
18
- }
19
- catch {
20
- console.error(`Error: Cannot read manifest file: ${manifestPath}`);
21
- process.exit(1);
22
- }
23
- let manifest;
24
- try {
25
- manifest = JSON.parse(raw);
26
- }
27
- catch {
28
- console.error("Error: Invalid JSON in manifest file");
29
- process.exit(1);
30
- }
31
- // Validate manifest structure
32
- if (!Array.isArray(manifest.skills) || manifest.skills.length === 0) {
33
- console.error("Error: Manifest must contain a non-empty 'skills' array");
34
- process.exit(1);
35
- }
36
- for (const skill of manifest.skills) {
37
- if (!skill.name || typeof skill.name !== "string") {
38
- console.error("Error: Each skill must have a 'name' string");
39
- process.exit(1);
40
- }
41
- if (skill.sla?.max_error_rate !== undefined &&
42
- (skill.sla.max_error_rate < 0 || skill.sla.max_error_rate > 1)) {
43
- console.error(`Error: Skill "${skill.name}" max_error_rate must be 0.0-1.0`);
44
- process.exit(1);
45
- }
46
- if (skill.sla?.min_uptime_pct !== undefined &&
47
- (skill.sla.min_uptime_pct < 0 || skill.sla.min_uptime_pct > 100)) {
48
- console.error(`Error: Skill "${skill.name}" min_uptime_pct must be 0-100`);
49
- process.exit(1);
50
- }
51
- }
52
- // Transform to API format
53
- const capabilities = manifest.skills.map((s) => {
54
- // Load SKILL.md content if path specified
55
- let skillContent = null;
56
- let mcpMeta = s.mcp_metadata ?? null;
57
- let skillTags = s.tags ?? null;
58
- let skillInstructions = s.instructions ?? null;
59
- let schemaDef = s.schema_definition ?? null;
60
- if (s.skill_content_path) {
61
- const contentPath = resolve(s.skill_content_path);
62
- if (existsSync(contentPath)) {
63
- skillContent = readFileSync(contentPath, "utf-8");
64
- // Try to parse SKILL.md for additional metadata
65
- const parsed = parseSkillMd(skillContent);
66
- if (parsed) {
67
- // SKILL.md metadata fills in missing manifest fields
68
- if (!s.description && parsed.description)
69
- s.description = parsed.description;
70
- if (!s.version && parsed.version)
71
- s.version = parsed.version;
72
- if (!skillTags && parsed.tags)
73
- skillTags = parsed.tags;
74
- if (!skillInstructions && parsed.instructions)
75
- skillInstructions = parsed.instructions;
76
- if (!schemaDef && parsed.inputSchema)
77
- schemaDef = parsed.inputSchema;
78
- if (!s.sla && parsed.slaDefinition) {
79
- s.sla = parsed.slaDefinition;
80
- }
81
- }
82
- }
83
- else {
84
- console.warn(`Warning: SKILL.md not found at ${contentPath}, skipping content`);
85
- }
86
- }
87
- return {
88
- capability_name: s.name,
89
- capability_version: s.version ?? null,
90
- description: s.description ?? null,
91
- sla_definition: s.sla
92
- ? {
93
- p95_latency_ms: s.sla.p95_latency_ms ?? null,
94
- max_error_rate: s.sla.max_error_rate ?? null,
95
- min_uptime_pct: s.sla.min_uptime_pct ?? null,
96
- max_avg_tokens: s.sla.max_avg_tokens ?? null,
97
- }
98
- : null,
99
- // New fields
100
- skill_content: skillContent,
101
- mcp_metadata: mcpMeta,
102
- tags: skillTags,
103
- changelog: s.changelog ?? null,
104
- schema_definition: schemaDef,
105
- instructions: skillInstructions,
106
- };
107
- });
108
- // POST to backend
109
- const url = `${opts.apiUrl}/api/v1/hub/skills/publish`;
110
- const res = await fetch(url, {
111
- method: "POST",
112
- headers: {
113
- "Content-Type": "application/json",
114
- Authorization: `Bearer ${opts.apiKey}`,
115
- },
116
- body: JSON.stringify(capabilities),
117
- });
118
- if (!res.ok) {
119
- const text = await res.text();
120
- console.error(`Error: API returned ${res.status}: ${text}`);
121
- process.exit(1);
122
- }
123
- const result = (await res.json());
124
- console.log(`Published ${result.length} skill(s) successfully.`);
125
- for (const cap of result) {
126
- const status = cap.verification_status ?? "declared";
127
- const sla = cap.sla_definition ? " (SLA)" : "";
128
- const mcp = cap.mcp_metadata ? " (MCP)" : "";
129
- const tagStr = cap.tags?.length ? ` [${cap.tags.join(", ")}]` : "";
130
- console.log(` - ${cap.capability_name}${cap.capability_version ? `@${cap.capability_version}` : ""}: ${status}${sla}${mcp}${tagStr}`);
131
- }
132
- }
133
- //# sourceMappingURL=skills-publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-publish.js","sourceRoot":"","sources":["../src/skills-publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAqCnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAiB;IACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,QAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IACE,KAAK,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS;YACvC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,EAC9D,CAAC;YACD,OAAO,CAAC,KAAK,CACX,iBAAiB,KAAK,CAAC,IAAI,kCAAkC,CAC9D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IACE,KAAK,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS;YACvC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,EAChE,CAAC;YACD,OAAO,CAAC,KAAK,CACX,iBAAiB,KAAK,CAAC,IAAI,gCAAgC,CAC5D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7C,0CAA0C;QAC1C,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC;QACrC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;QAC/B,IAAI,iBAAiB,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC;QAC/C,IAAI,SAAS,GAAG,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAE5C,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5B,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAClD,gDAAgD;gBAChD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC1C,IAAI,MAAM,EAAE,CAAC;oBACX,qDAAqD;oBACrD,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;wBAAE,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;oBAC7E,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;wBAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;oBAC7D,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI;wBAAE,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;oBACvD,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,YAAY;wBAAE,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC;oBACvF,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW;wBAAE,SAAS,GAAG,MAAM,CAAC,WAAsC,CAAC;oBAChG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;wBACnC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,aAAiC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,kCAAkC,WAAW,oBAAoB,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,OAAO;YACL,eAAe,EAAE,CAAC,CAAC,IAAI;YACvB,kBAAkB,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;YACrC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;YAClC,cAAc,EAAE,CAAC,CAAC,GAAG;gBACnB,CAAC,CAAC;oBACE,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;oBAC5C,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;oBAC5C,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;oBAC5C,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;iBAC7C;gBACH,CAAC,CAAC,IAAI;YACR,aAAa;YACb,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,OAAO;YACrB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;YAC9B,iBAAiB,EAAE,SAAS;YAC5B,YAAY,EAAE,iBAAiB;SAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,4BAA4B,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;SACvC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;KACnC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAO9B,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,yBAAyB,CAAC,CAAC;IACjE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,IAAI,UAAU,CAAC;QACrD,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CACT,OAAO,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,EAAE,CAC1H,CAAC;IACJ,CAAC;AACH,CAAC"}