agent-work-loop 0.6.44 → 0.6.46

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 (43) hide show
  1. package/README.md +3 -3
  2. package/dist/{brief-I2EQVY3F.js → brief-SGMFXOY2.js} +3 -3
  3. package/dist/{changelog-UBIZQHQO.js → changelog-VNJ4EQ74.js} +3 -3
  4. package/dist/{chunk-2FQ5HCDI.js → chunk-AGFQC2UO.js} +7 -7
  5. package/dist/{chunk-L4VWHK4D.js → chunk-DA27NBCS.js} +5 -5
  6. package/dist/{chunk-236TTTK3.js → chunk-EHJYX57P.js} +1 -1
  7. package/dist/{chunk-4BUPV5VU.js → chunk-FK3Q7UY2.js} +2 -2
  8. package/dist/{chunk-GYXIREXZ.js → chunk-IVEV5L7P.js} +1 -1
  9. package/dist/{chunk-SNWJWX5K.js → chunk-MLTY3EE6.js} +60 -1
  10. package/dist/{chunk-3LPCP55B.js → chunk-PUINOFOR.js} +3 -3
  11. package/dist/{chunk-LBZNBCAY.js → chunk-SSSOO2GH.js} +4 -4
  12. package/dist/{chunk-WOH6WML7.js → chunk-VE2GVNNS.js} +1 -1
  13. package/dist/{chunk-K2JV27JR.js → chunk-VVZOIFL4.js} +1 -1
  14. package/dist/{chunk-O7PUNJVM.js → chunk-WWZIKKHP.js} +4 -4
  15. package/dist/{chunk-3N3QH4PK.js → chunk-XWMS6Z5E.js} +2 -2
  16. package/dist/{chunk-DNDODLP2.js → chunk-ZEX5ZF6C.js} +1 -1
  17. package/dist/{chunk-SKJZSRVR.js → chunk-ZRKOZQKP.js} +4 -4
  18. package/dist/cli.js +123 -46
  19. package/dist/{commit-I5ULIUHW.js → commit-GPQATPEA.js} +4 -4
  20. package/dist/{config-6VD46H24.js → config-QTEKLFZP.js} +1 -1
  21. package/dist/{doctor-QQLQOP3Y.js → doctor-JNUZJC6Z.js} +6 -6
  22. package/dist/{evolve-MXGX33GB.js → evolve-N3S32P5I.js} +5 -5
  23. package/dist/{feedback-K3P6667T.js → feedback-log-UCNJ2GVT.js} +9 -9
  24. package/dist/{gotchas-HF5Q2MOA.js → gotchas-PDG2ZZFQ.js} +5 -5
  25. package/dist/{hold-recheck-CBSGGRBM.js → hold-recheck-UNAILFN5.js} +4 -4
  26. package/dist/{lane-BJ2NJYAH.js → lane-ETMPPVXP.js} +13 -13
  27. package/dist/{loop-summary-RZQBTKVY.js → loop-summary-CODZMRUY.js} +4 -4
  28. package/dist/{metrics-6SZQAG3C.js → metrics-ZR7BPATB.js} +2 -2
  29. package/dist/{record-UU4WPT2Z.js → record-TSB22DIO.js} +3 -3
  30. package/dist/{remove-UOAMHEUC.js → remove-VJ7VBKTZ.js} +13 -13
  31. package/dist/{review-DXSGXZLX.js → review-CGALGS5X.js} +11 -11
  32. package/dist/{rules-QDAC6BUX.js → rules-QLUXNSCN.js} +6 -6
  33. package/dist/{state-DZC7JVEK.js → state-6IIH7SW2.js} +2 -2
  34. package/dist/{status-ZZEF4NYL.js → status-2LPWVCHT.js} +4 -4
  35. package/dist/{verify-LOTTWOHB.js → verify-7NQ3DOFY.js} +8 -8
  36. package/dist/{version-check-SILVRBMJ.js → version-check-5BX3SO7G.js} +3 -3
  37. package/dist/{work-RCV5H7TL.js → work-3YHL3P6U.js} +12 -12
  38. package/engine/skills/claude/awl-loop/reference.md +1 -1
  39. package/engine/skills/claude/awl-pipeline/SKILL.md +1 -1
  40. package/engine/templates/block-publish.mjs +20 -2
  41. package/engine/templates/pre-push.sample +8 -2
  42. package/engine/version.json +1 -1
  43. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  computeUpdateAvailable,
4
4
  readCachedLatestVersion,
5
5
  version
