chengyongru
56aa7296f3
refactor(agent): make checkpoint recovery ownership explicit
2026-08-26 16:33:59 +08:00
chengyongru
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
zpljd258
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
9895c23cb5
refactor(providers): define typed usage contract
2026-08-25 01:04:25 +08:00
Xubin Ren
12029f8812
feat(runtime): add user-controlled turn recovery
2026-08-24 00:58:04 +08:00
Xubin Ren
4391bbf4da
feat(tui): add agent interaction workflows
2026-08-17 20:56:10 +08:00
chengyongru
19997d20bb
refactor: move MCP lifecycle out of AgentLoop ( #5343 )
2026-08-12 17:51:04 +08:00
chengyongru
cdb2a474f9
refactor(webui): remove legacy session messages route
2026-08-07 15:16:57 +08:00
chengyongru
f45436b61d
fix(commands): reject invalid slash commands
2026-08-04 17:11:44 +08:00
chengyongru
6a1a45d07a
feat: preserve Responses reasoning state and compact context ( #5172 )
2026-07-30 22:39:43 +08:00
chengyongru
e2563e2e74
refactor(cli): split commands into focused modules ( #5175 )
2026-07-30 15:01:35 +08:00
chengyongru
12f828ea3d
fix(agent): read document attachments on demand ( #5122 )
2026-07-28 13:33:06 +08:00
chengyongru
ef9e687f19
refactor(core): remove redundant runtime scaffolding ( #5127 )
2026-07-28 11:07:58 +08:00
chengyongru
39348dfafe
refactor(agent): remove dead lifecycle scaffolding
2026-07-27 12:00:06 +08:00
Xubin Ren
5d8046deef
test(heartbeat): cover ignored unified routes
2026-07-27 00:12:44 +08:00
yu-xin-c
a7a6c26eab
fix(heartbeat): route unified sessions to last channel
2026-07-27 00:12:44 +08:00
chengyongru
66690fdb0c
fix(webui): deliver late subagent results as new turns ( #4992 )
2026-07-22 23:04:36 +08:00
hamb1y
a9867a5a4e
fix: quarantine invalid tool results
2026-07-22 01:59:09 +08:00
chengyongru
9db0d9f3c9
refactor(agent): unify internal turn lifecycle ( #4993 )
2026-07-21 00:14:27 +08:00
chengyongru
d349b65713
test(agent): remove obsolete runtime context assertions
2026-07-12 00:35:17 +08:00
chengyongru
f75d3519db
feat(agent): add persistent runtime context providers
2026-07-12 00:35:17 +08:00
chengyongru
7f8c3453e1
refactor(agent): gate sustained goals behind explicit /goal
...
Replace the legacy long-goal skill contract with command-scoped goal tools and runtime guidance. Keep goal state durable across continuations while restricting create and replace mutations to explicit user /goal turns.
2026-07-12 00:35:17 +08:00
chengyongru
21f58cbabf
refactor(agent): make resolver sole runtime owner
2026-07-10 17:54:34 +08:00
chengyongru
c9d3e74342
refactor(agent): require runtime for consolidation
2026-07-10 17:54:34 +08:00
chengyongru
af85c356b8
refactor(agent): capture subagent runtime before spawn
2026-07-10 17:54:34 +08:00
chengyongru
198fd9f869
refactor(agent): capture runtime at turn admission
2026-07-10 17:54:34 +08:00
chengyongru
42d7ad34a4
refactor(agent): unify request context routing
2026-07-10 17:54:34 +08:00
chengyongru
acb0e853ff
refactor(trigger): share automation turn delivery
2026-07-02 13:32:46 +08:00
chengyongru
2ebf5c4972
refactor(trigger): name CLI trigger source as local
...
maintainer edit: cron is also a trigger source, so keep the new CLI-delivered source explicitly named as local trigger across backend, WebUI, docs, and tests.
2026-07-02 13:32:46 +08:00
chengyongru
55b550ee01
fix(trigger): hide external trigger inputs
2026-07-02 13:32:46 +08:00
chengyongru
5f4cfbcb16
refactor(bus): type outbound runtime events
2026-07-01 20:17:00 +08:00
chengyongru
9b45fc1172
fix(session): remove message time replay prefixes
2026-06-27 11:04:36 +08:00
Xubin Ren
7bec0f6e01
fix(api): honor skip-user persist through save boundary
2026-06-16 21:31:26 +08:00
chengyongru
27d869d3cc
fix(agent): refresh goal continuation context
2026-06-16 11:19:24 +08:00
Xubin Ren
dac4e39bcf
Merge PR #4299 : feat(cron): bind scheduled automations to sessions
...
feat(cron): bind scheduled automations to sessions
2026-06-13 00:07:55 +08:00
chengyongru
d72d0102d9
style: trim orphan toolcall comments
...
maintainer edit: keep the invariant comments in production code but remove repeated issue background from tests.
2026-06-13 00:05:03 +08:00
chengyongru
33e6da14d8
fix: drop tool results missing call ids
...
maintainer edit: treat tool messages without tool_call_id as orphaned during session persistence so malformed results cannot survive into history.
2026-06-13 00:05:03 +08:00
tangtaizhong666
eb25df9b49
fix(session): never persist tool results without a declared tool call
2026-06-13 00:05:03 +08:00
tangtaizhong666
2ebf7e2eef
fix(session): keep placeholder for tool results filtered to empty
2026-06-13 00:05:03 +08:00
tangtaizhong666
df832a37e9
test(session): reproduce orphaned tool results from save-boundary overshoot ( #4006 )
2026-06-13 00:05:03 +08:00
chengyongru
32d8a1dd7b
fix: hide internal cron prompts from webui
2026-06-12 18:17:28 +08:00
chengyongru
80524e9e88
refactor: bind cron jobs to origin sessions
2026-06-12 14:00:53 +08:00
chengyongru
271b3651d7
refactor: use cron turn naming internally
2026-06-12 11:57:35 +08:00
chengyongru
d9d481bc15
refactor: centralize cron session metadata keys
2026-06-12 11:43:23 +08:00
chengyongru
a326ba40f4
feat(cron): bind scheduled automations to sessions
2026-06-11 19:48:07 +08:00
Xubin Ren and chengyongru
ab9f49970d
feat(desktop): polish desktop shell and shared WebUI surfaces ( #4195 )
...
* feat(desktop): add native host scaffold
* feat(webui): track turns and usage in gateway
* feat(webui): polish desktop chat experience
* feat(apps): add ArcGIS and Joplin logos
* feat(desktop): polish shell and shared surfaces
* fix(webui): avoid preview chips for glob references
* test: align CI expectations for token fallback
* feat(webui): preview prompt rail entries
* feat(webui): add prompt navigator drawer
* style(webui): refine prompt navigator placement
* style(webui): align prompt navigator with header actions
* style(webui): simplify prompt navigator header
* refactor(webui): clean thread resource refresh
* feat(desktop): add native reply notifications
* fix(webui): preserve desktop restart and replay state
* fix(desktop): harden gateway proxy startup
* fix(web): fall back when readability is unavailable
* fix(desktop): hide window instead of closing on macos
* fix(webui): unify desktop header actions
* fix(webui): simplify prompt history rows
* fix(desktop): log notification delivery failures
* chore(desktop): clean source package artifacts
* fix(cron): support one-time relative reminders
* fix(webui): reveal scroll button in place
* Revert "fix(cron): support one-time relative reminders"
This reverts commit 4c4661da120a3c7283e0768412bae48604e7390b.
* refactor(webui): extract token usage heatmap
* docs(desktop): clarify contributor guides
---------
Co-authored-by: chengyongru <2755839590@qq.com >
2026-06-06 19:49:33 +08:00
chengyongru
628b250e9a
refactor: decouple webui runtime state via events
2026-06-01 23:00:53 +08:00
Xubin Ren
be2e0172d1
fix(agent): extend sustained goal iteration budget
2026-06-01 04:00:15 +08:00
Xubin Ren
3dcf511c84
feat(webui): refine output timeline and model controls ( #4108 )
...
* feat(webui): refine output timeline and composer queue
* feat(webui): add provider model picker
* fix(webui): polish model settings and heartbeat checks
* chore: keep heartbeat changes out of webui pr
* refactor(webui): isolate settings routes
* fix(providers): align minimax anthropic test
* fix(providers): keep minimax anthropic base sdk-compatible
* fix(providers): normalize anthropic base urls
2026-05-30 23:45:26 +08:00
chengyongru
fe2af64e04
refactor(heartbeat): migrate heartbeat service to cron-based auto-registration
...
Remove standalone nanobot/heartbeat/ service and replace it with an
auto-registered system cron job on gateway startup. Key behaviors preserved:
- HeartbeatConfig (enabled, interval_s, keep_recent_messages) remains in
GatewayConfig for backward compatibility.
- On startup, if enabled, a system cron job "heartbeat" is registered with
schedule derived from interval_s.
- HEARTBEAT.md is checked on each tick; empty/template-identical files skip
to avoid wasting LLM calls.
- Post-run evaluate_response and session history truncation
(keep_recent_messages) are retained.
- Delivery target selection, deliverable filtering, and preamble guidance
are preserved.
Files removed:
- nanobot/heartbeat/__init__.py
- nanobot/heartbeat/service.py
- tests/heartbeat/*
- tests/agent/test_heartbeat_service.py
Templates and docs updated to reflect cron-based usage.
2026-05-28 20:20:28 +08:00