agent-work-loop 0.6.41 → 0.6.44

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 (50) hide show
  1. package/dist/{brief-GQRHGJQN.js → brief-I2EQVY3F.js} +5 -5
  2. package/dist/{changelog-HZMH3RPD.js → changelog-UBIZQHQO.js} +5 -5
  3. package/dist/{chunk-OJ7YO3MY.js → chunk-236TTTK3.js} +2 -2
  4. package/dist/{chunk-XBUKFMNN.js → chunk-2FQ5HCDI.js} +41 -13
  5. package/dist/{chunk-G6JX5EYW.js → chunk-3LPCP55B.js} +61 -10
  6. package/dist/{chunk-HFRQCP26.js → chunk-3N3QH4PK.js} +4 -4
  7. package/dist/{chunk-6F4VAVKF.js → chunk-4BUPV5VU.js} +3 -3
  8. package/dist/{chunk-B76434VM.js → chunk-DNDODLP2.js} +2 -2
  9. package/dist/{chunk-SUF5ISJM.js → chunk-FGHILN3D.js} +9 -1
  10. package/dist/{chunk-4ZLARTXS.js → chunk-GYXIREXZ.js} +47 -3
  11. package/dist/{chunk-NOU677FX.js → chunk-K2JV27JR.js} +1 -1
  12. package/dist/{chunk-OWILAE4M.js → chunk-L4VWHK4D.js} +53 -39
  13. package/dist/{chunk-2XQZQP7Z.js → chunk-LBZNBCAY.js} +6 -7
  14. package/dist/{chunk-CSBKWYFK.js → chunk-O7PUNJVM.js} +5 -5
  15. package/dist/{chunk-7TMAQRJS.js → chunk-SJG22DAK.js} +27 -6
  16. package/dist/{chunk-FKBBGXGF.js → chunk-SKJZSRVR.js} +5 -5
  17. package/dist/{chunk-7D4T7HFK.js → chunk-SNWJWX5K.js} +126 -6
  18. package/dist/{chunk-UNANHUG3.js → chunk-WOH6WML7.js} +2 -2
  19. package/dist/cli.js +53 -43
  20. package/dist/{commit-SU6CTBU3.js → commit-I5ULIUHW.js} +6 -6
  21. package/dist/{config-Z4G5SBWJ.js → config-6VD46H24.js} +9 -3
  22. package/dist/{doctor-GHWUUAWV.js → doctor-QQLQOP3Y.js} +8 -8
  23. package/dist/{evolve-SQJ5LIE4.js → evolve-MXGX33GB.js} +7 -7
  24. package/dist/{feedback-TPITVUZL.js → feedback-K3P6667T.js} +5 -5
  25. package/dist/{gotchas-UEZG3HVO.js → gotchas-HF5Q2MOA.js} +7 -7
  26. package/dist/{hold-recheck-STHUHCOU.js → hold-recheck-CBSGGRBM.js} +6 -17
  27. package/dist/{init-AVVD77XM.js → init-3B4ZRGWY.js} +2 -2
  28. package/dist/lane-BJ2NJYAH.js +39 -0
  29. package/dist/{loop-summary-L4UTUOPY.js → loop-summary-RZQBTKVY.js} +49 -7
  30. package/dist/{metrics-SOYVRSNM.js → metrics-6SZQAG3C.js} +4 -4
  31. package/dist/{record-V6V5XPPA.js → record-UU4WPT2Z.js} +5 -5
  32. package/dist/{remove-6VQS4ST6.js → remove-UOAMHEUC.js} +16 -16
  33. package/dist/{review-42SXUBZE.js → review-DXSGXZLX.js} +15 -15
  34. package/dist/{rules-ASJFXFGG.js → rules-QDAC6BUX.js} +8 -8
  35. package/dist/{state-6TNG2EC5.js → state-DZC7JVEK.js} +4 -4
  36. package/dist/status-ZZEF4NYL.js +29 -0
  37. package/dist/{update-3AYB3V4I.js → update-CKGPHO5B.js} +2 -2
  38. package/dist/{verify-ZVZCJ3LH.js → verify-LOTTWOHB.js} +10 -10
  39. package/dist/version-check-SILVRBMJ.js +14 -0
  40. package/dist/{work-TVUOH7GQ.js → work-RCV5H7TL.js} +14 -14
  41. package/engine/skills/claude/awl-loop/SKILL.md +16 -0
  42. package/engine/skills/claude/awl-loop/reference.md +4 -0
  43. package/engine/skills/claude/awl-pipeline/SKILL.md +74 -0
  44. package/engine/skills/claude/awl-pipeline-exec/SKILL.md +8 -1
  45. package/engine/skills/claude/awl-pipeline-review/SKILL.md +7 -1
  46. package/engine/version.json +1 -1
  47. package/package.json +1 -1
  48. package/dist/lane-JTE45KFF.js +0 -41
  49. package/dist/status-43UVJLVD.js +0 -40
  50. package/dist/version-check-OKCLT4BF.js +0 -14
