Commit Graph
2951 Commits
Author SHA1 Message Date
Xubin Ren 7bec0f6e01 fix(api): honor skip-user persist through save boundary 2026-06-16 21:31:26 +08:00
04cbandXubin Ren d75f80437c fix(api): don't re-persist user turn on empty-response retry (#4079)
The non-streaming retry called process_direct again with the same
content, persisting a duplicate user turn. Pass persist_user_message=False
so the retry recovers a response without re-recording the user message.
2026-06-16 21:31:26 +08:00
Xubin Ren 25a55fe1c7 fix(providers): enable thinking for Kimi K2.7 models 2026-06-16 17:44:22 +08:00
comadrejaandXubin Ren 4262375c19 chore: ignore bridge/node_modules
The .gitignore already excludes desktop/ and webui/ node_modules but
not the bridge's. Add bridge/node_modules/ so the compiled bridge deps
are never accidentally committed.
2026-06-16 17:32:02 +08:00
Heng Wei BinandXubin Ren 5573a9d78e fix(webui): override wsUrl with local LAN IP when on dev server port 5173 2026-06-16 17:31:32 +08:00
chengyongruandXubin Ren 27d869d3cc fix(agent): refresh goal continuation context 2026-06-16 11:19:24 +08:00
chengyongruandXubin Ren 3ce0cd972e fix(session): keep auto compact suffix on user turn 2026-06-15 19:03:37 +08:00
9814a3b9fe fix(api): forward real LLM usage in /v1/chat/completions response (#4310)
* fix(api): forward real LLM usage in /v1/chat/completions response

_chat_completion_response() hardcoded prompt_tokens/completion_tokens
to zero.  Now reads agent_loop._last_usage (set by process_direct
after every LLM call) and forwards the actual prompt/completion counts.

Streaming path is unchanged; usage is only surfaced in non-streaming
responses for now.

Fixes #4309

* fix: use defensive getattr for _last_usage and add it to all test mock agents

- Use getattr(agent_loop, '_last_usage', None) in server.py for safety
- Add _last_usage = {} to mock agents in test_api_attachment.py and test_api_stream.py
- Prevents AttributeError/500 when mock agents don't have the attribute

* fix(api): preserve provider total usage

---------

Co-authored-by: michaelxer <michaelxer@users.noreply.github.com>
Co-authored-by: Xubin Ren <52506698+Re-bin@users.noreply.github.com>
2026-06-15 15:13:11 +08:00
Stellar鱼andGitHub f85101f017 fix(memory): ignore malformed history entries (#4315) 2026-06-15 15:13:07 +08:00
Stellar鱼andGitHub a54e56c69e fix(runner): ignore empty injected payloads (#4337) 2026-06-15 15:13:03 +08:00
chengyongruandXubin Ren fbbb09e9a5 fix: use config base for file tools
Maintainer edit: after #4314 moved shared tool config models to nanobot.config_base, keep FileToolsConfig on the new dependency boundary so the PR passes the architecture guard.
2026-06-15 02:55:18 +08:00
chengyongruandXubin Ren 44ce220af6 fix: preserve file tool toggle for subagents
Maintainer edit: subagents rebuilt their scoped ToolsConfig without carrying tools.file, which re-enabled built-in file tools after the parent agent disabled them. Preserve the file config and add loader/subagent coverage for the disabled path.
2026-06-15 02:55:18 +08:00
Nir AdlerandXubin Ren fee21332d3 Remove redundant comment in FileToolsConfig 2026-06-15 02:55:18 +08:00
Nir AdlerandXubin Ren df0f9f4d5c tools: add tools.file.enable to toggle built-in filesystem tools (default true) 2026-06-15 02:55:18 +08:00
chengyongruandXubin Ren f31a9c4cb0 fix: reduce mobile gap above composer 2026-06-15 02:54:37 +08:00
chengyongruandXubin Ren 4232e8547d fix: keep thread pinned during keyboard resize 2026-06-15 02:54:37 +08:00
chengyongruandXubin Ren c5a735549a fix: scroll thread to bottom on composer focus 2026-06-15 02:54:37 +08:00
chengyongruandXubin Ren 052e7f1559 fix: keep mobile composer above soft keyboard 2026-06-15 02:54:37 +08:00
chengyongruandXubin Ren 946ed6690a fix(webui): improve mobile responsiveness 2026-06-15 02:54:37 +08:00
Xubin Ren f30ef9f28e docs(readme): add themed cover image 2026-06-14 19:22:47 +08:00
chengyongruandXubin Ren b226a95588 fix(webui): localize update check copy 2026-06-14 17:59:31 +08:00
Xubin Ren 1b17aa1632 docs(readme): link Kimi partner banner 2026-06-14 14:52:18 +08:00
fde5654ded docs: add Kimi and MiniMax partner links (#4295)
* docs(config): add Kimi affiliate link

* docs(readme): add Kimi collaborator banner

* docs(readme): add MiniMax collaborator link

---------

Co-authored-by: xumingyuan <xumingyuan@msh.team>
Co-authored-by: Xubin Ren <52506698+Re-bin@users.noreply.github.com>
2026-06-14 14:43:36 +08:00
qcypggsandXubin Ren cb2620c877 Fix Codex image SSE handling 2026-06-14 12:52:40 +08:00
axelray-devandXubin Ren ad89cbb24f test(providers): use real Fable model ID claude-fable-5 in tests
Replace placeholder claude-fable-1 with the actual API model ID.
2026-06-14 12:52:07 +08:00
axelray-devandXubin Ren 29d7186853 fix(providers): widen omit_temperature to cover opus-4-8 and fable
The temperature suppression was hardcoded to only match opus-4-7. Newer
Anthropic models (opus-4-8, fable) also reject the parameter with a 400.

Normalize model_name to lowercase before matching so mixed-case configs
do not fall through.  Add tests for opus-4-8 and fable across adaptive,
enabled, and no-thinking paths, plus a negative test confirming ordinary
models still send temperature.

Fixes #4333
2026-06-14 12:52:07 +08:00
04cbandXubin Ren e36c43c9e5 fix(cli): use configured bot_icon for agent interactive banner (#4262) 2026-06-14 12:51:43 +08:00
chengyongruandXubin Ren be6419b289 refactor(memory): clarify idle compact archive inputs
maintainer edit: rename the idle compact archive inputs so the code distinguishes messages being removed from messages being summarized. This keeps the #4264 behavior unchanged while making the retained-suffix summary rule easier to read.
2026-06-13 22:24:30 +08:00
tangtaizhong666andXubin Ren 0863e6e5ab fix(memory): summarize full session tail during idle compaction (#4264)
Idle compaction summarized only the dropped prefix, excluding the recent
suffix it retains. On a finished conversation a late user correction or
final result lands in that kept suffix, so it never reached the persisted
summary and history kept the stale pre-correction conclusion — which, for
idle sessions that are rarely resumed, is never fixed.

Summarize over the full unconsolidated tail instead, while still removing
(and raw-dumping on LLM failure) only the dropped messages. Adds an opt-in
summary_context argument to Consolidator.archive so the summarization
window and the archived set can differ without affecting other callers.
2026-06-13 22:24:30 +08:00
chengyongruandXubin Ren 04ed7554c0 Simplify WebUI startup loading fix 2026-06-13 21:59:36 +08:00
chengyongruandXubin Ren af0e3441d7 Fix WebUI startup blocking on slow gateway routes 2026-06-13 21:59:36 +08:00
chengyongruandXubin Ren 3a221d74cf Break tool config schema import cycle 2026-06-13 21:59:07 +08:00
Xubin Ren 7ff8e02eaf chore(repo): remove desktop app from core repo 2026-06-13 00:14:21 +08:00
Xubin RenandGitHub 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
Xubin RenandGitHub 1b3b322674 Merge PR #4226: feat(bridge): WhatsApp forwarded message detection, startup guard, and contact handling
feat(bridge): WhatsApp forwarded message detection, startup guard, and contact handling
2026-06-13 00:05:58 +08:00
chengyongruandXubin Ren 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
chengyongruandXubin Ren 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
tangtaizhong666andXubin Ren eb25df9b49 fix(session): never persist tool results without a declared tool call 2026-06-13 00:05:03 +08:00
tangtaizhong666andXubin Ren 2ebf7e2eef fix(session): keep placeholder for tool results filtered to empty 2026-06-13 00:05:03 +08:00
tangtaizhong666andXubin Ren ac5e84d453 fix(session): anchor save boundary to prompt prefix size (#4006)
build_messages merges the current message into a same-role history tail,
shrinking the prompt prefix to 1 + history_count. The save boundary
assumed a standalone current message and skipped one message too many,
cutting the first new-turn assistant message (with its tool_calls) from
persistence while keeping its tool results - producing orphaned tool
results in session history.
2026-06-13 00:05:03 +08:00
tangtaizhong666andXubin Ren df832a37e9 test(session): reproduce orphaned tool results from save-boundary overshoot (#4006) 2026-06-13 00:05:03 +08:00
chengyongruandXubin Ren 30640e9e00 docs: clarify model prefix provider resolution 2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren c282012607 fix: resolve auto custom provider settings state
maintainer edit: use the resolved provider row when WebUI settings evaluates auto-selected providers, so named custom providers follow their apiBase-based configured state instead of the legacy has_api_key fallback.
2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren af9f9ebfd7 fix: reject custom provider alias conflicts
maintainer edit: reject arbitrary custom provider keys that normalize to built-in provider names so runtime and WebUI settings cannot disagree about whether a provider is dynamic or built in.
2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren b2d00a4ce0 fix: strip dynamic custom provider route prefixes
maintainer edit: preserve provider-prefix CLI routing for named custom providers by stripping only the matched dynamic route prefix before sending the model id to OpenAI-compatible endpoints. This keeps ordinary namespaced model ids intact when the provider is selected explicitly.
2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren 09d24e6c25 fix: validate named custom provider endpoints 2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren a9308eb8e2 docs: clarify custom provider protocol support
maintainer edit: spell out that arbitrary named custom providers use the OpenAI-compatible request format only, and point Anthropic-compatible proxies to the built-in anthropic provider with apiBase.
2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren 69d66e0d6a docs: document named custom providers
maintainer edit: explain how to configure arbitrary OpenAI-compatible provider names, including multiple endpoints, model presets, and troubleshooting guidance.
2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren 57ced7930d refactor: simplify dynamic provider settings tests
maintainer edit: keep the WebUI dynamic-provider behavior unchanged while reducing repeated test setup and tightening the small dynamic-provider helper.
2026-06-13 00:04:13 +08:00
chengyongruandXubin Ren 37ae655fa6 fix: expose dynamic custom providers in WebUI settings
maintainer edit: WebUI settings still treated non-registry custom providers as unknown, so users could not select them in model configurations or fetch their model list. Reuse dynamic provider specs for settings payloads, model-list requests, and provider updates.
2026-06-13 00:04:13 +08:00