audit-tools 0.30.0 → 0.30.2

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 (141) hide show
  1. package/dist/audit/adapters/astGrep.d.ts +30 -0
  2. package/dist/audit/adapters/astGrep.d.ts.map +1 -0
  3. package/dist/audit/adapters/astGrep.js +46 -0
  4. package/dist/audit/adapters/astGrep.js.map +1 -0
  5. package/dist/audit/adapters/codeql.d.ts +47 -0
  6. package/dist/audit/adapters/codeql.d.ts.map +1 -0
  7. package/dist/audit/adapters/codeql.js +52 -0
  8. package/dist/audit/adapters/codeql.js.map +1 -0
  9. package/dist/audit/adapters/normalizeExternal.d.ts +24 -1
  10. package/dist/audit/adapters/normalizeExternal.d.ts.map +1 -1
  11. package/dist/audit/adapters/normalizeExternal.js +50 -0
  12. package/dist/audit/adapters/normalizeExternal.js.map +1 -1
  13. package/dist/audit/adapters/semgrep.d.ts +34 -15
  14. package/dist/audit/adapters/semgrep.d.ts.map +1 -1
  15. package/dist/audit/adapters/semgrep.js +54 -1
  16. package/dist/audit/adapters/semgrep.js.map +1 -1
  17. package/dist/audit/cli/mergeAndIngestCommand.d.ts +29 -1
  18. package/dist/audit/cli/mergeAndIngestCommand.d.ts.map +1 -1
  19. package/dist/audit/cli/mergeAndIngestCommand.js +71 -5
  20. package/dist/audit/cli/mergeAndIngestCommand.js.map +1 -1
  21. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  22. package/dist/audit/cli/nextStepHelpers.js +7 -6
  23. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  24. package/dist/audit/cli/resynthesizeCommand.d.ts.map +1 -1
  25. package/dist/audit/cli/resynthesizeCommand.js +3 -3
  26. package/dist/audit/cli/resynthesizeCommand.js.map +1 -1
  27. package/dist/audit/cli/submitPacketCommand.d.ts.map +1 -1
  28. package/dist/audit/cli/submitPacketCommand.js +6 -1
  29. package/dist/audit/cli/submitPacketCommand.js.map +1 -1
  30. package/dist/audit/contracts/workerSchemas.d.ts +13 -13
  31. package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
  32. package/dist/audit/contracts/workerSchemas.js +1 -1
  33. package/dist/audit/contracts/workerSchemas.js.map +1 -1
  34. package/dist/audit/contracts/wrapperResponse.d.ts +7 -0
  35. package/dist/audit/contracts/wrapperResponse.d.ts.map +1 -1
  36. package/dist/audit/contracts/wrapperResponse.js +1 -0
  37. package/dist/audit/contracts/wrapperResponse.js.map +1 -1
  38. package/dist/audit/extractors/graph.d.ts.map +1 -1
  39. package/dist/audit/extractors/graph.js +47 -0
  40. package/dist/audit/extractors/graph.js.map +1 -1
  41. package/dist/audit/io/artifacts.d.ts +2 -2
  42. package/dist/audit/io/artifacts.d.ts.map +1 -1
  43. package/dist/audit/io/artifacts.js +14 -11
  44. package/dist/audit/io/artifacts.js.map +1 -1
  45. package/dist/audit/orchestrator/designReviewPrompt.d.ts +17 -0
  46. package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
  47. package/dist/audit/orchestrator/designReviewPrompt.js +26 -0
  48. package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
  49. package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
  50. package/dist/audit/orchestrator/executorRunners.js +20 -0
  51. package/dist/audit/orchestrator/executorRunners.js.map +1 -1
  52. package/dist/audit/orchestrator/executors.d.ts.map +1 -1
  53. package/dist/audit/orchestrator/executors.js +5 -0
  54. package/dist/audit/orchestrator/executors.js.map +1 -1
  55. package/dist/audit/orchestrator/nextStep.d.ts +37 -0
  56. package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
  57. package/dist/audit/orchestrator/nextStep.js +45 -0
  58. package/dist/audit/orchestrator/nextStep.js.map +1 -1
  59. package/dist/audit/supervisor/operatorHandoff.d.ts +12 -0
  60. package/dist/audit/supervisor/operatorHandoff.d.ts.map +1 -1
  61. package/dist/audit/supervisor/operatorHandoff.js +3 -1
  62. package/dist/audit/supervisor/operatorHandoff.js.map +1 -1
  63. package/dist/audit/types/externalAnalyzer.d.ts +68 -2
  64. package/dist/audit/types/externalAnalyzer.d.ts.map +1 -1
  65. package/dist/audit/types/externalAnalyzer.js +23 -0
  66. package/dist/audit/types/externalAnalyzer.js.map +1 -1
  67. package/dist/audit/types/reviewPlanning.d.ts +14 -14
  68. package/dist/audit/validation/auditResults.d.ts +17 -0
  69. package/dist/audit/validation/auditResults.d.ts.map +1 -1
  70. package/dist/audit/validation/auditResults.js +39 -0
  71. package/dist/audit/validation/auditResults.js.map +1 -1
  72. package/dist/audit/validation/sessionConfig.d.ts.map +1 -1
  73. package/dist/audit/validation/sessionConfig.js +4 -0
  74. package/dist/audit/validation/sessionConfig.js.map +1 -1
  75. package/dist/remediate/review/autonomousGate.d.ts +74 -0
  76. package/dist/remediate/review/autonomousGate.d.ts.map +1 -0
  77. package/dist/remediate/review/autonomousGate.js +179 -0
  78. package/dist/remediate/review/autonomousGate.js.map +1 -0
  79. package/dist/remediate/steps/contractPipeline.d.ts +8 -0
  80. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  81. package/dist/remediate/steps/contractPipeline.js +1 -0
  82. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  83. package/dist/remediate/steps/contractPipelinePrompts.d.ts +10 -0
  84. package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
  85. package/dist/remediate/steps/contractPipelinePrompts.js +32 -1
  86. package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
  87. package/dist/remediate/steps/nextStep.d.ts +34 -0
  88. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  89. package/dist/remediate/steps/nextStep.js +144 -8
  90. package/dist/remediate/steps/nextStep.js.map +1 -1
  91. package/dist/shared/index.d.ts +11 -2
  92. package/dist/shared/index.d.ts.map +1 -1
  93. package/dist/shared/index.js +6 -2
  94. package/dist/shared/index.js.map +1 -1
  95. package/dist/shared/io/auditToolsPaths.d.ts +35 -0
  96. package/dist/shared/io/auditToolsPaths.d.ts.map +1 -1
  97. package/dist/shared/io/auditToolsPaths.js +46 -1
  98. package/dist/shared/io/auditToolsPaths.js.map +1 -1
  99. package/dist/shared/io/frictionCapture.d.ts +83 -0
  100. package/dist/shared/io/frictionCapture.d.ts.map +1 -0
  101. package/dist/shared/io/frictionCapture.js +79 -0
  102. package/dist/shared/io/frictionCapture.js.map +1 -0
  103. package/dist/shared/io/gitignoreArtifacts.d.ts +94 -0
  104. package/dist/shared/io/gitignoreArtifacts.d.ts.map +1 -0
  105. package/dist/shared/io/gitignoreArtifacts.js +147 -0
  106. package/dist/shared/io/gitignoreArtifacts.js.map +1 -0
  107. package/dist/shared/quota/antigravityQuotaSource.d.ts.map +1 -1
  108. package/dist/shared/quota/antigravityQuotaSource.js +2 -0
  109. package/dist/shared/quota/antigravityQuotaSource.js.map +1 -1
  110. package/dist/shared/quota/claudeOAuthQuotaSource.d.ts +35 -2
  111. package/dist/shared/quota/claudeOAuthQuotaSource.d.ts.map +1 -1
  112. package/dist/shared/quota/claudeOAuthQuotaSource.js +157 -17
  113. package/dist/shared/quota/claudeOAuthQuotaSource.js.map +1 -1
  114. package/dist/shared/quota/codexQuotaSource.d.ts.map +1 -1
  115. package/dist/shared/quota/codexQuotaSource.js +2 -0
  116. package/dist/shared/quota/codexQuotaSource.js.map +1 -1
  117. package/dist/shared/quota/copilotQuotaSource.d.ts.map +1 -1
  118. package/dist/shared/quota/copilotQuotaSource.js +2 -0
  119. package/dist/shared/quota/copilotQuotaSource.js.map +1 -1
  120. package/dist/shared/quota/errorParsing.d.ts +19 -0
  121. package/dist/shared/quota/errorParsing.d.ts.map +1 -1
  122. package/dist/shared/quota/errorParsing.js +14 -1
  123. package/dist/shared/quota/errorParsing.js.map +1 -1
  124. package/dist/shared/quota/hostSessionQuotaSource.d.ts +138 -0
  125. package/dist/shared/quota/hostSessionQuotaSource.d.ts.map +1 -0
  126. package/dist/shared/quota/hostSessionQuotaSource.js +213 -0
  127. package/dist/shared/quota/hostSessionQuotaSource.js.map +1 -0
  128. package/dist/shared/quota/httpQuotaSource.d.ts +7 -3
  129. package/dist/shared/quota/httpQuotaSource.d.ts.map +1 -1
  130. package/dist/shared/quota/httpQuotaSource.js.map +1 -1
  131. package/dist/shared/reporting/auditDeliverable.d.ts +36 -0
  132. package/dist/shared/reporting/auditDeliverable.d.ts.map +1 -0
  133. package/dist/shared/reporting/auditDeliverable.js +85 -0
  134. package/dist/shared/reporting/auditDeliverable.js.map +1 -0
  135. package/dist/shared/types/sessionConfig.d.ts +13 -0
  136. package/dist/shared/types/sessionConfig.d.ts.map +1 -1
  137. package/package.json +1 -1
  138. package/schemas/audit_result.schema.json +2 -2
  139. package/schemas/audit_results.schema.json +2 -2
  140. package/schemas/finding.schema.json +2 -2
  141. package/scripts/postinstall.mjs +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostSessionQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/hostSessionQuotaSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,8BAA8B,iBAAiB,CAAC;AAE7D,kGAAkG;AAClG,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAOnD,2EAA2E;AAC3E,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D;AA2BD;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,WAAW;IACxD,QAAQ,CAAC,IAAI,kBAAkC;IAE/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAE3E,8DAA8D;IAC9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,yDAAyD;IACzD,OAAO,CAAC,UAAU,CAAS;IAC3B,kFAAkF;IAClF,OAAO,CAAC,OAAO,CAAkC;IACjD,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,OAAO,EAAE,6BAA6B;IAWlD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAYhB,4EAA4E;IAC5E,aAAa,IAAI,MAAM,GAAG,IAAI;IAM9B,mFAAmF;IACnF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;;;;;OASG;IACH,WAAW,CACT,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,qBAAqB;IAmElB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIrF;;;;OAIG;IACG,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAkBtE"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Host-session fixed-window QuotaSource.