6
- } from "./chunk-DNDODLP2.js";
6
+ } from "./chunk-ZEX5ZF6C.js";
7
7
  import {
8
8
  caps,
9
9
  engineDir,
@@ -26,19 +26,25 @@ var BANNER = `
26
26
  \uD310\uB2E8\uC740 Claude Code\uB098 Codex\uAC00 \uD558\uACE0,
27
27
  awl\uC740 \uD30C\uC77C\uACFC \uC0C1\uD0DC\uB9CC \uAD00\uB9AC\uD569\uB2C8\uB2E4.`;
28
28
  var GETTING_STARTED = [
29
- { cmd: "awl init", desc: "\uC774 \uD504\uB85C\uC81D\uD2B8\uB97C \uC124\uC815\uD569\uB2C8\uB2E4" },
30
- { cmd: "awl status", desc: "\uC9C0\uAE08 \uC5B4\uB514\uAE4C\uC9C0 \uC654\uB294\uC9C0 \uBD05\uB2C8\uB2E4" },
31
- { cmd: "awl doctor", desc: "\uC124\uCE58\uC640 \uD658\uACBD\uC744 \uC810\uAC80\uD569\uB2C8\uB2E4" }
29
+ { label: "1", cmd: "awl init", desc: "\uC791\uC5C5 \uC911\uC778 \uD504\uB85C\uC81D\uD2B8\uC5D0 awl \uD658\uACBD\uC744 \uC124\uC815\uD569\uB2C8\uB2E4." },
30
+ { label: "2-1", cmd: "/awl-loop <\uBAA9\uD45C>", desc: "\uBAA9\uD45C\uB97C \uC644\uC218\uD560 \uB54C\uAE4C\uC9C0 \uB2E8\uC77C \uB8E8\uD504\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4." },
31
+ {
32
+ label: "2-2",
33
+ cmd: "/awl-pipeline <lane\uBA85> <mode>",
34
+ desc: "\uB808\uC778 \uB2E8\uC704\uB85C exec\xB7review \uC138\uC158\uC744 \uBB34\uC778 \uC2E4\uD589\uD569\uB2C8\uB2E4."
35
+ }
32
36
  ];
33
37
  function padVisible(s, width) {
34
38
  return s + " ".repeat(Math.max(0, width - visibleWidth(s)));
35
39
  }
36
40
  function renderGettingStartedCard(c) {
37
41
  const t = makeTokens(c);
42
+ const prefixWidth = Math.max(...GETTING_STARTED.map((g) => `${g.label}.`.length));
38
43
  const cmdWidth = Math.max(...GETTING_STARTED.map((g) => visibleWidth(g.cmd)));
39
44
  const lines = GETTING_STARTED.map(
40
- (g, i) => `${i + 1}. ${t.accent(padVisible(g.cmd, cmdWidth))} ${g.desc}`
45
+ (g) => `${`${g.label}.`.padEnd(prefixWidth)} ${t.accent(padVisible(g.cmd, cmdWidth))} ${g.desc}`
41
46
  );
47
+ lines.push(t.muted("*2-1 \uD639\uC740 2-2\uB97C \uC2E4\uD589\uD558\uBA74 \uBC14\uB85C \uC2DC\uC791\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."));
42
48
  return sectionBox("\uC2DC\uC791\uD558\uAE30", lines, c);
43
49
  }
44
50
  function renderExamplesCard(c) {
@@ -109,7 +115,7 @@ function renderExamplesCard(c) {
109
115
  examples: [
110
116
  { cmd: "awl brief --today", note: "\uC624\uB298 \uD558\uB8E8 \uC694\uC57D" },
111
117
  { cmd: "awl metrics --compare", note: "\uC138\uB300 \uAC04 \uBE44\uAD50" },
112
- { cmd: "awl feedback --severity high", note: "awl \uC790\uCCB4\uC5D0 \uB300\uD55C \uD53C\uB4DC\uBC31, \uC2EC\uAC01\uB3C4 \uD544\uD130" },
118
+ { cmd: "awl feedback-log --severity high", note: "awl \uC790\uCCB4\uC5D0 \uB300\uD55C \uD53C\uB4DC\uBC31, \uC2EC\uAC01\uB3C4 \uD544\uD130" },
113
119
  { cmd: "awl changelog --workitem WI-01", note: "\uADF8 \uC6CC\uD06C\uC544\uC774\uD15C\uC758 \uBCC0\uACBD \uC774\uB825" }
114
120
  ]
115
121
  }
@@ -127,6 +133,65 @@ function renderExamplesCard(c) {
127
133
  });
128
134
  return sectionBox("\uC608\uC2DC", lines, c);
129
135
  }
