agent-work-loop 0.6.41 → 0.6.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/{brief-GQRHGJQN.js → brief-I2EQVY3F.js} +5 -5
  2. package/dist/{changelog-HZMH3RPD.js → changelog-UBIZQHQO.js} +5 -5
  3. package/dist/{chunk-OJ7YO3MY.js → chunk-236TTTK3.js} +2 -2
  4. package/dist/{chunk-XBUKFMNN.js → chunk-2FQ5HCDI.js} +41 -13
  5. package/dist/{chunk-G6JX5EYW.js → chunk-3LPCP55B.js} +61 -10
  6. package/dist/{chunk-HFRQCP26.js → chunk-3N3QH4PK.js} +4 -4
  7. package/dist/{chunk-6F4VAVKF.js → chunk-4BUPV5VU.js} +3 -3
  8. package/dist/{chunk-B76434VM.js → chunk-DNDODLP2.js} +2 -2
  9. package/dist/{chunk-SUF5ISJM.js → chunk-FGHILN3D.js} +9 -1
  10. package/dist/{chunk-4ZLARTXS.js → chunk-GYXIREXZ.js} +47 -3
  11. package/dist/{chunk-NOU677FX.js → chunk-K2JV27JR.js} +1 -1
  12. package/dist/{chunk-OWILAE4M.js → chunk-L4VWHK4D.js} +53 -39
  13. package/dist/{chunk-2XQZQP7Z.js → chunk-LBZNBCAY.js} +6 -7
  14. package/dist/{chunk-CSBKWYFK.js → chunk-O7PUNJVM.js} +5 -5
  15. package/dist/{chunk-7TMAQRJS.js → chunk-SJG22DAK.js} +27 -6
  16. package/dist/{chunk-FKBBGXGF.js → chunk-SKJZSRVR.js} +5 -5
  17. package/dist/{chunk-7D4T7HFK.js → chunk-SNWJWX5K.js} +126 -6
  18. package/dist/{chunk-UNANHUG3.js → chunk-WOH6WML7.js} +2 -2
  19. package/dist/cli.js +53 -43
  20. package/dist/{commit-SU6CTBU3.js → commit-I5ULIUHW.js} +6 -6
  21. package/dist/{config-Z4G5SBWJ.js → config-6VD46H24.js} +9 -3
  22. package/dist/{doctor-GHWUUAWV.js → doctor-QQLQOP3Y.js} +8 -8
  23. package/dist/{evolve-SQJ5LIE4.js → evolve-MXGX33GB.js} +7 -7
  24. package/dist/{feedback-TPITVUZL.js → feedback-K3P6667T.js} +5 -5
  25. package/dist/{gotchas-UEZG3HVO.js → gotchas-HF5Q2MOA.js} +7 -7
  26. package/dist/{hold-recheck-STHUHCOU.js → hold-recheck-CBSGGRBM.js} +6 -17
  27. package/dist/{init-AVVD77XM.js → init-3B4ZRGWY.js} +2 -2
  28. package/dist/lane-BJ2NJYAH.js +39 -0
  29. package/dist/{loop-summary-L4UTUOPY.js → loop-summary-RZQBTKVY.js} +49 -7
  30. package/dist/{metrics-SOYVRSNM.js → metrics-6SZQAG3C.js} +4 -4
  31. package/dist/{record-V6V5XPPA.js → record-UU4WPT2Z.js} +5 -5
  32. package/dist/{remove-6VQS4ST6.js → remove-UOAMHEUC.js} +16 -16
  33. package/dist/{review-42SXUBZE.js → review-DXSGXZLX.js} +15 -15
  34. package/dist/{rules-ASJFXFGG.js → rules-QDAC6BUX.js} +8 -8
  35. package/dist/{state-6TNG2EC5.js → state-DZC7JVEK.js} +4 -4
  36. package/dist/status-ZZEF4NYL.js +29 -0
  37. package/dist/{update-3AYB3V4I.js → update-CKGPHO5B.js} +2 -2
  38. package/dist/{verify-ZVZCJ3LH.js → verify-LOTTWOHB.js} +10 -10
  39. package/dist/version-check-SILVRBMJ.js +14 -0
  40. package/dist/{work-TVUOH7GQ.js → work-RCV5H7TL.js} +14 -14
  41. package/engine/skills/claude/awl-loop/SKILL.md +16 -0
  42. package/engine/skills/claude/awl-loop/reference.md +4 -0
  43. package/engine/skills/claude/awl-pipeline/SKILL.md +74 -0
  44. package/engine/skills/claude/awl-pipeline-exec/SKILL.md +8 -1
  45. package/engine/skills/claude/awl-pipeline-review/SKILL.md +7 -1
  46. package/engine/version.json +1 -1
  47. package/package.json +1 -1
  48. package/dist/lane-JTE45KFF.js +0 -41
  49. package/dist/status-43UVJLVD.js +0 -40
  50. package/dist/version-check-OKCLT4BF.js +0 -14
