agentrinse 0.1.0 → 0.3.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 (160) hide show
  1. package/README.md +92 -13
  2. package/dist/adapters/artifacts/adapter.d.ts +3 -1
  3. package/dist/adapters/artifacts/adapter.d.ts.map +1 -1
  4. package/dist/adapters/artifacts/adapter.js +23 -1
  5. package/dist/adapters/artifacts/adapter.js.map +1 -1
  6. package/dist/adapters/git/adapter.d.ts +21 -1
  7. package/dist/adapters/git/adapter.d.ts.map +1 -1
  8. package/dist/adapters/git/adapter.js +414 -19
  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 +15 -0
  15. package/dist/adapters/git/status.d.ts.map +1 -0
  16. package/dist/adapters/git/status.js +87 -0
  17. package/dist/adapters/git/status.js.map +1 -0
  18. package/dist/adapters/provider-adapter.d.ts +3 -0
  19. package/dist/adapters/provider-adapter.d.ts.map +1 -1
  20. package/dist/adapters/provider-adapter.js +16 -0
  21. package/dist/adapters/provider-adapter.js.map +1 -1
  22. package/dist/adapters/provider-reachability.d.ts +6 -0
  23. package/dist/adapters/provider-reachability.d.ts.map +1 -0
  24. package/dist/adapters/provider-reachability.js +207 -0
  25. package/dist/adapters/provider-reachability.js.map +1 -0
  26. package/dist/adapters/provider-specs.d.ts +1 -1
  27. package/dist/adapters/provider-specs.d.ts.map +1 -1
  28. package/dist/adapters/registry.d.ts +8 -1
  29. package/dist/adapters/registry.d.ts.map +1 -1
  30. package/dist/adapters/registry.js +48 -4
  31. package/dist/adapters/registry.js.map +1 -1
  32. package/dist/adapters/runtime/adapter.d.ts +24 -0
  33. package/dist/adapters/runtime/adapter.d.ts.map +1 -0
  34. package/dist/adapters/runtime/adapter.js +319 -0
  35. package/dist/adapters/runtime/adapter.js.map +1 -0
  36. package/dist/commands/adapters.d.ts.map +1 -1
  37. package/dist/commands/adapters.js +1 -0
  38. package/dist/commands/adapters.js.map +1 -1
  39. package/dist/commands/apply.d.ts.map +1 -1
  40. package/dist/commands/apply.js +4 -0
  41. package/dist/commands/apply.js.map +1 -1
  42. package/dist/commands/clean.d.ts +63 -0
  43. package/dist/commands/clean.d.ts.map +1 -0
  44. package/dist/commands/clean.js +230 -0
  45. package/dist/commands/clean.js.map +1 -0
  46. package/dist/commands/completion.d.ts.map +1 -1
  47. package/dist/commands/completion.js +4 -1
  48. package/dist/commands/completion.js.map +1 -1
  49. package/dist/commands/confirmation.d.ts +6 -0
  50. package/dist/commands/confirmation.d.ts.map +1 -0
  51. package/dist/commands/confirmation.js +21 -0
  52. package/dist/commands/confirmation.js.map +1 -0
  53. package/dist/commands/doctor.d.ts.map +1 -1
  54. package/dist/commands/doctor.js +4 -2
  55. package/dist/commands/doctor.js.map +1 -1
  56. package/dist/commands/purge.d.ts +29 -0
  57. package/dist/commands/purge.d.ts.map +1 -0
  58. package/dist/commands/purge.js +168 -0
  59. package/dist/commands/purge.js.map +1 -0
  60. package/dist/commands/show.d.ts.map +1 -1
  61. package/dist/commands/show.js +14 -2
  62. package/dist/commands/show.js.map +1 -1
  63. package/dist/commands/undo.d.ts +21 -0
  64. package/dist/commands/undo.d.ts.map +1 -0
  65. package/dist/commands/undo.js +66 -0
  66. package/dist/commands/undo.js.map +1 -0
  67. package/dist/config/defaults.d.ts.map +1 -1
  68. package/dist/config/defaults.js +6 -0
  69. package/dist/config/defaults.js.map +1 -1
  70. package/dist/config/load.d.ts.map +1 -1
  71. package/dist/config/load.js +4 -0
  72. package/dist/config/load.js.map +1 -1
  73. package/dist/config/schema.d.ts +27 -0
  74. package/dist/config/schema.d.ts.map +1 -1
  75. package/dist/config/schema.js +66 -0
  76. package/dist/config/schema.js.map +1 -1
  77. package/dist/contracts/action.d.ts +59 -0
  78. package/dist/contracts/action.d.ts.map +1 -1
  79. package/dist/contracts/action.js +28 -1
  80. package/dist/contracts/action.js.map +1 -1
  81. package/dist/contracts/finding.d.ts +22 -0
  82. package/dist/contracts/finding.d.ts.map +1 -1
  83. package/dist/contracts/plan.d.ts +23 -0
  84. package/dist/contracts/plan.d.ts.map +1 -1
  85. package/dist/contracts/plan.js +20 -1
  86. package/dist/contracts/plan.js.map +1 -1
  87. package/dist/contracts/quarantine.d.ts +79 -0
  88. package/dist/contracts/quarantine.d.ts.map +1 -0
  89. package/dist/contracts/quarantine.js +60 -0
  90. package/dist/contracts/quarantine.js.map +1 -0
  91. package/dist/contracts/report.d.ts +22 -0
  92. package/dist/contracts/report.d.ts.map +1 -1
  93. package/dist/contracts/run.d.ts +133 -5
  94. package/dist/contracts/run.d.ts.map +1 -1
  95. package/dist/contracts/run.js +17 -3
  96. package/dist/contracts/run.js.map +1 -1
  97. package/dist/core/apply.d.ts +8 -1
  98. package/dist/core/apply.d.ts.map +1 -1
  99. package/dist/core/apply.js +138 -48
  100. package/dist/core/apply.js.map +1 -1
  101. package/dist/core/git-operation-state.d.ts +3 -0
  102. package/dist/core/git-operation-state.d.ts.map +1 -0
  103. package/dist/core/git-operation-state.js +23 -0
  104. package/dist/core/git-operation-state.js.map +1 -0
  105. package/dist/core/measure.d.ts +1 -0
  106. package/dist/core/measure.d.ts.map +1 -1
  107. package/dist/core/measure.js +3 -0
  108. package/dist/core/measure.js.map +1 -1
  109. package/dist/core/no-clobber-rename.d.ts +2 -0
  110. package/dist/core/no-clobber-rename.d.ts.map +1 -0
  111. package/dist/core/no-clobber-rename.js +58 -0
  112. package/dist/core/no-clobber-rename.js.map +1 -0
  113. package/dist/core/plan.d.ts.map +1 -1
  114. package/dist/core/plan.js +1 -0
  115. package/dist/core/plan.js.map +1 -1
  116. package/dist/core/reachability.d.ts +29 -0
  117. package/dist/core/reachability.d.ts.map +1 -0
  118. package/dist/core/reachability.js +121 -0
  119. package/dist/core/reachability.js.map +1 -0
  120. package/dist/core/worktree-executor.d.ts +51 -0
  121. package/dist/core/worktree-executor.d.ts.map +1 -0
  122. package/dist/core/worktree-executor.js +676 -0
  123. package/dist/core/worktree-executor.js.map +1 -0
  124. package/dist/core/worktree-lock.d.ts +15 -0
  125. package/dist/core/worktree-lock.d.ts.map +1 -0
  126. package/dist/core/worktree-lock.js +139 -0
  127. package/dist/core/worktree-lock.js.map +1 -0
  128. package/dist/core/worktree-recovery.d.ts +37 -0
  129. package/dist/core/worktree-recovery.d.ts.map +1 -0
  130. package/dist/core/worktree-recovery.js +1018 -0
  131. package/dist/core/worktree-recovery.js.map +1 -0
  132. package/dist/core/worktree-revalidation.d.ts +25 -0
  133. package/dist/core/worktree-revalidation.d.ts.map +1 -0
  134. package/dist/core/worktree-revalidation.js +107 -0
  135. package/dist/core/worktree-revalidation.js.map +1 -0
  136. package/dist/index.d.ts +3 -2
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +3 -2
  139. package/dist/index.js.map +1 -1
  140. package/dist/main.d.ts.map +1 -1
  141. package/dist/main.js +85 -0
  142. package/dist/main.js.map +1 -1
  143. package/dist/state/layout.d.ts +1 -0
  144. package/dist/state/layout.d.ts.map +1 -1
  145. package/dist/state/layout.js +1 -0
  146. package/dist/state/layout.js.map +1 -1
  147. package/dist/state/records.d.ts +6 -0
  148. package/dist/state/records.d.ts.map +1 -1
  149. package/dist/state/records.js +9 -1
  150. package/dist/state/records.js.map +1 -1
  151. package/dist/state/run-journal.d.ts.map +1 -1
  152. package/dist/state/run-journal.js +3 -0
  153. package/dist/state/run-journal.js.map +1 -1
  154. package/dist/version.d.ts +1 -1
  155. package/dist/version.js +1 -1
  156. package/package.json +2 -1
  157. package/schemas/audit.schema.json +112 -0
  158. package/schemas/plan.schema.json +117 -0
  159. package/schemas/quarantine.schema.json +238 -0
  160. package/schemas/run.schema.json +152 -54