136
+ function renderSkillsCard(c) {
137
+ const t = makeTokens(c);
138
+ const lines = [
139
+ t.muted("\uBC18\uB4DC\uC2DC Claude Code \uAC19\uC740 LLM \uC548\uC5D0\uC11C \uC2E4\uD589\uD558\uC138\uC694 \u2014 awl \uD63C\uC790\uC11C\uB294 \uD310\uB2E8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."),
140
+ "",
141
+ t.muted("/awl-loop <\uBAA9\uD45C>"),
142
+ " \uBAA9\uD45C\uB97C \uC644\uB8CC \uC870\uAC74\uC73C\uB85C \uBC88\uC5ED\uD558\uACE0, \uAC8C\uC774\uD2B8 \uC2B9\uC778 \uD6C4 \uD55C \uC138\uC158\uC774 \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0 \uC9C1\uC811",
143
+ " \uC790\uC728 \uB8E8\uD504\uB85C \uAD6C\uD604\uD569\uB2C8\uB2E4. \uC6CC\uD06C\uC544\uC774\uD15C \uD558\uB098\uB97C \uD55C \uC138\uC158\uC774 \uAD00\uD1B5\uD569\uB2C8\uB2E4.",
144
+ "",
145
+ t.muted("/awl-pipeline <lane\uBA85> <mode>"),
146
+ " \uB808\uC778(lane) \uB2E8\uC704\uB85C \uBB34\uC778 \uD30C\uC774\uD504\uB77C\uC778\uC744 \uB3CC\uB9BD\uB2C8\uB2E4. \uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130 \uC138\uC158\uC740 \uBAA9\uD45C\uB97C",
147
+ " \uC77C\uAC10\uC73C\uB85C \uC62E\uACA8 \uB808\uC778 \uD050\uC5D0 \uB123\uAE30\uB9CC \uD558\uACE0, exec\xB7review\uB294 \uAC01\uAC01 \uBCC4\uB3C4 \uBC31\uADF8\uB77C\uC6B4\uB4DC",
148
+ " \uC138\uC158\uC73C\uB85C \uC2A4\uD3F0\uB3FC \uADF8 \uB808\uC778 \uC548\uC5D0\uC11C \uAD6C\uD604\xB7\uAC80\uC99D\uC744 \uC9C4\uD589\uD569\uB2C8\uB2E4.",
149
+ "",
150
+ t.muted("\uB808\uC778(lane)\uC774\uB780"),
151
+ " .awl-worktrees/<lane\uBA85> \uACA9\uB9AC \uC6CC\uD06C\uD2B8\uB9AC \uD558\uB098\uC5D0 \uB300\uC751\uD558\uB294 \uC791\uC5C5 \uB2E8\uC704\uC785\uB2C8\uB2E4.",
152
+ " \uB808\uC778\uBA85\uC744 \uC0DD\uB7B5\uD558\uBA74 unknown-lane-<N>\uC774 \uC790\uB3D9 \uC0DD\uC131\uB3FC cwd\uC640 \uC11E\uC774\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
153
+ " (\uB2E8, cwd\uAC00 \uC774\uBBF8 \uB2E4\uB978 \uB808\uC778 \uC6CC\uD06C\uD2B8\uB9AC \uC548\uC774\uBA74 \uADF8 \uB808\uC778\uC744 \uADF8\uB300\uB85C \uC501\uB2C8\uB2E4).",
154
+ "",
155
+ t.muted("\uD30C\uC774\uD504\uB77C\uC778 \uAD6C\uC870 (\uAC04\uB7B5)"),
156
+ " plan(\uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130) \u2192 exec\xB7review \uC2A4\uD3F0(\uB808\uC778\uBCC4) \u2192 \uC218\uC9D1\xB7\uAC8C\uC774\uD2B8 \u2192 \uC0C1\uD0DC \uD45C\uC2DC.",
157
+ " exec\xB7review\uAC00 \uD544\uC694\uC2DC \uC2A4\uD3F0\uD558\uB294 \uC870\uC0AC\xB7\uAC80\uC99D\uC6A9 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB294 \uB354 \uC7AC\uC704\uC784\uD558\uC9C0",
158
+ " \uC54A\uACE0, \uC2A4\uD3F0\uB41C exec\xB7review \uC790\uC2E0\uB3C4 \uC2A4\uC2A4\uB85C \uC7AC\uAC1C\uD558\uC9C0 \uBABB\uD574 \uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130\uAC00",
159
+ " \uC720\uD734 \uC2E0\uD638\uB97C \uBC1B\uC744 \uB54C\uB9C8\uB2E4 \uB2E4\uC2DC \uAE68\uC6C1\uB2C8\uB2E4.",
160
+ "",
161
+ t.muted("<mode> \u2014 \uAC8C\uC774\uD2B8 \uBC00\uB3C4 (\uB192\uC744\uC218\uB85D \uC0AC\uB78C \uAC1C\uC785\uC774 \uB9CE\uC2B5\uB2C8\uB2E4, \uAE30\uBCF8\uC740 gate-high)")
162
+ ];
163
+ const modes = [
164
+ { flag: "--gh, --gate-high", desc: "(\uAE30\uBCF8\uAC12) \uAC8C\uC774\uD2B8\uB9C8\uB2E4 \uC0AC\uB78C\uC5D0\uAC8C \uC2B9\uC778\uBC1B\uC2B5\uB2C8\uB2E4 \u2014 \uAC1C\uC785 \uCD5C\uB300" },
165
+ {
166
+ flag: "--gm, --gate-medium",
167
+ desc: "\uAC8C\uC774\uD2B8\uB97C \uC790\uB3D9 \uC2B9\uC778\uD558\uB418 \uC2EC\uAC01 \uD56D\uBAA9\uB9CC \uBAA8\uC544 \uBCF4\uACE0\uD569\uB2C8\uB2E4 \u2014 \uAC1C\uC785 \uC911\uAC04"
168
+ },
169
+ {
170
+ flag: "--gl, --gate-low",
171
+ desc: "\uAC8C\uC774\uD2B8\uB97C \uC804\uBD80 \uC790\uB3D9 \uC2B9\uC778\uD558\uACE0 \uB05D\uAE4C\uC9C0 \uC790\uC728\uB85C \uC9C4\uD589\uD569\uB2C8\uB2E4 \u2014 \uAC1C\uC785 \uCD5C\uC18C"
172
+ }
173
+ ];
174
+ const flagWidth = Math.max(...modes.map((m) => visibleWidth(m.flag)));
175
+ for (const m of modes) {
176
+ lines.push(` ${t.accent(padVisible(m.flag, flagWidth))} ${m.desc}`);
177
+ }
178
+ return sectionBox("\uC2A4\uD0AC", lines, c);
179
+ }
180
+ function renderSkillsHelpFooter(c) {
181
+ const t = makeTokens(c);
182
+ const color = makeColors(c.color);
183
+ const lines = [
184
+ t.muted("\uBC18\uB4DC\uC2DC Claude Code \uAC19\uC740 LLM \uC548\uC5D0\uC11C \uC2E4\uD589\uD558\uC138\uC694 \u2014 awl \uD63C\uC790\uC11C\uB294 \uD310\uB2E8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."),
185
+ "",
186
+ ` ${t.accent("/awl-loop <\uBAA9\uD45C>")}`,
187
+ " \uB2E8\uC77C \uC138\uC158\uC774 \uBAA9\uD45C \uD558\uB098\uB97C \uC644\uB8CC \uC870\uAC74 \u2192 \uAC8C\uC774\uD2B8 \u2192 \uAD6C\uD604\uAE4C\uC9C0 \uC9C1\uC811 \uAD00\uD1B5\uD569\uB2C8\uB2E4.",
188
+ ` ${t.accent("/awl-pipeline <lane\uBA85> <mode>")}`,
189
+ " \uB808\uC778\uBCC4\uB85C exec\xB7review \uC138\uC158\uC744 \uC2A4\uD3F0\uD574 \uBB34\uC778 \uD30C\uC774\uD504\uB77C\uC778\uC744 \uB3CC\uB9BD\uB2C8\uB2E4.",
190
+ "",
191
+ color.dim("\uB808\uC778\xB7\uD30C\uC774\uD504\uB77C\uC778 \uAD6C\uC870\xB7<mode> \uAC8C\uC774\uD2B8 \uBC00\uB3C4(--gh/--gm/--gl)\uB294 awl --skills \uB85C \uBD05\uB2C8\uB2E4.")
192
+ ];
193
+ return sectionBox("skills \uBD80\uC5F0\uC124\uBA85", lines, c);
194
+ }
130
195
  var DENSE_AWL = `
131
196
  \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557
132
197
  \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551
@@ -154,7 +219,7 @@ function renderBanner(c = caps()) {
154
219
 
155
220
  ${renderGettingStartedCard(c)}
156
221
 
157
- ${color.dim("\uC608\uC2DC\uB294 awl --examples \uB85C \uBD05\uB2C8\uB2E4.")}`;
222
+ ${color.dim("\uC608\uC2DC\uB294 awl --examples \uB85C, \uC2A4\uD0AC \uC124\uBA85\uC740 awl --skills \uB85C \uBD05\uB2C8\uB2E4.")}`;
158
223
  }
159
224
  function displayHomePath(p) {
160
225
  const home = os.homedir();
@@ -230,7 +295,12 @@ function parseWorkitemsOption(input) {
230
295
  function buildProgram() {
231
296
  const program = new Command();
232
297
  program.name("awl").version(versionString(), "-v, --version", "\uBC84\uC804\uC744 \uCD9C\uB825\uD569\uB2C8\uB2E4").helpOption("-h, --help", "\uB3C4\uC6C0\uB9D0\uC744 \uCD9C\uB825\uD569\uB2C8\uB2E4").addHelpText("beforeAll", (ctx) => ctx.command === program ? `${renderBanner()}
