agentrinse 0.0.0 → 0.2.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 (173) hide show
  1. package/README.md +165 -83
  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 +8 -1
  7. package/dist/adapters/git/adapter.d.ts.map +1 -1
  8. package/dist/adapters/git/adapter.js +247 -13
  9. package/dist/adapters/git/adapter.js.map +1 -1
  10. package/dist/adapters/git/status.d.ts +14 -0
  11. package/dist/adapters/git/status.d.ts.map +1 -0
  12. package/dist/adapters/git/status.js +81 -0
  13. package/dist/adapters/git/status.js.map +1 -0
  14. package/dist/adapters/provider-adapter.d.ts +3 -0
  15. package/dist/adapters/provider-adapter.d.ts.map +1 -1
  16. package/dist/adapters/provider-adapter.js +16 -0
  17. package/dist/adapters/provider-adapter.js.map +1 -1
  18. package/dist/adapters/provider-reachability.d.ts +6 -0
  19. package/dist/adapters/provider-reachability.d.ts.map +1 -0
  20. package/dist/adapters/provider-reachability.js +207 -0
  21. package/dist/adapters/provider-reachability.js.map +1 -0
  22. package/dist/adapters/provider-specs.d.ts +1 -1
  23. package/dist/adapters/provider-specs.d.ts.map +1 -1
  24. package/dist/adapters/registry.d.ts +7 -1
  25. package/dist/adapters/registry.d.ts.map +1 -1
  26. package/dist/adapters/registry.js +44 -4
  27. package/dist/adapters/registry.js.map +1 -1
  28. package/dist/adapters/runtime/adapter.d.ts +24 -0
  29. package/dist/adapters/runtime/adapter.d.ts.map +1 -0
  30. package/dist/adapters/runtime/adapter.js +319 -0
  31. package/dist/adapters/runtime/adapter.js.map +1 -0
  32. package/dist/cli.js +2 -1
  33. package/dist/cli.js.map +1 -1
  34. package/dist/commands/adapters.d.ts.map +1 -1
  35. package/dist/commands/adapters.js +1 -0
  36. package/dist/commands/adapters.js.map +1 -1
  37. package/dist/commands/apply.d.ts +6 -0
  38. package/dist/commands/apply.d.ts.map +1 -1
  39. package/dist/commands/apply.js +37 -13
  40. package/dist/commands/apply.js.map +1 -1
  41. package/dist/commands/audit.d.ts +7 -1
  42. package/dist/commands/audit.d.ts.map +1 -1
  43. package/dist/commands/audit.js +103 -12
  44. package/dist/commands/audit.js.map +1 -1
  45. package/dist/commands/clean.d.ts +61 -0
  46. package/dist/commands/clean.d.ts.map +1 -0
  47. package/dist/commands/clean.js +224 -0
  48. package/dist/commands/clean.js.map +1 -0
  49. package/dist/commands/completion.d.ts +4 -0
  50. package/dist/commands/completion.d.ts.map +1 -0
  51. package/dist/commands/completion.js +95 -0
  52. package/dist/commands/completion.js.map +1 -0
  53. package/dist/commands/config.d.ts +17 -0
  54. package/dist/commands/config.d.ts.map +1 -0
  55. package/dist/commands/config.js +41 -0
  56. package/dist/commands/config.js.map +1 -0
  57. package/dist/commands/doctor.d.ts +28 -0
  58. package/dist/commands/doctor.d.ts.map +1 -0
  59. package/dist/commands/doctor.js +582 -0
  60. package/dist/commands/doctor.js.map +1 -0
  61. package/dist/commands/history.d.ts +15 -0
  62. package/dist/commands/history.d.ts.map +1 -0
  63. package/dist/commands/history.js +30 -0
  64. package/dist/commands/history.js.map +1 -0
  65. package/dist/commands/lock.d.ts +21 -0
  66. package/dist/commands/lock.d.ts.map +1 -0
  67. package/dist/commands/lock.js +43 -0
  68. package/dist/commands/lock.js.map +1 -0
  69. package/dist/commands/plan.d.ts +2 -0
  70. package/dist/commands/plan.d.ts.map +1 -1
  71. package/dist/commands/plan.js +9 -2
  72. package/dist/commands/plan.js.map +1 -1
  73. package/dist/commands/show.d.ts +20 -0
  74. package/dist/commands/show.d.ts.map +1 -0
  75. package/dist/commands/show.js +54 -0
  76. package/dist/commands/show.js.map +1 -0
  77. package/dist/config/defaults.d.ts.map +1 -1
  78. package/dist/config/defaults.js +2 -0
  79. package/dist/config/defaults.js.map +1 -1
  80. package/dist/config/load.d.ts +6 -0
  81. package/dist/config/load.d.ts.map +1 -1
  82. package/dist/config/load.js +25 -0
  83. package/dist/config/load.js.map +1 -1
  84. package/dist/config/path.d.ts +5 -0
  85. package/dist/config/path.d.ts.map +1 -0
  86. package/dist/config/path.js +13 -0
  87. package/dist/config/path.js.map +1 -0
  88. package/dist/config/schema.d.ts +23 -0
  89. package/dist/config/schema.d.ts.map +1 -1
  90. package/dist/config/schema.js +48 -0
  91. package/dist/config/schema.js.map +1 -1
  92. package/dist/contracts/doctor.d.ts +35 -0
  93. package/dist/contracts/doctor.d.ts.map +1 -0
  94. package/dist/contracts/doctor.js +15 -0
  95. package/dist/contracts/doctor.js.map +1 -0
  96. package/dist/contracts/output.d.ts +50 -0
  97. package/dist/contracts/output.d.ts.map +1 -0
  98. package/dist/contracts/output.js +23 -0
  99. package/dist/contracts/output.js.map +1 -0
  100. package/dist/contracts/run.d.ts +2 -0
  101. package/dist/contracts/run.d.ts.map +1 -1
  102. package/dist/contracts/run.js +1 -1
  103. package/dist/contracts/run.js.map +1 -1
  104. package/dist/core/apply.d.ts +1 -0
  105. package/dist/core/apply.d.ts.map +1 -1
  106. package/dist/core/apply.js +46 -3
  107. package/dist/core/apply.js.map +1 -1
  108. package/dist/core/audit.d.ts +21 -0
  109. package/dist/core/audit.d.ts.map +1 -1
  110. package/dist/core/audit.js +31 -1
  111. package/dist/core/audit.js.map +1 -1
  112. package/dist/core/duration.d.ts +2 -0
  113. package/dist/core/duration.d.ts.map +1 -0
  114. package/dist/core/duration.js +21 -0
  115. package/dist/core/duration.js.map +1 -0
  116. package/dist/core/interruption.d.ts +5 -0
  117. package/dist/core/interruption.d.ts.map +1 -0
  118. package/dist/core/interruption.js +5 -0
  119. package/dist/core/interruption.js.map +1 -0
  120. package/dist/core/process-identity.d.ts +24 -0
  121. package/dist/core/process-identity.d.ts.map +1 -0
  122. package/dist/core/process-identity.js +104 -0
  123. package/dist/core/process-identity.js.map +1 -0
  124. package/dist/core/reachability.d.ts +29 -0
  125. package/dist/core/reachability.d.ts.map +1 -0
  126. package/dist/core/reachability.js +121 -0
  127. package/dist/core/reachability.js.map +1 -0
  128. package/dist/core/redaction.d.ts +4 -0
  129. package/dist/core/redaction.d.ts.map +1 -0
  130. package/dist/core/redaction.js +91 -0
  131. package/dist/core/redaction.js.map +1 -0
  132. package/dist/core/safety.d.ts +8 -0
  133. package/dist/core/safety.d.ts.map +1 -1
  134. package/dist/core/safety.js +29 -1
  135. package/dist/core/safety.js.map +1 -1
  136. package/dist/index.d.ts +3 -1
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +2 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/machine-output.d.ts +21 -0
  141. package/dist/machine-output.d.ts.map +1 -0
  142. package/dist/machine-output.js +32 -0
  143. package/dist/machine-output.js.map +1 -0
  144. package/dist/main.d.ts.map +1 -1
  145. package/dist/main.js +232 -7
  146. package/dist/main.js.map +1 -1
  147. package/dist/state/json-file.d.ts +6 -1
  148. package/dist/state/json-file.d.ts.map +1 -1
  149. package/dist/state/json-file.js +34 -3
  150. package/dist/state/json-file.js.map +1 -1
  151. package/dist/state/layout.d.ts +2 -0
  152. package/dist/state/layout.d.ts.map +1 -1
  153. package/dist/state/layout.js +2 -0
  154. package/dist/state/layout.js.map +1 -1
  155. package/dist/state/lock.d.ts +54 -1
  156. package/dist/state/lock.d.ts.map +1 -1
  157. package/dist/state/lock.js +237 -33
  158. package/dist/state/lock.js.map +1 -1
  159. package/dist/state/records.d.ts +5 -0
  160. package/dist/state/records.d.ts.map +1 -0
  161. package/dist/state/records.js +35 -0
  162. package/dist/state/records.js.map +1 -0
  163. package/dist/state/run-journal.d.ts +3 -1
  164. package/dist/state/run-journal.d.ts.map +1 -1
  165. package/dist/state/run-journal.js +15 -4
  166. package/dist/state/run-journal.js.map +1 -1
  167. package/dist/version.d.ts +1 -1
  168. package/dist/version.js +1 -1
  169. package/package.json +3 -2
  170. package/schemas/command-envelope.schema.json +78 -0
  171. package/schemas/command-event.schema.json +36 -0
  172. package/schemas/doctor.schema.json +51 -0
  173. package/schemas/run.schema.json +1 -1
