@ranimontagna/agent-toolkit 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +21 -7
  3. package/dist/bin/agent-toolkit.js +9 -4
  4. package/dist/bin/agent-toolkit.js.map +1 -1
  5. package/dist/src/ariadne/args.d.ts +2 -0
  6. package/dist/src/ariadne/args.js +146 -0
  7. package/dist/src/ariadne/args.js.map +1 -0
  8. package/dist/src/ariadne/checks.d.ts +24 -0
  9. package/dist/src/ariadne/checks.js +74 -0
  10. package/dist/src/ariadne/checks.js.map +1 -0
  11. package/dist/src/ariadne/cli.d.ts +38 -0
  12. package/dist/src/ariadne/cli.js +206 -0
  13. package/dist/src/ariadne/cli.js.map +1 -0
  14. package/dist/src/ariadne/doctor.d.ts +16 -0
  15. package/dist/src/ariadne/doctor.js +207 -0
  16. package/dist/src/ariadne/doctor.js.map +1 -0
  17. package/dist/src/ariadne/git.d.ts +58 -0
  18. package/dist/src/ariadne/git.js +577 -0
  19. package/dist/src/ariadne/git.js.map +1 -0
  20. package/dist/src/ariadne/import.d.ts +2 -0
  21. package/dist/src/ariadne/import.js +93 -0
  22. package/dist/src/ariadne/import.js.map +1 -0
  23. package/dist/src/ariadne/init.d.ts +47 -0
  24. package/dist/src/ariadne/init.js +345 -0
  25. package/dist/src/ariadne/init.js.map +1 -0
  26. package/dist/src/ariadne/lock.d.ts +22 -0
  27. package/dist/src/ariadne/lock.js +478 -0
  28. package/dist/src/ariadne/lock.js.map +1 -0
  29. package/dist/src/ariadne/loop.d.ts +26 -0
  30. package/dist/src/ariadne/loop.js +1316 -0
  31. package/dist/src/ariadne/loop.js.map +1 -0
  32. package/dist/src/ariadne/ownership.d.ts +32 -0
  33. package/dist/src/ariadne/ownership.js +161 -0
  34. package/dist/src/ariadne/ownership.js.map +1 -0
  35. package/dist/src/ariadne/process.d.ts +27 -0
  36. package/dist/src/ariadne/process.js +302 -0
  37. package/dist/src/ariadne/process.js.map +1 -0
  38. package/dist/src/ariadne/prompt.d.ts +11 -0
  39. package/dist/src/ariadne/prompt.js +29 -0
  40. package/dist/src/ariadne/prompt.js.map +1 -0
  41. package/dist/src/ariadne/render.d.ts +7 -0
  42. package/dist/src/ariadne/render.js +72 -0
  43. package/dist/src/ariadne/render.js.map +1 -0
  44. package/dist/src/ariadne/result.d.ts +54 -0
  45. package/dist/src/ariadne/result.js +129 -0
  46. package/dist/src/ariadne/result.js.map +1 -0
  47. package/dist/src/ariadne/runtimes/antigravity.d.ts +2 -0
  48. package/dist/src/ariadne/runtimes/antigravity.js +17 -0
  49. package/dist/src/ariadne/runtimes/antigravity.js.map +1 -0
  50. package/dist/src/ariadne/runtimes/claude.d.ts +2 -0
  51. package/dist/src/ariadne/runtimes/claude.js +17 -0
  52. package/dist/src/ariadne/runtimes/claude.js.map +1 -0
  53. package/dist/src/ariadne/runtimes/codex.d.ts +2 -0
  54. package/dist/src/ariadne/runtimes/codex.js +24 -0
  55. package/dist/src/ariadne/runtimes/codex.js.map +1 -0
  56. package/dist/src/ariadne/runtimes/gemini.d.ts +2 -0
  57. package/dist/src/ariadne/runtimes/gemini.js +18 -0
  58. package/dist/src/ariadne/runtimes/gemini.js.map +1 -0
  59. package/dist/src/ariadne/runtimes/index.d.ts +4 -0
  60. package/dist/src/ariadne/runtimes/index.js +82 -0
  61. package/dist/src/ariadne/runtimes/index.js.map +1 -0
  62. package/dist/src/ariadne/runtimes/opencode.d.ts +2 -0
  63. package/dist/src/ariadne/runtimes/opencode.js +19 -0
  64. package/dist/src/ariadne/runtimes/opencode.js.map +1 -0
  65. package/dist/src/ariadne/runtimes/shared.d.ts +24 -0
  66. package/dist/src/ariadne/runtimes/shared.js +141 -0
  67. package/dist/src/ariadne/runtimes/shared.js.map +1 -0
  68. package/dist/src/ariadne/runtimes/types.d.ts +56 -0
  69. package/dist/src/ariadne/runtimes/types.js +3 -0
  70. package/dist/src/ariadne/runtimes/types.js.map +1 -0
  71. package/dist/src/ariadne/schema.d.ts +11 -0
  72. package/dist/src/ariadne/schema.js +214 -0
  73. package/dist/src/ariadne/schema.js.map +1 -0
  74. package/dist/src/ariadne/status.d.ts +72 -0
  75. package/dist/src/ariadne/status.js +280 -0
  76. package/dist/src/ariadne/status.js.map +1 -0
  77. package/dist/src/ariadne/store.d.ts +99 -0
  78. package/dist/src/ariadne/store.js +738 -0
  79. package/dist/src/ariadne/store.js.map +1 -0
  80. package/dist/src/ariadne/types.d.ts +128 -0
  81. package/dist/src/ariadne/types.js +5 -0
  82. package/dist/src/ariadne/types.js.map +1 -0
  83. package/dist/src/ariadne/usage.d.ts +1 -0
  84. package/dist/src/ariadne/usage.js +8 -0
  85. package/dist/src/ariadne/usage.js.map +1 -0
  86. package/dist/src/cli.d.ts +5 -0
  87. package/dist/src/cli.js +14 -0
  88. package/dist/src/cli.js.map +1 -0
  89. package/dist/src/skills-audit.d.ts +6 -0
  90. package/dist/src/skills-audit.js +36 -2
  91. package/dist/src/skills-audit.js.map +1 -1
  92. package/dist/src/tool-lock.d.ts +20 -0
  93. package/dist/src/tool-lock.js +26 -0
  94. package/dist/src/tool-lock.js.map +1 -1
  95. package/dist/src/usage.js +1 -0
  96. package/dist/src/usage.js.map +1 -1
  97. package/package.json +7 -3
  98. package/skills/workflow/ariadne/NOTICE.md +11 -0
  99. package/skills/workflow/ariadne/SKILL.md +96 -0
  100. package/skills/workflow/ariadne-prd/NOTICE.md +11 -0
  101. package/skills/workflow/ariadne-prd/SKILL.md +69 -0
  102. package/tools.lock.json +40 -21
