agentrinse 0.2.0 → 0.4.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 (179) hide show
  1. package/README.md +278 -143
  2. package/dist/adapters/codex-database.d.ts +64 -0
  3. package/dist/adapters/codex-database.d.ts.map +1 -0
  4. package/dist/adapters/codex-database.js +409 -0
  5. package/dist/adapters/codex-database.js.map +1 -0
  6. package/dist/adapters/git/adapter.d.ts +14 -1
  7. package/dist/adapters/git/adapter.d.ts.map +1 -1
  8. package/dist/adapters/git/adapter.js +217 -56
  9. package/dist/adapters/git/adapter.js.map +1 -1
  10. package/dist/adapters/git/refs.d.ts +6 -0
  11. package/dist/adapters/git/refs.d.ts.map +1 -0
  12. package/dist/adapters/git/refs.js +24 -0
  13. package/dist/adapters/git/refs.js.map +1 -0
  14. package/dist/adapters/git/status.d.ts +1 -0
  15. package/dist/adapters/git/status.d.ts.map +1 -1
  16. package/dist/adapters/git/status.js +6 -0
  17. package/dist/adapters/git/status.js.map +1 -1
  18. package/dist/adapters/provider-adapter.d.ts +4 -0
  19. package/dist/adapters/provider-adapter.d.ts.map +1 -1
  20. package/dist/adapters/provider-adapter.js +144 -3
  21. package/dist/adapters/provider-adapter.js.map +1 -1
  22. package/dist/adapters/provider-specs.d.ts.map +1 -1
  23. package/dist/adapters/provider-specs.js +15 -0
  24. package/dist/adapters/provider-specs.js.map +1 -1
  25. package/dist/adapters/registry.d.ts +3 -1
  26. package/dist/adapters/registry.d.ts.map +1 -1
  27. package/dist/adapters/registry.js +7 -2
  28. package/dist/adapters/registry.js.map +1 -1
  29. package/dist/commands/adapters.d.ts.map +1 -1
  30. package/dist/commands/adapters.js +3 -1
  31. package/dist/commands/adapters.js.map +1 -1
  32. package/dist/commands/apply.d.ts +2 -0
  33. package/dist/commands/apply.d.ts.map +1 -1
  34. package/dist/commands/apply.js +27 -2
  35. package/dist/commands/apply.js.map +1 -1
  36. package/dist/commands/audit.d.ts +1 -0
  37. package/dist/commands/audit.d.ts.map +1 -1
  38. package/dist/commands/audit.js +3 -1
  39. package/dist/commands/audit.js.map +1 -1
  40. package/dist/commands/clean.d.ts +2 -0
  41. package/dist/commands/clean.d.ts.map +1 -1
  42. package/dist/commands/clean.js +9 -3
  43. package/dist/commands/clean.js.map +1 -1
  44. package/dist/commands/completion.d.ts.map +1 -1
  45. package/dist/commands/completion.js +3 -1
  46. package/dist/commands/completion.js.map +1 -1
  47. package/dist/commands/confirmation.d.ts +6 -0
  48. package/dist/commands/confirmation.d.ts.map +1 -0
  49. package/dist/commands/confirmation.js +21 -0
  50. package/dist/commands/confirmation.js.map +1 -0
  51. package/dist/commands/doctor.d.ts.map +1 -1
  52. package/dist/commands/doctor.js +36 -2
  53. package/dist/commands/doctor.js.map +1 -1
  54. package/dist/commands/plan.d.ts +2 -0
  55. package/dist/commands/plan.d.ts.map +1 -1
  56. package/dist/commands/plan.js +11 -1
  57. package/dist/commands/plan.js.map +1 -1
  58. package/dist/commands/purge.d.ts +35 -0
  59. package/dist/commands/purge.d.ts.map +1 -0
  60. package/dist/commands/purge.js +191 -0
  61. package/dist/commands/purge.js.map +1 -0
  62. package/dist/commands/show.d.ts.map +1 -1
  63. package/dist/commands/show.js +17 -2
  64. package/dist/commands/show.js.map +1 -1
  65. package/dist/commands/undo.d.ts +24 -0
  66. package/dist/commands/undo.d.ts.map +1 -0
  67. package/dist/commands/undo.js +84 -0
  68. package/dist/commands/undo.js.map +1 -0
  69. package/dist/config/defaults.d.ts.map +1 -1
  70. package/dist/config/defaults.js +4 -0
  71. package/dist/config/defaults.js.map +1 -1
  72. package/dist/config/load.d.ts.map +1 -1
  73. package/dist/config/load.js +4 -0
  74. package/dist/config/load.js.map +1 -1
  75. package/dist/config/schema.d.ts +4 -0
  76. package/dist/config/schema.d.ts.map +1 -1
  77. package/dist/config/schema.js +18 -0
  78. package/dist/config/schema.js.map +1 -1
  79. package/dist/contracts/action.d.ts +241 -0
  80. package/dist/contracts/action.d.ts.map +1 -1
  81. package/dist/contracts/action.js +77 -1
  82. package/dist/contracts/action.js.map +1 -1
  83. package/dist/contracts/database-backup.d.ts +192 -0
  84. package/dist/contracts/database-backup.d.ts.map +1 -0
  85. package/dist/contracts/database-backup.js +70 -0
  86. package/dist/contracts/database-backup.js.map +1 -0
  87. package/dist/contracts/finding.d.ts +77 -0
  88. package/dist/contracts/finding.d.ts.map +1 -1
  89. package/dist/contracts/plan.d.ts +78 -0
  90. package/dist/contracts/plan.d.ts.map +1 -1
  91. package/dist/contracts/plan.js +29 -1
  92. package/dist/contracts/plan.js.map +1 -1
  93. package/dist/contracts/quarantine.d.ts +79 -0
  94. package/dist/contracts/quarantine.d.ts.map +1 -0
  95. package/dist/contracts/quarantine.js +60 -0
  96. package/dist/contracts/quarantine.js.map +1 -0
  97. package/dist/contracts/report.d.ts +77 -0
  98. package/dist/contracts/report.d.ts.map +1 -1
  99. package/dist/contracts/run.d.ts +233 -5
  100. package/dist/contracts/run.d.ts.map +1 -1
  101. package/dist/contracts/run.js +26 -3
  102. package/dist/contracts/run.js.map +1 -1
  103. package/dist/core/apply.d.ts +12 -1
  104. package/dist/core/apply.d.ts.map +1 -1
  105. package/dist/core/apply.js +209 -47
  106. package/dist/core/apply.js.map +1 -1
  107. package/dist/core/database-exclusion.d.ts +23 -0
  108. package/dist/core/database-exclusion.d.ts.map +1 -0
  109. package/dist/core/database-exclusion.js +133 -0
  110. package/dist/core/database-exclusion.js.map +1 -0
  111. package/dist/core/database-executor.d.ts +45 -0
  112. package/dist/core/database-executor.d.ts.map +1 -0
  113. package/dist/core/database-executor.js +436 -0
  114. package/dist/core/database-executor.js.map +1 -0
  115. package/dist/core/database-recovery.d.ts +25 -0
  116. package/dist/core/database-recovery.d.ts.map +1 -0
  117. package/dist/core/database-recovery.js +628 -0
  118. package/dist/core/database-recovery.js.map +1 -0
  119. package/dist/core/database-revalidation.d.ts +19 -0
  120. package/dist/core/database-revalidation.d.ts.map +1 -0
  121. package/dist/core/database-revalidation.js +70 -0
  122. package/dist/core/database-revalidation.js.map +1 -0
  123. package/dist/core/git-operation-state.d.ts +3 -0
  124. package/dist/core/git-operation-state.d.ts.map +1 -0
  125. package/dist/core/git-operation-state.js +23 -0
  126. package/dist/core/git-operation-state.js.map +1 -0
  127. package/dist/core/measure.d.ts +1 -0
  128. package/dist/core/measure.d.ts.map +1 -1
  129. package/dist/core/measure.js +3 -0
  130. package/dist/core/measure.js.map +1 -1
  131. package/dist/core/no-clobber-rename.d.ts +3 -0
  132. package/dist/core/no-clobber-rename.d.ts.map +1 -0
  133. package/dist/core/no-clobber-rename.js +102 -0
  134. package/dist/core/no-clobber-rename.js.map +1 -0
  135. package/dist/core/plan.d.ts.map +1 -1
  136. package/dist/core/plan.js +1 -0
  137. package/dist/core/plan.js.map +1 -1
  138. package/dist/core/worktree-executor.d.ts +51 -0
  139. package/dist/core/worktree-executor.d.ts.map +1 -0
  140. package/dist/core/worktree-executor.js +676 -0
  141. package/dist/core/worktree-executor.js.map +1 -0
  142. package/dist/core/worktree-lock.d.ts +15 -0
  143. package/dist/core/worktree-lock.d.ts.map +1 -0
  144. package/dist/core/worktree-lock.js +139 -0
  145. package/dist/core/worktree-lock.js.map +1 -0
  146. package/dist/core/worktree-recovery.d.ts +37 -0
  147. package/dist/core/worktree-recovery.d.ts.map +1 -0
  148. package/dist/core/worktree-recovery.js +1018 -0
  149. package/dist/core/worktree-recovery.js.map +1 -0
  150. package/dist/core/worktree-revalidation.d.ts +25 -0
  151. package/dist/core/worktree-revalidation.d.ts.map +1 -0
  152. package/dist/core/worktree-revalidation.js +107 -0
  153. package/dist/core/worktree-revalidation.js.map +1 -0
  154. package/dist/index.d.ts +4 -2
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +4 -2
  157. package/dist/index.js.map +1 -1
  158. package/dist/main.d.ts.map +1 -1
  159. package/dist/main.js +50 -0
  160. package/dist/main.js.map +1 -1
  161. package/dist/state/layout.d.ts +2 -0
  162. package/dist/state/layout.d.ts.map +1 -1
  163. package/dist/state/layout.js +2 -0
  164. package/dist/state/layout.js.map +1 -1
  165. package/dist/state/records.d.ts +6 -0
  166. package/dist/state/records.d.ts.map +1 -1
  167. package/dist/state/records.js +9 -1
  168. package/dist/state/records.js.map +1 -1
  169. package/dist/state/run-journal.d.ts.map +1 -1
  170. package/dist/state/run-journal.js +3 -0
  171. package/dist/state/run-journal.js.map +1 -1
  172. package/dist/version.d.ts +1 -1
  173. package/dist/version.js +1 -1
  174. package/package.json +2 -1
  175. package/schemas/audit.schema.json +355 -0
  176. package/schemas/database-backup.schema.json +648 -0
  177. package/schemas/plan.schema.json +346 -0
  178. package/schemas/quarantine.schema.json +238 -0
  179. package/schemas/run.schema.json +245 -52