@@ -0,0 +1,21 @@
1
+ import { type ApplyLockOwner, type ApplyLockStatus, type LockInspectionDependencies } from "../state/lock.js";
2
+ export type LockCommandOptions = {
3
+ home: string;
4
+ stateDir?: string | undefined;
5
+ json: boolean;
6
+ dependencies?: LockInspectionDependencies | undefined;
7
+ };
8
+ export type LockRecoverCommandOptions = LockCommandOptions & {
9
+ yes: boolean;
10
+ };
11
+ export type LockStatusCommandResult = {
12
+ status: ApplyLockStatus;
13
+ output: string;
14
+ };
15
+ export type LockRecoverCommandResult = {
16
+ owner: ApplyLockOwner;
17
+ output: string;
18
+ };
19
+ export declare function executeLockStatusCommand(options: LockCommandOptions): Promise<LockStatusCommandResult>;
20
+ export declare function executeLockRecoverCommand(options: LockRecoverCommandOptions): Promise<LockRecoverCommandResult>;
21
+ //# sourceMappingURL=lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/commands/lock.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAChC,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,GAAG;IAC3D,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAsBF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAOlC;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAYnC"}
@@ -0,0 +1,43 @@
1
+ import { resolveStateRoot, stateLayout } from "../state/layout.js";
2
+ import { inspectApplyLock, recoverStaleApplyLock, } from "../state/lock.js";
3
+ function renderLockStatus(status) {
4
+ if (status.status === "absent") {
5
+ return `apply lock: absent\npath: ${status.path}\n`;
6
+ }
7
+ if (status.status === "malformed") {
8
+ return `apply lock: malformed\npath: ${status.path}\nreason: ${status.reason}\n`;
9
+ }
10
+ return [
11
+ `apply lock: ${status.status}`,
12
+ `path: ${status.path}`,
13
+ `owner: ${status.owner.hostname} pid=${status.owner.pid}`,
14
+ `command: ${status.owner.command}`,
15
+ `plan: ${status.owner.planId}`,
16
+ `run: ${status.owner.runId}`,
17
+ `created: ${status.owner.createdAt}`,
18
+ ...("reason" in status ? [`reason: ${status.reason}`] : []),
19
+ "",
20
+ ].join("\n");
21
+ }
22
+ export async function executeLockStatusCommand(options) {
23
+ const layout = stateLayout(resolveStateRoot(options.home, options.stateDir));
24
+ const status = await inspectApplyLock(layout.locks, options.dependencies);
25
+ return {
26
+ status,
27
+ output: options.json ? `${JSON.stringify(status, null, 2)}\n` : renderLockStatus(status),
28
+ };
29
+ }
30
+ export async function executeLockRecoverCommand(options) {
31
+ if (!options.yes) {
32
+ throw new Error('lock recovery requires --yes after reviewing "agentrinse lock status"');
33
+ }
34
+ const layout = stateLayout(resolveStateRoot(options.home, options.stateDir));
35
+ const owner = await recoverStaleApplyLock(layout.locks, options.dependencies);
36
+ return {
37
+ owner,
38
+ output: options.json
39
+ ? `${JSON.stringify({ status: "recovered", owner }, null, 2)}\n`
40
+ : `recovered stale apply lock for run ${owner.runId}\n`,
41
+ };
42
+ }
43
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/commands/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAuB1B,SAAS,gBAAgB,CAAC,MAAuB;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,6BAA6B,MAAM,CAAC,IAAI,IAAI,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,gCAAgC,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,MAAM,IAAI,CAAC;IACnF,CAAC;IACD,OAAO;QACL,eAAe,MAAM,CAAC,MAAM,EAAE;QAC9B,SAAS,MAAM,CAAC,IAAI,EAAE;QACtB,UAAU,MAAM,CAAC,KAAK,CAAC,QAAQ,QAAQ,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACzD,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;QAClC,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;QAC9B,QAAQ,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;QAC5B,YAAY,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;QACpC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAA2B;IAE3B,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1E,OAAO;QACL,MAAM;QACN,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAkC;IAElC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9E,OAAO;QACL,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,IAAI;YAClB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;YAChE,CAAC,CAAC,sCAAsC,KAAK,CAAC,KAAK,IAAI;KAC1D,CAAC;AACJ,CAAC"}
@@ -3,9 +3,11 @@ export type PlanCommandOptions = {
3
3
  audit: string;
4
4
  config?: string;
5
5
  output?: string;
6
+ stateDir?: string;
6
7
  };
