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
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  loadProjectName,
3
3
  readRecords
4
- } from "./chunk-6F4VAVKF.js";
4
+ } from "./chunk-4BUPV5VU.js";
5
5
  import {
6
6
  loadState
7
- } from "./chunk-UNANHUG3.js";
7
+ } from "./chunk-WOH6WML7.js";
8
8
  import {
9
9
  resolveProjectRoot,
10
10
  run
11
- } from "./chunk-7D4T7HFK.js";
12
- import "./chunk-7TMAQRJS.js";
13
- import "./chunk-SUF5ISJM.js";
11
+ } from "./chunk-SNWJWX5K.js";
12
+ import "./chunk-SJG22DAK.js";
13
+ import "./chunk-FGHILN3D.js";
14
14
 
15
15
  // src/commands/brief.ts
16
16
  var KST_OFFSET_MS = 9 * 60 * 60 * 1e3;
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  readRecords
3
- } from "./chunk-6F4VAVKF.js";
3
+ } from "./chunk-4BUPV5VU.js";
4
4
  import {
5
5
  loadState
6
- } from "./chunk-UNANHUG3.js";
6
+ } from "./chunk-WOH6WML7.js";
7
7
  import {
8
8
  resolveProjectRoot
9
- } from "./chunk-7D4T7HFK.js";
10
- import "./chunk-7TMAQRJS.js";
9
+ } from "./chunk-SNWJWX5K.js";
10
+ import "./chunk-SJG22DAK.js";
11
11
  import {
12
12
  caps,
13
13
  signal
14
- } from "./chunk-SUF5ISJM.js";
14
+ } from "./chunk-FGHILN3D.js";
15
15
 
16
16
  // src/commands/changelog.ts
17
17
  function runChangelogDraft(opts) {
@@ -2,14 +2,14 @@ import {
2
2
  acquireLock,
3
3
  loadGotchaList,
4
4
  releaseLock
5
- } from "./chunk-FKBBGXGF.js";
5
+ } from "./chunk-SKJZSRVR.js";
6
6
  import {
7
7
  caps,
8
8
  makeColors,
9
9
  rulesDir,
10
10
  sectionBox,
11
11
  signal
12
- } from "./chunk-SUF5ISJM.js";
12
+ } from "./chunk-FGHILN3D.js";
13
13
 
14
14
  // src/commands/rules.ts
15
15
  import { spawnSync } from "child_process";
@@ -2,37 +2,39 @@ import {
2
2
  DEFAULT_USAGE_PATH,
3
3
  readCostSnapshot
4
4
  } from "./chunk-D5OINC3G.js";
5
+ import {
6
+ parseRuleFile
7
+ } from "./chunk-236TTTK3.js";
8
+ import {
9
+ nextGotchaId
10
+ } from "./chunk-SKJZSRVR.js";
5
11
  import {
6
12
  buildVerifyBaseline,
7
13
  isCheckPassed,
8
14
  runVerifyChecks,
9
15
  writeVerifyBaseline
10
- } from "./chunk-CSBKWYFK.js";
16
+ } from "./chunk-O7PUNJVM.js";
11
17
  import {
12
18
  gitBranch
13
- } from "./chunk-OWILAE4M.js";
14
- import {
15
- parseRuleFile
16
- } from "./chunk-OJ7YO3MY.js";
17
- import {
18
- nextGotchaId
19
- } from "./chunk-FKBBGXGF.js";
19
+ } from "./chunk-L4VWHK4D.js";
20
20
  import {
21
21
  loadProjectName
22
- } from "./chunk-6F4VAVKF.js";
22
+ } from "./chunk-4BUPV5VU.js";
23
23
  import {
24
24
  loadState,
25
25
  migrateState,
26
26
  writeState
27
- } from "./chunk-UNANHUG3.js";
27
+ } from "./chunk-WOH6WML7.js";
28
28
  import {
29
29
  loadConfig,
30
+ multiProjectFooter,
30
31
  resolveProjectRoot,
32
+ resolveProjectScope,
31
33
  run
32
- } from "./chunk-7D4T7HFK.js";
34
+ } from "./chunk-SNWJWX5K.js";
33
35
  import {
34
36
  installClaudeSkill
35
- } from "./chunk-7TMAQRJS.js";
37
+ } from "./chunk-SJG22DAK.js";
36
38
  import {
37
39
  caps,
38
40
  feedback,
@@ -42,7 +44,7 @@ import {
42
44
  makeTokens,
43
45
  sectionBox,
44
46
  signal
45
- } from "./chunk-SUF5ISJM.js";
47
+ } from "./chunk-FGHILN3D.js";
46
48
 