@@ -1,22 +1,25 @@
1
- import {
2
- gatherVersionInputs
3
- } from "./chunk-HFRQCP26.js";
4
- import {
5
- checkVersions
6
- } from "./chunk-B76434VM.js";
7
1
  import {
8
2
  loadProjectName,
9
3
  readRecords
10
- } from "./chunk-6F4VAVKF.js";
4
+ } from "./chunk-4BUPV5VU.js";
11
5
  import {
12
6
  loadState,
13
7
  readStateLock
14
- } from "./chunk-UNANHUG3.js";
8
+ } from "./chunk-WOH6WML7.js";
9
+ import {
10
+ gatherVersionInputs
11
+ } from "./chunk-3N3QH4PK.js";
12
+ import {
13
+ checkVersions
14
+ } from "./chunk-DNDODLP2.js";
15
15
  import {
16
16
  CommandNotFoundError,
17
17
  run,
18
18
  tokenize
19
- } from "./chunk-7D4T7HFK.js";
19
+ } from "./chunk-SNWJWX5K.js";
20
+ import {
21
+ listRegisteredProjects
22
+ } from "./chunk-SJG22DAK.js";
20
23
  import {
21
24
  caps,
22
25
  clipToWidth,
@@ -32,7 +35,7 @@ import {
32
35
  sectionBox,
33
36
  signal,
34
37
  visibleWidth
35
- } from "./chunk-SUF5ISJM.js";
38
+ } from "./chunk-FGHILN3D.js";
36
39
 
37
40
  // src/commands/doctor.ts
38
41
  import fs from "fs";
@@ -372,7 +375,12 @@ function collectGlobal(checks, versionResult) {
372
375
  checks.push({ group: "\uC804\uC5ED \uC124\uCE58", name: "\uD504\uB85C\uC81D\uD2B8", status: "info", value: `${projectCount}\uAC1C` });
373
376
  }
