buddy-agent-harness 0.7.0 → 0.9.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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/README.md +9 -1
- package/dist/cli.mjs +19036 -1
- package/dist/dist-ktNZ1sJo.mjs +2966 -0
- package/dist/esm-BMqwcD7W.mjs +87 -0
- package/dist/esm-CVacKtt6.mjs +64 -0
- package/dist/index.d.mts +31 -18
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2734 -1
- package/dist/index.mjs.map +1 -0
- package/package.json +4 -4
- package/plugin.json +1 -1
- package/skills/doctor/SKILL.md +1 -1
- package/skills/enhance/SKILL.md +54 -10
- package/skills/enhance/references/delegation.history.md +15 -0
- package/skills/enhance/references/delegation.md +66 -1
- package/skills/init/SKILL.md +1 -1
- package/src/cli.ts +2 -0
- package/src/dep-plugins/dep-plugins.command.ts +168 -0
- package/src/dep-plugins/dep-plugins.ts +131 -0
- package/src/dep-plugins/generate.ts +115 -0
- package/src/dep-plugins/harness-plugins.ts +232 -0
- package/src/dep-plugins/reconcile.ts +132 -0
- package/src/dep-plugins/resolve.ts +117 -0
- package/dist/cli-Bvnq8zOL.mjs +0 -2122
- package/dist/cli-Bvnq8zOL.mjs.map +0 -1
- package/dist/cli.d.mts +0 -16
- package/dist/cli.d.mts.map +0 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/search-packages@2.2.1/node_modules/search-packages/esm/hasAllKeywords.js
|
|
2
|
+
function hasAllKeywords(actual, expected) {
|
|
3
|
+
const set = new Set(actual);
|
|
4
|
+
return !expected.find((key) => !set.has(key));
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region ../../node_modules/.pnpm/search-packages@2.2.1/node_modules/search-packages/esm/pickPackagesWithKeywords.js
|
|
8
|
+
function pickPackagesWithKeywords(packageInfos, keywords, fields) {
|
|
9
|
+
const pkgs = packageInfos.filter((pkg) => hasAllKeywords(pkg.keywords, keywords));
|
|
10
|
+
if (fields) return pkgs.map((pkg) => fields.reduce((p, v) => {
|
|
11
|
+
p[v] = pkg[v];
|
|
12
|
+
return p;
|
|
13
|
+
}, { name: pkg.name }));
|
|
14
|
+
return pkgs.map((pkg) => pkg.name);
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region ../../node_modules/.pnpm/search-packages@2.2.1/node_modules/search-packages/esm/registry.js
|
|
18
|
+
/**
|
|
19
|
+
* The public npm registry search endpoint.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_REGISTRY = "https://registry.npmjs.org";
|
|
22
|
+
/**
|
|
23
|
+
* Upper bound on how many results `searchByKeywords` will page through.
|
|
24
|
+
*
|
|
25
|
+
* The registry reports a `total` that can run into the thousands for a broad keyword.
|
|
26
|
+
* Paging all of it would mean dozens of sequential requests, which defeats the point of
|
|
27
|
+
* replacing the `npm search` shell-out. 1000 is 4 requests at {@link MAX_PAGE_SIZE} and
|
|
28
|
+
* covers every realistic plugin-discovery search.
|
|
29
|
+
*
|
|
30
|
+
* When the registry has more matches than this, the extra results are dropped and
|
|
31
|
+
* `truncated` is set on the result so the caller can tell.
|
|
32
|
+
*/
|
|
33
|
+
const DEFAULT_MAX_RESULTS = 1e3;
|
|
34
|
+
var RegistrySearchError = class extends Error {
|
|
35
|
+
status;
|
|
36
|
+
constructor(message, status) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.status = status;
|
|
39
|
+
this.name = "RegistrySearchError";
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Queries the npm registry search endpoint for packages carrying `keywords`,
|
|
44
|
+
* paging until `total` is reached or `maxResults` is hit.
|
|
45
|
+
*
|
|
46
|
+
* The registry's `keywords:` qualifier is not a strict conjunction, so the returned
|
|
47
|
+
* packages still need filtering by {@link hasAllKeywords} on the caller's side.
|
|
48
|
+
*/
|
|
49
|
+
async function fetchPackagesByKeywords(keywords, options = {}) {
|
|
50
|
+
const { registry = DEFAULT_REGISTRY, maxResults = DEFAULT_MAX_RESULTS, signal, fetch: fetchImpl = globalThis.fetch } = options;
|
|
51
|
+
if (keywords.length === 0) return {
|
|
52
|
+
packages: [],
|
|
53
|
+
truncated: false
|
|
54
|
+
};
|
|
55
|
+
if (typeof fetchImpl !== "function") throw new RegistrySearchError("global fetch is not available; Node 18 or later is required");
|
|
56
|
+
const text = `keywords:${keywords.join(",")}`;
|
|
57
|
+
const packages = [];
|
|
58
|
+
let total = Number.POSITIVE_INFINITY;
|
|
59
|
+
while (packages.length < maxResults && packages.length < total) {
|
|
60
|
+
const size = Math.min(250, maxResults - packages.length);
|
|
61
|
+
const response = await fetchImpl(`${trimTrailingSlash(registry)}/-/v1/search?text=${encodeURIComponent(text)}&size=${size}&from=${packages.length}`, { signal });
|
|
62
|
+
if (!response.ok) throw new RegistrySearchError(`npm registry search failed: ${response.status} ${response.statusText}`, response.status);
|
|
63
|
+
const body = await response.json();
|
|
64
|
+
const objects = body?.objects ?? [];
|
|
65
|
+
total = typeof body?.total === "number" ? body.total : packages.length + objects.length;
|
|
66
|
+
if (objects.length === 0) return {
|
|
67
|
+
packages,
|
|
68
|
+
truncated: false
|
|
69
|
+
};
|
|
70
|
+
for (const object of objects) if (object?.package) packages.push(object.package);
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
packages,
|
|
74
|
+
truncated: total > packages.length
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function trimTrailingSlash(url) {
|
|
78
|
+
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region ../../node_modules/.pnpm/search-packages@2.2.1/node_modules/search-packages/esm/searchByKeywords.js
|
|
82
|
+
async function searchByKeywords(keywords, fields, options) {
|
|
83
|
+
const { packages } = await fetchPackagesByKeywords(keywords, options);
|
|
84
|
+
return pickPackagesWithKeywords(packages, keywords, fields);
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { searchByKeywords };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
12
|
+
key = keys[i];
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: ((k) => from[k]).bind(null, key),
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
|
|
21
|
+
value: mod,
|
|
22
|
+
enumerable: true
|
|
23
|
+
}) : target, mod));
|
|
24
|
+
var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region ../../node_modules/.pnpm/unpartial@1.0.5/node_modules/unpartial/esm/index.js
|
|
27
|
+
function required(source1, source2, source3) {
|
|
28
|
+
return merge([
|
|
29
|
+
source1,
|
|
30
|
+
source2,
|
|
31
|
+
source3
|
|
32
|
+
], (p, e) => {
|
|
33
|
+
return {
|
|
34
|
+
...p,
|
|
35
|
+
...e
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function merge(entries, reducer) {
|
|
40
|
+
if (entries[0] === void 0 || entries[0] === null) return entries[0];
|
|
41
|
+
return entries.filter((x) => !!x).reduce(reducer, {});
|
|
42
|
+
}
|
|
43
|
+
function unpartial(s1, s2, s3) {
|
|
44
|
+
if (s1 === void 0 || s1 === null) return s1;
|
|
45
|
+
return [
|
|
46
|
+
s1,
|
|
47
|
+
s2,
|
|
48
|
+
s3
|
|
49
|
+
].filter(notNil).reduce((p, s) => ({
|
|
50
|
+
...p,
|
|
51
|
+
...trimNilProps(s)
|
|
52
|
+
}), {});
|
|
53
|
+
}
|
|
54
|
+
function trimNilProps(value) {
|
|
55
|
+
return Object.keys(value).reduce((p, k) => {
|
|
56
|
+
if (notNil(value[k])) p[k] = value[k];
|
|
57
|
+
return p;
|
|
58
|
+
}, {});
|
|
59
|
+
}
|
|
60
|
+
function notNil(value) {
|
|
61
|
+
return value !== null && value !== void 0;
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { __toESM as a, __require as i, unpartial as n, __commonJSMin as r, required as t };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
import { run } from "./cli.mjs";
|
|
2
1
|
import { cli as cli$1 } from "clibuilder";
|
|
2
|
+
//#region src/cli.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The application boundary: argv in, exit code out, nothing read from or written to the process.
|
|
5
|
+
*
|
|
6
|
+
* The exit code is returned rather than written so that a caller which is not the process — a skill
|
|
7
|
+
* launcher, a test — can run a command and learn how it went. `bin/buddy-agent-harness.mjs` is the
|
|
8
|
+
* only place that turns the returned code back into a process outcome.
|
|
9
|
+
*
|
|
10
|
+
* One exit path this return cannot carry: `clibuilder` answers an unknown option or an unknown
|
|
11
|
+
* command by printing help and writing `process.exitCode` itself, returning nothing. `run` reports
|
|
12
|
+
* `0` there, which is why `bin` and the launchers apply the returned code only when it is non-zero.
|
|
13
|
+
*/
|
|
14
|
+
export declare function run(argv: string[]): Promise<number>;
|
|
15
|
+
//#endregion
|
|
3
16
|
//#region src/harness-registry/instruction-bridge.d.ts
|
|
4
17
|
/**
|
|
5
18
|
* What a harness needs in order to read the repository's `AGENTS.md`.
|
|
@@ -163,7 +176,7 @@ type Harness = {
|
|
|
163
176
|
*
|
|
164
177
|
* See `.research/agentic-configuration-standards/` for the per-harness sources.
|
|
165
178
|
*/
|
|
166
|
-
declare const harnessRegistry: readonly Harness[];
|
|
179
|
+
export declare const harnessRegistry: readonly Harness[];
|
|
167
180
|
//#endregion
|
|
168
181
|
//#region src/diagnose-bridges/diagnose-instructions.d.ts
|
|
169
182
|
/** What is on disk where an instruction bridge belongs. */
|
|
@@ -189,7 +202,7 @@ type InstructionReport = {
|
|
|
189
202
|
* checks are read-only, and no repair is a command — rewriting an instruction file is the `init`
|
|
190
203
|
* skill's judgment.
|
|
191
204
|
*/
|
|
192
|
-
declare function diagnoseInstructions(root: string, harnesses: readonly Harness[], cli: string): {
|
|
205
|
+
export declare function diagnoseInstructions(root: string, harnesses: readonly Harness[], cli: string): {
|
|
193
206
|
instructions: InstructionReport[];
|
|
194
207
|
findings: BridgeFinding[];
|
|
195
208
|
};
|
|
@@ -309,10 +322,10 @@ type Repair = {
|
|
|
309
322
|
*/
|
|
310
323
|
skillRepair(at: Locator): string;
|
|
311
324
|
};
|
|
312
|
-
declare const bridgeRepairs: readonly Repair[];
|
|
313
|
-
declare const instructionRepairs: readonly Repair[];
|
|
314
|
-
declare const doctorRepairs: readonly Repair[];
|
|
315
|
-
declare const doctorSkill: {
|
|
325
|
+
export declare const bridgeRepairs: readonly Repair[];
|
|
326
|
+
export declare const instructionRepairs: readonly Repair[];
|
|
327
|
+
export declare const doctorRepairs: readonly Repair[];
|
|
328
|
+
export declare const doctorSkill: {
|
|
316
329
|
readonly name: "doctor";
|
|
317
330
|
readonly description: "Use this skill when a repository loads no project skills, when skills are missing after a clone, when a harness appears to be ignoring AGENTS.md, or when checking whether the agent configuration bridges into .claude/skills, CLAUDE.md, and the other harness files still resolve.";
|
|
318
331
|
};
|
|
@@ -324,7 +337,7 @@ declare const doctorSkill: {
|
|
|
324
337
|
* The finding tables are NOT here. They live in the reference pages below, and this file carries
|
|
325
338
|
* only what every reader needs: how to run it, how to read the report, and where to go next.
|
|
326
339
|
*/
|
|
327
|
-
declare function renderDoctorSkill(version: string): string;
|
|
340
|
+
export declare function renderDoctorSkill(version: string): string;
|
|
328
341
|
//#endregion
|
|
329
342
|
//#region src/diagnose-bridges/git-bridge-state.d.ts
|
|
330
343
|
/** Which side of a diverged bridge moved since the last commit where the two agreed. */
|
|
@@ -425,7 +438,7 @@ type DiagnoseResult = {
|
|
|
425
438
|
* `.agents/skills`, and the instruction bridges into `AGENTS.md`. Read-only: nothing is created,
|
|
426
439
|
* moved, or repaired, so the caller decides what to run from the repair each finding carries.
|
|
427
440
|
*/
|
|
428
|
-
declare function diagnoseBridges({ root, harnesses: preferred, cli }: DiagnoseOptions): DiagnoseResult;
|
|
441
|
+
export declare function diagnoseBridges({ root, harnesses: preferred, cli }: DiagnoseOptions): DiagnoseResult;
|
|
429
442
|
//#endregion
|
|
430
443
|
//#region src/diagnose-configuration/diagnose-configuration.d.ts
|
|
431
444
|
/**
|
|
@@ -480,8 +493,8 @@ type DoctorReport = {
|
|
|
480
493
|
* AXI §5: the healthy answer states the zero with context, so an agent does not re-run with other
|
|
481
494
|
* flags to confirm that an empty section really meant "nothing wrong".
|
|
482
495
|
*/
|
|
483
|
-
declare function buildDoctorReport(bin: string, result: DiagnoseResult, configuration?: ConfigurationFinding[]): DoctorReport;
|
|
484
|
-
declare const doctorCommand: cli$1.Command;
|
|
496
|
+
export declare function buildDoctorReport(bin: string, result: DiagnoseResult, configuration?: ConfigurationFinding[]): DoctorReport;
|
|
497
|
+
export declare const doctorCommand: cli$1.Command;
|
|
485
498
|
//#endregion
|
|
486
499
|
//#region src/diagnose-mcp/diagnose-mcp.d.ts
|
|
487
500
|
/**
|
|
@@ -505,7 +518,7 @@ type DiagnoseMcpOptions = {
|
|
|
505
518
|
/** How to name this tool in the repair commands. */
|
|
506
519
|
cli: string;
|
|
507
520
|
};
|
|
508
|
-
declare function diagnoseMcp({ root, git, cli }: DiagnoseMcpOptions): ConfigurationFinding[];
|
|
521
|
+
export declare function diagnoseMcp({ root, git, cli }: DiagnoseMcpOptions): ConfigurationFinding[];
|
|
509
522
|
//#endregion
|
|
510
523
|
//#region src/diagnose-mcp/mcp-model.d.ts
|
|
511
524
|
/**
|
|
@@ -544,12 +557,12 @@ type McpDirection = "target" | "golden" | "both" | "unknown";
|
|
|
544
557
|
//#endregion
|
|
545
558
|
//#region src/diagnose-mcp/mcp-sources.d.ts
|
|
546
559
|
/** Where the golden set lives, and why it is namespaced rather than sitting at `.agents/mcp.json`. */
|
|
547
|
-
declare const goldenSetPath = ".agents/buddy-agent-harness/mcp.toml";
|
|
560
|
+
export declare const goldenSetPath = ".agents/buddy-agent-harness/mcp.toml";
|
|
548
561
|
//#endregion
|
|
549
562
|
//#region src/initialize-harnesses/init.command.d.ts
|
|
550
|
-
declare const initCommand: cli$1.Command;
|
|
551
|
-
declare const harnessCommand: cli$1.Command;
|
|
552
|
-
declare function activate({ addCommand }: {
|
|
563
|
+
export declare const initCommand: cli$1.Command;
|
|
564
|
+
export declare const harnessCommand: cli$1.Command;
|
|
565
|
+
export declare function activate({ addCommand }: {
|
|
553
566
|
addCommand(command: typeof harnessCommand): void;
|
|
554
567
|
}): void;
|
|
555
568
|
//#endregion
|
|
@@ -583,7 +596,7 @@ type InitializeResult = {
|
|
|
583
596
|
skills: number;
|
|
584
597
|
copied: boolean;
|
|
585
598
|
};
|
|
586
|
-
declare function initializeHarnesses({ root, harnesses: preferred, copy, force }: InitializeOptions): InitializeResult;
|
|
599
|
+
export declare function initializeHarnesses({ root, harnesses: preferred, copy, force }: InitializeOptions): InitializeResult;
|
|
587
600
|
//#endregion
|
|
588
|
-
export {
|
|
601
|
+
export type { BridgeFinding, BridgeKind, BridgeProblem, BridgeReport, BridgeStatus, ConfigurationFault, ConfigurationProblem, DiagnoseMcpOptions, DiagnoseOptions, DiagnoseResult, DivergenceDirection, DivergenceReport, DoctorProblem, DoctorReport, Harness, HarnessName, HarnessScope, HarnessScopeName, InitializeOptions, InitializeResult, InstructionBridge, InstructionKind, InstructionProblem, InstructionReport, InstructionStatus, McpConfig, McpDirection, McpField, McpProblem, McpServer, McpTransport, Repair };
|
|
589
602
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/harness-registry/instruction-bridge.ts","../src/harness-registry/mcp-config.ts","../src/harness-registry/nonstandard-artifact.ts","../src/harness-registry/harness-registry.ts","../src/diagnose-bridges/diagnose-instructions.ts","../src/diagnose-bridges/locator.ts","../src/diagnose-bridges/doctor-guidance.ts","../src/diagnose-bridges/git-bridge-state.ts","../src/diagnose-bridges/diagnose-bridges.ts","../src/diagnose-configuration/diagnose-configuration.ts","../src/diagnose-bridges/doctor.command.ts","../src/diagnose-mcp/diagnose-mcp.ts","../src/diagnose-mcp/mcp-model.ts","../src/diagnose-mcp/mcp-baseline.ts","../src/diagnose-mcp/mcp-sources.ts","../src/initialize-harnesses/init.command.ts","../src/skill-projection/skill-projection.ts","../src/initialize-harnesses/initialize-harnesses.ts"],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/cli.ts","../src/harness-registry/instruction-bridge.ts","../src/harness-registry/mcp-config.ts","../src/harness-registry/nonstandard-artifact.ts","../src/harness-registry/harness-registry.ts","../src/diagnose-bridges/diagnose-instructions.ts","../src/diagnose-bridges/locator.ts","../src/diagnose-bridges/doctor-guidance.ts","../src/diagnose-bridges/git-bridge-state.ts","../src/diagnose-bridges/diagnose-bridges.ts","../src/diagnose-configuration/diagnose-configuration.ts","../src/diagnose-bridges/doctor.command.ts","../src/diagnose-mcp/diagnose-mcp.ts","../src/diagnose-mcp/mcp-model.ts","../src/diagnose-mcp/mcp-baseline.ts","../src/diagnose-mcp/mcp-sources.ts","../src/initialize-harnesses/init.command.ts","../src/skill-projection/skill-projection.ts","../src/initialize-harnesses/initialize-harnesses.ts"],"mappings":";;;;;;;;;;;;;wBAyCsB,IAAI,iBAAiB;;;;;;;;;;;;;;;KC7B/B;;;;;;EAOT;;EAEA;;;EAIA;;EAEA;;EAEA;;;;;;;;;;;;;;;;;;;;KCbS;;EAEX;;;;;;EAMA;;;;;EAKA;;;;;;EAMA;;;;;;;;;;;;;;;;;KCtBW;KAgBA;;;;;EAKX;;EAEA;EACA,MAAM;;;;KC/BK;;KAUA;;;;;;;;;;;;;;;;;;;;;;;;;KA0BA;EACX;EACA;EACA,oBAAoB;EACpB,YAAY;EACZ,uBAAuB;;KAGZ;EACX,MAAM;;EAEN,SAAS;;;;;EAKT,OAAO;;EAEP,aAAa;;;;;;;;;;;;;;;;;;;;;;qBAuBD,0BAA0B;;;;KCzE3B;;;;;;KAMA;KAEA;EACX,SAAS;;EAET;EACA,MAAM;EACN,QAAQ;;;;;;;;;;wBAkFO,qBACf,cACA,oBAAoB,WACpB;EACI,cAAc;EAAqB,UAAU;;;;;;;;;;;;;;;;;;;;KC5FtC;EAAa;EAAc;;KAE3B;;EAEX;;EAEA;;EAEA;;EAEA,WAAW;;;;;;;;;;KCfA;;;;;;;;;;;KAqBA;;;;;;;;;KAUA;;;;;;;;;KAoBA;KAOA;;KAOA,gBAAgB,gBAAgB,qBAAqB,qBAAqB,aAAa;;KAGvF,uBAAuB;;;;;;;;;;;;;;;;;;KAmBvB;;EAEX;;EAEA;;KAGW;EACX,SAAS;;EAET;;;;;;;EAOA,OAAO,IAAI,SAAS,cAAc;;;;;;EAMlC,YAAY,IAAI;;qBAwKJ,wBAAwB;qBA4CxB,6BAA6B;qBAuM7B,wBAAwB;qBAOxB;WACZ;WACA;;;;;;;;;;wBAmCe,kBAAkB;;;;KC5jBtB;;KAGA;;;;;;cAwBC;mBAIA;;mBAFK;EAEjB,YAAY;;;;;;EASZ,WAAW,eAAe;;;;;;;EAa1B,UAAU;;;;;;;;;EAaV,gBAAgB;;EAMhB,UAAU,gBAAgB;;;;;EAS1B,YAAY,gBAAgB,oBAAoB;;UAYxC;;;;;UAmBA;;;;KC5GG;KACA;KAEA;EACX,SAAS;;EAET;EACA,MAAM;EACN,QAAQ;;KAGG;EACX;;;;;EAKA,SAAS;EACT;;EAEA,QAAQ;;KAGG;EACX;EACA,WAAW;;KAGA;EACX;EACA,YAAY;;EAEZ;;KAGW;EACX,SAAS;;;;;EAKT,cAAc;EACd,YAAY;EACZ,UAAU;;;;;;;wBA2EK,kBAAkB,MAAM,WAAW,WAAgB,OAAO,kBAAkB;;;;;;;;;;;;;;;;;KC1GhF;;EAEX;EACA,SAAS;EACT;;EAEA,QAAQ;;;;KCfG;EACX;EACA,SAAS;EACT,cAAc;EACd,aAAa;;;;;EAKb;IAAY;IAAc,SAAS;IAAe;;;;;;;;;;EASlD,OAAO;;;;;;wBAOQ,kBACf,aACA,QAAQ,gBACR,gBAAe,yBACb;qBAgCU,eAAe,MAAI;;;;;;;;;;;;;;;;;;KC7CpB;EACX;EACA,KAAK;;EAEL;;wBAgCe,cAAc,MAAM,KAAK,OAAO,qBAAqB;;;;;;;;;;;;;;;;KClDzD;KAEA;EACX,YAAY;EACZ;EACA;EACA,MAAM,SAAS;EACf;EACA,UAAU,SAAS;EACnB;EACA;EACA;EACA;;;cAIY;KAaD,mBAAmB;;;;KCnCnB;;;;qBCAC;;;qBCAA,aAAa,MAAI;qBAoDjB,gBAAgB,MAAI;wBAMjB,WAAW;EAAgB,WAAW,gBAAgB;;;;;;;;;KCV1D;;;KCpDA;EACX;EACA,YAAY;EACZ;EACA,QAAQ;;KAEG;EACX;EACA,WAAW;EACX,QAAQ;EACR,QAAQ;;EAER,SAAS;;EAET;IAAc,MAAM;IAAa,YAAY;;EAC7C;EACA;;wBAGe,sBACf,MACA,WAAW,WACX,MACA,SACE,oBAAoB"}
|