Commit Graph
2817 Commits
Author SHA1 Message Date
Xubin Ren a79ae11aa1 fix(desktop): hide window instead of closing on macos 2026-06-06 01:04:12 +08:00
Xubin Ren 7449e0a770 fix(web): fall back when readability is unavailable 2026-06-06 00:49:35 +08:00
Xubin Ren 5606653f47 fix(desktop): harden gateway proxy startup 2026-06-06 00:19:31 +08:00
chengyongruandXubin Ren dae86edba4 fix(webui): preserve desktop restart and replay state 2026-06-06 00:19:31 +08:00
Xubin Ren aee793ee19 feat(desktop): add native reply notifications 2026-06-06 00:19:31 +08:00
Xubin Ren f02b4e15ad refactor(webui): clean thread resource refresh 2026-06-06 00:19:31 +08:00
Xubin Ren 488b278752 style(webui): simplify prompt navigator header 2026-06-06 00:19:31 +08:00
Xubin Ren 855a0c3f07 style(webui): align prompt navigator with header actions 2026-06-06 00:19:31 +08:00
Xubin Ren 8c9a5259a7 style(webui): refine prompt navigator placement 2026-06-06 00:19:31 +08:00
Xubin Ren 860b672e5c feat(webui): add prompt navigator drawer 2026-06-06 00:19:31 +08:00
Xubin Ren 4111f70558 feat(webui): preview prompt rail entries 2026-06-06 00:19:31 +08:00
Xubin Ren 08438ab5ed test: align CI expectations for token fallback 2026-06-06 00:19:31 +08:00
Xubin Ren fe2b67d67c fix(webui): avoid preview chips for glob references 2026-06-06 00:19:31 +08:00
Xubin Ren c789416e40 feat(desktop): polish shell and shared surfaces 2026-06-06 00:19:31 +08:00
Xubin Ren 62c43b621a feat(apps): add ArcGIS and Joplin logos 2026-06-06 00:19:31 +08:00
Xubin Ren a71222607e feat(webui): polish desktop chat experience 2026-06-06 00:19:31 +08:00
Xubin Ren 8e7af82338 feat(webui): track turns and usage in gateway 2026-06-06 00:19:31 +08:00
Xubin Ren 8c9c915df6 feat(desktop): add native host scaffold 2026-06-06 00:19:31 +08:00
Xubin Ren 6a0368b32f fix(telegram): route /skill command 2026-06-05 18:48:51 +08:00
Xubin Ren 935a37182d docs(command): document /skill command 2026-06-05 18:48:51 +08:00
EndeavourYuanandXubin Ren 6b6be20f32 feat(command): add /skill slash command to list enabled skills
- Register /skill in BUILTIN_COMMAND_SPECS with wrench icon
- Add cmd_skill handler that lists skill names and descriptions
- Disabled skills are excluded from the output
- Add 6 tests covering empty list, names/descriptions, disabled
  filtering, fallback description, markdown output, and router
  registration
2026-06-05 18:48:51 +08:00
chengyongruandXubin Ren 710d00a179 fix(webui): persist user messages for refresh 2026-06-05 16:13:51 +08:00
chengyongruandXubin Ren 3da68ac7fe Fix pairing for Weixin and Telegram DMs 2026-06-05 16:13:31 +08:00
chengyongruandXubin Ren d435cb0b21 fix: harden custom image provider compatibility
Maintainer edit: preserve provider-specific size hints for custom image generation endpoints while keeping the default 1K mapping compatible. Clarify the custom provider contract in docs and cover response_format/size overrides in tests.
2026-06-05 15:56:03 +08:00
chengyongruandXubin Ren ae17a79bdf fix: harden custom image generation config
Maintainer edit: require providers.custom.apiBase before making custom image requests and allow unauthenticated local endpoints by omitting Authorization when no apiKey is configured.
2026-06-05 15:56:03 +08:00
axelray-devandXubin Ren 748b28da01 feat(image): support custom image generation provider
Addresses #4132.

Add CustomImageGenerationClient for any OpenAI-compatible image generation
API (POST {apiBase}/images/generations). Uses the existing providers.custom
config slot. No schema changes required.

