Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
5f83f19
feat(cli): initial welcome screen
brandonkachen Oct 28, 2025
80a0325
feat(cli): upgrade opentui, add transparent background
brandonkachen Oct 28, 2025
cff6819
Revamp CLI toggle theming and raised pill buttons
brandonkachen Oct 29, 2025
8a875dd
Add toggle open flag and tighten collapse spacing
brandonkachen Oct 29, 2025
286b381
Refine agent tool rendering
brandonkachen Oct 29, 2025
79d5abc
Revert "Add toggle open flag and tighten collapse spacing"
brandonkachen Oct 29, 2025
660736b
feat(cli): add customizable tool rendering system
brandonkachen Oct 29, 2025
0274a48
Style CLI tool branches like tree
brandonkachen Oct 29, 2025
df3593e
fix(cli): improve input text visibility and mode toggle colors
brandonkachen Oct 29, 2025
b541cfd
fix(cli): improve text rendering and user message styling
brandonkachen Oct 30, 2025
fb60dcb
fix(cli): clean up code redundancies and improve markdown rendering
brandonkachen Oct 30, 2025
edd6f27
fix(cli): handle bold and italic formatting in markdown lists
brandonkachen Oct 30, 2025
32ee36b
Refine macOS terminal theming
brandonkachen Oct 30, 2025
6253496
Upgrade @opentui packages to 0.1.31
brandonkachen Oct 30, 2025
ddad28c
fix: clean up agent toggle ui
brandonkachen Oct 31, 2025
206d7bc
chore: tidy footer layout and branch spacing
brandonkachen Oct 31, 2025
215d617
chore: align input text color with message theme
brandonkachen Oct 31, 2025
0881550
style: use heavier cursor glyph in multiline input
brandonkachen Oct 31, 2025
951ed71
style: apply message attributes to input text
brandonkachen Oct 31, 2025
0f59c51
Merge origin/main into brandon/upgrade-opentui-2025-10-28
brandonkachen Oct 31, 2025
cb2c732
fix: minor leftover UI issues
brandonkachen Oct 31, 2025
0314cb8
Keep tool call branches collapsed
brandonkachen Nov 1, 2025
fb4483b
Restore agents CLI handler from origin/main
brandonkachen Nov 1, 2025
145ca63
fix: remove temp md files
brandonkachen Nov 1, 2025
00a9acd
Merge remote-tracking branch 'origin/main' into brandon/upgrade-opent…
brandonkachen Nov 3, 2025
65932f5
Merge remote-tracking branch 'origin/main' into brandon/upgrade-opent…
brandonkachen Nov 3, 2025
6fe5cde
Merge remote-tracking branch 'origin/main' into brandon/upgrade-opent…
brandonkachen Nov 3, 2025
c862f59
Revert "Merge remote-tracking branch 'origin/main' into brandon/upgra…
brandonkachen Nov 3, 2025
cd1d58a
Reconcile main merge conflicts and restore CI green
brandonkachen Nov 3, 2025
2052bb0
Fix login modal transparency and center positioning
brandonkachen Nov 3, 2025
29f098b
Refactor message block tool branches
brandonkachen Nov 3, 2025
8ae1ad4
Implement Tailwind-inspired theme system with variant support
brandonkachen Nov 3, 2025
89bf509
Merge main into brandon/upgrade-opentui-2025-10-28
brandonkachen Nov 3, 2025
fa47525
Upgrade OpenTUI to v0.1.33
brandonkachen Nov 3, 2025
ae76878
Clean up theme usage in components
brandonkachen Nov 4, 2025
3079589
Remove resolveColor logic from remaining components
brandonkachen Nov 4, 2025
a5910a1
Complete theme system cleanup across all components
brandonkachen Nov 4, 2025
021d570
fix(cli): remove duplicated welcome block in initial system message
brandonkachen Nov 4, 2025
75f9ce8
Refactor to semantic color system with Tailwind-inspired structure
brandonkachen Nov 4, 2025
89d7514
Fix test files to use ThemeProvider after semantic refactor
brandonkachen Nov 4, 2025
fcbb766
Remove variant system - simplify theme architecture
brandonkachen Nov 4, 2025
0368c6d
Refactor theme system to use zustand for consistency
brandonkachen Nov 4, 2025
6644be7
Merge origin/main into brandon/upgrade-opentui-2025-10-28
brandonkachen Nov 4, 2025
09f0bef
Fix type errors in BuildModeButtons component
brandonkachen Nov 4, 2025
7c0bbe2
Consolidate ChatTheme properties to semantic essentials
brandonkachen Nov 4, 2025
986aed5
fix(npm-app): add type annotations to error handlers in browser-runne…
brandonkachen Nov 4, 2025
b2473a3
fix(cli): improve input cursor visibility with blue color and highlig…
brandonkachen Nov 4, 2025
b8bd38f
Fix theme toggle not working on second change
brandonkachen Nov 4, 2025
abe396b
Merge origin/main with subsequence matching and engineering improvements
brandonkachen Nov 4, 2025
08f57e3
Merge branch 'main' into brandon/upgrade-opentui-2025-10-28
codebuff-team Nov 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
330 changes: 138 additions & 192 deletions bun.lock

Large diffs are not rendered by default.

31 changes: 30 additions & 1 deletion cli/knowledge.md
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,36 @@ The bug occurred when tool toggles were rendered. Agent toggles worked fine, but

## Toggle Branch Rendering

Agent and tool toggles in the TUI render inside `<text>` components. Expanded content must resolve to plain strings or StyledText-compatible fragments (`<span>`, `<strong>`, `<em>`).
Agent and tool toggles in the TUI render inside `<text>` components. Expanded content must resolve to plain strings or StyledText-compatible fragments (`<span>`, `<strong>`, `<em>`). Any React tree we pass into a toggle must either already be a `<text>` node or be wrapped in one so that downstream child elements never escape a text container. If we hand off plain markdown React fragments directly to `<box>`, OpenTUI will crash because the fragments often expand to bare `<span>` elements.

Example:
Tool markdown output (via `renderMarkdown`) now gets wrapped in a `<text>` element before reaching `BranchItem`. Without this wrapper, the renderer emits `<span>` nodes that hit `<box>` and cause `Component of type "span" must be created inside of a text node`. Wrapping the markdown and then composing it with any extra metadata keeps OpenTUI happy.

```tsx
const displayContent = renderContentWithMarkdown(fullContent, false, options)

const renderableDisplayContent =
displayContent
? (
<text
fg={resolveThemeColor(theme.agentText)}
style={{ wrapMode: 'word' }}
attributes={theme.messageTextAttributes || undefined}
>
{displayContent}
</text>
)
: null

const combinedContent = toolRenderConfig.content ? (
<box style={{ flexDirection: 'column', gap: renderableDisplayContent ? 1 : 0 }}>
<box style={{ flexDirection: 'column', gap: 0 }}>
{toolRenderConfig.content}
</box>
{renderableDisplayContent}
</box>
) : renderableDisplayContent
```

### TextNodeRenderable Constraint

Expand Down
4 changes: 2 additions & 2 deletions cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
},
"dependencies": {
"@codebuff/sdk": "workspace:*",
"@opentui/core": "^0.1.28",
"@opentui/react": "^0.1.28",
"@opentui/core": "0.1.33",
"@opentui/react": "0.1.33",
"@tanstack/react-query": "^5.62.8",
"commander": "^14.0.1",
"immer": "^10.1.3",
Expand Down
Loading
Loading