Commit Graph
18 Commits
Author SHA1 Message Date
z80 40b2d534a0 fix(coding-agent): surface todo progress in the collapsed panel
While the agent worked through a plan, every sub-todo rendered unchecked
no matter how far along the run was: the phase header highlighted, the
task rows below it looked untouched. Three separate causes, all on the
collapsed path that is the default view.

`selectCollapsedTodos` dropped every closed row while a phase held open
work, so finishing a task only ever *removed* a line — the panel never
rendered a checked box until the whole phase settled. That also made the
card's completion animation dead code: `details.completedTasks` drives a
14-frame strike reveal at 65ms with a component render per tick, against
a row the viewport had already discarded. The existing animation test
missed it by asserting on `expanded: true`.

The viewport now keeps the newest closed task as a checked lead row,
additive to the open-task cap so it never evicts open work, and the
strike sweep lands where users actually see it.

Second, the card gave a `done/total` count to every collapsed untouched
phase but not to the active one, so the phase being worked in was the
single phase reporting no progress. Extracted `formatPhaseProgress` and
put it on every phase header.

Third, the todo auto-clear (`tasks.todoClearDelay`, default 60s) armed
on any list holding a closed task and physically deleted those tasks
from the HUD's copy. An in-flight phase at `3/4` silently became `0/1`
sixty seconds later, fully-closed phases vanished, and stage roman
numerals renumbered off the filtered index — until the next `todo` call
restored the real snapshot. It now fires only once the whole list is
settled, which is the case the setting exists for; the walking viewport
already hides closed rows while work remains.

Progress counters also count closed tasks rather than only completed
ones. The viewport hides abandoned tasks too, so counting only
completions left a phase reading permanently stuck.
2026-08-07 19:49:31 -04:00
can1357 2da45f9f9a chore: aligned blocked-todo test, added robomp sandbox scaffolding
- Aligned the blocked-todo reconciliation test with the debounced
  subagent-lifecycle observer on main (fake timers + 100ms advance).
- Carries in-progress robomp queue/sandbox/config scaffolding from the
  shared worktree (.env.example, config.py, queue.py, sandbox.py).
2026-07-23 17:35:35 +02:00
can1357 154d4ace9f Merge PR #4448: feat(todo): add blocked status with block/unblock ops (@mattwilkinsonn)
# Conflicts:
#	packages/coding-agent/src/modes/interactive-mode.ts
#	packages/coding-agent/src/prompts/tools/todo.md
2026-07-23 17:32:43 +02:00
Matt Wilkinsonandseal 2f5f4eb91a fix(todo): one-line blocker notes and reconcile blocked subagent todos
Two review findings on the blocked-todo support:

- A blocker `reason` with an embedded newline corrupted the Markdown
  round-trip: `phasesToMarkdown` writes the note as a trailing HTML comment
  on one checklist line, so a newline split it across two lines — the first
  an unclosed `<!-- blocker: …`, the second an unrecognized-syntax error —
  losing the reason on `/todo edit` and export/import. Normalize the reason
  to a single line (collapse whitespace runs) at the `block` op source, so
  the round-trip, HUD, and summary consumers all stay one-line-safe.

- The todo prompt now directs the agent to `block` a task waiting on
  another agent, but `#reconcileTodosWithSubagents` only auto-completed
  pending/in_progress todos. A todo blocked on a detached subagent would
  stay blocked after that subagent completed, and since blocked todos are
  excluded from the stop reminder it stranded silently. Include `blocked`
  in the reconciliation (a matching subagent completing is the unblock
  signal) and drop the now-stale blocker note when completing.

Both paths are revert-proven by new regression tests.

Co-Authored-By: seal <noreply@sealedsecurity.com>
2026-07-10 02:26:47 -04:00
can1357 f75b758c61 test(coding-agent): flushed coalesced observer sync before todo assertion
- Subagent lifecycle reconciliation now runs behind the 100ms observer UI
  coalescing timer; the test advances fake timers instead of asserting
  synchronously after emit.
