@jeger-ai/opengantry 3.7.0 → 3.8.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 (51) hide show
  1. package/README.md +15 -15
  2. package/dist/cli/commands/cage.d.ts +16 -0
  3. package/dist/cli/commands/cage.d.ts.map +1 -1
  4. package/dist/cli/commands/cage.js +77 -8
  5. package/dist/cli/commands/cage.js.map +1 -1
  6. package/dist/cli/lib/cage/cage-config.d.ts +29 -0
  7. package/dist/cli/lib/cage/cage-config.d.ts.map +1 -0
  8. package/dist/cli/lib/cage/cage-config.js +143 -0
  9. package/dist/cli/lib/cage/cage-config.js.map +1 -0
  10. package/dist/cli/lib/cage/cage-process.d.ts +1 -1
  11. package/dist/cli/lib/cage/cage-process.d.ts.map +1 -1
  12. package/dist/cli/lib/cage/cage-process.js +2 -2
  13. package/dist/cli/lib/cage/cage-process.js.map +1 -1
  14. package/dist/cli/lib/cage/cage-push-guard.d.ts +26 -0
  15. package/dist/cli/lib/cage/cage-push-guard.d.ts.map +1 -0
  16. package/dist/cli/lib/cage/cage-push-guard.js +114 -0
  17. package/dist/cli/lib/cage/cage-push-guard.js.map +1 -0
  18. package/dist/cli/lib/cage/cage-report.d.ts +37 -2
  19. package/dist/cli/lib/cage/cage-report.d.ts.map +1 -1
  20. package/dist/cli/lib/cage/cage-report.js +50 -4
  21. package/dist/cli/lib/cage/cage-report.js.map +1 -1
  22. package/dist/cli/lib/cage/cage-revert.d.ts +1 -1
  23. package/dist/cli/lib/cage/cage-rules.d.ts +49 -3
  24. package/dist/cli/lib/cage/cage-rules.d.ts.map +1 -1
  25. package/dist/cli/lib/cage/cage-rules.js +145 -7
  26. package/dist/cli/lib/cage/cage-rules.js.map +1 -1
  27. package/dist/cli/lib/cage/cage-run.d.ts +22 -2
  28. package/dist/cli/lib/cage/cage-run.d.ts.map +1 -1
  29. package/dist/cli/lib/cage/cage-run.js +85 -17
  30. package/dist/cli/lib/cage/cage-run.js.map +1 -1
  31. package/dist/cli/lib/cage/cage-snapshot.d.ts +11 -0
  32. package/dist/cli/lib/cage/cage-snapshot.d.ts.map +1 -1
  33. package/dist/cli/lib/cage/cage-snapshot.js +60 -18
  34. package/dist/cli/lib/cage/cage-snapshot.js.map +1 -1
  35. package/dist/cli/lib/cage/cage-suggest.d.ts +28 -0
  36. package/dist/cli/lib/cage/cage-suggest.d.ts.map +1 -0
  37. package/dist/cli/lib/cage/cage-suggest.js +164 -0
  38. package/dist/cli/lib/cage/cage-suggest.js.map +1 -0
  39. package/dist/cli/lib/cage/cage-watch.d.ts +36 -0
  40. package/dist/cli/lib/cage/cage-watch.d.ts.map +1 -0
  41. package/dist/cli/lib/cage/cage-watch.js +92 -0
  42. package/dist/cli/lib/cage/cage-watch.js.map +1 -0
  43. package/dist/cli/lib/version.gen.d.ts +1 -1
  44. package/dist/cli/lib/version.gen.js +1 -1
  45. package/dist/cli/program-cage.d.ts +9 -2
  46. package/dist/cli/program-cage.d.ts.map +1 -1
  47. package/dist/cli/program-cage.js +50 -6
  48. package/dist/cli/program-cage.js.map +1 -1
  49. package/package.json +1 -1
  50. package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
  51. package/templates/integrations/compatibility.json +1 -1
@@ -1,10 +1,14 @@
1
- import type { CageRuleId } from "./cage-rules.js";
1
+ import { type CageRuleId, type CageRuleSource } from "./cage-rules.js";
2
2
  import type { CageOutcome, CageResolvedChange } from "./cage-revert.js";
3
3
  export declare const CAGE_REPORT_SCHEMA: "gantry.cage-report.v1";
