agent-work-loop 0.6.25 → 0.6.26

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 (51) hide show
  1. package/dist/{brief-LZ6JC5V5.js → brief-JIXESFMO.js} +5 -5
  2. package/dist/{changelog-ZCPSFDX3.js → changelog-PBF6JBOC.js} +5 -5
  3. package/dist/{chunk-ELQ4VANN.js → chunk-2YWYGWCZ.js} +51 -12
  4. package/dist/{chunk-6MG6CQBD.js → chunk-6DXZYTDA.js} +3 -3
  5. package/dist/{chunk-4MWV4RBI.js → chunk-AMQFBJCO.js} +4 -4
  6. package/dist/{chunk-5TFILHLH.js → chunk-B6AEYNF3.js} +2 -2
  7. package/dist/{chunk-JQN653ZS.js → chunk-F34MITMC.js} +2 -2
  8. package/dist/{chunk-ZYXKMNHC.js → chunk-FQLRA2YC.js} +1 -1
  9. package/dist/{chunk-57EWVAZO.js → chunk-JDCW2Y2G.js} +4 -4
  10. package/dist/{chunk-R2RZC5NQ.js → chunk-KEVDO3C3.js} +5 -5
  11. package/dist/{chunk-7KIVLJG3.js → chunk-NXH5EBBJ.js} +6 -6
  12. package/dist/{chunk-WRNCUSNU.js → chunk-OPPRCJT2.js} +2 -2
  13. package/dist/{chunk-MJT6UANJ.js → chunk-PLHEP5QE.js} +2 -2
  14. package/dist/{chunk-F7Z3S5LD.js → chunk-PUI2B27T.js} +8 -8
  15. package/dist/{chunk-QLUBNGHR.js → chunk-SQFGUNTY.js} +5 -5
  16. package/dist/{chunk-SBX6LOQE.js → chunk-XD4IDIEM.js} +2 -2
  17. package/dist/{chunk-FBRW7KKY.js → chunk-XQ7JJXBY.js} +5 -5
  18. package/dist/{chunk-OTN2QONN.js → chunk-YODF2HTK.js} +22 -0
  19. package/dist/cli.js +40 -40
  20. package/dist/{commit-4XEKMCJF.js → commit-OUZNLCNL.js} +6 -6
  21. package/dist/{config-BZDCXBQ5.js → config-26FHYODU.js} +3 -3
  22. package/dist/{doctor-ST67JMQ6.js → doctor-UHUA6ULF.js} +8 -8
  23. package/dist/{evolve-ZBSIUZXP.js → evolve-V5BQCSHC.js} +7 -7
  24. package/dist/{feedback-HVNBFJBW.js → feedback-UJ7WSARN.js} +5 -5
  25. package/dist/{gotchas-642PZ5AQ.js → gotchas-L3NXDDDI.js} +7 -7
  26. package/dist/{hold-recheck-N3UCEIXL.js → hold-recheck-QINLKCPM.js} +16 -16
  27. package/dist/{init-2FPJSD64.js → init-6R4MT6FQ.js} +6 -2
  28. package/dist/lane-CJVXEV3A.js +41 -0
  29. package/dist/{loop-summary-22VD3BDL.js → loop-summary-FVJICIWA.js} +6 -6
  30. package/dist/{metrics-4OT2R3GT.js → metrics-NVJFKQ4J.js} +4 -4
  31. package/dist/{record-CJONXDR2.js → record-JJJSGU5E.js} +5 -5
  32. package/dist/{review-L52UGCIJ.js → review-I4QMZPTI.js} +13 -13
  33. package/dist/{rules-U7UCVU5O.js → rules-OTUONMXO.js} +8 -8
  34. package/dist/{state-3G4XAB6P.js → state-UC45ECTI.js} +4 -4
  35. package/dist/status-TU36KJDH.js +40 -0
  36. package/dist/{uninstall-M7Z6SO7L.js → uninstall-HHKLOXF5.js} +15 -15
  37. package/dist/{update-LQBVQIXW.js → update-BXRWE7OH.js} +2 -2
  38. package/dist/{verify-PYZXB67X.js → verify-A64P77RU.js} +10 -10
  39. package/dist/version-check-UBXBVPTS.js +14 -0
  40. package/dist/{work-VTHTF4AQ.js → work-LMM5W2PQ.js} +14 -14
  41. package/engine/skills/claude/awl-loop/SKILL.md +3 -1
  42. package/engine/skills/claude/awl-pipeline/SKILL.md +5 -1
  43. package/engine/skills/claude/awl-pipeline-exec/SKILL.md +4 -1
  44. package/engine/skills/claude/awl-pipeline-plan/SKILL.md +4 -1
  45. package/engine/skills/claude/awl-pipeline-review/SKILL.md +4 -1
  46. package/engine/skills/codex/AGENTS.awl.md +2 -0
  47. package/engine/version.json +1 -1
  48. package/package.json +1 -1
  49. package/dist/lane-7AB53N4M.js +0 -41
  50. package/dist/status-7V4W52VA.js +0 -40
  51. package/dist/version-check-QQDDSBU7.js +0 -14
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  loadProjectName,
3
3
  readRecords
