@aragon-agent/cli 0.6.44 → 0.6.45

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 (236) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +69 -2
  3. package/dist/agent/controller.d.ts +69 -0
  4. package/dist/agent/controller.js +224 -11
  5. package/dist/agent/governance-view.d.ts +40 -0
  6. package/dist/agent/governance-view.js +40 -0
  7. package/dist/agent/governance-wiring.d.ts +162 -0
  8. package/dist/agent/governance-wiring.js +470 -0
  9. package/dist/agent/plan-prompt.d.ts +7 -0
  10. package/dist/agent/plan-prompt.js +2 -1
  11. package/dist/agent/reducer.d.ts +33 -1
  12. package/dist/agent/reducer.js +45 -9
  13. package/dist/agent/system-prompt.d.ts +19 -0
  14. package/dist/agent/system-prompt.js +9 -1
  15. package/dist/cli.js +45 -1
  16. package/dist/commands/builtins.js +10 -4
  17. package/dist/commands/governance-command.d.ts +35 -0
  18. package/dist/commands/governance-command.js +292 -0
  19. package/dist/commands/governance-runs-table.d.ts +40 -0
  20. package/dist/commands/governance-runs-table.js +130 -0
  21. package/dist/commands/registry.d.ts +12 -0
  22. package/dist/config/app-paths.d.ts +10 -0
  23. package/dist/config/app-paths.js +12 -0
  24. package/dist/config/cli-commands.d.ts +18 -0
  25. package/dist/config/cli-commands.js +47 -1
  26. package/dist/config/env.d.ts +2 -1
  27. package/dist/config/env.js +10 -1
  28. package/dist/config/governance-config.d.ts +125 -0
  29. package/dist/config/governance-config.js +164 -0
  30. package/dist/config/governance-launch.d.ts +71 -0
  31. package/dist/config/governance-launch.js +58 -0
  32. package/dist/config/load.d.ts +15 -0
  33. package/dist/config/load.js +26 -1
  34. package/dist/config/model-profile-store.d.ts +4 -2
  35. package/dist/config/schema.d.ts +22 -0
  36. package/dist/config/schema.js +6 -0
  37. package/dist/config/store.js +14 -1
  38. package/dist/config/ui-state.d.ts +11 -0
  39. package/dist/config/ui-state.js +11 -0
  40. package/dist/diagnostics/doctor.js +20 -0
  41. package/dist/governance/card-normalize.d.ts +24 -0
  42. package/dist/governance/card-normalize.js +76 -0
  43. package/dist/governance/copy.d.ts +109 -0
  44. package/dist/governance/copy.js +223 -0
  45. package/dist/governance/engine/aftermath.d.ts +49 -0
  46. package/dist/governance/engine/aftermath.js +134 -0
  47. package/dist/governance/engine/artifact-persist.d.ts +35 -0
  48. package/dist/governance/engine/artifact-persist.js +86 -0
  49. package/dist/governance/engine/budget.d.ts +52 -0
  50. package/dist/governance/engine/budget.js +112 -0
  51. package/dist/governance/engine/cards.d.ts +18 -0
  52. package/dist/governance/engine/cards.js +186 -0
  53. package/dist/governance/engine/digest.d.ts +32 -0
  54. package/dist/governance/engine/digest.js +63 -0
  55. package/dist/governance/engine/engine-core.d.ts +219 -0
  56. package/dist/governance/engine/engine-core.js +562 -0
  57. package/dist/governance/engine/engine.d.ts +68 -0
  58. package/dist/governance/engine/engine.js +314 -0
  59. package/dist/governance/engine/estimate.d.ts +38 -0
  60. package/dist/governance/engine/estimate.js +46 -0
  61. package/dist/governance/engine/inspector.d.ts +16 -0
  62. package/dist/governance/engine/inspector.js +396 -0
  63. package/dist/governance/engine/integration.d.ts +35 -0
  64. package/dist/governance/engine/integration.js +220 -0
  65. package/dist/governance/engine/lifecycle.d.ts +29 -0
  66. package/dist/governance/engine/lifecycle.js +656 -0
  67. package/dist/governance/engine/pause.d.ts +56 -0
  68. package/dist/governance/engine/pause.js +107 -0
  69. package/dist/governance/engine/phase-members.d.ts +15 -0
  70. package/dist/governance/engine/phase-members.js +34 -0
  71. package/dist/governance/engine/phase-planner.d.ts +53 -0
  72. package/dist/governance/engine/phase-planner.js +282 -0
  73. package/dist/governance/engine/rebuild.d.ts +27 -0
  74. package/dist/governance/engine/rebuild.js +57 -0
  75. package/dist/governance/engine/report.d.ts +66 -0
  76. package/dist/governance/engine/report.js +220 -0
  77. package/dist/governance/engine/run-digest.d.ts +20 -0
  78. package/dist/governance/engine/run-digest.js +42 -0
  79. package/dist/governance/engine/spec-builder.d.ts +117 -0
  80. package/dist/governance/engine/spec-builder.js +321 -0
  81. package/dist/governance/engine/stage-runner.d.ts +22 -0
  82. package/dist/governance/engine/stage-runner.js +664 -0
  83. package/dist/governance/engine/start-input.d.ts +19 -0
  84. package/dist/governance/engine/start-input.js +111 -0
  85. package/dist/governance/engine/state-machine.d.ts +101 -0
  86. package/dist/governance/engine/state-machine.js +586 -0
  87. package/dist/governance/engine/submission-queries.d.ts +42 -0
  88. package/dist/governance/engine/submission-queries.js +97 -0
  89. package/dist/governance/engine/submission-render.d.ts +12 -0
  90. package/dist/governance/engine/submission-render.js +92 -0
  91. package/dist/governance/engine/submissions.d.ts +27 -0
  92. package/dist/governance/engine/submissions.js +455 -0
  93. package/dist/governance/engine/visibility.d.ts +104 -0
  94. package/dist/governance/engine/visibility.js +223 -0
  95. package/dist/governance/governed-dispatch.d.ts +19 -0
  96. package/dist/governance/governed-dispatch.js +17 -0
  97. package/dist/governance/limits.d.ts +107 -0
  98. package/dist/governance/limits.js +131 -0
  99. package/dist/governance/posture-transition.d.ts +38 -0
  100. package/dist/governance/posture-transition.js +44 -0
  101. package/dist/governance/posture.d.ts +35 -0
  102. package/dist/governance/posture.js +59 -0
  103. package/dist/governance/profiles.d.ts +48 -0
  104. package/dist/governance/profiles.js +140 -0
  105. package/dist/governance/prompts/orchestrator-block.d.ts +40 -0
  106. package/dist/governance/prompts/orchestrator-block.js +128 -0
  107. package/dist/governance/prompts/plan-addendum.d.ts +22 -0
  108. package/dist/governance/prompts/plan-addendum.js +60 -0
  109. package/dist/governance/prompts/refusals.d.ts +48 -0
  110. package/dist/governance/prompts/refusals.js +82 -0
  111. package/dist/governance/prompts/role-blocks.d.ts +40 -0
  112. package/dist/governance/prompts/role-blocks.js +255 -0
  113. package/dist/governance/report-reader.d.ts +31 -0
  114. package/dist/governance/report-reader.js +57 -0
  115. package/dist/governance/roles.d.ts +83 -0
  116. package/dist/governance/roles.js +142 -0
  117. package/dist/governance/rules/claims.d.ts +83 -0
  118. package/dist/governance/rules/claims.js +250 -0
  119. package/dist/governance/rules/elimination.d.ts +66 -0
  120. package/dist/governance/rules/elimination.js +105 -0
  121. package/dist/governance/rules/events-table.d.ts +46 -0
  122. package/dist/governance/rules/events-table.js +94 -0
  123. package/dist/governance/rules/failure-analysis.d.ts +28 -0
  124. package/dist/governance/rules/failure-analysis.js +93 -0
  125. package/dist/governance/rules/ledger-replay.d.ts +53 -0
  126. package/dist/governance/rules/ledger-replay.js +53 -0
  127. package/dist/governance/rules/ledger-state.d.ts +85 -0
  128. package/dist/governance/rules/ledger-state.js +175 -0
  129. package/dist/governance/rules/ledger.d.ts +228 -0
  130. package/dist/governance/rules/ledger.js +560 -0
  131. package/dist/governance/rules/rca.d.ts +68 -0
  132. package/dist/governance/rules/rca.js +220 -0
  133. package/dist/governance/rules/settlement.d.ts +129 -0
  134. package/dist/governance/rules/settlement.js +363 -0
  135. package/dist/governance/rules/suspicion.d.ts +66 -0
  136. package/dist/governance/rules/suspicion.js +169 -0
  137. package/dist/governance/store/artifacts.d.ts +81 -0
  138. package/dist/governance/store/artifacts.js +173 -0
  139. package/dist/governance/store/atomic.d.ts +79 -0
  140. package/dist/governance/store/atomic.js +119 -0
  141. package/dist/governance/store/events-log.d.ts +35 -0
  142. package/dist/governance/store/events-log.js +86 -0
  143. package/dist/governance/store/run-lock.d.ts +51 -0
  144. package/dist/governance/store/run-lock.js +122 -0
  145. package/dist/governance/store/run-store.d.ts +229 -0
  146. package/dist/governance/store/run-store.js +644 -0
  147. package/dist/governance/store/scoreboard-export.d.ts +53 -0
  148. package/dist/governance/store/scoreboard-export.js +65 -0
  149. package/dist/governance/tools/child-tools.d.ts +31 -0
  150. package/dist/governance/tools/child-tools.js +65 -0
  151. package/dist/governance/tools/guard.d.ts +71 -0
  152. package/dist/governance/tools/guard.js +194 -0
  153. package/dist/governance/tools/inspector-tools.d.ts +63 -0
  154. package/dist/governance/tools/inspector-tools.js +424 -0
  155. package/dist/governance/tools/lead-tools.d.ts +42 -0
  156. package/dist/governance/tools/lead-tools.js +226 -0
  157. package/dist/governance/tools/normalize-util.d.ts +101 -0
  158. package/dist/governance/tools/normalize-util.js +230 -0
  159. package/dist/governance/tools/scan-incomplete.d.ts +79 -0
  160. package/dist/governance/tools/scan-incomplete.js +486 -0
  161. package/dist/governance/tools/shared-tools.d.ts +44 -0
  162. package/dist/governance/tools/shared-tools.js +125 -0
  163. package/dist/governance/tools/submit-normalizers.d.ts +28 -0
  164. package/dist/governance/tools/submit-normalizers.js +474 -0
  165. package/dist/governance/tools/submit-tools.d.ts +26 -0
  166. package/dist/governance/tools/submit-tools.js +171 -0
  167. package/dist/governance/types.d.ts +661 -0
  168. package/dist/governance/types.js +27 -0
  169. package/dist/session/validate-session.js +32 -1
  170. package/dist/team/runtime.d.ts +8 -0
  171. package/dist/team/runtime.js +9 -0
  172. package/dist/team/subagent.d.ts +23 -0
  173. package/dist/team/subagent.js +14 -3
  174. package/dist/team/types.d.ts +6 -0
  175. package/dist/tools/index.d.ts +30 -7
  176. package/dist/tools/index.js +14 -0
  177. package/dist/tools/plan-tools.d.ts +14 -2
  178. package/dist/tools/plan-tools.js +5 -2
  179. package/dist/ui/App.js +145 -25
  180. package/dist/ui/BottomStatusRow.js +1 -1
  181. package/dist/ui/Composer.d.ts +7 -1
  182. package/dist/ui/Composer.js +9 -6
  183. package/dist/ui/GovernancePanel.d.ts +50 -0
  184. package/dist/ui/GovernancePanel.js +77 -0
  185. package/dist/ui/GovernanceRun.d.ts +18 -0
  186. package/dist/ui/GovernanceRun.js +11 -0
  187. package/dist/ui/StatusBar.d.ts +15 -2
  188. package/dist/ui/StatusBar.js +10 -4
  189. package/dist/ui/Transcript.js +3 -0
  190. package/dist/ui/entries/GovernanceCard.d.ts +30 -0
  191. package/dist/ui/entries/GovernanceCard.js +32 -0
  192. package/dist/ui/governance-copy.d.ts +69 -0
  193. package/dist/ui/governance-copy.js +104 -0
  194. package/dist/ui/governance-status.d.ts +145 -0
  195. package/dist/ui/governance-status.js +326 -0
  196. package/dist/ui/interaction-copy.d.ts +4 -0
  197. package/dist/ui/interaction-copy.js +5 -0
  198. package/dist/ui/interaction-hints.d.ts +17 -0
  199. package/dist/ui/interaction-hints.js +14 -2
  200. package/dist/ui/layout/governance-board.d.ts +121 -0
  201. package/dist/ui/layout/governance-board.js +382 -0
  202. package/dist/ui/layout/governance-card.d.ts +53 -0
  203. package/dist/ui/layout/governance-card.js +134 -0
  204. package/dist/ui/layout/governance-chip.d.ts +38 -0
  205. package/dist/ui/layout/governance-chip.js +64 -0
  206. package/dist/ui/layout/governance-panel.d.ts +85 -0
  207. package/dist/ui/layout/governance-panel.js +358 -0
  208. package/dist/ui/layout/governance-roster.d.ts +65 -0
  209. package/dist/ui/layout/governance-roster.js +275 -0
  210. package/dist/ui/layout/status-detail-layout.js +3 -3
  211. package/dist/ui/layout/status-layout.d.ts +5 -2
  212. package/dist/ui/layout/status-layout.js +10 -6
  213. package/dist/ui/layout/virtual-window.js +11 -0
  214. package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +41 -0
  215. package/dist/ui/overlays/GovernanceBoardOverlay.js +76 -0
  216. package/dist/ui/overlays/GovernanceSettingsPage.d.ts +48 -0
  217. package/dist/ui/overlays/GovernanceSettingsPage.js +93 -0
  218. package/dist/ui/overlays/HelpOverlay.js +4 -3
  219. package/dist/ui/overlays/QuestionOverlay.d.ts +9 -1
  220. package/dist/ui/overlays/QuestionOverlay.js +4 -2
  221. package/dist/ui/overlays/SettingsScreen.d.ts +7 -0
  222. package/dist/ui/overlays/SettingsScreen.js +21 -1
  223. package/dist/ui/overlays/governance-settings.d.ts +79 -0
  224. package/dist/ui/overlays/governance-settings.js +140 -0
  225. package/dist/ui/overlays/model-profile-state.d.ts +6 -1
  226. package/dist/ui/overlays/model-profile-state.js +10 -0
  227. package/dist/ui/palettes.d.ts +17 -0
  228. package/dist/ui/palettes.js +9 -0
  229. package/dist/ui/scrollback/live-preview.js +2 -0
  230. package/dist/ui/scrollback/settled-boundary.js +3 -0
  231. package/dist/ui/shortcuts.js +2 -2
  232. package/dist/ui/theme.d.ts +7 -0
  233. package/dist/ui/theme.js +1 -0
  234. package/dist/ui/transcript-text.js +9 -0
  235. package/dist/ui/use-wheel-routing.js +3 -1
  236. package/package.json +2 -2