@@ -0,0 +1,409 @@
1
+ import { execFile } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { createReadStream } from "node:fs";
4
+ import { lstat, open } from "node:fs/promises";
5
+ import { basename } from "node:path";
6
+ import { pathToFileURL } from "node:url";
7
+ import { promisify } from "node:util";
8
+ import { codexDatabaseFilenameSchema, databaseIdentitySchema, } from "../contracts/action.js";
9
+ import { sha256 } from "../core/digest.js";
10
+ const execFileAsync = promisify(execFile);
11
+ const SQLITE_SEPARATOR = "\u001f";
12
+ const SQLITE_INSPECTION_TIMEOUT_MS = 30_000;
13
+ const SQLITE_INTEGRITY_TIMEOUT_MS = 30 * 60_000;
14
+ const SQLITE_MAINTENANCE_TIMEOUT_MS = 2 * 60 * 60_000;
15
+ export const CODEX_DATABASE_CONTRACTS = {
16
+ "state_5.sqlite": {
17
+ database: "state",
18
+ filename: "state_5.sqlite",
19
+ migrationVersion: 39,
20
+ migrationDigest: "e58f1d744ab8979fe6b48ae235fcc18474f72979523d90e8b8104555a05d9a7c",
21
+ schemaDigest: "0ccab9d0c01ff5f9d3ea65c477892611176d9c8b707d2245c08646da13fc09a0",
22
+ requiredTables: ["_sqlx_migrations", "threads"],
23
+ },
24
+ "logs_2.sqlite": {
25
+ database: "logs",
26
+ filename: "logs_2.sqlite",
27
+ migrationVersion: 2,
28
+ migrationDigest: "c05a0bee9a9eb893e6d79f9b173fdd3de36f0233f60410dbce924a4080f7be40",
29
+ schemaDigest: "7dbaeea373d1b81fe583529e6efaa18345c20e4e4639702bf3c2d54f82883874",
30
+ requiredTables: ["_sqlx_migrations", "logs"],
31
+ },
32
+ "goals_1.sqlite": {
33
+ database: "goals",
34
+ filename: "goals_1.sqlite",
35
+ migrationVersion: 1,
36
+ migrationDigest: "8ce3d311cf69af8f56b0722d617df5552b8ef863a4f60bfe5ba3bf76e30c8f05",
37
+ schemaDigest: "1e4b7b279b41ddb11bfd6162ea6c1258f42f07a24e9bb4ca8b0148bfa865e8c0",
38
+ requiredTables: ["_sqlx_migrations", "thread_goals"],
39
+ },
40
+ "memories_1.sqlite": {
41
+ database: "memories",
42
+ filename: "memories_1.sqlite",
43
+ migrationVersion: 1,
44
+ migrationDigest: "580d14eff9340381a3e5ccd7db0156a91649f7466e8e697a2d5d3098bdef1930",
45
+ schemaDigest: "90be68fa20a2cce1a3cb9eff8058d752eaca624a07ab0a17c1244f4b0b6eed8b",
46
+ requiredTables: ["_sqlx_migrations", "jobs", "stage1_outputs"],
47
+ },
48
+ };
49
+ function commandError(error) {
50
+ const value = error;
51
+ return {
52
+ ...(value.code === undefined ? {} : { code: value.code }),
53
+ stdout: value.stdout ?? "",
54
+ stderr: value.stderr ?? (error instanceof Error ? error.message : String(error)),
55
+ };
56
+ }
57
+ async function defaultSqliteRunner(args, options = { timeoutMs: SQLITE_INSPECTION_TIMEOUT_MS }) {
58
+ const result = await execFileAsync("sqlite3", args, {
59
+ encoding: "utf8",
60
+ maxBuffer: 16 * 1024 * 1024,
61
+ timeout: options.timeoutMs,
62
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
63
+ });
64
+ return { stdout: result.stdout, stderr: result.stderr };
65
+ }
66
+ function sqliteRunOptions(timeoutMs, dependencies) {
67
+ return dependencies.signal === undefined
68
+ ? { timeoutMs }
69
+ : { timeoutMs, signal: dependencies.signal };
70
+ }
71
+ async function querySqlite(path, sql, dependencies, timeoutMs = SQLITE_INSPECTION_TIMEOUT_MS) {
72
+ const result = await (dependencies.runSqlite ?? defaultSqliteRunner)([
73
+ "-batch",
74
+ "-readonly",
75
+ "-noheader",
76
+ "-separator",
77
+ SQLITE_SEPARATOR,
78
+ "-cmd",
79
+ ".timeout 1000",
80
+ `${pathToFileURL(path).href}?immutable=1`,
81
+ sql,
82
+ ], sqliteRunOptions(timeoutMs, dependencies));
83
+ if (result.stderr.trim() !== "") {
84
+ throw new Error(`sqlite3 could not inspect ${path}: ${result.stderr.trim()}`);
85
+ }
86
+ return result.stdout
87
+ .split("\n")
88
+ .map((line) => line.trim())
89
+ .filter((line) => line !== "");
90
+ }
91
+ async function optionalFile(path) {
92
+ try {
93
+ const stats = await lstat(path);
94
+ if (stats.isSymbolicLink() || !stats.isFile()) {
95
+ throw new Error(`SQLite sidecar is not a regular file: ${path}`);
96
+ }
97
+ return {
98
+ path,
99
+ device: stats.dev,
100
+ inode: stats.ino,
101
+ mode: stats.mode,
102
+ mtimeMs: stats.mtimeMs,
103
+ measuredBytes: stats.size,
104
+ };
105
+ }
106
+ catch (error) {
107
+ if (error instanceof Error &&
108
+ "code" in error &&
109
+ error.code === "ENOENT") {
110
+ return undefined;
111
+ }
112
+ throw error;
113
+ }
114
+ }
115
+ async function readSqliteJournalMode(path, lockedHandle) {
116
+ const handle = lockedHandle ?? (await open(path, "r"));
117
+ try {
118
+ const header = Buffer.alloc(100);
119
+ const { bytesRead } = await handle.read(header, 0, header.length, 0);
120
+ if (bytesRead !== header.length || header.toString("binary", 0, 16) !== "SQLite format 3\0") {
121
+ throw new Error(`Codex database has an invalid SQLite header: ${path}`);
122
+ }
123
+ if (header[18] !== 2 || header[19] !== 2) {
124
+ throw new Error(`Codex database journal mode is not persistent WAL: ${path}`);
125
+ }
126
+ return "wal";
127
+ }
128
+ finally {
129
+ if (lockedHandle === undefined) {
130
+ await handle.close();
131
+ }
132
+ }
133
+ }
134
+ async function sha256File(path, signal, lockedHandle) {
135
+ const hash = createHash("sha256");
136
+ if (lockedHandle !== undefined) {
137
+ const buffer = Buffer.allocUnsafe(1024 * 1024);
138
+ let position = 0;
139
+ for (;;) {
140
+ signal?.throwIfAborted();
141
+ const { bytesRead } = await lockedHandle.read(buffer, 0, buffer.length, position);
142
+ if (bytesRead === 0) {
143
+ break;
144
+ }
145
+ hash.update(buffer.subarray(0, bytesRead));
146
+ position += bytesRead;
147
+ }
148
+ return hash.digest("hex");
149
+ }
150
+ const stream = createReadStream(path, signal === undefined ? {} : { signal });
151
+ for await (const chunk of stream) {
152
+ hash.update(chunk);
153
+ }
154
+ return hash.digest("hex");
155
+ }
156
+ function parseInteger(value, label) {
157
+ const parsed = value === undefined ? Number.NaN : Number.parseInt(value, 10);
158
+ if (!Number.isSafeInteger(parsed) || parsed < 0) {
159
+ throw new Error(`SQLite returned an invalid ${label}: ${value ?? "<missing>"}`);
160
+ }
161
+ return parsed;
162
+ }
163
+ export function codexDatabaseContract(path) {
164
+ const filename = codexDatabaseFilenameSchema.safeParse(basename(path));
165
+ return filename.success ? CODEX_DATABASE_CONTRACTS[filename.data] : undefined;
166
+ }
167
+ export async function inspectCodexDatabase(path, dependencies = {}, contractPath = path, identityPath = path, lockedHandle) {
168
+ const contract = codexDatabaseContract(contractPath);
169
+ if (contract === undefined) {
170
+ throw new Error(`unsupported Codex database filename: ${basename(path)}`);
171
+ }
172
+ const pathStats = await lstat(path);
173
+ if (pathStats.isSymbolicLink() || !pathStats.isFile()) {
174
+ throw new Error(`Codex database is not a regular file: ${path}`);
175
+ }
176
+ const stats = lockedHandle === undefined ? pathStats : await lockedHandle.stat();
177
+ if (stats.dev !== pathStats.dev || stats.ino !== pathStats.ino) {
178
+ throw new Error(`Codex database path changed after exclusive access: ${path}`);
179
+ }
180
+ const values = await querySqlite(path, [
181
+ "PRAGMA query_only=ON;",
182
+ "SELECT page_size FROM pragma_page_size;",
183
+ "SELECT page_count FROM pragma_page_count;",
184
+ "SELECT freelist_count FROM pragma_freelist_count;",
185
+ "SELECT auto_vacuum FROM pragma_auto_vacuum;",
186
+ "PRAGMA quick_check;",
187
+ ].join(" "), dependencies);
188
+ if (values[4] !== "ok") {
189
+ throw new Error(`Codex database quick check failed: ${values.slice(4).join("; ")}`);
190
+ }
191
+ const tables = await querySqlite(path, "SELECT name FROM sqlite_schema WHERE type = 'table' ORDER BY name;", dependencies);
192
+ const migrationRows = tables.includes("_sqlx_migrations")
193
+ ? await (async () => {
194
+ const failedMigrations = parseInteger((await querySqlite(path, "SELECT count(*) FROM _sqlx_migrations WHERE success != 1;", dependencies))[0], "failed migration count");
195
+ if (failedMigrations !== 0) {
196
+ throw new Error(`Codex database contains ${failedMigrations} failed SQLx migration(s)`);
197
+ }
198
+ return querySqlite(path, "SELECT version, description, lower(hex(checksum)) FROM _sqlx_migrations ORDER BY version;", dependencies);
199
+ })()
200
+ : [];
201
+ const migrationVersion = migrationRows.length === 0
202
+ ? 0
203
+ : parseInteger(migrationRows.at(-1)?.split(SQLITE_SEPARATOR)[0], "migration version");
204
+ const migrationDigest = sha256(migrationRows.join("\n"));
205
+ const schemaRows = await querySqlite(path, "SELECT type, name, tbl_name, coalesce(sql, '') FROM sqlite_schema ORDER BY type, name;", dependencies);
206
+ const pageSize = parseInteger(values[0], "page size");
207
+ const pageCount = parseInteger(values[1], "page count");
208
+ const freelistCount = parseInteger(values[2], "freelist count");
209
+ const autoVacuum = parseInteger(values[3], "auto-vacuum mode");
210
+ const journalMode = await readSqliteJournalMode(path, lockedHandle);
211
+ const wal = await optionalFile(`${path}-wal`);
212
+ const shm = await optionalFile(`${path}-shm`);
213
+ const fingerprint = await sha256File(path, dependencies.signal, lockedHandle);
214
+ const finalStats = lockedHandle === undefined ? await lstat(path) : await lockedHandle.stat();
215
+ if (finalStats.dev !== stats.dev ||
216
+ finalStats.ino !== stats.ino ||
217
+ finalStats.mode !== stats.mode ||
218
+ finalStats.mtimeMs !== stats.mtimeMs ||
219
+ finalStats.size !== stats.size) {
220
+ throw new Error(`Codex database changed during inspection: ${path}`);
221
+ }
222
+ const identity = databaseIdentitySchema.parse({
223
+ path: identityPath,
224
+ database: contract.database,
225
+ filename: contract.filename,
226
+ device: stats.dev,
227
+ inode: stats.ino,
228
+ mode: stats.mode,
229
+ mtimeMs: stats.mtimeMs,
230
+ measuredBytes: stats.size,
231
+ pageSize,
232
+ pageCount,
233
+ freelistCount,
234
+ journalMode,
235
+ autoVacuum,
236
+ migrationVersion,
237
+ migrationDigest,
238
+ tables,
239
+ ...(wal === undefined ? {} : { wal }),
240
+ ...(shm === undefined ? {} : { shm }),
241
+ schemaDigest: sha256(schemaRows.join("\n")),
242
+ fingerprint,
243
+ });
244
+ return {
245
+ identity,
246
+ estimatedReclaimBytes: pageSize * freelistCount,
247
+ freePageRatio: pageCount === 0 ? 0 : freelistCount / pageCount,
248
+ quickCheck: "ok",
249
+ walBytes: wal?.measuredBytes ?? 0,
250
+ shmBytes: shm?.measuredBytes ?? 0,
251
+ sidecarsPresent: wal !== undefined || shm !== undefined,
252
+ };
253
+ }
254
+ function sqliteString(value) {
255
+ return `'${value.replaceAll("'", "''")}'`;
256
+ }
257
+ export async function vacuumCodexDatabaseInto(sourcePath, destinationPath, dependencies = {}) {
258
+ const result = await (dependencies.runSqlite ?? defaultSqliteRunner)([
259
+ "-batch",
260
+ "-readonly",
261
+ "-cmd",
262
+ ".timeout 1000",
263
+ `${pathToFileURL(sourcePath).href}?immutable=1`,
264
+ `VACUUM INTO ${sqliteString(destinationPath)};`,
265
+ ], sqliteRunOptions(SQLITE_MAINTENANCE_TIMEOUT_MS, dependencies));
266
+ if (result.stderr.trim() !== "") {
267
+ throw new Error(`sqlite3 VACUUM INTO failed: ${result.stderr.trim()}`);
268
+ }
269
+ const normalize = await (dependencies.runSqlite ?? defaultSqliteRunner)([
270
+ "-batch",
271
+ "-cmd",
272
+ ".timeout 1000",
273
+ destinationPath,
274
+ "PRAGMA synchronous=FULL; PRAGMA auto_vacuum=INCREMENTAL; VACUUM; PRAGMA journal_mode=WAL;",
275
+ ], sqliteRunOptions(SQLITE_MAINTENANCE_TIMEOUT_MS, dependencies));
276
+ if (normalize.stderr.trim() !== "") {
277
+ throw new Error(`sqlite3 could not enable incremental auto-vacuum on the compacted copy: ${normalize.stderr.trim()}`);
278
+ }
279
+ }
280
+ export async function verifyCodexDatabaseIntegrity(path, dependencies = {}) {
281
+ const result = await querySqlite(path, "PRAGMA integrity_check;", dependencies, SQLITE_INTEGRITY_TIMEOUT_MS);
282
+ if (result.length !== 1 || result[0] !== "ok") {
283
+ throw new Error(`Codex database integrity check failed: ${result.join("; ")}`);
284
+ }
285
+ }
286
+ async function defaultLsofRunner(paths) {
287
+ try {
288
+ const result = await execFileAsync("lsof", ["-nP", "-Fpcfn", "--", ...paths], {
289
+ encoding: "utf8",
290
+ maxBuffer: 4 * 1024 * 1024,
291
+ timeout: 10_000,
292
+ });
293
+ return { stdout: result.stdout, stderr: result.stderr };
294
+ }
295
+ catch (error) {
296
+ const value = commandError(error);
297
+ if (Number(value.code) === 1 && value.stderr === "") {
298
+ return { stdout: value.stdout, stderr: "" };
299
+ }
300
+ throw error;
301
+ }
302
+ }
303
+ export async function inspectDatabaseOpenHandles(path, dependencies = {}) {
304
+ if (!["darwin", "linux"].includes(process.platform) && dependencies.runLsof === undefined) {
305
+ return {
306
+ status: "unknown",
307
+ pids: [],
308
+ reason: `open-file inspection is unsupported on ${process.platform}`,
309
+ };
310
+ }
311
+ try {
312
+ const paths = (await Promise.all([path, `${path}-wal`, `${path}-shm`].map(async (candidate) => {
313
+ try {
314
+ await lstat(candidate);
315
+ return candidate;
316
+ }
317
+ catch (error) {
318
+ if (error instanceof Error &&
319
+ "code" in error &&
320
+ error.code === "ENOENT") {
321
+ return undefined;
322
+ }
323
+ throw error;
324
+ }
325
+ }))).filter((candidate) => candidate !== undefined);
326
+ if (paths.length === 0) {
327
+ return { status: "idle", pids: [] };
328
+ }
329
+ const result = await (dependencies.runLsof ?? defaultLsofRunner)(paths);
330
+ if (result.stderr.trim() !== "") {
331
+ return {
332
+ status: "unknown",
333
+ pids: [],
334
+ reason: `lsof reported an incomplete scan: ${result.stderr.trim()}`,
335
+ };
336
+ }
337
+ const pids = [
338
+ ...new Set(result.stdout
339
+ .split("\n")
340
+ .filter((line) => /^p\d+$/u.test(line))
341
+ .map((line) => Number.parseInt(line.slice(1), 10))),
342
+ ].sort((left, right) => left - right);
343
+ return pids.length === 0 ? { status: "idle", pids: [] } : { status: "busy", pids };
344
+ }
345
+ catch (error) {
346
+ return {
347
+ status: "unknown",
348
+ pids: [],
349
+ reason: error instanceof Error ? error.message : String(error),
350
+ };
351
+ }
352
+ }
353
+ async function defaultPsRunner() {
354
+ const result = await execFileAsync("ps", ["-axo", "pid=,comm=,args="], {
355
+ encoding: "utf8",
356
+ maxBuffer: 8 * 1024 * 1024,
357
+ timeout: 10_000,
358
+ });
359
+ return { stdout: result.stdout, stderr: result.stderr };
360
+ }
361
+ function isCodexProcess(command) {
362
+ return (/(?:^|\/)Codex\.app(?:\/|$)/u.test(command) ||
363
+ /(?:^|\s|\/)codex(?:\s|$)/u.test(command) ||
364
+ /(?:^|\s|\/)codex-cli(?:\s|$)/u.test(command) ||
365
+ /(?:^|\s)app-server(?:\s|$)/u.test(command));
366
+ }
367
+ export async function inspectCodexProcesses(dependencies = {}) {
368
+ if (!["darwin", "linux"].includes(process.platform) && dependencies.runPs === undefined) {
369
+ return {
370
+ status: "unknown",
371
+ pids: [],
372
+ reason: `Codex process inspection is unsupported on ${process.platform}`,
373
+ };
374
+ }
375
+ try {
376
+ const result = await (dependencies.runPs ?? defaultPsRunner)();
377
+ if (result.stderr.trim() !== "") {
378
+ return {
379
+ status: "unknown",
380
+ pids: [],
381
+ reason: `ps reported an incomplete scan: ${result.stderr.trim()}`,
382
+ };
383
+ }
384
+ const pids = result.stdout
385
+ .split("\n")
386
+ .map((line) => /^\s*(\d+)\s+(.+)$/u.exec(line))
387
+ .filter((match) => match !== null && isCodexProcess(match[2]))
388
+ .map((match) => Number.parseInt(match[1], 10))
389
+ .filter((pid) => pid !== process.pid)
390
+ .sort((left, right) => left - right);
391
+ return pids.length === 0 ? { status: "idle", pids: [] } : { status: "busy", pids };
392
+ }
393
+ catch (error) {
394
+ return {
395
+ status: "unknown",
396
+ pids: [],
397
+ reason: error instanceof Error ? error.message : String(error),
398
+ };
399
+ }
400
+ }
401
+ export function codexDatabaseContractMatches(identity) {
402
+ const contract = CODEX_DATABASE_CONTRACTS[identity.filename];
403
+ return (identity.database === contract.database &&
404
+ identity.migrationVersion === contract.migrationVersion &&
405
+ identity.migrationDigest === contract.migrationDigest &&
406
+ identity.schemaDigest === contract.schemaDigest &&
407
+ contract.requiredTables.every((table) => identity.tables.includes(table)));
408
+ }
409
+ //# sourceMappingURL=codex-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-database.js","sourceRoot":"","sources":["../../src/adapters/codex-database.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,35 @@
1
+ import type { AgentRinseConfig } from "../../config/schema.js";
1
2
  import type { AuditAdapter, AuditContext, CollectionResult } from "../../contracts/adapter.js";
