Commit Graph
188 Commits
Author SHA1 Message Date
chengyongru c5ae958bc3 fix(tui): avoid blocking local gateway startup 2026-08-20 14:48:31 +08:00
chengyongru c615aee2ca feat(tui): start fresh chats in launch workspace 2026-08-20 11:16:09 +08:00
chengyongru 2e9c9781e6 fix(webui): detach without waiting for gateway shutdown 2026-08-19 16:34:07 +08:00
chengyongru df14259717 perf(tui): reduce cold-start latency 2026-08-18 16:28:46 +08:00
Xubin Ren b17f227eb9 fix(release): package TUI compliance materials 2026-08-17 20:56:10 +08:00
Xubin Ren dc3e3c1a2a fix(gateway): prevent lifecycle races 2026-08-17 20:56:10 +08:00
Xubin Ren c671acd6a8 fix(gateway): preserve shared runtime identity 2026-08-17 20:56:10 +08:00
Xubin Ren eafc0bc6eb fix(gateway): serialize shared runtime lifecycle 2026-08-17 20:56:10 +08:00
Xubin Ren 7384fbfffc fix(packaging): keep source clients in lockstep 2026-08-17 20:56:10 +08:00
Xubin Ren ddd3b78ed1 test(ci): isolate cross-platform gateway lifecycle 2026-08-17 20:56:10 +08:00
Xubin Ren 55f0423336 test(cli): tolerate wrapped launcher output 2026-08-17 20:56:10 +08:00
Xubin Ren e84aa07bcc test(cli): isolate WebUI interrupt polling 2026-08-17 20:56:10 +08:00
Xubin Ren cd6a11b3c5 fix(gateway): harden shared client lifecycle 2026-08-17 20:56:10 +08:00
Xubin Ren 014eab5f6a fix(gateway): register foreground instances 2026-08-17 20:56:10 +08:00
Xubin Ren a700697583 fix(cli): canonicalize default gateway identity 2026-08-17 20:56:10 +08:00
Xubin Ren b8333a2d7e fix(cli): make gateway persistence explicit 2026-08-17 20:56:10 +08:00
Xubin Ren 74c11e5d28 fix(cli): share on-demand gateway lifecycle 2026-08-17 20:56:10 +08:00
Xubin Ren ed796332fe refactor(tui): retire the direct session default 2026-08-17 20:56:10 +08:00
Xubin Ren 9e47d8106c fix(tui): synchronize shared session clients 2026-08-17 20:56:10 +08:00
Xubin Ren e77eed76c9 fix(tui): track canonical model presets 2026-08-17 20:56:10 +08:00
Xubin Ren 9514b9b909 fix(tui): require the native interactive client 2026-08-17 20:56:10 +08:00
Xubin Ren 6301c0ab57 feat(tui): unify session history and context 2026-08-17 20:56:10 +08:00
Xubin Ren 14c5607e5e fix(tui): enforce supported platform boundaries 2026-08-17 20:56:10 +08:00
Xubin Ren 35f2d086b0 fix(tui): harden themes and platform coverage 2026-08-17 20:56:10 +08:00
Xubin RenandBingxi Zhao 347583d3f7 fix(tui): preserve gateway and cache boundaries
Only reuse the exact managed config/workspace instance so CLI overrides cannot silently attach to another gateway. Revalidate cached release sidecars before execution and recover from corrupted cache entries.

Co-authored-by: Bingxi Zhao <150592536+pancacake@users.noreply.github.com>
2026-08-17 20:56:10 +08:00
ce070c832d feat(cli): add native TypeScript terminal UI
Rebuild the terminal client on OpenTUI while keeping the Python gateway as the single agent, session, tool, and memory runtime. Preserve a classic prompt fallback and publish version-matched native sidecars for supported platforms.