4
- } from "./chunk-6MG6CQBD.js";
4
+ } from "./chunk-6DXZYTDA.js";
5
5
  import {
6
6
  loadState
7
- } from "./chunk-SBX6LOQE.js";
7
+ } from "./chunk-XD4IDIEM.js";
8
8
  import {
9
9
  resolveProjectRoot,
10
10
  run
11
- } from "./chunk-5TFILHLH.js";
12
- import "./chunk-ELQ4VANN.js";
13
- import "./chunk-OTN2QONN.js";
11
+ } from "./chunk-B6AEYNF3.js";
12
+ import "./chunk-2YWYGWCZ.js";
13
+ import "./chunk-YODF2HTK.js";
14
14
 
15
15
  // src/commands/brief.ts
16
16
  var KST_OFFSET_MS = 9 * 60 * 60 * 1e3;
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  readRecords
3
- } from "./chunk-6MG6CQBD.js";
3
+ } from "./chunk-6DXZYTDA.js";
4
4
  import {
5
5
  loadState
6
- } from "./chunk-SBX6LOQE.js";
6
+ } from "./chunk-XD4IDIEM.js";
7
7
  import {
8
8
  resolveProjectRoot
9
- } from "./chunk-5TFILHLH.js";
10
- import "./chunk-ELQ4VANN.js";
9
+ } from "./chunk-B6AEYNF3.js";
10
+ import "./chunk-2YWYGWCZ.js";
11
11
  import {
12
12
  caps,
13
13
  signal
14
- } from "./chunk-OTN2QONN.js";
14
+ } from "./chunk-YODF2HTK.js";
15
15
 
16
16
  // src/commands/changelog.ts
17
17
  function runChangelogDraft(opts) {
@@ -10,9 +10,10 @@ import {
10
10
  padEndDisplay,
11
11
  projectsFile,
12
12
  rawModeCapable,
13
+ sectionBox,
13
14
  signal,
14
15
  stringWidth
15
- } from "./chunk-OTN2QONN.js";
16
+ } from "./chunk-YODF2HTK.js";
16
17
 
17
18
  // src/commands/init.ts
18
19
  import fs from "fs";
@@ -112,7 +113,7 @@ function renderInteractiveSelect(options, state, multi, c, presentation) {
112
113
  lines.push("");
113
114
  lines.push(color.dim(presentation.hint));
114
115
  }
115
- const text = card(presentation.title ?? "\uC120\uD0DD", lines, c);
116
+ const text = sectionBox(presentation.title ?? "\uC120\uD0DD", lines, c);
116
117
  return { text, lineCount: text.split("\n").length };
117
118
  }
