Commit Graph
100 Commits
Author SHA1 Message Date
Xubin RenandXubin Ren d6df665a2c docs: add contributing guide and align CI with nightly branch 2026-03-16 11:13:46 +08:00
Xubin RenandXubin Ren 5d1528a5f3 fix(heartbeat): inject shared current time context into phase 1 2026-03-16 10:52:26 +08:00
Xubin RenandXubin Ren d684fec27a Replace load_skill tool with read_file extra_allowed_dirs for builtin skills access
Instead of adding a separate load_skill tool to bypass workspace restrictions,
extend ReadFileTool with extra_allowed_dirs so it can read builtin skill paths
while keeping write/edit tools locked to the workspace. Fixes the original issue
for both main agent and subagents.

Made-with: Cursor
2026-03-15 23:21:02 +08:00
Xubin RenandXubin Ren c4628038c6 fix: handle image_url rejection by retrying without images
Replace the static provider-level supports_vision check with a
reactive fallback: when a model returns an image-unsupported error,
strip image_url blocks from messages and retry once. This avoids
maintaining an inaccurate vision capability table and correctly
handles gateway/unknown model scenarios.

Also extract _safe_chat() to deduplicate try/except boilerplate
in chat_with_retry().
2026-03-15 22:32:34 +08:00
Xubin RenandXubin Ren 196e0ddbb6 fix(openrouter): revert custom_llm_provider, always apply gateway prefix 2026-03-15 10:52:36 +08:00
Xubin RenandXubin Ren 350d110fb9 fix(openrouter): remove litellm_prefix to prevent double-prefixed model names
With custom_llm_provider kwarg handling routing, the openrouter/ prefix
caused model names like anthropic/claude-sonnet-4-6 to become
openrouter/anthropic/claude-sonnet-4-6, which OpenRouter API rejects.
2026-03-15 10:52:36 +08:00
Xubin RenandXubin Ren 5ccf350db1 test(litellm_kwargs): add regression tests for PR #2026 OpenRouter kwargs injection 2026-03-15 10:52:36 +08:00
Xubin Ren f6cefcc123 Merge PR #1966: feat(feishu): display tool calls in code block messages + fix empty 2026-03-14 15:48:10 +00:00
Xubin Ren 19ae7a167e fix(feishu): avoid breaking tool hint formatting and think stripping 2026-03-14 15:40:53 +00:00
Xubin Ren 44af7eca3f merge: resolve PR #1966 conflicts with main 2026-03-14 15:32:19 +00:00
Xubin Ren a4f6b7d978 merge: resolve PR #1963 conflicts with main 2026-03-14 14:00:00 +00:00
Xubin Ren 86cfbce077 Merge remote-tracking branch 'origin/main' into pr-1796 2026-03-14 13:11:56 +00:00
Xubin Ren 61f0923c66 fix(telegram): include restart in help text 2026-03-14 10:45:37 +00:00
Xubin RenandXubin Ren a1241ee68c fix(mcp): clarify enabledTools filtering semantics
- support both raw and wrapped MCP tool names
- treat [\"*\"] as all tools and [] as no tools
- add warnings, tests, and README docs for enabledTools
2026-03-14 18:33:48 +08:00
Xubin RenandXubin Ren 411b059dd2 refactor: replace <SILENT_OK> with structured post-run evaluation
- Add nanobot/utils/evaluator.py: lightweight LLM tool-call to decide notify/silent after background task execution
- Remove magic token injection from heartbeat and cron prompts
- Clean session history (no more <SILENT_OK> pollution)
- Add tests for evaluator and updated heartbeat three-phase flow
2026-03-14 17:41:08 +08:00
Xubin Ren af65145bc8 fix(qq): add configurable message format and onboard backfill 2026-03-14 08:25:44 +00:00
Xubin RenandXubin Ren dbdb43faff feat: channel plugin architecture with decoupled configs
- Add plugin discovery via Python entry_points (group: nanobot.channels)
- Move 11 channel Config classes from schema.py into their own channel modules
- ChannelsConfig now only keeps send_progress + send_tool_hints (extra=allow)
- Each built-in channel parses dict->Pydantic in __init__, zero internal changes
- All channels implement default_config() for onboard auto-population
- nanobot onboard injects defaults for all discovered channels (built-in + plugins)
- Add nanobot plugins list CLI command
- Add Channel Plugin Guide (docs/CHANNEL_PLUGIN_GUIDE.md)
- Fully backward compatible: existing config.json and sessions work as-is
- 340 tests pass, zero regressions
2026-03-14 16:13:38 +08:00
Xubin Ren 65cbd7eb78 docs: update web search configuration instruction 2026-03-13 05:54:51 +00:00
Xubin Ren 3040102c02 Merge PR #398: multi-provider web search 2026-03-13 05:44:16 +00:00
Xubin Ren ca5047b602 feat(web): multi-provider web search + Jina Reader fetch 2026-03-13 05:44:16 +00:00
Xubin Ren 511a335e82 Merge branch 'main' into pr-398 2026-03-13 05:12:10 +00:00
Xubin Ren 04b45e0e5c Merge PR #1920: langsmith integration 2026-03-13 04:54:22 +00:00
Xubin Ren 20b4fb3bff fix: langsmith callback 防覆盖 + 加 optional dep 2026-03-13 04:54:22 +00:00
Xubin Ren da325e4532 Merge branch 'main' into pr-1920 2026-03-13 04:20:14 +00:00
Xubin Ren bd4ec46681 merge: PR #1916 add CI workflow + fix matrix init + test cleanup 2026-03-13 04:05:11 +00:00
Xubin Ren 84b107cf6c fix(ci): upgrade setup-python, add system deps, simplify test assertions 2026-03-13 04:05:08 +00:00
Xubin Ren 4b50a7b6c0 Merge branch 'main' into pr-1916 2026-03-13 03:57:09 +00:00
Xubin Ren 2490af99d4 merge: PR #1810 validate save_memory payload + raw-archive fallback 2026-03-13 03:54:53 +00:00
Xubin Ren 6d3a0ab6c9 fix(memory): validate save_memory payload and raw-archive on repeated failure
- Require both history_entry and memory_update, reject null/empty values
- Fallback to tool_choice=auto when provider rejects forced function call
- After 3 consecutive consolidation failures, raw-archive messages to
  HISTORY.md without LLM summarization to prevent context window overflow
2026-03-13 03:53:50 +00:00
Xubin Ren 60c29702cc Merge branch 'main' into pr-1810
# Conflicts:
#	nanobot/agent/memory.py
#	tests/test_memory_consolidation_types.py
2026-03-13 03:29:16 +00:00
Xubin Ren 4f77b9385c fix(memory): fallback to tool_choice=auto when provider rejects forced function call
Some providers (e.g. Dashscope in thinking mode) reject object-style
tool_choice with "does not support being set to required or object".
Retry once with tool_choice="auto" instead of failing silently.

Made-with: Cursor
2026-03-13 03:18:08 +00:00
Xubin Ren e30d19e94d merge: PR #1919 reorder Hatch build tables in pyproject 2026-03-13 03:07:27 +00:00
Xubin Ren 4f05e30331 Merge remote-tracking branch 'origin/main' into pr-1919 2026-03-13 03:02:17 +00:00
Xubin Ren fb9d54da21 docs: update .gitignore to add .docs 2026-03-13 02:41:52 +00:00
Re-bin 774452795b fix(memory): use explicit function name in tool_choice for DashScope compatibility 2026-03-12 16:09:24 +00:00
Re-bin 109ae13301 Merge PR #1930: fix async interactive CLI formatting with prompt_toolkit 2026-03-12 15:38:39 +00:00
Re-bin 3fa62e7fda fix: remove duplicate dim/arrow prefix in interactive progress line 2026-03-12 15:38:39 +00:00
Re-bin 48c74a11d4 Merge remote-tracking branch 'origin/main' into pr-1930 2026-03-12 15:28:57 +00:00
Re-bin ab087ed05f Merge PR #1608: add VolcEngine/BytePlus providers and improve local provider auto-selection 2026-03-12 15:22:15 +00:00
Re-bin 3467a7faa6 fix: improve local provider auto-selection and update docs for VolcEngine/BytePlus 2026-03-12 15:22:15 +00:00
Re-bin c38579dc22 Merge PR #1900: telegram reply context and media forwarding 2026-03-12 06:16:57 +00:00
Re-bin 64888b4b09 Simplify reply context extraction, fix slash commands broken by reply injection, attach reply media regardless of caption 2026-03-12 06:16:57 +00:00
Re-bin 869149ef1e Merge branch 'main' into pr-1900 2026-03-12 06:06:26 +00:00
Re-bin 6141b95037 fix: feishu bot mention detection — user_id can be None, not just empty string 2026-03-12 06:00:39 +00:00
Re-bin af4e3b2647 Merge PR #1768: feishu group mention policy 2026-03-12 04:45:57 +00:00
Re-bin bd1ce8f144 Simplify feishu group_policy: default to mention, clean up mention detection 2026-03-12 04:45:57 +00:00
Re-bin 94e9b06086 Merge branch 'main' into pr-1768 2026-03-12 04:38:49 +00:00
Re-bin 95c741db62 docs: update nanobot key features 2026-03-12 04:35:34 +00:00
Re-bin ad2be4ea8b Merge PR #1751: add /restart command 2026-03-12 04:33:51 +00:00
Re-bin 64aeeceed0 Add /restart command: restart the bot process from any channel 2026-03-12 04:33:51 +00:00
Re-bin 231b02963d Merge branch 'main' into pr-1751
Made-with: Cursor

# Conflicts:
#	nanobot/agent/loop.py
2026-03-12 03:53:59 +00:00
Re-bin 0a0017ff45 fix: raise tool result history limit to 16k and force save_memory in consolidation 2026-03-12 03:08:53 +00:00
Re-bin 35260ca157 fix: raise persisted tool result limit to 16k 2026-03-12 02:50:28 +00:00
Re-bin 6155a43b8a Merge PR #1845: absorb shell path guard improvements 2026-03-11 17:27:17 +00:00
Re-bin dff1643fb3 Merge branch 'main' into pr-1845 2026-03-11 17:25:22 +00:00
Re-bin 0d94211a93 enhance: improve filesystem & shell tools with pagination, fallback matching, and smarter output 2026-03-11 16:20:11 +00:00
Re-bin f869a53531 Merge PR #1827: tighten shell path guard for quoted home paths 2026-03-11 15:43:07 +00:00
Re-bin 9d0db072a3 fix: guard quoted home paths in shell tool 2026-03-11 15:43:04 +00:00
Re-bin 85609c99b3 Merge remote-tracking branch 'origin/main' into pr-1827 2026-03-11 15:32:52 +00:00
Re-bin d954e774dd Merge PR #1874: preserve provider-specific tool-call fields 2026-03-11 15:30:33 +00:00
Re-bin 9fc74bde9a Merge remote-tracking branch 'origin/main' into pr-1874 2026-03-11 15:26:39 +00:00
Re-bin 254cfd48ba refactor: auto-discover channels via pkgutil, eliminate hardcoded registry 2026-03-11 14:23:19 +00:00
Re-bin b957dbc4cf Merge PR #1868: generation settings owned by provider, loop/memory/subagent agnostic 2026-03-11 09:47:04 +00:00
Re-bin c72c2ce7e2 refactor: move generation settings to provider level, eliminate parameter passthrough 2026-03-11 09:47:04 +00:00
Re-bin a180e84536 Merge remote-tracking branch 'origin/main' into pr-1868 2026-03-11 09:10:29 +00:00
Re-bin 89eff6f573 chore: remove stray nano backup files 2026-03-11 08:44:38 +00:00
Re-bin e7761aae5b Merge PR #1863: add Ollama as a local LLM provider 2026-03-11 08:42:12 +00:00
Re-bin 4478838424 fix(pr-1863): complete Ollama provider routing and README docs 2026-03-11 08:42:12 +00:00
Re-bin a6f37f61e8 Merge remote-tracking branch 'origin/main' into pr-1863 2026-03-11 08:22:02 +00:00
Re-bin ec87946c04 docs: update table of contents position 2026-03-11 08:11:28 +00:00
Re-bin 486df1ddbd docs: update table of contents in README 2026-03-11 08:10:38 +00:00
Re-bin 7ceddcded6 fix(wecom): await async disconnect, add SDK attribution in README 2026-03-11 08:04:14 +00:00
Re-bin 0dff7d374e Merge PR #1327: add WeCom channel 2026-03-11 07:57:12 +00:00
Re-bin d0b4f0d70d feat(wecom): add WeCom channel with SDK pinned to GitHub tag v0.1.2 2026-03-11 07:57:12 +00:00
Re-bin eb6310c438 merge origin/main into pr-1327
Made-with: Cursor
2026-03-11 07:30:38 +00:00
Re-bin 82f4607b99 merge: PR #1856 exclude hidden files when syncing workspace templates 2026-03-11 03:50:54 +00:00
Re-bin 76c6063141 chore: normalize helpers.py file mode 2026-03-11 03:50:54 +00:00
Re-bin f339f505cd Merge remote-tracking branch 'origin/main' into pr-1856 2026-03-11 03:48:05 +00:00
Re-bin 40721a7871 merge: PR #1848 preserve subagent reasoning fields across tool turns 2026-03-11 03:47:24 +00:00
Re-bin ddccf25bb1 fix(subagent): preserve reasoning fields across tool turns
Share assistant message construction between the main agent and subagents, and add a regression test to keep reasoning_content and thinking_blocks in follow-up tool rounds.
2026-03-11 03:47:24 +00:00
Re-bin 1d611f9bf3 Merge remote-tracking branch 'origin/main' into pr-1848 2026-03-11 03:42:14 +00:00
Re-bin df5c0496d3 merge: PR #1859 support DingTalk voice recognition text 2026-03-11 03:40:33 +00:00
Re-bin 91f17cad00 feat(dingtalk): support voice recognition text fallback
Read DingTalk recognition text when text.content is empty, and add a handler-level regression test for voice transcript delivery.
2026-03-11 03:40:33 +00:00
Re-bin ef88a5be00 Merge remote-tracking branch 'origin/main' into pr-1859 2026-03-11 03:32:07 +00:00
Re-bin 6747b23c00 merge: PR #1704 switch memory consolidation to token-based context windows 2026-03-10 19:55:06 +00:00
Re-bin 62ccda43b9 refactor(memory): switch consolidation to token-based context windows
Move consolidation policy into MemoryConsolidator, keep backward compatibility for legacy config, and compress history by token budget instead of message count.
2026-03-10 19:55:06 +00:00
Re-bin 4784eb4128 merge origin/main into pr-1704 2026-03-10 18:09:15 +00:00
Re-bin 947ed508ad chore: exclude skills from core agent line count 2026-03-10 10:13:46 +00:00
Re-bin a3b617e602 Merge PR #1512: share transient LLM retry across agent paths 2026-03-10 10:10:40 +00:00
Re-bin b0a5435b87 refactor(llm): share transient retry across agent paths 2026-03-10 10:10:37 +00:00
Re-bin 46b31ce7e7 Merge remote-tracking branch 'origin/main' into pr-1512 2026-03-10 09:40:48 +00:00
Re-bin 417a8a22b0 Merge PR #1416: sync missing scripts from upstream openclaw repository and restore skill-creator validation 2026-03-10 09:20:22 +00:00
Re-bin b7ecc94c9b fix(skill-creator): restore validation and align packaging docs 2026-03-10 09:16:23 +00:00
Re-bin 6abd3d10ce Merge remote-tracking branch 'origin/main' into pr-1416 2026-03-10 09:00:02 +00:00
Re-bin a1b5f21b8b merge: PR #1389 add Telegram groupPolicy support 2026-03-10 04:34:18 +00:00
Re-bin 4f9857f85f feat(telegram): add configurable group mention policy 2026-03-10 04:34:15 +00:00
Re-bin 8aa754cd2e Merge branch 'main' into pr-1389 2026-03-10 04:26:12 +00:00
Re-bin d803144f44 merge: PR #1785 respect gateway port from config when --port omitted 2026-03-10 04:08:00 +00:00
Re-bin 0ecfb0a9d6 Merge branch 'main' into pr-1785 2026-03-10 04:07:53 +00:00
Re-bin 39d21bc19d merge: PR #1797 let gateway use configured port by default 2026-03-10 03:54:46 +00:00