233
- ` : "").option("--examples", "\uC790\uC8FC \uC4F0\uB294 \uBA85\uB839 \uC608\uC2DC\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4").showHelpAfterError();
298
+ ` : "").addHelpText(
299
+ "after",
300
+ (ctx) => ctx.command === program ? `
301
+ ${renderSkillsHelpFooter(caps())}
302
+ ` : ""
303
+ ).option("--examples", "\uC790\uC8FC \uC4F0\uB294 \uBA85\uB839 \uC608\uC2DC\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4").option("--skills", "awl-loop/awl-pipeline \uC2A4\uD0AC\uC744 \uBD80\uC5F0\uC124\uBA85\uD569\uB2C8\uB2E4").showHelpAfterError();
234
304
  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) => {
235
305
  const { runInit } = await import("./init-3B4ZRGWY.js");
236
306
  await runInit({ yes: opts.yes === true });
@@ -239,7 +309,7 @@ function buildProgram() {
239
309
  "--archive",
240
310
  "(--pipeline\uACFC \uD568\uAED8) \uC720\uC608 \uAE30\uAC04(3\uC77C) \uC9C0\uB09C \uC644\uB8CC workitem\uC744 .tasks/archive/ \uB85C \uBCF4\uAD00\uD569\uB2C8\uB2E4"
241
311
  ).action(async (opts) => {
242
- const { runStatus } = await import("./status-ZZEF4NYL.js");
312
+ const { runStatus } = await import("./status-2LPWVCHT.js");
243
313
  await runStatus({
244
314
  json: opts.json === true,
245
315
  pipeline: opts.pipeline === true,
@@ -247,15 +317,15 @@ function buildProgram() {
247
317
  });
248
318
  });
249
319
  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) => {
250
- const { runBrief } = await import("./brief-I2EQVY3F.js");
320
+ const { runBrief } = await import("./brief-SGMFXOY2.js");
251
321
  await runBrief({ today: opts.today === true, date: opts.date, json: opts.json === true });
252
322
  });
253
323
  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) => {
254
- const { runDoctor } = await import("./doctor-QQLQOP3Y.js");
324
+ const { runDoctor } = await import("./doctor-JNUZJC6Z.js");
255
325
  await runDoctor({ json: opts.json === true });
256
326
  });
257
327
  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) => {
258
- const { runVersionCheck } = await import("./version-check-SILVRBMJ.js");
328
+ const { runVersionCheck } = await import("./version-check-5BX3SO7G.js");
259
329
  await runVersionCheck({ json: opts.json === true });
260
330
  });
261
331
  program.command("update").description(
@@ -269,7 +339,7 @@ function buildProgram() {
269
339
  });