118
119
  async function runInteractiveSelect(options, defaultIndex, multi, c, defaultChecked = [], presentation = {}) {
@@ -495,12 +496,13 @@ function registerProject(entry) {
495
496
  return list.length;
496
497
  }
497
498
  function claudeSkillNames() {
498
- const dir = path.join(engineDir(), "skills", "claude");
499
- try {
500
- return fs.readdirSync(dir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort();
501
- } catch {
502
- return [];
499
+ for (const base of [engineDir(), packageEngineDir()]) {
500
+ try {
501
+ return fs.readdirSync(path.join(base, "skills", "claude"), { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort();
502
+ } catch {
503
+ }
503
504
  }
505
+ return [];
504
506
  }
505
507
  function copyClaudeSkills(projectRoot, filter) {
506
508
  const copied = [];
@@ -656,7 +658,7 @@ function applyInit(projectRoot, inputs, now) {
656
658
  }
657
659
  var WIDTH = 64;
658
660
  function stepBox(step, title, lines, c) {
659
- return card(`${step}${c.unicode ? " \xB7 " : " - "}${title}`, lines, c, WIDTH - 4);
661
+ return sectionBox(`${step}${c.unicode ? " \xB7 " : " - "}${title}`, lines, c, WIDTH - 4);
660
662
  }
661
663
  var VERIFY_LABELS = {
662
664
  typecheck: "\uD0C0\uC785\uCCB4\uD06C",
@@ -698,7 +700,7 @@ function renderResult(result, inputs, c) {
698
700
  const color = makeColors(c.color);
699
701
  const t = makeTokens(c);
700
702
  const line = (name, value, note = "") => ` ${padEndDisplay(name, 20)}${t.emphasis(value)}${note ? ` ${color.dim(note)}` : ""}`;
701
- const setupLines = [];
703
+ const setupLines = [t.emphasis(`[v${result.engineVersion}]`)];
702
704
  setupLines.push(line("~/.awl", result.globalCreated ? "\uC0DD\uC131\uB428" : "\uC774\uBBF8 \uC788\uC74C"));
703
705
  setupLines.push(line("~/.awl/engine", result.engineVersion));
704
706
  setupLines.push(line(".awl/config.json", "\uC0DD\uC131\uB428", "<- \uCEE4\uBC0B\uD558\uC138\uC694. \uD300\uC6D0\uC740 \uC774 \uD30C\uC77C\uC744 \uC501\uB2C8\uB2E4"));
@@ -728,9 +730,9 @@ function renderResult(result, inputs, c) {
728
730
  }
729
731
  return [
730
732
  "",
731
- card("\uC124\uC815 \uC644\uB8CC", setupLines, c, WIDTH - 4),
733
+ sectionBox("\uC124\uC815 \uC644\uB8CC", setupLines, c, WIDTH - 4),
732
734
  "",
733
- card("\uB2E4\uC74C \uB2E8\uACC4", nextLines, c, WIDTH - 4)
735
+ sectionBox("\uB2E4\uC74C \uB2E8\uACC4", nextLines, c, WIDTH - 4)
734
736
  ].join("\n");
735
737
  }
736
738
  var LANG_OPTIONS = ["TypeScript", "JavaScript", "Python", "\uC9C1\uC811 \uC785\uB825"];
@@ -901,6 +903,7 @@ async function interactiveInputs(projectRoot, hasGlobal, c) {
901
903
  }
902
904
  process.stdout.write(`
903
905
  ${screens.lang}
906
+
904
907
  `);
905
908
  const rawLanguage = useRawMode ? await runInteractiveSelect(LANG_OPTIONS, langDefaultIndex(projectRoot), false, c, [], {
906
909
  title: "\uC8FC \uC5B8\uC5B4",
@@ -929,10 +932,12 @@ ${screens.lang}
929
932
  if (located.cwd) {
930
933
  process.stdout.write(`
931
934
  ${stepBox("2/3", "\uAC80\uC99D \uBA85\uB839\uC5B4", verifyStepLines(verify), c)}
935
+
932
936
  `);
933
937
  } else {
934
938
  process.stdout.write(`
935
939
  ${screens.verify}
940
+
936
941
  `);
937
942
  }
938
943
  for (const k of Object.keys(VERIFY_LABELS)) {
@@ -946,10 +951,12 @@ ${screens.verify}
946
951
  applyVerifyCwd(verify, located.cwd);
947
952
  process.stdout.write(`
948
953
  ${screens.character}
954
+
949
955
  `);
950
956
  const character = (await ask(prompt(), " > ")).trim();
951
957
  process.stdout.write(`
952
958
  ${screens.skills}
959
+
953
960
  `);
954
961
  const agents = detectAgents(projectRoot);
955
962
  const skillOptions = [
@@ -1075,6 +1082,36 @@ function resolveProjectChoice(idx, candidates) {
1075
1082
  }
1076
1083
  return { kind: "cancel" };
1077
1084
  }
1085
+ function realpathOrResolve(p) {
1086
+ try {
1087
+ return fs.realpathSync(p);
1088
+ } catch {
1089
+ return path.resolve(p);
1090
+ }
1091
+ }
1092
+ function registeredProjectPaths() {
1093
+ try {
1094
+ const raw = JSON.parse(fs.readFileSync(projectsFile(), "utf8"));
1095
+ if (!Array.isArray(raw)) {
1096
+ return /* @__PURE__ */ new Set();
1097
+ }
1098
+ const paths = /* @__PURE__ */ new Set();
1099
+ for (const entry of raw) {
1100
+ if (entry && typeof entry === "object" && typeof entry.path === "string") {
1101
+ paths.add(realpathOrResolve(entry.path));
1102
+ }
1103
+ }
1104
+ return paths;
1105
+ } catch {
1106
+ return /* @__PURE__ */ new Set();
1107
+ }
1108
+ }
1109
+ function excludeRegisteredProjects(candidates, registered) {
1110
+ if (registered.size === 0) {
1111
+ return candidates;
1112
+ }
1113
+ return candidates.filter((c) => !registered.has(realpathOrResolve(c.path)));
1114
+ }
1078
1115
  async function pickProjectRoot(cwd, c) {
1079
1116
  const raw = rawModeCapable();
1080
1117
  const session = { rl: null };
@@ -1111,7 +1148,7 @@ async function pickProjectRoot(cwd, c) {
1111
1148
  return null;
1112
1149
  }
1113
1150
  }
1114
- const candidates = scanGitProjects(cwd);
1151
+ const candidates = excludeRegisteredProjects(scanGitProjects(cwd), registeredProjectPaths());
1115
1152
  const labels = [...candidates.map((p) => `${p.name} (${p.path})`), "\uC9C1\uC811 \uACBD\uB85C \uC785\uB825", "\uCDE8\uC18C"];
1116
1153
  const title = candidates.length > 0 ? "\uD504\uB85C\uC81D\uD2B8\uB97C \uACE0\uB974\uC138\uC694 (\uCD5C\uADFC \uC218\uC815\uC21C, \uCD5C\uB300 20)" : "\uD558\uC704\uC5D0 git \uD504\uB85C\uC81D\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 \uC9C1\uC811 \uC785\uB825\uD558\uAC70\uB098 \uCDE8\uC18C";
1117
1154
  const choice = resolveProjectChoice(await select(labels, title), candidates);
@@ -1239,5 +1276,7 @@ export {
1239
1276
  promptVerifyLocation,
1240
1277
  applyVerifyCwd,
1241
1278
  resolveProjectChoice,
1279
+ registeredProjectPaths,
1280
+ excludeRegisteredProjects,
1242
1281
  runInit
1243
1282
  };
@@ -2,18 +2,18 @@ import {
2
2
  getCriterion,
3
3
  loadState,
4
4
  writeState
5
- } from "./chunk-SBX6LOQE.js";
5
+ } from "./chunk-XD4IDIEM.js";
6
6
  import {
7
7
  resolveProjectRoot,
8
8
  run
9
- } from "./chunk-5TFILHLH.js";
9
+ } from "./chunk-B6AEYNF3.js";
10
10
  import {
11
11
  caps,
12
12
  card,
13
13
  makeColors,
14
14
  recordsDir,
15
15
  signal
16
- } from "./chunk-OTN2QONN.js";
16
+ } from "./chunk-YODF2HTK.js";
17
17
 
18
18
  // src/commands/record.ts
19
19
  import crypto from "crypto";
@@ -5,22 +5,22 @@ import {
5
5
  runWorkNew,
6
6
  sanitizeForGit,
7
7
  worktreeDirtyTracked
8
- } from "./chunk-F7Z3S5LD.js";
8
+ } from "./chunk-PUI2B27T.js";
9
9
  import {
10
10
  loadState,
11
11
  writeState
12
- } from "./chunk-SBX6LOQE.js";
12
+ } from "./chunk-XD4IDIEM.js";
13
13
  import {
14
14
  resolveProjectRoot,
15
15
  run
16
- } from "./chunk-5TFILHLH.js";
16
+ } from "./chunk-B6AEYNF3.js";
17
17
  import {
18
18
  caps,
19
19
  card,
20
20
  feedback,
21
21
  makeColors,
22
22
  signal
23
- } from "./chunk-OTN2QONN.js";
23
+ } from "./chunk-YODF2HTK.js";
24
24
 
25
25
  // src/commands/lane.ts
26
26
  import fs from "fs";
@@ -4,7 +4,7 @@ import {
4
4
  ask,
5
5
  buildScreens,
6
6
  promptNumber
7
- } from "./chunk-ELQ4VANN.js";
7
+ } from "./chunk-2YWYGWCZ.js";
8
8
  import {
9
9
  caps,
10
10
  card,
@@ -12,7 +12,7 @@ import {
12
12
  makeColors,
13
13
  makeSymbols,
14
14
  signal
15
- } from "./chunk-OTN2QONN.js";
15
+ } from "./chunk-YODF2HTK.js";
16
16
 
17
17
  // src/commands/config.ts
18
18
  import fs from "fs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  npmVersionCachePath
3
- } from "./chunk-OTN2QONN.js";
3
+ } from "./chunk-YODF2HTK.js";
4
4
 
