Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
- "docs/**"
- "docs-content/**"
- "scripts/docs/**"
- "scripts/smoke_docker_server.py"
- "tests/docs/**"
- "README.md"
- "RELEASE_NOTES.md"
Expand All @@ -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"
Expand All @@ -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/**"
Expand All @@ -44,6 +47,7 @@ on:
- "docs/**"
- "docs-content/**"
- "scripts/docs/**"
- "scripts/smoke_docker_server.py"
- "tests/docs/**"
- "README.md"
- "RELEASE_NOTES.md"
Expand All @@ -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"
Expand All @@ -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/**"
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand Down Expand Up @@ -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)
Expand Down
56 changes: 42 additions & 14 deletions README.md

Large diffs are not rendered by default.

169 changes: 169 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion Start Row-Bot.command
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
3 changes: 3 additions & 0 deletions docs-site/docs/configuration/models-and-providers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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.
7 changes: 7 additions & 0 deletions docs-site/docs/developer/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand All @@ -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.
2 changes: 1 addition & 1 deletion docs-site/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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.

<Screenshot id="home-knowledge" alt="Row-Bot desktop workspace showing the Knowledge graph, conversations, tools, workflows, channels, Activity Center, and terminal." caption="The Knowledge workspace brings Row-Bot's local graph together with conversations, tools, workflows, channels, activity, approvals, and terminal output." />

Expand Down
4 changes: 3 additions & 1 deletion docs-site/docs/integrations/channels.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ When work starts from a channel and a child agent asks for approval, Row-Bot sen

## Troubleshooting

- If a channel cannot start, check required fields and tunnel state.
- If Telegram encounters one transient network failure during initialization, Row-Bot cleans up the partial runtime and retries once. Persistent network failures remain stopped with an actionable diagnostic; invalid bot tokens are not retried.
- If Telegram starts but its command menu cannot be registered, polling remains available and the menu failure is logged as non-fatal.
- If a channel cannot start, check required fields and tunnel state. Automatic tunnel startup runs outside the UI event loop, so a slow tunnel helper should report status without freezing app startup.
- If inbound messages fail, verify webhook URLs and platform permissions.
- If the wrong person has access, revoke them from Paired Users.
2 changes: 1 addition & 1 deletion docs-site/docs/operations/docker.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ The default Compose topology publishes only `127.0.0.1:8080`, runs the applicati
- Enough disk for the full image plus the `/data` volume. Models, managed runtimes, browser outputs, and caches can grow after explicit use; Row-Bot does not promise one fixed capacity figure.
- For public VPS access: Linux, Docker Compose 2.24.4 or newer, DNS you control, and a host-managed HTTPS proxy or Tailscale installation.

Release images are built from tagged source in GitHub Actions with the locked dependency set. Native amd64 and arm64 jobs run the isolated authenticated-container smoke before the release manifest is created, and the registry exposes a digest for immutable pins.
Release images are built from tagged source in GitHub Actions with the locked dependency set. Native amd64 and arm64 jobs run the isolated authenticated-container smoke before the release manifest is created, and the registry exposes a digest for immutable pins. The smoke uses bounded request timeouts and requires two consecutive readiness samples; it retries only safe GET probes, never repeats a state-changing POST, and limits failure output to redacted container state and log tails.

## Download A Release-Pinned Compose File

Expand Down
Loading
Loading