270
340
  program.command("remove").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(
271
341
  async (opts) => {
272
- const { runRemove } = await import("./remove-UOAMHEUC.js");
342
+ const { runRemove } = await import("./remove-VJ7VBKTZ.js");
273
343
  await runRemove({
274
344
  yes: opts.yes === true,
275
345
  project: opts.project === true,
@@ -281,22 +351,22 @@ function buildProgram() {
281
351
  );
282
352
  const config = program.command("config").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC124\uC815\uC744 \uBD05\uB2C8\uB2E4 (TTY \uBA74 \uC218\uC815\uB3C4)");
283
353
  config.action(async () => {
284
- const { runConfig } = await import("./config-6VD46H24.js");
354
+ const { runConfig } = await import("./config-QTEKLFZP.js");
285
355
  await runConfig();
286
356
  });
287
357
  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(
288
358
  async (key, value, opts) => {
289
- const { runConfigSet } = await import("./config-6VD46H24.js");
359
+ const { runConfigSet } = await import("./config-QTEKLFZP.js");
290
360
  await runConfigSet(key, value, { force: opts.force === true });
291
361
  }
292
362
  );
293
363
  const work = program.command("work").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4");
294
364
  work.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
295
- const { runWorkList } = await import("./work-RCV5H7TL.js");
365
+ const { runWorkList } = await import("./work-3YHL3P6U.js");
296
366
  runWorkList({ json: opts.json === true });
297
367
  });
298
368
  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) => {
299
- const { runWorkList } = await import("./work-RCV5H7TL.js");
369
+ const { runWorkList } = await import("./work-3YHL3P6U.js");
300
370
  runWorkList({ json: opts.json === true });
301
371
  });
