diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 4cb1f557..7c5f785e 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -28,7 +28,7 @@ body:
id: version
attributes:
label: Row-Bot version
- placeholder: v4.7.0
+ placeholder: v4.7.1
- type: dropdown
id: os
attributes:
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index a320ac6e..cf3dcda7 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -10,6 +10,7 @@ on:
- "docs/**"
- "docs-content/**"
- "scripts/docs/**"
+ - "scripts/smoke_docker_server.py"
- "tests/docs/**"
- "README.md"
- "RELEASE_NOTES.md"
@@ -20,6 +21,7 @@ on:
- "src/row_bot/agent_runner.py"
- "src/row_bot/agent_tool_catalog.py"
- "src/row_bot/access/**"
+ - "src/row_bot/app.py"
- "src/row_bot/capability_search.py"
- "src/row_bot/docs_capture.py"
- "src/row_bot/goals.py"
@@ -31,6 +33,7 @@ on:
- "src/row_bot/designer/**"
- "src/row_bot/developer/**"
- "src/row_bot/tools/**"
+ - "src/row_bot/voice/**"
- "src/row_bot/providers/**"
- "src/row_bot/channels/**"
- "src/row_bot/plugins/**"
@@ -44,6 +47,7 @@ on:
- "docs/**"
- "docs-content/**"
- "scripts/docs/**"
+ - "scripts/smoke_docker_server.py"
- "tests/docs/**"
- "README.md"
- "RELEASE_NOTES.md"
@@ -54,6 +58,7 @@ on:
- "src/row_bot/agent_runner.py"
- "src/row_bot/agent_tool_catalog.py"
- "src/row_bot/access/**"
+ - "src/row_bot/app.py"
- "src/row_bot/capability_search.py"
- "src/row_bot/docs_capture.py"
- "src/row_bot/goals.py"
@@ -65,6 +70,7 @@ on:
- "src/row_bot/designer/**"
- "src/row_bot/developer/**"
- "src/row_bot/tools/**"
+ - "src/row_bot/voice/**"
- "src/row_bot/providers/**"
- "src/row_bot/channels/**"
- "src/row_bot/plugins/**"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d4cb57d0..9bdcfddf 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -39,7 +39,7 @@ on:
version:
description: Version to build. Must match src/row_bot/version.py and installer/row_bot_setup.iss.
type: string
- default: "4.7.0"
+ default: "4.7.1"
build_windows:
description: Build the Windows installer
type: boolean
@@ -64,7 +64,7 @@ concurrency:
# Tracks the version this workflow is currently shipping. Kept in sync with
# `installer/row_bot_setup.iss` (#define MyAppVersion) and `src/row_bot/version.py`.
env:
- ROW_BOT_VERSION: ${{ inputs.version || '4.7.0' }}
+ ROW_BOT_VERSION: ${{ inputs.version || '4.7.1' }}
WINDOWS_PYTHON_VERSION: "3.13.2"
jobs:
@@ -104,7 +104,7 @@ jobs:
python - <<'PY'
from pathlib import Path
import re
- expected = "${{ inputs.version || '4.7.0' }}"
+ expected = "${{ inputs.version || '4.7.1' }}"
version_py = Path("src/row_bot/version.py").read_text(encoding="utf-8")
setup_iss = Path("installer/row_bot_setup.iss").read_text(encoding="utf-8")
py_match = re.search(r'__version__\s*=\s*"([^"]+)"', version_py)
diff --git a/README.md b/README.md
index 8f07c333..26fc1ca2 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,12 @@ implementation, or follow-up work. The original parent remains responsible for
joining required results and answering, while durable checkpoints preserve
approvals, steering, retries, stops, and recovery. Checkpoint-safe work budgets
and application-wide delegation limits keep long or repetitive runs bounded and
-visible.
+visible. Parallel writers can be assigned to distinct existing local folders as
+separate Developer workspaces; folder-scoped locks let those children work
+concurrently while preserving one writer at a time inside any shared folder.
+If an app restart interrupts delegation or owned shell work, Row-Bot closes
+unanswered tool calls without replaying them and resumes the saved parent when
+its required child results are ready.
Recommended Auto capability loading keeps permitted core tools directly
available and searches enabled MCP, plugin, Custom Tool, and channel
@@ -81,11 +86,11 @@ Download the latest installer from [GitHub Releases](https://github.com/siddsach
| Area | Details |
|------|---------|
-| Agent orchestration | LangGraph ReAct agent, Goal Mode, Agent Profiles, Profile Library, automatic parent-led child-agent orchestration, required and detached work, dependency ordering, multi-wave live joins, ordered steering and approvals, transient retry, explicit restart recovery, compact Agent groups and cards, exactly-once completion, checkpoint-safe work budgets, repeated-action protection, configurable nesting/concurrency/active-time limits, profile/tool allowlists, promoted Agent-run workflows, generation-scoped cancellation, complete-input context metering, capacity-aware rolling compaction, and per-thread, per-workflow, per-profile, and per-Developer model overrides. |
-| Models and providers | Provider-qualified model selection, readiness routing, chat-only fallback for non-tool models, chat/agent/vision/image/video capability labels, custom endpoint profiles and probes, provider-scoped credential-backed live catalog discovery with last-known-good preservation, xAI Grok OAuth, ChatGPT / Codex and Claude Subscription providers, OpenCode providers, provider-scoped tool-schema compatibility, phased OpenAI-compatible timeouts with safe pre-stream retry, prompt-cache diagnostics, and background model cache. |
+| Agent orchestration | LangGraph ReAct agent, Goal Mode, Agent Profiles, Profile Library, automatic parent-led child-agent orchestration, required and detached work, dependency ordering, multi-wave live joins, ordered steering and approvals, transient retry, folder-scoped parallel writers, orphan-only checkpoint repair, explicit parent restart recovery, compact Agent groups and cards, exactly-once completion, checkpoint-safe work budgets, repeated-action protection, configurable nesting/concurrency/active-time limits, profile/tool allowlists, promoted Agent-run workflows, generation-scoped cancellation, complete-input context metering, capacity-aware rolling compaction, and per-thread, per-workflow, per-profile, and per-Developer model overrides. |
+| Models and providers | Provider-qualified model selection, readiness routing, chat-only fallback for non-tool models, chat/agent/vision/image/video capability labels, native Ollama tool-capability detection with maintained-family fallback, custom endpoint profiles and probes, provider-scoped credential-backed live catalog discovery with last-known-good preservation, xAI Grok OAuth, ChatGPT / Codex and Claude Subscription providers, OpenCode providers, provider-scoped tool-schema compatibility, phased OpenAI-compatible timeouts with safe pre-stream retry, prompt-cache diagnostics, and background model cache. |
| Memory and knowledge | Personal knowledge graph, 10 entity types, 67 typed relations, bounded semantic/lexical/graph recall, a disclosed checked-by-default local embedding setup download, cache-only normal recall, explicit repair, fast lexical/graph fallback, durable bounded document batches, streamed upload hashing and deduplication, atomic sharded vectors, resumable extraction, queue controls and health repair, audit and review states, recall traces, graph visualization, Obsidian-compatible wiki export with source provenance, Dream Cycle refinement, duplicate merging, stale-confidence decay, relationship inference, self-knowledge, insights, and conversation search. |
| Tools | 30+ core tool modules for web search, DuckDuckGo, Wikipedia, arXiv, YouTube transcripts, URL reading, documents, wiki vault, Gmail, Google Calendar, filesystem, shell, visible browser automation, opt-in native Computer Use, workflows, Goal Mode, child-agent delegation, tracker, channels, X, image generation/editing, video generation, MCP, Developer Studio, Designer Studio, Custom Tool Builder, status, calculator, Wolfram Alpha, weather, vision, memory, system info, and charts. Recommended Auto loading keeps core profile tools direct and searches enabled external MCP, plugin, Custom Tool, and channel schemas on demand; eager compatibility mode remains available. File tools read PDF, CSV, Excel, JSON, JSONL, TSV, and image files, with schema, stats, previews, and PDF export where supported. |
-| Developer Studio | Local Git workspace linking and cloning, code threads, per-thread and child-agent worktrees, repo inspector, file tree, diffs, todos, tests, branch, commit, push and PR prep, approval modes, and optional Docker Sandbox with a shadow workspace and explicit import back into the real repo. Docker Sandbox intentionally fails closed inside the official Row-Bot server container instead of nesting or falling back silently. |
+| Developer Studio | Local Git workspace linking and cloning, code threads, explicit existing-folder assignment for child Agents, folder-scoped writer locks, per-thread and child-agent worktrees, repo inspector, file tree, diffs, todos, tests, branch, commit, push and PR prep, approval modes, and optional Docker Sandbox with a shadow workspace and explicit import back into the real repo. Docker Sandbox intentionally fails closed inside the official Row-Bot server container instead of nesting or falling back silently. |
| Designer Studio | Decks, documents, landing pages, app mockups, and storyboards with a sandboxed interactive runtime, templates, brand controls, critique and repair, AI image and video generation, chart insertion, Mermaid and Plotly rendering, shareable HTML, and export to PDF, HTML, PNG, and PPTX. |
| Workflows | Scheduled runs, webhook triggers, task-completion triggers, step pipelines, conditions, approvals, subtasks, notification-only runs, concurrency groups, delivery defaults, profile-first workflow agents, promoted Agent-run workflows, per-workflow model/tool/skill/profile overrides, safety modes, run status, run history, upcoming runs, and a Workflow Console. |
| Controlled self-evolution | Structured self-reflection, bounded change proposals, reviewable execution boundaries, persistence, Dream Cycle and memory integration, and Command Center/status visibility for improvement work that stays explicit and auditable. |
@@ -126,7 +131,7 @@ curl -fsSL https://raw.githubusercontent.com/siddsachar/row-bot/main/installer/i
To install a specific version:
```bash
-curl -fsSL https://raw.githubusercontent.com/siddsachar/row-bot/main/installer/install-linux.sh | bash -s -- 4.7.0
+curl -fsSL https://raw.githubusercontent.com/siddsachar/row-bot/main/installer/install-linux.sh | bash -s -- 4.7.1
```
The installer downloads the release tarball, verifies its SHA256 from the GitHub release manifest, installs under `~/.local/share/row-bot`, creates `~/.local/bin/row-bot`, and stores user data in `~/.row-bot`. The default Linux build opens in your system browser. Native window and tray support are available when the required GTK, Qt, and AppIndicator libraries are installed.
@@ -151,7 +156,7 @@ arm64. From the repository root, pin the release and start the hardened
loopback-only Compose profile:
```bash
-export ROW_BOT_IMAGE=ghcr.io/siddsachar/row-bot:4.7.0
+export ROW_BOT_IMAGE=ghcr.io/siddsachar/row-bot:4.7.1
docker compose -f deploy/docker/compose.yaml up --detach
docker compose -f deploy/docker/compose.yaml ps
```
@@ -197,6 +202,11 @@ progress and blockers stay visible, choose an Agent Profile for the role you
want, and let the parent orchestrate child agents when subtasks can run
separately under tighter tool and approval boundaries. Required children join
the same live parent turn; detached children can continue without blocking it.
+When independent children need to write in parallel, give each one a distinct
+existing local folder as its Developer workspace. Changing only a shell working
+directory does not partition writer ownership, and children assigned to the
+same folder still serialize. Use child worktrees when the task instead needs
+Git-backed branch isolation.
Capability loading defaults to the recommended Auto mode. Core tools permitted
by the active Agent Profile stay directly available; enabled external tools and
@@ -381,10 +391,11 @@ firewall policy, log review, and recovery procedures; Row-Bot does not modify
the host firewall.
Remote browser voice captures the requesting browser's microphone, performs
-local Whisper transcription in Row-Bot, and returns local Kokoro audio to that
-same browser. Remote microphone capture requires HTTPS; plain LAN HTTP is not a
-secure browser context. Voice model downloads remain explicit and OpenAI
-Realtime voice remains a separate provider feature.
+transcription in Row-Bot with the selected local STT engine (Whisper by default,
+or SenseVoice after its explicit installation), and returns local Kokoro audio
+to that same browser. Remote microphone capture requires HTTPS; plain LAN HTTP
+is not a secure browser context. Voice model downloads remain explicit and
+OpenAI Realtime voice remains a separate provider feature.
SenseVoice installation is an explicit ~940 MB download from
[ModelScope](https://modelscope.cn/models/iic/SenseVoiceSmall) under the model's
@@ -425,6 +436,12 @@ auth store used by Settings. A key saved in the provider dialog can therefore
refresh its catalog and populate provider-qualified rows immediately without a
duplicate legacy environment-key entry.
+For local Ollama models, Row-Bot uses the daemon's native capability metadata
+when it is available. A new model family that advertises `tools` can therefore
+enter Agent mode without waiting for a maintained family-list update or an
+unnecessary live probe, while a model whose native metadata omits `tools` is not
+promoted merely because its name resembles a historically tool-capable family.
+
| Service | Key or setup | Used for |
|---------|--------------|----------|
| OpenAI | `OPENAI_API_KEY` | OpenAI models and image tools. |
@@ -531,6 +548,9 @@ Safety controls are built into the tool layer:
- Child-agent approval requests are surfaced in the parent thread and durable
channel/mobile approval surfaces instead of waiting invisibly in a background
run.
+- Write-capable child Agents retain one writer per assigned workspace. Distinct
+ registered folders may run concurrently; a shared folder stays serialized,
+ and changing a shell CWD does not bypass the workspace lock.
- Stop propagates through the active generation to stalled provider responses,
shell and Developer subprocesses, MCP and browser waits, voice turns, and
generation-linked child agents without cancelling unrelated runs.
@@ -573,8 +593,9 @@ with runtime-managed exact origins and full/compact browser shells,
authenticated server mode, progressive capability catalogs and bridges, one
complete-input context preparation and rolling-compaction pipeline, separate
browser and native Computer Use engines, shared channel streaming, Designer
-Studio, Developer Studio worktrees, provider runtime and cancellation, Plugin
-System v2/MCP boundaries, and safety controls.
+Studio, Developer Studio worktrees and folder-scoped child writers, provider
+runtime and bounded subprocess cancellation, interrupted-parent checkpoint
+repair, Plugin System v2/MCP boundaries, and safety controls.
Explore the visual architecture gallery: [docs/architecture.html](docs/architecture.html)
@@ -614,9 +635,10 @@ Review the Docusaurus docs source and local preview instructions:
|-------|---------|-------------|
| Local model runtime | Windows 10/11 64-bit, macOS 12+, or glibc Linux x86_64; Python 3.12+ for source installs; 8 GB RAM for 8B models; about 5 GB disk for the app and one small model; internet for install and model download. | 16 to 32 GB RAM for 14B to 30B models; NVIDIA GPU with 8+ GB VRAM or Apple Silicon for much faster inference; 20+ GB disk for multiple or larger models. |
| Provider/custom models only | Windows 10/11 64-bit, macOS 12+, or glibc Linux x86_64; Python 3.12+ for source installs; 4 GB RAM; about 1 GB disk; internet for provider inference. | No GPU required. Use this path if you do not want local model downloads. |
+| Optional SenseVoice STT | Windows, Linux, or Apple Silicon macOS; the voice runtime; internet for the explicit approximately 940 MB ModelScope snapshot download plus space for the matching CPU PyTorch/Torchaudio stack. | Optional and off until installed from Voice settings. Normal transcription is local and cache-only afterwards. Intel macOS is unsupported; local Whisper remains available. |
| Computer Use beta | Windows 10/11 x86-64 or ARM64, or macOS 12+ on Intel/Apple Silicon; interactive local UI; internet for the explicit Cua Driver install or repair; Accessibility and Screen Recording permission on macOS. | Optional and off by default. Browser automation remains preferred for websites; Linux and unattended/background use are not supported. |
| Developer Sandbox | Docker Desktop or a compatible Docker/Podman runtime. | Optional. Developer Studio also works with local execution in the selected repo. |
-| Docker / headless server | Docker Engine with Compose v2 on an amd64 or arm64 Linux host; enough persistent storage for `/data`, the encryption-key volume, documents, models, and backups. | Pin `ghcr.io/siddsachar/row-bot:4.7.0`, keep the default loopback publication, and use Tailscale or an operator-managed HTTPS proxy for remote reachability. |
+| Docker / headless server | Docker Engine with Compose v2 on an amd64 or arm64 Linux host; enough persistent storage for `/data`, the encryption-key volume, documents, models, and backups. | Pin `ghcr.io/siddsachar/row-bot:4.7.1`, keep the default loopback publication, and use Tailscale or an operator-managed HTTPS proxy for remote reachability. |
| Public docs site | Node.js 20+ and npm. | Optional. Used only for local Docusaurus docs preview and generated-docs validation. |
Your default Brain model is set by the setup wizard. If you choose the local path, Row-Bot uses one of the models already exposed by your local runtime; 14B-class models are recommended for stronger agent/tool behavior, while smaller 8B-class models are better for 8 GB machines. Hosted and custom endpoint setups can skip local model downloads entirely.
@@ -686,7 +708,7 @@ uv sync --locked --all-extras --group test
uv run python scripts/verify_runtime_dependencies.py all
```
-Supported optional extras are `voice`, `designer`, `browser`, `channels`, `mcp`, `developer`, `local-embeddings`, and `media`. Development and packaged app builds use `all`; lightweight source installs can choose only the extras they need.
+Supported optional extras are `voice`, `designer`, `browser`, `channels`, `mcp`, `developer`, `local-embeddings`, and `media`. Development and packaged app builds use `all`; lightweight source installs can choose only the extras they need. The `voice` and `all` extras include the platform-supported FunASR, ModelScope, and matching CPU PyTorch/Torchaudio runtime, but the SenseVoice model snapshot is still downloaded only through the explicit Voice settings action.
Recovery helpers:
@@ -740,6 +762,12 @@ compaction is needed, Row-Bot uses the task's selected model to summarize a
bounded older conversation range; a cloud-selected task therefore sends that
range to the already selected cloud provider as part of normal model use.
+Installing SenseVoice is a separate explicit network action to ModelScope and
+discloses the model size, license, and SDK request before it begins. Row-Bot
+persists only a verified contained snapshot, disables FunASR update checks, and
+sends no audio, prompts, or usage data during installation or normal offline
+transcription.
+
Developer Studio only touches repos you link, clone, or explicitly allocate as
worktrees. Local execution runs in that repo or worktree. Docker Sandbox runs
in a shadow copy and requires explicit import before changing the real repo.
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 66024fe3..6b218efa 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -2,6 +2,175 @@
---
+## v4.7.1 - Agent Recovery, Local Voice Options & Runtime Reliability
+
+This patch release builds on v4.7.0 with focused agent-orchestration,
+local-voice, channel-startup, model-readiness, memory-cache, and release-
+validation fixes. It lets parallel child Agents work in explicitly assigned
+local folders, restores interrupted parents safely after detached shell work,
+adds an explicit offline SenseVoice transcription option, makes Telegram and
+remote-access startup degrade cleanly, trusts Ollama's native tool-capability
+metadata, and hardens Docker smoke diagnostics without weakening local-first,
+approval, or credential boundaries.
+
+### Agent Workspaces, Shell Completion And Restart Recovery
+
+- **Folder-scoped child workspaces** - adds `developer_workspace_path` to
+ `delegate_work`, registers an existing local folder as the child's Developer
+ workspace, rejects missing paths and conflicting workspace-id/path inputs,
+ and keeps the assignment scoped to that child run.
+- **Independent parallel writers** - keys write ownership to each assigned
+ Developer workspace so child Agents in distinct folders can edit
+ concurrently while children assigned to the same folder still serialize.
+- **Durable first-delegation state** - records the original parent's safe
+ configurable runtime fields, enabled tools, model, approval mode, and
+ delivery context when asynchronous orchestration begins, excluding
+ non-serializable internal graph callbacks.
+- **Checkpoint-safe parent repair** - closes only unanswered tool calls after
+ an app restart, marks them as interrupted rather than replaying them, and
+ resumes the original parent from its saved checkpoint when retained required
+ child results are ready.
+- **Legacy recovery compatibility** - can wake and complete an interrupted v2
+ parent whose children already finished even when older orchestration rows do
+ not contain the newly persisted continuation snapshot.
+- **Detached-process completion** - captures owned subprocess output in
+ temporary files so a deliberately detached descendant cannot keep inherited
+ stdout or stderr pipes open and indefinitely block its parent Agent or shell
+ workspace lock.
+- **Bounded cancellation and timeout drain** - preserves partial output and
+ cancellation status, terminates the owned process tree, and avoids a second
+ unbounded `communicate()` wait after timeout.
+
+### Optional Local SenseVoice Transcription
+
+- **FunASR / SenseVoice choice** - adds SenseVoice Small as a selectable local
+ speech-to-text model for Talk and Dictation alongside faster-whisper, with
+ the selected local model applied consistently when either voice mode starts.
+- **Explicit installation only** - keeps readiness checks, startup, and normal
+ transcription cache-only; the approximately 940 MB ModelScope snapshot is
+ downloaded only from the Voice settings action.
+- **Verified offline snapshot** - accepts only a complete model inside
+ Row-Bot's SenseVoice cache, persists the verified path across restarts, runs
+ CPU inference against that local path, and disables FunASR update checks.
+- **Recoverable status and setup** - distinguishes unsupported platforms,
+ missing packages, missing model data, and invalid snapshots; exposes clear
+ install or reinstall guidance without making the model appear ready early.
+- **Transparent network boundary** - discloses the ModelScope download, model
+ size, license, and SDK user-agent before installation; no audio, prompts, or
+ usage data are sent, and regular transcription remains offline.
+- **Platform guard** - keeps SenseVoice unavailable on Intel macOS, where the
+ matching CPU PyTorch and Torchaudio wheels are not published, while leaving
+ local Whisper available.
+
+### Telegram, Tunnel And Startup Resilience
+
+- **Retryable Telegram initialization** - retries one transient Telegram
+ network failure and gives polling one bootstrap retry without looping on an
+ invalid token.
+- **Clean failed-start recovery** - shuts down every partially initialized
+ Telegram component best-effort, clears global lifecycle state, surfaces a
+ safe actionable invalid-token error, and permits a fresh start afterwards.
+- **Non-blocking command registration** - starts polling before registering
+ the BotFather command menu so a registration failure cannot take a working
+ bot offline.
+- **Responsive tunnel auto-start** - shows an explicit startup stage and moves
+ main-app tunnel creation off the UI event loop so slow tunnel setup does not
+ freeze the startup experience.
+- **Reliable splash completion** - treats the `/readyz` HTTP success status as
+ the readiness contract instead of requiring a JSON body that the public
+ readiness boundary does not promise.
+- **Credential-safe channel diagnostics** - records only the channel name and
+ exception type for manual start failures while preserving the existing
+ user-facing error notification.
+
+### Ollama Readiness And Docker Release Validation
+
+- **Native Ollama capabilities** - consumes the daemon-reported
+ `capabilities` list when available, allowing new or unknown model families
+ that advertise `tools` to enter Agent mode without an unnecessary live
+ round-trip probe.
+- **Authoritative negative detection** - does not mark a familiar family as
+ tool-capable when Ollama explicitly omits `tools`; an explicit boolean
+ capability remains highest priority and the maintained family table remains
+ the fallback only when native metadata is absent.
+- **Stable container readiness** - requires two consecutive successful
+ `/healthz` and `/readyz` samples and gives every functional Docker smoke
+ request a configurable timeout.
+- **Safe transient HTTP retry** - retries short-lived transport failures only
+ for idempotent GET checks after restarts or recreation and never replays
+ invitation claims, refreshes, or other POST operations.
+- **Actionable secret-safe failures** - reports the failed stage, HTTP method,
+ path, and exception type, then emits bounded container state and log-tail
+ diagnostics with exact smoke-owned invitation, session, and encryption
+ values redacted.
+
+### Memory, Dependencies And Public Documentation
+
+- **Consistent embedding snapshots** - applies the same GGUF, ONNX, and
+ OpenVINO ignore filters during cache-only local-embedding lookup as during
+ explicit download, preventing a valid cached snapshot from being
+ misidentified or resolved differently.
+- **Voice runtime dependency verification** - adds FunASR, ModelScope,
+ matching CPU PyTorch/Torchaudio packages, lockfile coverage, installer export
+ coverage, and platform-aware import verification to the voice and all extras.
+- **Security dependency cleanup** - updates the Python, documentation-site,
+ and WhatsApp bridge resolutions, upgrades the supported arXiv,
+ Hugging Face/Transformers, and pytest lines, pins vulnerable documentation
+ transitive packages where compatible, and narrows OSV exceptions to the
+ remaining reviewed packages without compatible fixes.
+- **4.7 public-site alignment** - updates the post-tag landing, Features, and
+ Architecture pages and their contracts to the v4.7.0 downloads, metadata,
+ cache revisions, progressive capability loading, context management, and
+ trusted-address descriptions.
+- **README voice disclosure** - documents the SenseVoice option, explicit
+ ModelScope download, offline inference boundary, Intel macOS limitation, and
+ FunASR acknowledgement.
+- **4.7.1 release documentation** - updates the full README and architecture
+ reference, public Voice, Remote Access, Agents, Developer, Channels, Ollama,
+ and Docker guides, generated reference/search artifacts, installer build
+ notes, marketing support pages, and release-version metadata while leaving
+ the separately staged landing `index.html` unchanged.
+
+### Tests And Release Validation
+
+- **Agent recovery coverage** - verifies folder registration, invalid workspace
+ inputs, independent writer locks, first-delegation snapshots, orphan-only
+ checkpoint repair, terminal-child parent wakeup, detached descendants,
+ bounded timeout cleanup, cancellation output, and shell lock release.
+- **Voice coverage** - verifies no-download startup and transcription,
+ explicit snapshot installation, persisted and contained model paths,
+ incomplete-cache recovery, package/platform status, catalog readiness,
+ Talk/Dictation selection, dependency metadata, and settings disclosures.
+- **Telegram lifecycle coverage** - verifies one-retry success, exhausted
+ network cleanup, invalid-token handling, non-fatal command registration, and
+ a clean restart after partial initialization failure.
+- **Provider and Docker coverage** - verifies Ollama native positive, negative,
+ and explicit-override precedence plus Docker readiness stability, GET-only
+ retries, POST no-replay, functional request deadlines, bounded diagnostics,
+ and credential redaction.
+- **Documentation contracts** - verifies the staged v4.7.1 support-page
+ downloads and metadata alongside the unchanged v4.7.0 landing page,
+ evergreen feature inventory, generated references, architecture copy,
+ internal links, responsive fallbacks, and analytics boundaries.
+
+### Breaking Changes And Caveats
+
+- No application data migration or public CLI break is introduced by v4.7.1.
+- SenseVoice requires an explicit approximately 940 MB ModelScope download and
+ is not supported on Intel macOS. Local Whisper remains the default and the
+ fallback local transcription path.
+- Separate `developer_workspace_path` folders permit independent child writer
+ locks; changing only a shell working directory does not. Existing folders
+ are registered, never created implicitly, and the same folder still permits
+ only one child writer at a time.
+- A detached command is considered complete when the directly launched process
+ exits. Row-Bot does not adopt or later cancel an intentionally detached
+ descendant that has left the owned process group.
+- Docker smoke transport retries remain deliberately limited to GET requests;
+ non-idempotent access and session operations fail without replay.
+- The remaining temporary OSV exceptions cover only reviewed dependency
+ versions without a compatible fixed line and expire on September 30, 2026.
+
## v4.7.0 - Progressive Capabilities, Context Management & Trusted Access
This release builds on v4.6.0 with a prompt-efficiency, long-conversation,
diff --git a/Start Row-Bot.command b/Start Row-Bot.command
index b05e43a6..d4828085 100644
--- a/Start Row-Bot.command
+++ b/Start Row-Bot.command
@@ -36,7 +36,7 @@ VENV_DIR="$PROJECT_DIR/.venv"
ROW_BOT_HOME="$HOME/.row-bot"
ROW_BOT_VERSION="$(awk -F'"' '/__version__/ { print $2; exit }' "$PROJECT_DIR/src/row_bot/version.py" 2>/dev/null || true)"
if [ -z "$ROW_BOT_VERSION" ]; then
- ROW_BOT_VERSION="4.7.0"
+ ROW_BOT_VERSION="4.7.1"
fi
OLLAMA_PORT=11434
diff --git a/docs-site/docs/configuration/models-and-providers.mdx b/docs-site/docs/configuration/models-and-providers.mdx
index aab9b518..fbe9d743 100644
--- a/docs-site/docs/configuration/models-and-providers.mdx
+++ b/docs-site/docs/configuration/models-and-providers.mdx
@@ -28,8 +28,11 @@ Use local Ollama for local-first privacy and no provider billing. Use an API pro
Keep at least one everyday chat model and one stronger tool-capable model pinned. For Developer, Designer, workflows, and complex tools, choose a model that can handle tool calls and enough context.
+For Ollama, Row-Bot prefers explicit tool-calling metadata, then the daemon's reported capability list. A reported `tools` capability enables agent use even for a model family newer than Row-Bot's maintained fallback catalogue; an explicit capability list that omits `tools` remains authoritative. Family fallbacks are used only when the daemon provides no capability metadata.
+
## Troubleshooting
- If a provider connects but has no models, refresh Models.
- If a model fails with tools, choose a tool-capable model.
+- If an Ollama model is unexpectedly excluded from agent use, refresh the local catalogue and inspect the capabilities reported by the installed Ollama daemon.
- If a custom endpoint fails, check base URL, model name, API compatibility, and context window.
diff --git a/docs-site/docs/developer/index.mdx b/docs-site/docs/developer/index.mdx
index 5ad403c2..ff68adb6 100644
--- a/docs-site/docs/developer/index.mdx
+++ b/docs-site/docs/developer/index.mdx
@@ -17,6 +17,8 @@ Developer Studio is Row-Bot's code workspace. Use it when you want Row-Bot to un
Open Home -> Developer. Choose an existing folder, connect a repository already on your machine, or clone a repository into a local workspace.
+The Agents tool can also assign a child directly to an existing local folder. Row-Bot validates the path and registers it as that child's Developer workspace; a folder assignment and a pre-existing workspace ID are alternative ways to select the workspace, not settings to combine.
+
## End-To-End Workflow
1. Open or clone a project.
@@ -38,6 +40,10 @@ Open Home -> Developer. Choose an existing folder, connect a repository already
- **Command controls** run detected or requested commands through approval policy.
- **Change review** summarizes edits and lets you inspect before accepting next steps.
+## Parallel Child Workspaces
+
+Writer ownership follows the resolved workspace folder. Children working in distinct folders or worktrees can edit concurrently, while writers aimed at the same folder are serialized to prevent overlapping changes. Changing only a shell working directory does not create an independent write boundary. Use a separate worktree or folder when two children genuinely need parallel write access.
+
## Sandbox Modes
Local mode lets Row-Bot operate in the selected workspace with your configured file and command permissions. Docker Sandbox mode, when available on a host installation, isolates command execution in a container and requires an import step before changes affect the real workspace. It requires a supported host Docker runtime and can differ from your local environment.
@@ -51,6 +57,7 @@ For a host installation, start with Local mode on a disposable branch. Use Docke
## Troubleshooting
- If Developer tools are unavailable, open a Developer workspace first.
+- If an Agent folder assignment is rejected, confirm that the directory already exists and pass either that folder or an existing workspace ID, not both.
- If commands are missing, inspect detected commands or ask Row-Bot to identify the project tooling.
- If a command asks for approval, read the exact command and workspace before approving.
- If Docker sandbox import is offered, review the patch before importing it into the real project.
diff --git a/docs-site/docs/index.mdx b/docs-site/docs/index.mdx
index 4fc09126..668dd2da 100644
--- a/docs-site/docs/index.mdx
+++ b/docs-site/docs/index.mdx
@@ -9,7 +9,7 @@ import Screenshot from '@site/src/components/Screenshot';
Row-Bot is a local-first AI workbench for people who want provider-aware models, parent-led agents, durable documents, memory, tools, workflows, design, code help, integrations, and voice in one controllable system. Run it as a desktop application or a private authenticated server; this guide explains installation, Docker deployment, owner access, the main interface, settings, and every explicit external route.
-These pages describe Row-Bot 4.7.0, the current stable release represented by this source tree.
+These pages describe Row-Bot 4.7.1, the current stable release represented by this source tree.