@@ -6,12 +6,13 @@ import {
6
6
  closeFlow,
7
7
  detectVerify,
8
8
  langScreenLines,
9
+ listRegisteredProjects,
9
10
  openFlow,
10
11
  promptNumber,
11
12
  selectMulti,
12
13
  step,
13
14
  verifyStepLines
14
- } from "./chunk-7TMAQRJS.js";
15
+ } from "./chunk-SJG22DAK.js";
15
16
  import {
16
17
  caps,
17
18
  findProjectRoot,
@@ -21,7 +22,7 @@ import {
21
22
  makeSymbols,
22
23
  sectionBox,
23
24
  signal
24
- } from "./chunk-SUF5ISJM.js";
25
+ } from "./chunk-FGHILN3D.js";
25
26
 
26
27
  // src/commands/config.ts
27
28
  import fs from "fs";
@@ -120,6 +121,7 @@ function run(spec) {
120
121
  }
121
122
 
122
123
  // src/commands/config.ts
124
+ var DEFAULT_FEEDBACK_PATH = "/Users/kh1012/MIDAS/Research/agent-work-loop/.tasks/plan/";
123
125
  var VERIFY_ORDER = ["typecheck", "lint", "test", "e2e"];
124
126
  function resolveProjectRoot(cwd = process.cwd()) {
125
127
  try {
@@ -128,6 +130,29 @@ function resolveProjectRoot(cwd = process.cwd()) {
128
130
  return null;
129
131
  }
130
132
  }
133
+ function resolveProjectScope(cwd = process.cwd()) {
134
+ const root = resolveProjectRoot(cwd);
135
+ if (root) {
136
+ return { mode: "single", projectRoot: root };
137
+ }
138
+ const registered = listRegisteredProjects().filter((p) => fs.existsSync(p.path));
139
+ if (registered.length > 0) {
140
+ return { mode: "multi", projects: registered };
141
+ }
142
+ return { mode: "none" };
143
+ }
144
+ function multiProjectFooter(projects, exampleCmd, c) {
145
+ const color = makeColors(c.color);
146
+ const lines = [
147
+ "",
148
+ color.dim(
149
+ `\uD604\uC7AC \uC704\uCE58\uAC00 \uD2B9\uC815 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC18D\uD558\uC9C0 \uC54A\uC544 \uB4F1\uB85D\uB41C \uD504\uB85C\uC81D\uD2B8 ${projects.length}\uAC1C\uB97C \uBAA8\uB450 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4.`
150
+ ),
151
+ color.dim("\uD2B9\uC815 \uD504\uB85C\uC81D\uD2B8\uB9CC \uBCF4\uB824\uBA74:"),
152
+ ...projects.map((p) => color.dim(` cd ${p.path} && ${exampleCmd}`))
153
+ ];
154
+ return lines.join("\n");
155
+ }
131
156
  function isVerifyEntry(v) {
132
157
  if (v === null) {
133
158
  return true;
@@ -173,6 +198,19 @@ function validateConfig(obj) {
173
198
  if ("protectedFiles" in o && (!Array.isArray(o.protectedFiles) || !o.protectedFiles.every((p) => typeof p === "string"))) {
174
199
  errors.push("protectedFiles \uD615\uC2DD \uC624\uB958 (\uBB38\uC790\uC5F4 \uBC30\uC5F4)");
175
200
  }
201
+ if ("feedback" in o && o.feedback !== void 0) {
202
+ if (typeof o.feedback !== "object" || o.feedback === null) {
203
+ errors.push("feedback \uD615\uC2DD \uC624\uB958 (\uAC1D\uCCB4 \uD544\uC218)");
204
+ } else {
205
+ const fb = o.feedback;
206
+ if (typeof fb.enabled !== "boolean") {
207
+ errors.push("feedback.enabled \uD615\uC2DD \uC624\uB958 (boolean \uD544\uC218)");
208
+ }
209
+ if ("path" in fb && fb.path !== void 0 && typeof fb.path !== "string") {
210
+ errors.push("feedback.path \uD615\uC2DD \uC624\uB958 (\uBB38\uC790\uC5F4)");
211
+ }
212
+ }
213
+ }
176
214
  return errors;
177
215
  }
178
216
  function jsonErrorLocation(text, err) {
@@ -219,6 +257,12 @@ function loadConfig(projectRoot) {
219
257
  ...typeof raw.namingConvention === "string" ? { namingConvention: raw.namingConvention } : {},
220
258
  ...typeof raw.relatedCmd === "string" ? { relatedCmd: raw.relatedCmd } : {},
221
259
  ...Array.isArray(raw.protectedFiles) ? { protectedFiles: raw.protectedFiles } : {},
260
+ ...typeof raw.feedback === "object" && raw.feedback !== null && typeof raw.feedback.enabled === "boolean" ? {
261
+ feedback: {
262
+ enabled: raw.feedback.enabled,
263
+ ...typeof raw.feedback.path === "string" ? { path: raw.feedback.path } : {}
264
+ }
265
+ } : {},
222
266
  verify: {
223
267
  typecheck: rv.typecheck ?? null,
224
268
  lint: rv.lint ?? null,
@@ -276,6 +320,8 @@ var SETTABLE_KEYS = [
276
320
  "namingConvention",
277
321
  "relatedCmd",
278
322
  "protectedFiles",
323
+ "feedback.enabled",
324
+ "feedback.path",
279
325
  ...VERIFY_ORDER.flatMap((n) => [`verify.${n}.cmd`, `verify.${n}.cwd`, `verify.${n}.env`])
280
326
  ];
281
327
  function parseConfigKey(key) {
@@ -295,6 +341,8 @@ function parseConfigKey(key) {
295
341
  return { kind: "relatedCmd" };
296
342
  }
297
343
  if (key === "protectedFiles") return { kind: "protectedFiles" };
344
+ if (key === "feedback.enabled") return { kind: "feedback.enabled" };
345
+ if (key === "feedback.path") return { kind: "feedback.path" };
298
346
  const names = VERIFY_ORDER.join("|");
299
347
  const cmdMatch = new RegExp(`^verify\\.(${names})(?:\\.cmd)?$`).exec(key);
300
348
  if (cmdMatch?.[1]) {
@@ -399,6 +447,35 @@ async function applyConfigValue(config, projectRoot, parsed, rawValue, opts) {
399
447
  config.protectedFiles = files;
400
448
  return { ok: true, message: `protectedFiles = ${files.join(", ") || "(\uBE44\uC6C0)"}` };
401
449
  }
450
+ if (parsed.kind === "feedback.enabled") {
451
+ const v2 = rawValue.trim().toLowerCase();
452
+ const truthy = ["true", "on", "1"];
453
+ const falsy = ["false", "off", "0"];
454
+ if (!truthy.includes(v2) && !falsy.includes(v2)) {
455
+ return {
456
+ ok: false,
457
+ message: `feedback.enabled \uB294 true/false(\uB610\uB294 on/off, 1/0)\uB9CC \uD5C8\uC6A9\uD569\uB2C8\uB2E4: '${rawValue}'`
458
+ };
459
+ }
460
+ const enabled = truthy.includes(v2);
461
+ config.feedback = { enabled, ...config.feedback?.path ? { path: config.feedback.path } : {} };
462
+ return { ok: true, message: `feedback.enabled = ${enabled}` };
463
+ }
464
+ if (parsed.kind === "feedback.path") {
465
+ const v2 = rawValue.trim();
466
+ if (v2 === "") {
467
+ if (config.feedback) {
468
+ config.feedback.path = void 0;
469
+ }
470
+ return {
471
+ ok: true,
472
+ message: `feedback.path = (\uBE44\uC6C0, \uAE30\uBCF8\uAC12 \uC0AC\uC6A9 \u2014 ${DEFAULT_FEEDBACK_PATH})`
473
+ };
474
+ }
475
+ const warn = path.isAbsolute(v2) ? "" : "\n\uCC38\uACE0: \uC0C1\uB300\uACBD\uB85C\uC785\uB2C8\uB2E4 \u2014 \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uAE30\uC900\uC73C\uB85C \uD574\uC11D\uB429\uB2C8\uB2E4.";
476
+ config.feedback = { enabled: config.feedback?.enabled ?? false, path: v2 };
477
+ return { ok: true, message: `feedback.path = ${v2}${warn}` };
478
+ }
402
479
  const name = parsed.verifyName;
403
480
  if (parsed.kind === "verify.cmd") {
404
481
  const entry = parseVerifyValue(rawValue);
@@ -613,8 +690,27 @@ ${flowActiveNode("\uC218\uC815\uD560 \uD56D\uBAA9\uC744 \uACE0\uB974\uC138\uC694
613
690
  return true;
614
691
  }
615
692
  async function runConfig() {
616
- const projectRoot = resolveProjectRoot();
617
- if (!projectRoot) {
693
+ const scope = resolveProjectScope();
694
+ if (scope.mode === "multi" && scope.projects) {
695
+ const c2 = caps();
696
+ const blocks = scope.projects.map((p) => {
697
+ const color = makeColors(c2.color);
698
+ const loaded2 = loadConfig(p.path);
699
+ const header = color.bold(`\uD504\uB85C\uC81D\uD2B8: ${p.name} (${p.path})`);
700
+ if (!loaded2.config) {
701
+ return `${header}
702
+ ${signal(c2, "error")} config.json \uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4: ${loaded2.errors.join(", ")}`;
703
+ }
704
+ return `${header}
705
+ ${renderConfig(loaded2.config, c2)}`;
706
+ });
707
+ process.stdout.write(`${blocks.join("\n\n")}
708
+ `);
709
+ process.stdout.write(`${multiProjectFooter(scope.projects, "awl config", c2)}
710
+ `);
711
+ return;
712
+ }
713
+ if (scope.mode === "none") {
618
714
  process.stderr.write(
619
715
  `
620
716
  ${signal(caps(), "error")} \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. awl init \uC744 \uC2E4\uD589\uD558\uC138\uC694.
@@ -622,6 +718,7 @@ async function runConfig() {
622
718
  );
623
719
  process.exit(1);
624
720
  }
721
+ const projectRoot = scope.projectRoot;
625
722
  const loaded = loadConfig(projectRoot);
626
723
  if (!loaded.config) {
627
724
  process.stderr.write(`
@@ -660,6 +757,9 @@ function renderSettableKeys(config, c) {
660
757
  if (key === "project") return config.project;
661
758
  if (key === "mainLanguage") return config.mainLanguage.join(", ") || "(\uC5C6\uC74C)";
662
759
  if (key === "character") return config.character || "(\uC5C6\uC74C)";
760
+ if (key === "feedback.enabled") return String(config.feedback?.enabled ?? false);
761
+ if (key === "feedback.path")
762
+ return config.feedback?.path || `(\uAE30\uBCF8\uAC12) ${DEFAULT_FEEDBACK_PATH}`;
663
763
  const m = /^verify\.(typecheck|lint|test|e2e)\.(cmd|cwd|env)$/.exec(key);
664
764
  if (!m?.[1] || !m[2]) return "";
665
765
  const entry = config.verify[m[1]];
@@ -678,8 +778,24 @@ function renderSettableKeys(config, c) {
678
778
  return out.join("\n");
679
779
  }
680
780
  async function runConfigSet(key, value, opts) {
681
- const projectRoot = resolveProjectRoot();
682
- if (!projectRoot) {
781
+ const scope = resolveProjectScope();
782
+ if (scope.mode === "multi" && scope.projects) {
783
+ const c = caps();
784
+ process.stdout.write(
785
+ `
786
+ ${signal(c, "warn")} \uD604\uC7AC \uC704\uCE58\uAC00 \uD2B9\uC815 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC18D\uD558\uC9C0 \uC54A\uC544 \uC5B4\uB290 \uD504\uB85C\uC81D\uD2B8\uB97C \uBC14\uAFC0\uC9C0 \uC54C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
787
+ `
788
+ );
789
+ process.stdout.write(" \uD574\uB2F9 \uD504\uB85C\uC81D\uD2B8\uB85C \uC774\uB3D9\uD55C \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694:\n");
790
+ for (const p of scope.projects) {
791
+ process.stdout.write(
792
+ ` cd ${p.path} && awl config set${key ? ` ${key}` : ""}${value ? ` ${value}` : ""}
793
+ `
794
+ );
795
+ }
796
+ return;
797
+ }
798
+ if (scope.mode === "none") {
683
799
  process.stderr.write(
684
800
  `
685
801
  ${signal(caps(), "error")} \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. awl init \uC744 \uC2E4\uD589\uD558\uC138\uC694.
@@ -687,6 +803,7 @@ async function runConfigSet(key, value, opts) {
687
803
  );
688
804
  process.exit(1);
689
805
  }
806
+ const projectRoot = scope.projectRoot;
690
807
  const loaded = loadConfig(projectRoot);
691
808
  if (!loaded.config) {
692
809
  process.stderr.write(
@@ -747,8 +864,11 @@ export {
747
864
  CommandNotFoundError,
748
865
  tokenize,
749
866
  run,
867
+ DEFAULT_FEEDBACK_PATH,
750
868
  VERIFY_ORDER,
751
869
  resolveProjectRoot,
870
+ resolveProjectScope,
871
+ multiProjectFooter,
752
872
  validateConfig,
753
873
  loadConfig,
754
874
  requireConfig,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  resolveProjectRoot
3
- } from "./chunk-7D4T7HFK.js";
3
+ } from "./chunk-SNWJWX5K.js";
4
4
  import {
5
5
  caps,
6
6
  makeColors,
7
7
  sectionBox
8
- } from "./chunk-SUF5ISJM.js";
8
+ } from "./chunk-FGHILN3D.js";
9
9
 
10
10
  // src/commands/state.ts
11
11
  import fs from "fs";
package/dist/cli.js CHANGED
@@ -3,9 +3,10 @@ import {
3
3
  computeUpdateAvailable,
4
4
  readCachedLatestVersion,
5
5
  version
6
- } from "./chunk-B76434VM.js";
6
+ } from "./chunk-DNDODLP2.js";
7
7
  import {
8
8
  caps,
9
+ engineDir,
9
10
  gradient,
10
11
  installedEngineVersion,
11
12
  makeColors,
@@ -14,9 +15,10 @@ import {
14
15
  sectionBox,
15
16
  signal,
16
17
  visibleWidth
17
- } from "./chunk-SUF5ISJM.js";
18
+ } from "./chunk-FGHILN3D.js";
18
19
 
19
20
  // src/program.ts
21
+ import os from "os";
20
22
  import { Command } from "commander";
21
23
  var BANNER = `
22
24
  [ AGENT WORK LOOP v${version} ]
@@ -154,11 +156,16 @@ ${renderGettingStartedCard(c)}
154
156
 
155
157
  ${color.dim("\uC608\uC2DC\uB294 awl --examples \uB85C \uBD05\uB2C8\uB2E4.")}`;
156
158
  }
159
+ function displayHomePath(p) {
160
+ const home = os.homedir();
161
+ return p.startsWith(home) ? `~${p.slice(home.length)}` : p;
162
+ }
157
163
  function versionString(c = caps()) {
158
164
  const color = makeColors(c.color);
159
165
  const s = makeSymbols(c);
160
166
  const engineVer = installedEngineVersion();
161
- const heading = `awl v${version}`;
167
+ const enginePath = displayHomePath(engineDir());
168
+ const heading = `awl v${version} ${color.dim("(\uC124\uCE58\uB41C npm \uD328\uD0A4\uC9C0 \uBC84\uC804 \u2014 CLI \uBCF8\uCCB4)")}`;
162
169
  let base;
163
170
  if (engineVer === null) {
164
171
  base = [
@@ -169,7 +176,10 @@ function versionString(c = caps()) {
169
176
  ` ${color.dim("'awl init'\uC744 \uC2E4\uD589\uD558\uC5EC \uD15C\uD50C\uB9BF\uC744 \uC124\uCE58\uD558\uC138\uC694.")}`
170
177
  ].join("\n");
171
178
  } else {
172
- const template = ` ${s.lastBranch} Engine Template: v${engineVer}`;
179
+ const template = [
180
+ ` ${s.lastBranch} Engine Template: v${engineVer} ${color.dim(`(${enginePath} \uC5D0 \uBCF5\uC0AC\uB41C \uC5D4\uC9C4 \uBC84\uC804)`)}`,
181
+ ` ${color.dim("\uD328\uD0A4\uC9C0 \uC124\uCE58 \uD6C4, \uD30C\uC77C \uAD00\uB9AC\uB97C \uC704\uD574 \uC804\uC5ED\uC5D0 \uC5D4\uC9C4 \uD15C\uD50C\uB9BF \uD615\uD0DC\uB85C \uBCF5\uC0AC\uBCF8\uC744 \uB9CC\uB4ED\uB2C8\uB2E4.")}`
182
+ ].join("\n");
173
183
  if (engineVer === version) {
174
184
  base = `${heading}
175
185
  ${template}`;
@@ -179,7 +189,7 @@ ${template}`;
179
189
  template,
180
190
  "",
181
191
  ` ${signal(c, "warn")} \uBC84\uC804 \uBD88\uC77C\uCE58 \uAC10\uC9C0!`,
182
- " CLI \uBCF8\uCCB4\uC640 \uD648 \uB514\uB809\uD1A0\uB9AC(~/.awl/engine)\uC758 \uC2A4\uD0AC \uD15C\uD50C\uB9BF \uBC84\uC804\uC774 \uB2E4\uB985\uB2C8\uB2E4.",
192
+ ` CLI \uBCF8\uCCB4\uC640 ${enginePath} \uC758 \uC5D4\uC9C4 \uD15C\uD50C\uB9BF \uBC84\uC804\uC774 \uB2E4\uB985\uB2C8\uB2E4.`,
183
193
  ` ${color.dim("\uD574\uACB0\uD558\uB824\uBA74 awl update \uB85C \uC5D4\uC9C4\uC744 \uAC31\uC2E0\uD558\uC138\uC694.")}`
184
194
  ].join("\n");
185
195
  }
@@ -222,14 +232,14 @@ function buildProgram() {
222
232
  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()}
223
233
  ` : "").option("--examples", "\uC790\uC8FC \uC4F0\uB294 \uBA85\uB839 \uC608\uC2DC\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4").showHelpAfterError();
224
234
  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) => {
225
- const { runInit } = await import("./init-AVVD77XM.js");
235
+ const { runInit } = await import("./init-3B4ZRGWY.js");
226
236
  await runInit({ yes: opts.yes === true });
227
237
  });
228
238
  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(
229
239
  "--archive",
230
240
  "(--pipeline\uACFC \uD568\uAED8) \uC720\uC608 \uAE30\uAC04(3\uC77C) \uC9C0\uB09C \uC644\uB8CC workitem\uC744 .tasks/archive/ \uB85C \uBCF4\uAD00\uD569\uB2C8\uB2E4"
231
241
  ).action(async (opts) => {
232
- const { runStatus } = await import("./status-43UVJLVD.js");
242
+ const { runStatus } = await import("./status-ZZEF4NYL.js");
233
243
  await runStatus({
234
244
  json: opts.json === true,
235
245
  pipeline: opts.pipeline === true,
@@ -237,15 +247,15 @@ function buildProgram() {
237
247
  });
238
248
  });
239
249
  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) => {
240
- const { runBrief } = await import("./brief-GQRHGJQN.js");
250
+ const { runBrief } = await import("./brief-I2EQVY3F.js");
241
251
  await runBrief({ today: opts.today === true, date: opts.date, json: opts.json === true });
242
252
  });
243
253
  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) => {
244
- const { runDoctor } = await import("./doctor-GHWUUAWV.js");
254
+ const { runDoctor } = await import("./doctor-QQLQOP3Y.js");
245
255
  await runDoctor({ json: opts.json === true });
246
256
  });
247
257
  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) => {
248
- const { runVersionCheck } = await import("./version-check-OKCLT4BF.js");
258
+ const { runVersionCheck } = await import("./version-check-SILVRBMJ.js");
249
259
  await runVersionCheck({ json: opts.json === true });
250
260
  });
251
261
  program.command("update").description(
@@ -254,12 +264,12 @@ function buildProgram() {
254
264
  "-l, --local",
255
265
  "\uB4F1\uB85D\uB41C \uD504\uB85C\uC81D\uD2B8 \uC804\uBD80\uC758 \uB85C\uCEEC \uC2A4\uD0AC\uC744 \uC9C0\uAE08 \uC124\uCE58\uB41C \uC5D4\uC9C4\uC5D0 \uB9DE\uCDB0 \uC7AC\uB3D9\uAE30\uD654\uD569\uB2C8\uB2E4"
256
266
  ).option("-a, --all", "\uC804\uC5ED\uACFC \uB4F1\uB85D\uB41C \uD504\uB85C\uC81D\uD2B8 \uB85C\uCEEC\uC744 \uBAA8\uB450 \uAC31\uC2E0\uD569\uB2C8\uB2E4").action(async (opts) => {
257
- const { runUpdate } = await import("./update-3AYB3V4I.js");
267
+ const { runUpdate } = await import("./update-CKGPHO5B.js");
258
268
  runUpdate(opts);
259
269
  });
260
270
  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(
261
271
  async (opts) => {
262
- const { runRemove } = await import("./remove-6VQS4ST6.js");
272
+ const { runRemove } = await import("./remove-UOAMHEUC.js");
263
273
  await runRemove({
264
274
  yes: opts.yes === true,
265
275
  project: opts.project === true,
@@ -271,22 +281,22 @@ function buildProgram() {
271
281
  );
272
282
  const config = program.command("config").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC124\uC815\uC744 \uBD05\uB2C8\uB2E4 (TTY \uBA74 \uC218\uC815\uB3C4)");
273
283
  config.action(async () => {
274
- const { runConfig } = await import("./config-Z4G5SBWJ.js");
284
+ const { runConfig } = await import("./config-6VD46H24.js");
275
285
  await runConfig();
276
286
  });
277
287
  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(
278
288
  async (key, value, opts) => {
279
- const { runConfigSet } = await import("./config-Z4G5SBWJ.js");
289
+ const { runConfigSet } = await import("./config-6VD46H24.js");
280
290
  await runConfigSet(key, value, { force: opts.force === true });
281
291
  }
282
292
  );
283
293
  const work = program.command("work").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4");
284
294
  work.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
285
- const { runWorkList } = await import("./work-TVUOH7GQ.js");
295
+ const { runWorkList } = await import("./work-RCV5H7TL.js");
286
296
  runWorkList({ json: opts.json === true });
287
297
  });
288
298
  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) => {
289
- const { runWorkList } = await import("./work-TVUOH7GQ.js");
299
+ const { runWorkList } = await import("./work-RCV5H7TL.js");
290
300
  runWorkList({ json: opts.json === true });
291
301
  });
292
302
  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(
@@ -294,7 +304,7 @@ function buildProgram() {
294
304
  "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)"
295
305
  ).option("--experiment <json>", '\uC2E4\uD5D8 \uCF00\uC774\uC2A4 \uBA54\uD0C0 JSON (\uC608: {"model":"lite","mode":"loop"})').action(
296
306
  async (id, description, opts) => {
297
- const { runWorkNew } = await import("./work-TVUOH7GQ.js");
307
+ const { runWorkNew } = await import("./work-RCV5H7TL.js");
298
308
  const parsedExp = parseExperimentOption(opts.experiment);
299
309
  if (!parsedExp.ok) {
300
310
  process.stderr.write(`
@@ -306,52 +316,52 @@ function buildProgram() {
306
316
  }
307
317
  );
308
318
  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) => {
309
- const { runWorkSwitch } = await import("./work-TVUOH7GQ.js");
319
+ const { runWorkSwitch } = await import("./work-RCV5H7TL.js");
310
320
  await runWorkSwitch(id);
311
321
  });
312
322
  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) => {
313
- const { runWorkAbandon } = await import("./work-TVUOH7GQ.js");
323
+ const { runWorkAbandon } = await import("./work-RCV5H7TL.js");
314
324
  runWorkAbandon(id);
315
325
  });
316
326
  work.command("done <id>").description(
317
327
  "\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)"
318
328
  ).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) => {
319
- const { runWorkDone } = await import("./work-TVUOH7GQ.js");
329
+ const { runWorkDone } = await import("./work-RCV5H7TL.js");
320
330
  await runWorkDone(id, { force: opts.force === true });
321
331
  });
322
332
  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)");
323
333
  lane.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
324
- const { runLaneList } = await import("./lane-JTE45KFF.js");
334
+ const { runLaneList } = await import("./lane-BJ2NJYAH.js");
325
335
  await runLaneList({ json: opts.json === true });
326
336
  });
327
337
  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) => {
328
- const { runLaneNew } = await import("./lane-JTE45KFF.js");
338
+ const { runLaneNew } = await import("./lane-BJ2NJYAH.js");
329
339
  await runLaneNew(name, description);
330
340
  });
331
341
  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) => {
332
- const { runLaneList } = await import("./lane-JTE45KFF.js");
342
+ const { runLaneList } = await import("./lane-BJ2NJYAH.js");
333
343
  await runLaneList({ json: opts.json === true });
334
344
  });
335
345
  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) => {
336
- const { runLaneRemove } = await import("./lane-JTE45KFF.js");
346
+ const { runLaneRemove } = await import("./lane-BJ2NJYAH.js");
337
347
  await runLaneRemove(name, { force: opts.force === true });
338
348
  });
339
349
  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) => {
340
- const { runRecords } = await import("./record-V6V5XPPA.js");
350
+ const { runRecords } = await import("./record-UU4WPT2Z.js");
341
351
  runRecords({ type: opts.type, workitem: opts.workitem, json: opts.json === true });
342
352
  });