2
3
  import type { Finding } from "../../contracts/finding.js";
3
4
  import type { AdapterProbe } from "../../contracts/report.js";
4
5
  import type { ResourceSnapshot } from "../../contracts/resource.js";
6
+ import { measurePath } from "../../core/measure.js";
7
+ import { type MountBoundaryResult } from "../../core/mount-boundaries.js";
5
8
  import { type ProcessOwnershipResult } from "../../core/process-ownership.js";
6
9
  import type { ReachabilityIndex } from "../../core/reachability.js";
7
10
  export type GitRunner = (args: string[]) => Promise<string>;
8
11
  export type GitPathExists = (path: string) => Promise<boolean>;
9
12
  export type GitProcessProbe = (path: string) => Promise<ProcessOwnershipResult>;
13
+ export type GitWorktreeOptions = AgentRinseConfig["audit"] & AgentRinseConfig["worktrees"] & {
14
+ platform: NodeJS.Platform;
15
+ };
16
+ export type GitWorktreeDependencies = {
17
+ measure?: typeof measurePath;
18
+ mountProbe?: (path: string) => Promise<MountBoundaryResult>;
19
+ };
10
20
  export declare class GitWorktreeAuditAdapter implements AuditAdapter {
11
21
  private readonly root;
12
22
  private readonly runGit;
13
23
  private readonly pathExists;
14
24
  private readonly processProbe;
15
25
  private readonly reachability?;
26
+ private readonly options;
27
+ private readonly dependencies;
16
28
  readonly id = "git";
17
- constructor(root: string | undefined, runGit?: GitRunner, pathExists?: GitPathExists, processProbe?: GitProcessProbe, reachability?: ReachabilityIndex | undefined);
29
+ constructor(root: string | undefined, runGit?: GitRunner, pathExists?: GitPathExists, processProbe?: GitProcessProbe, reachability?: ReachabilityIndex | undefined, options?: GitWorktreeOptions, dependencies?: GitWorktreeDependencies);
18
30
  probe(_context: AuditContext): Promise<AdapterProbe>;
19
31
  collect(context: AuditContext, probe: AdapterProbe): Promise<CollectionResult>;
20
32
  classify(context: AuditContext, resource: ResourceSnapshot): Promise<Finding>;
33
+ private actionFor;
21
34
  }
