agent-work-loop 0.6.36 → 0.6.43

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 (54) hide show
  1. package/dist/{brief-GQRHGJQN.js → brief-GOGJDLY7.js} +5 -5
  2. package/dist/{changelog-HZMH3RPD.js → changelog-NLYZTB44.js} +5 -5
  3. package/dist/{chunk-7TMAQRJS.js → chunk-7CPPZX6X.js} +1 -1
  4. package/dist/{chunk-FKBBGXGF.js → chunk-E6MULIMV.js} +5 -5
  5. package/dist/{chunk-NOU677FX.js → chunk-I3WXYD5C.js} +1 -1
  6. package/dist/{chunk-PFHPIVTO.js → chunk-I5SS6HFR.js} +49 -35
  7. package/dist/{chunk-CMIR4BRM.js → chunk-I5WWLNA6.js} +37 -9
  8. package/dist/{chunk-EEGOR4Y3.js → chunk-JQV65R3M.js} +5 -5
  9. package/dist/{chunk-7D4T7HFK.js → chunk-JR6MKCC4.js} +126 -6
  10. package/dist/{chunk-OJ7YO3MY.js → chunk-MBEY33YA.js} +2 -2
  11. package/dist/{chunk-QMECHIJW.js → chunk-OVLA5DET.js} +99 -21
  12. package/dist/{chunk-6F4VAVKF.js → chunk-QVP5DUND.js} +3 -3
  13. package/dist/{chunk-DNE7BN76.js → chunk-SKLSWS5J.js} +2 -2
  14. package/dist/{chunk-4ZLARTXS.js → chunk-SOUTYYY4.js} +47 -3
  15. package/dist/{chunk-AXES5NVJ.js → chunk-TQUXHTN5.js} +4 -4
  16. package/dist/{chunk-UNANHUG3.js → chunk-UJ6CK5HC.js} +2 -2
  17. package/dist/{chunk-SUF5ISJM.js → chunk-UNAASSQ4.js} +3 -1
  18. package/dist/{chunk-R4EH3WJE.js → chunk-YC23SNVC.js} +5 -5
  19. package/dist/cli.js +40 -40
  20. package/dist/{commit-SU6CTBU3.js → commit-BKN3ZJI7.js} +6 -6
  21. package/dist/{config-Z4G5SBWJ.js → config-DX3WL2JT.js} +9 -3
  22. package/dist/{doctor-UOOJSZBL.js → doctor-TBRNCTDS.js} +8 -8
  23. package/dist/{evolve-SQJ5LIE4.js → evolve-EMGWWWY3.js} +7 -7
  24. package/dist/{feedback-TPITVUZL.js → feedback-ZAAM5VYL.js} +5 -5
  25. package/dist/{gotchas-UEZG3HVO.js → gotchas-6ZWHP5Z6.js} +7 -7
  26. package/dist/{hold-recheck-NZ3OIG4W.js → hold-recheck-K7DV64KW.js} +16 -16
  27. package/dist/{init-AVVD77XM.js → init-3X6NVQQW.js} +2 -2
  28. package/dist/lane-QPZE7KYI.js +41 -0
  29. package/dist/{loop-summary-L4UTUOPY.js → loop-summary-CD6EIAHZ.js} +49 -7
  30. package/dist/{metrics-SOYVRSNM.js → metrics-VVXCH6TR.js} +4 -4
  31. package/dist/{record-V6V5XPPA.js → record-AC7LPU36.js} +5 -5
  32. package/dist/{remove-3XNAPKK6.js → remove-C64QRELY.js} +15 -15
  33. package/dist/{review-USI34ZYP.js → review-VCVPT3P6.js} +13 -13
  34. package/dist/{rules-ASJFXFGG.js → rules-2DIFP7K2.js} +8 -8
  35. package/dist/{state-6TNG2EC5.js → state-UIHEGC5P.js} +4 -4
  36. package/dist/status-2PUVZCFI.js +40 -0
  37. package/dist/{update-3AYB3V4I.js → update-KCQWDQDF.js} +2 -2
  38. package/dist/{verify-WXSV5HLL.js → verify-Y36JFAA7.js} +10 -10
  39. package/dist/version-check-XLXT7NSG.js +14 -0
  40. package/dist/{work-XHJFZIIL.js → work-HHTQTJZW.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 +93 -4
  44. package/engine/skills/claude/awl-pipeline/templates/README.md +44 -0
  45. package/engine/skills/claude/awl-pipeline/templates/watch-exec.sh +62 -0
  46. package/engine/skills/claude/awl-pipeline/templates/watch-inputs.sh +63 -0
  47. package/engine/skills/claude/awl-pipeline-exec/SKILL.md +58 -94
  48. package/engine/skills/claude/awl-pipeline-plan/SKILL.md +9 -3
  49. package/engine/skills/claude/awl-pipeline-review/SKILL.md +40 -71
  50. package/engine/version.json +1 -1
  51. package/package.json +1 -1
  52. package/dist/lane-65DSOYQ3.js +0 -41
  53. package/dist/status-M7KSA2KA.js +0 -40
  54. package/dist/version-check-JFXBDFFV.js +0 -14
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  computeUpdateAvailable,
4
4
  readCachedLatestVersion,
5
5
  version
6
- } from "./chunk-DNE7BN76.js";
6
+ } from "./chunk-SKLSWS5J.js";
7
7
  import {
8
8
  caps,
9
9
  gradient,
@@ -14,7 +14,7 @@ import {
14
14
  sectionBox,
15
15
  signal,
16
16
  visibleWidth
17
- } from "./chunk-SUF5ISJM.js";
17
+ } from "./chunk-UNAASSQ4.js";
18
18
 
