828 Commits

Author SHA1 Message Date
Acbox 5390fd33b2 release: v0.7.3 v0.7.3 2026-04-26 15:59:29 +08:00
Acbox 6c490c1f67 fix(desktop): build failed 2026-04-26 15:53:42 +08:00
Acbox dd2a6d648f release: v0.7.2 v0.7.2 2026-04-26 15:47:30 +08:00
Acbox 3176cf433b fix(web): provider details overflow caused by long model name 2026-04-26 15:46:32 +08:00
Acbox 73ab5dfd90 fix(web): show full model names in selectors when truncated
Selector dropdowns previously reserved 50% of the row for the right-hand
metadata, squeezing long model names beyond visibility, and triggers
truncated their labels without a tooltip. Restructure the model option
into a two-row layout (name + capabilities/context badge above, model_id
below), and add native title tooltips on every truncated label across
the shared SearchableSelectPopover and the model/TTS/search/memory/
browser-context selectors so the full name is always reachable.
2026-04-26 15:39:13 +08:00
Acbox 6b931d9139 style(ui): theme-aware custom scrollbar to fix dark-mode contrast
Default OS scrollbars look out of place in dark mode. Introduce
--scrollbar-thumb / --scrollbar-thumb-hover tokens with translucent
black/white per theme, and apply them globally via scrollbar-color
(Firefox) and ::-webkit-scrollbar rules (WebKit) with a thin rounded
thumb on a transparent track.
2026-04-26 15:38:22 +08:00
Acbox 699ec5b950 refactor(web): unify tool-call rendering as inline rows with optional details
Replace 16 boxed per-tool components with a single inline row driven by a
central tool registry plus per-tool detail components. Tools without
specialized result rendering no longer expand (the fallback for unknown
tools still does). Write/edit are treated as Cursor-style inline diffs:
default-expanded with +N/-M line stats, the filename itself opens the file,
and the action verb is suppressed. Thinking blocks adopt the same inline
style — expanded while streaming, collapsed on reload.
2026-04-26 15:30:31 +08:00
Acbox cd8d58f799 docs: Update readme 2026-04-25 20:29:06 +08:00
Acbox 46365726b9 feat: introduce electron desktop app (#405)
* refactor: use Electron instead of Tauri

* feat: two level windows and self-managed vite project

* feat(desktop): macOS hidden-inset chrome and floating chat title

Apply hiddenInset titleBarStyle on darwin so the system titlebar is hidden
but native traffic lights remain. Reusable web sidebars inject a new
DesktopShellKey to reserve a 36px TopBar that holds the traffic-light
inset (drag region + right border) without colliding with the bot list,
and the sidebar stays pinned open in the Electron shell so window resize
doesn't fight the layout.

Overlay a centered "Title - BotName" header above the chat content with a
bottom shadow gradient that obscures scrolling messages, and reserve top
padding so the first message stays visible when content fits the viewport.
Route the sidebar + action by path (/settings/bots) so the chat router's
/settings/* interception forwards it to the settings window cleanly while
remaining a normal navigation in web.

* docs(desktop): add AGENTS.md for Electron shell

Document the multi-window architecture, web reuse strategy, type-stubbing
trick, macOS chrome, IPC surface, routing, icons, and packaging — captures
the non-obvious bits that bit us during the Tauri → Electron refactor so
future agents don't relearn them.
2026-04-25 12:16:23 +08:00
Acbox e4aca0db13 feat(container): add current container metrics view
Expose a dedicated container metrics endpoint and surface current CPU, memory, and root filesystem usage in the bot container view. This gives operators a quick health snapshot while degrading cleanly on unsupported backends.
2026-04-24 15:10:47 +08:00
Acbox 8136ef6ed6 feat(usage): add per-call token usage records table
Expose a paginated endpoint and UI table that lists individual LLM call
records (assistant messages with usage) per bot, showing time, session
type, model, provider, and token counts. Respects existing date / model
/ session-type filters and adds full-height loaders plus a max-width
layout to keep the usage page consistent with other top-level pages.
2026-04-24 15:05:53 +08:00
Acbox 419867655e docs(zh): add Simplified Chinese docs, channel guides, and agent skills
- VitePress zh: getting-started, install, memory/TTS providers, full channel set; update zh sidebar
- Drop zh-only pages with no English counterpart
- Add humanizer and humanizer-zh skills; update skills-lock.json
2026-04-24 14:36:31 +08:00
Acbox ee86e00107 fix(web): hide reasoning efforts on model cards
Keep provider model cards focused on high-level model capabilities instead of exposing per-model reasoning effort options in the summary view.
2026-04-24 11:39:15 +08:00
Acbox e127146791 release: v0.7.1 v0.7.1 2026-04-23 21:01:57 +08:00
Acbox 473d559042 feat(channel): structured tool-call IM display with edit-in-place
Introduce a new `show_tool_calls_in_im` bot setting plus a full overhaul of
how tool calls are surfaced in IM channels:

- Add per-bot setting + migration (0072) and expose through settings API /
  handlers / frontend SDK.
- Introduce a `toolCallDroppingStream` wrapper that filters tool_call_* events
  when the setting is off, keeping the rest of the stream intact.
- Add a shared `ToolCallPresentation` model (Header / Body blocks / Footer)
  with plain and Markdown renderers, and a per-tool formatter registry that
  produces rich output (e.g. `web_search` link lists, `list` directory
  previews, `exec` stdout/stderr tails) instead of raw JSON dumps.
- High-capability adapters (Telegram, Feishu, Matrix, Slack, Discord) now
  flush pre-text and then send ONE tool-call message per call, editing it
  in-place from `running` to `completed` / `failed`; mapping from callID to
  platform message ID is tracked per stream, with a fallback to a new
  message if the edit fails. Low-capability adapters (WeCom, QQ, DingTalk)
  keep posting a single final message, but now benefit from the same rich
  per-tool formatting.
- Suppress the early duplicate `EventToolCallStart` (from
  `sdk.ToolInputStartPart`) so that the SDK's final `StreamToolCallPart`
  remains the single source of truth for tool call start, preventing
  duplicated "running" bubbles in IM.
- Stop auto-populating `InputSummary` / `ResultSummary` after a per-tool
  formatter runs, which previously leaked the raw JSON result as a
  fallback footer underneath the formatted body.

Add regression tests for the formatters, the Markdown renderer, the
edit-in-place flow on Telegram/Matrix, and the JSON-leak guard on `list`.
2026-04-23 20:49:44 +08:00
Acbox 35118a81ad refactor(web): responsive settings layout and card grids
Introduce a shared SettingsShell with narrow/standard/wide/full width
tiers, and convert the primary provider/memory/speech/transcription/
email/browser/bot-mcp/channel/heartbeat/compaction settings forms from
single-column space-y stacks to md:grid-cols-2 grids where short fields
pair up and long inputs (secrets, URLs, webhooks, commands, etc.) stay
full width.

Also fix the provider model list, platform grid, and bots grid to use
responsive breakpoint columns instead of single-column flex or fixed
grid-cols-4 / minmax(400px), and make model/bot cards equal-height with
bottom-aligned actions.
2026-04-23 20:22:13 +08:00
Acbox e94b4b58ed fix(pipeline): preserve tool calls and anchor driver cursor correctly
The discuss driver's RC+TR composition had three compounding bugs that
caused old tasks to be re-answered after idle timeouts and made the LLM
blind to its own prior tool usage:

- DecodeTurnResponseEntry only kept visible text via TextContent(), so
  assistant steps carrying only tool_call parts (the first half of every
  tool round) were dropped entirely. Rewritten to render tool_call and
  tool_result parts as <tool_call>/<tool_result> tags, covering both
  Vercel-style content parts and legacy OpenAI ToolCalls/role=tool
  envelopes. Reasoning parts remain stripped to avoid re-injection.

- loadTurnResponses hard-capped TRs at 24h while RC is replayed in full
  from the events table, producing asymmetric context (user messages
  from day 1 visible, matching bot replies missing). The cap is removed;
  any size-bound trimming belongs in compaction, not here.

- lastProcessedMs lived only in memory and was set to time.Now() at turn
  end. After the 10-minute idle timeout, the goroutine exited and the
  next turn started with cursor=0, treating the entire history as new
  traffic. Now initialised from the latest TR's requested_at on cold
  start, and advanced to max(consumed RC.ReceivedAtMs) per turn so that
  messages arriving mid-generation trigger a follow-up round instead of
  being wrongly marked processed.
2026-04-23 20:05:35 +08:00
Acbox defddc2257 feat(web): structured schedule create/edit UI
Replace the read-only schedule list with a form-driven builder so users
never hand-edit cron patterns. A canonical ScheduleFormState feeds two
inverse pure functions (toCron / fromCron) that guarantee round-trip
equivalence, so new and edit flows share the exact same UI state shape
even though the DB stores only the pattern. Unrecognised patterns (AI-
generated ranges/steps, descriptors, 6-field seconds cron) fall back
losslessly to an advanced mode instead of being silently rewritten.

The dialog adds live previews (human-readable via cronstrue, next 3
trigger times via cron-parser evaluated in the bot timezone) and row
actions for edit / enable-toggle / delete.
2026-04-23 19:36:25 +08:00
Acbox 7642cb8ca4 chore(providers): refresh codex model presets
Align the bundled Codex provider with the current GPT-5.4 and GPT-5.3 model lineup, and expose explicit reasoning effort options for supported models.
2026-04-23 18:14:38 +08:00
Acbox 62fff09e10 fix(web): normalize about version display
Prevent the About page from rendering duplicate `v` prefixes when the server already returns tags like `v0.7.0`. Reuse the same normalization for release checks so the displayed version and update comparison stay consistent.
2026-04-23 18:06:09 +08:00
Acbox d05ba8956a fix: stop escaped history context blowup
Avoid feeding structured tool payloads back into pipeline context as doubly encoded JSON, and return readable history summaries instead of raw message blobs.
2026-04-23 17:56:09 +08:00
Fira 80ac96da2f Fix json structure (#399) 2026-04-23 16:24:38 +08:00
Fira 6a11105299 Remove dead code in i18n strings (#398) 2026-04-23 00:21:05 +08:00
Chrys e1dd6e15a9 fix(web): unify channel icon fallbacks (#397) 2026-04-22 22:14:41 +08:00
Acbox 925fdee478 feat: transcription support (#394)
* feat: expand speech provider support with new client types and configuration schema

* feat: add icon support for speech providers and update related configurations

* feat: add SVG support for Deepgram and Elevenlabs with Vue components

* feat: except *-speech client type in llm provider

* feat: enhance speech provider functionality with advanced settings and model import capabilities

* chore: remove go.mod replace

* feat: enhance speech provider functionality with advanced settings and model import capabilities

* chore: update go module dependencies

* feat: Ear and Mouth

* fix: separate ear/mouth page

* fix: separate audio domain and restore transcription templates

Move speech and transcription internals into the audio domain, restore template-driven transcription providers, and regenerate Swagger/SDK so the frontend can stop hand-calling /transcription-* APIs.

---------

Co-authored-by: aki <arisu@ieee.org>
2026-04-22 00:12:01 +08:00
Acbox fd8f1ec078 Revert "Feat/speech support (#392)" (#393)
This reverts commit c9dcfe287f.
2026-04-22 00:11:16 +08:00
Acbox c9dcfe287f Feat/speech support (#392)
* feat: expand speech provider support with new client types and configuration schema

* feat: add icon support for speech providers and update related configurations

* feat: add SVG support for Deepgram and Elevenlabs with Vue components

* feat: except *-speech client type in llm provider

* feat: enhance speech provider functionality with advanced settings and model import capabilities

* chore: remove go.mod replace

* feat: enhance speech provider functionality with advanced settings and model import capabilities

* chore: update go module dependencies

* feat: Ear and Mouth

* fix: separate ear/mouth page

* fix: separate audio domain and restore transcription templates

Move speech and transcription internals into the audio domain, restore template-driven transcription providers, and regenerate Swagger/SDK so the frontend can stop hand-calling /transcription-* APIs.

---------

Co-authored-by: aki <arisu@ieee.org>
2026-04-22 00:09:46 +08:00
Yiming Qi 8d78925a23 feat: expand speech provider support with new client types and config… (#389)
* feat: expand speech provider support with new client types and configuration schema

* feat: add icon support for speech providers and update related configurations

* feat: add SVG support for Deepgram and Elevenlabs with Vue components

* feat: except *-speech client type in llm provider

* feat: enhance speech provider functionality with advanced settings and model import capabilities

* chore: remove go.mod replace

* feat: enhance speech provider functionality with advanced settings and model import capabilities

* chore: update go module dependencies

---------

Co-authored-by: Acbox <acbox0328@gmail.com>
2026-04-19 21:58:16 +08:00
Fodesu 8e013ad1ad feat(platform): add slack platform support (#385)
* feat(platform): add slack platform support

* docs: add slack channel setup guide

* feat: normalize slack unicode reactions

* chore(docs): remove unsupport feature

* fix(slack): harden adapter stream and identity handling

- ignore reaction and speech stream events in Slack outbound
  streams
  - normalize Slack conversation types to framework-standard values
  - route DiscoverSelf through the adapter API factory
  - add config-scoped Slack user display-name caching
  - expand adapter interface assertions and add regression coverage
  - add ChannelTypeSlack to well-known channel constants
2026-04-19 14:17:05 +08:00
Fodesu db777b98ac fix(agent): stream loop abort, mid-stream retry parity, collector cleanup (#376)
* fix(agent): align stream retry abort and event collection

* fix(agent): cancel stream on loop detect, harden retry and tool events

* fix(agent): drain previous stream before retry

* fix(lint): ctx ci lint

---------

Co-authored-by: 晨苒 <16112591+chen-ran@users.noreply.github.com>
2026-04-18 03:19:58 +08:00
Quincy b534248e19 fix: resolve context switch failure in browser automation (#380)
* fix: resolve context switch failure in browser automation

* feat: update logo and optimize sidebar empty state

---------

Co-authored-by: 晨苒 <16112591+chen-ran@users.noreply.github.com>
2026-04-18 03:07:17 +08:00
Chrys 28d11713db fix: preserve empty skill discovery roots (#384) 2026-04-17 23:17:04 +08:00
Chrys dee82177d3 feat: add bot-level skill paths configuration (#383) 2026-04-17 16:05:00 +08:00
晨苒 7aa6ec6ca9 chore(ci): add release.yml workflow_dispatch 2026-04-16 18:38:02 +08:00
Acbox d3a820b2dc release: v0.7.0 v0.7.0 2026-04-16 18:16:11 +08:00
Acbox 2f5bb97ab4 chore: update logo to web and documentation 2026-04-16 18:14:18 +08:00
晨苒 74f04427af chore(ci): unify release pipeline 2026-04-16 17:58:23 +08:00
Acbox 68b1efa343 docs: update to v0.7 2026-04-16 17:45:56 +08:00
晨苒 fc1ee59dea Revert "release: v0.7.0"
This reverts commit 9e3fae7e9b.
2026-04-16 17:37:59 +08:00
Acbox 9e3fae7e9b release: v0.7.0 2026-04-16 16:50:58 +08:00
Acbox 9f10033f63 feat(agent): include platform self identities in system prompts
Give bots their known per-channel account handles in the system prompt so they can reason about platform-specific self references consistently. Reuse persisted channel self_identity data across chat, discuss, schedule, heartbeat, and subagent prompts.
2026-04-16 16:44:29 +08:00
Acbox e0fc2f514e fix(agent): surface tool calls before input completes
Emit tool-call placeholders as soon as tool input streaming starts so long writes appear immediately in chat. Reuse the same UI tool message when full input arrives to avoid duplicate cards, and keep the hook-required test suite green.
2026-04-16 16:42:07 +08:00
Acbox 1a5b1d6086 fix(web): show send tool calls in chat
Remove the frontend filter that hid send tool blocks delivered to the current conversation so assistant actions remain visible in chat.
2026-04-16 16:39:57 +08:00
Chrys 33e18e7e64 feat(skills): add effective skill resolution and actions (#377)
* feat(skills): add effective skill resolution and actions

* refactor(workspace): normalize skill-related env and prompt

* chore(api): regenerate skills OpenAPI and SDK artifacts

* feat(web): surface effective skill state in console

* test(skills): cover API and runtime effective state

* fix(web): show adopt action for discovered skills

* fix(web): align skill header and show stateful visibility icon

* refactor(web): compact skill metadata on narrow layouts

* fix(web): constrain long skill text in cards

* refactor(skills): narrow default discovery roots

* fix(skills): harden managed skill path validation

* feat: add path in the results of `use_skill`

---------

Co-authored-by: Acbox <acbox0328@gmail.com>
2026-04-16 13:50:39 +08:00
Fodesu 8e1ed3683f feat(agent): relax provider http timeouts (#348) 2026-04-15 00:07:41 +08:00
晨苒 38ac907361 chore(docs): update new memoh logo 2026-04-14 22:41:54 +08:00
Quincy 7cc7b959e2 fix: resolve bot styling issue (#375) 2026-04-14 22:31:30 +08:00
Acbox 5382c3cd27 feat(web): add sidebar collapse 2026-04-14 21:58:29 +08:00
Acbox 19d5cd606d chore: update AGENTS.md 2026-04-14 21:56:42 +08:00
Acbox 2a1c4a2e5f fix(providers): github copilot icon 2026-04-14 21:30:46 +08:00