@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.
Files changed (157) hide show
  1. package/README.md +24 -7
  2. package/dist/cli/commands/audit-rigor.d.ts +8 -0
  3. package/dist/cli/commands/audit-rigor.d.ts.map +1 -0
  4. package/dist/cli/commands/audit-rigor.js +24 -0
  5. package/dist/cli/commands/audit-rigor.js.map +1 -0
  6. package/dist/cli/commands/context-feed.d.ts +6 -0
  7. package/dist/cli/commands/context-feed.d.ts.map +1 -0
  8. package/dist/cli/commands/context-feed.js +48 -0
  9. package/dist/cli/commands/context-feed.js.map +1 -0
  10. package/dist/cli/commands/mission.js +1 -1
  11. package/dist/cli/commands/mission.js.map +1 -1
  12. package/dist/cli/commands/onboarding.d.ts.map +1 -1
  13. package/dist/cli/commands/onboarding.js +9 -4
  14. package/dist/cli/commands/onboarding.js.map +1 -1
  15. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  16. package/dist/cli/commands/upgrade.js +2 -1
  17. package/dist/cli/commands/upgrade.js.map +1 -1
  18. package/dist/cli/lib/architecture-pointer.d.ts +1 -1
  19. package/dist/cli/lib/architecture-pointer.d.ts.map +1 -1
  20. package/dist/cli/lib/audit-rigor.d.ts +18 -0
  21. package/dist/cli/lib/audit-rigor.d.ts.map +1 -0
  22. package/dist/cli/lib/audit-rigor.js +189 -0
  23. package/dist/cli/lib/audit-rigor.js.map +1 -0
  24. package/dist/cli/lib/constants.d.ts +4 -0
  25. package/dist/cli/lib/constants.d.ts.map +1 -1
  26. package/dist/cli/lib/constants.js +4 -0
  27. package/dist/cli/lib/constants.js.map +1 -1
  28. package/dist/cli/lib/context-feed-remediation.d.ts +12 -0
  29. package/dist/cli/lib/context-feed-remediation.d.ts.map +1 -0
  30. package/dist/cli/lib/context-feed-remediation.js +88 -0
  31. package/dist/cli/lib/context-feed-remediation.js.map +1 -0
  32. package/dist/cli/lib/context-feed-store.d.ts +33 -0
  33. package/dist/cli/lib/context-feed-store.d.ts.map +1 -0
  34. package/dist/cli/lib/context-feed-store.js +110 -0
  35. package/dist/cli/lib/context-feed-store.js.map +1 -0
  36. package/dist/cli/lib/doctor-core.d.ts +5 -0
  37. package/dist/cli/lib/doctor-core.d.ts.map +1 -0
  38. package/dist/cli/lib/doctor-core.js +163 -0
  39. package/dist/cli/lib/doctor-core.js.map +1 -0
  40. package/dist/cli/lib/doctor-integration.d.ts +13 -0
  41. package/dist/cli/lib/doctor-integration.d.ts.map +1 -0
  42. package/dist/cli/lib/doctor-integration.js +120 -0
  43. package/dist/cli/lib/doctor-integration.js.map +1 -0
  44. package/dist/cli/lib/doctor-substrate.d.ts +3 -0
  45. package/dist/cli/lib/doctor-substrate.d.ts.map +1 -0
  46. package/dist/cli/lib/doctor-substrate.js +35 -0
  47. package/dist/cli/lib/doctor-substrate.js.map +1 -0
  48. package/dist/cli/lib/doctor-types.d.ts +24 -0
  49. package/dist/cli/lib/doctor-types.d.ts.map +1 -0
  50. package/dist/cli/lib/doctor-types.js +7 -0
  51. package/dist/cli/lib/doctor-types.js.map +1 -0
  52. package/dist/cli/lib/doctor.d.ts +4 -30
  53. package/dist/cli/lib/doctor.d.ts.map +1 -1
  54. package/dist/cli/lib/doctor.js +4 -281
  55. package/dist/cli/lib/doctor.js.map +1 -1
  56. package/dist/cli/lib/integration-compat.d.ts +7 -0
  57. package/dist/cli/lib/integration-compat.d.ts.map +1 -1
  58. package/dist/cli/lib/integration-compat.js +14 -0
  59. package/dist/cli/lib/integration-compat.js.map +1 -1
  60. package/dist/cli/lib/kpi-engine.d.ts +0 -2
  61. package/dist/cli/lib/kpi-engine.d.ts.map +1 -1
  62. package/dist/cli/lib/kpi-engine.js +11 -13
  63. package/dist/cli/lib/kpi-engine.js.map +1 -1
  64. package/dist/cli/lib/mcp-tools-register.js +1 -1
  65. package/dist/cli/lib/mcp-tools-register.js.map +1 -1
  66. package/dist/cli/lib/mcp-upgrade.d.ts +2 -2
  67. package/dist/cli/lib/mcp-upgrade.d.ts.map +1 -1
  68. package/dist/cli/lib/mcp-upgrade.js +5 -1
  69. package/dist/cli/lib/mcp-upgrade.js.map +1 -1
  70. package/dist/cli/lib/missions/formatter.d.ts.map +1 -1
  71. package/dist/cli/lib/missions/formatter.js +1 -0
  72. package/dist/cli/lib/missions/formatter.js.map +1 -1
  73. package/dist/cli/lib/missions/parser.d.ts.map +1 -1
  74. package/dist/cli/lib/missions/parser.js +1 -0
  75. package/dist/cli/lib/missions/parser.js.map +1 -1
  76. package/dist/cli/lib/start-orchestration.d.ts +1 -11
  77. package/dist/cli/lib/start-orchestration.d.ts.map +1 -1
  78. package/dist/cli/lib/start-orchestration.js +1 -85
  79. package/dist/cli/lib/start-orchestration.js.map +1 -1
  80. package/dist/cli/lib/start-snapshot.d.ts +12 -0
  81. package/dist/cli/lib/start-snapshot.d.ts.map +1 -0
  82. package/dist/cli/lib/start-snapshot.js +81 -0
  83. package/dist/cli/lib/start-snapshot.js.map +1 -0
  84. package/dist/cli/lib/trace.d.ts.map +1 -1
  85. package/dist/cli/lib/trace.js +1 -6
  86. package/dist/cli/lib/trace.js.map +1 -1
  87. package/dist/cli/lib/types.d.ts +3 -0
  88. package/dist/cli/lib/types.d.ts.map +1 -1
  89. package/dist/cli/lib/upgrade-plan-payload.d.ts +31 -0
  90. package/dist/cli/lib/upgrade-plan-payload.d.ts.map +1 -0
  91. package/dist/cli/lib/upgrade-plan-payload.js +109 -0
  92. package/dist/cli/lib/upgrade-plan-payload.js.map +1 -0
  93. package/dist/cli/lib/verify-engine.d.ts.map +1 -1
  94. package/dist/cli/lib/verify-engine.js +39 -13
  95. package/dist/cli/lib/verify-engine.js.map +1 -1
  96. package/dist/cli/lib/verify-failure-format.d.ts +29 -0
  97. package/dist/cli/lib/verify-failure-format.d.ts.map +1 -0
  98. package/dist/cli/lib/verify-failure-format.js +68 -0
  99. package/dist/cli/lib/verify-failure-format.js.map +1 -0
  100. package/dist/cli/lib/verify-hints.d.ts +32 -0
  101. package/dist/cli/lib/verify-hints.d.ts.map +1 -0
  102. package/dist/cli/lib/verify-hints.js +161 -0
  103. package/dist/cli/lib/verify-hints.js.map +1 -0
  104. package/dist/cli/lib/verify-payload.d.ts +0 -1
  105. package/dist/cli/lib/verify-payload.d.ts.map +1 -1
  106. package/dist/cli/lib/verify-payload.js +6 -19
  107. package/dist/cli/lib/verify-payload.js.map +1 -1
  108. package/dist/cli/lib/verify-present.d.ts +6 -23
  109. package/dist/cli/lib/verify-present.d.ts.map +1 -1
  110. package/dist/cli/lib/verify-present.js +3 -215
  111. package/dist/cli/lib/verify-present.js.map +1 -1
  112. package/dist/cli/lib/verify-presentation.d.ts +2 -1
  113. package/dist/cli/lib/verify-presentation.d.ts.map +1 -1
  114. package/dist/cli/lib/verify-presentation.js +2 -1
  115. package/dist/cli/lib/verify-presentation.js.map +1 -1
  116. package/dist/cli/lib/verify-presenters.d.ts +19 -0
  117. package/dist/cli/lib/verify-presenters.d.ts.map +1 -0
  118. package/dist/cli/lib/verify-presenters.js +173 -0
  119. package/dist/cli/lib/verify-presenters.js.map +1 -0
  120. package/dist/cli/lib/verify-remediation.d.ts +4 -56
  121. package/dist/cli/lib/verify-remediation.d.ts.map +1 -1
  122. package/dist/cli/lib/verify-remediation.js +2 -226
  123. package/dist/cli/lib/verify-remediation.js.map +1 -1
  124. package/dist/cli/lib/verify-run.d.ts +12 -0
  125. package/dist/cli/lib/verify-run.d.ts.map +1 -0
  126. package/dist/cli/lib/verify-run.js +70 -0
  127. package/dist/cli/lib/verify-run.js.map +1 -0
  128. package/dist/cli/lib/verify-sinks.d.ts +4 -0
  129. package/dist/cli/lib/verify-sinks.d.ts.map +1 -0
  130. package/dist/cli/lib/verify-sinks.js +12 -0
  131. package/dist/cli/lib/verify-sinks.js.map +1 -0
  132. package/dist/cli/lib/version.gen.d.ts +1 -1
  133. package/dist/cli/lib/version.gen.js +1 -1
  134. package/dist/cli/lib/virtual-scratch-store.d.ts +37 -0
  135. package/dist/cli/lib/virtual-scratch-store.d.ts.map +1 -0
  136. package/dist/cli/lib/virtual-scratch-store.js +132 -0
  137. package/dist/cli/lib/virtual-scratch-store.js.map +1 -0
  138. package/dist/cli/program-core.d.ts.map +1 -1
  139. package/dist/cli/program-core.js +43 -3
  140. package/dist/cli/program-core.js.map +1 -1
  141. package/package.json +1 -1
  142. package/templates/.gitagent/teacher/MISSION.schema.yaml +6 -0
  143. package/templates/.gitignore.gxt +2 -0
  144. package/templates/integrations/asset-catalog.json +1 -0
  145. package/templates/integrations/compatibility.json +10 -1
  146. package/templates/integrations/recipes/claude-code.md +6 -4
  147. package/templates/integrations/recipes/codex-cli.md +6 -4
  148. package/templates/integrations/recipes/opencode.md +8 -2
  149. package/templates/scripts/gxt-shell-agent.sh +62 -0
  150. package/dist/cli/lib/kpi-report-stale.d.ts +0 -18
  151. package/dist/cli/lib/kpi-report-stale.d.ts.map +0 -1
  152. package/dist/cli/lib/kpi-report-stale.js +0 -91
  153. package/dist/cli/lib/kpi-report-stale.js.map +0 -1
  154. package/dist/cli/lib/trace-evidence.d.ts +0 -23
  155. package/dist/cli/lib/trace-evidence.d.ts.map +0 -1
  156. package/dist/cli/lib/trace-evidence.js +0 -118
  157. package/dist/cli/lib/trace-evidence.js.map +0 -1
