Xubin Ren and Xubin Ren
d108879b48
security: bind api port to localhost by default
...
Prevents accidental exposure to the public internet. Users who need
external access can change to 0.0.0.0:8900:8900 explicitly.
Made-with: Cursor
2026-04-06 16:20:20 +08:00
Xubin Ren and Xubin Ren
634261f07a
fix: correct api-workspace path for non-root container user
...
The Dockerfile runs as user nanobot (HOME=/home/nanobot), not root.
Made-with: Cursor
2026-04-06 16:20:20 +08:00
Xubin Ren and Xubin Ren
ebf29d87ae
fix: include byteplus providers, guard None reasoning_effort, merge extra_body
...
- Add byteplus and byteplus_coding_plan to thinking param providers
- Only send extra_body when reasoning_effort is explicitly set
- Use setdefault().update() to avoid clobbering existing extra_body
- Add 7 regression tests for thinking params
Made-with: Cursor
2026-04-06 16:12:08 +08:00
Xubin Ren and Xubin Ren
c0e161de23
docs: add attachment example to email config JSON
...
Made-with: Cursor
2026-04-06 15:09:44 +08:00
Xubin Ren and Xubin Ren
b98a0aabfc
style: fix stdlib import ordering in email.py
...
Made-with: Cursor
2026-04-06 15:09:44 +08:00
Xubin Ren
bdec2637ae
test: add regression test for oversized stream-end splitting
...
Made-with: Cursor
2026-04-06 06:39:23 +00:00
Xubin Ren
09ec9991e1
Merge remote-tracking branch 'origin/main' into pr-2520
...
Made-with: Cursor
# Conflicts:
# nanobot/channels/telegram.py
2026-04-06 06:37:54 +00:00
Xubin Ren
c9d4b7b905
Merge remote-tracking branch 'origin/main' into pr-2449
...
Made-with: Cursor
# Conflicts:
# nanobot/utils/evaluator.py
2026-04-06 06:30:11 +00:00
Xubin Ren
897d5a7e58
test: add regression tests for JID suffix classification and LID cache
...
Made-with: Cursor
2026-04-06 06:19:06 +00:00
Xubin Ren
722ffe0654
Merge remote-tracking branch 'origin/main' into pr-2531
...
Made-with: Cursor
# Conflicts:
# nanobot/channels/whatsapp.py
2026-04-06 06:17:56 +00:00
Xubin Ren
019eaff225
simplify: remove transcription fallback, respect explicit config
...
Configured provider is the only one used — no silent fallback.
Made-with: Cursor
2026-04-06 06:13:43 +00:00
Xubin Ren
3bf1fa5225
feat: auto-fallback to other transcription provider on failure
...
When the primary transcription provider fails (bad key, API error, etc.),
automatically try the other provider if its API key is available.
Made-with: Cursor
2026-04-06 06:10:08 +00:00
Xubin Ren
35dde8a30e
refactor: unify voice transcription config across all channels
...
- Move transcriptionProvider to global channels config (not per-channel)
- ChannelManager auto-resolves API key from matching provider config
- BaseChannel gets transcription_provider attribute, no more getattr hack
- Remove redundant transcription fields from WhatsAppConfig
- Update README: document transcriptionProvider, update provider table
Made-with: Cursor
2026-04-06 06:07:30 +00:00
Xubin Ren
7b7a3e5748
fix: media_paths NameError, import order, add error logging and tests
...
- Move media_paths assignment before voice message handling to prevent
NameError at runtime
- Fix broken import layout in transcription.py (httpx/loguru after class)
- Add error logging to OpenAITranscriptionProvider matching Groq style
- Add regression tests for voice transcription and no-media fallback
Made-with: Cursor
2026-04-06 06:01:14 +00:00
Xubin Ren
413740f585
Merge remote-tracking branch 'origin/main' into pr-2530
...
Made-with: Cursor
# Conflicts:
# nanobot/channels/whatsapp.py
2026-04-06 05:59:31 +00:00
Xubin Ren and Xubin Ren
71061a0c82
fix: return on login failure, use loguru format strings, fix import order
...
- Add missing return after failed password login to prevent starting
sync loop with no credentials
- Replace f-strings in logger calls with loguru {} placeholders
- Fix stdlib import order (asyncio before json)
Made-with: Cursor
2026-04-06 13:57:57 +08:00
Xubin Ren and Xubin Ren
f82b5a1b02
fix: graceful fallback when langfuse is not installed
...
- Use import importlib.util (not bare importlib) for find_spec
- Warn and fall back to standard openai instead of crashing with
ImportError when LANGFUSE_SECRET_KEY is set but langfuse is missing
Made-with: Cursor
2026-04-06 13:53:42 +08:00
Xubin Ren and Xubin Ren
c88d97c652
fix: fall back to heuristic when bot open_id fetch fails
...
If _fetch_bot_open_id returns None the exact-match path would silently
disable all @mention detection. Restore the old heuristic as a fallback.
Add 6 unit tests for _is_bot_mentioned covering both paths.
Made-with: Cursor
2026-04-06 13:49:38 +08:00
Xubin Ren and Xubin Ren
424b9fc262
refactor: extract _kill_process helper to DRY timeout/cancel cleanup
...
Made-with: Cursor
2026-04-06 13:47:09 +08:00
Xubin Ren and Xubin Ren
7ffd93f48d
refactor: move search_usage to utils/searchusage, remove brave stub
...
- Rename agent/tools/search_usage.py → utils/searchusage.py
(not an LLM tool, matches utils/ naming convention)
- Remove redundant _fetch_brave_usage — handled by else branch
- Move test to tests/utils/test_searchusage.py
Made-with: Cursor
2026-04-06 13:37:55 +08:00
Xubin Ren and Xubin Ren
28e0a76b80
fix: path_append must not clobber login shell PATH
...
Seeding PATH in the env before bash -l caused /etc/profile
to skip its default PATH setup, breaking standard commands.
Move path_append to an inline export so the login shell
establishes a proper base PATH first.
Add regression test: ls still works when path_append is set.
Made-with: Cursor
2026-04-06 13:20:53 +08:00
Xubin Ren
84b1c6a0d7
docs: update nanobot features
2026-04-05 20:07:11 +00:00
Xubin Ren
3c28d1e651
docs: rename Assistant to Agent across README
2026-04-05 20:06:38 +00:00
Xubin Ren
861072519a
chore: remove codespell CI workflow and config, keep typo fixes only
...
Made-with: Cursor
2026-04-05 19:59:49 +00:00
Xubin Ren
70bdf4a9f5
Merge origin/main into enh-codespell (resolve pyproject.toml conflict)
...
Made-with: Cursor
2026-04-05 19:57:50 +00:00
Xubin Ren
9823130432
docs: clarify bwrap sandbox is Linux-only
2026-04-05 19:28:46 +00:00
Xubin Ren
9f96be6e9b
fix(sandbox): mount media directory read-only inside bwrap sandbox
2026-04-05 19:08:38 +00:00
Xubin Ren
cef0f3f988
refactor: replace podman-seccomp.json with minimal cap_add, harden bwrap, add sandbox tests
2026-04-05 19:03:06 +00:00
Xubin Ren
a8707ca8f6
Merge origin/main into feat/best_skill_and_hook (resolve 4 conflicts)
...
Made-with: Cursor
2026-04-05 18:53:17 +00:00
Xubin Ren and Xubin Ren
bb9da29eff
test: add regression tests for private DM thread session key derivation
...
Made-with: Cursor
2026-04-06 02:44:21 +08:00
Xubin Ren and Xubin Ren
4b4d8b506d
test: add regression test for DuckDuckGo asyncio.wait_for timeout guard
...
Made-with: Cursor
2026-04-06 02:21:51 +08:00
Xubin Ren and Xubin Ren
90caf5ce51
test: remove duplicate test_jina_422_falls_back_to_duckduckgo
...
The same test function name appeared twice; Python silently shadows the
first definition so it never ran. Keep the version that also asserts
the request URL contains "s.jina.ai".
Made-with: Cursor
2026-04-06 02:06:00 +08:00
Xubin Ren
acf652358c
feat(dream): non-blocking /dream with progress feedback
2026-04-05 15:48:00 +00:00
Xubin Ren
33bef8d508
Merge remote-tracking branch 'origin/main' into feat/search-tools
...
Made-with: Cursor
2026-04-04 14:37:59 +00:00
Xubin Ren and Xubin Ren
f4983329c6
fix(docker): preserve both github ssh rewrite rules for npm install
2026-04-04 22:33:46 +08:00
Xubin Ren
1c1eee523d
fix: secure whatsapp bridge with automatic local auth token
2026-04-04 14:16:46 +00:00
Xubin Ren
77a88446fb
Merge remote-tracking branch 'origin/main' into pr-2722
2026-04-04 13:51:59 +00:00
Xubin Ren and Xubin Ren
17d9d74ccc
fix(provider): omit temperature for GPT-5 models
2026-04-04 20:18:22 +08:00
Xubin Ren and Xubin Ren
11c84f21a6
test(session): preserve reasoning_content in session history
2026-04-04 20:08:44 +08:00
Xubin Ren and Xubin Ren
05fe7d4fb1
fix(tools): isolate decorated tool schemas and add regression tests
2026-04-04 19:58:44 +08:00
Xubin Ren and Xubin Ren
9ef5b1e145
fix: reset ssrf whitelist on config reload and document config refresh
2026-04-04 19:43:18 +08:00
Xubin Ren
c3b4ebae53
refactor(agent): move internal prompts into packaged templates
2026-04-04 11:09:37 +00:00
Xubin Ren
7b852506ff
fix(telegram): register Dream menu commands with Telegram-safe aliases
...
Use dream_log and dream_restore in Telegram's bot command menu so command registration succeeds, while still accepting the original dream-log and dream-restore forms in chat. Keep the internal command routing unchanged and add coverage for the alias normalization path.
2026-04-04 10:31:26 +00:00
Xubin Ren
549e5ea8e2
fix(telegram): shorten polling network errors
2026-04-04 10:26:58 +00:00
Xubin Ren
04419326ad
fix(memory): migrate legacy HISTORY.md even when history.jsonl is empty
2026-04-04 10:11:53 +00:00
Xubin Ren
0a3a60a7a4
refactor(memory): simplify Dream config naming and rename gitstore module
2026-04-04 10:01:45 +00:00
Xubin Ren
a166fe8fc2
docs: clarify memory design and source-vs-release features
2026-04-04 09:34:37 +00:00
Xubin Ren
408a61b0e1
feat(memory): protect Dream cron and polish migration UX
2026-04-04 09:01:42 +00:00
Xubin Ren
6e896249c8
feat(memory): harden legacy history migration and Dream UX
2026-04-04 08:41:46 +00:00
Xubin Ren
7e0c196797
fix(memory): repair Dream follow-up paths and move GitStore to utils
...
Made-with: Cursor
2026-04-04 04:49:42 +00:00
Xubin Ren
30ea048f19
Merge remote-tracking branch 'origin/main' into pr-2717-review
2026-04-04 04:42:52 +00:00
Xubin Ren and Xubin Ren
7229a81594
fix(providers): disable Azure SDK retries by default
...
Made-with: Cursor
2026-04-04 12:36:45 +08:00
Xubin Ren
91a9b7db24
Merge origin/main into fix/retry-after-robust
...
Made-with: Cursor
2026-04-03 19:07:30 +00:00
Xubin Ren and Xubin Ren
9840270f7f
test(tools): cover media dir access under workspace restriction
...
Made-with: Cursor
2026-04-04 03:03:58 +08:00
Xubin Ren
ca3b918cf0
docs: clarify retry behavior and web search defaults
2026-04-03 18:57:44 +00:00
Xubin Ren
400f8eb38e
docs: update web search configuration information
2026-04-03 18:44:46 +00:00
Xubin Ren
652377bee9
Merge origin/main into feat/web-disable-flag
...
Made-with: Cursor
2026-04-03 18:41:43 +00:00
Xubin Ren
f409337fcf
Merge remote-tracking branch 'origin/main' into pr-2646
2026-04-03 17:53:52 +00:00
Xubin Ren
cb84f2b908
docs: update nanobot news section
2026-04-03 16:18:36 +00:00
Xubin Ren
3c3a72ef82
update .gitignore
2026-04-03 16:02:23 +00:00
Xubin Ren
15cc9b23b4
feat(agent): add built-in grep and glob search tools
2026-04-02 15:37:57 +00:00
Xubin Ren
e4b335ce81
refactor: extract runtime response guards into utils runtime module
2026-04-02 13:54:40 +00:00
Xubin Ren
714a4c7bb6
fix(runtime): address review feedback on retry and cleanup
2026-04-02 10:57:12 +00:00
Xubin Ren
eefd7e60f2
Merge remote-tracking branch 'origin/main' into feat/runtime-hardening
2026-04-02 10:40:49 +00:00
Xubin Ren and Xubin Ren
3558fe4933
fix(cli): honor custom config path in channel commands
2026-04-02 18:37:46 +08:00
Xubin Ren and Xubin Ren
cc33057985
refactor(providers): rename openai responses helpers
2026-04-02 13:43:34 +08:00
Xubin Ren and Xubin Ren
ded0967c18
fix(providers): sanitize azure responses input messages
2026-04-02 13:43:34 +08:00
Xubin Ren and Xubin Ren
9ba413c82e
test(cron): cover deliver flag on scheduled jobs
2026-04-02 13:03:46 +08:00
Xubin Ren and Xubin Ren
a3e4c77fff
fix(providers): normalize anthropic cached token usage
2026-04-02 12:51:45 +08:00
Xubin Ren and Xubin Ren
485c75e065
test(exec): verify windows drive-root workspace guard
2026-04-02 04:00:03 +08:00
Xubin Ren and Xubin Ren
7e719f41cc
test(providers): cover github copilot lazy export
2026-04-02 03:46:40 +08:00
Xubin Ren and Xubin Ren
2ec68582eb
fix(sdk): route github copilot through oauth provider
2026-04-02 03:46:40 +08:00
Xubin Ren
fbedf7ad77
feat: harden agent runtime for long-running tasks
2026-04-01 19:12:49 +00:00
Xubin Ren and Xubin Ren
949a10f536
fix(weixin): reset QR poll host after refresh
2026-03-31 19:40:13 +08:00
Xubin Ren
bc8fbd1ce4
fix(weixin): reset QR poll host after refresh
2026-03-31 11:34:33 +00:00
Xubin Ren
6aad945719
Merge remote-tracking branch 'origin/main' into pr-2614
2026-03-31 11:29:36 +00:00
Xubin Ren and Xubin Ren
f450c6ef6c
fix(channel): preserve threaded streaming context
2026-03-31 19:26:07 +08:00
Xubin Ren and Xubin Ren
351e3720b6
test(agent): cover disabled subagent exec tool
...
Add a regression test for the maintainer fix so subagents cannot register ExecTool when exec support is disabled.
Made-with: Cursor
2026-03-31 12:14:28 +08:00
Xubin Ren and Xubin Ren
7fad14802e
feat: add Python SDK facade and per-session isolation
2026-03-31 11:26:43 +08:00
Xubin Ren and Xubin Ren
842b8b255d
fix(agent): preserve core hook failure semantics
2026-03-31 02:19:29 +08:00
Xubin Ren and Xubin Ren
758c4e74c9
fix(agent): preserve LoopHook error semantics when extra hooks are present
2026-03-31 02:19:29 +08:00
Xubin Ren
5e99b81c6e
refactor(api): reduce compatibility and test noise
...
Make the fixed-session API surface explicit, document its usage, exclude api/ from core agent line counts, and remove implicit aiohttp pytest fixture dependencies from API tests.
2026-03-30 15:05:06 +00:00
Xubin Ren
d9a5080d66
refactor(api): tighten fixed-session API contract
...
Require a single user message, reject mismatched models, document the OpenAI-compatible API, and exclude api/ from core agent line counts so the interface matches nanobot's minimal fixed-session runtime.
2026-03-30 14:43:22 +00:00
Xubin Ren
55501057ac
refactor(api): tighten fixed-session chat input contract
...
Reject mismatched models and require a single user message so the OpenAI-compatible endpoint reflects the fixed-session nanobot runtime without extra compatibility noise.
2026-03-30 14:20:14 +00:00
Xubin Ren
5635907e33
feat(api): load serve settings from config
...
Read serve host, port, and timeout from config by default, keep CLI flags higher priority, and bind the API to localhost by default for safer local usage.
2026-03-29 15:32:33 +00:00
Xubin Ren
a0684978fb
feat(api): add fixed-session OpenAI-compatible endpoint
...
Expose OpenAI-compatible chat completions and models endpoints through a single persistent API session, keeping the integration simple without adding multi-session isolation yet.
2026-03-29 14:48:52 +00:00
Xubin Ren
c8c520cc9a
docs: update providers information
2026-03-28 13:28:56 +00:00
Xubin Ren
17d21c8e64
docs: update news section for v0.1.4.post6 release
2026-03-27 15:18:31 +00:00
Xubin Ren
aebe928cf0
docs: update v0.1.4.post6 release news
2026-03-27 15:17:22 +00:00
Xubin Ren
a42a4e9d83
docs: update v0.1.4.post6 release news
2026-03-27 15:16:28 +00:00
Xubin Ren
c15f63a320
chore: bump version to 0.1.4.post6
2026-03-27 14:42:19 +00:00
Xubin Ren
9652e67204
Merge remote-tracking branch 'origin/main' into advisory-email-fix
2026-03-27 14:28:40 +00:00
Xubin Ren and Xubin Ren
f8c580d015
test(telegram): cover network error logging
2026-03-27 22:17:01 +08:00
Xubin Ren and Xubin Ren
e464a81545
fix(feishu): only stream visible cards
2026-03-27 21:59:11 +08:00
Xubin Ren and Xubin Ren
cf25a582ba
fix(channel): stop delta coalescing at stream boundaries
2026-03-27 21:43:57 +08:00
Xubin Ren
ace3fd6049
feat: add default OpenRouter app attribution headers
2026-03-27 11:40:23 +00:00
Xubin Ren and Xubin Ren
5bf0f6fe7d
refactor: unify agent runner lifecycle hooks
2026-03-27 12:41:17 +08:00
Xubin Ren and Xubin Ren
e7d371ec1e
refactor: extract shared agent runner and preserve subagent progress on failure
2026-03-27 02:49:43 +08:00
Xubin Ren
33abe915e7
fix telegram streaming message boundaries
2026-03-26 02:35:12 +00:00
Xubin Ren and Xubin Ren
f0f0bf02d7
refactor(channel): centralize retry around explicit send failures
...
Make channel delivery failures raise consistently so retry policy lives in ChannelManager rather than being split across individual channels. Tighten Telegram stream finalization, clarify sendMaxRetries semantics, and align the docs with the behavior the system actually guarantees.
2026-03-25 22:37:11 +08:00