@aperant/framework 0.8.4 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +185 -0
- package/agents/apt-planner.md +34 -3
- package/dist/cli/commands/coverage-check.d.mts.map +1 -1
- package/dist/cli/commands/coverage-check.mjs +74 -7
- package/dist/cli/commands/coverage-check.mjs.map +1 -1
- package/dist/cli/commands/detect-runtime.d.mts.map +1 -1
- package/dist/cli/commands/detect-runtime.mjs +18 -12
- package/dist/cli/commands/detect-runtime.mjs.map +1 -1
- package/dist/cli/coverage-check/user-outcomes.d.mts +84 -0
- package/dist/cli/coverage-check/user-outcomes.d.mts.map +1 -0
- package/dist/cli/coverage-check/user-outcomes.mjs +265 -0
- package/dist/cli/coverage-check/user-outcomes.mjs.map +1 -0
- package/dist/cli/host/detect.mjs +1 -1
- package/dist/cli/host/detect.mjs.map +1 -1
- package/dist/cli/install/install-from-source.mjs +3 -3
- package/dist/cli/install/legacy-paths.d.mts.map +1 -1
- package/dist/cli/install/legacy-paths.mjs +2 -0
- package/dist/cli/install/legacy-paths.mjs.map +1 -1
- package/dist/cli/install/manifest.d.mts +13 -0
- package/dist/cli/install/manifest.d.mts.map +1 -1
- package/dist/cli/install/manifest.mjs +5 -0
- package/dist/cli/install/manifest.mjs.map +1 -1
- package/dist/cli/install/pipeline.d.mts +15 -0
- package/dist/cli/install/pipeline.d.mts.map +1 -1
- package/dist/cli/install/pipeline.mjs +27 -0
- package/dist/cli/install/pipeline.mjs.map +1 -1
- package/dist/cli/install/transforms/codex.d.mts +1 -1
- package/dist/cli/install/transforms/codex.d.mts.map +1 -1
- package/dist/cli/install/transforms/codex.mjs +43 -2
- package/dist/cli/install/transforms/codex.mjs.map +1 -1
- package/dist/cli/install/version-header.d.mts.map +1 -1
- package/dist/cli/install/version-header.mjs +7 -1
- package/dist/cli/install/version-header.mjs.map +1 -1
- package/dist/cli/verify-proof/idl/index.d.mts +1 -1
- package/dist/cli/verify-proof/idl/index.mjs +7 -8
- package/dist/cli/verify-proof/idl/index.mjs.map +1 -1
- package/dist/cli/verify-proof/idl/types.d.ts +5 -4
- package/dist/cli/verify-proof/idl/types.d.ts.map +1 -1
- package/dist/cli/verify-proof/idl/types.js +4 -3
- package/dist/cli/verify-proof/idl/types.js.map +1 -1
- package/dist/cli/verify-proof/resolver.d.mts +63 -1
- package/dist/cli/verify-proof/resolver.d.mts.map +1 -1
- package/dist/cli/verify-proof/resolver.mjs +164 -4
- package/dist/cli/verify-proof/resolver.mjs.map +1 -1
- package/dist/cli/verify-proof/runtime-detect.d.mts +6 -3
- package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -1
- package/dist/cli/verify-proof/runtime-detect.mjs +104 -11
- package/dist/cli/verify-proof/runtime-detect.mjs.map +1 -1
- package/dist/cli/verify-proof/trust.d.mts +1 -1
- package/dist/cli/verify-proof/trust.d.mts.map +1 -1
- package/dist/cli/verify-proof/trust.mjs +1 -1
- package/dist/driver-sdk/conformance.d.ts +41 -0
- package/dist/driver-sdk/conformance.d.ts.map +1 -0
- package/dist/driver-sdk/conformance.js +123 -0
- package/dist/driver-sdk/conformance.js.map +1 -0
- package/dist/driver-sdk/errors.d.ts +75 -0
- package/dist/driver-sdk/errors.d.ts.map +1 -0
- package/dist/driver-sdk/errors.js +80 -0
- package/dist/driver-sdk/errors.js.map +1 -0
- package/dist/driver-sdk/idl.d.ts +221 -0
- package/dist/driver-sdk/idl.d.ts.map +1 -0
- package/dist/driver-sdk/idl.js +140 -0
- package/dist/driver-sdk/idl.js.map +1 -0
- package/dist/driver-sdk/index.d.ts +28 -0
- package/dist/driver-sdk/index.d.ts.map +1 -0
- package/dist/driver-sdk/index.js +28 -0
- package/dist/driver-sdk/index.js.map +1 -0
- package/dist/driver-sdk/manifest.d.ts +93 -0
- package/dist/driver-sdk/manifest.d.ts.map +1 -0
- package/dist/driver-sdk/manifest.js +12 -0
- package/dist/driver-sdk/manifest.js.map +1 -0
- package/dist/driver-sdk/retry.d.ts +33 -0
- package/dist/driver-sdk/retry.d.ts.map +1 -0
- package/dist/driver-sdk/retry.js +50 -0
- package/dist/driver-sdk/retry.js.map +1 -0
- package/dist/plugin/.claude-plugin/plugin.json +2 -1
- package/dist/plugin/agents/apt-planner.md +34 -3
- package/dist/plugin/skills/apt-plan/SKILL.md +50 -0
- package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -1
- package/dist/plugin/skills/apt-research/SKILL.md +526 -0
- package/dist/plugin/skills/apt-research/appendices/budget-loop.md +397 -0
- package/dist/plugin/skills/apt-research/appendices/claim-graph-schema.md +206 -0
- package/dist/plugin/skills/apt-research/appendices/domain-tools.md +236 -0
- package/dist/plugin/skills/apt-spar/SKILL.md +19 -7
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +41 -2
- package/dist/schemas/quick-task.d.ts +17 -17
- package/drivers/.gitkeep +0 -0
- package/drivers/api/README.md +40 -0
- package/drivers/api/driver.mjs +59 -0
- package/drivers/api/manifest.json +26 -0
- package/drivers/browser/README.md +105 -0
- package/drivers/browser/driver.mjs +134 -0
- package/drivers/browser/manifest.json +35 -0
- package/drivers/cli/README.md +44 -0
- package/drivers/cli/driver.mjs +62 -0
- package/drivers/cli/manifest.json +28 -0
- package/drivers/electron/README.md +64 -0
- package/drivers/electron/driver.mjs +87 -0
- package/drivers/electron/manifest.json +37 -0
- package/package.json +7 -3
- package/skills/apt-plan/SKILL.md +50 -0
- package/skills/apt-planner.md +16 -0
- package/skills/apt-pr-review/SKILL.md +1 -1
- package/skills/apt-research/SKILL.md +526 -0
- package/skills/apt-research/appendices/budget-loop.md +397 -0
- package/skills/apt-research/appendices/claim-graph-schema.md +206 -0
- package/skills/apt-research/appendices/domain-tools.md +236 -0
- package/skills/apt-spar/SKILL.md +19 -7
- package/skills/apt-verify-proof/SKILL.md +41 -2
- package/src/cli/commands/coverage-check.mjs +126 -44
- package/src/cli/commands/detect-runtime.mjs +23 -14
- package/src/cli/coverage-check/user-outcomes.mjs +273 -0
- package/src/cli/host/detect.mjs +1 -1
- package/src/cli/install/install-from-source.mjs +3 -3
- package/src/cli/install/legacy-paths.mjs +2 -0
- package/src/cli/install/manifest.mjs +5 -0
- package/src/cli/install/pipeline.mjs +28 -0
- package/src/cli/install/transforms/codex.mjs +51 -2
- package/src/cli/install/version-header.mjs +7 -1
- package/src/cli/verify-proof/idl/index.mjs +7 -8
- package/src/cli/verify-proof/idl/types.ts +5 -4
- package/src/cli/verify-proof/manifest-schema.json +2 -1
- package/src/cli/verify-proof/resolver.mjs +171 -4
- package/src/cli/verify-proof/runtime-detect.mjs +99 -10
- package/src/cli/verify-proof/trust.mjs +1 -1
- package/templates/proof-verification.md +32 -3
- package/workflows/verify-proof.md +78 -9
|
@@ -8,8 +8,16 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Pattern: pure data in → pure data out. No filesystem walking, no exec.
|
|
10
10
|
* Use loadRuntimeCapabilities(projectDir) for the cwd-rooted variant.
|
|
11
|
+
*
|
|
12
|
+
* v0.8.6 — `loadRuntimeCapabilities` now ALSO walks `apps/*` by default
|
|
13
|
+
* (configurable via the second arg `{monorepo_globs}`) and OR-merges
|
|
14
|
+
* each match's `package.json` capabilities with the root. The default
|
|
15
|
+
* `['apps/*']` matches the canonical Aperant monorepo layout; adopters
|
|
16
|
+
* whose monorepo lives elsewhere (e.g. `packages/apps/*`) pass a
|
|
17
|
+
* custom `monorepo_globs`. Setting `monorepo_globs: []` disables the
|
|
18
|
+
* walk entirely (root-only escape hatch).
|
|
11
19
|
*/
|
|
12
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
20
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
13
21
|
import { join, resolve } from 'node:path';
|
|
14
22
|
/**
|
|
15
23
|
* @typedef {Object} RuntimeCapabilities
|
|
@@ -94,23 +102,108 @@ export function detectFromPackageJson(packageJson) {
|
|
|
94
102
|
}
|
|
95
103
|
/**
|
|
96
104
|
* Load and detect capabilities from a project directory's package.json.
|
|
97
|
-
*
|
|
98
|
-
*
|
|
105
|
+
* v0.8.6 — also walks `monorepo_globs` (default `['apps/*']`) and
|
|
106
|
+
* OR-merges each match's capabilities with the root.
|
|
99
107
|
*
|
|
100
108
|
* @param {string} projectDir
|
|
109
|
+
* @param {{monorepo_globs?: string[]}} [opts]
|
|
101
110
|
* @returns {RuntimeCapabilities}
|
|
102
111
|
*/
|
|
103
|
-
export function loadRuntimeCapabilities(projectDir) {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
export function loadRuntimeCapabilities(projectDir, opts) {
|
|
113
|
+
const root = resolve(projectDir);
|
|
114
|
+
const rootPkgPath = join(root, 'package.json');
|
|
115
|
+
let rootCaps = emptyCapabilities();
|
|
116
|
+
if (existsSync(rootPkgPath)) {
|
|
117
|
+
try {
|
|
118
|
+
rootCaps = detectFromPackageJson(JSON.parse(readFileSync(rootPkgPath, 'utf-8')));
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
/* fall through with empty caps */
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Default to the canonical Aperant monorepo layout. Passing `[]`
|
|
125
|
+
// disables the walk entirely (root-only escape hatch per spec ID-05).
|
|
126
|
+
const globs = opts && Array.isArray(opts.monorepo_globs) ? opts.monorepo_globs : ['apps/*'];
|
|
127
|
+
if (globs.length === 0)
|
|
128
|
+
return rootCaps;
|
|
129
|
+
let merged = rootCaps;
|
|
130
|
+
for (const glob of globs) {
|
|
131
|
+
const matches = expandSimpleGlob(root, glob);
|
|
132
|
+
for (const dir of matches) {
|
|
133
|
+
const childPkgPath = join(dir, 'package.json');
|
|
134
|
+
if (!existsSync(childPkgPath))
|
|
135
|
+
continue;
|
|
136
|
+
try {
|
|
137
|
+
const childCaps = detectFromPackageJson(JSON.parse(readFileSync(childPkgPath, 'utf-8')));
|
|
138
|
+
merged = orMergeCapabilities(merged, childCaps);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
/* skip malformed package.json */
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return merged;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Expand a simple `prefix/*` glob against the root. Supports ONLY the
|
|
149
|
+
* `<dir>/*` shape (matches each direct subdirectory of `<dir>`). Other
|
|
150
|
+
* glob syntax is intentionally rejected — v1 keeps the dep surface
|
|
151
|
+
* small. Fails closed on malformed patterns (returns []).
|
|
152
|
+
*
|
|
153
|
+
* @param {string} root
|
|
154
|
+
* @param {string} glob
|
|
155
|
+
* @returns {string[]}
|
|
156
|
+
*/
|
|
157
|
+
function expandSimpleGlob(root, glob) {
|
|
158
|
+
if (typeof glob !== 'string' || !glob.endsWith('/*'))
|
|
159
|
+
return [];
|
|
160
|
+
const prefix = glob.slice(0, -2);
|
|
161
|
+
if (prefix.length === 0 || prefix.includes('*'))
|
|
162
|
+
return [];
|
|
163
|
+
const dir = join(root, prefix);
|
|
164
|
+
if (!existsSync(dir))
|
|
165
|
+
return [];
|
|
166
|
+
let entries;
|
|
108
167
|
try {
|
|
109
|
-
|
|
168
|
+
entries = readdirSync(dir);
|
|
110
169
|
}
|
|
111
170
|
catch {
|
|
112
|
-
return
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
const matches = [];
|
|
174
|
+
for (const name of entries) {
|
|
175
|
+
const sub = join(dir, name);
|
|
176
|
+
try {
|
|
177
|
+
if (statSync(sub).isDirectory())
|
|
178
|
+
matches.push(sub);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
/* skip unreadable entries */
|
|
182
|
+
}
|
|
113
183
|
}
|
|
114
|
-
return
|
|
184
|
+
return matches;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Boolean OR-merge of two capability records. Any flag true in either
|
|
188
|
+
* input is true in the output. The "Electron wins over web" rule from
|
|
189
|
+
* `detectFromPackageJson` is preserved when this is called repeatedly —
|
|
190
|
+
* each child's flags are honest about that child's own shape, and the
|
|
191
|
+
* OR-merge just unions them.
|
|
192
|
+
*
|
|
193
|
+
* @param {RuntimeCapabilities} a
|
|
194
|
+
* @param {RuntimeCapabilities} b
|
|
195
|
+
* @returns {RuntimeCapabilities}
|
|
196
|
+
*/
|
|
197
|
+
function orMergeCapabilities(a, b) {
|
|
198
|
+
return {
|
|
199
|
+
is_electron: a.is_electron || b.is_electron,
|
|
200
|
+
is_tauri: a.is_tauri || b.is_tauri,
|
|
201
|
+
is_nextjs: a.is_nextjs || b.is_nextjs,
|
|
202
|
+
is_nuxt: a.is_nuxt || b.is_nuxt,
|
|
203
|
+
is_web_frontend: a.is_web_frontend || b.is_web_frontend,
|
|
204
|
+
is_expo: a.is_expo || b.is_expo,
|
|
205
|
+
is_react_native: a.is_react_native || b.is_react_native,
|
|
206
|
+
has_node: a.has_node || b.has_node,
|
|
207
|
+
};
|
|
115
208
|
}
|
|
116
209
|
//# sourceMappingURL=runtime-detect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-detect.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/runtime-detect.mjs"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime-detect.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/runtime-detect.mjs"],"names":[],"mappings":"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"}
|
|
@@ -66,5 +66,5 @@ export function decide(manifest: DriverManifest, tofu: ReturnType<typeof readTof
|
|
|
66
66
|
* @param {DriverManifest} manifest
|
|
67
67
|
*/
|
|
68
68
|
export function recordApproval(projectDir: string, manifest: DriverManifest): void;
|
|
69
|
-
export type DriverManifest = import("@aperant/driver-sdk").DriverManifest;
|
|
69
|
+
export type DriverManifest = import("@aperant/framework/driver-sdk").DriverManifest;
|
|
70
70
|
//# sourceMappingURL=trust.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/trust.mjs"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,yCAHW,cAAc,GACZ,MAAM,CAKlB;AAED;;;;GAIG;AACH,yCAHW,MAAM,GACJ,MAAM,CAAC,MAAM,EAAE;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC,CAUxH;AAED;;;;;;;;GAQG;AACH,0CAHW,MAAM,QACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAMjC;AAED;;;;;;;GAOG;AACH,kCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;GAIG;AACH,uCAHW,MAAM,GACJ;IAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CAgBzF;AAED;;;;;;;GAOG;AACH,iCALW,cAAc,QACd,UAAU,CAAC,OAAO,YAAY,CAAC,UAC/B,UAAU,CAAC,OAAO,UAAU,CAAC,GAC3B;IAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAAC,CAwDjH;AAED;;;;;;;GAOG;AACH,2CAHW,MAAM,YACN,cAAc,QAYxB;6BAjKY,OAAO,
|
|
1
|
+
{"version":3,"file":"trust.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/trust.mjs"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,yCAHW,cAAc,GACZ,MAAM,CAKlB;AAED;;;;GAIG;AACH,yCAHW,MAAM,GACJ,MAAM,CAAC,MAAM,EAAE;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC,CAUxH;AAED;;;;;;;;GAQG;AACH,0CAHW,MAAM,QACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAMjC;AAED;;;;;;;GAOG;AACH,kCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;GAIG;AACH,uCAHW,MAAM,GACJ;IAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CAgBzF;AAED;;;;;;;GAOG;AACH,iCALW,cAAc,QACd,UAAU,CAAC,OAAO,YAAY,CAAC,UAC/B,UAAU,CAAC,OAAO,UAAU,CAAC,GAC3B;IAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAAC,CAwDjH;AAED;;;;;;;GAOG;AACH,2CAHW,MAAM,YACN,cAAc,QAYxB;6BAjKY,OAAO,+BAA+B,EAAE,cAAc"}
|
|
@@ -21,7 +21,7 @@ import { createHash } from 'node:crypto';
|
|
|
21
21
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
22
22
|
import { dirname, join, resolve } from 'node:path';
|
|
23
23
|
/**
|
|
24
|
-
* @typedef {import('@aperant/driver-sdk').DriverManifest} DriverManifest
|
|
24
|
+
* @typedef {import('@aperant/framework/driver-sdk').DriverManifest} DriverManifest
|
|
25
25
|
*/
|
|
26
26
|
const TOFU_PATH = '.aperant/driver-tofu.json';
|
|
27
27
|
const POLICY_PATH = '.aperant/policy.json';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conformance.ts — shared conformance kit for driver authors + bundled drivers.
|
|
3
|
+
*
|
|
4
|
+
* `runConformanceKit({ manifest, driverModule })` returns a structured pass/fail
|
|
5
|
+
* report. Used by the four bundled drivers' tests (ST07–ST09). Re-exposed
|
|
6
|
+
* via the driver-sdk public surface for re-extraction readiness — see
|
|
7
|
+
* driver-sdk/index.ts header.
|
|
8
|
+
*
|
|
9
|
+
* Checks:
|
|
10
|
+
* 1. Every declared capability in manifest.capabilities[] has a matching
|
|
11
|
+
* function export on driverModule.
|
|
12
|
+
* 2. Every function export returns a VerbResult-shaped object when invoked
|
|
13
|
+
* with a dummy arg (status, evidence_paths, duration_ms, retry_count).
|
|
14
|
+
* 3. The manifest's transport field is structured (not a raw string).
|
|
15
|
+
* 4. The manifest's trust.tier is one of the four allowed values.
|
|
16
|
+
*/
|
|
17
|
+
import type { DriverModule } from './idl.js';
|
|
18
|
+
import type { DriverManifest } from './manifest.js';
|
|
19
|
+
export interface ConformanceCheck {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly description: string;
|
|
22
|
+
readonly status: 'pass' | 'fail';
|
|
23
|
+
readonly detail?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ConformanceReport {
|
|
26
|
+
readonly driver_id: string;
|
|
27
|
+
readonly version: string;
|
|
28
|
+
readonly overall: 'pass' | 'fail';
|
|
29
|
+
readonly checks: readonly ConformanceCheck[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run the conformance kit against a driver. Pass `dummyArgs` to control the
|
|
33
|
+
* fixture invocation; default is an empty object (most drivers ignore args
|
|
34
|
+
* in conformance mode and return a stub VerbResult).
|
|
35
|
+
*/
|
|
36
|
+
export declare function runConformanceKit(opts: {
|
|
37
|
+
manifest: DriverManifest;
|
|
38
|
+
driverModule: DriverModule;
|
|
39
|
+
dummyArgs?: Record<string, unknown>;
|
|
40
|
+
}): Promise<ConformanceReport>;
|
|
41
|
+
//# sourceMappingURL=conformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../src/driver-sdk/conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC5C;AA2BD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,cAAc,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8E7B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conformance.ts — shared conformance kit for driver authors + bundled drivers.
|
|
3
|
+
*
|
|
4
|
+
* `runConformanceKit({ manifest, driverModule })` returns a structured pass/fail
|
|
5
|
+
* report. Used by the four bundled drivers' tests (ST07–ST09). Re-exposed
|
|
6
|
+
* via the driver-sdk public surface for re-extraction readiness — see
|
|
7
|
+
* driver-sdk/index.ts header.
|
|
8
|
+
*
|
|
9
|
+
* Checks:
|
|
10
|
+
* 1. Every declared capability in manifest.capabilities[] has a matching
|
|
11
|
+
* function export on driverModule.
|
|
12
|
+
* 2. Every function export returns a VerbResult-shaped object when invoked
|
|
13
|
+
* with a dummy arg (status, evidence_paths, duration_ms, retry_count).
|
|
14
|
+
* 3. The manifest's transport field is structured (not a raw string).
|
|
15
|
+
* 4. The manifest's trust.tier is one of the four allowed values.
|
|
16
|
+
*/
|
|
17
|
+
import { isVerbResult } from './idl.js';
|
|
18
|
+
const ALLOWED_TRUST_TIERS = new Set([
|
|
19
|
+
'first_party_signed',
|
|
20
|
+
'community_verified',
|
|
21
|
+
'community_unverified',
|
|
22
|
+
'local_unverified',
|
|
23
|
+
]);
|
|
24
|
+
function isStructuredTransport(t) {
|
|
25
|
+
if (t === null || typeof t !== 'object' || Array.isArray(t))
|
|
26
|
+
return false;
|
|
27
|
+
const obj = t;
|
|
28
|
+
if (typeof obj.mcp_server_id === 'string')
|
|
29
|
+
return true;
|
|
30
|
+
if (typeof obj.http_endpoint === 'string')
|
|
31
|
+
return true;
|
|
32
|
+
if (typeof obj.npm_package === 'string')
|
|
33
|
+
return true;
|
|
34
|
+
if (obj.builtin === true)
|
|
35
|
+
return true;
|
|
36
|
+
if (obj.local_command !== null &&
|
|
37
|
+
typeof obj.local_command === 'object' &&
|
|
38
|
+
!Array.isArray(obj.local_command)) {
|
|
39
|
+
const lc = obj.local_command;
|
|
40
|
+
return typeof lc.binary === 'string' && Array.isArray(lc.args);
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Run the conformance kit against a driver. Pass `dummyArgs` to control the
|
|
46
|
+
* fixture invocation; default is an empty object (most drivers ignore args
|
|
47
|
+
* in conformance mode and return a stub VerbResult).
|
|
48
|
+
*/
|
|
49
|
+
export async function runConformanceKit(opts) {
|
|
50
|
+
const { manifest, driverModule } = opts;
|
|
51
|
+
const dummyArgs = opts.dummyArgs ?? { target: { kind: 'css', value: '#stub' } };
|
|
52
|
+
const checks = [];
|
|
53
|
+
// Check 1: structured transport
|
|
54
|
+
checks.push({
|
|
55
|
+
id: 'transport-structured',
|
|
56
|
+
description: 'manifest.transport must be a structured oneOf, never a raw string',
|
|
57
|
+
status: isStructuredTransport(manifest.transport) ? 'pass' : 'fail',
|
|
58
|
+
detail: isStructuredTransport(manifest.transport)
|
|
59
|
+
? undefined
|
|
60
|
+
: `transport is not a structured variant: ${JSON.stringify(manifest.transport)}`,
|
|
61
|
+
});
|
|
62
|
+
// Check 2: trust tier is one of the four allowed
|
|
63
|
+
checks.push({
|
|
64
|
+
id: 'trust-tier-allowed',
|
|
65
|
+
description: 'manifest.trust.tier must be one of the four allowed values',
|
|
66
|
+
status: ALLOWED_TRUST_TIERS.has(manifest.trust?.tier) ? 'pass' : 'fail',
|
|
67
|
+
detail: ALLOWED_TRUST_TIERS.has(manifest.trust?.tier)
|
|
68
|
+
? undefined
|
|
69
|
+
: `trust.tier="${manifest.trust?.tier}" not in ${[...ALLOWED_TRUST_TIERS].join(', ')}`,
|
|
70
|
+
});
|
|
71
|
+
// Check 3: capabilities length >= 5
|
|
72
|
+
checks.push({
|
|
73
|
+
id: 'capabilities-min-five',
|
|
74
|
+
description: 'manifest.capabilities must declare at least 5 IDL verbs',
|
|
75
|
+
status: manifest.capabilities.length >= 5 ? 'pass' : 'fail',
|
|
76
|
+
detail: manifest.capabilities.length >= 5
|
|
77
|
+
? undefined
|
|
78
|
+
: `only ${manifest.capabilities.length} capabilities declared`,
|
|
79
|
+
});
|
|
80
|
+
// Check 4: every declared capability has a function export
|
|
81
|
+
for (const cap of manifest.capabilities) {
|
|
82
|
+
const fn = driverModule[cap];
|
|
83
|
+
const ok = typeof fn === 'function';
|
|
84
|
+
checks.push({
|
|
85
|
+
id: `capability-export-${cap}`,
|
|
86
|
+
description: `manifest.capabilities[${cap}] has a matching function export`,
|
|
87
|
+
status: ok ? 'pass' : 'fail',
|
|
88
|
+
detail: ok ? undefined : `driverModule.${cap} is not a function`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Check 5: every declared capability returns a VerbResult shape
|
|
92
|
+
for (const cap of manifest.capabilities) {
|
|
93
|
+
const fn = driverModule[cap];
|
|
94
|
+
if (typeof fn !== 'function')
|
|
95
|
+
continue; // already failed Check 4
|
|
96
|
+
try {
|
|
97
|
+
const result = await fn(dummyArgs);
|
|
98
|
+
const ok = isVerbResult(result);
|
|
99
|
+
checks.push({
|
|
100
|
+
id: `capability-shape-${cap}`,
|
|
101
|
+
description: `driver.${cap}() returns a VerbResult shape`,
|
|
102
|
+
status: ok ? 'pass' : 'fail',
|
|
103
|
+
detail: ok ? undefined : `return shape: ${JSON.stringify(result)}`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
checks.push({
|
|
108
|
+
id: `capability-shape-${cap}`,
|
|
109
|
+
description: `driver.${cap}() returns a VerbResult shape`,
|
|
110
|
+
status: 'fail',
|
|
111
|
+
detail: `threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const overall = checks.every((c) => c.status === 'pass') ? 'pass' : 'fail';
|
|
116
|
+
return {
|
|
117
|
+
driver_id: manifest.driverId,
|
|
118
|
+
version: manifest.version,
|
|
119
|
+
overall,
|
|
120
|
+
checks,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../src/driver-sdk/conformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* errors.ts — error taxonomy for @aperant/driver-sdk.
|
|
3
|
+
*
|
|
4
|
+
* Every driver-layer failure raises one of these classes. The taxonomy
|
|
5
|
+
* is load-bearing for the resolver + audit log + verification.json's
|
|
6
|
+
* `meta.fallback_attempts[].reason` field.
|
|
7
|
+
*
|
|
8
|
+
* Conventions:
|
|
9
|
+
* - Every class sets `.name` to its class identifier so structured
|
|
10
|
+
* audit lines can serialize the discriminator without `instanceof`
|
|
11
|
+
* gymnastics in cross-realm contexts.
|
|
12
|
+
* - Every class extends Error so plain Node consumers can match with
|
|
13
|
+
* try/catch.
|
|
14
|
+
*/
|
|
15
|
+
/** A driver manifest violates the structural contract (JSON-Schema). */
|
|
16
|
+
export declare class DriverManifestSchemaError extends Error {
|
|
17
|
+
readonly name = "DriverManifestSchemaError";
|
|
18
|
+
/** JSON-pointer paths into the manifest where validation failed. */
|
|
19
|
+
readonly errors: ReadonlyArray<{
|
|
20
|
+
path: string;
|
|
21
|
+
message: string;
|
|
22
|
+
}>;
|
|
23
|
+
constructor(message: string, errors?: ReadonlyArray<{
|
|
24
|
+
path: string;
|
|
25
|
+
message: string;
|
|
26
|
+
}>);
|
|
27
|
+
}
|
|
28
|
+
/** A driver's runtime configuration is invalid (missing env, malformed args). */
|
|
29
|
+
export declare class DriverConfigError extends Error {
|
|
30
|
+
readonly name = "DriverConfigError";
|
|
31
|
+
}
|
|
32
|
+
/** A driver's preflight check failed (missing binary, unreachable service). */
|
|
33
|
+
export declare class DriverPreflightError extends Error {
|
|
34
|
+
readonly name = "DriverPreflightError";
|
|
35
|
+
/** Structured list of unsatisfied preflight requirements. */
|
|
36
|
+
readonly missing: readonly string[];
|
|
37
|
+
constructor(message: string, missing?: readonly string[]);
|
|
38
|
+
}
|
|
39
|
+
/** A driver verb invocation failed at the transport / RPC layer. */
|
|
40
|
+
export declare class DriverInvocationError extends Error {
|
|
41
|
+
readonly name = "DriverInvocationError";
|
|
42
|
+
/** The IDL verb name that was being invoked. */
|
|
43
|
+
readonly verb: string | undefined;
|
|
44
|
+
constructor(message: string, verb?: string);
|
|
45
|
+
}
|
|
46
|
+
/** A driver succeeded but evidence capture (screenshot, dom_dump) failed. */
|
|
47
|
+
export declare class DriverEvidenceCaptureError extends Error {
|
|
48
|
+
readonly name = "DriverEvidenceCaptureError";
|
|
49
|
+
}
|
|
50
|
+
/** A non-first-party driver invocation is blocked by TOFU + policy. */
|
|
51
|
+
export declare class DriverNotApprovedError extends Error {
|
|
52
|
+
readonly name = "DriverNotApprovedError";
|
|
53
|
+
readonly driverId: string | undefined;
|
|
54
|
+
readonly trustTier: string | undefined;
|
|
55
|
+
constructor(message: string, driverId?: string, trustTier?: string);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The resolver exhausted its driver chain without satisfying a REQUIRED
|
|
59
|
+
* capability. Fail-closed — verdict logic must NOT silently turn this
|
|
60
|
+
* into a `blocked_by_platform` skip (ID-02).
|
|
61
|
+
*/
|
|
62
|
+
export declare class UnsatisfiedRequiredCapabilityError extends Error {
|
|
63
|
+
readonly name = "UnsatisfiedRequiredCapabilityError";
|
|
64
|
+
readonly capability: string | undefined;
|
|
65
|
+
/** Drivers attempted, with the reason each was rejected. */
|
|
66
|
+
readonly attempts: ReadonlyArray<{
|
|
67
|
+
driver_id: string;
|
|
68
|
+
reason: string;
|
|
69
|
+
}>;
|
|
70
|
+
constructor(message: string, capability?: string, attempts?: ReadonlyArray<{
|
|
71
|
+
driver_id: string;
|
|
72
|
+
reason: string;
|
|
73
|
+
}>);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/driver-sdk/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IACnD,SAAkB,IAAI,+BAA8B;IACpD,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;gBACrD,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM;CAI1F;AAED,iFAAiF;AACjF,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,uBAAsB;CAC5C;AAED,+EAA+E;AAC/E,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,0BAAyB;IAC/C,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;gBACvB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO;CAI5D;AAED,oEAAoE;AACpE,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,SAAkB,IAAI,2BAA0B;IAChD,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;gBACrB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAI1C;AAED,6EAA6E;AAC7E,qBAAa,0BAA2B,SAAQ,KAAK;IACpD,SAAkB,IAAI,gCAA+B;CACrD;AAED,uEAAuE;AACvE,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,SAAkB,IAAI,4BAA2B;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;gBAC1B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAKlE;AAED;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,KAAK;IAC5D,SAAkB,IAAI,wCAAuC;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;gBAEtE,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,GAAE,aAAa,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAM;CAMpE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* errors.ts — error taxonomy for @aperant/driver-sdk.
|
|
3
|
+
*
|
|
4
|
+
* Every driver-layer failure raises one of these classes. The taxonomy
|
|
5
|
+
* is load-bearing for the resolver + audit log + verification.json's
|
|
6
|
+
* `meta.fallback_attempts[].reason` field.
|
|
7
|
+
*
|
|
8
|
+
* Conventions:
|
|
9
|
+
* - Every class sets `.name` to its class identifier so structured
|
|
10
|
+
* audit lines can serialize the discriminator without `instanceof`
|
|
11
|
+
* gymnastics in cross-realm contexts.
|
|
12
|
+
* - Every class extends Error so plain Node consumers can match with
|
|
13
|
+
* try/catch.
|
|
14
|
+
*/
|
|
15
|
+
/** A driver manifest violates the structural contract (JSON-Schema). */
|
|
16
|
+
export class DriverManifestSchemaError extends Error {
|
|
17
|
+
name = 'DriverManifestSchemaError';
|
|
18
|
+
/** JSON-pointer paths into the manifest where validation failed. */
|
|
19
|
+
errors;
|
|
20
|
+
constructor(message, errors = []) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.errors = errors;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** A driver's runtime configuration is invalid (missing env, malformed args). */
|
|
26
|
+
export class DriverConfigError extends Error {
|
|
27
|
+
name = 'DriverConfigError';
|
|
28
|
+
}
|
|
29
|
+
/** A driver's preflight check failed (missing binary, unreachable service). */
|
|
30
|
+
export class DriverPreflightError extends Error {
|
|
31
|
+
name = 'DriverPreflightError';
|
|
32
|
+
/** Structured list of unsatisfied preflight requirements. */
|
|
33
|
+
missing;
|
|
34
|
+
constructor(message, missing = []) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.missing = missing;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** A driver verb invocation failed at the transport / RPC layer. */
|
|
40
|
+
export class DriverInvocationError extends Error {
|
|
41
|
+
name = 'DriverInvocationError';
|
|
42
|
+
/** The IDL verb name that was being invoked. */
|
|
43
|
+
verb;
|
|
44
|
+
constructor(message, verb) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.verb = verb;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** A driver succeeded but evidence capture (screenshot, dom_dump) failed. */
|
|
50
|
+
export class DriverEvidenceCaptureError extends Error {
|
|
51
|
+
name = 'DriverEvidenceCaptureError';
|
|
52
|
+
}
|
|
53
|
+
/** A non-first-party driver invocation is blocked by TOFU + policy. */
|
|
54
|
+
export class DriverNotApprovedError extends Error {
|
|
55
|
+
name = 'DriverNotApprovedError';
|
|
56
|
+
driverId;
|
|
57
|
+
trustTier;
|
|
58
|
+
constructor(message, driverId, trustTier) {
|
|
59
|
+
super(message);
|
|
60
|
+
this.driverId = driverId;
|
|
61
|
+
this.trustTier = trustTier;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The resolver exhausted its driver chain without satisfying a REQUIRED
|
|
66
|
+
* capability. Fail-closed — verdict logic must NOT silently turn this
|
|
67
|
+
* into a `blocked_by_platform` skip (ID-02).
|
|
68
|
+
*/
|
|
69
|
+
export class UnsatisfiedRequiredCapabilityError extends Error {
|
|
70
|
+
name = 'UnsatisfiedRequiredCapabilityError';
|
|
71
|
+
capability;
|
|
72
|
+
/** Drivers attempted, with the reason each was rejected. */
|
|
73
|
+
attempts;
|
|
74
|
+
constructor(message, capability, attempts = []) {
|
|
75
|
+
super(message);
|
|
76
|
+
this.capability = capability;
|
|
77
|
+
this.attempts = attempts;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/driver-sdk/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,wEAAwE;AACxE,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACjC,IAAI,GAAG,2BAA2B,CAAA;IACpD,oEAAoE;IAC3D,MAAM,CAAkD;IACjE,YAAY,OAAe,EAAE,SAA2D,EAAE;QACzF,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACrB,CAAC;CACD;AAED,iFAAiF;AACjF,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACzB,IAAI,GAAG,mBAAmB,CAAA;CAC5C;AAED,+EAA+E;AAC/E,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC5B,IAAI,GAAG,sBAAsB,CAAA;IAC/C,6DAA6D;IACpD,OAAO,CAAmB;IACnC,YAAY,OAAe,EAAE,UAA6B,EAAE;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD;AAED,oEAAoE;AACpE,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC7B,IAAI,GAAG,uBAAuB,CAAA;IAChD,gDAAgD;IACvC,IAAI,CAAoB;IACjC,YAAY,OAAe,EAAE,IAAa;QACzC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,CAAC;CACD;AAED,6EAA6E;AAC7E,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAClC,IAAI,GAAG,4BAA4B,CAAA;CACrD;AAED,uEAAuE;AACvE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC9B,IAAI,GAAG,wBAAwB,CAAA;IACxC,QAAQ,CAAoB;IAC5B,SAAS,CAAoB;IACtC,YAAY,OAAe,EAAE,QAAiB,EAAE,SAAkB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC3B,CAAC;CACD;AAED;;;;GAIG;AACH,MAAM,OAAO,kCAAmC,SAAQ,KAAK;IAC1C,IAAI,GAAG,oCAAoC,CAAA;IACpD,UAAU,CAAoB;IACvC,4DAA4D;IACnD,QAAQ,CAAsD;IACvE,YACC,OAAe,EACf,UAAmB,EACnB,WAAiE,EAAE;QAEnE,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACzB,CAAC;CACD"}
|