chengyongru and chengyongru
a618e80887
refactor(agent): reduce loop runner parameter plumbing
2026-08-26 17:50:52 +08:00
chengyongru and chengyongru
c62aec0175
fix(session): reject read_session match-all patterns
2026-08-26 16:58:29 +08:00
bingqilinweimaotai and chengyongru
23dc344b8d
fix: allow unfiltered read_session calls
2026-08-26 16:58:29 +08:00
chengyongru and chengyongru
56aa7296f3
refactor(agent): make checkpoint recovery ownership explicit
2026-08-26 16:33:59 +08:00
qtds and chengyongru
9f5a56f1ec
fix(gitstore): detect rapid same-size rewrites
2026-08-26 16:19:10 +08:00
chengyongru and GitHub
9d34fc5af2
refactor(agent): remove loop iteration state ( #5549 )
...
* refactor(agent): remove loop iteration state
* docs(my): remove stale iteration guidance
2026-08-26 15:57:47 +08:00
chengyongru and GitHub
4f6c0aedfa
refactor(agent): make run usage explicit ( #5546 )
...
* refactor(agent): make run usage explicit
* fix(api): capture usage per run
2026-08-26 15:18:53 +08:00
chengyongru and GitHub
0c84725b13
fix(gateway): retry MCP readiness before turns ( #5535 )
2026-08-26 11:29:48 +08:00
zpljd258 and chengyongru
a8ffe0f136
fix(webui): project generated titles onto per-chat sessions under unifiedSession
...
With unifiedSession enabled, all turns are routed to the shared
unified:default session, so title generation, persistence, and change
notifications all happen on that shared session. The WebUI sidebar,
however, renders per-chat websocket:<id> sessions, so generated titles
never reach the session the user sees and every chat stays "Untitled".
Pass the origin chat_id through maybe_generate_webui_title_after_turn and
add a target_session_key to maybe_generate_webui_title so the title is
written to the per-chat session while conversation content still comes
from the shared (routed) session. When the routed session differs from
the per-chat session, the latest user/assistant exchange is used as the
title prompt since the shared session mixes content from every channel.
The shared session's title metadata is no longer read or written, so
stale shared titles can no longer leak into per-chat sessions.
2026-08-26 10:52:56 +08:00
chengyongru and GitHub
42f37dc4c0
fix(provider): stabilize Codex prompt cache routing ( #5540 )
2026-08-26 01:36:00 +08:00
chengyongru and chengyongru
649e3958c5
fix(tools): bound find_files scans
2026-08-25 18:40:49 +08:00
chengyongru and chengyongru
e308f7fdd4
test(agent): remove obsolete blocking drain case
2026-08-25 17:56:16 +08:00
chengyongru and chengyongru
66d9328a00
fix(agent): defer subagent wait until turn exit
2026-08-25 17:56:16 +08:00
chengyongru and GitHub
4b2965c8f3
feat: add demand-driven document retrieval ( #5525 )
2026-08-25 15:34:48 +08:00
chengyongru and GitHub
5cf78540a4
fix(agent): wait for exec sessions without polling ( #5526 )
2026-08-25 14:46:02 +08:00
chengyongru and chengyongru
8332c604da
fix(agent): let subagents recover from tool errors
2026-08-25 11:54:40 +08:00
chengyongru and chengyongru
2e7ebeb1ca
fix(usage): record provider stream timing
2026-08-25 10:39:14 +08:00
Xubin Ren
7fb0811fbb
fix(agent): honor selected project workspace
2026-08-25 02:14:02 +08:00
chengyongru and chengyongru
2ac802b2d5
feat(usage): add unified provider usage backend
2026-08-25 01:22:25 +08:00
chengyongru and chengyongru
8bb3828487
fix(tui): preserve usage telemetry fields
2026-08-25 01:04:25 +08:00
chengyongru and chengyongru
9895c23cb5
refactor(providers): define typed usage contract
2026-08-25 01:04:25 +08:00
chengyongru and chengyongru
89c94d8744
test(exec): remove Windows process timing races
2026-08-25 00:53:54 +08:00
chrischen-coder and chengyongru
f5e467626d
fix(agent): time out no-tools model requests
2026-08-25 00:34:01 +08:00
chengyongru and GitHub
04974b7607
fix(webui): preserve causal message order (NAN-29) ( #5503 )
2026-08-24 15:08:22 +08:00
chengyongru and chengyongru
09d3bd76c9
fix(exec): disable command guard in full access
2026-08-24 11:44:00 +08:00
chengyongru and chengyongru
b1cadf53c5
fix(codex): reuse TLS contexts across requests
2026-08-24 11:25:02 +08:00
Xubin Ren
d50a2fab32
fix(tui): avoid saving empty sessions
2026-08-24 10:40:16 +08:00
Xubin Ren
2cdfba38b2
fix(runtime): preserve interrupted turns on gateway exit
2026-08-24 00:58:04 +08:00
Xubin Ren
c7e2a474a0
fix(runtime): normalize recovery session routing
2026-08-24 00:58:04 +08:00
Xubin Ren
12029f8812
feat(runtime): add user-controlled turn recovery
2026-08-24 00:58:04 +08:00
chengyongru and chengyongru
ffa58aa5ef
fix(webui): keep answer text outside reasoning shell
2026-08-23 21:29:42 +08:00
Xubin Ren
1e9d46fb36
fix(cli): name roles through legacy launchers
2026-08-23 21:13:14 +08:00
Xubin Ren
cfc872fb52
fix(cli): harden process identity portability
2026-08-23 21:13:14 +08:00
Xubin Ren
cfc1fae8b5
feat(cli): expose nanobot process identities
2026-08-23 21:13:14 +08:00
Xubin Ren
48eea29313
feat(webui): unify turn observability
2026-08-22 20:51:24 +08:00
chengyongru and chengyongru
dbc1801d3c
fix(cron): report reconciled startup job count
2026-08-22 02:38:47 +08:00
aiguozhi123456 and chengyongru
20488a585d
fix(cron): review follow-ups for system job retirement
...
- advance the disabled-dream cursor before touching the cron store so
the #4242 fix still applies when jobs.json is corrupt
- pin the gateway wiring: the disabled-path test now asserts both
dream and heartbeat are retired, not just unregistered
- cover remove_system_job on a fresh install with no store file
2026-08-22 02:38:47 +08:00
aiguozhi123456 and chengyongru
e5718d4de6
fix(cron): retire persisted heartbeat/dream jobs when disabled
...
Disabling gateway.heartbeat (or agents.defaults.dream) only skipped
job registration on startup; the previously persisted system job in
<workspace>/cron/jobs.json kept firing, and remove_job refuses to
touch protected system jobs. Add CronService.remove_system_job for
startup reconciliation and call it from the gateway disabled branches
so the config toggle takes effect after restart.
2026-08-22 02:38:47 +08:00
chengyongru and chengyongru
1fe36d5dec
fix(dream): gate cursor on run completion
2026-08-22 02:05:40 +08:00
flobo3 and chengyongru
d853ac239f
fix(dream): advance cursor when tool errors were recovered, and report why a run did not complete
2026-08-22 02:05:40 +08:00
chengyongru and chengyongru
9ae3ae17da
feat(providers): support DeepSeek V4 vision
2026-08-21 23:18:09 +08:00
chengyongru and chengyongru
953d2ed217
refactor(webui): infer fallback from active model
2026-08-21 16:49:30 +08:00
chengyongru and chengyongru
7f97373490
fix(webui): only highlight actual model fallbacks
2026-08-21 16:49:30 +08:00
chengyongru and chengyongru
761e95b659
refactor(providers): simplify retry fallback routing
2026-08-21 16:46:38 +08:00
chengyongru and chengyongru
9a6dc371b3
refactor: pass retry exhaustion callbacks explicitly
2026-08-21 16:46:38 +08:00
chengyongru and chengyongru
f93d4c3ae4
fix(providers): retry before falling back
2026-08-21 16:46:38 +08:00
chengyongru and GitHub
26764f2423
feat(tui): add /detach command ( #5461 )
...
* feat(tui): add detach command
* fix(tui): print exact detached gateway stop command
2026-08-21 15:50:07 +08:00
chengyongru and chengyongru
5b44ebdfd7
fix(providers): report Responses cached tokens
2026-08-21 14:01:00 +08:00
chengyongru and chengyongru
8ca4bd9121
fix(agent): keep default prompt paths relative
2026-08-21 11:45:05 +08:00
akinolur and chengyongru
c7710238a8
fix(provider): retry Codex server_error
...
Mid-stream response.failed events from OpenAI carry
'server_error' (underscore), but the transient-error marker
list only had 'server error' (space). is_transient_response
missed it, so the retry loop gave up on the first attempt
instead of using its normal 1s/2s/4s backoff.
2026-08-21 10:52:34 +08:00