@@ -1,57 +1,5 @@
1
- import type { OutputAudience } from "./audience-output.js";
2
- import type { GxtErrorCode } from "./gxt-error-codes.js";
3
- import type { TraceFailureKind } from "./trace.js";
4
- import type { VerifyFailurePhase, VerifyOptions, VerifyPhaseFailure } from "./verify-engine.js";
5
- export interface AudienceTaggedStep {
6
- audience: OutputAudience;
7
- step: string;
8
- }
9
- export interface VerifyRemediation {
10
- error_code: GxtErrorCode;
11
- fix_hints: string[];
12
- next_actions: string[];
13
- tagged_steps?: AudienceTaggedStep[];
14
- }
15
- export interface VerifyHintContext {
16
- root?: string;
17
- missionPath: string;
18
- msnId?: string;
19
- workerLogPath?: string;
20
- gateCommand?: string;
21
- gitProofMessage?: string;
22
- strictTrace?: boolean;
23
- traceKind?: TraceFailureKind;
24
- traceQuote?: string;
25
- traceFailureReason?: string;
26
- kpiFailureReason?: string;
27
- gateStderr?: string;
28
- gateStdout?: string;
29
- }
30
- export declare function buildVerifyHintContext(failure: VerifyPhaseFailure, missionArg: string, options: Pick<VerifyOptions, "strictTrace">, root?: string, msnId?: string): VerifyHintContext;
31
- export declare function hintsForVerifyPhase(phase: VerifyFailurePhase, ctx: VerifyHintContext): VerifyRemediation;
32
- export interface VerifyFailurePresentationInput {
33
- failure: VerifyPhaseFailure;
34
- missionArg: string;
35
- options: Pick<VerifyOptions, "strictTrace" | "audience">;
36
- root?: string;
37
- msnId?: string;
38
- }
39
- export interface VerifyFailurePresentation {
40
- error_code: GxtErrorCode;
41
- headline: string;
42
- detail_lines: string[];
43
- fix_hints: string[];
44
- next_actions: string[];
45
- tagged_steps?: AudienceTaggedStep[];
46
- exit_code: number;
47
- gate?: {
48
- stdout?: string;
49
- stderr?: string;
50
- exitCode?: number;
51
- };
52
- trace?: {
53
- failures?: string[];
54
- };
55
- }
56
- export declare function verifyFailurePresentation(input: VerifyFailurePresentationInput): VerifyFailurePresentation;
1
+ export type { AudienceTaggedStep, VerifyHintContext, VerifyRemediation, } from "./verify-hints.js";
2
+ export { buildVerifyHintContext, hintsForVerifyPhase, } from "./verify-hints.js";
3
+ export type { VerifyFailurePresentation, VerifyFailurePresentationInput, } from "./verify-failure-format.js";
4
+ export { verifyFailurePresentation } from "./verify-failure-format.js";
57
5
  //# sourceMappingURL=verify-remediation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify-remediation.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/verify-remediation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAC3C,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,iBAAiB,CAgBnB;AAqID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,iBAAiB,GACrB,iBAAiB,CAiBnB;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,YAAY,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,GACpC,yBAAyB,CAoE3B"}
