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.
- package/README.md +165 -83
- package/dist/adapters/artifacts/adapter.d.ts +3 -1
- package/dist/adapters/artifacts/adapter.d.ts.map +1 -1
- package/dist/adapters/artifacts/adapter.js +23 -1
- package/dist/adapters/artifacts/adapter.js.map +1 -1
- package/dist/adapters/git/adapter.d.ts +8 -1
- package/dist/adapters/git/adapter.d.ts.map +1 -1
- package/dist/adapters/git/adapter.js +247 -13
- package/dist/adapters/git/adapter.js.map +1 -1
- package/dist/adapters/git/status.d.ts +14 -0
- package/dist/adapters/git/status.d.ts.map +1 -0
- package/dist/adapters/git/status.js +81 -0
- package/dist/adapters/git/status.js.map +1 -0
- package/dist/adapters/provider-adapter.d.ts +3 -0
- package/dist/adapters/provider-adapter.d.ts.map +1 -1
- package/dist/adapters/provider-adapter.js +16 -0
- package/dist/adapters/provider-adapter.js.map +1 -1
- package/dist/adapters/provider-reachability.d.ts +6 -0
- package/dist/adapters/provider-reachability.d.ts.map +1 -0
- package/dist/adapters/provider-reachability.js +207 -0
- package/dist/adapters/provider-reachability.js.map +1 -0
- package/dist/adapters/provider-specs.d.ts +1 -1
- package/dist/adapters/provider-specs.d.ts.map +1 -1
- package/dist/adapters/registry.d.ts +7 -1
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +44 -4
- package/dist/adapters/registry.js.map +1 -1
- package/dist/adapters/runtime/adapter.d.ts +24 -0
- package/dist/adapters/runtime/adapter.d.ts.map +1 -0
- package/dist/adapters/runtime/adapter.js +319 -0
- package/dist/adapters/runtime/adapter.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/adapters.d.ts.map +1 -1
- package/dist/commands/adapters.js +1 -0
- package/dist/commands/adapters.js.map +1 -1
- package/dist/commands/apply.d.ts +6 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +37 -13
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/audit.d.ts +7 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +103 -12
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/clean.d.ts +61 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +224 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/completion.d.ts +4 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +95 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +41 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +28 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +582 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/history.d.ts +15 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +30 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/lock.d.ts +21 -0
- package/dist/commands/lock.d.ts.map +1 -0
- package/dist/commands/lock.js +43 -0
- package/dist/commands/lock.js.map +1 -0
- package/dist/commands/plan.d.ts +2 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +9 -2
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/show.d.ts +20 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +54 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +2 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/load.d.ts +6 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +25 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/path.d.ts +5 -0
- package/dist/config/path.d.ts.map +1 -0
- package/dist/config/path.js +13 -0
- package/dist/config/path.js.map +1 -0
- package/dist/config/schema.d.ts +23 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +48 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/doctor.d.ts +35 -0
- package/dist/contracts/doctor.d.ts.map +1 -0
- package/dist/contracts/doctor.js +15 -0
- package/dist/contracts/doctor.js.map +1 -0
- package/dist/contracts/output.d.ts +50 -0
- package/dist/contracts/output.d.ts.map +1 -0
- package/dist/contracts/output.js +23 -0
- package/dist/contracts/output.js.map +1 -0
- package/dist/contracts/run.d.ts +2 -0
- package/dist/contracts/run.d.ts.map +1 -1
- package/dist/contracts/run.js +1 -1
- package/dist/contracts/run.js.map +1 -1
- package/dist/core/apply.d.ts +1 -0
- package/dist/core/apply.d.ts.map +1 -1
- package/dist/core/apply.js +46 -3
- package/dist/core/apply.js.map +1 -1
- package/dist/core/audit.d.ts +21 -0
- package/dist/core/audit.d.ts.map +1 -1
- package/dist/core/audit.js +31 -1
- package/dist/core/audit.js.map +1 -1
- package/dist/core/duration.d.ts +2 -0
- package/dist/core/duration.d.ts.map +1 -0
- package/dist/core/duration.js +21 -0
- package/dist/core/duration.js.map +1 -0
- package/dist/core/interruption.d.ts +5 -0
- package/dist/core/interruption.d.ts.map +1 -0
- package/dist/core/interruption.js +5 -0
- package/dist/core/interruption.js.map +1 -0
- package/dist/core/process-identity.d.ts +24 -0
- package/dist/core/process-identity.d.ts.map +1 -0
- package/dist/core/process-identity.js +104 -0
- package/dist/core/process-identity.js.map +1 -0
- package/dist/core/reachability.d.ts +29 -0
- package/dist/core/reachability.d.ts.map +1 -0
- package/dist/core/reachability.js +121 -0
- package/dist/core/reachability.js.map +1 -0
- package/dist/core/redaction.d.ts +4 -0
- package/dist/core/redaction.d.ts.map +1 -0
- package/dist/core/redaction.js +91 -0
- package/dist/core/redaction.js.map +1 -0
- package/dist/core/safety.d.ts +8 -0
- package/dist/core/safety.d.ts.map +1 -1
- package/dist/core/safety.js +29 -1
- package/dist/core/safety.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/machine-output.d.ts +21 -0
- package/dist/machine-output.d.ts.map +1 -0
- package/dist/machine-output.js +32 -0
- package/dist/machine-output.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +232 -7
- package/dist/main.js.map +1 -1
- package/dist/state/json-file.d.ts +6 -1
- package/dist/state/json-file.d.ts.map +1 -1
- package/dist/state/json-file.js +34 -3
- package/dist/state/json-file.js.map +1 -1
- package/dist/state/layout.d.ts +2 -0
- package/dist/state/layout.d.ts.map +1 -1
- package/dist/state/layout.js +2 -0
- package/dist/state/layout.js.map +1 -1
- package/dist/state/lock.d.ts +54 -1
- package/dist/state/lock.d.ts.map +1 -1
- package/dist/state/lock.js +237 -33
- package/dist/state/lock.js.map +1 -1
- package/dist/state/records.d.ts +5 -0
- package/dist/state/records.d.ts.map +1 -0
- package/dist/state/records.js +35 -0
- package/dist/state/records.js.map +1 -0
- package/dist/state/run-journal.d.ts +3 -1
- package/dist/state/run-journal.d.ts.map +1 -1
- package/dist/state/run-journal.js +15 -4
- package/dist/state/run-journal.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
- package/schemas/command-envelope.schema.json +78 -0
- package/schemas/command-event.schema.json +36 -0
- package/schemas/doctor.schema.json +51 -0
- package/schemas/run.schema.json +1 -1
package/dist/state/lock.js
CHANGED
|
@@ -1,58 +1,264 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
2
3
|
import { lstat, mkdir, open, readFile, rm } from "node:fs/promises";
|
|
3
4
|
import { hostname } from "node:os";
|
|
4
5
|
import { join } from "node:path";
|
|
6
|
+
import { inspectProcessIdentity, } from "../core/process-identity.js";
|
|
5
7
|
import { syncDirectory } from "./json-file.js";
|
|
6
8
|
export class LockHeldError extends Error {
|
|
7
9
|
name = "LockHeldError";
|
|
8
10
|
}
|
|
11
|
+
export class LockRecoveryError extends Error {
|
|
12
|
+
name = "LockRecoveryError";
|
|
13
|
+
}
|
|
14
|
+
function isErrno(error, code) {
|
|
15
|
+
return (error instanceof Error && "code" in error && error.code === code);
|
|
16
|
+
}
|
|
17
|
+
function parseOwner(value) {
|
|
18
|
+
if (typeof value !== "object" ||
|
|
19
|
+
value === null ||
|
|
20
|
+
!("token" in value) ||
|
|
21
|
+
typeof value.token !== "string" ||
|
|
22
|
+
!("pid" in value) ||
|
|
23
|
+
typeof value.pid !== "number" ||
|
|
24
|
+
!Number.isSafeInteger(value.pid) ||
|
|
25
|
+
value.pid <= 0 ||
|
|
26
|
+
!("hostname" in value) ||
|
|
27
|
+
typeof value.hostname !== "string" ||
|
|
28
|
+
!("command" in value) ||
|
|
29
|
+
typeof value.command !== "string" ||
|
|
30
|
+
!("planId" in value) ||
|
|
31
|
+
typeof value.planId !== "string" ||
|
|
32
|
+
!("runId" in value) ||
|
|
33
|
+
typeof value.runId !== "string" ||
|
|
34
|
+
!("createdAt" in value) ||
|
|
35
|
+
typeof value.createdAt !== "string" ||
|
|
36
|
+
("processStartIdentity" in value &&
|
|
37
|
+
value.processStartIdentity !== undefined &&
|
|
38
|
+
typeof value.processStartIdentity !== "string")) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
9
43
|
async function readOwner(path) {
|
|
10
44
|
try {
|
|
11
|
-
|
|
12
|
-
if (typeof value === "object" &&
|
|
13
|
-
value !== null &&
|
|
14
|
-
"token" in value &&
|
|
15
|
-
typeof value.token === "string" &&
|
|
16
|
-
"pid" in value &&
|
|
17
|
-
typeof value.pid === "number" &&
|
|
18
|
-
"hostname" in value &&
|
|
19
|
-
typeof value.hostname === "string" &&
|
|
20
|
-
"planId" in value &&
|
|
21
|
-
typeof value.planId === "string" &&
|
|
22
|
-
"createdAt" in value &&
|
|
23
|
-
typeof value.createdAt === "string") {
|
|
24
|
-
return value;
|
|
25
|
-
}
|
|
45
|
+
return parseOwner(JSON.parse(await readFile(path, "utf8")));
|
|
26
46
|
}
|
|
27
47
|
catch {
|
|
28
48
|
return undefined;
|
|
29
49
|
}
|
|
30
|
-
return undefined;
|
|
31
50
|
}
|
|
32
|
-
|
|
51
|
+
async function acquireRecoveryMutex(locksDirectory) {
|
|
52
|
+
await mkdir(locksDirectory, { recursive: true, mode: 0o700 });
|
|
53
|
+
const path = join(locksDirectory, "apply.recovery.lock");
|
|
54
|
+
const holdCommand = 'printf "agentrinse-recovery-lock\\n"; cat >/dev/null';
|
|
55
|
+
const command = process.platform === "darwin" ? "lockf" : process.platform === "linux" ? "flock" : undefined;
|
|
56
|
+
if (command === undefined) {
|
|
57
|
+
throw new LockRecoveryError(`apply lock recovery is unsupported on ${process.platform}`);
|
|
58
|
+
}
|
|
59
|
+
const args = command === "lockf"
|
|
60
|
+
? ["-k", "-s", "-t", "0", path, "sh", "-c", holdCommand]
|
|
61
|
+
: ["-n", path, "sh", "-c", holdCommand];
|
|
62
|
+
const child = spawn(command, args, { stdio: ["pipe", "pipe", "pipe"] });
|
|
63
|
+
child.stdout.setEncoding("utf8");
|
|
64
|
+
child.stderr.setEncoding("utf8");
|
|
65
|
+
let stderr = "";
|
|
66
|
+
let ready = false;
|
|
67
|
+
let released = false;
|
|
68
|
+
child.stderr.on("data", (chunk) => {
|
|
69
|
+
stderr += chunk;
|
|
70
|
+
});
|
|
71
|
+
let stdout = "";
|
|
72
|
+
const exit = new Promise((resolve, reject) => {
|
|
73
|
+
child.once("error", reject);
|
|
74
|
+
child.once("exit", (code, signal) => resolve({ code, signal }));
|
|
75
|
+
});
|
|
76
|
+
await new Promise((resolve, reject) => {
|
|
77
|
+
child.stdout.on("data", (chunk) => {
|
|
78
|
+
stdout += chunk;
|
|
79
|
+
if (!ready && stdout.includes("agentrinse-recovery-lock\n")) {
|
|
80
|
+
ready = true;
|
|
81
|
+
resolve();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
void exit.then(({ code, signal }) => {
|
|
85
|
+
if (!ready) {
|
|
86
|
+
const detail = stderr.trim();
|
|
87
|
+
reject(new LockRecoveryError(code === 1 || code === 75
|
|
88
|
+
? "apply lock recovery is already in progress"
|
|
89
|
+
: `could not acquire recovery mutex${detail === "" ? "" : `: ${detail}`}${signal === null ? "" : ` (${signal})`}`));
|
|
90
|
+
}
|
|
91
|
+
}, (error) => {
|
|
92
|
+
reject(new LockRecoveryError(`could not start ${command} for recovery mutex: ${error instanceof Error ? error.message : String(error)}`));
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
assertHeld() {
|
|
97
|
+
if (released || child.exitCode !== null || child.signalCode !== null) {
|
|
98
|
+
throw new LockRecoveryError("apply lock recovery mutex was lost");
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
async release() {
|
|
102
|
+
if (released) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
released = true;
|
|
106
|
+
child.stdin.end();
|
|
107
|
+
const result = await exit;
|
|
108
|
+
if (result.code !== 0) {
|
|
109
|
+
throw new LockRecoveryError(`recovery mutex exited unexpectedly${result.signal === null ? ` with code ${String(result.code)}` : ` (${result.signal})`}`);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async function inspectLockSnapshot(locksDirectory, dependencies = {}) {
|
|
115
|
+
const path = join(locksDirectory, "apply.lock");
|
|
116
|
+
let raw;
|
|
117
|
+
let identity;
|
|
118
|
+
try {
|
|
119
|
+
[raw, identity] = await Promise.all([readFile(path, "utf8"), lstat(path)]);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (isErrno(error, "ENOENT")) {
|
|
123
|
+
return { status: { status: "absent", path } };
|
|
124
|
+
}
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
let owner;
|
|
128
|
+
try {
|
|
129
|
+
owner = parseOwner(JSON.parse(raw));
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
owner = undefined;
|
|
133
|
+
}
|
|
134
|
+
if (owner === undefined) {
|
|
135
|
+
return {
|
|
136
|
+
status: { status: "malformed", path, reason: "lock record is not valid AgentRinse JSON" },
|
|
137
|
+
identity,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const localHostname = (dependencies.currentHostname ?? hostname)();
|
|
141
|
+
if (owner.hostname !== localHostname) {
|
|
142
|
+
return {
|
|
143
|
+
status: {
|
|
144
|
+
status: "remote",
|
|
145
|
+
path,
|
|
146
|
+
owner,
|
|
147
|
+
reason: `lock belongs to host ${owner.hostname}; local host is ${localHostname}`,
|
|
148
|
+
},
|
|
149
|
+
identity,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const processIdentity = await (dependencies.inspectProcess ?? inspectProcessIdentity)(owner.pid);
|
|
153
|
+
if (processIdentity.status === "dead") {
|
|
154
|
+
return {
|
|
155
|
+
status: {
|
|
156
|
+
status: "stale",
|
|
157
|
+
path,
|
|
158
|
+
owner,
|
|
159
|
+
reason: `recorded process ${owner.pid} no longer exists`,
|
|
160
|
+
},
|
|
161
|
+
identity,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (processIdentity.status === "unknown") {
|
|
165
|
+
return {
|
|
166
|
+
status: {
|
|
167
|
+
status: "unknown",
|
|
168
|
+
path,
|
|
169
|
+
owner,
|
|
170
|
+
reason: processIdentity.reason,
|
|
171
|
+
},
|
|
172
|
+
identity,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
if (owner.processStartIdentity === undefined) {
|
|
176
|
+
return {
|
|
177
|
+
status: {
|
|
178
|
+
status: "unknown",
|
|
179
|
+
path,
|
|
180
|
+
owner,
|
|
181
|
+
reason: `lock has no process start identity for live PID ${owner.pid}`,
|
|
182
|
+
},
|
|
183
|
+
identity,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (owner.processStartIdentity !== processIdentity.identity) {
|
|
187
|
+
return {
|
|
188
|
+
status: {
|
|
189
|
+
status: "stale",
|
|
190
|
+
path,
|
|
191
|
+
owner,
|
|
192
|
+
reason: `PID ${owner.pid} was reused by a different process`,
|
|
193
|
+
},
|
|
194
|
+
identity,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return { status: { status: "active", path, owner }, identity };
|
|
198
|
+
}
|
|
199
|
+
export async function inspectApplyLock(locksDirectory, dependencies = {}) {
|
|
200
|
+
return (await inspectLockSnapshot(locksDirectory, dependencies)).status;
|
|
201
|
+
}
|
|
202
|
+
export async function recoverStaleApplyLock(locksDirectory, dependencies = {}) {
|
|
203
|
+
const recoveryMutex = await acquireRecoveryMutex(locksDirectory);
|
|
204
|
+
try {
|
|
205
|
+
const snapshot = await inspectLockSnapshot(locksDirectory, dependencies);
|
|
206
|
+
if (snapshot.status.status !== "stale" || snapshot.identity === undefined) {
|
|
207
|
+
throw new LockRecoveryError(`apply lock is ${snapshot.status.status}; recovery requires a proven stale local owner`);
|
|
208
|
+
}
|
|
209
|
+
await dependencies.beforeRecoveryRemove?.();
|
|
210
|
+
const [owner, current] = await Promise.all([
|
|
211
|
+
readOwner(snapshot.status.path),
|
|
212
|
+
lstat(snapshot.status.path),
|
|
213
|
+
]).catch((error) => {
|
|
214
|
+
if (isErrno(error, "ENOENT")) {
|
|
215
|
+
throw new LockRecoveryError("apply lock changed before recovery");
|
|
216
|
+
}
|
|
217
|
+
throw error;
|
|
218
|
+
});
|
|
219
|
+
if (owner?.token !== snapshot.status.owner.token ||
|
|
220
|
+
current.dev !== snapshot.identity.dev ||
|
|
221
|
+
current.ino !== snapshot.identity.ino) {
|
|
222
|
+
throw new LockRecoveryError("apply lock changed before recovery");
|
|
223
|
+
}
|
|
224
|
+
recoveryMutex.assertHeld();
|
|
225
|
+
await rm(snapshot.status.path);
|
|
226
|
+
await syncDirectory(locksDirectory);
|
|
227
|
+
return snapshot.status.owner;
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
await recoveryMutex.release();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
export async function acquireApplyLock(locksDirectory, options) {
|
|
33
234
|
await mkdir(locksDirectory, { recursive: true, mode: 0o700 });
|
|
34
235
|
const path = join(locksDirectory, "apply.lock");
|
|
35
236
|
const token = randomUUID();
|
|
237
|
+
const processIdentity = await inspectProcessIdentity(process.pid);
|
|
238
|
+
const owner = {
|
|
239
|
+
token,
|
|
240
|
+
pid: process.pid,
|
|
241
|
+
...(processIdentity.status === "alive"
|
|
242
|
+
? { processStartIdentity: processIdentity.identity }
|
|
243
|
+
: {}),
|
|
244
|
+
hostname: hostname(),
|
|
245
|
+
command: options.command,
|
|
246
|
+
planId: options.planId,
|
|
247
|
+
runId: options.runId,
|
|
248
|
+
createdAt: new Date().toISOString(),
|
|
249
|
+
};
|
|
36
250
|
let handle;
|
|
37
251
|
try {
|
|
38
252
|
handle = await open(path, "wx", 0o600);
|
|
39
253
|
}
|
|
40
254
|
catch (error) {
|
|
41
|
-
if (error
|
|
42
|
-
"
|
|
43
|
-
error.code === "EEXIST") {
|
|
44
|
-
throw new LockHeldError(`apply lock exists at ${path}; verify its recorded process before removing a stale lock`);
|
|
255
|
+
if (isErrno(error, "EEXIST")) {
|
|
256
|
+
throw new LockHeldError(`apply lock exists at ${path}; inspect it with "agentrinse lock status"`);
|
|
45
257
|
}
|
|
46
258
|
throw error;
|
|
47
259
|
}
|
|
48
260
|
try {
|
|
49
|
-
await handle.writeFile(`${JSON.stringify(
|
|
50
|
-
token,
|
|
51
|
-
pid: process.pid,
|
|
52
|
-
hostname: hostname(),
|
|
53
|
-
planId,
|
|
54
|
-
createdAt: new Date().toISOString(),
|
|
55
|
-
})}\n`, "utf8");
|
|
261
|
+
await handle.writeFile(`${JSON.stringify(owner)}\n`, "utf8");
|
|
56
262
|
await handle.sync();
|
|
57
263
|
await syncDirectory(locksDirectory);
|
|
58
264
|
const identity = await handle.stat();
|
|
@@ -66,8 +272,8 @@ export async function acquireApplyLock(locksDirectory, planId) {
|
|
|
66
272
|
released = true;
|
|
67
273
|
await handle.close();
|
|
68
274
|
try {
|
|
69
|
-
const [
|
|
70
|
-
if (
|
|
275
|
+
const [currentOwner, current] = await Promise.all([readOwner(path), lstat(path)]);
|
|
276
|
+
if (currentOwner?.token === token &&
|
|
71
277
|
current.dev === identity.dev &&
|
|
72
278
|
current.ino === identity.ino) {
|
|
73
279
|
await rm(path);
|
|
@@ -75,9 +281,7 @@ export async function acquireApplyLock(locksDirectory, planId) {
|
|
|
75
281
|
}
|
|
76
282
|
}
|
|
77
283
|
catch (error) {
|
|
78
|
-
if (!(error
|
|
79
|
-
"code" in error &&
|
|
80
|
-
error.code === "ENOENT")) {
|
|
284
|
+
if (!isErrno(error, "ENOENT")) {
|
|
81
285
|
throw error;
|
|
82
286
|
}
|
|
83
287
|
}
|
package/dist/state/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ZodType } from "zod";
|
|
2
|
+
export declare function listJsonRecords<T>(directory: string, schema: ZodType<T>): Promise<T[]>;
|
|
3
|
+
export declare function readJsonRecord<T>(directory: string, idOrPath: string, schema: ZodType<T>): Promise<T>;
|
|
4
|
+
export declare function resolveJsonRecordPath(directory: string, idOrPath: string): string;
|
|
5
|
+
//# sourceMappingURL=records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/state/records.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAUnC,wBAAsB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAgB5F;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOjF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, resolve } from "node:path";
|
|
3
|
+
import { readJsonFile } from "./json-file.js";
|
|
4
|
+
function isMissing(error) {
|
|
5
|
+
return (error instanceof Error && "code" in error && error.code === "ENOENT");
|
|
6
|
+
}
|
|
7
|
+
export async function listJsonRecords(directory, schema) {
|
|
8
|
+
let names;
|
|
9
|
+
try {
|
|
10
|
+
names = await readdir(directory);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
if (isMissing(error)) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
const records = [];
|
|
19
|
+
for (const name of names.filter((entry) => entry.endsWith(".json")).sort()) {
|
|
20
|
+
records.push(schema.parse(await readJsonFile(resolve(directory, name))));
|
|
21
|
+
}
|
|
22
|
+
return records;
|
|
23
|
+
}
|
|
24
|
+
export async function readJsonRecord(directory, idOrPath, schema) {
|
|
25
|
+
const path = resolveJsonRecordPath(directory, idOrPath);
|
|
26
|
+
return schema.parse(await readJsonFile(path));
|
|
27
|
+
}
|
|
28
|
+
export function resolveJsonRecordPath(directory, idOrPath) {
|
|
29
|
+
const explicitPath = isAbsolute(idOrPath) ||
|
|
30
|
+
idOrPath.endsWith(".json") ||
|
|
31
|
+
idOrPath.includes("/") ||
|
|
32
|
+
idOrPath.includes("\\");
|
|
33
|
+
return explicitPath ? resolve(idOrPath) : resolve(directory, `${idOrPath}.json`);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/state/records.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,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,eAAe,CAAI,SAAiB,EAAE,MAAkB;IAC5E,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,QAAgB,EAChB,MAAkB;IAElB,MAAM,IAAI,GAAG,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,QAAgB;IACvE,MAAM,YAAY,GAChB,UAAU,CAAC,QAAQ,CAAC;QACpB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;AACnF,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { CleanupPlan } from "../contracts/plan.js";
|
|
2
|
+
import type { Diagnostic } from "../contracts/diagnostic.js";
|
|
2
3
|
import { type ActionExecution, type CleanupRun } from "../contracts/run.js";
|
|
3
4
|
export type RunJournal = {
|
|
4
5
|
path: string;
|
|
5
6
|
snapshot(): CleanupRun;
|
|
6
7
|
updateAction(actionId: string, patch: Partial<ActionExecution>): Promise<CleanupRun>;
|
|
7
8
|
complete(completedAt?: Date): Promise<CleanupRun>;
|
|
9
|
+
interrupt(diagnostic: Diagnostic, completedAt?: Date): Promise<CleanupRun>;
|
|
8
10
|
};
|
|
9
|
-
export declare function createRunJournal(runsDirectory: string, plan: CleanupPlan, startedAt?: Date): Promise<RunJournal>;
|
|
11
|
+
export declare function createRunJournal(runsDirectory: string, plan: CleanupPlan, startedAt?: Date, runId?: string): Promise<RunJournal>;
|
|
10
12
|
//# sourceMappingURL=run-journal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-journal.d.ts","sourceRoot":"","sources":["../../src/state/run-journal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAoB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG9F,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,IAAI,UAAU,CAAC;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrF,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"run-journal.d.ts","sourceRoot":"","sources":["../../src/state/run-journal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAoB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG9F,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,IAAI,UAAU,CAAC;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrF,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5E,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,WAAW,EACjB,SAAS,OAAa,EACtB,KAAK,GAAE,MAAqB,GAC3B,OAAO,CAAC,UAAU,CAAC,CA0ErB"}
|
|
@@ -2,10 +2,10 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { cleanupRunSchema } from "../contracts/run.js";
|
|
4
4
|
import { writeJsonAtomic } from "./json-file.js";
|
|
5
|
-
export async function createRunJournal(runsDirectory, plan, startedAt = new Date()) {
|
|
5
|
+
export async function createRunJournal(runsDirectory, plan, startedAt = new Date(), runId = randomUUID()) {
|
|
6
6
|
let run = cleanupRunSchema.parse({
|
|
7
7
|
schemaVersion: 1,
|
|
8
|
-
runId
|
|
8
|
+
runId,
|
|
9
9
|
planId: plan.planId,
|
|
10
10
|
startedAt: startedAt.toISOString(),
|
|
11
11
|
status: "running",
|
|
@@ -18,10 +18,11 @@ export async function createRunJournal(runsDirectory, plan, startedAt = new Date
|
|
|
18
18
|
diagnostics: [],
|
|
19
19
|
});
|
|
20
20
|
const path = join(runsDirectory, `${run.runId}.json`);
|
|
21
|
-
|
|
21
|
+
const privateDirectories = [runsDirectory];
|
|
22
|
+
await writeJsonAtomic(path, run, { privateDirectories });
|
|
22
23
|
const persist = async () => {
|
|
23
24
|
run = cleanupRunSchema.parse(run);
|
|
24
|
-
await writeJsonAtomic(path, run);
|
|
25
|
+
await writeJsonAtomic(path, run, { privateDirectories });
|
|
25
26
|
return structuredClone(run);
|
|
26
27
|
};
|
|
27
28
|
return {
|
|
@@ -52,6 +53,16 @@ export async function createRunJournal(runsDirectory, plan, startedAt = new Date
|
|
|
52
53
|
};
|
|
53
54
|
return persist();
|
|
54
55
|
},
|
|
56
|
+
async interrupt(diagnostic, completedAt = new Date()) {
|
|
57
|
+
run = {
|
|
58
|
+
...run,
|
|
59
|
+
completedAt: completedAt.toISOString(),
|
|
60
|
+
status: "interrupted",
|
|
61
|
+
reclaimedBytes: run.actions.reduce((total, action) => total + (action.reclaimedBytes ?? 0), 0),
|
|
62
|
+
diagnostics: [...run.diagnostics, diagnostic],
|
|
63
|
+
};
|
|
64
|
+
return persist();
|
|
65
|
+
},
|
|
55
66
|
};
|
|
56
67
|
}
|
|
57
68
|
//# sourceMappingURL=run-journal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-journal.js","sourceRoot":"","sources":["../../src/state/run-journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"run-journal.js","sourceRoot":"","sources":["../../src/state/run-journal.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.2.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.
|
|
1
|
+
export const VERSION = "0.2.0";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentrinse",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Safe, local-first cleanup for agentic development.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agents",
|
|
8
8
|
"cleanup",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"schemas:check": "pnpm build && node scripts/generate-schemas.mjs --check",
|
|
51
51
|
"schemas:generate": "pnpm build && node scripts/generate-schemas.mjs",
|
|
52
52
|
"smoke": "pnpm build && node scripts/smoke.mjs",
|
|
53
|
+
"smoke:package": "pnpm build && node scripts/smoke-package.mjs",
|
|
53
54
|
"test": "vitest run",
|
|
54
55
|
"test:watch": "vitest",
|
|
55
56
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"schemaVersion": {
|
|
6
|
+
"type": "number",
|
|
7
|
+
"const": 1
|
|
8
|
+
},
|
|
9
|
+
"command": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"minLength": 1
|
|
12
|
+
},
|
|
13
|
+
"agentrinseVersion": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"minLength": 1
|
|
16
|
+
},
|
|
17
|
+
"startedAt": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"format": "date-time",
|
|
20
|
+
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
|
|
21
|
+
},
|
|
22
|
+
"completedAt": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"format": "date-time",
|
|
25
|
+
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
|
|
26
|
+
},
|
|
27
|
+
"status": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"enum": ["ok", "degraded", "failed"]
|
|
30
|
+
},
|
|
31
|
+
"data": {},
|
|
32
|
+
"diagnostics": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"items": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"properties": {
|
|
37
|
+
"severity": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"enum": ["info", "warning", "error"]
|
|
40
|
+
},
|
|
41
|
+
"code": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"minLength": 1
|
|
44
|
+
},
|
|
45
|
+
"message": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"minLength": 1
|
|
48
|
+
},
|
|
49
|
+
"adapter": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"minLength": 1
|
|
52
|
+
},
|
|
53
|
+
"resourceId": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"minLength": 1
|
|
56
|
+
},
|
|
57
|
+
"remediation": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"minLength": 1
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"required": ["severity", "code", "message"]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"required": [
|
|
67
|
+
"schemaVersion",
|
|
68
|
+
"command",
|
|
69
|
+
"agentrinseVersion",
|
|
70
|
+
"startedAt",
|
|
71
|
+
"completedAt",
|
|
72
|
+
"status",
|
|
73
|
+
"data",
|
|
74
|
+
"diagnostics"
|
|
75
|
+
],
|
|
76
|
+
"$id": "https://agentrinse.com/schemas/command-envelope.schema.json",
|
|
77
|
+
"title": "AgentRinse command-envelope schema"
|
|
78
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"schemaVersion": {
|
|
6
|
+
"type": "number",
|
|
7
|
+
"const": 1
|
|
8
|
+
},
|
|
9
|
+
"event": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"minLength": 1
|
|
12
|
+
},
|
|
13
|
+
"timestamp": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"format": "date-time",
|
|
16
|
+
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
|
|
17
|
+
},
|
|
18
|
+
"command": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"minLength": 1
|
|
21
|
+
},
|
|
22
|
+
"commandId": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
},
|
|
26
|
+
"sequence": {
|
|
27
|
+
"type": "integer",
|
|
28
|
+
"exclusiveMinimum": 0,
|
|
29
|
+
"maximum": 9007199254740991
|
|
30
|
+
},
|
|
31
|
+
"data": {}
|
|
32
|
+
},
|
|
33
|
+
"required": ["schemaVersion", "event", "timestamp", "command", "commandId", "sequence"],
|
|
34
|
+
"$id": "https://agentrinse.com/schemas/command-event.schema.json",
|
|
35
|
+
"title": "AgentRinse command-event schema"
|
|
36
|
+
}
|