343
353
  const rules = program.command("rules").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC801\uC6A9\uB418\uB294 \uADDC\uCE59\uC744 \uBD05\uB2C8\uB2E4").enablePositionalOptions();
344
354
  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) => {
345
- const { runRules } = await import("./rules-ASJFXFGG.js");
355
+ const { runRules } = await import("./rules-QDAC6BUX.js");
346
356
  runRules({ scope: opts.scope, json: opts.json === true });
347
357
  });
348
358
  rules.command("edit").description("$EDITOR \uB85C \uADDC\uCE59 \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4").action(async () => {
349
- const { runRules } = await import("./rules-ASJFXFGG.js");
359
+ const { runRules } = await import("./rules-QDAC6BUX.js");
350
360
  runRules({ edit: true });
351
361
  });
352
362
  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(
353
363
  async (gotchaId, opts) => {
354
- const { runRulesPromote } = await import("./rules-ASJFXFGG.js");
364
+ const { runRulesPromote } = await import("./rules-QDAC6BUX.js");
355
365
  runRulesPromote(gotchaId, {
356
366
  applies: opts.applies,
357
367
  counter: opts.counter,
@@ -360,16 +370,16 @@ function buildProgram() {
360
370
  }
361
371
  );
362
372
  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) => {
363
- const { runGotchas } = await import("./gotchas-UEZG3HVO.js");
373
+ const { runGotchas } = await import("./gotchas-HF5Q2MOA.js");
364
374
  runGotchas({ json: opts.json === true });
365
375
  });
366
376
  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) => {
367
- const { runMetrics } = await import("./metrics-SOYVRSNM.js");
377
+ const { runMetrics } = await import("./metrics-6SZQAG3C.js");
368
378
  runMetrics({ json: opts.json === true, compare: opts.compare === true });
369
379
  });