5
5
  // package.json
6
6
  var name = "agent-work-loop";
7
- var version = "0.6.25";
7
+ var version = "0.6.26";
8
8
 
9
9
  // src/core/npm-registry.ts
10
10
  import fs from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  run
3
- } from "./chunk-5TFILHLH.js";
3
+ } from "./chunk-B6AEYNF3.js";
4
4
 
5
5
  // src/core/protected-files.ts
6
6
  async function changedProtectedFiles(projectRoot, protectedFiles) {
@@ -3,14 +3,14 @@ import {
3
3
  getLatestVersionCached,
4
4
  name,
5
5
  version
6
- } from "./chunk-JQN653ZS.js";
6
+ } from "./chunk-F34MITMC.js";
7
7
  import {
8
8
  resolveProjectRoot
9
- } from "./chunk-5TFILHLH.js";
9
+ } from "./chunk-B6AEYNF3.js";
10
10
  import {
11
11
  packageEngineDir,
12
12
  skillsVersionPath
13
- } from "./chunk-ELQ4VANN.js";
13
+ } from "./chunk-2YWYGWCZ.js";
14
14
  import {
15
15
  caps,
16
16
  card,
@@ -19,7 +19,7 @@ import {
19
19
  makeSymbols,
20
20
  makeTokens,
21
21
  signal
22
- } from "./chunk-OTN2QONN.js";
22
+ } from "./chunk-YODF2HTK.js";
23
23
 
