@ranimontagna/agent-toolkit 0.2.3 → 0.3.1
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/CHANGELOG.md +16 -0
- package/README.md +45 -7
- package/dist/bin/agent-toolkit.js +9 -4
- package/dist/bin/agent-toolkit.js.map +1 -1
- package/dist/src/ariadne/args.d.ts +2 -0
- package/dist/src/ariadne/args.js +146 -0
- package/dist/src/ariadne/args.js.map +1 -0
- package/dist/src/ariadne/checks.d.ts +24 -0
- package/dist/src/ariadne/checks.js +74 -0
- package/dist/src/ariadne/checks.js.map +1 -0
- package/dist/src/ariadne/cli.d.ts +38 -0
- package/dist/src/ariadne/cli.js +206 -0
- package/dist/src/ariadne/cli.js.map +1 -0
- package/dist/src/ariadne/doctor.d.ts +16 -0
- package/dist/src/ariadne/doctor.js +207 -0
- package/dist/src/ariadne/doctor.js.map +1 -0
- package/dist/src/ariadne/git.d.ts +58 -0
- package/dist/src/ariadne/git.js +577 -0
- package/dist/src/ariadne/git.js.map +1 -0
- package/dist/src/ariadne/import.d.ts +2 -0
- package/dist/src/ariadne/import.js +93 -0
- package/dist/src/ariadne/import.js.map +1 -0
- package/dist/src/ariadne/init.d.ts +47 -0
- package/dist/src/ariadne/init.js +345 -0
- package/dist/src/ariadne/init.js.map +1 -0
- package/dist/src/ariadne/lock.d.ts +22 -0
- package/dist/src/ariadne/lock.js +478 -0
- package/dist/src/ariadne/lock.js.map +1 -0
- package/dist/src/ariadne/loop.d.ts +26 -0
- package/dist/src/ariadne/loop.js +1316 -0
- package/dist/src/ariadne/loop.js.map +1 -0
- package/dist/src/ariadne/ownership.d.ts +32 -0
- package/dist/src/ariadne/ownership.js +161 -0
- package/dist/src/ariadne/ownership.js.map +1 -0
- package/dist/src/ariadne/process.d.ts +27 -0
- package/dist/src/ariadne/process.js +302 -0
- package/dist/src/ariadne/process.js.map +1 -0
- package/dist/src/ariadne/prompt.d.ts +11 -0
- package/dist/src/ariadne/prompt.js +29 -0
- package/dist/src/ariadne/prompt.js.map +1 -0
- package/dist/src/ariadne/render.d.ts +7 -0
- package/dist/src/ariadne/render.js +72 -0
- package/dist/src/ariadne/render.js.map +1 -0
- package/dist/src/ariadne/result.d.ts +54 -0
- package/dist/src/ariadne/result.js +129 -0
- package/dist/src/ariadne/result.js.map +1 -0
- package/dist/src/ariadne/runtimes/antigravity.d.ts +2 -0
- package/dist/src/ariadne/runtimes/antigravity.js +17 -0
- package/dist/src/ariadne/runtimes/antigravity.js.map +1 -0
- package/dist/src/ariadne/runtimes/claude.d.ts +2 -0
- package/dist/src/ariadne/runtimes/claude.js +17 -0
- package/dist/src/ariadne/runtimes/claude.js.map +1 -0
- package/dist/src/ariadne/runtimes/codex.d.ts +2 -0
- package/dist/src/ariadne/runtimes/codex.js +24 -0
- package/dist/src/ariadne/runtimes/codex.js.map +1 -0
- package/dist/src/ariadne/runtimes/gemini.d.ts +2 -0
- package/dist/src/ariadne/runtimes/gemini.js +18 -0
- package/dist/src/ariadne/runtimes/gemini.js.map +1 -0
- package/dist/src/ariadne/runtimes/index.d.ts +4 -0
- package/dist/src/ariadne/runtimes/index.js +82 -0
- package/dist/src/ariadne/runtimes/index.js.map +1 -0
- package/dist/src/ariadne/runtimes/opencode.d.ts +2 -0
- package/dist/src/ariadne/runtimes/opencode.js +19 -0
- package/dist/src/ariadne/runtimes/opencode.js.map +1 -0
- package/dist/src/ariadne/runtimes/shared.d.ts +24 -0
- package/dist/src/ariadne/runtimes/shared.js +141 -0
- package/dist/src/ariadne/runtimes/shared.js.map +1 -0
- package/dist/src/ariadne/runtimes/types.d.ts +56 -0
- package/dist/src/ariadne/runtimes/types.js +3 -0
- package/dist/src/ariadne/runtimes/types.js.map +1 -0
- package/dist/src/ariadne/schema.d.ts +11 -0
- package/dist/src/ariadne/schema.js +214 -0
- package/dist/src/ariadne/schema.js.map +1 -0
- package/dist/src/ariadne/status.d.ts +72 -0
- package/dist/src/ariadne/status.js +280 -0
- package/dist/src/ariadne/status.js.map +1 -0
- package/dist/src/ariadne/store.d.ts +99 -0
- package/dist/src/ariadne/store.js +738 -0
- package/dist/src/ariadne/store.js.map +1 -0
- package/dist/src/ariadne/types.d.ts +128 -0
- package/dist/src/ariadne/types.js +5 -0
- package/dist/src/ariadne/types.js.map +1 -0
- package/dist/src/ariadne/usage.d.ts +1 -0
- package/dist/src/ariadne/usage.js +8 -0
- package/dist/src/ariadne/usage.js.map +1 -0
- package/dist/src/build-skills-index.d.ts +3 -0
- package/dist/src/build-skills-index.js +50 -0
- package/dist/src/build-skills-index.js.map +1 -0
- package/dist/src/cli.d.ts +5 -0
- package/dist/src/cli.js +14 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/context.js.map +1 -1
- package/dist/src/lock-update.js.map +1 -1
- package/dist/src/main.js.map +1 -1
- package/dist/src/release.js.map +1 -1
- package/dist/src/skill-targets.js.map +1 -1
- package/dist/src/skills-audit.d.ts +6 -0
- package/dist/src/skills-audit.js +68 -2
- package/dist/src/skills-audit.js.map +1 -1
- package/dist/src/skills-index.d.ts +12 -0
- package/dist/src/skills-index.js +50 -0
- package/dist/src/skills-index.js.map +1 -0
- package/dist/src/stage-agent-skills.d.ts +1 -0
- package/dist/src/stage-agent-skills.js +32 -0
- package/dist/src/stage-agent-skills.js.map +1 -0
- package/dist/src/system.js.map +1 -1
- package/dist/src/tool-lock.d.ts +20 -0
- package/dist/src/tool-lock.js +26 -0
- package/dist/src/tool-lock.js.map +1 -1
- package/dist/src/usage.js +1 -0
- package/dist/src/usage.js.map +1 -1
- package/package.json +15 -8
- package/skills/frontend/accessibility/BRIEF.md +11 -0
- package/skills/frontend/accessibility/NOTICE.md +3 -0
- package/skills/frontend/accessibility/SKILL.md +10 -0
- package/skills/frontend/astro/astro-react-landing/BRIEF.md +10 -0
- package/skills/frontend/astro/astro-react-landing/SKILL.md +42 -0
- package/skills/frontend/design/frontend-design/BRIEF.md +10 -0
- package/skills/frontend/design/frontend-design/SKILL.md +38 -0
- package/skills/frontend/design/ui-ux-pro-max/BRIEF.md +11 -0
- package/skills/frontend/design/ui-ux-pro-max/NOTICE.md +3 -0
- package/skills/frontend/design/ui-ux-pro-max/SKILL.md +15 -0
- package/skills/frontend/gsap/gsap-motion/BRIEF.md +10 -0
- package/skills/frontend/gsap/gsap-motion/SKILL.md +36 -0
- package/skills/frontend/seo/seo-page/BRIEF.md +10 -0
- package/skills/frontend/seo/seo-page/SKILL.md +34 -0
- package/skills/quality/biome-formatting/BRIEF.md +9 -0
- package/skills/quality/biome-formatting/SKILL.md +27 -0
- package/skills/research/instagram-public-research/BRIEF.md +10 -0
- package/skills/research/instagram-public-research/SKILL.md +41 -0
- package/skills/research/research-data-collection/BRIEF.md +11 -0
- package/skills/research/research-data-collection/SKILL.md +40 -0
- package/skills/workflow/ariadne/NOTICE.md +11 -0
- package/skills/workflow/ariadne/SKILL.md +96 -0
- package/skills/workflow/ariadne-prd/NOTICE.md +11 -0
- package/skills/workflow/ariadne-prd/SKILL.md +69 -0
- package/skills.index.json +299 -0
- package/tools.lock.json +40 -21
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { AriadneStateError } from "./schema.js";
|
|
5
|
+
const ROOT_GENERATION = "root";
|
|
6
|
+
const GENERATION_PATTERN = /^(?:root|gen-[0-9a-f-]{36})$/;
|
|
7
|
+
const OWNER_TOKEN_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
8
|
+
function hasExactKeys(candidate, expected) {
|
|
9
|
+
const keys = Object.keys(candidate);
|
|
10
|
+
return (keys.length === expected.length &&
|
|
11
|
+
expected.every((key) => Object.hasOwn(candidate, key)));
|
|
12
|
+
}
|
|
13
|
+
function lockStateError(message) {
|
|
14
|
+
return new AriadneStateError(".ariadne/lock", message);
|
|
15
|
+
}
|
|
16
|
+
function malformedLock() {
|
|
17
|
+
return lockStateError("Ariadne lock is malformed.");
|
|
18
|
+
}
|
|
19
|
+
function changedDuringRecovery() {
|
|
20
|
+
return lockStateError("Ariadne project lock changed during stale-lock recovery.");
|
|
21
|
+
}
|
|
22
|
+
function changedLockPath() {
|
|
23
|
+
return lockStateError("Ariadne lock path changed or became a symbolic link during the run.");
|
|
24
|
+
}
|
|
25
|
+
function captureIdentity(source, kind) {
|
|
26
|
+
let stat;
|
|
27
|
+
try {
|
|
28
|
+
stat = fs.lstatSync(source);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw changedLockPath();
|
|
32
|
+
}
|
|
33
|
+
if (stat.isSymbolicLink() ||
|
|
34
|
+
(kind === "directory" ? !stat.isDirectory() : !stat.isFile()) ||
|
|
35
|
+
(kind === "file" && stat.nlink !== 1)) {
|
|
36
|
+
throw changedLockPath();
|
|
37
|
+
}
|
|
38
|
+
return { source, kind, device: stat.dev, inode: stat.ino };
|
|
39
|
+
}
|
|
40
|
+
function assertIdentity(identity) {
|
|
41
|
+
const current = captureIdentity(identity.source, identity.kind);
|
|
42
|
+
if (current.device !== identity.device || current.inode !== identity.inode) {
|
|
43
|
+
throw changedLockPath();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function assertLinkedFileIdentity(source, identity, links) {
|
|
47
|
+
let current;
|
|
48
|
+
try {
|
|
49
|
+
current = fs.lstatSync(source);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
throw changedLockPath();
|
|
53
|
+
}
|
|
54
|
+
if (current.isSymbolicLink() ||
|
|
55
|
+
!current.isFile() ||
|
|
56
|
+
current.dev !== identity.device ||
|
|
57
|
+
current.ino !== identity.inode ||
|
|
58
|
+
current.nlink !== links) {
|
|
59
|
+
throw changedLockPath();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function sameIdentity(a, b) {
|
|
63
|
+
return a.device === b.device && a.inode === b.inode;
|
|
64
|
+
}
|
|
65
|
+
function contendedLock(pid) {
|
|
66
|
+
return lockStateError(`Ariadne project is already locked by PID ${pid}.`);
|
|
67
|
+
}
|
|
68
|
+
function parseLockRecord(raw) {
|
|
69
|
+
let value;
|
|
70
|
+
try {
|
|
71
|
+
value = JSON.parse(raw);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw malformedLock();
|
|
75
|
+
}
|
|
76
|
+
if (!value || typeof value !== "object")
|
|
77
|
+
throw malformedLock();
|
|
78
|
+
const candidate = value;
|
|
79
|
+
if (!hasExactKeys(candidate, [
|
|
80
|
+
"schemaVersion",
|
|
81
|
+
"pid",
|
|
82
|
+
"startedAt",
|
|
83
|
+
"runId",
|
|
84
|
+
"ownerToken",
|
|
85
|
+
]) ||
|
|
86
|
+
candidate.schemaVersion !== 1 ||
|
|
87
|
+
!Number.isSafeInteger(candidate.pid) ||
|
|
88
|
+
typeof candidate.pid !== "number" ||
|
|
89
|
+
candidate.pid <= 0 ||
|
|
90
|
+
typeof candidate.startedAt !== "string" ||
|
|
91
|
+
Number.isNaN(Date.parse(candidate.startedAt)) ||
|
|
92
|
+
typeof candidate.runId !== "string" ||
|
|
93
|
+
!candidate.runId ||
|
|
94
|
+
typeof candidate.ownerToken !== "string" ||
|
|
95
|
+
!OWNER_TOKEN_PATTERN.test(candidate.ownerToken)) {
|
|
96
|
+
throw malformedLock();
|
|
97
|
+
}
|
|
98
|
+
return candidate;
|
|
99
|
+
}
|
|
100
|
+
function parseTransition(raw) {
|
|
101
|
+
let value;
|
|
102
|
+
try {
|
|
103
|
+
value = JSON.parse(raw);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw malformedLock();
|
|
107
|
+
}
|
|
108
|
+
if (!value || typeof value !== "object")
|
|
109
|
+
throw malformedLock();
|
|
110
|
+
const candidate = value;
|
|
111
|
+
if (!hasExactKeys(candidate, ["schemaVersion", "nextGeneration"]) ||
|
|
112
|
+
candidate.schemaVersion !== 1 ||
|
|
113
|
+
typeof candidate.nextGeneration !== "string" ||
|
|
114
|
+
!GENERATION_PATTERN.test(candidate.nextGeneration) ||
|
|
115
|
+
candidate.nextGeneration === ROOT_GENERATION) {
|
|
116
|
+
throw malformedLock();
|
|
117
|
+
}
|
|
118
|
+
return candidate;
|
|
119
|
+
}
|
|
120
|
+
function sameRecord(a, b) {
|
|
121
|
+
return a.pid === b.pid && a.runId === b.runId;
|
|
122
|
+
}
|
|
123
|
+
function sameCompleteRecord(a, b) {
|
|
124
|
+
return (sameRecord(a, b) &&
|
|
125
|
+
a.schemaVersion === b.schemaVersion &&
|
|
126
|
+
a.startedAt === b.startedAt &&
|
|
127
|
+
a.ownerToken === b.ownerToken);
|
|
128
|
+
}
|
|
129
|
+
function coordinatorPath(lockPath) {
|
|
130
|
+
return path.join(path.dirname(lockPath), "runs", ".lock-coordinator");
|
|
131
|
+
}
|
|
132
|
+
function generationRecordPath(coordinator, generation) {
|
|
133
|
+
return path.join(coordinator, `${generation}.json`);
|
|
134
|
+
}
|
|
135
|
+
function generationTransitionPath(coordinator, generation) {
|
|
136
|
+
return path.join(coordinator, `${generation}.next`);
|
|
137
|
+
}
|
|
138
|
+
function ensureCoordinatorDirectory(lockPath) {
|
|
139
|
+
const stateRoot = path.dirname(lockPath);
|
|
140
|
+
fs.mkdirSync(stateRoot, { recursive: true });
|
|
141
|
+
const stateIdentity = captureIdentity(stateRoot, "directory");
|
|
142
|
+
const coordinator = coordinatorPath(lockPath);
|
|
143
|
+
const runsRoot = path.dirname(coordinator);
|
|
144
|
+
fs.mkdirSync(runsRoot, { recursive: true, mode: 0o700 });
|
|
145
|
+
const runsIdentity = captureIdentity(runsRoot, "directory");
|
|
146
|
+
try {
|
|
147
|
+
fs.mkdirSync(coordinator, { mode: 0o700 });
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (error.code !== "EEXIST")
|
|
151
|
+
throw error;
|
|
152
|
+
let stat;
|
|
153
|
+
try {
|
|
154
|
+
stat = fs.lstatSync(coordinator);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
throw malformedLock();
|
|
158
|
+
}
|
|
159
|
+
if (stat.isSymbolicLink() || !stat.isDirectory())
|
|
160
|
+
throw malformedLock();
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
stateRoot,
|
|
164
|
+
runsRoot,
|
|
165
|
+
coordinator,
|
|
166
|
+
directories: [
|
|
167
|
+
stateIdentity,
|
|
168
|
+
runsIdentity,
|
|
169
|
+
captureIdentity(coordinator, "directory"),
|
|
170
|
+
],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function assertCoordinatorBoundary(boundary) {
|
|
174
|
+
for (const identity of boundary.directories)
|
|
175
|
+
assertIdentity(identity);
|
|
176
|
+
}
|
|
177
|
+
function ensureRecoveryRunDirectory(runDir, boundary) {
|
|
178
|
+
const resolvedRunDir = path.resolve(runDir);
|
|
179
|
+
if (path.dirname(resolvedRunDir) !== path.resolve(boundary.runsRoot) ||
|
|
180
|
+
resolvedRunDir === path.resolve(boundary.coordinator)) {
|
|
181
|
+
throw lockStateError("Ariadne recovery run directory must be a direct child of .ariadne/runs.");
|
|
182
|
+
}
|
|
183
|
+
assertCoordinatorBoundary(boundary);
|
|
184
|
+
try {
|
|
185
|
+
fs.mkdirSync(resolvedRunDir, { mode: 0o700 });
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
if (error.code !== "EEXIST")
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
const identity = captureIdentity(resolvedRunDir, "directory");
|
|
192
|
+
assertCoordinatorBoundary(boundary);
|
|
193
|
+
return identity;
|
|
194
|
+
}
|
|
195
|
+
function writeCandidate(coordinator, value) {
|
|
196
|
+
const candidatePath = path.join(coordinator, `.candidate-${randomUUID()}.json`);
|
|
197
|
+
const descriptor = fs.openSync(candidatePath, "wx", 0o600);
|
|
198
|
+
try {
|
|
199
|
+
fs.writeFileSync(descriptor, JSON.stringify(value), "utf8");
|
|
200
|
+
fs.fsyncSync(descriptor);
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
fs.closeSync(descriptor);
|
|
204
|
+
}
|
|
205
|
+
return candidatePath;
|
|
206
|
+
}
|
|
207
|
+
function publishJsonExclusive(coordinator, destinationPath, value) {
|
|
208
|
+
const candidatePath = writeCandidate(coordinator, value);
|
|
209
|
+
try {
|
|
210
|
+
fs.linkSync(candidatePath, destinationPath);
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
if (error.code === "EEXIST")
|
|
215
|
+
return false;
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
try {
|
|
220
|
+
fs.unlinkSync(candidatePath);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Private candidates are unreachable coordinator state.
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function readRecord(recordPath) {
|
|
228
|
+
try {
|
|
229
|
+
return parseLockRecord(fs.readFileSync(recordPath, "utf8"));
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
if (error.code === "ENOENT")
|
|
233
|
+
return null;
|
|
234
|
+
throw error;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function readTransition(transitionPath) {
|
|
238
|
+
try {
|
|
239
|
+
return parseTransition(fs.readFileSync(transitionPath, "utf8"));
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
if (error.code === "ENOENT")
|
|
243
|
+
return null;
|
|
244
|
+
throw error;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
function findTailGeneration(coordinator) {
|
|
248
|
+
let generation = ROOT_GENERATION;
|
|
249
|
+
const visited = new Set();
|
|
250
|
+
for (;;) {
|
|
251
|
+
if (visited.has(generation))
|
|
252
|
+
throw malformedLock();
|
|
253
|
+
visited.add(generation);
|
|
254
|
+
const transition = readTransition(generationTransitionPath(coordinator, generation));
|
|
255
|
+
if (!transition)
|
|
256
|
+
return generation;
|
|
257
|
+
generation = transition.nextGeneration;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function newGeneration() {
|
|
261
|
+
return `gen-${randomUUID()}`;
|
|
262
|
+
}
|
|
263
|
+
function publishRecord(coordinator, generation, record) {
|
|
264
|
+
return publishJsonExclusive(coordinator, generationRecordPath(coordinator, generation), record);
|
|
265
|
+
}
|
|
266
|
+
function publishTransition(coordinator, generation, nextGeneration) {
|
|
267
|
+
return publishJsonExclusive(coordinator, generationTransitionPath(coordinator, generation), { schemaVersion: 1, nextGeneration });
|
|
268
|
+
}
|
|
269
|
+
function claimCoordinator(coordinator, record, isProcessAlive) {
|
|
270
|
+
const generation = findTailGeneration(coordinator);
|
|
271
|
+
const current = readRecord(generationRecordPath(coordinator, generation));
|
|
272
|
+
if (!current) {
|
|
273
|
+
if (publishRecord(coordinator, generation, record))
|
|
274
|
+
return generation;
|
|
275
|
+
return claimCoordinator(coordinator, record, isProcessAlive);
|
|
276
|
+
}
|
|
277
|
+
if (isProcessAlive(current.pid)) {
|
|
278
|
+
throw contendedLock(current.pid);
|
|
279
|
+
}
|
|
280
|
+
const replacementGeneration = newGeneration();
|
|
281
|
+
if (!publishRecord(coordinator, replacementGeneration, record)) {
|
|
282
|
+
throw changedDuringRecovery();
|
|
283
|
+
}
|
|
284
|
+
if (!publishTransition(coordinator, generation, replacementGeneration)) {
|
|
285
|
+
throw changedDuringRecovery();
|
|
286
|
+
}
|
|
287
|
+
return replacementGeneration;
|
|
288
|
+
}
|
|
289
|
+
function releaseCoordinator(coordinator, generation) {
|
|
290
|
+
if (findTailGeneration(coordinator) !== generation)
|
|
291
|
+
return;
|
|
292
|
+
publishTransition(coordinator, generation, newGeneration());
|
|
293
|
+
}
|
|
294
|
+
function writePublicLockExclusive(lockPath, record) {
|
|
295
|
+
let descriptor;
|
|
296
|
+
try {
|
|
297
|
+
descriptor = fs.openSync(lockPath, "wx", 0o600);
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
if (error.code === "EEXIST")
|
|
301
|
+
return false;
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
try {
|
|
305
|
+
fs.writeFileSync(descriptor, JSON.stringify(record), "utf8");
|
|
306
|
+
fs.fsyncSync(descriptor);
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
fs.closeSync(descriptor);
|
|
310
|
+
}
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
function readPublicLock(lockPath) {
|
|
314
|
+
try {
|
|
315
|
+
return parseLockRecord(fs.readFileSync(lockPath, "utf8"));
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
if (error.code === "ENOENT")
|
|
319
|
+
return null;
|
|
320
|
+
throw error;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
function privateLockPath(boundary) {
|
|
324
|
+
return path.join(boundary.coordinator, `.public-lock-${randomUUID()}.json`);
|
|
325
|
+
}
|
|
326
|
+
function restorePrivateLock(lockPath, privateLock, boundary) {
|
|
327
|
+
assertCoordinatorBoundary(boundary);
|
|
328
|
+
assertIdentity(privateLock.identity);
|
|
329
|
+
try {
|
|
330
|
+
fs.linkSync(privateLock.source, lockPath);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
if (error.code === "EEXIST")
|
|
334
|
+
return;
|
|
335
|
+
throw error;
|
|
336
|
+
}
|
|
337
|
+
assertCoordinatorBoundary(boundary);
|
|
338
|
+
assertLinkedFileIdentity(privateLock.source, privateLock.identity, 2);
|
|
339
|
+
assertLinkedFileIdentity(lockPath, privateLock.identity, 2);
|
|
340
|
+
fs.unlinkSync(privateLock.source);
|
|
341
|
+
}
|
|
342
|
+
function moveExpectedPublicLock(lockPath, expectedRecord, boundary, expectedIdentity) {
|
|
343
|
+
assertCoordinatorBoundary(boundary);
|
|
344
|
+
const privatePath = privateLockPath(boundary);
|
|
345
|
+
try {
|
|
346
|
+
fs.renameSync(lockPath, privatePath);
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
if (error.code === "ENOENT") {
|
|
350
|
+
throw changedLockPath();
|
|
351
|
+
}
|
|
352
|
+
throw error;
|
|
353
|
+
}
|
|
354
|
+
assertCoordinatorBoundary(boundary);
|
|
355
|
+
const identity = captureIdentity(privatePath, "file");
|
|
356
|
+
let record;
|
|
357
|
+
try {
|
|
358
|
+
const parsed = readPublicLock(privatePath);
|
|
359
|
+
if (!parsed)
|
|
360
|
+
throw changedLockPath();
|
|
361
|
+
record = parsed;
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
restorePrivateLock(lockPath, { source: privatePath, identity }, boundary);
|
|
365
|
+
throw error;
|
|
366
|
+
}
|
|
367
|
+
const privateLock = { source: privatePath, identity, record };
|
|
368
|
+
if ((expectedIdentity && !sameIdentity(identity, expectedIdentity)) ||
|
|
369
|
+
!sameCompleteRecord(record, expectedRecord)) {
|
|
370
|
+
restorePrivateLock(lockPath, privateLock, boundary);
|
|
371
|
+
throw changedDuringRecovery();
|
|
372
|
+
}
|
|
373
|
+
return privateLock;
|
|
374
|
+
}
|
|
375
|
+
function assertPrivateLock(privateLock, boundary) {
|
|
376
|
+
assertCoordinatorBoundary(boundary);
|
|
377
|
+
assertIdentity(privateLock.identity);
|
|
378
|
+
const current = readPublicLock(privateLock.source);
|
|
379
|
+
if (!current || !sameCompleteRecord(current, privateLock.record)) {
|
|
380
|
+
throw changedLockPath();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function recoverPublicLock(input, stale, boundary) {
|
|
384
|
+
// Validate the requested run directory before moving the public lock, but do
|
|
385
|
+
// not publish recovery evidence through that mutable pathname. The moved
|
|
386
|
+
// file itself remains durable inside the pinned private coordinator.
|
|
387
|
+
ensureRecoveryRunDirectory(input.runDir, boundary);
|
|
388
|
+
const publicIdentity = captureIdentity(input.lockPath, "file");
|
|
389
|
+
const privateLock = moveExpectedPublicLock(input.lockPath, stale, boundary, publicIdentity);
|
|
390
|
+
try {
|
|
391
|
+
assertPrivateLock(privateLock, boundary);
|
|
392
|
+
return privateLock;
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
restorePrivateLock(input.lockPath, privateLock, boundary);
|
|
396
|
+
throw error;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
export function acquireProjectLock(input) {
|
|
400
|
+
const boundary = ensureCoordinatorDirectory(input.lockPath);
|
|
401
|
+
const { coordinator } = boundary;
|
|
402
|
+
const record = {
|
|
403
|
+
schemaVersion: 1,
|
|
404
|
+
pid: input.pid,
|
|
405
|
+
startedAt: input.now().toISOString(),
|
|
406
|
+
runId: input.runId,
|
|
407
|
+
ownerToken: randomUUID(),
|
|
408
|
+
};
|
|
409
|
+
const generation = claimCoordinator(coordinator, record, input.isProcessAlive);
|
|
410
|
+
try {
|
|
411
|
+
if (writePublicLockExclusive(input.lockPath, record)) {
|
|
412
|
+
return createHandle(input.lockPath, boundary, generation, record);
|
|
413
|
+
}
|
|
414
|
+
const existing = readPublicLock(input.lockPath);
|
|
415
|
+
if (!existing)
|
|
416
|
+
throw changedDuringRecovery();
|
|
417
|
+
if (sameCompleteRecord(existing, record)) {
|
|
418
|
+
return createHandle(input.lockPath, boundary, generation, record);
|
|
419
|
+
}
|
|
420
|
+
if (input.isProcessAlive(existing.pid)) {
|
|
421
|
+
throw contendedLock(existing.pid);
|
|
422
|
+
}
|
|
423
|
+
const recoveredPrivate = recoverPublicLock(input, existing, boundary);
|
|
424
|
+
try {
|
|
425
|
+
if (!writePublicLockExclusive(input.lockPath, record)) {
|
|
426
|
+
restorePrivateLock(input.lockPath, recoveredPrivate, boundary);
|
|
427
|
+
throw changedDuringRecovery();
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
catch (error) {
|
|
431
|
+
restorePrivateLock(input.lockPath, recoveredPrivate, boundary);
|
|
432
|
+
throw error;
|
|
433
|
+
}
|
|
434
|
+
return createHandle(input.lockPath, boundary, generation, record, existing);
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
assertCoordinatorBoundary(boundary);
|
|
438
|
+
releaseCoordinator(coordinator, generation);
|
|
439
|
+
throw error;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
function createHandle(lockPath, boundary, generation, record, recovered) {
|
|
443
|
+
const lockIdentity = captureIdentity(lockPath, "file");
|
|
444
|
+
const assertIntegrity = () => {
|
|
445
|
+
assertCoordinatorBoundary(boundary);
|
|
446
|
+
assertIdentity(lockIdentity);
|
|
447
|
+
const current = readPublicLock(lockPath);
|
|
448
|
+
if (!current || !sameCompleteRecord(current, record)) {
|
|
449
|
+
throw changedLockPath();
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
return {
|
|
453
|
+
record,
|
|
454
|
+
recovered,
|
|
455
|
+
assertIntegrity,
|
|
456
|
+
release() {
|
|
457
|
+
assertIntegrity();
|
|
458
|
+
const { coordinator } = boundary;
|
|
459
|
+
if (findTailGeneration(coordinator) !== generation)
|
|
460
|
+
return;
|
|
461
|
+
try {
|
|
462
|
+
const privateLock = moveExpectedPublicLock(lockPath, record, boundary, lockIdentity);
|
|
463
|
+
try {
|
|
464
|
+
assertPrivateLock(privateLock, boundary);
|
|
465
|
+
fs.unlinkSync(privateLock.source);
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
restorePrivateLock(lockPath, privateLock, boundary);
|
|
469
|
+
throw error;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
finally {
|
|
473
|
+
releaseCoordinator(coordinator, generation);
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/ariadne/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { runQualityChecks } from "./checks.js";
|
|
2
|
+
import type { AriadneGit } from "./git.js";
|
|
3
|
+
import type { acquireProjectLock } from "./lock.js";
|
|
4
|
+
import { type AriadneOwnershipCertification } from "./ownership.js";
|
|
5
|
+
import type { runAgentProcess } from "./process.js";
|
|
6
|
+
import type { AriadneRuntimeAdapter, RuntimeDetection } from "./runtimes/types.js";
|
|
7
|
+
import type { AriadneStore } from "./store.js";
|
|
8
|
+
import type { AriadnePrd, AriadneRunOptions, AriadneRunOutcome, AriadneRunSummary, AttemptFailure } from "./types.js";
|
|
9
|
+
export declare const ARIADNE_EXIT_CODES: Record<AriadneRunOutcome, number>;
|
|
10
|
+
export type AriadneLoopDeps = {
|
|
11
|
+
store: AriadneStore;
|
|
12
|
+
git: AriadneGit;
|
|
13
|
+
adapter: AriadneRuntimeAdapter;
|
|
14
|
+
detection?: RuntimeDetection;
|
|
15
|
+
selectionCertification?: AriadneOwnershipCertification;
|
|
16
|
+
acquireLock: typeof acquireProjectLock;
|
|
17
|
+
runProcess: typeof runAgentProcess;
|
|
18
|
+
runChecks: typeof runQualityChecks;
|
|
19
|
+
now: () => Date;
|
|
20
|
+
createRunId: () => string;
|
|
21
|
+
};
|
|
22
|
+
export declare function recordFailedAttempt(prd: AriadnePrd, storyId: string, failure: AttemptFailure, maxAttempts: number): {
|
|
23
|
+
prd: AriadnePrd;
|
|
24
|
+
blocked: boolean;
|
|
25
|
+
};
|
|
26
|
+
export declare function runAriadneLoop(options: AriadneRunOptions, deps: AriadneLoopDeps): Promise<AriadneRunSummary>;
|