@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,93 @@
1
+ import { AriadneStateError, validatePrd } from "./schema.js";
2
+ function record(input, jsonPath) {
3
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
4
+ throw new AriadneStateError(jsonPath, "expected an object");
5
+ }
6
+ return input;
7
+ }
8
+ function text(value, fallback, jsonPath) {
9
+ if (value === undefined)
10
+ return fallback;
11
+ if (typeof value !== "string" || value.trim() === "") {
12
+ throw new AriadneStateError(jsonPath ?? "$", "expected a non-empty string");
13
+ }
14
+ return value;
15
+ }
16
+ function legacyStatus(story, jsonPath) {
17
+ if (story.status === "pending" ||
18
+ story.status === "in_progress" ||
19
+ story.status === "completed" ||
20
+ story.status === "blocked") {
21
+ return story.status;
22
+ }
23
+ if (story.status !== undefined) {
24
+ throw new AriadneStateError(`${jsonPath}.status`, "expected pending, in_progress, completed, or blocked");
25
+ }
26
+ if (story.passes !== undefined && typeof story.passes !== "boolean") {
27
+ throw new AriadneStateError(`${jsonPath}.passes`, "expected a boolean");
28
+ }
29
+ return story.passes === true ? "completed" : "pending";
30
+ }
31
+ function normalizeStory(input, index, collectionPath) {
32
+ const storyPath = `${collectionPath}[${index}]`;
33
+ const story = record(input, storyPath);
34
+ let criteria = [];
35
+ if (story.acceptanceCriteria !== undefined) {
36
+ if (!Array.isArray(story.acceptanceCriteria)) {
37
+ throw new AriadneStateError(`${storyPath}.acceptanceCriteria`, "expected an array");
38
+ }
39
+ criteria = story.acceptanceCriteria.map((criterion, criterionIndex) => {
40
+ if (typeof criterion !== "string" || criterion.trim() === "") {
41
+ throw new AriadneStateError(`${storyPath}.acceptanceCriteria[${criterionIndex}]`, "expected a non-empty string");
42
+ }
43
+ return criterion;
44
+ });
45
+ }
46
+ if (story.priority !== undefined &&
47
+ (!Number.isSafeInteger(story.priority) || story.priority <= 0)) {
48
+ throw new AriadneStateError(`${storyPath}.priority`, "expected a positive integer");
49
+ }
50
+ if (story.attempts !== undefined &&
51
+ (!Number.isSafeInteger(story.attempts) || story.attempts < 0)) {
52
+ throw new AriadneStateError(`${storyPath}.attempts`, "expected a non-negative integer");
53
+ }
54
+ return {
55
+ id: text(story.id, `S${String(index + 1).padStart(2, "0")}`, `${storyPath}.id`),
56
+ title: text(story.title, "Untitled story", `${storyPath}.title`),
57
+ description: story.description === undefined
58
+ ? "Legacy story"
59
+ : text(story.description, "Legacy story", `${storyPath}.description`),
60
+ acceptanceCriteria: criteria,
61
+ priority: Number.isSafeInteger(story.priority) && story.priority > 0
62
+ ? story.priority
63
+ : index + 1,
64
+ status: legacyStatus(story, storyPath),
65
+ attempts: Number.isSafeInteger(story.attempts) && story.attempts >= 0
66
+ ? story.attempts
67
+ : 0,
68
+ };
69
+ }
70
+ export function normalizeImportedPrd(input) {
71
+ const source = record(input, "$");
72
+ if (source.schemaVersion === 1)
73
+ return validatePrd(source);
74
+ const collectionPath = Array.isArray(source.userStories)
75
+ ? "$.userStories"
76
+ : Array.isArray(source.stories)
77
+ ? "$.stories"
78
+ : undefined;
79
+ if (!collectionPath) {
80
+ throw new AriadneStateError("$.userStories", "expected an array");
81
+ }
82
+ const sourceStories = collectionPath === "$.userStories"
83
+ ? source.userStories
84
+ : source.stories;
85
+ return validatePrd({
86
+ schemaVersion: 1,
87
+ project: text(source.project, "Imported project", "$.project"),
88
+ branchName: text(source.branchName, "main", "$.branchName"),
89
+ description: text(source.description, "Imported from legacy prd.json", "$.description"),
90
+ userStories: sourceStories.map((story, index) => normalizeStory(story, index, collectionPath)),
91
+ });
92
+ }
93
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/ariadne/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import * as prompts from "@clack/prompts";
2
+ import type { RuntimeDetection } from "./runtimes/types.js";
3
+ import type { AriadneConfig, AriadnePrd, AriadneRuntimeName } from "./types.js";
4
+ export type AriadneInitPlan = {
5
+ projectRoot: string;
6
+ sourcePrd?: string;
7
+ prd: AriadnePrd;
8
+ config: AriadneConfig;
9
+ gitignoreAdditions: [
10
+ ".ariadne/lock",
11
+ ".ariadne/runs/",
12
+ ".ariadne-quarantine.json",
13
+ ".ariadne-quarantine.checkpoint.json"
14
+ ];
15
+ };
16
+ export type AriadneInitInput = {
17
+ cwd: string;
18
+ runtime?: AriadneRuntimeName;
19
+ qualityChecks: string[];
20
+ interactive: boolean;
21
+ };
22
+ export type AriadneInitReport = {
23
+ schemaVersion: 1;
24
+ command: "init";
25
+ outcome: "initialized" | "cancelled";
26
+ projectRoot: string;
27
+ importedFrom?: string;
28
+ runtime?: AriadneRuntimeName;
29
+ qualityChecks: string[];
30
+ };
31
+ type InitPrompts = {
32
+ confirm: typeof prompts.confirm;
33
+ text: typeof prompts.text;
34
+ select: typeof prompts.select;
35
+ isCancel: typeof prompts.isCancel;
36
+ };
37
+ export type AriadneInitDeps = {
38
+ prompts?: InitPrompts;
39
+ runtimeDetections?: readonly RuntimeDetection[];
40
+ detectRuntimes?: (options: {
41
+ timeoutMs: number;
42
+ }) => Promise<RuntimeDetection[]>;
43
+ };
44
+ export declare function buildInitPlan(input: AriadneInitInput, runtimeDetections?: readonly RuntimeDetection[]): AriadneInitPlan;
45
+ export declare function applyInitPlan(plan: AriadneInitPlan): AriadneInitReport;
46
+ export declare function initializeAriadne(input: AriadneInitInput, deps?: AriadneInitDeps): Promise<AriadneInitReport>;
47
+ export {};
@@ -0,0 +1,345 @@
1
+ import { execFile, execFileSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import * as prompts from "@clack/prompts";
5
+ import { findCommand, windowsSpawnPlan } from "../system.js";
6
+ import { normalizeImportedPrd } from "./import.js";
7
+ import { createRuntimeRegistry } from "./runtimes/index.js";
8
+ import { AriadneStateError, validateConfig, validatePrd } from "./schema.js";
9
+ import { AriadneStore } from "./store.js";
10
+ import { AriadneUsageError } from "./types.js";
11
+ const GITIGNORE_ADDITIONS = [
12
+ ".ariadne/lock",
13
+ ".ariadne/runs/",
14
+ ".ariadne-quarantine.json",
15
+ ".ariadne-quarantine.checkpoint.json",
16
+ ];
17
+ const RUNTIME_PROBE_TIMEOUT_MS = 2_000;
18
+ const RUNTIME_PROBE_MAX_BYTES = 1024 * 1024;
19
+ function gitOutput(cwd, args, description) {
20
+ try {
21
+ return execFileSync("git", args, {
22
+ cwd,
23
+ encoding: "utf8",
24
+ stdio: ["ignore", "pipe", "pipe"],
25
+ timeout: RUNTIME_PROBE_TIMEOUT_MS,
26
+ }).trim();
27
+ }
28
+ catch {
29
+ throw new AriadneUsageError(`Ariadne requires a Git repository to ${description}: ${cwd}`);
30
+ }
31
+ }
32
+ function repositoryRoot(cwd) {
33
+ const discovered = gitOutput(cwd, ["rev-parse", "--show-toplevel"], "initialize a project");
34
+ let actual;
35
+ let root;
36
+ try {
37
+ actual = fs.realpathSync(cwd);
38
+ root = fs.realpathSync(discovered);
39
+ }
40
+ catch {
41
+ throw new AriadneUsageError("Ariadne could not resolve the Git repository root.");
42
+ }
43
+ if (actual !== root) {
44
+ throw new AriadneUsageError(`Ariadne init must run from the repository root: ${root}`);
45
+ }
46
+ return root;
47
+ }
48
+ function readJson(source) {
49
+ try {
50
+ return JSON.parse(fs.readFileSync(source, "utf8"));
51
+ }
52
+ catch (error) {
53
+ if (error instanceof SyntaxError) {
54
+ throw new AriadneStateError(source, "contains malformed JSON");
55
+ }
56
+ throw error;
57
+ }
58
+ }
59
+ function readPackage(root) {
60
+ const packagePath = path.join(root, "package.json");
61
+ if (!fs.existsSync(packagePath))
62
+ return undefined;
63
+ const value = readJson(packagePath);
64
+ return value && typeof value === "object" && !Array.isArray(value)
65
+ ? value
66
+ : undefined;
67
+ }
68
+ function packageManager(root, packageJson) {
69
+ if (typeof packageJson?.packageManager === "string") {
70
+ const declared = packageJson.packageManager.split("@", 1)[0];
71
+ if (declared === "pnpm" ||
72
+ declared === "npm" ||
73
+ declared === "yarn" ||
74
+ declared === "bun") {
75
+ return declared;
76
+ }
77
+ }
78
+ if (fs.existsSync(path.join(root, "pnpm-lock.yaml")))
79
+ return "pnpm";
80
+ if (fs.existsSync(path.join(root, "yarn.lock")))
81
+ return "yarn";
82
+ if (fs.existsSync(path.join(root, "bun.lock")) ||
83
+ fs.existsSync(path.join(root, "bun.lockb"))) {
84
+ return "bun";
85
+ }
86
+ if (fs.existsSync(path.join(root, "package-lock.json")))
87
+ return "npm";
88
+ return "npm";
89
+ }
90
+ function scriptCommand(manager, script) {
91
+ return `${manager} run ${script}`;
92
+ }
93
+ function detectQualityChecks(root, packageJson) {
94
+ const scripts = packageJson?.scripts;
95
+ if (!scripts || typeof scripts !== "object" || Array.isArray(scripts)) {
96
+ return [];
97
+ }
98
+ const available = scripts;
99
+ const manager = packageManager(root, packageJson);
100
+ if (typeof available.check === "string") {
101
+ return [scriptCommand(manager, "check")];
102
+ }
103
+ return ["lint", "typecheck", "test"]
104
+ .filter((name) => typeof available[name] === "string")
105
+ .map((name) => scriptCommand(manager, name));
106
+ }
107
+ function defaultPrd(root, packageJson) {
108
+ const packageName = packageJson?.name;
109
+ return {
110
+ schemaVersion: 1,
111
+ project: typeof packageName === "string" && packageName.trim()
112
+ ? packageName
113
+ : path.basename(root),
114
+ branchName: gitOutput(root, ["branch", "--show-current"], "read branch"),
115
+ description: "Ariadne project backlog",
116
+ userStories: [],
117
+ };
118
+ }
119
+ function detectedRuntime(detections) {
120
+ const selectable = detections.filter((detection) => detection.state === "healthy" || detection.state === "unverified");
121
+ return selectable.length === 1 ? selectable[0]?.name : undefined;
122
+ }
123
+ export function buildInitPlan(input, runtimeDetections = []) {
124
+ const projectRoot = repositoryRoot(input.cwd);
125
+ const store = new AriadneStore(projectRoot);
126
+ const packageJson = readPackage(projectRoot);
127
+ const existingPrd = fs.existsSync(store.paths.prd)
128
+ ? store.loadPrd()
129
+ : undefined;
130
+ const rootPrd = path.join(projectRoot, "prd.json");
131
+ const sourcePrd = existingPrd === undefined && fs.existsSync(rootPrd) ? rootPrd : undefined;
132
+ const prd = existingPrd ??
133
+ (sourcePrd
134
+ ? normalizeImportedPrd(readJson(sourcePrd))
135
+ : defaultPrd(projectRoot, packageJson));
136
+ const existingConfig = fs.existsSync(store.paths.config)
137
+ ? store.loadConfig()
138
+ : undefined;
139
+ const qualityChecks = input.qualityChecks.length > 0
140
+ ? input.qualityChecks
141
+ : existingConfig?.qualityChecks.length
142
+ ? existingConfig.qualityChecks
143
+ : detectQualityChecks(projectRoot, packageJson);
144
+ if (!input.interactive && qualityChecks.length === 0) {
145
+ throw new AriadneUsageError("Ariadne init requires at least one quality check in non-interactive mode; pass --check.");
146
+ }
147
+ const runtime = input.runtime ??
148
+ existingConfig?.runtime ??
149
+ detectedRuntime(runtimeDetections);
150
+ const config = {
151
+ schemaVersion: 1,
152
+ ...(runtime ? { runtime } : {}),
153
+ qualityChecks,
154
+ maxAttemptsPerStory: existingConfig?.maxAttemptsPerStory ?? 3,
155
+ };
156
+ return {
157
+ projectRoot,
158
+ ...(sourcePrd ? { sourcePrd } : {}),
159
+ prd,
160
+ config,
161
+ gitignoreAdditions: [...GITIGNORE_ADDITIONS],
162
+ };
163
+ }
164
+ function updateGitignore(plan) {
165
+ const destination = path.join(plan.projectRoot, ".gitignore");
166
+ const original = fs.existsSync(destination)
167
+ ? fs.readFileSync(destination, "utf8")
168
+ : "";
169
+ const existing = new Set(original.split(/\r?\n/));
170
+ const additions = plan.gitignoreAdditions.filter((entry) => !existing.has(entry));
171
+ if (additions.length === 0)
172
+ return;
173
+ const newline = original.includes("\r\n") ? "\r\n" : "\n";
174
+ const separator = original.length > 0 && !original.endsWith("\n") && !original.endsWith("\r")
175
+ ? newline
176
+ : "";
177
+ const next = `${original}${separator}${additions.join(newline)}${newline}`;
178
+ const temporary = `${destination}.ariadne-${process.pid}.tmp`;
179
+ try {
180
+ fs.writeFileSync(temporary, next, { encoding: "utf8", flag: "wx" });
181
+ fs.renameSync(temporary, destination);
182
+ }
183
+ catch (error) {
184
+ fs.rmSync(temporary, { force: true });
185
+ throw error;
186
+ }
187
+ }
188
+ function reportFor(plan, outcome) {
189
+ return {
190
+ schemaVersion: 1,
191
+ command: "init",
192
+ outcome,
193
+ projectRoot: plan.projectRoot,
194
+ ...(plan.sourcePrd ? { importedFrom: plan.sourcePrd } : {}),
195
+ ...(plan.config.runtime ? { runtime: plan.config.runtime } : {}),
196
+ qualityChecks: plan.config.qualityChecks,
197
+ };
198
+ }
199
+ export function applyInitPlan(plan) {
200
+ const projectRoot = repositoryRoot(plan.projectRoot);
201
+ if (projectRoot !== plan.projectRoot) {
202
+ throw new AriadneUsageError(`Ariadne init plan root does not match the repository root: ${projectRoot}`);
203
+ }
204
+ if (plan.gitignoreAdditions.length !== GITIGNORE_ADDITIONS.length ||
205
+ plan.gitignoreAdditions.some((entry, index) => entry !== GITIGNORE_ADDITIONS[index])) {
206
+ throw new AriadneUsageError("Ariadne init plan contains unexpected .gitignore entries.");
207
+ }
208
+ if (plan.sourcePrd &&
209
+ path.resolve(plan.sourcePrd) !== path.join(projectRoot, "prd.json")) {
210
+ throw new AriadneUsageError("Ariadne init may only import the repository-root prd.json.");
211
+ }
212
+ const prd = validatePrd(plan.prd);
213
+ const config = validateConfig(plan.config);
214
+ const store = new AriadneStore(plan.projectRoot);
215
+ store.assertNoOwnershipViolation();
216
+ store.ensureLayout();
217
+ fs.mkdirSync(store.paths.runs, { recursive: true });
218
+ if (plan.sourcePrd) {
219
+ store.archiveImportedPrd(fs.readFileSync(plan.sourcePrd, "utf8"), new Date().toISOString());
220
+ }
221
+ store.savePrd(prd);
222
+ store.saveConfig(config);
223
+ if (!fs.existsSync(store.paths.progress)) {
224
+ fs.writeFileSync(store.paths.progress, "", {
225
+ encoding: "utf8",
226
+ flag: "wx",
227
+ });
228
+ }
229
+ updateGitignore(plan);
230
+ return reportFor(plan, "initialized");
231
+ }
232
+ class RuntimeProbeRequest extends Error {
233
+ command;
234
+ args;
235
+ constructor(command, args) {
236
+ super(`Runtime probe requested: ${command}`);
237
+ this.command = command;
238
+ this.args = args;
239
+ }
240
+ }
241
+ function probeKey(command, args) {
242
+ return JSON.stringify([command, args]);
243
+ }
244
+ function captureRuntime(command, args, timeoutMs) {
245
+ const plan = process.platform === "win32"
246
+ ? windowsSpawnPlan(command, args)
247
+ : { command, args, verbatim: false };
248
+ return new Promise((resolve) => {
249
+ execFile(plan.command, plan.args, {
250
+ encoding: "utf8",
251
+ maxBuffer: RUNTIME_PROBE_MAX_BYTES,
252
+ timeout: timeoutMs,
253
+ windowsVerbatimArguments: plan.verbatim || undefined,
254
+ }, (error, stdout, stderr) => {
255
+ const status = error && typeof error.code === "number" ? error.code : error ? 1 : 0;
256
+ resolve({
257
+ ok: error === null,
258
+ status,
259
+ stdout,
260
+ stderr: stderr || error?.message || "",
261
+ ...(error ? { error } : {}),
262
+ });
263
+ });
264
+ });
265
+ }
266
+ async function defaultDetections(options) {
267
+ const cached = new Map();
268
+ const registry = createRuntimeRegistry({
269
+ findCommand,
270
+ capture: (command, args) => {
271
+ const result = cached.get(probeKey(command, args));
272
+ if (!result)
273
+ throw new RuntimeProbeRequest(command, args);
274
+ return result;
275
+ },
276
+ baseEnv: process.env,
277
+ });
278
+ return Promise.all(Object.values(registry).map(async (adapter) => {
279
+ for (;;) {
280
+ try {
281
+ return adapter.detect();
282
+ }
283
+ catch (error) {
284
+ if (!(error instanceof RuntimeProbeRequest))
285
+ throw error;
286
+ const key = probeKey(error.command, error.args);
287
+ cached.set(key, await captureRuntime(error.command, error.args, options.timeoutMs));
288
+ }
289
+ }
290
+ }));
291
+ }
292
+ export async function initializeAriadne(input, deps = {}) {
293
+ new AriadneStore(repositoryRoot(input.cwd)).assertNoOwnershipViolation();
294
+ const prompt = deps.prompts ?? prompts;
295
+ const detectionsWerePrecomputed = deps.runtimeDetections !== undefined;
296
+ let detections = deps.runtimeDetections ?? [];
297
+ let plan = buildInitPlan(input, detections);
298
+ if (input.interactive && plan.config.qualityChecks.length === 0) {
299
+ const answer = await prompt.text({
300
+ message: "Quality check command",
301
+ placeholder: "pnpm test",
302
+ validate: (value) => !value || value.trim() === ""
303
+ ? "Enter a quality check command."
304
+ : undefined,
305
+ });
306
+ if (prompt.isCancel(answer))
307
+ return reportFor(plan, "cancelled");
308
+ plan = buildInitPlan({ ...input, qualityChecks: [answer] }, detections);
309
+ }
310
+ if (!plan.config.runtime && !detectionsWerePrecomputed) {
311
+ detections = await (deps.detectRuntimes ?? defaultDetections)({
312
+ timeoutMs: RUNTIME_PROBE_TIMEOUT_MS,
313
+ });
314
+ plan = buildInitPlan({ ...input, qualityChecks: plan.config.qualityChecks }, detections);
315
+ }
316
+ if (input.interactive && !plan.config.runtime) {
317
+ const selectable = detections.filter((detection) => detection.state === "healthy" || detection.state === "unverified");
318
+ if (selectable.length > 0) {
319
+ const answer = await prompt.select({
320
+ message: "Runtime",
321
+ options: selectable.map((detection) => ({
322
+ value: detection.name,
323
+ label: `${detection.name}${detection.version ? ` ${detection.version}` : ""}`,
324
+ })),
325
+ });
326
+ if (prompt.isCancel(answer))
327
+ return reportFor(plan, "cancelled");
328
+ plan = buildInitPlan({
329
+ ...input,
330
+ runtime: answer,
331
+ qualityChecks: plan.config.qualityChecks,
332
+ }, detections);
333
+ }
334
+ }
335
+ if (input.interactive) {
336
+ const confirmed = await prompt.confirm({
337
+ message: `Initialize Ariadne in ${plan.projectRoot}?`,
338
+ });
339
+ if (prompt.isCancel(confirmed) || !confirmed) {
340
+ return reportFor(plan, "cancelled");
341
+ }
342
+ }
343
+ return applyInitPlan(plan);
344
+ }
345
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/ariadne/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export type AriadneLockRecord = {
2
+ schemaVersion: 1;
3
+ pid: number;
4
+ startedAt: string;
5
+ runId: string;
6
+ ownerToken: string;
7
+ };
8
+ export type AriadneLockHandle = {
9
+ record: AriadneLockRecord;
10
+ recovered?: AriadneLockRecord;
11
+ assertIntegrity(): void;
12
+ release(): void;
13
+ };
14
+ export type AcquireProjectLockInput = {
15
+ lockPath: string;
16
+ runId: string;
17
+ runDir: string;
18
+ pid: number;
19
+ now: () => Date;
20
+ isProcessAlive: (pid: number) => boolean;
21
+ };
22
+ export declare function acquireProjectLock(input: AcquireProjectLockInput): AriadneLockHandle;