@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
|
@@ -2,17 +2,28 @@
|
|
|
2
2
|
* install/transforms/codex.mjs — Codex transform.
|
|
3
3
|
*
|
|
4
4
|
* Codex quirks:
|
|
5
|
-
* - frontmatter
|
|
6
|
-
*
|
|
5
|
+
* - frontmatter is whitelisted to `KEEP = {name, description}` (Codex
|
|
6
|
+
* validates strictly against its `allowed_properties` set and rejects
|
|
7
|
+
* unknown keys; the whitelist is drift-proof against new framework
|
|
8
|
+
* frontmatter keys).
|
|
7
9
|
* - body is wrapped in <codex_agent_role>…</codex_agent_role>.
|
|
8
10
|
* - slash-command refs `/apt:foo` rewritten to `/apt-foo` (Codex command
|
|
9
11
|
* names disallow `:`).
|
|
10
|
-
* - output: .
|
|
11
|
-
*
|
|
12
|
+
* - output: skills/<folder>/SKILL.md (the documented Codex discovery
|
|
13
|
+
* surface per https://developers.openai.com/codex/skills — resolved
|
|
14
|
+
* against installRoot `.agents` to land at `.agents/skills/<folder>/SKILL.md`).
|
|
15
|
+
* Markdown agents are NOT a Codex surface (custom-agents are TOML
|
|
16
|
+
* under `.codex/agents/`); only skills are emitted.
|
|
12
17
|
*/
|
|
13
18
|
import { basename, dirname } from 'node:path';
|
|
14
|
-
import { parseFrontmatter, rewriteCommandRefs, serializeFrontmatter,
|
|
15
|
-
|
|
19
|
+
import { parseFrontmatter, rewriteCommandRefs, serializeFrontmatter, substituteVersion, } from './_shared.mjs';
|
|
20
|
+
// Codex's `allowed_properties` set (see
|
|
21
|
+
// ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py:40):
|
|
22
|
+
// {"name", "description", "license", "allowed-tools", "metadata"}.
|
|
23
|
+
// We use the minimum viable whitelist {name, description} so adding new
|
|
24
|
+
// framework frontmatter keys (a routine occurrence) doesn't break Codex
|
|
25
|
+
// validation — only the 2 keys Codex actually consumes are emitted.
|
|
26
|
+
const KEEP = ['name', 'description'];
|
|
16
27
|
/**
|
|
17
28
|
* @param {import('../pipeline.mjs').TransformInput} input
|
|
18
29
|
* @returns {import('../pipeline.mjs').TransformOutput[]}
|
|
@@ -22,7 +33,11 @@ export function transform({ canonicalContent, canonicalRelPath, version, fileTyp
|
|
|
22
33
|
const parsed = parseFrontmatter(subbed);
|
|
23
34
|
let payload;
|
|
24
35
|
if (parsed.hasFrontmatter && parsed.fm) {
|
|
25
|
-
|
|
36
|
+
// Whitelist filter: drop every frontmatter key NOT in KEEP.
|
|
37
|
+
for (const k of Object.keys(parsed.fm)) {
|
|
38
|
+
if (!KEEP.includes(k))
|
|
39
|
+
delete parsed.fm[k];
|
|
40
|
+
}
|
|
26
41
|
const wrappedBody = `<codex_agent_role>\n${parsed.body}\n</codex_agent_role>\n`;
|
|
27
42
|
payload = serializeFrontmatter({ ...parsed, body: wrappedBody });
|
|
28
43
|
}
|
|
@@ -32,17 +47,13 @@ export function transform({ canonicalContent, canonicalRelPath, version, fileTyp
|
|
|
32
47
|
payload = rewriteCommandRefs(payload, '/apt:', '/apt-');
|
|
33
48
|
if (fileType === 'skill') {
|
|
34
49
|
const folder = basename(dirname(canonicalRelPath));
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
return [
|
|
38
|
-
{ outputPath: `agents/${folder}.md`, content: payload },
|
|
39
|
-
{ outputPath: `commands/${folder}.md`, content: payload },
|
|
40
|
-
];
|
|
41
|
-
}
|
|
42
|
-
if (fileType === 'agent') {
|
|
43
|
-
const file = basename(canonicalRelPath, '.md');
|
|
44
|
-
return [{ outputPath: `agents/${file}.md`, content: payload }];
|
|
50
|
+
// Codex's documented skill discovery surface is `.agents/skills/<folder>/SKILL.md`
|
|
51
|
+
// (one folder per skill, canonical SKILL.md filename).
|
|
52
|
+
return [{ outputPath: `skills/${folder}/SKILL.md`, content: payload }];
|
|
45
53
|
}
|
|
54
|
+
// Markdown agents are not a Codex surface. Codex custom-agents are TOML
|
|
55
|
+
// under `.codex/agents/`; emitting markdown there would just create
|
|
56
|
+
// another dead surface. Drop the agent branch entirely.
|
|
46
57
|
return [];
|
|
47
58
|
}
|
|
48
59
|
//# sourceMappingURL=codex.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.mjs","sourceRoot":"","sources":["../../../../src/cli/install/transforms/codex.mjs"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"codex.mjs","sourceRoot":"","sources":["../../../../src/cli/install/transforms/codex.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GACjB,MAAM,eAAe,CAAA;AAEtB,wCAAwC;AACxC,uEAAuE;AACvE,mEAAmE;AACnE,wEAAwE;AACxE,wEAAwE;AACxE,oEAAoE;AACpE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAEpC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE;IAClF,MAAM,MAAM,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,OAAO,CAAA;IACX,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACxC,4DAA4D;QAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3C,CAAC;QACD,MAAM,WAAW,GAAG,uBAAuB,MAAM,CAAC,IAAI,yBAAyB,CAAA;QAC/E,OAAO,GAAG,oBAAoB,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;IACjE,CAAC;SAAM,CAAC;QACP,OAAO,GAAG,uBAAuB,MAAM,yBAAyB,CAAA;IACjE,CAAC;IACD,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAEvD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAClD,mFAAmF;QACnF,uDAAuD;QACvD,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,MAAM,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IACvE,CAAC;IACD,wEAAwE;IACxE,oEAAoE;IACpE,wDAAwD;IACxD,OAAO,EAAE,CAAA;AACV,CAAC"}
|
|
@@ -152,9 +152,9 @@ export const SkillFrontmatterSchema = z
|
|
|
152
152
|
// don't immediately break skills that carry them.
|
|
153
153
|
triggers: z.array(z.string()).optional(),
|
|
154
154
|
color: z.string().optional(),
|
|
155
|
-
//
|
|
155
|
+
// ST-13 (AC12): optional `produces:` field enumerates
|
|
156
156
|
// the content-formats a skill emits (e.g. "PRD-shaped spec.md",
|
|
157
|
-
// "vertical-slice subtasks", "
|
|
157
|
+
// "vertical-slice subtasks", "Aperant CONTEXT.md term-block").
|
|
158
158
|
// Consumed by `apt-tools modes list` to surface what each skill ships.
|
|
159
159
|
// Additive and backward-compatible — skills without the field default
|
|
160
160
|
// to [] in modes list output.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.mjs","sourceRoot":"","sources":["../../../src/cli/skill-author/contract.mjs"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"contract.mjs","sourceRoot":"","sources":["../../../src/cli/skill-author/contract.mjs"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute today's events filename relative to projectDir.
|
|
3
|
+
* @param {string} projectDir
|
|
4
|
+
* @param {Date} [now]
|
|
5
|
+
* @returns {string}
|
|
6
|
+
*/
|
|
7
|
+
export function dailyEventsPath(projectDir: string, now?: Date): string;
|
|
8
|
+
/**
|
|
9
|
+
* Append a driver-invocation audit line.
|
|
10
|
+
*
|
|
11
|
+
* @param {string} projectDir
|
|
12
|
+
* @param {Object} entry
|
|
13
|
+
* @param {string} entry.driver_id
|
|
14
|
+
* @param {string} entry.version
|
|
15
|
+
* @param {string} entry.manifest_sha256
|
|
16
|
+
* @param {string} entry.trust_tier
|
|
17
|
+
* @param {string} entry.sandbox_profile
|
|
18
|
+
* @param {'allow' | 'deny' | 'requires_approval'} entry.decision
|
|
19
|
+
* @param {'success' | 'fail' | 'skip'} entry.result
|
|
20
|
+
* @param {string} [entry.verb] — IDL verb invoked (optional metadata)
|
|
21
|
+
* @param {string} [entry.reason] — decision-rationale string (optional)
|
|
22
|
+
*/
|
|
23
|
+
export function appendDriverEvent(projectDir: string, entry: {
|
|
24
|
+
driver_id: string;
|
|
25
|
+
version: string;
|
|
26
|
+
manifest_sha256: string;
|
|
27
|
+
trust_tier: string;
|
|
28
|
+
sandbox_profile: string;
|
|
29
|
+
decision: "allow" | "deny" | "requires_approval";
|
|
30
|
+
result: "success" | "fail" | "skip";
|
|
31
|
+
verb?: string | undefined;
|
|
32
|
+
reason?: string | undefined;
|
|
33
|
+
}): void;
|
|
34
|
+
//# sourceMappingURL=audit.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/audit.mjs"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,4CAJW,MAAM,QACN,IAAI,GACF,MAAM,CAOlB;AAED;;;;;;;;;;;;;;GAcG;AACH,8CAZW,MAAM,SAEd;IAAsB,SAAS,EAAvB,MAAM;IACQ,OAAO,EAArB,MAAM;IACQ,eAAe,EAA7B,MAAM;IACQ,UAAU,EAAxB,MAAM;IACQ,eAAe,EAA7B,MAAM;IACwC,QAAQ,EAAtD,OAAO,GAAG,MAAM,GAAG,mBAAmB;IACH,MAAM,EAAzC,SAAS,GAAG,MAAM,GAAG,MAAM;IACZ,IAAI;IACJ,MAAM;CAC/B,QAUA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* audit.mjs — append-only JSONL audit log for driver invocations.
|
|
3
|
+
*
|
|
4
|
+
* ID-05: one file per day at .aperant/events/{YYYY-MM-DD}.jsonl.
|
|
5
|
+
* One line per driver invocation:
|
|
6
|
+
* {ts, driver_id, version, manifest_sha256, trust_tier, sandbox_profile,
|
|
7
|
+
* decision: "allow|deny|requires_approval",
|
|
8
|
+
* result: "success|fail|skip"}
|
|
9
|
+
*
|
|
10
|
+
* Append-only — no rewrites. Each appendDriverEvent() opens the file in
|
|
11
|
+
* 'a' mode and writes a single line; concurrent agents may interleave
|
|
12
|
+
* lines but no line is ever overwritten.
|
|
13
|
+
*/
|
|
14
|
+
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
15
|
+
import { dirname, join, resolve } from 'node:path';
|
|
16
|
+
/**
|
|
17
|
+
* Compute today's events filename relative to projectDir.
|
|
18
|
+
* @param {string} projectDir
|
|
19
|
+
* @param {Date} [now]
|
|
20
|
+
* @returns {string}
|
|
21
|
+
*/
|
|
22
|
+
export function dailyEventsPath(projectDir, now = new Date()) {
|
|
23
|
+
const yyyy = now.getUTCFullYear();
|
|
24
|
+
const mm = String(now.getUTCMonth() + 1).padStart(2, '0');
|
|
25
|
+
const dd = String(now.getUTCDate()).padStart(2, '0');
|
|
26
|
+
return join(resolve(projectDir), '.aperant/events', `${yyyy}-${mm}-${dd}.jsonl`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Append a driver-invocation audit line.
|
|
30
|
+
*
|
|
31
|
+
* @param {string} projectDir
|
|
32
|
+
* @param {Object} entry
|
|
33
|
+
* @param {string} entry.driver_id
|
|
34
|
+
* @param {string} entry.version
|
|
35
|
+
* @param {string} entry.manifest_sha256
|
|
36
|
+
* @param {string} entry.trust_tier
|
|
37
|
+
* @param {string} entry.sandbox_profile
|
|
38
|
+
* @param {'allow' | 'deny' | 'requires_approval'} entry.decision
|
|
39
|
+
* @param {'success' | 'fail' | 'skip'} entry.result
|
|
40
|
+
* @param {string} [entry.verb] — IDL verb invoked (optional metadata)
|
|
41
|
+
* @param {string} [entry.reason] — decision-rationale string (optional)
|
|
42
|
+
*/
|
|
43
|
+
export function appendDriverEvent(projectDir, entry) {
|
|
44
|
+
const path = dailyEventsPath(projectDir);
|
|
45
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
46
|
+
const line = JSON.stringify({
|
|
47
|
+
ts: new Date().toISOString(),
|
|
48
|
+
kind: 'driver_invocation',
|
|
49
|
+
...entry,
|
|
50
|
+
});
|
|
51
|
+
appendFileSync(path, line + '\n', 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=audit.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/audit.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAElD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE,CAAA;IACjC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACjF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAU,EAAE,KAAK;IAClD,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;IACxC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,IAAI,EAAE,mBAAmB;QACzB,GAAG,KAAK;KACR,CAAC,CAAA;IACF,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute a manifest's local_command transport via execFile (no shell).
|
|
3
|
+
* Throws if the transport is not the structured variant.
|
|
4
|
+
*
|
|
5
|
+
* @param {{transport: unknown}} manifest
|
|
6
|
+
* @param {string[]} [extraArgs] — appended to manifest.transport.local_command.args.
|
|
7
|
+
* @param {{cwd?: string, env?: Record<string,string>, timeout?: number}} [options]
|
|
8
|
+
* @returns {Promise<{stdout: string, stderr: string}>}
|
|
9
|
+
*/
|
|
10
|
+
export function execLocalCommand(manifest: {
|
|
11
|
+
transport: unknown;
|
|
12
|
+
}, extraArgs?: string[], options?: {
|
|
13
|
+
cwd?: string;
|
|
14
|
+
env?: Record<string, string>;
|
|
15
|
+
timeout?: number;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
stdout: string;
|
|
18
|
+
stderr: string;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=exec.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/exec.mjs"],"names":[],"mappings":"AA2CA;;;;;;;;GAQG;AACH,2CALW;IAAC,SAAS,EAAE,OAAO,CAAA;CAAC,cACpB,MAAM,EAAE,YACR;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAC,GAC3D,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAuBrD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* exec.mjs — execFile-only execution layer for local_command transports.
|
|
3
|
+
*
|
|
4
|
+
* ID-03 security invariant: drivers with `transport: { local_command }`
|
|
5
|
+
* MUST be invoked through execFile (NO shell, NO pipes, NO redirects).
|
|
6
|
+
*
|
|
7
|
+
* This module exposes ONE function — execLocalCommand — which:
|
|
8
|
+
* 1. Asserts the transport is { local_command: { binary, args[] } }
|
|
9
|
+
* (the manifest validator already structurally enforces this; this
|
|
10
|
+
* is defense-in-depth at runtime).
|
|
11
|
+
* 2. Rejects any args entry that is not a plain string.
|
|
12
|
+
* 3. Invokes node:child_process.execFile (NOT child_process.exec, NOT
|
|
13
|
+
* spawn with shell:true).
|
|
14
|
+
*
|
|
15
|
+
* Grep guard (TD-05): the test verify-proof-local-command-security.test.ts
|
|
16
|
+
* statically asserts that exec.mjs imports execFile from
|
|
17
|
+
* 'node:child_process' and never references child_process.exec / spawn
|
|
18
|
+
* with shell:true.
|
|
19
|
+
*/
|
|
20
|
+
import { execFile } from 'node:child_process';
|
|
21
|
+
import { promisify } from 'node:util';
|
|
22
|
+
const execFileAsync = promisify(execFile);
|
|
23
|
+
/**
|
|
24
|
+
* Type-check that a transport is the structured local_command variant.
|
|
25
|
+
* @param {unknown} transport
|
|
26
|
+
* @returns {transport is {local_command: {binary: string, args: string[]}}}
|
|
27
|
+
*/
|
|
28
|
+
function isStructuredLocalCommand(transport) {
|
|
29
|
+
if (transport === null || typeof transport !== 'object' || Array.isArray(transport))
|
|
30
|
+
return false;
|
|
31
|
+
const obj = /** @type {Record<string, unknown>} */ (transport);
|
|
32
|
+
if (obj.local_command === null || typeof obj.local_command !== 'object')
|
|
33
|
+
return false;
|
|
34
|
+
const lc = /** @type {Record<string, unknown>} */ (obj.local_command);
|
|
35
|
+
if (typeof lc.binary !== 'string')
|
|
36
|
+
return false;
|
|
37
|
+
if (!Array.isArray(lc.args))
|
|
38
|
+
return false;
|
|
39
|
+
for (const a of lc.args) {
|
|
40
|
+
if (typeof a !== 'string')
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Execute a manifest's local_command transport via execFile (no shell).
|
|
47
|
+
* Throws if the transport is not the structured variant.
|
|
48
|
+
*
|
|
49
|
+
* @param {{transport: unknown}} manifest
|
|
50
|
+
* @param {string[]} [extraArgs] — appended to manifest.transport.local_command.args.
|
|
51
|
+
* @param {{cwd?: string, env?: Record<string,string>, timeout?: number}} [options]
|
|
52
|
+
* @returns {Promise<{stdout: string, stderr: string}>}
|
|
53
|
+
*/
|
|
54
|
+
export async function execLocalCommand(manifest, extraArgs = [], options = {}) {
|
|
55
|
+
const transport = manifest.transport;
|
|
56
|
+
if (!isStructuredLocalCommand(transport)) {
|
|
57
|
+
throw new Error(`execLocalCommand: transport is not a structured local_command — refusing to invoke. Got: ${JSON.stringify(transport)}`);
|
|
58
|
+
}
|
|
59
|
+
const { binary, args } = transport.local_command;
|
|
60
|
+
for (const arg of extraArgs) {
|
|
61
|
+
if (typeof arg !== 'string') {
|
|
62
|
+
throw new Error(`execLocalCommand: extraArgs must be strings, got ${typeof arg}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return execFileAsync(binary, [...args, ...extraArgs], {
|
|
66
|
+
cwd: options.cwd,
|
|
67
|
+
env: options.env,
|
|
68
|
+
timeout: options.timeout,
|
|
69
|
+
// Explicit — never pass shell:true. execFile defaults to no shell, but
|
|
70
|
+
// we surface the invariant in code for grep-guard purposes.
|
|
71
|
+
shell: false,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=exec.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/exec.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEzC;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,SAAS;IAC1C,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAA;IACjG,MAAM,GAAG,GAAG,sCAAsC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9D,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,EAAE,GAAG,sCAAsC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACrE,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;IACxC,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE;IAC5E,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;IACpC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACd,4FAA4F,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CACvH,CAAA;IACF,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,aAAa,CAAA;IAChD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oDAAoD,OAAO,GAAG,EAAE,CAAC,CAAA;QAClF,CAAC;IACF,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,EAAE;QACrD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,uEAAuE;QACvE,4DAA4D;QAC5D,KAAK,EAAE,KAAK;KACZ,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/index.mjs"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* idl/index.mjs — framework-side re-export of the IDL v1 runtime registry.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth lives at packages/framework/src/driver-sdk/idl.ts
|
|
5
|
+
* (inlined in 0.8.5 — originally `@aperant/driver-sdk`). This file
|
|
6
|
+
* re-exports those runtime values so existing callers (bundled drivers,
|
|
7
|
+
* resolver, driver-doctor, conformance kit) keep working without a
|
|
8
|
+
* refactor of every callsite.
|
|
9
|
+
*
|
|
10
|
+
* If you add a verb, edit packages/framework/src/driver-sdk/idl.ts.
|
|
11
|
+
*/
|
|
12
|
+
export { ASSERTION_VERBS, ASYNC_VERBS, EVIDENCE_VERBS, IDL_VERB_ARGS, IDL_VERB_NAMES, INTERACTION_VERBS, isVerbResult, LIFECYCLE_VERBS, validateVerbArgs, } from '@aperant/framework/driver-sdk';
|
|
13
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/index.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACN,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,gBAAgB,GAChB,MAAM,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* idl/types.ts — re-export the SDK's IDL types for framework-internal use.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth lives at packages/framework/src/driver-sdk/idl.ts
|
|
5
|
+
* (inlined in 0.8.5). Framework code imports from here so future moves
|
|
6
|
+
* (e.g. an internal-only IDL extension or re-extraction) only touch this
|
|
7
|
+
* re-export, not every call site.
|
|
8
|
+
*/
|
|
9
|
+
export type { AssertNetworkArgs, AssertOutputArgs, AssertTextArgs, AssertVisibleArgs, AwaitSignalArgs, CaptureLogsArgs, ClickArgs, DomDumpArgs, DragDropArgs, DriverModule, DumpStateArgs, ExecuteJsArgs, Handle, IdlVerbName, KeyArgs, LaunchArgs, NavigateArgs, RecordVideoArgs, ScreenshotArgs, SelectArgs, SwipeArgs, SwitchContextArgs, Target, TargetKind, TeardownArgs, TriggerArgs, TypeArgs, UploadFileArgs, VerbResult, WaitForEventArgs, WaitForIdleArgs, } from '@aperant/framework/driver-sdk';
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACX,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,MAAM,EACN,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,eAAe,GACf,MAAM,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* idl/types.ts — re-export the SDK's IDL types for framework-internal use.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth lives at packages/framework/src/driver-sdk/idl.ts
|
|
5
|
+
* (inlined in 0.8.5). Framework code imports from here so future moves
|
|
6
|
+
* (e.g. an internal-only IDL extension or re-extraction) only touch this
|
|
7
|
+
* re-export, not every call site.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Read the bundled manifest-schema.json. */
|
|
2
|
+
export function loadManifestSchema(): any;
|
|
3
|
+
/**
|
|
4
|
+
* Validate a manifest object against the bundled schema.
|
|
5
|
+
*
|
|
6
|
+
* @param {unknown} manifest — usually JSON.parse(manifest.json contents).
|
|
7
|
+
* @param {object} [schema] — override the bundled schema (used by tests).
|
|
8
|
+
* @returns {{valid: true} | {valid: false, errors: Array<{path: string, message: string}>}}
|
|
9
|
+
*/
|
|
10
|
+
export function validateManifest(manifest: unknown, schema?: object): {
|
|
11
|
+
valid: true;
|
|
12
|
+
} | {
|
|
13
|
+
valid: false;
|
|
14
|
+
errors: Array<{
|
|
15
|
+
path: string;
|
|
16
|
+
message: string;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=manifest-validator.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-validator.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/manifest-validator.mjs"],"names":[],"mappings":"AA2BA,6CAA6C;AAC7C,0CAKC;AAED;;;;;;GAMG;AACH,2CAJW,OAAO,WACP,MAAM,GACJ;IAAC,KAAK,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAQ1F"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* manifest-validator.mjs — hand-rolled JSON-Schema subset validator.
|
|
3
|
+
*
|
|
4
|
+
* Validates driver manifests against manifest-schema.json. Implements
|
|
5
|
+
* exactly the JSON-Schema keywords we need:
|
|
6
|
+
*
|
|
7
|
+
* type / required / properties / items / enum / const / pattern / oneOf
|
|
8
|
+
*
|
|
9
|
+
* Returns { valid: true } or { valid: false, errors: [{ path, message }] }
|
|
10
|
+
* where `path` is a JSON-pointer (`/transport/local_command/binary`).
|
|
11
|
+
*
|
|
12
|
+
* No external deps — keeps the validator installable as `dist/` with the
|
|
13
|
+
* framework package and avoids dragging ajv (or any v5+ JSON-Schema
|
|
14
|
+
* validator) into the runtime surface for ~80 lines of validator code per
|
|
15
|
+
* AC15. We don't need allOf / anyOf / definitions — manifest-schema.json
|
|
16
|
+
* is intentionally a thin contract.
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync } from 'node:fs';
|
|
19
|
+
import { dirname, join } from 'node:path';
|
|
20
|
+
import { fileURLToPath } from 'node:url';
|
|
21
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
/** Lazy-loaded JSON-Schema (read once on first call). */
|
|
23
|
+
let cachedSchema = null;
|
|
24
|
+
/** Read the bundled manifest-schema.json. */
|
|
25
|
+
export function loadManifestSchema() {
|
|
26
|
+
if (cachedSchema !== null)
|
|
27
|
+
return cachedSchema;
|
|
28
|
+
const schemaPath = join(__dirname, 'manifest-schema.json');
|
|
29
|
+
cachedSchema = JSON.parse(readFileSync(schemaPath, 'utf-8'));
|
|
30
|
+
return cachedSchema;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate a manifest object against the bundled schema.
|
|
34
|
+
*
|
|
35
|
+
* @param {unknown} manifest — usually JSON.parse(manifest.json contents).
|
|
36
|
+
* @param {object} [schema] — override the bundled schema (used by tests).
|
|
37
|
+
* @returns {{valid: true} | {valid: false, errors: Array<{path: string, message: string}>}}
|
|
38
|
+
*/
|
|
39
|
+
export function validateManifest(manifest, schema) {
|
|
40
|
+
const root = schema ?? loadManifestSchema();
|
|
41
|
+
const errors = [];
|
|
42
|
+
validateNode(manifest, root, '', errors);
|
|
43
|
+
if (errors.length === 0)
|
|
44
|
+
return { valid: true };
|
|
45
|
+
return { valid: false, errors };
|
|
46
|
+
}
|
|
47
|
+
/** Type check — JSON-Schema's union of "string", "number", "object", "array", "boolean", "null". */
|
|
48
|
+
function checkType(value, type) {
|
|
49
|
+
if (type === 'string')
|
|
50
|
+
return typeof value === 'string';
|
|
51
|
+
if (type === 'number')
|
|
52
|
+
return typeof value === 'number' && !Number.isNaN(value);
|
|
53
|
+
if (type === 'integer')
|
|
54
|
+
return typeof value === 'number' && Number.isInteger(value);
|
|
55
|
+
if (type === 'boolean')
|
|
56
|
+
return typeof value === 'boolean';
|
|
57
|
+
if (type === 'null')
|
|
58
|
+
return value === null;
|
|
59
|
+
if (type === 'array')
|
|
60
|
+
return Array.isArray(value);
|
|
61
|
+
if (type === 'object') {
|
|
62
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Human-readable name for the actual shape of a value. Distinguishes
|
|
68
|
+
* `null`, `array`, and plain `object` — JS `typeof` reports all three as
|
|
69
|
+
* `'object'`, which makes error messages like "expected type object, got
|
|
70
|
+
* object" misleading.
|
|
71
|
+
*
|
|
72
|
+
* @param {unknown} value
|
|
73
|
+
* @returns {string}
|
|
74
|
+
*/
|
|
75
|
+
function describeType(value) {
|
|
76
|
+
if (value === null)
|
|
77
|
+
return 'null';
|
|
78
|
+
if (Array.isArray(value))
|
|
79
|
+
return 'array';
|
|
80
|
+
return typeof value;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Recursive validator. `errors` is mutated.
|
|
84
|
+
*
|
|
85
|
+
* @param {unknown} value
|
|
86
|
+
* @param {object} schema
|
|
87
|
+
* @param {string} path — JSON-pointer
|
|
88
|
+
* @param {Array<{path: string, message: string}>} errors
|
|
89
|
+
*/
|
|
90
|
+
function validateNode(value, schema, path, errors) {
|
|
91
|
+
// const
|
|
92
|
+
if ('const' in schema) {
|
|
93
|
+
if (value !== schema.const) {
|
|
94
|
+
errors.push({
|
|
95
|
+
path: path || '/',
|
|
96
|
+
message: `expected const ${JSON.stringify(schema.const)}, got ${JSON.stringify(value)}`,
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// type
|
|
102
|
+
if (schema.type !== undefined) {
|
|
103
|
+
const types = Array.isArray(schema.type) ? schema.type : [schema.type];
|
|
104
|
+
if (!types.some((t) => checkType(value, t))) {
|
|
105
|
+
errors.push({
|
|
106
|
+
path: path || '/',
|
|
107
|
+
message: `expected type ${types.join('|')}, got ${describeType(value)}`,
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// enum
|
|
113
|
+
if (Array.isArray(schema.enum)) {
|
|
114
|
+
if (!schema.enum.includes(value)) {
|
|
115
|
+
errors.push({
|
|
116
|
+
path: path || '/',
|
|
117
|
+
message: `value ${JSON.stringify(value)} not in enum [${schema.enum.join(', ')}]`,
|
|
118
|
+
});
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// pattern
|
|
123
|
+
if (typeof schema.pattern === 'string' && typeof value === 'string') {
|
|
124
|
+
const re = new RegExp(schema.pattern);
|
|
125
|
+
if (!re.test(value)) {
|
|
126
|
+
errors.push({
|
|
127
|
+
path: path || '/',
|
|
128
|
+
message: `value ${JSON.stringify(value)} does not match pattern ${schema.pattern}`,
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// oneOf
|
|
134
|
+
if (Array.isArray(schema.oneOf)) {
|
|
135
|
+
let matchCount = 0;
|
|
136
|
+
const branchErrors = [];
|
|
137
|
+
for (let i = 0; i < schema.oneOf.length; i++) {
|
|
138
|
+
const sub = schema.oneOf[i];
|
|
139
|
+
const subErrors = [];
|
|
140
|
+
validateNode(value, sub, path, subErrors);
|
|
141
|
+
if (subErrors.length === 0)
|
|
142
|
+
matchCount++;
|
|
143
|
+
else
|
|
144
|
+
branchErrors.push({ branch: i, errors: subErrors });
|
|
145
|
+
}
|
|
146
|
+
if (matchCount !== 1) {
|
|
147
|
+
errors.push({
|
|
148
|
+
path: path || '/',
|
|
149
|
+
message: matchCount === 0
|
|
150
|
+
? `oneOf: value matched no branch (${branchErrors.length} branches tried)`
|
|
151
|
+
: `oneOf: value matched ${matchCount} branches (must match exactly 1)`,
|
|
152
|
+
});
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// object validation
|
|
157
|
+
if (checkType(value, 'object')) {
|
|
158
|
+
const obj = /** @type {Record<string, unknown>} */ (value);
|
|
159
|
+
if (Array.isArray(schema.required)) {
|
|
160
|
+
for (const key of schema.required) {
|
|
161
|
+
if (!(key in obj)) {
|
|
162
|
+
errors.push({ path: `${path}/${key}`, message: `required property "${key}" missing` });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (schema.properties && typeof schema.properties === 'object') {
|
|
167
|
+
for (const [key, subSchema] of Object.entries(schema.properties)) {
|
|
168
|
+
if (key in obj) {
|
|
169
|
+
validateNode(obj[key], /** @type {object} */ (subSchema), `${path}/${key}`, errors);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// array validation
|
|
175
|
+
if (checkType(value, 'array') && schema.items) {
|
|
176
|
+
const arr = /** @type {unknown[]} */ (value);
|
|
177
|
+
for (let i = 0; i < arr.length; i++) {
|
|
178
|
+
validateNode(arr[i], schema.items, `${path}/${i}`, errors);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=manifest-validator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-validator.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/manifest-validator.mjs"],"names":[],"mappings":"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"}
|