lisitan
f3c00fce15
fix: prevent duplicate assistant messages in TUI ( fixes #35278 ) ( #35364 )
...
* fix: prevent duplicate assistant messages in TUI (fixes #35278 )
When startAssistant() is called multiple times with the same runId,
it was creating duplicate AssistantMessageComponent instances instead
of reusing the existing one. This caused messages to appear twice in
the terminal UI.
The fix checks if a component already exists for the runId before
creating a new one. If it exists, we update its text instead of
appending a duplicate component.
Test coverage includes verification that:
- Only one component is created when startAssistant is called twice
- The second text replaces the first
- Component count remains 1 (prevents regression)
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com >
Co-Authored-By: Happy <yesreply@happy.engineering >
* Changelog: add TUI duplicate-render fix entry
---------
Co-authored-by: 沐沐 <mumu@example.com >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Happy <yesreply@happy.engineering >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-03-12 02:59:42 -04:00
Peter Steinberger
5ca780fa78
feat: expose runtime version in gateway status
2026-03-12 02:55:31 +00:00
Vincent Koc
a3dc4b5a57
fix(tui): improve color contrast for light-background terminals ( #40345 )
...
* fix(tui): improve colour contrast for light-background terminals (#38636 )
Detect light terminal backgrounds via COLORFGBG and apply a WCAG
AA-compliant light palette. Adds OPENCLAW_THEME=light|dark env var
override for terminals without auto-detection.
Uses proper sRGB linearisation and WCAG 2.1 contrast ratios to pick
whichever text palette (dark or light) has higher contrast against
the detected background colour.
Co-authored-by: ademczuk <ademczuk@users.noreply.github.com >
* Update CHANGELOG.md
---------
Co-authored-by: ademczuk <andrew.demczuk@gmail.com >
Co-authored-by: ademczuk <ademczuk@users.noreply.github.com >
2026-03-08 16:17:28 -07:00
arceus77-7
492fe679a7
feat(tui): infer workspace agent when launching TUI ( #39591 )
...
Merged via squash.
Prepared head SHA: 23533e24c4cbb91fd5c3006485c9a5d69bd5c2fb
Co-authored-by: arceus77-7 <261276524+arceus77-7@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-08 13:31:11 +03:00
Vincent Koc
6cb889da8c
TUI: type setSession test mocks
2026-03-07 18:33:46 -08:00
Peter Steinberger
46008178d1
fix: isolate TUI /new sessions per client
...
Landed from contributor PR #39238 by @widingmarcus-cyber.
Co-authored-by: Marcus Widing <widing.marcus@gmail.com >
2026-03-08 02:31:15 +00:00
Peter Steinberger
265367d99b
fix(gateway): land #28428 from @l0cka
...
Landed from contributor PR #28428 by @l0cka.
Co-authored-by: Daniel Alkurdi <danielalkurdi@gmail.com >
2026-03-07 22:51:08 +00:00
Peter Steinberger
b9dd6e99b6
fix(daemon): avoid freezing Windows PATH in task scripts ( #39139 , thanks @Narcooo)
...
Co-authored-by: majx_mac <mjxnarco@pku.edu.cn >
2026-03-07 21:15:01 +00:00
Peter Steinberger
66de964c59
refactor(tui): dedupe mode-specific exec secret fixtures
2026-03-07 17:58:31 +00:00
Peter Steinberger
e60b28fd1f
refactor(tui): dedupe gateway token resolution path
2026-03-07 17:58:31 +00:00
Vincent Koc
42e3d8d693
Secrets: add inline allowlist review set ( #38314 )
...
* Secrets: add inline allowlist review set
* Secrets: narrow detect-secrets file exclusions
* Secrets: exclude Docker fingerprint false positive
* Secrets: allowlist test and docs false positives
* Secrets: refresh baseline after allowlist updates
* Secrets: fix gateway chat fixture pragma
* Secrets: format pre-commit config
* Android: keep talk mode fixture JSON valid
* Feishu: rely on client timeout injection
* Secrets: allowlist provider auth test fixtures
* Secrets: allowlist onboard search fixtures
* Secrets: allowlist onboard mode fixture
* Secrets: allowlist gateway auth mode fixture
* Secrets: allowlist APNS wake test key
* Secrets: allowlist gateway reload fixtures
* Secrets: allowlist moonshot video fixture
* Secrets: allowlist auto audio fixture
* Secrets: allowlist tiny audio fixture
* Secrets: allowlist embeddings fixtures
* Secrets: allowlist resolve fixtures
* Secrets: allowlist target registry pattern fixtures
* Secrets: allowlist gateway chat env fixture
* Secrets: refresh baseline after fixture allowlists
* Secrets: reapply gateway chat env allowlist
* Secrets: reapply gateway chat env allowlist
* Secrets: stabilize gateway chat env allowlist
* Secrets: allowlist runtime snapshot save fixture
* Secrets: allowlist oauth profile fixtures
* Secrets: allowlist compaction identifier fixture
* Secrets: allowlist model auth fixture
* Secrets: allowlist model status fixtures
* Secrets: allowlist custom onboarding fixture
* Secrets: allowlist mattermost token summary fixtures
* Secrets: allowlist gateway auth suite fixtures
* Secrets: allowlist channel summary fixture
* Secrets: allowlist provider usage auth fixtures
* Secrets: allowlist media proxy fixture
* Secrets: allowlist secrets audit fixtures
* Secrets: refresh baseline after final fixture allowlists
* Feishu: prefer explicit client timeout
* Feishu: test direct timeout precedence
2026-03-06 19:35:26 -05:00
Vignesh Natarajan
726ef48c2a
fix(tui): accept canonical session-key aliases in chat event routing
2026-03-05 22:01:06 -08:00
Vignesh Natarajan
8d4a2f2c59
fix(tui): preserve credential-like tokens in render sanitization
2026-03-05 21:06:07 -08:00
Vignesh Natarajan
6084c26d00
fix(tui): render final event error when assistant output is empty ( #14687 )
2026-03-05 18:16:43 -08:00
Josh Avant
fb289b7a79
Memory: handle SecretRef keys in doctor embeddings ( #36835 )
...
Merged via squash.
Prepared head SHA: c1a3d0caae60115d886e8bfc9983c9533c773f04
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
Reviewed-by: @joshavant
2026-03-05 20:05:59 -06:00
Vignesh Natarajan
cec5535096
fix(tui): prevent stale model indicator after /model
2026-03-05 17:39:19 -08:00
Josh Avant
72cf9253fc
Gateway: add SecretRef support for gateway.auth.token with auth-mode guardrails ( #35094 )
2026-03-05 12:53:56 -06:00
Lynn
9d941949c9
fix(tui): normalize session key to lowercase to match gateway canonicalization ( #34013 )
...
Merged via squash.
Prepared head SHA: cfe06ca131661d1fd669270345c549ee8141cc46
Co-authored-by: lynnzc <6257996+lynnzc@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-04 09:53:38 +03:00
Peter Steinberger
6b85ec3022
docs: tighten subscription guidance and update MiniMax M2.5 refs
2026-03-03 00:02:37 +00:00
Peter Steinberger
8e48f7e353
fix(tui): honor explicit gateway auth for url overrides
2026-03-02 19:48:02 +00:00
Peter Steinberger
45888276a3
test(integration): dedupe messaging, secrets, and plugin test suites
2026-03-02 07:13:11 +00:00
Vincent Koc
b7615e0ce3
Exec/ACP: inject OPENCLAW_SHELL into child shell env ( #31271 )
...
* exec: mark runtime shell context in exec env
* tests(exec): cover OPENCLAW_SHELL in gateway exec
* tests(exec): cover OPENCLAW_SHELL in pty mode
* acpx: mark runtime shell context for spawned process
* tests(acpx): log OPENCLAW_SHELL in runtime fixture
* tests(acpx): assert OPENCLAW_SHELL in runtime prompt
* docs(env): document OPENCLAW_SHELL runtime markers
* docs(exec): describe OPENCLAW_SHELL exec marker
* docs(acp): document OPENCLAW_SHELL acp marker
* docs(gateway): note OPENCLAW_SHELL for background exec
* tui: tag local shell runs with OPENCLAW_SHELL
* tests(tui): assert OPENCLAW_SHELL in local shell runner
* acp client: tag spawned bridge env with OPENCLAW_SHELL
* tests(acp): cover acp client OPENCLAW_SHELL env helper
* docs(env): include acp-client and tui-local shell markers
* docs(acp): document acp-client OPENCLAW_SHELL marker
* docs(tui): document tui-local OPENCLAW_SHELL marker
* exec: keep shell runtime env string-only for docker args
* changelog: note OPENCLAW_SHELL runtime markers
2026-03-01 20:31:06 -08:00
Vignesh Natarajan
fca0467082
TUI: guard SIGTERM shutdown against setRawMode EBADF
2026-02-28 14:56:01 -08:00
Peter Steinberger
675764e866
refactor(tui): simplify stream boundary-drop modes
2026-02-26 20:54:29 +01:00
Peter Steinberger
b01273cfc6
fix: narrow finalize boundary-drop guard ( #27711 ) (thanks @scz2011)
2026-02-26 19:50:06 +00:00
AI Assistant
d6cbaea434
fix(tui): preserve streamed text during tool call transitions
...
Fixes #27674
The TUI was erasing already-streamed assistant text when tool calls
were triggered. This happened because the finalize() method in
TuiStreamAssembler was not using the protectBoundaryDrops option
when updating run state.
Now finalize() applies the same boundary drop protection as
ingestDelta(), ensuring that streamed text before tool calls is
preserved when the final payload drops earlier content blocks.
2026-02-26 19:50:06 +00:00
Peter Steinberger
2d6d6797d8
test: fix post-merge config and tui command-handler tests
2026-02-24 04:38:21 +00:00
Workweaver Ralph
b9e587fb63
fix(tui): guard sendMessage when disconnected; reset readyPromise on close
...
(cherry picked from commit df827c3eef34ca02cfe5c57a1eabcd9c8e5a4ec1)
2026-02-24 04:33:51 +00:00
Peter Steinberger
1c753ea786
test: dedupe fixtures and test harness setup
2026-02-23 05:45:54 +00:00
Phineas1500
331b728b8d
fix(tui): add OSC 8 hyperlinks for wrapped URLs ( #17814 )
...
* feat(tui): add OSC 8 hyperlinks to make wrapped URLs clickable
Long URLs that exceed terminal width get broken across lines by pi-tui's
word wrapping, making them unclickable. Post-process rendered markdown
output to add OSC 8 terminal hyperlink sequences around URL fragments,
so each line fragment links to the full URL. Gracefully degrades on
terminals without OSC 8 support.
* tui: harden OSC8 URL extraction and prefix resolution
* tui: add changelog entry for OSC 8 markdown hyperlinks
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-02-22 19:09:07 -05:00
Tak Hoffman
f8171ffcdc
Config UI: tag filters and complete schema help/labels coverage ( #23796 )
...
* Config UI: add tag filters and complete schema help/labels
* Config UI: finalize tags/help polish and unblock test suite
* Protocol: regenerate Swift gateway models
2026-02-22 15:17:07 -06:00
Peter Steinberger
38752338dc
refactor(tui): dedupe handlers and formatter test setup
2026-02-22 14:08:51 +00:00
Vignesh Natarajan
b4cdffc7a4
TUI: make Ctrl+C exit behavior reliably responsive
2026-02-22 01:28:55 -08:00
Vignesh Natarajan
b9e9fbc97c
TUI: preserve RTL text order in terminal output
2026-02-22 01:10:03 -08:00
Peter Steinberger
0c1a52307c
fix: align draft/outbound typings and tests
2026-02-22 08:03:29 +00:00
Peter Steinberger
0511e28a27
test(ui): use lightweight clears in theme and telegram media retry setup
2026-02-22 08:01:16 +00:00
Peter Steinberger
185fba1d22
refactor(agents): dedupe plugin hooks and test helpers
2026-02-22 07:44:57 +00:00
Peter Steinberger
b55979844b
test(tui): dedupe local bind loopback assertions
2026-02-22 07:35:55 +00:00
Peter Steinberger
f28fcf243a
test(cli): use lightweight clears in message helper and gateway chat setup
2026-02-22 07:35:54 +00:00
Vignesh Natarajan
eea0a68199
chore: make tui callback invocation tsgo-safe
2026-02-21 20:05:25 -08:00
Vignesh Natarajan
2b5952f8c3
chore: fix tui test callback narrowing for CI
2026-02-21 20:03:32 -08:00
Vignesh Natarajan
68cb4fc8a1
TUI: render sending and waiting indicators immediately
2026-02-21 19:28:42 -08:00
Vignesh Natarajan
a10d689860
TUI: coalesce multiline paste submits on macOS terminals
2026-02-21 19:19:55 -08:00
Peter Steinberger
2a0ea7cb97
test(tui): cover gateway auth fallbacks and dedupe env setup
2026-02-21 19:13:47 +00:00
Peter Steinberger
9fc6c8b713
fix: hide synthetic untrusted metadata in chat history
2026-02-21 19:26:04 +01:00
Vincent Koc
45fff13b1d
TUI: strip only leading inbound metadata ( #22461 )
2026-02-21 01:13:02 -05:00
Vincent Koc
35be87b09b
fix(tui): strip inbound metadata blocks from user messages (clean rewrite) ( #22345 )
...
* fix(tui): strip inbound metadata blocks from user text
* chore: clean up metadata-strip format and changelog credit
* chore: format tui metadata-strip tests
* test: align metadata-strip regression expectations
* refactor: reuse canonical inbound metadata stripper
* test: allow tmp media fixture paths in media-understanding tests
* refactor: reuse canonical inbound metadata stripper
* format: fix changelog blank line after headings
* test: fix unrelated check typing regressions
* test: align memory async mock embedding signatures
* test: avoid tsgo mock typing pitfall
* test: restore async search mock typings in merge tree
* test: trigger ci rerun without behavior change
* chore: dedupe todays changelog entries
* fix: dedupe sqlite mock keys in qmd manager test
* Update qmd-manager.test.ts
* test: align chat metadata sanitization expectation
2026-02-20 23:52:43 -05:00
Vignesh Natarajan
1cc2263578
TUI: bound chat-log growth to prevent render overflows
2026-02-20 20:27:58 -08:00
Vignesh Natarajan
d7a7ebb75a
TUI: dedupe duplicate backspace events in input
2026-02-20 20:10:22 -08:00
Vignesh Natarajan
18b4b47708
TUI: guide pairing-required recovery in disconnect state
2026-02-20 20:04:19 -08:00