pi-openspec 1.0.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/dist/index.js ADDED
@@ -0,0 +1,596 @@
1
+ /**
2
+ * Pi OpenSpec Extension
3
+ *
4
+ * Wraps the OpenSpec CLI into pi /openspec commands with:
5
+ * - Auto-naming: NNNNN-<date>-<slug> for change directories
6
+ * - Number shorthand: /openspec status 3 → resolves to full name
7
+ * - Session-start detection of openspec projects
8
+ * - Auto-refresh hooks on spec file edits
9
+ *
10
+ * Commands:
11
+ * /openspec new <name> — create a new change
12
+ * /openspec status [id] — show artifact status
13
+ * /openspec next [id] [artifact] — get instructions for next artifact
14
+ * /openspec validate [id] — validate a change
15
+ * /openspec archive [id] — archive a completed change
16
+ * /openspec list — list all changes
17
+ * /openspec list --specs — list all specs
18
+ * /openspec init — initialize openspec in project
19
+ * /openspec schemas — list available schemas
20
+ */
21
+ import * as fs from "node:fs";
22
+ import * as path from "node:path";
23
+ import { execSync } from "node:child_process";
24
+ // ───────────────────────────────────────────────────────────────────
25
+ // Constants
26
+ // ───────────────────────────────────────────────────────────────────
27
+ // Matches: NNNNN-YYYY-MM-DD-slug-name
28
+ const NAMED_RE = /^(\d{5})-(\d{4}-\d{2}-\d{2})-(.+)$/;
29
+ const ARTIFACT_COLORS = {
30
+ done: "✅",
31
+ ready: "🔵",
32
+ blocked: "⏳",
33
+ };
34
+ // ───────────────────────────────────────────────────────────────────
35
+ // Helpers
36
+ // ───────────────────────────────────────────────────────────────────
37
+ function changesDir(cwd) {
38
+ return path.join(cwd, "openspec", "changes");
39
+ }
40
+ function hasOpenSpec(cwd) {
41
+ return fs.existsSync(path.join(cwd, "openspec"));
42
+ }
43
+ function today() {
44
+ return new Date().toISOString().slice(0, 10);
45
+ }
46
+ function toSlug(name) {
47
+ return name
48
+ .trim()
49
+ .toLowerCase()
50
+ .replace(/\s+/g, "-")
51
+ .replace(/[^a-z0-9-]/g, "")
52
+ .replace(/-+/g, "-")
53
+ .replace(/^-|-$/g, "");
54
+ }
55
+ /**
56
+ * Scan existing change directories and return sorted list.
57
+ * Supports both our NNNNN-date-name format and plain openspec names.
58
+ */
59
+ function scanChanges(cwd) {
60
+ const dir = changesDir(cwd);
61
+ if (!fs.existsSync(dir))
62
+ return [];
63
+ return fs
64
+ .readdirSync(dir)
65
+ .filter((entry) => {
66
+ const full = path.join(dir, entry);
67
+ return fs.statSync(full).isDirectory();
68
+ })
69
+ .sort();
70
+ }
71
+ /**
72
+ * Extract the numeric prefix from a NNNNN-date-name directory.
73
+ * Returns 0 for directories without our naming scheme.
74
+ */
75
+ function extractNumber(dirname) {
76
+ const m = NAMED_RE.exec(dirname);
77
+ return m ? parseInt(m[1], 10) : 0;
78
+ }
79
+ /**
80
+ * Get the next sequential number across all changes.
81
+ */
82
+ function nextNumber(cwd) {
83
+ const changes = scanChanges(cwd);
84
+ if (changes.length === 0)
85
+ return 1;
86
+ const max = Math.max(...changes.map(extractNumber));
87
+ return max + 1;
88
+ }
89
+ /**
90
+ * Resolve a user-provided identifier to a change directory name.
91
+ * Accepts:
92
+ * - A number (e.g. "3") → finds change with that prefix
93
+ * - A full name (e.g. "00003-2026-06-04-add-auth")
94
+ * - A partial slug (e.g. "add-auth") → fuzzy match
95
+ */
96
+ function resolveChange(cwd, id) {
97
+ const changes = scanChanges(cwd);
98
+ if (changes.length === 0)
99
+ return null;
100
+ const trimmed = id.trim();
101
+ // Try numeric lookup
102
+ const num = parseInt(trimmed, 10);
103
+ if (!Number.isNaN(num) && String(num) === trimmed) {
104
+ const padded = String(num).padStart(5, "0");
105
+ const match = changes.find((c) => c.startsWith(padded + "-"));
106
+ if (match)
107
+ return match;
108
+ }
109
+ // Exact match
110
+ if (changes.includes(trimmed))
111
+ return trimmed;
112
+ // Suffix/substring match
113
+ const lower = trimmed.toLowerCase();
114
+ const suffixMatch = changes.find((c) => c.toLowerCase().endsWith("-" + lower));
115
+ if (suffixMatch)
116
+ return suffixMatch;
117
+ const substringMatch = changes.find((c) => c.toLowerCase().includes(lower));
118
+ if (substringMatch)
119
+ return substringMatch;
120
+ return null;
121
+ }
122
+ /**
123
+ * Run an openspec CLI command and return stdout.
124
+ * Throws on non-zero exit.
125
+ */
126
+ function run(cwd, args, opts) {
127
+ const jsonFlag = opts?.json ? " --json" : "";
128
+ const cmd = `openspec ${args}${jsonFlag}`;
129
+ try {
130
+ return execSync(cmd, {
131
+ cwd,
132
+ encoding: "utf8",
133
+ timeout: 30_000,
134
+ stdio: ["pipe", "pipe", "pipe"],
135
+ }).trim();
136
+ }
137
+ catch (err) {
138
+ const e = err;
139
+ throw new Error(e.stderr?.trim() || e.message || "openspec command failed", { cause: err });
140
+ }
141
+ }
142
+ /**
143
+ * Run openspec and parse JSON output.
144
+ */
145
+ function runJSON(cwd, args) {
146
+ const raw = run(cwd, args, { json: true });
147
+ return JSON.parse(raw);
148
+ }
149
+ /**
150
+ * Find the most recent or only active change.
151
+ * Returns null if zero or multiple changes exist.
152
+ */
153
+ function inferActiveChange(cwd) {
154
+ const changes = scanChanges(cwd);
155
+ if (changes.length === 1)
156
+ return changes[0];
157
+ if (changes.length === 0)
158
+ return null;
159
+ // Multiple changes — pick most recently modified
160
+ const dir = changesDir(cwd);
161
+ let latest = "";
162
+ let latestTime = 0;
163
+ for (const name of changes) {
164
+ const stat = fs.statSync(path.join(dir, name));
165
+ if (stat.mtimeMs > latestTime) {
166
+ latestTime = stat.mtimeMs;
167
+ latest = name;
168
+ }
169
+ }
170
+ return latest || null;
171
+ }
172
+ // ───────────────────────────────────────────────────────────────────
173
+ // Formatting helpers
174
+ // ───────────────────────────────────────────────────────────────────
175
+ function formatStatus(status) {
176
+ const lines = [];
177
+ const icon = status.isComplete ? "✅" : "🔄";
178
+ lines.push(`${icon} **${status.changeName}** (${status.schemaName})`);
179
+ lines.push("");
180
+ // Artifact table
181
+ lines.push("| Artifact | Status | Dependencies |");
182
+ lines.push("|----------|--------|--------------|");
183
+ for (const a of status.artifacts) {
184
+ const statusIcon = ARTIFACT_COLORS[a.status] ?? a.status;
185
+ const deps = a.missingDeps?.join(", ") ?? "—";
186
+ lines.push(`| ${a.id} | ${statusIcon} ${a.status} | ${deps} |`);
187
+ }
188
+ if (status.nextSteps.length > 0) {
189
+ lines.push("");
190
+ lines.push("**Next steps:**");
191
+ for (const step of status.nextSteps) {
192
+ lines.push(`- ${step}`);
193
+ }
194
+ }
195
+ return lines.join("\n");
196
+ }
197
+ function formatChangeList(changes, _cwd) {
198
+ if (changes.length === 0) {
199
+ return "No active changes. Create one with `/openspec new <name>`";
200
+ }
201
+ const lines = [];
202
+ lines.push("| # | Change | Tasks | Status | Modified |");
203
+ lines.push("|---|--------|-------|--------|----------|");
204
+ for (const c of changes) {
205
+ const m = NAMED_RE.exec(c.name);
206
+ const num = m ? m[1] : "—";
207
+ const tasks = c.totalTasks > 0 ? `${c.completedTasks}/${c.totalTasks}` : "—";
208
+ const date = c.lastModified.slice(0, 10);
209
+ lines.push(`| ${num} | ${c.name} | ${tasks} | ${c.status} | ${date} |`);
210
+ }
211
+ return lines.join("\n");
212
+ }
213
+ // ───────────────────────────────────────────────────────────────────
214
+ // Subcommand handlers
215
+ // ───────────────────────────────────────────────────────────────────
216
+ async function handleNew(name, ctx, pi) {
217
+ if (!hasOpenSpec(ctx.cwd)) {
218
+ ctx.ui.notify("No openspec/ directory found. Run `/openspec init` first.", "error");
219
+ return;
220
+ }
221
+ const cleaned = name.replace(/^["']|["']$/g, "").trim();
222
+ if (!cleaned) {
223
+ // No name — ask the agent to infer one
224
+ const num = nextNumber(ctx.cwd);
225
+ const padded = String(num).padStart(5, "0");
226
+ pi.sendUserMessage(`The user ran \`/openspec new\` with no name. ` +
227
+ `Infer a concise change name from the current conversation ` +
228
+ `context.\n\n` +
229
+ `Then run: \`/openspec new <inferred-name>\`\n\n` +
230
+ `Next number: **${padded}**, today: ${today()}`);
231
+ return;
232
+ }
233
+ const slug = toSlug(cleaned);
234
+ if (!slug) {
235
+ ctx.ui.notify("Name produced an empty slug — use letters and numbers.", "error");
236
+ return;
237
+ }
238
+ const num = nextNumber(ctx.cwd);
239
+ const padded = String(num).padStart(5, "0");
240
+ const fullName = `${padded}-${today()}-${slug}`;
241
+ try {
242
+ run(ctx.cwd, `new change "${fullName}"`);
243
+ ctx.ui.notify(`✅ Created change: ${fullName}`, "info");
244
+ // Feed the agent instructions for the first artifact
245
+ pi.sendUserMessage(`New OpenSpec change **${fullName}** created.\n\n` +
246
+ `The spec-driven workflow is: ` +
247
+ `proposal → specs → design → tasks.\n\n` +
248
+ `The first artifact to write is **proposal**. ` +
249
+ `Run \`/openspec next ${num} proposal\` to get ` +
250
+ `enriched instructions, or start writing ` +
251
+ `\`openspec/changes/${fullName}/proposal.md\` ` +
252
+ `directly.`);
253
+ }
254
+ catch (err) {
255
+ const msg = err instanceof Error ? err.message : String(err);
256
+ ctx.ui.notify(`❌ Failed to create change: ${msg}`, "error");
257
+ }
258
+ }
259
+ async function handleStatus(arg, ctx) {
260
+ if (!hasOpenSpec(ctx.cwd)) {
261
+ ctx.ui.notify("No openspec/ directory found. Run `/openspec init` first.", "error");
262
+ return;
263
+ }
264
+ const trimmed = arg.trim();
265
+ const changeName = trimmed
266
+ ? resolveChange(ctx.cwd, trimmed)
267
+ : inferActiveChange(ctx.cwd);
268
+ if (!changeName) {
269
+ if (trimmed) {
270
+ ctx.ui.notify(`Change "${trimmed}" not found. ` +
271
+ `Run \`/openspec list\` to see available changes.`, "error");
272
+ }
273
+ else {
274
+ ctx.ui.notify("No active changes found. " +
275
+ "Create one with `/openspec new <name>`.", "info");
276
+ }
277
+ return;
278
+ }
279
+ try {
280
+ const result = runJSON(ctx.cwd, `status --change "${changeName}"`);
281
+ ctx.ui.notify(formatStatus(result), "info");
282
+ }
283
+ catch (err) {
284
+ const msg = err instanceof Error ? err.message : String(err);
285
+ ctx.ui.notify(`❌ Status failed: ${msg}`, "error");
286
+ }
287
+ }
288
+ async function handleNext(arg, ctx, pi) {
289
+ if (!hasOpenSpec(ctx.cwd)) {
290
+ ctx.ui.notify("No openspec/ directory found. Run `/openspec init` first.", "error");
291
+ return;
292
+ }
293
+ const parts = arg.trim().split(/\s+/);
294
+ const idPart = parts[0] ?? "";
295
+ const artifactPart = parts[1] ?? "";
296
+ // Resolve the change
297
+ const changeName = idPart
298
+ ? resolveChange(ctx.cwd, idPart)
299
+ : inferActiveChange(ctx.cwd);
300
+ if (!changeName) {
301
+ if (idPart) {
302
+ ctx.ui.notify(`Change "${idPart}" not found.`, "error");
303
+ }
304
+ else {
305
+ ctx.ui.notify("No active changes. Create one with `/openspec new <name>`.", "info");
306
+ }
307
+ return;
308
+ }
309
+ // If no artifact specified, find the next ready one
310
+ let artifact = artifactPart;
311
+ if (!artifact) {
312
+ try {
313
+ const status = runJSON(ctx.cwd, `status --change "${changeName}"`);
314
+ const ready = status.artifacts.find((a) => a.status === "ready");
315
+ if (ready) {
316
+ artifact = ready.id;
317
+ }
318
+ else if (status.isComplete) {
319
+ ctx.ui.notify(`✅ All artifacts for **${changeName}** are complete. ` +
320
+ `Run \`/openspec archive ${changeName}\` ` +
321
+ `when ready.`, "info");
322
+ return;
323
+ }
324
+ else {
325
+ ctx.ui.notify(`No ready artifacts for **${changeName}**. ` +
326
+ `Check status with \`/openspec status\`.`, "warning");
327
+ return;
328
+ }
329
+ }
330
+ catch {
331
+ ctx.ui.notify("Could not determine next artifact. " +
332
+ "Specify one: proposal, specs, design, tasks", "warning");
333
+ return;
334
+ }
335
+ }
336
+ try {
337
+ const result = runJSON(ctx.cwd, `instructions ${artifact} --change "${changeName}"`);
338
+ const relPath = path.relative(ctx.cwd, result.resolvedOutputPath);
339
+ pi.sendUserMessage(`## OpenSpec: Write **${artifact}** for ${changeName}\n\n` +
340
+ `**Output:** \`${relPath}\`\n\n` +
341
+ `**Description:** ${result.description}\n\n` +
342
+ `**Unlocks:** ${result.unlocks.join(", ") || "nothing"}\n\n` +
343
+ `---\n\n` +
344
+ `### Instructions\n\n${result.instruction}\n\n` +
345
+ `---\n\n` +
346
+ `### Template\n\n\`\`\`markdown\n${result.template}\`\`\`\n\n` +
347
+ `Write the artifact at \`${relPath}\` following ` +
348
+ `the instructions above. When done, run ` +
349
+ `\`/openspec status\` to check progress.`);
350
+ }
351
+ catch (err) {
352
+ const msg = err instanceof Error ? err.message : String(err);
353
+ ctx.ui.notify(`❌ Failed to get instructions: ${msg}`, "error");
354
+ }
355
+ }
356
+ async function handleValidate(arg, ctx) {
357
+ if (!hasOpenSpec(ctx.cwd)) {
358
+ ctx.ui.notify("No openspec/ directory found.", "error");
359
+ return;
360
+ }
361
+ const trimmed = arg.trim();
362
+ try {
363
+ let output;
364
+ if (trimmed) {
365
+ const changeName = resolveChange(ctx.cwd, trimmed);
366
+ if (!changeName) {
367
+ ctx.ui.notify(`Change "${trimmed}" not found.`, "error");
368
+ return;
369
+ }
370
+ output = run(ctx.cwd, `validate "${changeName}" --type change`);
371
+ }
372
+ else {
373
+ output = run(ctx.cwd, "validate --all");
374
+ }
375
+ ctx.ui.notify(output || "✅ Validation passed.", "info");
376
+ }
377
+ catch (err) {
378
+ const msg = err instanceof Error ? err.message : String(err);
379
+ ctx.ui.notify(`❌ Validation failed:\n${msg}`, "error");
380
+ }
381
+ }
382
+ async function handleArchive(arg, ctx, pi) {
383
+ if (!hasOpenSpec(ctx.cwd)) {
384
+ ctx.ui.notify("No openspec/ directory found.", "error");
385
+ return;
386
+ }
387
+ const parts = arg.trim().split(/\s+/);
388
+ const idPart = parts[0] ?? "";
389
+ const confirmed = parts.includes("--yes");
390
+ if (!idPart) {
391
+ ctx.ui.notify("Usage: /openspec archive <id> [--yes]", "warning");
392
+ return;
393
+ }
394
+ const changeName = resolveChange(ctx.cwd, idPart);
395
+ if (!changeName) {
396
+ ctx.ui.notify(`Change "${idPart}" not found.`, "error");
397
+ return;
398
+ }
399
+ if (!confirmed) {
400
+ // Gate: validate first, then ask agent to confirm
401
+ pi.sendUserMessage(`Archiving change **${changeName}**.\n\n` +
402
+ `Before archiving, please:\n` +
403
+ `1. Run \`/openspec validate ${idPart}\` ` +
404
+ `to check the change is valid\n` +
405
+ `2. Verify all tasks are complete with ` +
406
+ `\`/openspec status ${idPart}\`\n` +
407
+ `3. Run any project quality gates ` +
408
+ `(build, test, lint)\n\n` +
409
+ `If everything passes, run ` +
410
+ `\`/openspec archive ${idPart} --yes\` ` +
411
+ `to finalize.`);
412
+ return;
413
+ }
414
+ try {
415
+ const output = run(ctx.cwd, `archive "${changeName}" --yes`);
416
+ ctx.ui.notify(`✅ Archived: ${changeName}\n${output}`, "info");
417
+ }
418
+ catch (err) {
419
+ const msg = err instanceof Error ? err.message : String(err);
420
+ ctx.ui.notify(`❌ Archive failed: ${msg}`, "error");
421
+ }
422
+ }
423
+ async function handleList(arg, ctx) {
424
+ if (!hasOpenSpec(ctx.cwd)) {
425
+ ctx.ui.notify("No openspec/ directory found. Run `/openspec init` first.", "error");
426
+ return;
427
+ }
428
+ const isSpecs = arg.trim() === "--specs";
429
+ try {
430
+ if (isSpecs) {
431
+ const output = run(ctx.cwd, "list --specs");
432
+ ctx.ui.notify(output || "No specs found.", "info");
433
+ }
434
+ else {
435
+ const result = runJSON(ctx.cwd, "list");
436
+ ctx.ui.notify(formatChangeList(result.changes, ctx.cwd), "info");
437
+ }
438
+ }
439
+ catch (err) {
440
+ const msg = err instanceof Error ? err.message : String(err);
441
+ ctx.ui.notify(`❌ List failed: ${msg}`, "error");
442
+ }
443
+ }
444
+ async function handleInit(ctx) {
445
+ if (hasOpenSpec(ctx.cwd)) {
446
+ ctx.ui.notify("OpenSpec is already initialized in this project.", "info");
447
+ return;
448
+ }
449
+ try {
450
+ const output = run(ctx.cwd, "init --tools pi");
451
+ ctx.ui.notify(`✅ OpenSpec initialized.\n${output}`, "info");
452
+ }
453
+ catch (err) {
454
+ const msg = err instanceof Error ? err.message : String(err);
455
+ ctx.ui.notify(`❌ Init failed: ${msg}`, "error");
456
+ }
457
+ }
458
+ async function handleSchemas(ctx) {
459
+ try {
460
+ const output = run(ctx.cwd, "schemas");
461
+ ctx.ui.notify(output || "No schemas found.", "info");
462
+ }
463
+ catch (err) {
464
+ const msg = err instanceof Error ? err.message : String(err);
465
+ ctx.ui.notify(`❌ ${msg}`, "error");
466
+ }
467
+ }
468
+ function showHelp(ctx) {
469
+ ctx.ui.notify([
470
+ "OpenSpec commands:",
471
+ "",
472
+ " /openspec new <name> — create a new change",
473
+ " /openspec status [id] — artifact status",
474
+ " /openspec next [id] [artifact] — instructions for next artifact",
475
+ " /openspec validate [id] — validate a change",
476
+ " /openspec archive <id> [--yes] — archive completed change",
477
+ " /openspec list — list active changes",
478
+ " /openspec list --specs — list specs",
479
+ " /openspec init — initialize openspec",
480
+ " /openspec schemas — list workflow schemas",
481
+ "",
482
+ "Identifiers: use number (3), full name, or slug (add-auth).",
483
+ ].join("\n"), "info");
484
+ }
485
+ // ───────────────────────────────────────────────────────────────────
486
+ // Extension entry point
487
+ // ───────────────────────────────────────────────────────────────────
488
+ export default function (pi) {
489
+ // ─── /openspec command ───────────────────────────────────────
490
+ pi.registerCommand("openspec", {
491
+ description: "OpenSpec — new | status | next | validate | " +
492
+ "archive | list | init | schemas",
493
+ getArgumentCompletions: (prefix) => {
494
+ const subs = [
495
+ "new ",
496
+ "status ",
497
+ "next ",
498
+ "validate ",
499
+ "archive ",
500
+ "list",
501
+ "list --specs",
502
+ "init",
503
+ "schemas",
504
+ ];
505
+ const items = subs
506
+ .filter((s) => s.startsWith(prefix))
507
+ .map((s) => ({
508
+ value: s,
509
+ label: s.trim(),
510
+ }));
511
+ return items.length > 0 ? items : null;
512
+ },
513
+ handler: async (args, ctx) => {
514
+ const parts = (args ?? "").trim().split(/\s+/);
515
+ const sub = parts[0]?.toLowerCase() ?? "";
516
+ const rest = parts.slice(1).join(" ");
517
+ switch (sub) {
518
+ case "new":
519
+ return handleNew(rest, ctx, pi);
520
+ case "status":
521
+ return handleStatus(rest, ctx);
522
+ case "next":
523
+ return handleNext(rest, ctx, pi);
524
+ case "validate":
525
+ return handleValidate(rest, ctx);
526
+ case "archive":
527
+ return handleArchive(rest, ctx, pi);
528
+ case "list":
529
+ return handleList(rest, ctx);
530
+ case "init":
531
+ return handleInit(ctx);
532
+ case "schemas":
533
+ return handleSchemas(ctx);
534
+ default:
535
+ showHelp(ctx);
536
+ }
537
+ },
538
+ });
539
+ // ─── Session start: detect openspec projects ─────────────────
540
+ pi.on("session_start", async (_event, ctx) => {
541
+ if (!hasOpenSpec(ctx.cwd))
542
+ return;
543
+ try {
544
+ const result = runJSON(ctx.cwd, "list");
545
+ const count = result.changes.length;
546
+ if (count > 0) {
547
+ ctx.ui.notify(`📋 OpenSpec: ${count} active change(s). ` +
548
+ `Use \`/openspec list\` to view.`, "info");
549
+ }
550
+ }
551
+ catch {
552
+ // CLI not available or not an openspec project — skip
553
+ }
554
+ });
555
+ // ─── Auto-refresh: notify on spec file edits ─────────────────
556
+ pi.on("tool_result", async (event, ctx) => {
557
+ if (event.toolName !== "write" && event.toolName !== "edit") {
558
+ return;
559
+ }
560
+ const filePath = event.input.path ?? "";
561
+ if (!filePath.includes("openspec/changes/"))
562
+ return;
563
+ // Resolve to absolute path
564
+ const abs = path.isAbsolute(filePath)
565
+ ? filePath
566
+ : path.join(ctx.cwd, filePath);
567
+ // Extract change name from path
568
+ const changesRoot = changesDir(ctx.cwd);
569
+ const rel = path.relative(changesRoot, abs);
570
+ const changeName = rel.split(path.sep)[0];
571
+ if (!changeName)
572
+ return;
573
+ try {
574
+ const result = runJSON(ctx.cwd, `status --change "${changeName}"`);
575
+ const done = result.artifacts.filter((a) => a.status === "done").length;
576
+ const total = result.artifacts.length;
577
+ if (result.isComplete) {
578
+ ctx.ui.notify(`✅ All artifacts complete for ` +
579
+ `**${changeName}**! ` +
580
+ `Run \`/openspec archive\` when ready.`, "info");
581
+ }
582
+ else {
583
+ const ready = result.artifacts.find((a) => a.status === "ready");
584
+ if (ready) {
585
+ ctx.ui.notify(`📋 ${changeName}: ${done}/${total} ` +
586
+ `artifacts done. ` +
587
+ `Next: **${ready.id}**`, "info");
588
+ }
589
+ }
590
+ }
591
+ catch {
592
+ // Status check failed — skip silently
593
+ }
594
+ });
595
+ }
596
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}