47
49
  // src/commands/work.ts
48
50
  import fs2 from "fs";
@@ -649,6 +651,32 @@ function requireRoot() {
649
651
  return root;
650
652
  }
651
653
  function runWorkList(opts) {
654
+ const scope = resolveProjectScope();
655
+ if (scope.mode === "multi" && scope.projects) {
656
+ const c = caps();
657
+ const color = makeColors(c.color);
658
+ const perProject = scope.projects.map((p) => ({
659
+ name: p.name,
660
+ path: p.path,
661
+ list: summarizeWorkitems(loadState(p.path))
662
+ }));
663
+ if (opts.json) {
664
+ process.stdout.write(
665
+ `${JSON.stringify({ multiProject: true, projects: perProject }, null, 2)}
666
+ `
667
+ );
668
+ return;
669
+ }
670
+ const blocks = perProject.map(
671
+ ({ name, path: path3, list: list2 }) => `${color.bold(`\uD504\uB85C\uC81D\uD2B8: ${name} (${path3})`)}
672
+ ${renderWorkList(list2, c)}`
673
+ );
674
+ process.stdout.write(`${blocks.join("\n\n")}
675
+ `);
676
+ process.stdout.write(`${multiProjectFooter(scope.projects, "awl work list", c)}
677
+ `);
678
+ return;
679
+ }
652
680
  const root = requireRoot();
653
681
  const list = summarizeWorkitems(loadState(root));
654
682
  if (opts.json) {
@@ -1,17 +1,16 @@
1
- import {
2
- WORKTREES_DIR
3
- } from "./chunk-2XQZQP7Z.js";
4
1
  import {
5
2
  readRecords
6
- } from "./chunk-6F4VAVKF.js";
3
+ } from "./chunk-4BUPV5VU.js";
7
4
  import {
8
5
  loadState
9
- } from "./chunk-UNANHUG3.js";
6
+ } from "./chunk-WOH6WML7.js";
10
7
  import {
11
- resolveProjectRoot,
8
+ multiProjectFooter,
9
+ resolveProjectScope,
12
10
  run
13
- } from "./chunk-7D4T7HFK.js";
11
+ } from "./chunk-SNWJWX5K.js";
14
12
  import {
13
+ WORKTREES_DIR,
15
14
  caps,
16
15
  makeColors,
17
16
  makeSymbols,
@@ -21,7 +20,7 @@ import {
21
20
  signal,
22
21
  statusBadge,
23
22
  stringWidth
24
- } from "./chunk-SUF5ISJM.js";
23
+ } from "./chunk-FGHILN3D.js";
25
24
 
26
25
  // src/commands/status.ts
27
26
  import fs2 from "fs";
@@ -410,8 +409,59 @@ function renderPipelineGroups(groups, c) {
410
409
  return sectionBox(`\uD30C\uC774\uD504\uB77C\uC778 ${groups.length}\uAC1C \uB808\uC778`, out, c);
411
410
  }