19
19
  // src/program.ts
20
20
  import { Command } from "commander";
@@ -222,14 +222,14 @@ function buildProgram() {
222
222
  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
223
  ` : "").option("--examples", "\uC790\uC8FC \uC4F0\uB294 \uBA85\uB839 \uC608\uC2DC\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4").showHelpAfterError();
224
224
  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");
225
+ const { runInit } = await import("./init-3X6NVQQW.js");
226
226
  await runInit({ yes: opts.yes === true });
227
227
  });
228
228
  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
229
  "--archive",
230
230
  "(--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
231
  ).action(async (opts) => {
232
- const { runStatus } = await import("./status-M7KSA2KA.js");
232
+ const { runStatus } = await import("./status-2PUVZCFI.js");
233
233
  await runStatus({
234
234
  json: opts.json === true,
235
235
  pipeline: opts.pipeline === true,
@@ -237,15 +237,15 @@ function buildProgram() {
237
237
  });
238
238
  });
239
239
  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");
240
+ const { runBrief } = await import("./brief-GOGJDLY7.js");
241
241
  await runBrief({ today: opts.today === true, date: opts.date, json: opts.json === true });
242
242
  });
243
243
  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-UOOJSZBL.js");
244
+ const { runDoctor } = await import("./doctor-TBRNCTDS.js");
245
245
  await runDoctor({ json: opts.json === true });
246
246
  });
247
247
  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-JFXBDFFV.js");
248
+ const { runVersionCheck } = await import("./version-check-XLXT7NSG.js");
249
249
  await runVersionCheck({ json: opts.json === true });
250
250
  });
251
251
  program.command("update").description(
@@ -254,12 +254,12 @@ function buildProgram() {
254
254
  "-l, --local",
255
255
  "\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
256
  ).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");
257
+ const { runUpdate } = await import("./update-KCQWDQDF.js");
258
258
  runUpdate(opts);
259
259
  });
260
260
  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
261
  async (opts) => {
262
- const { runRemove } = await import("./remove-3XNAPKK6.js");
262
+ const { runRemove } = await import("./remove-C64QRELY.js");
263
263
  await runRemove({
264
264
  yes: opts.yes === true,
265
265
  project: opts.project === true,
@@ -271,22 +271,22 @@ function buildProgram() {
271
271
  );
272
272
  const config = program.command("config").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC124\uC815\uC744 \uBD05\uB2C8\uB2E4 (TTY \uBA74 \uC218\uC815\uB3C4)");
273
273
  config.action(async () => {
274
- const { runConfig } = await import("./config-Z4G5SBWJ.js");
274
+ const { runConfig } = await import("./config-DX3WL2JT.js");
275
275
  await runConfig();
276
276
  });
277
277
  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
278
  async (key, value, opts) => {
279
- const { runConfigSet } = await import("./config-Z4G5SBWJ.js");
279
+ const { runConfigSet } = await import("./config-DX3WL2JT.js");
280
280
  await runConfigSet(key, value, { force: opts.force === true });
281
281
  }
282
282
  );
283
283
  const work = program.command("work").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4");
284
284
  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-XHJFZIIL.js");
285
+ const { runWorkList } = await import("./work-HHTQTJZW.js");
286
286
  runWorkList({ json: opts.json === true });
287
287
  });
288
288
  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-XHJFZIIL.js");
289
+ const { runWorkList } = await import("./work-HHTQTJZW.js");
290
290
  runWorkList({ json: opts.json === true });
291
291
  });
292
292
  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 +294,7 @@ function buildProgram() {
294
294
  "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
295
  ).option("--experiment <json>", '\uC2E4\uD5D8 \uCF00\uC774\uC2A4 \uBA54\uD0C0 JSON (\uC608: {"model":"lite","mode":"loop"})').action(
296
296
  async (id, description, opts) => {
297
- const { runWorkNew } = await import("./work-XHJFZIIL.js");
297
+ const { runWorkNew } = await import("./work-HHTQTJZW.js");
298
298
  const parsedExp = parseExperimentOption(opts.experiment);
299
299
  if (!parsedExp.ok) {
300
300
  process.stderr.write(`
@@ -306,52 +306,52 @@ function buildProgram() {
306
306
  }
307
307
  );