Co-authored-by: Bingxi Zhao <150592536+pancacake@users.noreply.github.com>
Co-authored-by: chengyongru <2755839590@qq.com>
2026-08-17 20:56:10 +08:00
Xubin Renandlmzopq cd7480945b fix(session): preserve history across storage relocation
Co-authored-by: lmzopq <1646888+lmzopq@users.noreply.github.com>
2026-08-13 01:41:10 +09:00
chengyongru 19997d20bb refactor: move MCP lifecycle out of AgentLoop (#5343) 2026-08-12 17:51:04 +08:00
chengyongru d45c893f68 fix(webui): surface MCP runtime connection failures (#5331) 2026-08-11 23:52:02 +08:00
chengyongru 55ecda275d test: strengthen user-path coverage and CI gates (#5308) 2026-08-09 21:37:06 +08:00
chengyongru ff6deda178 fix: modernize dependency recovery guidance (#5282) 2026-08-07 13:58:13 +08:00
chengyongru 2fe135db3e feat(webui): add integrated Vite dev mode (#5239) 2026-08-04 16:14:32 +08:00
arcdrake22 c6bd5f0075 test(gateway): align runtime-tasks gather tests with bounded retrieval
The helper never waits on the runtime-tasks gather after cancelling it
(its children are bounded individually), so the finished-gather test must
hand the helper an already-complete gather to exercise the bounded
retrieval path, and the cancelled-gather test must settle the gather
itself instead of expecting the helper to await a still-pending future.

Use a pre-completed child for the finished case and suppress(await) for
the cancelled case; both now assert done() and a single close.
2026-08-03 16:00:39 +08:00
Xubin Ren 39e1533c3b fix(gateway): make resource teardown cancellation-safe 2026-08-03 16:00:39 +08:00
arcdrake22 a91ce900ef test(gateway): add shutdown teardown regression coverage
Covers the lifecycle contract of _close_gateway_runtime: runtime tasks are
cancelled before shared resources close, pending background work is drained
before the close returns, cancellation-swallowing tasks and hanging cleanup
are bounded by their timeouts, a failing close is logged without blocking the
stop, duplicate cleanup is idempotent, and the runtime_tasks gather await path
is exercised for both completed and cancelled gathers.
2026-08-03 16:00:39 +08:00
Xubin Ren e1894d6f0b fix(providers): respect explicit cloud namespaces 2026-08-01 20:25:58 +08:00
NearlCrewsandClaude Opus 4.7 5eb818e800 fix(providers): require api_base before local provider wins on keyword match
Ollama's spec keeps "nemotron" as a keyword so bare `nemotron-3-nano`
auto-routes to a configured Ollama install (PR #1863). NVIDIA NIM was
later registered with the same "nemotron" keyword (commit 046d0831),
creating the only keyword collision in the registry.

In `_match_provider`, the keyword loop accepted any local provider on
`spec.is_local` alone — no api_base check. Models like
`nvidia/nemotron-3-super-120b-a12b` (intended for OpenRouter or NVIDIA
NIM) were therefore hijacked to http://localhost:11434/v1 even when the
user had never configured Ollama, causing silent connection errors at
runtime.

Add the same api_base gate the local-fallback loop already uses: a local
provider only wins by keyword when the user has actually set its
api_base. Preserves PR #1863's intent for users who configured Ollama;
fixes the silent hijack for everyone else.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-08-01 20:25:58 +08:00
chengyongru e2563e2e74 refactor(cli): split commands into focused modules (#5175) 2026-07-30 15:01:35 +08:00
chengyongru 757ad9c764 refactor: enforce BasedPyright strict type checking (#5158) 2026-07-29 21:37:11 +08:00
chengyongru 393d429e0a fix(ci): stabilize and speed up CI (#5145) 2026-07-28 22:55:59 +08:00
chengyongru 0c6c0438d4 feat(config): add actionable startup diagnostics and WebUI recovery (#5110) 2026-07-28 18:52:05 +08:00
chengyongru ef9e687f19 refactor(core): remove redundant runtime scaffolding (#5127) 2026-07-28 11:07:58 +08:00
chengyongru 281b4b7f0b chore: remove expired v0.3.1 compatibility shims (#5106) 2026-07-27 13:53:04 +08:00
yu-xin-c a7a6c26eab fix(heartbeat): route unified sessions to last channel 2026-07-27 00:12:44 +08:00
chengyongru 6e0eb46705 feat: launch first-time setup in webui (#5078) 2026-07-24 21:16:43 +08:00
chengyongru c7393c785e feat(providers): add xAI Grok OAuth with capability-gated X Search (#5035) 2026-07-23 11:55:16 +08:00
chengyongru 66690fdb0c fix(webui): deliver late subagent results as new turns (#4992) 2026-07-22 23:04:36 +08:00
chengyongru 3748f664b2 feat(config): watch runtime configuration changes (#5026) 2026-07-22 13:08:39 +08:00
KDB 8981995474 fix(exec): clean up sessions on shutdown 2026-07-21 13:48:51 +08:00
chengyongru 462a0dfb0f refactor(channels): make built-in channels self-contained (#4908)
* refactor(channels): own setup and instance contracts

* refactor(channels): isolate management contracts

* refactor(channels): normalize activation contracts

* fix(channels): enforce management contracts

* refactor(channels): finish setup ownership migration

* fix(channels): harden management contracts

* fix(channels): enforce lazy loading and runtime ownership

* fix(feishu): make multi-instance startup idempotent

* fix(webui): render channel setup contracts cleanly

* fix(feishu): stop websocket clients cleanly

* fix(channels): enforce persistence and activation gates

* fix(channels): preserve global feature action scope

* fix(channels): apply defaults for single plugins

* fix(channels): enforce management contract boundaries

* refactor(feishu): remove identity helper indirection

* fix(channels): preserve management setup contracts

* refactor(channels): generalize instance settings UI

* refactor(channels): package channel plugins with web UI metadata

* refactor(channels): make built-ins self-contained packages

* test(channels): colocate tests with channel packages

* fix(dingtalk): use official brand icon

* feat(channels): colocate webui translations

* docs(channels): clarify plugin ownership

* test(exec): remove output wait race

* refactor(channels): unify plugin descriptors

* fix(channels): enforce descriptor-owned contracts

* refactor(channels): finish package-owned plugin setup

* refactor(channels): use repository-owned packages only

* fix(channels): self-describe dependencies and runtime state

* fix(channels): warn about legacy entry points
2026-07-19 23:30:49 +08:00