agent-work-loop 0.6.25 → 0.6.27

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 (52) hide show
  1. package/README.md +17 -0
  2. package/dist/{brief-LZ6JC5V5.js → brief-TQND6XIK.js} +5 -5
  3. package/dist/{changelog-ZCPSFDX3.js → changelog-J4LP6ZJI.js} +5 -5
  4. package/dist/{chunk-5TFILHLH.js → chunk-CLWQEWEG.js} +4 -4
  5. package/dist/{chunk-57EWVAZO.js → chunk-DGPZEEFJ.js} +7 -7
  6. package/dist/{chunk-QLUBNGHR.js → chunk-DR7OZZ4N.js} +5 -5
  7. package/dist/{chunk-R2RZC5NQ.js → chunk-GKKWXRQA.js} +9 -9
  8. package/dist/{chunk-4MWV4RBI.js → chunk-H4EMS47F.js} +7 -7
  9. package/dist/{chunk-7KIVLJG3.js → chunk-J7EKKHVW.js} +8 -8
  10. package/dist/{chunk-6MG6CQBD.js → chunk-JXFQHNHV.js} +6 -6
  11. package/dist/{chunk-ZYXKMNHC.js → chunk-KJG2ULS4.js} +1 -1
  12. package/dist/{chunk-MJT6UANJ.js → chunk-KNBSZQGN.js} +5 -5
  13. package/dist/{chunk-OTN2QONN.js → chunk-M4H4VNN6.js} +5 -9
  14. package/dist/{chunk-JQN653ZS.js → chunk-MCNUMMKK.js} +2 -2
  15. package/dist/{chunk-FBRW7KKY.js → chunk-MLD2GOVM.js} +7 -7
  16. package/dist/{chunk-WRNCUSNU.js → chunk-OSKS2YRU.js} +7 -7
  17. package/dist/{chunk-F7Z3S5LD.js → chunk-PFXDX4JF.js} +11 -11
  18. package/dist/{chunk-ELQ4VANN.js → chunk-PIOV3MQT.js} +52 -14
  19. package/dist/{chunk-SBX6LOQE.js → chunk-UB4RLTLJ.js} +6 -6
  20. package/dist/cli.js +43 -43
  21. package/dist/{commit-4XEKMCJF.js → commit-2WWILQRB.js} +6 -6
  22. package/dist/{config-BZDCXBQ5.js → config-XMM3V7MT.js} +3 -3
  23. package/dist/{doctor-ST67JMQ6.js → doctor-HZEAQNY7.js} +8 -8
  24. package/dist/{evolve-ZBSIUZXP.js → evolve-EQ3N6F6M.js} +7 -7
  25. package/dist/{feedback-HVNBFJBW.js → feedback-4FT67LSI.js} +8 -8
  26. package/dist/{gotchas-642PZ5AQ.js → gotchas-QJBUVYJV.js} +11 -11
  27. package/dist/{hold-recheck-N3UCEIXL.js → hold-recheck-L3DAS3MV.js} +18 -18
  28. package/dist/{init-2FPJSD64.js → init-PTTYGP2D.js} +6 -2
  29. package/dist/lane-WINQEOEW.js +41 -0
  30. package/dist/{loop-summary-22VD3BDL.js → loop-summary-OSYJB57M.js} +10 -10
  31. package/dist/{metrics-4OT2R3GT.js → metrics-BC7ZUCGU.js} +4 -4
  32. package/dist/{record-CJONXDR2.js → record-CKR6G6UZ.js} +5 -5
  33. package/dist/{review-L52UGCIJ.js → review-UJH6C7F4.js} +16 -16
  34. package/dist/{rules-U7UCVU5O.js → rules-E52GU3GA.js} +8 -8
  35. package/dist/{state-3G4XAB6P.js → state-X7DLLBOD.js} +4 -4
  36. package/dist/status-NGSQ4XK3.js +40 -0
  37. package/dist/{uninstall-M7Z6SO7L.js → uninstall-JECZJNRJ.js} +17 -17
  38. package/dist/{update-LQBVQIXW.js → update-GA6I4AMF.js} +6 -6
  39. package/dist/{verify-PYZXB67X.js → verify-KKQ2OQMO.js} +10 -10
  40. package/dist/version-check-7XE232L3.js +14 -0
  41. package/dist/{work-VTHTF4AQ.js → work-3SONYYYB.js} +14 -14
  42. package/engine/skills/claude/awl-loop/SKILL.md +3 -1
  43. package/engine/skills/claude/awl-pipeline/SKILL.md +5 -1
  44. package/engine/skills/claude/awl-pipeline-exec/SKILL.md +4 -1
  45. package/engine/skills/claude/awl-pipeline-plan/SKILL.md +4 -1
  46. package/engine/skills/claude/awl-pipeline-review/SKILL.md +4 -1
  47. package/engine/skills/codex/AGENTS.awl.md +2 -0
  48. package/engine/version.json +1 -1
  49. package/package.json +1 -1
  50. package/dist/lane-7AB53N4M.js +0 -41
  51. package/dist/status-7V4W52VA.js +0 -40
  52. package/dist/version-check-QQDDSBU7.js +0 -14
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  caps,
3
- card,
4
3
  engineDir,
5
4
  globalRoot,
6
5
  installedEngineVersion,
@@ -10,9 +9,10 @@ import {
10
9
  padEndDisplay,
11
10
  projectsFile,
12
11
  rawModeCapable,
12
+ sectionBox,
13
13
  signal,
14
14
  stringWidth
15
- } from "./chunk-OTN2QONN.js";
15
+ } from "./chunk-M4H4VNN6.js";
16
16
 
17
17
  // src/commands/init.ts
18
18
  import fs from "fs";
@@ -112,7 +112,7 @@ function renderInteractiveSelect(options, state, multi, c, presentation) {
112
112
  lines.push("");
113
113
  lines.push(color.dim(presentation.hint));
114
114
  }
115
- const text = card(presentation.title ?? "\uC120\uD0DD", lines, c);
115
+ const text = sectionBox(presentation.title ?? "\uC120\uD0DD", lines, c);
116
116
  return { text, lineCount: text.split("\n").length };
117
117
  }