3
+ *
4
+ * Models a host *account* usage cap (e.g. Claude Code's "You've hit your session
5
+ * limit · resets 3:30pm") as a fixed window that opens again at a stated reset.
6
+ * Unlike the sliding-window learned source, the host session limit is a hard
7
+ * wall the operator account hits — there is no per-request budget to learn, only
8
+ * a binary "open / paused-until-reset" state plus a throttle band as the window
9
+ * fills.
10
+ *
11
+ * Design contract (CP-BLOCK-IMPL-host-session-quota):
12
+ *
13
+ * - **Channel isolation (CE-003).** A session limit is recorded ONLY from the
14
+ * worker ERROR / STATUS channel via {@link detectRateLimitFromChannel}. The
15
+ * consumed AuditResult content is never inspected, so a healthy result that
16
+ * merely quotes a limit string cannot pause the run.
17
+ * - **Throttle before the wall.** The snapshot exposes `remaining_pct` so the
18
+ * scheduler's existing LOW / CRITICAL bands throttle the wave BEFORE the
19
+ * account is fully exhausted, rather than only reacting after a hard 429.
20
+ * - **Auto-pause / auto-resume.** Recording a limit sets `cooldown_until` to the
21
+ * parsed reset (next-future-occurrence for clock times; DEFAULT_COOLDOWN_MS
22
+ * when unparseable). Once an injected `now` passes the reset the source
23
+ * auto-resumes (snapshot reports the window open again).
24
+ * - **Bounded re-limit escalation (no livelock).** Re-queuing the same packet
25
+ * non-consumingly is fine, but an unresettable / clock-skewed limit that keeps
26
+ * re-tripping for the SAME packet must not loop forever. After
27
+ * `maxConsecutiveReLimits` cycles (or a cumulative wall) the source ESCALATES
28
+ * to a terminal hard failure surfaced to the operator (structured stderr +
29
+ * run-ledger), and the caller stops re-queuing that packet.
30
+ * - **Own-provider self-monitoring only.** The source keys off the
31
+ * provider/model it owns; it never reasons about other providers' quota and
32
+ * never overwrites learned (sliding-window) limits.
33
+ *
34
+ * This module owns only the host-session window + escalation bookkeeping; the
35
+ * non-consuming re-queue itself is performed by the rolling engine
36
+ * ({@link dropProvider}), which moves in-flight packets back to `pending_tokens`
37
+ * without ever marking them consumed.
38
+ */
39
+ import { DEFAULT_COOLDOWN_MS, detectRateLimitFromChannel, } from "./errorParsing.js";
40
+ export const HOST_SESSION_QUOTA_SOURCE_NAME = "host_session";
41
+ /** Default number of consecutive non-consuming re-limits of the SAME packet before escalating. */
42
+ export const DEFAULT_MAX_CONSECUTIVE_RE_LIMITS = 3;
43
+ /** `remaining_pct` reported while the window is open and no limit has been seen. */
44
+ const WINDOW_OPEN_REMAINING_PCT = 1;
45
+ /** `remaining_pct` reported while the window is paused (limit active, before reset). */
46
+ const WINDOW_PAUSED_REMAINING_PCT = 0;
47
+ function emitEscalationToStderr(escalation) {
48
+ try {
49
+ process.stderr.write(JSON.stringify({
50
+ ts: escalation.escalated_at,
51
+ kind: "host_session_quota_escalation",
52
+ packet_id: escalation.packet_id,
53
+ consecutive_re_limits: escalation.consecutive_re_limits,
54
+ cumulative_wall_ms: escalation.cumulative_wall_ms,
55
+ reason: escalation.reason,
56
+ }) + "\n");
57
+ }
58
+ catch {
59
+ // Observability must never abort a run.
60
+ }
61
+ }
62
+ /**
63
+ * Fixed-window host-session QuotaSource. Stateful: it remembers the active
64
+ * cooldown and the per-packet re-limit count so the bounded-escalation guard can
65
+ * fire. Conforms to the shared {@link QuotaSource} contract.
66
+ */
67
+ export class HostSessionQuotaSource {
68
+ name = HOST_SESSION_QUOTA_SOURCE_NAME;
69
+ providerModelKey;
70
+ now;
71
+ maxConsecutiveReLimits;
72
+ maxCumulativeWallMs;
73
+ defaultCooldownMs;
74
+ onEscalation;
75
+ /** Epoch ms the window is paused until, or null when open. */
76
+ cooldownUntilMs = null;
77
+ /** ISO captured-at of the most recent state mutation. */
78
+ capturedAt;
79
+ /** Per-packet re-limit tracker (only the currently-relimiting packet matters). */
80
+ tracker = null;
81
+ /** Packets already escalated — a non-consuming re-queue must never re-arm them. */
82
+ escalated = new Set();
83
+ constructor(options) {
84
+ this.providerModelKey = options.providerModelKey;
85
+ this.now = options.now ?? Date.now;
86
+ this.maxConsecutiveReLimits =
87
+ options.maxConsecutiveReLimits ?? DEFAULT_MAX_CONSECUTIVE_RE_LIMITS;
88
+ this.maxCumulativeWallMs = options.maxCumulativeWallMs ?? null;
89
+ this.defaultCooldownMs = options.defaultCooldownMs ?? DEFAULT_COOLDOWN_MS;
90
+ this.onEscalation = options.onEscalation ?? emitEscalationToStderr;
91
+ this.capturedAt = new Date(this.now()).toISOString();
92
+ }
93
+ /**
94
+ * True once an injected `now` has passed the recorded reset: the fixed window
95
+ * has reopened and the source auto-resumes.
96
+ */
97
+ isPaused() {
98
+ if (this.cooldownUntilMs == null)
99
+ return false;
100
+ if (this.now() >= this.cooldownUntilMs) {
101
+ // Auto-resume: window reopened, clear the pause + the re-limit tracker so
102
+ // the next limit (a genuinely new exhaustion) starts a fresh count.
103
+ this.cooldownUntilMs = null;
104
+ this.tracker = null;
105
+ return false;
106
+ }
107
+ return true;
108
+ }
109
+ /** ISO cooldown the window is currently paused until, or null when open. */
110
+ cooldownUntil() {
111
+ return this.isPaused() && this.cooldownUntilMs != null
112
+ ? new Date(this.cooldownUntilMs).toISOString()
113
+ : null;
114
+ }
115
+ /** True when the given packet has already been escalated to a terminal failure. */
116
+ isEscalated(packetId) {
117
+ return this.escalated.has(packetId);
118
+ }
119
+ /**
120
+ * Record a worker-output line for a packet. CHANNEL-ISOLATED: a session limit
121
+ * is only ever recorded from the ERROR / STATUS channel; `result` text is
122
+ * ignored entirely (CE-003), so a healthy result quoting a limit string is a
123
+ * no-op (`recorded: false`, no pause).
124
+ *
125
+ * On a real limit it sets `cooldown_until` to the parsed reset and, if this is
126
+ * the same packet re-limiting against an unchanged window, increments the
127
+ * bounded counter — escalating once the bound is crossed.
128
+ */
129
+ recordLimit(channel, text, packetId) {
130
+ const nowMs = this.now();
131
+ const detection = detectRateLimitFromChannel(channel, text, nowMs);
132
+ if (!detection.isRateLimited) {
133
+ return { recorded: false, cooldown_until: null, escalation: null };
134
+ }
135
+ const cooldownMs = detection.retryAfterMs != null && detection.retryAfterMs > 0
136
+ ? detection.retryAfterMs
137
+ : this.defaultCooldownMs;
138
+ const resetMs = nowMs + cooldownMs;
139
+ // Track consecutive re-limits of the SAME packet. A re-limit is "the same"
140
+ // when the same packet trips again before the window it last set has
141
+ // reopened — i.e. an unresettable / clock-skewed wall, not normal progress.
142
+ if (this.tracker && this.tracker.packet_id === packetId) {
143
+ this.tracker.consecutive_re_limits += 1;
144
+ this.tracker.cumulative_wall_ms += cooldownMs;
145
+ this.tracker.last_reset_ms = resetMs;
146
+ }
147
+ else {
148
+ this.tracker = {
149
+ packet_id: packetId,
150
+ consecutive_re_limits: 1,
151
+ cumulative_wall_ms: cooldownMs,
152
+ last_reset_ms: resetMs,
153
+ };
154
+ }
155
+ this.cooldownUntilMs = resetMs;
156
+ this.capturedAt = new Date(nowMs).toISOString();
157
+ const overCycleBound = this.tracker.consecutive_re_limits > this.maxConsecutiveReLimits;
158
+ const overWallBound = this.maxCumulativeWallMs != null &&
159
+ this.tracker.cumulative_wall_ms > this.maxCumulativeWallMs;
160
+ if (overCycleBound || overWallBound) {
161
+ const escalation = {
162
+ packet_id: packetId,
163
+ consecutive_re_limits: this.tracker.consecutive_re_limits,
164
+ cumulative_wall_ms: this.tracker.cumulative_wall_ms,
165
+ reason: overCycleBound
166
+ ? `Host session limit re-tripped ${this.tracker.consecutive_re_limits} times for the same packet ` +
167
+ `(bound ${this.maxConsecutiveReLimits}); the reset is not clearing — escalating to operator instead of livelocking.`
168
+ : `Host session limit held the same packet paused for ${this.tracker.cumulative_wall_ms}ms cumulative ` +
169
+ `(bound ${this.maxCumulativeWallMs}ms); escalating to operator instead of livelocking.`,
170
+ escalated_at: new Date(nowMs).toISOString(),
171
+ };
172
+ this.escalated.add(packetId);
173
+ this.tracker = null;
174
+ this.onEscalation(escalation);
175
+ return {
176
+ recorded: true,
177
+ cooldown_until: new Date(resetMs).toISOString(),
178
+ escalation,
179
+ };
180
+ }
181
+ return {
182
+ recorded: true,
183
+ cooldown_until: new Date(resetMs).toISOString(),
184
+ escalation: null,
185
+ };
186
+ }
187
+ async queryCurrentUsage(providerModelKey) {
188
+ return (await this.probeUsage(providerModelKey)).snapshot;
189
+ }
190
+ /**
191
+ * Own-provider self-monitoring: only answers for the key it owns. For any other
192
+ * key it is `not_applicable` (no signal expected → never a degrade), so it
193
+ * composes with the sliding-window / learned sources without overwriting them.
194
+ */
195
+ async probeUsage(providerModelKey) {
196
+ if (providerModelKey !== this.providerModelKey) {
197
+ return { snapshot: null, status: "not_applicable" };
198
+ }
199
+ const paused = this.isPaused();
200
+ const snapshot = {
201
+ remaining_pct: paused ? WINDOW_PAUSED_REMAINING_PCT : WINDOW_OPEN_REMAINING_PCT,
202
+ reset_at: paused && this.cooldownUntilMs != null
203
+ ? new Date(this.cooldownUntilMs).toISOString()
204
+ : null,
205
+ requests_remaining: null,
206
+ tokens_remaining: null,
207
+ captured_at: this.capturedAt,
208
+ source: this.name,
209
+ };
210
+ return { snapshot, status: "ok" };
211
+ }
212
+ }
213
+ //# sourceMappingURL=hostSessionQuotaSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostSessionQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/hostSessionQuotaSource.ts"],"names":[],"mappings":"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"}
@@ -14,9 +14,13 @@ import type { QuotaProbeResult, QuotaSource, QuotaUsageSnapshot } from "./quotaS
14
14
  * `fetchSnapshot`, yields `null` so the {@link CompositeQuotaSource} falls
15
15
  * through to the next source.
16
16
  *
17
- * Token refresh is intentionally NEVER performed by these sources: the host CLI
18
- * owns the rotating credential chain, and rewriting it from a read-only quota
19
- * probe risks breaking the user's auth degrade on expiry/401 instead.
17
+ * Token refresh is the subclass's call, not this base's: most sources degrade on
18
+ * expiry/401 (the host owns their credential). The Claude source is the
19
+ * exception it refreshes its CLI credential and persists the rotated token
20
+ * under a file lock (double-checked), because that file is otherwise abandoned
21
+ * once the access token expires. Any source that refreshes MUST do so atomically
22
+ * under a lock so a rotated refresh token is never lost — see
23
+ * {@link ClaudeOAuthQuotaSource}.
20
24
  */
21
25
  export interface FetchResponseLike {
22
26
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"httpQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/httpQuotaSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE1F;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B;AACD,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACxE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,8BAAsB,mBAAoB,YAAW,WAAW;IAC9D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;gBAE/C,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM;IAQrE,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAE7D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAE/B,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIrF;;;;;;OAMG;IACG,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4BrE,wDAAwD;IACxD,SAAS,CAAC,YAAY,IAAI,iBAAiB;IAI3C,SAAS,CAAC,iBAAiB,IAAI,OAAO;CAKvC;AAED,+FAA+F;AAC/F,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAazB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAM7F;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,mGAAmG;AACnG,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI1D;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
1
+ {"version":3,"file":"httpQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/httpQuotaSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE1F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B;AACD,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACxE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,8BAAsB,mBAAoB,YAAW,WAAW;IAC9D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;gBAE/C,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM;IAQrE,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAE7D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAE/B,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIrF;;;;;;OAMG;IACG,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4BrE,wDAAwD;IACxD,SAAS,CAAC,YAAY,IAAI,iBAAiB;IAI3C,SAAS,CAAC,iBAAiB,IAAI,OAAO;CAKvC;AAED,+FAA+F;AAC/F,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAazB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAM7F;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,mGAAmG;AACnG,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI1D;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"httpQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/httpQuotaSource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"httpQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/httpQuotaSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { AuditFindingsReport, Finding } from "../types/finding.js";
2
+ /**
3
+ * Build the canonical `audit-findings.json` machine contract over `findings`.
4
+ * The summary is derived deterministically; no work-blocks are emitted (the
5
+ * deliverable is a flat, re-consumable finding set). Stamped with the same
6
+ * `contract_version` the auditor emits, so `validateAuditFindingsReport` accepts
7
+ * it and the remediator's structured fast-path consumes it losslessly.
8
+ */
9
+ export declare function buildAuditFindingsDeliverable(findings: readonly Finding[]): AuditFindingsReport;
10
+ /**
11
+ * Render the `audit-report.md` human deliverable for `findings` using the ONE
12
+ * shared finding renderer (parity with the auditor's report). `title` and
13
+ * `intro` let the caller frame the deliverable (e.g. "leftovers from an
14
+ * autonomous run").
15
+ */
16
+ export declare function renderAuditDeliverableMarkdown(findings: readonly Finding[], options?: {
17
+ title?: string;
18
+ intro?: string;
19
+ }): string;
20
+ export interface AuditDeliverablePair {
21
+ /** The canonical machine contract (audit-findings.json content). */
22
+ findings_report: AuditFindingsReport;
23
+ /** The human render (audit-report.md content). */
24
+ report_markdown: string;
25
+ }
26
+ /**
27
+ * Build BOTH halves of the re-consumable audit deliverable pair at once. The
28
+ * JSON is the source of truth; the markdown is its render. The caller writes
29
+ * `findings_report` to `audit-findings.json` and `report_markdown` to
30
+ * `audit-report.md`.
31
+ */
32
+ export declare function buildAuditDeliverablePair(findings: readonly Finding[], options?: {
33
+ title?: string;
34
+ intro?: string;
35
+ }): AuditDeliverablePair;
36
+ //# sourceMappingURL=auditDeliverable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditDeliverable.d.ts","sourceRoot":"","sources":["../../../src/shared/reporting/auditDeliverable.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,mBAAmB,EAEnB,OAAO,EAER,MAAM,qBAAqB,CAAC;AAmB7B;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,mBAAmB,CAgBrB;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,MAAM,CAcR;AAED,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,eAAe,EAAE,mBAAmB,CAAC;IACrC,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,oBAAoB,CAKtB"}
@@ -0,0 +1,85 @@
1
+ // Shared audit-deliverable emitter: build the canonical `audit-findings.json`
2
+ // machine contract + its `audit-report.md` human render from a Finding[] set.
3
+ //
4
+ // Single-sourced here (in `audit-tools/shared`) so BOTH halves of the pipeline
5
+ // emit an identical, re-consumable pair. The autonomous remediator uses it to
6
+ // re-emit the findings it left LIVE (never auto-fixed, never durably rejected)
7
+ // as a standard deliverable pair that round-trips straight back through the
8
+ // remediator's `defaultInputCandidates` (`audit-findings.json` preferred over
9
+ // `audit-report.md`) on the next nightly run — no special leftover format, no
10
+ // durable rejection state.
11
+ import { AUDIT_FINDINGS_CONTRACT_VERSION } from "../validation/findingsReport.js";
12
+ import { renderFindingBlockLines } from "./findingDisplay.js";
13
+ const SEVERITY_KEYS = ["critical", "high", "medium", "low", "info"];
14
+ function severityBreakdown(findings) {
15
+ const out = {};
16
+ for (const key of SEVERITY_KEYS)
17
+ out[key] = 0;
18
+ for (const f of findings)
19
+ out[f.severity] = (out[f.severity] ?? 0) + 1;
20
+ return out;
21
+ }
22
+ function lensBreakdown(findings) {
23
+ const out = {};
24
+ for (const f of findings)
25
+ out[f.lens] = (out[f.lens] ?? 0) + 1;
26
+ return out;
27
+ }
28
+ /**
29
+ * Build the canonical `audit-findings.json` machine contract over `findings`.
30
+ * The summary is derived deterministically; no work-blocks are emitted (the
31
+ * deliverable is a flat, re-consumable finding set). Stamped with the same
32
+ * `contract_version` the auditor emits, so `validateAuditFindingsReport` accepts
33
+ * it and the remediator's structured fast-path consumes it losslessly.
34
+ */
35
+ export function buildAuditFindingsDeliverable(findings) {
36
+ const summary = {
37
+ finding_count: findings.length,
38
+ work_block_count: 0,
39
+ severity_breakdown: severityBreakdown(findings),
40
+ audited_file_count: 0,
41
+ excluded_file_count: 0,
42
+ runtime_validation_status_breakdown: {},
43
+ lens_breakdown: lensBreakdown(findings),
44
+ };
45
+ return {
46
+ contract_version: AUDIT_FINDINGS_CONTRACT_VERSION,
47
+ summary,
48
+ findings: [...findings],
49
+ work_blocks: [],
50
+ };
51
+ }
52
+ /**
53
+ * Render the `audit-report.md` human deliverable for `findings` using the ONE
54
+ * shared finding renderer (parity with the auditor's report). `title` and
55
+ * `intro` let the caller frame the deliverable (e.g. "leftovers from an
56
+ * autonomous run").
57
+ */
58
+ export function renderAuditDeliverableMarkdown(findings, options = {}) {
59
+ const lines = [`# ${options.title ?? "Audit Report"}`, ""];
60
+ if (options.intro) {
61
+ lines.push(options.intro, "");
62
+ }
63
+ if (findings.length === 0) {
64
+ lines.push("No findings.", "");
65
+ return lines.join("\n");
66
+ }
67
+ lines.push(`## Findings (${findings.length})`, "");
68
+ for (const finding of findings) {
69
+ lines.push(...renderFindingBlockLines(finding));
70
+ }
71
+ return lines.join("\n");
72
+ }
73
+ /**
74
+ * Build BOTH halves of the re-consumable audit deliverable pair at once. The
75
+ * JSON is the source of truth; the markdown is its render. The caller writes
76
+ * `findings_report` to `audit-findings.json` and `report_markdown` to
77
+ * `audit-report.md`.
78
+ */
79
+ export function buildAuditDeliverablePair(findings, options = {}) {
80
+ return {
81
+ findings_report: buildAuditFindingsDeliverable(findings),
82
+ report_markdown: renderAuditDeliverableMarkdown(findings, options),
83
+ };
84
+ }
85
+ //# sourceMappingURL=auditDeliverable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditDeliverable.js","sourceRoot":"","sources":["../../../src/shared/reporting/auditDeliverable.ts"],"names":[],"mappings":"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"}
@@ -318,6 +318,19 @@ export interface SessionConfig {
318
318
  timeout_ms?: number;
319
319
  ui_mode?: SessionUiMode;
320
320
  host_can_dispatch_subagents?: boolean;
321
+ /**
322
+ * Run unattended (nightly autonomous pipeline). Host-agnostic — ONE flag
323
+ * drives the whole path, with no cloud/local fork. When set, the
324
+ * review-approval gate does NOT halt for a human: it auto-approves only the
325
+ * findings whose ambiguity tier is "safe" AND whose change-kind is positively
326
+ * on the fail-closed non-destructiveness ALLOWLIST (additive / localized /
327
+ * reversible — see src/remediate/review/autonomousGate.ts). Every other
328
+ * finding is left LIVE and re-emitted as a re-consumable audit deliverable
329
+ * pair (audit-findings.json + audit-report.md); leftovers are NEVER durably
330
+ * rejected, so the next nightly run re-evaluates them fresh. Ambiguity-only:
331
+ * there is NO cost / severity / run-budget gate.
332
+ */
333
+ autonomous_mode?: boolean;
321
334
  subprocess_template?: SubprocessTemplateConfig;
322
335
  claude_code?: ClaudeCodeConfig;
323
336
  codex?: CodexConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"sessionConfig.d.ts","sourceRoot":"","sources":["../../../src/shared/types/sessionConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionConfig.d.ts","sourceRoot":"","sources":["../../../src/shared/types/sessionConfig.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.30.0",
3
+ "version": "0.30.2",
4
4
  "private": false,
5
5
  "description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",
6
6
  "type": "module",
@@ -100,7 +100,8 @@
100
100
  "operability",
101
101
  "config_deployment",
102
102
  "observability"
103
- ]
103
+ ],
104
+ "description": "Optional: when omitted, the tool defaults it from the enclosing AuditResult.lens before validation. Supply it only to override the result lens for a cross-lens finding."
104
105
  },
105
106
  "summary": {
106
107
  "type": "string"
@@ -306,7 +307,6 @@
306
307
  "category",
307
308
  "severity",
308
309
  "confidence",
309
- "lens",
310
310
  "summary",
311
311
  "affected_files",
312
312
  "evidence"
@@ -102,7 +102,8 @@
102
102
  "operability",
103
103
  "config_deployment",
104
104
  "observability"
105
- ]
105
+ ],
106
+ "description": "Optional: when omitted, the tool defaults it from the enclosing AuditResult.lens before validation. Supply it only to override the result lens for a cross-lens finding."
106
107
  },
107
108
  "summary": {
108
109
  "type": "string"
@@ -308,7 +309,6 @@
308
309
  "category",
309
310
  "severity",
310
311
  "confidence",
311
- "lens",
312
312
  "summary",
313
313
  "affected_files",
314
314
  "evidence"
@@ -46,7 +46,8 @@
46
46
  "operability",
47
47
  "config_deployment",
48
48
  "observability"
49
- ]
49
+ ],
50
+ "description": "Optional: when omitted, the tool defaults it from the enclosing AuditResult.lens before validation. Supply it only to override the result lens for a cross-lens finding."
50
51
  },
