2919 Commits

Author SHA1 Message Date
Xubin Ren
b8a4ceb30c test(webui): cover siliconflow transcription settings 2026-06-10 23:05:12 +08:00
moran
9ed638ad70 feat(transcription): add SiliconFlow as transcription provider
- Register SiliconFlow in transcription registry with default model
  FunAudioLLM/SenseVoiceSmall and alias 'silicon'
- Reuse existing OpenAITranscriptionProvider adapter (Whisper-compatible)
- Add generic key/base resolution: fallback to registry env_key and
  default_api_base when provider config is absent
- Add tests for registry entry, alias, adapter, default model, and
  config resolution with env var fallback
2026-06-10 23:05:12 +08:00
Xubin Ren
ddbd7ca39e
Merge PR #4278: feat(webui): segment transcript storage
feat(webui): segment transcript storage
2026-06-10 21:02:10 +08:00
Xubin Ren
e1e643de2a refactor(webui): keep sidebar index out of session manager 2026-06-10 20:45:29 +08:00
Xubin Ren
1f5ecf36ca fix(webui): align chat action menu hover inset 2026-06-10 20:30:32 +08:00
Xubin Ren
999552b998 perf(webui): index session list metadata 2026-06-10 20:02:22 +08:00
Xubin Ren
603feef3aa Merge remote-tracking branch 'origin/main' into codex/webui-segmented-transcript-store 2026-06-10 19:11:37 +08:00
Xubin Ren
e168bb2754 feat(webui): segment transcript storage 2026-06-10 18:28:55 +08:00
Jiajun Xie
4255656089 refactor(webui): replace real-time polling with click-to-check version updates
- Remove background PyPI polling loop and WebSocket broadcast
- Remove UpdateBanner from ThreadHeader (keep main page clean)
- Add on-demand version check endpoint (GET /api/settings/version-check)
- Add 'About' section in Settings > Overview with check-for-updates button
- Design: no auto-fetch, user initiates check explicitly via button click
2026-06-10 18:11:06 +08:00
chengyongru
c00371c761 docs: clarify streamed timeout fallback behavior
maintainer edit: update fallback docs and provider docstring to describe the new stream-stall timeout recovery exception.
2026-06-10 18:10:44 +08:00
chengyongru
bc4bb508a1 fix: continue recovered streams in a new segment
maintainer edit: streamed timeout recovery was returning the retried response internally while the channel still treated the final outbound as already streamed. End the current stream segment before retry/fallback recovery so subsequent deltas are delivered in a new segment.
2026-06-10 18:10:44 +08:00
aiguozhi123456
2c5a4e0703 fix(providers): allow retry and fallback on stream stalled timeout
When a stream stalls mid-response, both the retry layer and
FallbackProvider blocked recovery because content had already been
emitted via on_content_delta. This left users with truncated replies
and no automatic recovery.

For error_kind="timeout" specifically:
- _run_with_retry now suppresses delta callbacks and retries the same
  model instead of returning immediately
- FallbackProvider now allows failover to a different model with
  delta callbacks suppressed

Non-timeout errors retain the original "skip retry/failover after
streamed content" behavior to avoid duplicate output.
2026-06-10 18:10:44 +08:00
chengyongru
dadb35af49 feat(exec): add path prepend config 2026-06-10 18:09:57 +08:00
chengyongru
8c30dc5a57 Preserve session key when archiving new sessions 2026-06-10 18:09:45 +08:00
chengyongru
bfc6febddc Scope prompt recent history by session
Fixes #4259
2026-06-10 18:09:45 +08:00
chengyongru
aee656eb9f Fail fast on invalid config files 2026-06-10 18:09:36 +08:00
chengyongru
5d7f2e60c2 fix(feishu): lazy-load lark sdk during gateway startup 2026-06-10 18:09:27 +08:00
Xubin Ren
7186039be1 fix(websocket): limit final stream text to inline endings 2026-06-10 15:52:39 +08:00
Syoc
4dd5b62f11 fix(websocket): always send text in stream_end when stream had content
The channel manager coalesces consecutive _stream_delta messages and
forwards a single merged message with _stream_end=True. In that path
no individual delta events ever reach the WebUI client, so the
stream_end frame is the only carrier of the text. The previous guard
only attached text when media-URL rewriting changed the string, which
silently dropped entire turns of plain-text output whenever the
agent generated tokens faster than the queue drained.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 15:52:39 +08:00
Moran
9c492143b4 search: add Bocha web search provider 2026-06-10 15:51:15 +08:00
primit1v0
ce887772e9 fix(sandbox): set HOME inside bwrap 2026-06-10 15:50:53 +08:00
Xubin Ren
62a35c21b8 fix(asr): normalize StepFun transcription endpoint 2026-06-10 15:50:38 +08:00
moran
7930058348 feat(asr): add StepFun ASR SSE transcription provider
- Add StepFunTranscriptionProvider class in nanobot/providers/transcription.py
- New _post_stepfun_asr_with_retry() function handling SSE stream parsing
  (transcript.text.delta → transcript.text.done event sequence)