118
118
  async function runInteractiveSelect(options, defaultIndex, multi, c, defaultChecked = [], presentation = {}) {
@@ -495,12 +495,13 @@ function registerProject(entry) {
495
495
  return list.length;
496
496
  }
497
497
  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 [];
498
+ for (const base of [engineDir(), packageEngineDir()]) {
499
+ try {
500
+ return fs.readdirSync(path.join(base, "skills", "claude"), { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort();
501
+ } catch {
502
+ }
503
503
  }
504
+ return [];
504
505
  }
505
506
  function copyClaudeSkills(projectRoot, filter) {
506
507
  const copied = [];
@@ -656,7 +657,7 @@ function applyInit(projectRoot, inputs, now) {
656
657
  }
657
658
  var WIDTH = 64;
658
659
  function stepBox(step, title, lines, c) {
659
- return card(`${step}${c.unicode ? " \xB7 " : " - "}${title}`, lines, c, WIDTH - 4);
660
+ return sectionBox(`${step}${c.unicode ? " \xB7 " : " - "}${title}`, lines, c, WIDTH - 4);
660
661
  }
661
662
  var VERIFY_LABELS = {
662
663
  typecheck: "\uD0C0\uC785\uCCB4\uD06C",
@@ -698,7 +699,7 @@ function renderResult(result, inputs, c) {
698
699
  const color = makeColors(c.color);
699
700
  const t = makeTokens(c);
700
701
  const line = (name, value, note = "") => ` ${padEndDisplay(name, 20)}${t.emphasis(value)}${note ? ` ${color.dim(note)}` : ""}`;
701
- const setupLines = [];
702
+ const setupLines = [t.emphasis(`[v${result.engineVersion}]`)];
702
703
  setupLines.push(line("~/.awl", result.globalCreated ? "\uC0DD\uC131\uB428" : "\uC774\uBBF8 \uC788\uC74C"));
703
704
  setupLines.push(line("~/.awl/engine", result.engineVersion));
704
705
  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 +729,9 @@ function renderResult(result, inputs, c) {
728
729
  }
729
730
  return [
730
731
  "",
731
- card("\uC124\uC815 \uC644\uB8CC", setupLines, c, WIDTH - 4),
732
+ sectionBox("\uC124\uC815 \uC644\uB8CC", setupLines, c, WIDTH - 4),
732
733
  "",
733
- card("\uB2E4\uC74C \uB2E8\uACC4", nextLines, c, WIDTH - 4)
734
+ sectionBox("\uB2E4\uC74C \uB2E8\uACC4", nextLines, c, WIDTH - 4)
734
735
  ].join("\n");
735
736
  }
736
737
  var LANG_OPTIONS = ["TypeScript", "JavaScript", "Python", "\uC9C1\uC811 \uC785\uB825"];
@@ -901,6 +902,7 @@ async function interactiveInputs(projectRoot, hasGlobal, c) {
901
902
  }
902
903
  process.stdout.write(`
903
904
  ${screens.lang}
905
+
904
906
  `);
905
907
  const rawLanguage = useRawMode ? await runInteractiveSelect(LANG_OPTIONS, langDefaultIndex(projectRoot), false, c, [], {
906
908
  title: "\uC8FC \uC5B8\uC5B4",
@@ -929,10 +931,12 @@ ${screens.lang}
929
931
  if (located.cwd) {
930
932
  process.stdout.write(`
931
933
  ${stepBox("2/3", "\uAC80\uC99D \uBA85\uB839\uC5B4", verifyStepLines(verify), c)}
934
+
932
935
  `);
933
936
  } else {
934
937
  process.stdout.write(`
935
938
  ${screens.verify}
939
+
936
940
  `);
937
941
  }
938
942
  for (const k of Object.keys(VERIFY_LABELS)) {
@@ -946,10 +950,12 @@ ${screens.verify}
946
950
  applyVerifyCwd(verify, located.cwd);
947
951
  process.stdout.write(`
948
952
  ${screens.character}
953
+
949
954
  `);
950
955
  const character = (await ask(prompt(), " > ")).trim();
951
956
  process.stdout.write(`
952
957
  ${screens.skills}
958
+
953
959
  `);
954
960
  const agents = detectAgents(projectRoot);
955
961
  const skillOptions = [
@@ -1012,7 +1018,7 @@ async function handleExistingConfig(rl, projectRoot, c, now) {
1012
1018
  process.stdout.write(" \uC774 \uC124\uC815\uC744 \uADF8\uB300\uB85C \uC4F0\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?\n\n");
1013
1019
  const options = ["\uADF8\uB300\uB85C \uC4F4\uB2E4", "\uAC80\uC99D \uBA85\uB839\uC5B4\uB9CC \uACE0\uCE5C\uB2E4", "\uCC98\uC74C\uBD80\uD130 \uB2E4\uC2DC"];
1014
1020
  process.stdout.write(
1015
- `${card(
1021
+ `${sectionBox(
1016
1022
  "\uAE30\uC874 \uC124\uC815",
1017
1023
  options.map((option, i) => `${i + 1}. ${option}`),
1018
1024
  c
@@ -1075,6 +1081,36 @@ function resolveProjectChoice(idx, candidates) {
1075
1081
  }
1076
1082
  return { kind: "cancel" };
1077
1083
  }
1084
+ function realpathOrResolve(p) {
1085
+ try {
1086
+ return fs.realpathSync(p);
1087
+ } catch {
1088
+ return path.resolve(p);
1089
+ }
1090
+ }
1091
+ function registeredProjectPaths() {
1092
+ try {
1093
+ const raw = JSON.parse(fs.readFileSync(projectsFile(), "utf8"));
1094
+ if (!Array.isArray(raw)) {
1095
+ return /* @__PURE__ */ new Set();
1096
+ }
1097
+ const paths = /* @__PURE__ */ new Set();
1098
+ for (const entry of raw) {
1099
+ if (entry && typeof entry === "object" && typeof entry.path === "string") {
1100
+ paths.add(realpathOrResolve(entry.path));
1101
+ }
1102
+ }
1103
+ return paths;
1104
+ } catch {
1105
+ return /* @__PURE__ */ new Set();
1106
+ }
1107
+ }
1108
+ function excludeRegisteredProjects(candidates, registered) {
1109
+ if (registered.size === 0) {
1110
+ return candidates;
1111
+ }
1112
+ return candidates.filter((c) => !registered.has(realpathOrResolve(c.path)));
1113
+ }
1078
1114
  async function pickProjectRoot(cwd, c) {
1079
1115
  const raw = rawModeCapable();
1080
1116
  const session = { rl: null };
@@ -1111,7 +1147,7 @@ async function pickProjectRoot(cwd, c) {
1111
1147
  return null;
1112
1148
  }
1113
1149
  }
1114
- const candidates = scanGitProjects(cwd);
1150
+ const candidates = excludeRegisteredProjects(scanGitProjects(cwd), registeredProjectPaths());
1115
1151
  const labels = [...candidates.map((p) => `${p.name} (${p.path})`), "\uC9C1\uC811 \uACBD\uB85C \uC785\uB825", "\uCDE8\uC18C"];
1116
1152
  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
1153
  const choice = resolveProjectChoice(await select(labels, title), candidates);
@@ -1239,5 +1275,7 @@ export {
1239
1275
  promptVerifyLocation,
1240
1276
  applyVerifyCwd,
1241
1277
  resolveProjectChoice,
1278
+ registeredProjectPaths,
1279
+ excludeRegisteredProjects,
1242
1280
  runInit
1243
1281
  };
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  resolveProjectRoot
3
- } from "./chunk-5TFILHLH.js";
3
+ } from "./chunk-CLWQEWEG.js";
4
4
  import {
5
5
  caps,
6
- card,
7
- makeColors
8
- } from "./chunk-OTN2QONN.js";
6
+ makeColors,
7
+ sectionBox
8
+ } from "./chunk-M4H4VNN6.js";
9
9
 
10
10
  // src/commands/state.ts
11
11
  import fs from "fs";
@@ -189,14 +189,14 @@ function requireRoot() {
189
189
  function renderState(state, c) {
190
190
  const color = makeColors(c.color);
191
191
  if (Object.keys(state).length === 0) {
192
- return card("\uD604\uC7AC \uC0C1\uD0DC", ["\uC0C1\uD0DC\uAC00 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."], c);
192
+ return sectionBox("\uD604\uC7AC \uC0C1\uD0DC", ["\uC0C1\uD0DC\uAC00 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."], c);
193
193
  }
194
194
  const out = [];
195
195
  for (const [k, v] of Object.entries(state)) {
196
196
  const val = typeof v === "object" ? JSON.stringify(v) : String(v);
197
197
  out.push(`${k.padEnd(14, " ")}${color.dim(val)}`);
198
198
  }
199
- return card("\uD604\uC7AC \uC0C1\uD0DC", out, c);
199
+ return sectionBox("\uD604\uC7AC \uC0C1\uD0DC", out, c);
200
200
  }
201
201
  function runStateGet(opts) {
202
202
  const state = loadState(requireRoot());
package/dist/cli.js CHANGED
@@ -3,18 +3,18 @@ import {
3
3
  computeUpdateAvailable,
4
4
  readCachedLatestVersion,
5
5
  version
6
- } from "./chunk-JQN653ZS.js";
6
+ } from "./chunk-MCNUMMKK.js";
7
7
  import {
8
8
  caps,
9
- card,
10
9
  gradient,
11
10
  installedEngineVersion,
12
11
  makeColors,
13
12
  makeSymbols,
14
13
  makeTokens,
14
+ sectionBox,
15
15
  signal,
16
16
  visibleWidth
17
- } from "./chunk-OTN2QONN.js";
17
+ } from "./chunk-M4H4VNN6.js";
18
18
 
19
19
  // src/program.ts
20
20
  import { Command } from "commander";
@@ -38,7 +38,7 @@ function renderGettingStartedCard(c) {
38
38
  const lines = GETTING_STARTED.map(
39
39
  (g, i) => `${i + 1}. ${t.accent(padVisible(g.cmd, cmdWidth))} ${g.desc}`
40
40
  );
41
- return card("\uC2DC\uC791\uD558\uAE30", lines, c);
41
+ return sectionBox("\uC2DC\uC791\uD558\uAE30", lines, c);
42
42
  }
43
43
  function renderExamplesCard(c) {
44
44
  const t = makeTokens(c);
@@ -52,7 +52,7 @@ function renderExamplesCard(c) {
52
52
  const lines = examples.map(
53
53
  (e) => `${t.accent(padVisible(e.cmd, cmdWidth))} ${t.muted(`# ${e.note}`)}`
54
54
  );
55
- return card("\uC608\uC2DC", lines, c);
55
+ return sectionBox("\uC608\uC2DC", lines, c);
56
56
  }
57
57
  var DENSE_AWL = `
58
58
  \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557
@@ -153,14 +153,14 @@ ${renderExamplesCard(caps())}
153
153
  ` : ""
154
154
  ).showHelpAfterError();
155
155
  program.command("init").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 Agent Work Loop \uB97C \uC124\uC815\uD569\uB2C8\uB2E4").option("--yes", "\uC9C8\uBB38 \uC5C6\uC774 \uC790\uB3D9 \uAC10\uC9C0\uB41C \uAC12\uC73C\uB85C \uC9C4\uD589\uD569\uB2C8\uB2E4 (\uBE44\uB300\uD654\uD615)").action(async (opts) => {
156
- const { runInit } = await import("./init-2FPJSD64.js");
156
+ const { runInit } = await import("./init-PTTYGP2D.js");
157
157
  await runInit({ yes: opts.yes === true });
158
158
  });
159
159
  program.command("status").description("\uC9C0\uAE08 \uC5B4\uB514\uAE4C\uC9C0 \uC654\uB294\uC9C0 \uD55C\uB208\uC5D0 \uBD05\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--pipeline", ".tasks \uB808\uC778(plan/exec/review)\uC758 workitem \uC0C1\uD0DC\uB97C \uBC30\uC9C0\uB85C \uBD05\uB2C8\uB2E4").option(
160
160
  "--archive",
161
161
  "(--pipeline\uACFC \uD568\uAED8) \uC720\uC608 \uAE30\uAC04(3\uC77C) \uC9C0\uB09C \uC644\uB8CC workitem\uC744 .tasks/archive/ \uB85C \uBCF4\uAD00\uD569\uB2C8\uB2E4"
162
162
  ).action(async (opts) => {
163
- const { runStatus } = await import("./status-7V4W52VA.js");
163
+ const { runStatus } = await import("./status-NGSQ4XK3.js");
164
164
  await runStatus({
165
165
  json: opts.json === true,
166
166
  pipeline: opts.pipeline === true,
@@ -168,24 +168,24 @@ ${renderExamplesCard(caps())}
168
168
  });
169
169
  });
170
170
  program.command("brief").description("KST \uC624\uB298(\uB610\uB294 --date)\uC758 \uC9C4\uD589\uBD84\uC744 \uBAA8\uC544 \uB0C5\uB2C8\uB2E4(\uC2A4\uD0AC \uC18C\uBE44\uC6A9 --json)").option("--today", "\uC624\uB298(KST) \uAE30\uC900\uC73C\uB85C \uBAA8\uC74D\uB2C8\uB2E4(\uAE30\uBCF8)").option("--date <YYYY-MM-DD>", "KST \uAE30\uC900 \uD2B9\uC815 \uB0A0\uC9DC\uB85C \uBAA8\uC74D\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
171
- const { runBrief } = await import("./brief-LZ6JC5V5.js");
171
+ const { runBrief } = await import("./brief-TQND6XIK.js");
172
172
  await runBrief({ today: opts.today === true, date: opts.date, json: opts.json === true });
173
173
  });
174
174
  program.command("doctor").description("\uC124\uCE58\uC640 \uD658\uACBD\uC744 \uC810\uAC80\uD569\uB2C8\uB2E4 (\uC544\uBB34\uAC83\uB3C4 \uACE0\uCE58\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
175
- const { runDoctor } = await import("./doctor-ST67JMQ6.js");
175
+ const { runDoctor } = await import("./doctor-HZEAQNY7.js");
176
176
  await runDoctor({ json: opts.json === true });
177
177
  });
178
178
  program.command("version-check").description("\uBC84\uC804 \uBD88\uC77C\uCE58\uB97C \uAC80\uC0AC\uD569\uB2C8\uB2E4 (package/engine/\uD504\uB85C\uC81D\uD2B8/\uC2A4\uD0AC)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
179
- const { runVersionCheck } = await import("./version-check-QQDDSBU7.js");
179
+ const { runVersionCheck } = await import("./version-check-7XE232L3.js");
180
180
  await runVersionCheck({ json: opts.json === true });
181
181
  });
182
182
  program.command("update").description("\uC124\uCE58\uB41C \uC5D4\uC9C4(~/.awl/engine)\uC744 \uAC31\uC2E0\uD569\uB2C8\uB2E4").action(async () => {
183
- const { runUpdate } = await import("./update-LQBVQIXW.js");
183
+ const { runUpdate } = await import("./update-GA6I4AMF.js");
184
184
  runUpdate();
185
185
  });
186
186
  program.command("uninstall").description("awl \uC774 \uC190\uB304 \uD754\uC801\uC744 \uC9C0\uC6C1\uB2C8\uB2E4 (\uAE30\uBCF8\uC740 \uB4DC\uB77C\uC774\uB7F0 \u2014 --yes \uC5C6\uC774\uB294 \uC0AD\uC81C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4)").option("--yes", "\uC2E4\uC81C\uB85C \uC0AD\uC81C\uD569\uB2C8\uB2E4 (\uAE30\uBCF8\uC740 \uB4DC\uB77C\uC774\uB7F0)").option("--project", "\uC774 \uD504\uB85C\uC81D\uD2B8 \uB85C\uCEEC\uB9CC \uC815\uB9AC\uD569\uB2C8\uB2E4 (\uAE30\uBCF8\uAC12)").option("--global", "\uC804\uC5ED(~/.awl)\uB9CC \uC815\uB9AC\uD569\uB2C8\uB2E4 \u2014 \uB2E4\uB978 \uD504\uB85C\uC81D\uD2B8\uC758 \uD559\uC2B5\uB3C4 \uD568\uAED8 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4").option("--all", "\uD504\uB85C\uC81D\uD2B8 \uB85C\uCEEC + \uC804\uC5ED\uC744 \uBAA8\uB450 \uC815\uB9AC\uD569\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(
187
187
  async (opts) => {
188
- const { runUninstall } = await import("./uninstall-M7Z6SO7L.js");
188
+ const { runUninstall } = await import("./uninstall-JECZJNRJ.js");
189
189
  await runUninstall({
190
190
  yes: opts.yes === true,
191
191
  project: opts.project === true,
@@ -197,22 +197,22 @@ ${renderExamplesCard(caps())}
197
197
  );
198
198
  const config = program.command("config").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC124\uC815\uC744 \uBD05\uB2C8\uB2E4 (TTY \uBA74 \uC218\uC815\uB3C4)");
199
199
  config.action(async () => {
200
- const { runConfig } = await import("./config-BZDCXBQ5.js");
200
+ const { runConfig } = await import("./config-XMM3V7MT.js");
201
201
  await runConfig();
202
202
  });
203
203
  config.command("set [key] [value]").description("\uC124\uC815 \uAC12\uC744 \uBC14\uAFC9\uB2C8\uB2E4 (\uD0A4 \uC0DD\uB7B5 \uC2DC \uBAA9\uB85D, cmd \uB294 \uC2E4\uC81C\uB85C \uC2E4\uD589\uD574 \uBD05\uB2C8\uB2E4)").option("--force", "\uAC80\uC99D\uC5D0 \uC2E4\uD328\uD574\uB3C4 \uC800\uC7A5\uD569\uB2C8\uB2E4").action(
204
204
  async (key, value, opts) => {
205
- const { runConfigSet } = await import("./config-BZDCXBQ5.js");
205
+ const { runConfigSet } = await import("./config-XMM3V7MT.js");
206
206
  await runConfigSet(key, value, { force: opts.force === true });
207
207
  }
208
208
  );
209
209
  const work = program.command("work").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4");
210
210
  work.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
211
- const { runWorkList } = await import("./work-VTHTF4AQ.js");
211
+ const { runWorkList } = await import("./work-3SONYYYB.js");
212
212
  runWorkList({ json: opts.json === true });
213
213
  });
214
214
  work.command("list").description("\uB4F1\uB85D\uB41C \uC6CC\uD06C\uC544\uC774\uD15C \uBAA9\uB85D\uACFC \uC9C4\uD589 \uC0C1\uD669\uC744 \uBD05\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
215
- const { runWorkList } = await import("./work-VTHTF4AQ.js");
215
+ const { runWorkList } = await import("./work-3SONYYYB.js");
216
216
  runWorkList({ json: opts.json === true });
217
217
  });
218
218
  work.command("new <id> [description]").description("\uC0C8 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uB9CC\uB4E4\uACE0 \uC804\uD658\uD569\uB2C8\uB2E4 (\uD604\uC7AC \uC6CC\uD06C\uC544\uC774\uD15C\uC740 \uBCF4\uAD00\uB429\uB2C8\uB2E4)").option("--worktree [branch]", "\uACA9\uB9AC\uB41C git worktree \uB97C \uB9CC\uB4E4\uC5B4 \uADF8 \uC548\uC5D0\uC11C \uC2DC\uC791\uD569\uB2C8\uB2E4").option("--skip-baseline", "\uAC80\uC99D \uBCA0\uC774\uC2A4\uB77C\uC778 \uCEA1\uCC98\uB97C \uAC74\uB108\uB701\uB2C8\uB2E4 (\uB290\uB9B0 \uD504\uB85C\uC81D\uD2B8\uC6A9)").option(
@@ -220,7 +220,7 @@ ${renderExamplesCard(caps())}
220
220
  "records(~/.awl)\uB97C \uC774 \uC6CC\uD06C\uC544\uC774\uD15C \uC804\uC6A9 AWL_HOME \uC73C\uB85C \uACA9\uB9AC\uD569\uB2C8\uB2E4 (\uBCD1\uB82C \uC138\uC158\uC6A9)"
221
221
  ).option("--experiment <json>", '\uC2E4\uD5D8 \uCF00\uC774\uC2A4 \uBA54\uD0C0 JSON (\uC608: {"model":"lite","mode":"loop"})').action(
222
222
  async (id, description, opts) => {
223
- const { runWorkNew } = await import("./work-VTHTF4AQ.js");
223
+ const { runWorkNew } = await import("./work-3SONYYYB.js");
224
224
  const parsedExp = parseExperimentOption(opts.experiment);
225
225
  if (!parsedExp.ok) {
226
226
  process.stderr.write(`
@@ -232,52 +232,52 @@ ${renderExamplesCard(caps())}
232
232
  }
233
233
  );
234
234
  work.command("switch <id>").description("\uB2E4\uB978 \uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uC804\uD658\uD569\uB2C8\uB2E4 (\uD604\uC7AC \uC6CC\uD06C\uC544\uC774\uD15C\uC740 \uBCF4\uAD00\uB429\uB2C8\uB2E4)").action(async (id) => {
235
- const { runWorkSwitch } = await import("./work-VTHTF4AQ.js");
235
+ const { runWorkSwitch } = await import("./work-3SONYYYB.js");
236
236
  await runWorkSwitch(id);
237
237
  });
238
238
  work.command("abandon <id>").description("\uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uC911\uB2E8 \uCC98\uB9AC\uD569\uB2C8\uB2E4 (\uC0AD\uC81C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4, \uAE30\uB85D\uC740 \uB0A8\uC2B5\uB2C8\uB2E4)").action(async (id) => {
239
- const { runWorkAbandon } = await import("./work-VTHTF4AQ.js");
239
+ const { runWorkAbandon } = await import("./work-3SONYYYB.js");
240
240
  runWorkAbandon(id);
241
241
  });
242
242
  work.command("done <id>").description(
243
243
  "\uC644\uB8CC\uB41C \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uC815\uB9AC\uD569\uB2C8\uB2E4 (\uC6CC\uD06C\uD2B8\uB9AC \uC81C\uAC70 + \uC0C1\uD0DC \uC2A4\uB0C5\uC0F7 \uD68C\uC218, \uAE30\uB85D\uC740 \uB0A8\uC2B5\uB2C8\uB2E4)"
244
244
  ).option("--force", "\uC815\uB9AC\uB418\uC9C0 \uC54A\uC740 \uBCC0\uACBD\uC774 \uC788\uC5B4\uB3C4 \uC6CC\uD06C\uD2B8\uB9AC\uB97C \uC81C\uAC70\uD569\uB2C8\uB2E4").action(async (id, opts) => {
245
- const { runWorkDone } = await import("./work-VTHTF4AQ.js");
245
+ const { runWorkDone } = await import("./work-3SONYYYB.js");
246
246
  await runWorkDone(id, { force: opts.force === true });
247
247
  });
248
248
  const lane = program.command("lane").description("\uACA9\uB9AC \uB808\uC778(worktree)\uC73C\uB85C \uD30C\uC774\uD504\uB77C\uC778\uC744 \uBCD1\uB82C \uC2E4\uD589\uD569\uB2C8\uB2E4 (\uB808\uC778 \uC0DD\uC131\xB7\uC870\uD68C\xB7\uC815\uB9AC)");
249
249
  lane.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
250
- const { runLaneList } = await import("./lane-7AB53N4M.js");
250
+ const { runLaneList } = await import("./lane-WINQEOEW.js");
251
251
  await runLaneList({ json: opts.json === true });
252
252
  });
253
253
  lane.command("new <name> [description]").description("\uACA9\uB9AC \uB808\uC778\uC744 \uB9CC\uB4ED\uB2C8\uB2E4 (worktree + \uC804\uC6A9 AWL_HOME + \uC2A4\uD0AC \uC7AC\uC124\uCE58 + \uAE30\uB3D9 \uC548\uB0B4)").action(async (name, description) => {
254
- const { runLaneNew } = await import("./lane-7AB53N4M.js");
254
+ const { runLaneNew } = await import("./lane-WINQEOEW.js");
255
255
  await runLaneNew(name, description);
256
256
  });
257
257
  lane.command("ls").description("\uD604\uC874 \uB808\uC778\uC744 \uC774\uB984\xB7\uACBD\uB85C\xB7\uBE0C\uB79C\uCE58\uC640 \uD568\uAED8 \uB098\uC5F4\uD569\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
258
- const { runLaneList } = await import("./lane-7AB53N4M.js");
258
+ const { runLaneList } = await import("./lane-WINQEOEW.js");
259
259
  await runLaneList({ json: opts.json === true });
260
260
  });
261
261
  lane.command("rm <name>").description("\uB808\uC778\uC758 \uC6CC\uD06C\uD2B8\uB9AC\uB97C \uD68C\uC218\uD558\uACE0 \uB514\uB809\uD1A0\uB9AC\uB97C \uC81C\uAC70\uD569\uB2C8\uB2E4").option("--force", "\uCEE4\uBC0B\uB418\uC9C0 \uC54A\uC740 \uBCC0\uACBD\uC774 \uC788\uC5B4\uB3C4 \uC81C\uAC70\uD569\uB2C8\uB2E4").action(async (name, opts) => {
262
- const { runLaneRemove } = await import("./lane-7AB53N4M.js");
262
+ const { runLaneRemove } = await import("./lane-WINQEOEW.js");
263
263
  await runLaneRemove(name, { force: opts.force === true });
264
264
  });
265
265
  program.command("records").description("\uC313\uC778 \uAE30\uB85D\uC744 \uBD05\uB2C8\uB2E4").option("--type <type>", "\uD0C0\uC785\uC73C\uB85C \uAC70\uB985\uB2C8\uB2E4 (attempt, blocked \uB4F1)").option("--workitem <id>", "\uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uAC70\uB985\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
266
- const { runRecords } = await import("./record-CJONXDR2.js");
266
+ const { runRecords } = await import("./record-CKR6G6UZ.js");
267
267
  runRecords({ type: opts.type, workitem: opts.workitem, json: opts.json === true });
268
268
  });
269
269
  const rules = program.command("rules").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC801\uC6A9\uB418\uB294 \uADDC\uCE59\uC744 \uBD05\uB2C8\uB2E4").enablePositionalOptions();
270
270
  rules.option("--scope <scope>", "\uBC94\uC704\uB85C \uAC70\uB985\uB2C8\uB2E4 (implement \uB4F1)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
271
- const { runRules } = await import("./rules-U7UCVU5O.js");
271
+ const { runRules } = await import("./rules-E52GU3GA.js");
272
272
  runRules({ scope: opts.scope, json: opts.json === true });
273
273
  });
274
274
  rules.command("edit").description("$EDITOR \uB85C \uADDC\uCE59 \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4").action(async () => {
275
- const { runRules } = await import("./rules-U7UCVU5O.js");
275
+ const { runRules } = await import("./rules-E52GU3GA.js");
276
276
  runRules({ edit: true });
277
277
  });
278
278
  rules.command("promote <gotchaId>").description("\uAD50\uD6C8\uC744 \uADDC\uCE59\uC73C\uB85C \uC2B9\uACA9\uD569\uB2C8\uB2E4 (applies/counter \uD544\uC218, \uC0AC\uB78C\uC774 \uC2E4\uD589)").option("--applies <cond>", "\uC801\uC6A9 \uC870\uAC74 (\uD544\uC218)").option("--counter <cond>", "\uBC18\uC99D \uC870\uAC74 (\uD544\uC218)").option("--rule-scope <scope>", "\uB85C\uB4DC \uB2E8\uACC4 (audit/criteria/implement/commit/review)").action(
279
279
  async (gotchaId, opts) => {
280
- const { runRulesPromote } = await import("./rules-U7UCVU5O.js");
280
+ const { runRulesPromote } = await import("./rules-E52GU3GA.js");
281
281
  runRulesPromote(gotchaId, {
282
282
  applies: opts.applies,
283
283
  counter: opts.counter,
@@ -286,16 +286,16 @@ ${renderExamplesCard(caps())}
286
286
  }
287
287
  );
288
288
  program.command("gotchas").description("\uC544\uC9C1 \uADDC\uCE59\uC774 \uB418\uC9C0 \uC54A\uC740 \uD568\uC815\uC744 \uBD05\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
289
- const { runGotchas } = await import("./gotchas-642PZ5AQ.js");
289
+ const { runGotchas } = await import("./gotchas-QJBUVYJV.js");
290
290
  runGotchas({ json: opts.json === true });
291
291
  });
292
292
  program.command("metrics").description("\uC6CC\uD06C\uC544\uC774\uD15C(\uC138\uB300)\uBCC4 \uD504\uB85D\uC2DC \uC9C0\uD45C \uCD94\uC138\uB97C \uBD05\uB2C8\uB2E4 (\uD1A0\uD070 \uC9C1\uC811 \uCE21\uC815 \uC544\uB2D8)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--compare", "\uC2E4\uD5D8 \uCF00\uC774\uC2A4(experiment model/mode/taskType)\uBCC4\uB85C \uC9C0\uD45C\uB97C \uBE44\uAD50\uD569\uB2C8\uB2E4").action(async (opts) => {
293
- const { runMetrics } = await import("./metrics-4OT2R3GT.js");
293
+ const { runMetrics } = await import("./metrics-BC7ZUCGU.js");
294
294
  runMetrics({ json: opts.json === true, compare: opts.compare === true });
295
295
  });
296
296
  program.command("loop-summary").description("\uB8E8\uD504/\uD30C\uC774\uD504\uB77C\uC778 \uC644\uB8CC\uB97C 4\uB80C\uC988(\uAC1C\uC785\xB7\uD488\uC9C8\xB7\uD6A8\uC728\xB7\uC0B0\uCD9C)\uB85C \uC694\uC57D\uD569\uB2C8\uB2E4").option("--workitem <id>", "\uB300\uC0C1 \uC6CC\uD06C\uC544\uC774\uD15C (\uAE30\uBCF8: \uD604\uC7AC)").option("--workitems <ids>", "\uBC30\uCE58 \uBAA8\uB4DC: \uCF64\uB9C8\uB85C \uAD6C\uBD84\uD55C \uC6CC\uD06C\uC544\uC774\uD15C \uBAA9\uB85D").option("--since <iso>", "\uBC30\uCE58 \uBAA8\uB4DC: \uC774 \uC2DC\uAC01(ISO) \uC774\uD6C4 \uC644\uB8CC\uB41C \uC6CC\uD06C\uC544\uC774\uD15C \uC804\uBD80").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(
297
297
  async (opts) => {
298
- const { runLoopSummary } = await import("./loop-summary-22VD3BDL.js");
298
+ const { runLoopSummary } = await import("./loop-summary-OSYJB57M.js");
299
299
  runLoopSummary({
300
300
  workitem: opts.workitem,
301
301
  workitems: parseWorkitemsOption(opts.workitems),
@@ -305,7 +305,7 @@ ${renderExamplesCard(caps())}
305
305
  }
306
306
  );
307
307
  program.command("feedback").description("awl \uB3C4\uAD6C \uC790\uCCB4 \uD53C\uB4DC\uBC31\uC744 area \uBCC4\uB85C \uBB36\uC5B4 \uBD05\uB2C8\uB2E4 (\uD574\uBC95\uC740 \uC81C\uC2DC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--area <area>", "area \uB85C \uAC70\uB985\uB2C8\uB2E4 (commit, gate, verify \uB4F1)").option("--severity <sev>", "severity \uB85C \uAC70\uB985\uB2C8\uB2E4 (high/medium/low)").option("--since <date>", "\uC774 ISO \uB0A0\uC9DC \uC774\uD6C4 \uC218\uC9D1\uBD84\uB9CC \uBD05\uB2C8\uB2E4 (\uC608: 2026-07-01)").action(async (opts) => {
308
- const { runFeedback } = await import("./feedback-HVNBFJBW.js");
308
+ const { runFeedback } = await import("./feedback-4FT67LSI.js");
309
309
  runFeedback({
310
310
  json: opts.json === true,
311
311
  area: opts.area,
@@ -314,12 +314,12 @@ ${renderExamplesCard(caps())}
314
314
  });
315
315
  });
316
316
  program.command("changelog").description("Gate 2 \uC2B9\uC778 \uB4A4 CHANGELOG.md\uC5D0 \uC62E\uAE38 \uCD08\uC548\uC744 \uB9CC\uB4ED\uB2C8\uB2E4 (\uD30C\uC77C\uC740 \uC4F0\uC9C0 \uC54A\uC74C)").option("--workitem <id>", "\uB300\uC0C1 \uC6CC\uD06C\uC544\uC774\uD15C (\uAE30\uBCF8: \uD604\uC7AC)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
317
- const { runChangelogDraft } = await import("./changelog-ZCPSFDX3.js");
317
+ const { runChangelogDraft } = await import("./changelog-J4LP6ZJI.js");
318
318
  runChangelogDraft({ workitem: opts.workitem, json: opts.json === true });
319
319
  });
320
320
  program.command("commit <criterion>").description("\uC644\uB8CC \uC870\uAC74 \uC791\uC5C5\uC744 \uACA9\uB9AC \uCEE4\uBC0B\uD569\uB2C8\uB2E4 (\uB0B4 \uBCC0\uACBD\uB9CC)").option("--start", "\uBCA0\uC774\uC2A4\uB77C\uC778\uC744 \uC7A1\uC2B5\uB2C8\uB2E4 (\uC791\uC5C5 \uC2DC\uC791 \uC2DC)").option("-m, --message <msg>", "\uCEE4\uBC0B \uBA54\uC2DC\uC9C0").option("--base <ref>", "\uBCA0\uC774\uC2A4 \uB4DC\uB9AC\uD504\uD2B8\uB97C \uD655\uC778\uD560 \uAE30\uC900 \uBE0C\uB79C\uCE58").option("--force", "\uBCF4\uD638 \uD30C\uC77C \uBCC0\uACBD \uAC80\uC0AC\uB97C \uC0AC\uB78C\uC774 \uD655\uC778\uD558\uACE0 \uC6B0\uD68C\uD569\uB2C8\uB2E4").action(
321
321
  async (criterion, opts) => {
322
- const { runCommit } = await import("./commit-4XEKMCJF.js");
322
+ const { runCommit } = await import("./commit-2WWILQRB.js");
323
323
  await runCommit(criterion, {
324
324
  start: opts.start,
325
325
  message: opts.message,
@@ -329,12 +329,12 @@ ${renderExamplesCard(caps())}
329
329
  }
330
330
  );
331
331
  program.command("review <range>").description("\uB9AC\uBDF0\uC5B4\uC5D0\uAC8C \uB118\uAE38 \uC790\uB8CC\uB97C \uC870\uB9BD\uD569\uB2C8\uB2E4 (provenance \uD3EC\uD568)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--base <ref>", "diff \uAE30\uC900 (\uAE30\uBCF8\uC740 \uC644\uB8CC \uC870\uAC74 baseline)").action(async (range, opts) => {
332
- const { runReview } = await import("./review-L52UGCIJ.js");
332
+ const { runReview } = await import("./review-UJH6C7F4.js");
333
333
  await runReview(range, { json: opts.json === true, base: opts.base });
334
334
  });
335
335
  program.command("record <type>", { hidden: true }).description("\uAD6C\uC870\uD654\uB41C \uAE30\uB85D\uC744 \uB0A8\uAE41\uB2C8\uB2E4").option("--json <data>", "\uAE30\uB85D\uD560 \uB370\uC774\uD130 (JSON \uBB38\uC790\uC5F4)").option("--file <path>", "\uB370\uC774\uD130 \uD30C\uC77C \uACBD\uB85C (\uD070 \uB370\uC774\uD130\uC6A9)").option("--diff", "git diff \uB97C \uCEA1\uCC98\uD574 \uCCA8\uBD80\uD569\uB2C8\uB2E4 (blocked)").option("--workitem <id>", "\uC774 \uAE30\uB85D\uB9CC \uB2E4\uB978 \uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uB0A8\uAE41\uB2C8\uB2E4(\uAE30\uBCF8\uC740 \uD604\uC7AC \uC6CC\uD06C\uC544\uC774\uD15C)").action(
336
336
  async (type, opts) => {
337
- const { runRecord } = await import("./record-CJONXDR2.js");
337
+ const { runRecord } = await import("./record-CKR6G6UZ.js");
338
338
  await runRecord(type, {
339
339
  json: opts.json,
340
340
  file: opts.file,
@@ -348,7 +348,7 @@ ${renderExamplesCard(caps())}
348
348
  "\uBCC0\uACBD\uB41C \uD30C\uC77C\uC5D0 \uAD00\uB828\uB41C \uD14C\uC2A4\uD2B8\uB9CC \uC2E4\uD589\uD569\uB2C8\uB2E4(relatedCmd \uD544\uC694, \uC5C6\uC73C\uBA74 \uC804\uCCB4 \uD14C\uC2A4\uD2B8\uB85C \uD3F4\uBC31)"
349
349
  ).action(
350
350
  async (opts) => {
351
- const { runVerify } = await import("./verify-PYZXB67X.js");
351
+ const { runVerify } = await import("./verify-KKQ2OQMO.js");
352
352
  await runVerify({
353
353
  json: opts.json === true,
354
354
  bail: opts.bail === true,
@@ -359,17 +359,17 @@ ${renderExamplesCard(caps())}
359
359
  }
360
360
  );
361
361
  program.command("hold-recheck", { hidden: true }).description(".tasks/plan \uC758 \uC758\uC874\uD615 hold \uB97C \uC7AC\uC810\uAC80\uD574 \uCC29\uC9C0+\uD569\uACA9\uD55C \uC758\uC874\uC774\uBA74 \uC790\uB3D9 un-hold \uD569\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
362
- const { runHoldRecheck } = await import("./hold-recheck-N3UCEIXL.js");
362
+ const { runHoldRecheck } = await import("./hold-recheck-L3DAS3MV.js");
363
363
  await runHoldRecheck({ json: opts.json === true });
364
364
  });
365
365
  const state = program.command("state", { hidden: true }).description("\uB8E8\uD504 \uC0C1\uD0DC\uB97C \uC77D\uACE0 \uC501\uB2C8\uB2E4");
366
366
  state.command("get").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
367
- const { runStateGet } = await import("./state-3G4XAB6P.js");
367
+ const { runStateGet } = await import("./state-X7DLLBOD.js");
368
368
  runStateGet({ json: opts.json === true });
369
369
  });
370
370
  state.command("set").requiredOption("--json <patch>", "\uBD80\uBD84 \uAC31\uC2E0 (JSON \uBB38\uC790\uC5F4)").action(async (opts) => {
371
- const { runStateSet } = await import("./state-3G4XAB6P.js");
372
- const { hasApprovedGate1 } = await import("./record-CJONXDR2.js");
371
+ const { runStateSet } = await import("./state-X7DLLBOD.js");
372
+ const { hasApprovedGate1 } = await import("./record-CKR6G6UZ.js");
373
373
  runStateSet(opts.json, {
374
374
  // phase:'loop' 로의 전이는 이 워크아이템에 "승인된" 게이트1 레코드가 있을
375
375
  // 때만 허용한다(0.6.3, 적대검증 발견). 예전엔 gate:1 레코드의 존재만 봐서
@@ -380,7 +380,7 @@ ${renderExamplesCard(caps())}
380
380
  });
381
381
  program.command("evolve", { hidden: true }).description("\uAE30\uB85D\uC744 \uBAA8\uC544 \uAD50\uD6C8\uC73C\uB85C, \uAD50\uD6C8\uC744 \uADDC\uCE59\uC73C\uB85C \uC787\uC2B5\uB2C8\uB2E4").option("--collect", "\uC774\uBC88 \uC6CC\uD06C\uC544\uC774\uD15C\uC758 \uAE30\uB85D\uC744 \uBAA8\uC544 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--record", "\uAD50\uD6C8\uC744 gotchas \uC5D0 \uAE30\uB85D\uD569\uB2C8\uB2E4 (--json \uC73C\uB85C \uB370\uC774\uD130)").option("--json [data]", "collect: \uCD9C\uB825 \uD50C\uB798\uADF8 / record: \uAD50\uD6C8 \uB370\uC774\uD130(JSON \uBB38\uC790\uC5F4)").option("--workitem <wi>", "\uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uAC70\uB985\uB2C8\uB2E4 (--collect)").option("--from <YYYY-MM>", "\uAE30\uAC04 \uC2DC\uC791 \uC6D4\uB85C \uC77D\uAE30\uB97C \uC881\uD799\uB2C8\uB2E4 (--collect, \uC5C6\uC73C\uBA74 \uC804\uB7C9)").option("--to <YYYY-MM>", "\uAE30\uAC04 \uB05D \uC6D4 (--collect)").action(
382
382
  async (opts) => {
383
- const m = await import("./evolve-ZBSIUZXP.js");
383
+ const m = await import("./evolve-EQ3N6F6M.js");
384
384
  if (opts.collect && opts.record) {
385
385
  process.stderr.write("\n --collect \uC640 --record \uB294 \uB3D9\uC2DC\uC5D0 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n");
386
386
  process.exit(1);
@@ -399,7 +399,7 @@ ${renderExamplesCard(caps())}
399
399
  }
400
400
  );
401
401
  program.command("defer-summary", { hidden: true }).description("\uBCF4\uB958\uD55C \uC911\uC694 \uD56D\uBAA9(\uC0AC\uB78C \uCD5C\uC885 \uD655\uC778 \uD56D\uBAA9)\uC744 \uCD5C\uC885 \uC694\uC57D\uD569\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--workitem <wi>", "\uC6CC\uD06C\uC544\uC774\uD15C \uC9C0\uC815(\uC5C6\uC73C\uBA74 \uD604\uC7AC)").action(async (opts) => {
402
- const m = await import("./record-CJONXDR2.js");
402
+ const m = await import("./record-CKR6G6UZ.js");
403
403
  m.runDeferSummary({ json: opts.json === true, workitem: opts.workitem });
404
404
  });
405
405
  program.action((_opts, command) => {
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  protectedFilesMessage
3
- } from "./chunk-ZYXKMNHC.js";
3
+ } from "./chunk-KJG2ULS4.js";
4
4
  import {
5
5
  hasApprovedGate1
6
- } from "./chunk-6MG6CQBD.js";
6
+ } from "./chunk-JXFQHNHV.js";
7
7
  import {
8
8
  getCriterion,
9
9
  loadState,
10
10
  setCriterion,
11
11
  writeState
12
- } from "./chunk-SBX6LOQE.js";
12
+ } from "./chunk-UB4RLTLJ.js";
13
13
  import {
14
14
  loadConfig,
15
15
  resolveProjectRoot,
16
16
  run
17
- } from "./chunk-5TFILHLH.js";
18
- import "./chunk-ELQ4VANN.js";
17
+ } from "./chunk-CLWQEWEG.js";
18
+ import "./chunk-PIOV3MQT.js";
19
19
  import {
20
20
  caps,
21
21
  feedback,
22
22
  makeColors,
23
23
  makeTokens,
24
24
  signal
25
- } from "./chunk-OTN2QONN.js";
25
+ } from "./chunk-M4H4VNN6.js";
26
26
 
27
27
  // src/commands/commit.ts
28
28
  import fs from "fs";
@@ -13,9 +13,9 @@ import {
13
13
  runConfig,
14
14
  runConfigSet,
15
15
  validateConfig
16
- } from "./chunk-5TFILHLH.js";
17
- import "./chunk-ELQ4VANN.js";
18
- import "./chunk-OTN2QONN.js";
16
+ } from "./chunk-CLWQEWEG.js";
17
+ import "./chunk-PIOV3MQT.js";
18
+ import "./chunk-M4H4VNN6.js";
19
19
  export {
20
20
  KNOWN_LANGUAGES,
21
21
  KNOWN_NAMING_CONVENTIONS,
@@ -8,14 +8,14 @@ import {
8
8
  gitHasCommits,
9
9
  renderText,
10
10
  runDoctor
11
- } from "./chunk-7KIVLJG3.js";
12
- import "./chunk-57EWVAZO.js";
13
- import "./chunk-JQN653ZS.js";
14
- import "./chunk-6MG6CQBD.js";
15
- import "./chunk-SBX6LOQE.js";
16
- import "./chunk-5TFILHLH.js";
17
- import "./chunk-ELQ4VANN.js";
18
- import "./chunk-OTN2QONN.js";
11
+ } from "./chunk-J7EKKHVW.js";
12
+ import "./chunk-DGPZEEFJ.js";
13
+ import "./chunk-MCNUMMKK.js";
14
+ import "./chunk-JXFQHNHV.js";
15
+ import "./chunk-UB4RLTLJ.js";
16
+ import "./chunk-CLWQEWEG.js";
17
+ import "./chunk-PIOV3MQT.js";
18
+ import "./chunk-M4H4VNN6.js";
19
19
  export {
20
20
  collectChecks,
21
21
  computeFileSizeOutliers,
@@ -13,13 +13,13 @@ import {
13
13
  runEvolveCollect,
14
14
  runEvolveRecord,
15
15
  writeGeneration
16
- } from "./chunk-QLUBNGHR.js";
17
- import "./chunk-WRNCUSNU.js";
18
- import "./chunk-6MG6CQBD.js";
19
- import "./chunk-SBX6LOQE.js";
20
- import "./chunk-5TFILHLH.js";
21
- import "./chunk-ELQ4VANN.js";
22
- import "./chunk-OTN2QONN.js";
16
+ } from "./chunk-DR7OZZ4N.js";
17
+ import "./chunk-OSKS2YRU.js";
18
+ import "./chunk-JXFQHNHV.js";
19
+ import "./chunk-UB4RLTLJ.js";
20
+ import "./chunk-CLWQEWEG.js";
21
+ import "./chunk-PIOV3MQT.js";
22
+ import "./chunk-M4H4VNN6.js";
23
23
  export {
24
24
  GOTCHA_RELATION_TYPES,
25
25
  acquireLock,
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  readRecords
3
- } from "./chunk-6MG6CQBD.js";
4
- import "./chunk-SBX6LOQE.js";
5
- import "./chunk-5TFILHLH.js";
6
- import "./chunk-ELQ4VANN.js";
3
+ } from "./chunk-JXFQHNHV.js";
4
+ import "./chunk-UB4RLTLJ.js";
5
+ import "./chunk-CLWQEWEG.js";
6
+ import "./chunk-PIOV3MQT.js";
7
7
  import {
8
8
  caps,
9
- card,
10
9
  makeColors,
10
+ sectionBox,
11
11
  signal
12
- } from "./chunk-OTN2QONN.js";
12
+ } from "./chunk-M4H4VNN6.js";
13
13
 
14
14
  // src/commands/feedback.ts
15
15
  var SEVERITY_RANK = { high: 0, medium: 1, low: 2 };
@@ -64,7 +64,7 @@ function renderFeedback(report, c) {
64
64
  const color = makeColors(c.color);
65
65
  const entries = Object.entries(report.areas).sort(([, a], [, b]) => b.count - a.count);
66
66
  if (entries.length === 0) {
67
- return card(
67
+ return sectionBox(
68
68
  "awl \uC790\uCCB4 \uD53C\uB4DC\uBC31",
69
69
  [
70
70
  "\uC544\uC9C1 \uC218\uC9D1\uB41C awl-feedback \uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
@@ -96,7 +96,7 @@ function renderFeedback(report, c) {
96
96
  )
97
97
  );
98
98
  }
99
- return card(`awl \uC790\uCCB4 \uD53C\uB4DC\uBC31 \xB7 \uC6CC\uD06C\uC544\uC774\uD15C ${report.collectedFrom}\uAC1C\uC5D0\uC11C \uC218\uC9D1`, out, c);
99
+ return sectionBox(`awl \uC790\uCCB4 \uD53C\uB4DC\uBC31 \xB7 \uC6CC\uD06C\uC544\uC774\uD15C ${report.collectedFrom}\uAC1C\uC5D0\uC11C \uC218\uC9D1`, out, c);
100
100
  }
101
101
  function runFeedback(opts) {
102
102
  if (isInvalidSince(opts.since)) {