Commit Graph
3954 Commits
Author SHA1 Message Date
Xubin Ren 1437d1a75a fix(webui): allow moving active group panes 2026-08-14 19:55:25 +09:00
Xubin Ren b378319d4a fix(webui): enforce localized group copy 2026-08-14 19:55:25 +09:00
Xubin Ren 4266ef2099 feat(webui): allow dragging panes out of groups 2026-08-14 19:55:25 +09:00
Xubin Ren 60993597de refactor(webui): unify shared shape system 2026-08-14 19:55:25 +09:00
Xubin Ren 7c04af86f9 style(webui): simplify delete confirmation icon 2026-08-14 19:55:25 +09:00
Xubin Ren cdf225cb89 feat(webui): allow dragging topics into groups 2026-08-14 19:55:25 +09:00
Xubin Ren 4d18dd2c30 fix(webui): align group rename dialog terminology 2026-08-14 19:55:25 +09:00
chengyongruandGitHub 221e8a4e4a feat(webui): polish sidebar and session transitions (#5393) 2026-08-14 17:03:11 +08:00
dajiaohuangandchengyongru 057c5e849b fix(session): restore state when file-cap archive fails 2026-08-14 11:22:22 +08:00
chengyongruandGitHub e226242dfc fix(session): serialize canonical file access (#5383) 2026-08-14 10:32:17 +08:00
Xubin Ren e3d1819a2b fix(webui): isolate folder picker environment 2026-08-14 04:03:54 +09:00
Xubin Ren 9703656b25 test(webui): make folder picker tests portable 2026-08-14 04:03:54 +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 335808e525 fix(webui): bound restored session previews 2026-08-14 03:46:01 +09:00
Xubin Ren afad96af5f refactor(webui): simplify transcript discovery 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
Bobbyandchengyongru af582246f1 [Security] exec.allowPatterns shell-chain bypass allows unintended command execution
Closes #5306
2026-08-13 11:05:04 +08:00
aiguozhi123456andchengyongru 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
arcdrake22andXubin Ren 0c684c5a99 fix(gemini): preserve imported tool history across model switches
Co-authored-by: Xubin Ren <52506698+Re-bin@users.noreply.github.com>
2026-08-13 03:07:37 +09:00
yorkhellenandXubin Ren d3382d7e57 fix(exec): guard bare and named-user home paths
Co-authored-by: Xubin Ren <52506698+Re-bin@users.noreply.github.com>
2026-08-13 02:50:58 +09:00
Xubin Renandshixi-li 76f629e925 fix(web): keep credential URLs out of failure logs
Co-authored-by: shixi-li <40780706+shixi-li@users.noreply.github.com>
2026-08-13 02:26:22 +09:00
Xubin Ren 5f916bbd3a fix(web): keep credential redirects away from Jina 2026-08-13 02:26:22 +09:00
shixi-liandXubin Ren 31a71d6cd5 fix(web): keep credential-bearing URLs away from the remote Jina reader 2026-08-13 02:26:22 +09:00
Xubin Renandyu-xin-c 498070d036 test(docker): separate host bwrap requirements
Co-authored-by: yu-xin-c <175149126+yu-xin-c@users.noreply.github.com>
2026-08-13 02:13:51 +09:00
Xubin Renandyu-xin-c b7f0ae95a9 test(docker): run bwrap check as final user
Co-authored-by: yu-xin-c <175149126+yu-xin-c@users.noreply.github.com>
2026-08-13 02:13:51 +09:00
Xubin Renandyu-xin-c b571d3b9ff fix(docker): prevent privilege regain after bootstrap
Co-authored-by: yu-xin-c <175149126+yu-xin-c@users.noreply.github.com>
2026-08-13 02:13:51 +09:00
yu-xin-candXubin Ren 3741ecda0b fix(docker): restore capabilities for privilege drop 2026-08-13 02:13:51 +09:00
chengyongruandchengyongru edec29e997 feat(providers): support DeepSeek V4 Pro Responses 2026-08-13 01:02:41 +08:00
Xubin Renandsanthreal 01c7323d74 fix(exec): parse shell path boundaries safely
Co-authored-by: santhreal <64453045+santhreal@users.noreply.github.com>
2026-08-13 01:53:38 +09:00
Xubin Ren 001a7492c2 fix(exec): guard POSIX double-slash absolute paths 2026-08-13 01:53:38 +09:00
santhrealandXubin Ren 6fc0807fbf fix(tools): handle redirection and grouping delimiters in ExecTool path guard 2026-08-13 01:53:38 +09:00
Xubin Renandlmzopq cd7480945b fix(session): preserve history across storage relocation
Co-authored-by: lmzopq <1646888+lmzopq@users.noreply.github.com>
2026-08-13 01:41:10 +09:00
Xubin Ren 45245b5e55 docs(session): document external session storage 2026-08-13 01:41:10 +09:00
Xubin Ren d2cbe6536e fix(session): reject symlinked legacy session migration 2026-08-13 01:41:10 +09:00
李明振andXubin Ren b34f1bd0e8 fix(session): store session history outside the agent workspace
Session files lived under <workspace>/sessions/ (since #713), which is the
on-disk scope of the agent's filesystem tools. With restrict_to_workspace
enabled, an agent could read_file / list_dir every session transcript —
including other users' or channels' conversations — bypassing the scoped
sessions.py access layer entirely.

Move session storage to ~/.nanobot/sessions/<sha256-of-resolved-workspace>[:16]/,
outside the workspace. Per-workspace isolation (the goal of #713) is preserved
via a hash of the resolved workspace path, so different workspaces keep
independent session stores. A one-shot, idempotent migration moves legacy
in-workspace *.jsonl files into the new location at store init.

Scope note: this protects sessions whenever restrict_to_workspace=true. The
default restrict_to_workspace=false leaves read_file unrestricted in general
(not only sessions) and is a separate concern.

Refs #5278
2026-08-13 01:41:10 +09:00
Xubin Ren edaef4e4f5 fix(cli): isolate management subprocess environments 2026-08-12 21:09:29 +09:00
Xubin Ren 5fc8303f9e fix(webui): keep credentials out of service worker caches 2026-08-12 21:09:29 +09:00
chengyongruandchengyongru e455a2b7fa feat(webui): add MCP management dialog 2026-08-12 18:28:23 +08:00
chengyongruandGitHub 19997d20bb refactor: move MCP lifecycle out of AgentLoop (#5343) 2026-08-12 17:51:04 +08:00
chengyongruandchengyongru 686dd0603e fix(webui): restore session drag and review findings 2026-08-12 17:26:13 +08:00
chengyongruandGitHub 4b5319b760 feat(webui): add tabbed pane workbench (#5322) 2026-08-12 14:45:12 +08:00
chengyongruandchengyongru 1656664a47 test(exec): isolate Windows platform mock 2026-08-12 14:37:27 +08:00
chengyongruandchengyongru a6193932a0 fix(exec): clean up failed job assignment 2026-08-12 14:37:27 +08:00
chengyongruandchengyongru bcf5d8a6ed fix(exec): retain process trees after root exit 2026-08-12 14:37:27 +08:00
d64b84604c fix(exec): terminate one-shot process trees on cleanup
Run one-shot commands in their own process tree and terminate all
descendants after timeout, cancellation, or unexpected failures.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
2026-08-12 14:37:27 +08:00
Xubin Ren abfcdd481a fix(cli): validate Windows subprocess environment 2026-08-12 02:57:48 +09:00
LHMQ878andXubin Ren a0e60116a3 fix(cli): stop leaking API keys to CLI app subprocesses
Installed CLI apps were started with os.environ.copy(), so provider keys
from the parent process were visible to untrusted binaries. Use a minimal
allowlist env matching the shell tool.

Fixes #4783
2026-08-12 02:57:48 +09:00
LHMQ878andXubin Ren ec3dfb21ba fix(cli): stop leaking API keys to CLI app subprocesses
Installed CLI apps were started with os.environ.copy(), so provider keys
from the parent process were visible to untrusted binaries. Use a minimal
allowlist env matching the shell tool.

Fixes #4783
2026-08-12 02:57:48 +09:00
Xubin Ren 72d3ce6b23 fix(skills): make PNG weather example Windows-safe 2026-08-12 02:48:03 +09:00