@dokobot/cli 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # @dokobot/cli
2
2
 
3
- Connect your Chrome browser to AI agents. Powered by [Dokobot](https://dokobot.ai).
3
+ Connect your Chrome browser to AI agents. Free and privacy-first. Powered by [Dokobot](https://dokobot.ai).
4
+
5
+ - **Free forever**. Local mode gives you unlimited reads with no API key, no account, no usage limits.
6
+ - **Privacy-first**. Local mode keeps all data on your machine. Remote mode supports end-to-end encryption so the server never sees your content in plaintext.
7
+ - **Works with any AI agent**. Claude Code, Codex, OpenClaw, Windsurf, or any tool that speaks MCP.
4
8
 
5
9
  ## Install
6
10
 
@@ -13,23 +17,17 @@ npm i -g @dokobot/cli
13
17
  ### Local mode (free, unlimited)
14
18
 
15
19
  ```bash
16
- # Install the native messaging bridge (one-time setup)
17
- dokobot install-bridge
18
-
19
- # Read any page locally through your browser
20
+ dokobot install-bridge # Install native messaging bridge (one-time)
21
+ dokobot install-skill # Install skill for your AI agent (one-time)
20
22
  dokobot doko read --local https://example.com
21
23
  ```
22
24
 
23
25
  ### Remote mode (cloud API)
24
26
 
25
27
  ```bash
26
- # Configure your API key
27
- dokobot config
28
-
29
- # Read any page via cloud API
28
+ dokobot config # Configure your API key
29
+ dokobot install-skill # Install skill for your AI agent (one-time)
30
30
  dokobot doko read https://example.com
31
-
32
- # Search the web
33
31
  dokobot doko search "latest AI news"
34
32
  ```
35
33
 
@@ -101,16 +99,19 @@ dokobot doko search "latest AI news" --num 10
101
99
  |--------|-------------|
102
100
  | `--num <n>` | Number of results, 1-10 (default: 5) |
103
101
 
104
- ### `doko connect`
102
+ ### `install-skill`
105
103
 
106
- Connect your Chrome browser for full MCP control.
104
+ Download and install the Dokobot skill for your AI agent. Auto-detects installed agents or lets you choose.
107
105
 
108
106
  ```bash
109
- dokobot doko connect # Interactive setup
110
- dokobot doko connect --name "Work Chrome" # Name your doko
111
- dokobot doko connect --browser-url http://127.0.0.1:9222 # Custom Chrome instance
107
+ dokobot install-skill # Interactive agent selection
108
+ dokobot install-skill --agent claude-code # Install for Claude Code
109
+ dokobot install-skill --agent codex # Install for Codex
110
+ dokobot install-skill -o ./my-skills # Custom skills directory
112
111
  ```
113
112
 
113
+ Supported agents: `claude-code` (or `claude`), `openclaw`, `windsurf`, `codex`.
114
+
114
115
  ### `doko list` / `doko remove <id>`
115
116
 
116
117
  List or remove registered doko devices.
@@ -118,15 +119,28 @@ List or remove registered doko devices.
118
119
  ### Other commands
119
120
 
120
121
  ```bash
121
- dokobot config # Configure API key and server URL
122
+ dokobot config # Configure API key, server URL, and encryption
122
123
  dokobot update # Check for updates
123
124
  ```
124
125
 
126
+ ## End-to-End Encryption
127
+
128
+ Remote reads support end-to-end encryption. When enabled, page content is encrypted on the server and only decrypted locally by your CLI.
129
+
130
+ ```bash
131
+ dokobot config # Set encryption password during setup
132
+ ```
133
+
134
+ You can also set the password via the `DOKO_ENCRYPTION_PASSWORD` environment variable or the `--password` flag. The CLI uses scrypt key derivation with AES-256-GCM encryption.
135
+
136
+ If encryption is configured, remote `doko read` results are automatically encrypted and decrypted. The CLI will warn if the server returns unencrypted data when a key is configured, and fail fast if the encryption key doesn't match.
137
+
125
138
  ## Global Options
126
139
 
127
140
  | Option | Description |
128
141
  |--------|-------------|
129
142
  | `--api-key <key>` | API key (or set `DOKO_API_KEY` env) |
143
+ | `--password <password>` | Encryption password (or set `DOKO_ENCRYPTION_PASSWORD` env) |
130
144
  | `--server <url>` | Server URL (default: `https://dokobot.ai`) |
131
145
  | `--verbose` | Enable verbose logging |
132
146
 
package/dist/src/cli.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { Command } from 'commander';
2
- import { input } from '@inquirer/prompts';
3
- import { loadConfig, saveConfig } from './config.js';
2
+ import { input, password as passwordPrompt } from '@inquirer/prompts';
3
+ import { loadConfig, saveConfig, getServerUrl } from './config.js';
4
4
  import { getCurrentVersion } from './version.js';
5
5
  import { checkForUpdateNow, formatUpdateNotification } from './update-checker.js';
6
6
  import { registerDokoCommands } from './doko.js';
7
+ import { ServerClient } from './server-client.js';
8
+ import { deriveKey, computeKeyCheck, validatePassword } from './crypto.js';
7
9
  export function createProgram() {
8
10
  const program = new Command();
9
11
  program
@@ -12,10 +14,11 @@ export function createProgram() {
12
14
  .version(getCurrentVersion())
13
15
  .option('--api-key <key>', 'API key (or set DOKO_API_KEY env)')
14
16
  .option('--server <url>', 'Server URL (default: https://dokobot.ai)')
17
+ .option('--password <password>', 'Encryption password (or set DOKO_ENCRYPTION_PASSWORD env)')
15
18
  .option('--verbose', 'Enable verbose logging');
16
19
  program
17
20
  .command('config')
18
- .description('Configure API key and server URL')
21
+ .description('Configure API key, server URL, and encryption')
19
22
  .action(async () => {
20
23
  const config = loadConfig();
21
24
  const apiKey = await input({
@@ -26,7 +29,61 @@ export function createProgram() {
26
29
  message: 'Server URL:',
27
30
  default: config.serverUrl || 'https://dokobot.ai',
28
31
  });
29
- saveConfig({ apiKey, serverUrl });
32
+ let { encryptionKey, kid } = config;
33
+ if (encryptionKey) {
34
+ console.log(` E2E encryption: enabled (key version ${kid ?? 0})`);
35
+ }
36
+ let pwd = await passwordPrompt({
37
+ message: 'Encryption password (leave empty to skip):',
38
+ }).catch(() => '');
39
+ if (pwd && apiKey) {
40
+ try {
41
+ validatePassword(pwd);
42
+ }
43
+ catch (e) {
44
+ console.error(` ${e instanceof Error ? e.message : e}`);
45
+ pwd = '';
46
+ }
47
+ }
48
+ if (pwd && apiKey) {
49
+ const client = new ServerClient(serverUrl, apiKey);
50
+ console.log(' Deriving encryption key...');
51
+ const encConfig = await client.getEncryptionConfig();
52
+ if (encConfig.enabled && encConfig.salt && encConfig.keyCheck) {
53
+ const key = await deriveKey(pwd, encConfig.salt);
54
+ const check = computeKeyCheck(key);
55
+ if (check !== encConfig.keyCheck) {
56
+ console.error(' \u2717 Password does not match. Encryption key not updated.');
57
+ }
58
+ else {
59
+ encryptionKey = key.toString('base64');
60
+ kid = encConfig.kid;
61
+ console.log(' \u2713 Encryption key verified and stored.');
62
+ }
63
+ }
64
+ else {
65
+ console.log(' Encryption is not enabled. Set it up in the Dokobot browser extension first.');
66
+ }
67
+ }
68
+ else if (!pwd && apiKey) {
69
+ if (encryptionKey) {
70
+ const { confirm } = await import('@inquirer/prompts');
71
+ const clear = await confirm({ message: 'Clear stored encryption key?', default: false }).catch(() => false);
72
+ if (clear) {
73
+ encryptionKey = undefined;
74
+ kid = undefined;
75
+ console.log(' Encryption key cleared.');
76
+ }
77
+ }
78
+ else {
79
+ const client = new ServerClient(serverUrl, apiKey);
80
+ const encConfig = await client.getEncryptionConfig();
81
+ if (encConfig.enabled) {
82
+ console.log(' \u26a0 Encryption is enabled but no local key. Enter the encryption password to decrypt remote reads.');
83
+ }
84
+ }
85
+ }
86
+ saveConfig({ apiKey, serverUrl, encryptionKey, kid });
30
87
  console.log('Configuration saved.');
31
88
  });
32
89
  program
@@ -51,6 +108,17 @@ export function createProgram() {
51
108
  const { installBridge } = await import('./install-bridge.js');
52
109
  await installBridge(options);
53
110
  });
111
+ program
112
+ .command('install-skill')
113
+ .description('Download and install the Dokobot skill for your AI agent')
114
+ .option('-o, --output <path>', 'Custom skills directory (skill will be saved to <path>/doko/SKILL.md)')
115
+ .option('--agent <name>', 'Target agent (claude-code, openclaw, windsurf, codex)')
116
+ .action(async (options) => {
117
+ const globalOpts = program.opts();
118
+ const serverUrl = getServerUrl(globalOpts.server);
119
+ const { installSkill } = await import('./install-skill.js');
120
+ await installSkill({ serverUrl, outputPath: options.output, agent: options.agent });
121
+ });
54
122
  registerDokoCommands(program);
55
123
  return program;
56
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,OAAO,CAAC,iBAAiB,EAAE,CAAC;SAC5B,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;SAC9D,MAAM,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;SACpE,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IAEjD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;YACzB,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,MAAM,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,oBAAoB;SAClD,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACvC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iCAAiC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAsD,EAAE,EAAE;QACvE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  interface Config {
2
2
  apiKey?: string;
3
3
  serverUrl?: string;
4
+ encryptionKey?: string;
5
+ kid?: number;
4
6
  }
5
7
  interface DeviceInfo {
6
8
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type FlattenedJWE } from 'jose';
2
+ export declare function validatePassword(password: string): void;
3
+ export declare function deriveKey(password: string, saltBase64: string): Promise<Buffer>;
4
+ export declare function computeKeyCheck(key: Buffer): string;
5
+ export declare function encrypt(plaintext: Buffer, key: Buffer, kid: number): Promise<FlattenedJWE>;
6
+ export declare function decrypt(jwe: FlattenedJWE, key: Buffer): Promise<Buffer>;
7
+ export declare function generateSalt(): string;
8
+ export declare function isJWE(obj: unknown): obj is FlattenedJWE;
9
+ export type { FlattenedJWE };
@@ -0,0 +1,55 @@
1
+ import { FlattenedEncrypt, flattenedDecrypt } from 'jose';
2
+ import scryptJs from 'scrypt-js';
3
+ const { scrypt } = scryptJs;
4
+ import { createHmac, randomBytes, webcrypto } from 'crypto';
5
+ const SCRYPT_N = 32768;
6
+ const SCRYPT_R = 8;
7
+ const SCRYPT_P = 1;
8
+ const KEY_LEN = 32;
9
+ const SALT_LEN = 32;
10
+ const HKDF_INFO = 'DokoE2E-A256GCM';
11
+ const MIN_PASSWORD_LENGTH = 8;
12
+ const HMAC_VERIFICATION_DATA = 'dokobot-verification';
13
+ const subtle = webcrypto.subtle;
14
+ export function validatePassword(password) {
15
+ if (password.length < MIN_PASSWORD_LENGTH) {
16
+ throw new Error(`Password must be at least ${MIN_PASSWORD_LENGTH} characters`);
17
+ }
18
+ }
19
+ export async function deriveKey(password, saltBase64) {
20
+ const salt = Buffer.from(saltBase64, 'base64');
21
+ const passwordBytes = Buffer.from(password, 'utf-8');
22
+ const baseKey = await scrypt(passwordBytes, salt, SCRYPT_N, SCRYPT_R, SCRYPT_P, KEY_LEN);
23
+ const cryptoKey = await subtle.importKey('raw', baseKey, 'HKDF', false, ['deriveBits']);
24
+ const finalBits = await subtle.deriveBits({
25
+ name: 'HKDF',
26
+ hash: 'SHA-256',
27
+ salt: new Uint8Array(0),
28
+ info: new TextEncoder().encode(HKDF_INFO),
29
+ }, cryptoKey, 256);
30
+ return Buffer.from(finalBits);
31
+ }
32
+ export function computeKeyCheck(key) {
33
+ return createHmac('sha256', key).update(HMAC_VERIFICATION_DATA).digest('base64');
34
+ }
35
+ export async function encrypt(plaintext, key, kid) {
36
+ const secretKey = await subtle.importKey('raw', key, { name: 'AES-GCM', length: 256 }, false, ['encrypt']);
37
+ return new FlattenedEncrypt(plaintext)
38
+ .setProtectedHeader({ alg: 'dir', enc: 'A256GCM', kid: String(kid) })
39
+ .encrypt(secretKey);
40
+ }
41
+ export async function decrypt(jwe, key) {
42
+ const secretKey = await subtle.importKey('raw', key, { name: 'AES-GCM', length: 256 }, false, ['decrypt']);
43
+ const { plaintext } = await flattenedDecrypt(jwe, secretKey);
44
+ return Buffer.from(plaintext);
45
+ }
46
+ export function generateSalt() {
47
+ return randomBytes(SALT_LEN).toString('base64');
48
+ }
49
+ export function isJWE(obj) {
50
+ if (!obj || typeof obj !== 'object')
51
+ return false;
52
+ const o = obj;
53
+ return typeof o.protected === 'string' && typeof o.ciphertext === 'string';
54
+ }
55
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
package/dist/src/doko.js CHANGED
@@ -1,41 +1,20 @@
1
- import { input, select } from '@inquirer/prompts';
2
- import { McpClient } from './mcp-client.js';
3
1
  import { ServerClient } from './server-client.js';
4
- import { CommandPoller } from './command-poller.js';
5
- import { Heartbeat } from './heartbeat.js';
6
- import { Executor, DOKO_TOOLS } from './executor.js';
7
- import { getApiKey, getServerUrl, loadConfig, saveConfig, saveDevice, listDevices, removeDevice, findDeviceByName, } from './config.js';
2
+ import { getApiKey, getServerUrl, loadConfig, listDevices, removeDevice, } from './config.js';
8
3
  import { setLogLevel } from './logger.js';
9
- import { getCurrentVersion } from './version.js';
10
- import { getUpdateResult, formatUpdateNotification } from './update-checker.js';
11
- const G = '\x1b[32m';
12
- const W = '\x1b[97;1m';
13
- const B = '\x1b[1m';
14
- const D = '\x1b[2m';
15
- const R = '\x1b[0m';
16
- const BANNER = `
17
- ${G}▄████████▄${R}
18
- ${G}███${W}██${R}${G}█${W}██${R}${G}███${R} ${B}Dokobot CLI${R} ${D}v${getCurrentVersion()}${R}
19
- ${G}███████████${R} ${D}Open the full web to AI agent${R}
20
- ${G}▀████████▀${R}
21
- `;
4
+ import { deriveKey, computeKeyCheck } from './crypto.js';
5
+ import { isEncryptedResult, decryptResultPayload } from './envelope.js';
6
+ function requireApiKey(globalOpts) {
7
+ const apiKey = getApiKey(globalOpts.apiKey);
8
+ if (!apiKey) {
9
+ console.error('API key required for remote mode. Run `dokobot config` to set your key, or use `--local` for local mode without an API key.');
10
+ process.exit(1);
11
+ }
12
+ return apiKey;
13
+ }
22
14
  export function registerDokoCommands(program) {
23
15
  const doko = program
24
16
  .command('doko')
25
17
  .description('Manage doko devices');
26
- doko
27
- .command('connect')
28
- .description('Connect a Chrome browser via Chrome DevTools MCP')
29
- .option('--name <name>', 'Name for the doko')
30
- .option('--device-id <id>', 'Reuse an existing device ID')
31
- .option('--browser-url <url>', 'Connect to a running Chrome instance (e.g. http://127.0.0.1:9222)')
32
- .option('--mcp-args <args>', 'Extra arguments for chrome-devtools-mcp (comma-separated)')
33
- .action(async (options) => {
34
- const globalOpts = program.opts();
35
- if (globalOpts.verbose)
36
- setLogLevel('debug');
37
- await connectCommand(globalOpts, options);
38
- });
39
18
  doko
40
19
  .command('list')
41
20
  .description('List registered devices')
@@ -93,20 +72,51 @@ export function registerDokoCommands(program) {
93
72
  result = await client.readPage(readParams);
94
73
  }
95
74
  else {
96
- const apiKey = getApiKey(globalOpts.apiKey);
97
- if (!apiKey) {
98
- console.error('API key required. Run `dokobot config` first.');
99
- process.exit(1);
100
- }
75
+ const apiKey = requireApiKey(globalOpts);
101
76
  const serverUrl = getServerUrl(globalOpts.server);
102
77
  const client = new ServerClient(serverUrl, apiKey);
103
- result = await client.readPage({ ...readParams, deviceId: options.device });
78
+ const encKey = await resolveEncryptionKey(globalOpts, client);
79
+ const rawResult = await client.readPageRaw({ ...readParams, deviceId: options.device });
80
+ if (isEncryptedResult(rawResult)) {
81
+ if (!encKey) {
82
+ console.error('Error: Result is encrypted. Set DOKO_ENCRYPTION_PASSWORD or run `dokobot config` to set up encryption.');
83
+ process.exit(1);
84
+ }
85
+ const content = await decryptResultPayload(rawResult, encKey);
86
+ if (content.title)
87
+ console.log(`# ${content.title}\n`);
88
+ console.log(content.text ?? '');
89
+ if (rawResult.meta.canContinue && rawResult.meta.sessionId) {
90
+ console.error(`\nSession: ${rawResult.meta.sessionId} (use --session-id to continue)`);
91
+ }
92
+ }
93
+ else if (encKey) {
94
+ console.error('Warning: Encryption key is configured but received unencrypted result.');
95
+ console.error('Encryption may have been disabled on the browser extension. Verify your settings.');
96
+ console.error('Run `dokobot config` to clear the stored key if this is expected.');
97
+ process.exit(1);
98
+ }
99
+ else {
100
+ const data = rawResult?.data;
101
+ const inner = (data?.data ?? data);
102
+ if (inner) {
103
+ result = {
104
+ title: inner.trace?.title ?? inner.title ?? '',
105
+ text: inner.text ?? '',
106
+ url: inner.trace?.url ?? inner.url ?? readParams.url,
107
+ sessionId: inner.sessionId,
108
+ canContinue: inner.canContinue,
109
+ };
110
+ }
111
+ }
104
112
  }
105
- if (result.title)
106
- console.log(`# ${result.title}\n`);
107
- console.log(result.text);
108
- if (result.canContinue && result.sessionId) {
109
- console.error(`\nSession: ${result.sessionId} (use --session-id to continue)`);
113
+ if (result) {
114
+ if (result.title)
115
+ console.log(`# ${result.title}\n`);
116
+ console.log(result.text);
117
+ if (result.canContinue && result.sessionId) {
118
+ console.error(`\nSession: ${result.sessionId} (use --session-id to continue)`);
119
+ }
110
120
  }
111
121
  }
112
122
  catch (error) {
@@ -132,11 +142,7 @@ export function registerDokoCommands(program) {
132
142
  await client.closeSession(sessionId);
133
143
  }
134
144
  else {
135
- const apiKey = getApiKey(globalOpts.apiKey);
136
- if (!apiKey) {
137
- console.error('API key required. Run `dokobot config` first.');
138
- process.exit(1);
139
- }
145
+ const apiKey = requireApiKey(globalOpts);
140
146
  const serverUrl = getServerUrl(globalOpts.server);
141
147
  const client = new ServerClient(serverUrl, apiKey);
142
148
  await client.closeSession(sessionId);
@@ -156,11 +162,7 @@ export function registerDokoCommands(program) {
156
162
  const globalOpts = program.opts();
157
163
  if (globalOpts.verbose)
158
164
  setLogLevel('debug');
159
- const apiKey = getApiKey(globalOpts.apiKey);
160
- if (!apiKey) {
161
- console.error('API key required. Run `dokobot config` first.');
162
- process.exit(1);
163
- }
165
+ const apiKey = requireApiKey(globalOpts);
164
166
  const serverUrl = getServerUrl(globalOpts.server);
165
167
  const client = new ServerClient(serverUrl, apiKey);
166
168
  try {
@@ -182,162 +184,28 @@ export function registerDokoCommands(program) {
182
184
  }
183
185
  });
184
186
  }
185
- async function connectCommand(globalOpts, options) {
186
- console.log(BANNER);
187
- const serverUrl = getServerUrl(globalOpts.server);
188
- let deviceId = options.deviceId;
189
- let deviceName = options.name;
190
- let apiKey = getApiKey(globalOpts.apiKey);
191
- if (!apiKey) {
192
- if (deviceId) {
193
- const guideUrl = `${serverUrl}/guide?source=cli&deviceId=${deviceId}`;
194
- console.log(` No API key found. Opening setup guide...`);
195
- console.log(` ${D}${guideUrl}${R}`);
196
- console.log('');
197
- const { exec } = await import('child_process');
198
- exec(`open "${guideUrl}"`);
199
- apiKey = await input({ message: 'Paste your API key:' });
200
- if (!apiKey) {
201
- console.error('API key is required.');
202
- process.exit(1);
203
- }
204
- const config = loadConfig();
205
- saveConfig({ ...config, apiKey });
206
- console.log(' ✓ API key saved');
207
- }
208
- else {
209
- const { randomUUID } = await import('crypto');
210
- const preferredId = randomUUID();
211
- const guideUrl = `${serverUrl}/guide?source=cli&deviceId=${preferredId}`;
212
- console.log(` No API key found. Opening setup guide...`);
213
- console.log(` ${D}${guideUrl}${R}`);
214
- console.log('');
215
- console.log(' Follow the guide to complete the setup.');
216
- const { exec } = await import('child_process');
217
- exec(`open "${guideUrl}"`);
218
- process.exit(0);
219
- }
220
- }
221
- const serverClient = new ServerClient(serverUrl, apiKey);
222
- if (!deviceId && deviceName) {
223
- const existing = findDeviceByName(deviceName);
224
- if (existing) {
225
- deviceId = existing.id;
226
- }
227
- }
228
- if (!deviceId && !deviceName) {
229
- const devices = listDevices();
230
- const choices = [
231
- { name: '+ Create new doko', value: '__new__' },
232
- ...devices.map(d => ({ name: `${d.name} (${d.id})`, value: d.id })),
233
- ];
234
- const selected = await select({
235
- message: 'Choose a doko:',
236
- choices,
237
- });
238
- if (selected === '__new__') {
239
- deviceName = await input({
240
- message: 'Name your new doko:',
241
- default: 'My Chrome',
242
- });
243
- }
244
- else {
245
- deviceId = selected;
246
- const existing = devices.find(d => d.id === deviceId);
247
- deviceName = existing?.name;
248
- }
249
- }
250
- const mcpExtraArgs = options.mcpArgs ? options.mcpArgs.split(',') : [];
251
- const mcpClient = new McpClient();
252
- console.log(' Connecting to Chrome...');
253
- try {
254
- await mcpClient.connect({
255
- browserUrl: options.browserUrl,
256
- extraArgs: mcpExtraArgs,
257
- });
258
- }
259
- catch (error) {
260
- console.error('Failed to connect to Chrome DevTools MCP:', error instanceof Error ? error.message : error);
261
- process.exit(1);
262
- }
263
- let tools;
264
- try {
265
- tools = await mcpClient.listTools();
187
+ async function resolveEncryptionKey(globalOpts, client) {
188
+ const config = loadConfig();
189
+ if (config.encryptionKey) {
190
+ return Buffer.from(config.encryptionKey, 'base64');
266
191
  }
267
- catch (error) {
268
- console.error(' ✗ Failed to connect to Chrome DevTools MCP:', error instanceof Error ? error.message : error);
269
- await mcpClient.disconnect();
270
- process.exit(1);
271
- }
272
- try {
273
- const check = await mcpClient.callTool('list_pages', {});
274
- if (check.isError) {
275
- const msg = check.content?.[0]?.text ?? '';
276
- console.error(' ✗ Chrome is not reachable.');
277
- console.error('');
278
- console.error(' Please enable remote debugging in Chrome:');
279
- console.error(' 1. Open chrome://inspect/#remote-debugging');
280
- console.error(' 2. Check "Allow remote debugging for this browser instance"');
281
- console.error(' 3. Re-run this command');
282
- console.error('');
283
- console.error(` Detail: ${msg}`);
284
- await mcpClient.disconnect();
192
+ const password = globalOpts.password || process.env.DOKO_ENCRYPTION_PASSWORD;
193
+ if (password) {
194
+ const encConfig = await client.getEncryptionConfig();
195
+ if (!encConfig.enabled) {
196
+ console.error('Error: Encryption password provided but encryption is not enabled on the server. Enable encryption in the extension first.');
285
197
  process.exit(1);
286
198
  }
287
- console.log(` ✓ Connected to Chrome (${tools.length} tools available)`);
288
- }
289
- catch (error) {
290
- console.error(' ✗ Chrome health check failed:', error instanceof Error ? error.message : error);
291
- await mcpClient.disconnect();
292
- process.exit(1);
293
- }
294
- try {
295
- const result = await serverClient.connect({
296
- type: 'chrome',
297
- deviceId,
298
- name: deviceName,
299
- tools: [...tools, ...DOKO_TOOLS],
300
- });
301
- deviceId = result.deviceId;
302
- deviceName = result.name;
303
- saveDevice({
304
- id: result.deviceId,
305
- name: result.name,
306
- type: result.type,
307
- createdAt: Date.now(),
308
- });
309
- console.log(` ✓ Registered "${deviceName}" (${deviceId})`);
310
- }
311
- catch (error) {
312
- console.error('Registration failed:', error instanceof Error ? error.message : error);
313
- await mcpClient.disconnect();
314
- process.exit(1);
315
- }
316
- const executor = new Executor(mcpClient, serverUrl);
317
- const heartbeat = new Heartbeat(serverClient, deviceId);
318
- const statusLine = ` ${G}●${R} Listening for commands... (Ctrl+C to quit)`;
319
- const poller = new CommandPoller(serverClient, executor, deviceId, {
320
- onReconnect: () => process.stdout.write(statusLine),
321
- });
322
- heartbeat.start();
323
- poller.start();
324
- const updateInfo = getUpdateResult();
325
- if (updateInfo) {
326
- console.error(formatUpdateNotification(updateInfo));
199
+ if (encConfig.salt) {
200
+ const key = await deriveKey(password, encConfig.salt);
201
+ const check = computeKeyCheck(key);
202
+ if (check !== encConfig.keyCheck) {
203
+ console.error('Error: Encryption password does not match. Check your password or reconfigure with `dokobot config`.');
204
+ process.exit(1);
205
+ }
206
+ return key;
207
+ }
327
208
  }
328
- console.log('');
329
- process.stdout.write(statusLine);
330
- const shutdown = async () => {
331
- process.stdout.write(`\r\x1b[2K`);
332
- console.log(' Shutting down...');
333
- poller.stop();
334
- heartbeat.stop();
335
- await serverClient.disconnect(deviceId);
336
- await mcpClient.disconnect();
337
- process.exit(0);
338
- };
339
- process.on('SIGINT', shutdown);
340
- process.on('SIGTERM', shutdown);
341
- await new Promise(() => { });
209
+ return undefined;
342
210
  }
343
211
  //# sourceMappingURL=doko.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doko.js","sourceRoot":"","sources":["../../src/doko.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doko.js","sourceRoot":"","sources":["../../src/doko.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type FlattenedJWE } from './crypto.js';
2
+ export interface EncryptionMeta {
3
+ success: boolean;
4
+ error?: string;
5
+ textLength: number;
6
+ elapsedMs?: number;
7
+ rounds?: number;
8
+ screens?: number;
9
+ sessionId?: string;
10
+ canContinue?: boolean;
11
+ stopReason?: string;
12
+ }
13
+ export interface DecryptedContent {
14
+ title?: string;
15
+ text?: string;
16
+ chunks?: unknown[];
17
+ screenshots?: string[];
18
+ containerTree?: unknown[];
19
+ }
20
+ export interface EncryptedResult {
21
+ meta: EncryptionMeta;
22
+ payload: FlattenedJWE;
23
+ }
24
+ export declare function isEncryptedResult(result: unknown): result is EncryptedResult;
25
+ export declare function buildEncryptedResult(rawResult: Record<string, unknown>, key: Buffer, kid: number): Promise<EncryptedResult>;
26
+ export declare function decryptResultPayload(result: EncryptedResult, key: Buffer): Promise<DecryptedContent>;
@@ -0,0 +1,43 @@
1
+ import { encrypt, decrypt, isJWE } from './crypto.js';
2
+ export function isEncryptedResult(result) {
3
+ if (!result || typeof result !== 'object')
4
+ return false;
5
+ const r = result;
6
+ return r.meta !== undefined && isJWE(r.payload);
7
+ }
8
+ export async function buildEncryptedResult(rawResult, key, kid) {
9
+ const innerData = extractInnerData(rawResult);
10
+ const meta = {
11
+ success: rawResult.success ?? true,
12
+ error: rawResult.error,
13
+ textLength: innerData?.text?.length ?? 0,
14
+ elapsedMs: innerData?.stats?.elapsedMs,
15
+ rounds: innerData?.stats?.rounds,
16
+ screens: innerData?.stats?.screens,
17
+ sessionId: innerData?.sessionId,
18
+ canContinue: innerData?.canContinue,
19
+ stopReason: innerData?.stats?.stopReason,
20
+ };
21
+ const sensitiveContent = {
22
+ title: innerData?.trace?.title,
23
+ text: innerData?.text,
24
+ chunks: innerData?.chunks,
25
+ screenshots: innerData?.screenshots,
26
+ containerTree: innerData?.containerTree,
27
+ };
28
+ const plaintext = Buffer.from(JSON.stringify(sensitiveContent));
29
+ const payload = await encrypt(plaintext, key, kid);
30
+ return { meta, payload };
31
+ }
32
+ export async function decryptResultPayload(result, key) {
33
+ const plaintext = await decrypt(result.payload, key);
34
+ return JSON.parse(plaintext.toString());
35
+ }
36
+ function extractInnerData(rawResult) {
37
+ const data = rawResult.data;
38
+ if (!data)
39
+ return undefined;
40
+ const inner = data.data;
41
+ return inner ?? data;
42
+ }
43
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AA2BzE,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAkC,EAClC,GAAW,EACX,GAAW;IAEX,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAmB;QAC3B,OAAO,EAAG,SAAS,CAAC,OAAmB,IAAI,IAAI;QAC/C,KAAK,EAAE,SAAS,CAAC,KAA2B;QAC5C,UAAU,EAAG,SAAS,EAAE,IAAe,EAAE,MAAM,IAAI,CAAC;QACpD,SAAS,EAAG,SAAS,EAAE,KAAiC,EAAE,SAA+B;QACzF,MAAM,EAAG,SAAS,EAAE,KAAiC,EAAE,MAA4B;QACnF,OAAO,EAAG,SAAS,EAAE,KAAiC,EAAE,OAA6B;QACrF,SAAS,EAAE,SAAS,EAAE,SAA+B;QACrD,WAAW,EAAE,SAAS,EAAE,WAAkC;QAC1D,UAAU,EAAG,SAAS,EAAE,KAAiC,EAAE,UAAgC;KAC5F,CAAC;IAEF,MAAM,gBAAgB,GAAqB;QACzC,KAAK,EAAG,SAAS,EAAE,KAAiC,EAAE,KAA2B;QACjF,IAAI,EAAE,SAAS,EAAE,IAA0B;QAC3C,MAAM,EAAE,SAAS,EAAE,MAA+B;QAClD,WAAW,EAAE,SAAS,EAAE,WAAmC;QAC3D,aAAa,EAAE,SAAS,EAAE,aAAsC;KACjE,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAuB,EACvB,GAAW;IAEX,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAqB,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAkC;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,IAA2C,CAAC;IACnE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAA2C,CAAC;IAC/D,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function installSkill(options: {
2
+ serverUrl: string;
3
+ outputPath?: string;
4
+ agent?: string;
5
+ }): Promise<void>;
@@ -0,0 +1,127 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { select, input } from '@inquirer/prompts';
5
+ const SKILL_NAME = 'doko';
6
+ const CUSTOM_CHOICE = '__custom__';
7
+ function allAgents() {
8
+ const home = os.homedir();
9
+ return [
10
+ {
11
+ name: 'Claude Code',
12
+ dir: path.join(home, '.claude', 'skills', SKILL_NAME),
13
+ file: 'SKILL.md',
14
+ },
15
+ {
16
+ name: 'OpenClaw',
17
+ dir: path.join(home, '.openclaw', 'skills', SKILL_NAME),
18
+ file: 'SKILL.md',
19
+ },
20
+ {
21
+ name: 'Windsurf',
22
+ dir: path.join(home, '.codeium', 'windsurf', 'skills', SKILL_NAME),
23
+ file: 'SKILL.md',
24
+ },
25
+ {
26
+ name: 'Codex',
27
+ dir: path.join(home, '.codex', 'skills', SKILL_NAME),
28
+ file: 'SKILL.md',
29
+ },
30
+ ];
31
+ }
32
+ function detectInstalled() {
33
+ const markers = {
34
+ 'Claude Code': path.join(os.homedir(), '.claude'),
35
+ 'OpenClaw': path.join(os.homedir(), '.openclaw'),
36
+ 'Windsurf': path.join(os.homedir(), '.codeium', 'windsurf'),
37
+ 'Codex': path.join(os.homedir(), '.codex'),
38
+ };
39
+ return allAgents().filter(a => fs.existsSync(markers[a.name]));
40
+ }
41
+ const AGENT_ALIASES = {
42
+ 'claude-code': 'Claude Code',
43
+ 'claude': 'Claude Code',
44
+ 'openclaw': 'OpenClaw',
45
+ 'windsurf': 'Windsurf',
46
+ 'codex': 'Codex',
47
+ };
48
+ function resolveAgentByName(name) {
49
+ const normalized = AGENT_ALIASES[name.toLowerCase()];
50
+ if (!normalized)
51
+ return undefined;
52
+ return allAgents().find(a => a.name === normalized);
53
+ }
54
+ export async function installSkill(options) {
55
+ const skillUrl = `${options.serverUrl}/api/tools/skill`;
56
+ if (options.outputPath) {
57
+ const resolved = path.join(resolvePath(options.outputPath), SKILL_NAME, 'SKILL.md');
58
+ fs.mkdirSync(path.dirname(resolved), { recursive: true });
59
+ await downloadTo(skillUrl, resolved);
60
+ console.log(`Skill installed to ${resolved}`);
61
+ return;
62
+ }
63
+ if (options.agent) {
64
+ const target = resolveAgentByName(options.agent);
65
+ if (!target) {
66
+ const valid = Object.keys(AGENT_ALIASES).join(', ');
67
+ console.error(`Unknown agent: ${options.agent}. Valid options: ${valid}`);
68
+ process.exit(1);
69
+ }
70
+ fs.mkdirSync(target.dir, { recursive: true });
71
+ const dest = path.join(target.dir, target.file);
72
+ await downloadTo(skillUrl, dest);
73
+ console.log(`Skill installed for ${target.name}: ${dest}`);
74
+ return;
75
+ }
76
+ const installed = detectInstalled();
77
+ const agents = installed.length > 0 ? installed : allAgents();
78
+ const choices = [
79
+ ...agents.map(a => ({
80
+ name: `${a.name} → ${shortenHome(path.join(a.dir, a.file))}`,
81
+ value: a.name,
82
+ })),
83
+ { name: 'Custom path', value: CUSTOM_CHOICE },
84
+ ];
85
+ const chosen = await select({
86
+ message: 'Install skill for:',
87
+ choices,
88
+ });
89
+ if (chosen === CUSTOM_CHOICE) {
90
+ const raw = await input({
91
+ message: 'Enter skills directory:',
92
+ default: './',
93
+ });
94
+ const resolved = path.join(resolvePath(raw), SKILL_NAME, 'SKILL.md');
95
+ fs.mkdirSync(path.dirname(resolved), { recursive: true });
96
+ await downloadTo(skillUrl, resolved);
97
+ console.log(`Skill installed to ${resolved}`);
98
+ return;
99
+ }
100
+ const target = agents.find(a => a.name === chosen);
101
+ fs.mkdirSync(target.dir, { recursive: true });
102
+ const dest = path.join(target.dir, target.file);
103
+ await downloadTo(skillUrl, dest);
104
+ console.log(`Skill installed for ${target.name}: ${dest}`);
105
+ }
106
+ function resolvePath(p) {
107
+ if (p.startsWith('~')) {
108
+ return path.join(os.homedir(), p.slice(1));
109
+ }
110
+ return path.resolve(p);
111
+ }
112
+ function shortenHome(p) {
113
+ const home = os.homedir();
114
+ return p.startsWith(home) ? '~' + p.slice(home.length) : p;
115
+ }
116
+ async function downloadTo(url, dest) {
117
+ const res = await fetch(url);
118
+ if (!res.ok) {
119
+ throw new Error(`Failed to download skill: ${res.status} ${res.statusText}`);
120
+ }
121
+ const text = await res.text();
122
+ if (!text.startsWith('---')) {
123
+ throw new Error('Downloaded content is not a valid skill file');
124
+ }
125
+ fs.writeFileSync(dest, text);
126
+ }
127
+ //# sourceMappingURL=install-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/install-skill.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare class LocalClient {
7
7
  screens?: number;
8
8
  timeout?: number;
9
9
  reuseTab?: boolean;
10
+ sessionId?: string;
10
11
  }): Promise<ReadPageResult>;
11
12
  closeSession(sessionId: string): Promise<void>;
12
13
  status(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/local-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/local-client.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,8 @@
1
- interface McpTool {
2
- name: string;
3
- description?: string;
4
- inputSchema?: Record<string, unknown>;
5
- }
6
- interface RegisterResponse {
7
- deviceId: string;
8
- name: string;
9
- type: string;
10
- }
11
1
  export declare class ServerClient {
12
2
  private serverUrl;
13
3
  private apiKey;
14
4
  constructor(serverUrl: string, apiKey: string);
15
5
  private request;
16
- connect(params: {
17
- name?: string;
18
- type: 'chrome';
19
- deviceId?: string;
20
- tools?: McpTool[];
21
- }): Promise<RegisterResponse>;
22
- disconnect(deviceId: string): Promise<void>;
23
- heartbeat(deviceId: string): Promise<void>;
24
- pollCommand(deviceId: string, signal?: AbortSignal): Promise<Record<string, unknown> | null>;
25
- sendResult(requestId: string, result: Record<string, unknown>): Promise<void>;
26
6
  readPage(params: {
27
7
  url: string;
28
8
  screens?: number;
@@ -33,6 +13,21 @@ export declare class ServerClient {
33
13
  sessionId?: string;
34
14
  }): Promise<ReadPageResult>;
35
15
  closeSession(sessionId: string): Promise<void>;
16
+ readPageRaw(params: {
17
+ url: string;
18
+ screens?: number;
19
+ timeout?: number;
20
+ reuseTab?: boolean;
21
+ deviceId?: string;
22
+ format?: string;
23
+ sessionId?: string;
24
+ }): Promise<Record<string, unknown>>;
25
+ getEncryptionConfig(): Promise<{
26
+ enabled: boolean;
27
+ salt?: string;
28
+ keyCheck?: string;
29
+ kid?: number;
30
+ }>;
36
31
  search(params: {
37
32
  query: string;
38
33
  num?: number;
@@ -53,4 +48,3 @@ export interface SearchResult {
53
48
  position: number;
54
49
  }>;
55
50
  }
56
- export {};
@@ -1,4 +1,3 @@
1
- import { logger } from './logger.js';
2
1
  export class ServerClient {
3
2
  serverUrl;
4
3
  apiKey;
@@ -30,69 +29,6 @@ export class ServerClient {
30
29
  clearTimeout(timer);
31
30
  }
32
31
  }
33
- async connect(params) {
34
- const res = await this.request('/api/dokos/connect', {
35
- method: 'POST',
36
- body: JSON.stringify(params),
37
- });
38
- if (!res.ok) {
39
- const body = await res.json().catch(() => ({}));
40
- throw new Error(`Registration failed (${res.status}): ${body.error || res.statusText}`);
41
- }
42
- return res.json();
43
- }
44
- async disconnect(deviceId) {
45
- try {
46
- await this.request('/api/dokos/disconnect', {
47
- method: 'POST',
48
- body: JSON.stringify({ deviceId }),
49
- });
50
- }
51
- catch { /* best effort */ }
52
- }
53
- async heartbeat(deviceId) {
54
- const res = await this.request('/api/devices/heartbeat', {
55
- method: 'POST',
56
- body: JSON.stringify({ deviceId }),
57
- });
58
- if (!res.ok) {
59
- logger.warn(`Heartbeat failed: ${res.status}`);
60
- }
61
- }
62
- async pollCommand(deviceId, signal) {
63
- const res = await this.request(`/api/commands/poll?deviceId=${encodeURIComponent(deviceId)}`, {
64
- method: 'GET',
65
- signal,
66
- timeoutMs: 90_000,
67
- });
68
- if (res.status === 204)
69
- return null;
70
- if (!res.ok) {
71
- throw new Error(`Poll failed: ${res.status}`);
72
- }
73
- return res.json();
74
- }
75
- async sendResult(requestId, result) {
76
- const maxRetries = 3;
77
- for (let attempt = 0; attempt < maxRetries; attempt++) {
78
- try {
79
- const res = await this.request(`/api/commands/${requestId}/result`, {
80
- method: 'POST',
81
- body: JSON.stringify(result),
82
- });
83
- if (res.ok)
84
- return;
85
- logger.warn(`sendResult HTTP error: ${res.status}, attempt ${attempt + 1}`);
86
- }
87
- catch (error) {
88
- logger.error(`sendResult failed, attempt ${attempt + 1}`, error);
89
- }
90
- if (attempt < maxRetries - 1) {
91
- await new Promise(r => setTimeout(r, 300 * (attempt + 1)));
92
- }
93
- }
94
- logger.error(`sendResult failed after all retries for ${requestId}`);
95
- }
96
32
  async readPage(params) {
97
33
  const res = await this.request('/api/tools/read', {
98
34
  method: 'POST',
@@ -123,6 +59,29 @@ export class ServerClient {
123
59
  throw new Error(`Close session failed (${res.status}): ${body.error || res.statusText}`);
124
60
  }
125
61
  }
62
+ async readPageRaw(params) {
63
+ const res = await this.request('/api/tools/read', {
64
+ method: 'POST',
65
+ body: JSON.stringify(params),
66
+ timeoutMs: ((params.timeout ?? 60) + 30) * 1000,
67
+ });
68
+ if (!res.ok) {
69
+ const body = await res.json().catch(() => ({}));
70
+ throw new Error(`Read failed (${res.status}): ${body.error || res.statusText}`);
71
+ }
72
+ return res.json();
73
+ }
74
+ async getEncryptionConfig() {
75
+ try {
76
+ const res = await this.request('/api/encryption', { method: 'GET' });
77
+ if (!res.ok)
78
+ return { enabled: false };
79
+ return res.json();
80
+ }
81
+ catch {
82
+ return { enabled: false };
83
+ }
84
+ }
126
85
  async search(params) {
127
86
  const res = await this.request('/api/tools/search', {
128
87
  method: 'POST',
@@ -1 +1 @@
1
- {"version":3,"file":"server-client.js","sourceRoot":"","sources":["../../src/server-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-client.js","sourceRoot":"","sources":["../../src/server-client.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,20 @@ export function getCurrentVersion() {
7
7
  return cachedVersion;
8
8
  try {
9
9
  const thisDir = path.dirname(fileURLToPath(import.meta.url));
10
- const pkgPath = path.resolve(thisDir, '../../package.json');
11
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
12
- cachedVersion = pkg.version;
10
+ // Walk up to find cli's package.json (works for both src/ and dist/src/)
11
+ let dir = thisDir;
12
+ while (dir !== path.dirname(dir)) {
13
+ const candidate = path.join(dir, 'package.json');
14
+ if (fs.existsSync(candidate)) {
15
+ const pkg = JSON.parse(fs.readFileSync(candidate, 'utf-8'));
16
+ if (pkg.name === '@dokobot/cli') {
17
+ cachedVersion = pkg.version;
18
+ return cachedVersion;
19
+ }
20
+ }
21
+ dir = path.dirname(dir);
22
+ }
23
+ cachedVersion = '0.0.0';
13
24
  }
14
25
  catch {
15
26
  cachedVersion = '0.0.0';
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,IAAI,aAAiC,CAAC;AAEtC,MAAM,UAAU,iBAAiB;IAC/B,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,aAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,IAAI,aAAiC,CAAC;AAEtC,MAAM,UAAU,iBAAiB;IAC/B,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,yEAAyE;QACzE,IAAI,GAAG,GAAG,OAAO,CAAC;QAClB,OAAO,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAChC,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;oBAC5B,OAAO,aAAc,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,aAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dokobot/cli",
3
- "version": "2.1.1",
3
+ "version": "2.3.0",
4
4
  "description": "Dokobot CLI - Connect your Chrome browser to AI agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -31,6 +31,8 @@
31
31
  "@modelcontextprotocol/sdk": "^1.0.0",
32
32
  "commander": "^12.0.0",
33
33
  "inquirer": "^12.0.0",
34
+ "jose": "^6.2.2",
35
+ "scrypt-js": "^3.0.1",
34
36
  "undici": "^7"
35
37
  },
36
38
  "devDependencies": {