Tests: 54 passed, ruff clean.
Signed-off-by: axelray-dev <110029405+axelray-dev@users.noreply.github.com>
2026-06-05 15:56:03 +08:00
chengyongruandXubin Ren c574b028c1 fix(feishu): allow punctuation after mention placeholders
maintainer edit: Keep the shared-prefix guard for Feishu numbered mention keys while still resolving placeholders followed by punctuation, matching the previous user-visible mention behavior.
2026-06-05 15:55:53 +08:00
Xubin Ren 894811db8b fix(feishu): strip leading bot mention before commands 2026-06-05 15:55:53 +08:00
Kunal KarmakarandXubin Ren fa423dffbc Remove check from the test 2026-06-05 01:17:34 +08:00
Kunal KarmakarandXubin Ren 9fdc6f892a Fix test 2026-06-05 01:17:34 +08:00
Kunal KarmakarandXubin Ren c849ff6eec Address PR review comments 2026-06-05 01:17:34 +08:00
Kunal KarmakarandXubin Ren ba3fa38e97 Add support for Azure AAD based Auth 2026-06-05 01:17:34 +08:00
chengyongruandXubin Ren 39454534d4 fix: isolate run-level hook snapshots 2026-06-05 01:09:45 +08:00
chengyongruandXubin Ren 8933da1ec5 fix: harden run-level hook lifecycle
maintainer edit: keep cancellation out of on_error so shutdown paths do not look like run failures, and let the SDK capture hook use the authoritative after_run snapshot.
2026-06-05 01:09:45 +08:00
chengyongruandXubin Ren 2ea226055e feat: add run-level agent hook lifecycle 2026-06-05 01:09:45 +08:00
chengyongruandXubin Ren c77ca16d91 fix: preserve uv pip update reinstall semantics
Maintainer edit: the uv fallback for CLI app updates now keeps the force-reinstall behavior from the python -m pip path by using uv pip install --reinstall, with unit coverage for the generated argv.
2026-06-04 19:41:51 +08:00
axelray-devandXubin Ren c2e9064b35 fix: remove unsupported -y flag from uv pip uninstall fallback
uv pip uninstall does not support the -y (assume-yes) flag. Remove it
from the uv fallback argv while keeping it for the python -m pip
uninstall path.

Reported-by: chengyongru
2026-06-04 19:41:51 +08:00
axelray-devandXubin Ren 6d827efb0e test: explicitly stub _pip_available in pip-path tests
CI's uv-managed Python does not have pip importable, so the runtime
falls back to uv pip. Four tests that verify the python -m pip path
were failing because _pip_available() returned False in CI.

Monkeypatch _pip_available to True in tests that intentionally verify
the pip code path, so they pass regardless of the CI Python
environment.
2026-06-04 19:41:51 +08:00
axelray-devandXubin Ren a37e58a29e fix(cli): fall back to uv pip when pip is unavailable
When nanobot is installed via uv tool install, sys.executable points to
a Python that does not have pip available as a module. _pip_install_argv
and _pip_uninstall_argv always used [sys.executable, -m, pip, ...]
which fails in that environment.

Add _pip_available() helper that checks importlib.util.find_spec('pip').
When pip is not available and uv is on PATH, fall back to:
  uv pip install --python <sys.executable> ...
  uv pip uninstall --python <sys.executable> -y ...
If neither pip nor uv is available, raise CliAppError.

Fixes #4158
2026-06-04 19:41:51 +08:00
chengyongruandXubin Ren 24e56fcf07 test: improve deterministic unit test coverage 2026-06-04 19:41:32 +08:00
Xubin Ren 87bd56468c fix(webui): show platform-specific new chat shortcut 2026-06-04 14:01:21 +08:00
chengyongruandXubin Ren 54d8d3010b fix: close search when starting new chats
maintainer edit: Close the session search dialog when the global new-chat shortcut navigates to the blank chat route, and expose the new shortcut through the sidebar button title so the shortcut is discoverable.
2026-06-04 14:01:21 +08:00
axelray-devandXubin Ren 4275678b43 feat(webui): add new chat keyboard shortcut
Add Cmd/Ctrl+Shift+O shortcut to start a new chat, matching the
convention used by ChatGPT, Claude.ai, and Gemini.

Addresses #4178

Signed-off-by: axelray-dev <110029405+axelray-dev@users.noreply.github.com>
2026-06-04 14:01:21 +08:00
chengyongruandXubin Ren d0eba7cd9d fix: cover MCP reconnect edge cases
maintainer edit: handle prompt sessions that report Connection closed outside McpError, and match reconnect registration prefixes with the same sanitization used by MCP wrapper names.
2026-06-04 10:43:09 +08:00
chengyongruandXubin Ren e9145b7acd fix(mcp): reconnect terminated sessions 2026-06-04 10:43:09 +08:00
yorkhellenandXubin Ren 7c3808327f fix(qq): send pairing codes for unauthorized C2C users 2026-06-04 10:42:51 +08:00
chengyongruandXubin Ren facdc41a16 fix: restore top-level import order 2026-06-03 16:57:29 +08:00
chengyongruandXubin Ren 3b46386887 test(email): cover progress message suppression
Maintainer edit: add a regression test for the email channel fix so progress/tool-event messages return before SMTP is opened instead of sending empty emails.
2026-06-03 15:01:47 +08:00
Nicolas BlondiauandXubin Ren cbf1ede179 fix(email): skip progress messages to prevent empty emails after tool calls 2026-06-03 15:01:47 +08:00
chengyongruandXubin Ren 13178f3eaa fix(session): reject non-integer consolidated offsets
maintainer edit: corrupt session metadata can contain JSON strings, nulls, floats, or booleans. Reset non-integer offsets before range checks so recovery keeps valid messages visible instead of falling back to an empty session.
2026-06-03 15:01:29 +08:00