diff --git a/coworker/cli.py b/coworker/cli.py index 13bd6239..ce6dba1e 100644 --- a/coworker/cli.py +++ b/coworker/cli.py @@ -18,7 +18,7 @@ from .secrets import state_dir def main(argv: Optional[list[str]] = None) -> None: cfg = load_config() parser = argparse.ArgumentParser( - prog="coworker", description="Agent coworker (TUI)." + prog="openworker", description="Agent coworker (TUI)." ) parser.add_argument( "skill", nargs="?", default="code", help="skill to launch (default: code)" diff --git a/coworker/connectors/cli.py b/coworker/connectors/cli.py index 163014b4..9217d2ca 100644 --- a/coworker/connectors/cli.py +++ b/coworker/connectors/cli.py @@ -81,7 +81,7 @@ def _cmd_send(target: str, text: str) -> int: def main(argv: list[str] | None = None) -> int: - parser = argparse.ArgumentParser(prog="coworker-connectors") + parser = argparse.ArgumentParser(prog="openworker-connectors") sub = parser.add_subparsers(dest="cmd", required=True) sub.add_parser("status") diff --git a/coworker/connectors/descriptors.py b/coworker/connectors/descriptors.py index 9e97ee7f..296dec43 100644 --- a/coworker/connectors/descriptors.py +++ b/coworker/connectors/descriptors.py @@ -1444,7 +1444,7 @@ def register_descriptor(descriptor: ConnectorDescriptor) -> None: # Experimental connectors live in a separate package so release builds can exclude the code -# entirely (see packaging/coworker-server.spec). When the package is absent this is a no-op. +# entirely (see packaging/openworker-server.spec). When the package is absent this is a no-op. try: from .experimental import EXPERIMENTAL_DESCRIPTORS as _EXPERIMENTAL except ImportError: diff --git a/coworker/connectors/experimental/__init__.py b/coworker/connectors/experimental/__init__.py index d594e3db..048c0da3 100644 --- a/coworker/connectors/experimental/__init__.py +++ b/coworker/connectors/experimental/__init__.py @@ -2,7 +2,7 @@ Connectors in this package are hidden behind the experimental-connectors setting, require an explicit per-connector risk acknowledgment to connect, and are stripped from official desktop -builds by packaging/coworker-server.spec (set COWORKER_EXPERIMENTAL=1 at build time to include +builds by packaging/openworker-server.spec (set COWORKER_EXPERIMENTAL=1 at build time to include them in a self-built binary). To add one: define a `ConnectorDescriptor` with a `risk_notice` that states the concrete diff --git a/coworker/connectors/gateway.py b/coworker/connectors/gateway.py index 3dfd97c3..e7e8baea 100644 --- a/coworker/connectors/gateway.py +++ b/coworker/connectors/gateway.py @@ -1,6 +1,6 @@ """Gateway — owns the messaging adapters and routes inbound messages. -Lives inside the always-on `coworker-server` (started/stopped in its lifespan). On inbound: +Lives inside the always-on `openworker-server` (started/stopped in its lifespan). On inbound: enforce the per-platform allowlist, then hand the message to the registered handler (the super-agent runner, wired in the next increment). Outbound replies go through the `send_message` tool, not the gateway — so the gateway stays a thin inbound router here. diff --git a/coworker/server/run.py b/coworker/server/run.py index 810cbf72..e5d2ff7e 100644 --- a/coworker/server/run.py +++ b/coworker/server/run.py @@ -1,4 +1,4 @@ -"""Launch the server with uvicorn. Used by the desktop GUI sidecar and `coworker-server`.""" +"""Launch the server with uvicorn. Used by the desktop GUI sidecar and `openworker-server`.""" from __future__ import annotations @@ -17,7 +17,7 @@ from .manager import SessionManager def _exit_when_orphaned() -> None: """When launched as a desktop sidecar (`COWORKER_EXIT_WITH_PARENT=1`), exit if the parent process dies — even on an abrupt kill (e.g. the Tauri dev watcher restarting the app, or a - crash) that skips the shell's graceful child-kill. Standalone `coworker-server` runs are + crash) that skips the shell's graceful child-kill. Standalone `openworker-server` runs are unaffected. The GUI passes its own PID in `COWORKER_PARENT_PID`. Watching that explicit PID (not @@ -127,7 +127,7 @@ def _ensure_ca_bundle() -> None: def main(argv=None) -> None: _ensure_ca_bundle() cfg = load_config() # global config supplies defaults - parser = argparse.ArgumentParser(prog="coworker-server") + parser = argparse.ArgumentParser(prog="openworker-server") parser.add_argument("--cwd", default=None, help="optional seed/default workspace") parser.add_argument("--model", default=cfg.model) parser.add_argument( diff --git a/coworker/testing/fake_slack/__main__.py b/coworker/testing/fake_slack/__main__.py index 2e990257..f0760e7e 100644 --- a/coworker/testing/fake_slack/__main__.py +++ b/coworker/testing/fake_slack/__main__.py @@ -4,7 +4,7 @@ Prints the ``SLACK_API_URL`` to export plus curl examples for the control API, then serves until interrupted. Point the dev server at it by exporting ``SLACK_API_URL`` before starting -``coworker-server`` and connecting Slack with any fake ``xoxb-``/``xapp-`` tokens. +``openworker-server`` and connecting Slack with any fake ``xoxb-``/``xapp-`` tokens. """ from __future__ import annotations @@ -36,7 +36,7 @@ def main() -> None: print("Point the app at it:") print(f" export SLACK_API_URL={base}/api/") print( - " # then start coworker-server and connect Slack with any xoxb-/xapp- tokens" + " # then start openworker-server and connect Slack with any xoxb-/xapp- tokens" ) print() print("Drive scenarios via the control API:") diff --git a/docs/config.example.toml b/docs/config.example.toml index 7704a706..9638ad23 100644 --- a/docs/config.example.toml +++ b/docs/config.example.toml @@ -19,6 +19,6 @@ allowed_commands = [ # asks). e.g. auto-accept file edits but keep asking before running shell commands. auto_allow = ["write_file", "replace_in_file", "apply_patch", "apply_unified_diff"] -# Server (coworker-server) bind address. +# Server (openworker-server) bind address. host = "127.0.0.1" port = 8765 diff --git a/packaging/build_dmg.sh b/packaging/build_dmg.sh index 5902b1cd..7e91496e 100755 --- a/packaging/build_dmg.sh +++ b/packaging/build_dmg.sh @@ -69,9 +69,9 @@ if [ -n "${APPLE_CERTIFICATE:-}" ] && [ -n "${APPLE_SIGNING_IDENTITY:-}" ]; then security list-keychains -d user -s "$KC" login.keychain-db fi -echo "==> [1/5] PyInstaller: bundling coworker-server ($TRIPLE)" +echo "==> [1/5] PyInstaller: bundling openworker-server ($TRIPLE)" "$PLATFORM/.venv/bin/pyinstaller" --noconfirm --clean \ - --distpath "$HERE/dist" --workpath "$HERE/build" "$HERE/coworker-server.spec" + --distpath "$HERE/dist" --workpath "$HERE/build" "$HERE/openworker-server.spec" echo "==> [2/5] staging sidecar resources" # Onedir bundle (exe + _internal/) ships via Tauri `resources` as Contents/Resources/sidecar/ @@ -80,14 +80,14 @@ echo "==> [2/5] staging sidecar resources" # once clobbered another worktree's venv console script, caught 2026-07-11); also clears any # stale onefile binary from pre-onedir builds. mkdir -p "$GUI/src-tauri/binaries" -rm -rf "$GUI/src-tauri/binaries/sidecar" "$GUI/src-tauri/binaries/coworker-server-$TRIPLE" +rm -rf "$GUI/src-tauri/binaries/sidecar" "$GUI/src-tauri/binaries/openworker-server-$TRIPLE" # -L (dereference): Tauri's resource bundler flattens symlinks into duplicate REAL files. # Python.framework's symlinks (Python -> Versions/Current/Python, …) therefore arrive in # the .app as standalone copies whose framework-context signatures don't validate outside # the bundle — notarization rejected them twice (submissions f73463f3, ca30027a, # 2026-07-16). Dereferencing at staging makes what we SIGN byte-identical to what tauri # COPIES, and every Mach-O below gets a plain file signature that stands alone. -cp -RL "$HERE/dist/coworker-server" "$GUI/src-tauri/binaries/sidecar" +cp -RL "$HERE/dist/openworker-server" "$GUI/src-tauri/binaries/sidecar" if [ -n "$(find "$GUI/src-tauri/binaries/sidecar" -type l | head -1)" ]; then echo "ERROR: symlinks survived sidecar staging — tauri would flatten them into unsigned copies" >&2 exit 1 @@ -103,7 +103,7 @@ if [ -n "$(find "$GUI/src-tauri/binaries/sidecar" -type d -name "*.framework" | echo "ERROR: a .framework appeared in the sidecar — it cannot pass notarization in this layout" >&2 exit 1 fi -chmod +x "$GUI/src-tauri/binaries/sidecar/coworker-server" +chmod +x "$GUI/src-tauri/binaries/sidecar/openworker-server" # Sign the sidecar's Mach-O files BEFORE tauri build: `tauri build` signs the .app (sealing # resources into its signature) but does NOT sign nested binaries inside resources — unsigned @@ -117,14 +117,14 @@ if [ -n "${APPLE_SIGNING_IDENTITY:-}" ]; then # tree is fully dereferenced, so each file must validate standalone — that is exactly # what the notary service checks). Entitlements only on the entrypoint # (disable-library-validation: the bundled python.org dylibs carry another Team ID). - find "$SIDECAR" -type f ! -name "coworker-server" \ + find "$SIDECAR" -type f ! -name "openworker-server" \ ! -name "*.py" ! -name "*.pyc" ! -name "*.txt" ! -name "*.pem" ! -name "*.json" \ -print0 | while IFS= read -r -d '' f; do file -b "$f" | grep -q "Mach-O" || continue codesign --force --sign "$APPLE_SIGNING_IDENTITY" --timestamp --options runtime "$f" done codesign --force --sign "$APPLE_SIGNING_IDENTITY" --timestamp --options runtime \ - --entitlements "$GUI/src-tauri/entitlements.plist" "$SIDECAR/coworker-server" + --entitlements "$GUI/src-tauri/entitlements.plist" "$SIDECAR/openworker-server" fi echo "==> [3/5] tauri build (.app)" diff --git a/packaging/build_windows.ps1 b/packaging/build_windows.ps1 index 7871f4fa..4c9bf1d9 100644 --- a/packaging/build_windows.ps1 +++ b/packaging/build_windows.ps1 @@ -53,19 +53,19 @@ if (-not (Test-Path $PyInst)) { $Triple = (& rustc -vV | Select-String '^host:').ToString().Split()[-1] $Arch = $Triple.Split('-')[0] -# A running coworker-server.exe (e.g. a prior sidecar/smoke test) locks the output exe and +# A running openworker-server.exe (e.g. a prior sidecar/smoke test) locks the output exe and # makes PyInstaller's overwrite fail with Access-is-denied. Stop any before bundling. -$running = Get-Process -Name "coworker-server" -ErrorAction SilentlyContinue +$running = Get-Process -Name "openworker-server" -ErrorAction SilentlyContinue if ($running) { - Write-Host "==> stopping $($running.Count) running coworker-server process(es) holding the output exe" + Write-Host "==> stopping $($running.Count) running openworker-server process(es) holding the output exe" $running | Stop-Process -Force Start-Sleep -Seconds 1 } -Write-Host "==> [1/3] PyInstaller: bundling coworker-server ($Triple)" -ForegroundColor Cyan +Write-Host "==> [1/3] PyInstaller: bundling openworker-server ($Triple)" -ForegroundColor Cyan & $PyInst --noconfirm --clean ` --distpath (Join-Path $Here "dist") --workpath (Join-Path $Here "build") ` - (Join-Path $Here "coworker-server.spec") + (Join-Path $Here "openworker-server.spec") if ($LASTEXITCODE -ne 0) { throw "PyInstaller failed (exit $LASTEXITCODE)" } Write-Host "==> [2/3] staging sidecar resources" -ForegroundColor Cyan @@ -73,11 +73,11 @@ Write-Host "==> [2/3] staging sidecar resources" -ForegroundColor Cyan # next to the app exe — onefile's per-launch self-extraction cost seconds of boot splash. $BinDir = Join-Path $Gui "src-tauri\binaries" New-Item -ItemType Directory -Force -Path $BinDir | Out-Null -$Src = Join-Path $Here "dist\coworker-server" +$Src = Join-Path $Here "dist\openworker-server" $Dst = Join-Path $BinDir "sidecar" if (Test-Path $Dst) { Remove-Item -Recurse -Force $Dst } # Clear any stale onefile binary from pre-onedir builds. -Remove-Item -Force (Join-Path $BinDir "coworker-server-$Triple.exe") -ErrorAction SilentlyContinue +Remove-Item -Force (Join-Path $BinDir "openworker-server-$Triple.exe") -ErrorAction SilentlyContinue Copy-Item -Recurse -Force $Src $Dst Write-Host " -> $Dst" diff --git a/packaging/coworker-server.spec b/packaging/openworker-server.spec similarity index 94% rename from packaging/coworker-server.spec rename to packaging/openworker-server.spec index be397c71..70954b5a 100644 --- a/packaging/coworker-server.spec +++ b/packaging/openworker-server.spec @@ -1,5 +1,5 @@ # -*- mode: python ; coding: utf-8 -*- -"""PyInstaller spec for the bundled `coworker-server` (desktop sidecar). +"""PyInstaller spec for the bundled `openworker-server` (desktop sidecar). One-DIR bundle (exe + `_internal/` support folder) shipped via Tauri's `resources` slot. It used to be a onefile binary in the externalBin slot, but onefile self-extracts its whole @@ -94,7 +94,7 @@ exe = EXE( a.scripts, [], exclude_binaries=True, - name="coworker-server", + name="openworker-server", debug=False, bootloader_ignore_signals=False, strip=False, @@ -104,7 +104,7 @@ exe = EXE( console=True, # target_arch left unset → PyInstaller builds for the host architecture. ) -# Onedir: dist/coworker-server/{coworker-server[.exe], _internal/}. The build scripts stage +# Onedir: dist/openworker-server/{openworker-server[.exe], _internal/}. The build scripts stage # this whole folder into src-tauri/binaries/sidecar/ for Tauri's `resources` bundling. coll = COLLECT( exe, @@ -112,5 +112,5 @@ coll = COLLECT( a.datas, strip=False, upx=False, - name="coworker-server", + name="openworker-server", ) diff --git a/packaging/server_entry.py b/packaging/server_entry.py index b2c97ccc..edbfff97 100644 --- a/packaging/server_entry.py +++ b/packaging/server_entry.py @@ -1,7 +1,7 @@ """PyInstaller entry point for the bundled desktop sidecar server. Thin wrapper so PyInstaller has a concrete script to analyze (the console_script -`coworker-server` is generated metadata, not a file). Runs the same `main()`. +`openworker-server` is generated metadata, not a file). Runs the same `main()`. """ from coworker.server.run import main diff --git a/packaging/setup_dev_env.sh b/packaging/setup_dev_env.sh index ec296547..9e2eeaad 100644 --- a/packaging/setup_dev_env.sh +++ b/packaging/setup_dev_env.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # One-time dev bootstrap for a fresh checkout: creates the Python venv every # from-source flow expects at .venv — the browser dev flow runs its -# coworker-server directly, and the Tauri desktop shell falls back to it when +# openworker-server directly, and the Tauri desktop shell falls back to it when # no packaged sidecar binary is present (src-tauri/src/lib.rs, resolution step 3). # # Usage: bash packaging/setup_dev_env.sh @@ -19,4 +19,4 @@ python3 -m venv "$VENV" "$VENV/bin/python" -c 'import aisuite, coworker' # fail loudly if the wiring broke echo "Ready: $VENV" -echo " server: $VENV/bin/coworker-server --cwd /path/to/your/project --port 8765" +echo " server: $VENV/bin/openworker-server --cwd /path/to/your/project --port 8765" diff --git a/pyproject.toml b/pyproject.toml index 04a22ebf..aa04eef4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,9 +45,9 @@ messaging = ["python-telegram-bot>=21", "slack-bolt>=1.18", "aiohttp>=3.9"] browser = ["playwright>=1.44"] [project.scripts] -coworker = "coworker.cli:main" -coworker-server = "coworker.server.run:main" -coworker-connectors = "coworker.connectors.cli:main" +openworker = "coworker.cli:main" +openworker-server = "coworker.server.run:main" +openworker-connectors = "coworker.connectors.cli:main" [tool.setuptools.packages.find] where = ["."] diff --git a/surfaces/gui/README.md b/surfaces/gui/README.md index a15c77ed..b62b314f 100644 --- a/surfaces/gui/README.md +++ b/surfaces/gui/README.md @@ -17,7 +17,7 @@ bash platform/packaging/setup_dev_env.sh # → platform/.venv (server + this r or add one later in the app's Settings): ```bash cd platform - ./.venv/bin/coworker-server --cwd /path/to/your/project --port 8765 + ./.venv/bin/openworker-server --cwd /path/to/your/project --port 8765 ``` 2. **Start the UI:** ```bash @@ -33,7 +33,7 @@ Open http://localhost:5173. The UI talks to `http://127.0.0.1:8765` (override wi The Tauri shell wraps the same UI and supervises the Python server itself — no separate terminal. It needs the Rust toolchain (`rustup`) plus the venv from the bootstrap step; -in dev it finds the server at `platform/.venv/bin/coworker-server` automatically (a +in dev it finds the server at `platform/.venv/bin/openworker-server` automatically (a packaged sidecar binary is only produced by the release scripts in `platform/packaging/`). ```bash diff --git a/surfaces/gui/e2e-live/approval.spec.ts b/surfaces/gui/e2e-live/approval.spec.ts index 491dc247..14a64ef6 100644 --- a/surfaces/gui/e2e-live/approval.spec.ts +++ b/surfaces/gui/e2e-live/approval.spec.ts @@ -8,7 +8,7 @@ import { newestFile, scratchBaseIfReady, sendTask, startCoworkSession } from "./ test("live: a write blocks on an approval card, then completes once approved", async ({ page }) => { const scratchBase = await scratchBaseIfReady(); - test.skip(!scratchBase, "live backend not ready — start coworker-server and configure a model"); + test.skip(!scratchBase, "live backend not ready — start openworker-server and configure a model"); // Unique filename per run so the "doesn't exist before approval" check can't see a prior run's file. const name = `hello-${Date.now()}.txt`; diff --git a/surfaces/gui/e2e-live/fib.spec.ts b/surfaces/gui/e2e-live/fib.spec.ts index 3e37c7be..40c7730e 100644 --- a/surfaces/gui/e2e-live/fib.spec.ts +++ b/surfaces/gui/e2e-live/fib.spec.ts @@ -14,7 +14,7 @@ const EXPECTED = ["144", "377", "987", "4181"]; test("live: agent writes fib.md to its scratch workspace, verified on disk", async ({ page }) => { const scratchBase = await scratchBaseIfReady(); - test.skip(!scratchBase, "live backend not ready — start coworker-server and configure a model"); + test.skip(!scratchBase, "live backend not ready — start openworker-server and configure a model"); await startCoworkSession(page); await selectMode(page, "Full access"); // run the write without an approval gate diff --git a/surfaces/gui/e2e-live/inbox.spec.ts b/surfaces/gui/e2e-live/inbox.spec.ts index 37be8b39..480bd6ea 100644 --- a/surfaces/gui/e2e-live/inbox.spec.ts +++ b/surfaces/gui/e2e-live/inbox.spec.ts @@ -7,7 +7,7 @@ import { scratchBaseIfReady, sendTask, startCoworkSession } from "./helpers"; test("live: unattended routes an approval to the Inbox", async ({ page }) => { const scratchBase = await scratchBaseIfReady(); - test.skip(!scratchBase, "live backend not ready — start coworker-server and configure a model"); + test.skip(!scratchBase, "live backend not ready — start openworker-server and configure a model"); const token = `INBOX-${Date.now()}`; const name = `inbox-${Date.now()}.txt`; diff --git a/surfaces/gui/e2e-live/persistence.spec.ts b/surfaces/gui/e2e-live/persistence.spec.ts index 1fac0c14..13bded48 100644 --- a/surfaces/gui/e2e-live/persistence.spec.ts +++ b/surfaces/gui/e2e-live/persistence.spec.ts @@ -8,7 +8,7 @@ import { scratchBaseIfReady, selectMode, sendTask, startCoworkSession } from "./ test("live: a session's transcript and artifact survive a page reload", async ({ page }) => { const scratchBase = await scratchBaseIfReady(); - test.skip(!scratchBase, "live backend not ready — start coworker-server and configure a model"); + test.skip(!scratchBase, "live backend not ready — start openworker-server and configure a model"); const token = `PERSIST-${Date.now()}`; // Unique filename — appears early in the session title (so it survives title truncation and is a diff --git a/surfaces/gui/e2e-live/persona-install.spec.ts b/surfaces/gui/e2e-live/persona-install.spec.ts index aff980ce..9e315c12 100644 --- a/surfaces/gui/e2e-live/persona-install.spec.ts +++ b/surfaces/gui/e2e-live/persona-install.spec.ts @@ -14,7 +14,7 @@ const FIXTURE_DIR = path.join(here, "fixtures", "persona"); // holds e2e-tester. test("live: install a persona from a directory, enable it, and run a task as it", async ({ page }) => { const scratchBase = await scratchBaseIfReady(); - test.skip(!scratchBase, "live backend not ready — start coworker-server and configure a model"); + test.skip(!scratchBase, "live backend not ready — start openworker-server and configure a model"); const token = `PERSONA-${Date.now()}`; const name = `persona-${Date.now()}.txt`; diff --git a/surfaces/gui/package-lock.json b/surfaces/gui/package-lock.json index 1f1fb6b0..56baf1e1 100644 --- a/surfaces/gui/package-lock.json +++ b/surfaces/gui/package-lock.json @@ -1,11 +1,11 @@ { - "name": "coworker-gui", + "name": "openworker-gui", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "coworker-gui", + "name": "openworker-gui", "version": "0.0.0", "dependencies": { "pdfjs-dist": "^4.10.38", diff --git a/surfaces/gui/package.json b/surfaces/gui/package.json index d4cd7e5c..c909514d 100644 --- a/surfaces/gui/package.json +++ b/surfaces/gui/package.json @@ -1,5 +1,5 @@ { - "name": "coworker-gui", + "name": "openworker-gui", "private": true, "version": "0.0.0", "type": "module", diff --git a/surfaces/gui/playwright.live.config.ts b/surfaces/gui/playwright.live.config.ts index 2bae9d4d..6bf62431 100644 --- a/surfaces/gui/playwright.live.config.ts +++ b/surfaces/gui/playwright.live.config.ts @@ -1,6 +1,6 @@ import { defineConfig, devices } from "@playwright/test"; -// LIVE smoke config — runs against the REAL backend (coworker-server on :8765) and a REAL model. +// LIVE smoke config — runs against the REAL backend (openworker-server on :8765) and a REAL model. // Deliberately separate from playwright.config.ts (testDir ./e2e), so `npm run e2e` and CI never // pick these up. Run manually with `npm run e2e:live` when the backend is up and a model is set. // Nondeterministic and costs a few model tokens per run — a confidence smoke, not an assertion gate. diff --git a/surfaces/gui/src-tauri/Cargo.lock b/surfaces/gui/src-tauri/Cargo.lock index 2bef66de..a6b531c0 100644 --- a/surfaces/gui/src-tauri/Cargo.lock +++ b/surfaces/gui/src-tauri/Cargo.lock @@ -647,21 +647,6 @@ dependencies = [ "bindgen", ] -[[package]] -name = "coworker-desktop" -version = "0.1.0" -dependencies = [ - "ocw-stt", - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-autostart", - "tauri-plugin-dialog", - "tauri-plugin-single-instance", - "tauri-plugin-updater", -] - [[package]] name = "cpal" version = "0.15.3" @@ -2685,6 +2670,21 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +[[package]] +name = "openworker-desktop" +version = "0.1.0" +dependencies = [ + "ocw-stt", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-autostart", + "tauri-plugin-dialog", + "tauri-plugin-single-instance", + "tauri-plugin-updater", +] + [[package]] name = "option-ext" version = "0.2.0" diff --git a/surfaces/gui/src-tauri/Cargo.toml b/surfaces/gui/src-tauri/Cargo.toml index ec506437..c0336aed 100644 --- a/surfaces/gui/src-tauri/Cargo.toml +++ b/surfaces/gui/src-tauri/Cargo.toml @@ -1,12 +1,12 @@ [package] -name = "coworker-desktop" +name = "openworker-desktop" version = "0.1.0" description = "OpenWorker desktop shell" edition = "2021" rust-version = "1.77" [lib] -name = "coworker_desktop_lib" +name = "openworker_desktop_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] diff --git a/surfaces/gui/src-tauri/src/lib.rs b/surfaces/gui/src-tauri/src/lib.rs index 2a5745e9..0c7492e0 100644 --- a/surfaces/gui/src-tauri/src/lib.rs +++ b/surfaces/gui/src-tauri/src/lib.rs @@ -1,7 +1,7 @@ //! OpenWorker desktop shell. //! //! Tauri is a thin native window over the existing React SPA. It: -//! 1. picks a free localhost port and starts the Python `coworker-server` as a managed +//! 1. picks a free localhost port and starts the Python `openworker-server` as a managed //! sidecar on that port (so it never clashes with a hand-run server on 8765); //! 2. injects `window.__COWORKER_HTTP__` / `__COWORKER_WS__` before the SPA loads, so //! `api.ts` talks to the sidecar (single codebase — the browser build still hits 8765); @@ -47,7 +47,7 @@ fn free_port() -> u16 { /// 2. The bundled onedir sidecar shipped via Tauri `resources` (production): the /// `sidecar/` folder lands in Contents/Resources on macOS and in the install dir /// (next to the app exe) on Windows. -/// 3. Legacy onefile slot: `coworker-server[.exe]` next to the app binary (pre-onedir +/// 3. Legacy onefile slot: `openworker-server[.exe]` next to the app binary (pre-onedir /// builds used Tauri externalBin). /// 4. Dev fallback: the repo venv, relative to this crate (`src-tauri` → `platform/.venv`; /// `bin/` on POSIX, `Scripts\` on Windows). @@ -56,9 +56,9 @@ fn server_bin() -> PathBuf { return PathBuf::from(p); } let exe_name = if cfg!(windows) { - "coworker-server.exe" + "openworker-server.exe" } else { - "coworker-server" + "openworker-server" }; if let Ok(exe) = std::env::current_exe() { if let Some(dir) = exe.parent() { @@ -78,9 +78,9 @@ fn server_bin() -> PathBuf { } let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR")); if cfg!(windows) { - p.push("../../../.venv/Scripts/coworker-server.exe"); + p.push("../../../.venv/Scripts/openworker-server.exe"); } else { - p.push("../../../.venv/bin/coworker-server"); + p.push("../../../.venv/bin/openworker-server"); } p } @@ -105,15 +105,15 @@ fn desktop_prefs_path() -> PathBuf { state_dir().join("desktop.json") } -/// The sidecar's log file: `/logs/coworker-server.log`, fresh per +/// The sidecar's log file: `/logs/openworker-server.log`, fresh per /// launch with the previous run kept as `.old`. None (→ /dev/null) only if the /// directory can't be created — logging must never block startup. fn server_log_file() -> Option { let dir = state_dir().join("logs"); std::fs::create_dir_all(&dir).ok()?; - let path = dir.join("coworker-server.log"); + let path = dir.join("openworker-server.log"); if path.exists() { - let _ = std::fs::rename(&path, dir.join("coworker-server.log.old")); + let _ = std::fs::rename(&path, dir.join("openworker-server.log.old")); } std::fs::File::create(&path).ok() } @@ -568,7 +568,7 @@ async fn install_update( } // Windows never reaches here (the NSIS installer takes over and relaunches). // macOS: the .app was swapped in place — restart into the new version. The tray - // Exit path's sidecar kill runs via RunEvent, so no orphaned coworker-server. + // Exit path's sidecar kill runs via RunEvent, so no orphaned openworker-server. app.restart(); } diff --git a/surfaces/gui/src-tauri/src/main.rs b/surfaces/gui/src-tauri/src/main.rs index 38618936..3a8032fa 100644 --- a/surfaces/gui/src-tauri/src/main.rs +++ b/surfaces/gui/src-tauri/src/main.rs @@ -2,5 +2,5 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { - coworker_desktop_lib::run(); + openworker_desktop_lib::run(); } diff --git a/surfaces/gui/src/components/ScheduledView.tsx b/surfaces/gui/src/components/ScheduledView.tsx index 52ffe588..6c557349 100644 --- a/surfaces/gui/src/components/ScheduledView.tsx +++ b/surfaces/gui/src/components/ScheduledView.tsx @@ -136,7 +136,7 @@ export function ScheduledView({ onOpenRun, onRunNow, initialOpenId }: Props) {
- Runs only while coworker-server is up — a missed schedule catches up once when it next + Runs only while openworker-server is up — a missed schedule catches up once when it next starts.