Xubin Ren and Xubin Ren
d6df665a2c
docs: add contributing guide and align CI with nightly branch
2026-03-16 11:13:46 +08:00
Xubin Ren and Xubin Ren
5d1528a5f3
fix(heartbeat): inject shared current time context into phase 1
2026-03-16 10:52:26 +08:00
Xubin Ren and Xubin 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 Ren and Xubin 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 Ren and Xubin Ren
196e0ddbb6
fix(openrouter): revert custom_llm_provider, always apply gateway prefix
2026-03-15 10:52:36 +08:00
Xubin Ren and Xubin 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 Ren and Xubin 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 Ren and Xubin 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 Ren and Xubin 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 Ren and Xubin 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