* feat(speech): implement TTS and STT model layer and pipeline stages (LANG-251)
Co-authored-by: multica-agent <[email protected]>
* fix(speech): fix invoke signatures and provider lookup in speech stages and model testing
Co-authored-by: multica-agent <[email protected]>
* feat(speech): rename STT to ASR, improve TTS voice parameter handling and failure recovery
Co-authored-by: multica-agent <[email protected]>
* fix(persistence, lint, web): fix migration revision id, legacy table check, ruff duplicates, and frontend types
Co-authored-by: multica-agent <[email protected]>
* fix(speech): restore migration and CI contracts
Co-authored-by: multica-agent <[email protected]>
* fix(pipeline,ui): fix select dropdown width gap, add speech to guided tour, and configure show_if for speech options
Co-authored-by: multica-agent <[email protected]>
* feat(speech,openclaw): support silk audio transcoding, graceful fallback, duration estimation, and multi-lang deploy docs
Co-authored-by: multica-agent <[email protected]>
* fix(audio): enhance ffmpeg executable detection via venv and imageio_ffmpeg
Co-authored-by: multica-agent <[email protected]>
* fix(provider): improve LiteLLM error classification and avoid falling back to Unknown error
Co-authored-by: multica-agent <[email protected]>
* fix(openclaw): serialize voice_item attributes and improve transcoding fallback logging
Co-authored-by: multica-agent <[email protected]>
* fix(audio,openclaw): handle transient TMPDIR deletion and add size attribute to voice_item
Co-authored-by: multica-agent <[email protected]>
* fix(openclaw): download and convert inbound voice messages and align voice sending protocol
Co-authored-by: multica-agent <[email protected]>
* fix(models): redesign add model popover tabs layout and include ASR/TTS models in provider counts and scanning
Co-authored-by: multica-agent <[email protected]>
* fix(audio): decrypt and transcode wecombot voice to mp3, align openclaw weixin voice delivery
Co-authored-by: multica-agent <[email protected]>
* fix(wecombot): transcode outbound voice to silk and support voice_delivery mode
Co-authored-by: multica-agent <[email protected]>
* fix(discord,web): map audio attachments to voice for ASR, prefer base64 voice in webui
Co-authored-by: multica-agent <[email protected]>
* fix(telegram): deliver voice replies in streaming and non-streaming modes with quote origin
Co-authored-by: multica-agent <[email protected]>
* feat(dingtalk): route voice messages through pipeline ASR and send TTS replies as voice
Inbound DingTalk audio now arrives as a Voice component with its duration,
so the pipeline speech recognition switch decides how it is transcribed.
DingTalk's own recognition text is used only when the audio cannot be
downloaded.
Outbound Voice components are transcoded to ogg/opus, uploaded as voice
media and sent as native sampleAudio messages in both the omni and legacy
adapters. Audio over 60 seconds, or audio that cannot be transcoded or is
rejected as a voice message, is sent as a file instead. Voice parts no longer
leak into the reply text as "[Voice]".
Also estimate ogg durations from the granule position and ignore non-audio
MIME hints when extracting voice bytes, so ffmpeg can probe the input.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
* fix(ci): include speech model counts in provider responses and fix lint/image build
- Copy every count returned by get_provider_model_counts into the provider
payload instead of indexing asr_count/tts_count, and update the test fakes
to return the speech model counts.
- Install libc6-dev in the runtime image so the pilk audio extra can compile.
- Apply ruff and prettier formatting required by the lint jobs.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
* test(e2e): expect the speech step in the pipeline setup guide
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
---------
Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Stdio and Windows launches always bound the SDK default debug port 5401,
so changing plugin.display_plugin_debug_url only updated the console URL
and a second Core instance hit Address already in use. Pass the configured
debug (and Windows control) ports into the Runtime CLI, and document the
behavior.
Fixes#2713
Co-authored-by: Li-john1021 <[email protected]>
Imported langbot-app/langbot-docs main (51dddcb3f) under docs/ with
`git subtree add`, keeping every original commit SHA and signature so the
mirror and landing-page submodule can fast-forward from a `git subtree
split` later. Retarget the docs workflows to docs/, point blog sync at the
main repository, and update the remaining internal references.
Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
Move the 27 internal design docs (87 tracked files) from docs/ to dev-docs/
to make room for the public documentation site, adjust Docker/fnOS ignores,
refresh the README/AGENTS/ARCHITECTURE references, and land the docs
workflows ahead of the subtree import so they cannot diverge from mirror.
Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
The Chinese copy used 套餐 (package) for the subscription plan in the cloud
banner, the model errors and the multi-tenant docs. Name the same concept 计划
everywhere; Traditional Chinese keeps 計劃.
Apply group response rules before busy-session steering. Initialize usable private-message and group-mention routes for new bots, including Wizard-created pipelines, and preserve member-configured rules across saves and retries.
Fix empty pipeline configuration, refresh the processor sidebar after automatic creation, and show creation feedback. Align routing regressions and use Node 24 for the browser CI job.
Correct the task's erroneous agent attribution while preserving every code tree and the original human contribution.
Co-authored-by: multica-agent <[email protected]>
Set client_info_tag='langbot' on the Valkey Search vector store's glide
client, so CLIENT SETINFO LIB-NAME reports GlidePy(langbot) and operators
can attribute Valkey usage to LangBot. client_name is unchanged.
client_info_tag was added in valkey-glide 2.5.2, so raise the floor from
>=2.4.1 to >=2.5.2 (pyproject, install hint, docs) and regenerate uv.lock.
- Expose the workspace's purchased plan revision from the entitlement
snapshot.
- Stack the purchased revision card in front of the latest revision in
the plan comparison dialog; both cards share the same layout, and the
purchased card's copy and prices come from the Space revision endpoint
while benefits stay on the entitlement snapshot.
- Add a cancel-first tooltip for subscribing to the newer revision.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Coerce/default/drop invalid or unknown legacy fields with warnings instead of blocking
- Never block on LocalAgent model; prune dangling KB/tool/MCP references
- Mark custom (non-builtin) 4.10 runners as unsupported_runner instead of failing
- Pin runner plugins to current marketplace versions (0.2.x); fall back to latest when a pin is withdrawn
- Raise plugin install/upgrade timeout to 600s for slow dependency installs
- Assistant configure_pipeline writes the 4.11 runner shape
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The certified-archive admission gate treated any declared certificate it could
not resolve as an untrusted archive and rejected the install with
CERTIFIED_PLUGIN_OSS_FORCE_REQUIRED. OSS ships an empty
plugin.certification.trusted_public_keys ring and the marketplace signs every
package with its own issuer key, so all certified marketplace packages (for
example langbot-team/RunnerDemo and langbot-team/LocalAgent) failed at the
'validating plugin package' step before artifact storage.
Admission now distinguishes an unresolvable declaration from a configured trust
decision that fails:
- record certificate_id only when the key_id is actually present in the
configured ring, so an empty ring yields an unresolvable declaration;
- OSS degrades an unresolvable declaration to the existing oss_dev dedicated
profile with CERTIFIED_PLUGIN_OSS_UNTRUSTED_DEDICATED instead of blocking;
- a resolvable declaration that still fails keeps requiring the explicit
administrator force (CERTIFIED_PLUGIN_OSS_FORCE_REQUIRED);
- Cloud stays fail-closed and rejects before storage.
No shared-runtime privilege is granted when the issuer is not trusted, so this
withholds isolation rather than escalating it.