308
308
  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-XHJFZIIL.js");
309
+ const { runWorkSwitch } = await import("./work-HHTQTJZW.js");
310
310
  await runWorkSwitch(id);
311
311
  });
312
312
  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-XHJFZIIL.js");
313
+ const { runWorkAbandon } = await import("./work-HHTQTJZW.js");
314
314
  runWorkAbandon(id);
315
315
  });
316
316
  work.command("done <id>").description(
317
317
  "\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
318
  ).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-XHJFZIIL.js");
319
+ const { runWorkDone } = await import("./work-HHTQTJZW.js");
320
320
  await runWorkDone(id, { force: opts.force === true });
321
321
  });
322
322
  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
323
  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-65DSOYQ3.js");
324
+ const { runLaneList } = await import("./lane-QPZE7KYI.js");
325
325
  await runLaneList({ json: opts.json === true });
326
326
  });
327
327
  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-65DSOYQ3.js");
328
+ const { runLaneNew } = await import("./lane-QPZE7KYI.js");
329
329
  await runLaneNew(name, description);
330
330
  });
331
331
  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-65DSOYQ3.js");
332
+ const { runLaneList } = await import("./lane-QPZE7KYI.js");
333
333
  await runLaneList({ json: opts.json === true });
334
334
  });
335
335
  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-65DSOYQ3.js");
336
+ const { runLaneRemove } = await import("./lane-QPZE7KYI.js");
337
337
  await runLaneRemove(name, { force: opts.force === true });
338
338
  });
339
339
  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");
340
+ const { runRecords } = await import("./record-AC7LPU36.js");
341
341
  runRecords({ type: opts.type, workitem: opts.workitem, json: opts.json === true });
342
342
  });
343
343
  const rules = program.command("rules").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC801\uC6A9\uB418\uB294 \uADDC\uCE59\uC744 \uBD05\uB2C8\uB2E4").enablePositionalOptions();
344
344
  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");
345
+ const { runRules } = await import("./rules-2DIFP7K2.js");
346
346
  runRules({ scope: opts.scope, json: opts.json === true });
