@aperant/framework 0.8.1 → 0.8.4
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 +287 -1
- package/agents/apt-planner.md +5 -4
- 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/detect-runtime.d.mts +6 -0
- package/dist/cli/commands/detect-runtime.d.mts.map +1 -0
- package/dist/cli/commands/detect-runtime.mjs +136 -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/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/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 +161 -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 +14 -0
- package/dist/cli/verify-proof/idl/index.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/types.d.ts +9 -0
- package/dist/cli/verify-proof/idl/types.d.ts.map +1 -0
- package/dist/cli/verify-proof/idl/types.js +9 -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 +43 -0
- package/dist/cli/verify-proof/resolver.d.mts.map +1 -0
- package/dist/cli/verify-proof/resolver.mjs +160 -0
- package/dist/cli/verify-proof/resolver.mjs.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts +27 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.mjs +116 -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/plugin/.claude-plugin/plugin.json +3 -1
- package/dist/plugin/agents/apt-planner.md +5 -4
- 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 +23 -5
- package/dist/plugin/skills/apt-plan/adapters/conductor.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-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 +65 -16
- 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 +48 -1
- package/dist/plugin/skills/apt-zoom-out/SKILL.md +3 -3
- 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/package.json +134 -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 +23 -5
- package/skills/apt-plan/adapters/conductor.md +1 -1
- package/skills/apt-planner.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-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 +65 -16
- 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 +48 -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/detect-runtime.mjs +134 -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/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/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 +162 -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 +24 -0
- package/src/cli/verify-proof/idl/types.ts +41 -0
- package/src/cli/verify-proof/manifest-schema.json +211 -0
- package/src/cli/verify-proof/manifest-validator.mjs +184 -0
- package/src/cli/verify-proof/resolver.mjs +163 -0
- package/src/cli/verify-proof/runtime-detect.mjs +122 -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 +19 -5
- package/workflows/verify-proof.md +56 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-detect.mjs","sourceRoot":"","sources":["../../../src/cli/install/runtime-detect.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC;QACC,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,CAAC,uBAAuB,EAAE,6BAA6B,CAAC;QACjE,KAAK,EAAE,aAAa;KACpB;IACD;QACC,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime-detect.mjs","sourceRoot":"","sources":["../../../src/cli/install/runtime-detect.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC;QACC,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,CAAC,uBAAuB,EAAE,6BAA6B,CAAC;QACjE,KAAK,EAAE,aAAa;KACpB;IACD;QACC,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,KAAK,EAAE,OAAO;KACd;IACD;QACC,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,CAAC,uBAAuB,CAAC;QAClC,KAAK,EAAE,QAAQ;KACf;IACD;QACC,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,CAAC,uBAAuB,CAAC;QAClC,KAAK,EAAE,YAAY;KACnB;IACD;QACC,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,CAAC,uBAAuB,CAAC;QAClC,KAAK,EAAE,UAAU;KACjB;IACD;QACC,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,CAAC,mBAAmB,EAAE,YAAY,EAAE,aAAa,CAAC;QAC3D,KAAK,EAAE,IAAI;KACX;IACD;QACC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,KAAK,EAAE,MAAM;QACb,kEAAkE;QAClE,gEAAgE;QAChE,6DAA6D;QAC7D,YAAY,EAAE,WAAW;KACzB;IACD;QACC,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,CAAC,iCAAiC,CAAC;QAC5C,KAAK,EAAE,SAAS;KAChB;IACD;QACC,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,CAAC,0BAA0B,CAAC;QACrC,KAAK,EAAE,aAAa;KACpB;IACD;QACC,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,KAAK,EAAE,UAAU;KACjB;IACD;QACC,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,CAAC,sBAAsB,CAAC;QACjC,KAAK,EAAE,SAAS;KAChB;IACD;QACC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,KAAK,EAAE,MAAM;KACb;IACD;QACC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,KAAK,EAAE,MAAM;KACb;IACD;QACC,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,QAAQ;QACrB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,KAAK,EAAE,OAAO;KACd;IACD;QACC,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,CAAC,wBAAwB,CAAC;QACnC,KAAK,EAAE,WAAW;KAClB;CACD,CAAC,CAAA;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE;IAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAA;AACjD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,SAAS;IACxC,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACd,SAAQ;QACT,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACf,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAS;IAChD,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;QACtE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAQ;QACvC,IAAI,CAAC;YACJ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC;YACR,0DAA0D;QAC3D,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC"}
|
|
@@ -1,30 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Probe the codex legacy install tree at `<targetDir
|
|
2
|
+
* Probe the codex legacy install tree at `<targetDir>/<LEGACY.install_root>`
|
|
3
|
+
* (currently `.codex/` after the v0.8.2 registry inversion — the v0.7/v0.8
|
|
4
|
+
* misdirect topology).
|
|
3
5
|
*
|
|
4
6
|
* @param {string} targetDir
|
|
5
7
|
* @returns {LegacyCodexDetection}
|
|
6
8
|
*/
|
|
7
9
|
export function detectLegacyCodexTree(targetDir: string): LegacyCodexDetection;
|
|
8
10
|
/**
|
|
9
|
-
* Clean up the legacy
|
|
11
|
+
* Clean up the legacy install tree at `<targetDir>/<LEGACY.install_root>`
|
|
12
|
+
* if it looks orphaned. Post v0.8.2 the codex legacy root is `.codex/`
|
|
13
|
+
* with framework files at `agents/<file>.md` + `commands/<file>.md` +
|
|
14
|
+
* `apt-file-manifest.json`.
|
|
10
15
|
*
|
|
11
16
|
* Branches:
|
|
12
17
|
* 1. `present: false` OR `frameworkFiles.length === 0` → no-op,
|
|
13
18
|
* `{ ran: false, reason: 'no-legacy' }`.
|
|
14
|
-
* 2. `hasManifest: true`
|
|
15
|
-
*
|
|
19
|
+
* 2. `hasManifest: true` AND `LEGACY.honor_manifest !== false`
|
|
20
|
+
* (default true) → managed install, no-op,
|
|
21
|
+
* `{ ran: false, reason: 'managed' }`. When `honor_manifest: false`
|
|
22
|
+
* (known-dead surface like the v0.7/v0.8 codex misdirect) the
|
|
23
|
+
* manifest is treated as orphan and removed alongside framework
|
|
24
|
+
* files.
|
|
16
25
|
* 3. Otherwise: per-file `unlinkSync` each framework-owned file;
|
|
17
|
-
* `rmdirSync` any
|
|
18
|
-
* `.agents/
|
|
19
|
-
*
|
|
26
|
+
* `rmdirSync` any subdirectory left empty after the unlinks (e.g.
|
|
27
|
+
* `.codex/agents/`, `.codex/commands/`); sweep the install_root
|
|
28
|
+
* itself only if it is fully empty after the per-file pass; sweep
|
|
29
|
+
* the install_root's parent only if it too became empty (relevant
|
|
30
|
+
* for legacy topologies two levels deep, e.g. the pre-0.7
|
|
31
|
+
* `.agents/skills/` codex layout).
|
|
20
32
|
*
|
|
21
33
|
* Returns `{ ran: true, removed, retained, rmdirs }` on the cleanup
|
|
22
34
|
* branch:
|
|
23
35
|
* - `removed` — relative paths under `install_root` that were unlinked.
|
|
24
36
|
* - `retained` — relative paths under `install_root` that were NOT
|
|
25
|
-
* removed (user-added skills / files not in the legacy set
|
|
26
|
-
*
|
|
27
|
-
*
|
|
37
|
+
* removed (user-added skills / files not in the legacy set, e.g.
|
|
38
|
+
* `.codex/config.toml`).
|
|
39
|
+
* - `rmdirs` — absolute paths of directories that were removed,
|
|
40
|
+
* in removal order.
|
|
28
41
|
*
|
|
29
42
|
* Atomicity: per-file unlink is non-atomic. A partial-failure scenario
|
|
30
43
|
* (process killed mid-loop) is tolerable — the next `init` run will
|
|
@@ -50,7 +63,8 @@ export function runLegacyCleanup({ targetDir, dryRun }: {
|
|
|
50
63
|
};
|
|
51
64
|
export type LegacyCodexDetection = {
|
|
52
65
|
/**
|
|
53
|
-
* True when
|
|
66
|
+
* True when the legacy install_root
|
|
67
|
+
* (currently `.codex/`) exists.
|
|
54
68
|
*/
|
|
55
69
|
present: boolean;
|
|
56
70
|
/**
|
|
@@ -75,9 +89,15 @@ export type LegacyCodexDetection = {
|
|
|
75
89
|
/**
|
|
76
90
|
* Whether an
|
|
77
91
|
* `apt-file-manifest.json` is
|
|
78
|
-
* present at install_root
|
|
79
|
-
*
|
|
80
|
-
*
|
|
92
|
+
* present at install_root. When the
|
|
93
|
+
* legacy entry has
|
|
94
|
+
* `honor_manifest: true` (default)
|
|
95
|
+
* this signals a managed install
|
|
96
|
+
* and cleanup no-ops; when
|
|
97
|
+
* `honor_manifest: false` the
|
|
98
|
+
* manifest is treated as orphan
|
|
99
|
+
* and removed alongside framework
|
|
100
|
+
* files.
|
|
81
101
|
*/
|
|
82
102
|
hasManifest: boolean;
|
|
83
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-migrate.d.mts","sourceRoot":"","sources":["../../../src/cli/install/runtime-migrate.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-migrate.d.mts","sourceRoot":"","sources":["../../../src/cli/install/runtime-migrate.mjs"],"names":[],"mappings":"AAuGA;;;;;;;GAOG;AACH,iDAHW,MAAM,GACJ,oBAAoB,CA0BhC;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wDANW;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAEjD,GAAC,GAAK;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;CAAE,GAC/C;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA2F5E;;;;;;aAvPa,OAAO;;;;;;oBAEP,MAAM,EAAE;;;;;;;;eAGR,MAAM,EAAE;;;;;mBAKR,OAAO;;;;;;;;;;;;;;iBAEP,OAAO"}
|
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
* install/runtime-migrate.mjs — at-install cleanup of legacy install
|
|
3
3
|
* trees the framework no longer owns (FRAMEWORK-BUG-021).
|
|
4
4
|
*
|
|
5
|
-
* Codex
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* reads.
|
|
5
|
+
* Codex shuffled install roots twice:
|
|
6
|
+
* - Pre-0.7: installed at `.agents/skills/` (commit 1a8dd8a8).
|
|
7
|
+
* - v0.7/v0.8: moved to `.codex/agents/` + `.codex/commands/` — a
|
|
8
|
+
* misdirect, since Codex CLI 0.132.0 doesn't discover skills there.
|
|
9
|
+
* - v0.8.2 (this fix): moved back to `.agents/skills/<folder>/SKILL.md`
|
|
10
|
+
* (Codex's documented surface). The v0.7/v0.8 `.codex/` markdown
|
|
11
|
+
* tree is now the legacy target — `LEGACY_INSTALL_PATHS.codex` was
|
|
12
|
+
* re-pointed accordingly.
|
|
14
13
|
*
|
|
15
14
|
* `runLegacyCleanup` runs once per `apt-tools init` when codex is in the
|
|
16
15
|
* requested runtime set. It is conservative by default:
|
|
@@ -20,8 +19,11 @@
|
|
|
20
19
|
* preserved. If anything beyond the known framework set remains,
|
|
21
20
|
* `retained[]` lists those paths.
|
|
22
21
|
* - A present-and-current `apt-file-manifest.json` is treated as the
|
|
23
|
-
* authoritative "this is a managed install, leave it alone" signal
|
|
24
|
-
* the
|
|
22
|
+
* authoritative "this is a managed install, leave it alone" signal
|
|
23
|
+
* — but ONLY when the legacy entry has `honor_manifest: true` (the
|
|
24
|
+
* default). When `honor_manifest: false` (the current codex entry,
|
|
25
|
+
* because `.codex/` is known-dead), the manifest is removed alongside
|
|
26
|
+
* framework files.
|
|
25
27
|
* - The caller can suppress cleanup entirely via `--keep-legacy` at the
|
|
26
28
|
* init.mjs site; the function itself is dumb about flags.
|
|
27
29
|
*/
|
|
@@ -31,7 +33,8 @@ import { LEGACY_INSTALL_PATHS } from './legacy-paths.mjs';
|
|
|
31
33
|
import { MANIFEST_FILENAME } from './manifest.mjs';
|
|
32
34
|
/**
|
|
33
35
|
* @typedef {Object} LegacyCodexDetection
|
|
34
|
-
* @property {boolean} present True when
|
|
36
|
+
* @property {boolean} present True when the legacy install_root
|
|
37
|
+
* (currently `.codex/`) exists.
|
|
35
38
|
* @property {string[]} frameworkFiles Subset of `framework_files` that
|
|
36
39
|
* actually exist on disk (relative
|
|
37
40
|
* to install_root).
|
|
@@ -44,9 +47,15 @@ import { MANIFEST_FILENAME } from './manifest.mjs';
|
|
|
44
47
|
* stamp is present.
|
|
45
48
|
* @property {boolean} hasManifest Whether an
|
|
46
49
|
* `apt-file-manifest.json` is
|
|
47
|
-
* present at install_root
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
+
* present at install_root. When the
|
|
51
|
+
* legacy entry has
|
|
52
|
+
* `honor_manifest: true` (default)
|
|
53
|
+
* this signals a managed install
|
|
54
|
+
* and cleanup no-ops; when
|
|
55
|
+
* `honor_manifest: false` the
|
|
56
|
+
* manifest is treated as orphan
|
|
57
|
+
* and removed alongside framework
|
|
58
|
+
* files.
|
|
50
59
|
*/
|
|
51
60
|
const LEGACY = LEGACY_INSTALL_PATHS.codex;
|
|
52
61
|
/**
|
|
@@ -91,7 +100,9 @@ function walkRelative(dir) {
|
|
|
91
100
|
return out;
|
|
92
101
|
}
|
|
93
102
|
/**
|
|
94
|
-
* Probe the codex legacy install tree at `<targetDir
|
|
103
|
+
* Probe the codex legacy install tree at `<targetDir>/<LEGACY.install_root>`
|
|
104
|
+
* (currently `.codex/` after the v0.8.2 registry inversion — the v0.7/v0.8
|
|
105
|
+
* misdirect topology).
|
|
95
106
|
*
|
|
96
107
|
* @param {string} targetDir
|
|
97
108
|
* @returns {LegacyCodexDetection}
|
|
@@ -138,25 +149,36 @@ function rmEmptyDir(dir) {
|
|
|
138
149
|
}
|
|
139
150
|
}
|
|
140
151
|
/**
|
|
141
|
-
* Clean up the legacy
|
|
152
|
+
* Clean up the legacy install tree at `<targetDir>/<LEGACY.install_root>`
|
|
153
|
+
* if it looks orphaned. Post v0.8.2 the codex legacy root is `.codex/`
|
|
154
|
+
* with framework files at `agents/<file>.md` + `commands/<file>.md` +
|
|
155
|
+
* `apt-file-manifest.json`.
|
|
142
156
|
*
|
|
143
157
|
* Branches:
|
|
144
158
|
* 1. `present: false` OR `frameworkFiles.length === 0` → no-op,
|
|
145
159
|
* `{ ran: false, reason: 'no-legacy' }`.
|
|
146
|
-
* 2. `hasManifest: true`
|
|
147
|
-
*
|
|
160
|
+
* 2. `hasManifest: true` AND `LEGACY.honor_manifest !== false`
|
|
161
|
+
* (default true) → managed install, no-op,
|
|
162
|
+
* `{ ran: false, reason: 'managed' }`. When `honor_manifest: false`
|
|
163
|
+
* (known-dead surface like the v0.7/v0.8 codex misdirect) the
|
|
164
|
+
* manifest is treated as orphan and removed alongside framework
|
|
165
|
+
* files.
|
|
148
166
|
* 3. Otherwise: per-file `unlinkSync` each framework-owned file;
|
|
149
|
-
* `rmdirSync` any
|
|
150
|
-
* `.agents/
|
|
151
|
-
*
|
|
167
|
+
* `rmdirSync` any subdirectory left empty after the unlinks (e.g.
|
|
168
|
+
* `.codex/agents/`, `.codex/commands/`); sweep the install_root
|
|
169
|
+
* itself only if it is fully empty after the per-file pass; sweep
|
|
170
|
+
* the install_root's parent only if it too became empty (relevant
|
|
171
|
+
* for legacy topologies two levels deep, e.g. the pre-0.7
|
|
172
|
+
* `.agents/skills/` codex layout).
|
|
152
173
|
*
|
|
153
174
|
* Returns `{ ran: true, removed, retained, rmdirs }` on the cleanup
|
|
154
175
|
* branch:
|
|
155
176
|
* - `removed` — relative paths under `install_root` that were unlinked.
|
|
156
177
|
* - `retained` — relative paths under `install_root` that were NOT
|
|
157
|
-
* removed (user-added skills / files not in the legacy set
|
|
158
|
-
*
|
|
159
|
-
*
|
|
178
|
+
* removed (user-added skills / files not in the legacy set, e.g.
|
|
179
|
+
* `.codex/config.toml`).
|
|
180
|
+
* - `rmdirs` — absolute paths of directories that were removed,
|
|
181
|
+
* in removal order.
|
|
160
182
|
*
|
|
161
183
|
* Atomicity: per-file unlink is non-atomic. A partial-failure scenario
|
|
162
184
|
* (process killed mid-loop) is tolerable — the next `init` run will
|
|
@@ -173,7 +195,14 @@ export function runLegacyCleanup({ targetDir, dryRun = false }) {
|
|
|
173
195
|
if (!detection.present || detection.frameworkFiles.length === 0) {
|
|
174
196
|
return { ran: false, reason: 'no-legacy' };
|
|
175
197
|
}
|
|
176
|
-
|
|
198
|
+
// `honor_manifest: false` means the legacy install_root is a known-dead
|
|
199
|
+
// surface (the v0.7/v0.8 codex misdirect). A manifest sitting there is
|
|
200
|
+
// by definition stale — fall through and remove it alongside framework
|
|
201
|
+
// files. `honor_manifest: true` (default) preserves the managed-install
|
|
202
|
+
// safety for legacy roots that could legitimately re-host a managed
|
|
203
|
+
// install.
|
|
204
|
+
const honorManifest = LEGACY.honor_manifest !== false;
|
|
205
|
+
if (detection.hasManifest && honorManifest) {
|
|
177
206
|
return { ran: false, reason: 'managed' };
|
|
178
207
|
}
|
|
179
208
|
const installRoot = join(targetDir, LEGACY.install_root);
|
|
@@ -225,12 +254,16 @@ export function runLegacyCleanup({ targetDir, dryRun = false }) {
|
|
|
225
254
|
if (rmEmptyDir(abs))
|
|
226
255
|
rmdirs.push(abs);
|
|
227
256
|
}
|
|
228
|
-
// Sweep
|
|
229
|
-
// pass — preserves any user-added
|
|
257
|
+
// Sweep the legacy install_root only if fully empty after the per-file
|
|
258
|
+
// pass — preserves any user-added content under it (e.g. `.codex/config.toml`
|
|
259
|
+
// when LEGACY.install_root is `.codex/`).
|
|
230
260
|
if (rmEmptyDir(installRoot)) {
|
|
231
261
|
rmdirs.push(installRoot);
|
|
232
|
-
// Sweep
|
|
233
|
-
//
|
|
262
|
+
// Sweep the install_root's parent only if it became empty too
|
|
263
|
+
// (relevant for legacy topologies whose install_root sits two
|
|
264
|
+
// levels deep, e.g. the pre-0.7 `.agents/skills/` codex layout).
|
|
265
|
+
// No-op when install_root is a top-level dir like `.codex/` —
|
|
266
|
+
// rmEmptyDir refuses to remove a non-empty project root.
|
|
234
267
|
const agentsRoot = dirname(installRoot);
|
|
235
268
|
if (rmEmptyDir(agentsRoot))
|
|
236
269
|
rmdirs.push(agentsRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-migrate.mjs","sourceRoot":"","sources":["../../../src/cli/install/runtime-migrate.mjs"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime-migrate.mjs","sourceRoot":"","sources":["../../../src/cli/install/runtime-migrate.mjs"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.mts","sourceRoot":"","sources":["../../../../src/cli/install/transforms/codex.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.mts","sourceRoot":"","sources":["../../../../src/cli/install/transforms/codex.mjs"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,qFAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,eAAe,EAAE,CA4BvD"}
|
|
@@ -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
|