2026-07-06 09:34:57 +02:00
can1357 727bcf1401 fix: drop superseded /btw todo-reminder HUD clear
Main removed the floating todoReminderContainer in 112317bc8 (todo
reminders are now anchored inside the scrollback transcript and reset
by renderInitialMessages({clearTerminalHistory: true})), so the added
this.todoReminderContainer.clear() references a property that no longer
exists post-merge, failing typecheck and throwing on every /btw branch.
Revert the interactive-mode hunk and its test, and reword the changelog
entry to cover only the goal-mode todo context fixes.
2026-07-02 10:30:12 +02:00
can1357 4940a053ad merge PR #3777: Fix todo HUD and goal context follow-ups (@jeffscottward) 2026-07-02 10:30:12 +02:00
can1357 112317bc8e fix(coding-agent): resolved duplicate todo reminders in terminal scrollback
- Anchors the incomplete-todo reminder block inside the scrollback transcript instead of a floating live container.
- Eliminates duplicate reminder copies piling up in terminal scrollback during terminal reflows.
- Removes the dedicated `todoReminderContainer` and simplifies state synchronization on todo reload.
- Updates tests to verify sequential reminders commit as separate blocks and are left intact when tools succeed.
2026-06-30 23:32:58 +02:00
Jeff Scott Ward ac4d624495 fix: address todo follow-up review 2026-06-29 11:58:40 -04:00
Jeff Scott Ward f2b760a163 fix: clear todo reminder on btw branch 2026-06-29 11:58:40 -04:00
Jeff Scott Ward 917d2834a3 fix: address todo reminder review feedback 2026-06-28 12:03:06 -04:00
Jeff Scott Ward 9a9dc88f43 fix: address todo HUD review feedback 2026-06-28 11:16:30 -04:00
Jeff Scott Ward dd917046d8 fix: anchor todo reminder HUD 2026-06-28 11:09:16 -04:00
can1357 53276368cb feat(coding-agent): redesigned the Todo HUD as a connector tree
- Redesigned the Todo HUD as a connector tree with fixed-budget stage previews.
- Anchored status and HUD containers to prevent redundant UI elements in terminal scrollback.
- Implemented tree-based rendering for project phases and tasks while removing dynamic border rules.
- Upgraded `sherpa-onnx` and related packages to support current infrastructure.
2026-06-27 04:14:13 +02:00
roboomp 8a2c90a48c fix(coding-agent): anchored todo HUD with borders and progress header
The sticky panel above the editor rendered as ambient text:

  Todos

  └ I. Foundation

  └ ☐ ...

so users perceived the bordered tool-result block in chat as the

only todo display. Once that result scrolled into history they

concluded the list 'isn't anchored'.

Bracket the panel with dim horizontal rules (matching BtwPanel /

OmfgPanel) and inline progress + active-phase pointer in the header

(`Todos · 2/7 done · I/III Foundation`) so the persistent HUD reads

as a real panel and stays self-describing without scrolling back.

Fixes #3213
2026-06-21 22:38:20 +00:00
can1357 9d457f73d9 test: migrated test imports to package subpath exports
- Replaced relative `../src` imports with `@oh-my-pi/pi-ai` and `@oh-my-pi/pi-agent-core` subpaths.
2026-06-08 19:03:55 +02:00
can1357 dc4aeb7b88 refactor(coding-agent): renamed todo_write tool to todo
- Renamed `TodoWriteTool` to `TodoTool` and its source/prompt files.
- Updated tool registration, schema, renderers, and gating to `todo`.
- Adjusted cursor provider native tool names and tests to match.
- Renamed strike-animation constants and `todo-error-reminder` type.
2026-06-04 02:45:30 +02:00
roboomp 1ed0b8d740 fix(tui): honored todo clear delay
Applied tasks.todoClearDelay to the interactive Todos panel without mutating the session todo history used by the model.

Added regression coverage for instant, delayed, and disabled auto-clear behavior.

Fixes #1644
2026-06-01 15:12:53 +00:00