347
347
  });
348
348
  rules.command("edit").description("$EDITOR \uB85C \uADDC\uCE59 \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4").action(async () => {
349
- const { runRules } = await import("./rules-ASJFXFGG.js");
349
+ const { runRules } = await import("./rules-2DIFP7K2.js");
350
350
  runRules({ edit: true });
351
351
  });
352
352
  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
353
  async (gotchaId, opts) => {
354
- const { runRulesPromote } = await import("./rules-ASJFXFGG.js");
354
+ const { runRulesPromote } = await import("./rules-2DIFP7K2.js");
355
355
  runRulesPromote(gotchaId, {
356
356
  applies: opts.applies,
357
357
  counter: opts.counter,
@@ -360,16 +360,16 @@ function buildProgram() {
360
360
  }
361
361
  );
362
362
  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");
363
+ const { runGotchas } = await import("./gotchas-6ZWHP5Z6.js");
364
364
  runGotchas({ json: opts.json === true });
365
365
  });
366
366
  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");
367
+ const { runMetrics } = await import("./metrics-VVXCH6TR.js");
368
368
  runMetrics({ json: opts.json === true, compare: opts.compare === true });
369
369
  });
370
370
  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
371
  async (opts) => {
372
- const { runLoopSummary } = await import("./loop-summary-L4UTUOPY.js");
372
+ const { runLoopSummary } = await import("./loop-summary-CD6EIAHZ.js");
373
373
  runLoopSummary({
374
374
  workitem: opts.workitem,
375
375
  workitems: parseWorkitemsOption(opts.workitems),
@@ -379,7 +379,7 @@ function buildProgram() {
379
379
  }
380
380
  );
381
381
  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");
382
+ const { runFeedback } = await import("./feedback-ZAAM5VYL.js");
383
383
  runFeedback({
384
384
  json: opts.json === true,
385
385
  area: opts.area,
@@ -388,12 +388,12 @@ function buildProgram() {
388
388
  });
389
389
  });
390
390
  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");
391
+ const { runChangelogDraft } = await import("./changelog-NLYZTB44.js");
392
392
  runChangelogDraft({ workitem: opts.workitem, json: opts.json === true });
393
393
  });
394
394
  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
395
  async (criterion, opts) => {
396
- const { runCommit } = await import("./commit-SU6CTBU3.js");
396
+ const { runCommit } = await import("./commit-BKN3ZJI7.js");
397
397
  await runCommit(criterion, {
398
398
  start: opts.start,
399
399
  message: opts.message,
@@ -403,12 +403,12 @@ function buildProgram() {
403
403
  }
404
404
  );
405
405
  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-USI34ZYP.js");
406
+ const { runReview } = await import("./review-VCVPT3P6.js");
407
407
  await runReview(range, { json: opts.json === true, base: opts.base });
408
408
  });
409
409
  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