- Register 'stepfun' in transcription_registry.py with default model stepaudio-2.5-asr
- Reuse existing stepfun provider config (apiBase can point to Plan endpoint)
- Add 17 tests covering SSE parsing, retry contract, empty-text edge case, and registry integration
- Update docs/configuration.md with stepfun ASR documentation

StepFun ASR uses a dedicated SSE endpoint (/v1/audio/asr/sse) rather
than the chat-completions or Whisper multipart formats used by other
providers. Users on Step Plan can set apiBase to the Plan endpoint.
2026-06-10 15:50:38 +08:00
erikmackinnon
31bfec58d0 Add Exa web search provider 2026-06-10 15:02:07 +08:00
chengyongru
5d91d59cf7 fix(agent): finalize max-iteration turns without tools 2026-06-10 14:47:20 +08:00
chengyongru
99f7f371fa fix: cover o1 max-completion token fallback
Maintainer edit: keep the GPT-5/o-series fallback on slug-boundary matching so unrelated model names are not caught by substring checks, and include o1 alongside o3/o4 because it is also an o-series chat model.
2026-06-10 14:47:10 +08:00
04cb
a779e7c29e fix(providers): use max_completion_tokens for gpt-5/o-series on flagless specs (#4261) 2026-06-10 14:47:10 +08:00
yu-xin-c
fd9fc38f41 fix(tools): keep apply_patch additions line-separated 2026-06-10 14:47:01 +08:00
Xubin Ren
1b5f5b94d5 fix(webui): use tabler fork icon 2026-06-10 04:26:06 +08:00
Xubin Ren
ea791f605c fix(webui): restore fork action icon 2026-06-10 04:26:06 +08:00
Xubin Ren
fd947a1fd8 fix(webui): normalize action tooltips 2026-06-10 04:26:06 +08:00
Xubin Ren
1432094bb5 refactor(webui): isolate fork websocket handler 2026-06-10 04:26:06 +08:00
Xubin Ren
916525f94a refactor(webui): shrink fork implementation 2026-06-10 04:26:06 +08:00
Xubin Ren
1f926e3769 refactor(webui): isolate chat fork creation 2026-06-10 04:26:06 +08:00
Xubin Ren
26a58282d4 feat(webui): show forked history boundary 2026-06-10 04:26:06 +08:00
Xubin Ren
73d4b1cb2f feat(webui): persist fork boundary metadata 2026-06-10 04:26:06 +08:00
Bayern4ever-dot
03bca4c0a9 feat(webui): add assistant reply fork-from-here 2026-06-10 04:26:06 +08:00
chengyongru
4a58b83acc
docs: make onboarding friendlier for beginners (#4177)
* docs: make onboarding friendlier for beginners

* docs: build clearer documentation paths

Maintainer edit: turn the onboarding follow-up into a layered docs structure for first-time setup, provider selection, troubleshooting, CLI reference, and source-level architecture. This keeps quick start focused while giving advanced users precise reference paths.

* docs: render architecture flow with mermaid

Maintainer edit: replace the ASCII architecture sketch with a GitHub-rendered Mermaid flowchart so the core runtime path is easier to scan in the PR and README docs.

* docs: recommend model presets for model config

Maintainer edit: make named modelPresets the primary model configuration path and expand fallback preset examples so string fallbacks are clearly preset names, not raw model IDs.

* docs: document api base urls and langfuse setup

Maintainer edit: explain when users need apiBase/base URL in quick start and provider docs, and add Langfuse tracing setup with troubleshooting links.

* docs: use python module pip consistently

Maintainer edit: keep install commands tied to the active Python interpreter by using python -m pip in the Azure optional dependency notes too.

* docs: add non-technical getting started path

Maintainer edit: add a wizard-first guide for users without terminal or JSON background, including a text TUI menu example and links from the main docs entrypoints.

* docs: avoid hard-wrapped prose in user docs

Maintainer edit: unwrap ordinary prose across user-facing documentation while preserving markdown structure, code blocks, tables, lists, and prompt/template files.

* docs: keep desktop list continuations nested

Maintainer edit: preserve list nesting after unwrapping prose in the desktop WebUI sync guide.

* docs: add one-command installer

Maintainer edit: add auditable macOS/Linux and Windows install scripts that install nanobot-ai and start the onboarding wizard, then document the commands in the main onboarding entrypoints.

* docs: add installer dry run mode

Maintainer edit: add --dry-run to the one-command installer scripts so users can preview Python detection, install source, pip command, and wizard behavior without changing their environment.

* docs: clean installer error output

Maintainer edit: make PowerShell installer failures print a concise Error: message instead of Write-Error call-site details.

* docs: add provider setup cookbook

Maintainer edit: add pasteable provider recipes for common hosted, local, fallback, runtime switching, and Langfuse setups, then link the cookbook from onboarding and troubleshooting entrypoints.

* docs: address review feedback

* docs: clarify reader paths

* docs: explain terminal basics for beginners

* docs: clarify wizard navigation

* docs: avoid duplicate onboarding steps

* docs: add setup status check

* docs: explain status output

* docs: remove provider recommendation wording

* docs: explain status diagnostics

* docs: reduce hard-wrapped guidance

* docs: migrate config examples to presets

* docs: clarify python command fallbacks

* docs: improve installer failure recovery

* docs: expand install troubleshooting

* docs: cover installer download failures

* docs: put stable install paths first

* docs: add bundled webui quick path

* docs: clarify provider-neutral setup

* docs: clarify gateway setup for chat surfaces

* docs: improve docs navigation paths

* docs: add configuration quick jump

* docs: clarify provider secret variables

* chore: request PR review acknowledgement

Empty commit: please read the PR review comments and reply on the PR to confirm that you have received them.

This commit intentionally changes no files; it exists only to notify the remote Codex run so it can end its active goal.

* docs: add README start here guide

* docs: avoid provider recommendation wording

* docs: guide next steps after first reply

* docs: explain merging JSON snippets

* docs: add CLI command chooser

* docs: add configuration task map

* docs: add deployment readiness guide

* docs: simplify WebUI entry paths

* docs: add provider recipe chooser

* docs: fix provider factual references

Update OpenRouter and LongCat model examples, align Bedrock guidance, and make fallback snippets schema-valid.

Also correct group policy wording and image-generation provider lists to match the current code.

* fix: keep PowerShell installer from closing caller shell

* docs: mention self-guided configuration
2026-06-10 00:36:22 +08:00
chengyongru
56ce18167e docs: clarify email post-action expunge fallback
maintainer edit: clarify that postActionExpunge only allows the broad EXPUNGE fallback when UID-scoped expunge is unavailable or fails.
2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
0580c186c1 test(email): update tests for postActionExpunge option 2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
6de8d7f52e feat(email): add postActionExpunge option to gate broad IMAP expunge 2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
1d683f0f18 style(email): fix import order via ruff 2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
b96ed1b7c6 docs(email): clarify _fetch_new_messages return docstring 2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
4369eb20fc feat(email): support IMAP MOVE and UID expunge fallbacks 2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
ec5460d23e feat(email): add configurable post-action handling 2026-06-09 14:50:59 +08:00
Flávio Veloso Soares
85ab55aeee refactor(email): extract IMAP session helper 2026-06-09 14:50:59 +08:00
chengyongru
5bd4a83e85 fix(webui): render TeX math delimiters 2026-06-09 14:50:49 +08:00
chengyongru
0a396aa6e2
Improve tool call validation strictness (#4190)
* Improve tool call validation strictness

Reject near-miss tool names without executing suggested tools. Require object-shaped tool parameters while preserving only lossless JSON wire-shape normalization.

* Tighten tool call argument validation

* Simplify tool argument validation tests

* Improve tool name suggestions

* Simplify tool suggestion helpers

* Limit tool suggestions to canonical matches

* Allow repair only for tool history replay

* Clarify non-object tool argument errors

* Inline replay tool argument normalization

* Track only successful tool executions

* Reject JSON null tool arguments
2026-06-09 14:50:40 +08:00
comadreja
f3eb2aa08b feat(transcription): add AssemblyAI as transcription provider
Add AssemblyAI as a third transcription provider option alongside
OpenAI and Groq. AssemblyAI offers better accuracy for certain
audio types (distant voices, noisy environments) and serves as a
reliable fallback when other providers struggle.

Changes:
- Add AssemblyAITranscriptionProvider class in providers/transcription.py
- Add 'assemblyai' option in base channel's transcribe_audio()
- Per-channel configuration via transcriptionProvider in config

Usage:
  Set transcriptionProvider: 'assemblyai' and provide an AssemblyAI
  API key via transcriptionApiKey in the channel config.
2026-06-09 05:33:18 +08:00
Xubin Ren
f183b37542 test(webui): cover Xiaomi MIMO provider alias 2026-06-09 04:29:09 +08:00