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 .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/computer-use-native.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Computer Use native payloads
name: Biorouter Copilot native payloads

on:
pull_request:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/computer-use-package-acceptance.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Computer Use installed packages
name: Biorouter Copilot installed packages
'on':
workflow_dispatch: null
push:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/linux-gui-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,15 @@ 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
# into <cwd>/public/pdfjs. ui/desktop/.gitignore covers the normal run from ui/desktop;
# 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
Expand Down
5 changes: 3 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).

Expand Down
8 changes: 4 additions & 4 deletions biorouter-self-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter-mcp/src/computer_use/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ pub fn tools() -> Vec<Tool> {
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()
}

Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter-sandbox/src/console.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
//!
Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter-sandbox/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter/src/providers/base.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> {
None
Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter/src/providers/formats/openai_responses.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 —
Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter/src/security/computer_use.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>,
}
Expand Down
4 changes: 2 additions & 2 deletions crates/biorouter/src/security/global_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ pub fn global_memory_gate(tool_name: &str, args: &Map<String, Value>) -> Option<
// same disclosure the card exists for, and `rm -rf <store>` 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
Expand Down Expand Up @@ -1235,7 +1235,7 @@ record_result(all);"#;
/// disclosure the consent card exists for, and `rm -rf <store>` 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
Expand Down
3 changes: 2 additions & 1 deletion crates/biorouter/src/security/sensitive_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down
2 changes: 1 addition & 1 deletion crates/biorouter/src/security/session_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions docs/agent-loop/designs/linux-and-windows-sandboxing.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 6 additions & 5 deletions docs/cli/command-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ Run Biorouter and reach it from a browser. `serve` starts the `biorouterd` daemo
- **`--token <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 <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:**
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/deployment/serve-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
8 changes: 4 additions & 4 deletions docs/design/codex-simplicity-redesign/implementation-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down Expand Up @@ -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.

---
Expand Down
Loading
Loading