@@ -1,10 +1,23 @@
1
1
  import { execFile } from "node:child_process";
2
- import { lstat } from "node:fs/promises";
3
- import { resolve } from "node:path";
2
+ import { lstat, realpath } from "node:fs/promises";
3
+ import { basename, resolve } from "node:path";
4
4
  import { promisify } from "node:util";
5
5
  import { sha256 } from "../../core/digest.js";
6
+ import { findGitOperations } from "../../core/git-operation-state.js";
7
+ import { measurePath } from "../../core/measure.js";
8
+ import { findMountBoundaries } from "../../core/mount-boundaries.js";
9
+ import { findProcessesUsingPath, } from "../../core/process-ownership.js";
6
10
  import { parseWorktreePorcelain } from "./porcelain.js";
11
+ import { listGitRefsForCommit } from "./refs.js";
12
+ import { countStatusSuppressedIndexEntries, parseGitStatusPorcelainV2, } from "./status.js";
7
13
  const execFileAsync = promisify(execFile);
14
+ const DEFAULT_OPTIONS = {
15
+ maxEntries: 100_000,
16
+ measureBytes: true,
17
+ minAgeMinutes: 14 * 24 * 60,
18
+ quarantineTtlMinutes: 7 * 24 * 60,
19
+ platform: process.platform,
20
+ };
8
21
  async function defaultGitRunner(args) {
9
22
  const result = await execFileAsync("git", args, {
10
23
  encoding: "utf8",
@@ -16,13 +29,53 @@ async function defaultGitRunner(args) {
16
29
  function isMissing(error) {
17
30
  return (error instanceof Error && "code" in error && error.code === "ENOENT");
18
31
  }
32
+ async function defaultPathExists(path) {
33
+ try {
34
+ await lstat(path);
35
+ return true;
36
+ }
37
+ catch (error) {
38
+ if (isMissing(error)) {
39
+ return false;
40
+ }
41
+ throw error;
42
+ }
43
+ }
44
+ function lines(input) {
45
+ return input
46
+ .split("\n")
47
+ .map((line) => line.trim())
48
+ .filter((line) => line !== "");
49
+ }
50
+ function branchRef(branch) {
51
+ if (branch === undefined) {
52
+ return undefined;
53
+ }
54
+ return branch.startsWith("refs/") ? branch : `refs/heads/${branch}`;
55
+ }
56
+ function upstreamRef(upstream) {
57
+ if (upstream === undefined) {
58
+ return undefined;
59
+ }
60
+ return upstream.startsWith("refs/") ? upstream : `refs/remotes/${upstream}`;
61
+ }
19
62
  export class GitWorktreeAuditAdapter {
20
63
  root;
21
64
  runGit;
65
+ pathExists;
66
+ processProbe;
67
+ reachability;
68
+ options;
69
+ dependencies;
22
70
  id = "git";
23
- constructor(root, runGit = defaultGitRunner) {
71
+ constructor(root, runGit = defaultGitRunner, pathExists = defaultPathExists, processProbe = (path) => findProcessesUsingPath(path), reachability, options = DEFAULT_OPTIONS, dependencies = {}) {
24
72
  this.root = root;
25
73
  this.runGit = runGit;
74
+ this.pathExists = pathExists;
75
+ this.processProbe = processProbe;
76
+ this.reachability = reachability;
77
+ this.options = options;
78
+ this.dependencies = dependencies;
26
79
  }
27
80
  async probe(_context) {
28
81
  if (this.root === undefined) {
@@ -70,11 +123,14 @@ export class GitWorktreeAuditAdapter {
70
123
  }
71
124
  async collect(context, probe) {
72
125
  if (probe.status !== "available" || probe.root === undefined) {
126
+ this.reachability?.protectUnresolvedGitRefs(context.now.toISOString());
73
127
  return { resources: [], diagnostics: [] };
74
128
  }
75
129
  const output = await this.runGit(["-C", probe.root, "worktree", "list", "--porcelain", "-z"]);
76
130
  const records = parseWorktreePorcelain(output);
131
+ const mainWorktreePath = records[0] === undefined ? undefined : resolve(records[0].path);
77
132
  const resources = [];
133
+ const diagnostics = [];
78
134
  for (const record of records) {
79
135
  let exists = true;
80
136
  try {
@@ -87,31 +143,181 @@ export class GitWorktreeAuditAdapter {
87
143
  }
88
144
  exists = false;
89
145
  }
90
- const canonicalKey = `git:git-worktree:${resolve(record.path)}`;
146
+ const worktreePath = resolve(record.path);
147
+ const canonicalKey = `git:git-worktree:${worktreePath}`;
148
+ let inspectionComplete = exists;
149
+ let status;
150
+ let containingRefs = [];
151
+ let gitRefs = [];
152
+ let gitRefInspectionComplete = false;
153
+ let remotes = [];
154
+ let repositoryCommonDir;
155
+ let measurement;
156
+ let mountBoundaries = {
157
+ status: "unknown",
158
+ paths: [],
159
+ reason: "worktree does not exist",
160
+ };
161
+ let hasSubmodules = false;
162
+ let statusSuppressedEntries = 0;
163
+ let stats;
164
+ const operations = new Set();
165
+ let processOwnership = {
166
+ status: "unknown",
167
+ matches: [],
168
+ reason: "worktree does not exist",
169
+ };
170
+ if (exists) {
171
+ try {
172
+ stats = await lstat(worktreePath);
173
+ await realpath(worktreePath);
174
+ status = parseGitStatusPorcelainV2(await this.runGit([
175
+ "-C",
176
+ worktreePath,
177
+ "status",
178
+ "--porcelain=v2",
179
+ "--branch",
180
+ "-z",
181
+ "--untracked-files=all",
182
+ "--ignored=matching",
183
+ ]));
184
+ remotes = lines(await this.runGit(["-C", worktreePath, "remote"]));
185
+ const commonDirOutput = (await this.runGit([
186
+ "-C",
187
+ worktreePath,
188
+ "rev-parse",
189
+ "--path-format=absolute",
190
+ "--git-common-dir",
191
+ ])).trim();
192
+ repositoryCommonDir = resolve(worktreePath, commonDirOutput);
193
+ hasSubmodules = (await this.runGit(["-C", worktreePath, "ls-files", "-z", "--stage"]))
194
+ .split("\0")
195
+ .some((entry) => entry.startsWith("160000 "));
196
+ statusSuppressedEntries = countStatusSuppressedIndexEntries(await this.runGit(["-C", worktreePath, "ls-files", "-z", "-v"]));
197
+ if (this.options.measureBytes) {
198
+ measurement = await (this.dependencies.measure ?? measurePath)(worktreePath, {
199
+ maxEntries: this.options.maxEntries,
200
+ excludeRootEntries: [".git"],
201
+ ...(context.signal === undefined ? {} : { signal: context.signal }),
202
+ });
203
+ }
204
+ mountBoundaries = await (this.dependencies.mountProbe ?? findMountBoundaries)(worktreePath);
205
+ const head = status.head ?? record.head;
206
+ if (head !== undefined) {
207
+ const refs = await listGitRefsForCommit((args) => this.runGit(["-C", worktreePath, ...args]), head);
208
+ containingRefs = refs.containingRefs;
209
+ gitRefs = [
210
+ record.branch,
211
+ branchRef(status.branch),
212
+ upstreamRef(status.upstream),
213
+ ...refs.gitRefs,
214
+ ]
215
+ .filter((value) => value !== undefined)
216
+ .filter((value, index, values) => values.indexOf(value) === index)
217
+ .sort();
218
+ gitRefInspectionComplete = true;
219
+ }
220
+ for (const operation of await findGitOperations(worktreePath, this.runGit, this.pathExists)) {
221
+ operations.add(operation);
222
+ }
223
+ processOwnership = await this.processProbe(worktreePath);
224
+ if (processOwnership.status === "unknown" ||
225
+ repositoryCommonDir === undefined ||
226
+ stats === undefined) {
227
+ inspectionComplete = false;
228
+ }
229
+ }
230
+ catch (error) {
231
+ inspectionComplete = false;
232
+ diagnostics.push({
233
+ severity: "warning",
234
+ code: "GIT_WORKTREE_INSPECTION_FAILED",
235
+ message: error instanceof Error ? error.message : String(error),
236
+ adapter: this.id,
237
+ });
238
+ }
239
+ }
240
+ this.reachability?.bindGitRefsToPath(worktreePath, gitRefs, context.now.toISOString(), gitRefInspectionComplete);
241
+ const localReachable = containingRefs.some((ref) => ref.startsWith("refs/heads/"));
242
+ const remoteReachable = containingRefs.some((ref) => ref.startsWith("refs/remotes/"));
243
+ const remoteConfigured = remotes.length > 0;
244
+ const ahead = status?.ahead ?? 0;
245
+ const staged = status?.staged ?? 0;
246
+ const modified = status?.modified ?? 0;
247
+ const untracked = status?.untracked ?? 0;
248
+ const conflicted = status?.conflicted ?? 0;
249
+ const ignored = status?.ignored ?? 0;
91
250
  resources.push({
92
251
  resource: {
93
252
  id: `git:git-worktree:${sha256(canonicalKey)}`,
94
253
  adapter: this.id,
95
254
  kind: "git-worktree",
96
255
  canonicalKey,
97
- displayName: record.path === probe.root ? "Main worktree" : "Linked worktree",
98
- path: resolve(record.path),
256
+ displayName: worktreePath === mainWorktreePath ? "Main worktree" : "Linked worktree",
257
+ path: worktreePath,
99
258
  },
100
259
  observedAt: context.now.toISOString(),
101
260
  exists,
102
261
  facts: {
103
- isMain: resolve(record.path) === resolve(probe.root),
104
- head: record.head,
105
- branch: record.branch,
262
+ isMain: worktreePath === mainWorktreePath,
263
+ head: status?.head ?? record.head,
264
+ branch: status?.branch ?? record.branch,
265
+ upstream: status?.upstream,
266
+ gitRefs,
106
267
  detached: record.detached,
107
268
  bare: record.bare,
108
269
  locked: record.locked,
109
270
  prunable: record.prunable,
271
+ repositoryCommonDir,
272
+ device: stats?.dev,
273
+ inode: stats?.ino,
274
+ mtimeMs: stats?.mtimeMs,
275
+ newestMtimeMs: measurement?.newestMtimeMs,
276
+ fingerprint: measurement?.fingerprint,
277
+ measurementTruncated: measurement?.truncated ?? !this.options.measureBytes,
278
+ specialEntries: measurement?.specialEntries,
279
+ mountBoundaries: measurement?.mountBoundaries,
280
+ mountBoundaryStatus: mountBoundaries.status,
281
+ mountBoundaryPaths: mountBoundaries.paths,
282
+ mountBoundaryReason: mountBoundaries.status === "unknown" ? mountBoundaries.reason : undefined,
283
+ ageMinutes: measurement === undefined
284
+ ? undefined
285
+ : Math.max(0, (context.now.getTime() - measurement.newestMtimeMs) / 60_000),
286
+ hasSubmodules,
287
+ platform: this.options.platform,
288
+ staged,
289
+ modified,
290
+ untracked,
291
+ conflicted,
292
+ ignored,
293
+ statusSuppressedEntries,
294
+ dirty: staged + modified + untracked + conflicted + ignored > 0,
295
+ ahead,
296
+ behind: status?.behind ?? 0,
297
+ operations: [...operations].sort(),
298
+ processOwnership: processOwnership.status,
299
+ processMatches: processOwnership.status === "busy"
300
+ ? processOwnership.matches.map((match) => ({
301
+ pid: match.pid,
302
+ source: match.source,
303
+ }))
304
+ : [],
305
+ processReason: processOwnership.status === "unknown" ? processOwnership.reason : undefined,
306
+ localReachable,
307
+ remoteReachable,
308
+ remoteConfigured,
309
+ unpushed: ahead > 0 || (remoteConfigured && localReachable && !remoteReachable),
310
+ remoteProof: remoteConfigured ? "local-remote-tracking-refs" : "unavailable",
311
+ inspectionComplete,
110
312
  reportOnly: true,
111
313
  },
314
+ ...(measurement === undefined ? {} : { measuredBytes: measurement.bytes }),
112
315
  });
113
316
  }
114
- return { resources, diagnostics: [] };
317
+ if (records.length === 0) {
318
+ this.reachability?.protectUnresolvedGitRefs(context.now.toISOString());
319
+ }
320
+ return { resources, diagnostics };
115
321
  }
116
322
  async classify(context, resource) {
117
323
  const observedAt = context.now.toISOString();
@@ -124,6 +330,22 @@ export class GitWorktreeAuditAdapter {
124
330
  detail: "The main worktree is always protected.",
125
331
  });
126
332
  }
333
+ if (!["darwin", "linux"].includes(String(resource.facts.platform))) {
334
+ roots.push({
335
+ code: "worktree-mutation-unsupported",
336
+ source: "git",
337
+ observedAt,
338
+ detail: "Recoverable worktree quarantine is supported only on macOS and Linux.",
339
+ });
340
+ }
341
+ if (resource.facts.bare === true || resource.facts.prunable !== undefined) {
342
+ roots.push({
343
+ code: "worktree-registration-unsafe",
344
+ source: "git",
345
+ observedAt,
346
+ detail: "Bare or prunable worktree registrations are not quarantine candidates.",
347
+ });
348
+ }
127
349
  if (resource.facts.locked !== undefined) {
128
350
  roots.push({
129
351
  code: "git-lock",
@@ -132,25 +354,198 @@ export class GitWorktreeAuditAdapter {
132
354
  detail: "Git reports this worktree as locked.",
133
355
  });
134
356
  }
135
- roots.push({
136
- code: "git-audit-only",
137
- source: "git",
138
- observedAt,
139
- detail: "The Git adapter does not yet prove dirty, process, session, or push state.",
140
- });
357
+ if (resource.facts.dirty === true) {
358
+ roots.push({
359
+ code: "dirty-worktree",
360
+ source: "git",
361
+ observedAt,
362
+ detail: "Git reports staged, modified, conflicted, untracked, or ignored work.",
363
+ });
364
+ }
365
+ if (typeof resource.facts.statusSuppressedEntries === "number" &&
366
+ resource.facts.statusSuppressedEntries > 0) {
367
+ roots.push({
368
+ code: "git-status-suppressed",
369
+ source: "git",
370
+ observedAt,
371
+ detail: "Git index flags suppress status visibility for one or more tracked paths.",
372
+ });
373
+ }
374
+ if (Array.isArray(resource.facts.operations) && resource.facts.operations.length > 0) {
375
+ roots.push({
376
+ code: "git-operation-in-progress",
377
+ source: "git",
378
+ observedAt,
379
+ detail: `Git operation in progress: ${resource.facts.operations.join(", ")}.`,
380
+ });
381
+ }
382
+ if (resource.facts.unpushed === true) {
383
+ roots.push({
384
+ code: "unpushed-commit",
385
+ source: "git",
386
+ observedAt,
387
+ detail: "The worktree HEAD is ahead of or absent from local remote-tracking refs.",
388
+ });
389
+ }
390
+ if (resource.facts.processOwnership === "busy") {
391
+ roots.push({
392
+ code: "live-process-worktree",
393
+ source: "process",
394
+ observedAt,
395
+ detail: "A live process has its CWD or an open file inside this worktree.",
396
+ });
397
+ }
398
+ if (resource.facts.processOwnership === "unknown") {
399
+ roots.push({
400
+ code: "process-ownership-incomplete",
401
+ source: "process",
402
+ observedAt,
403
+ detail: "Live process ownership could not be proven completely.",
404
+ });
405
+ }
406
+ if (resource.facts.remoteConfigured !== true) {
407
+ roots.push({
408
+ code: "unknown-remote",
409
+ source: "git",
410
+ observedAt,
411
+ detail: "No configured remote is available for reachability proof.",
412
+ });
413
+ }
414
+ if (resource.facts.detached === true) {
415
+ roots.push({
416
+ code: "detached-worktree",
417
+ source: "git",
418
+ observedAt,
419
+ detail: "Detached worktrees are outside the 0.3 quarantine boundary.",
420
+ });
421
+ }
422
+ if (resource.resource.path !== undefined &&
423
+ basename(resource.resource.path) === ".agentrinse-quarantine") {
424
+ roots.push({
425
+ code: "worktree-quarantine-path-reserved",
426
+ source: "git",
427
+ observedAt,
428
+ detail: "A worktree cannot use AgentRinse's reserved quarantine container path.",
429
+ });
430
+ }
431
+ if (typeof resource.facts.head !== "string" ||
432
+ typeof resource.facts.branch !== "string" ||
433
+ typeof resource.facts.repositoryCommonDir !== "string") {
434
+ roots.push({
435
+ code: "worktree-identity-incomplete",
436
+ source: "git",
437
+ observedAt,
438
+ detail: "Worktree HEAD, branch, or common Git directory could not be proven.",
439
+ });
440
+ }
441
+ if (resource.facts.hasSubmodules === true) {
442
+ roots.push({
443
+ code: "worktree-submodules",
444
+ source: "git",
445
+ observedAt,
446
+ detail: "Worktrees containing gitlink entries are not quarantine candidates.",
447
+ });
448
+ }
449
+ if (resource.measuredBytes === undefined ||
450
+ resource.facts.measurementTruncated === true ||
451
+ typeof resource.facts.fingerprint !== "string") {
452
+ roots.push({
453
+ code: "worktree-measurement-incomplete",
454
+ source: "git",
455
+ observedAt,
456
+ detail: "Worktree contents could not be measured completely.",
457
+ });
458
+ }
459
+ if ((typeof resource.facts.specialEntries === "number" && resource.facts.specialEntries > 0) ||
460
+ (typeof resource.facts.mountBoundaries === "number" && resource.facts.mountBoundaries > 0) ||
461
+ resource.facts.mountBoundaryStatus === "blocked") {
462
+ roots.push({
463
+ code: "worktree-filesystem-boundary",
464
+ source: "git",
465
+ observedAt,
466
+ detail: "Worktree contents include an unsupported filesystem entry or mount boundary.",
467
+ });
468
+ }
469
+ if (resource.facts.mountBoundaryStatus !== "clear") {
470
+ roots.push({
471
+ code: "worktree-mount-inspection-incomplete",
472
+ source: "git",
473
+ observedAt,
474
+ detail: "Filesystem mount boundaries could not be proven absent.",
475
+ });
476
+ }
477
+ if (typeof resource.facts.ageMinutes !== "number" ||
478
+ resource.facts.ageMinutes < this.options.minAgeMinutes) {
479
+ roots.push({
480
+ code: "recent-resource",
481
+ source: "git",
482
+ observedAt,
483
+ detail: `Worktree is newer than ${this.options.minAgeMinutes} minutes.`,
484
+ });
485
+ }
486
+ if (resource.facts.inspectionComplete !== true) {
487
+ roots.push({
488
+ code: "git-inspection-incomplete",
489
+ source: "git",
490
+ observedAt,
491
+ detail: "Git state or reachability could not be proven completely.",
492
+ });
493
+ }
494
+ roots.push(...(this.reachability?.rootsForResource(resource.resource, resource.facts, observedAt) ?? []));
495
+ roots.sort((left, right) => left.code.localeCompare(right.code));
496
+ const eligible = resource.exists && roots.length === 0;
497
+ const candidateActions = eligible ? [this.actionFor(resource)] : [];
141
498
  return {
142
499
  schemaVersion: 1,
143
500
  findingId: `${resource.resource.id}:${sha256(context.auditId)}`,
144
501
  auditId: context.auditId,
145
502
  observedAt,
146
503
  resource: resource.resource,
147
- state: resource.exists ? "protected" : "unknown",
148
- confidence: resource.exists ? "certain" : "unknown",
504
+ state: eligible
505
+ ? "eligible"
506
+ : resource.exists && resource.facts.inspectionComplete === true
507
+ ? "protected"
508
+ : "unknown",
509
+ confidence: resource.exists && resource.facts.inspectionComplete === true ? "certain" : "unknown",
149
510
  roots,
150
511
  facts: resource.facts,
151
- candidateActions: [],
512
+ candidateActions,
513
+ ...(resource.measuredBytes === undefined
514
+ ? {}
515
+ : {
516
+ measuredBytes: resource.measuredBytes,
517
+ estimatedReclaimBytes: 0,
518
+ }),
152
519
  warnings: [],
153
520
  };
154
521
  }
522
+ actionFor(resource) {
523
+ const facts = resource.facts;
524
+ const branch = typeof facts.branch === "string" ? (branchRef(facts.branch) ?? facts.branch) : undefined;
525
+ const target = {
526
+ path: resource.resource.path,
527
+ repositoryCommonDir: String(facts.repositoryCommonDir),
528
+ head: String(facts.head),
529
+ ...(branch === undefined ? {} : { branch }),
530
+ device: Number(facts.device),
531
+ inode: Number(facts.inode),
532
+ mtimeMs: Number(facts.mtimeMs),
533
+ measuredBytes: resource.measuredBytes,
534
+ newestMtimeMs: Number(facts.newestMtimeMs),
535
+ fingerprint: String(facts.fingerprint),
536
+ };
537
+ return {
538
+ actionId: `worktree.quarantine:${sha256(JSON.stringify(target))}`,
539
+ type: "worktree.quarantine",
540
+ adapter: "git",
541
+ resourceId: resource.resource.id,
542
+ risk: "recoverable",
543
+ description: `Quarantine inactive linked worktree ${target.path}`,
544
+ expectedReclaimBytes: 0,
545
+ pendingQuarantineBytes: target.measuredBytes,
546
+ quarantineTtlMinutes: this.options.quarantineTtlMinutes,
547
+ target,
548
+ };
549
+ }
155
550
  }
156
551
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/git/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/git/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type RepositoryGitRunner = (args: string[]) => Promise<string>;
2
+ export declare function listGitRefsForCommit(runGit: RepositoryGitRunner, head: string): Promise<{
3
+ containingRefs: string[];
4
+ gitRefs: string[];
5
+ }>;
6
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../../src/adapters/git/refs.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAStE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgB1D"}
@@ -0,0 +1,24 @@
1
+ function lines(output) {
2
+ return output
3
+ .split(/\r?\n/u)
4
+ .map((line) => line.trim())
5
+ .filter((line) => line.length > 0);
6
+ }
7
+ export async function listGitRefsForCommit(runGit, head) {
8
+ const [containingRefs, tagRefs] = await Promise.all([
9
+ runGit([
10
+ "for-each-ref",
11
+ "--contains",
12
+ head,
13
+ "--format=%(refname)",
14
+ "refs/heads",
15
+ "refs/remotes",
16
+ ]).then(lines),
17
+ runGit(["for-each-ref", "--points-at", head, "--format=%(refname)", "refs/tags"]).then(lines),
18
+ ]);
19
+ return {
20
+ containingRefs,
21
+ gitRefs: [...new Set([...containingRefs, ...tagRefs])].sort(),
22
+ };
23
+ }
24
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../../src/adapters/git/refs.ts"],"names":[],"mappings":"AAEA,SAAS,KAAK,CAAC,MAAc;IAC3B,OAAO,MAAM;SACV,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA2B,EAC3B,IAAY;IAEZ,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,MAAM,CAAC;YACL,cAAc;YACd,YAAY;YACZ,IAAI;YACJ,qBAAqB;YACrB,YAAY;YACZ,cAAc;SACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACd,MAAM,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;KAC9F,CAAC,CAAC;IACH,OAAO;QACL,cAAc;QACd,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAC9D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type GitStatusFacts = {
2
+ head?: string;
3
+ branch?: string;
4
+ upstream?: string;
5
+ ahead: number;
6
+ behind: number;
7
+ staged: number;
8
+ modified: number;
9
+ untracked: number;
10
+ conflicted: number;
11
+ ignored: number;
12
+ };
13
+ export declare function parseGitStatusPorcelainV2(input: string): GitStatusFacts;
14
+ export declare function countStatusSuppressedIndexEntries(input: string): number;
15
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/adapters/git/status.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AASF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CA2EvE;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQvE"}