7
8
  export type PlanCommandResult = {
8
9
  plan: CleanupPlan;
10
+ statePath: string;
9
11
  output: string;
10
12
  };
11
13
  export declare function executePlanCommand(options: PlanCommandOptions): Promise<PlanCommandResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAK3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAahG"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAM3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBhG"}
@@ -1,18 +1,25 @@
1
1
  import { resolve } from "node:path";
2
- import { loadConfig } from "../config/load.js";
2
+ import { loadConfigForHome } from "../config/load.js";
3
3
  import { cleanupPlanSchema } from "../contracts/plan.js";
4
4
  import { auditReportSchema } from "../contracts/report.js";
5
5
  import { createCleanupPlan } from "../core/plan.js";
6
6
  import { readJsonFile, writeJsonAtomic } from "../state/json-file.js";
7
+ import { resolveStateRoot, stateLayout } from "../state/layout.js";
7
8
  export async function executePlanCommand(options) {
8
9
  const audit = auditReportSchema.parse(await readJsonFile(resolve(options.audit)));
9
- const config = await loadConfig(options.config);
10
+ const { config } = await loadConfigForHome(audit.home, options.config);
10
11
  const plan = cleanupPlanSchema.parse(createCleanupPlan(audit, config));
12
+ const layout = stateLayout(resolveStateRoot(audit.home, options.stateDir));
13
+ const statePath = resolve(layout.plans, `${plan.planId}.json`);
14
+ await writeJsonAtomic(statePath, plan, {
15
+ privateDirectories: [layout.root, layout.plans],
16
+ });
11
17
  if (options.output !== undefined) {
12
18
  await writeJsonAtomic(resolve(options.output), plan);
13
19
  }
14
20
  return {
15
21
  plan,
22
+ statePath,
16
23
  output: `${JSON.stringify(plan, null, 2)}\n`,
17
24
  };
18
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAoB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAatE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;KAC7C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAoB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAenE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;IAC/D,MAAM,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE;QACrC,kBAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;KAChD,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS;QACT,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type CleanupPlan } from "../contracts/plan.js";
2
+ import { type AuditReport } from "../contracts/report.js";
3
+ import { type CleanupRun } from "../contracts/run.js";
4
+ export type ShowCommandOptions = {
5
+ home: string;
6
+ stateDir?: string | undefined;
7
+ json: boolean;
8
+ };
9
+ export type ShowCommandResult<T> = {
10
+ value: T;
11
+ output: string;
12
+ };
13
+ export declare function renderRunDetails(run: CleanupRun): string;
14
+ export declare function executeShowRunCommand(idOrPath: string, options: ShowCommandOptions): Promise<ShowCommandResult<CleanupRun>>;
15
+ export declare function executeShowPlanCommand(idOrPath: string, options: ShowCommandOptions): Promise<ShowCommandResult<CleanupPlan>>;
16
+ export declare function executeShowResourceCommand(resourceId: string, options: ShowCommandOptions): Promise<ShowCommandResult<{
17
+ audit: AuditReport;
18
+ finding: AuditReport["findings"][number];
19
+ }>>;
20
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIxE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAoBxD;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAOxC;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAOzC;AAED,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC,CAgB9F"}
@@ -0,0 +1,54 @@
1
+ import { cleanupPlanSchema } from "../contracts/plan.js";
2
+ import { auditReportSchema } from "../contracts/report.js";
3
+ import { cleanupRunSchema } from "../contracts/run.js";
4
+ import { resolveStateRoot, stateLayout } from "../state/layout.js";
5
+ import { listJsonRecords, readJsonRecord } from "../state/records.js";
6
+ export function renderRunDetails(run) {
7
+ const lines = [`run ${run.runId}: ${run.status}`, `plan ${run.planId}`, ""];
8
+ for (const action of run.actions) {
9
+ lines.push(`${action.status.padEnd(18)} ${action.actionId} ${action.type}`);
10
+ if (action.diagnostic !== undefined) {
11
+ lines.push(` ${action.diagnostic.code}: ${action.diagnostic.message}`);
12
+ }
13
+ if (action.isolationPath !== undefined) {
14
+ lines.push(` isolation: ${action.isolationPath}`);
15
+ }
16
+ }
17
+ if (run.status === "partial" || run.status === "failed" || run.status === "interrupted") {
18
+ lines.push("", "Recovery: inspect every isolation path and diagnostic above.", "Do not retry the old plan; resolve partial state, then create a fresh audit and plan.");
19
+ }
20
+ return `${lines.join("\n")}\n`;
21
+ }
22
+ export async function executeShowRunCommand(idOrPath, options) {
23
+ const layout = stateLayout(resolveStateRoot(options.home, options.stateDir));
24
+ const run = await readJsonRecord(layout.runs, idOrPath, cleanupRunSchema);
25
+ return {
26
+ value: run,
27
+ output: options.json ? `${JSON.stringify(run, null, 2)}\n` : renderRunDetails(run),
28
+ };
29
+ }
30
+ export async function executeShowPlanCommand(idOrPath, options) {
31
+ const layout = stateLayout(resolveStateRoot(options.home, options.stateDir));
32
+ const plan = await readJsonRecord(layout.plans, idOrPath, cleanupPlanSchema);
33
+ return {
34
+ value: plan,
35
+ output: `${JSON.stringify(plan, null, 2)}\n`,
36
+ };
37
+ }
38
+ export async function executeShowResourceCommand(resourceId, options) {
39
+ const layout = stateLayout(resolveStateRoot(options.home, options.stateDir));
40
+ const audits = await listJsonRecords(layout.audits, auditReportSchema);
41
+ audits.sort((left, right) => right.completedAt.localeCompare(left.completedAt));
42
+ for (const audit of audits) {
43
+ const finding = audit.findings.find((candidate) => candidate.resource.id === resourceId);
44
+ if (finding !== undefined) {
45
+ const value = { audit, finding };
46
+ return {
47
+ value,
48
+ output: `${JSON.stringify(value, null, 2)}\n`,
49
+ };
50
+ }
51
+ }
52
+ throw new Error(`resource ${resourceId} was not found in persisted audits`);
53
+ }
54
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,cAAc,EAAE,gBA2B5B,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,cAAc,EAAE,gBA6B5B,CAAC"}
@@ -8,6 +8,7 @@ export const DEFAULT_CONFIG = {
8
8
  zed: { enabled: true },
9
9
  opencode: { enabled: true },
10
10
  grok: { enabled: true },
11
+ runtime: { enabled: false },
11
12
  git: { enabled: false },
12
13
  docker: { enabled: false },
13
14
  },