1
+ {"version":3,"file":"verify-remediation.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/verify-remediation.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,227 +1,3 @@
1
- import { CLI_NAME } from "./constants.js";
2
- import { GXT_ERROR, mapGitProofCodeToGxt } from "./gxt-error-codes.js";
3
- import { gateOutputIndicatesBannedImport } from "./banned-import-violation.js";
4
- import { gateOutputIndicatesImportLayer } from "./surgeon.js";
5
- import { hintForTraceKind, hintGate, hintGitProof, hintTracePendingSteps, parseGitProofCode, } from "./fix-hints.js";
6
- export function buildVerifyHintContext(failure, missionArg, options, root, msnId) {
7
- return {
8
- root,
9
- missionPath: missionArg,
10
- msnId,
11
- workerLogPath: failure.workerLogPath,
12
- gateCommand: failure.gateCommand,
13
- gitProofMessage: failure.gitProofMessage ?? failure.message,
14
- traceKind: failure.traceKind,
15
- traceQuote: failure.traceQuote,
16
- traceFailureReason: failure.traceReason,
17
- kpiFailureReason: failure.kpiReason ?? failure.message,
18
- gateStderr: failure.gateStderr,
19
- gateStdout: failure.gateStdout,
20
- strictTrace: options.strictTrace,
21
- };
22
- }
23
- function parseMsnIdFromGitProofMessage(message) {
24
- const m = message.match(/\[(MSN-\d{4})\]/);
25
- return m?.[1];
26
- }
27
- function tagStep(audience, step) {
28
- return { audience, step };
29
- }
30
- function verifyCmd(mission) {
31
- return `gapman verify --mission ${mission}`;
32
- }
33
- function hintsForGitProofPhase(ctx) {
34
- const mission = ctx.missionPath;
35
- const verifyCmdStr = verifyCmd(mission);
36
- const code = parseGitProofCode(ctx.gitProofMessage ?? "");
37
- const gitCtx = {
38
- root: ctx.root,
39
- missionPath: mission,
40
- msnId: ctx.msnId ?? parseMsnIdFromGitProofMessage(ctx.gitProofMessage ?? ""),
41
- repoRelMission: mission,
42
- };
43
- const hint = code ? hintGitProof(code, gitCtx) : verifyCmdStr;
44
- const nextActions = code === "NO_MSN_COMMITS" || code === "MISSION_FILE_NOT_MODIFIED_BY_TEACHER"
45
- ? [hint.split("; ")[0], 'gapman teacher set "$(git config user.email)"', verifyCmdStr]
46
- : ['gapman teacher set "$(git config user.email)"', verifyCmdStr];
47
- const tagged_steps = [
48
- tagStep("teacher", 'gapman teacher set "$(git config user.email)"'),
49
- tagStep("verifier", verifyCmdStr),
50
- ];
51
- if (code === "NO_MSN_COMMITS" || code === "MISSION_FILE_NOT_MODIFIED_BY_TEACHER") {
52
- tagged_steps.unshift(tagStep("teacher", nextActions[0]));
53
- }
54
- return {
55
- error_code: code ? mapGitProofCodeToGxt(code) : GXT_ERROR.MISSION_UNSTAMPED,
56
- fix_hints: [hint],
57
- next_actions: nextActions,
58
- tagged_steps,
59
- };
60
- }
61
- function hintsForGatePhase(ctx) {
62
- const mission = ctx.missionPath;
63
- const verifyCmdStr = verifyCmd(mission);
64
- const gate = ctx.gateCommand ?? "<gate>";
65
- const combined = `${ctx.gateStderr ?? ""}\n${ctx.gateStdout ?? ""}`;
66
- const errorCode = gateOutputIndicatesImportLayer(ctx.gateStdout ?? "")
67
- || gateOutputIndicatesImportLayer(ctx.gateStderr ?? "")
68
- ? GXT_ERROR.IMPORT_LAYER_VIOLATION
69
- : gateOutputIndicatesBannedImport(combined)
70
- ? GXT_ERROR.BANNED_IMPORT_DETECTED
71
- : GXT_ERROR.GATE_FAILED;
72
- return {
73
- error_code: errorCode,
74
- fix_hints: [hintGate(gate, mission)],
75
- next_actions: [`re-run gate: ${gate}`, verifyCmdStr],
76
- tagged_steps: [
77
- tagStep("worker", `re-run gate: ${gate}`),
78
- tagStep("verifier", verifyCmdStr),
79
- ],
80
- };
81
- }
82
- function hintsForKpiPhase(ctx) {
83
- const mission = ctx.missionPath;
84
- const verifyCmdStr = verifyCmd(mission);
85
- const reason = ctx.kpiFailureReason ?? "";
86
- const errorCode = reason.includes("missing")
87
- ? GXT_ERROR.KPI_REPORT_MISSING
88
- : reason.includes("invalid") || reason.includes("schema")
89
- ? GXT_ERROR.KPI_REPORT_INVALID
90
- : reason.includes("STALE") || reason.includes("stale")
91
- ? GXT_ERROR.KPI_REPORT_STALE
92
- : GXT_ERROR.KPI_GATE_FAILED;
93
- return {
94
- error_code: errorCode,
95
- fix_hints: [
96
- `gapman scan --mission ${mission}`,
97
- `commit updated KPI report under .gitagent/kpi/`,
98
- verifyCmdStr,
99
- ],
100
- next_actions: [`gapman scan --mission ${mission}`, verifyCmdStr],
101
- tagged_steps: [
102
- tagStep("worker", `gapman scan --mission ${mission}`),
103
- tagStep("verifier", verifyCmdStr),
104
- ],
105
- };
106
- }
107
- function hintsForTracePendingPhase(ctx) {
108
- const mission = ctx.missionPath;
109
- const workerLog = ctx.workerLogPath ?? "WORKER_LOG.md";
110
- const steps = hintTracePendingSteps(workerLog, mission, ctx.gateCommand);
111
- return {
112
- error_code: GXT_ERROR.TRACE_PENDING,
113
- fix_hints: steps.slice(0, 3),
114
- next_actions: steps,
115
- tagged_steps: [
116
- tagStep("worker", steps[0]),
117
- tagStep("worker", steps[1]),
118
- tagStep("worker", steps[2]),
119
- tagStep("verifier", steps[3] ?? verifyCmd(mission)),
120
- ],
121
- };
122
- }
123
- function hintsForTracePhase(ctx) {
124
- const mission = ctx.missionPath;
125
- const workerLog = ctx.workerLogPath ?? "WORKER_LOG.md";
126
- const verifyCmdStr = verifyCmd(mission);
127
- const traceKind = ctx.traceKind ?? "other";
128
- const hints = [hintForTraceKind(traceKind, workerLog, mission, ctx.traceQuote)];
129
- const errorCode = traceKind === "ambiguous"
130
- ? GXT_ERROR.TRACE_AMBIGUOUS
131
- : traceKind === "stale_evidence"
132
- ? GXT_ERROR.TRACE_STALE
133
- : GXT_ERROR.TRACE_MISSING;
134
- return {
135
- error_code: errorCode,
136
- fix_hints: hints,
137
- next_actions: [verifyCmdStr, `gapman verify --mission ${mission} --fix`],
138
- tagged_steps: [
139
- tagStep("verifier", verifyCmdStr),
140
- tagStep("verifier", `gapman verify --mission ${mission} --fix`),
141
- ],
142
- };
143
- }
144
- export function hintsForVerifyPhase(phase, ctx) {
145
- switch (phase) {
146
- case "git_proof":
147
- return hintsForGitProofPhase(ctx);
148
- case "gate":
149
- return hintsForGatePhase(ctx);
150
- case "kpi":
151
- return hintsForKpiPhase(ctx);
152
- case "trace_pending":
153
- return hintsForTracePendingPhase(ctx);
154
- case "trace":
155
- return hintsForTracePhase(ctx);
156
- default: {
157
- const _exhaustive = phase;
158
- return _exhaustive;
159
- }
160
- }
161
- }
162
- export function verifyFailurePresentation(input) {
163
- const { failure, missionArg, root, msnId, options } = input;
164
- const remediation = hintsForVerifyPhase(failure.phase, buildVerifyHintContext(failure, missionArg, options, root, msnId));
165
- const base = {
166
- error_code: remediation.error_code,
167
- fix_hints: remediation.fix_hints,
168
- next_actions: remediation.next_actions,
169
- tagged_steps: remediation.tagged_steps,
170
- exit_code: failure.exitCode,
171
- };
172
- switch (failure.phase) {
173
- case "git_proof":
174
- return {
175
- ...base,
176
- headline: failure.message,
177
- detail_lines: [],
178
- };
179
- case "gate":
180
- return {
181
- ...base,
182
- headline: "verify: GATE FAILED",
183
- detail_lines: [
184
- ...(failure.gateStdout !== undefined ? [`--- stdout ---\n${failure.gateStdout}`] : []),
185
- ...(failure.gateStderr !== undefined ? [`--- stderr ---\n${failure.gateStderr}`] : []),
186
- ...(failure.gateExitCode !== undefined ? [`exit code: ${String(failure.gateExitCode)}`] : []),
187
- ],
188
- gate: {
189
- stdout: failure.gateStdout,
190
- stderr: failure.gateStderr,
191
- exitCode: failure.gateExitCode,
192
- },
193
- };
194
- case "kpi":
195
- return {
196
- ...base,
197
- headline: "verify: KPI GATE FAILED",
198
- detail_lines: [
199
- failure.kpiReason ?? failure.message,
200
- ...(failure.kpiMetric
201
- ? [`metric: ${failure.kpiMetric} ${failure.kpiOp ?? ""} ${String(failure.kpiExpected ?? "")} (actual: ${String(failure.kpiActual ?? "missing")})`]
202
- : []),
203
- ...(failure.kpiReportPath ? [`report: ${failure.kpiReportPath}`] : []),
204
- ],
205
- };
206
- case "trace_pending":
207
- return {
208
- ...base,
209
- headline: `${CLI_NAME} verify: legislative stub complete (git-proof OK) — worker must execute, append ${failure.workerLogPath}, set trace row PASS, then re-verify`,
210
- detail_lines: [],
211
- };
212
- case "trace":
213
- return {
214
- ...base,
215
- headline: "verify: TRACE MAPPING FAILED (Evidence Tampering / missing evidence)",
216
- detail_lines: [`DoD trace failure: ${failure.traceReason ?? failure.message}`],
217
- trace: failure.traceReason
218
- ? { failures: [`DoD trace: ${failure.traceReason}`] }
219
- : undefined,
220
- };
221
- default: {
222
- const _exhaustive = failure.phase;
223
- return _exhaustive;
224
- }
225
- }
226
- }
1
+ export { buildVerifyHintContext, hintsForVerifyPhase, } from "./verify-hints.js";
2
+ export { verifyFailurePresentation } from "./verify-failure-format.js";
227
3
  //# sourceMappingURL=verify-remediation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify-remediation.js","sourceRoot":"","sources":["../../../src/cli/lib/verify-remediation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify-remediation.js","sourceRoot":"","sources":["../../../src/cli/lib/verify-remediation.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type VerifyOptions } from "./verify-engine.js";
2
+ import { type VerifyResultPayload } from "./verify-payload.js";
3
+ export interface VerifyRunResult {
4
+ ok: boolean;
5
+ exitCode: number;
6
+ }
7
+ /** Unified verify orchestration: load workspace once, evaluate once, present by sink. */
8
+ export declare function runVerifyCore(options: VerifyOptions): Promise<VerifyRunResult>;
9
+ export declare function buildVerifyResultPayloadFromOptions(options: VerifyOptions): VerifyResultPayload;
10
+ export type { VerifyPresentResult } from "./verify-presenters.js";
11
+ export type { VerifySink } from "./verify-sinks.js";
12
+ //# sourceMappingURL=verify-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-run.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/verify-run.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yFAAyF;AACzF,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CA6CpF;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB,CAY/F;AAED,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { assertMissionGatePresent, parseMissionFile } from "./missions/parser.js";
2
+ import { GapmanUserError } from "./errors.js";
3
+ import { loadWorkspace } from "./workspace.js";
4
+ import { evaluateVerifyPhases, } from "./verify-engine.js";
5
+ import { buildVerifyResultPayload, initFailurePayload, } from "./verify-payload.js";
6
+ import { resolveVerifySink } from "./verify-sinks.js";
7
+ import { presentBreakGlassHuman, presentBreakGlassJson, presentFix, presentHuman, presentHumanInitFailure, presentJsonFromResult, presentJsonInitFailure, } from "./verify-presenters.js";
8
+ /** Unified verify orchestration: load workspace once, evaluate once, present by sink. */
9
+ export async function runVerifyCore(options) {
10
+ const { root, manifest } = loadWorkspace();
11
+ if (!options.mission) {
12
+ throw new Error("gapman verify: --mission is required");
13
+ }
14
+ const mission = parseMissionFile(root, options.mission);
15
+ const missionArg = options.mission;
16
+ const sink = resolveVerifySink(options);
17
+ switch (sink) {
18
+ case "break_glass_json":
19
+ return presentBreakGlassJson(root, mission, options);
20
+ case "break_glass_human":
21
+ return presentBreakGlassHuman(root, mission, options);
22
+ case "json": {
23
+ try {
24
+ assertMissionGatePresent(mission);
25
+ const result = evaluateVerifyPhases(root, mission, options, manifest);
26
+ return presentJsonFromResult(root, mission, missionArg, options, manifest, result);
27
+ }
28
+ catch (e) {
29
+ return presentJsonInitFailure(options, e);
30
+ }
31
+ }
32
+ case "fix_interactive":
33
+ case "fix_noninteractive":
34
+ case "human": {
35
+ try {
36
+ assertMissionGatePresent(mission);
37
+ }
38
+ catch (e) {
39
+ return presentHumanInitFailure(options, e);
40
+ }
41
+ const result = evaluateVerifyPhases(root, mission, options, manifest);
42
+ if (sink === "fix_interactive") {
43
+ return presentFix(root, mission, missionArg, options, result, false, manifest, runVerifyCore);
44
+ }
45
+ if (sink === "fix_noninteractive") {
46
+ return presentFix(root, mission, missionArg, options, result, true, manifest, runVerifyCore);
47
+ }
48
+ return presentHuman(root, mission, missionArg, options, result);
49
+ }
50
+ default: {
51
+ const _exhaustive = sink;
52
+ return _exhaustive;
53
+ }
54
+ }
55
+ }
56
+ export function buildVerifyResultPayloadFromOptions(options) {
57
+ try {
58
+ if (!options.mission) {
59
+ throw new GapmanUserError("INVALID_ARGUMENT", "gapman verify: --mission is required", undefined, 2);
60
+ }
61
+ const { root, manifest } = loadWorkspace();
62
+ const mission = parseMissionFile(root, options.mission);
63
+ assertMissionGatePresent(mission);
64
+ return buildVerifyResultPayload(root, manifest, mission, options.mission, options);
65
+ }
66
+ catch (e) {
67
+ return initFailurePayload(e);
68
+ }
69
+ }
70
+ //# sourceMappingURL=verify-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-run.js","sourceRoot":"","sources":["../../../src/cli/lib/verify-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { VerifyOptions } from "./verify-engine.js";
2
+ export type VerifySink = "break_glass_json" | "break_glass_human" | "json" | "fix_interactive" | "fix_noninteractive" | "human";
3
+ export declare function resolveVerifySink(options: VerifyOptions): VerifySink;
4
+ //# sourceMappingURL=verify-sinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-sinks.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/verify-sinks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,mBAAmB,GACnB,MAAM,GACN,iBAAiB,GACjB,oBAAoB,GACpB,OAAO,CAAC;AAEZ,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CASpE"}
@@ -0,0 +1,12 @@
1
+ export function resolveVerifySink(options) {
2
+ if (options.breakGlass === true) {
3
+ return options.json ? "break_glass_json" : "break_glass_human";
4
+ }
5
+ if (options.json)
6
+ return "json";
7
+ if (options.fix === true) {
8
+ return options.fixNonInteractive ? "fix_noninteractive" : "fix_interactive";
9
+ }
10
+ return "human";
11
+ }
12
+ //# sourceMappingURL=verify-sinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-sinks.js","sourceRoot":"","sources":["../../../src/cli/lib/verify-sinks.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /** Generated by scripts/gen-version.mjs — do not edit */
2
- export declare const CLI_VERSION = "2.1.0";
2
+ export declare const CLI_VERSION = "2.2.0";
3
3
  export declare const NPM_PACKAGE_NAME = "@jeger-ai/opengantry";
4
4
  //# sourceMappingURL=version.gen.d.ts.map
@@ -1,4 +1,4 @@
1
1
  /** Generated by scripts/gen-version.mjs — do not edit */
2
- export const CLI_VERSION = "2.1.0";
2
+ export const CLI_VERSION = "2.2.0";
3
3
  export const NPM_PACKAGE_NAME = "@jeger-ai/opengantry";
4
4
  //# sourceMappingURL=version.gen.js.map
@@ -0,0 +1,37 @@
1
+ export declare const VIRTUAL_GATE_CAPTURE_FILE: "gate-capture.json";
2
+ /** Default max flight directories retained after abnormal termination. */
3
+ export declare const DEFAULT_VIRTUAL_FLIGHT_RETENTION: 32;
4
+ /** Default age (ms) after which abandoned flight dirs are scavenged. */
5
+ export declare const DEFAULT_VIRTUAL_FLIGHT_MAX_AGE_MS: number;
6
+ export interface GateCapturePayload {
7
+ captured_at: string;
8
+ flight_id: string;
9
+ gate_command: string;
10
+ exit_code: number | null;
11
+ stdout: string;
12
+ stderr: string;
13
+ }
14
+ export declare function createVirtualFlightId(): string;
15
+ /** True when repo-relative path lives under `.gitagent/virtual/`. */
16
+ export declare function isVirtualScratchPath(repoRelPath: string): boolean;
17
+ export declare function virtualFlightDirAbs(repoRoot: string, flightId: string): string;
18
+ /** Atomic JSON write inside a per-flight directory (gitignored scratch). */
19
+ export declare function writeVirtualJsonAtomic(repoRoot: string, flightId: string, fileName: string, payload: unknown): Promise<string>;
20
+ /** Synchronous variant for verify hot path (post-gate capture + purge). */
21
+ export declare function writeVirtualJsonAtomicSync(repoRoot: string, flightId: string, fileName: string, payload: unknown): string;
22
+ export declare function writeGateCaptureSync(repoRoot: string, flightId: string, capture: Omit<GateCapturePayload, "captured_at" | "flight_id">): string;
23
+ export declare function flightDirExists(repoRoot: string, flightId: string): boolean;
24
+ /** Recursively remove a single flight directory (Invariant A post-success purge). */
25
+ export declare function purgeVirtualFlightDir(repoRoot: string, flightId: string): void;
26
+ export interface ScavengeVirtualFlightsOptions {
27
+ maxRetained?: number;
28
+ maxAgeMs?: number;
29
+ /** Protect this flight from scavenging (active verify session). */
30
+ protectFlightId?: string;
31
+ }
32
+ /**
33
+ * Bounded retention for abnormal termination leftovers.
34
+ * Sorts flight dirs by mtime descending; keeps newest `maxRetained` and drops older than maxAgeMs.
35
+ */
36
+ export declare function scavengeStaleVirtualFlights(repoRoot: string, options?: ScavengeVirtualFlightsOptions): string[];
37
+ //# sourceMappingURL=virtual-scratch-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-scratch-store.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/virtual-scratch-store.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB,EAAG,mBAA4B,CAAC;AAEtE,0EAA0E;AAC1E,eAAO,MAAM,gCAAgC,EAAG,EAAW,CAAC;AAE5D,wEAAwE;AACxE,eAAO,MAAM,iCAAiC,QAAsB,CAAC;AAErE,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAIjE;AAMD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E;AAUD,4EAA4E;AAC5E,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,MAAM,CAmBR;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,WAAW,CAAC,GAC7D,MAAM,CAOR;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI9E;AAED,MAAM,WAAW,6BAA6B;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,6BAAkC,GAC1C,MAAM,EAAE,CAyCV"}
@@ -0,0 +1,132 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { promoteFileAtomic } from "./atomic-fs.js";
5
+ import { REL_VIRTUAL_SCRATCH } from "./constants.js";
6
+ export const VIRTUAL_GATE_CAPTURE_FILE = "gate-capture.json";
7
+ /** Default max flight directories retained after abnormal termination. */
8
+ export const DEFAULT_VIRTUAL_FLIGHT_RETENTION = 32;
9
+ /** Default age (ms) after which abandoned flight dirs are scavenged. */
10
+ export const DEFAULT_VIRTUAL_FLIGHT_MAX_AGE_MS = 24 * 60 * 60 * 1000;
11
+ export function createVirtualFlightId() {
12
+ return crypto.randomUUID();
13
+ }
14
+ /** True when repo-relative path lives under `.gitagent/virtual/`. */
15
+ export function isVirtualScratchPath(repoRelPath) {
16
+ const norm = repoRelPath.replace(/\\/g, "/").replace(/\/+$/, "");
17
+ const root = REL_VIRTUAL_SCRATCH.replace(/\\/g, "/").replace(/\/+$/, "");
18
+ return norm === root || norm.startsWith(`${root}/`);
19
+ }
20
+ function virtualRootAbs(repoRoot) {
21
+ return path.join(repoRoot, REL_VIRTUAL_SCRATCH.replace(/\/$/, ""));
22
+ }
23
+ export function virtualFlightDirAbs(repoRoot, flightId) {
24
+ return path.join(virtualRootAbs(repoRoot), flightId);
25
+ }
26
+ function ensureVirtualRoot(repoRoot) {
27
+ fs.mkdirSync(virtualRootAbs(repoRoot), { recursive: true });
28
+ }
29
+ function stagedPathInFlight(flightDir, fileName) {
30
+ return path.join(flightDir, `${fileName}.staging.${process.pid}.${Date.now()}`);
31
+ }
32
+ /** Atomic JSON write inside a per-flight directory (gitignored scratch). */
33
+ export async function writeVirtualJsonAtomic(repoRoot, flightId, fileName, payload) {
34
+ ensureVirtualRoot(repoRoot);
35
+ const flightDir = virtualFlightDirAbs(repoRoot, flightId);
36
+ fs.mkdirSync(flightDir, { recursive: true });
37
+ const target = path.join(flightDir, fileName);
38
+ const staged = stagedPathInFlight(flightDir, fileName);
39
+ const body = `${JSON.stringify(payload, null, 2)}\n`;
40
+ fs.writeFileSync(staged, body, { encoding: "utf8", flag: "wx" });
41
+ await promoteFileAtomic(staged, target);
42
+ return target;
43
+ }
44
+ /** Synchronous variant for verify hot path (post-gate capture + purge). */
45
+ export function writeVirtualJsonAtomicSync(repoRoot, flightId, fileName, payload) {
46
+ ensureVirtualRoot(repoRoot);
47
+ const flightDir = virtualFlightDirAbs(repoRoot, flightId);
48
+ fs.mkdirSync(flightDir, { recursive: true });
49
+ const target = path.join(flightDir, fileName);
50
+ const staged = stagedPathInFlight(flightDir, fileName);
51
+ const body = `${JSON.stringify(payload, null, 2)}\n`;
52
+ try {
53
+ fs.writeFileSync(staged, body, { encoding: "utf8", flag: "wx" });
54
+ fs.renameSync(staged, target);
55
+ }
56
+ catch (e) {
57
+ try {
58
+ if (fs.existsSync(staged))
59
+ fs.unlinkSync(staged);
60
+ }
61
+ catch {
62
+ // ignore cleanup failure
63
+ }
64
+ throw e;
65
+ }
66
+ return target;
67
+ }
68
+ export function writeGateCaptureSync(repoRoot, flightId, capture) {
69
+ const payload = {
70
+ captured_at: new Date().toISOString(),
71
+ flight_id: flightId,
72
+ ...capture,
73
+ };
74
+ return writeVirtualJsonAtomicSync(repoRoot, flightId, VIRTUAL_GATE_CAPTURE_FILE, payload);
75
+ }
76
+ export function flightDirExists(repoRoot, flightId) {
77
+ return fs.existsSync(virtualFlightDirAbs(repoRoot, flightId));
78
+ }
79
+ /** Recursively remove a single flight directory (Invariant A post-success purge). */
80
+ export function purgeVirtualFlightDir(repoRoot, flightId) {
81
+ const dir = virtualFlightDirAbs(repoRoot, flightId);
82
+ if (!fs.existsSync(dir))
83
+ return;
84
+ fs.rmSync(dir, { recursive: true, force: true });
85
+ }
86
+ /**
87
+ * Bounded retention for abnormal termination leftovers.
88
+ * Sorts flight dirs by mtime descending; keeps newest `maxRetained` and drops older than maxAgeMs.
89
+ */
90
+ export function scavengeStaleVirtualFlights(repoRoot, options = {}) {
91
+ const root = virtualRootAbs(repoRoot);
92
+ if (!fs.existsSync(root))
93
+ return [];
94
+ const maxRetained = options.maxRetained ?? DEFAULT_VIRTUAL_FLIGHT_RETENTION;
95
+ const maxAgeMs = options.maxAgeMs ?? DEFAULT_VIRTUAL_FLIGHT_MAX_AGE_MS;
96
+ const protect = options.protectFlightId;
97
+ const now = Date.now();
98
+ const entries = fs
99
+ .readdirSync(root, { withFileTypes: true })
100
+ .filter((e) => e.isDirectory())
101
+ .map((e) => {
102
+ const full = path.join(root, e.name);
103
+ let mtime = 0;
104
+ try {
105
+ mtime = fs.statSync(full).mtimeMs;
106
+ }
107
+ catch {
108
+ mtime = 0;
109
+ }
110
+ return { name: e.name, full, mtime };
111
+ })
112
+ .sort((a, b) => b.mtime - a.mtime);
113
+ const removed = [];
114
+ for (let i = 0; i < entries.length; i += 1) {
115
+ const entry = entries[i];
116
+ if (protect && entry.name === protect)
117
+ continue;
118
+ const tooOld = now - entry.mtime > maxAgeMs;
119
+ const overCapacity = i >= maxRetained;
120
+ if (!tooOld && !overCapacity)
121
+ continue;
122
+ try {
123
+ fs.rmSync(entry.full, { recursive: true, force: true });
124
+ removed.push(entry.name);
125
+ }
126
+ catch {
127
+ // best-effort scavenger — do not fail verify
128
+ }
129
+ }
130
+ return removed;
131
+ }
132
+ //# sourceMappingURL=virtual-scratch-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-scratch-store.js","sourceRoot":"","sources":["../../../src/cli/lib/virtual-scratch-store.ts"],"names":[],"mappings":"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"}