370
380
  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(
371
381
  async (opts) => {
372
- const { runLoopSummary } = await import("./loop-summary-L4UTUOPY.js");
382
+ const { runLoopSummary } = await import("./loop-summary-RZQBTKVY.js");
373
383
  runLoopSummary({
374
384
  workitem: opts.workitem,
375
385
  workitems: parseWorkitemsOption(opts.workitems),
@@ -379,7 +389,7 @@ function buildProgram() {
379
389
  }
380
390
  );
381
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) => {
382
- const { runFeedback } = await import("./feedback-TPITVUZL.js");
392
+ const { runFeedback } = await import("./feedback-K3P6667T.js");
383
393
  runFeedback({
384
394
  json: opts.json === true,
385
395
  area: opts.area,
@@ -388,12 +398,12 @@ function buildProgram() {
388
398
  });
389
399
  });
390
400
  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) => {
391
- const { runChangelogDraft } = await import("./changelog-HZMH3RPD.js");
401
+ const { runChangelogDraft } = await import("./changelog-UBIZQHQO.js");
392
402
  runChangelogDraft({ workitem: opts.workitem, json: opts.json === true });
393
403
  });
394
404
  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(
395
405
  async (criterion, opts) => {
396
- const { runCommit } = await import("./commit-SU6CTBU3.js");
406
+ const { runCommit } = await import("./commit-I5ULIUHW.js");
397
407
  await runCommit(criterion, {
398
408
  start: opts.start,
399
409
  message: opts.message,
@@ -403,12 +413,12 @@ function buildProgram() {
403
413
  }
404
414
  );
405
415
  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) => {
406
- const { runReview } = await import("./review-42SXUBZE.js");
416
+ const { runReview } = await import("./review-DXSGXZLX.js");
407
417
  await runReview(range, { json: opts.json === true, base: opts.base });
408
418
  });
409
419
  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(
410
420
  async (type, opts) => {
411
- const { runRecord } = await import("./record-V6V5XPPA.js");
421
+ const { runRecord } = await import("./record-UU4WPT2Z.js");
412
422
  await runRecord(type, {
413
423
  json: opts.json,
414
424
  file: opts.file,
@@ -422,7 +432,7 @@ function buildProgram() {
422
432
  "\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)"
423
433
  ).action(
424
434
  async (opts) => {
425
- const { runVerify } = await import("./verify-ZVZCJ3LH.js");
435
+ const { runVerify } = await import("./verify-LOTTWOHB.js");
426
436
  await runVerify({
427
437
  json: opts.json === true,
428
438
  bail: opts.bail === true,
@@ -433,17 +443,17 @@ function buildProgram() {
433
443
  }
434
444
  );
435
445
  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) => {
436
- const { runHoldRecheck } = await import("./hold-recheck-STHUHCOU.js");
446
+ const { runHoldRecheck } = await import("./hold-recheck-CBSGGRBM.js");
437
447
  await runHoldRecheck({ json: opts.json === true });
438
448
  });
439
449
  const state = program.command("state", { hidden: true }).description("\uB8E8\uD504 \uC0C1\uD0DC\uB97C \uC77D\uACE0 \uC501\uB2C8\uB2E4");
440
450
  state.command("get").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
441
- const { runStateGet } = await import("./state-6TNG2EC5.js");
451
+ const { runStateGet } = await import("./state-DZC7JVEK.js");
442
452
  runStateGet({ json: opts.json === true });
443
453
  });
444
454
  state.command("set").requiredOption("--json <patch>", "\uBD80\uBD84 \uAC31\uC2E0 (JSON \uBB38\uC790\uC5F4)").action(async (opts) => {
445
- const { runStateSet } = await import("./state-6TNG2EC5.js");
446
- const { hasApprovedGate1 } = await import("./record-V6V5XPPA.js");
455
+ const { runStateSet } = await import("./state-DZC7JVEK.js");
456
+ const { hasApprovedGate1 } = await import("./record-UU4WPT2Z.js");
447
457
  runStateSet(opts.json, {
448
458
  // phase:'loop' 로의 전이는 이 워크아이템에 "승인된" 게이트1 레코드가 있을
449
459
  // 때만 허용한다(0.6.3, 적대검증 발견). 예전엔 gate:1 레코드의 존재만 봐서
@@ -454,7 +464,7 @@ function buildProgram() {
454
464
  });
455
465
  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(
456
466
  async (opts) => {
457
- const m = await import("./evolve-SQJ5LIE4.js");
467
+ const m = await import("./evolve-MXGX33GB.js");
458
468
  if (opts.collect && opts.record) {
459
469
  process.stderr.write("\n --collect \uC640 --record \uB294 \uB3D9\uC2DC\uC5D0 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n");
460
470
  process.exit(1);
@@ -473,7 +483,7 @@ function buildProgram() {
473
483
  }
474
484
  );
475
485
  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) => {
476
- const m = await import("./record-V6V5XPPA.js");
486
+ const m = await import("./record-UU4WPT2Z.js");
477
487
  m.runDeferSummary({ json: opts.json === true, workitem: opts.workitem });
478
488
  });
479
489
  program.action((opts, command) => {
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  protectedFilesMessage
3
- } from "./chunk-NOU677FX.js";
3
+ } from "./chunk-K2JV27JR.js";
4
4
  import {
5
5
  hasApprovedGate1
6
- } from "./chunk-6F4VAVKF.js";
6
+ } from "./chunk-4BUPV5VU.js";
7
7
  import {
8
8
  getCriterion,
9
9
  loadState,
10
10
  setCriterion,
11
11
  writeState
12
- } from "./chunk-UNANHUG3.js";
12
+ } from "./chunk-WOH6WML7.js";
13
13
  import {
14
14
  loadConfig,
15
15
  resolveProjectRoot,
16
16
  run
17
- } from "./chunk-7D4T7HFK.js";
18
- import "./chunk-7TMAQRJS.js";
17
+ } from "./chunk-SNWJWX5K.js";
18
+ import "./chunk-SJG22DAK.js";
19
19
  import {
20
20
  caps,
21
21
  feedback,
22
22
  makeColors,
23
23
  makeTokens,
24
24
  signal
25
- } from "./chunk-SUF5ISJM.js";
25
+ } from "./chunk-FGHILN3D.js";
26
26
 
27
27
  // src/commands/commit.ts
28
28
  import fs from "fs";