302
372
  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(
@@ -304,7 +374,7 @@ function buildProgram() {
304
374
  "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)"
305
375
  ).option("--experiment <json>", '\uC2E4\uD5D8 \uCF00\uC774\uC2A4 \uBA54\uD0C0 JSON (\uC608: {"model":"lite","mode":"loop"})').action(
306
376
  async (id, description, opts) => {
307
- const { runWorkNew } = await import("./work-RCV5H7TL.js");
377
+ const { runWorkNew } = await import("./work-3YHL3P6U.js");
308
378
  const parsedExp = parseExperimentOption(opts.experiment);
309
379
  if (!parsedExp.ok) {
310
380
  process.stderr.write(`
@@ -316,52 +386,52 @@ function buildProgram() {
316
386
  }
317
387
  );
318
388
  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) => {
319
- const { runWorkSwitch } = await import("./work-RCV5H7TL.js");
389
+ const { runWorkSwitch } = await import("./work-3YHL3P6U.js");
320
390
  await runWorkSwitch(id);
321
391
  });
322
392
  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) => {
323
- const { runWorkAbandon } = await import("./work-RCV5H7TL.js");
393
+ const { runWorkAbandon } = await import("./work-3YHL3P6U.js");
324
394
  runWorkAbandon(id);
325
395
  });
326
396
  work.command("done <id>").description(
327
397
  "\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)"
328
398
  ).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) => {
329
- const { runWorkDone } = await import("./work-RCV5H7TL.js");
399
+ const { runWorkDone } = await import("./work-3YHL3P6U.js");
330
400
  await runWorkDone(id, { force: opts.force === true });
331
401
  });
332
402
  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)");
333
403
  lane.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
334
- const { runLaneList } = await import("./lane-BJ2NJYAH.js");
404
+ const { runLaneList } = await import("./lane-ETMPPVXP.js");
335
405
  await runLaneList({ json: opts.json === true });
336
406
  });
337
407
  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) => {
338
- const { runLaneNew } = await import("./lane-BJ2NJYAH.js");
408
+ const { runLaneNew } = await import("./lane-ETMPPVXP.js");
339
409
  await runLaneNew(name, description);
340
410
  });
341
411
  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) => {
342
- const { runLaneList } = await import("./lane-BJ2NJYAH.js");
412
+ const { runLaneList } = await import("./lane-ETMPPVXP.js");
343
413
  await runLaneList({ json: opts.json === true });
344
414
  });
345
415
  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) => {
346
- const { runLaneRemove } = await import("./lane-BJ2NJYAH.js");
416
+ const { runLaneRemove } = await import("./lane-ETMPPVXP.js");
347
417
  await runLaneRemove(name, { force: opts.force === true });
348
418
  });
349
419
  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) => {
350
- const { runRecords } = await import("./record-UU4WPT2Z.js");
420
+ const { runRecords } = await import("./record-TSB22DIO.js");
351
421
  runRecords({ type: opts.type, workitem: opts.workitem, json: opts.json === true });
352
422
  });
353
423
  const rules = program.command("rules").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC801\uC6A9\uB418\uB294 \uADDC\uCE59\uC744 \uBD05\uB2C8\uB2E4").enablePositionalOptions();
354
424
  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) => {
355
- const { runRules } = await import("./rules-QDAC6BUX.js");
425
+ const { runRules } = await import("./rules-QLUXNSCN.js");
356
426
  runRules({ scope: opts.scope, json: opts.json === true });
357
427
  });
358
428
  rules.command("edit").description("$EDITOR \uB85C \uADDC\uCE59 \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4").action(async () => {
359
- const { runRules } = await import("./rules-QDAC6BUX.js");
429
+ const { runRules } = await import("./rules-QLUXNSCN.js");
360
430
  runRules({ edit: true });
361
431
  });
362
432
  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(
363
433
  async (gotchaId, opts) => {
364
- const { runRulesPromote } = await import("./rules-QDAC6BUX.js");
434
+ const { runRulesPromote } = await import("./rules-QLUXNSCN.js");
365
435
  runRulesPromote(gotchaId, {
366
436
  applies: opts.applies,
367
437
  counter: opts.counter,
@@ -370,16 +440,16 @@ function buildProgram() {
370
440
  }
371
441
  );
372
442
  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) => {
373
- const { runGotchas } = await import("./gotchas-HF5Q2MOA.js");
443
+ const { runGotchas } = await import("./gotchas-PDG2ZZFQ.js");
374
444
  runGotchas({ json: opts.json === true });
375
445
  });
376
446
  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) => {
377
- const { runMetrics } = await import("./metrics-6SZQAG3C.js");
447
+ const { runMetrics } = await import("./metrics-ZR7BPATB.js");
378
448
  runMetrics({ json: opts.json === true, compare: opts.compare === true });
379
449
  });
380
450
  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(
381
451
  async (opts) => {
382
- const { runLoopSummary } = await import("./loop-summary-RZQBTKVY.js");
452
+ const { runLoopSummary } = await import("./loop-summary-CODZMRUY.js");
383
453
  runLoopSummary({
384
454
  workitem: opts.workitem,
385
455
  workitems: parseWorkitemsOption(opts.workitems),
@@ -388,9 +458,11 @@ function buildProgram() {
388
458
  });
389
459
  }
390
460
  );
391
- 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) => {
392
- const { runFeedback } = await import("./feedback-K3P6667T.js");
393
- runFeedback({
461
+ program.command("feedback-log").description(
462
+ "awl \uB3C4\uAD6C \uC790\uCCB4\uC5D0 \uB0A8\uACA8\uC9C4 \uD53C\uB4DC\uBC31 \uAE30\uB85D(awl-feedback)\uC744 area \uBCC4\uB85C \uBB36\uC5B4 \uAC80\uD1A0\uD569\uB2C8\uB2E4 (\uD574\uBC95\uC740 \uC81C\uC2DC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4)"
463
+ ).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) => {
464
+ const { runFeedbackLog } = await import("./feedback-log-UCNJ2GVT.js");
465
+ runFeedbackLog({
394
466
  json: opts.json === true,
395
467
  area: opts.area,
396
468
  severity: opts.severity,
@@ -398,12 +470,12 @@ function buildProgram() {
398
470
  });
399
471
  });
400
472
  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) => {
401
- const { runChangelogDraft } = await import("./changelog-UBIZQHQO.js");
473
+ const { runChangelogDraft } = await import("./changelog-VNJ4EQ74.js");
402
474
  runChangelogDraft({ workitem: opts.workitem, json: opts.json === true });
403
475
  });
404
476
  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(
405
477
  async (criterion, opts) => {
406
- const { runCommit } = await import("./commit-I5ULIUHW.js");
478
+ const { runCommit } = await import("./commit-GPQATPEA.js");
407
479
  await runCommit(criterion, {
408
480
  start: opts.start,
409
481
  message: opts.message,
@@ -413,12 +485,12 @@ function buildProgram() {
413
485
  }
414
486
  );
415
487
  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) => {
416
- const { runReview } = await import("./review-DXSGXZLX.js");
488
+ const { runReview } = await import("./review-CGALGS5X.js");
417
489
  await runReview(range, { json: opts.json === true, base: opts.base });
418
490
  });
419
491
  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(
420
492
  async (type, opts) => {
421
- const { runRecord } = await import("./record-UU4WPT2Z.js");
493
+ const { runRecord } = await import("./record-TSB22DIO.js");
422
494
  await runRecord(type, {
423
495
  json: opts.json,
424
496
  file: opts.file,
@@ -432,7 +504,7 @@ function buildProgram() {
432
504
  "\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)"
433
505
  ).action(
434
506
  async (opts) => {
435
- const { runVerify } = await import("./verify-LOTTWOHB.js");
507
+ const { runVerify } = await import("./verify-7NQ3DOFY.js");
436
508
  await runVerify({
437
509
  json: opts.json === true,
438
510
  bail: opts.bail === true,
@@ -443,17 +515,17 @@ function buildProgram() {
443
515
  }
444
516
  );
445
517
  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) => {
446
- const { runHoldRecheck } = await import("./hold-recheck-CBSGGRBM.js");
518
+ const { runHoldRecheck } = await import("./hold-recheck-UNAILFN5.js");
447
519
  await runHoldRecheck({ json: opts.json === true });
448
520
  });
449
521
  const state = program.command("state", { hidden: true }).description("\uB8E8\uD504 \uC0C1\uD0DC\uB97C \uC77D\uACE0 \uC501\uB2C8\uB2E4");
450
522
  state.command("get").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
451
- const { runStateGet } = await import("./state-DZC7JVEK.js");
523
+ const { runStateGet } = await import("./state-6IIH7SW2.js");
452
524
  runStateGet({ json: opts.json === true });
453
525
  });
454
526
  state.command("set").requiredOption("--json <patch>", "\uBD80\uBD84 \uAC31\uC2E0 (JSON \uBB38\uC790\uC5F4)").action(async (opts) => {
455
- const { runStateSet } = await import("./state-DZC7JVEK.js");
456
- const { hasApprovedGate1 } = await import("./record-UU4WPT2Z.js");
527
+ const { runStateSet } = await import("./state-6IIH7SW2.js");
528
+ const { hasApprovedGate1 } = await import("./record-TSB22DIO.js");
457
529
  runStateSet(opts.json, {
458
530
  // phase:'loop' 로의 전이는 이 워크아이템에 "승인된" 게이트1 레코드가 있을
459
531
  // 때만 허용한다(0.6.3, 적대검증 발견). 예전엔 gate:1 레코드의 존재만 봐서
@@ -464,7 +536,7 @@ function buildProgram() {
464
536
  });
465
537
  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(
466
538
  async (opts) => {
467
- const m = await import("./evolve-MXGX33GB.js");
539
+ const m = await import("./evolve-N3S32P5I.js");
468
540
  if (opts.collect && opts.record) {
469
541
  process.stderr.write("\n --collect \uC640 --record \uB294 \uB3D9\uC2DC\uC5D0 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n");
470
542
  process.exit(1);
@@ -483,12 +555,17 @@ function buildProgram() {
483
555
  }
484
556
  );
485
557
  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) => {
486
- const m = await import("./record-UU4WPT2Z.js");
558
+ const m = await import("./record-TSB22DIO.js");
487
559
  m.runDeferSummary({ json: opts.json === true, workitem: opts.workitem });
488
560
  });
489
561
  program.action((opts, command) => {
490
562
  if (opts.examples) {
491
563
  process.stdout.write(`${renderExamplesCard(caps())}
564
+ `);
565
+ return;
566
+ }
567
+ if (opts.skills) {
568
+ process.stdout.write(`${renderSkillsCard(caps())}
492
569
  `);
493
570
  return;
494
571
  }
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  protectedFilesMessage
3
- } from "./chunk-K2JV27JR.js";
3
+ } from "./chunk-VVZOIFL4.js";
4
4
  import {
5
5
  hasApprovedGate1
6
- } from "./chunk-4BUPV5VU.js";
6
+ } from "./chunk-FK3Q7UY2.js";
7
7
  import {
8
8
  getCriterion,
9
9
  loadState,
10
10
  setCriterion,
11
11
  writeState
12
- } from "./chunk-WOH6WML7.js";
12
+ } from "./chunk-VE2GVNNS.js";
13
13
  import {
14
14
  loadConfig,
15
15
  resolveProjectRoot,
16
16
  run
17
- } from "./chunk-SNWJWX5K.js";
17
+ } from "./chunk-MLTY3EE6.js";
18
18
  import "./chunk-SJG22DAK.js";
19
19
  import {
20
20
  caps,
@@ -16,7 +16,7 @@ import {
16
16
  runConfig,
17
17
  runConfigSet,
18
18
  validateConfig
19
- } from "./chunk-SNWJWX5K.js";
19
+ } from "./chunk-MLTY3EE6.js";
20
20
  import "./chunk-SJG22DAK.js";
21
21
  import "./chunk-FGHILN3D.js";
22
22
  export {
@@ -8,12 +8,12 @@ import {
8
8
  gitHasCommits,
9
9
  renderText,
10
10
  runDoctor
11
- } from "./chunk-L4VWHK4D.js";
12
- import "./chunk-4BUPV5VU.js";
13
- import "./chunk-WOH6WML7.js";
14
- import "./chunk-3N3QH4PK.js";
15
- import "./chunk-DNDODLP2.js";
16
- import "./chunk-SNWJWX5K.js";
11
+ } from "./chunk-DA27NBCS.js";
12
+ import "./chunk-FK3Q7UY2.js";
13
+ import "./chunk-VE2GVNNS.js";
14
+ import "./chunk-XWMS6Z5E.js";
15
+ import "./chunk-ZEX5ZF6C.js";
16
+ import "./chunk-MLTY3EE6.js";
17
17
  import "./chunk-SJG22DAK.js";
18
18
  import "./chunk-FGHILN3D.js";
19
19
  export {
@@ -13,11 +13,11 @@ import {
13
13
  runEvolveCollect,
14
14
  runEvolveRecord,
15
15
  writeGeneration
16
- } from "./chunk-SKJZSRVR.js";
17
- import "./chunk-GYXIREXZ.js";
18
- import "./chunk-4BUPV5VU.js";
19
- import "./chunk-WOH6WML7.js";
20
- import "./chunk-SNWJWX5K.js";
16
+ } from "./chunk-ZRKOZQKP.js";
17
+ import "./chunk-IVEV5L7P.js";
18
+ import "./chunk-FK3Q7UY2.js";
19
+ import "./chunk-VE2GVNNS.js";
20
+ import "./chunk-MLTY3EE6.js";
21
21
  import "./chunk-SJG22DAK.js";
22
22
  import "./chunk-FGHILN3D.js";
23
23
  export {
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  readRecords
3
- } from "./chunk-4BUPV5VU.js";
4
- import "./chunk-WOH6WML7.js";
5
- import "./chunk-SNWJWX5K.js";
3
+ } from "./chunk-FK3Q7UY2.js";
4
+ import "./chunk-VE2GVNNS.js";
5
+ import "./chunk-MLTY3EE6.js";
6
6
  import "./chunk-SJG22DAK.js";
7
7
  import {
8
8
  caps,
@@ -11,7 +11,7 @@ import {
11
11
  signal
12
12
  } from "./chunk-FGHILN3D.js";
13
13
 
14
- // src/commands/feedback.ts
14
+ // src/commands/feedback-log.ts
15
15
  var SEVERITY_RANK = { high: 0, medium: 1, low: 2 };
16
16
  function loadAwlFeedback(filter = {}) {
17
17
  let records = readRecords().filter((r) => r.type === "awl-feedback");
@@ -60,7 +60,7 @@ function buildFeedbackReport(records) {
60
60
  const prioritized = Object.entries(areas).filter(([, g]) => g.count >= 2).sort(([, a], [, b]) => b.count - a.count).map(([area]) => area);
61
61
  return { collectedFrom: workitems.size, areas, prioritized };
62
62
  }
63
- function renderFeedback(report, c) {
63
+ function renderFeedbackLog(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) {
@@ -98,7 +98,7 @@ function renderFeedback(report, c) {
98
98
  }
99
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
- function runFeedback(opts) {
101
+ function runFeedbackLog(opts) {
102
102
  if (isInvalidSince(opts.since)) {
103
103
  process.stderr.write(
104
104
  `
@@ -113,13 +113,13 @@ function runFeedback(opts) {
113
113
  `);
114
114
  return;
115
115
  }
116
- process.stdout.write(`${renderFeedback(report, caps())}
116
+ process.stdout.write(`${renderFeedbackLog(report, caps())}
117
117
  `);
118
118
  }
119
119
  export {
120
120
  buildFeedbackReport,
121
121
  isInvalidSince,
122
122
  loadAwlFeedback,
123
- renderFeedback,
124
- runFeedback
123
+ renderFeedbackLog,
124
+ runFeedbackLog
125
125
  };
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  loadGotchaList
3
- } from "./chunk-SKJZSRVR.js";
4
- import "./chunk-GYXIREXZ.js";
5
- import "./chunk-4BUPV5VU.js";
6
- import "./chunk-WOH6WML7.js";
7
- import "./chunk-SNWJWX5K.js";
3
+ } from "./chunk-ZRKOZQKP.js";
4
+ import "./chunk-IVEV5L7P.js";
5
+ import "./chunk-FK3Q7UY2.js";
6
+ import "./chunk-VE2GVNNS.js";
7
+ import "./chunk-MLTY3EE6.js";
8
8
  import "./chunk-SJG22DAK.js";
9
9
  import {
10
10
  caps,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  pipelineLanes
3
- } from "./chunk-3LPCP55B.js";
4
- import "./chunk-4BUPV5VU.js";
5
- import "./chunk-WOH6WML7.js";
3
+ } from "./chunk-PUINOFOR.js";
4
+ import "./chunk-FK3Q7UY2.js";
5
+ import "./chunk-VE2GVNNS.js";
6
6
  import {
7
7
  resolveProjectRoot
8
- } from "./chunk-SNWJWX5K.js";
8
+ } from "./chunk-MLTY3EE6.js";
9
9
  import "./chunk-SJG22DAK.js";
10
10
  import {
11
11
  caps,
@@ -9,20 +9,20 @@ import {
9
9
  runLaneRemove,
10
10
  unmergedCommitCount,
11
11
  worktreeUntracked
12
- } from "./chunk-LBZNBCAY.js";
13
- import "./chunk-2FQ5HCDI.js";
12
+ } from "./chunk-SSSOO2GH.js";
13
+ import "./chunk-AGFQC2UO.js";
14
14
  import "./chunk-D5OINC3G.js";
15
- import "./chunk-236TTTK3.js";
16
- import "./chunk-SKJZSRVR.js";
17
- import "./chunk-GYXIREXZ.js";
18
- import "./chunk-O7PUNJVM.js";
19
- import "./chunk-K2JV27JR.js";
20
- import "./chunk-L4VWHK4D.js";
21
- import "./chunk-4BUPV5VU.js";
22
- import "./chunk-WOH6WML7.js";
23
- import "./chunk-3N3QH4PK.js";
24
- import "./chunk-DNDODLP2.js";
25
- import "./chunk-SNWJWX5K.js";
15
+ import "./chunk-EHJYX57P.js";
16
+ import "./chunk-ZRKOZQKP.js";
17
+ import "./chunk-IVEV5L7P.js";
18
+ import "./chunk-WWZIKKHP.js";
19
+ import "./chunk-VVZOIFL4.js";
20
+ import "./chunk-DA27NBCS.js";
21
+ import "./chunk-FK3Q7UY2.js";
22
+ import "./chunk-VE2GVNNS.js";
23
+ import "./chunk-XWMS6Z5E.js";
24
+ import "./chunk-ZEX5ZF6C.js";
25
+ import "./chunk-MLTY3EE6.js";
26
26
  import "./chunk-SJG22DAK.js";
27
27
  import "./chunk-FGHILN3D.js";
28
28
  export {
@@ -6,20 +6,20 @@ import {
6
6
  computeDurationMs,
7
7
  fmtDuration,
8
8
  loadGenerations
9
- } from "./chunk-GYXIREXZ.js";
9
+ } from "./chunk-IVEV5L7P.js";
10
10
  import {
11
11
  collectDeferred,
12
12
  readRecords
13
- } from "./chunk-4BUPV5VU.js";
13
+ } from "./chunk-FK3Q7UY2.js";
14
14
  import {
15
15
  loadState
16
- } from "./chunk-WOH6WML7.js";
16
+ } from "./chunk-VE2GVNNS.js";
17
17
  import {
18
18
  loadConfig,
19
19
  multiProjectFooter,
20
20
  requireConfig,
21
21
  resolveProjectScope
22
- } from "./chunk-SNWJWX5K.js";
22
+ } from "./chunk-MLTY3EE6.js";
23
23
  import "./chunk-SJG22DAK.js";
24
24
  import {
25
25
  caps,