@litfamily/litopencode 1.0.21 → 1.0.23

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/docs/reference.md CHANGED
@@ -359,27 +359,51 @@ package exports its TUI module as `@litfamily/litopencode/tui` (`dist/tui.js`, p
359
359
 
360
360
  What it draws:
361
361
 
362
- - A phase chip on the right of the prompt's agent/model row: a `🔥 LIT` pill, then `PLAN` ›
363
- `WORK n/m` › `REVIEW` pills and a five-segment `▰▱` bar. When the row is narrower it drops the
364
- labels first: `🔥` with the current and next phase, then `🔥` with only the count. The room comes
365
- from OpenCode's stored sidebar setting and the session kind (a child session has no sidebar); when
366
- the setting cannot be read yet, the chip assumes the sidebar is open and stays narrower.
362
+ - A workflow map, so the session shows where it is in the LIT workflow and not only which skill
363
+ fired. Each session follows one stage table:
364
+ - the main chain `interview › plan › work n/m › review › done`;
365
+ - lit-loop's criterion loop, the same stages with the work stage reading `criterion n/m`, when a
366
+ lit-loop or litgoal session counts goal criteria rather than tasks;
367
+ - a litresearch run, `decompose › wave n › expand › verify › synthesis`, while the session runs
368
+ litresearch or a run folder it wrote is still open.
369
+
370
+ A stage the session moved past without doing reads `–`: a bounded `lit-task` makes no plan, so its
371
+ plan stage is skipped, never claimed, and finishing every todo without `review-work` leaves review
372
+ at `–`. A review command, a review blocker or a goal completed through the ledger CLI (whose gate
373
+ includes review) marks it done; a goal the agent marks complete in a hand-written `goals.json`
374
+ passed no gate and leaves review at `–`. Stages behind the running one take their place on a colour
375
+ ramp from the theme's primary through secondary to accent; stages ahead are muted.
376
+ - A map chip on the right of the prompt's agent/model row: a `🔥 LIT` pill and the breadcrumb around
377
+ the running stage, `plan ✓ › WORK ▰▰▰▱▱▱▱ 3/7 › review`, with the running stage as a filled pill and a
378
+ seven-cell bar. When the row has room the live step follows (`⠹ bash · 0:48`). Narrower, it drops
379
+ the live step, then the brand and the stage behind (`🔥` with the running and next stage and a
380
+ five-cell bar), then everything but `🔥` and the count. The room comes from OpenCode's stored
381
+ sidebar setting and the session kind (a child session has no sidebar); when the setting cannot be
382
+ read yet, the chip assumes the sidebar is open and stays narrower.
367
383
  - A mission panel at the top of the session sidebar, in a 36-cell rounded box titled
368
- `🔥 LIT ▸ <PHASE>` with `n/m criteria` in the bottom border. The border carries the state: the
384
+ `🔥 LIT ▸ <STAGE>` with `n/m criteria` in the bottom border. The border carries the state: the
369
385
  theme accent while working, the warning colour on a warning, the success colour when complete.
370
386
  Inside: a two-row `LIT` with the discipline and a status beside it, the goal title in bold, the
371
- phase line, a gradient bar drawn in eighth-cell blocks over a thin rule, the next todo or open
372
- criterion, the criteria, warnings, and the last four evidence events.
387
+ vertical stage map (`◆` behind, `◉` running in bold, `⚑` flagged, `◇` ahead, joined by `┃`
388
+ connectors in the ramp colour up to the running stage and dotted `┆` after it, with the saved
389
+ plan's task count beside plan and `iter k` beside work), a gradient bar drawn in eighth-cell
390
+ blocks over a thin rule, the detail line `└ task 3 · next ▸ <item>` (a research run shows its claim
391
+ and verified counts instead), the live step, the criteria, warnings, and the last four evidence
392
+ events.
393
+ - The live step: the name of the tool the session is running and how long it has run, read from the
394
+ running tool part's name and start time. Its input (commands, paths, arguments) is never read or
395
+ shown. It appears only while the turn runs.
373
396
  - A band: a status card along the bottom of the screen (OpenCode's `app_bottom` slot), under the
374
397
  session and the sidebar alike. It is on screen for the whole session, lit or not, and keeps the
375
398
  same four rows idle or working, so the prompt never moves:
376
399
  - the top border carries `🔥 LIT · <discipline>` on the left and the phase on the right
377
400
  (`● WORK`, `⚑ review blocked`, `✓ COMPLETE`, or `○ IDLE` before any lit turn and whenever the
378
401
  session is not running a turn, read from OpenCode's own `session.status`; at rest no step is lit);
379
- - row one is the phase track `PLAN ━ WORK ━ REVIEW` in the chip's pills, an eighth-block bar,
380
- `n/m criteria` for the goal and the next task. While a warning is open, `⚑ <text>` takes the
381
- place of `▸ next`. An idle session shows the dim track with the project's last goal, or
382
- `add lit to a prompt to start`;
402
+ - row one is the whole stage map as a breadcrumb, `interview – ━ plan ✓ ━ WORK 3/7 ─ review ─ done`,
403
+ an eighth-block bar, `n/m criteria` for the goal (left out in the criterion loop, whose stage
404
+ already counts them), the live step and the next task. While a
405
+ warning is open, `⚑ <text>` takes the place of the live step and `▸ next`. An idle session shows
406
+ the dim map with the project's last goal, or `add lit to a prompt to start`;
383
407
  - row two holds the skill chips: every LitOpenCode skill that fired in the session, several at
384
408
  once. Skills fired by the current request are bright accent pills while it runs, and a new one
385
409
  gets a short light sweep as it arrives; when the turn ends they dim and stay as the recent list,
@@ -388,8 +412,8 @@ What it draws:
388
412
  (`⟳ 7m`) and the git branch.
389
413
 
390
414
  A subagent session shows its parent's card with `· in lane`; the home screen has no band. When the
391
- card is narrow each row drops its own low-priority parts: the track drops the next-task text, bar
392
- width, the bar, the criteria count and then the step labels; the bottom border drops the branch,
415
+ card is narrow each row drops its own low-priority parts: the track drops the live step and
416
+ next-task text, bar width, the bar, the criteria count and then every stage but the running one; the bottom border drops the branch,
393
417
  then the time, then the context use. It never wraps. The completion moment plays here too.
394
418
  - A line under the home prompt, after OpenCode's tips: `🔥 lit ready · last: <goal> ✓ n/m`. It
395
419
  appears only when the project ledger holds a goal.
@@ -399,9 +423,14 @@ What it draws:
399
423
  - One toast per refresh for a gate event: plan saved or not saved, goal set, criterion passed,
400
424
  review blocker opened or resolved, and completion. Several events at once collapse into the most
401
425
  urgent one.
402
- - A completion moment of at most 1.2 seconds when the goal completes or every todo is done: the
403
- border turns green, the bar fills, `WORK` then `REVIEW` turn done, a light sweep crosses the brand,
404
- embers rise through the panel and `COMPLETE` pops in with a small overshoot before it settles.
426
+ - A completion moment of at most 1.2 seconds when the goal completes, every todo is done or a
427
+ research run writes its report: the border turns green, the bar fills, the stage that was running
428
+ and each stage after it turn done 60 ms apart, a light sweep crosses the brand, embers rise
429
+ through the panel and `COMPLETE` pops in with a small overshoot before it settles.
430
+ - An opt-in finish alert at that same moment, through OpenCode's `attention.notify`: a desktop
431
+ notification and the host's `done` sound. It is off by default; see the options below. OpenCode's
432
+ own `attention` setting still decides whether anything plays, and it is off until tui.json turns
433
+ it on (`"attention": { "enabled": true }`); without it OpenCode answers `attention_disabled`.
405
434
 
406
435
  Where the data comes from, with nothing new written for the TUI:
407
436
 
@@ -412,17 +441,40 @@ Where the data comes from, with nothing new written for the TUI:
412
441
  "Current" means fired since the latest user message while the session is busy.
413
442
  - The `metadata.litopencode` marks this plugin already attaches to user-message parts when `lit`
414
443
  activates a mode or a command runs (`save-plan` included). A session with no mark is idle and the
415
- chip and panel stay hidden, even on the default `lit-loop` agent.
444
+ chip and panel stay hidden, even on the default `lit-loop` agent. Slash commands such as
445
+ `/litresearch` mark the map through OpenCode's command hook, so they need the command files
446
+ `litopencode install` writes; with only a `plugin` entry OpenCode sends them as plain text, which
447
+ marks nothing.
416
448
  - OpenCode's todo list for the session (progress and next item), its status (retry), pending
417
449
  permissions and questions, and context use from the last assistant message (amber at 75%).
418
450
  - `.litopencode/litgoal/lit-loop/goals.json` under the project root. Symbolic links and files over
419
- 1 MiB are ignored. A goal last updated before the session's first lit turn is treated as earlier
420
- work and left out.
451
+ 1 MiB are ignored. Besides the ledger shape the CLI writes (`goals` with `activeGoalId`), it reads
452
+ what an agent writes by hand: one goal at the top, a goal under `goal`, or the last entry of a
453
+ `goals` list, with `completed` or `done` counted as a passed criterion or a complete goal. A goal
454
+ last updated before the session's first lit turn is treated as earlier work and left out. Its
455
+ checkpoints are the loop family's iterations.
456
+ - `.litopencode/litgoal/lit-loop/work-schema-3.json`, the bounded work record `/start-work` keeps,
457
+ when it belongs to this session and is not cancelled: its `work.progressed` turns are the work
458
+ stage's iterations, and the plan file it names gives the task count and next item from its
459
+ column-zero `- [ ]` / `- [x]` rows. The plan is read only when it is a regular file inside the
460
+ project root.
461
+ - The most recently written run folder under `.litopencode/litgoal/lit-loop/research/`: a
462
+ `report.md` means synthesis, a claim in `claim-graph.jsonl` with a gate result (`verified`,
463
+ `abstained`, `unresolved`, `refuted`) means verify, a `journal.md` whose last heading starts with
464
+ `EXPAND` means expand, claims mean a wave (numbered by the highest `wave` field or `## Wave`
465
+ heading), and nothing yet means decompose. A folder last written before the session's first lit
466
+ turn is earlier work.
467
+ - The running tool part of the session's latest assistant message, for the live step: its tool name
468
+ and `time.start` only.
421
469
 
422
470
  Motion runs on a short frame timer only while a transition plays and stops afterwards: new rows
423
471
  and pills slide in with ease-out-back, 160 ms each and 60 ms apart; the bar fills in 300 ms; a
424
- warning row slides in over 220 ms and colours cross-fade in 140 ms; the light sweep takes 400 ms. While a
425
- lit session is open the panel re-reads the goal ledger every two seconds; an idle session does not.
472
+ warning row slides in over 220 ms and colours cross-fade in 140 ms; the light sweep takes 400 ms.
473
+ When the map moves forward, the connectors between the old and new stage fill top to bottom 60 ms
474
+ apart and the running pill flashes once; nothing loops. The live step changes in place without a
475
+ slide-in, and while a tool runs its elapsed time ticks once a second; with no tool running there is
476
+ no timer at all. While a lit session is open the panel re-reads the goal ledger, the bounded work
477
+ record and the research folder every two seconds; an idle session does not.
426
478
  Colours come from the active OpenCode theme. Set `["@litfamily/litopencode@<version>", { "motion": false }]`
427
479
  in `tui.json` to keep it static, or turn the plugin off by id `litopencode` in OpenCode's plugin
428
480
  manager or with `plugin_enabled`.
@@ -434,6 +486,13 @@ Band options go in the same options object:
434
486
  the next task and the goal. While a goal exists the card keeps a fixed four rows, so a warning arriving or
435
487
  clearing never moves the prompt. The card is off by default.
436
488
 
489
+ The finish alert goes in the same object and is off unless set:
490
+
491
+ - `{ "notify": true }` sends a desktop notification and plays the `done` sound when a mission
492
+ completes.
493
+ - `{ "notify": { "sound": false } }` keeps only the notification; `{ "notify": { "desktop": false } }`
494
+ keeps only the sound.
495
+
437
496
  A ledger written from another terminal (for example `litopencode record-evidence`) raises no
438
497
  OpenCode event, so the shared two-second ledger check picks it up; the chip, the panel and the band
439
498
  then change on the same frame clock.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litfamily/litopencode",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "Workflow plugin for OpenCode: add lit to a prompt and the work is planned, built, checked and written down so the next session can pick it up.",
5
5
  "keywords": [
6
6
  "opencode",