Skip to content

feat(tui): show Dynamic Workflow progress rings - #54

Merged
elkaix merged 11 commits into
mainfrom
feat/dynamic-workflow-progress
Aug 11, 2026
Merged

feat(tui): show Dynamic Workflow progress rings#54
elkaix merged 11 commits into
mainfrom
feat/dynamic-workflow-progress

Conversation

@elkaix

@elkaix elkaix commented Aug 11, 2026

Copy link
Copy Markdown
Member

Related Issue

No linked issue.

Problem

Dynamic Workflow rows showed tool-call counts and idle age under WORK IDLE. These labels looked like completion progress and worker state, but they represented only observed events. Long-running work could therefore look stalled.

What changed

  • Replace WORK IDLE with an indeterminate circular progress glyph and a separate lifecycle STATE column.
  • Keep pending, running, suspended, completed, failed, cancelled, and schema-error outcomes distinct and freeze terminal rows.
  • Preserve responsive compact rendering, lifecycle ordering, result reconciliation, and width-safe task details.
  • Update Dynamic Workflow documentation and focused/integration coverage.

Verification

  • pnpm test: 651 test files passed, 11 skipped; 9,951 tests passed, 71 skipped, 2 todo.
  • Mission Control component: 64/64 tests passed.
  • TUI message flow: 175/175 tests passed.
  • pnpm --filter @pythoughts/pythinker-code run typecheck: passed.
  • pnpm exec tsgo -p apps/pythinker-code/tsconfig.json --noEmit: passed.
  • Live TUI smoke: two-subagent Dynamic Workflow reached 2/2 complete, with running progress frames and fixed DONE rows.

Checklist

  • I have read the CONTRIBUTING document.
  • I have linked a related issue, or explained the problem above.
  • I have added tests that prove my feature works.
  • Ran gen-changesets skill, or this PR needs no changeset.
  • Ran gen-docs skill, or this PR needs no doc update.

Summary by CodeRabbit

  • New Features
    • Redesigned Dynamic Workflow progress display with animated progress indicators and clear lifecycle states.
    • Added responsive status columns that compact or hide details on narrow screens.
    • Completed workflows now show stable completion indicators.
  • Bug Fixes
    • Schema validation errors are now correctly reported as failed workflow outcomes.
    • Suspended workflows resume with accurate status updates.
  • Documentation
    • Updated Dynamic Workflow documentation to describe the new progress indicators, statuses, and responsive layout.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 8 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3f04a7bb-2977-4573-ac8b-c3109d1a75ee

📥 Commits

Reviewing files that changed from the base of the PR and between 6add5e9 and 07d73b2.

📒 Files selected for processing (1)
  • docs/reference/tools.md
📝 Walkthrough

Walkthrough

The Dynamic Workflow TUI replaces work and idle indicators with lifecycle glyphs, shared progress animation, responsive status columns, and compact rows. Tool-call and model-delta handling avoids restarting active members. schema_error results now produce failed rows.

Changes

Dynamic Workflow progress

Layer / File(s) Summary
Lifecycle rendering model
apps/pythinker-code/src/tui/components/messages/dynamic-workflow-mission-control.ts, apps/pythinker-code/src/tui/constant/rendering.ts
The TUI renders animated running glyphs, fixed lifecycle glyphs, centered progress columns, and responsive PROGRESS or STATUS output. Idle and stalled thresholds were removed.
Lifecycle events and result mapping
apps/pythinker-code/src/tui/components/messages/dynamic-workflow-mission-control.ts
Tool-call and model-delta events start only pending or queued members. schema_error maps to failed status.
Validation and documented output
apps/pythinker-code/test/tui/components/messages/dynamic-workflow-mission-control.test.ts, apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts, docs/reference/tools.md, .changeset/workflow-progress.md
Tests cover animation, lifecycle states, alignment, responsive rendering, suspension, and schema-error mapping. Documentation and the changeset describe the new output.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ToolCallAndModelDeltaEvents
  participant DynamicWorkflowMissionControl
  participant MemberRows
  participant SubagentResultParser
  ToolCallAndModelDeltaEvents->>DynamicWorkflowMissionControl: pending or queued activity
  DynamicWorkflowMissionControl->>MemberRows: start eligible member
  SubagentResultParser->>DynamicWorkflowMissionControl: schema_error outcome
  DynamicWorkflowMissionControl->>MemberRows: failed status
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title uses the required feat prefix, stays within 72 characters, uses imperative mood, and accurately describes the progress-ring change.
Description check ✅ Passed The description includes the required sections, explains the problem and changes, documents verification, and completes the checklist.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-new Bot commented Aug 11, 2026

Copy link
Copy Markdown
pnpm dlx https://pkg.pr.new/@pythoughts/pythinker-code@07d73b2
npx https://pkg.pr.new/@pythoughts/pythinker-code@07d73b2

commit: 07d73b2

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/pythinker-code/test/tui/components/messages/dynamic-workflow-mission-control.test.ts (1)

341-341: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add the Unicode regex flag.

Line 341 has a regular expression without the u flag. Add u to clear the reported Oxlint warning.

Proposed fix
-    expect(memberLine(output, 1)).toMatch(/○\s+PEND/);
+    expect(memberLine(output, 1)).toMatch(/○\s+PEND/u);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/pythinker-code/test/tui/components/messages/dynamic-workflow-mission-control.test.ts`
at line 341, Add the Unicode <code>u</code> flag to the regular expression in
the assertion using memberLine so it satisfies Oxlint while preserving the
existing pattern and expectation.</code>

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/reference/tools.md`:
- Line 106: Update the TUI documentation description to state that running rows
use a periwinkle arc instead of a cyan arc, matching the renderer’s primary
token and component test.

---

Nitpick comments:
In
`@apps/pythinker-code/test/tui/components/messages/dynamic-workflow-mission-control.test.ts`:
- Line 341: Add the Unicode <code>u</code> flag to the regular expression in the
assertion using memberLine so it satisfies Oxlint while preserving the existing
pattern and expectation.</code>
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: f1f6fc55-ce53-4af4-ae75-afc6ee254938

📥 Commits

Reviewing files that changed from the base of the PR and between 5dba3ba and 6add5e9.

📒 Files selected for processing (6)
  • .changeset/workflow-progress.md
  • apps/pythinker-code/src/tui/components/messages/dynamic-workflow-mission-control.ts
  • apps/pythinker-code/src/tui/constant/rendering.ts
  • apps/pythinker-code/test/tui/components/messages/dynamic-workflow-mission-control.test.ts
  • apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts
  • docs/reference/tools.md

Comment thread docs/reference/tools.md Outdated
@elkaix
elkaix merged commit 1f45a5f into main Aug 11, 2026
11 checks passed
@elkaix
elkaix deleted the feat/dynamic-workflow-progress branch August 11, 2026 20:47
elkaix pushed a commit that referenced this pull request Aug 11, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @pythoughts/pythinker-code@0.15.0

### Minor Changes

- [#54](#54)
[`1f45a5f`](1f45a5f)
- Show indeterminate lifecycle progress for Dynamic Workflow rows in the
TUI, and report schema-error outcomes as failed.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant