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.
- package/dist/{brief-GQRHGJQN.js → brief-I2EQVY3F.js} +5 -5
- package/dist/{changelog-HZMH3RPD.js → changelog-UBIZQHQO.js} +5 -5
- package/dist/{chunk-OJ7YO3MY.js → chunk-236TTTK3.js} +2 -2
- package/dist/{chunk-XBUKFMNN.js → chunk-2FQ5HCDI.js} +41 -13
- package/dist/{chunk-G6JX5EYW.js → chunk-3LPCP55B.js} +61 -10
- package/dist/{chunk-HFRQCP26.js → chunk-3N3QH4PK.js} +4 -4
- package/dist/{chunk-6F4VAVKF.js → chunk-4BUPV5VU.js} +3 -3
- package/dist/{chunk-B76434VM.js → chunk-DNDODLP2.js} +2 -2
- package/dist/{chunk-SUF5ISJM.js → chunk-FGHILN3D.js} +9 -1
- package/dist/{chunk-4ZLARTXS.js → chunk-GYXIREXZ.js} +47 -3
- package/dist/{chunk-NOU677FX.js → chunk-K2JV27JR.js} +1 -1
- package/dist/{chunk-OWILAE4M.js → chunk-L4VWHK4D.js} +53 -39
- package/dist/{chunk-2XQZQP7Z.js → chunk-LBZNBCAY.js} +6 -7
- package/dist/{chunk-CSBKWYFK.js → chunk-O7PUNJVM.js} +5 -5
- package/dist/{chunk-7TMAQRJS.js → chunk-SJG22DAK.js} +27 -6
- package/dist/{chunk-FKBBGXGF.js → chunk-SKJZSRVR.js} +5 -5
- package/dist/{chunk-7D4T7HFK.js → chunk-SNWJWX5K.js} +126 -6
- package/dist/{chunk-UNANHUG3.js → chunk-WOH6WML7.js} +2 -2
- package/dist/cli.js +53 -43
- package/dist/{commit-SU6CTBU3.js → commit-I5ULIUHW.js} +6 -6
- package/dist/{config-Z4G5SBWJ.js → config-6VD46H24.js} +9 -3
- package/dist/{doctor-GHWUUAWV.js → doctor-QQLQOP3Y.js} +8 -8
- package/dist/{evolve-SQJ5LIE4.js → evolve-MXGX33GB.js} +7 -7
- package/dist/{feedback-TPITVUZL.js → feedback-K3P6667T.js} +5 -5
- package/dist/{gotchas-UEZG3HVO.js → gotchas-HF5Q2MOA.js} +7 -7
- package/dist/{hold-recheck-STHUHCOU.js → hold-recheck-CBSGGRBM.js} +6 -17
- package/dist/{init-AVVD77XM.js → init-3B4ZRGWY.js} +2 -2
- package/dist/lane-BJ2NJYAH.js +39 -0
- package/dist/{loop-summary-L4UTUOPY.js → loop-summary-RZQBTKVY.js} +49 -7
- package/dist/{metrics-SOYVRSNM.js → metrics-6SZQAG3C.js} +4 -4
- package/dist/{record-V6V5XPPA.js → record-UU4WPT2Z.js} +5 -5
- package/dist/{remove-6VQS4ST6.js → remove-UOAMHEUC.js} +16 -16
- package/dist/{review-42SXUBZE.js → review-DXSGXZLX.js} +15 -15
- package/dist/{rules-ASJFXFGG.js → rules-QDAC6BUX.js} +8 -8
- package/dist/{state-6TNG2EC5.js → state-DZC7JVEK.js} +4 -4
- package/dist/status-ZZEF4NYL.js +29 -0
- package/dist/{update-3AYB3V4I.js → update-CKGPHO5B.js} +2 -2
- package/dist/{verify-ZVZCJ3LH.js → verify-LOTTWOHB.js} +10 -10
- package/dist/version-check-SILVRBMJ.js +14 -0
- package/dist/{work-TVUOH7GQ.js → work-RCV5H7TL.js} +14 -14
- package/engine/skills/claude/awl-loop/SKILL.md +16 -0
- package/engine/skills/claude/awl-loop/reference.md +4 -0
- package/engine/skills/claude/awl-pipeline/SKILL.md +74 -0
- package/engine/skills/claude/awl-pipeline-exec/SKILL.md +8 -1
- package/engine/skills/claude/awl-pipeline-review/SKILL.md +7 -1
- package/engine/version.json +1 -1
- package/package.json +1 -1
- package/dist/lane-JTE45KFF.js +0 -41
- package/dist/status-43UVJLVD.js +0 -40
- package/dist/version-check-OKCLT4BF.js +0 -14
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadProjectName,
|
|
3
3
|
readRecords
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4BUPV5VU.js";
|
|
5
5
|
import {
|
|
6
6
|
loadState
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WOH6WML7.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveProjectRoot,
|
|
10
10
|
run
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
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-
|
|
3
|
+
} from "./chunk-4BUPV5VU.js";
|
|
4
4
|
import {
|
|
5
5
|
loadState
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WOH6WML7.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveProjectRoot
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-SNWJWX5K.js";
|
|
10
|
+
import "./chunk-SJG22DAK.js";
|
|
11
11
|
import {
|
|
12
12
|
caps,
|
|
13
13
|
signal
|
|
14
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
16
|
+
} from "./chunk-O7PUNJVM.js";
|
|
11
17
|
import {
|
|
12
18
|
gitBranch
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
22
|
+
} from "./chunk-4BUPV5VU.js";
|
|
23
23
|
import {
|
|
24
24
|
loadState,
|
|
25
25
|
migrateState,
|
|
26
26
|
writeState
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-WOH6WML7.js";
|
|
28
28
|
import {
|
|
29
29
|
loadConfig,
|
|
30
|
+
multiProjectFooter,
|
|
30
31
|
resolveProjectRoot,
|
|
32
|
+
resolveProjectScope,
|
|
31
33
|
run
|
|
32
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-SNWJWX5K.js";
|
|
33
35
|
import {
|
|
34
36
|
installClaudeSkill
|
|
35
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
3
|
+
} from "./chunk-4BUPV5VU.js";
|
|
7
4
|
import {
|
|
8
5
|
loadState
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WOH6WML7.js";
|
|
10
7
|
import {
|
|
11
|
-
|
|
8
|
+
multiProjectFooter,
|
|
9
|
+
resolveProjectScope,
|
|
12
10
|
run
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
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
|
|
414
|
-
if (
|
|
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-
|
|
6
|
+
} from "./chunk-DNDODLP2.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveProjectRoot
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SNWJWX5K.js";
|
|
10
10
|
import {
|
|
11
11
|
packageEngineDir,
|
|
12
12
|
skillsVersionPath
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
5
|
+
} from "./chunk-WOH6WML7.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveProjectRoot,
|
|
8
8
|
run
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
16
|
+
} from "./chunk-FGHILN3D.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/record.ts
|
|
19
19
|
import crypto from "crypto";
|
|
@@ -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
|
-
|
|
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
|
-
|
|
3
|
-
|
|
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-
|
|
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) {
|