@basou/cli 0.72.0 → 0.73.1
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 +78 -20
- package/dist/index.js.map +1 -1
- package/dist/program.js +78 -20
- package/dist/program.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -13971,6 +13971,25 @@ var BOARD_HTML = `<!doctype html>
|
|
|
13971
13971
|
table.matrix th.stage { font-weight: 400; font-size: 12px; text-align: center; min-width: 64px; }
|
|
13972
13972
|
table.matrix th.stage b { display: block; font-size: 13px; }
|
|
13973
13973
|
table.matrix td.cell { text-align: center; font-size: 18px; line-height: 1; }
|
|
13974
|
+
.stage-meanings { display: none; list-style: none; padding: 0; margin: 6px 0 0; font-size: 12px; color: var(--fg-2); }
|
|
13975
|
+
/* Six stages do not fit beside their meanings below about 600px: each is
|
|
13976
|
+
drawn by its id, the meanings are listed under the matrix, and a lane
|
|
13977
|
+
name wraps. After the rules above, which it overrides. */
|
|
13978
|
+
@media (max-width: 600px) {
|
|
13979
|
+
table.matrix th.stage { min-width: 0; padding: 4px 2px; }
|
|
13980
|
+
table.matrix th.stage .meaning { display: none; }
|
|
13981
|
+
table.matrix td.cell { font-size: 16px; padding: 4px 2px; }
|
|
13982
|
+
table.matrix th:first-child { max-width: 10em; overflow-wrap: anywhere; }
|
|
13983
|
+
.stage-meanings { display: block; }
|
|
13984
|
+
/* A table wider than the page scrolls; its notes wrap at the width of
|
|
13985
|
+
the scroll they are in (100vw where container units are not known,
|
|
13986
|
+
which counts a page scrollbar too) and stay at its left edge, so none
|
|
13987
|
+
is cut off. The cell keeps no right padding, which a sticky note could
|
|
13988
|
+
not cross. */
|
|
13989
|
+
.scroll { container-type: inline-size; }
|
|
13990
|
+
tr.notes td { padding-right: 0; }
|
|
13991
|
+
tr.notes ul.sub { position: sticky; left: 0; max-width: calc(100vw - 32px); max-width: 100cqw; }
|
|
13992
|
+
}
|
|
13974
13993
|
.st::before { display: inline-block; width: 1.2em; }
|
|
13975
13994
|
.st.done::before { content: "\\25CF"; color: var(--done); }
|
|
13976
13995
|
.st.part::before { content: "\\25D0"; color: var(--done); }
|
|
@@ -14259,6 +14278,13 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14259
14278
|
k, el('div', { class: 'v', text: num(t.value) }), sub === null ? null : el('div', { class: 's', text: sub })
|
|
14260
14279
|
]));
|
|
14261
14280
|
});
|
|
14281
|
+
return section(S.sections.summary, false, [el('div', null, [prose(s.text), reported()]), tiles]);
|
|
14282
|
+
}
|
|
14283
|
+
|
|
14284
|
+
// The observations outside, which the record holds in its summary, in a
|
|
14285
|
+
// section of their own after the lanes.
|
|
14286
|
+
function observations(b) {
|
|
14287
|
+
var s = b.summary;
|
|
14262
14288
|
var observed;
|
|
14263
14289
|
if (s.observed.length === 0) {
|
|
14264
14290
|
observed = el('p', { class: 'muted', text: S.observed.none });
|
|
@@ -14301,17 +14327,11 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14301
14327
|
])
|
|
14302
14328
|
].concat(rows))]);
|
|
14303
14329
|
}
|
|
14304
|
-
var
|
|
14305
|
-
var children = [
|
|
14306
|
-
el('div', null, [prose(s.text), reported()]),
|
|
14307
|
-
tiles,
|
|
14308
|
-
observedHeading,
|
|
14309
|
-
observed
|
|
14310
|
-
];
|
|
14330
|
+
var children = [observed];
|
|
14311
14331
|
if (s.previous_record === 'unreadable' && s.observed.length > 0) {
|
|
14312
14332
|
children.push(el('p', { class: 'muted', text: S.observed.previousUnreadable }));
|
|
14313
14333
|
}
|
|
14314
|
-
return section(S.
|
|
14334
|
+
return section(S.observed.heading, true, children);
|
|
14315
14335
|
}
|
|
14316
14336
|
|
|
14317
14337
|
var SVGNS = 'http://www.w3.org/2000/svg';
|
|
@@ -14543,20 +14563,37 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14543
14563
|
]);
|
|
14544
14564
|
};
|
|
14545
14565
|
var union = e.active_ms.union;
|
|
14566
|
+
// Over the daily rows, today's included (one more than the days elapsed),
|
|
14567
|
+
// so that the first day is a day; the sub-text names the divisor.
|
|
14546
14568
|
var perDay = union === null || !e.period_days ? null : union / e.period_days;
|
|
14547
14569
|
var perWorked = union === null || !e.active_days ? null : union / e.active_days;
|
|
14570
|
+
var perDaySub = [
|
|
14571
|
+
perDay === null ? null : fill(S.effort.perDayOver, { days: num(e.period_days) }),
|
|
14572
|
+
perWorked === null ? null : fill(S.effort.perDayWorked, { time: hm(perWorked) })
|
|
14573
|
+
].filter(function (part) { return part !== null; }).join(DOT);
|
|
14548
14574
|
var tokens = e.sessions_without_tokens ? fill(S.effort.withoutTokens, { n: e.sessions_without_tokens }) : null;
|
|
14575
|
+
// Each tool's time is the union of its sessions' intervals, as Active is.
|
|
14576
|
+
var unionOf = function (ms) { return ms === null ? null : S.effort.toolUnion; };
|
|
14549
14577
|
var tiles = el('div', { class: 'tiles' }, [
|
|
14550
14578
|
tile(S.effort.elapsed, e.elapsed_days === null ? S.effort.notMeasured : fill(S.effort.days, { days: e.elapsed_days }),
|
|
14551
14579
|
e.time_zone === null ? fill(S.effort.from, { date: e.start }) : fill(S.effort.fromZone, { date: e.start, zone: e.time_zone })),
|
|
14552
14580
|
tile(S.effort.active, hm(union), e.active_days === null ? null : fill(S.effort.daysWorked, { n: e.active_days })),
|
|
14553
|
-
tile(S.effort.claude, hm(e.active_ms.claude),
|
|
14554
|
-
tile(S.effort.codex, e.active_ms.codex === null && union !== null ? S.effort.noCodex : hm(e.active_ms.codex),
|
|
14555
|
-
tile(S.effort.perDay, hm(perDay),
|
|
14581
|
+
tile(S.effort.claude, hm(e.active_ms.claude), unionOf(e.active_ms.claude)),
|
|
14582
|
+
tile(S.effort.codex, e.active_ms.codex === null && union !== null ? S.effort.noCodex : hm(e.active_ms.codex), unionOf(e.active_ms.codex)),
|
|
14583
|
+
tile(S.effort.perDay, hm(perDay), perDaySub),
|
|
14556
14584
|
tile(S.effort.outputTokens, num(e.output_tokens), tokens)
|
|
14557
14585
|
]);
|
|
14586
|
+
// A repo by its name, as the repos table draws it: a workspace that is
|
|
14587
|
+
// one repo is at the path '.'. The board measured on the spot holds its
|
|
14588
|
+
// repos as a list, a record as { list } or null.
|
|
14589
|
+
var names = Object.create(null);
|
|
14590
|
+
var repos = !b.repos ? [] : Array.isArray(b.repos) ? b.repos : b.repos.list;
|
|
14591
|
+
repos.forEach(function (r) {
|
|
14592
|
+
if (r.name !== null) names[r.path] = r.name;
|
|
14593
|
+
});
|
|
14558
14594
|
var commits = e.commits === null ? S.effort.notMeasured : e.commits.map(function (c) {
|
|
14559
|
-
|
|
14595
|
+
var name = Object.prototype.hasOwnProperty.call(names, c.repo) ? names[c.repo] : c.repo;
|
|
14596
|
+
return name + ' ' + num(c.count);
|
|
14560
14597
|
}).join(' / ');
|
|
14561
14598
|
var children = [tiles, el('p', { class: 'muted', text: fill(S.effort.commits, { list: commits }) })];
|
|
14562
14599
|
var days = e.daily || [];
|
|
@@ -14590,8 +14627,13 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14590
14627
|
})
|
|
14591
14628
|
)));
|
|
14592
14629
|
}
|
|
14630
|
+
// The meaning is the head's title too, as a screen reader reads it and a
|
|
14631
|
+
// pointer that hovers shows it, and the text beside the id is left out of
|
|
14632
|
+
// what a screen reader reads, so that it is read once.
|
|
14593
14633
|
var head = el('tr', null, [el('th', { text: S.matrix.lane })].concat(x.stages.map(function (s) {
|
|
14594
|
-
return el('th', { class: 'stage'
|
|
14634
|
+
return el('th', { class: 'stage', title: s.meaning }, [
|
|
14635
|
+
el('b', { text: s.id }), el('span', { class: 'meaning', 'aria-hidden': 'true', text: s.meaning })
|
|
14636
|
+
]);
|
|
14595
14637
|
})));
|
|
14596
14638
|
var rows = x.lanes.map(function (lane) {
|
|
14597
14639
|
return el('tr', null, [el('th', { text: lane.name })].concat(lane.cells.map(function (c) {
|
|
@@ -14603,6 +14645,11 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14603
14645
|
})));
|
|
14604
14646
|
});
|
|
14605
14647
|
children.push(el('div', { class: 'scroll' }, [el('table', { class: 'matrix' }, [head].concat(rows))]));
|
|
14648
|
+
// What each stage means, drawn where a narrow screen gives a stage its id
|
|
14649
|
+
// alone (and hidden where the heads say it).
|
|
14650
|
+
children.push(el('ul', { class: 'stage-meanings' }, x.stages.map(function (s) {
|
|
14651
|
+
return el('li', null, [el('b', { text: s.id }), ' ' + s.meaning]);
|
|
14652
|
+
})));
|
|
14606
14653
|
var legend = el('div', { class: 'legend' });
|
|
14607
14654
|
['done', 'part', 'blocked', 'shelved', 'none', 'unverified'].forEach(function (s) {
|
|
14608
14655
|
legend.appendChild(el('span', null, [el('span', { class: 'st ' + s }), stateName(s)]));
|
|
@@ -14758,8 +14805,10 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14758
14805
|
var b = page.board;
|
|
14759
14806
|
// The board's own title, so that boards open in other tabs can be told apart.
|
|
14760
14807
|
document.title = b.heading.title;
|
|
14761
|
-
|
|
14762
|
-
|
|
14808
|
+
// Where each lane stops, right under the summary's tiles, and the lanes,
|
|
14809
|
+
// before the observations and the charts of the effort.
|
|
14810
|
+
[heading(b), summary(b), matrix(b), lanes(b), observations(b), effort(b, false), measures(b), composition(b),
|
|
14811
|
+
turns(b), recordRepos(b), recordComponents(b), footnotes(b)]
|
|
14763
14812
|
.forEach(function (node) { root.appendChild(node); });
|
|
14764
14813
|
}
|
|
14765
14814
|
|
|
@@ -14789,8 +14838,8 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14789
14838
|
// measured no base, ahead or fetch time (drawn as '-') and held the
|
|
14790
14839
|
// commits behind as behind_main.
|
|
14791
14840
|
function reposTable(list, missing, older) {
|
|
14792
|
-
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];
|
|
14793
|
-
var numeric = [4, 5,
|
|
14841
|
+
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];
|
|
14842
|
+
var numeric = [4, 5, 6, 8, 9];
|
|
14794
14843
|
var head = el('tr', null, labels.map(function (label, i) { return el('th', { class: numeric.indexOf(i) !== -1 ? 'n' : '', text: label }); }));
|
|
14795
14844
|
var rows = list.map(function (r) {
|
|
14796
14845
|
var at = 'repos[' + r.path + ']';
|
|
@@ -14808,6 +14857,7 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14808
14857
|
el('td', { text: value('head', r.head, function (h) { return h.slice(0, 7); }) }),
|
|
14809
14858
|
el('td', { text: value('last_commit', r.last_commit, when) }),
|
|
14810
14859
|
el('td', { class: 'n', text: num(r.commits) }),
|
|
14860
|
+
el('td', { class: 'n', text: num(r.files) }),
|
|
14811
14861
|
el('td', { class: 'n', text: num(r.uncommitted) }),
|
|
14812
14862
|
el('td', { text: unmeasured('base', r.base, String) }),
|
|
14813
14863
|
el('td', { class: 'n', text: value(older ? 'behind_main' : 'behind', r.behind, num) }),
|
|
@@ -14829,7 +14879,7 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14829
14879
|
return section(S.live.repos, false, children);
|
|
14830
14880
|
}
|
|
14831
14881
|
// The components the record found, by the lanes its registry counts them
|
|
14832
|
-
// in, then those in no lane, those not registered, and those gone.
|
|
14882
|
+
// in, then those in no lane (folded), those not registered, and those gone.
|
|
14833
14883
|
function recordComponents(b) {
|
|
14834
14884
|
var c = b.components;
|
|
14835
14885
|
if (!c) return section(S.live.components, false, [el('p', { class: 'muted', text: S.record.componentsUnread })]);
|
|
@@ -14855,7 +14905,15 @@ var BOARD_HTML = `<!doctype html>
|
|
|
14855
14905
|
c.lanes.forEach(function (lane) {
|
|
14856
14906
|
children = children.concat(group(lane.name, lane.components, S.record.noComponentInLane));
|
|
14857
14907
|
});
|
|
14858
|
-
|
|
14908
|
+
// Those in no lane can be most of them: folded under how many they are.
|
|
14909
|
+
if (c.uncounted.length > 0) {
|
|
14910
|
+
children.push(el('details', null, [
|
|
14911
|
+
el('summary', { text: fill(S.record.uncountedFolded, { n: num(c.uncounted.length) }) }),
|
|
14912
|
+
el('ul', null, c.uncounted.map(item))
|
|
14913
|
+
]));
|
|
14914
|
+
} else {
|
|
14915
|
+
children = children.concat(group(S.record.uncounted, c.uncounted, S.record.none));
|
|
14916
|
+
}
|
|
14859
14917
|
children = children.concat(group(S.record.unacknowledged, c.unacknowledged, S.record.none));
|
|
14860
14918
|
children.push(el('h3', { text: S.record.gone }));
|
|
14861
14919
|
children.push(c.gone === null ? el('p', { class: 'muted', text: S.record.goneUnknown })
|
|
@@ -16522,7 +16580,7 @@ function installExperimentalNotice(program2, names = EXPERIMENTAL_COMMANDS, writ
|
|
|
16522
16580
|
function readBuildStamp() {
|
|
16523
16581
|
if (false) return void 0;
|
|
16524
16582
|
try {
|
|
16525
|
-
return JSON.parse('{"version":"0.
|
|
16583
|
+
return JSON.parse('{"version":"0.73.1","commit":"935628d","committedAt":"2026-10-23T10:43:16+09:00"}');
|
|
16526
16584
|
} catch {
|
|
16527
16585
|
return void 0;
|
|
16528
16586
|
}
|