412
411
  async function runStatus(opts) {
413
- const root = resolveProjectRoot();
414
- if (!root) {
412
+ const scope = resolveProjectScope();
413
+ if (scope.mode === "multi" && scope.projects) {
414
+ const cc = caps();
415
+ const color = makeColors(cc.color);
416
+ if (opts.pipeline === true && opts.archive === true) {
417
+ process.stdout.write(
418
+ ` ${signal(cc, "warn")} --archive \uB294 \uC5EC\uB7EC \uD504\uB85C\uC81D\uD2B8\uC5D0 \uAC78\uCCD0 \uC2E4\uD589\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD574\uB2F9 \uD504\uB85C\uC81D\uD2B8\uB85C \uC774\uB3D9\uD55C \uB4A4 \uC2E4\uD589\uD558\uC138\uC694.
419
+
420
+ `
421
+ );
422
+ }
423
+ if (opts.json) {
424
+ const projects = await Promise.all(
425
+ scope.projects.map(async (p) => {
426
+ if (opts.pipeline === true) {
427
+ return {
428
+ name: p.name,
429
+ path: p.path,
430
+ lanes: [mainTreeGroup(p.path), ...collectPipelineLaneGroups(p.path)]
431
+ };
432
+ }
433
+ const report2 = {
434
+ ...buildStatus(p.path),
435
+ missingAcCommits: await checkMissingAcCommits(p.path)
436
+ };
437
+ return { name: p.name, path: p.path, ...report2 };
438
+ })
439
+ );
440
+ process.stdout.write(`${JSON.stringify({ multiProject: true, projects }, null, 2)}
441
+ `);
442
+ return;
443
+ }
444
+ const blocks = [];
445
+ for (const p of scope.projects) {
446
+ blocks.push(color.bold(`\uD504\uB85C\uC81D\uD2B8: ${p.name} (${p.path})`));
447
+ if (opts.pipeline === true) {
448
+ const groups = [mainTreeGroup(p.path), ...collectPipelineLaneGroups(p.path)];
449
+ blocks.push(renderPipelineGroups(groups, cc));
450
+ } else {
451
+ const report2 = {
452
+ ...buildStatus(p.path),
453
+ missingAcCommits: await checkMissingAcCommits(p.path)
454
+ };
455
+ blocks.push(renderStatus(report2, cc));
456
+ }
457
+ }
458
+ process.stdout.write(`${blocks.join("\n\n")}
459
+ `);
460
+ process.stdout.write(`${multiProjectFooter(scope.projects, "awl status", cc)}
461
+ `);
462
+ return;
463
+ }
464
+ if (scope.mode === "none") {
415
465
  const cc = caps();
416
466
  process.stderr.write(
417
467
  `
@@ -421,6 +471,7 @@ async function runStatus(opts) {
421
471
  );
422
472
  process.exit(1);
423
473
  }
474
+ const root = scope.projectRoot;
424
475
  if (opts.pipeline === true) {
425
476
  let archived;
426
477
  if (opts.archive === true) {
@@ -3,14 +3,14 @@ import {
3
3
  getLatestVersionCached,
4
4
  name,
5
5
  version
6
- } from "./chunk-B76434VM.js";
6
+ } from "./chunk-DNDODLP2.js";
7
7
  import {
8
8
  resolveProjectRoot
9
- } from "./chunk-7D4T7HFK.js";
9
+ } from "./chunk-SNWJWX5K.js";
10
10
  import {
11
11
  packageEngineDir,
12
12
  skillsVersionPath
13
- } from "./chunk-7TMAQRJS.js";
13
+ } from "./chunk-SJG22DAK.js";
14
14
  import {
15
15
  caps,
16
16
  installedEngineVersion,
@@ -19,7 +19,7 @@ import {
19
19
  makeTokens,
20
20
  sectionBox,
21
21
  signal
22
- } from "./chunk-SUF5ISJM.js";
22
+ } from "./chunk-FGHILN3D.js";
23
23
 
24
24
  // src/commands/version-check.ts
25
25
  import fs from "fs";
@@ -2,18 +2,18 @@ import {
2
2
  getCriterion,
3
3
  loadState,
4
4
  writeState
5
- } from "./chunk-UNANHUG3.js";
5
+ } from "./chunk-WOH6WML7.js";
6
6
  import {
7
7
  resolveProjectRoot,
8
8
  run
9
- } from "./chunk-7D4T7HFK.js";
9
+ } from "./chunk-SNWJWX5K.js";
10
10
  import {
11
11
  caps,
12
12
  makeColors,
13
13
  recordsDir,
14
14
  sectionBox,
15
15
  signal
16
- } from "./chunk-SUF5ISJM.js";
16
+ } from "./chunk-FGHILN3D.js";
17
17
 
18
18
  // src/commands/record.ts
19
19
  import crypto from "crypto";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  npmVersionCachePath
3
- } from "./chunk-SUF5ISJM.js";
3
+ } from "./chunk-FGHILN3D.js";
4
4
 
5
5
  // package.json
6
6
  var name = "agent-work-loop";
7
- var version = "0.6.41";
7
+ var version = "0.6.44";
8
8
 
9
9
  // src/core/npm-registry.ts
10
10
  import fs from "fs";
@@ -41,8 +41,10 @@ function npmVersionCachePath() {
41
41
  }
42
42
  function findProjectRoot(cwd = process.cwd()) {
43
43
  let dir = path.resolve(cwd);
44
+ const global = globalRoot();
44
45
  for (; ; ) {
45
- if (fs.existsSync(path.join(dir, ".git")) || fs.existsSync(path.join(dir, ".awl"))) {
46
+ const awlPath = path.join(dir, ".awl");
47
+ if (fs.existsSync(path.join(dir, ".git")) || awlPath !== global && fs.existsSync(awlPath)) {
46
48
  return dir;
47
49
  }
48
50
  const parent = path.dirname(dir);
@@ -55,6 +57,10 @@ function findProjectRoot(cwd = process.cwd()) {
55
57
  `\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. '${path.resolve(cwd)}' \uC704\uCABD\uC5D0\uC11C .git \uB610\uB294 .awl \uC744 \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.`
56
58
  );
57
59
  }
60
+ var WORKTREES_DIR = ".awl-worktrees";
61
+ function isInsideWorktreesDir(p) {
62
+ return path.resolve(p).split(path.sep).includes(WORKTREES_DIR);
63
+ }
58
64
 
59
65
  // src/core/engine.ts
60
66
  import fs2 from "fs";
@@ -541,6 +547,8 @@ export {
541
547
  lockFile,
542
548
  npmVersionCachePath,
543
549
  findProjectRoot,
550
+ WORKTREES_DIR,
551
+ isInsideWorktreesDir,
544
552
  installedEngineVersion,
545
553
  caps,
546
554
  rawModeCapable,
@@ -1,6 +1,9 @@
1
1
  import {
2
- requireConfig
3
- } from "./chunk-7D4T7HFK.js";
2
+ loadConfig,
3
+ multiProjectFooter,
4
+ requireConfig,
5
+ resolveProjectScope
6
+ } from "./chunk-SNWJWX5K.js";
4
7
  import {
5
8
  caps,
6
9
  generationsDir,
@@ -8,7 +11,7 @@ import {
8
11
  padEndDisplay,
9
12
  sectionBox,
10
13
  stringWidth
11
- } from "./chunk-SUF5ISJM.js";
14
+ } from "./chunk-FGHILN3D.js";
12
15
 
13
16
  // src/commands/metrics.ts
14
17
  import fs from "fs";
@@ -169,6 +172,47 @@ function renderCompare(groups, untagged, c) {
169
172
  return sectionBox(`\uCF00\uC774\uC2A4 ${groups.length}\uAC1C \uBE44\uAD50`, out, c);
170
173
  }
171
174
  function runMetrics(opts) {
175
+ const scope = resolveProjectScope();
176
+ if (scope.mode === "multi" && scope.projects) {
177
+ const c = caps();
178
+ const color = makeColors(c.color);
179
+ const perProject = scope.projects.map((p) => {
180
+ const loaded = loadConfig(p.path);
181
+ const generations2 = loaded.config ? loadGenerations(loaded.config.project) : [];
182
+ return { name: p.name, path: p.path, generations: generations2 };
183
+ });
184
+ if (opts.json) {
185
+ const projects = perProject.map(({ name, path: path2, generations: generations2 }) => {
186
+ if (opts.compare === true) {
187
+ const groups = groupByExperiment(generations2);
188
+ const untagged = generations2.filter((g) => g.experiment === void 0).length;
189
+ return { name, path: path2, cases: groups, untagged };
190
+ }
191
+ return { name, path: path2, generations: generations2 };
192
+ });
193
+ process.stdout.write(
194
+ `${JSON.stringify({ multiProject: true, caveat: renderMetricsCaveat(), projects }, null, 2)}
195
+ `
196
+ );
197
+ return;
198
+ }
199
+ const blocks = perProject.map(({ name, path: path2, generations: generations2 }) => {
200
+ const header = color.bold(`\uD504\uB85C\uC81D\uD2B8: ${name} (${path2})`);
201
+ if (opts.compare === true) {
202
+ const groups = groupByExperiment(generations2);
203
+ const untagged = generations2.filter((g) => g.experiment === void 0).length;
204
+ return `${header}
205
+ ${renderCompare(groups, untagged, c)}`;
206
+ }
207
+ return `${header}
208
+ ${renderMetrics(generations2, c)}`;
209
+ });
210
+ process.stdout.write(`${blocks.join("\n\n")}
211
+ `);
212
+ process.stdout.write(`${multiProjectFooter(scope.projects, "awl metrics", c)}
213
+ `);
214
+ return;
215
+ }
172
216
  const { config } = requireConfig();
173
217
  const generations = loadGenerations(config.project);
174
218
  if (opts.compare === true) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  run
3
- } from "./chunk-7D4T7HFK.js";
3
+ } from "./chunk-SNWJWX5K.js";
4
4
 
5
5
  // src/core/protected-files.ts
6
6
  async function changedProtectedFiles(projectRoot, protectedFiles) {