Commit Graph
823 Commits
Author SHA1 Message Date
Xubin Ren baa0233377 fix(tui): preserve draft scope until first message 2026-08-24 10:40:16 +08:00
Xubin Ren d50a2fab32 fix(tui): avoid saving empty sessions 2026-08-24 10:40:16 +08:00
Xubin Ren 12029f8812 feat(runtime): add user-controlled turn recovery 2026-08-24 00:58:04 +08:00
chengyongru 9807e9cf37 test: remove stale Mattermost config input 2026-08-23 19:08:00 +08:00
chengyongru 961b1fdd7d refactor: remove remaining dead code 2026-08-23 19:08:00 +08:00
Xubin Ren 48eea29313 feat(webui): unify turn observability 2026-08-22 20:51:24 +08:00
KDB a4acd83966 fix(slack): validate file downloads against SSRF
_download_slack_file fetched url_private_download with follow_redirects=True
and no SSRF validation, unlike the shared network guard used across other
channels (napcat/dingtalk/qq) and the maintainer's recent image-download
hardening. A file URL that pointed at — or redirected to — an internal
address let the bot server issue requests to loopback/RFC1918/cloud-metadata
targets, and cross-host redirects could carry the request off Slack.

Validate the URL through validate_url_target before requesting, stop
following redirects, and reject a redirect response. Authorized Slack file
downloads return 200 directly, so normal downloads (which still send the bot
token) are unaffected; the HTML-login guard already handled the redirect-to-
login case.
2026-08-22 01:34:34 +08:00
chengyongru 953d2ed217 refactor(webui): infer fallback from active model 2026-08-21 16:49:30 +08:00
chengyongru 7f97373490 fix(webui): only highlight actual model fallbacks 2026-08-21 16:49:30 +08:00
Lanre Shittu 98660c19cc fix(matrix): interpolate error log context
Matrix error logs used printf-style placeholders with Loguru, leaving filenames, room IDs, and chat IDs out of diagnostic output. Use Loguru placeholders and cover each affected failure path with focused regression assertions.