24
24
  // src/commands/version-check.ts
25
25
  import fs from "fs";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  WORKTREES_DIR
3
- } from "./chunk-4MWV4RBI.js";
3
+ } from "./chunk-AMQFBJCO.js";
4
4
  import {
5
5
  readRecords
6
- } from "./chunk-6MG6CQBD.js";
6
+ } from "./chunk-6DXZYTDA.js";
7
7
  import {
8
8
  loadState
9
- } from "./chunk-SBX6LOQE.js";
9
+ } from "./chunk-XD4IDIEM.js";
10
10
  import {
11
11
  resolveProjectRoot,
12
12
  run
13
- } from "./chunk-5TFILHLH.js";
13
+ } from "./chunk-B6AEYNF3.js";
14
14
  import {
15
15
  caps,
16
16
  card,
@@ -21,7 +21,7 @@ import {
21
21
  signal,
22
22
  statusBadge,
23
23
  stringWidth
24
- } from "./chunk-OTN2QONN.js";
24
+ } from "./chunk-YODF2HTK.js";
25
25
 
26
26
  // src/commands/status.ts
27
27
  import fs2 from "fs";
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  gatherVersionInputs
3
- } from "./chunk-57EWVAZO.js";
3
+ } from "./chunk-JDCW2Y2G.js";
4
4
  import {
5
5
  checkVersions
6
- } from "./chunk-JQN653ZS.js";
6
+ } from "./chunk-F34MITMC.js";
7
7
  import {
8
8
  loadProjectName,
9
9
  readRecords
10
- } from "./chunk-6MG6CQBD.js";
10
+ } from "./chunk-6DXZYTDA.js";
11
11
  import {
12
12
  loadState,
13
13
  readStateLock
14
- } from "./chunk-SBX6LOQE.js";
14
+ } from "./chunk-XD4IDIEM.js";
15
15
  import {
16
16
  CommandNotFoundError,
17
17
  run,
18
18
  tokenize
19
- } from "./chunk-5TFILHLH.js";
19
+ } from "./chunk-B6AEYNF3.js";
20
20
  import {
21
21
  caps,
22
22
  card,
@@ -32,7 +32,7 @@ import {
32
32
  rulesDir,
33
33
  signal,
34
34
  visibleWidth
35
- } from "./chunk-OTN2QONN.js";
35
+ } from "./chunk-YODF2HTK.js";
36
36
 