4
- /** Detect-after-the-fact limits, stated in every cage report. */
4
+ /** Limits with `--no-watch` (after-exit check only), stated in every such report. */
5
5
  export declare const CAGE_LIMITS: readonly string[];
6
6
  /** One-line stderr form of {@link CAGE_LIMITS}; `--json` keeps the full list. */
7
7
  export declare const CAGE_LIMITS_SUMMARY = "after-exit check only; reads, network calls and writes outside the protected set are not detected";
8
+ /** Limits in watch mode (the default): live restore, not prevention. */
9
+ export declare const CAGE_WATCH_LIMITS: readonly string[];
10
+ /** One-line stderr form of {@link CAGE_WATCH_LIMITS}. */
11
+ export declare const CAGE_WATCH_LIMITS_SUMMARY = "live restore, not blocking; reads, network calls and writes outside the protected set are not detected";
8
12
  /** Printed once under a violation report: the path from cage to project-specific missions. */
9
13
  export declare const CAGE_UPGRADE_FOOTER = "Need project-specific boundaries or task contracts? Run: npx -p @jeger-ai/opengantry gantry init";
10
14
  export type CageStatus = "ok" | "violations_reverted" | "violations_unresolved" | "runtime_error";
@@ -13,6 +17,9 @@ export interface CageReportChange {
13
17
  path: string;
14
18
  kind: "added" | "modified" | "deleted";
15
19
  rule: CageRuleId;
20
+ source: CageRuleSource;
21
+ /** A revert rule downgraded to report by `--allow-override`. */
22
+ overridden: boolean;
16
23
  sha256_before: string | null;
17
24
  sha256_after: string | null;
18
25
  outcome: CageOutcome;
@@ -32,7 +39,29 @@ export interface CageReport {
32
39
  max_file_bytes: number;
33
40
  protected_files: number;
34
41
  manifest_zones: number;
42
+ /**
43
+ * `.cage.yaml` at the cage root: whether it exists, how many protect entries it adds, and whether it is
44
+ * committed unchanged (null without a config or outside git).
45
+ */
46
+ cage_config: {
47
+ present: boolean;
48
+ entries: number;
49
+ committed: boolean | null;
50
+ };
51
+ /** Paths downgraded from revert to report for this run by `--allow-override`. */
52
+ overrides: string[];
35
53
  changes: CageReportChange[];
54
+ watch: {
55
+ enabled: boolean;
56
+ interval_ms: number | null;
57
+ live_restores: number;
58
+ contested: string[];
59
+ session_log: string | null;
60
+ };
61
+ push_guard: {
62
+ enabled: boolean;
63
+ refused_pushes: number;
64
+ };
36
65
  limits: readonly string[];
37
66
  }
38
67
  export interface CageReportInput {
@@ -45,10 +74,16 @@ export interface CageReportInput {
45
74
  maxFileBytes: number;
46
75
  protectedFiles: number;
47
76
  manifestZones: number;
77
+ cageConfig: CageReport["cage_config"];
78
+ overrides: readonly string[];
48
79
  changes: readonly CageResolvedChange[];
80
+ watch: CageReport["watch"];
81
+ pushGuard: CageReport["push_guard"];
49
82
  signalExitCode: (signal: NodeJS.Signals) => number;
50
83
  }
51
84
  export declare function buildCageReport(input: CageReportInput): CageReport;
85
+ /** Stderr banner for `--allow-override`, printed at start and again in the exit summary. */
86
+ export declare function formatCageOverrideBanner(overrides: readonly string[]): string | null;
52
87
  /** Human summary (stderr), so it never mixes into the wrapped command's stdout. */
53
88
  export declare function formatCageReport(report: CageReport): string[];
54
89
  //# sourceMappingURL=cage-report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cage-report.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAExE,eAAO,MAAM,kBAAkB,EAAG,uBAAgC,CAAC;AAEnE,iEAAiE;AACjE,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAMxC,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,sGACqE,CAAC;AAEtG,8FAA8F;AAC9F,eAAO,MAAM,mBAAmB,qGACoE,CAAC;AAErG,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,eAAe,CAAC;AAElG,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,kBAAkB,CAAC;IACzC,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC;CACpD;AAqBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA0BlE;AAOD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAoB7D"}
1
+ {"version":3,"file":"cage-report.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAExE,eAAO,MAAM,kBAAkB,EAAG,uBAAgC,CAAC;AAEnE,qFAAqF;AACrF,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAMxC,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,sGACqE,CAAC;AAEtG,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAM9C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,yBAAyB,2GACoE,CAAC;AAE3G,8FAA8F;AAC9F,eAAO,MAAM,mBAAmB,qGACoE,CAAC;AAErG,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,eAAe,CAAC;AAElG,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,kBAAkB,CAAC;IACzC,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9E,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,UAAU,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IACtC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,SAAS,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACpC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC;CACpD;AAqBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAgClE;AAQD,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAGpF;AAoBD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAwB7D"}
@@ -1,5 +1,6 @@
1
+ import { cageRuleSource } from "./cage-rules.js";
1
2
  export const CAGE_REPORT_SCHEMA = "gantry.cage-report.v1";
2
- /** Detect-after-the-fact limits, stated in every cage report. */
3
+ /** Limits with `--no-watch` (after-exit check only), stated in every such report. */
3
4
  export const CAGE_LIMITS = [
4
5
  "detects protected-path writes after the command exits; it does not block them while it runs",
5
6
  "reads are not detected: the command can still read .env and other secrets",
@@ -9,6 +10,16 @@ export const CAGE_LIMITS = [
9
10
  ];
10
11
  /** One-line stderr form of {@link CAGE_LIMITS}; `--json` keeps the full list. */
11
12
  export const CAGE_LIMITS_SUMMARY = "after-exit check only; reads, network calls and writes outside the protected set are not detected";
13
+ /** Limits in watch mode (the default): live restore, not prevention. */
14
+ export const CAGE_WATCH_LIMITS = [
15
+ "restores protected-path writes about once per watch interval while the command runs; it does not block them",
16
+ "a change can be committed or used before the next check; the push guard covers git push from inside the session only",
17
+ "reads are not detected: the command can still read .env and other secrets",
18
+ "network and API side effects are not detected",
19
+ "writes outside the protected set, and outside the repository, are not checked",
20
+ ];
21
+ /** One-line stderr form of {@link CAGE_WATCH_LIMITS}. */
22
+ export const CAGE_WATCH_LIMITS_SUMMARY = "live restore, not blocking; reads, network calls and writes outside the protected set are not detected";
12
23
  /** Printed once under a violation report: the path from cage to project-specific missions. */
13
24
  export const CAGE_UPGRADE_FOOTER = "Need project-specific boundaries or task contracts? Run: npx -p @jeger-ai/opengantry gantry init";
14
25
  const VIOLATION_EXIT_CODE = 3;
@@ -45,21 +56,51 @@ export function buildCageReport(input) {
45
56
  max_file_bytes: input.maxFileBytes,
46
57
  protected_files: input.protectedFiles,
47
58
  manifest_zones: input.manifestZones,
59
+ cage_config: input.cageConfig,
60
+ overrides: [...input.overrides],
48
61
  changes: input.changes.map((c) => ({
49
62
  path: c.rel,
50
63
  kind: c.kind,
51
64
  rule: c.rule,
65
+ source: cageRuleSource(c.rule),
66
+ overridden: c.overridden,
52
67
  sha256_before: c.before?.sha256 ?? null,
53
68
  sha256_after: c.after?.sha256 ?? null,
54
69
  outcome: c.outcome,
55
70
  error_code: c.errorCode,
56
71
  })),
57
- limits: CAGE_LIMITS,
72
+ watch: input.watch,
73
+ push_guard: input.pushGuard,
74
+ limits: input.watch.enabled ? CAGE_WATCH_LIMITS : CAGE_LIMITS,
58
75
  };
59
76
  }
60
77
  function changeLine(c) {
61
78
  const err = c.error_code ? ` ${c.error_code}` : "";
62
- return ` ${c.outcome.padEnd(13)} ${c.kind.padEnd(8)} ${c.path} (${c.rule})${err}`;
79
+ const over = c.overridden ? ", overridden" : "";
80
+ return ` ${c.outcome.padEnd(13)} ${c.kind.padEnd(8)} ${c.path} (${c.rule}${over})${err}`;
81
+ }
82
+ /** Stderr banner for `--allow-override`, printed at start and again in the exit summary. */
83
+ export function formatCageOverrideBanner(overrides) {
84
+ if (overrides.length === 0)
85
+ return null;
86
+ return `cage: OVERRIDE (--allow-override): changes are reported, not restored, under: ${overrides.join(", ")}`;
87
+ }
88
+ function sessionLines(report) {
89
+ const out = [];
90
+ const w = report.watch;
91
+ if (w.live_restores > 0) {
92
+ out.push(`cage: restored ${String(w.live_restores)} protected change(s) during the session`);
93
+ }
94
+ if (w.contested.length > 0) {
95
+ out.push(`cage: contested (kept being rewritten; restored once at exit): ${w.contested.join(", ")}`);
96
+ }
97
+ if (report.push_guard.refused_pushes > 0) {
98
+ out.push(`cage: refused ${String(report.push_guard.refused_pushes)} push(es) touching protected paths`);
99
+ }
100
+ if (w.session_log && (w.live_restores > 0 || report.push_guard.refused_pushes > 0)) {
101
+ out.push(`cage: session log: ${w.session_log}`);
102
+ }
103
+ return out;
63
104
  }
64
105
  /** Human summary (stderr), so it never mixes into the wrapped command's stdout. */
65
106
  export function formatCageReport(report) {
@@ -78,7 +119,12 @@ export function formatCageReport(report) {
78
119
  if (report.changes.some((c) => c.outcome === "detect_only")) {
79
120
  lines.push(`cage: detect_only files exceeded the ${String(report.max_file_bytes)}-byte per-file cap or the total snapshot budget and were not restored`);
80
121
  }
81
- lines.push(`cage: exit ${String(report.exit_code)}; limits: ${CAGE_LIMITS_SUMMARY}`);
122
+ lines.push(...sessionLines(report));
123
+ const banner = formatCageOverrideBanner(report.overrides);
124
+ if (banner)
125
+ lines.push(banner);
126
+ const summary = report.watch.enabled ? CAGE_WATCH_LIMITS_SUMMARY : CAGE_LIMITS_SUMMARY;
127
+ lines.push(`cage: exit ${String(report.exit_code)}; limits: ${summary}`);
82
128
  if (report.status === "violations_reverted" || report.status === "violations_unresolved") {
83
129
  lines.push(`cage: ${CAGE_UPGRADE_FOOTER}`);
84
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cage-report.js","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-report.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAgC,CAAC;AAEnE,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,6FAA6F;IAC7F,2EAA2E;IAC3E,+CAA+C;IAC/C,+EAA+E;IAC/E,+EAA+E;CAChF,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAC9B,mGAAmG,CAAC;AAEtG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kGAAkG,CAAC;AA+CrG,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,iBAAiB,GAA6B,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAErF,SAAS,UAAU,CAAC,KAAsB;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACpE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACrH,CAAC;IACD,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB,EAAE,KAAsB;IAC9D,IAAI,MAAM,KAAK,qBAAqB,IAAI,MAAM,KAAK,uBAAuB;QAAE,OAAO,mBAAmB,CAAC;IACvG,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,uBAAuB,CAAC;IAC/D,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,eAAe,IAAI,uBAAuB,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO;QACL,aAAa,EAAE,kBAAkB;QACjC,MAAM;QACN,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;QACtC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,iBAAiB,EAAE,KAAK,CAAC,eAAe;QACxC,cAAc,EAAE,KAAK,CAAC,aAAa;QACnC,aAAa,EAAE,KAAK,CAAC,YAAY;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ;QACxD,cAAc,EAAE,KAAK,CAAC,YAAY;QAClC,eAAe,EAAE,KAAK,CAAC,cAAc;QACrC,cAAc,EAAE,KAAK,CAAC,aAAa;QACnC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,CAAC,GAAG;YACX,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI;YACvC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,UAAU,EAAE,CAAC,CAAC,SAAS;SACxB,CAAC,CAAC;QACH,MAAM,EAAE,WAAW;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,CAAmB;IACrC,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;AACrF,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IAChC,IAAI,MAAM,CAAC,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;IACvG,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CACR,wCAAwC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,uEAAuE,CAC7I,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,mBAAmB,EAAE,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,MAAM,KAAK,qBAAqB,IAAI,MAAM,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"cage-report.js","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-report.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { CageChange } from "./cage-snapshot.js";
2
2
  /**
3
3
  * - `reverted`: baseline bytes (or symlink) restored
4
4
  * - `removed`: an added file was deleted
5
- * - `kept`: report-only rule (lockfiles); change left in place
5
+ * - `kept`: report-only rule (lockfiles, report entries, `--allow-override`); change left in place
6
6
  * - `reported`: `--report-only` run; change left in place
7
7
  * - `detect_only`: no baseline bytes (over size cap or budget); change left in place
8
8
  * - `revert_failed`: restore attempted and failed (`error_code` says why)
@@ -1,24 +1,70 @@
1
1
  /**
2
2
  * Zero-config protected set for `gantry cage`. Paths are matched without any
3
- * manifest; manifest `forbidden_zones` are unioned in when the repo has one.
3
+ * manifest; manifest `forbidden_zones` and `.cage.yaml` `protect:` entries are
4
+ * unioned in when present. Nothing in the repo can remove a built-in rule.
4
5
  */
5
- export type CageRuleId = "ci_config" | "secrets" | "git_control" | "lockfile" | "manifest_forbidden_zone";
6
+ export type CageRuleId = "ci_config" | "secrets" | "git_control" | "lockfile" | "cage_config" | "manifest_forbidden_zone" | "cage_protect";
7
+ /** Where a rule comes from: shipped with cage, the GXT manifest, or the project's `.cage.yaml`. */
8
+ export type CageRuleSource = "builtin" | "manifest" | "cage_yaml";
6
9
  /** `revert`: restore baseline bytes and fail. `report`: list the change but keep it. */
7
10
  export type CageRuleMode = "revert" | "report";
8
11
  export declare const CAGE_RULE_MODES: Readonly<Record<CageRuleId, CageRuleMode>>;
12
+ export declare function cageRuleSource(rule: CageRuleId): CageRuleSource;
9
13
  /** Directory names skipped by the whole-tree basename scan (dependency and VCS bulk). */
10
14
  export declare const CAGE_SCAN_SKIP_DIRS: ReadonlySet<string>;
11
15
  /** A file or directory tree protected by absolute path. */
12
16
  export interface CageTarget {
13
17
  abs: string;
14
18
  rule: CageRuleId;
19
+ mode: CageRuleMode;
20
+ source: CageRuleSource;
21
+ }
22
+ /** A `.cage.yaml` glob, matched against root-relative POSIX paths found by the whole-tree scan. */
23
+ export interface CageGlobTarget {
24
+ pattern: string;
25
+ re: RegExp;
26
+ mode: CageRuleMode;
27
+ source: "cage_yaml";
15
28
  }
16
29
  export interface CagePlan {
17
30
  root: string;
18
31
  targets: CageTarget[];
32
+ globs: CageGlobTarget[];
33
+ /** Root-relative paths whose revert rules `--allow-override` downgraded to report. */
34
+ overrides: string[];
19
35
  manifestZoneCount: number;
36
+ /** `committed` is null when there is no config or no git work tree. */
37
+ config: {
38
+ present: boolean;
39
+ entries: number;
40
+ committed: boolean | null;
41
+ };
42
+ }
43
+ /** How one path is protected after overrides; null when no rule matches. */
44
+ export interface CagePathRule {
45
+ rule: CageRuleId;
46
+ mode: CageRuleMode;
47
+ overridden: boolean;
20
48
  }
21
49
  /** Rule for a file found by the whole-tree scan, keyed on its basename. */
22
50
  export declare function cageBasenameRule(name: string): CageRuleId | null;
23
- export declare function buildCagePlan(root: string): CagePlan;
51
+ /**
52
+ * The strictest rule for a root-relative path (revert beats report), then `--allow-override`.
53
+ * Shared by the snapshot, override validation and the push guard so all three agree.
54
+ */
55
+ export declare function classifyCagePath(plan: CagePlan, rel: string, opts?: {
56
+ overrides?: boolean;
57
+ }): CagePathRule | null;
58
+ /** Downgrade a revert rule to report when the path is overridden; harness rules never are. */
59
+ export declare function applyCageOverride(plan: Pick<CagePlan, "overrides">, rel: string, hit: CagePathRule | null, enabled?: boolean): CagePathRule | null;
60
+ /**
61
+ * Resolve the session's protected set. An invalid manifest, `.cage.yaml` or override throws, so cage
62
+ * fails closed before the wrapped command runs.
63
+ */
64
+ export declare function buildCagePlan(root: string, opts?: {
65
+ overrides?: readonly string[];
66
+ }): CagePlan;
67
+ /** JSON form for the session push guard, so it checks the exact plan the session started with. */
68
+ export declare function serializeCagePlan(plan: CagePlan): string;
69
+ export declare function parseSerializedCagePlan(json: string): CagePlan;
24
70
  //# sourceMappingURL=cage-rules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cage-rules.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-rules.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAE1G,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/C,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAOtE,CAAC;AAqBF,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAMlD,CAAC;AAEH,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAIhE;AAwCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAQpD"}
1
+ {"version":3,"file":"cage-rules.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-rules.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,SAAS,GACT,aAAa,GACb,UAAU,GACV,aAAa,GACb,yBAAyB,GACzB,cAAc,CAAC;AAEnB,mGAAmG;AACnG,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAElE,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/C,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAUtE,CAAC;AAKF,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAI/D;AAqBD,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAMlD,CAAC;AAEH,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,sFAAsF;IACtF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;CAC1E;AAED,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAIhE;AA0DD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,YAAY,GAAG,IAAI,CAYrH;AAED,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,GAAG,IAAI,EACxB,OAAO,UAAO,GACb,YAAY,GAAG,IAAI,CAGrB;AAmED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAAG,QAAQ,CAmBlG;AAWD,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAGxD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAG9D"}
@@ -1,16 +1,31 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { toPosixRel } from "../cli-io.js";
3
4
  import { REL_MANIFEST } from "../constants.js";
4
5
  import { gitRun } from "../git/git.js";
6
+ import { GantryUserError } from "../errors.js";
5
7
  import { loadManifest } from "../manifest.js";
8
+ import { CAGE_CONFIG_FILE, cageConfigCommitted, cageGlobToRegExp, loadCageConfig, normalizeCageRelPath, } from "./cage-config.js";
6
9
  export const CAGE_RULE_MODES = {
7
10
  ci_config: "revert",
8
11
  secrets: "revert",
9
12
  git_control: "revert",
10
13
  // Package managers legitimately rewrite lockfiles; surface the change, never undo it.
11
14
  lockfile: "report",
15
+ cage_config: "revert",
12
16
  manifest_forbidden_zone: "revert",
17
+ // Default only: each `.cage.yaml` entry carries its own mode.
18
+ cage_protect: "revert",
13
19
  };
20
+ /** Rules `--allow-override` can never downgrade: they protect the harness itself. */
21
+ const NON_OVERRIDABLE_RULES = new Set(["git_control", "cage_config"]);
22
+ export function cageRuleSource(rule) {
23
+ if (rule === "manifest_forbidden_zone")
24
+ return "manifest";
25
+ if (rule === "cage_protect")
26
+ return "cage_yaml";
27
+ return "builtin";
28
+ }
14
29
  /** Root-anchored CI paths (files or directory trees). */
15
30
  const CI_CONFIG_PATHS = [".github/workflows", ".gitlab-ci.yml", ".circleci", "azure-pipelines.yml"];
16
31
  const LOCKFILE_NAMES = new Set([
@@ -82,13 +97,136 @@ function manifestZoneTargets(root) {
82
97
  }
83
98
  return [...zones].sort().map((z) => rootJoin(root, z));
84
99
  }
85
- export function buildCagePlan(root) {
100
+ /** `rel` equals `base` or lies inside it. */
101
+ function underPath(rel, base) {
102
+ return rel === base || rel.startsWith(`${base}/`);
103
+ }
104
+ function targetRel(plan, t) {
105
+ const rel = toPosixRel(plan.root, t.abs);
106
+ return rel.startsWith("..") ? null : rel;
107
+ }
108
+ function stricter(a, b) {
109
+ return a && (a.mode === "revert" || b.mode === "report") ? a : b;
110
+ }
111
+ function isOverridden(plan, rel) {
112
+ return plan.overrides.some((o) => underPath(rel, o));
113
+ }
114
+ /**
115
+ * The strictest rule for a root-relative path (revert beats report), then `--allow-override`.
116
+ * Shared by the snapshot, override validation and the push guard so all three agree.
117
+ */
118
+ export function classifyCagePath(plan, rel, opts = {}) {
119
+ let hit = null;
120
+ for (const t of plan.targets) {
121
+ const base = targetRel(plan, t);
122
+ if (base !== null && underPath(rel, base))
123
+ hit = stricter(hit, { rule: t.rule, mode: t.mode, overridden: false });
124
+ }
125
+ const byName = cageBasenameRule(path.posix.basename(rel));
126
+ if (byName)
127
+ hit = stricter(hit, { rule: byName, mode: CAGE_RULE_MODES[byName], overridden: false });
128
+ for (const g of plan.globs) {
129
+ if (g.re.test(rel))
130
+ hit = stricter(hit, { rule: "cage_protect", mode: g.mode, overridden: false });
131
+ }
132
+ return applyCageOverride(plan, rel, hit, opts.overrides !== false);
133
+ }
134
+ /** Downgrade a revert rule to report when the path is overridden; harness rules never are. */
135
+ export function applyCageOverride(plan, rel, hit, enabled = true) {
136
+ if (!enabled || !hit || hit.mode !== "revert" || NON_OVERRIDABLE_RULES.has(hit.rule))
137
+ return hit;
138
+ return isOverridden(plan, rel) ? { ...hit, mode: "report", overridden: true } : hit;
139
+ }
140
+ function overrideError(message) {
141
+ return new GantryUserError("GXT_CAGE_OVERRIDE_INVALID", `cage: --allow-override ${message}`, undefined, 2);
142
+ }
143
+ function overlaps(a, b) {
144
+ return underPath(a, b) || underPath(b, a);
145
+ }
146
+ /** Reject overrides that touch harness rules or that match no revert target; returns them normalized. */
147
+ function validateOverrides(plan, raw) {
148
+ const out = new Set();
149
+ for (const r of raw) {
150
+ const o = normalizeCageRelPath(r);
151
+ if (!o)
152
+ throw overrideError(`${r}: expected a root-relative path without ".." or a leading "/"`);
153
+ const harness = plan.targets.find((t) => {
154
+ const base = targetRel(plan, t);
155
+ return NON_OVERRIDABLE_RULES.has(t.rule) && base !== null && overlaps(o, base);
156
+ });
157
+ if (harness)
158
+ throw overrideError(`${o}: ${harness.rule} rules cannot be overridden`);
159
+ const direct = classifyCagePath(plan, o, { overrides: false })?.mode === "revert";
160
+ const parent = plan.targets.some((t) => {
161
+ const base = targetRel(plan, t);
162
+ return t.mode === "revert" && base !== null && underPath(base, o);
163
+ });
164
+ if (!direct && !parent)
165
+ throw overrideError(`${o}: matches no protected revert target`);
166
+ out.add(o);
167
+ }
168
+ return [...out].sort();
169
+ }
170
+ /** Report mode on a path a built-in rule already reverts would read as a relaxation; refuse it. */
171
+ function assertNoBuiltinDowngrade(plan, value) {
172
+ const hit = classifyCagePath(plan, value, { overrides: false });
173
+ if (hit && hit.mode === "revert" && cageRuleSource(hit.rule) === "builtin") {
174
+ throw new GantryUserError("GXT_CAGE_CONFIG_INVALID", `cage: ${CAGE_CONFIG_FILE}: mode: report on ${value} would weaken the built-in ${hit.rule} rule`, "Relax a built-in rule for one run with --allow-override <path>.", 2);
175
+ }
176
+ }
177
+ function addConfigTargets(plan, root) {
178
+ const config = loadCageConfig(root);
179
+ for (const e of config.entries) {
180
+ if (e.kind === "path" && e.mode === "report")
181
+ assertNoBuiltinDowngrade(plan, e.value);
182
+ if (e.kind === "path") {
183
+ plan.targets.push({ abs: rootJoin(root, e.value), rule: "cage_protect", mode: e.mode, source: "cage_yaml" });
184
+ }
185
+ else {
186
+ plan.globs.push({ pattern: e.value, re: cageGlobToRegExp(e.value), mode: e.mode, source: "cage_yaml" });
187
+ }
188
+ }
189
+ plan.config = {
190
+ present: config.present,
191
+ entries: config.entries.length,
192
+ committed: config.present ? cageConfigCommitted(root) : null,
193
+ };
194
+ return config.entries.length;
195
+ }
196
+ function builtinTarget(abs, rule) {
197
+ return { abs, rule, mode: CAGE_RULE_MODES[rule], source: cageRuleSource(rule) };
198
+ }
199
+ /**
200
+ * Resolve the session's protected set. An invalid manifest, `.cage.yaml` or override throws, so cage
201
+ * fails closed before the wrapped command runs.
202
+ */
203
+ export function buildCagePlan(root, opts = {}) {
86
204
  const zones = manifestZoneTargets(root);
87
- const targets = [
88
- ...CI_CONFIG_PATHS.map((rel) => ({ abs: rootJoin(root, rel), rule: "ci_config" })),
89
- ...gitControlTargets(root).map((abs) => ({ abs, rule: "git_control" })),
90
- ...zones.map((abs) => ({ abs, rule: "manifest_forbidden_zone" })),
91
- ];
92
- return { root, targets, manifestZoneCount: zones.length };
205
+ const plan = {
206
+ root,
207
+ targets: [
208
+ ...CI_CONFIG_PATHS.map((rel) => builtinTarget(rootJoin(root, rel), "ci_config")),
209
+ ...gitControlTargets(root).map((abs) => builtinTarget(abs, "git_control")),
210
+ // Always protected, present or not: an in-session edit is restored and a new file is removed.
211
+ builtinTarget(rootJoin(root, CAGE_CONFIG_FILE), "cage_config"),
212
+ ...zones.map((abs) => builtinTarget(abs, "manifest_forbidden_zone")),
213
+ ],
214
+ globs: [],
215
+ overrides: [],
216
+ manifestZoneCount: zones.length,
217
+ config: { present: false, entries: 0, committed: null },
218
+ };
219
+ addConfigTargets(plan, root);
220
+ plan.overrides = validateOverrides(plan, opts.overrides ?? []);
221
+ return plan;
222
+ }
223
+ /** JSON form for the session push guard, so it checks the exact plan the session started with. */
224
+ export function serializeCagePlan(plan) {
225
+ const out = { ...plan, globs: plan.globs.map((g) => ({ pattern: g.pattern, mode: g.mode, source: g.source })) };
226
+ return JSON.stringify(out);
227
+ }
228
+ export function parseSerializedCagePlan(json) {
229
+ const p = JSON.parse(json);
230
+ return { ...p, globs: p.globs.map((g) => ({ ...g, re: cageGlobToRegExp(g.pattern) })) };
93
231
  }
94
232
  //# sourceMappingURL=cage-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cage-rules.js","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cage-rules.js","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-rules.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,32 @@ export interface CageRunOptions {
10
10
  reportOnly?: boolean;
11
11
  maxFileBytes?: number;
12
12
  maxTotalBytes?: number;
13
+ /** Live restore while the command runs (default true). */
14
+ watch?: boolean;
15
+ watchIntervalMs?: number;
16
+ /** Session pre-push guard for git run by the caged command (default true inside a git work tree). */
17
+ pushGuard?: boolean;
18
+ /** Root-relative paths whose revert rules are downgraded to report for this run (`--allow-override`). */
19
+ allowOverride?: readonly string[];
20
+ /** Baseline caps; defaults {@link CAGE_MAX_TARGETS} and {@link CAGE_MAX_SCAN_BYTES}. */
21
+ maxTargets?: number;
22
+ maxScanBytes?: number;
23
+ /** Called once before the command starts, e.g. to print where the session log is. */
24
+ onStart?: (info: {
25
+ sessionLog: string | null;
26
+ protectedFiles: number;
27
+ watch: boolean;
28
+ overrides: string[];
29
+ configCommitted: boolean | null;
30
+ }) => void;
31
+ bell?: () => void;
13
32
  }
14
33
  /** Zero-config root: the enclosing git work tree when there is one, otherwise the directory itself. */
15
34
  export declare function resolveCageRoot(cwd: string): string;
16
35
  /**
17
- * Snapshot the protected set, run the command, diff, and revert protected changes.
18
- * Bytes stay in memory only; nothing is written outside the restored paths.
36
+ * Snapshot the protected set, run the command (restoring protected changes live unless `watch: false`),
37
+ * diff once more at exit, and restore what is left. Bytes stay in memory; the session log and the
38
+ * temporary hooks dir live in the OS temp dir, never in the repository.
19
39
  */
20
40
  export declare function runCage(opts: CageRunOptions): Promise<CageReport>;
21
41
  //# sourceMappingURL=cage-run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cage-run.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMpE,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,QAAkB,CAAC;AAC3D,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BvE"}
1
+ {"version":3,"file":"cage-run.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/cage/cage-run.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAsBpE,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,QAAkB,CAAC;AAC3D,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yGAAyG;IACzG,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;KACjC,KAAK,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAkFD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAkCvE"}