diff --git a/package.json b/package.json index b79691ddea7..061c85f65bd 100644 --- a/package.json +++ b/package.json @@ -50,8 +50,8 @@ "watch": "turbo run watch --concurrency=64", "webhook": "./packages/cli/bin/n8n webhook", "worker": "./packages/cli/bin/n8n worker", - "dev:fs-proxy": "pnpm --filter @n8n/fs-proxy build && node packages/@n8n/fs-proxy/dist/cli.js serve", - "stop:fs-proxy": "lsof -ti :7655 | xargs kill 2>/dev/null; echo 'fs-proxy stopped'" + "dev:computer-use": "pnpm --filter @n8n/computer-use build && node packages/@n8n/computer-use/dist/cli.js serve", + "stop:computer-use": "lsof -ti :7655 | xargs kill 2>/dev/null; echo 'computer-use stopped'" }, "devDependencies": { "@babel/preset-env": "^7.26.0", diff --git a/packages/@n8n/fs-proxy/README.md b/packages/@n8n/computer-use/README.md similarity index 94% rename from packages/@n8n/fs-proxy/README.md rename to packages/@n8n/computer-use/README.md index 763535c3c20..bd3f871dca9 100644 --- a/packages/@n8n/fs-proxy/README.md +++ b/packages/@n8n/computer-use/README.md @@ -1,4 +1,4 @@ -# @n8n/fs-proxy +# @n8n/computer-use Local AI gateway for n8n Instance AI. Bridges a remote n8n instance with your local machine — filesystem, shell, screenshots, mouse/keyboard, and browser @@ -32,13 +32,13 @@ automatically disabled when their platform requirements aren't met. Zero-click mode — n8n auto-detects the daemon on `127.0.0.1:7655`: ```bash -npx @n8n/fs-proxy serve +npx @n8n/computer-use serve # With a specific directory -npx @n8n/fs-proxy serve /path/to/project +npx @n8n/computer-use serve /path/to/project # Disable browser and mouse/keyboard -npx @n8n/fs-proxy serve --no-browser --no-computer-mouse-keyboard +npx @n8n/computer-use serve --no-browser --no-computer-mouse-keyboard ``` ### Direct mode @@ -47,10 +47,10 @@ Connect to a specific n8n instance with a gateway token: ```bash # Positional syntax -npx @n8n/fs-proxy https://my-n8n.com abc123xyz /path/to/project +npx @n8n/computer-use https://my-n8n.com abc123xyz /path/to/project # Flag syntax -npx @n8n/fs-proxy --url https://my-n8n.com --api-key abc123xyz --filesystem-dir /path/to/project +npx @n8n/computer-use --url https://my-n8n.com --api-key abc123xyz --filesystem-dir /path/to/project ``` ## Configuration @@ -122,7 +122,7 @@ take precedence. When using the gateway as a library, pass a config object to `GatewayClient`: ```typescript -import { GatewayClient } from '@n8n/fs-proxy'; +import { GatewayClient } from '@n8n/computer-use'; const client = new GatewayClient({ url: 'https://my-n8n.com', @@ -254,8 +254,8 @@ For local browser modes, see the On `npm install`, the package sets up platform-specific auto-start in daemon mode: -- **macOS**: LaunchAgent at `~/Library/LaunchAgents/com.n8n.fs-proxy.plist` -- **Linux**: systemd user service at `~/.config/systemd/user/n8n-fs-proxy.service` +- **macOS**: LaunchAgent at `~/Library/LaunchAgents/com.n8n.computer-use.plist` +- **Linux**: systemd user service at `~/.config/systemd/user/n8n-computer-use.service` - **Windows**: VBS script in Windows Startup folder ## Development diff --git a/packages/@n8n/fs-proxy/eslint.config.mjs b/packages/@n8n/computer-use/eslint.config.mjs similarity index 100% rename from packages/@n8n/fs-proxy/eslint.config.mjs rename to packages/@n8n/computer-use/eslint.config.mjs diff --git a/packages/@n8n/fs-proxy/jest.config.js b/packages/@n8n/computer-use/jest.config.js similarity index 100% rename from packages/@n8n/fs-proxy/jest.config.js rename to packages/@n8n/computer-use/jest.config.js diff --git a/packages/@n8n/fs-proxy/joke.txt b/packages/@n8n/computer-use/joke.txt similarity index 100% rename from packages/@n8n/fs-proxy/joke.txt rename to packages/@n8n/computer-use/joke.txt diff --git a/packages/@n8n/fs-proxy/package.json b/packages/@n8n/computer-use/package.json similarity index 94% rename from packages/@n8n/fs-proxy/package.json rename to packages/@n8n/computer-use/package.json index 3355af6b4d7..6bdb125a601 100644 --- a/packages/@n8n/fs-proxy/package.json +++ b/packages/@n8n/computer-use/package.json @@ -1,9 +1,9 @@ { - "name": "@n8n/fs-proxy", - "version": "0.1.0", + "name": "@n8n/computer-use", + "version": "0.2.0", "description": "Local AI gateway for n8n Instance AI — filesystem, shell, screenshots, mouse/keyboard, and browser automation", "bin": { - "n8n-fs-proxy": "dist/cli.js" + "n8n-computer-use": "dist/cli.js" }, "scripts": { "clean": "rimraf dist .turbo", diff --git a/packages/@n8n/fs-proxy/spec/local-gateway.md b/packages/@n8n/computer-use/spec/local-gateway.md similarity index 100% rename from packages/@n8n/fs-proxy/spec/local-gateway.md rename to packages/@n8n/computer-use/spec/local-gateway.md diff --git a/packages/@n8n/fs-proxy/spec/technical-spec.md b/packages/@n8n/computer-use/spec/technical-spec.md similarity index 97% rename from packages/@n8n/fs-proxy/spec/technical-spec.md rename to packages/@n8n/computer-use/spec/technical-spec.md index 596a084c849..06d7356074f 100644 --- a/packages/@n8n/fs-proxy/spec/technical-spec.md +++ b/packages/@n8n/computer-use/spec/technical-spec.md @@ -24,14 +24,14 @@ The local gateway involves three runtime processes: - **n8n server** — hosts the REST/SSE endpoints and orchestrates the AI agent. -- **fs-proxy daemon or local-gateway app** — runs on the user's local machine; executes tool calls. +- **computer-use daemon or local-gateway app** — runs on the user's local machine; executes tool calls. - **Browser (frontend)** — initiates the connection and displays gateway status. ```mermaid graph LR FE[Browser / Frontend] SRV[n8n Server] - DAEMON[fs-proxy Daemon\nlocal machine] + DAEMON[computer-use Daemon\nlocal machine] FE -- "POST /gateway/create-link\n(user auth)" --> SRV FE -- "GET /gateway/status\n(user auth)" --> SRV @@ -117,7 +117,7 @@ All paths are prefixed with `/api/v1/instance-ai`. ```typescript { token: string; // gw_ — pairing token for /gateway/init - command: string; // "npx @n8n/fs-proxy " + command: string; // "npx @n8n/computer-use " } ``` @@ -169,10 +169,10 @@ Response: `{ ok: true }` when reconnecting with an active session key. sequenceDiagram participant FE as Browser participant SRV as n8n Server - participant D as fs-proxy Daemon + participant D as computer-use Daemon FE->>SRV: POST /gateway/create-link (user auth) - SRV-->>FE: { token: "gw_...", command: "npx @n8n/fs-proxy ..." } + SRV-->>FE: { token: "gw_...", command: "npx @n8n/computer-use ..." } Note over FE: User runs the command on their machine @@ -194,7 +194,7 @@ On reconnect (e.g. after a transient network drop): ```mermaid sequenceDiagram - participant D as fs-proxy Daemon + participant D as computer-use Daemon participant SRV as n8n Server D->>SRV: POST /gateway/init (x-gateway-key: sess_...) @@ -279,7 +279,7 @@ sequenceDiagram participant A as AI Agent (Mastra tool) participant GW as LocalGateway participant SRV as Controller (SSE) - participant D as fs-proxy Daemon + participant D as computer-use Daemon A->>GW: callTool({ name, args }) GW->>GW: generate requestId, create Promise (30 s timeout) @@ -313,7 +313,7 @@ sequenceDiagram participant FE as Browser (Frontend) participant SRV as n8n Server participant DB as Database - participant D as fs-proxy Daemon + participant D as computer-use Daemon Note over SRV: First invocation — tool execute() called by Mastra SRV->>D: callTool({ name, args }) via LocalGateway diff --git a/packages/@n8n/fs-proxy/src/__mocks__/@inquirer/prompts.ts b/packages/@n8n/computer-use/src/__mocks__/@inquirer/prompts.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/__mocks__/@inquirer/prompts.ts rename to packages/@n8n/computer-use/src/__mocks__/@inquirer/prompts.ts diff --git a/packages/@n8n/fs-proxy/src/cli.ts b/packages/@n8n/computer-use/src/cli.ts similarity index 96% rename from packages/@n8n/fs-proxy/src/cli.ts rename to packages/@n8n/computer-use/src/cli.ts index 1a45860d57f..1fcd5d75d80 100644 --- a/packages/@n8n/fs-proxy/src/cli.ts +++ b/packages/@n8n/computer-use/src/cli.ts @@ -88,12 +88,12 @@ function shouldShowHelp(): boolean { function printUsage(): void { console.log(` -n8n-fs-proxy — Local AI gateway for n8n Instance AI +n8n-computer-use — Local AI gateway for n8n Instance AI Usage: - npx @n8n/fs-proxy serve [directory] [options] - npx @n8n/fs-proxy [directory] [options] - npx @n8n/fs-proxy --url --api-key [options] + npx @n8n/computer-use serve [directory] [options] + npx @n8n/computer-use [directory] [options] + npx @n8n/computer-use --url --api-key [options] Commands: serve Start a local daemon that n8n auto-detects diff --git a/packages/@n8n/fs-proxy/src/config-templates.test.ts b/packages/@n8n/computer-use/src/config-templates.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/config-templates.test.ts rename to packages/@n8n/computer-use/src/config-templates.test.ts diff --git a/packages/@n8n/fs-proxy/src/config-templates.ts b/packages/@n8n/computer-use/src/config-templates.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/config-templates.ts rename to packages/@n8n/computer-use/src/config-templates.ts diff --git a/packages/@n8n/fs-proxy/src/config.ts b/packages/@n8n/computer-use/src/config.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/config.ts rename to packages/@n8n/computer-use/src/config.ts diff --git a/packages/@n8n/fs-proxy/src/confirm-resource-cli.ts b/packages/@n8n/computer-use/src/confirm-resource-cli.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/confirm-resource-cli.ts rename to packages/@n8n/computer-use/src/confirm-resource-cli.ts diff --git a/packages/@n8n/fs-proxy/src/daemon.ts b/packages/@n8n/computer-use/src/daemon.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/daemon.ts rename to packages/@n8n/computer-use/src/daemon.ts diff --git a/packages/@n8n/fs-proxy/src/gateway-client.ts b/packages/@n8n/computer-use/src/gateway-client.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/gateway-client.ts rename to packages/@n8n/computer-use/src/gateway-client.ts diff --git a/packages/@n8n/fs-proxy/src/logger.test.ts b/packages/@n8n/computer-use/src/logger.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/logger.test.ts rename to packages/@n8n/computer-use/src/logger.test.ts diff --git a/packages/@n8n/fs-proxy/src/logger.ts b/packages/@n8n/computer-use/src/logger.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/logger.ts rename to packages/@n8n/computer-use/src/logger.ts diff --git a/packages/@n8n/fs-proxy/src/settings-store.ts b/packages/@n8n/computer-use/src/settings-store.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/settings-store.ts rename to packages/@n8n/computer-use/src/settings-store.ts diff --git a/packages/@n8n/fs-proxy/src/sharp.d.ts b/packages/@n8n/computer-use/src/sharp.d.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/sharp.d.ts rename to packages/@n8n/computer-use/src/sharp.d.ts diff --git a/packages/@n8n/fs-proxy/src/startup-config-cli.test.ts b/packages/@n8n/computer-use/src/startup-config-cli.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/startup-config-cli.test.ts rename to packages/@n8n/computer-use/src/startup-config-cli.test.ts diff --git a/packages/@n8n/fs-proxy/src/startup-config-cli.ts b/packages/@n8n/computer-use/src/startup-config-cli.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/startup-config-cli.ts rename to packages/@n8n/computer-use/src/startup-config-cli.ts diff --git a/packages/@n8n/fs-proxy/src/tools/browser/index.ts b/packages/@n8n/computer-use/src/tools/browser/index.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/browser/index.ts rename to packages/@n8n/computer-use/src/tools/browser/index.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/constants.ts b/packages/@n8n/computer-use/src/tools/filesystem/constants.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/constants.ts rename to packages/@n8n/computer-use/src/tools/filesystem/constants.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/copy-file.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/copy-file.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/copy-file.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/copy-file.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/copy-file.ts b/packages/@n8n/computer-use/src/tools/filesystem/copy-file.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/copy-file.ts rename to packages/@n8n/computer-use/src/tools/filesystem/copy-file.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/create-directory.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/create-directory.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/create-directory.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/create-directory.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/create-directory.ts b/packages/@n8n/computer-use/src/tools/filesystem/create-directory.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/create-directory.ts rename to packages/@n8n/computer-use/src/tools/filesystem/create-directory.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/delete.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/delete.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/delete.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/delete.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/delete.ts b/packages/@n8n/computer-use/src/tools/filesystem/delete.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/delete.ts rename to packages/@n8n/computer-use/src/tools/filesystem/delete.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/edit-file.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/edit-file.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/edit-file.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/edit-file.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/edit-file.ts b/packages/@n8n/computer-use/src/tools/filesystem/edit-file.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/edit-file.ts rename to packages/@n8n/computer-use/src/tools/filesystem/edit-file.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/fs-utils.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/fs-utils.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/fs-utils.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/fs-utils.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/fs-utils.ts b/packages/@n8n/computer-use/src/tools/filesystem/fs-utils.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/fs-utils.ts rename to packages/@n8n/computer-use/src/tools/filesystem/fs-utils.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/get-file-tree.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/get-file-tree.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/get-file-tree.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/get-file-tree.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/get-file-tree.ts b/packages/@n8n/computer-use/src/tools/filesystem/get-file-tree.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/get-file-tree.ts rename to packages/@n8n/computer-use/src/tools/filesystem/get-file-tree.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/index.ts b/packages/@n8n/computer-use/src/tools/filesystem/index.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/index.ts rename to packages/@n8n/computer-use/src/tools/filesystem/index.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/list-files.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/list-files.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/list-files.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/list-files.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/list-files.ts b/packages/@n8n/computer-use/src/tools/filesystem/list-files.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/list-files.ts rename to packages/@n8n/computer-use/src/tools/filesystem/list-files.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/move.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/move.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/move.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/move.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/move.ts b/packages/@n8n/computer-use/src/tools/filesystem/move.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/move.ts rename to packages/@n8n/computer-use/src/tools/filesystem/move.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/read-file.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/read-file.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/read-file.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/read-file.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/read-file.ts b/packages/@n8n/computer-use/src/tools/filesystem/read-file.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/read-file.ts rename to packages/@n8n/computer-use/src/tools/filesystem/read-file.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/search-files.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/search-files.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/search-files.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/search-files.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/search-files.ts b/packages/@n8n/computer-use/src/tools/filesystem/search-files.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/search-files.ts rename to packages/@n8n/computer-use/src/tools/filesystem/search-files.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/write-file.test.ts b/packages/@n8n/computer-use/src/tools/filesystem/write-file.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/write-file.test.ts rename to packages/@n8n/computer-use/src/tools/filesystem/write-file.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/filesystem/write-file.ts b/packages/@n8n/computer-use/src/tools/filesystem/write-file.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/filesystem/write-file.ts rename to packages/@n8n/computer-use/src/tools/filesystem/write-file.ts diff --git a/packages/@n8n/fs-proxy/src/tools/monitor-utils.ts b/packages/@n8n/computer-use/src/tools/monitor-utils.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/monitor-utils.ts rename to packages/@n8n/computer-use/src/tools/monitor-utils.ts diff --git a/packages/@n8n/fs-proxy/src/tools/mouse-keyboard/index.ts b/packages/@n8n/computer-use/src/tools/mouse-keyboard/index.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/mouse-keyboard/index.ts rename to packages/@n8n/computer-use/src/tools/mouse-keyboard/index.ts diff --git a/packages/@n8n/fs-proxy/src/tools/mouse-keyboard/mouse-keyboard.test.ts b/packages/@n8n/computer-use/src/tools/mouse-keyboard/mouse-keyboard.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/mouse-keyboard/mouse-keyboard.test.ts rename to packages/@n8n/computer-use/src/tools/mouse-keyboard/mouse-keyboard.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/mouse-keyboard/mouse-keyboard.ts b/packages/@n8n/computer-use/src/tools/mouse-keyboard/mouse-keyboard.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/mouse-keyboard/mouse-keyboard.ts rename to packages/@n8n/computer-use/src/tools/mouse-keyboard/mouse-keyboard.ts diff --git a/packages/@n8n/fs-proxy/src/tools/screenshot/index.ts b/packages/@n8n/computer-use/src/tools/screenshot/index.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/screenshot/index.ts rename to packages/@n8n/computer-use/src/tools/screenshot/index.ts diff --git a/packages/@n8n/fs-proxy/src/tools/screenshot/screenshot.test.ts b/packages/@n8n/computer-use/src/tools/screenshot/screenshot.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/screenshot/screenshot.test.ts rename to packages/@n8n/computer-use/src/tools/screenshot/screenshot.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/screenshot/screenshot.ts b/packages/@n8n/computer-use/src/tools/screenshot/screenshot.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/screenshot/screenshot.ts rename to packages/@n8n/computer-use/src/tools/screenshot/screenshot.ts diff --git a/packages/@n8n/fs-proxy/src/tools/shell/build-shell-resource.test.ts b/packages/@n8n/computer-use/src/tools/shell/build-shell-resource.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/shell/build-shell-resource.test.ts rename to packages/@n8n/computer-use/src/tools/shell/build-shell-resource.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/shell/build-shell-resource.ts b/packages/@n8n/computer-use/src/tools/shell/build-shell-resource.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/shell/build-shell-resource.ts rename to packages/@n8n/computer-use/src/tools/shell/build-shell-resource.ts diff --git a/packages/@n8n/fs-proxy/src/tools/shell/index.ts b/packages/@n8n/computer-use/src/tools/shell/index.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/shell/index.ts rename to packages/@n8n/computer-use/src/tools/shell/index.ts diff --git a/packages/@n8n/fs-proxy/src/tools/shell/shell-execute.test.ts b/packages/@n8n/computer-use/src/tools/shell/shell-execute.test.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/shell/shell-execute.test.ts rename to packages/@n8n/computer-use/src/tools/shell/shell-execute.test.ts diff --git a/packages/@n8n/fs-proxy/src/tools/shell/shell-execute.ts b/packages/@n8n/computer-use/src/tools/shell/shell-execute.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/shell/shell-execute.ts rename to packages/@n8n/computer-use/src/tools/shell/shell-execute.ts diff --git a/packages/@n8n/fs-proxy/src/tools/test-utils.ts b/packages/@n8n/computer-use/src/tools/test-utils.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/test-utils.ts rename to packages/@n8n/computer-use/src/tools/test-utils.ts diff --git a/packages/@n8n/fs-proxy/src/tools/types.ts b/packages/@n8n/computer-use/src/tools/types.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/types.ts rename to packages/@n8n/computer-use/src/tools/types.ts diff --git a/packages/@n8n/fs-proxy/src/tools/utils.ts b/packages/@n8n/computer-use/src/tools/utils.ts similarity index 100% rename from packages/@n8n/fs-proxy/src/tools/utils.ts rename to packages/@n8n/computer-use/src/tools/utils.ts diff --git a/packages/@n8n/fs-proxy/tsconfig.build.json b/packages/@n8n/computer-use/tsconfig.build.json similarity index 100% rename from packages/@n8n/fs-proxy/tsconfig.build.json rename to packages/@n8n/computer-use/tsconfig.build.json diff --git a/packages/@n8n/fs-proxy/tsconfig.json b/packages/@n8n/computer-use/tsconfig.json similarity index 100% rename from packages/@n8n/fs-proxy/tsconfig.json rename to packages/@n8n/computer-use/tsconfig.json diff --git a/packages/@n8n/instance-ai/docs/architecture.md b/packages/@n8n/instance-ai/docs/architecture.md index f058c901e09..de743b4fb68 100644 --- a/packages/@n8n/instance-ai/docs/architecture.md +++ b/packages/@n8n/instance-ai/docs/architecture.md @@ -58,7 +58,7 @@ graph TB Service -->|auto-detect| FSProvider{Provider} FSProvider -->|bare metal| LocalFS[LocalFilesystemProvider] FSProvider -->|container/cloud| Gateway[LocalGateway] - Gateway -->|SSE + HTTP POST| Daemon["@n8n/fs-proxy daemon"] + Gateway -->|SSE + HTTP POST| Daemon["@n8n/computer-use daemon"] end subgraph n8n ["n8n Services"] diff --git a/packages/@n8n/instance-ai/docs/configuration.md b/packages/@n8n/instance-ai/docs/configuration.md index 35e86f579b0..08c33691a08 100644 --- a/packages/@n8n/instance-ai/docs/configuration.md +++ b/packages/@n8n/instance-ai/docs/configuration.md @@ -30,7 +30,7 @@ All Instance AI configuration is done via environment variables. | Variable | Type | Default | Description | |----------|------|---------|-------------| | `N8N_INSTANCE_AI_FILESYSTEM_PATH` | string | `''` | Restrict local filesystem access to this directory. When empty, bare-metal installs can read any path the n8n process has access to. When set, `path.resolve()` + `fs.realpath()` containment prevents directory traversal and symlink escape. | -| `N8N_INSTANCE_AI_GATEWAY_API_KEY` | string | `''` | Static API key for the filesystem gateway. Used by the `@n8n/fs-proxy` daemon to authenticate SSE and HTTP POST requests. When empty, the dynamic pairing token flow is used instead. | +| `N8N_INSTANCE_AI_GATEWAY_API_KEY` | string | `''` | Static API key for the filesystem gateway. Used by the `@n8n/computer-use` daemon to authenticate SSE and HTTP POST requests. When empty, the dynamic pairing token flow is used instead. | **Auto-detection** (no boolean flag needed): 1. `N8N_INSTANCE_AI_FILESYSTEM_PATH` explicitly set → local FS (restricted to that path) @@ -202,7 +202,7 @@ N8N_INSTANCE_AI_FILESYSTEM_PATH=/home/user/my-project # With filesystem gateway (Docker/cloud — user runs daemon on their machine) N8N_INSTANCE_AI_MODEL=anthropic/claude-sonnet-4-6 N8N_INSTANCE_AI_GATEWAY_API_KEY=my-secret-key -# User runs: npx @n8n/fs-proxy +# User runs: npx @n8n/computer-use # With custom OpenAI-compatible endpoint (e.g. LM Studio, Ollama) N8N_INSTANCE_AI_MODEL=custom/llama-3.1-70b diff --git a/packages/@n8n/instance-ai/docs/filesystem-access.md b/packages/@n8n/instance-ai/docs/filesystem-access.md index e3261a9b115..bbc8c454d65 100644 --- a/packages/@n8n/instance-ai/docs/filesystem-access.md +++ b/packages/@n8n/instance-ai/docs/filesystem-access.md @@ -77,7 +77,7 @@ Agent calls readFile("src/index.ts") → Gateway resolves pending Promise → tool gets FileContent back ``` -The `@n8n/fs-proxy` CLI daemon is one implementation of this protocol. Any +The `@n8n/computer-use` CLI daemon is one implementation of this protocol. Any application that speaks SSE + HTTP POST can serve as a gateway — a Mac app, an Electron desktop app, a VS Code extension, or a mobile companion. @@ -189,17 +189,17 @@ The `InstanceAiDirectoryShare` component has 3 states: |-------|-----------|-----| | **Connected** | `isGatewayConnected \|\| isLocalFilesystemEnabled` | Green indicator: "Files connected" | | **Connecting** | `isDaemonConnecting` | Spinner: "Connecting..." | -| **Setup needed** | Default | `npx @n8n/fs-proxy` command + copy button + waiting spinner | +| **Setup needed** | Default | `npx @n8n/computer-use` command + copy button + waiting spinner | ### Auto-connect flow -The user runs `npx @n8n/fs-proxy` and everything connects automatically. No +The user runs `npx @n8n/computer-use` and everything connects automatically. No URLs, no tokens, no buttons. ```mermaid sequenceDiagram participant UI as Frontend (browser) - participant Daemon as fs-proxy daemon (localhost:7655) + participant Daemon as computer-use daemon (localhost:7655) participant Server as n8n Backend UI->>Daemon: GET localhost:7655/health (polling every 5s) @@ -228,7 +228,7 @@ the agent reads the filesystem through local providers without any gateway, daemon, or pairing. - The UI immediately shows **"Connected"** (green indicator). -- No `npx @n8n/fs-proxy` needed. +- No `npx @n8n/computer-use` needed. - If `N8N_INSTANCE_AI_FILESYSTEM_PATH` is set, access is sandboxed to that directory. Otherwise it is unrestricted. @@ -243,11 +243,11 @@ machine. The gateway bridge is required. ```mermaid sequenceDiagram participant Browser as Browser (host) - participant Daemon as fs-proxy daemon (host:7655) + participant Daemon as computer-use daemon (host:7655) participant Server as n8n server (container) Note over Browser,Daemon: 1. User starts daemon - Daemon->>Daemon: npx @n8n/fs-proxy (scans project dir) + Daemon->>Daemon: npx @n8n/computer-use (scans project dir) Note over Browser,Daemon: 2. Browser detects daemon Browser->>Daemon: GET localhost:7655/health (polling every 5s) @@ -277,7 +277,7 @@ so the gateway bridge is required. ```mermaid sequenceDiagram participant Browser as Browser (user's machine) - participant Daemon as fs-proxy daemon (localhost:7655) + participant Daemon as computer-use daemon (localhost:7655) participant Cloud as n8n Cloud server Browser->>Daemon: GET localhost:7655/health @@ -300,8 +300,8 @@ firewall rules — SSE is a regular outbound connection. | Deployment | Access path | Daemon needed? | User action | |------------|-------------|----------------|-------------| | Bare metal | Direct (local providers) | No | None — auto-detected | -| Docker / K8s | Gateway bridge | Yes | `npx @n8n/fs-proxy` on host | -| n8n Cloud | Gateway bridge | Yes | `npx @n8n/fs-proxy` on local machine | +| Docker / K8s | Gateway bridge | Yes | `npx @n8n/computer-use` on host | +| n8n Cloud | Gateway bridge | Yes | `npx @n8n/computer-use` on local machine | Alternatively, setting `N8N_INSTANCE_AI_GATEWAY_API_KEY` on both the n8n server and the daemon skips the pairing flow entirely — useful for permanent @@ -408,7 +408,7 @@ All key comparisons use `timingSafeEqual()` to prevent timing attacks. ## Extending the Gateway: Building Custom Clients -The gateway protocol is **client-agnostic** — `@n8n/fs-proxy` is just one +The gateway protocol is **client-agnostic** — `@n8n/computer-use` is just one implementation. Any application that speaks the protocol can serve as a filesystem provider: a desktop app (Electron, Tauri), a VS Code extension, a Go binary, a mobile companion, etc. @@ -504,11 +504,11 @@ See `docs/configuration.md` for the full configuration reference. |---------|----------------| | `@n8n/instance-ai` | Agent core: service interfaces, tool definitions, data shapes. Framework-agnostic, zero n8n dependencies. | | `packages/cli/.../instance-ai/` | n8n backend: HTTP endpoints, gateway singleton, local providers, auto-detect logic, event bus. | -| `@n8n/fs-proxy` | Reference gateway client: standalone CLI daemon. HTTP server, SSE client, local file reader, directory scanner. Independently installable via npx. | +| `@n8n/computer-use` | Reference gateway client: standalone CLI daemon. HTTP server, SSE client, local file reader, directory scanner. Independently installable via npx. | ### Tree scanner behavior -The reference daemon (`@n8n/fs-proxy`) scans the user's project directory on +The reference daemon (`@n8n/computer-use`) scans the user's project directory on startup: - **Algorithm**: Breadth-first, broad top-level coverage before descending diff --git a/packages/@n8n/instance-ai/src/agent/system-prompt.ts b/packages/@n8n/instance-ai/src/agent/system-prompt.ts index 692a1e54e73..35af7a86966 100644 --- a/packages/@n8n/instance-ai/src/agent/system-prompt.ts +++ b/packages/@n8n/instance-ai/src/agent/system-prompt.ts @@ -58,17 +58,16 @@ function getFilesystemSection( ? capabilityLines.join('\n') : '- Local machine access capabilities'; return ` -## Local Gateway (Not Connected) +## Computer Use (Not Connected) -A **Local Gateway** can connect this n8n instance to the user's local machine, providing: +A **Computer Use** can connect this n8n instance to the user's local machine, providing: ${capList} The gateway is not currently connected. When the user asks for something that requires local machine access (reading files, browsing, etc.), let them know they can connect by either: -1. **Download the Local Gateway app** — https://n8n.io/downloads/local-gateway -2. **Or run via CLI:** \`npx @n8n/fs-proxy serve\` +1. **Run via CLI:** \`npx @n8n/computer-use serve\` -Do NOT attempt to use filesystem tools — they are not available until the gateway connects.`; +Do NOT attempt to use Computer Use tools — they are not available until the gateway connects.`; } if (filesystemAccess) { @@ -96,7 +95,7 @@ function getBrowserSection( ## Browser Automation (Unavailable) -Browser tools require a connected Local Gateway. They are not available until the gateway connects.`; +Browser tools require a connected Computer Use. They are not available until your computer connects.`; } return ''; } diff --git a/packages/@n8n/instance-ai/src/tools/filesystem/create-tools-from-mcp-server.ts b/packages/@n8n/instance-ai/src/tools/filesystem/create-tools-from-mcp-server.ts index bf57a2b42dc..8f9e51b855f 100644 --- a/packages/@n8n/instance-ai/src/tools/filesystem/create-tools-from-mcp-server.ts +++ b/packages/@n8n/instance-ai/src/tools/filesystem/create-tools-from-mcp-server.ts @@ -79,7 +79,7 @@ function tryParseGatewayConfirmationRequired( /** * Build Mastra tools dynamically from the MCP tools advertised by a connected - * local MCP server (e.g. the fs-proxy daemon). + * local MCP server (e.g. the computer-use daemon). * * Each tool's input schema is converted from the daemon's JSON Schema definition * to a Zod schema so the LLM receives accurate parameter information. Falls back diff --git a/packages/@n8n/instance-ai/src/types.ts b/packages/@n8n/instance-ai/src/types.ts index a62981ae6f3..d353f6858ff 100644 --- a/packages/@n8n/instance-ai/src/types.ts +++ b/packages/@n8n/instance-ai/src/types.ts @@ -565,7 +565,7 @@ export interface InstanceAiContext { filesystemService?: InstanceAiFilesystemService; workspaceService?: InstanceAiWorkspaceService; /** - * Connected remote MCP server (e.g. fs-proxy daemon). When set, dynamic tools are created from its advertised capabilities. Takes precedence over `filesystemService`. + * Connected remote MCP server (e.g. computer-use daemon). When set, dynamic tools are created from its advertised capabilities. Takes precedence over `filesystemService`. */ localMcpServer?: LocalMcpServer; /** Connection state of the local gateway — drives system prompt guidance. */ @@ -842,7 +842,7 @@ export interface OrchestrationContext { }>; /** Chrome DevTools MCP config — only present when browser automation is enabled */ browserMcpConfig?: McpServerConfig; - /** Local MCP server (fs-proxy daemon) — when connected and advertising browser_* tools, + /** Local MCP server (computer-use daemon) — when connected and advertising browser_* tools, * browser-credential-setup prefers these over chrome-devtools-mcp. */ localMcpServer?: LocalMcpServer; /** MCP tools loaded from external servers — available for delegation to sub-agents */ diff --git a/packages/@n8n/local-gateway/README.md b/packages/@n8n/local-gateway/README.md index faba517346f..3bbcdd72171 100644 --- a/packages/@n8n/local-gateway/README.md +++ b/packages/@n8n/local-gateway/README.md @@ -93,4 +93,4 @@ src/renderer/ — Settings UI (plain HTML/CSS/TS, sandboxed) src/shared/ — Types shared between main and renderer ``` -The actual gateway daemon is provided by the `@n8n/fs-proxy` package and is managed by `DaemonController`, which starts/stops it and surfaces status (`stopped → starting → waiting → connected → disconnected`) to the tray menu and settings window via IPC. +The actual gateway daemon is provided by the `@n8n/computer-use` package and is managed by `DaemonController`, which starts/stops it and surfaces status (`stopped → starting → waiting → connected → disconnected`) to the tray menu and settings window via IPC. diff --git a/packages/@n8n/local-gateway/package.json b/packages/@n8n/local-gateway/package.json index 872f9ea79fd..74c273f90f0 100644 --- a/packages/@n8n/local-gateway/package.json +++ b/packages/@n8n/local-gateway/package.json @@ -23,7 +23,7 @@ "postinstall": "node node_modules/electron/install.js" }, "dependencies": { - "@n8n/fs-proxy": "workspace:*", + "@n8n/computer-use": "workspace:*", "electron-store": "^8.2.0" }, "devDependencies": { diff --git a/packages/@n8n/local-gateway/src/main/daemon-controller.ts b/packages/@n8n/local-gateway/src/main/daemon-controller.ts index 2567727a71d..10095776e66 100644 --- a/packages/@n8n/local-gateway/src/main/daemon-controller.ts +++ b/packages/@n8n/local-gateway/src/main/daemon-controller.ts @@ -1,7 +1,7 @@ -import type { GatewayConfig } from '@n8n/fs-proxy/config'; -import type { DaemonOptions } from '@n8n/fs-proxy/daemon'; -import { startDaemon } from '@n8n/fs-proxy/daemon'; -import { logger } from '@n8n/fs-proxy/logger'; +import type { GatewayConfig } from '@n8n/computer-use/config'; +import type { DaemonOptions } from '@n8n/computer-use/daemon'; +import { startDaemon } from '@n8n/computer-use/daemon'; +import { logger } from '@n8n/computer-use/logger'; import { EventEmitter } from 'node:events'; import type * as http from 'node:http'; diff --git a/packages/@n8n/local-gateway/src/main/index.ts b/packages/@n8n/local-gateway/src/main/index.ts index 20bd026eed1..4b59bb1ed61 100644 --- a/packages/@n8n/local-gateway/src/main/index.ts +++ b/packages/@n8n/local-gateway/src/main/index.ts @@ -1,4 +1,4 @@ -import { configure, logger } from '@n8n/fs-proxy/logger'; +import { configure, logger } from '@n8n/computer-use/logger'; import { app, dialog } from 'electron'; import * as path from 'node:path'; diff --git a/packages/@n8n/local-gateway/src/main/ipc-handlers.ts b/packages/@n8n/local-gateway/src/main/ipc-handlers.ts index 20d50c32f61..16ea7d8cbb4 100644 --- a/packages/@n8n/local-gateway/src/main/ipc-handlers.ts +++ b/packages/@n8n/local-gateway/src/main/ipc-handlers.ts @@ -1,4 +1,4 @@ -import { configure, logger } from '@n8n/fs-proxy/logger'; +import { configure, logger } from '@n8n/computer-use/logger'; import { ipcMain } from 'electron'; import type { DaemonController } from './daemon-controller'; diff --git a/packages/@n8n/local-gateway/src/main/settings-store.ts b/packages/@n8n/local-gateway/src/main/settings-store.ts index e95801381a8..3e2fcca3b9f 100644 --- a/packages/@n8n/local-gateway/src/main/settings-store.ts +++ b/packages/@n8n/local-gateway/src/main/settings-store.ts @@ -1,5 +1,5 @@ -import type { GatewayConfig } from '@n8n/fs-proxy/config'; -import { logger } from '@n8n/fs-proxy/logger'; +import type { GatewayConfig } from '@n8n/computer-use/config'; +import { logger } from '@n8n/computer-use/logger'; import { app } from 'electron'; import Store from 'electron-store'; import * as os from 'node:os'; diff --git a/packages/@n8n/local-gateway/src/main/tray.ts b/packages/@n8n/local-gateway/src/main/tray.ts index 0d3a38ae16e..d44616fd585 100644 --- a/packages/@n8n/local-gateway/src/main/tray.ts +++ b/packages/@n8n/local-gateway/src/main/tray.ts @@ -1,4 +1,4 @@ -import { logger } from '@n8n/fs-proxy/logger'; +import { logger } from '@n8n/computer-use/logger'; import { app, Menu, nativeImage, Tray } from 'electron'; import * as fs from 'node:fs'; import * as path from 'node:path'; diff --git a/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts b/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts index 3141238212f..ebf0cee620c 100644 --- a/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts +++ b/packages/cli/src/modules/instance-ai/__tests__/instance-ai.controller.test.ts @@ -691,7 +691,7 @@ describe('InstanceAiController', () => { expect(result).toEqual({ token: 'pairing-token', - command: 'npx @n8n/fs-proxy http://localhost:5678 pairing-token', + command: 'npx @n8n/computer-use http://localhost:5678 pairing-token', }); expect(instanceAiService.generatePairingToken).toHaveBeenCalledWith(USER_ID); }); diff --git a/packages/cli/src/modules/instance-ai/filesystem/local-gateway.ts b/packages/cli/src/modules/instance-ai/filesystem/local-gateway.ts index aafa373bfca..00f17fa4207 100644 --- a/packages/cli/src/modules/instance-ai/filesystem/local-gateway.ts +++ b/packages/cli/src/modules/instance-ai/filesystem/local-gateway.ts @@ -28,7 +28,7 @@ export interface LocalGatewayEvent { } /** - * Singleton MCP gateway for a connected local client (e.g. the fs-proxy daemon). + * Singleton MCP gateway for a connected local client (e.g. the computer-use daemon). * * The client advertises its capabilities as `McpTool[]` on connect; all tool * calls are dispatched generically via the SSE channel. Tools are not limited diff --git a/packages/cli/src/modules/instance-ai/instance-ai.controller.ts b/packages/cli/src/modules/instance-ai/instance-ai.controller.ts index da32c79689c..924adb64f9b 100644 --- a/packages/cli/src/modules/instance-ai/instance-ai.controller.ts +++ b/packages/cli/src/modules/instance-ai/instance-ai.controller.ts @@ -530,7 +530,7 @@ export class InstanceAiController { async createGatewayLink(req: AuthenticatedRequest) { const token = this.instanceAiService.generatePairingToken(req.user.id); const baseUrl = this.instanceBaseUrl.replace(/\/$/, ''); - const command = `npx @n8n/fs-proxy ${baseUrl} ${token}`; + const command = `npx @n8n/computer-use ${baseUrl} ${token}`; return { token, command }; } diff --git a/packages/frontend/editor-ui/src/features/ai/instanceAi/components/settings/LocalGatewaySection.vue b/packages/frontend/editor-ui/src/features/ai/instanceAi/components/settings/LocalGatewaySection.vue index 35c2aa87f3f..a908008dd32 100644 --- a/packages/frontend/editor-ui/src/features/ai/instanceAi/components/settings/LocalGatewaySection.vue +++ b/packages/frontend/editor-ui/src/features/ai/instanceAi/components/settings/LocalGatewaySection.vue @@ -17,7 +17,7 @@ const isLocalGatewayDisabled = computed(() => { }); const copied = ref(false); -const displayCommand = computed(() => store.setupCommand ?? 'npx @n8n/fs-proxy'); +const displayCommand = computed(() => store.setupCommand ?? 'npx @n8n/computer-use'); async function copyCommand() { if (!store.setupCommand) return; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e792cb5d9d..685a6352c85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1460,7 +1460,7 @@ importers: specifier: 'catalog:' version: 3.23.3(zod@3.25.67) - packages/@n8n/fs-proxy: + packages/@n8n/computer-use: dependencies: '@anthropic-ai/sandbox-runtime': specifier: ^0.0.42 @@ -1648,9 +1648,9 @@ importers: packages/@n8n/local-gateway: dependencies: - '@n8n/fs-proxy': + '@n8n/computer-use': specifier: workspace:* - version: link:../fs-proxy + version: link:../computer-use electron-store: specifier: ^8.2.0 version: 8.2.0