37
37
  // src/commands/doctor.ts
38
38
  import fs from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  requireConfig
3
- } from "./chunk-5TFILHLH.js";
3
+ } from "./chunk-B6AEYNF3.js";
4
4
  import {
5
5
  caps,
6
6
  card,
@@ -8,7 +8,7 @@ import {
8
8
  makeColors,
9
9
  padEndDisplay,
10
10
  stringWidth
11
- } from "./chunk-OTN2QONN.js";
11
+ } from "./chunk-YODF2HTK.js";
12
12
 
13
13
  // src/commands/metrics.ts
14
14
  import fs from "fs";
@@ -2,14 +2,14 @@ import {
2
2
  acquireLock,
3
3
  loadGotchaList,
4
4
  releaseLock
5
- } from "./chunk-QLUBNGHR.js";
5
+ } from "./chunk-SQFGUNTY.js";
6
6
  import {
7
7
  caps,
8
8
  card,
9
9
  makeColors,
10
10
  rulesDir,
11
11
  signal
12
- } from "./chunk-OTN2QONN.js";
12
+ } from "./chunk-YODF2HTK.js";
13
13
 
14
14
  // src/commands/rules.ts
15
15
  import { spawnSync } from "child_process";
@@ -7,29 +7,29 @@ import {
7
7
  isCheckPassed,
8
8
  runVerifyChecks,
9
9
  writeVerifyBaseline
10
- } from "./chunk-FBRW7KKY.js";
10
+ } from "./chunk-XQ7JJXBY.js";
11
11
  import {
12
12
  gitBranch
13
- } from "./chunk-7KIVLJG3.js";
13
+ } from "./chunk-NXH5EBBJ.js";
14
14
  import {
15
15
  parseRuleFile
16
- } from "./chunk-MJT6UANJ.js";
16
+ } from "./chunk-PLHEP5QE.js";
17
17
  import {
18
18
  nextGotchaId
19
- } from "./chunk-QLUBNGHR.js";
19
+ } from "./chunk-SQFGUNTY.js";
20
20
  import {
21
21
  loadState,
22
22
  migrateState,
23
23
  writeState
24
- } from "./chunk-SBX6LOQE.js";
24
+ } from "./chunk-XD4IDIEM.js";
25
25
  import {
26
26
  loadConfig,
27
27
  resolveProjectRoot,
28
28
  run
29
- } from "./chunk-5TFILHLH.js";
29
+ } from "./chunk-B6AEYNF3.js";
30
30
  import {
31
31
  installClaudeSkill
32
- } from "./chunk-ELQ4VANN.js";
32
+ } from "./chunk-2YWYGWCZ.js";
33
33
  import {
34
34
  caps,
35
35
  card,
@@ -39,7 +39,7 @@ import {
39
39
  makeSymbols,
40
40
  makeTokens,
41
41
  signal
42
- } from "./chunk-OTN2QONN.js";
42
+ } from "./chunk-YODF2HTK.js";
43
43
 
44
44
  // src/commands/work.ts
45
45
  import fs2 from "fs";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  computeDurationMs