@@ -0,0 +1,229 @@
1
+ /**
2
+ * RunStore - the single writer of `<root>/<runId>/` (governance-mode section 12.1).
3
+ *
4
+ * ASCII ONLY (`governance/` is glyph-scanned).
5
+ *
6
+ * RESPONSIBILITIES AND WHY THEY ARE ONE CLASS. Every write funnels through ONE FIFO mutex
7
+ * so that two concurrent engine paths (a submission landing while a stage-end checkpoint
8
+ * is being written) can never interleave their bytes or their sequence numbers.
9
+ * Cross-process exclusion is a separate mechanism (`run.lock`, see `run-lock.ts`).
10
+ *
11
+ * TRUTH VS CHECKPOINT. `events.jsonl` is the truth (append + fsync, one JSON row per
12
+ * line); `run.json` and `ledger.json` are atomic-replace checkpoints. `load()` compares
13
+ * the checkpoint `seq` values with the log tail and reports `needsReplay`; the actual
14
+ * fold of events into state is supplied by the engine as a callback, which keeps this
15
+ * file free of any dependency on `rules/ledger.ts` (I-G2 stays the ledger's business).
16
+ * Checkpoint writers must therefore stamp the CURRENT tail seq, otherwise `needsReplay`
17
+ * is true forever.
18
+ *
19
+ * SEQUENCES ARE ASSIGNED HERE, not by callers: the store caches the tail per run, so a
20
+ * caller can never reuse or skip a number. A row dropped by compaction consumes no seq,
21
+ * which keeps the checkpoint-vs-tail comparison honest.
22
+ *
23
+ * The root directory is a constructor argument (`getGovernanceDir()` lives in
24
+ * `config/app-paths.ts`); nothing here reads the environment.
25
+ */
26
+ import type { LedgerState, RunDigest, RunState, RunStatus, StoredEvent, StoredEventType } from '../types.js';
27
+ import { type GovFs } from './atomic.js';
28
+ import { type AcquireResult } from './run-lock.js';
29
+ export type GovStoreErrorCode = 'BAD_RUN_ID' | 'BAD_PATH' | 'READ_ONLY' | 'EXISTS' | 'NOT_FOUND';
30
+ /** Programmer-facing store failures (the engine turns them into tool text). */
31
+ export declare class GovStoreError extends Error {
32
+ readonly code: GovStoreErrorCode;
33
+ constructor(code: GovStoreErrorCode, message: string);
34
+ }
35
+ export interface RunStoreOptions {
36
+ /** `getGovernanceDir()`: the directory holding `index.jsonl` and the run folders. */
37
+ root: string;
38
+ fs?: GovFs;
39
+ platform?: NodeJS.Platform;
40
+ now?: () => number;
41
+ /** Returns the 3 random `[a-z0-9]` characters of a run id. */
42
+ newId?: () => string;
43
+ pid?: number;
44
+ isPidAlive?: (pid: number) => boolean;
45
+ heartbeatMs?: number;
46
+ sleep?: (ms: number) => Promise<void>;
47
+ /** Called when a heartbeat finds the lock gone or taken by another pid. */
48
+ onLockLost?: (runId: string) => void;
49
+ }
50
+ export interface IndexEntry {
51
+ runId: string;
52
+ cwd: string;
53
+ sessionId?: string;
54
+ goal: string;
55
+ status: RunStatus;
56
+ createdAt: number;
57
+ updatedAt: number;
58
+ /**
59
+ * The `/gov runs` summary (governance-mode-v1-1 V-6). Optional: rows written before it
60
+ * existed simply lack it and read back as `undefined`; nothing needs migrating.
61
+ */
62
+ digest?: RunDigest;
63
+ }
64
+ export interface AppendEventInput {
65
+ type: StoredEventType;
66
+ actor: string;
67
+ payload: Record<string, unknown>;
68
+ at?: number;
69
+ /**
70
+ * Caller-assigned sequence number. The engine mutates memory synchronously and queues
71
+ * the writes, so it must stamp checkpoints and ledger entries with a seq BEFORE the
72
+ * (async) append resolves; it therefore owns the counter. Absent => `lastSeq + 1`.
73
+ */
74
+ seq?: number;
75
+ }
76
+ export interface ReplayInput {
77
+ run: RunState | null;
78
+ ledger: LedgerState | null;
79
+ /** Every parsed event in file order; the callback filters by `seq` itself. */
80
+ events: StoredEvent[];
81
+ tailSeq: number;
82
+ }
83
+ export interface ReplayOutput {
84
+ run?: RunState | null;
85
+ ledger?: LedgerState | null;
86
+ }
87
+ export type ReplayFn = (input: ReplayInput) => ReplayOutput;
88
+ export interface LoadedRun {
89
+ run: RunState | null;
90
+ ledger: LedgerState | null;
91
+ tailSeq: number;
92
+ /** A checkpoint is missing, unreadable, or behind the log tail. */
93
+ needsReplay: boolean;
94
+ /** A `replay` callback ran and the repaired checkpoints were written back. */
95
+ replayed: boolean;
96
+ /** A higher major schemaVersion: viewable, never writable or resumable. */
97
+ readOnly: boolean;
98
+ /** The log has bytes but not one valid row: the run cannot be rebuilt. */
99
+ eventsUnreadable: boolean;
100
+ /** Human-readable findings (torn tail, skipped rows, corrupt checkpoints). */
101
+ problems: string[];
102
+ }
103
+ export interface LoadOptions {
104
+ replay?: ReplayFn;
105
+ }
106
+ export interface PruneResult {
107
+ pruned: string[];
108
+ skippedLocked: string[];
109
+ failed: string[];
110
+ }
111
+ export type ArtifactWrite = {
112
+ ok: true;
113
+ bytes: number;
114
+ totalBytes: number;
115
+ } | {
116
+ ok: false;
117
+ exhausted: true;
118
+ message: string;
119
+ };
120
+ export interface DirEntry {
121
+ name: string;
122
+ isDirectory: boolean;
123
+ size: number;
124
+ }
125
+ export declare class RunStore {
126
+ readonly root: string;
127
+ private readonly fs;
128
+ private readonly platform;
129
+ private readonly now;
130
+ private readonly newId;
131
+ private readonly pid;
132
+ private readonly isPidAlive;
133
+ private readonly heartbeatMs;
134
+ private readonly sleep;
135
+ private readonly onLockLost;
136
+ private readonly mutex;
137
+ private readonly caches;
138
+ private readonly heartbeats;
139
+ private readonly heldLocks;
140
+ constructor(options: RunStoreOptions);
141
+ /** Validates the id first: a run id is the only caller-influenced path segment. */
142
+ runDir(runId: string): string;
143
+ private runFile;
144
+ /** "g" + base36(timeMs) + 3 random [a-z0-9]; retried until the folder is unused. */
145
+ allocateRunId(): Promise<string>;
146
+ /** Create the folder, `spec.md` (verbatim) and the first `run.json`; index the run. */
147
+ createRun(input: {
148
+ state: RunState;
149
+ spec: string;
150
+ }): Promise<void>;
151
+ /**
152
+ * Atomic replace of `run.json`; appends an index row when the status changed OR, for a
153
+ * caller that supplies one, when the digest did. `index.jsonl` is append-only and
154
+ * `listRuns` keeps the newest row per run, so appending IS the update. A caller without a
155
+ * digest behaves byte-for-byte as before.
156
+ */
157
+ writeRun(state: RunState, digest?: RunDigest): Promise<void>;
158
+ /** Atomic replace of `ledger.json`. The caller stamps `ledger.seq`. */
159
+ writeLedger(runId: string, ledger: LedgerState): Promise<void>;
160
+ /** One-way `token_ledger.py` v2.0 projection. Never read back. */
161
+ exportScoreboard(runId: string, ledger: LedgerState): Promise<void>;
162
+ /**
163
+ * Append one event and fsync. Returns the stored row, or `null` when compaction
164
+ * dropped it (past the byte cap only audit-only types are dropped).
165
+ */
166
+ appendEvent(runId: string, input: AppendEventInput): Promise<StoredEvent | null>;
167
+ private writeCompactionMarker;
168
+ private writeEventRow;
169
+ /** Rows with `seq > afterSeq`, in file order. Missing file reads as empty. */
170
+ readEvents(runId: string, afterSeq?: number): Promise<StoredEvent[]>;
171
+ /** How many rows compaction dropped in this process (the marker row says why). */
172
+ droppedEventCount(runId: string): number;
173
+ private parseEvents;
174
+ /** Read both checkpoints and the log tail; optionally repair via `options.replay`. */
175
+ load(runId: string, options?: LoadOptions): Promise<LoadedRun>;
176
+ private isNewerSchema;
177
+ private checkpointsBehind;
178
+ private readCheckpoint;
179
+ private writeRepaired;
180
+ private lockDeps;
181
+ /** Take `run.lock` (stale locks are taken over). Refusal text names the holder pid. */
182
+ acquireLock(runId: string): Promise<AcquireResult>;
183
+ /** Start the unref'd heartbeat timer; idempotent. */
184
+ startHeartbeat(runId: string): void;
185
+ stopHeartbeat(runId: string): void;
186
+ /** One heartbeat tick (public so tests need no fake timers). False = lock lost. */
187
+ heartbeatOnce(runId: string): Promise<boolean>;
188
+ releaseLock(runId: string): Promise<void>;
189
+ /** Stop every timer and release every lock this process holds. Safe to call twice. */
190
+ dispose(): Promise<void>;
191
+ private isRunLocked;
192
+ /** Atomic write of a projection (`board.md`, `reports/phase-1.md`). Not budgeted. */
193
+ writeRunFile(runId: string, rel: string, text: string): Promise<void>;
194
+ readRunFile(runId: string, rel: string): Promise<string | null>;
195
+ listRunDir(runId: string, rel: string): Promise<DirEntry[]>;
196
+ /**
197
+ * Write under `artifacts/`, enforcing the per-run byte budget. The budget is a refusal
198
+ * (never a silent drop): the caller reports `NOT ACCEPTED: run storage budget exhausted`
199
+ * and the engine escalates the run.
200
+ */
201
+ writeArtifactFile(runId: string, rel: string, text: string): Promise<ArtifactWrite>;
202
+ private measureArtifacts;
203
+ private get indexPath();
204
+ private appendIndexUnlocked;
205
+ private readIndexUnlocked;
206
+ /** Latest row per run, newest first. */
207
+ listRuns(): Promise<IndexEntry[]>;
208
+ /**
209
+ * Newest run of ANY status for `cwd` whose folder still exists. `/gov report` uses this
210
+ * rather than `latestResumable`: the report people ask for most is the one of the run
211
+ * that just closed, and a closed run is by definition not resumable.
212
+ */
213
+ latestForCwd(cwd: string): Promise<IndexEntry | null>;
214
+ /** Newest unfinished run for `cwd` whose folder still exists. */
215
+ latestResumable(cwd: string): Promise<IndexEntry | null>;
216
+ /**
217
+ * Delete closed / abandoned runs older than the retention window. Best effort and
218
+ * bounded (`pruneMaxPerPass`); a locked run is never touched. Never throws.
219
+ */
220
+ pruneOld(): Promise<PruneResult>;
221
+ private pruneUnlocked;
222
+ private atomic;
223
+ private freshCache;
224
+ private assertWritable;
225
+ /** Lazily derive the tail seq / byte count from disk, once per run per process. */
226
+ private ensureCache;
227
+ }
228
+ /** Validate an index row's digest field; anything malformed reads as "no digest". */
229
+ export declare function parseRunDigest(raw: unknown): RunDigest | undefined;