@jeger-ai/opengantry 1.0.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/LICENSE +235 -0
- package/NOTICE +16 -0
- package/README.md +337 -0
- package/dist/cli/commands/arch.d.ts +19 -0
- package/dist/cli/commands/arch.d.ts.map +1 -0
- package/dist/cli/commands/arch.js +86 -0
- package/dist/cli/commands/arch.js.map +1 -0
- package/dist/cli/commands/check.d.ts +2 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +16 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +12 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +40 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +18 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +185 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/legislate.d.ts +21 -0
- package/dist/cli/commands/legislate.d.ts.map +1 -0
- package/dist/cli/commands/legislate.js +143 -0
- package/dist/cli/commands/legislate.js.map +1 -0
- package/dist/cli/commands/mcp-serve.d.ts +2 -0
- package/dist/cli/commands/mcp-serve.d.ts.map +1 -0
- package/dist/cli/commands/mcp-serve.js +14 -0
- package/dist/cli/commands/mcp-serve.js.map +1 -0
- package/dist/cli/commands/metrics.d.ts +6 -0
- package/dist/cli/commands/metrics.d.ts.map +1 -0
- package/dist/cli/commands/metrics.js +20 -0
- package/dist/cli/commands/metrics.js.map +1 -0
- package/dist/cli/commands/mission.d.ts +3 -0
- package/dist/cli/commands/mission.d.ts.map +1 -0
- package/dist/cli/commands/mission.js +29 -0
- package/dist/cli/commands/mission.js.map +1 -0
- package/dist/cli/commands/onboarding.d.ts +2 -0
- package/dist/cli/commands/onboarding.d.ts.map +1 -0
- package/dist/cli/commands/onboarding.js +85 -0
- package/dist/cli/commands/onboarding.js.map +1 -0
- package/dist/cli/commands/runtime.d.ts +19 -0
- package/dist/cli/commands/runtime.d.ts.map +1 -0
- package/dist/cli/commands/runtime.js +101 -0
- package/dist/cli/commands/runtime.js.map +1 -0
- package/dist/cli/commands/start.d.ts +4 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +3 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +8 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +65 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/teacher.d.ts +11 -0
- package/dist/cli/commands/teacher.d.ts.map +1 -0
- package/dist/cli/commands/teacher.js +48 -0
- package/dist/cli/commands/teacher.js.map +1 -0
- package/dist/cli/commands/triage.d.ts +10 -0
- package/dist/cli/commands/triage.d.ts.map +1 -0
- package/dist/cli/commands/triage.js +48 -0
- package/dist/cli/commands/triage.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +10 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +89 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +6 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +33 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +13 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lib/agent-error.d.ts +20 -0
- package/dist/cli/lib/agent-error.d.ts.map +1 -0
- package/dist/cli/lib/agent-error.js +58 -0
- package/dist/cli/lib/agent-error.js.map +1 -0
- package/dist/cli/lib/architecture-credential.d.ts +22 -0
- package/dist/cli/lib/architecture-credential.d.ts.map +1 -0
- package/dist/cli/lib/architecture-credential.js +198 -0
- package/dist/cli/lib/architecture-credential.js.map +1 -0
- package/dist/cli/lib/architecture-pointer-discovery.d.ts +7 -0
- package/dist/cli/lib/architecture-pointer-discovery.d.ts.map +1 -0
- package/dist/cli/lib/architecture-pointer-discovery.js +60 -0
- package/dist/cli/lib/architecture-pointer-discovery.js.map +1 -0
- package/dist/cli/lib/architecture-pointer-doctor.d.ts +3 -0
- package/dist/cli/lib/architecture-pointer-doctor.d.ts.map +1 -0
- package/dist/cli/lib/architecture-pointer-doctor.js +114 -0
- package/dist/cli/lib/architecture-pointer-doctor.js.map +1 -0
- package/dist/cli/lib/architecture-pointer-schema.d.ts +5 -0
- package/dist/cli/lib/architecture-pointer-schema.d.ts.map +1 -0
- package/dist/cli/lib/architecture-pointer-schema.js +137 -0
- package/dist/cli/lib/architecture-pointer-schema.js.map +1 -0
- package/dist/cli/lib/architecture-pointer-types.d.ts +24 -0
- package/dist/cli/lib/architecture-pointer-types.d.ts.map +1 -0
- package/dist/cli/lib/architecture-pointer-types.js +7 -0
- package/dist/cli/lib/architecture-pointer-types.js.map +1 -0
- package/dist/cli/lib/architecture-pointer.d.ts +7 -0
- package/dist/cli/lib/architecture-pointer.d.ts.map +1 -0
- package/dist/cli/lib/architecture-pointer.js +10 -0
- package/dist/cli/lib/architecture-pointer.js.map +1 -0
- package/dist/cli/lib/atomic-fs.d.ts +9 -0
- package/dist/cli/lib/atomic-fs.d.ts.map +1 -0
- package/dist/cli/lib/atomic-fs.js +63 -0
- package/dist/cli/lib/atomic-fs.js.map +1 -0
- package/dist/cli/lib/audience-output.d.ts +18 -0
- package/dist/cli/lib/audience-output.d.ts.map +1 -0
- package/dist/cli/lib/audience-output.js +80 -0
- package/dist/cli/lib/audience-output.js.map +1 -0
- package/dist/cli/lib/break-glass.d.ts +25 -0
- package/dist/cli/lib/break-glass.d.ts.map +1 -0
- package/dist/cli/lib/break-glass.js +134 -0
- package/dist/cli/lib/break-glass.js.map +1 -0
- package/dist/cli/lib/cli-io.d.ts +9 -0
- package/dist/cli/lib/cli-io.d.ts.map +1 -0
- package/dist/cli/lib/cli-io.js +38 -0
- package/dist/cli/lib/cli-io.js.map +1 -0
- package/dist/cli/lib/cli-timeout.d.ts +9 -0
- package/dist/cli/lib/cli-timeout.d.ts.map +1 -0
- package/dist/cli/lib/cli-timeout.js +17 -0
- package/dist/cli/lib/cli-timeout.js.map +1 -0
- package/dist/cli/lib/constants.d.ts +26 -0
- package/dist/cli/lib/constants.d.ts.map +1 -0
- package/dist/cli/lib/constants.js +26 -0
- package/dist/cli/lib/constants.js.map +1 -0
- package/dist/cli/lib/dirty-missions.d.ts +8 -0
- package/dist/cli/lib/dirty-missions.d.ts.map +1 -0
- package/dist/cli/lib/dirty-missions.js +65 -0
- package/dist/cli/lib/dirty-missions.js.map +1 -0
- package/dist/cli/lib/doctor-checks.d.ts +16 -0
- package/dist/cli/lib/doctor-checks.d.ts.map +1 -0
- package/dist/cli/lib/doctor-checks.js +138 -0
- package/dist/cli/lib/doctor-checks.js.map +1 -0
- package/dist/cli/lib/doctor-integration-checks.d.ts +5 -0
- package/dist/cli/lib/doctor-integration-checks.d.ts.map +1 -0
- package/dist/cli/lib/doctor-integration-checks.js +88 -0
- package/dist/cli/lib/doctor-integration-checks.js.map +1 -0
- package/dist/cli/lib/doctor-orchestration.d.ts +10 -0
- package/dist/cli/lib/doctor-orchestration.d.ts.map +1 -0
- package/dist/cli/lib/doctor-orchestration.js +25 -0
- package/dist/cli/lib/doctor-orchestration.js.map +1 -0
- package/dist/cli/lib/draft-token.d.ts +37 -0
- package/dist/cli/lib/draft-token.d.ts.map +1 -0
- package/dist/cli/lib/draft-token.js +171 -0
- package/dist/cli/lib/draft-token.js.map +1 -0
- package/dist/cli/lib/fix-hints.d.ts +51 -0
- package/dist/cli/lib/fix-hints.d.ts.map +1 -0
- package/dist/cli/lib/fix-hints.js +197 -0
- package/dist/cli/lib/fix-hints.js.map +1 -0
- package/dist/cli/lib/forbidden-scan.d.ts +18 -0
- package/dist/cli/lib/forbidden-scan.d.ts.map +1 -0
- package/dist/cli/lib/forbidden-scan.js +96 -0
- package/dist/cli/lib/forbidden-scan.js.map +1 -0
- package/dist/cli/lib/gate.d.ts +10 -0
- package/dist/cli/lib/gate.d.ts.map +1 -0
- package/dist/cli/lib/gate.js +30 -0
- package/dist/cli/lib/gate.js.map +1 -0
- package/dist/cli/lib/git-metrics-missions.d.ts +3 -0
- package/dist/cli/lib/git-metrics-missions.d.ts.map +1 -0
- package/dist/cli/lib/git-metrics-missions.js +51 -0
- package/dist/cli/lib/git-metrics-missions.js.map +1 -0
- package/dist/cli/lib/git-metrics-stream.d.ts +24 -0
- package/dist/cli/lib/git-metrics-stream.d.ts.map +1 -0
- package/dist/cli/lib/git-metrics-stream.js +137 -0
- package/dist/cli/lib/git-metrics-stream.js.map +1 -0
- package/dist/cli/lib/git-metrics.d.ts +18 -0
- package/dist/cli/lib/git-metrics.d.ts.map +1 -0
- package/dist/cli/lib/git-metrics.js +39 -0
- package/dist/cli/lib/git-metrics.js.map +1 -0
- package/dist/cli/lib/git-proof-errors.d.ts +3 -0
- package/dist/cli/lib/git-proof-errors.d.ts.map +1 -0
- package/dist/cli/lib/git-proof-errors.js +7 -0
- package/dist/cli/lib/git-proof-errors.js.map +1 -0
- package/dist/cli/lib/git-proof.d.ts +37 -0
- package/dist/cli/lib/git-proof.d.ts.map +1 -0
- package/dist/cli/lib/git-proof.js +147 -0
- package/dist/cli/lib/git-proof.js.map +1 -0
- package/dist/cli/lib/git-repo.d.ts +17 -0
- package/dist/cli/lib/git-repo.d.ts.map +1 -0
- package/dist/cli/lib/git-repo.js +39 -0
- package/dist/cli/lib/git-repo.js.map +1 -0
- package/dist/cli/lib/git.d.ts +2 -0
- package/dist/cli/lib/git.d.ts.map +1 -0
- package/dist/cli/lib/git.js +19 -0
- package/dist/cli/lib/git.js.map +1 -0
- package/dist/cli/lib/gitignore-gxt.d.ts +2 -0
- package/dist/cli/lib/gitignore-gxt.d.ts.map +1 -0
- package/dist/cli/lib/gitignore-gxt.js +24 -0
- package/dist/cli/lib/gitignore-gxt.js.map +1 -0
- package/dist/cli/lib/gxt-error-codes.d.ts +19 -0
- package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -0
- package/dist/cli/lib/gxt-error-codes.js +60 -0
- package/dist/cli/lib/gxt-error-codes.js.map +1 -0
- package/dist/cli/lib/init-asset-catalog.d.ts +15 -0
- package/dist/cli/lib/init-asset-catalog.d.ts.map +1 -0
- package/dist/cli/lib/init-asset-catalog.js +163 -0
- package/dist/cli/lib/init-asset-catalog.js.map +1 -0
- package/dist/cli/lib/init-assets.d.ts +8 -0
- package/dist/cli/lib/init-assets.d.ts.map +1 -0
- package/dist/cli/lib/init-assets.js +3 -0
- package/dist/cli/lib/init-assets.js.map +1 -0
- package/dist/cli/lib/init-compose-arch-pointer.d.ts +6 -0
- package/dist/cli/lib/init-compose-arch-pointer.d.ts.map +1 -0
- package/dist/cli/lib/init-compose-arch-pointer.js +64 -0
- package/dist/cli/lib/init-compose-arch-pointer.js.map +1 -0
- package/dist/cli/lib/init-compose-doc.d.ts +5 -0
- package/dist/cli/lib/init-compose-doc.d.ts.map +1 -0
- package/dist/cli/lib/init-compose-doc.js +37 -0
- package/dist/cli/lib/init-compose-doc.js.map +1 -0
- package/dist/cli/lib/init-interactive.d.ts +8 -0
- package/dist/cli/lib/init-interactive.d.ts.map +1 -0
- package/dist/cli/lib/init-interactive.js +195 -0
- package/dist/cli/lib/init-interactive.js.map +1 -0
- package/dist/cli/lib/init-plan.d.ts +20 -0
- package/dist/cli/lib/init-plan.d.ts.map +1 -0
- package/dist/cli/lib/init-plan.js +92 -0
- package/dist/cli/lib/init-plan.js.map +1 -0
- package/dist/cli/lib/init-profile.d.ts +39 -0
- package/dist/cli/lib/init-profile.d.ts.map +1 -0
- package/dist/cli/lib/init-profile.js +93 -0
- package/dist/cli/lib/init-profile.js.map +1 -0
- package/dist/cli/lib/init-tutorial.d.ts +2 -0
- package/dist/cli/lib/init-tutorial.d.ts.map +1 -0
- package/dist/cli/lib/init-tutorial.js +156 -0
- package/dist/cli/lib/init-tutorial.js.map +1 -0
- package/dist/cli/lib/integration-compat.d.ts +24 -0
- package/dist/cli/lib/integration-compat.d.ts.map +1 -0
- package/dist/cli/lib/integration-compat.js +50 -0
- package/dist/cli/lib/integration-compat.js.map +1 -0
- package/dist/cli/lib/legislate-skill.d.ts +20 -0
- package/dist/cli/lib/legislate-skill.d.ts.map +1 -0
- package/dist/cli/lib/legislate-skill.js +30 -0
- package/dist/cli/lib/legislate-skill.js.map +1 -0
- package/dist/cli/lib/manifest.d.ts +6 -0
- package/dist/cli/lib/manifest.d.ts.map +1 -0
- package/dist/cli/lib/manifest.js +53 -0
- package/dist/cli/lib/manifest.js.map +1 -0
- package/dist/cli/lib/mcp-legislation.d.ts +82 -0
- package/dist/cli/lib/mcp-legislation.d.ts.map +1 -0
- package/dist/cli/lib/mcp-legislation.js +181 -0
- package/dist/cli/lib/mcp-legislation.js.map +1 -0
- package/dist/cli/lib/mcp-orchestration.d.ts +12 -0
- package/dist/cli/lib/mcp-orchestration.d.ts.map +1 -0
- package/dist/cli/lib/mcp-orchestration.js +54 -0
- package/dist/cli/lib/mcp-orchestration.js.map +1 -0
- package/dist/cli/lib/mcp-runtime.d.ts +60 -0
- package/dist/cli/lib/mcp-runtime.d.ts.map +1 -0
- package/dist/cli/lib/mcp-runtime.js +133 -0
- package/dist/cli/lib/mcp-runtime.js.map +1 -0
- package/dist/cli/lib/mcp-tools-register.d.ts +4 -0
- package/dist/cli/lib/mcp-tools-register.d.ts.map +1 -0
- package/dist/cli/lib/mcp-tools-register.js +78 -0
- package/dist/cli/lib/mcp-tools-register.js.map +1 -0
- package/dist/cli/lib/mcp-upgrade.d.ts +7 -0
- package/dist/cli/lib/mcp-upgrade.d.ts.map +1 -0
- package/dist/cli/lib/mcp-upgrade.js +38 -0
- package/dist/cli/lib/mcp-upgrade.js.map +1 -0
- package/dist/cli/lib/mission-emit.d.ts +7 -0
- package/dist/cli/lib/mission-emit.d.ts.map +1 -0
- package/dist/cli/lib/mission-emit.js +23 -0
- package/dist/cli/lib/mission-emit.js.map +1 -0
- package/dist/cli/lib/mission-legislative-stub.d.ts +9 -0
- package/dist/cli/lib/mission-legislative-stub.d.ts.map +1 -0
- package/dist/cli/lib/mission-legislative-stub.js +36 -0
- package/dist/cli/lib/mission-legislative-stub.js.map +1 -0
- package/dist/cli/lib/mission-markdown.d.ts +6 -0
- package/dist/cli/lib/mission-markdown.d.ts.map +1 -0
- package/dist/cli/lib/mission-markdown.js +84 -0
- package/dist/cli/lib/mission-markdown.js.map +1 -0
- package/dist/cli/lib/mission-msn.d.ts +10 -0
- package/dist/cli/lib/mission-msn.d.ts.map +1 -0
- package/dist/cli/lib/mission-msn.js +85 -0
- package/dist/cli/lib/mission-msn.js.map +1 -0
- package/dist/cli/lib/mission-parser.d.ts +6 -0
- package/dist/cli/lib/mission-parser.d.ts.map +1 -0
- package/dist/cli/lib/mission-parser.js +29 -0
- package/dist/cli/lib/mission-parser.js.map +1 -0
- package/dist/cli/lib/mission-path.d.ts +4 -0
- package/dist/cli/lib/mission-path.d.ts.map +1 -0
- package/dist/cli/lib/mission-path.js +28 -0
- package/dist/cli/lib/mission-path.js.map +1 -0
- package/dist/cli/lib/mission-resolution.d.ts +14 -0
- package/dist/cli/lib/mission-resolution.d.ts.map +1 -0
- package/dist/cli/lib/mission-resolution.js +60 -0
- package/dist/cli/lib/mission-resolution.js.map +1 -0
- package/dist/cli/lib/mission-yaml.d.ts +12 -0
- package/dist/cli/lib/mission-yaml.d.ts.map +1 -0
- package/dist/cli/lib/mission-yaml.js +96 -0
- package/dist/cli/lib/mission-yaml.js.map +1 -0
- package/dist/cli/lib/msn-allocate.d.ts +13 -0
- package/dist/cli/lib/msn-allocate.d.ts.map +1 -0
- package/dist/cli/lib/msn-allocate.js +98 -0
- package/dist/cli/lib/msn-allocate.js.map +1 -0
- package/dist/cli/lib/msn.d.ts +2 -0
- package/dist/cli/lib/msn.d.ts.map +1 -0
- package/dist/cli/lib/msn.js +5 -0
- package/dist/cli/lib/msn.js.map +1 -0
- package/dist/cli/lib/onboarding-flow.d.ts +11 -0
- package/dist/cli/lib/onboarding-flow.d.ts.map +1 -0
- package/dist/cli/lib/onboarding-flow.js +25 -0
- package/dist/cli/lib/onboarding-flow.js.map +1 -0
- package/dist/cli/lib/out-of-scope-hint.d.ts +7 -0
- package/dist/cli/lib/out-of-scope-hint.d.ts.map +1 -0
- package/dist/cli/lib/out-of-scope-hint.js +79 -0
- package/dist/cli/lib/out-of-scope-hint.js.map +1 -0
- package/dist/cli/lib/output-context.d.ts +22 -0
- package/dist/cli/lib/output-context.d.ts.map +1 -0
- package/dist/cli/lib/output-context.js +55 -0
- package/dist/cli/lib/output-context.js.map +1 -0
- package/dist/cli/lib/program-audience-hook.d.ts +4 -0
- package/dist/cli/lib/program-audience-hook.d.ts.map +1 -0
- package/dist/cli/lib/program-audience-hook.js +35 -0
- package/dist/cli/lib/program-audience-hook.js.map +1 -0
- package/dist/cli/lib/runtime-env.d.ts +23 -0
- package/dist/cli/lib/runtime-env.d.ts.map +1 -0
- package/dist/cli/lib/runtime-env.js +64 -0
- package/dist/cli/lib/runtime-env.js.map +1 -0
- package/dist/cli/lib/runtime-exec-orchestrator.d.ts +14 -0
- package/dist/cli/lib/runtime-exec-orchestrator.d.ts.map +1 -0
- package/dist/cli/lib/runtime-exec-orchestrator.js +131 -0
- package/dist/cli/lib/runtime-exec-orchestrator.js.map +1 -0
- package/dist/cli/lib/runtime-exec-process.d.ts +23 -0
- package/dist/cli/lib/runtime-exec-process.d.ts.map +1 -0
- package/dist/cli/lib/runtime-exec-process.js +55 -0
- package/dist/cli/lib/runtime-exec-process.js.map +1 -0
- package/dist/cli/lib/runtime-exec-result.d.ts +21 -0
- package/dist/cli/lib/runtime-exec-result.d.ts.map +1 -0
- package/dist/cli/lib/runtime-exec-result.js +42 -0
- package/dist/cli/lib/runtime-exec-result.js.map +1 -0
- package/dist/cli/lib/runtime-exec-worker.d.ts +18 -0
- package/dist/cli/lib/runtime-exec-worker.d.ts.map +1 -0
- package/dist/cli/lib/runtime-exec-worker.js +49 -0
- package/dist/cli/lib/runtime-exec-worker.js.map +1 -0
- package/dist/cli/lib/runtime-exec.d.ts +5 -0
- package/dist/cli/lib/runtime-exec.d.ts.map +1 -0
- package/dist/cli/lib/runtime-exec.js +5 -0
- package/dist/cli/lib/runtime-exec.js.map +1 -0
- package/dist/cli/lib/skill-sync.d.ts +11 -0
- package/dist/cli/lib/skill-sync.d.ts.map +1 -0
- package/dist/cli/lib/skill-sync.js +39 -0
- package/dist/cli/lib/skill-sync.js.map +1 -0
- package/dist/cli/lib/start-orchestration.d.ts +29 -0
- package/dist/cli/lib/start-orchestration.d.ts.map +1 -0
- package/dist/cli/lib/start-orchestration.js +176 -0
- package/dist/cli/lib/start-orchestration.js.map +1 -0
- package/dist/cli/lib/start-state.d.ts +12 -0
- package/dist/cli/lib/start-state.d.ts.map +1 -0
- package/dist/cli/lib/start-state.js +86 -0
- package/dist/cli/lib/start-state.js.map +1 -0
- package/dist/cli/lib/status-report.d.ts +21 -0
- package/dist/cli/lib/status-report.d.ts.map +1 -0
- package/dist/cli/lib/status-report.js +77 -0
- package/dist/cli/lib/status-report.js.map +1 -0
- package/dist/cli/lib/substrate-version.d.ts +22 -0
- package/dist/cli/lib/substrate-version.d.ts.map +1 -0
- package/dist/cli/lib/substrate-version.js +97 -0
- package/dist/cli/lib/substrate-version.js.map +1 -0
- package/dist/cli/lib/teacher-identity.d.ts +24 -0
- package/dist/cli/lib/teacher-identity.d.ts.map +1 -0
- package/dist/cli/lib/teacher-identity.js +123 -0
- package/dist/cli/lib/teacher-identity.js.map +1 -0
- package/dist/cli/lib/telemetry-log.d.ts +22 -0
- package/dist/cli/lib/telemetry-log.d.ts.map +1 -0
- package/dist/cli/lib/telemetry-log.js +50 -0
- package/dist/cli/lib/telemetry-log.js.map +1 -0
- package/dist/cli/lib/trace-failure-kind.d.ts +4 -0
- package/dist/cli/lib/trace-failure-kind.d.ts.map +1 -0
- package/dist/cli/lib/trace-failure-kind.js +23 -0
- package/dist/cli/lib/trace-failure-kind.js.map +1 -0
- package/dist/cli/lib/trace.d.ts +25 -0
- package/dist/cli/lib/trace.d.ts.map +1 -0
- package/dist/cli/lib/trace.js +121 -0
- package/dist/cli/lib/trace.js.map +1 -0
- package/dist/cli/lib/triage-logic.d.ts +10 -0
- package/dist/cli/lib/triage-logic.d.ts.map +1 -0
- package/dist/cli/lib/triage-logic.js +105 -0
- package/dist/cli/lib/triage-logic.js.map +1 -0
- package/dist/cli/lib/types.d.ts +62 -0
- package/dist/cli/lib/types.d.ts.map +1 -0
- package/dist/cli/lib/types.js +2 -0
- package/dist/cli/lib/types.js.map +1 -0
- package/dist/cli/lib/upgrade-apply.d.ts +15 -0
- package/dist/cli/lib/upgrade-apply.d.ts.map +1 -0
- package/dist/cli/lib/upgrade-apply.js +122 -0
- package/dist/cli/lib/upgrade-apply.js.map +1 -0
- package/dist/cli/lib/upgrade-eligible-assets.d.ts +5 -0
- package/dist/cli/lib/upgrade-eligible-assets.d.ts.map +1 -0
- package/dist/cli/lib/upgrade-eligible-assets.js +9 -0
- package/dist/cli/lib/upgrade-eligible-assets.js.map +1 -0
- package/dist/cli/lib/upgrade-plan.d.ts +43 -0
- package/dist/cli/lib/upgrade-plan.d.ts.map +1 -0
- package/dist/cli/lib/upgrade-plan.js +220 -0
- package/dist/cli/lib/upgrade-plan.js.map +1 -0
- package/dist/cli/lib/upgrade-profile.d.ts +4 -0
- package/dist/cli/lib/upgrade-profile.d.ts.map +1 -0
- package/dist/cli/lib/upgrade-profile.js +27 -0
- package/dist/cli/lib/upgrade-profile.js.map +1 -0
- package/dist/cli/lib/user-error.d.ts +20 -0
- package/dist/cli/lib/user-error.d.ts.map +1 -0
- package/dist/cli/lib/user-error.js +64 -0
- package/dist/cli/lib/user-error.js.map +1 -0
- package/dist/cli/lib/verify-engine.d.ts +33 -0
- package/dist/cli/lib/verify-engine.d.ts.map +1 -0
- package/dist/cli/lib/verify-engine.js +104 -0
- package/dist/cli/lib/verify-engine.js.map +1 -0
- package/dist/cli/lib/verify-failure-presentation.d.ts +31 -0
- package/dist/cli/lib/verify-failure-presentation.d.ts.map +1 -0
- package/dist/cli/lib/verify-failure-presentation.js +93 -0
- package/dist/cli/lib/verify-failure-presentation.js.map +1 -0
- package/dist/cli/lib/verify-flow.d.ts +21 -0
- package/dist/cli/lib/verify-flow.d.ts.map +1 -0
- package/dist/cli/lib/verify-flow.js +103 -0
- package/dist/cli/lib/verify-flow.js.map +1 -0
- package/dist/cli/lib/verify-repair.d.ts +4 -0
- package/dist/cli/lib/verify-repair.d.ts.map +1 -0
- package/dist/cli/lib/verify-repair.js +61 -0
- package/dist/cli/lib/verify-repair.js.map +1 -0
- package/dist/cli/lib/verify-types.d.ts +21 -0
- package/dist/cli/lib/verify-types.d.ts.map +1 -0
- package/dist/cli/lib/verify-types.js +2 -0
- package/dist/cli/lib/verify-types.js.map +1 -0
- package/dist/cli/lib/version.gen.d.ts +4 -0
- package/dist/cli/lib/version.gen.d.ts.map +1 -0
- package/dist/cli/lib/version.gen.js +4 -0
- package/dist/cli/lib/version.gen.js.map +1 -0
- package/dist/cli/lib/worker-log-line-map.d.ts +12 -0
- package/dist/cli/lib/worker-log-line-map.d.ts.map +1 -0
- package/dist/cli/lib/worker-log-line-map.js +29 -0
- package/dist/cli/lib/worker-log-line-map.js.map +1 -0
- package/dist/cli/lib/workspace.d.ts +11 -0
- package/dist/cli/lib/workspace.d.ts.map +1 -0
- package/dist/cli/lib/workspace.js +14 -0
- package/dist/cli/lib/workspace.js.map +1 -0
- package/dist/cli/program-arch.d.ts +3 -0
- package/dist/cli/program-arch.d.ts.map +1 -0
- package/dist/cli/program-arch.js +45 -0
- package/dist/cli/program-arch.js.map +1 -0
- package/dist/cli/program-core.d.ts +3 -0
- package/dist/cli/program-core.d.ts.map +1 -0
- package/dist/cli/program-core.js +154 -0
- package/dist/cli/program-core.js.map +1 -0
- package/dist/cli/program-mcp.d.ts +3 -0
- package/dist/cli/program-mcp.d.ts.map +1 -0
- package/dist/cli/program-mcp.js +12 -0
- package/dist/cli/program-mcp.js.map +1 -0
- package/dist/cli/program-mission.d.ts +3 -0
- package/dist/cli/program-mission.d.ts.map +1 -0
- package/dist/cli/program-mission.js +77 -0
- package/dist/cli/program-mission.js.map +1 -0
- package/dist/cli/program-teacher.d.ts +3 -0
- package/dist/cli/program-teacher.d.ts.map +1 -0
- package/dist/cli/program-teacher.js +19 -0
- package/dist/cli/program-teacher.js.map +1 -0
- package/dist/cli/program-workflow.d.ts +3 -0
- package/dist/cli/program-workflow.d.ts.map +1 -0
- package/dist/cli/program-workflow.js +81 -0
- package/dist/cli/program-workflow.js.map +1 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +25 -0
- package/dist/cli/program.js.map +1 -0
- package/package.json +66 -0
- package/templates/.cursor/hooks/gxt-before-shell.sh +63 -0
- package/templates/.cursor/hooks/gxt-session-start.sh +68 -0
- package/templates/.cursor/hooks.json +15 -0
- package/templates/.cursor/mcp.json +8 -0
- package/templates/.cursor/rules/opengantry-gxt-substrate.mdc +43 -0
- package/templates/.gitagent/ARCHITECTURE.pointer.external.example.json +13 -0
- package/templates/.gitagent/ARCHITECTURE.pointer.json +9 -0
- package/templates/.gitagent/foreman/BYPASS.sha256 +2 -0
- package/templates/.gitagent/foreman/MANIFEST.json +37 -0
- package/templates/.gitagent/foreman/SUBSTRATE.version.json +6 -0
- package/templates/.gitagent/foreman/TEACHER.allowlist.example +4 -0
- package/templates/.gitagent/missions/README.md +18 -0
- package/templates/.gitagent/teacher/ARCHITECTURE-ACCESS.md +85 -0
- package/templates/.gitagent/teacher/ARCHITECTURE-DISCOVERY.md +40 -0
- package/templates/.gitagent/teacher/MISSION-ARCHITECT.md +93 -0
- package/templates/.gitagent/teacher/MISSION.schema.yaml +80 -0
- package/templates/.gitagent/teacher/RULES.md +36 -0
- package/templates/.gitagent/teacher/WORKER_LOG.template.md +2 -0
- package/templates/.githooks/post-checkout +26 -0
- package/templates/.githooks/pre-push +53 -0
- package/templates/.github/workflows/gxt-validate.yml +129 -0
- package/templates/.gitignore.gxt +8 -0
- package/templates/AGENTS.md +24 -0
- package/templates/docs/ARCHITECTURE.md +23 -0
- package/templates/integrations/aider/.aider.conf.yml +4 -0
- package/templates/integrations/antigravity/.agent/rules/gxt.md +11 -0
- package/templates/integrations/claude-code/CLAUDE.md +9 -0
- package/templates/integrations/cline/.clinerules/gxt.md +7 -0
- package/templates/integrations/codex-cli/.codex/config.toml +3 -0
- package/templates/integrations/compatibility.json +92 -0
- package/templates/integrations/junie/.junie/guidelines.md +11 -0
- package/templates/integrations/opencode/opencode.json +3 -0
- package/templates/integrations/openhands/.openhands/microagents/gxt.md +11 -0
- package/templates/integrations/recipes/_footer.md +20 -0
- package/templates/integrations/recipes/_preamble.md +46 -0
- package/templates/integrations/recipes/aider.md +13 -0
- package/templates/integrations/recipes/antigravity.md +8 -0
- package/templates/integrations/recipes/claude-code.md +14 -0
- package/templates/integrations/recipes/cline.md +8 -0
- package/templates/integrations/recipes/codex-cli.md +16 -0
- package/templates/integrations/recipes/cursor.md +19 -0
- package/templates/integrations/recipes/junie.md +8 -0
- package/templates/integrations/recipes/opencode.md +8 -0
- package/templates/integrations/recipes/openhands.md +8 -0
- package/templates/scripts/dev-validate.sh +24 -0
- package/templates/scripts/gxt-cursor-env.sh +5 -0
- package/templates/scripts/gxt-manifest-lib.mjs +139 -0
- package/templates/scripts/gxt-pin-mission.sh +31 -0
- package/templates/scripts/gxt-resolve-mission.sh +47 -0
- package/templates/scripts/gxt-runtime-env.sh +32 -0
- package/templates/scripts/validate-gxt.sh +184 -0
- package/templates/skills/gapman.md +5 -0
- package/templates/skills/logic.md +3 -0
- package/templates/skills/substrate.md +3 -0
- package/templates/skills/ui.md +3 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Node-only MANIFEST helpers for validate-gxt.sh (no jq dependency).
|
|
4
|
+
* Usage:
|
|
5
|
+
* node scripts/gxt-manifest-lib.mjs prefixes [repoRoot]
|
|
6
|
+
* node scripts/gxt-manifest-lib.mjs validate-manifest [repoRoot]
|
|
7
|
+
* node scripts/gxt-manifest-lib.mjs validate-bypass-note (JSON on stdin)
|
|
8
|
+
*/
|
|
9
|
+
import fs from "node:fs";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
|
|
12
|
+
const FIXED_MSN_PREFIXES = [
|
|
13
|
+
".gitagent/",
|
|
14
|
+
"WORKER_LOG.md",
|
|
15
|
+
".githooks/",
|
|
16
|
+
".github/workflows/gxt-validate.yml",
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
export function repoRootFromArg(arg) {
|
|
20
|
+
if (arg?.trim()) return path.resolve(arg.trim());
|
|
21
|
+
return process.cwd();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function readManifest(repoRoot) {
|
|
25
|
+
const rel = ".gitagent/foreman/MANIFEST.json";
|
|
26
|
+
const abs = path.join(repoRoot, rel);
|
|
27
|
+
if (!fs.existsSync(abs)) {
|
|
28
|
+
throw new Error(`validate-gxt: missing ${rel}`);
|
|
29
|
+
}
|
|
30
|
+
let parsed;
|
|
31
|
+
try {
|
|
32
|
+
parsed = JSON.parse(fs.readFileSync(abs, "utf8"));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
throw new Error(`validate-gxt: invalid JSON in ${rel}: ${e instanceof Error ? e.message : String(e)}`);
|
|
35
|
+
}
|
|
36
|
+
return parsed;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function listMsnEnforcedPrefixes(repoRoot) {
|
|
40
|
+
const manifest = readManifest(repoRoot);
|
|
41
|
+
const skills = manifest.skills;
|
|
42
|
+
if (!skills || typeof skills !== "object" || Array.isArray(skills)) {
|
|
43
|
+
throw new Error("validate-gxt: MANIFEST skills must be a non-empty object");
|
|
44
|
+
}
|
|
45
|
+
const roots = Object.values(skills).flatMap((s) => {
|
|
46
|
+
if (!s || typeof s !== "object") return [];
|
|
47
|
+
return Array.isArray(s.tmvc_roots) ? s.tmvc_roots : [];
|
|
48
|
+
});
|
|
49
|
+
const out = new Set();
|
|
50
|
+
for (const p of [...FIXED_MSN_PREFIXES, ...roots]) {
|
|
51
|
+
if (typeof p !== "string" || !p.trim()) continue;
|
|
52
|
+
out.add(p.replace(/\\/g, "/"));
|
|
53
|
+
}
|
|
54
|
+
return [...out];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function validateManifestStructure(repoRoot) {
|
|
58
|
+
const m = readManifest(repoRoot);
|
|
59
|
+
if (typeof m.schema_version !== "string" || m.schema_version.length === 0) {
|
|
60
|
+
throw new Error("validate-gxt: schema_version must be a non-empty string");
|
|
61
|
+
}
|
|
62
|
+
const skills = m.skills;
|
|
63
|
+
if (!skills || typeof skills !== "object" || Array.isArray(skills) || Object.keys(skills).length === 0) {
|
|
64
|
+
throw new Error("validate-gxt: skills must be a non-empty object");
|
|
65
|
+
}
|
|
66
|
+
if (!m.path_risks || typeof m.path_risks !== "object" || Array.isArray(m.path_risks)) {
|
|
67
|
+
throw new Error("validate-gxt: path_risks must be an object");
|
|
68
|
+
}
|
|
69
|
+
if (!Array.isArray(m.risk_keywords)) {
|
|
70
|
+
throw new Error("validate-gxt: risk_keywords must be an array");
|
|
71
|
+
}
|
|
72
|
+
for (const [key, skill] of Object.entries(skills)) {
|
|
73
|
+
if (!skill || typeof skill !== "object") {
|
|
74
|
+
throw new Error(`validate-gxt: skills.${key} must be an object`);
|
|
75
|
+
}
|
|
76
|
+
for (const field of ["trust_threshold", "tmvc_roots", "forbidden_zones"]) {
|
|
77
|
+
if (!(field in skill)) {
|
|
78
|
+
throw new Error(`validate-gxt: skills.${key} missing ${field}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!Array.isArray(skill.tmvc_roots)) {
|
|
82
|
+
throw new Error(`validate-gxt: skills.${key}.tmvc_roots must be an array`);
|
|
83
|
+
}
|
|
84
|
+
if (!Array.isArray(skill.forbidden_zones)) {
|
|
85
|
+
throw new Error(`validate-gxt: skills.${key}.forbidden_zones must be an array`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function validateBypassNoteJson(raw) {
|
|
91
|
+
let parsed;
|
|
92
|
+
try {
|
|
93
|
+
parsed = JSON.parse(raw);
|
|
94
|
+
} catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return (
|
|
98
|
+
parsed?.v === 1 &&
|
|
99
|
+
typeof parsed.reason === "string" &&
|
|
100
|
+
parsed.reason.length >= 10
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function main() {
|
|
105
|
+
const cmd = process.argv[2];
|
|
106
|
+
const repoRoot = repoRootFromArg(process.argv[3]);
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
switch (cmd) {
|
|
110
|
+
case "prefixes": {
|
|
111
|
+
for (const p of listMsnEnforcedPrefixes(repoRoot)) {
|
|
112
|
+
console.log(p);
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case "validate-manifest": {
|
|
117
|
+
validateManifestStructure(repoRoot);
|
|
118
|
+
console.log("MANIFEST OK");
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case "validate-bypass-note": {
|
|
122
|
+
const stdin = fs.readFileSync(0, "utf8");
|
|
123
|
+
process.exit(validateBypassNoteJson(stdin) ? 0 : 1);
|
|
124
|
+
}
|
|
125
|
+
default:
|
|
126
|
+
console.error(
|
|
127
|
+
"Usage: gxt-manifest-lib.mjs <prefixes|validate-manifest|validate-bypass-note> [repoRoot]",
|
|
128
|
+
);
|
|
129
|
+
process.exit(2);
|
|
130
|
+
}
|
|
131
|
+
} catch (e) {
|
|
132
|
+
console.error(e instanceof Error ? e.message : String(e));
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (process.argv[1]?.includes("gxt-manifest-lib.mjs")) {
|
|
138
|
+
main();
|
|
139
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Pin the active GXT mission for gxt-runtime-env.sh and Cursor sessionStart hooks.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
|
|
6
|
+
if [ -z "$ROOT" ]; then
|
|
7
|
+
echo "gxt-pin-mission: not inside a git repository" >&2
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
cd "$ROOT"
|
|
11
|
+
|
|
12
|
+
if [ $# -lt 1 ]; then
|
|
13
|
+
cat >&2 <<'EOF'
|
|
14
|
+
usage: scripts/gxt-pin-mission.sh .gitagent/missions/<file>.yaml
|
|
15
|
+
|
|
16
|
+
Writes .gitagent/missions/.active-mission (gitignored) for:
|
|
17
|
+
- scripts/gxt-runtime-env.sh (no arg)
|
|
18
|
+
- .cursor/hooks/gxt-session-start.sh (new Agent sessions)
|
|
19
|
+
EOF
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
MISSION="$1"
|
|
24
|
+
if [ ! -f "$MISSION" ]; then
|
|
25
|
+
echo "gxt-pin-mission: mission file not found: $MISSION" >&2
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
mkdir -p .gitagent/missions
|
|
30
|
+
printf '%s\n' "$MISSION" > .gitagent/missions/.active-mission
|
|
31
|
+
printf 'Pinned active mission: %s\n' "$MISSION"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Resolve active GXT mission path (repo-relative). Prints path on stdout; exit 1 if unset.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT="${GXT_RESOLVE_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || true)}"
|
|
6
|
+
if [ -z "$ROOT" ]; then
|
|
7
|
+
exit 1
|
|
8
|
+
fi
|
|
9
|
+
cd "$ROOT"
|
|
10
|
+
|
|
11
|
+
explicit="${1:-}"
|
|
12
|
+
if [ -n "$explicit" ]; then
|
|
13
|
+
printf '%s\n' "$explicit"
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
if [ -n "${GAPMAN_MISSION:-}" ]; then
|
|
18
|
+
printf '%s\n' "$GAPMAN_MISSION"
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if [ -n "${GXT_MISSION_FILE:-}" ]; then
|
|
23
|
+
printf '%s\n' "$GXT_MISSION_FILE"
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
if [ -f ".gitagent/missions/.active-mission" ]; then
|
|
28
|
+
line=""
|
|
29
|
+
IFS= read -r line < ".gitagent/missions/.active-mission" || true
|
|
30
|
+
line="$(printf '%s' "$line" | tr -d '[:space:]')"
|
|
31
|
+
if [ -n "$line" ]; then
|
|
32
|
+
printf '%s\n' "$line"
|
|
33
|
+
exit 0
|
|
34
|
+
fi
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
if [ -f ".gitagent/missions/ACTIVE_MISSION.md" ]; then
|
|
38
|
+
printf '%s\n' ".gitagent/missions/ACTIVE_MISSION.md"
|
|
39
|
+
exit 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ -f ".gitagent/missions/ACTIVE_MISSION.yaml" ]; then
|
|
43
|
+
printf '%s\n' ".gitagent/missions/ACTIVE_MISSION.yaml"
|
|
44
|
+
exit 0
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
exit 1
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Load GXT Worker Runtime Contract into the current shell (any IDE terminal / manual runs).
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
|
|
6
|
+
if [ -z "$ROOT" ]; then
|
|
7
|
+
echo "gxt-runtime-env: not inside a git repository" >&2
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
cd "$ROOT"
|
|
11
|
+
|
|
12
|
+
MISSION=""
|
|
13
|
+
if ! MISSION="$(scripts/gxt-resolve-mission.sh "${1:-}" 2>/dev/null)"; then
|
|
14
|
+
cat >&2 <<'EOF'
|
|
15
|
+
gxt-runtime-env: no mission file resolved.
|
|
16
|
+
scripts/gxt-pin-mission.sh .gitagent/missions/<file>.yaml
|
|
17
|
+
source scripts/gxt-runtime-env.sh .gitagent/missions/<file>.yaml
|
|
18
|
+
export GAPMAN_MISSION=.gitagent/missions/<file>.yaml
|
|
19
|
+
EOF
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
if command -v gapman >/dev/null 2>&1; then
|
|
24
|
+
eval "$(gapman runtime env --mission "$MISSION")"
|
|
25
|
+
elif [ -f "dist/cli/index.js" ]; then
|
|
26
|
+
eval "$(node dist/cli/index.js runtime env --mission "$MISSION")"
|
|
27
|
+
else
|
|
28
|
+
echo "gxt-runtime-env: gapman not found (npm ci && npm run build)" >&2
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
printf 'GXT runtime loaded: mission=%s skill=%s\n' "$GXT_MISSION_FILE" "${GXT_SKILL_KEY:-unknown}"
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# OpenGantry local + CI validation. Keep path-prefix rules in sync with
|
|
3
|
+
# .github/workflows/gxt-validate.yml (msn_commits job).
|
|
4
|
+
# MSN-enforced paths: fixed substrate + MANIFEST tmvc_roots (Node; no jq).
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || {
|
|
8
|
+
echo "validate-gxt: not inside a git repository" >&2
|
|
9
|
+
exit 1
|
|
10
|
+
}
|
|
11
|
+
cd "$ROOT"
|
|
12
|
+
|
|
13
|
+
MANIFEST_REL=".gitagent/foreman/MANIFEST.json"
|
|
14
|
+
BYPASS_SHA256_REL=".gitagent/foreman/BYPASS.sha256"
|
|
15
|
+
GXT_BYPASS_NOTES_REF="refs/notes/gxt-bypass"
|
|
16
|
+
GXT_MANIFEST_LIB="scripts/gxt-manifest-lib.mjs"
|
|
17
|
+
|
|
18
|
+
# Cached MSN-enforced path prefixes (fixed substrate + MANIFEST tmvc_roots).
|
|
19
|
+
MSN_PREFIXES=()
|
|
20
|
+
|
|
21
|
+
load_msn_prefixes() {
|
|
22
|
+
if [[ ${#MSN_PREFIXES[@]} -gt 0 ]]; then
|
|
23
|
+
return 0
|
|
24
|
+
fi
|
|
25
|
+
if [[ ! -f "$GXT_MANIFEST_LIB" ]]; then
|
|
26
|
+
echo "validate-gxt: missing $GXT_MANIFEST_LIB" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
mapfile -t MSN_PREFIXES < <(node "$GXT_MANIFEST_LIB" prefixes "$ROOT") || {
|
|
30
|
+
echo "validate-gxt: failed to load MSN-enforced prefixes from MANIFEST (Node required)" >&2
|
|
31
|
+
exit 1
|
|
32
|
+
}
|
|
33
|
+
if [[ ${#MSN_PREFIXES[@]} -eq 0 ]]; then
|
|
34
|
+
echo "validate-gxt: no MSN-enforced prefixes" >&2
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Returns 0 if commit has a valid gxt-bypass git note (JSON v1 + reason >= 10 chars).
|
|
40
|
+
commit_has_gxt_bypass_note() {
|
|
41
|
+
local commit="$1"
|
|
42
|
+
local note
|
|
43
|
+
note="$(git notes --ref="$GXT_BYPASS_NOTES_REF" show "$commit" 2>/dev/null)" || return 1
|
|
44
|
+
printf '%s' "$note" | node "$GXT_MANIFEST_LIB" validate-bypass-note >/dev/null 2>&1
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# Returns 0 when GXT_BYPASS_SECRET matches BYPASS.sha256 anchor (never commit the secret).
|
|
48
|
+
is_bypass_secret_authorized() {
|
|
49
|
+
local anchor secret secret_hash
|
|
50
|
+
[[ -n "${GXT_BYPASS_SECRET:-}" ]] || return 1
|
|
51
|
+
[[ -f "$BYPASS_SHA256_REL" ]] || return 1
|
|
52
|
+
anchor="$(grep -E '^[a-fA-F0-9]{64}$' "$BYPASS_SHA256_REL" | head -1 | tr '[:upper:]' '[:lower:]')"
|
|
53
|
+
[[ -n "$anchor" ]] || return 1
|
|
54
|
+
secret_hash="$(printf '%s' "$GXT_BYPASS_SECRET" | sha256sum | awk '{print $1}' | tr '[:upper:]' '[:lower:]')"
|
|
55
|
+
[[ "$anchor" == "$secret_hash" ]]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# Returns 0 if this path should trigger [MSN-XXXX] subject enforcement.
|
|
59
|
+
is_msn_enforced_path() {
|
|
60
|
+
local p="$1"
|
|
61
|
+
local prefix
|
|
62
|
+
load_msn_prefixes
|
|
63
|
+
for prefix in "${MSN_PREFIXES[@]}"; do
|
|
64
|
+
[[ -z "$prefix" ]] && continue
|
|
65
|
+
if [[ "$p" == "$prefix" ]]; then
|
|
66
|
+
return 0
|
|
67
|
+
fi
|
|
68
|
+
if [[ "$prefix" == */ ]] && [[ "$p" == "$prefix"* ]]; then
|
|
69
|
+
return 0
|
|
70
|
+
fi
|
|
71
|
+
if [[ "$prefix" != */ ]] && [[ "$p" == "$prefix"/* ]]; then
|
|
72
|
+
return 0
|
|
73
|
+
fi
|
|
74
|
+
done
|
|
75
|
+
return 1
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
cmd_upgrade_tmp() {
|
|
79
|
+
local tracked
|
|
80
|
+
tracked="$(git ls-files '.gitagent/.upgrade-tmp' 2>/dev/null || true)"
|
|
81
|
+
if [[ -n "$tracked" ]]; then
|
|
82
|
+
echo "upgrade-tmp check FAILED: tracked files under .gitagent/.upgrade-tmp/ (must be gitignored staging only)" >&2
|
|
83
|
+
printf '%s\n' "$tracked" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
echo "upgrade-tmp OK (no tracked staging files)"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
cmd_manifest() {
|
|
90
|
+
node "$GXT_MANIFEST_LIB" validate-manifest "$ROOT"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
cmd_msn() {
|
|
94
|
+
local base_ref="$1"
|
|
95
|
+
local head_ref="$2"
|
|
96
|
+
local base_sha head_sha commit subject f touched
|
|
97
|
+
|
|
98
|
+
base_sha="$(git rev-parse --verify "${base_ref}^{commit}")"
|
|
99
|
+
head_sha="$(git rev-parse --verify "${head_ref}^{commit}")"
|
|
100
|
+
|
|
101
|
+
while IFS= read -r commit; do
|
|
102
|
+
[[ -n "$commit" ]] || continue
|
|
103
|
+
touched=0
|
|
104
|
+
while IFS= read -r f; do
|
|
105
|
+
[[ -n "$f" ]] || continue
|
|
106
|
+
if is_msn_enforced_path "$f"; then
|
|
107
|
+
touched=1
|
|
108
|
+
break
|
|
109
|
+
fi
|
|
110
|
+
done < <(git diff-tree --no-commit-id --name-only -r "$commit" 2>/dev/null || true)
|
|
111
|
+
|
|
112
|
+
if [[ "$touched" -eq 0 ]]; then
|
|
113
|
+
continue
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
subject="$(git log -1 --format=%s "$commit")"
|
|
117
|
+
if [[ "$subject" =~ ^\[MSN-[0-9]{4}\] ]]; then
|
|
118
|
+
continue
|
|
119
|
+
fi
|
|
120
|
+
if commit_has_gxt_bypass_note "$commit"; then
|
|
121
|
+
continue
|
|
122
|
+
fi
|
|
123
|
+
echo "MSN check FAILED: commit $commit touches MSN-enforced paths but subject does not start with [MSN-NNNN] and has no gxt-bypass git note" >&2
|
|
124
|
+
echo " subject: $subject" >&2
|
|
125
|
+
echo " hint: run gapman verify --break-glass --reason \"...\" with GXT_BYPASS_SECRET, push refs/notes/gxt-bypass" >&2
|
|
126
|
+
echo " touched paths (sample):" >&2
|
|
127
|
+
git diff-tree --no-commit-id --name-only -r "$commit" | head -20 >&2
|
|
128
|
+
exit 1
|
|
129
|
+
done < <(git rev-list --no-merges "${base_sha}..${head_sha}")
|
|
130
|
+
|
|
131
|
+
echo "MSN commit subjects OK (path-scoped: substrate + MANIFEST tmvc_roots)"
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
usage() {
|
|
135
|
+
cat <<'EOF' >&2
|
|
136
|
+
Usage:
|
|
137
|
+
validate-gxt.sh [manifest] Validate Foreman MANIFEST.json (default)
|
|
138
|
+
validate-gxt.sh msn <base> <head> Require [MSN-NNNN] or gxt-bypass git note on commits
|
|
139
|
+
in range that touch MSN-enforced paths
|
|
140
|
+
validate-gxt.sh upgrade-tmp Fail if .gitagent/.upgrade-tmp/ contains tracked files
|
|
141
|
+
validate-gxt.sh all [base head] Run manifest, upgrade-tmp, then msn if base and head given
|
|
142
|
+
Example:
|
|
143
|
+
./scripts/validate-gxt.sh msn origin/main HEAD
|
|
144
|
+
EOF
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
main() {
|
|
148
|
+
local cmd="${1:-manifest}"
|
|
149
|
+
shift || true
|
|
150
|
+
case "$cmd" in
|
|
151
|
+
manifest)
|
|
152
|
+
cmd_manifest
|
|
153
|
+
;;
|
|
154
|
+
upgrade-tmp)
|
|
155
|
+
cmd_upgrade_tmp
|
|
156
|
+
;;
|
|
157
|
+
msn)
|
|
158
|
+
if [[ $# -ne 2 ]]; then
|
|
159
|
+
usage
|
|
160
|
+
exit 2
|
|
161
|
+
fi
|
|
162
|
+
cmd_msn "$1" "$2"
|
|
163
|
+
;;
|
|
164
|
+
all)
|
|
165
|
+
cmd_manifest
|
|
166
|
+
cmd_upgrade_tmp
|
|
167
|
+
if [[ $# -ge 2 ]]; then
|
|
168
|
+
cmd_msn "$1" "$2"
|
|
169
|
+
else
|
|
170
|
+
echo "Hint: pass <base> <head> to also run MSN checks, e.g. all origin/main HEAD" >&2
|
|
171
|
+
fi
|
|
172
|
+
;;
|
|
173
|
+
-h|--help|help)
|
|
174
|
+
usage
|
|
175
|
+
exit 0
|
|
176
|
+
;;
|
|
177
|
+
*)
|
|
178
|
+
usage
|
|
179
|
+
exit 2
|
|
180
|
+
;;
|
|
181
|
+
esac
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
main "$@"
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Skill: gapman
|
|
2
|
+
|
|
3
|
+
Manifest key `gapman`. **gapman** CLI and tests under `src/cli/` per [`.gitagent/foreman/MANIFEST.json`](../.gitagent/foreman/MANIFEST.json).
|
|
4
|
+
|
|
5
|
+
Substrate paths (`.gitagent/`, hooks, workflows) require Teacher legislation and **`substrate`** or explicit mission scope — do not edit Foreman law without a mission.
|