@basou/cli 0.72.0 → 0.73.0
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/index.js +60 -19
- package/dist/index.js.map +1 -1
- package/dist/program.js +60 -19
- package/dist/program.js.map +1 -1
- package/package.json +2 -2
package/dist/program.js
CHANGED
|
@@ -13969,6 +13969,17 @@ var BOARD_HTML = `<!doctype html>
|
|
|
13969
13969
|
table.matrix th.stage { font-weight: 400; font-size: 12px; text-align: center; min-width: 64px; }
|
|
13970
13970
|
table.matrix th.stage b { display: block; font-size: 13px; }
|
|
13971
13971
|
table.matrix td.cell { text-align: center; font-size: 18px; line-height: 1; }
|
|
13972
|
+
.stage-meanings { display: none; list-style: none; padding: 0; margin: 6px 0 0; font-size: 12px; color: var(--fg-2); }
|
|
13973
|
+
/* Six stages do not fit beside their meanings below about 600px: each is
|
|
13974
|
+
drawn by its id, the meanings are listed under the matrix, and a lane
|
|
13975
|
+
name wraps. After the rules above, which it overrides. */
|
|
13976
|
+
@media (max-width: 600px) {
|
|
13977
|
+
table.matrix th.stage { min-width: 0; padding: 4px 2px; }
|
|
13978
|
+
table.matrix th.stage .meaning { display: none; }
|
|
13979
|
+
table.matrix td.cell { font-size: 16px; padding: 4px 2px; }
|
|
13980
|
+
table.matrix th:first-child { max-width: 10em; overflow-wrap: anywhere; }
|
|
13981
|
+
.stage-meanings { display: block; }
|
|
13982
|
+
}
|
|
13972
13983
|
.st::before { display: inline-block; width: 1.2em; }
|
|
13973
13984
|
.st.done::before { content: "\\25CF"; color: var(--done); }
|
|
13974
13985
|
.st.part::before { content: "\\25D0"; color: var(--done); }
|
|
@@ -14257,6 +14268,13 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14257
14268
|
k, el('div', { class: 'v', text: num(t.value) }), sub === null ? null : el('div', { class: 's', text: sub })
|
|
14258
14269
|
]));
|
|
14259
14270
|
});
|
|
14271
|
+
return section(S.sections.summary, false, [el('div', null, [prose(s.text), reported()]), tiles]);
|
|
14272
|
+
}
|
|
14273
|
+
|
|
14274
|
+
// The observations outside, which the record holds in its summary, in a
|
|
14275
|
+
// section of their own after the lanes.
|
|
14276
|
+
function observations(b) {
|
|
14277
|
+
var s = b.summary;
|
|
14260
14278
|
var observed;
|
|
14261
14279
|
if (s.observed.length === 0) {
|
|
14262
14280
|
observed = el('p', { class: 'muted', text: S.observed.none });
|
|
@@ -14299,17 +14317,11 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14299
14317
|
])
|
|
14300
14318
|
].concat(rows))]);
|
|
14301
14319
|
}
|
|
14302
|
-
var
|
|
14303
|
-
var children = [
|
|
14304
|
-
el('div', null, [prose(s.text), reported()]),
|
|
14305
|
-
tiles,
|
|
14306
|
-
observedHeading,
|
|
14307
|
-
observed
|
|
14308
|
-
];
|
|
14320
|
+
var children = [observed];
|
|
14309
14321
|
if (s.previous_record === 'unreadable' && s.observed.length > 0) {
|
|
14310
14322
|
children.push(el('p', { class: 'muted', text: S.observed.previousUnreadable }));
|
|
14311
14323
|
}
|
|
14312
|
-
return section(S.
|
|
14324
|
+
return section(S.observed.heading, true, children);
|
|
14313
14325
|
}
|
|
14314
14326
|
|
|
14315
14327
|
var SVGNS = 'http://www.w3.org/2000/svg';
|
|
@@ -14541,16 +14553,24 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14541
14553
|
]);
|
|
14542
14554
|
};
|
|
14543
14555
|
var union = e.active_ms.union;
|
|
14556
|
+
// Over the daily rows, today's included (one more than the days elapsed),
|
|
14557
|
+
// so that the first day is a day; the sub-text names the divisor.
|
|
14544
14558
|
var perDay = union === null || !e.period_days ? null : union / e.period_days;
|
|
14545
14559
|
var perWorked = union === null || !e.active_days ? null : union / e.active_days;
|
|
14560
|
+
var perDaySub = [
|
|
14561
|
+
perDay === null ? null : fill(S.effort.perDayOver, { days: num(e.period_days) }),
|
|
14562
|
+
perWorked === null ? null : fill(S.effort.perDayWorked, { time: hm(perWorked) })
|
|
14563
|
+
].filter(function (part) { return part !== null; }).join(DOT);
|
|
14546
14564
|
var tokens = e.sessions_without_tokens ? fill(S.effort.withoutTokens, { n: e.sessions_without_tokens }) : null;
|
|
14565
|
+
// Each tool's time is the union of its sessions' intervals, as Active is.
|
|
14566
|
+
var unionOf = function (ms) { return ms === null ? null : S.effort.toolUnion; };
|
|
14547
14567
|
var tiles = el('div', { class: 'tiles' }, [
|
|
14548
14568
|
tile(S.effort.elapsed, e.elapsed_days === null ? S.effort.notMeasured : fill(S.effort.days, { days: e.elapsed_days }),
|
|
14549
14569
|
e.time_zone === null ? fill(S.effort.from, { date: e.start }) : fill(S.effort.fromZone, { date: e.start, zone: e.time_zone })),
|
|
14550
14570
|
tile(S.effort.active, hm(union), e.active_days === null ? null : fill(S.effort.daysWorked, { n: e.active_days })),
|
|
14551
|
-
tile(S.effort.claude, hm(e.active_ms.claude),
|
|
14552
|
-
tile(S.effort.codex, e.active_ms.codex === null && union !== null ? S.effort.noCodex : hm(e.active_ms.codex),
|
|
14553
|
-
tile(S.effort.perDay, hm(perDay),
|
|
14571
|
+
tile(S.effort.claude, hm(e.active_ms.claude), unionOf(e.active_ms.claude)),
|
|
14572
|
+
tile(S.effort.codex, e.active_ms.codex === null && union !== null ? S.effort.noCodex : hm(e.active_ms.codex), unionOf(e.active_ms.codex)),
|
|
14573
|
+
tile(S.effort.perDay, hm(perDay), perDaySub),
|
|
14554
14574
|
tile(S.effort.outputTokens, num(e.output_tokens), tokens)
|
|
14555
14575
|
]);
|
|
14556
14576
|
var commits = e.commits === null ? S.effort.notMeasured : e.commits.map(function (c) {
|
|
@@ -14588,8 +14608,13 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14588
14608
|
})
|
|
14589
14609
|
)));
|
|
14590
14610
|
}
|
|
14611
|
+
// The meaning is the head's title too, as a screen reader reads it and a
|
|
14612
|
+
// pointer that hovers shows it, and the text beside the id is left out of
|
|
14613
|
+
// what a screen reader reads, so that it is read once.
|
|
14591
14614
|
var head = el('tr', null, [el('th', { text: S.matrix.lane })].concat(x.stages.map(function (s) {
|
|
14592
|
-
return el('th', { class: 'stage'
|
|
14615
|
+
return el('th', { class: 'stage', title: s.meaning }, [
|
|
14616
|
+
el('b', { text: s.id }), el('span', { class: 'meaning', 'aria-hidden': 'true', text: s.meaning })
|
|
14617
|
+
]);
|
|
14593
14618
|
})));
|
|
14594
14619
|
var rows = x.lanes.map(function (lane) {
|
|
14595
14620
|
return el('tr', null, [el('th', { text: lane.name })].concat(lane.cells.map(function (c) {
|
|
@@ -14601,6 +14626,11 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14601
14626
|
})));
|
|
14602
14627
|
});
|
|
14603
14628
|
children.push(el('div', { class: 'scroll' }, [el('table', { class: 'matrix' }, [head].concat(rows))]));
|
|
14629
|
+
// What each stage means, drawn where a narrow screen gives a stage its id
|
|
14630
|
+
// alone (and hidden where the heads say it).
|
|
14631
|
+
children.push(el('ul', { class: 'stage-meanings' }, x.stages.map(function (s) {
|
|
14632
|
+
return el('li', null, [el('b', { text: s.id }), ' ' + s.meaning]);
|
|
14633
|
+
})));
|
|
14604
14634
|
var legend = el('div', { class: 'legend' });
|
|
14605
14635
|
['done', 'part', 'blocked', 'shelved', 'none', 'unverified'].forEach(function (s) {
|
|
14606
14636
|
legend.appendChild(el('span', null, [el('span', { class: 'st ' + s }), stateName(s)]));
|
|
@@ -14756,8 +14786,10 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14756
14786
|
var b = page.board;
|
|
14757
14787
|
// The board's own title, so that boards open in other tabs can be told apart.
|
|
14758
14788
|
document.title = b.heading.title;
|
|
14759
|
-
|
|
14760
|
-
|
|
14789
|
+
// Where each lane stops, right under the summary's tiles, and the lanes,
|
|
14790
|
+
// before the observations and the charts of the effort.
|
|
14791
|
+
[heading(b), summary(b), matrix(b), lanes(b), observations(b), effort(b, false), measures(b), composition(b),
|
|
14792
|
+
turns(b), recordRepos(b), recordComponents(b), footnotes(b)]
|
|
14761
14793
|
.forEach(function (node) { root.appendChild(node); });
|
|
14762
14794
|
}
|
|
14763
14795
|
|
|
@@ -14787,8 +14819,8 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14787
14819
|
// measured no base, ahead or fetch time (drawn as '-') and held the
|
|
14788
14820
|
// commits behind as behind_main.
|
|
14789
14821
|
function reposTable(list, missing, older) {
|
|
14790
|
-
var labels = [S.live.repo, S.live.branch, S.live.head, S.live.lastCommit, S.live.commits, S.live.uncommitted, S.live.base, S.live.behind, S.live.ahead, S.live.fetchedAt];
|
|
14791
|
-
var numeric = [4, 5,
|
|
14822
|
+
var labels = [S.live.repo, S.live.branch, S.live.head, S.live.lastCommit, S.live.commits, S.live.files, S.live.uncommitted, S.live.base, S.live.behind, S.live.ahead, S.live.fetchedAt];
|
|
14823
|
+
var numeric = [4, 5, 6, 8, 9];
|
|
14792
14824
|
var head = el('tr', null, labels.map(function (label, i) { return el('th', { class: numeric.indexOf(i) !== -1 ? 'n' : '', text: label }); }));
|
|
14793
14825
|
var rows = list.map(function (r) {
|
|
14794
14826
|
var at = 'repos[' + r.path + ']';
|
|
@@ -14806,6 +14838,7 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14806
14838
|
el('td', { text: value('head', r.head, function (h) { return h.slice(0, 7); }) }),
|
|
14807
14839
|
el('td', { text: value('last_commit', r.last_commit, when) }),
|
|
14808
14840
|
el('td', { class: 'n', text: num(r.commits) }),
|
|
14841
|
+
el('td', { class: 'n', text: num(r.files) }),
|
|
14809
14842
|
el('td', { class: 'n', text: num(r.uncommitted) }),
|
|
14810
14843
|
el('td', { text: unmeasured('base', r.base, String) }),
|
|
14811
14844
|
el('td', { class: 'n', text: value(older ? 'behind_main' : 'behind', r.behind, num) }),
|
|
@@ -14827,7 +14860,7 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14827
14860
|
return section(S.live.repos, false, children);
|
|
14828
14861
|
}
|
|
14829
14862
|
// The components the record found, by the lanes its registry counts them
|
|
14830
|
-
// in, then those in no lane, those not registered, and those gone.
|
|
14863
|
+
// in, then those in no lane (folded), those not registered, and those gone.
|
|
14831
14864
|
function recordComponents(b) {
|
|
14832
14865
|
var c = b.components;
|
|
14833
14866
|
if (!c) return section(S.live.components, false, [el('p', { class: 'muted', text: S.record.componentsUnread })]);
|
|
@@ -14853,7 +14886,15 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14853
14886
|
c.lanes.forEach(function (lane) {
|
|
14854
14887
|
children = children.concat(group(lane.name, lane.components, S.record.noComponentInLane));
|
|
14855
14888
|
});
|
|
14856
|
-
|
|
14889
|
+
// Those in no lane can be most of them: folded under how many they are.
|
|
14890
|
+
if (c.uncounted.length > 0) {
|
|
14891
|
+
children.push(el('details', null, [
|
|
14892
|
+
el('summary', { text: fill(S.record.uncountedFolded, { n: num(c.uncounted.length) }) }),
|
|
14893
|
+
el('ul', null, c.uncounted.map(item))
|
|
14894
|
+
]));
|
|
14895
|
+
} else {
|
|
14896
|
+
children = children.concat(group(S.record.uncounted, c.uncounted, S.record.none));
|
|
14897
|
+
}
|
|
14857
14898
|
children = children.concat(group(S.record.unacknowledged, c.unacknowledged, S.record.none));
|
|
14858
14899
|
children.push(el('h3', { text: S.record.gone }));
|
|
14859
14900
|
children.push(c.gone === null ? el('p', { class: 'muted', text: S.record.goneUnknown })
|
|
@@ -16520,7 +16561,7 @@ function installExperimentalNotice(program, names = EXPERIMENTAL_COMMANDS, write
|
|
|
16520
16561
|
function readBuildStamp() {
|
|
16521
16562
|
if (false) return void 0;
|
|
16522
16563
|
try {
|
|
16523
|
-
return JSON.parse('{"version":"0.
|
|
16564
|
+
return JSON.parse('{"version":"0.73.0","commit":"fdfa3a5","committedAt":"2026-10-20T20:30:59+09:00"}');
|
|
16524
16565
|
} catch {
|
|
16525
16566
|
return void 0;
|
|
16526
16567
|
}
|