@jeger-ai/opengantry 2.1.0 → 2.2.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 +24 -7
- package/dist/cli/commands/audit-rigor.d.ts +8 -0
- package/dist/cli/commands/audit-rigor.d.ts.map +1 -0
- package/dist/cli/commands/audit-rigor.js +24 -0
- package/dist/cli/commands/audit-rigor.js.map +1 -0
- package/dist/cli/commands/context-feed.d.ts +6 -0
- package/dist/cli/commands/context-feed.d.ts.map +1 -0
- package/dist/cli/commands/context-feed.js +48 -0
- package/dist/cli/commands/context-feed.js.map +1 -0
- package/dist/cli/commands/mission.js +1 -1
- package/dist/cli/commands/mission.js.map +1 -1
- package/dist/cli/commands/onboarding.d.ts.map +1 -1
- package/dist/cli/commands/onboarding.js +9 -4
- package/dist/cli/commands/onboarding.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +2 -1
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/lib/architecture-pointer.d.ts +1 -1
- package/dist/cli/lib/architecture-pointer.d.ts.map +1 -1
- package/dist/cli/lib/audit-rigor.d.ts +18 -0
- package/dist/cli/lib/audit-rigor.d.ts.map +1 -0
- package/dist/cli/lib/audit-rigor.js +189 -0
- package/dist/cli/lib/audit-rigor.js.map +1 -0
- package/dist/cli/lib/constants.d.ts +4 -0
- package/dist/cli/lib/constants.d.ts.map +1 -1
- package/dist/cli/lib/constants.js +4 -0
- package/dist/cli/lib/constants.js.map +1 -1
- package/dist/cli/lib/context-feed-remediation.d.ts +12 -0
- package/dist/cli/lib/context-feed-remediation.d.ts.map +1 -0
- package/dist/cli/lib/context-feed-remediation.js +88 -0
- package/dist/cli/lib/context-feed-remediation.js.map +1 -0
- package/dist/cli/lib/context-feed-store.d.ts +33 -0
- package/dist/cli/lib/context-feed-store.d.ts.map +1 -0
- package/dist/cli/lib/context-feed-store.js +110 -0
- package/dist/cli/lib/context-feed-store.js.map +1 -0
- package/dist/cli/lib/doctor-core.d.ts +5 -0
- package/dist/cli/lib/doctor-core.d.ts.map +1 -0
- package/dist/cli/lib/doctor-core.js +163 -0
- package/dist/cli/lib/doctor-core.js.map +1 -0
- package/dist/cli/lib/doctor-integration.d.ts +13 -0
- package/dist/cli/lib/doctor-integration.d.ts.map +1 -0
- package/dist/cli/lib/doctor-integration.js +120 -0
- package/dist/cli/lib/doctor-integration.js.map +1 -0
- package/dist/cli/lib/doctor-substrate.d.ts +3 -0
- package/dist/cli/lib/doctor-substrate.d.ts.map +1 -0
- package/dist/cli/lib/doctor-substrate.js +35 -0
- package/dist/cli/lib/doctor-substrate.js.map +1 -0
- package/dist/cli/lib/doctor-types.d.ts +24 -0
- package/dist/cli/lib/doctor-types.d.ts.map +1 -0
- package/dist/cli/lib/doctor-types.js +7 -0
- package/dist/cli/lib/doctor-types.js.map +1 -0
- package/dist/cli/lib/doctor.d.ts +4 -30
- package/dist/cli/lib/doctor.d.ts.map +1 -1
- package/dist/cli/lib/doctor.js +4 -281
- package/dist/cli/lib/doctor.js.map +1 -1
- package/dist/cli/lib/integration-compat.d.ts +7 -0
- package/dist/cli/lib/integration-compat.d.ts.map +1 -1
- package/dist/cli/lib/integration-compat.js +14 -0
- package/dist/cli/lib/integration-compat.js.map +1 -1
- package/dist/cli/lib/kpi-engine.d.ts +0 -2
- package/dist/cli/lib/kpi-engine.d.ts.map +1 -1
- package/dist/cli/lib/kpi-engine.js +11 -13
- package/dist/cli/lib/kpi-engine.js.map +1 -1
- package/dist/cli/lib/mcp-tools-register.js +1 -1
- package/dist/cli/lib/mcp-tools-register.js.map +1 -1
- package/dist/cli/lib/mcp-upgrade.d.ts +2 -2
- package/dist/cli/lib/mcp-upgrade.d.ts.map +1 -1
- package/dist/cli/lib/mcp-upgrade.js +5 -1
- package/dist/cli/lib/mcp-upgrade.js.map +1 -1
- package/dist/cli/lib/missions/formatter.d.ts.map +1 -1
- package/dist/cli/lib/missions/formatter.js +1 -0
- package/dist/cli/lib/missions/formatter.js.map +1 -1
- package/dist/cli/lib/missions/parser.d.ts.map +1 -1
- package/dist/cli/lib/missions/parser.js +1 -0
- package/dist/cli/lib/missions/parser.js.map +1 -1
- package/dist/cli/lib/start-orchestration.d.ts +1 -11
- package/dist/cli/lib/start-orchestration.d.ts.map +1 -1
- package/dist/cli/lib/start-orchestration.js +1 -85
- package/dist/cli/lib/start-orchestration.js.map +1 -1
- package/dist/cli/lib/start-snapshot.d.ts +12 -0
- package/dist/cli/lib/start-snapshot.d.ts.map +1 -0
- package/dist/cli/lib/start-snapshot.js +81 -0
- package/dist/cli/lib/start-snapshot.js.map +1 -0
- package/dist/cli/lib/trace.d.ts.map +1 -1
- package/dist/cli/lib/trace.js +1 -6
- package/dist/cli/lib/trace.js.map +1 -1
- package/dist/cli/lib/types.d.ts +3 -0
- package/dist/cli/lib/types.d.ts.map +1 -1
- package/dist/cli/lib/upgrade-plan-payload.d.ts +31 -0
- package/dist/cli/lib/upgrade-plan-payload.d.ts.map +1 -0
- package/dist/cli/lib/upgrade-plan-payload.js +109 -0
- package/dist/cli/lib/upgrade-plan-payload.js.map +1 -0
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +39 -13
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-failure-format.d.ts +29 -0
- package/dist/cli/lib/verify-failure-format.d.ts.map +1 -0
- package/dist/cli/lib/verify-failure-format.js +68 -0
- package/dist/cli/lib/verify-failure-format.js.map +1 -0
- package/dist/cli/lib/verify-hints.d.ts +32 -0
- package/dist/cli/lib/verify-hints.d.ts.map +1 -0
- package/dist/cli/lib/verify-hints.js +161 -0
- package/dist/cli/lib/verify-hints.js.map +1 -0
- package/dist/cli/lib/verify-payload.d.ts +0 -1
- package/dist/cli/lib/verify-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.js +6 -19
- package/dist/cli/lib/verify-payload.js.map +1 -1
- package/dist/cli/lib/verify-present.d.ts +6 -23
- package/dist/cli/lib/verify-present.d.ts.map +1 -1
- package/dist/cli/lib/verify-present.js +3 -215
- package/dist/cli/lib/verify-present.js.map +1 -1
- package/dist/cli/lib/verify-presentation.d.ts +2 -1
- package/dist/cli/lib/verify-presentation.d.ts.map +1 -1
- package/dist/cli/lib/verify-presentation.js +2 -1
- package/dist/cli/lib/verify-presentation.js.map +1 -1
- package/dist/cli/lib/verify-presenters.d.ts +19 -0
- package/dist/cli/lib/verify-presenters.d.ts.map +1 -0
- package/dist/cli/lib/verify-presenters.js +173 -0
- package/dist/cli/lib/verify-presenters.js.map +1 -0
- package/dist/cli/lib/verify-remediation.d.ts +4 -56
- package/dist/cli/lib/verify-remediation.d.ts.map +1 -1
- package/dist/cli/lib/verify-remediation.js +2 -226
- package/dist/cli/lib/verify-remediation.js.map +1 -1
- package/dist/cli/lib/verify-run.d.ts +12 -0
- package/dist/cli/lib/verify-run.d.ts.map +1 -0
- package/dist/cli/lib/verify-run.js +70 -0
- package/dist/cli/lib/verify-run.js.map +1 -0
- package/dist/cli/lib/verify-sinks.d.ts +4 -0
- package/dist/cli/lib/verify-sinks.d.ts.map +1 -0
- package/dist/cli/lib/verify-sinks.js +12 -0
- package/dist/cli/lib/verify-sinks.js.map +1 -0
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/lib/virtual-scratch-store.d.ts +37 -0
- package/dist/cli/lib/virtual-scratch-store.d.ts.map +1 -0
- package/dist/cli/lib/virtual-scratch-store.js +132 -0
- package/dist/cli/lib/virtual-scratch-store.js.map +1 -0
- package/dist/cli/program-core.d.ts.map +1 -1
- package/dist/cli/program-core.js +43 -3
- package/dist/cli/program-core.js.map +1 -1
- package/package.json +1 -1
- package/templates/.gitagent/teacher/MISSION.schema.yaml +6 -0
- package/templates/.gitignore.gxt +2 -0
- package/templates/integrations/asset-catalog.json +1 -0
- package/templates/integrations/compatibility.json +10 -1
- package/templates/integrations/recipes/claude-code.md +6 -4
- package/templates/integrations/recipes/codex-cli.md +6 -4
- package/templates/integrations/recipes/opencode.md +8 -2
- package/templates/scripts/gxt-shell-agent.sh +62 -0
- package/dist/cli/lib/kpi-report-stale.d.ts +0 -18
- package/dist/cli/lib/kpi-report-stale.d.ts.map +0 -1
- package/dist/cli/lib/kpi-report-stale.js +0 -91
- package/dist/cli/lib/kpi-report-stale.js.map +0 -1
- package/dist/cli/lib/trace-evidence.d.ts +0 -23
- package/dist/cli/lib/trace-evidence.d.ts.map +0 -1
- package/dist/cli/lib/trace-evidence.js +0 -118
- package/dist/cli/lib/trace-evidence.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program-core.d.ts","sourceRoot":"","sources":["../../src/cli/program-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"program-core.d.ts","sourceRoot":"","sources":["../../src/cli/program-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2K3D"}
|
package/dist/cli/program-core.js
CHANGED
|
@@ -4,6 +4,8 @@ import { runUpgrade } from "./commands/upgrade.js";
|
|
|
4
4
|
import { runStatus } from "./commands/status.js";
|
|
5
5
|
import { runDoctor } from "./commands/doctor.js";
|
|
6
6
|
import { runOnboarding } from "./commands/onboarding.js";
|
|
7
|
+
import { runContextFeed } from "./commands/context-feed.js";
|
|
8
|
+
import { runAuditRigorCommand } from "./commands/audit-rigor.js";
|
|
7
9
|
import { runStart } from "./commands/start.js";
|
|
8
10
|
import { runTriage } from "./commands/triage.js";
|
|
9
11
|
import { readStdinIfEmpty } from "./lib/program-stdin.js";
|
|
@@ -56,9 +58,26 @@ export function registerCoreCommands(program) {
|
|
|
56
58
|
.action(async (opts) => {
|
|
57
59
|
await runInit(opts);
|
|
58
60
|
});
|
|
59
|
-
program
|
|
61
|
+
const upgradeCmd = program
|
|
60
62
|
.command("upgrade")
|
|
61
|
-
.description("Plan or apply substrate upgrades from the installed gapman package (Tier-3)")
|
|
63
|
+
.description("Plan or apply substrate upgrades from the installed gapman package (Tier-3)");
|
|
64
|
+
upgradeCmd
|
|
65
|
+
.command("plan")
|
|
66
|
+
.description("Preview upgrade file changes without writing staging dir or mission YAML")
|
|
67
|
+
.option("--json", "Emit stable structured JSON (schema_version 1)")
|
|
68
|
+
.option("--msn <id>", "Mission id for preview labels (default: next MSN in 9000-9099 band)")
|
|
69
|
+
.action((options) => {
|
|
70
|
+
runUpgrade({ ...options, dryRun: true });
|
|
71
|
+
});
|
|
72
|
+
upgradeCmd
|
|
73
|
+
.command("apply")
|
|
74
|
+
.description("Apply a Teacher-signed upgrade mission after hash verification")
|
|
75
|
+
.option("--json", "Emit structured JSON")
|
|
76
|
+
.option("--mission <path>", "Signed upgrade mission YAML (required unless pinned)")
|
|
77
|
+
.action((options) => {
|
|
78
|
+
runUpgrade({ ...options, apply: true });
|
|
79
|
+
});
|
|
80
|
+
upgradeCmd
|
|
62
81
|
.option("--apply", "Apply a Teacher-signed upgrade mission after hash verification")
|
|
63
82
|
.option("--dry-run", "Print upgrade plan without writing staging dir or mission YAML")
|
|
64
83
|
.option("--json", "Emit structured JSON")
|
|
@@ -117,9 +136,30 @@ export function registerCoreCommands(program) {
|
|
|
117
136
|
program
|
|
118
137
|
.command("onboarding")
|
|
119
138
|
.description("Interactive walkthrough of the strict GXT mission loop")
|
|
120
|
-
.option("--force", "Continue despite integration
|
|
139
|
+
.option("--force", "Continue despite integration health blockers on configured (broken) state")
|
|
121
140
|
.action(async (opts) => {
|
|
122
141
|
await runOnboarding({ force: opts.force });
|
|
123
142
|
});
|
|
143
|
+
program
|
|
144
|
+
.command("context-feed")
|
|
145
|
+
.description("Read or clear the latest verify remediation snapshot for IDE/agent loops")
|
|
146
|
+
.option("--json", "Emit structured remediation payload")
|
|
147
|
+
.option("--clear", "Atomically clear remediation feed (tombstone swap)")
|
|
148
|
+
.action((opts) => {
|
|
149
|
+
runContextFeed({ json: opts.json, clear: opts.clear });
|
|
150
|
+
});
|
|
151
|
+
program
|
|
152
|
+
.command("audit-rigor")
|
|
153
|
+
.description("Meta-governance audit: compiler strictness, coverage artifacts, MANIFEST wildcards")
|
|
154
|
+
.option("--json", "Emit structured report")
|
|
155
|
+
.option("--strict", "Treat warnings as failures")
|
|
156
|
+
.option("--workspace <path>", "Workspace root override (tests; default: git repo root)")
|
|
157
|
+
.action((opts) => {
|
|
158
|
+
runAuditRigorCommand({
|
|
159
|
+
json: opts.json,
|
|
160
|
+
strict: opts.strict,
|
|
161
|
+
workspace: opts.workspace,
|
|
162
|
+
});
|
|
163
|
+
});
|
|
124
164
|
}
|
|
125
165
|
//# sourceMappingURL=program-core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program-core.js","sourceRoot":"","sources":["../../src/cli/program-core.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUxD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,GAAG,EAAE;QACX,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,WAAW,EAAE,gCAAgC,CAAC;SACrD,MAAM,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;SAClF,MAAM,CAAC,CAAC,IAA8D,EAAE,EAAE;QACzE,SAAS,CAAC;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,iBAAiB,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;SAClF,MAAM,CAAC,CAAC,IAA2C,EAAE,EAAE;QACtD,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,SAAS,EAAE,wDAAwD,CAAC;SAC3E,MAAM,CAAC,OAAO,EAAE,gDAAgD,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC;SAC5D,MAAM,CAAC,cAAc,EAAE,mDAAmD,CAAC;SAC3E,MAAM,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;SACtC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;SACtC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;SACrC,MAAM,CAAC,sBAAsB,EAAE,0DAA0D,CAAC;SAC1F,MAAM,CAAC,wBAAwB,EAAE,iDAAiD,CAAC;SACnF,MAAM,CACL,YAAY,EACZ,gFAAgF,CACjF;SACA,MAAM,CAAC,KAAK,EAAE,IAAiB,EAAE,EAAE;QAClC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,OAAO;
|
|
1
|
+
{"version":3,"file":"program-core.js","sourceRoot":"","sources":["../../src/cli/program-core.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -27,6 +27,12 @@ properties:
|
|
|
27
27
|
minLength: 1
|
|
28
28
|
gate_success_substring:
|
|
29
29
|
type: ["string", "null"]
|
|
30
|
+
virtual_capture:
|
|
31
|
+
type: boolean
|
|
32
|
+
default: false
|
|
33
|
+
description: >-
|
|
34
|
+
When true, gapman verify captures gate stdout/stderr under
|
|
35
|
+
.gitagent/virtual/<flight-id>/ (gitignored) and purges on success.
|
|
30
36
|
upgrade_payload:
|
|
31
37
|
type: object
|
|
32
38
|
additionalProperties: false
|
package/templates/.gitignore.gxt
CHANGED
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
{ "targetPath": "scripts/gxt-pin-mission.sh", "mode": "managed_strict", "executable": true, "tags": ["runtime"] },
|
|
37
37
|
{ "targetPath": "scripts/gxt-resolve-mission.sh", "mode": "managed_strict", "executable": true, "tags": ["runtime"] },
|
|
38
38
|
{ "targetPath": "scripts/gxt-runtime-env.sh", "mode": "managed_strict", "executable": true, "tags": ["runtime"] },
|
|
39
|
+
{ "targetPath": "scripts/gxt-shell-agent.sh", "mode": "managed_strict", "executable": true, "tags": ["runtime", "claude-code", "codex-cli", "opencode"] },
|
|
39
40
|
{ "targetPath": "scripts/validate-gxt.sh", "mode": "managed_strict", "executable": true, "tags": ["core"] },
|
|
40
41
|
{ "targetPath": "scripts/verify-pr-missions.sh", "mode": "managed_strict", "executable": true, "tags": ["ci"] },
|
|
41
42
|
{ "targetPath": "skills/gapman.md", "mode": "scaffold_only", "tags": ["skill-specimen"] },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1",
|
|
3
|
-
"opengantry_version": "2.
|
|
3
|
+
"opengantry_version": "2.2.0",
|
|
4
4
|
"asset_catalog": "integrations/asset-catalog.json",
|
|
5
5
|
"integrations": {
|
|
6
6
|
"cursor": {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"verified_date": "2026-06-16",
|
|
9
9
|
"docs_url": "https://cursor.com/docs/agent/hooks",
|
|
10
10
|
"recipe_file": "cursor.md",
|
|
11
|
+
"bootstrap_mode": "hook",
|
|
11
12
|
"canonical_paths": [
|
|
12
13
|
".cursor/rules/opengantry-gxt-substrate.mdc",
|
|
13
14
|
".cursor/hooks.json"
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"verified_date": "2026-06-16",
|
|
22
23
|
"docs_url": "https://docs.anthropic.com/en/docs/claude-code",
|
|
23
24
|
"recipe_file": "claude-code.md",
|
|
25
|
+
"bootstrap_mode": "shell_wrapper",
|
|
24
26
|
"canonical_paths": ["CLAUDE.md"],
|
|
25
27
|
"deprecated_paths": [],
|
|
26
28
|
"cli_probe": ["claude", "--version"]
|
|
@@ -31,6 +33,7 @@
|
|
|
31
33
|
"docs_url": "https://developers.openai.com/codex/config-basic",
|
|
32
34
|
"disambiguation": "OpenAI Codex API (2021-2023) is NOT this product",
|
|
33
35
|
"recipe_file": "codex-cli.md",
|
|
36
|
+
"bootstrap_mode": "shell_wrapper",
|
|
34
37
|
"canonical_paths": ["AGENTS.md", ".codex/config.toml"],
|
|
35
38
|
"deprecated_paths": [],
|
|
36
39
|
"cli_probe": ["codex", "--version"]
|
|
@@ -40,6 +43,7 @@
|
|
|
40
43
|
"verified_date": "2026-06-16",
|
|
41
44
|
"docs_url": "https://opencode.ai/docs",
|
|
42
45
|
"recipe_file": "opencode.md",
|
|
46
|
+
"bootstrap_mode": "shell_wrapper",
|
|
43
47
|
"canonical_paths": ["opencode.json"],
|
|
44
48
|
"deprecated_paths": [],
|
|
45
49
|
"cli_probe": ["opencode", "--version"]
|
|
@@ -49,6 +53,7 @@
|
|
|
49
53
|
"verified_date": "2026-06-16",
|
|
50
54
|
"docs_url": "https://www.jetbrains.com/junie/",
|
|
51
55
|
"recipe_file": "junie.md",
|
|
56
|
+
"bootstrap_mode": "manual_recipe",
|
|
52
57
|
"canonical_paths": [".junie/guidelines.md"],
|
|
53
58
|
"deprecated_paths": [],
|
|
54
59
|
"cli_probe": null
|
|
@@ -58,6 +63,7 @@
|
|
|
58
63
|
"verified_date": "2026-06-16",
|
|
59
64
|
"docs_url": "https://antigravity.google/",
|
|
60
65
|
"recipe_file": "antigravity.md",
|
|
66
|
+
"bootstrap_mode": "manual_recipe",
|
|
61
67
|
"canonical_paths": [".agent/rules/gxt.md"],
|
|
62
68
|
"deprecated_paths": [],
|
|
63
69
|
"cli_probe": null
|
|
@@ -67,6 +73,7 @@
|
|
|
67
73
|
"verified_date": "2026-06-16",
|
|
68
74
|
"docs_url": "https://docs.cline.bot/",
|
|
69
75
|
"recipe_file": "cline.md",
|
|
76
|
+
"bootstrap_mode": "manual_recipe",
|
|
70
77
|
"canonical_paths": [".clinerules/gxt.md"],
|
|
71
78
|
"deprecated_paths": [".cursorrules"],
|
|
72
79
|
"cli_probe": null
|
|
@@ -76,6 +83,7 @@
|
|
|
76
83
|
"verified_date": "2026-06-16",
|
|
77
84
|
"docs_url": "https://aider.chat/docs/",
|
|
78
85
|
"recipe_file": "aider.md",
|
|
86
|
+
"bootstrap_mode": "manual_recipe",
|
|
79
87
|
"canonical_paths": [".aider.conf.yml"],
|
|
80
88
|
"deprecated_paths": [],
|
|
81
89
|
"cli_probe": ["aider", "--version"]
|
|
@@ -85,6 +93,7 @@
|
|
|
85
93
|
"verified_date": "2026-06-16",
|
|
86
94
|
"docs_url": "https://docs.all-hands.dev/",
|
|
87
95
|
"recipe_file": "openhands.md",
|
|
96
|
+
"bootstrap_mode": "manual_recipe",
|
|
88
97
|
"canonical_paths": [".openhands/microagents/gxt.md"],
|
|
89
98
|
"deprecated_paths": [],
|
|
90
99
|
"cli_probe": null
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
### Claude Code
|
|
2
2
|
|
|
3
3
|
- **Context injection:** Minimal `CLAUDE.md` pointing at `AGENTS.md`, `.gitagent/teacher/RULES.md`, `.gitagent/foreman/MANIFEST.json`.
|
|
4
|
-
- **Session bootstrap:**
|
|
4
|
+
- **Session bootstrap (shell wrapper — no project hooks):**
|
|
5
5
|
|
|
6
6
|
```bash
|
|
7
|
-
|
|
7
|
+
scripts/gxt-pin-mission.sh .gitagent/missions/MSN-0001.<slug>.yaml
|
|
8
|
+
scripts/gxt-shell-agent.sh claude .gitagent/missions/MSN-0001.<slug>.yaml
|
|
9
|
+
# or with explicit task:
|
|
8
10
|
gapman runtime exec --mission .gitagent/missions/MSN-0001.<slug>.yaml -- claude "<task>"
|
|
9
11
|
```
|
|
10
12
|
|
|
11
|
-
- **Enforcement:** Advisory in interactive session; process-boundary when wrapped with `runtime exec`.
|
|
12
|
-
- **Gotcha:**
|
|
13
|
+
- **Enforcement:** Advisory in interactive session; process-boundary when wrapped with `runtime exec` or `gxt-shell-agent.sh`.
|
|
14
|
+
- **Gotcha:** Claude Code does not execute project hook directories — use the shell wrapper, not phantom hook files.
|
|
13
15
|
|
|
14
16
|
Vendor docs: https://docs.anthropic.com/en/docs/claude-code
|
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
> **Not** the deprecated OpenAI Codex API (2021–2023). This covers [OpenAI Codex CLI](https://github.com/openai/codex) (2025+ terminal/IDE agent).
|
|
4
4
|
|
|
5
5
|
- **Context injection:** Root `AGENTS.md` (native after `gapman init`); optional `.codex/config.toml` for project defaults.
|
|
6
|
-
- **Session bootstrap:**
|
|
6
|
+
- **Session bootstrap (shell wrapper — no project hooks):**
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
|
|
9
|
+
scripts/gxt-pin-mission.sh .gitagent/missions/MSN-0001.<slug>.yaml
|
|
10
|
+
scripts/gxt-shell-agent.sh codex .gitagent/missions/MSN-0001.<slug>.yaml
|
|
11
|
+
# or headless:
|
|
10
12
|
gapman runtime exec --mission .gitagent/missions/MSN-0001.<slug>.yaml -- codex exec "<task>"
|
|
11
13
|
```
|
|
12
14
|
|
|
13
|
-
- **Enforcement:** Advisory in interactive TUI/IDE extension; process-boundary when wrapped with `runtime exec`.
|
|
14
|
-
- **Gotcha:** Codex sandbox settings govern Codex — not GXT forbidden zones.
|
|
15
|
+
- **Enforcement:** Advisory in interactive TUI/IDE extension; process-boundary when wrapped with `runtime exec` or `gxt-shell-agent.sh`.
|
|
16
|
+
- **Gotcha:** Codex CLI does not scan project hook folders — use the shell wrapper. Codex sandbox settings govern Codex — not GXT forbidden zones.
|
|
15
17
|
|
|
16
18
|
Vendor docs: https://developers.openai.com/codex/config-basic
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
### OpenCode
|
|
2
2
|
|
|
3
3
|
- **Context injection:** Repo-root `AGENTS.md` (native); optional `opencode.json` `instructions` array.
|
|
4
|
-
- **Session bootstrap
|
|
4
|
+
- **Session bootstrap (shell wrapper — no project hooks):**
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
scripts/gxt-pin-mission.sh .gitagent/missions/MSN-0001.<slug>.yaml
|
|
8
|
+
scripts/gxt-shell-agent.sh opencode .gitagent/missions/MSN-0001.<slug>.yaml
|
|
9
|
+
```
|
|
10
|
+
|
|
5
11
|
- **Enforcement:** Advisory; OpenCode permissions are separate from GXT TMVC.
|
|
6
|
-
- **Gotcha:** OpenCode prefers `AGENTS.md` over `CLAUDE.md` when both exist.
|
|
12
|
+
- **Gotcha:** OpenCode prefers `AGENTS.md` over `CLAUDE.md` when both exist. OpenCode does not execute project hook directories.
|
|
7
13
|
|
|
8
14
|
Vendor docs: https://opencode.ai/docs
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Shell-wrapper bootstrap for CLI-first agents (Claude Code, Codex CLI, OpenCode).
|
|
3
|
+
# These tools do not execute project hook directories — inject GXT runtime via this wrapper.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
AGENT="${1:-}"
|
|
7
|
+
if [ -z "$AGENT" ]; then
|
|
8
|
+
cat >&2 <<'EOF'
|
|
9
|
+
Usage: scripts/gxt-shell-agent.sh <claude|codex|opencode> [mission.yaml] [--] [agent args...]
|
|
10
|
+
|
|
11
|
+
Loads GXT mission runtime env, then execs the agent CLI. Prefer over phantom hook files.
|
|
12
|
+
EOF
|
|
13
|
+
exit 2
|
|
14
|
+
fi
|
|
15
|
+
shift
|
|
16
|
+
|
|
17
|
+
MISSION_ARG=""
|
|
18
|
+
if [ $# -gt 0 ] && [ "$1" != "--" ]; then
|
|
19
|
+
case "$1" in
|
|
20
|
+
*.yaml|*.yml|*.md)
|
|
21
|
+
MISSION_ARG="$1"
|
|
22
|
+
shift
|
|
23
|
+
;;
|
|
24
|
+
esac
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
if [ "${1:-}" = "--" ]; then
|
|
28
|
+
shift
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
|
|
32
|
+
if [ -z "$ROOT" ]; then
|
|
33
|
+
echo "gxt-shell-agent: not inside a git repository" >&2
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
cd "$ROOT"
|
|
37
|
+
|
|
38
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
39
|
+
# shellcheck source=scripts/gxt-runtime-env.sh
|
|
40
|
+
source "$SCRIPT_DIR/gxt-runtime-env.sh" ${MISSION_ARG:+"$MISSION_ARG"}
|
|
41
|
+
|
|
42
|
+
case "$AGENT" in
|
|
43
|
+
claude)
|
|
44
|
+
DEFAULT_CMD=(claude)
|
|
45
|
+
;;
|
|
46
|
+
codex)
|
|
47
|
+
DEFAULT_CMD=(codex)
|
|
48
|
+
;;
|
|
49
|
+
opencode)
|
|
50
|
+
DEFAULT_CMD=(opencode)
|
|
51
|
+
;;
|
|
52
|
+
*)
|
|
53
|
+
echo "gxt-shell-agent: unsupported agent '$AGENT' (use claude, codex, or opencode)" >&2
|
|
54
|
+
exit 2
|
|
55
|
+
;;
|
|
56
|
+
esac
|
|
57
|
+
|
|
58
|
+
if [ $# -eq 0 ]; then
|
|
59
|
+
exec "${DEFAULT_CMD[@]}"
|
|
60
|
+
else
|
|
61
|
+
exec "$@"
|
|
62
|
+
fi
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Manifest } from "./types.js";
|
|
2
|
-
export interface KpiReportStaleOptions {
|
|
3
|
-
skipStaleEvidence?: boolean;
|
|
4
|
-
/** When true, uncommitted TMVC drift is a hard failure (pre-push / CI). */
|
|
5
|
-
strictStale?: boolean;
|
|
6
|
-
}
|
|
7
|
-
export interface KpiReportStaleResult {
|
|
8
|
-
stale: boolean;
|
|
9
|
-
advisoryOnly: boolean;
|
|
10
|
-
stalePaths: string[];
|
|
11
|
-
attestationCommit?: string;
|
|
12
|
-
reason?: string;
|
|
13
|
-
}
|
|
14
|
-
/** Bind KPI report attestation to TMVC drift (mirrors trace-evidence committed/uncommitted split). */
|
|
15
|
-
export declare function verifyKpiReportFreshness(repoRoot: string, manifest: Manifest, skillKey: string | null, reportPath: string, options?: KpiReportStaleOptions): KpiReportStaleResult;
|
|
16
|
-
/** True when report file is tracked in git. */
|
|
17
|
-
export declare function isKpiReportCommitted(repoRoot: string, reportPath: string): boolean;
|
|
18
|
-
//# sourceMappingURL=kpi-report-stale.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kpi-report-stale.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/kpi-report-stale.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA4BD,sGAAsG;AACtG,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAoEtB;AAED,+CAA+C;AAC/C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAIlF"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { toPosixRel } from "./cli-io.js";
|
|
3
|
-
import { gitDiffNameOnlySinceCommit, gitRunOk } from "./git.js";
|
|
4
|
-
import { readBlamePorcelainByLine, UNCOMMITTED_BLAME_COMMIT } from "./trace.js";
|
|
5
|
-
function tmvcRootsForSkill(manifest, skillKey) {
|
|
6
|
-
if (!skillKey?.trim())
|
|
7
|
-
return [];
|
|
8
|
-
const skill = manifest.skills[skillKey];
|
|
9
|
-
return skill ? [...skill.tmvc_roots] : [];
|
|
10
|
-
}
|
|
11
|
-
function reportRelPath(reportPath, repoRoot) {
|
|
12
|
-
const abs = path.isAbsolute(reportPath) ? reportPath : path.join(repoRoot, reportPath);
|
|
13
|
-
return toPosixRel(repoRoot, abs);
|
|
14
|
-
}
|
|
15
|
-
function resolveKpiAttestationCommit(repoRoot, reportRel, blameByLine) {
|
|
16
|
-
if ([...blameByLine.values()].some((hash) => hash === UNCOMMITTED_BLAME_COMMIT)) {
|
|
17
|
-
return UNCOMMITTED_BLAME_COMMIT;
|
|
18
|
-
}
|
|
19
|
-
const log = gitRunOk(repoRoot, ["log", "-1", "--format=%H", "--", reportRel]);
|
|
20
|
-
if (log.ok && log.stdout.trim().length > 0) {
|
|
21
|
-
return log.stdout.trim();
|
|
22
|
-
}
|
|
23
|
-
return blameByLine.get(1);
|
|
24
|
-
}
|
|
25
|
-
/** Bind KPI report attestation to TMVC drift (mirrors trace-evidence committed/uncommitted split). */
|
|
26
|
-
export function verifyKpiReportFreshness(repoRoot, manifest, skillKey, reportPath, options = {}) {
|
|
27
|
-
if (options.skipStaleEvidence === true) {
|
|
28
|
-
return { stale: false, advisoryOnly: false, stalePaths: [] };
|
|
29
|
-
}
|
|
30
|
-
const tmvcRoots = tmvcRootsForSkill(manifest, skillKey);
|
|
31
|
-
if (tmvcRoots.length === 0) {
|
|
32
|
-
return { stale: false, advisoryOnly: false, stalePaths: [] };
|
|
33
|
-
}
|
|
34
|
-
const reportRel = reportRelPath(reportPath, repoRoot);
|
|
35
|
-
const blameByLine = readBlamePorcelainByLine(repoRoot, reportRel);
|
|
36
|
-
const attestationCommit = resolveKpiAttestationCommit(repoRoot, reportRel, blameByLine);
|
|
37
|
-
if (!attestationCommit) {
|
|
38
|
-
return {
|
|
39
|
-
stale: options.strictStale === true,
|
|
40
|
-
advisoryOnly: options.strictStale !== true,
|
|
41
|
-
stalePaths: [],
|
|
42
|
-
reason: `cannot resolve git blame for KPI report ${reportRel}`,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
if (attestationCommit === UNCOMMITTED_BLAME_COMMIT) {
|
|
46
|
-
return { stale: false, advisoryOnly: true, stalePaths: [], attestationCommit };
|
|
47
|
-
}
|
|
48
|
-
const diffResult = gitDiffNameOnlySinceCommit(repoRoot, attestationCommit, tmvcRoots);
|
|
49
|
-
if (!diffResult.ok) {
|
|
50
|
-
return {
|
|
51
|
-
stale: options.strictStale === true,
|
|
52
|
-
advisoryOnly: options.strictStale !== true,
|
|
53
|
-
stalePaths: [],
|
|
54
|
-
attestationCommit,
|
|
55
|
-
reason: "cannot evaluate TMVC drift since KPI report attestation",
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
if (diffResult.paths.length === 0) {
|
|
59
|
-
return { stale: false, advisoryOnly: false, stalePaths: [], attestationCommit };
|
|
60
|
-
}
|
|
61
|
-
const shortCommit = attestationCommit.slice(0, 7);
|
|
62
|
-
const shown = diffResult.paths.slice(0, 5);
|
|
63
|
-
const suffix = diffResult.paths.length > shown.length
|
|
64
|
-
? ` (+${String(diffResult.paths.length - shown.length)} more)`
|
|
65
|
-
: "";
|
|
66
|
-
const reason = `KPI report STALE (attested at ${shortCommit}): TMVC drift since scan — ` +
|
|
67
|
-
`${shown.join(", ")}${suffix}. Re-run gapman scan and commit the updated report.`;
|
|
68
|
-
if (options.strictStale === true) {
|
|
69
|
-
return {
|
|
70
|
-
stale: true,
|
|
71
|
-
advisoryOnly: false,
|
|
72
|
-
stalePaths: diffResult.paths,
|
|
73
|
-
attestationCommit,
|
|
74
|
-
reason,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
stale: false,
|
|
79
|
-
advisoryOnly: true,
|
|
80
|
-
stalePaths: diffResult.paths,
|
|
81
|
-
attestationCommit,
|
|
82
|
-
reason,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/** True when report file is tracked in git. */
|
|
86
|
-
export function isKpiReportCommitted(repoRoot, reportPath) {
|
|
87
|
-
const reportRel = reportRelPath(reportPath, repoRoot);
|
|
88
|
-
const r = gitRunOk(repoRoot, ["ls-files", "--error-unmatch", reportRel]);
|
|
89
|
-
return r.ok;
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=kpi-report-stale.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kpi-report-stale.js","sourceRoot":"","sources":["../../../src/cli/lib/kpi-report-stale.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Manifest } from "./types.js";
|
|
2
|
-
import type { TraceRow } from "./types.js";
|
|
3
|
-
import type { ResolvedQuoteLine } from "./trace.js";
|
|
4
|
-
export type { ResolvedQuoteLine } from "./trace.js";
|
|
5
|
-
export declare const UNCOMMITTED_BLAME_COMMIT = "0000000000000000000000000000000000000000";
|
|
6
|
-
export interface TraceEvidenceFailure {
|
|
7
|
-
row: TraceRow;
|
|
8
|
-
attestationCommit: string;
|
|
9
|
-
quoteLine: number;
|
|
10
|
-
stalePaths: string[];
|
|
11
|
-
reason: string;
|
|
12
|
-
}
|
|
13
|
-
export interface TraceEvidenceOptions {
|
|
14
|
-
skipStaleEvidence?: boolean;
|
|
15
|
-
}
|
|
16
|
-
/** Parse `git blame --porcelain` into 1-based line number → commit hash. */
|
|
17
|
-
export declare function parseBlamePorcelainByLine(blameOutput: string): Map<number, string>;
|
|
18
|
-
export declare function readBlamePorcelainByLine(repoRoot: string, workerLogRelPath: string): Map<number, string>;
|
|
19
|
-
export declare function verifyTraceEvidenceFreshness(repoRoot: string, manifest: Manifest, skillKey: string | null, workerLogPath: string, resolvedLines: ResolvedQuoteLine[], options?: TraceEvidenceOptions): {
|
|
20
|
-
failures: TraceEvidenceFailure[];
|
|
21
|
-
skippedUncommitted: number;
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=trace-evidence.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trace-evidence.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/trace-evidence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,wBAAwB,6CAA6C,CAAC;AAEnF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,QAAQ,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAcD,4EAA4E;AAC5E,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgClF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxG;AAkBD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,iBAAiB,EAAE,EAClC,OAAO,GAAE,oBAAyB,GACjC;IAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CA+DlE"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { WORKER_LOG_FILENAME } from "./constants.js";
|
|
3
|
-
import { toPosixRel } from "./cli-io.js";
|
|
4
|
-
import { gitDiffNameOnlySinceCommit, gitRun } from "./git.js";
|
|
5
|
-
export const UNCOMMITTED_BLAME_COMMIT = "0000000000000000000000000000000000000000";
|
|
6
|
-
function tmvcRootsForSkill(manifest, skillKey) {
|
|
7
|
-
if (!skillKey?.trim())
|
|
8
|
-
return [];
|
|
9
|
-
const skill = manifest.skills[skillKey];
|
|
10
|
-
return skill ? [...skill.tmvc_roots] : [];
|
|
11
|
-
}
|
|
12
|
-
function workerLogRelPath(workerLogPath, repoRoot) {
|
|
13
|
-
const abs = path.resolve(workerLogPath);
|
|
14
|
-
const rel = toPosixRel(repoRoot, abs);
|
|
15
|
-
return rel.length > 0 && !rel.startsWith("..") ? rel : WORKER_LOG_FILENAME;
|
|
16
|
-
}
|
|
17
|
-
/** Parse `git blame --porcelain` into 1-based line number → commit hash. */
|
|
18
|
-
export function parseBlamePorcelainByLine(blameOutput) {
|
|
19
|
-
const byLine = new Map();
|
|
20
|
-
const lines = blameOutput.split(/\r?\n/);
|
|
21
|
-
let i = 0;
|
|
22
|
-
while (i < lines.length) {
|
|
23
|
-
const header = lines[i];
|
|
24
|
-
const full = /^([0-9a-f]{40})\s+\d+\s+(\d+)\s+(\d+)/.exec(header);
|
|
25
|
-
const short = /^([0-9a-f]{40})\s+\d+\s+(\d+)\s*$/.exec(header);
|
|
26
|
-
if (!full && !short) {
|
|
27
|
-
i += 1;
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
const commit = (full ?? short)[1];
|
|
31
|
-
const finalLine = parseInt((full ?? short)[2], 10);
|
|
32
|
-
i += 1;
|
|
33
|
-
if (full) {
|
|
34
|
-
while (i < lines.length && !lines[i].startsWith("\t")) {
|
|
35
|
-
i += 1;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (i < lines.length && lines[i].startsWith("\t")) {
|
|
39
|
-
byLine.set(finalLine, commit);
|
|
40
|
-
i += 1;
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
if (short) {
|
|
44
|
-
byLine.set(finalLine, commit);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return byLine;
|
|
48
|
-
}
|
|
49
|
-
export function readBlamePorcelainByLine(repoRoot, workerLogRelPath) {
|
|
50
|
-
const r = gitRun(repoRoot, ["blame", "--porcelain", "--", workerLogRelPath]);
|
|
51
|
-
if (!r.ok)
|
|
52
|
-
return new Map();
|
|
53
|
-
return parseBlamePorcelainByLine(r.stdout);
|
|
54
|
-
}
|
|
55
|
-
function formatStaleReason(row, quoteLine, attestationCommit, stalePaths) {
|
|
56
|
-
const shortCommit = attestationCommit.slice(0, 7);
|
|
57
|
-
const shown = stalePaths.slice(0, 5);
|
|
58
|
-
const suffix = stalePaths.length > shown.length ? ` (+${String(stalePaths.length - shown.length)} more)` : "";
|
|
59
|
-
return (`Trace STALE for DoD ${row.dodId} (WORKER_LOG.md line ${String(quoteLine)}, attested at ${shortCommit}): ` +
|
|
60
|
-
`TMVC drift since attestation — ${shown.join(", ")}${suffix}. Re-run gate and append a fresh trace line.`);
|
|
61
|
-
}
|
|
62
|
-
export function verifyTraceEvidenceFreshness(repoRoot, manifest, skillKey, workerLogPath, resolvedLines, options = {}) {
|
|
63
|
-
if (options.skipStaleEvidence === true) {
|
|
64
|
-
return { failures: [], skippedUncommitted: 0 };
|
|
65
|
-
}
|
|
66
|
-
const tmvcRoots = tmvcRootsForSkill(manifest, skillKey);
|
|
67
|
-
if (tmvcRoots.length === 0) {
|
|
68
|
-
return { failures: [], skippedUncommitted: 0 };
|
|
69
|
-
}
|
|
70
|
-
const workerLogRel = workerLogRelPath(workerLogPath, repoRoot);
|
|
71
|
-
const blameByLine = readBlamePorcelainByLine(repoRoot, workerLogRel);
|
|
72
|
-
const diffCache = new Map();
|
|
73
|
-
const failures = [];
|
|
74
|
-
let skippedUncommitted = 0;
|
|
75
|
-
for (const { row, lineNumber } of resolvedLines) {
|
|
76
|
-
const attestationCommit = blameByLine.get(lineNumber);
|
|
77
|
-
if (!attestationCommit) {
|
|
78
|
-
failures.push({
|
|
79
|
-
row,
|
|
80
|
-
attestationCommit: "unknown",
|
|
81
|
-
quoteLine: lineNumber,
|
|
82
|
-
stalePaths: [],
|
|
83
|
-
reason: `Trace STALE for DoD ${row.dodId}: cannot resolve git blame for WORKER_LOG.md line ${String(lineNumber)}`,
|
|
84
|
-
});
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
if (attestationCommit === UNCOMMITTED_BLAME_COMMIT) {
|
|
88
|
-
skippedUncommitted += 1;
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
let diffResult = diffCache.get(attestationCommit);
|
|
92
|
-
if (diffResult === undefined) {
|
|
93
|
-
diffResult = gitDiffNameOnlySinceCommit(repoRoot, attestationCommit, tmvcRoots);
|
|
94
|
-
diffCache.set(attestationCommit, diffResult);
|
|
95
|
-
}
|
|
96
|
-
if (!diffResult.ok) {
|
|
97
|
-
failures.push({
|
|
98
|
-
row,
|
|
99
|
-
attestationCommit,
|
|
100
|
-
quoteLine: lineNumber,
|
|
101
|
-
stalePaths: [],
|
|
102
|
-
reason: `Trace STALE for DoD ${row.dodId}: cannot evaluate TMVC drift since attestation (git diff failed)`,
|
|
103
|
-
});
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
if (diffResult.paths.length > 0) {
|
|
107
|
-
failures.push({
|
|
108
|
-
row,
|
|
109
|
-
attestationCommit,
|
|
110
|
-
quoteLine: lineNumber,
|
|
111
|
-
stalePaths: diffResult.paths,
|
|
112
|
-
reason: formatStaleReason(row, lineNumber, attestationCommit, diffResult.paths),
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return { failures, skippedUncommitted };
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=trace-evidence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trace-evidence.js","sourceRoot":"","sources":["../../../src/cli/lib/trace-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,EAAiC,MAAM,UAAU,CAAC;AAO7F,MAAM,CAAC,MAAM,wBAAwB,GAAG,0CAA0C,CAAC;AAcnF,SAAS,iBAAiB,CAAC,QAAkB,EAAE,QAAuB;IACpE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,aAAqB,EAAE,QAAgB;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC7E,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,yBAAyB,CAAC,WAAmB;IAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACzB,MAAM,IAAI,GAAG,uCAAuC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,CAAE,CAAC,CAAC,CAAE,CAAC;QACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,IAAI,IAAI,KAAK,CAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC,IAAI,CAAC,CAAC;QACP,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB,EAAE,gBAAwB;IACjF,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC5B,OAAO,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAa,EACb,SAAiB,EACjB,iBAAyB,EACzB,UAAoB;IAEpB,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GACV,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,OAAO,CACL,uBAAuB,GAAG,CAAC,KAAK,wBAAwB,MAAM,CAAC,SAAS,CAAC,iBAAiB,WAAW,KAAK;QAC1G,kCAAkC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,8CAA8C,CAC1G,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,QAAgB,EAChB,QAAkB,EAClB,QAAuB,EACvB,aAAqB,EACrB,aAAkC,EAClC,UAAgC,EAAE;IAElC,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACvC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC9D,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,KAAK,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,aAAa,EAAE,CAAC;QAChD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG;gBACH,iBAAiB,EAAE,SAAS;gBAC5B,SAAS,EAAE,UAAU;gBACrB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,uBAAuB,GAAG,CAAC,KAAK,qDAAqD,MAAM,CAAC,UAAU,CAAC,EAAE;aAClH,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,iBAAiB,KAAK,wBAAwB,EAAE,CAAC;YACnD,kBAAkB,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,GAAG,0BAA0B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAChF,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG;gBACH,iBAAiB;gBACjB,SAAS,EAAE,UAAU;gBACrB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,uBAAuB,GAAG,CAAC,KAAK,kEAAkE;aAC3G,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG;gBACH,iBAAiB;gBACjB,SAAS,EAAE,UAAU;gBACrB,UAAU,EAAE,UAAU,CAAC,KAAK;gBAC5B,MAAM,EAAE,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,CAAC,KAAK,CAAC;aAChF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;AAC1C,CAAC"}
|