410
  async (type, opts) => {
411
- const { runRecord } = await import("./record-V6V5XPPA.js");
411
+ const { runRecord } = await import("./record-AC7LPU36.js");
412
412
  await runRecord(type, {
413
413
  json: opts.json,
414
414
  file: opts.file,
@@ -422,7 +422,7 @@ function buildProgram() {
422
422
  "\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
423
  ).action(
424
424
  async (opts) => {
425
- const { runVerify } = await import("./verify-WXSV5HLL.js");
425
+ const { runVerify } = await import("./verify-Y36JFAA7.js");
426
426
  await runVerify({
427
427
  json: opts.json === true,
428
428
  bail: opts.bail === true,
@@ -433,17 +433,17 @@ function buildProgram() {
433
433
  }
434
434
  );
435
435
  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-NZ3OIG4W.js");
436
+ const { runHoldRecheck } = await import("./hold-recheck-K7DV64KW.js");
437
437
  await runHoldRecheck({ json: opts.json === true });
438
438
  });
439
439
  const state = program.command("state", { hidden: true }).description("\uB8E8\uD504 \uC0C1\uD0DC\uB97C \uC77D\uACE0 \uC501\uB2C8\uB2E4");
440
440
  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");
441
+ const { runStateGet } = await import("./state-UIHEGC5P.js");
442
442
  runStateGet({ json: opts.json === true });
443
443
  });
444
444
  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");
445
+ const { runStateSet } = await import("./state-UIHEGC5P.js");
446
+ const { hasApprovedGate1 } = await import("./record-AC7LPU36.js");
447
447
  runStateSet(opts.json, {
448
448
  // phase:'loop' 로의 전이는 이 워크아이템에 "승인된" 게이트1 레코드가 있을
449
449
  // 때만 허용한다(0.6.3, 적대검증 발견). 예전엔 gate:1 레코드의 존재만 봐서
@@ -454,7 +454,7 @@ function buildProgram() {
454
454
  });
455
455
  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
456
  async (opts) => {
457
- const m = await import("./evolve-SQJ5LIE4.js");
457
+ const m = await import("./evolve-EMGWWWY3.js");
458
458
  if (opts.collect && opts.record) {
459
459
  process.stderr.write("\n --collect \uC640 --record \uB294 \uB3D9\uC2DC\uC5D0 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n");
460
460
  process.exit(1);
@@ -473,7 +473,7 @@ function buildProgram() {
473
473
  }
474
474
  );
475
475
  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");
476
+ const m = await import("./record-AC7LPU36.js");
477
477
  m.runDeferSummary({ json: opts.json === true, workitem: opts.workitem });
478
478
  });
479
479
  program.action((opts, command) => {
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  protectedFilesMessage
3
- } from "./chunk-NOU677FX.js";
3
+ } from "./chunk-I3WXYD5C.js";
4
4
  import {
5
5
  hasApprovedGate1
6
- } from "./chunk-6F4VAVKF.js";
6
+ } from "./chunk-QVP5DUND.js";
7
7
  import {
8
8
  getCriterion,
9
9
  loadState,
10
10
  setCriterion,
11
11
  writeState
12
- } from "./chunk-UNANHUG3.js";
12
+ } from "./chunk-UJ6CK5HC.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-JR6MKCC4.js";
18
+ import "./chunk-7CPPZX6X.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-UNAASSQ4.js";
26
26
 
27
27
  // src/commands/commit.ts
28
28
  import fs from "fs";