@@ -0,0 +1,280 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { capture, findCommand } from "../system.js";
5
+ import { AriadneGit } from "./git.js";
6
+ import { createRuntimeRegistry } from "./runtimes/index.js";
7
+ import { AriadneStateError } from "./schema.js";
8
+ import { AriadneStore } from "./store.js";
9
+ export { formatAriadneStatus } from "./render.js";
10
+ function gitExec(command, args, cwd, env) {
11
+ const result = spawnSync(command, args, {
12
+ cwd,
13
+ encoding: "utf8",
14
+ env: env ? { ...process.env, ...env } : process.env,
15
+ });
16
+ return {
17
+ ok: !result.error && result.status === 0,
18
+ status: result.status ?? 1,
19
+ stdout: result.stdout ?? "",
20
+ stderr: result.stderr || result.error?.message || "",
21
+ };
22
+ }
23
+ export function createAriadneGit(projectRoot) {
24
+ return new AriadneGit(projectRoot, gitExec);
25
+ }
26
+ function defaultRegistry() {
27
+ return createRuntimeRegistry({ findCommand, capture, baseEnv: process.env });
28
+ }
29
+ function processAlive(pid) {
30
+ try {
31
+ process.kill(pid, 0);
32
+ return true;
33
+ }
34
+ catch (error) {
35
+ return error.code === "EPERM";
36
+ }
37
+ }
38
+ function lockRecord(source) {
39
+ let value;
40
+ try {
41
+ value = JSON.parse(source);
42
+ }
43
+ catch {
44
+ throw new AriadneStateError(".ariadne/lock", "Ariadne lock is malformed.");
45
+ }
46
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
47
+ throw new AriadneStateError(".ariadne/lock", "Ariadne lock is malformed.");
48
+ }
49
+ const record = value;
50
+ const expectedKeys = [
51
+ "schemaVersion",
52
+ "pid",
53
+ "startedAt",
54
+ "runId",
55
+ "ownerToken",
56
+ ];
57
+ const ownerTokenPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
58
+ if (Object.keys(record).length !== expectedKeys.length ||
59
+ expectedKeys.some((key) => !Object.hasOwn(record, key)) ||
60
+ record.schemaVersion !== 1 ||
61
+ !Number.isSafeInteger(record.pid) ||
62
+ record.pid <= 0 ||
63
+ typeof record.startedAt !== "string" ||
64
+ Number.isNaN(Date.parse(record.startedAt)) ||
65
+ typeof record.runId !== "string" ||
66
+ record.runId === "" ||
67
+ typeof record.ownerToken !== "string" ||
68
+ !ownerTokenPattern.test(record.ownerToken)) {
69
+ throw new AriadneStateError(".ariadne/lock", "Ariadne lock is malformed.");
70
+ }
71
+ return record;
72
+ }
73
+ export function inspectAriadneLock(lockPath, isProcessAlive = processAlive) {
74
+ let raw;
75
+ try {
76
+ raw = fs.readFileSync(lockPath, "utf8");
77
+ }
78
+ catch (error) {
79
+ if (error.code === "ENOENT") {
80
+ return { state: "absent" };
81
+ }
82
+ throw error;
83
+ }
84
+ const record = lockRecord(raw);
85
+ return {
86
+ state: isProcessAlive(record.pid) ? "live" : "stale",
87
+ pid: record.pid,
88
+ runId: record.runId,
89
+ };
90
+ }
91
+ function record(value) {
92
+ return value && typeof value === "object" && !Array.isArray(value)
93
+ ? value
94
+ : undefined;
95
+ }
96
+ function readRecord(source) {
97
+ try {
98
+ return record(JSON.parse(fs.readFileSync(source, "utf8")));
99
+ }
100
+ catch (error) {
101
+ if (error.code === "ENOENT" ||
102
+ error instanceof SyntaxError) {
103
+ return undefined;
104
+ }
105
+ throw error;
106
+ }
107
+ }
108
+ function stringValue(sources, key) {
109
+ for (const source of sources) {
110
+ if (typeof source?.[key] === "string")
111
+ return source[key];
112
+ }
113
+ return undefined;
114
+ }
115
+ function numberValue(sources, key) {
116
+ for (const source of sources) {
117
+ const value = source?.[key];
118
+ if (typeof value === "number" && Number.isFinite(value))
119
+ return value;
120
+ }
121
+ return undefined;
122
+ }
123
+ function runCandidate(runsPath, id) {
124
+ const runPath = path.join(runsPath, id);
125
+ const summary = readRecord(path.join(runPath, "summary.json"));
126
+ const run = readRecord(path.join(runPath, "run.json"));
127
+ const stop = readRecord(path.join(runPath, "stop.json"));
128
+ const failure = readRecord(path.join(runPath, "failure.json"));
129
+ const result = readRecord(path.join(runPath, "result.json"));
130
+ const processResult = readRecord(path.join(runPath, "process.json"));
131
+ const attempt = readRecord(path.join(runPath, "attempt.json"));
132
+ const sources = [summary, run, stop, failure, result, processResult, attempt];
133
+ const startedAt = stringValue([attempt, run, processResult], "startedAt");
134
+ const finishedAt = stringValue([summary, run, stop, failure, processResult], "finishedAt") ??
135
+ stringValue([stop, failure], "timestamp");
136
+ const timestampText = finishedAt ?? startedAt;
137
+ let timestamp = timestampText ? Date.parse(timestampText) : Number.NaN;
138
+ if (Number.isNaN(timestamp)) {
139
+ try {
140
+ timestamp = fs.statSync(runPath).mtimeMs;
141
+ }
142
+ catch {
143
+ return undefined;
144
+ }
145
+ }
146
+ const explicitOutcome = stringValue([summary, run, stop], "outcome");
147
+ const outcome = explicitOutcome ??
148
+ (failure ? "failed" : stringValue([result], "outcome")) ??
149
+ (processResult?.status === 0 ? "completed" : "incomplete");
150
+ let durationMs = numberValue(sources, "durationMs") ?? 0;
151
+ if (durationMs === 0 && startedAt && finishedAt) {
152
+ durationMs = Math.max(0, Date.parse(finishedAt) - Date.parse(startedAt));
153
+ }
154
+ const initialHead = stringValue(sources, "initialHead");
155
+ const finalHead = stringValue(sources, "finalHead");
156
+ return {
157
+ id,
158
+ timestamp,
159
+ outcome,
160
+ durationMs,
161
+ ...(initialHead ? { initialHead } : {}),
162
+ ...(finalHead ? { finalHead } : {}),
163
+ };
164
+ }
165
+ export function inspectLastAriadneRun(runsPath) {
166
+ const latest = inspectRunCandidates(runsPath)[0];
167
+ return latest
168
+ ? {
169
+ id: latest.id,
170
+ outcome: latest.outcome,
171
+ durationMs: latest.durationMs,
172
+ ...(latest.initialHead ? { initialHead: latest.initialHead } : {}),
173
+ ...(latest.finalHead ? { finalHead: latest.finalHead } : {}),
174
+ }
175
+ : undefined;
176
+ }
177
+ function inspectRunCandidates(runsPath) {
178
+ let entries;
179
+ try {
180
+ entries = fs.readdirSync(runsPath, { withFileTypes: true });
181
+ }
182
+ catch (error) {
183
+ if (error.code === "ENOENT")
184
+ return [];
185
+ throw error;
186
+ }
187
+ return entries
188
+ .filter((entry) => entry.isDirectory() && entry.name !== ".lock-coordinator")
189
+ .map((entry) => runCandidate(runsPath, entry.name))
190
+ .filter((candidate) => candidate !== undefined)
191
+ .sort((left, right) => right.timestamp - left.timestamp || right.id.localeCompare(left.id));
192
+ }
193
+ function consecutiveFailures(runsPath) {
194
+ let count = 0;
195
+ for (const candidate of inspectRunCandidates(runsPath)) {
196
+ if (candidate.outcome !== "failed" && candidate.outcome !== "blocked") {
197
+ break;
198
+ }
199
+ count += 1;
200
+ }
201
+ return count;
202
+ }
203
+ function storyCounts(prd) {
204
+ const counts = {
205
+ pending: 0,
206
+ inProgress: 0,
207
+ completed: 0,
208
+ blocked: 0,
209
+ };
210
+ for (const story of prd.userStories) {
211
+ if (story.status === "in_progress")
212
+ counts.inProgress += 1;
213
+ else
214
+ counts[story.status] += 1;
215
+ }
216
+ return counts;
217
+ }
218
+ export function buildAriadneStatus(input) {
219
+ const store = input.store ?? new AriadneStore(input.projectRoot);
220
+ const git = input.git ?? createAriadneGit(input.projectRoot);
221
+ const prd = input.state?.prd ?? store.loadPrd();
222
+ const config = input.state?.config ?? store.loadConfig();
223
+ git.assertRepository();
224
+ const runtimeDetection = config.runtime
225
+ ? (input.registry ?? defaultRegistry())[config.runtime].detect()
226
+ : undefined;
227
+ const active = prd.userStories.find((story) => story.status === "in_progress");
228
+ const blocked = prd.userStories.find((story) => story.status === "blocked");
229
+ const ownershipViolation = input.ownershipViolation === undefined
230
+ ? store.loadOwnershipViolation()
231
+ : (input.ownershipViolation ?? undefined);
232
+ const lastRun = inspectLastAriadneRun(store.paths.runs);
233
+ return {
234
+ schemaVersion: 1,
235
+ command: "status",
236
+ project: prd.project,
237
+ branch: {
238
+ configured: prd.branchName,
239
+ current: git.currentBranch(),
240
+ },
241
+ ...(runtimeDetection
242
+ ? {
243
+ runtime: {
244
+ name: runtimeDetection.name,
245
+ state: runtimeDetection.state,
246
+ ...(runtimeDetection.version
247
+ ? { version: runtimeDetection.version }
248
+ : {}),
249
+ },
250
+ }
251
+ : {}),
252
+ stories: storyCounts(prd),
253
+ ...(active
254
+ ? {
255
+ activeStory: {
256
+ id: active.id,
257
+ title: active.title,
258
+ attempts: active.attempts,
259
+ },
260
+ }
261
+ : {}),
262
+ ...(blocked
263
+ ? {
264
+ blockedStory: {
265
+ id: blocked.id,
266
+ title: blocked.title,
267
+ attempts: blocked.attempts,
268
+ },
269
+ }
270
+ : {}),
271
+ ...(ownershipViolation ? { ownershipViolation } : {}),
272
+ ...(lastRun ? { lastRun } : {}),
273
+ consecutiveFailures: consecutiveFailures(store.paths.runs),
274
+ dirty: git.statusPorcelain() !== "",
275
+ lock: input.lock ??
276
+ inspectAriadneLock(store.paths.lock, input.isProcessAlive ?? processAlive),
277
+ paths: { progress: store.paths.progress, runs: store.paths.runs },
278
+ };
279
+ }
280
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/ariadne/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { AriadneConfig, AriadneOwnershipViolation, AriadneOwnershipViolationChange, AriadnePrd } from "./types.js";
2
+ export type AriadnePaths = {
3
+ root: string;
4
+ config: string;
5
+ prd: string;
6
+ progress: string;
7
+ lock: string;
8
+ runs: string;
9
+ ownershipViolation: string;
10
+ ownershipCheckpoint: string;
11
+ archive: string;
12
+ };
13
+ export type AriadnePathIdentity = {
14
+ source: string;
15
+ kind: "directory" | "file";
16
+ device: number;
17
+ inode: number;
18
+ links: number;
19
+ };
20
+ export type AriadneCanonicalFileCertificate = AriadnePathIdentity & {
21
+ kind: "file";
22
+ contents: string;
23
+ };
24
+ export type AriadneExternalFileIdentity = Pick<AriadnePathIdentity, "source" | "device" | "inode" | "links">;
25
+ export type AriadneRunBoundary = {
26
+ runId: string;
27
+ root: AriadnePathIdentity;
28
+ runs: AriadnePathIdentity;
29
+ directory: AriadnePathIdentity;
30
+ artifacts: AriadnePathIdentity[];
31
+ };
32
+ export type AriadnePersistedCanonicalCertificate = Pick<AriadneCanonicalFileCertificate, "device" | "inode" | "links"> & {
33
+ sha256: string;
34
+ };
35
+ export type AriadneOwnershipCheckpoint = {
36
+ schemaVersion: 1;
37
+ runId: string;
38
+ storyId: string;
39
+ certifiedAt: string;
40
+ certifiedHead: string;
41
+ certifiedRef: string;
42
+ prd: AriadnePersistedCanonicalCertificate;
43
+ progress: AriadnePersistedCanonicalCertificate;
44
+ };
45
+ export declare const ARIADNE_OWNERSHIP_CHECKPOINT_MARKER = "<!-- ariadne-ownership-checkpoint:v1 -->";
46
+ export declare class AriadneStore {
47
+ readonly projectRoot: string;
48
+ readonly paths: AriadnePaths;
49
+ constructor(projectRoot: string);
50
+ ensureLayout(): void;
51
+ loadConfig(): AriadneConfig;
52
+ loadPrd(): AriadnePrd;
53
+ hasCanonicalState(): boolean;
54
+ saveConfig(config: AriadneConfig): void;
55
+ savePrd(prd: AriadnePrd): AriadneCanonicalFileCertificate;
56
+ loadOwnershipViolation(): AriadneOwnershipViolation | undefined;
57
+ saveOwnershipViolation(marker: AriadneOwnershipViolation): void;
58
+ loadOwnershipCheckpoint(): AriadneOwnershipCheckpoint | undefined;
59
+ saveOwnershipCheckpoint(input: {
60
+ runId: string;
61
+ storyId: string;
62
+ certifiedAt: string;
63
+ certifiedHead: string;
64
+ certifiedRef: string;
65
+ prd: AriadneCanonicalFileCertificate;
66
+ progress: AriadneCanonicalFileCertificate;
67
+ }): AriadneOwnershipCheckpoint;
68
+ ownershipCheckpointChanges(checkpoint: AriadneOwnershipCheckpoint): AriadneOwnershipViolationChange[];
69
+ ownershipCheckpointRequired(): boolean;
70
+ assertNoOwnershipViolation(): void;
71
+ appendProgress(entry: string, expected?: AriadneCanonicalFileCertificate): AriadneCanonicalFileCertificate;
72
+ captureCanonicalCertificate(source: string): AriadneCanonicalFileCertificate;
73
+ assertCanonicalCertificate(certificate: AriadneCanonicalFileCertificate): void;
74
+ createRunDir(runId: string): string;
75
+ assertRunDirectory(runId: string): string;
76
+ assertRunArtifacts(runId: string, names: string[]): void;
77
+ assertRunDirectoryContents(runId: string): void;
78
+ certifyRunBoundary(runId: string, requiredArtifacts?: string[], expectedArtifacts?: AriadneExternalFileIdentity[]): AriadneRunBoundary;
79
+ extendRunBoundary(boundary: AriadneRunBoundary, expectedArtifacts: AriadneExternalFileIdentity[]): AriadneRunBoundary;
80
+ assertRunBoundary(boundary: AriadneRunBoundary): void;
81
+ writeRunJson(runId: string, name: string, value: unknown): string;
82
+ writeRunTextExclusive(runId: string, name: string, contents: string): AriadnePathIdentity;
83
+ archiveImportedPrd(sourceText: string, timestamp: string): string;
84
+ private readJson;
85
+ private assertRealDirectory;
86
+ private capturePathIdentity;
87
+ private assertPathIdentity;
88
+ private ensureRealDirectory;
89
+ private ensureRunsDirectory;
90
+ private assertProjectRoot;
91
+ private readProjectRootFile;
92
+ private sameIdentity;
93
+ private sameCertificate;
94
+ private assertExpectedArtifacts;
95
+ private certificateFromDescriptor;
96
+ private writeQuarantineAtomic;
97
+ private writeProjectRootAtomic;
98
+ private writeJsonAtomic;
99
+ }