@@ -21,6 +22,7 @@ export const DEFAULT_CONFIG = {
21
22
  minBytes: 64 * 1024 * 1024,
22
23
  processCheck: "required",
23
24
  },
25
+ pins: [],
24
26
  plan: {
25
27
  ttlMinutes: 30,
26
28
  maxRisk: "safe",
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACxB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACzB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACzB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACtB,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC3B,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACvB,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACvB,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KAC3B;IACD,KAAK,EAAE;QACL,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,EAAE,GAAG,EAAE;QACtB,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;QAC1B,YAAY,EAAE,UAAU;KACzB;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,MAAM;KAChB;CACF,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACxB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACzB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACzB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACtB,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC3B,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACvB,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KAC3B;IACD,KAAK,EAAE;QACL,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,EAAE,GAAG,EAAE;QACtB,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;QAC1B,YAAY,EAAE,UAAU;KACzB;IACD,IAAI,EAAE,EAAE;IACR,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,MAAM;KAChB;CACF,CAAC"}
@@ -1,3 +1,9 @@
1
+ import { type ConfigEnvironment } from "./path.js";
1
2
  import { type AgentRinseConfig } from "./schema.js";
2
3
  export declare function loadConfig(path?: string): Promise<AgentRinseConfig>;
4
+ export declare function loadConfigForHome(home: string, explicitPath?: string, environment?: ConfigEnvironment): Promise<{
5
+ config: AgentRinseConfig;
6
+ path: string;
7
+ exists: boolean;
8
+ }>;
3
9
  //# sourceMappingURL=load.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4BzE"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4BzE;AAQD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,GAAE,iBAA+B,GAC3C,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBtE"}
@@ -1,5 +1,7 @@
1
1
  import { readFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
2
3
  import { DEFAULT_CONFIG } from "./defaults.js";
4
+ import { resolveConfigPath } from "./path.js";
3
5
  import { agentRinseConfigSchema } from "./schema.js";
4
6
  export async function loadConfig(path) {
5
7
  if (path === undefined) {
@@ -28,4 +30,27 @@ export async function loadConfig(path) {
28
30
  },
29
31
  };
30
32
  }
33
+ function isMissing(error) {
34
+ return (error instanceof Error && "code" in error && error.code === "ENOENT");
35
+ }
36
+ export async function loadConfigForHome(home, explicitPath, environment = process.env) {
37
+ const path = resolveConfigPath(resolve(home), explicitPath, environment);
38
+ try {
39
+ return {
40
+ config: await loadConfig(path),
41
+ path,
42
+ exists: true,
43
+ };
44
+ }
45
+ catch (error) {
46
+ if (explicitPath === undefined && isMissing(error)) {
47
+ return {
48
+ config: await loadConfig(),
49
+ path,
50
+ exists: false,
51
+ };
52
+ }
53
+ throw error;
54
+ }
55
+ }
31
56
  //# sourceMappingURL=load.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAyB,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAa;IAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnD,OAAO;QACL,GAAG,eAAe,CAAC,cAAc,CAAC;QAClC,GAAG,MAAM;QACT,QAAQ,EAAE;YACR,GAAG,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC3C,GAAG,MAAM,CAAC,QAAQ;SACnB;QACD,KAAK,EAAE;YACL,GAAG,cAAc,CAAC,KAAK;YACvB,GAAG,MAAM,CAAC,KAAK;SAChB;QACD,SAAS,EAAE;YACT,GAAG,cAAc,CAAC,SAAS;YAC3B,GAAG,MAAM,CAAC,SAAS;SACpB;QACD,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,GAAG,MAAM,CAAC,IAAI;SACf;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAA0B,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAyB,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAa;IAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnD,OAAO;QACL,GAAG,eAAe,CAAC,cAAc,CAAC;QAClC,GAAG,MAAM;QACT,QAAQ,EAAE;YACR,GAAG,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC3C,GAAG,MAAM,CAAC,QAAQ;SACnB;QACD,KAAK,EAAE;YACL,GAAG,cAAc,CAAC,KAAK;YACvB,GAAG,MAAM,CAAC,KAAK;SAChB;QACD,SAAS,EAAE;YACT,GAAG,cAAc,CAAC,SAAS;YAC3B,GAAG,MAAM,CAAC,SAAS;SACpB;QACD,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,GAAG,MAAM,CAAC,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,CACL,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAChG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,YAAqB,EACrB,WAAW,GAAsB,OAAO,CAAC,GAAG;IAE5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,OAAO;YACL,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC;YAC9B,IAAI;YACJ,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,YAAY,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO;gBACL,MAAM,EAAE,MAAM,UAAU,EAAE;gBAC1B,IAAI;gBACJ,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type ConfigEnvironment = {
2
+ XDG_CONFIG_HOME?: string;
3
+ };
4
+ export declare function resolveConfigPath(home: string, explicit?: string, environment?: ConfigEnvironment): string;
5
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/config/path.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,GAAE,iBAA+B,GAC3C,MAAM,CAYR"}
@@ -0,0 +1,13 @@
1
+ import { isAbsolute, resolve } from "node:path";
2
+ export function resolveConfigPath(home, explicit, environment = process.env) {
3
+ if (explicit !== undefined) {
4
+ return resolve(explicit);
5
+ }
6
+ if (environment.XDG_CONFIG_HOME !== undefined &&
7
+ environment.XDG_CONFIG_HOME !== "" &&
8
+ isAbsolute(environment.XDG_CONFIG_HOME)) {
9
+ return resolve(environment.XDG_CONFIG_HOME, "agentrinse", "config.json");
10
+ }
11
+ return resolve(home, ".config", "agentrinse", "config.json");
12
+ }
13
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/config/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMhD,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,QAAiB,EACjB,WAAW,GAAsB,OAAO,CAAC,GAAG;IAE5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,IACE,WAAW,CAAC,eAAe,KAAK,SAAS;QACzC,WAAW,CAAC,eAAe,KAAK,EAAE;QAClC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,EACvC,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAC/D,CAAC"}
@@ -9,6 +9,7 @@ export declare const adapterIdSchema: z.ZodEnum<{
9
9
  git: "git";
10
10
  grok: "grok";
11
11
  opencode: "opencode";
12
+ runtime: "runtime";
12
13
  zed: "zed";
13
14
  }>;
14
15
  export declare const artifactProjectSchema: z.ZodObject<{
@@ -26,6 +27,16 @@ export declare const artifactProjectSchema: z.ZodObject<{
26
27
  target: "target";
27
28
  }>>;
28
29
  }, z.core.$strip>;
30
+ export declare const pinSchema: z.ZodUnion<readonly [z.ZodObject<{
31
+ path: z.ZodString;
32
+ expiresAt: z.ZodOptional<z.ZodString>;
33
+ }, z.core.$strict>, z.ZodObject<{
34
+ resourceId: z.ZodString;
35
+ expiresAt: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$strict>, z.ZodObject<{
37
+ gitRef: z.ZodString;
38
+ expiresAt: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strict>]>;
29
40
  export declare const agentRinseConfigSchema: z.ZodObject<{
30
41
  schemaVersion: z.ZodLiteral<1>;
31
42
  adapters: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
@@ -37,6 +48,7 @@ export declare const agentRinseConfigSchema: z.ZodObject<{
37
48
  git: "git";
38
49
  grok: "grok";
39
50
  opencode: "opencode";
51
+ runtime: "runtime";
40
52
  zed: "zed";
41
53
  }> & z.core.$partial, z.ZodObject<{
42
54
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -66,6 +78,16 @@ export declare const agentRinseConfigSchema: z.ZodObject<{
66
78
  minBytes: z.ZodDefault<z.ZodNumber>;
67
79
  processCheck: z.ZodDefault<z.ZodLiteral<"required">>;
68
80
  }, z.core.$strip>>;
81
+ pins: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
82
+ path: z.ZodString;
83
+ expiresAt: z.ZodOptional<z.ZodString>;
84
+ }, z.core.$strict>, z.ZodObject<{
85
+ resourceId: z.ZodString;
86
+ expiresAt: z.ZodOptional<z.ZodString>;
87
+ }, z.core.$strict>, z.ZodObject<{
88
+ gitRef: z.ZodString;
89
+ expiresAt: z.ZodOptional<z.ZodString>;
90
+ }, z.core.$strict>]>>>;
69
91
  plan: z.ZodDefault<z.ZodObject<{
70
92
  ttlMinutes: z.ZodDefault<z.ZodNumber>;
71
93
  maxRisk: z.ZodDefault<z.ZodEnum<{
@@ -80,5 +102,6 @@ export type AdapterId = z.infer<typeof adapterIdSchema>;
80
102
  export { artifactNameSchema };
81
103
  export type { ArtifactName };
82
104
  export type ArtifactProject = z.infer<typeof artifactProjectSchema>;
105
+ export type Pin = z.infer<typeof pinSchema>;
83
106
  export type AgentRinseConfig = z.infer<typeof agentRinseConfigSchema>;
84
107
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE/E,eAAO,MAAM,eAAe;;;;;;;;;;EAU1B,CAAC;AAOH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAMhC,CAAC;AAOH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8E/B,CAAC;AAEL,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE/E,eAAO,MAAM,eAAe;;;;;;;;;;;EAW1B,CAAC;AAOH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAMhC,CAAC;AAgCH,eAAO,MAAM,SAAS;;;;;;;;;oBAmBpB,CAAC;AAOH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+E/B,CAAC;AAEL,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAC5C,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -9,6 +9,7 @@ export const adapterIdSchema = z.enum([
9
9
  "zed",
10
10
  "opencode",
11
11
  "grok",
12
+ "runtime",
12
13
  "git",
13
14
  "docker",
14
15
  ]);
@@ -23,6 +24,52 @@ export const artifactProjectSchema = z.object({
23
24
  .min(1)
24
25
  .refine((names) => new Set(names).size === names.length, "artifact names must be unique"),
25
26
  });
27
+ const expiresAtSchema = z.string().datetime().optional();
28
+ function isValidGitRef(value) {
29
+ const match = /^refs\/(?:heads|remotes|tags)\/(.+)$/u.exec(value);
30
+ if (match === null) {
31
+ return false;
32
+ }
33
+ const suffix = match[1];
34
+ if (suffix.endsWith(".") ||
35
+ suffix.includes("..") ||
36
+ suffix.includes("@{") ||
37
+ suffix.includes("//")) {
38
+ return false;
39
+ }
40
+ for (const component of suffix.split("/")) {
41
+ if (component === "" || component.startsWith(".") || component.endsWith(".lock")) {
42
+ return false;
43
+ }
44
+ }
45
+ for (const character of value) {
46
+ const code = character.codePointAt(0);
47
+ if (code <= 0x20 || code === 0x7f || ["~", "^", ":", "?", "*", "[", "\\"].includes(character)) {
48
+ return false;
49
+ }
50
+ }
51
+ return true;
52
+ }
53
+ export const pinSchema = z.union([
54
+ z
55
+ .object({
56
+ path: z.string().min(1).refine(isAbsolute, "pin path must be absolute"),
57
+ expiresAt: expiresAtSchema,
58
+ })
59
+ .strict(),
60
+ z
61
+ .object({
62
+ resourceId: z.string().min(1),
63
+ expiresAt: expiresAtSchema,
64
+ })
65
+ .strict(),
66
+ z
67
+ .object({
68
+ gitRef: z.string().refine(isValidGitRef, "pin Git ref is invalid"),
69
+ expiresAt: expiresAtSchema,
70
+ })
71
+ .strict(),
72
+ ]);
26
73
  function isInside(root, candidate) {
27
74
  const result = relative(resolve(root), resolve(candidate));
28
75
  return result === "" || (!result.startsWith("..") && !isAbsolute(result));
@@ -58,6 +105,7 @@ export const agentRinseConfigSchema = z
58
105
  minBytes: 64 * 1024 * 1024,
59
106
  processCheck: "required",
60
107
  })),
108
+ pins: z.array(pinSchema).default([]),
61
109
  plan: z
62
110
  .object({
63
111
  ttlMinutes: z
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ export declare const doctorCheckSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ status: z.ZodEnum<{
5
+ error: "error";
6
+ pass: "pass";
7
+ warning: "warning";
8
+ }>;
9
+ summary: z.ZodString;
10
+ detail: z.ZodOptional<z.ZodString>;
11
+ remediation: z.ZodOptional<z.ZodString>;
12
+ }, z.core.$strip>;
13
+ export declare const doctorReportSchema: z.ZodObject<{
14
+ schemaVersion: z.ZodLiteral<1>;
15
+ generatedAt: z.ZodString;
16
+ status: z.ZodEnum<{
17
+ error: "error";
18
+ ok: "ok";
19
+ warning: "warning";
20
+ }>;
21
+ checks: z.ZodArray<z.ZodObject<{
22
+ id: z.ZodString;
23
+ status: z.ZodEnum<{
24
+ error: "error";
25
+ pass: "pass";
26
+ warning: "warning";
27
+ }>;
28
+ summary: z.ZodString;
29
+ detail: z.ZodOptional<z.ZodString>;
30
+ remediation: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>;
33
+ export type DoctorCheck = z.infer<typeof doctorCheckSchema>;
34
+ export type DoctorReport = z.infer<typeof doctorReportSchema>;
35
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/contracts/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;iBAM5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export const doctorCheckSchema = z.object({
3
+ id: z.string().min(1),
4
+ status: z.enum(["pass", "warning", "error"]),
5
+ summary: z.string().min(1),
6
+ detail: z.string().min(1).optional(),
7
+ remediation: z.string().min(1).optional(),
8
+ });
9
+ export const doctorReportSchema = z.object({
10
+ schemaVersion: z.literal(1),
11
+ generatedAt: z.string().datetime({ offset: true }),
12
+ status: z.enum(["ok", "warning", "error"]),
13
+ checks: z.array(doctorCheckSchema),
14
+ });
15
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/contracts/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ import { type Diagnostic } from "./diagnostic.js";
3
+ export declare const commandEnvelopeStatusSchema: z.ZodEnum<{
4
+ degraded: "degraded";
5
+ failed: "failed";
6
+ ok: "ok";
7
+ }>;
8
+ export declare const commandEnvelopeSchema: z.ZodObject<{
9
+ schemaVersion: z.ZodLiteral<1>;
10
+ command: z.ZodString;
11
+ agentrinseVersion: z.ZodString;
12
+ startedAt: z.ZodString;
13
+ completedAt: z.ZodString;
14
+ status: z.ZodEnum<{
15
+ degraded: "degraded";
16
+ failed: "failed";
17
+ ok: "ok";
18
+ }>;
19
+ data: z.ZodUnknown;
20
+ diagnostics: z.ZodArray<z.ZodObject<{
21
+ severity: z.ZodEnum<{
22
+ error: "error";
23
+ info: "info";
24
+ warning: "warning";
25
+ }>;
26
+ code: z.ZodString;
27
+ message: z.ZodString;
28
+ adapter: z.ZodOptional<z.ZodString>;
29
+ resourceId: z.ZodOptional<z.ZodString>;
30
+ remediation: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>;
33
+ export declare const commandEventSchema: z.ZodObject<{
34
+ schemaVersion: z.ZodLiteral<1>;
35
+ event: z.ZodString;
36
+ timestamp: z.ZodString;
37
+ command: z.ZodString;
38
+ commandId: z.ZodString;
39
+ sequence: z.ZodNumber;
40
+ data: z.ZodOptional<z.ZodUnknown>;
41
+ }, z.core.$strip>;
42
+ export type CommandEnvelopeStatus = z.infer<typeof commandEnvelopeStatusSchema>;
43
+ export type CommandEnvelope<T> = Omit<z.infer<typeof commandEnvelopeSchema>, "data"> & {
44
+ data: T;
45
+ diagnostics: Diagnostic[];
46
+ };
47
+ export type CommandEvent<T = unknown> = Omit<z.infer<typeof commandEventSchema>, "data"> & {
48
+ data?: T;
49
+ };
50
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/contracts/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,eAAO,MAAM,2BAA2B;;;;EAAuC,CAAC;AAEhF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;iBAShC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;iBAQ7B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,EAAE,MAAM,CAAC,GAAG;IACrF,IAAI,EAAE,CAAC,CAAC;IACR,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AACF,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,EAAE,MAAM,CAAC,GAAG;IACzF,IAAI,CAAC,EAAE,CAAC,CAAC;CACV,CAAC"}