@aperant/framework 0.8.1 → 0.8.6
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 +443 -1
- package/agents/apt-planner.md +39 -7
- package/dist/cli/commands/adr.mjs +1 -1
- package/dist/cli/commands/audit-branch-current.d.mts +25 -0
- package/dist/cli/commands/audit-branch-current.d.mts.map +1 -0
- package/dist/cli/commands/audit-branch-current.mjs +252 -0
- package/dist/cli/commands/audit-branch-current.mjs.map +1 -0
- package/dist/cli/commands/audit.d.mts.map +1 -1
- package/dist/cli/commands/audit.mjs +13 -2
- package/dist/cli/commands/audit.mjs.map +1 -1
- package/dist/cli/commands/check-version.d.mts.map +1 -1
- package/dist/cli/commands/check-version.mjs +19 -1
- package/dist/cli/commands/check-version.mjs.map +1 -1
- package/dist/cli/commands/context.mjs +3 -3
- package/dist/cli/commands/context.mjs.map +1 -1
- 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 +6 -0
- package/dist/cli/commands/detect-runtime.d.mts.map +1 -0
- package/dist/cli/commands/detect-runtime.mjs +142 -0
- package/dist/cli/commands/detect-runtime.mjs.map +1 -0
- package/dist/cli/commands/driver-doctor.d.mts +29 -0
- package/dist/cli/commands/driver-doctor.d.mts.map +1 -0
- package/dist/cli/commands/driver-doctor.mjs +291 -0
- package/dist/cli/commands/driver-doctor.mjs.map +1 -0
- package/dist/cli/commands/gate.mjs +14 -0
- package/dist/cli/commands/gate.mjs.map +1 -1
- package/dist/cli/commands/init.d.mts.map +1 -1
- package/dist/cli/commands/init.mjs +9 -6
- package/dist/cli/commands/init.mjs.map +1 -1
- package/dist/cli/commands/install-from-source.d.mts +2 -0
- package/dist/cli/commands/install-from-source.d.mts.map +1 -0
- package/dist/cli/commands/install-from-source.mjs +2 -0
- package/dist/cli/commands/install-from-source.mjs.map +1 -0
- package/dist/cli/commands/modes.mjs +1 -1
- package/dist/cli/commands/route.d.mts.map +1 -1
- package/dist/cli/commands/route.mjs +38 -1
- package/dist/cli/commands/route.mjs.map +1 -1
- package/dist/cli/commands/triage.mjs +1 -1
- package/dist/cli/config/load.d.mts.map +1 -1
- package/dist/cli/config/load.mjs +9 -3
- package/dist/cli/config/load.mjs.map +1 -1
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
- package/dist/cli/coordination/event-schema.d.mts.map +1 -1
- package/dist/cli/coordination/event-schema.mjs +18 -0
- package/dist/cli/coordination/event-schema.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/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +18 -1
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/gate/context.d.mts +1 -0
- package/dist/cli/gate/context.d.mts.map +1 -1
- package/dist/cli/gate/context.mjs +14 -1
- package/dist/cli/gate/context.mjs.map +1 -1
- package/dist/cli/gate/gates/consistency-check.d.mts +1 -0
- package/dist/cli/gate/gates/consistency-check.d.mts.map +1 -1
- package/dist/cli/gate/gates/consistency-check.mjs +1 -0
- package/dist/cli/gate/gates/consistency-check.mjs.map +1 -1
- package/dist/cli/gate/gates/review-clean.d.mts +1 -0
- package/dist/cli/gate/gates/review-clean.d.mts.map +1 -1
- package/dist/cli/gate/gates/review-clean.mjs +1 -0
- package/dist/cli/gate/gates/review-clean.mjs.map +1 -1
- package/dist/cli/gate/gates/verify-approved.d.mts +1 -0
- package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
- package/dist/cli/gate/gates/verify-approved.mjs +1 -0
- package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
- package/dist/cli/gate/registry.d.mts.map +1 -1
- package/dist/cli/gate/registry.mjs +9 -1
- package/dist/cli/gate/registry.mjs.map +1 -1
- package/dist/cli/host/detect.mjs +1 -1
- package/dist/cli/host/detect.mjs.map +1 -1
- package/dist/cli/install/find-workspace-framework-version.d.mts +16 -0
- package/dist/cli/install/find-workspace-framework-version.d.mts.map +1 -0
- package/dist/cli/install/find-workspace-framework-version.mjs +85 -0
- package/dist/cli/install/find-workspace-framework-version.mjs.map +1 -0
- package/dist/cli/install/install-from-source.d.mts +10 -0
- package/dist/cli/install/install-from-source.d.mts.map +1 -0
- package/dist/cli/install/install-from-source.mjs +271 -0
- package/dist/cli/install/install-from-source.mjs.map +1 -0
- package/dist/cli/install/install-kernel.d.mts.map +1 -1
- package/dist/cli/install/install-kernel.mjs +24 -0
- package/dist/cli/install/install-kernel.mjs.map +1 -1
- package/dist/cli/install/legacy-paths.d.mts +33 -11
- package/dist/cli/install/legacy-paths.d.mts.map +1 -1
- package/dist/cli/install/legacy-paths.mjs +163 -39
- package/dist/cli/install/legacy-paths.mjs.map +1 -1
- package/dist/cli/install/runtime-detect.mjs +1 -1
- package/dist/cli/install/runtime-detect.mjs.map +1 -1
- package/dist/cli/install/runtime-migrate.d.mts +34 -14
- package/dist/cli/install/runtime-migrate.d.mts.map +1 -1
- package/dist/cli/install/runtime-migrate.mjs +63 -30
- package/dist/cli/install/runtime-migrate.mjs.map +1 -1
- package/dist/cli/install/transforms/codex.d.mts.map +1 -1
- package/dist/cli/install/transforms/codex.mjs +28 -17
- package/dist/cli/install/transforms/codex.mjs.map +1 -1
- package/dist/cli/skill-author/contract.mjs +2 -2
- package/dist/cli/skill-author/contract.mjs.map +1 -1
- package/dist/cli/verify-proof/audit.d.mts +34 -0
- package/dist/cli/verify-proof/audit.d.mts.map +1 -0
- package/dist/cli/verify-proof/audit.mjs +53 -0
- package/dist/cli/verify-proof/audit.mjs.map +1 -0
- package/dist/cli/verify-proof/exec.d.mts +20 -0
- package/dist/cli/verify-proof/exec.d.mts.map +1 -0
- package/dist/cli/verify-proof/exec.mjs +74 -0
- package/dist/cli/verify-proof/exec.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/index.d.mts +2 -0
- package/dist/cli/verify-proof/idl/index.d.mts.map +1 -0
- package/dist/cli/verify-proof/idl/index.mjs +13 -0
- package/dist/cli/verify-proof/idl/index.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/types.d.ts +10 -0
- package/dist/cli/verify-proof/idl/types.d.ts.map +1 -0
- package/dist/cli/verify-proof/idl/types.js +10 -0
- package/dist/cli/verify-proof/idl/types.js.map +1 -0
- package/dist/cli/verify-proof/manifest-validator.d.mts +19 -0
- package/dist/cli/verify-proof/manifest-validator.d.mts.map +1 -0
- package/dist/cli/verify-proof/manifest-validator.mjs +182 -0
- package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -0
- package/dist/cli/verify-proof/resolver.d.mts +105 -0
- package/dist/cli/verify-proof/resolver.d.mts.map +1 -0
- package/dist/cli/verify-proof/resolver.mjs +320 -0
- package/dist/cli/verify-proof/resolver.mjs.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts +30 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.mjs +209 -0
- package/dist/cli/verify-proof/runtime-detect.mjs.map +1 -0
- package/dist/cli/verify-proof/trust.d.mts +70 -0
- package/dist/cli/verify-proof/trust.d.mts.map +1 -0
- package/dist/cli/verify-proof/trust.mjs +174 -0
- package/dist/cli/verify-proof/trust.mjs.map +1 -0
- 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 +4 -1
- package/dist/plugin/agents/apt-planner.md +39 -7
- package/dist/plugin/skills/apt/SKILL.md +75 -6
- package/dist/plugin/skills/apt-caveman/SKILL.md +64 -0
- package/dist/plugin/skills/apt-debug/SKILL.md +36 -4
- package/dist/plugin/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
- package/dist/plugin/skills/apt-discuss/SKILL.md +4 -4
- package/dist/plugin/skills/apt-discuss/appendices/grill-discipline.md +2 -11
- package/dist/plugin/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
- package/dist/plugin/skills/apt-execute/SKILL.md +27 -4
- package/dist/plugin/skills/apt-execute/appendices/tdd-mode.md +2 -10
- package/dist/plugin/skills/apt-fan-out/SKILL.md +36 -1
- package/dist/plugin/skills/apt-handoff/SKILL.md +228 -0
- package/dist/plugin/skills/apt-improve/DEEPENING.md +0 -8
- package/dist/plugin/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
- package/dist/plugin/skills/apt-improve/LANGUAGE.md +0 -8
- package/dist/plugin/skills/apt-improve/SKILL.md +4 -4
- package/dist/plugin/skills/apt-plan/SKILL.md +73 -5
- package/dist/plugin/skills/apt-plan/adapters/conductor.md +1 -1
- package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -1
- package/dist/plugin/skills/apt-prototype/LOGIC.md +0 -8
- package/dist/plugin/skills/apt-prototype/SKILL.md +4 -4
- package/dist/plugin/skills/apt-prototype/UI.md +0 -8
- package/dist/plugin/skills/apt-quick/SKILL.md +31 -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-resume/SKILL.md +54 -31
- package/dist/plugin/skills/apt-run/SKILL.md +114 -16
- package/dist/plugin/skills/apt-setup/SKILL.md +97 -8
- package/dist/plugin/skills/apt-ship/SKILL.md +165 -9
- package/dist/plugin/skills/apt-spar/SKILL.md +84 -23
- package/dist/plugin/skills/apt-triage/AGENT-BRIEF.md +0 -8
- package/dist/plugin/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
- package/dist/plugin/skills/apt-triage/SKILL.md +2 -2
- package/dist/plugin/skills/apt-update/SKILL.md +74 -17
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +87 -1
- package/dist/plugin/skills/apt-zoom-out/SKILL.md +3 -3
- package/dist/schemas/quick-task.d.ts +17 -17
- package/dist/schemas/quick-task.d.ts.map +1 -1
- package/dist/schemas/quick-task.js +2 -2
- package/dist/schemas/quick-task.js.map +1 -1
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/state.d.ts +1 -1
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/task-record.d.ts +1 -1
- package/dist/types/task-record.d.ts.map +1 -1
- 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 +138 -133
- package/prompts/planner.md +1 -1
- package/prompts/spec_writer.md +1 -1
- package/skills/apt/SKILL.md +75 -6
- package/skills/apt-caveman/SKILL.md +64 -0
- package/skills/apt-debug/SKILL.md +36 -4
- package/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
- package/skills/apt-discuss/SKILL.md +4 -4
- package/skills/apt-discuss/appendices/grill-discipline.md +2 -11
- package/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
- package/skills/apt-execute/SKILL.md +27 -4
- package/skills/apt-execute/appendices/tdd-mode.md +2 -10
- package/skills/apt-fan-out/SKILL.md +36 -1
- package/skills/apt-handoff/SKILL.md +228 -0
- package/skills/apt-improve/DEEPENING.md +0 -8
- package/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
- package/skills/apt-improve/LANGUAGE.md +0 -8
- package/skills/apt-improve/SKILL.md +4 -4
- package/skills/apt-plan/SKILL.md +73 -5
- package/skills/apt-plan/adapters/conductor.md +1 -1
- package/skills/apt-planner.md +17 -1
- package/skills/apt-pr-review/SKILL.md +1 -1
- package/skills/apt-prototype/LOGIC.md +0 -8
- package/skills/apt-prototype/SKILL.md +4 -4
- package/skills/apt-prototype/UI.md +0 -8
- package/skills/apt-quick/SKILL.md +31 -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-resume/SKILL.md +54 -31
- package/skills/apt-run/SKILL.md +114 -16
- package/skills/apt-setup/SKILL.md +97 -8
- package/skills/apt-ship/SKILL.md +165 -9
- package/skills/apt-spar/SKILL.md +84 -23
- package/skills/apt-triage/AGENT-BRIEF.md +0 -8
- package/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
- package/skills/apt-triage/SKILL.md +2 -2
- package/skills/apt-update/SKILL.md +74 -17
- package/skills/apt-verify-proof/SKILL.md +87 -1
- package/skills/apt-zoom-out/SKILL.md +3 -3
- package/src/cli/commands/adr.mjs +1 -1
- package/src/cli/commands/audit-branch-current.mjs +250 -0
- package/src/cli/commands/audit.mjs +13 -2
- package/src/cli/commands/check-version.mjs +20 -1
- package/src/cli/commands/context.mjs +3 -3
- package/src/cli/commands/coverage-check.mjs +126 -44
- package/src/cli/commands/detect-runtime.mjs +143 -0
- package/src/cli/commands/driver-doctor.mjs +294 -0
- package/src/cli/commands/gate.mjs +15 -0
- package/src/cli/commands/init.mjs +9 -6
- package/src/cli/commands/install-from-source.mjs +1 -0
- package/src/cli/commands/modes.mjs +1 -1
- package/src/cli/commands/route.mjs +42 -1
- package/src/cli/commands/triage.mjs +1 -1
- package/src/cli/config/load.mjs +9 -3
- package/src/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
- package/src/cli/coordination/event-schema.mjs +19 -0
- package/src/cli/coverage-check/user-outcomes.mjs +273 -0
- package/src/cli/dispatch.mjs +17 -1
- package/src/cli/gate/context.mjs +20 -1
- package/src/cli/gate/gates/consistency-check.mjs +1 -0
- package/src/cli/gate/gates/review-clean.mjs +1 -0
- package/src/cli/gate/gates/verify-approved.mjs +1 -0
- package/src/cli/gate/registry.mjs +11 -1
- package/src/cli/host/detect.mjs +1 -1
- package/src/cli/install/find-workspace-framework-version.mjs +88 -0
- package/src/cli/install/install-from-source.mjs +276 -0
- package/src/cli/install/install-kernel.mjs +24 -0
- package/src/cli/install/legacy-paths.mjs +164 -39
- package/src/cli/install/runtime-detect.mjs +1 -1
- package/src/cli/install/runtime-migrate.mjs +63 -30
- package/src/cli/install/transforms/codex.mjs +26 -17
- package/src/cli/skill-author/contract.mjs +2 -2
- package/src/cli/verify-proof/.gitkeep +0 -0
- package/src/cli/verify-proof/audit.mjs +55 -0
- package/src/cli/verify-proof/exec.mjs +74 -0
- package/src/cli/verify-proof/idl/index.mjs +23 -0
- package/src/cli/verify-proof/idl/types.ts +42 -0
- package/src/cli/verify-proof/manifest-schema.json +212 -0
- package/src/cli/verify-proof/manifest-validator.mjs +184 -0
- package/src/cli/verify-proof/resolver.mjs +330 -0
- package/src/cli/verify-proof/runtime-detect.mjs +211 -0
- package/src/cli/verify-proof/trust.mjs +187 -0
- package/templates/adr-format.md +0 -8
- package/templates/aperant-claude-md-appendix.md +1 -1
- package/templates/context-format.md +1 -9
- package/templates/proof-verification.md +51 -8
- package/workflows/verify-proof.md +130 -19
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Score a single driver against the project's runtime + required capabilities.
|
|
3
|
+
*
|
|
4
|
+
* @param {DriverManifest & {locality?: 'bundled'|'user'|'registry'}} manifest
|
|
5
|
+
* @param {RuntimeCapabilities} runtime
|
|
6
|
+
* @param {string[]} required
|
|
7
|
+
* @returns {{score: number[], reason?: string}}
|
|
8
|
+
*/
|
|
9
|
+
export function scoreDriver(manifest: DriverManifest & {
|
|
10
|
+
locality?: "bundled" | "user" | "registry";
|
|
11
|
+
}, runtime: RuntimeCapabilities, required: string[]): {
|
|
12
|
+
score: number[];
|
|
13
|
+
reason?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the best driver for a given (runtime, drivers, override, required)
|
|
17
|
+
* tuple.
|
|
18
|
+
*
|
|
19
|
+
* @param {Object} opts
|
|
20
|
+
* @param {DriverManifest[]} opts.drivers — manifests of every discovered driver.
|
|
21
|
+
* @param {RuntimeCapabilities} opts.runtime — project's runtime capabilities.
|
|
22
|
+
* @param {string[]} opts.required_capabilities — IDL verbs the test needs.
|
|
23
|
+
* @param {string[]} [opts.required_stability] — accepted stability values; default ['ga'].
|
|
24
|
+
* @param {string[]} [opts.override] — config.json:verification.runtimes[]: explicit driverId precedence.
|
|
25
|
+
* @returns {{selected: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}}
|
|
26
|
+
* @throws {UnsatisfiedRequiredCapabilityError} when no driver satisfies a REQUIRED capability.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveDriver(opts: {
|
|
29
|
+
drivers: DriverManifest[];
|
|
30
|
+
runtime: RuntimeCapabilities;
|
|
31
|
+
required_capabilities: string[];
|
|
32
|
+
required_stability?: string[] | undefined;
|
|
33
|
+
override?: string[] | undefined;
|
|
34
|
+
}): {
|
|
35
|
+
selected: DriverManifest;
|
|
36
|
+
fallback_attempts: Array<{
|
|
37
|
+
driver_id: string;
|
|
38
|
+
reason: string;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Map a User Outcomes surface tag to the runtime-capability flag a driver
|
|
43
|
+
* must carry (via `matchesRuntime`) to be eligible for that surface.
|
|
44
|
+
*
|
|
45
|
+
* Closed surface set: `electron | web | cli | api | electron+web`.
|
|
46
|
+
* `electron+web` is NOT a single flag — it's a cross-surface tag the
|
|
47
|
+
* workflow runner expands into two single-surface dispatches.
|
|
48
|
+
*
|
|
49
|
+
* @param {('electron'|'web'|'cli'|'api')} surface
|
|
50
|
+
* @returns {('is_electron'|'is_web_frontend'|'has_node')}
|
|
51
|
+
*/
|
|
52
|
+
export function surfaceToRequiredFlag(surface: ("electron" | "web" | "cli" | "api")): ("is_electron" | "is_web_frontend" | "has_node");
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a driver per outcome surface tag, NOT per verify-proof run
|
|
55
|
+
* (per spec §ID-03). For each input outcome the function returns one
|
|
56
|
+
* `{outcome_id, surface, driver}` entry; for `[electron+web]` outcomes
|
|
57
|
+
* it returns TWO entries (electron + web) sharing the same outcome_id.
|
|
58
|
+
*
|
|
59
|
+
* The `outcome_id` field on each returned entry is the positional ID
|
|
60
|
+
* produced by `parseUserOutcomes` (e.g. `O1`, `O2`). The resolver does
|
|
61
|
+
* NOT rewrite or regenerate IDs — they pass through verbatim so the
|
|
62
|
+
* workflow runner can correlate proof artifacts to spec lines.
|
|
63
|
+
*
|
|
64
|
+
* Each per-surface dispatch synthesizes a runtime-capabilities view
|
|
65
|
+
* that ONLY claims the surface's required flag (e.g. `is_electron`
|
|
66
|
+
* alone for an electron-surface outcome, even when the project also
|
|
67
|
+
* carries `is_web_frontend`). This forces the existing scoring to
|
|
68
|
+
* pick the per-surface driver — without it, a project with BOTH
|
|
69
|
+
* electron AND web capabilities would always select the highest-
|
|
70
|
+
* priority bundled driver (currently `browser`) for every outcome.
|
|
71
|
+
*
|
|
72
|
+
* Delegates to the existing `resolveDriver()` for the actual scoring
|
|
73
|
+
* — the scoring code stays in one place.
|
|
74
|
+
*
|
|
75
|
+
* @param {Object} opts
|
|
76
|
+
* @param {DriverManifest[]} opts.drivers
|
|
77
|
+
* @param {RuntimeCapabilities} opts.runtime
|
|
78
|
+
* @param {Array<{id: string, surface: 'electron'|'web'|'cli'|'api'|'electron+web'}>} opts.outcomes
|
|
79
|
+
* @param {string[]} [opts.override]
|
|
80
|
+
* @param {string[]} [opts.required_stability]
|
|
81
|
+
* @param {string[]} [opts.required_capabilities] — defaults to ['screenshot']
|
|
82
|
+
* @returns {Array<{outcome_id: string, surface: string, driver: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}>}
|
|
83
|
+
*/
|
|
84
|
+
export function resolveDriversForOutcomes(opts: {
|
|
85
|
+
drivers: DriverManifest[];
|
|
86
|
+
runtime: RuntimeCapabilities;
|
|
87
|
+
outcomes: Array<{
|
|
88
|
+
id: string;
|
|
89
|
+
surface: "electron" | "web" | "cli" | "api" | "electron+web";
|
|
90
|
+
}>;
|
|
91
|
+
override?: string[] | undefined;
|
|
92
|
+
required_stability?: string[] | undefined;
|
|
93
|
+
required_capabilities?: string[] | undefined;
|
|
94
|
+
}): Array<{
|
|
95
|
+
outcome_id: string;
|
|
96
|
+
surface: string;
|
|
97
|
+
driver: DriverManifest;
|
|
98
|
+
fallback_attempts: Array<{
|
|
99
|
+
driver_id: string;
|
|
100
|
+
reason: string;
|
|
101
|
+
}>;
|
|
102
|
+
}>;
|
|
103
|
+
export type DriverManifest = import("@aperant/framework/driver-sdk").DriverManifest;
|
|
104
|
+
export type RuntimeCapabilities = import("./runtime-detect.mjs").RuntimeCapabilities;
|
|
105
|
+
//# sourceMappingURL=resolver.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/resolver.mjs"],"names":[],"mappings":"AA0CA;;;;;;;GAOG;AACH,sCALW,cAAc,GAAG;IAAC,QAAQ,CAAC,EAAE,SAAS,GAAC,MAAM,GAAC,UAAU,CAAA;CAAC,WACzD,mBAAmB,YACnB,MAAM,EAAE,GACN;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,CAU9C;AA0CD;;;;;;;;;;;;GAYG;AACH,oCARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IACJ,qBAAqB,EAApC,MAAM,EAAE;IACQ,kBAAkB;IAClB,QAAQ;CAChC,GAAU;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAqFrG;AAED;;;;;;;;;;GAUG;AACH,+CAHW,CAAC,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,CAAC,GAC5B,CAAC,aAAa,GAAC,iBAAiB,GAAC,UAAU,CAAC,CAcxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,gDARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IAC6D,QAAQ,EAAxF,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,GAAC,cAAc,CAAA;KAAC,CAAC;IACzD,QAAQ;IACR,kBAAkB;IAClB,qBAAqB;CAC7C,GAAU,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAAC,CA2C/I;6BAnQY,OAAO,+BAA+B,EAAE,cAAc;kCACtD,OAAO,sBAAsB,EAAE,mBAAmB"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolver.mjs — driver selection + fallback chain.
|
|
3
|
+
*
|
|
4
|
+
* Given a project's runtime capabilities, the discovered drivers, and the
|
|
5
|
+
* test's required IDL capabilities, return the best driver — or throw
|
|
6
|
+
* UnsatisfiedRequiredCapabilityError if no driver in the chain satisfies
|
|
7
|
+
* a REQUIRED capability (ID-02 fail-closed).
|
|
8
|
+
*
|
|
9
|
+
* Scoring (ID-02, ordered high → low):
|
|
10
|
+
* 1. capability_coverage — how many required capabilities the driver has
|
|
11
|
+
* 2. compatibility — does the runtime match the manifest.targets?
|
|
12
|
+
* 3. stability — ga > beta > experimental
|
|
13
|
+
* 4. priority — higher wins (manifest.priority)
|
|
14
|
+
* 5. locality — bundled (packages/framework/drivers/) > user-installed
|
|
15
|
+
* (.aperant/drivers/) > registry (.aperant/registry-cache/)
|
|
16
|
+
*
|
|
17
|
+
* Ties are broken by the next dimension; if every dimension is equal the
|
|
18
|
+
* driver with the lexicographically smaller driverId wins (deterministic).
|
|
19
|
+
*
|
|
20
|
+
* v0.8.6 — `resolveDriversForOutcomes(opts)` adds per-outcome driver
|
|
21
|
+
* dispatch for cross-surface specs (per spec §ID-03). It accepts the
|
|
22
|
+
* positional `outcomes[]` produced by `parseUserOutcomes` and returns
|
|
23
|
+
* `Array<{outcome_id, surface, driver}>` — one entry per
|
|
24
|
+
* (outcome, surface) pair. For `[electron+web]` outcomes it emits TWO
|
|
25
|
+
* entries with the same outcome_id and different drivers. The
|
|
26
|
+
* outcome_id field is passed through verbatim from parser → resolver
|
|
27
|
+
* → workflow runner with no name rewriting (the positional-ID
|
|
28
|
+
* contract).
|
|
29
|
+
*
|
|
30
|
+
* Existing `resolveDriver()` and `scoreDriver()` exports are unchanged.
|
|
31
|
+
*/
|
|
32
|
+
import { UnsatisfiedRequiredCapabilityError } from '@aperant/framework/driver-sdk';
|
|
33
|
+
/**
|
|
34
|
+
* @typedef {import('@aperant/framework/driver-sdk').DriverManifest} DriverManifest
|
|
35
|
+
* @typedef {import('./runtime-detect.mjs').RuntimeCapabilities} RuntimeCapabilities
|
|
36
|
+
*/
|
|
37
|
+
const STABILITY_RANK = { ga: 3, beta: 2, experimental: 1 };
|
|
38
|
+
const LOCALITY_RANK = { bundled: 3, user: 2, registry: 1 };
|
|
39
|
+
/**
|
|
40
|
+
* Score a single driver against the project's runtime + required capabilities.
|
|
41
|
+
*
|
|
42
|
+
* @param {DriverManifest & {locality?: 'bundled'|'user'|'registry'}} manifest
|
|
43
|
+
* @param {RuntimeCapabilities} runtime
|
|
44
|
+
* @param {string[]} required
|
|
45
|
+
* @returns {{score: number[], reason?: string}}
|
|
46
|
+
*/
|
|
47
|
+
export function scoreDriver(manifest, runtime, required) {
|
|
48
|
+
const caps = new Set(manifest.capabilities ?? []);
|
|
49
|
+
const coverage = required.filter((c) => caps.has(c)).length;
|
|
50
|
+
const compatibility = matchesRuntime(manifest, runtime) ? 1 : 0;
|
|
51
|
+
const stability = STABILITY_RANK[manifest.stability] ?? 0;
|
|
52
|
+
const priority = manifest.priority ?? 0;
|
|
53
|
+
const locality = LOCALITY_RANK[manifest.locality ?? 'bundled'] ?? 0;
|
|
54
|
+
return { score: [coverage, compatibility, stability, priority, locality] };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Whether a manifest's targets[] mentions a runtime the project has.
|
|
58
|
+
*
|
|
59
|
+
* @param {DriverManifest} manifest
|
|
60
|
+
* @param {RuntimeCapabilities} runtime
|
|
61
|
+
* @returns {boolean}
|
|
62
|
+
*/
|
|
63
|
+
function matchesRuntime(manifest, runtime) {
|
|
64
|
+
const targets = manifest.targets ?? [];
|
|
65
|
+
for (const t of targets) {
|
|
66
|
+
// Strip any version range suffix (e.g. "electron@>=25" → "electron").
|
|
67
|
+
const stripped = String(t).split('@')[0].toLowerCase();
|
|
68
|
+
if (stripped === 'electron' && runtime.is_electron)
|
|
69
|
+
return true;
|
|
70
|
+
if (stripped === 'tauri' && runtime.is_tauri)
|
|
71
|
+
return true;
|
|
72
|
+
if ((stripped === 'browser' || stripped === 'web') && runtime.is_web_frontend)
|
|
73
|
+
return true;
|
|
74
|
+
if (stripped === 'next' && runtime.is_nextjs)
|
|
75
|
+
return true;
|
|
76
|
+
if (stripped === 'nuxt' && runtime.is_nuxt)
|
|
77
|
+
return true;
|
|
78
|
+
if (stripped === 'expo' && runtime.is_expo)
|
|
79
|
+
return true;
|
|
80
|
+
if (stripped === 'react-native' && runtime.is_react_native)
|
|
81
|
+
return true;
|
|
82
|
+
if (stripped === 'node' && runtime.has_node)
|
|
83
|
+
return true;
|
|
84
|
+
if (stripped === 'cli' && runtime.has_node)
|
|
85
|
+
return true;
|
|
86
|
+
if (stripped === 'api' && runtime.has_node)
|
|
87
|
+
return true;
|
|
88
|
+
if (stripped === 'fake')
|
|
89
|
+
return true; // fixture-only — always matches
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Compare two driver-score tuples lexicographically.
|
|
95
|
+
* @param {number[]} a
|
|
96
|
+
* @param {number[]} b
|
|
97
|
+
* @returns {number}
|
|
98
|
+
*/
|
|
99
|
+
function compareScores(a, b) {
|
|
100
|
+
for (let i = 0; i < Math.min(a.length, b.length); i++) {
|
|
101
|
+
if (a[i] !== b[i])
|
|
102
|
+
return b[i] - a[i]; // higher wins
|
|
103
|
+
}
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Resolve the best driver for a given (runtime, drivers, override, required)
|
|
108
|
+
* tuple.
|
|
109
|
+
*
|
|
110
|
+
* @param {Object} opts
|
|
111
|
+
* @param {DriverManifest[]} opts.drivers — manifests of every discovered driver.
|
|
112
|
+
* @param {RuntimeCapabilities} opts.runtime — project's runtime capabilities.
|
|
113
|
+
* @param {string[]} opts.required_capabilities — IDL verbs the test needs.
|
|
114
|
+
* @param {string[]} [opts.required_stability] — accepted stability values; default ['ga'].
|
|
115
|
+
* @param {string[]} [opts.override] — config.json:verification.runtimes[]: explicit driverId precedence.
|
|
116
|
+
* @returns {{selected: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}}
|
|
117
|
+
* @throws {UnsatisfiedRequiredCapabilityError} when no driver satisfies a REQUIRED capability.
|
|
118
|
+
*/
|
|
119
|
+
export function resolveDriver(opts) {
|
|
120
|
+
const drivers = opts.drivers ?? [];
|
|
121
|
+
const runtime = opts.runtime;
|
|
122
|
+
const required = opts.required_capabilities ?? [];
|
|
123
|
+
const stabilityFilter = new Set(opts.required_stability ?? ['ga']);
|
|
124
|
+
const override = opts.override ?? [];
|
|
125
|
+
const fallback = [];
|
|
126
|
+
// Apply override precedence first (config-listed driverIds come first).
|
|
127
|
+
const overrideOrdered = [];
|
|
128
|
+
const overrideSet = new Set(override);
|
|
129
|
+
for (const id of override) {
|
|
130
|
+
const d = drivers.find((m) => m.driverId === id);
|
|
131
|
+
if (d)
|
|
132
|
+
overrideOrdered.push(d);
|
|
133
|
+
}
|
|
134
|
+
const remaining = drivers.filter((m) => !overrideSet.has(m.driverId));
|
|
135
|
+
const ordered = [...overrideOrdered, ...remaining];
|
|
136
|
+
// Filter by stability; rejected drivers go into fallback_attempts.
|
|
137
|
+
const stableOnly = [];
|
|
138
|
+
for (const d of ordered) {
|
|
139
|
+
if (!stabilityFilter.has(d.stability)) {
|
|
140
|
+
fallback.push({
|
|
141
|
+
driver_id: d.driverId,
|
|
142
|
+
reason: `stability ${d.stability} not in allowed set [${[...stabilityFilter].join(', ')}]`,
|
|
143
|
+
});
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
stableOnly.push(d);
|
|
147
|
+
}
|
|
148
|
+
// Override is hard precedence (per opts.override docstring "explicit
|
|
149
|
+
// driverId precedence"): when set, try override-listed drivers in
|
|
150
|
+
// override order — the first one that satisfies every required
|
|
151
|
+
// capability wins, regardless of compatibility/priority/stability
|
|
152
|
+
// ranking. Non-matching override entries land in fallback. Only when
|
|
153
|
+
// every override entry misses a required cap do we fall through to
|
|
154
|
+
// score-based pick on the remaining drivers.
|
|
155
|
+
const overrideListed = stableOnly.filter((m) => overrideSet.has(m.driverId));
|
|
156
|
+
for (const candidate of overrideListed) {
|
|
157
|
+
const caps = new Set(candidate.capabilities ?? []);
|
|
158
|
+
const missing = required.filter((c) => !caps.has(c));
|
|
159
|
+
if (missing.length === 0) {
|
|
160
|
+
return { selected: candidate, fallback_attempts: fallback };
|
|
161
|
+
}
|
|
162
|
+
fallback.push({
|
|
163
|
+
driver_id: candidate.driverId,
|
|
164
|
+
reason: `override-listed but missing required capabilities: ${missing.join(', ')}`,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
// Score every non-override survivor against required capabilities.
|
|
168
|
+
const nonOverride = stableOnly.filter((m) => !overrideSet.has(m.driverId));
|
|
169
|
+
const scored = nonOverride.map((m) => ({ manifest: m, ...scoreDriver(m, runtime, required) }));
|
|
170
|
+
// Sort highest-first, tie-break on driverId for determinism.
|
|
171
|
+
scored.sort((a, b) => {
|
|
172
|
+
const cmp = compareScores(a.score, b.score);
|
|
173
|
+
if (cmp !== 0)
|
|
174
|
+
return cmp;
|
|
175
|
+
return a.manifest.driverId.localeCompare(b.manifest.driverId);
|
|
176
|
+
});
|
|
177
|
+
// Pick the top scorer that covers EVERY required capability. Others go into fallback.
|
|
178
|
+
for (const candidate of scored) {
|
|
179
|
+
const caps = new Set(candidate.manifest.capabilities ?? []);
|
|
180
|
+
const missing = required.filter((c) => !caps.has(c));
|
|
181
|
+
if (missing.length === 0) {
|
|
182
|
+
return { selected: candidate.manifest, fallback_attempts: fallback };
|
|
183
|
+
}
|
|
184
|
+
fallback.push({
|
|
185
|
+
driver_id: candidate.manifest.driverId,
|
|
186
|
+
reason: `missing required capabilities: ${missing.join(', ')}`,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// Exhausted the chain — fail closed (ID-02).
|
|
190
|
+
throw new UnsatisfiedRequiredCapabilityError(`No driver in the chain satisfies every required capability: [${required.join(', ')}]`, required[0], fallback);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Map a User Outcomes surface tag to the runtime-capability flag a driver
|
|
194
|
+
* must carry (via `matchesRuntime`) to be eligible for that surface.
|
|
195
|
+
*
|
|
196
|
+
* Closed surface set: `electron | web | cli | api | electron+web`.
|
|
197
|
+
* `electron+web` is NOT a single flag — it's a cross-surface tag the
|
|
198
|
+
* workflow runner expands into two single-surface dispatches.
|
|
199
|
+
*
|
|
200
|
+
* @param {('electron'|'web'|'cli'|'api')} surface
|
|
201
|
+
* @returns {('is_electron'|'is_web_frontend'|'has_node')}
|
|
202
|
+
*/
|
|
203
|
+
export function surfaceToRequiredFlag(surface) {
|
|
204
|
+
switch (surface) {
|
|
205
|
+
case 'electron':
|
|
206
|
+
return 'is_electron';
|
|
207
|
+
case 'web':
|
|
208
|
+
return 'is_web_frontend';
|
|
209
|
+
case 'cli':
|
|
210
|
+
case 'api':
|
|
211
|
+
return 'has_node';
|
|
212
|
+
default:
|
|
213
|
+
throw new Error(`surfaceToRequiredFlag: unknown surface "${surface}"`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Resolve a driver per outcome surface tag, NOT per verify-proof run
|
|
218
|
+
* (per spec §ID-03). For each input outcome the function returns one
|
|
219
|
+
* `{outcome_id, surface, driver}` entry; for `[electron+web]` outcomes
|
|
220
|
+
* it returns TWO entries (electron + web) sharing the same outcome_id.
|
|
221
|
+
*
|
|
222
|
+
* The `outcome_id` field on each returned entry is the positional ID
|
|
223
|
+
* produced by `parseUserOutcomes` (e.g. `O1`, `O2`). The resolver does
|
|
224
|
+
* NOT rewrite or regenerate IDs — they pass through verbatim so the
|
|
225
|
+
* workflow runner can correlate proof artifacts to spec lines.
|
|
226
|
+
*
|
|
227
|
+
* Each per-surface dispatch synthesizes a runtime-capabilities view
|
|
228
|
+
* that ONLY claims the surface's required flag (e.g. `is_electron`
|
|
229
|
+
* alone for an electron-surface outcome, even when the project also
|
|
230
|
+
* carries `is_web_frontend`). This forces the existing scoring to
|
|
231
|
+
* pick the per-surface driver — without it, a project with BOTH
|
|
232
|
+
* electron AND web capabilities would always select the highest-
|
|
233
|
+
* priority bundled driver (currently `browser`) for every outcome.
|
|
234
|
+
*
|
|
235
|
+
* Delegates to the existing `resolveDriver()` for the actual scoring
|
|
236
|
+
* — the scoring code stays in one place.
|
|
237
|
+
*
|
|
238
|
+
* @param {Object} opts
|
|
239
|
+
* @param {DriverManifest[]} opts.drivers
|
|
240
|
+
* @param {RuntimeCapabilities} opts.runtime
|
|
241
|
+
* @param {Array<{id: string, surface: 'electron'|'web'|'cli'|'api'|'electron+web'}>} opts.outcomes
|
|
242
|
+
* @param {string[]} [opts.override]
|
|
243
|
+
* @param {string[]} [opts.required_stability]
|
|
244
|
+
* @param {string[]} [opts.required_capabilities] — defaults to ['screenshot']
|
|
245
|
+
* @returns {Array<{outcome_id: string, surface: string, driver: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}>}
|
|
246
|
+
*/
|
|
247
|
+
export function resolveDriversForOutcomes(opts) {
|
|
248
|
+
const drivers = opts.drivers ?? [];
|
|
249
|
+
const runtime = opts.runtime;
|
|
250
|
+
const outcomes = opts.outcomes ?? [];
|
|
251
|
+
const required = opts.required_capabilities ?? ['screenshot'];
|
|
252
|
+
const override = opts.override;
|
|
253
|
+
const stability = opts.required_stability;
|
|
254
|
+
/** @type {Array<{outcome_id: string, surface: string, driver: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}>} */
|
|
255
|
+
const results = [];
|
|
256
|
+
for (const outcome of outcomes) {
|
|
257
|
+
const surfacesToDispatch = outcome.surface === 'electron+web' ? ['electron', 'web'] : [outcome.surface];
|
|
258
|
+
for (const surface of surfacesToDispatch) {
|
|
259
|
+
const flag = surfaceToRequiredFlag(/** @type {'electron'|'web'|'cli'|'api'} */ (surface));
|
|
260
|
+
// Synthesize a per-surface runtime view: only the surface's
|
|
261
|
+
// required flag is on; every other flag is masked off so the
|
|
262
|
+
// scoring prefers per-surface drivers (otherwise, on a
|
|
263
|
+
// multi-runtime project, the highest-priority bundled driver
|
|
264
|
+
// always wins). `has_node` stays on for cli/api since multiple
|
|
265
|
+
// drivers may target node.
|
|
266
|
+
const surfaceRuntime = maskRuntimeForSurface(runtime, flag);
|
|
267
|
+
const resolved = resolveDriver({
|
|
268
|
+
drivers,
|
|
269
|
+
runtime: surfaceRuntime,
|
|
270
|
+
required_capabilities: required,
|
|
271
|
+
...(override ? { override } : {}),
|
|
272
|
+
...(stability ? { required_stability: stability } : {}),
|
|
273
|
+
});
|
|
274
|
+
results.push({
|
|
275
|
+
outcome_id: outcome.id,
|
|
276
|
+
surface,
|
|
277
|
+
driver: resolved.selected,
|
|
278
|
+
fallback_attempts: resolved.fallback_attempts,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return results;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Return a copy of `runtime` with every flag false EXCEPT the one named
|
|
286
|
+
* by `flag`. Used to scope the resolver's compatibility check to a
|
|
287
|
+
* single surface during per-outcome dispatch.
|
|
288
|
+
*
|
|
289
|
+
* @param {RuntimeCapabilities} runtime
|
|
290
|
+
* @param {string} flag — one of: is_electron | is_web_frontend | has_node
|
|
291
|
+
* @returns {RuntimeCapabilities}
|
|
292
|
+
*/
|
|
293
|
+
function maskRuntimeForSurface(runtime, flag) {
|
|
294
|
+
/** @type {RuntimeCapabilities} */
|
|
295
|
+
const masked = {
|
|
296
|
+
is_electron: false,
|
|
297
|
+
is_tauri: false,
|
|
298
|
+
is_nextjs: false,
|
|
299
|
+
is_nuxt: false,
|
|
300
|
+
is_web_frontend: false,
|
|
301
|
+
is_expo: false,
|
|
302
|
+
is_react_native: false,
|
|
303
|
+
has_node: false,
|
|
304
|
+
};
|
|
305
|
+
// Only flip the surface's flag on if the project actually carries it
|
|
306
|
+
// (otherwise the resolver should genuinely fail — fail-closed).
|
|
307
|
+
if (flag === 'is_electron' && runtime.is_electron)
|
|
308
|
+
masked.is_electron = true;
|
|
309
|
+
if (flag === 'is_web_frontend' && runtime.is_web_frontend) {
|
|
310
|
+
masked.is_web_frontend = true;
|
|
311
|
+
// Carry the framework hint too (Next.js / Nuxt) so drivers that
|
|
312
|
+
// target browser via those frameworks still match.
|
|
313
|
+
masked.is_nextjs = runtime.is_nextjs;
|
|
314
|
+
masked.is_nuxt = runtime.is_nuxt;
|
|
315
|
+
}
|
|
316
|
+
if (flag === 'has_node')
|
|
317
|
+
masked.has_node = runtime.has_node;
|
|
318
|
+
return masked;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=resolver.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/resolver.mjs"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect runtime capabilities from a parsed package.json object.
|
|
3
|
+
*
|
|
4
|
+
* @param {Record<string, unknown> | null} packageJson
|
|
5
|
+
* @returns {RuntimeCapabilities}
|
|
6
|
+
*/
|
|
7
|
+
export function detectFromPackageJson(packageJson: Record<string, unknown> | null): RuntimeCapabilities;
|
|
8
|
+
/**
|
|
9
|
+
* Load and detect capabilities from a project directory's package.json.
|
|
10
|
+
* v0.8.6 — also walks `monorepo_globs` (default `['apps/*']`) and
|
|
11
|
+
* OR-merges each match's capabilities with the root.
|
|
12
|
+
*
|
|
13
|
+
* @param {string} projectDir
|
|
14
|
+
* @param {{monorepo_globs?: string[]}} [opts]
|
|
15
|
+
* @returns {RuntimeCapabilities}
|
|
16
|
+
*/
|
|
17
|
+
export function loadRuntimeCapabilities(projectDir: string, opts?: {
|
|
18
|
+
monorepo_globs?: string[];
|
|
19
|
+
}): RuntimeCapabilities;
|
|
20
|
+
export type RuntimeCapabilities = {
|
|
21
|
+
is_electron: boolean;
|
|
22
|
+
is_tauri: boolean;
|
|
23
|
+
is_nextjs: boolean;
|
|
24
|
+
is_nuxt: boolean;
|
|
25
|
+
is_web_frontend: boolean;
|
|
26
|
+
is_expo: boolean;
|
|
27
|
+
is_react_native: boolean;
|
|
28
|
+
has_node: boolean;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=runtime-detect.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-detect.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/runtime-detect.mjs"],"names":[],"mappings":"AAiDA;;;;;GAKG;AACH,mDAHW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5B,mBAAmB,CAwD/B;AAED;;;;;;;;GAQG;AACH,oDAJW,MAAM,SACN;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GACzB,mBAAmB,CAkC/B;;iBA/Ha,OAAO;cACP,OAAO;eACP,OAAO;aACP,OAAO;qBACP,OAAO;aACP,OAAO;qBACP,OAAO;cACP,OAAO"}
|