22
35
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/git/adapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE/F,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAcpE,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAkDhF,qBAAa,uBAAwB,YAAW,YAAY;IAIxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAPhC,QAAQ,CAAC,EAAE,SAAS;IAEpB,YACmB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,GAAE,SAA4B,EACpC,UAAU,GAAE,aAAiC,EAC7C,YAAY,GAAE,eAAwD,EACtE,YAAY,CAAC,EAAE,iBAAiB,YAAA,EAC/C;IAEE,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA6CzD;IAEK,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwLnF;IAEK,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoHlF;CACF"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/git/adapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG/F,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAoB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAUpE,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC,GACxD,gBAAgB,CAAC,WAAW,CAAC,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B,CAAC;AACJ,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC7D,CAAC;AA0DF,qBAAa,uBAAwB,YAAW,YAAY;IAIxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAT/B,QAAQ,CAAC,EAAE,SAAS;IAEpB,YACmB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,GAAE,SAA4B,EACpC,UAAU,GAAE,aAAiC,EAC7C,YAAY,GAAE,eAAwD,EACtE,YAAY,CAAC,EAAE,iBAAiB,YAAA,EAChC,OAAO,GAAE,kBAAoC,EAC7C,YAAY,GAAE,uBAA4B,EACzD;IAEE,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA6CzD;IAEK,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmOnF;IAEK,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0NlF;IAED,OAAO,CAAC,SAAS;CA8BlB"}