agentera 3.0.0-dev.2 → 3.0.0-dev.3

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.
@@ -0,0 +1,571 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import YAML from "yaml";
4
+ import { isFile, pathExists, resolvePath } from "../core/paths.js";
5
+ function emptySummary() {
6
+ return { pending: 0, applied: 0, noop: 0, blocked: 0, failed: 0, skipped: 0 };
7
+ }
8
+ function summarizePhase(name, items, message = "") {
9
+ const summary = emptySummary();
10
+ for (const item of items) {
11
+ summary[item.status] += 1;
12
+ }
13
+ let status;
14
+ if (summary.blocked > 0) {
15
+ status = "blocked";
16
+ }
17
+ else if (summary.failed > 0) {
18
+ status = "failed";
19
+ }
20
+ else if (summary.pending > 0) {
21
+ status = "pending";
22
+ }
23
+ else if (summary.applied > 0) {
24
+ status = "applied";
25
+ }
26
+ else if (summary.skipped > 0 && summary.noop === 0 && summary.applied === 0) {
27
+ status = "skipped";
28
+ }
29
+ else {
30
+ status = "noop";
31
+ }
32
+ return { name, status, summary, items, message };
33
+ }
34
+ const AGENTERA_ARTIFACTS = [
35
+ "PROGRESS.md",
36
+ "DECISIONS.md",
37
+ "HEALTH.md",
38
+ "PLAN.md",
39
+ "DOCS.md",
40
+ ];
41
+ const ROOT_ARTIFACTS = ["VISION.md"];
42
+ function stripMdExtension(name) {
43
+ return name.replace(/\.md$/i, "").toLowerCase();
44
+ }
45
+ function extractBoldField(text, label) {
46
+ const pattern = new RegExp(`\\*\\*${label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\*\\*:\\s*(.+?)(?=\\n\\*\\*|\\n\\n|\\n#|$)`, "s");
47
+ const match = text.match(pattern);
48
+ return match ? match[1].trim() : "";
49
+ }
50
+ function extractBoldFieldMultiline(text, label) {
51
+ const pattern = new RegExp(`\\*\\*${label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\*\\*:\\s*(.+?)(?=\\n\\*\\*|\\n###|\\n##\\s|$)`, "s");
52
+ const match = text.match(pattern);
53
+ return match ? match[1].trim() : "";
54
+ }
55
+ function extractSection(text, heading) {
56
+ const pattern = new RegExp(`##\\s+${heading.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*\\n(.*?)(?=\\n##\\s|$)`, "s");
57
+ const match = text.match(pattern);
58
+ return match ? match[1].trim() : "";
59
+ }
60
+ function parseContextEnvelope(contextText) {
61
+ const result = {
62
+ intent: "",
63
+ constraints: "",
64
+ unknowns: "",
65
+ scope: "",
66
+ };
67
+ if (!contextText) {
68
+ return result;
69
+ }
70
+ for (const key of Object.keys(result)) {
71
+ const dotted = new RegExp(`${key}\\s*\\(([^)]*)\\)\\s*·\\s*([^·]+?)(?:\\s*·|$)`, "i");
72
+ const m1 = contextText.match(dotted);
73
+ if (m1) {
74
+ result[key] = `(${m1[1]}) ${m1[2].trim()}`;
75
+ continue;
76
+ }
77
+ const plain = new RegExp(`${key}:\\s*([^·]+?)(?:\\s*·|$)`, "i");
78
+ const m2 = contextText.match(plain);
79
+ if (m2) {
80
+ result[key] = m2[1].trim();
81
+ }
82
+ }
83
+ return result;
84
+ }
85
+ function parseProgress(text) {
86
+ const warnings = [];
87
+ const cycles = [];
88
+ const archive = [];
89
+ const cyclePattern = /(?:^[■□]\s+)?##\s+Cycle\s+(\d+)\s*·\s*(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})\s*·\s*(.+)/gm;
90
+ const sections = text.split(/(?=^[■□]?\s*##\s+(?:Cycle\s+\d+|Archived\s+Cycles))/m);
91
+ for (const section of sections) {
92
+ const trimmed = section.trim();
93
+ cyclePattern.lastIndex = 0;
94
+ const m = cyclePattern.exec(trimmed);
95
+ if (!m) {
96
+ continue;
97
+ }
98
+ const typePrefixRaw = m[3].trim();
99
+ const typeMatch = typePrefixRaw.match(/^(feat|fix|docs|refactor|chore|test)/);
100
+ const commitType = typeMatch ? typeMatch[1] : "chore";
101
+ const phase = extractBoldField(section, "Phase");
102
+ const contextRaw = extractBoldFieldMultiline(section, "Context");
103
+ cycles.push({
104
+ number: Number(m[1]),
105
+ timestamp: m[2],
106
+ type: commitType,
107
+ phase: phase ? phase.toLowerCase() : "build",
108
+ what: extractBoldFieldMultiline(section, "What"),
109
+ commit: extractBoldField(section, "Commit") || "N/A",
110
+ inspiration: extractBoldField(section, "Inspiration"),
111
+ discovered: extractBoldField(section, "Discovered"),
112
+ verified: extractBoldField(section, "Verified"),
113
+ next: extractBoldField(section, "Next"),
114
+ context: parseContextEnvelope(contextRaw),
115
+ });
116
+ }
117
+ const archiveMatch = text.match(/##\s+Archived\s+Cycles\s*\n((?:- .+\n?)*)/);
118
+ if (archiveMatch) {
119
+ for (const line of archiveMatch[1].trim().split(/\r?\n/)) {
120
+ const stripped = line.trim();
121
+ if (stripped.startsWith("- ")) {
122
+ archive.push(stripped.slice(2).trim());
123
+ }
124
+ }
125
+ }
126
+ return { cycles, archive, warnings };
127
+ }
128
+ function parseDecisions(text) {
129
+ const warnings = [];
130
+ const decisions = [];
131
+ const archive = [];
132
+ const decisionPattern = /^##\s+Decision\s+(\d+)\s*·\s*(\d{4}-\d{2}-\d{2})/m;
133
+ const sections = text.split(/(?=^##\s+(?:Decision\s+\d+|Archived\s+Decisions))/m);
134
+ for (const section of sections) {
135
+ const m = section.trim().match(decisionPattern);
136
+ if (!m) {
137
+ continue;
138
+ }
139
+ const number = Number(m[1]);
140
+ const choice = extractBoldFieldMultiline(section, "Choice");
141
+ const alternatives = [];
142
+ const altBlock = section.match(/\*\*Alternatives\*\*:\s*\n(.*?)(?=\n\*\*Choice\*\*|\n\*\*Reasoning\*\*|$)/s);
143
+ if (altBlock) {
144
+ for (const line of altBlock[1].split(/\r?\n/)) {
145
+ let trimmed = line.trim();
146
+ if (!trimmed.startsWith("- ") && !trimmed.startsWith("[")) {
147
+ continue;
148
+ }
149
+ if (trimmed.startsWith("- ")) {
150
+ trimmed = trimmed.slice(2).trim();
151
+ }
152
+ if (!trimmed) {
153
+ continue;
154
+ }
155
+ const bracket = trimmed.match(/\[([^\]]+)\]\s*,?\s*(chosen|rejected)?\s*:?\s*(.*)/);
156
+ if (bracket?.[2]) {
157
+ alternatives.push({ name: bracket[1], status: bracket[2], description: bracket[3].trim() });
158
+ }
159
+ else if (bracket) {
160
+ alternatives.push({ name: bracket[1], status: "rejected", description: bracket[3].trim() });
161
+ }
162
+ else {
163
+ const plain = trimmed.match(/([^-:\[\]]+?):\s*(.*)/);
164
+ if (plain) {
165
+ alternatives.push({ name: plain[1].trim(), status: "rejected", description: plain[2].trim() });
166
+ }
167
+ else {
168
+ alternatives.push({ name: trimmed.slice(0, 60), status: "rejected", description: trimmed });
169
+ }
170
+ }
171
+ }
172
+ const choiceText = choice.toLowerCase();
173
+ for (const alt of alternatives) {
174
+ if (alt.status === "rejected") {
175
+ const altKey = alt.name.toLowerCase().split(",")[0].split(":")[0].trim();
176
+ if (altKey && choiceText.includes(altKey)) {
177
+ alt.status = "chosen";
178
+ }
179
+ }
180
+ }
181
+ }
182
+ if (alternatives.length === 0) {
183
+ warnings.push(`Decision ${number}: no alternatives found`);
184
+ }
185
+ else if (!alternatives.some((a) => a.status === "chosen")) {
186
+ warnings.push(`Decision ${number}: could not determine chosen alternative from choice text`);
187
+ }
188
+ const confidence = extractBoldField(section, "Confidence");
189
+ decisions.push({
190
+ number,
191
+ date: m[2],
192
+ question: extractBoldFieldMultiline(section, "Question"),
193
+ context: extractBoldFieldMultiline(section, "Context"),
194
+ alternatives,
195
+ choice,
196
+ reasoning: extractBoldFieldMultiline(section, "Reasoning"),
197
+ confidence: ["firm", "provisional", "exploratory"].includes(confidence) ? confidence : "provisional",
198
+ feeds_into: extractBoldField(section, "Feeds into"),
199
+ });
200
+ }
201
+ const archiveMatch = text.match(/##\s+Archived\s+Decisions\s*\n((?:- .+\n?)*)/);
202
+ if (archiveMatch) {
203
+ for (const line of archiveMatch[1].trim().split(/\r?\n/)) {
204
+ const stripped = line.trim();
205
+ if (stripped.startsWith("- ")) {
206
+ archive.push(stripped.slice(2).trim());
207
+ }
208
+ }
209
+ }
210
+ return { decisions, archive, warnings };
211
+ }
212
+ function parseFindingsSummary(raw) {
213
+ const result = { critical: 0, warning: 0, info: 0, filtered_by_confidence: 0 };
214
+ if (!raw) {
215
+ return result;
216
+ }
217
+ for (const key of ["critical", "warning", "info"]) {
218
+ const m = raw.match(new RegExp(`(\\d+)\\s+${key}`, "i"));
219
+ if (m) {
220
+ result[key] = Number(m[1]);
221
+ }
222
+ }
223
+ const filtered = raw.match(/(\d+)\s+filtered/i);
224
+ if (filtered) {
225
+ result.filtered_by_confidence = Number(filtered[1]);
226
+ }
227
+ return result;
228
+ }
229
+ function parseGrades(raw) {
230
+ const grades = {};
231
+ if (!raw) {
232
+ return grades;
233
+ }
234
+ for (const m of raw.matchAll(/([\w\s]+?)\s*\[([A-F])\]/g)) {
235
+ const name = m[1].trim();
236
+ if (name) {
237
+ grades[name] = m[2];
238
+ }
239
+ }
240
+ return grades;
241
+ }
242
+ function parseHealth(text) {
243
+ const warnings = [];
244
+ const audits = [];
245
+ const archive = [];
246
+ const auditPattern = /^##\s+Audit\s+(\d+)\s*·\s*(\d{4}-\d{2}-\d{2})/m;
247
+ const sections = text.split(/(?=^##\s+(?:Audit\s+\d+|Archived\s+Audits))/m);
248
+ for (const section of sections) {
249
+ const m = section.trim().match(auditPattern);
250
+ if (!m) {
251
+ continue;
252
+ }
253
+ const dimensionsRaw = extractBoldField(section, "Dimensions assessed");
254
+ audits.push({
255
+ number: Number(m[1]),
256
+ date: m[2],
257
+ dimensions: dimensionsRaw ? dimensionsRaw.split(",").map((d) => d.trim()).filter(Boolean) : [],
258
+ findings_summary: parseFindingsSummary(extractBoldField(section, "Findings")),
259
+ trajectory: extractBoldField(section, "Overall trajectory"),
260
+ grades: parseGrades(extractBoldField(section, "Grades")),
261
+ dimension_details: [],
262
+ trends: {},
263
+ patterns: [],
264
+ });
265
+ }
266
+ const archiveMatch = text.match(/##\s+Archived\s+Audits\s*\n((?:### .+\n?(?:.*\n?)*)*)/);
267
+ if (archiveMatch) {
268
+ for (const line of archiveMatch[1].trim().split(/\r?\n/)) {
269
+ const stripped = line.trim();
270
+ if (stripped.startsWith("### ")) {
271
+ archive.push(stripped.slice(4).trim());
272
+ }
273
+ }
274
+ }
275
+ return { audits, archive, warnings };
276
+ }
277
+ function parsePlan(text) {
278
+ const warnings = [];
279
+ const header = {};
280
+ const levelMatch = text.match(/Level:\s*(light|full)/);
281
+ header.level = levelMatch ? levelMatch[1] : "full";
282
+ const createdMatch = text.match(/Created:\s*(\d{4}-\d{2}-\d{2})/);
283
+ header.created = createdMatch ? createdMatch[1] : "";
284
+ const statusMatch = text.match(/Status:\s*(active|completed)/);
285
+ header.status = statusMatch ? statusMatch[1] : "active";
286
+ const reviewedMatch = text.match(/Reviewed:\s*(\d{4}-\d{2}-\d{2})/);
287
+ header.reviewed = reviewedMatch ? reviewedMatch[1] : "";
288
+ const criticMatch = text.match(/Critic issues:\s*(.+?)\s*\|/);
289
+ header.critic_issues = criticMatch ? criticMatch[1].trim() : "";
290
+ const revisedMatch = text.match(/Revised:\s*(.+?)\s*\*?\s*$/m);
291
+ header.revised = revisedMatch ? revisedMatch[1].trim() : "";
292
+ const titleMatch = text.match(/^#\s+Plan:\s*(.+)$/m);
293
+ header.title = titleMatch ? titleMatch[1].trim() : "";
294
+ const scope = { included: [], excluded: [], deferred: [] };
295
+ const scopeMatch = text.match(/##\s+Scope(.*?)(?=\n##\s)/s);
296
+ if (scopeMatch) {
297
+ const scopeText = scopeMatch[1];
298
+ const included = scopeText.match(/\*\*In\*\*:\s*(.+?)(?=\n\*\*Out|\n\*\*Deferred|$)/s);
299
+ if (included) {
300
+ scope.included = included[1]
301
+ .trim()
302
+ .split(/\r?\n/)
303
+ .map((l) => l.trim().replace(/^\*/, "").trim())
304
+ .filter((l) => l && !l.startsWith("#"));
305
+ }
306
+ }
307
+ const tasks = [];
308
+ const taskPattern = /###\s+Task\s+([\w]+):\s*(.+)$/gm;
309
+ const taskSections = [...text.matchAll(taskPattern)];
310
+ for (let i = 0; i < taskSections.length; i++) {
311
+ const tm = taskSections[i];
312
+ const taskNumMatch = tm[1].match(/(\d+)/);
313
+ const taskNum = taskNumMatch ? Number(taskNumMatch[1]) : 0;
314
+ const start = (tm.index ?? 0) + tm[0].length;
315
+ const end = i + 1 < taskSections.length ? (taskSections[i + 1].index ?? text.length) : text.length;
316
+ const taskText = text.slice(start, end);
317
+ const dependsRaw = extractBoldField(taskText, "Depends on");
318
+ let dependsOn = dependsRaw ? dependsRaw.split(",").map((d) => d.trim()).filter(Boolean) : [];
319
+ if (dependsRaw.toLowerCase() === "none") {
320
+ dependsOn = [];
321
+ }
322
+ const statusRaw = extractBoldField(taskText, "Status");
323
+ let statusVal = "pending";
324
+ if (statusRaw.includes("complete")) {
325
+ statusVal = "complete";
326
+ }
327
+ else if (statusRaw.includes("in_progress")) {
328
+ statusVal = "in_progress";
329
+ }
330
+ const acceptance = [];
331
+ const accMatch = taskText.match(/\*\*Acceptance\*\*:\s*\n((?:▸ .+\n?)+)/);
332
+ if (accMatch) {
333
+ for (const line of accMatch[1].trim().split(/\r?\n/)) {
334
+ const stripped = line.trim();
335
+ if (stripped.startsWith("▸ ")) {
336
+ acceptance.push(stripped.slice(2).trim());
337
+ }
338
+ }
339
+ }
340
+ tasks.push({
341
+ number: taskNum,
342
+ name: tm[2].trim(),
343
+ depends_on: dependsOn,
344
+ status: statusVal,
345
+ acceptance,
346
+ });
347
+ }
348
+ const surprisesMatch = text.match(/##\s+Surprises\s*\n(.*?)(?:$)/s);
349
+ return {
350
+ header,
351
+ what: extractSection(text, "What"),
352
+ why: extractSection(text, "Why"),
353
+ constraints: extractSection(text, "Constraints"),
354
+ scope,
355
+ design: extractSection(text, "Design"),
356
+ tasks,
357
+ overall_acceptance: extractSection(text, "Overall Acceptance"),
358
+ surprises: surprisesMatch ? surprisesMatch[1].trim() : "",
359
+ warnings,
360
+ };
361
+ }
362
+ function parseDocs(text) {
363
+ const warnings = [];
364
+ let lastAudit = "";
365
+ const laMatch = text.match(/Last audit:\s*(\d{4}-\d{2}-\d{2})\s*\(([^)]+)\)/);
366
+ if (laMatch) {
367
+ lastAudit = `${laMatch[1]} (${laMatch[2]})`;
368
+ }
369
+ let docRoot = ".";
370
+ const drMatch = text.match(/doc_root:\s*(.+)/);
371
+ if (drMatch) {
372
+ docRoot = drMatch[1].trim();
373
+ }
374
+ let style = "technical, concise";
375
+ const stMatch = text.match(/style:\s*(.+)/);
376
+ if (stMatch) {
377
+ style = stMatch[1].trim();
378
+ }
379
+ return {
380
+ last_audit: lastAudit,
381
+ conventions: {
382
+ doc_root: docRoot,
383
+ style,
384
+ auto_gen: ["none"],
385
+ version_files: [],
386
+ semver_policy: {},
387
+ },
388
+ mapping: [],
389
+ index: [],
390
+ coverage: {},
391
+ audit_log: [],
392
+ warnings,
393
+ };
394
+ }
395
+ function parseVision(text) {
396
+ const warnings = [];
397
+ let projectName = "";
398
+ const nameMatch = text.match(/^#\s+(.+)$/m);
399
+ if (nameMatch) {
400
+ projectName = nameMatch[1].trim();
401
+ }
402
+ return {
403
+ project_name: projectName,
404
+ north_star: extractSection(text, "North Star"),
405
+ personas: [],
406
+ principles: [],
407
+ direction: extractSection(text, "Direction"),
408
+ identity: {},
409
+ tension: extractSection(text, "The Tension"),
410
+ warnings,
411
+ };
412
+ }
413
+ const PARSERS = {
414
+ "PROGRESS.md": parseProgress,
415
+ "DECISIONS.md": parseDecisions,
416
+ "HEALTH.md": parseHealth,
417
+ "PLAN.md": parsePlan,
418
+ "DOCS.md": parseDocs,
419
+ "VISION.md": parseVision,
420
+ };
421
+ function buildYaml(data) {
422
+ return YAML.stringify(data, { lineWidth: 120 });
423
+ }
424
+ export function getV1OutputPath(artifactName, projectDir) {
425
+ const yamlName = `${stripMdExtension(artifactName)}.yaml`;
426
+ if (artifactName === "VISION.md") {
427
+ return path.join(projectDir, ".agentera", "vision.yaml");
428
+ }
429
+ return path.join(projectDir, ".agentera", yamlName);
430
+ }
431
+ function backupPath(project, source) {
432
+ const backupRoot = path.join(project, ".agentera", "backup-v1");
433
+ const rel = path.relative(project, source);
434
+ const relParts = rel.split(path.sep);
435
+ if (relParts.length <= 2 && (relParts[0] === "." || relParts[0] === ".agentera")) {
436
+ return path.join(backupRoot, path.basename(source));
437
+ }
438
+ return path.join(backupRoot, rel);
439
+ }
440
+ function collectV1ArtifactSources(project) {
441
+ const root = resolvePath(project);
442
+ const files = [];
443
+ for (const name of AGENTERA_ARTIFACTS) {
444
+ const p = path.join(root, ".agentera", name);
445
+ if (isFile(p)) {
446
+ files.push(p);
447
+ }
448
+ }
449
+ for (const name of ROOT_ARTIFACTS) {
450
+ const p = path.join(root, name);
451
+ if (isFile(p)) {
452
+ files.push(p);
453
+ }
454
+ }
455
+ return files;
456
+ }
457
+ function relativeToProject(project, filePath) {
458
+ return path.relative(project, filePath);
459
+ }
460
+ export function planV1ArtifactsPhase(project, force = false) {
461
+ const root = resolvePath(project);
462
+ if (!pathExists(root) || !fs.statSync(root).isDirectory()) {
463
+ return summarizePhase("artifacts", [
464
+ {
465
+ status: "blocked",
466
+ action: "validate",
467
+ message: `project is not a directory: ${root}`,
468
+ },
469
+ ]);
470
+ }
471
+ const items = [];
472
+ for (const sourcePath of collectV1ArtifactSources(root)) {
473
+ const name = path.basename(sourcePath);
474
+ const parser = PARSERS[name];
475
+ if (!parser) {
476
+ items.push({
477
+ status: "blocked",
478
+ action: "migrate",
479
+ source: relativeToProject(root, sourcePath),
480
+ message: "no parser for v1 artifact",
481
+ });
482
+ continue;
483
+ }
484
+ const outputPath = getV1OutputPath(name, root);
485
+ const backup = backupPath(root, sourcePath);
486
+ let status = "pending";
487
+ let message = "will migrate v1 Markdown artifact to v2 YAML and archive source";
488
+ if (isFile(outputPath)) {
489
+ status = "noop";
490
+ message = "v2 YAML artifact already exists";
491
+ }
492
+ else if (isFile(backup)) {
493
+ try {
494
+ const sameBackup = fs.readFileSync(backup).equals(fs.readFileSync(sourcePath));
495
+ if (!sameBackup && !force) {
496
+ status = "blocked";
497
+ message = `backup already exists with different content: ${relativeToProject(root, backup)}`;
498
+ }
499
+ }
500
+ catch (exc) {
501
+ status = "blocked";
502
+ message = `cannot compare existing backup: ${exc.message}`;
503
+ }
504
+ }
505
+ if (status === "pending") {
506
+ try {
507
+ const text = fs.readFileSync(sourcePath, "utf8");
508
+ const data = parser(text);
509
+ const clean = { ...data };
510
+ delete clean.warnings;
511
+ buildYaml(clean);
512
+ }
513
+ catch (exc) {
514
+ status = "blocked";
515
+ message = `migration parser failed: ${exc.message}`;
516
+ }
517
+ }
518
+ items.push({
519
+ status,
520
+ action: "migrate",
521
+ source: relativeToProject(root, sourcePath),
522
+ target: relativeToProject(root, outputPath),
523
+ message,
524
+ });
525
+ }
526
+ return summarizePhase("artifacts", items, items.length === 0 ? "no v1 project artifacts found" : "");
527
+ }
528
+ export function applyV1ArtifactsPhase(phase, project, force = false) {
529
+ const root = resolvePath(project);
530
+ for (const item of phase.items) {
531
+ if (item.status !== "pending" || !item.source || !item.target) {
532
+ continue;
533
+ }
534
+ const sourcePath = path.join(root, item.source);
535
+ const targetPath = path.join(root, item.target);
536
+ const backup = backupPath(root, sourcePath);
537
+ const parser = PARSERS[path.basename(sourcePath)];
538
+ if (!parser) {
539
+ item.status = "failed";
540
+ item.message = "no parser for v1 artifact";
541
+ continue;
542
+ }
543
+ try {
544
+ if (isFile(backup) && !fs.readFileSync(backup).equals(fs.readFileSync(sourcePath)) && !force) {
545
+ item.status = "blocked";
546
+ item.message = `backup already exists with different content: ${relativeToProject(root, backup)}`;
547
+ continue;
548
+ }
549
+ const data = parser(fs.readFileSync(sourcePath, "utf8"));
550
+ delete data.warnings;
551
+ const yamlContent = buildYaml(data);
552
+ fs.mkdirSync(path.dirname(backup), { recursive: true });
553
+ if (force || !isFile(backup)) {
554
+ fs.copyFileSync(sourcePath, backup);
555
+ }
556
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
557
+ fs.writeFileSync(targetPath, yamlContent, "utf8");
558
+ fs.unlinkSync(sourcePath);
559
+ item.status = "applied";
560
+ item.message = "migrated and archived source";
561
+ }
562
+ catch (exc) {
563
+ item.status = "failed";
564
+ item.message = `migration failed: ${exc.message}`;
565
+ }
566
+ }
567
+ const updated = summarizePhase("artifacts", phase.items, phase.message);
568
+ phase.status = updated.status;
569
+ phase.summary = updated.summary;
570
+ }
571
+ //# sourceMappingURL=migrateArtifactsV1ToV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateArtifactsV1ToV2.js","sourceRoot":"","sources":["../../src/upgrade/migrateArtifactsV1ToV2.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { isFile, pathExists, resolvePath } from "../core/paths.js";
4
4
  import { BUNDLE_MARKER } from "../state/installRoot.js";
5
5
  import { doctorRoots } from "./appModel.js";
6
6
  import { AGENTERA_USER_STATE_NAMES, ROOT_USER_STATE_DIR_NAMES, ROOT_USER_STATE_FILE_NAMES, } from "./doctor.js";
7
+ import { applyV1ArtifactsPhase, planV1ArtifactsPhase, } from "./migrateArtifactsV1ToV2.js";
7
8
  import { applyRuntimeMigrationItems, planRuntimeMigrationItems, resolveNpxHookCommands, rewireRuntimeText, } from "./runtimeMigration.js";
8
9
  /**
9
10
  * v2→v3 migration phases: artifacts (noop for YAML), runtime rewire, cleanup.
@@ -96,13 +97,7 @@ export function planArtifactsPhase(project) {
96
97
  }
97
98
  const v1Pairs = detectV1ArtifactPairs(root);
98
99
  if (v1Pairs.length > 0) {
99
- const items = v1Pairs.map((source) => ({
100
- status: "blocked",
101
- action: "validate",
102
- source,
103
- message: "v1 Markdown artifacts require separate v1→v2 migration; v2→v3 preserves existing YAML only",
104
- }));
105
- return summarizePhase("artifacts", items);
100
+ return planV1ArtifactsPhase(root);
106
101
  }
107
102
  const yamlArtifacts = listV2YamlArtifacts(root);
108
103
  if (yamlArtifacts.length === 0) {
@@ -116,7 +111,13 @@ export function planArtifactsPhase(project) {
116
111
  }));
117
112
  return summarizePhase("artifacts", items);
118
113
  }
119
- export function applyArtifactsPhase(phase, _project) {
114
+ export function applyArtifactsPhase(phase, project, force = false) {
115
+ const root = resolvePath(project);
116
+ const hasV1Migration = phase.items.some((item) => item.action === "migrate");
117
+ if (hasV1Migration) {
118
+ applyV1ArtifactsPhase(phase, root, force);
119
+ return;
120
+ }
120
121
  phase.status = summarizePhase("artifacts", phase.items, phase.message).status;
121
122
  }
122
123
  export function planRuntimeRewirePhase(ctx) {
@@ -319,7 +320,7 @@ export function applyMigrationPhases(ctx, preview, only = ["artifacts", "runtime
319
320
  cleanup: { ...preview.cleanup, items: preview.cleanup.items.map((item) => ({ ...item })) },
320
321
  };
321
322
  if (only.includes("artifacts")) {
322
- applyArtifactsPhase(result.artifacts, ctx.project);
323
+ applyArtifactsPhase(result.artifacts, ctx.project, ctx.force);
323
324
  }
324
325
  if (only.includes("runtime")) {
325
326
  applyRuntimeRewirePhase(result.runtime, ctx);