@@ -1,4 +1,5 @@
1
1
  import {
2
+ DEFAULT_FEEDBACK_PATH,
2
3
  KNOWN_LANGUAGES,
3
4
  KNOWN_NAMING_CONVENTIONS,
4
5
  SETTABLE_KEYS,
@@ -6,17 +7,20 @@ import {
6
7
  applyConfigValue,
7
8
  interactiveEditMenu,
8
9
  loadConfig,
10
+ multiProjectFooter,
9
11
  parseConfigKey,
10
12
  parseVerifyValue,
11
13
  requireConfig,
12
14
  resolveProjectRoot,
15
+ resolveProjectScope,
13
16
  runConfig,
14
17
  runConfigSet,
15
18
  validateConfig
16
- } from "./chunk-7D4T7HFK.js";
17
- import "./chunk-7TMAQRJS.js";
18
- import "./chunk-SUF5ISJM.js";
19
+ } from "./chunk-JR6MKCC4.js";
20
+ import "./chunk-7CPPZX6X.js";
21
+ import "./chunk-UNAASSQ4.js";
19
22
  export {
23
+ DEFAULT_FEEDBACK_PATH,
20
24
  KNOWN_LANGUAGES,
21
25
  KNOWN_NAMING_CONVENTIONS,
22
26
  SETTABLE_KEYS,
@@ -24,10 +28,12 @@ export {
24
28
  applyConfigValue,
25
29
  interactiveEditMenu,
26
30
  loadConfig,
31
+ multiProjectFooter,
27
32
  parseConfigKey,
28
33
  parseVerifyValue,
29
34
  requireConfig,
30
35
  resolveProjectRoot,
36
+ resolveProjectScope,
31
37
  runConfig,
32
38
  runConfigSet,
33
39
  validateConfig
@@ -8,14 +8,14 @@ import {
8
8
  gitHasCommits,
9
9
  renderText,
10
10
  runDoctor
11
- } from "./chunk-PFHPIVTO.js";
12
- import "./chunk-AXES5NVJ.js";
13
- import "./chunk-DNE7BN76.js";
14
- import "./chunk-6F4VAVKF.js";
15
- import "./chunk-UNANHUG3.js";
16
- import "./chunk-7D4T7HFK.js";
17
- import "./chunk-7TMAQRJS.js";
18
- import "./chunk-SUF5ISJM.js";
11
+ } from "./chunk-I5SS6HFR.js";
12
+ import "./chunk-TQUXHTN5.js";
13
+ import "./chunk-SKLSWS5J.js";
14
+ import "./chunk-QVP5DUND.js";
15
+ import "./chunk-UJ6CK5HC.js";
16
+ import "./chunk-JR6MKCC4.js";
17
+ import "./chunk-7CPPZX6X.js";
18
+ import "./chunk-UNAASSQ4.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-FKBBGXGF.js";
17
- import "./chunk-4ZLARTXS.js";
18
- import "./chunk-6F4VAVKF.js";
19
- import "./chunk-UNANHUG3.js";
20
- import "./chunk-7D4T7HFK.js";
21
- import "./chunk-7TMAQRJS.js";
22
- import "./chunk-SUF5ISJM.js";
16
+ } from "./chunk-E6MULIMV.js";
17
+ import "./chunk-SOUTYYY4.js";
18
+ import "./chunk-QVP5DUND.js";
19
+ import "./chunk-UJ6CK5HC.js";
20
+ import "./chunk-JR6MKCC4.js";
21
+ import "./chunk-7CPPZX6X.js";
22
+ import "./chunk-UNAASSQ4.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-6F4VAVKF.js";
4
- import "./chunk-UNANHUG3.js";
5
- import "./chunk-7D4T7HFK.js";
6
- import "./chunk-7TMAQRJS.js";
3
+ } from "./chunk-QVP5DUND.js";
4
+ import "./chunk-UJ6CK5HC.js";
5
+ import "./chunk-JR6MKCC4.js";
6
+ import "./chunk-7CPPZX6X.js";
7
7
  import {
8
8
  caps,
9
9
  makeColors,
10
10
  sectionBox,
11
11
  signal
12
- } from "./chunk-SUF5ISJM.js";
12
+ } from "./chunk-UNAASSQ4.js";
13
13
 
14
14
  // src/commands/feedback.ts
15
15
  var SEVERITY_RANK = { high: 0, medium: 1, low: 2 };
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  loadGotchaList
3
- } from "./chunk-FKBBGXGF.js";
4
- import "./chunk-4ZLARTXS.js";
5
- import "./chunk-6F4VAVKF.js";
6
- import "./chunk-UNANHUG3.js";
7
- import "./chunk-7D4T7HFK.js";
8
- import "./chunk-7TMAQRJS.js";
3
+ } from "./chunk-E6MULIMV.js";
4
+ import "./chunk-SOUTYYY4.js";
5
+ import "./chunk-QVP5DUND.js";
6
+ import "./chunk-UJ6CK5HC.js";
7
+ import "./chunk-JR6MKCC4.js";
8
+ import "./chunk-7CPPZX6X.js";
9
9
  import {
10
10
  caps,
11
11
  makeColors,
12
12
  sectionBox
13
- } from "./chunk-SUF5ISJM.js";
13
+ } from "./chunk-UNAASSQ4.js";
14
14
 
15
15
  // src/commands/gotchas.ts