Signed-off-by: Lanre Shittu <136805224+Shizoqua@users.noreply.github.com>
2026-08-21 15:53:02 +08:00
Lanre Shittu 242f417370 fix(mattermost): ignore system posts
Signed-off-by: Lanre Shittu <136805224+Shizoqua@users.noreply.github.com>
2026-08-19 10:31:14 +08:00
chengyongru 9e046815bc fix(webui): assign readable session handles 2026-08-19 01:15:56 +08:00
chengyongru 251a1ccd40 refactor: simplify cross-session messaging 2026-08-19 01:15:56 +08:00
chengyongru 0e184965e8 feat(webui): add lightweight session messaging via mentions 2026-08-19 01:15:56 +08:00
chengyongru 2b4a04fb71 fix(telegram): serialize application teardown 2026-08-18 00:41:57 +08:00
Xubin Ren 8a928592c5 fix(telegram): wait for application readiness 2026-08-18 00:41:57 +08:00
QQQ300kuai 302015fde5 fix(telegram): keep lifecycle state consistent during polling recovery
- Fail outbound sends while the app is rebuilding instead of returning quietly, so ChannelManager retries and logs the failure instead of counting the message as delivered
- Close the bot's HTTPX pools during teardown: Application.shutdown() skips them when initialize() never finished, leaking one pool per startup retry
- Propagate terminal startup errors (rejected token, bad proxy, bound webhook port) and clear the running flag instead of retrying forever while the channel still reports itself healthy
- Restrict startup retries to NetworkError/TimedOut, the exceptions HTTPXRequest wraps every httpx failure into
- Scrub the rejected-token failure so PTB's token-bearing message never reaches the log
2026-08-18 00:41:57 +08:00
QQQ300kuai cc05fe6ed0 fix(telegram): recover from silently stalled polling
- Wrap the getUpdates request pool to record completed round trips, since a healthy long poll completes one every ~10s even with no traffic
- Replace the idle keep-alive loop with a supervisor that tears down and rebuilds the application (including its HTTPX pools) when no round trip completes for 120s
- Retry failed startups with exponential backoff so the bot self-heals once the network path recovers
- Give up immediately on InvalidToken since a rejected token is a config error that retries cannot fix
- Tear down the freshly built app when stop() lands mid-startup so the supervisor never leaks a running application
- Bridge python-telegram-bot and httpx stdlib logging into loguru so polling failures are visible in nanobot logs
2026-08-18 00:41:57 +08:00
Xubin Ren 79d51be71f feat(tui): integrate with Herdr host 2026-08-17 20:56:10 +08:00
Xubin Ren c320d08dfe feat(tui): run bang commands through the gateway 2026-08-17 20:56:10 +08:00
Xubin Ren 03d982023a feat(tui): add clickable runtime controls 2026-08-17 20:56:10 +08:00
Xubin Ren 9e47d8106c fix(tui): synchronize shared session clients 2026-08-17 20:56:10 +08:00
Xubin Ren 4391bbf4da feat(tui): add agent interaction workflows 2026-08-17 20:56:10 +08:00
Xubin Ren e77eed76c9 fix(tui): track canonical model presets 2026-08-17 20:56:10 +08:00
Xubin Ren 6301c0ab57 feat(tui): unify session history and context 2026-08-17 20:56:10 +08:00
chengyongru c27b1f14c3 fix(webui): preserve mutation order after reconnect 2026-08-16 21:40:14 +08:00
chengyongru 32cc861f2a test(webui): harden mutation replay coverage 2026-08-16 21:40:14 +08:00
chengyongru e51ffc8978 fix(webui): make mutations reconnect-safe 2026-08-16 21:40:14 +08:00
Xubin Ren dec89a49a3 fix(settings): serialize gateway configuration updates 2026-08-16 11:50:56 +08:00
Xubin Ren 731b8fc2ed fix(models): synchronize canonical runtime selection 2026-08-16 11:50:56 +08:00
Xubin Ren 0a6ee1c539 fix(models): preserve preset rename compatibility 2026-08-16 11:50:56 +08:00
Xubin Ren c15e6f2a37 fix(models): support atomic preset renames 2026-08-16 11:50:56 +08:00
Xubin Ren 3dc38f6396 refactor(models): unify preset names 2026-08-16 11:50:56 +08:00
XiaoHuo888 fd2d419956 feat(providers): add OrcaRouter as a named gateway provider
Registers OrcaRouter (https://www.orcarouter.ai) as a built-in OpenAI-compatible gateway provider mirroring the OpenRouter wiring: registry spec (sk-orca- key prefix, default base URL), ProvidersConfig field, WebUI icon/brand + deferred model list, docs, and tests.
2026-08-16 00:26:51 +08:00
Xubin Ren 60993597de refactor(webui): unify shared shape system 2026-08-14 19:55:25 +09:00
Xubin Ren 26c9687b80 feat(webui): add native workspace folder picker 2026-08-14 04:03:54 +09:00
Xubin Ren 410e5e5121 test(websocket): isolate persisted runtime data 2026-08-14 03:46:01 +09:00
Xubin Ren fd7eb8e046 fix(webui): restore transcript-only session history 2026-08-14 03:46:01 +09:00
aiguozhi123456 e07ecc8cc5 fix(weixin): persist QR-login token to config.json on connect
When config.json has no channels configuration, the WebUI QR login
connect flow obtained a token but only saved it to account.json (state
file). The subsequent post-connect enable step (set_channel_config_enabled)
read config.json, found no weixin section, and wrote back a default
config with token="" - silently losing the freshly obtained credential.

Add _persist_connect_credentials to _commit_account so the token and
base_url are written to config.json before the enable step runs. This
covers both the WebUI connect flow and the CLI QR login path, mirroring
the established Feishu save_registration_result pattern.
2026-08-13 11:04:16 +08:00
Xubin Ren 5fc8303f9e fix(webui): keep credentials out of service worker caches 2026-08-12 21:09:29 +09:00
chengyongru 19997d20bb refactor: move MCP lifecycle out of AgentLoop (#5343) 2026-08-12 17:51:04 +08:00
chengyongru 686dd0603e fix(webui): restore session drag and review findings 2026-08-12 17:26:13 +08:00
chengyongru 4b5319b760 feat(webui): add tabbed pane workbench (#5322) 2026-08-12 14:45:12 +08:00
yu-xin-c 057e8f7af6 fix(matrix): isolate thread sessions 2026-08-12 02:15:17 +09:00
chengyongru d45c893f68 fix(webui): surface MCP runtime connection failures (#5331) 2026-08-11 23:52:02 +08:00
Xubin Ren 7703cd22eb test(websocket): wait for server readiness 2026-08-11 20:16:24 +09:00
Xubin Ren d5e0df6963 feat(plugins): integrate portable Agent Plugins 2026-08-11 20:16:24 +09:00
chengyongru c281e090d0 refactor(webui): make gateway own settings services (#5321) 2026-08-10 18:10:55 +08:00
chengyongru 5d733b1c7c fix(webui): move mutations to authenticated websocket requests 2026-08-10 16:23:47 +08:00
chengyongru 8dd2059be3 fix(weixin): require fresh credentials for forced login 2026-08-10 13:48:49 +08:00