@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/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 observedHeading = el('h3', { text: S.observed.heading }, [reported()]);
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.sections.summary, false, children);
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), null),
14552
- tile(S.effort.codex, e.active_ms.codex === null && union !== null ? S.effort.noCodex : hm(e.active_ms.codex), null),
14553
- tile(S.effort.perDay, hm(perDay), perWorked === null ? null : fill(S.effort.perDayWorked, { time: hm(perWorked) })),
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' }, [el('b', { text: s.id }), s.meaning]);
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
- [heading(b), summary(b), effort(b, false), matrix(b), lanes(b), measures(b), composition(b), turns(b),
14760
- recordRepos(b), recordComponents(b), footnotes(b)]
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, 7, 8];
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
- children = children.concat(group(S.record.uncounted, c.uncounted, S.record.none));
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.72.0","commit":"f92df50","committedAt":"2026-10-20T12:15:21+09:00"}');
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
  }