3
- } from "./chunk-WRNCUSNU.js";
3
+ } from "./chunk-OPPRCJT2.js";
4
4
  import {
5
5
  computeCoverage,
6
6
  readRecords
7
- } from "./chunk-6MG6CQBD.js";
7
+ } from "./chunk-6DXZYTDA.js";
8
8
  import {
9
9
  loadState
10
- } from "./chunk-SBX6LOQE.js";
10
+ } from "./chunk-XD4IDIEM.js";
11
11
  import {
12
12
  requireConfig
13
- } from "./chunk-5TFILHLH.js";
13
+ } from "./chunk-B6AEYNF3.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-OTN2QONN.js";
22
+ } from "./chunk-YODF2HTK.js";
23
23
 
24
24
  // src/commands/evolve.ts
25
25
  import fs from "fs";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  resolveProjectRoot
3
- } from "./chunk-5TFILHLH.js";
3
+ } from "./chunk-B6AEYNF3.js";
4
4
  import {
5
5
  caps,
6
6
  card,
7
7
  makeColors
8
- } from "./chunk-OTN2QONN.js";
8
+ } from "./chunk-YODF2HTK.js";
9
9
 
10
10
  // src/commands/state.ts
11
11
  import fs from "fs";
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  protectedFilesMessage
3
- } from "./chunk-ZYXKMNHC.js";
3
+ } from "./chunk-FQLRA2YC.js";
4
4
  import {
5
5
  gitDirtyFiles
6
- } from "./chunk-7KIVLJG3.js";
6
+ } from "./chunk-NXH5EBBJ.js";
7
7
  import {
8
8
  applyVerificationAttempts,
9
9
  loadState,
10
10
  writeState
11
- } from "./chunk-SBX6LOQE.js";
11
+ } from "./chunk-XD4IDIEM.js";
12
12
  import {
13
13
  CommandNotFoundError,
14
14
  VERIFY_ORDER,
15
15
  requireConfig,
16
16
  run
17
- } from "./chunk-5TFILHLH.js";
17
+ } from "./chunk-B6AEYNF3.js";
18
18
  import {
19
19
  caps,
20
20
  card,
21
21
  makeColors,
22
22
  signal
23
- } from "./chunk-OTN2QONN.js";
23
+ } from "./chunk-YODF2HTK.js";
24
24
 
25
25
  // src/commands/verify.ts
26
26
  import fs from "fs";
@@ -415,6 +415,27 @@ function card(title, lines, c = caps(), minInnerWidth = 0) {
415
415
  const bottom = frame(`${s.boxBL}${s.boxH.repeat(inner + pad * 2)}${s.boxBR}`);
416
416
  return [top, ...wrapped.map(row), bottom].join("\n");
417
417
  }
418
+ function sectionBox(title, lines, c = caps(), minInnerWidth = 0) {
419
+ const s = makeSymbols(c);
420
+ const t = makeTokens(c);
421
+ const pad = 2;
422
+ const maxInner = Math.max(
423
+ minInnerWidth,
424
+ Math.min(HARD_MAX_WIDTH, viewportWidth() - (2 + pad * 2))
425
+ );
426
+ const wrapped = lines.flatMap((line) => wrapToWidth(line, maxInner, { hanging: true }));
427
+ const inner = Math.min(
428
+ maxInner,
429
+ Math.max(minInnerWidth, visibleWidth(title), ...wrapped.map(visibleWidth), 0)
430
+ );
431
+ const frame = (text) => t.frame(text);
432
+ const row = (text) => `${frame(s.boxV)}${" ".repeat(pad)}${text}`;
433
+ const safeTitle = truncateToWidth(title, inner);
434
+ const tvis = visibleWidth(safeTitle);
435
+ const dash = Math.max(1, inner + pad * 2 - 3 - tvis);
436
+ const top = frame(`${s.boxTL}${s.boxH} `) + t.emphasis(t.accent(safeTitle)) + frame(` ${s.boxH.repeat(dash)}`);
437
+ return [top, ...wrapped.map(row)].join("\n");
438
+ }
418
439
  var RESET = "\x1B[0m";
419
440
  function ansi(code, str, enabled) {
420
441
  return enabled ? `\x1B[${code}m${str}${RESET}` : str;
@@ -516,6 +537,7 @@ export {
516
537
  padEndDisplay,
517
538
  makeSymbols,
518
539
  card,
540
+ sectionBox,
519
541
  makeTokens,
520
542
  signal,
521
543
  statusBadge,