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