@jeger-ai/opengantry 3.2.6 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/cli/commands/deps.d.ts +18 -0
- package/dist/cli/commands/deps.d.ts.map +1 -0
- package/dist/cli/commands/deps.js +63 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -6
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +8 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/interrogate.js +3 -3
- package/dist/cli/commands/interrogate.js.map +1 -1
- package/dist/cli/commands/ledger.d.ts +24 -0
- package/dist/cli/commands/ledger.d.ts.map +1 -0
- package/dist/cli/commands/ledger.js +88 -0
- package/dist/cli/commands/ledger.js.map +1 -0
- package/dist/cli/commands/mission.d.ts +6 -0
- package/dist/cli/commands/mission.d.ts.map +1 -1
- package/dist/cli/commands/mission.js +43 -3
- package/dist/cli/commands/mission.js.map +1 -1
- package/dist/cli/commands/perimeter.d.ts.map +1 -1
- package/dist/cli/commands/perimeter.js +4 -0
- package/dist/cli/commands/perimeter.js.map +1 -1
- package/dist/cli/commands/policy.d.ts +10 -0
- package/dist/cli/commands/policy.d.ts.map +1 -0
- package/dist/cli/commands/policy.js +49 -0
- package/dist/cli/commands/policy.js.map +1 -0
- package/dist/cli/commands/triage.d.ts.map +1 -1
- package/dist/cli/commands/triage.js +2 -1
- package/dist/cli/commands/triage.js.map +1 -1
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +2 -11
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/kernel.d.ts +10 -3
- package/dist/cli/kernel.d.ts.map +1 -1
- package/dist/cli/kernel.js +18 -2
- package/dist/cli/kernel.js.map +1 -1
- package/dist/cli/lib/adapter-preflight-checks.d.ts +55 -0
- package/dist/cli/lib/adapter-preflight-checks.d.ts.map +1 -0
- package/dist/cli/lib/adapter-preflight-checks.js +275 -0
- package/dist/cli/lib/adapter-preflight-checks.js.map +1 -0
- package/dist/cli/lib/attest-mission.d.ts.map +1 -1
- package/dist/cli/lib/attest-mission.js +7 -0
- package/dist/cli/lib/attest-mission.js.map +1 -1
- package/dist/cli/lib/break-glass.d.ts +1 -1
- package/dist/cli/lib/break-glass.d.ts.map +1 -1
- package/dist/cli/lib/break-glass.js +6 -0
- package/dist/cli/lib/break-glass.js.map +1 -1
- package/dist/cli/lib/command-boundary.d.ts +7 -3
- package/dist/cli/lib/command-boundary.d.ts.map +1 -1
- package/dist/cli/lib/command-boundary.js +20 -4
- package/dist/cli/lib/command-boundary.js.map +1 -1
- package/dist/cli/lib/constants.d.ts +13 -0
- package/dist/cli/lib/constants.d.ts.map +1 -1
- package/dist/cli/lib/constants.js +13 -0
- package/dist/cli/lib/constants.js.map +1 -1
- package/dist/cli/lib/defensive-profile-presets.d.ts +6 -0
- package/dist/cli/lib/defensive-profile-presets.d.ts.map +1 -1
- package/dist/cli/lib/defensive-profile-presets.js +15 -1
- package/dist/cli/lib/defensive-profile-presets.js.map +1 -1
- package/dist/cli/lib/deps/deps-fetch.d.ts +4 -0
- package/dist/cli/lib/deps/deps-fetch.d.ts.map +1 -0
- package/dist/cli/lib/deps/deps-fetch.js +16 -0
- package/dist/cli/lib/deps/deps-fetch.js.map +1 -0
- package/dist/cli/lib/deps/deps-resolve.d.ts +18 -0
- package/dist/cli/lib/deps/deps-resolve.d.ts.map +1 -0
- package/dist/cli/lib/deps/deps-resolve.js +66 -0
- package/dist/cli/lib/deps/deps-resolve.js.map +1 -0
- package/dist/cli/lib/deps/deps-slug.d.ts +5 -0
- package/dist/cli/lib/deps/deps-slug.d.ts.map +1 -0
- package/dist/cli/lib/deps/deps-slug.js +44 -0
- package/dist/cli/lib/deps/deps-slug.js.map +1 -0
- package/dist/cli/lib/doctor-adapter-preflight.d.ts +24 -0
- package/dist/cli/lib/doctor-adapter-preflight.d.ts.map +1 -0
- package/dist/cli/lib/doctor-adapter-preflight.js +98 -0
- package/dist/cli/lib/doctor-adapter-preflight.js.map +1 -0
- package/dist/cli/lib/doctor-core.d.ts +7 -1
- package/dist/cli/lib/doctor-core.d.ts.map +1 -1
- package/dist/cli/lib/doctor-core.js +36 -5
- package/dist/cli/lib/doctor-core.js.map +1 -1
- package/dist/cli/lib/doctor-integration.d.ts +2 -0
- package/dist/cli/lib/doctor-integration.d.ts.map +1 -1
- package/dist/cli/lib/doctor-integration.js +4 -2
- package/dist/cli/lib/doctor-integration.js.map +1 -1
- package/dist/cli/lib/doctor-preflight/eslint.d.ts +4 -0
- package/dist/cli/lib/doctor-preflight/eslint.d.ts.map +1 -0
- package/dist/cli/lib/doctor-preflight/eslint.js +41 -0
- package/dist/cli/lib/doctor-preflight/eslint.js.map +1 -0
- package/dist/cli/lib/doctor-preflight/index.d.ts +3 -0
- package/dist/cli/lib/doctor-preflight/index.d.ts.map +1 -0
- package/dist/cli/lib/doctor-preflight/index.js +3 -0
- package/dist/cli/lib/doctor-preflight/index.js.map +1 -0
- package/dist/cli/lib/doctor-preflight/tsc.d.ts +4 -0
- package/dist/cli/lib/doctor-preflight/tsc.d.ts.map +1 -0
- package/dist/cli/lib/doctor-preflight/tsc.js +42 -0
- package/dist/cli/lib/doctor-preflight/tsc.js.map +1 -0
- package/dist/cli/lib/doctor-substrate.d.ts +2 -2
- package/dist/cli/lib/doctor-substrate.d.ts.map +1 -1
- package/dist/cli/lib/doctor-types.d.ts +4 -4
- package/dist/cli/lib/doctor-types.d.ts.map +1 -1
- package/dist/cli/lib/draft-token.d.ts +3 -0
- package/dist/cli/lib/draft-token.d.ts.map +1 -1
- package/dist/cli/lib/draft-token.js +7 -0
- package/dist/cli/lib/draft-token.js.map +1 -1
- package/dist/cli/lib/gate-adapters/adapter-findings.d.ts +41 -0
- package/dist/cli/lib/gate-adapters/adapter-findings.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/adapter-findings.js +99 -0
- package/dist/cli/lib/gate-adapters/adapter-findings.js.map +1 -0
- package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts +14 -0
- package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/eslint-json-adapter.js +63 -0
- package/dist/cli/lib/gate-adapters/eslint-json-adapter.js.map +1 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts +10 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-id.js +12 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-id.js.map +1 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts +17 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-types.js +2 -0
- package/dist/cli/lib/gate-adapters/gate-adapter-types.js.map +1 -0
- package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts +4 -0
- package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js +12 -0
- package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js.map +1 -0
- package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts +5 -0
- package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/parsing-adapter.js +13 -0
- package/dist/cli/lib/gate-adapters/parsing-adapter.js.map +1 -0
- package/dist/cli/lib/gate-adapters/registry.d.ts +6 -0
- package/dist/cli/lib/gate-adapters/registry.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/registry.js +13 -0
- package/dist/cli/lib/gate-adapters/registry.js.map +1 -0
- package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts +36 -0
- package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/spawn-stream-core.js +99 -0
- package/dist/cli/lib/gate-adapters/spawn-stream-core.js.map +1 -0
- package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts +16 -0
- package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts.map +1 -0
- package/dist/cli/lib/gate-adapters/tsc-adapter.js +51 -0
- package/dist/cli/lib/gate-adapters/tsc-adapter.js.map +1 -0
- package/dist/cli/lib/gate-log-writer.d.ts +8 -0
- package/dist/cli/lib/gate-log-writer.d.ts.map +1 -1
- package/dist/cli/lib/gate-log-writer.js +35 -0
- package/dist/cli/lib/gate-log-writer.js.map +1 -1
- package/dist/cli/lib/gate.d.ts +2 -0
- package/dist/cli/lib/gate.d.ts.map +1 -1
- package/dist/cli/lib/gate.js +2 -2
- package/dist/cli/lib/gate.js.map +1 -1
- package/dist/cli/lib/git.d.ts +8 -2
- package/dist/cli/lib/git.d.ts.map +1 -1
- package/dist/cli/lib/git.js +14 -7
- package/dist/cli/lib/git.js.map +1 -1
- package/dist/cli/lib/gxt-config.d.ts +9 -0
- package/dist/cli/lib/gxt-config.d.ts.map +1 -1
- package/dist/cli/lib/gxt-config.js +16 -0
- package/dist/cli/lib/gxt-config.js.map +1 -1
- package/dist/cli/lib/gxt-error-codes.d.ts +12 -0
- package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
- package/dist/cli/lib/gxt-error-codes.js +12 -0
- package/dist/cli/lib/gxt-error-codes.js.map +1 -1
- package/dist/cli/lib/init-tutorial.js +3 -4
- package/dist/cli/lib/init-tutorial.js.map +1 -1
- package/dist/cli/lib/kpi-scan.js +5 -1
- package/dist/cli/lib/kpi-scan.js.map +1 -1
- package/dist/cli/lib/ledger/ledger-append.d.ts +14 -0
- package/dist/cli/lib/ledger/ledger-append.d.ts.map +1 -0
- package/dist/cli/lib/ledger/ledger-append.js +63 -0
- package/dist/cli/lib/ledger/ledger-append.js.map +1 -0
- package/dist/cli/lib/ledger/ledger-chain.d.ts +24 -0
- package/dist/cli/lib/ledger/ledger-chain.d.ts.map +1 -0
- package/dist/cli/lib/ledger/ledger-chain.js +101 -0
- package/dist/cli/lib/ledger/ledger-chain.js.map +1 -0
- package/dist/cli/lib/ledger/ledger-entry.d.ts +79 -0
- package/dist/cli/lib/ledger/ledger-entry.d.ts.map +1 -0
- package/dist/cli/lib/ledger/ledger-entry.js +36 -0
- package/dist/cli/lib/ledger/ledger-entry.js.map +1 -0
- package/dist/cli/lib/ledger/ledger-export.d.ts +28 -0
- package/dist/cli/lib/ledger/ledger-export.d.ts.map +1 -0
- package/dist/cli/lib/ledger/ledger-export.js +36 -0
- package/dist/cli/lib/ledger/ledger-export.js.map +1 -0
- package/dist/cli/lib/legislate-gate-options.d.ts +3 -4
- package/dist/cli/lib/legislate-gate-options.d.ts.map +1 -1
- package/dist/cli/lib/legislate-gate-options.js +9 -4
- package/dist/cli/lib/legislate-gate-options.js.map +1 -1
- package/dist/cli/lib/legislate-policy-warn.d.ts +3 -0
- package/dist/cli/lib/legislate-policy-warn.d.ts.map +1 -0
- package/dist/cli/lib/legislate-policy-warn.js +17 -0
- package/dist/cli/lib/legislate-policy-warn.js.map +1 -0
- package/dist/cli/lib/legislate.d.ts +3 -1
- package/dist/cli/lib/legislate.d.ts.map +1 -1
- package/dist/cli/lib/legislate.js +14 -12
- package/dist/cli/lib/legislate.js.map +1 -1
- package/dist/cli/lib/mcp-doctor.d.ts +18 -0
- package/dist/cli/lib/mcp-doctor.d.ts.map +1 -0
- package/dist/cli/lib/mcp-doctor.js +35 -0
- package/dist/cli/lib/mcp-doctor.js.map +1 -0
- package/dist/cli/lib/mcp-draft-legislation.d.ts.map +1 -1
- package/dist/cli/lib/mcp-draft-legislation.js +12 -7
- package/dist/cli/lib/mcp-draft-legislation.js.map +1 -1
- package/dist/cli/lib/mcp-execute-legislation.d.ts.map +1 -1
- package/dist/cli/lib/mcp-execute-legislation.js +1 -0
- package/dist/cli/lib/mcp-execute-legislation.js.map +1 -1
- package/dist/cli/lib/mcp-governance-shared.d.ts +3 -1
- package/dist/cli/lib/mcp-governance-shared.d.ts.map +1 -1
- package/dist/cli/lib/mcp-governance-shared.js.map +1 -1
- package/dist/cli/lib/mcp-interrogate.js +3 -3
- package/dist/cli/lib/mcp-interrogate.js.map +1 -1
- package/dist/cli/lib/mcp-org.d.ts +19 -0
- package/dist/cli/lib/mcp-org.d.ts.map +1 -0
- package/dist/cli/lib/mcp-org.js +51 -0
- package/dist/cli/lib/mcp-org.js.map +1 -0
- package/dist/cli/lib/mcp-runtime.d.ts +1 -1
- package/dist/cli/lib/mcp-runtime.d.ts.map +1 -1
- package/dist/cli/lib/mcp-runtime.js +1 -1
- package/dist/cli/lib/mcp-runtime.js.map +1 -1
- package/dist/cli/lib/mcp-start-orchestration.d.ts.map +1 -1
- package/dist/cli/lib/mcp-start-orchestration.js +1 -0
- package/dist/cli/lib/mcp-start-orchestration.js.map +1 -1
- package/dist/cli/lib/mcp-tools-register.d.ts.map +1 -1
- package/dist/cli/lib/mcp-tools-register.js +90 -17
- package/dist/cli/lib/mcp-tools-register.js.map +1 -1
- package/dist/cli/lib/mission-changed.d.ts +27 -0
- package/dist/cli/lib/mission-changed.d.ts.map +1 -0
- package/dist/cli/lib/mission-changed.js +107 -0
- package/dist/cli/lib/mission-changed.js.map +1 -0
- package/dist/cli/lib/missions/formatter.d.ts +1 -1
- package/dist/cli/lib/missions/formatter.d.ts.map +1 -1
- package/dist/cli/lib/missions/formatter.js +3 -0
- package/dist/cli/lib/missions/formatter.js.map +1 -1
- package/dist/cli/lib/missions/parser.d.ts +3 -1
- package/dist/cli/lib/missions/parser.d.ts.map +1 -1
- package/dist/cli/lib/missions/parser.js +16 -0
- package/dist/cli/lib/missions/parser.js.map +1 -1
- package/dist/cli/lib/msn-allocate.d.ts.map +1 -1
- package/dist/cli/lib/msn-allocate.js +17 -24
- package/dist/cli/lib/msn-allocate.js.map +1 -1
- package/dist/cli/lib/planner-signature.d.ts +7 -0
- package/dist/cli/lib/planner-signature.d.ts.map +1 -1
- package/dist/cli/lib/planner-signature.js +18 -1
- package/dist/cli/lib/planner-signature.js.map +1 -1
- package/dist/cli/lib/policy/policy-bundle.d.ts +6 -0
- package/dist/cli/lib/policy/policy-bundle.d.ts.map +1 -0
- package/dist/cli/lib/policy/policy-bundle.js +62 -0
- package/dist/cli/lib/policy/policy-bundle.js.map +1 -0
- package/dist/cli/lib/policy/policy-doctor.d.ts +4 -0
- package/dist/cli/lib/policy/policy-doctor.d.ts.map +1 -0
- package/dist/cli/lib/policy/policy-doctor.js +34 -0
- package/dist/cli/lib/policy/policy-doctor.js.map +1 -0
- package/dist/cli/lib/policy/policy-fetch.d.ts +10 -0
- package/dist/cli/lib/policy/policy-fetch.d.ts.map +1 -0
- package/dist/cli/lib/policy/policy-fetch.js +78 -0
- package/dist/cli/lib/policy/policy-fetch.js.map +1 -0
- package/dist/cli/lib/policy/policy-resolve.d.ts +38 -0
- package/dist/cli/lib/policy/policy-resolve.d.ts.map +1 -0
- package/dist/cli/lib/policy/policy-resolve.js +194 -0
- package/dist/cli/lib/policy/policy-resolve.js.map +1 -0
- package/dist/cli/lib/policy/policy-types.d.ts +76 -0
- package/dist/cli/lib/policy/policy-types.d.ts.map +1 -0
- package/dist/cli/lib/policy/policy-types.js +3 -0
- package/dist/cli/lib/policy/policy-types.js.map +1 -0
- package/dist/cli/lib/policy-digest-doctor.d.ts +1 -0
- package/dist/cli/lib/policy-digest-doctor.d.ts.map +1 -1
- package/dist/cli/lib/policy-digest-doctor.js +4 -2
- package/dist/cli/lib/policy-digest-doctor.js.map +1 -1
- package/dist/cli/lib/start-orchestration.d.ts +2 -1
- package/dist/cli/lib/start-orchestration.d.ts.map +1 -1
- package/dist/cli/lib/start-orchestration.js +5 -3
- package/dist/cli/lib/start-orchestration.js.map +1 -1
- package/dist/cli/lib/surgeons/banned-import.js +1 -1
- package/dist/cli/lib/surgeons/banned-import.js.map +1 -1
- package/dist/cli/lib/surgeons/import-layer.d.ts.map +1 -1
- package/dist/cli/lib/surgeons/import-layer.js +1 -1
- package/dist/cli/lib/surgeons/import-layer.js.map +1 -1
- package/dist/cli/lib/surgeons/registry.d.ts.map +1 -1
- package/dist/cli/lib/surgeons/registry.js +2 -4
- package/dist/cli/lib/surgeons/registry.js.map +1 -1
- package/dist/cli/lib/types.d.ts +23 -0
- package/dist/cli/lib/types.d.ts.map +1 -1
- package/dist/cli/lib/types.js +5 -1
- package/dist/cli/lib/types.js.map +1 -1
- package/dist/cli/lib/verify-engine.d.ts +1 -1
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +32 -17
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-evidence-snippet.d.ts +7 -0
- package/dist/cli/lib/verify-evidence-snippet.d.ts.map +1 -0
- package/dist/cli/lib/verify-evidence-snippet.js +29 -0
- package/dist/cli/lib/verify-evidence-snippet.js.map +1 -0
- package/dist/cli/lib/verify-failure-normalize.d.ts.map +1 -1
- package/dist/cli/lib/verify-failure-normalize.js +20 -4
- package/dist/cli/lib/verify-failure-normalize.js.map +1 -1
- package/dist/cli/lib/verify-failure.d.ts +22 -5
- package/dist/cli/lib/verify-failure.d.ts.map +1 -1
- package/dist/cli/lib/verify-finding-gate-projector.d.ts +1 -1
- package/dist/cli/lib/verify-finding-gate-projector.d.ts.map +1 -1
- package/dist/cli/lib/verify-finding-gate-projector.js +6 -28
- package/dist/cli/lib/verify-finding-gate-projector.js.map +1 -1
- package/dist/cli/lib/verify-finding.d.ts +1 -1
- package/dist/cli/lib/verify-finding.d.ts.map +1 -1
- package/dist/cli/lib/verify-finding.js.map +1 -1
- package/dist/cli/lib/verify-hints.d.ts.map +1 -1
- package/dist/cli/lib/verify-hints.js +14 -3
- package/dist/cli/lib/verify-hints.js.map +1 -1
- package/dist/cli/lib/verify-options.d.ts +5 -14
- package/dist/cli/lib/verify-options.d.ts.map +1 -1
- package/dist/cli/lib/verify-org-phases.d.ts +18 -0
- package/dist/cli/lib/verify-org-phases.d.ts.map +1 -0
- package/dist/cli/lib/verify-org-phases.js +61 -0
- package/dist/cli/lib/verify-org-phases.js.map +1 -0
- package/dist/cli/lib/verify-payload.d.ts +1 -1
- package/dist/cli/lib/verify-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.js +48 -27
- package/dist/cli/lib/verify-payload.js.map +1 -1
- package/dist/cli/lib/verify-phase-clock.d.ts +3 -2
- package/dist/cli/lib/verify-phase-clock.d.ts.map +1 -1
- package/dist/cli/lib/verify-phase-clock.js +16 -5
- package/dist/cli/lib/verify-phase-clock.js.map +1 -1
- package/dist/cli/lib/verify-phase-steps.d.ts +14 -7
- package/dist/cli/lib/verify-phase-steps.d.ts.map +1 -1
- package/dist/cli/lib/verify-phase-steps.js +33 -24
- package/dist/cli/lib/verify-phase-steps.js.map +1 -1
- package/dist/cli/lib/verify-presenters.d.ts +1 -0
- package/dist/cli/lib/verify-presenters.d.ts.map +1 -1
- package/dist/cli/lib/verify-presenters.js +15 -4
- package/dist/cli/lib/verify-presenters.js.map +1 -1
- package/dist/cli/lib/verify-remediation-pipeline.d.ts +2 -0
- package/dist/cli/lib/verify-remediation-pipeline.d.ts.map +1 -1
- package/dist/cli/lib/verify-remediation-pipeline.js +5 -2
- package/dist/cli/lib/verify-remediation-pipeline.js.map +1 -1
- package/dist/cli/lib/verify-run.d.ts +2 -2
- package/dist/cli/lib/verify-run.d.ts.map +1 -1
- package/dist/cli/lib/verify-run.js +27 -13
- package/dist/cli/lib/verify-run.js.map +1 -1
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/program-core.d.ts +1 -1
- package/dist/cli/program-core.d.ts.map +1 -1
- package/dist/cli/program-core.js +62 -5
- package/dist/cli/program-core.js.map +1 -1
- package/dist/cli/program-mission.d.ts.map +1 -1
- package/dist/cli/program-mission.js +59 -35
- package/dist/cli/program-mission.js.map +1 -1
- package/dist/cli/program-org.d.ts +3 -0
- package/dist/cli/program-org.d.ts.map +1 -0
- package/dist/cli/program-org.js +119 -0
- package/dist/cli/program-org.js.map +1 -0
- package/dist/cli/program-workflow.d.ts +2 -1
- package/dist/cli/program-workflow.d.ts.map +1 -1
- package/dist/cli/program-workflow.js +41 -3
- package/dist/cli/program-workflow.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +11 -0
- package/dist/cli/program.js.map +1 -1
- package/package.json +2 -1
- package/templates/.gitagent/config.json +4 -0
- package/templates/.gitagent/foreman/MANIFEST.json +1 -0
- package/templates/.gitagent/foreman/PLANNER.signing.pub +3 -0
- package/templates/.gitagent/foreman/POLICY.pointer.json +11 -0
- package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
- package/templates/.gitagent/planner/MISSION.schema.yaml +51 -0
- package/templates/.gitagent/planner/ORG-POLICY.schema.yaml +174 -0
- package/templates/.gitagent/planner/RULES.md +36 -2
- package/templates/.github/workflows/gxt-attest-ingest.yml +56 -6
- package/templates/.github/workflows/gxt-validate.yml +33 -0
- package/templates/.gitignore.gxt +1 -0
- package/templates/integrations/asset-catalog.json +2 -0
- package/templates/integrations/compatibility.json +1 -1
- package/templates/scripts/validate-mcp-dogfood.mjs +5 -0
- package/templates/scripts/verify-pr-missions.sh +20 -41
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jeger-ai/opengantry",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Open Source Gantry — vendor-neutral GXT substrate and Gantry CLI for local git-native agent governance",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"build": "npm run gen:version && npm run gen:catalog && npm run gen:dogfood && tsc",
|
|
27
27
|
"gapman": "node dist/cli/index.js",
|
|
28
28
|
"lint": "eslint src/cli/**/*.ts",
|
|
29
|
+
"lint:json": "eslint --format json src/cli/**/*.ts",
|
|
29
30
|
"check:changed": "./scripts/check-changed-code.sh",
|
|
30
31
|
"validate": "./scripts/dev-validate.sh",
|
|
31
32
|
"prepublishOnly": "npm run build && npm test",
|
|
@@ -35,6 +35,16 @@ properties:
|
|
|
35
35
|
minLength: 1
|
|
36
36
|
gate_success_substring:
|
|
37
37
|
type: ["string", "null"]
|
|
38
|
+
gate_adapter:
|
|
39
|
+
type: string
|
|
40
|
+
enum: [generic, eslint, tsc]
|
|
41
|
+
default: generic
|
|
42
|
+
description: >-
|
|
43
|
+
Explicit gate output parser (ADR-0041). generic: exit code + optional
|
|
44
|
+
success substring only. eslint: gate_command must emit `eslint --format
|
|
45
|
+
json`; tsc: gate_command must emit plain tsc diagnostics. Adapters map
|
|
46
|
+
tool output to envelope v3 findings with offending_file/line/rule_id.
|
|
47
|
+
Routing is never inferred from gate_command text.
|
|
38
48
|
virtual_capture:
|
|
39
49
|
type: boolean
|
|
40
50
|
default: false
|
|
@@ -208,3 +218,44 @@ properties:
|
|
|
208
218
|
items:
|
|
209
219
|
type: string
|
|
210
220
|
minLength: 1
|
|
221
|
+
depends_on:
|
|
222
|
+
type: array
|
|
223
|
+
default: []
|
|
224
|
+
description: >-
|
|
225
|
+
Cross-repo mission dependencies (ADR-0044). Resolved offline from fetched
|
|
226
|
+
refs/gxt/deps/<slug> ledger chains. gantry deps fetch is the only network
|
|
227
|
+
path; verify/doctor/check read local refs only.
|
|
228
|
+
items:
|
|
229
|
+
type: object
|
|
230
|
+
additionalProperties: false
|
|
231
|
+
required:
|
|
232
|
+
- repo
|
|
233
|
+
- msn_id
|
|
234
|
+
properties:
|
|
235
|
+
repo:
|
|
236
|
+
type: string
|
|
237
|
+
minLength: 1
|
|
238
|
+
description: Canonical host/owner/repo or git URL.
|
|
239
|
+
ref:
|
|
240
|
+
type: string
|
|
241
|
+
default: refs/gxt/ledger
|
|
242
|
+
msn_id:
|
|
243
|
+
type: string
|
|
244
|
+
pattern: "^MSN-[0-9]{4}$"
|
|
245
|
+
require:
|
|
246
|
+
type: object
|
|
247
|
+
additionalProperties: false
|
|
248
|
+
properties:
|
|
249
|
+
verify_status:
|
|
250
|
+
type: string
|
|
251
|
+
enum: [passed]
|
|
252
|
+
default: passed
|
|
253
|
+
signed:
|
|
254
|
+
type: boolean
|
|
255
|
+
default: false
|
|
256
|
+
max_age_days:
|
|
257
|
+
type: number
|
|
258
|
+
exclusiveMinimum: 0
|
|
259
|
+
expected_repository_hash:
|
|
260
|
+
type: string
|
|
261
|
+
pattern: "^[0-9a-f]{64}$"
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# ORG-POLICY.schema — JSON Schema (YAML encoding) for organization policy bundles
|
|
2
|
+
# Consumed by gantry (Ajv). ADR-0042. Version label for docs only.
|
|
3
|
+
$schema: https://json-schema.org/draft/2020-12/schema
|
|
4
|
+
$id: https://opengantry.local/schemas/org-policy.v1.json
|
|
5
|
+
title: OpenGantryOrgPolicy
|
|
6
|
+
type: object
|
|
7
|
+
additionalProperties: false
|
|
8
|
+
required:
|
|
9
|
+
- schema_version
|
|
10
|
+
- org_id
|
|
11
|
+
- policy_id
|
|
12
|
+
- version
|
|
13
|
+
properties:
|
|
14
|
+
schema_version:
|
|
15
|
+
type: string
|
|
16
|
+
const: "1.0.0"
|
|
17
|
+
org_id:
|
|
18
|
+
type: string
|
|
19
|
+
minLength: 1
|
|
20
|
+
policy_id:
|
|
21
|
+
type: string
|
|
22
|
+
minLength: 1
|
|
23
|
+
version:
|
|
24
|
+
type: string
|
|
25
|
+
minLength: 1
|
|
26
|
+
description: Semver or monotonic label for the bundle (not the CLI).
|
|
27
|
+
signers:
|
|
28
|
+
type: array
|
|
29
|
+
default: []
|
|
30
|
+
items:
|
|
31
|
+
type: object
|
|
32
|
+
additionalProperties: false
|
|
33
|
+
required:
|
|
34
|
+
- principal
|
|
35
|
+
properties:
|
|
36
|
+
principal:
|
|
37
|
+
type: string
|
|
38
|
+
minLength: 1
|
|
39
|
+
description: SSH or GPG principal allowed to sign the policy commit.
|
|
40
|
+
kind:
|
|
41
|
+
type: string
|
|
42
|
+
enum: [ssh, gpg]
|
|
43
|
+
mandatory_gates:
|
|
44
|
+
type: array
|
|
45
|
+
default: []
|
|
46
|
+
items:
|
|
47
|
+
type: object
|
|
48
|
+
additionalProperties: false
|
|
49
|
+
required:
|
|
50
|
+
- id
|
|
51
|
+
- command
|
|
52
|
+
properties:
|
|
53
|
+
id:
|
|
54
|
+
type: string
|
|
55
|
+
minLength: 1
|
|
56
|
+
command:
|
|
57
|
+
type: string
|
|
58
|
+
minLength: 1
|
|
59
|
+
adapter:
|
|
60
|
+
type: string
|
|
61
|
+
enum: [generic, eslint, tsc]
|
|
62
|
+
default: generic
|
|
63
|
+
success_substring:
|
|
64
|
+
type: ["string", "null"]
|
|
65
|
+
banned_imports:
|
|
66
|
+
type: array
|
|
67
|
+
default: []
|
|
68
|
+
items:
|
|
69
|
+
type: object
|
|
70
|
+
additionalProperties: false
|
|
71
|
+
required:
|
|
72
|
+
- specifier
|
|
73
|
+
properties:
|
|
74
|
+
specifier:
|
|
75
|
+
type: string
|
|
76
|
+
minLength: 1
|
|
77
|
+
scope:
|
|
78
|
+
type: string
|
|
79
|
+
enum: [changed, all]
|
|
80
|
+
default: changed
|
|
81
|
+
description: changed = gantry check-imports on the mission diff; all = whole tree.
|
|
82
|
+
producers:
|
|
83
|
+
type: object
|
|
84
|
+
default: {}
|
|
85
|
+
additionalProperties:
|
|
86
|
+
type: string
|
|
87
|
+
minLength: 1
|
|
88
|
+
description: >-
|
|
89
|
+
Map of KPI metric name to producer command. kpi_thresholds[].metric MUST
|
|
90
|
+
name a key in this object (CLI/schema error otherwise).
|
|
91
|
+
kpi_thresholds:
|
|
92
|
+
type: array
|
|
93
|
+
default: []
|
|
94
|
+
items:
|
|
95
|
+
type: object
|
|
96
|
+
additionalProperties: false
|
|
97
|
+
required:
|
|
98
|
+
- metric
|
|
99
|
+
- op
|
|
100
|
+
- value
|
|
101
|
+
properties:
|
|
102
|
+
metric:
|
|
103
|
+
type: string
|
|
104
|
+
minLength: 1
|
|
105
|
+
description: MUST match a key in producers.
|
|
106
|
+
op:
|
|
107
|
+
type: string
|
|
108
|
+
enum: ["<=", ">=", "==", "<", ">"]
|
|
109
|
+
value:
|
|
110
|
+
type: number
|
|
111
|
+
config_floor:
|
|
112
|
+
type: object
|
|
113
|
+
additionalProperties: false
|
|
114
|
+
properties:
|
|
115
|
+
planner_signature:
|
|
116
|
+
type: string
|
|
117
|
+
enum: [off, warn, require]
|
|
118
|
+
receipt_signature:
|
|
119
|
+
type: string
|
|
120
|
+
enum: [off, warn, require]
|
|
121
|
+
ledger_signature:
|
|
122
|
+
type: string
|
|
123
|
+
enum: [off, warn, require]
|
|
124
|
+
ledger_mode:
|
|
125
|
+
type: string
|
|
126
|
+
enum: [off, local]
|
|
127
|
+
flight_telemetry:
|
|
128
|
+
type: object
|
|
129
|
+
additionalProperties: false
|
|
130
|
+
properties:
|
|
131
|
+
body_mode:
|
|
132
|
+
type: string
|
|
133
|
+
enum: [hash_only, full]
|
|
134
|
+
break_glass:
|
|
135
|
+
type: object
|
|
136
|
+
additionalProperties: false
|
|
137
|
+
properties:
|
|
138
|
+
require_ledger_entry:
|
|
139
|
+
type: boolean
|
|
140
|
+
manifest_constraints:
|
|
141
|
+
type: object
|
|
142
|
+
additionalProperties: false
|
|
143
|
+
properties:
|
|
144
|
+
forbidden_zones_add:
|
|
145
|
+
type: array
|
|
146
|
+
items:
|
|
147
|
+
type: string
|
|
148
|
+
minLength: 1
|
|
149
|
+
path_risks_min:
|
|
150
|
+
type: object
|
|
151
|
+
additionalProperties:
|
|
152
|
+
type: string
|
|
153
|
+
enum: [Tier-1, Tier-2, Tier-3]
|
|
154
|
+
perimeter_protected_add:
|
|
155
|
+
type: array
|
|
156
|
+
items:
|
|
157
|
+
type: string
|
|
158
|
+
minLength: 1
|
|
159
|
+
expected_digests:
|
|
160
|
+
type: object
|
|
161
|
+
additionalProperties: false
|
|
162
|
+
properties:
|
|
163
|
+
schema_version:
|
|
164
|
+
type: string
|
|
165
|
+
const: "0.1.0"
|
|
166
|
+
manifest_sha256:
|
|
167
|
+
type: string
|
|
168
|
+
pattern: "^[0-9a-f]{64}$"
|
|
169
|
+
target_architecture_sha256:
|
|
170
|
+
type: ["string", "null"]
|
|
171
|
+
pattern: "^[0-9a-f]{64}$"
|
|
172
|
+
config_sha256:
|
|
173
|
+
type: ["string", "null"]
|
|
174
|
+
pattern: "^[0-9a-f]{64}$"
|
|
@@ -24,13 +24,47 @@ Normative keywords **MUST**, **MUST NOT**, and **SHOULD** follow RFC 2119.
|
|
|
24
24
|
- Access outside effective TMVC requires a context request recorded in `EXECUTOR_LOG.md`.
|
|
25
25
|
- Access into forbidden zones MUST fail closed unless Planner policy explicitly allows it.
|
|
26
26
|
|
|
27
|
-
## 5
|
|
27
|
+
## 4.5 Interrogation record (legislation gate)
|
|
28
|
+
|
|
29
|
+
- Computed interrogation findings MUST have an `operator_answer` before legislation.
|
|
30
|
+
- Placeholder or fabricated answers are evidence tampering under §3.
|
|
31
|
+
|
|
32
|
+
## 5. Rule 4.4 — Planner-driven manifest sync
|
|
33
|
+
|
|
34
|
+
- Adding, removing, or renaming a skill MUST update `MANIFEST.json` in the same commit set.
|
|
35
|
+
|
|
36
|
+
## 6. Git-native mission index
|
|
28
37
|
|
|
29
38
|
- Mission-related commits MUST begin with `[MSN-XXXX]` in the subject line.
|
|
30
39
|
- Keep mission files for `gantry verify` under `.gitagent/missions/`.
|
|
31
40
|
|
|
32
|
-
## 6.
|
|
41
|
+
## 6.1 Planner legislation proof
|
|
42
|
+
|
|
43
|
+
- `gantry verify` requires a Planner stamp: a `[MSN-XXXX]` commit by an allowlisted author that modifies the mission file.
|
|
44
|
+
|
|
45
|
+
## 6.2 Break-glass (v0.8.0)
|
|
33
46
|
|
|
34
47
|
- Set `GXT_BYPASS_SECRET` to match `.gitagent/foreman/BYPASS.sha256` (SHA-256 hex of the team secret).
|
|
35
48
|
- Use `gantry verify --break-glass --reason "..."` only in emergencies; push `refs/notes/gxt-bypass` with the branch.
|
|
36
49
|
- Forbidden-zone runtime policy is never bypassed.
|
|
50
|
+
- A bypass MUST also append a `break_glass` ledger entry when `ledger.mode` is `local`.
|
|
51
|
+
|
|
52
|
+
## 7. Local history (no bloat)
|
|
53
|
+
|
|
54
|
+
- Bulky traces live under `.gitagent/history/` (git-ignored). Do not commit large trace dumps.
|
|
55
|
+
|
|
56
|
+
## 8. Organization policy floor (v3.3.0)
|
|
57
|
+
|
|
58
|
+
- A present `POLICY.pointer.json` is a tighten-only floor: policy MUST NOT loosen local law.
|
|
59
|
+
- `gantry policy pull` is the only network path; doctor and verify read disk/cache only.
|
|
60
|
+
|
|
61
|
+
## 9. Compliance ledger (v3.3.0)
|
|
62
|
+
|
|
63
|
+
- `refs/gxt/ledger` is an orphan signed (optional) commit chain of digest-only entries.
|
|
64
|
+
- Append uses CAS `git update-ref` with bounded retries; unsigned entries are checksums, not proofs.
|
|
65
|
+
|
|
66
|
+
## 10. Cross-repository dependencies (v3.3.0)
|
|
67
|
+
|
|
68
|
+
- Optional mission `depends_on[]` is resolved from fetched `refs/gxt/deps/<slug>`.
|
|
69
|
+
- Same-org proof uses `repository_hash` + the consumer's `GANTRY_ORG_PEPPER`.
|
|
70
|
+
- `gantry deps fetch` is the only network path.
|
|
@@ -9,12 +9,18 @@ permissions:
|
|
|
9
9
|
jobs:
|
|
10
10
|
attest_ingest:
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
|
+
env:
|
|
13
|
+
HAS_ORG_EXPORT: ${{ vars.GANTRY_ORG_ID != '' && secrets.GANTRY_ORG_PEPPER != '' }}
|
|
14
|
+
HAS_PLANE_INGEST: ${{ vars.PLANE_INGEST_URL != '' && secrets.PLANE_INGEST_TOKEN != '' }}
|
|
12
15
|
steps:
|
|
13
16
|
- uses: actions/checkout@v7
|
|
14
17
|
with:
|
|
15
18
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
16
19
|
fetch-depth: 0
|
|
17
20
|
|
|
21
|
+
- name: Install ripgrep
|
|
22
|
+
run: sudo apt-get update && sudo apt-get install -y ripgrep
|
|
23
|
+
|
|
18
24
|
- uses: actions/setup-node@v7
|
|
19
25
|
with:
|
|
20
26
|
node-version: 24
|
|
@@ -28,13 +34,40 @@ jobs:
|
|
|
28
34
|
echo "GANTRY_SIGNER_PRINCIPAL_KIND=github_actor" >> "$GITHUB_ENV"
|
|
29
35
|
echo "GANTRY_BRANCH_NAME=${{ github.event.pull_request.head.ref }}" >> "$GITHUB_ENV"
|
|
30
36
|
|
|
37
|
+
- name: Resolve ingest configuration
|
|
38
|
+
run: |
|
|
39
|
+
if [ "${HAS_ORG_EXPORT}" != "true" ]; then
|
|
40
|
+
echo "Skipping envelope export: GANTRY_ORG_ID or GANTRY_ORG_PEPPER not configured"
|
|
41
|
+
fi
|
|
42
|
+
if [ "${HAS_PLANE_INGEST}" != "true" ]; then
|
|
43
|
+
echo "Skipping plane ingest: PLANE_INGEST_URL or PLANE_INGEST_TOKEN not configured"
|
|
44
|
+
fi
|
|
45
|
+
|
|
31
46
|
- name: Resolve changed mission
|
|
32
47
|
id: mission
|
|
33
48
|
run: |
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
json="$(node dist/cli/index.js mission changed --base-ref "${{ github.event.pull_request.base.sha }}" --json)" || {
|
|
50
|
+
echo "$json"
|
|
51
|
+
exit 1
|
|
52
|
+
}
|
|
53
|
+
path="$(printf '%s' "$json" | node -e '
|
|
54
|
+
let s = "";
|
|
55
|
+
process.stdin.setEncoding("utf8");
|
|
56
|
+
process.stdin.on("data", (c) => { s += c; });
|
|
57
|
+
process.stdin.on("end", () => {
|
|
58
|
+
const j = JSON.parse(s);
|
|
59
|
+
if (j.status !== "ok") {
|
|
60
|
+
console.error(j.message || "mission changed failed");
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
process.stdout.write((j.missions && j.missions[0]) || "");
|
|
64
|
+
});
|
|
65
|
+
')"
|
|
66
|
+
echo "path=$path" >> "$GITHUB_OUTPUT"
|
|
67
|
+
|
|
68
|
+
- name: Fetch cross-repo mission dependencies
|
|
69
|
+
if: steps.mission.outputs.path != ''
|
|
70
|
+
run: node dist/cli/index.js deps fetch --mission "${{ steps.mission.outputs.path }}"
|
|
38
71
|
|
|
39
72
|
- name: Verify and export envelope
|
|
40
73
|
id: verify
|
|
@@ -45,19 +78,29 @@ jobs:
|
|
|
45
78
|
GANTRY_ORG_PEPPER: ${{ secrets.GANTRY_ORG_PEPPER }}
|
|
46
79
|
GANTRY_ORG_PEPPER_VERSION: ${{ vars.GANTRY_ORG_PEPPER_VERSION || '1' }}
|
|
47
80
|
run: |
|
|
81
|
+
extra=()
|
|
82
|
+
if [ "${HAS_ORG_EXPORT}" != "true" ] || [ -z "${GANTRY_ORG_ID}" ] || [ -z "${GANTRY_ORG_PEPPER}" ]; then
|
|
83
|
+
echo "Skipping envelope export: GANTRY_ORG_ID or GANTRY_ORG_PEPPER not configured"
|
|
84
|
+
else
|
|
85
|
+
extra+=(--export envelope.json)
|
|
86
|
+
fi
|
|
48
87
|
node dist/cli/index.js verify \
|
|
49
88
|
--mission "${{ steps.mission.outputs.path }}" \
|
|
50
89
|
--audience verifier \
|
|
51
90
|
--ci \
|
|
52
91
|
--base-ref "${{ github.event.pull_request.base.sha }}" \
|
|
53
|
-
|
|
92
|
+
"${extra[@]}"
|
|
54
93
|
|
|
55
94
|
- name: Ingest to control plane
|
|
56
|
-
if: steps.mission.outputs.path != '' && hashFiles('envelope.json') != ''
|
|
95
|
+
if: steps.mission.outputs.path != '' && hashFiles('envelope.json') != '' && env.HAS_PLANE_INGEST == 'true'
|
|
57
96
|
env:
|
|
58
97
|
PLANE_INGEST_URL: ${{ vars.PLANE_INGEST_URL }}
|
|
59
98
|
PLANE_INGEST_TOKEN: ${{ secrets.PLANE_INGEST_TOKEN }}
|
|
60
99
|
run: |
|
|
100
|
+
if [ -z "${PLANE_INGEST_URL}" ] || [ -z "${PLANE_INGEST_TOKEN}" ]; then
|
|
101
|
+
echo "Skipping plane ingest: PLANE_INGEST_URL or PLANE_INGEST_TOKEN not configured"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
61
104
|
code="$(curl -sS -o response.json -w '%{http_code}' \
|
|
62
105
|
-X POST "$PLANE_INGEST_URL/api/v1/attestations/ingest" \
|
|
63
106
|
-H "Authorization: Bearer $PLANE_INGEST_TOKEN" \
|
|
@@ -84,6 +127,13 @@ jobs:
|
|
|
84
127
|
echo "ingest poll timeout (request_id=$request_id)" >&2
|
|
85
128
|
exit 1
|
|
86
129
|
|
|
130
|
+
- name: Append compliance ledger and push ref
|
|
131
|
+
if: steps.mission.outputs.path != '' && hashFiles('envelope.json') != '' && env.HAS_ORG_EXPORT == 'true'
|
|
132
|
+
continue-on-error: true
|
|
133
|
+
run: |
|
|
134
|
+
node dist/cli/index.js ledger append --from-envelope envelope.json || true
|
|
135
|
+
git push origin refs/gxt/ledger || echo "ledger push skipped (ref absent or no permission)"
|
|
136
|
+
|
|
87
137
|
- name: Push pre-commit agent events
|
|
88
138
|
if: steps.mission.outputs.path != ''
|
|
89
139
|
continue-on-error: true
|
|
@@ -162,6 +162,39 @@ jobs:
|
|
|
162
162
|
- name: Build gantry
|
|
163
163
|
run: npm run build
|
|
164
164
|
|
|
165
|
+
- name: Fetch cross-repo mission dependencies
|
|
166
|
+
env:
|
|
167
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
168
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
169
|
+
run: |
|
|
170
|
+
json="$(node dist/cli/index.js mission changed --base-ref "$BASE_SHA" --head-ref "$HEAD_SHA" --json)" || {
|
|
171
|
+
echo "$json"
|
|
172
|
+
exit 1
|
|
173
|
+
}
|
|
174
|
+
mapfile -t missions < <(
|
|
175
|
+
printf '%s' "$json" | node -e '
|
|
176
|
+
let s = "";
|
|
177
|
+
process.stdin.setEncoding("utf8");
|
|
178
|
+
process.stdin.on("data", (c) => { s += c; });
|
|
179
|
+
process.stdin.on("end", () => {
|
|
180
|
+
const j = JSON.parse(s);
|
|
181
|
+
if (j.status !== "ok") process.exit(1);
|
|
182
|
+
for (const m of j.missions || []) console.log(m);
|
|
183
|
+
});
|
|
184
|
+
'
|
|
185
|
+
)
|
|
186
|
+
if [ ${#missions[@]} -eq 1 ] && [ -z "${missions[0]:-}" ]; then
|
|
187
|
+
missions=()
|
|
188
|
+
fi
|
|
189
|
+
if [ ${#missions[@]} -eq 0 ]; then
|
|
190
|
+
echo "deps fetch: no PR-changed missions"
|
|
191
|
+
exit 0
|
|
192
|
+
fi
|
|
193
|
+
for m in "${missions[@]}"; do
|
|
194
|
+
[ -n "$m" ] || continue
|
|
195
|
+
node dist/cli/index.js deps fetch --mission "$m"
|
|
196
|
+
done
|
|
197
|
+
|
|
165
198
|
- name: Full verify on PR-changed missions
|
|
166
199
|
env:
|
|
167
200
|
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
package/templates/.gitignore.gxt
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
{ "targetPath": ".gitagent/config.json", "mode": "scaffold_only", "tags": ["core"] },
|
|
15
15
|
{ "targetPath": ".gitagent/foreman/BYPASS.sha256", "mode": "scaffold_only", "tags": ["core"] },
|
|
16
16
|
{ "targetPath": ".gitagent/foreman/MANIFEST.json", "mode": "scaffold_only", "tags": ["core"] },
|
|
17
|
+
{ "targetPath": ".gitagent/foreman/POLICY.pointer.json", "mode": "scaffold_only", "tags": ["core"] },
|
|
17
18
|
{ "targetPath": ".gitagent/foreman/SUBSTRATE.version.json", "mode": "scaffold_only", "tags": ["core"] },
|
|
18
19
|
{ "targetPath": ".gitagent/missions/README.md", "mode": "scaffold_only", "tags": ["core"] },
|
|
19
20
|
{ "targetPath": ".gitagent/planner/ARCHITECTURE-ACCESS.md", "mode": "scaffold_only", "tags": ["core"] },
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
{ "targetPath": ".gitagent/planner/KPI-REPORT.schema.yaml", "mode": "managed_strict", "tags": ["core"] },
|
|
23
24
|
{ "targetPath": ".gitagent/planner/MISSION-ARCHITECT.md", "mode": "scaffold_only", "tags": ["core"] },
|
|
24
25
|
{ "targetPath": ".gitagent/planner/MISSION.schema.yaml", "mode": "managed_strict", "tags": ["core"] },
|
|
26
|
+
{ "targetPath": ".gitagent/planner/ORG-POLICY.schema.yaml", "mode": "managed_strict", "tags": ["core"] },
|
|
25
27
|
{ "targetPath": ".gitagent/planner/RULES.md", "mode": "scaffold_only", "tags": ["core"] },
|
|
26
28
|
{ "targetPath": ".githooks/post-checkout", "mode": "managed_strict", "executable": true, "tags": ["hooks"] },
|
|
27
29
|
{ "targetPath": ".githooks/pre-commit", "mode": "managed_strict", "executable": true, "tags": ["hooks"] },
|
|
@@ -5,6 +5,7 @@ import { handleDraftLegislation } from "../dist/cli/lib/mcp-draft-legislation.js
|
|
|
5
5
|
import { handleExecuteLegislation } from "../dist/cli/lib/mcp-execute-legislation.js";
|
|
6
6
|
import { handleCheckSignature } from "../dist/cli/lib/mcp-check-signature.js";
|
|
7
7
|
import { handlePinMission, handleRuntimeEnv } from "../dist/cli/lib/mcp-runtime.js";
|
|
8
|
+
import { handleDoctor } from "../dist/cli/lib/mcp-doctor.js";
|
|
8
9
|
|
|
9
10
|
const dest = process.env.GXT_DOGFOOD_TMP;
|
|
10
11
|
if (!dest) throw new Error("GXT_DOGFOOD_TMP unset");
|
|
@@ -50,4 +51,8 @@ if (pinned.status !== "pinned") throw new Error("pin failed");
|
|
|
50
51
|
const env = handleRuntimeEnv(executed.mission_file_path);
|
|
51
52
|
if (env.status !== "ok") throw new Error(`runtime env failed: ${JSON.stringify(env)}`);
|
|
52
53
|
|
|
54
|
+
const doctor = handleDoctor({});
|
|
55
|
+
if (doctor.status === "error") throw new Error(`doctor failed: ${JSON.stringify(doctor)}`);
|
|
56
|
+
if (!Array.isArray(doctor.lines)) throw new Error("doctor lines missing");
|
|
57
|
+
|
|
53
58
|
console.log("OK: MCP dogfood flow passed");
|
|
@@ -42,19 +42,6 @@ else
|
|
|
42
42
|
exit 2
|
|
43
43
|
fi
|
|
44
44
|
|
|
45
|
-
mapfile -t UNIQUE_MSNS < <(
|
|
46
|
-
git log --no-merges --format=%s "${BASE_SHA}..${HEAD_SHA}" \
|
|
47
|
-
| grep -Eo '\[MSN-[0-9]{4}\]' | sort -u || true
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
if [[ ${#UNIQUE_MSNS[@]} -gt 1 ]]; then
|
|
51
|
-
echo "verify-pr-missions FAILED: mission contamination detected" >&2
|
|
52
|
-
echo " This PR contains commits from multiple missions:" >&2
|
|
53
|
-
printf ' %s\n' "${UNIQUE_MSNS[@]}" >&2
|
|
54
|
-
echo " OpenGantry requires strict blast-radius isolation. Rebase this branch onto the integration branch (e.g. origin/main)." >&2
|
|
55
|
-
exit 1
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
45
|
if [[ -f dist/cli/index.js ]]; then
|
|
59
46
|
GANTRY=(node dist/cli/index.js)
|
|
60
47
|
elif command -v gantry >/dev/null 2>&1; then
|
|
@@ -64,14 +51,6 @@ else
|
|
|
64
51
|
exit 1
|
|
65
52
|
fi
|
|
66
53
|
|
|
67
|
-
is_verifiable_mission() {
|
|
68
|
-
local p="$1"
|
|
69
|
-
[[ "$p" == "${MISSIONS_PREFIX}"* ]] || return 1
|
|
70
|
-
[[ "$p" =~ \.(ya?ml|md)$ ]] || return 1
|
|
71
|
-
[[ "$(basename "$p")" == "README.md" ]] && return 1
|
|
72
|
-
return 0
|
|
73
|
-
}
|
|
74
|
-
|
|
75
54
|
is_msn_enforced_path() {
|
|
76
55
|
local p="$1"
|
|
77
56
|
local prefix
|
|
@@ -99,14 +78,28 @@ for f in "${DIFF_FILES[@]}"; do
|
|
|
99
78
|
fi
|
|
100
79
|
done
|
|
101
80
|
|
|
81
|
+
changed_json="$("${GANTRY[@]}" mission changed --base-ref "$BASE_SHA" --head-ref "$HEAD_SHA" --json)" || {
|
|
82
|
+
printf '%s\n' "$changed_json" >&2
|
|
83
|
+
exit 1
|
|
84
|
+
}
|
|
102
85
|
mapfile -t CHANGED_MISSIONS < <(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
86
|
+
printf '%s' "$changed_json" | node -e '
|
|
87
|
+
let s = "";
|
|
88
|
+
process.stdin.setEncoding("utf8");
|
|
89
|
+
process.stdin.on("data", (c) => { s += c; });
|
|
90
|
+
process.stdin.on("end", () => {
|
|
91
|
+
const j = JSON.parse(s);
|
|
92
|
+
if (j.status !== "ok") {
|
|
93
|
+
console.error(j.message || "mission changed failed");
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
for (const m of j.missions || []) console.log(m);
|
|
97
|
+
});
|
|
98
|
+
'
|
|
109
99
|
)
|
|
100
|
+
if [[ ${#CHANGED_MISSIONS[@]} -eq 1 && -z "${CHANGED_MISSIONS[0]:-}" ]]; then
|
|
101
|
+
CHANGED_MISSIONS=()
|
|
102
|
+
fi
|
|
110
103
|
|
|
111
104
|
if [[ "$needs_mission" -eq 1 && ${#CHANGED_MISSIONS[@]} -eq 0 ]]; then
|
|
112
105
|
if eval_out="$(node "$GXT_MANIFEST_LIB" eval-range "$ROOT" "$BASE_SHA" "$HEAD_SHA" 2>&1)"; then
|
|
@@ -125,20 +118,6 @@ if [[ ${#CHANGED_MISSIONS[@]} -eq 0 ]]; then
|
|
|
125
118
|
exit 0
|
|
126
119
|
fi
|
|
127
120
|
|
|
128
|
-
if [[ ${#UNIQUE_MSNS[@]} -eq 1 ]]; then
|
|
129
|
-
purity_msn="${UNIQUE_MSNS[0]}"
|
|
130
|
-
purity_msn="${purity_msn#[}"
|
|
131
|
-
purity_msn="${purity_msn%]}"
|
|
132
|
-
for mission in "${CHANGED_MISSIONS[@]}"; do
|
|
133
|
-
base="$(basename "$mission")"
|
|
134
|
-
if [[ "$base" != "${purity_msn}."* ]]; then
|
|
135
|
-
echo "verify-pr-missions FAILED: changed mission file does not match commit MSN tag" >&2
|
|
136
|
-
echo " commits: [${purity_msn}] mission file: ${mission}" >&2
|
|
137
|
-
exit 1
|
|
138
|
-
fi
|
|
139
|
-
done
|
|
140
|
-
fi
|
|
141
|
-
|
|
142
121
|
for mission in "${CHANGED_MISSIONS[@]}"; do
|
|
143
122
|
echo "verify-pr-missions: gantry verify --mission ${mission}" >&2
|
|
144
123
|
"${GANTRY[@]}" verify --mission "$mission" --audience verifier || exit 1
|