16
16
  function loadGotchas() {
@@ -1,29 +1,29 @@
1
1
  import {
2
2
  pipelineLanes
3
- } from "./chunk-QMECHIJW.js";
4
- import "./chunk-EEGOR4Y3.js";
5
- import "./chunk-CMIR4BRM.js";
3
+ } from "./chunk-OVLA5DET.js";
4
+ import "./chunk-JQV65R3M.js";
5
+ import "./chunk-I5WWLNA6.js";
6
6
  import "./chunk-D5OINC3G.js";
7
- import "./chunk-R4EH3WJE.js";
8
- import "./chunk-NOU677FX.js";
9
- import "./chunk-PFHPIVTO.js";
10
- import "./chunk-AXES5NVJ.js";
11
- import "./chunk-DNE7BN76.js";
12
- import "./chunk-OJ7YO3MY.js";
13
- import "./chunk-FKBBGXGF.js";
14
- import "./chunk-4ZLARTXS.js";
15
- import "./chunk-6F4VAVKF.js";
16
- import "./chunk-UNANHUG3.js";
7
+ import "./chunk-YC23SNVC.js";
8
+ import "./chunk-I3WXYD5C.js";
9
+ import "./chunk-I5SS6HFR.js";
10
+ import "./chunk-TQUXHTN5.js";
11
+ import "./chunk-SKLSWS5J.js";
12
+ import "./chunk-MBEY33YA.js";
13
+ import "./chunk-E6MULIMV.js";
14
+ import "./chunk-SOUTYYY4.js";
15
+ import "./chunk-QVP5DUND.js";
16
+ import "./chunk-UJ6CK5HC.js";
17
17
  import {
18
18
  resolveProjectRoot
19
- } from "./chunk-7D4T7HFK.js";
20
- import "./chunk-7TMAQRJS.js";
19
+ } from "./chunk-JR6MKCC4.js";
20
+ import "./chunk-7CPPZX6X.js";
21
21
  import {
22
22
  caps,
23
23
  makeColors,
24
24
  sectionBox,
25
25
  signal
26
- } from "./chunk-SUF5ISJM.js";
26
+ } from "./chunk-UNAASSQ4.js";
27
27
 
28
28
  // src/commands/hold-recheck.ts
29
29
  import fs from "fs";
@@ -45,8 +45,8 @@ import {
45
45
  writeConfig,
46
46
  writeSkillsVersionStamp,
47
47
  writeState
48
- } from "./chunk-7TMAQRJS.js";
49
- import "./chunk-SUF5ISJM.js";
48
+ } from "./chunk-7CPPZX6X.js";
49
+ import "./chunk-UNAASSQ4.js";
50
50
  export {
51
51
  LANG_OPTIONS,
52
52
  LANG_VALUES,
@@ -0,0 +1,41 @@
1
+ import {
2
+ WORKTREES_DIR,
3
+ branchOf,
4
+ collectLanes,
5
+ laneBranchMap,
6
+ parseWorktreeBranches,
7
+ renderLaneList,
8
+ runLaneList,
9
+ runLaneNew,
10
+ runLaneRemove,
11
+ unmergedCommitCount,
12
+ worktreeUntracked
13
+ } from "./chunk-JQV65R3M.js";
14
+ import "./chunk-I5WWLNA6.js";
15
+ import "./chunk-D5OINC3G.js";
16
+ import "./chunk-YC23SNVC.js";
17
+ import "./chunk-I3WXYD5C.js";
18
+ import "./chunk-I5SS6HFR.js";
19
+ import "./chunk-TQUXHTN5.js";
20
+ import "./chunk-SKLSWS5J.js";
21
+ import "./chunk-MBEY33YA.js";
22
+ import "./chunk-E6MULIMV.js";
23
+ import "./chunk-SOUTYYY4.js";
24
+ import "./chunk-QVP5DUND.js";
25
+ import "./chunk-UJ6CK5HC.js";
26
+ import "./chunk-JR6MKCC4.js";
27
+ import "./chunk-7CPPZX6X.js";
28
+ import "./chunk-UNAASSQ4.js";
29
+ export {
30
+ WORKTREES_DIR,
31
+ branchOf,
32
+ collectLanes,
33
+ laneBranchMap,
34
+ parseWorktreeBranches,
35
+ renderLaneList,
36
+ runLaneList,
37
+ runLaneNew,
38
+ runLaneRemove,
39
+ unmergedCommitCount,
40
+ worktreeUntracked
41
+ };
@@ -6,24 +6,27 @@ import {
6
6
  computeDurationMs,
7
7
  fmtDuration,
8
8
  loadGenerations
9
- } from "./chunk-4ZLARTXS.js";
9
+ } from "./chunk-SOUTYYY4.js";
10
10
  import {
11
11
  collectDeferred,
12
12
  readRecords
13
- } from "./chunk-6F4VAVKF.js";
13
+ } from "./chunk-QVP5DUND.js";
14
14
  import {
15
15
  loadState
16
- } from "./chunk-UNANHUG3.js";
16
+ } from "./chunk-UJ6CK5HC.js";
17
17
  import {
18
- requireConfig
19
- } from "./chunk-7D4T7HFK.js";
20
- import "./chunk-7TMAQRJS.js";
18
+ loadConfig,
19
+ multiProjectFooter,
20
+ requireConfig,
21
+ resolveProjectScope
22
+ } from "./chunk-JR6MKCC4.js";
23
+ import "./chunk-7CPPZX6X.js";
21
24
  import {
22
25
  caps,
23
26
  makeColors,
24
27
  padEndDisplay,
25
28
  sectionBox
26
- } from "./chunk-SUF5ISJM.js";
29
+ } from "./chunk-UNAASSQ4.js";
27
30
 
