






















This release ships a unified human-in-the-loop pause/resume mechanism across every channel, a slash composer for invoking skills and other agents directly, typed file tools that cut token usage and hallucinations, and per-channel message splitters so long replies arrive cleanly instead of getting truncated. Approvals (app deploys, multiple-choice questions, credential picks) now render as buttons on Telegram, Discord, Slack, and WhatsApp Cloud, and as Reply YES or NO prompts on Signal, SMS, and personal WhatsApp, with the inbound parser accepting the obvious variants. Behind the scenes, a new Harness struct consolidates the agent runtime view of AppState, sandboxing moves to a single SandboxManager per principal kind, and the channel adapter framework now classifies failures with a typed ChannelError.
Supported channels: Slack, Discord, Telegram, Signal, SMS, WhatsApp Cloud, WhatsApp Personal.
tool_data blobs on tool calls with typed Hitl values; build typed HITL tool components and consume new SSE event names.Paused message status and resume with an atomic compare-and-swap; translate the new InferenceResponse outcomes into pause/resume persistence.POST /api/chats/{chat_id}/tool-calls/resolve endpoint, lift the HITL callback parser and response label into a shared hitl module, and drop the legacy app and vault approval routes superseded by the resolve endpoint.msg.tool_calls on inference_done so paused turns continue to surface new questions.y, yeah, ok, nope, thumbs-up emoji, and the usual variants).public_base_url for HITL fallback URLs on channels that can't render the picker.Reply YES or NO hint on App-deploy approval prompts).manage_service tool to manage_app and adopt typed HITL hooks; exit tasks on HITL and respawn via run_task.chat::slash invocation parser for / and @ prefixes; add a MessageCommand side field on Message for parsed slash invocations./commands end to end: dispatch, terminal-write refactor, cross-agent attribution, slash parsing.GET /api/chats/{id}/commands discovery endpoint and a listCommands API client./new builtin that opens a fresh chat with the current agent.@<agent> per-turn override: the reply is attributed to the target agent and the next message reverts to the chat's default.save_chat, save_updated_message, and delete_messages_for_chat helpers.disable-model-invocation, argument-hint, and arguments; hide disable-model-invocation skills from the model's available-skills block while keeping them in the / menu for users to invoke directly./agent dispatch and commands discovery.TelegramMarkdownV2Splitter into the Telegram adapter (4,096-char per-message limit) and render markdown tables as monospace code blocks since Telegram has no native table support.MarkdownSplitter into the Discord adapter (2,000-char per-message limit), remove the old chunk_for_discord helper, and render markdown tables as monospace code blocks.PlainSplitter into the Slack adapter (silent multi-chunk).PlainSplitter into the SMS adapter with a 1,600-char hard cap and Full reply: {short-link} overflow that points at a Chat-kind share URL (reused across overflow events in the same chat).MarkdownSplitter into the WhatsApp Cloud and WhatsApp Personal adapters.SignalSplitter into the Signal adapter with per-chunk SignalText { body, ranges }.ChannelError type and MessageDelivery.failure_kind field; migrate channel adapters to typed ChannelError classification (Transient, Forbidden, NotFound, PayloadInvalid, PayloadTooLarge, Unauthorized, Other) with an optional retry_hint.start_with_retry idempotent so a single start no longer double-spawns the adapter.Share entity with File and Chat kinds plus a ShareService for issuing short links; wire the service into AppState and schedule periodic cleanup.share.ttl_secs (default 30 days) and share.cleanup_interval_secs (default 6 hours) config knobs.GET /s/{id} short-link resolver with a 303 redirect to the canonical or presigned URL./p preview page that renders markdown and code with syntax highlighting; add a GET /p/{slug} redirector to the query-param form.outbound_url in all adapters via a new chat::channel::attachment helper: inline-channel previewable files get /p/{8-char-id}, inline non-previewable files get /s/{8-char-id}, button channels emit long-form /p/{owner}/{handle}/{path} or /api/files/... URLs.anonymous_not_found helper so unknown / expired / unauthorized share IDs return byte-identical 404s.FilePreviewContent into a shared module; extract apiFetch from request<T> for non-JSON authenticated requests.ShareKind::Chat variant with lazy lookup_or_issue_chat for SMS chat-share reuse.result_description on create_task and create_recurring_task so prose answers skip schema authoring; reject when both result_description and result_schema are passed (or neither).summary: string on complex task result schemas; reject complex schemas without it at task creation.result_schema on TaskCompletion events and persist the JSON content.TaskCompletion bubble with a schema-driven body and a link to the task chat; render TaskCompletion via a shared markdown helper across channel adapters.h100-used-prices.md) so successive research tasks don't overwrite each other.read, write, edit, glob, and grep tools. Workspace-scoped by default; absolute and policy-authorized sibling paths allowed; virtual-path URIs rejected.edit uses Unicode normalization (NFKC, ASCII quotes/dashes/spaces, collapsed whitespace) so a slightly-misremembered snippet still matches its target. The motivation is token usage and hallucinations: a typed edit returns a structured diff in a fraction of the tokens a shell round-trip eats, without the model free-styling shell escapes against a half-remembered path.frona-text crate with shared text and search primitives (NormalizedString, LineEnding, walk_with_ignore for .gitignore-aware traversal).SandboxManager is now the single entry point per principal kind.ToolRow primitives, DefaultView, slim chrome.read, write, edit, glob, grep) with syntax highlighting and line numbers; for produce_file (filename / size / content-type card); for web_search (result list) and web_fetch (markdown + clickable URL); for task tools (create_task, create_recurring_task with cronstrue, delete_task); for memory tools (auto-expand on large text); for update_identity (set/remove attribute rendering); and for set_heartbeat (humanized interval and next-tick time).produce_file as a filename card with size and content type.vitest test runner and cronstrue / unbash dependencies.Harness struct as the agent runtime view of AppState; route session build, voice WS, message stream, and resume-all through it.TaskExecutor to hold Arc<Harness> and own its own resolution-notifier map.ChannelCtx.app_state.ToolManager; extract deliver_event_to_source so ReportSignalTool no longer needs TaskExecutor.agent/execution.rs and update test fixtures for Harness.InferenceEventKind.此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。