From 9d400b5c2f14fce7a50624b76b3863e2f056a718 Mon Sep 17 00:00:00 2001 From: Wanjun Gu Date: Mon, 19 Oct 2026 22:15:55 -0700 Subject: [PATCH] docs: call the capability Biorouter Copilot everywhere a person reads it The naming guard (scripts/check-computer-use-naming.sh) covers Rust, the desktop's TS/TSX, prompts and built-in skills. Outside that set, living docs, workflow names, packaging comments, script messages and code comments still said "Computer Use", "Computer-Controller", "computer-use" or a bare "Copilot" for the capability, and a few described the removed Computer Controller's web, office and cache tools as if they still lived there. - Workflow display names: "Biorouter Copilot native payloads" and "Biorouter Copilot installed packages". Nothing matches the old names: branch protection requires job names, and no script filters runs by workflow name. - Stale facts: the global memory barrier, the session store notes, the memory extension doc and an artifact comment now name Web & Documents (`webdocuments`), which is where those file tools moved. The sandbox crate names its real consumers (Developer and Compute). - The API schema description of the last request says Biorouter Copilot in the Rust doc, openapi.json and the generated types together. - The vendored upstream tree is called by its own name, Open Computer Use. Unchanged on purpose: every identifier (`computercontroller`, `computer_use`, `computer-use` paths, `X-Computer-Use-Key`, `--computer-use-approval`), file names, the macOS helper "BioRouter Computer Use.app" that permission grants are keyed on, upstream's name and notice, docs/history and release notes, migration copy that names an old name as old, and test fixtures of old data. --- .gitattributes | 2 +- .github/workflows/computer-use-native.yml | 2 +- .github/workflows/computer-use-package-acceptance.yml | 2 +- .github/workflows/linux-gui-packages.yml | 2 +- .github/workflows/rust.yml | 5 +++-- .gitignore | 4 ++-- CONTRIBUTING.md | 5 +++-- README.md | 2 +- biorouter-self-test.yaml | 8 ++++---- crates/biorouter-mcp/src/computer_use/contract.rs | 2 +- crates/biorouter-sandbox/src/console.rs | 2 +- crates/biorouter-sandbox/src/lib.rs | 2 +- .../agents/builtin_skills/develop-biorouter/SKILL.md | 2 +- crates/biorouter/src/providers/base.rs | 2 +- .../src/providers/formats/openai_responses.rs | 2 +- crates/biorouter/src/security/computer_use.rs | 2 +- crates/biorouter/src/security/global_memory.rs | 4 ++-- crates/biorouter/src/security/sensitive_ops.rs | 3 ++- crates/biorouter/src/security/session_store.rs | 2 +- .../designs/linux-and-windows-sandboxing.md | 9 +++++---- docs/cli/command-reference.md | 11 ++++++----- docs/deployment/serve-architecture.md | 2 +- .../codex-simplicity-redesign/implementation-spec.md | 8 ++++---- docs/design/codex-simplicity-redesign/progress.md | 2 +- docs/design/computer-use-integration-plan.md | 2 +- docs/desktop-ui/shared-controls.md | 2 +- docs/extensions/built-in/computer-controller.md | 2 +- docs/extensions/built-in/memory.md | 2 +- docs/extensions/slack-posting-investigation.md | 2 +- packaging/biorouter-cli.yaml | 2 +- scripts/check-computer-use-naming.sh | 2 +- scripts/release.sh | 2 +- scripts/test-computer-use-packaged-windows-console.py | 4 ++-- scripts/test-computer-use-protocol.py | 2 +- scripts/test-computer-use-windows-console.py | 2 +- ui/desktop/forge.config.ts | 2 +- ui/desktop/openapi.json | 2 +- ui/desktop/src/api/types.gen.ts | 2 +- ui/desktop/src/components/artifacts/artifactUtils.ts | 2 +- ui/desktop/src/components/copilot/CopilotControl.tsx | 4 ++-- .../settings/capabilities/CapabilitiesSection.tsx | 2 +- ui/desktop/src/styles/main.css | 2 +- ui/desktop/src/utils/toolGlyph.ts | 8 ++++---- 43 files changed, 70 insertions(+), 65 deletions(-) diff --git a/.gitattributes b/.gitattributes index 77c0dd2eb..f7fd37298 100644 --- a/.gitattributes +++ b/.gitattributes @@ -42,7 +42,7 @@ crates/biorouter/src/agents/snapshots/*.snap linguist-language=Text # Unified diff markers require spaces on blank context lines and before Go tab indentation. vendor/computer-use/patches/*.patch text eol=lf whitespace=-blank-at-eol,-space-before-tab -# ⚠ The vendored Computer Use tree is HASHED, file by file, into +# ⚠ The vendored Open Computer Use tree is HASHED, file by file, into # `vendor/computer-use/source-manifest.json`, and the build verifies # those hashes before the bytes become build input. So its bytes must be # byte-identical on every platform, not merely equivalent. diff --git a/.github/workflows/computer-use-native.yml b/.github/workflows/computer-use-native.yml index 10f048c60..a22e1c3cf 100644 --- a/.github/workflows/computer-use-native.yml +++ b/.github/workflows/computer-use-native.yml @@ -1,4 +1,4 @@ -name: Computer Use native payloads +name: Biorouter Copilot native payloads on: pull_request: diff --git a/.github/workflows/computer-use-package-acceptance.yml b/.github/workflows/computer-use-package-acceptance.yml index 4121b9a90..5cde48ae0 100644 --- a/.github/workflows/computer-use-package-acceptance.yml +++ b/.github/workflows/computer-use-package-acceptance.yml @@ -1,4 +1,4 @@ -name: Computer Use installed packages +name: Biorouter Copilot installed packages 'on': workflow_dispatch: null push: diff --git a/.github/workflows/linux-gui-packages.yml b/.github/workflows/linux-gui-packages.yml index c915a3669..46be793b9 100644 --- a/.github/workflows/linux-gui-packages.yml +++ b/.github/workflows/linux-gui-packages.yml @@ -295,7 +295,7 @@ jobs: # is the mode-mangling this whole workflow exists to avoid, so read it # back off the packaged copy. ocu="$res/computer-use/ocu" - [ -x "$ocu" ] || { echo "::error::the Copilot helper is not executable in the deb: $(ls -l "$ocu" 2>&1)"; exit 1; } + [ -x "$ocu" ] || { echo "::error::the Biorouter Copilot helper is not executable in the deb: $(ls -l "$ocu" 2>&1)"; exit 1; } echo "ocu in the deb: $(ls -l "$ocu" | awk '{print $1}')" # No other platform's executables may ride along. The recursive sweep diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 3babae220..67b6e12fa 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -82,8 +82,9 @@ jobs: - name: Version consistency (CLI = daemon = GUI) run: ./scripts/check-version-consistency.sh # The capability is "Biorouter Copilot" wherever a person reads it -- never - # the removed "Computer Controller", never vendor-qualified. The internal - # `computercontroller` identifier is deliberately exempt; see the script. + # its former "Computer Use" or the removed "Computer Controller", never + # vendor-qualified. The internal `computercontroller` identifier is + # deliberately exempt; see the script. - name: Biorouter Copilot naming consistency run: ./scripts/check-computer-use-naming.sh diff --git a/.gitignore b/.gitignore index 84122c20a..c7588d9ef 100644 --- a/.gitignore +++ b/.gitignore @@ -99,7 +99,7 @@ scripts/worktrees.manifest # elsewhere matches only a real directory, so the symlink itself must be named too. ui/desktop/src/bin -# Generated pinned native computer-use resources +# Generated pinned native Biorouter Copilot helper resources ui/desktop/src/computer-use/ # pdf.js runtime assets, copied from pdfjs-dist by ui/desktop/vite-plugins/pdfjsAssets.mts @@ -107,7 +107,7 @@ ui/desktop/src/computer-use/ # this covers a vite run whose cwd is the repo root. Build output, never committed. /public/pdfjs/ -# ── Vendored Computer Use upstream ────────────────────────────────────────── +# ── Vendored Open Computer Use upstream ───────────────────────────────────── # `vendor/computer-use/source/` is a COMPLETE copy of the upstream # project at the pinned commit, and the whole point of vendoring it is that a # build needs neither the network nor that repository continuing to exist. So it diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33ba6f968..366e419e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -157,8 +157,9 @@ develop on. `just check-everything` is the single precommit entry point. It chains `cargo fmt`, the clippy lint script, `npm run lint:check`, the OpenAPI schema check, the version, brand, and cross-compile-drift consistency checks, the -Biorouter Copilot naming gate (which rejects the string "Computer Controller" anywhere -a person reads it), and the two BAAM registry gates. +Biorouter Copilot naming gate (which rejects the former name "Computer Use" and +the removed "Computer Controller" anywhere a person reads it), and the two BAAM +registry gates. ### Regenerating the OpenAPI schema diff --git a/README.md b/README.md index 77a4240e0..d19d35781 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Work with papers, genes, diseases, drugs, cohorts, and experimental data in the | **Build and reuse tools** | Create small research apps with Agent Drafter, run parallel chats, and save or schedule recurring tasks as workflows. | | **Work with your lab** | In Crew, chat in channels, share files and give AI agents tasks the whole channel can see, in a workspace one lab member hosts on a shared Linux server. | -Copilot keeps observations and approvals separate for each chat. The applications themselves share a desktop, so choose the model before opening sensitive records or research data. See [Copilot setup and limits](docs/extensions/built-in/computer-controller.md). +Biorouter Copilot keeps observations and approvals separate for each chat. The applications themselves share a desktop, so choose the model before opening sensitive records or research data. See [Biorouter Copilot setup and limits](docs/extensions/built-in/computer-controller.md). Crew runs in the desktop app and in the `biorouter crew` commands, not in a `biorouter serve` browser. Each member connects with their own server account over SSH. Crew's Private and Public settings decide which AI models may read the workspace, and the stricter of your connection's and the workspace's setting applies. See the [Crew user manual](docs/crew/README.md). diff --git a/biorouter-self-test.yaml b/biorouter-self-test.yaml index 7bee9bbd0..001c2a59a 100644 --- a/biorouter-self-test.yaml +++ b/biorouter-self-test.yaml @@ -523,9 +523,9 @@ prompt: | 2. Exercise contract, consent, non-pooling, ownership, cancellation and bridge/nested-call regression tests. Require removed tool names to fail rather than forward. A disabled capability or restricted roster must remain restricted after reload. - Verify ordinary replies never show a Copilot banner; only this conversation's actual - Copilot request may show one. Dismiss a completed banner, switch conversations and - return: it must stay dismissed until a new Copilot request. Dismissing an active banner + Verify ordinary replies never show a Biorouter Copilot banner; only this conversation's actual + Biorouter Copilot request may show one. Dismiss a completed banner, switch conversations and + return: it must stay dismissed until a new Biorouter Copilot request. Dismissing an active banner must retain Stop and must not revoke or grant control. OS checks must distinguish denied permissions from a failed runtime probe. Settings actions target only the local backend; remote sessions name the backend computer and require setup there. Opening @@ -546,7 +546,7 @@ prompt: | Private and public chats must retain separate snapshots, trees, elements, results and grants. Verify a private-to-public handoff pauses before capture; do not transfer real private observations into the test report or a public model. - 6. On Windows, verify a packaged Copilot fixture call such as list_apps or get_app_state + 6. On Windows, verify a packaged Biorouter Copilot fixture call such as list_apps or get_app_state does not show a console window for the Go helper's powershell.exe child. Pair the measurement with a visible-console control and preserve the child-to-helper PID relationship. A Node or Electron spawn probe does not exercise this path. If the diff --git a/crates/biorouter-mcp/src/computer_use/contract.rs b/crates/biorouter-mcp/src/computer_use/contract.rs index 1a640b11d..d8d10fd4f 100644 --- a/crates/biorouter-mcp/src/computer_use/contract.rs +++ b/crates/biorouter-mcp/src/computer_use/contract.rs @@ -30,7 +30,7 @@ pub fn tools() -> Vec { definitions.into_iter().map(|(name, description, properties, required)| { let mut schema = json!({"type":"object","properties":properties,"additionalProperties":false}); if !required.is_empty() { schema["required"] = json!(required); } - serde_json::from_value(json!({"name":name,"description":description,"inputSchema":schema,"annotations":{"readOnlyHint":matches!(name,"list_apps"|"get_app_state"|"screen_capture"),"openWorldHint":true}})).expect("static computer-use tool contract") + serde_json::from_value(json!({"name":name,"description":description,"inputSchema":schema,"annotations":{"readOnlyHint":matches!(name,"list_apps"|"get_app_state"|"screen_capture"),"openWorldHint":true}})).expect("static Biorouter Copilot tool contract") }).collect() } diff --git a/crates/biorouter-sandbox/src/console.rs b/crates/biorouter-sandbox/src/console.rs index 23d70245c..e9c6ec80f 100644 --- a/crates/biorouter-sandbox/src/console.rs +++ b/crates/biorouter-sandbox/src/console.rs @@ -21,7 +21,7 @@ //! //! The creation flag applies only to the process being started. A helper that //! launches another console program must set the flag on that child too. The -//! Windows Copilot helper does this for its per-action PowerShell process. +//! Windows Biorouter Copilot helper does this for its per-action PowerShell process. //! //! # Why this lives in the leaf crate //! diff --git a/crates/biorouter-sandbox/src/lib.rs b/crates/biorouter-sandbox/src/lib.rs index 3a5de8ae7..9bdd82e37 100644 --- a/crates/biorouter-sandbox/src/lib.rs +++ b/crates/biorouter-sandbox/src/lib.rs @@ -17,7 +17,7 @@ //! bind-mounted workspace. //! //! The trait is intentionally small and `async` so callers (the Developer and -//! Computer-Controller MCP servers) can route their shell/script execution +//! Compute MCP servers) can route their shell/script execution //! through whichever backend the app's manifest grants. use std::path::{Component, Path, PathBuf}; diff --git a/crates/biorouter/src/agents/builtin_skills/develop-biorouter/SKILL.md b/crates/biorouter/src/agents/builtin_skills/develop-biorouter/SKILL.md index cf018c90d..be4cec51e 100644 --- a/crates/biorouter/src/agents/builtin_skills/develop-biorouter/SKILL.md +++ b/crates/biorouter/src/agents/builtin_skills/develop-biorouter/SKILL.md @@ -43,7 +43,7 @@ just install-deps # npm ci in ui/desktop (landing/video is a second, | `crates/biorouter` | Core agent library: agent loop, LLM providers, extension manager, session state, workflows, scheduler, privacy, context management | | `crates/biorouter-server` | Axum REST + WebSocket server, binary `biorouterd`; routes in `src/routes/` | | `crates/biorouter-cli` | Interactive CLI, binary `biorouter`; subcommands in `src/commands/` | -| `crates/biorouter-mcp` | Built-in MCP servers (developer, Biorouter Copilot, memory, auto visualiser, knowledge, agent drafter, datasql, files, compute) | +| `crates/biorouter-mcp` | Built-in MCP servers (developer, Biorouter Copilot, web & documents, memory, auto visualiser, knowledge, agent drafter, datasql, files, compute) | | `crates/biorouter-sandbox` | Capability-scoped sandboxed execution (docker, seatbelt, local) | | `crates/biorouter-acp` | Agent Communication Protocol for multi-agent orchestration | | `crates/biorouter-authprompt` | macOS auth prompt helper the background service cannot raise itself | diff --git a/crates/biorouter/src/providers/base.rs b/crates/biorouter/src/providers/base.rs index b91122625..659417adc 100644 --- a/crates/biorouter/src/providers/base.rs +++ b/crates/biorouter/src/providers/base.rs @@ -807,7 +807,7 @@ pub trait Provider: Send + Sync { /// Get the name of this provider instance fn get_name(&self) -> &str; - /// HTTP(S) origin(s) that can receive this chat's computer-use results. + /// HTTP(S) origin(s) that can receive this chat's Biorouter Copilot results. /// Never include credentials, paths, query strings, or fragments. fn computer_use_destination(&self) -> Option { None diff --git a/crates/biorouter/src/providers/formats/openai_responses.rs b/crates/biorouter/src/providers/formats/openai_responses.rs index 489883c63..44929b496 100644 --- a/crates/biorouter/src/providers/formats/openai_responses.rs +++ b/crates/biorouter/src/providers/formats/openai_responses.rs @@ -1623,7 +1623,7 @@ mod tests { Ok(()) } - /// An image a tool returns to the model (a Copilot screen capture, the + /// An image a tool returns to the model (a Biorouter Copilot screen capture, the /// developer image processor) reaches it. `flattened_text` has no text for /// an image, so it used to vanish into an empty output; now the output /// says an image follows, and the image comes as a user item after it — diff --git a/crates/biorouter/src/security/computer_use.rs b/crates/biorouter/src/security/computer_use.rs index 0e31ac8c7..3a588bdc8 100644 --- a/crates/biorouter/src/security/computer_use.rs +++ b/crates/biorouter/src/security/computer_use.rs @@ -64,7 +64,7 @@ pub struct ComputerUseStatus { pub public_model: bool, pub handoff_required: bool, pub requested: bool, - /// The most recent actual Copilot request, independent of routine task cleanup. + /// The most recent actual Biorouter Copilot request, independent of routine task cleanup. #[serde(default)] pub activity_id: Option, } diff --git a/crates/biorouter/src/security/global_memory.rs b/crates/biorouter/src/security/global_memory.rs index 5545d6d5e..c1125dfa4 100644 --- a/crates/biorouter/src/security/global_memory.rs +++ b/crates/biorouter/src/security/global_memory.rs @@ -533,7 +533,7 @@ pub fn global_memory_gate(tool_name: &str, args: &Map) -> Option< // same disclosure the card exists for, and `rm -rf ` the same // destruction, with a tool this gate does not recognise. // - // The developer and computer-controller servers now refuse the store at the + // The developer and webdocuments servers now refuse the store at the // filesystem boundary, which is the unforgeable half. The shell resolves no // path, so its *literal* references are caught here — refused rather than // asked, because approving "run this shell command" is not consent to @@ -1235,7 +1235,7 @@ record_result(all);"#; /// disclosure the consent card exists for, and `rm -rf ` is the same /// destruction, taken with a tool the gate does not recognise. /// - /// The developer and computer-controller servers refuse the store at the + /// The developer and webdocuments servers refuse the store at the /// filesystem boundary, which is unforgeable — but the shell resolves no /// path, so its literal references have to be caught here. Denied, not /// asked: an approval card for "run this shell command" is not consent to diff --git a/crates/biorouter/src/security/sensitive_ops.rs b/crates/biorouter/src/security/sensitive_ops.rs index a7fd6ec3a..430720626 100644 --- a/crates/biorouter/src/security/sensitive_ops.rs +++ b/crates/biorouter/src/security/sensitive_ops.rs @@ -1916,7 +1916,8 @@ mod tests { /// ⚠ The coverage this replaced was an ACCIDENT, which is the whole reason /// moving the tool removed it silently. /// - /// `cache` was `computercontroller__cache` until the Computer Use change, + /// `cache` was `computercontroller__cache` until the Computer Use (now + /// Biorouter Copilot) change, /// and that name matches [`MUTATING_NAME_HINTS`] — not because anything in /// it is a verb, but because `"put"` is a substring of `"com·put·er"`. So /// EVERY `computercontroller__*` tool graded as mutating, `cache delete` diff --git a/crates/biorouter/src/security/session_store.rs b/crates/biorouter/src/security/session_store.rs index c5b705ec3..931797bac 100644 --- a/crates/biorouter/src/security/session_store.rs +++ b/crates/biorouter/src/security/session_store.rs @@ -97,7 +97,7 @@ //! //! ⚠ **The fourth seam is still open, and it is the unforgeable one.** A refusal //! inside the filesystem tools themselves — `biorouter-mcp`'s developer and -//! computer-controller servers, which is where `global_memory_file_barrier.rs` +//! webdocuments servers, which is where `global_memory_file_barrier.rs` //! put the equivalent for the memory root — would refuse the store whatever tool, //! whatever mode, and whatever route reached them, including an MCP client //! talking to `biorouter mcp developer` over stdio with no agent anywhere. That diff --git a/docs/agent-loop/designs/linux-and-windows-sandboxing.md b/docs/agent-loop/designs/linux-and-windows-sandboxing.md index f3abd06cf..a9e46c4f7 100644 --- a/docs/agent-loop/designs/linux-and-windows-sandboxing.md +++ b/docs/agent-loop/designs/linux-and-windows-sandboxing.md @@ -790,12 +790,13 @@ Slices 0 and 1 are independent and can run in parallel. 2 and 3 both depend on 1 confinement). If read confinement is wanted, Landlock supports it natively and Seatbelt does too — it is a policy change, not an architecture change — but it breaks vastly more tools than write confinement does. -5. **Who else spawns processes?** The Computer-Controller server - (`computercontroller/platform/{macos,windows,linux}.rs`) and third-party MCP +5. **Who else spawns processes?** The legacy Computer Controller server + (`computercontroller/platform/{macos,windows,linux}.rs`, since removed when + Biorouter Copilot replaced the legacy computer tools) and third-party MCP extension spawns are **not** covered by this design, exactly as they were not covered by BR-64. Once the trait exists (Slice 1), routing them through it is - mechanical, and the Computer-Controller script-exec path is the obvious next - consumer. Worth a follow-up ticket rather than expanding this one. + mechanical, and the legacy Computer Controller script-exec path was the + obvious next consumer. Worth a follow-up ticket rather than expanding this one. 6. **Does the helper re-exec interact with `process_group(0)` / `kill_on_drop`?** Believed no — the helper `execve`s in place, so the pid the parent holds *is* the shell's pid and it is already in the new process group set by diff --git a/docs/cli/command-reference.md b/docs/cli/command-reference.md index 02a35009b..b8121e4cd 100644 --- a/docs/cli/command-reference.md +++ b/docs/cli/command-reference.md @@ -994,7 +994,7 @@ Run Biorouter and reach it from a browser. `serve` starts the `biorouterd` daemo - **`--token `**: Use this access token instead of generating a fresh one. The flag stays on the command line while `serve` runs, where other accounts on the machine can read it, so `serve` prints a note saying so. To keep a token private, set `BIOROUTER_BROWSER_TOKEN` in the environment instead - **`--no-token`**: Serve without an access token. Refused for a non-loopback bind, and cannot be combined with `--token` - **`--web-dir `**: Directory holding the built interface. Takes precedence over `BIOROUTER_SERVE_UI`; whichever of the two is used must contain an `index.html`, or `serve` refuses to start. Located automatically when neither is set -- **`--computer-use-approval`**: Interactively set a computer-use approval key for the browser session. Requires a terminal +- **`--computer-use-approval`**: Interactively set a Biorouter Copilot approval key for the browser session. Requires a terminal - **`--open`**: Open a browser once the server is ready. The browser is handed a page only your account can read, which carries the address, and never the address itself: the address holds the access token, and a browser's command line can be read by other accounts on the machine. The page is removed two minutes later, or when `serve` stops **Usage:** @@ -1135,10 +1135,11 @@ agent's next response. They are not navigation commands and do not grant permiss The desktop picker inserts references as chips, keeping their exact identifiers and current display names. If a custom extension uses a bundled capability name, rename it in Settings → Extensions before referring to it explicitly; those ambiguous custom -entries are omitted from the picker. Biorouter Copilot replaces the old computer-controller display -name; the `computercontroller` identifier remains compatible. `/extend` is not an -extension command: it gives guidance to use `/ext:` instead. Copilot still requires its -normal runtime, OS permissions, and per-task approval. +entries are omitted from the picker. Biorouter Copilot replaces the former Computer Use +and legacy Computer Controller display names; the `computercontroller` identifier remains +compatible. `/extend` is not an extension command: it gives guidance to use `/ext:` +instead. Biorouter Copilot still requires its normal runtime, OS permissions, and per-task +approval. The desktop also offers `/knowledge` as a Knowledge reference shortcut and `/diverge` to continue an existing conversation in a new chat. The message action is also labelled diff --git a/docs/deployment/serve-architecture.md b/docs/deployment/serve-architecture.md index 7cf62970a..29f706ac0 100644 --- a/docs/deployment/serve-architecture.md +++ b/docs/deployment/serve-architecture.md @@ -341,7 +341,7 @@ requires approval; internal tool calls continue under that request's grant. Stop The launcher reads the passphrase without echoing it, sends only its SHA-256 digest on stdin with a `computer-use:` scope, and clears the raw passphrase from its own buffer. The browser sends `X-Computer-Use-Key` only for Biorouter Copilot consent; it does not save the -key. This proof is accepted only by the computer-use consent route. Browser cookies and +key. This proof is accepted only by the Biorouter Copilot consent route. Browser cookies and the ordinary API secret do not establish human consent, and the scoped key cannot change providers, privacy tiers, or extension permissions. Ten unsuccessful approval attempts in one minute temporarily block further key checks; wait a minute before trying again. diff --git a/docs/design/codex-simplicity-redesign/implementation-spec.md b/docs/design/codex-simplicity-redesign/implementation-spec.md index b4f11eab5..5d78935b3 100644 --- a/docs/design/codex-simplicity-redesign/implementation-spec.md +++ b/docs/design/codex-simplicity-redesign/implementation-spec.md @@ -2537,9 +2537,9 @@ SDK): `CapabilitiesSection.test.tsx:34-54`, the only queries of that name (no e2e or crate reads it). The same goes for `ContextsSection.tsx:57` and `BrsdkSection.tsx:80`. Add `aria-describedby`. - Optional: two caps subgroups, "Tools" and "Agent". - - **Copilot:** "Check setup" becomes a row-trailing `secondary sm` button, and the result panel - becomes a sibling `Note` after the row. Split `copilot/CopilotSetup.tsx` into a trigger and a - panel. + - **Biorouter Copilot:** "Check setup" becomes a row-trailing `secondary sm` button, and the + result panel becomes a sibling `Note` after the row. Split `copilot/CopilotSetup.tsx` into a + trigger and a panel. - **Contexts:** 9 `SettingRow`s with help. Optionally say "Loaded only for … tasks" once in the header InfoTip. - **App SDK:** 4 `SettingRow`s. Keep `px-3 py-2.5` on the row, because `BrsdkSection.test.tsx:37` @@ -2578,7 +2578,7 @@ SDK): **Acceptance:** - The Chat tab is no longer 3,087px tall. It is about 40% shorter, with one line per row. -- Copilot's check panel no longer swells the row. +- Biorouter Copilot's check panel no longer swells the row. - Memory has no red icon column and no repeated paragraph. --- diff --git a/docs/design/codex-simplicity-redesign/progress.md b/docs/design/codex-simplicity-redesign/progress.md index 84e495913..b9515e52b 100644 --- a/docs/design/codex-simplicity-redesign/progress.md +++ b/docs/design/codex-simplicity-redesign/progress.md @@ -48,7 +48,7 @@ spec's tables are authoritative where this summary is shorter. | WS-KNOWLEDGE | `knowledge/**` (tier confirmation logic frozen) | none | Implemented and reviewed; no open high or medium after vision round 4; R-33 awaits a vision check | | WS-SETTINGS-A | `SettingsView.tsx`, `settings/{app,chat,mode,permission,response_styles}/**`, theme selectors | section ids for deep links | Implemented and reviewed; no open high or medium after vision round 4 | | WS-SETTINGS-M | `settings/{models,providers,reset_provider}/**`, `onboarding/**`, `ProviderGuard.tsx` | none | Implemented and reviewed; a round 4 medium fix awaits vision round 5 | -| WS-SETTINGS-B | `settings/{capabilities,config,contexts,brsdk,memory}/**`, Copilot setup | none | Implemented and reviewed; no open high or medium after vision round 4 | +| WS-SETTINGS-B | `settings/{capabilities,config,contexts,brsdk,memory}/**`, Biorouter Copilot setup | none | Implemented and reviewed; no open high or medium after vision round 4 | | WS-MOTION | `chatGroups/**`, find in chat, `App.tsx`, `toasts.tsx`, `alerts/**`, `main.ts` window regions, terminal dock | none | Implemented and reviewed; no open high or medium after vision round 4 | | WS-LANDING | `landing/**`, `docs/website/**` | none | Implemented and reviewed; no open high or medium after vision round 3 (round 4 did not review the site); the R-32 mockup cards are not reviewed yet | | WS-PERF | the sidebar's listing path: `BioRouterSidebar/{useSidebarSessions.ts,sidebarChatView.ts}` helpers, the session listing route in `crates/biorouter-server/src/routes/session.rs` and its queries in `crates/biorouter/src/session/session_manager.rs` | none | Implemented and reviewed; a round 4 medium fix awaits vision round 5 | diff --git a/docs/design/computer-use-integration-plan.md b/docs/design/computer-use-integration-plan.md index 86e3029e9..aff45d0b5 100644 --- a/docs/design/computer-use-integration-plan.md +++ b/docs/design/computer-use-integration-plan.md @@ -40,7 +40,7 @@ Two existing weaknesses influence the design: `computer_control_impl` bounds a ` ```mermaid flowchart TD - A[Model or coding-agent bridge] --> B[Computer-use grant: approve once, then continue] + A[Model or coding-agent bridge] --> B[Biorouter Copilot grant: approve once, then continue] B --> C[Unified Biorouter Copilot Rust facade] C --> D[One active controller and current app state] D --> E[Per-chat managed connection over stdio MCP] diff --git a/docs/desktop-ui/shared-controls.md b/docs/desktop-ui/shared-controls.md index 3ad713cfd..3fae471f2 100644 --- a/docs/desktop-ui/shared-controls.md +++ b/docs/desktop-ui/shared-controls.md @@ -105,7 +105,7 @@ A button that is WORKING and says so with `aria-busy="true"` keeps its colour: t ## Emphasis names its weight -A bare `` or `` is 700: Tailwind's preflight gives both `font-weight: bolder`, and the type system draws 400 and 600 only (vision V4-R7-6). Arial draws 600 and 700 alike, so no screenshot shows it; only the computed weight does. Every emphasis in a shared control or dialog carries `font-semibold` (or `font-normal`, for a strong that must not stand out): the workflow warning's "Title" and "Description", the update dialog's "Restart & update", and Report a problem's two warning leads. Each other owner did the same for theirs (privacy, Settings, Copilot). `ui/emphasisWeight.sourceGuard.test.ts` fails on a bare one in any component under `components/` (coordinator ruling 24, chosen over a `b, strong` base rule in `main.css`). It reads the syntax tree, so a tag in a comment or a string is not counted, and `font-medium` passes too (Arial draws 500 as 400). The only exclusions are `settings/dictation/` and `settings/tunnel/`, frozen and imported by nothing, which the guard also checks. +A bare `` or `` is 700: Tailwind's preflight gives both `font-weight: bolder`, and the type system draws 400 and 600 only (vision V4-R7-6). Arial draws 600 and 700 alike, so no screenshot shows it; only the computed weight does. Every emphasis in a shared control or dialog carries `font-semibold` (or `font-normal`, for a strong that must not stand out): the workflow warning's "Title" and "Description", the update dialog's "Restart & update", and Report a problem's two warning leads. Each other owner did the same for theirs (privacy, Settings, Biorouter Copilot). `ui/emphasisWeight.sourceGuard.test.ts` fails on a bare one in any component under `components/` (coordinator ruling 24, chosen over a `b, strong` base rule in `main.css`). It reads the syntax tree, so a tag in a comment or a string is not counted, and `font-medium` passes too (Arial draws 500 as 400). The only exclusions are `settings/dictation/` and `settings/tunnel/`, frozen and imported by nothing, which the guard also checks. ## Fills before lines diff --git a/docs/extensions/built-in/computer-controller.md b/docs/extensions/built-in/computer-controller.md index 2ff55bbf2..122ba9f46 100644 --- a/docs/extensions/built-in/computer-controller.md +++ b/docs/extensions/built-in/computer-controller.md @@ -43,7 +43,7 @@ not guarantee that every application, display server, or packaged environment su | Windows | An interactive signed-in desktop; Windows PowerShell and .NET UI Automation available under local policy. | No UAC/secure-desktop control or automatic elevation. Window capture uses visible screen pixels, so overlapping windows can appear in the result; minimized windows may be unavailable. | | Linux X11 | An active X11 desktop and user D-Bus session; Python 3, GI bindings, AT-SPI, and GDK 3/GTK 3 dependencies. | Application accessibility support varies. Window capture uses visible screen pixels and may include overlapping windows; minimized windows may be unavailable. Xvfb alone does not establish working accessibility or input. | | Linux Wayland | Accessibility discovery depends on the compositor, user session, and AT-SPI support. | **Pixel capture is currently unsupported.** The helper reports that a consented desktop portal is required; list-only discovery is not proof that capture or input works. | -| Headless service/container | A desktop session and its dependencies would need to be explicitly available to the backend. | No desktop means no computer use. Ordinary chat and Web & Documents remain independent. | +| Headless service/container | A desktop session and its dependencies would need to be explicitly available to the backend. | No desktop means Biorouter Copilot is unavailable. Ordinary chat and Web & Documents remain independent. | Use the runtime's diagnostics and returned errors to determine what is available on the actual host. Native unit tests and a successful protocol handshake do not establish cross-platform GUI diff --git a/docs/extensions/built-in/memory.md b/docs/extensions/built-in/memory.md index 5868e5ed6..05df24cb6 100644 --- a/docs/extensions/built-in/memory.md +++ b/docs/extensions/built-in/memory.md @@ -56,7 +56,7 @@ Because they are ordinary files, **you** can inspect, edit or delete them direct BioRouter itself cannot take that shortcut on the global store. Reading, changing or deleting a machine-wide memory is put to you for approval by category, and that approval would be worth little if the same files could just be opened by other means — so the global store is closed to everything but the memory tools: -- The file tools (`text_editor`, the computer-controller cache) refuse any path inside it and point at the memory tool to use instead. +- The file tools (`text_editor`, the Web & Documents cache) refuse any path inside it and point at the memory tool to use instead. - Tool calls made from inside an `execute_code` script are refused: a script's calls are not shown to you one at a time, so there is nothing for you to approve. The model is told to make the memory call directly. - The `/agent/call_tool` API is refused for the same reason. - BioRouter's memory server run on its own — `biorouter mcp memory`, for another MCP client outside the app — serves the project-local store only. Nothing there can ask you, so nothing there reaches the machine-wide store. diff --git a/docs/extensions/slack-posting-investigation.md b/docs/extensions/slack-posting-investigation.md index 5c4a01cce..881969e86 100644 --- a/docs/extensions/slack-posting-investigation.md +++ b/docs/extensions/slack-posting-investigation.md @@ -87,4 +87,4 @@ To make Option A first-class instead of the agent shelling out `curl`, Biorouter - [Extensions, skills, and MCP agents](extensions-and-skills-guide.md) — how to actually add the custom stdio extension Option B depends on - [Web & Documents](built-in/web-documents.md) — its GET-only URL tool cannot post messages - [Secret storage](../security/secret-storage.md) — how `env_keys` secrets such as `SLACK_TOKEN` reach the OS Keychain -- [Computer Controller multi-app orchestration run](../history/computer-controller-hardening/multi-app-orchestration-run.md) — the hardening run that exercised Slack via UI automation, showing the brittleness this memo proposes routing around +- [Legacy Computer Controller multi-app orchestration run](../history/computer-controller-hardening/multi-app-orchestration-run.md) — the hardening run that exercised Slack via UI automation, showing the brittleness this memo proposes routing around diff --git a/packaging/biorouter-cli.yaml b/packaging/biorouter-cli.yaml index 59a254f00..1ee3d00b8 100644 --- a/packaging/biorouter-cli.yaml +++ b/packaging/biorouter-cli.yaml @@ -62,7 +62,7 @@ contents: # copies it into a server account over SSH, and checks the bytes it sends against this # manifest. scripts/build-cli-linux-packages.sh stages both from the binary above with # scripts/stage-crew-broker.sh, so the two copies are one build. /usr/libexec rather than - # beside biorouterd for the reason the Copilot helper's entry below gives. + # beside biorouterd for the reason the Biorouter Copilot helper's entry below gives. - src: ./target/crew-broker/linux-x86_64/biorouter-crew dst: /usr/libexec/biorouter/crew-broker/linux-x86_64/biorouter-crew file_info: diff --git a/scripts/check-computer-use-naming.sh b/scripts/check-computer-use-naming.sh index 81811b45f..605a7279c 100755 --- a/scripts/check-computer-use-naming.sh +++ b/scripts/check-computer-use-naming.sh @@ -6,7 +6,7 @@ # "Codex Computer Use" or "Open Computer Use", which are upstream's. # # The file is still named check-computer-use-naming.sh, and the workflow step -# that runs it is still matched by that path in AGENTS.md, BUILDING*.md, the +# that runs it is still matched by that path in AGENTS.md, the # Justfile and .github/workflows/rust.yml. Renaming the file is a separate, # coordinated change; renaming the capability is this one. # diff --git a/scripts/release.sh b/scripts/release.sh index 1c5887955..b05ad05fd 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -582,7 +582,7 @@ cmd_windows() { } # ── linux packaging (fully dockerized; run LAST — corrupts node_modules) ─────── -# Not on the release path: adopt-ci takes the GUI deb/rpm from linux-gui-packages.yml, because Docker Desktop on this host left the container's computer-use files unreadable (see the adopt-ci block). +# Not on the release path: adopt-ci takes the GUI deb/rpm from linux-gui-packages.yml, because Docker Desktop on this host left the container's Biorouter Copilot helper files in out/resources/computer-use/ unreadable (see the adopt-ci block). cmd_linux() { local v="$1"; assert_release_source "$v"; ensure_docker [ -f "$ROOT/target/x86_64-unknown-linux-gnu/release/biorouterd" ] || die "linux backend missing — run: scripts/release.sh backends $v" diff --git a/scripts/test-computer-use-packaged-windows-console.py b/scripts/test-computer-use-packaged-windows-console.py index fab4227c8..9e7932be8 100644 --- a/scripts/test-computer-use-packaged-windows-console.py +++ b/scripts/test-computer-use-packaged-windows-console.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Measure a packaged CLI's Rust-to-Go Copilot PowerShell launch on Windows.""" +"""Measure a packaged CLI's Rust-to-Go Biorouter Copilot PowerShell launch on Windows.""" import argparse import json @@ -210,7 +210,7 @@ def read_lines(): or child.get("grandparent_pid") != process.pid): raise AssertionError(f"PowerShell child did not descend from the packaged CLI and helper: {child}") if child.get("verdict") == "visible": - raise AssertionError(f"packaged Copilot PowerShell child showed a console: {child}") + raise AssertionError(f"packaged Biorouter Copilot PowerShell child showed a console: {child}") if child.get("verdict") not in {"none", "hidden"}: raise AssertionError(f"PowerShell child did not report a console state: {child}") if child.get("startup_hidden") is not True: diff --git a/scripts/test-computer-use-protocol.py b/scripts/test-computer-use-protocol.py index f38f3c1f1..29a5f0846 100644 --- a/scripts/test-computer-use-protocol.py +++ b/scripts/test-computer-use-protocol.py @@ -43,7 +43,7 @@ def validate_tools(tools): actual = next(item for item in tools if item["name"] == tool["name"]) prompt_text = [actual.get("description", ""), *schema_descriptions(actual.get("inputSchema"))] if any(RETIRED_PROMPT_NAME.search(text) for text in prompt_text): - raise ValueError(f"Retired Copilot name in native tool description: {tool['name']}") + raise ValueError(f"Retired Biorouter Copilot name in native tool description: {tool['name']}") actual_schema = json.dumps(semantic_schema(actual.get("inputSchema")), sort_keys=True) expected_schema = json.dumps(tool["inputSchema"], sort_keys=True) if actual_schema != expected_schema: diff --git a/scripts/test-computer-use-windows-console.py b/scripts/test-computer-use-windows-console.py index 45aa353f5..bd9cd741e 100644 --- a/scripts/test-computer-use-windows-console.py +++ b/scripts/test-computer-use-windows-console.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Compare Windows Copilot helper child-console behavior with its pre-fix build.""" +"""Compare Windows Biorouter Copilot helper child-console behavior with its pre-fix build.""" import argparse import json diff --git a/ui/desktop/forge.config.ts b/ui/desktop/forge.config.ts index 6370ad57c..4bd5d79c6 100644 --- a/ui/desktop/forge.config.ts +++ b/ui/desktop/forge.config.ts @@ -196,7 +196,7 @@ let cfg = { }; /** - * Stop rpmbuild rewriting the Computer Use helper behind our back. + * Stop rpmbuild rewriting the Biorouter Copilot helper behind our back. * * `%__os_install_post` runs over the buildroot. On Debian/Ubuntu rpm 4.18 that * includes `brp-strip-comment-note`, whose selector is the COMPLEMENT of diff --git a/ui/desktop/openapi.json b/ui/desktop/openapi.json index 06e8fb5a8..14b8c2695 100644 --- a/ui/desktop/openapi.json +++ b/ui/desktop/openapi.json @@ -11142,7 +11142,7 @@ "properties": { "activity_id": { "type": "string", - "description": "The most recent actual Copilot request, independent of routine task cleanup.", + "description": "The most recent actual Biorouter Copilot request, independent of routine task cleanup.", "nullable": true }, "challenge_id": { diff --git a/ui/desktop/src/api/types.gen.ts b/ui/desktop/src/api/types.gen.ts index 23f9a20c0..270cc021b 100644 --- a/ui/desktop/src/api/types.gen.ts +++ b/ui/desktop/src/api/types.gen.ts @@ -702,7 +702,7 @@ export type ComputerUseSessionRequest = { export type ComputerUseStatus = { /** - * The most recent actual Copilot request, independent of routine task cleanup. + * The most recent actual Biorouter Copilot request, independent of routine task cleanup. */ activity_id?: string | null; challenge_id: string; diff --git a/ui/desktop/src/components/artifacts/artifactUtils.ts b/ui/desktop/src/components/artifacts/artifactUtils.ts index b60e56a1e..448308e92 100644 --- a/ui/desktop/src/components/artifacts/artifactUtils.ts +++ b/ui/desktop/src/components/artifacts/artifactUtils.ts @@ -650,7 +650,7 @@ const FILE_WRITING_TOOLS = new Set([ 'write_file', ]); -// Computer-controller office tools name the workbook/document in `path`, but +// Web & Documents office tools name the workbook/document in `path`, but // multiplex reads and writes behind an operation. Only completed operations // that can change bytes should invalidate an already-open preview. const OFFICE_WRITING_OPERATIONS: Record> = { diff --git a/ui/desktop/src/components/copilot/CopilotControl.tsx b/ui/desktop/src/components/copilot/CopilotControl.tsx index dfa699e6c..8c508f271 100644 --- a/ui/desktop/src/components/copilot/CopilotControl.tsx +++ b/ui/desktop/src/components/copilot/CopilotControl.tsx @@ -187,7 +187,7 @@ function SessionCopilotControl({ sessionId }: { sessionId: string }) { // ⚠ Silent ON PURPOSE, and it reads like a dropped error until you follow the // states. `refresh` never clears `status` on failure, so `!status` means only // one thing: no read has EVER succeeded. In that state nothing is known about - // whether this chat uses Copilot at all, and the previous code put an error + // whether this chat uses Biorouter Copilot at all, and the previous code put an error // alert above the composer of every chat on the machine — which is the noise // #359 removed. The case that matters is still covered: once a read has // succeeded, `status` is retained, so a LATER failure keeps this panel @@ -198,7 +198,7 @@ function SessionCopilotControl({ sessionId }: { sessionId: string }) { // unreachable and the restoration would be dead code that looks like a fix. if (!status) return null; // Older backends mark every completed reply stopped. Only an observed request - // or the new session-owned activity identifier proves this chat used Copilot. + // or the new session-owned activity identifier proves this chat used Biorouter Copilot. if ( !status.activity_id && !status.requested && diff --git a/ui/desktop/src/components/settings/capabilities/CapabilitiesSection.tsx b/ui/desktop/src/components/settings/capabilities/CapabilitiesSection.tsx index f3668e4e0..5426009ca 100644 --- a/ui/desktop/src/components/settings/capabilities/CapabilitiesSection.tsx +++ b/ui/desktop/src/components/settings/capabilities/CapabilitiesSection.tsx @@ -23,7 +23,7 @@ interface CapabilityItemProps { /** * A switch with something before it. `SettingRow` hands its one child the id, the label's * `aria-labelledby` and the help's `aria-describedby`; this passes all three to the switch and - * leaves the extra control (Copilot's "Check setup") outside that naming. + * leaves the extra control (Biorouter Copilot's "Check setup") outside that naming. */ function SwitchWithLead({ lead, ...switchProps }: SwitchProps & { lead: React.ReactNode }) { return ( diff --git a/ui/desktop/src/styles/main.css b/ui/desktop/src/styles/main.css index b896c2179..4efbba062 100644 --- a/ui/desktop/src/styles/main.css +++ b/ui/desktop/src/styles/main.css @@ -6168,7 +6168,7 @@ body:has(.biorouter-modal-surface [data-slot='select-content'][data-state='open' `bg-*` and `text-*` utilities live in the `utilities` layer and would win a layered rule. A button that is WORKING (`aria-busy`) keeps its colour: the composer's Send is disabled while a chat starts and must stay the accent with its spinner. `aria-disabled` is named too, for the - buttons that fade without the attribute (the Copilot permission check). Forced colours repaint + buttons that fade without the attribute (the Biorouter Copilot permission check). Forced colours repaint the fill and the ink, so the system button edge is all this leaves to them. */ .br-button-inert:is(:disabled, [aria-disabled='true']):not([aria-busy='true']) { background-color: var(--br-control-ground, var(--background-fill)); diff --git a/ui/desktop/src/utils/toolGlyph.ts b/ui/desktop/src/utils/toolGlyph.ts index 195f4ed25..e3f41aa34 100644 --- a/ui/desktop/src/utils/toolGlyph.ts +++ b/ui/desktop/src/utils/toolGlyph.ts @@ -12,7 +12,7 @@ * workflows, schedules, code execution. In a normal transcript that is * most rows; * - two extensions' same-named tools collided: `agent_drafter__list_apps` - * drew Copilot's Monitor, because `computercontroller__list_apps` exists; + * drew Biorouter Copilot's Monitor, because `computercontroller__list_apps` exists; * - `text_editor` drew the edit mark for a `view`. * * THE LADDER, first match wins: @@ -242,12 +242,12 @@ const EXACT: Record = { code_execution__read_module: 'read', code_execution__search_modules: 'search', agent_drafter__consult: 'agent', - // History. Biorouter Copilot used to be the legacy `computercontroller` - // server, and its web, document and cache tools moved to `webdocuments` + // History. The `computercontroller` key used to serve the legacy Computer + // Controller, and its web, document and cache tools moved to `webdocuments` // while its scripting tool was removed. A chat saved before that still names // them under the old key, and the family row below would draw all of them as // desktop control (V2-18). `computer_control` is not listed: it WAS desktop - // control, and the Copilot family already draws it. + // control, and the Biorouter Copilot family already draws it. computercontroller__web_scrape: 'web', computercontroller__cache: 'archive', computercontroller__pdf_tool: 'document',