28
31
  // src/commands/loop-summary.ts
29
32
  function gateAuto(rec) {
@@ -325,6 +328,45 @@ function runLoopSummary(opts) {
325
328
  runLoopSummaryBatch(opts);
326
329
  return;
327
330
  }
331
+ const scope = resolveProjectScope();
332
+ if (scope.mode === "multi" && scope.projects) {
333
+ const c = caps();
334
+ const color = makeColors(c.color);
335
+ const perProject = scope.projects.map((p) => {
336
+ const loaded = loadConfig(p.path);
337
+ const projectName = loaded.config?.project;
338
+ const state2 = loadState(p.path);
339
+ const current2 = typeof state2.workitem === "string" ? state2.workitem : null;
340
+ const workitem2 = opts.workitem ?? current2;
341
+ const records2 = workitem2 ? readRecords({ workitem: workitem2 }).filter((r) => r.project === projectName) : [];
342
+ const criteria2 = criteriaFor(state2, workitem2, current2);
343
+ const costDelta2 = computeCostDelta(
344
+ startCostOf(state2, workitem2, current2),
345
+ readCostSnapshot(opts.usagePath)
346
+ );
347
+ const summary2 = assembleLoopSummary(workitem2, records2, criteria2, costDelta2);
348
+ return { name: p.name, path: p.path, summary: summary2 };
349
+ });
350
+ if (opts.json) {
351
+ const projects = perProject.map(({ name, path, summary: summary2 }) => ({
352
+ name,
353
+ path,
354
+ ...summaryToJson(summary2)
355
+ }));
356
+ process.stdout.write(`${JSON.stringify({ multiProject: true, projects }, null, 2)}
357
+ `);
358
+ return;
359
+ }
360
+ const blocks = perProject.map(
361
+ ({ name, path, summary: summary2 }) => `${color.bold(`\uD504\uB85C\uC81D\uD2B8: ${name} (${path})`)}
362
+ ${renderLoopSummary(summary2, c)}`
363
+ );
364
+ process.stdout.write(`${blocks.join("\n\n")}
365
+ `);
366
+ process.stdout.write(`${multiProjectFooter(scope.projects, "awl loop-summary", c)}
367
+ `);
368
+ return;
369
+ }
328
370
  const { projectRoot } = requireConfig();
329
371
  const state = loadState(projectRoot);
330
372
  const current = typeof state.workitem === "string" ? state.workitem : null;