51
52
  "summary": {
52
53
  "type": "string"
@@ -252,7 +253,6 @@
252
253
  "category",
253
254
  "severity",
254
255
  "confidence",
255
- "lens",
256
256
  "summary",
257
257
  "affected_files",
258
258
  "evidence"
@@ -21,4 +21,68 @@ for (const script of ["./audit/postinstall.mjs", "./remediate/postinstall.mjs"])
21
21
  failed = true;
22
22
  }
23
23
  }
24
+
25
+ // Manage the consuming repo's .gitignore for the artifacts audit-tools emits
26
+ // (always-ignore build/install assets + friction sidecar; visibility-conditional
27
+ // ignore of deliverables + meta-audit reflections). This is best-effort and must
28
+ // NEVER fail the install: the helper degrades on any error, and we wrap the whole
29
+ // step so a missing shared dist (fresh `npm ci`) or a detection hiccup is a warn,
30
+ // not a non-zero exit.
31
+ await manageArtifactGitignore();
32
+
24
33
  process.exit(failed ? 1 : 0);
34
+
35
+ async function manageArtifactGitignore() {
36
+ try {
37
+ const shared = await import("audit-tools/shared");
38
+ if (typeof shared.ensureArtifactGitignore !== "function") {
39
+ return; // shared dist not built yet (fresh npm ci) — skip silently.
40
+ }
41
+
42
+ // The consuming repo root: npm sets INIT_CWD to the dir `npm install` ran in.
43
+ const repoRoot = process.env.INIT_CWD || process.cwd();
44
+
45
+ // Explicit operator override always wins. Accept private/public/track/ignore.
46
+ const override = resolveVisibilityOverride();
47
+
48
+ const result = shared.ensureArtifactGitignore({
49
+ repoRoot,
50
+ override,
51
+ runGh: runGhRepoVisibility,
52
+ });
53
+ if (result.changed) {
54
+ console.log(
55
+ `[audit-tools] postinstall: updated ${result.path} (repo visibility: ${result.visibility}).`,
56
+ );
57
+ }
58
+ } catch (err) {
59
+ console.warn(
60
+ `[audit-tools] postinstall: .gitignore management skipped (${err?.message ?? err}).`,
61
+ );
62
+ }
63
+ }
64
+
65
+ // Operator override via env: AUDIT_TOOLS_REPO_VISIBILITY=private|public (also
66
+ // accepts track=private / ignore=public). Anything else => no override.
67
+ function resolveVisibilityOverride() {
68
+ const raw = (process.env.AUDIT_TOOLS_REPO_VISIBILITY || "").trim().toLowerCase();
69
+ if (raw === "private" || raw === "track") return "private";
70
+ if (raw === "public" || raw === "ignore") return "public";
71
+ return null;
72
+ }
73
+
74
+ // Probe `gh repo view --json isPrivate`. Returns gh stdout, or null on any
75
+ // failure (gh missing, not a gh-known repo, non-zero exit). Never throws.
76
+ function runGhRepoVisibility(repoRoot) {
77
+ try {
78
+ const result = spawnSync("gh", ["repo", "view", "--json", "isPrivate"], {
79
+ cwd: repoRoot,
80
+ encoding: "utf8",
81
+ shell: process.platform === "win32",
82
+ });
83
+ if (result.error || (result.status ?? 0) !== 0) return null;
84
+ return typeof result.stdout === "string" ? result.stdout : null;
85
+ } catch {
86
+ return null;
87
+ }
88
+ }