374
377
  async function collectProject(checks, projectRoot, versionResult) {
375
- if (!projectRoot) {
378
+ if (projectRoot) {
379
+ await collectSingleProject(checks, projectRoot, "\uC774 \uD504\uB85C\uC81D\uD2B8", versionResult);
380
+ return;
381
+ }
382
+ const registered = listRegisteredProjects().filter((p) => exists(p.path));
383
+ if (registered.length === 0) {
376
384
  checks.push({
377
385
  group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
378
386
  name: "\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8",
@@ -381,15 +389,21 @@ async function collectProject(checks, projectRoot, versionResult) {
381
389
  });
382
390
  return;
383
391
  }
392
+ for (const p of registered) {
393
+ const pVersionResult = checkVersions(gatherVersionInputs(p.path));
394
+ await collectSingleProject(checks, p.path, `\uD504\uB85C\uC81D\uD2B8: ${p.name}`, pVersionResult);
395
+ }
396
+ }
397
+ async function collectSingleProject(checks, projectRoot, groupLabel, versionResult) {
384
398
  checks.push({
385
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
399
+ group: groupLabel,
386
400
  name: "\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8",
387
401
  status: "info",
388
402
  value: projectRoot
389
403
  });
390
404
  const branch = await gitBranch(projectRoot);
391
405
  checks.push({
392
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
406
+ group: groupLabel,
393
407
  name: "\uBE0C\uB79C\uCE58",
394
408
  status: "info",
395
409
  value: branch ?? "\uC54C \uC218 \uC5C6\uC74C (\uD655\uC778 \uC2E4\uD328)"
@@ -397,16 +411,16 @@ async function collectProject(checks, projectRoot, versionResult) {
397
411
  const dirtyFiles = await gitDirtyFiles(projectRoot);
398
412
  if (dirtyFiles === null) {
399
413
  checks.push({
400
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
414
+ group: groupLabel,
401
415
  name: "\uC6CC\uD0B9\uD2B8\uB9AC",
402
416
  status: "info",
403
417
  value: "\uD655\uC778 \uC548 \uB428 (git \uC800\uC7A5\uC18C\uAC00 \uC544\uB2C8\uAC70\uB098 \uD655\uC778 \uC2E4\uD328)"
404
418
  });
405
419
  } else if (dirtyFiles.length === 0) {
406
- checks.push({ group: "\uC774 \uD504\uB85C\uC81D\uD2B8", name: "\uC6CC\uD0B9\uD2B8\uB9AC", status: "ok", value: "\uD074\uB9B0" });
420
+ checks.push({ group: groupLabel, name: "\uC6CC\uD0B9\uD2B8\uB9AC", status: "ok", value: "\uD074\uB9B0" });
407
421
  } else {
408
422
  checks.push({
409
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
423
+ group: groupLabel,
410
424
  name: "\uC6CC\uD0B9\uD2B8\uB9AC",
411
425
  status: "warn",
412
426
  value: `\uBBF8\uCEE4\uBC0B \uBCC0\uACBD ${dirtyFiles.length}\uAC1C`,
@@ -416,7 +430,7 @@ async function collectProject(checks, projectRoot, versionResult) {
416
430
  const configPath = path.join(projectRoot, ".awl", "config.json");
417
431
  if (!exists(configPath)) {
418
432
  checks.push({
419
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
433
+ group: groupLabel,
420
434
  name: "config.json",
421
435
  status: "missing",
422
436
  value: "\uC5C6\uC74C",
@@ -427,7 +441,7 @@ async function collectProject(checks, projectRoot, versionResult) {
427
441
  const raw = readJson(configPath);
428
442
  if (!isAwlConfig(raw)) {
429
443
  checks.push({
430
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
444
+ group: groupLabel,
431
445
  name: "config.json",
432
446
  status: "fail",
433
447
  value: "\uD615\uC2DD \uC624\uB958",
@@ -435,11 +449,11 @@ async function collectProject(checks, projectRoot, versionResult) {
435
449
  });
436
450
  return;
437
451
  }
438
- checks.push({ group: "\uC774 \uD504\uB85C\uC81D\uD2B8", name: "config.json", status: "ok", value: "\uC788\uC74C" });
452
+ checks.push({ group: groupLabel, name: "config.json", status: "ok", value: "\uC788\uC74C" });
439
453
  const recordedNaming = typeof raw.namingConvention === "string" ? raw.namingConvention : void 0;
440
454
  if (recordedNaming) {
441
455
  checks.push({
442
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
456
+ group: groupLabel,
443
457
  name: "\uB124\uC774\uBC0D \uCEE8\uBCA4\uC158",
444
458
  status: "info",
445
459
  value: recordedNaming
@@ -450,17 +464,17 @@ async function collectProject(checks, projectRoot, versionResult) {
450
464
  );
451
465
  if (naming.reason === "detected" && naming.convention) {
452
466
  checks.push({
453
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
467
+ group: groupLabel,
454
468
  name: "\uB124\uC774\uBC0D \uCEE8\uBCA4\uC158",
455
469
  status: "info",
456
470
  value: `${naming.convention} (${naming.counts[naming.convention]}/${naming.decisiveTotal} \uD30C\uC77C, \uBBF8\uAE30\uB85D)`,
457
471
  hint: `config.json \uC5D0 \uAE30\uB85D\uD558\uB824\uBA74: awl config set namingConvention ${naming.convention}`
458
472
  });
459
473
  } else if (naming.reason === "mixed") {
460
- checks.push({ group: "\uC774 \uD504\uB85C\uC81D\uD2B8", name: "\uB124\uC774\uBC0D \uCEE8\uBCA4\uC158", status: "info", value: "\uD63C\uC7AC" });
474
+ checks.push({ group: groupLabel, name: "\uB124\uC774\uBC0D \uCEE8\uBCA4\uC158", status: "info", value: "\uD63C\uC7AC" });
461
475
  } else {
462
476
  checks.push({
463
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
477
+ group: groupLabel,
464
478
  name: "\uB124\uC774\uBC0D \uCEE8\uBCA4\uC158",
465
479
  status: "info",
466
480
  value: "\uD310\uB2E8 \uBCF4\uB958 (\uD30C\uC77C \uBD80\uC871)"
@@ -470,16 +484,16 @@ async function collectProject(checks, projectRoot, versionResult) {
470
484
  const sizeReport = computeFileSizeOutliers(countFileLines(projectRoot));
471
485
  if (sizeReport.threshold === null) {
472
486
  checks.push({
473
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
487
+ group: groupLabel,
474
488
  name: "\uD30C\uC77C \uD06C\uAE30",
475
489
  status: "info",
476
490
  value: "\uD310\uB2E8 \uBCF4\uB958 (\uD30C\uC77C \uBD80\uC871)"
477
491
  });
478
492
  } else if (sizeReport.outliers.length === 0) {
479
- checks.push({ group: "\uC774 \uD504\uB85C\uC81D\uD2B8", name: "\uD30C\uC77C \uD06C\uAE30", status: "ok", value: "\uC774\uC0C1\uCE58 \uC5C6\uC74C" });
493
+ checks.push({ group: groupLabel, name: "\uD30C\uC77C \uD06C\uAE30", status: "ok", value: "\uC774\uC0C1\uCE58 \uC5C6\uC74C" });
480
494
  } else {
481
495
  checks.push({
482
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
496
+ group: groupLabel,
483
497
  name: "\uD30C\uC77C \uD06C\uAE30",
484
498
  status: "warn",
485
499
  value: `\uC774\uC0C1\uCE58 ${sizeReport.outliers.length}\uAC1C (\uC784\uACC4\uAC12 ${Math.round(sizeReport.threshold)}\uC904)`,
@@ -492,7 +506,7 @@ async function collectProject(checks, projectRoot, versionResult) {
492
506
  if (installed !== null) {
493
507
  const projectMismatch = findMismatch(versionResult, "project-vs-engine");
494
508
  checks.push({
495
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
509
+ group: groupLabel,
496
510
  name: "\uC5D4\uC9C4 \uBC84\uC804 \uC77C\uCE58",
497
511
  status: projectMismatch ? "warn" : "ok",
498
512
  value: projectMismatch ? `config ${raw.engineVersion} / \uC124\uCE58 ${installed}` : raw.engineVersion,
@@ -506,7 +520,7 @@ async function collectProject(checks, projectRoot, versionResult) {
506
520
  const first = tokenize(spec.cmd)[0] ?? "";
507
521
  if (!first) {
508
522
  checks.push({
509
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
523
+ group: groupLabel,
510
524
  name: `\uAC80\uC99D: ${vname}`,
511
525
  status: "warn",
512
526
  value: "\uBA85\uB839 \uBE44\uC5B4 \uC788\uC74C"
@@ -516,7 +530,7 @@ async function collectProject(checks, projectRoot, versionResult) {
516
530
  const cwd = spec.cwd ? path.isAbsolute(spec.cwd) ? spec.cwd : path.join(projectRoot, spec.cwd) : void 0;
517
531
  if (cwd && !isDirectory(cwd)) {
518
532
  checks.push({
519
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
533
+ group: groupLabel,
520
534
  name: `\uAC80\uC99D: ${vname}`,
521
535
  status: "missing",
522
536
  value: "cwd \uC5C6\uC74C",
@@ -527,7 +541,7 @@ async function collectProject(checks, projectRoot, versionResult) {
527
541
  try {
528
542
  await run({ cmd: first, args: ["--version"], cwd, timeoutMs: 3e3 });
529
543
  checks.push({
530
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
544
+ group: groupLabel,
531
545
  name: `\uAC80\uC99D: ${vname}`,
532
546
  status: "ok",
533
547
  value: `${first} \uC2E4\uD589 \uAC00\uB2A5`
@@ -535,7 +549,7 @@ async function collectProject(checks, projectRoot, versionResult) {
535
549
  } catch (e) {
536
550
  if (e instanceof CommandNotFoundError) {
537
551
  checks.push({
538
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
552
+ group: groupLabel,
539
553
  name: `\uAC80\uC99D: ${vname}`,
540
554
  status: "missing",
541
555
  value: "\uBA85\uB839 \uC5C6\uC74C",
@@ -543,7 +557,7 @@ async function collectProject(checks, projectRoot, versionResult) {
543
557
  });
544
558
  } else {
545
559
  checks.push({
546
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
560
+ group: groupLabel,
547
561
  name: `\uAC80\uC99D: ${vname}`,
548
562
  status: "warn",
549
563
  value: "\uD655\uC778 \uC2E4\uD328",
@@ -555,7 +569,7 @@ async function collectProject(checks, projectRoot, versionResult) {
555
569
  const statePath = path.join(projectRoot, ".awl", "state.json");
556
570
  if (!exists(statePath)) {
557
571
  checks.push({
558
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
572
+ group: groupLabel,
559
573
  name: "state.json",
560
574
  status: "info",
561
575
  value: "\uC5C6\uC74C (\uC544\uC9C1 \uC2DC\uC791 \uC804)"
@@ -565,9 +579,9 @@ async function collectProject(checks, projectRoot, versionResult) {
565
579
  if (st && typeof st === "object") {
566
580
  const o = st;
567
581
  const pos = typeof o.phase === "string" && o.phase || typeof o.step === "string" && o.step || typeof o.position === "string" && o.position || "\uC788\uC74C";
568
- checks.push({ group: "\uC774 \uD504\uB85C\uC81D\uD2B8", name: "state.json", status: "ok", value: String(pos) });
582
+ checks.push({ group: groupLabel, name: "state.json", status: "ok", value: String(pos) });
569
583
  } else {
570
- checks.push({ group: "\uC774 \uD504\uB85C\uC81D\uD2B8", name: "state.json", status: "warn", value: "\uD615\uC2DD \uC624\uB958" });
584
+ checks.push({ group: groupLabel, name: "state.json", status: "warn", value: "\uD615\uC2DD \uC624\uB958" });
571
585
  }
572
586
  let stateBytes = null;
573
587
  try {
@@ -577,7 +591,7 @@ async function collectProject(checks, projectRoot, versionResult) {
577
591
  }
578
592
  if (stateBytes !== null && stateBytes > STATE_SIZE_WARN_BYTES) {
579
593
  checks.push({
580
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
594
+ group: groupLabel,
581
595
  name: "state.json \uD06C\uAE30",
582
596
  status: "warn",
583
597
  value: `${(stateBytes / (1024 * 1024)).toFixed(1)}MB`,
@@ -594,7 +608,7 @@ async function collectProject(checks, projectRoot, versionResult) {
594
608
  if (leftoverWorktrees.length > 0) {
595
609
  const shown = leftoverWorktrees.slice(0, 3).join(", ");
596
610
  checks.push({
597
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
611
+ group: groupLabel,
598
612
  name: "\uC6CC\uD06C\uD2B8\uB9AC \uC794\uC874",
599
613
  status: "warn",
600
614
  value: `${leftoverWorktrees.length}\uAC1C`,
@@ -611,7 +625,7 @@ async function collectProject(checks, projectRoot, versionResult) {
611
625
  const hasCommits = await gitHasCommits(projectRoot);
612
626
  if (detectRecordTrailGap({ hasCommits, activeWorkitem, gateAttemptRecords })) {
613
627
  checks.push({
614
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
628
+ group: groupLabel,
615
629
  name: "record \uD2B8\uB808\uC77C",
616
630
  status: "warn",
617
631
  value: "\uACF5\uBC31 (\uD65C\uC131 \uC6CC\uD06C\uC544\uC774\uD15C \uC5C6\uC774 \uCEE4\uBC0B \uC774\uB825)",
@@ -632,7 +646,7 @@ async function collectProject(checks, projectRoot, versionResult) {
632
646
  const fmt = (iso) => iso ? iso.slice(0, 16).replace("T", " ") : "\uC5C6\uC74C";
633
647
  const lockNote = lock ? ` \xB7 \uB2E4\uB978 \uC138\uC158\uC774 state \uC4F0\uB294 \uC911(${lock.token})` : "";
634
648
  checks.push({
635
- group: "\uC774 \uD504\uB85C\uC81D\uD2B8",
649
+ group: groupLabel,
636
650
  name: "\uCD5C\uADFC \uD65C\uB3D9",
637
651
  status: lock ? "warn" : "info",
638
652
  value: `\uAE30\uB85D ${fmt(lastAt)} \xB7 state ${fmt(stateMtime)}${lockNote}`,
@@ -5,30 +5,30 @@ import {
5
5
  runWorkNew,
6
6
  sanitizeForGit,
7
7
  worktreeDirtyTracked
8
- } from "./chunk-XBUKFMNN.js";
8
+ } from "./chunk-2FQ5HCDI.js";
9
9
  import {
10
10
  loadProjectName
11
- } from "./chunk-6F4VAVKF.js";
11
+ } from "./chunk-4BUPV5VU.js";
12
12
  import {
13
13
  loadState,
14
14
  writeState
15
- } from "./chunk-UNANHUG3.js";
15
+ } from "./chunk-WOH6WML7.js";
16
16
  import {
17
17
  resolveProjectRoot,
18
18
  run
19
- } from "./chunk-7D4T7HFK.js";
19
+ } from "./chunk-SNWJWX5K.js";
20
20
  import {
21
+ WORKTREES_DIR,
21
22
  caps,
22
23
  feedback,
23
24
  makeColors,
24
25
  sectionBox,
25
26
  signal
26
- } from "./chunk-SUF5ISJM.js";
27
+ } from "./chunk-FGHILN3D.js";
27
28
 
28
29
  // src/commands/lane.ts
29
30
  import fs from "fs";
30
31
  import path from "path";
31
- var WORKTREES_DIR = ".awl-worktrees";
32
32
  var PIPELINE_TRIGGERS = ["/awl-pipeline-plan", "/awl-pipeline-exec", "/awl-pipeline-review"];
33
33
  function requireRoot() {
34
34
  const root = resolveProjectRoot();
@@ -303,7 +303,6 @@ ${feedback(c, "ok", `\uB808\uC778 \uC81C\uAC70 ${color.bold(laneName)}`, branch
303
303
  }
304
304
 
305
305
  export {
306
- WORKTREES_DIR,
307
306
  runLaneNew,
308
307
  parseWorktreeBranches,
309
308
  laneBranchMap,
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  protectedFilesMessage
3
- } from "./chunk-NOU677FX.js";
3
+ } from "./chunk-K2JV27JR.js";
4
4
  import {
5
5
  gitDirtyFiles
6
- } from "./chunk-OWILAE4M.js";
6
+ } from "./chunk-L4VWHK4D.js";
7
7
  import {
8
8
  applyVerificationAttempts,
9
9
  loadState,
10
10
  writeState
11
- } from "./chunk-UNANHUG3.js";
11
+ } from "./chunk-WOH6WML7.js";
12
12
  import {
13
13
  CommandNotFoundError,
14
14
  VERIFY_ORDER,
15
15
  requireConfig,
16
16
  run
17
- } from "./chunk-7D4T7HFK.js";
17
+ } from "./chunk-SNWJWX5K.js";
18
18
  import {
19
19
  caps,
20
20
  makeColors,
21
21
  sectionBox,
22
22
  signal
23
- } from "./chunk-SUF5ISJM.js";
23
+ } from "./chunk-FGHILN3D.js";
24
24
 
25
25
  // src/commands/verify.ts
26
26
  import fs from "fs";
@@ -9,6 +9,7 @@ import {
9
9
  flowStepLine,
10
10
  globalRoot,
11
11
  installedEngineVersion,
12
+ isInsideWorktreesDir,
12
13
  makeColors,
13
14
  makeSymbols,
14
15
  makeTokens,
@@ -18,7 +19,7 @@ import {
18
19
  sectionBox,
19
20
  signal,
20
21
  stringWidth
21
- } from "./chunk-SUF5ISJM.js";
22
+ } from "./chunk-FGHILN3D.js";
22
23
 
23
24
  // src/commands/init.ts
24
25
  import fs from "fs";
@@ -547,6 +548,9 @@ function installSafetyHook(projectRoot) {
547
548
  function registerProject(entry) {
548
549
  const raw = readJson(projectsFile());
549
550
  const list = Array.isArray(raw) ? raw : [];
551
+ if (isInsideWorktreesDir(entry.path)) {
552
+ return { count: list.length, skipped: true };
553
+ }
550
554
  const idx = list.findIndex((p) => p.path === entry.path);
551
555
  if (idx >= 0) {
552
556
  list[idx] = { ...list[idx], ...entry };
@@ -555,7 +559,7 @@ function registerProject(entry) {
555
559
  }
556
560
  writeFileEnsuringDir(projectsFile(), `${JSON.stringify(list, null, 2)}
557
561
  `);
558
- return list.length;
562
+ return { count: list.length, skipped: false };
559
563
  }
560
564
  function claudeSkillNames() {
561
565
  for (const base of [engineDir(), packageEngineDir()]) {
@@ -634,7 +638,7 @@ function syncExistingInstall(projectRoot, engineVersion, now) {
634
638
  `);
635
639
  configUpdated = true;
636
640
  }
637
- registerProject({
641
+ const { skipped: registrationSkipped } = registerProject({
638
642
  name: typeof raw?.project === "string" ? raw.project : path.basename(projectRoot),
639
643
  path: projectRoot,
640
644
  mainLanguage: Array.isArray(raw?.mainLanguage) ? raw.mainLanguage : [],
@@ -658,7 +662,7 @@ function syncExistingInstall(projectRoot, engineVersion, now) {
658
662
  { claude: skills.includes("claude"), codex: skills.includes("codex") },
659
663
  engineVersion
660
664
  );
661
- return { configUpdated, skills };
665
+ return { configUpdated, skills, registrationSkipped };
662
666
  }
663
667
  function countEntries(dir) {
664
668
  try {
@@ -691,7 +695,7 @@ function applyInit(projectRoot, inputs, now) {
691
695
  const statePath = writeState(projectRoot, now);
692
696
  const gitignore = ensureGitignore(projectRoot);
693
697
  const safetyHook = installSafetyHook(projectRoot);
694
- const projectCount = registerProject({
698
+ const { count: projectCount, skipped: registrationSkipped } = registerProject({
695
699
  name: inputs.project,
696
700
  path: projectRoot,
697
701
  mainLanguage: inputs.mainLanguage,
@@ -720,6 +724,7 @@ function applyInit(projectRoot, inputs, now) {
720
724
  gitignore,
721
725
  skills,
722
726
  projectCount,
727
+ registrationSkipped,
723
728
  ruleCount: countEntries(path.join(globalRoot(), "rules", "active")),
724
729
  lessonCount: countEntries(path.join(globalRoot(), "lessons")),
725
730
  safetyHook
@@ -785,6 +790,13 @@ function resultSetupLines(result, c) {
785
790
  `\uADDC\uCE59 ${result.ruleCount}\uAC1C \xB7 \uAD50\uD6C8 ${result.lessonCount}\uAC1C \xB7 \uB4F1\uB85D\uB41C \uD504\uB85C\uC81D\uD2B8 ${result.projectCount}\uAC1C \xB7 1\uC138\uB300`
786
791
  )
787
792
  );
793
+ if (result.registrationSkipped) {
794
+ setupLines.push(
795
+ color.dim(
796
+ "\uC774 \uC704\uCE58\uB294 \uB808\uC778 \uC6CC\uD06C\uD2B8\uB9AC\uC785\uB2C8\uB2E4(.awl-worktrees \uD558\uC704) \u2014 \uC804\uC5ED \uD504\uB85C\uC81D\uD2B8 \uBAA9\uB85D\uC5D0\uB294 \uB4F1\uB85D\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uBD80\uBAA8 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C awl lane rm/awl remove\uB85C \uAD00\uB9AC\uD558\uC138\uC694."
797
+ )
798
+ );
799
+ }
788
800
  return setupLines;
789
801
  }
790
802
  function resultNextLines(inputs, c) {
@@ -1155,6 +1167,13 @@ ${flowActiveNode("\uAE30\uC874 \uC124\uC815", summaryLines, c)}
1155
1167
  } else {
1156
1168
  process.stdout.write("\n \uC124\uC815\uC744 \uADF8\uB300\uB85C \uC501\uB2C8\uB2E4. \uC774\uBBF8 \uCD5C\uC2E0\uC785\uB2C8\uB2E4.\n");
1157
1169
  }
1170
+ if (synced.registrationSkipped) {
1171
+ process.stdout.write(
1172
+ `
1173
+ ${makeColors(c.color).dim("\uC774 \uC704\uCE58\uB294 \uB808\uC778 \uC6CC\uD06C\uD2B8\uB9AC\uC785\uB2C8\uB2E4(.awl-worktrees \uD558\uC704) \u2014 \uC804\uC5ED \uD504\uB85C\uC81D\uD2B8 \uBAA9\uB85D\uC5D0\uB294 \uB4F1\uB85D\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uBD80\uBAA8 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C awl lane rm/awl remove\uB85C \uAD00\uB9AC\uD558\uC138\uC694.")}
1174
+ `
1175
+ );
1176
+ }
1158
1177
  return;
1159
1178
  }
1160
1179
  if (choice === 1) {
@@ -1330,12 +1349,14 @@ async function runInit(opts) {
1330
1349
  const synced = syncExistingInstall(projectRoot, engine.engineVersion, now);
1331
1350
  const syncNote = synced.configUpdated || synced.skills.length > 0 ? `
1332
1351
  ${signal(c, "ok")} \uBC84\uC804 \uB9C8\uCEE4\uB97C ${engine.engineVersion} \uB85C \uB3D9\uAE30\uD654\uD588\uC2B5\uB2C8\uB2E4${synced.skills.length ? ` (\uC2A4\uD0AC: ${synced.skills.join(", ")})` : ""}.` : "";
1352
+ const worktreeNote = synced.registrationSkipped ? `
1353
+ ${makeColors(c.color).dim("\uC774 \uC704\uCE58\uB294 \uB808\uC778 \uC6CC\uD06C\uD2B8\uB9AC\uC785\uB2C8\uB2E4(.awl-worktrees \uD558\uC704) \u2014 \uC804\uC5ED \uD504\uB85C\uC81D\uD2B8 \uBAA9\uB85D\uC5D0\uB294 \uB4F1\uB85D\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uBD80\uBAA8 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C awl lane rm/awl remove\uB85C \uAD00\uB9AC\uD558\uC138\uC694.")}` : "";
1333
1354
  process.stdout.write(
1334
1355
  `
1335
1356
  .awl/config.json \uC774 \uC774\uBBF8 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB300\uB85C \uC501\uB2C8\uB2E4.
1336
1357
  ${signal(c, "ok")} \uC5D4\uC9C4 \uD15C\uD50C\uB9BF\uC744 ${engine.created ? "\uC124\uCE58\uD588\uC2B5\uB2C8\uB2E4." : "\uAC31\uC2E0\uD588\uC2B5\uB2C8\uB2E4."}${syncNote}${hook.warning ? `
1337
1358
  ${signal(c, "warn")} ${hook.warning}` : hook.installed ? `
1338
- ${signal(c, "ok")} git push \uCC28\uB2E8 \uD6C5 \uC124\uCE58` : ""}
1359
+ ${signal(c, "ok")} git push \uCC28\uB2E8 \uD6C5 \uC124\uCE58` : ""}${worktreeNote}
1339
1360
  `
1340
1361
  );
1341
1362
  return;
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  computeDurationMs
3
- } from "./chunk-4ZLARTXS.js";
3
+ } from "./chunk-GYXIREXZ.js";
4
4
  import {
5
5
  computeCoverage,
6
6
  readRecords
7
- } from "./chunk-6F4VAVKF.js";
7
+ } from "./chunk-4BUPV5VU.js";
8
8
  import {
9
9
  loadState
10
- } from "./chunk-UNANHUG3.js";
10
+ } from "./chunk-WOH6WML7.js";
11
11
  import {
12
12
  requireConfig
13
- } from "./chunk-7D4T7HFK.js";
13
+ } from "./chunk-SNWJWX5K.js";
14
14
  import {
15
15
  caps,
16
16
  generationsDir,
@@ -19,7 +19,7 @@ import {
19
19
  lockFile,
20
20
  makeColors,
21
21
  signal
22
- } from "./chunk-SUF5ISJM.js";
22
+ } from "./chunk-FGHILN3D.js";
23
23
 
24
24
  // src/commands/evolve.ts
25
25
  import fs from "fs";