@dokobot/cli 2.2.0 → 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
 
@@ -106,7 +110,7 @@ dokobot install-skill --agent codex # Install for Codex
106
110
  dokobot install-skill -o ./my-skills # Custom skills directory
107
111
  ```
108
112
 
109
- Supported agents: `claude-code`, `openclaw`, `windsurf`, `codex`.
113
+ Supported agents: `claude-code` (or `claude`), `openclaw`, `windsurf`, `codex`.
110
114
 
111
115
  ### `doko list` / `doko remove <id>`
112
116
 
@@ -115,15 +119,28 @@ List or remove registered doko devices.
115
119
  ### Other commands
116
120
 
117
121
  ```bash
118
- dokobot config # Configure API key and server URL
122
+ dokobot config # Configure API key, server URL, and encryption
119
123
  dokobot update # Check for updates
120
124
  ```
121
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
+
122
138
  ## Global Options
123
139
 
124
140
  | Option | Description |
125
141
  |--------|-------------|
126
142
  | `--api-key <key>` | API key (or set `DOKO_API_KEY` env) |
143
+ | `--password <password>` | Encryption password (or set `DOKO_ENCRYPTION_PASSWORD` env) |
127
144
  | `--server <url>` | Server URL (default: `https://dokobot.ai`) |
128
145
  | `--verbose` | Enable verbose logging |
129
146
 
package/dist/src/cli.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { Command } from 'commander';
2
- import { input } from '@inquirer/prompts';
2
+ import { input, password as passwordPrompt } from '@inquirer/prompts';
3
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
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
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,6 +1,8 @@
1
1
  import { ServerClient } from './server-client.js';
2
- import { getApiKey, getServerUrl, listDevices, removeDevice, } from './config.js';
2
+ import { getApiKey, getServerUrl, loadConfig, listDevices, removeDevice, } from './config.js';
3
3
  import { setLogLevel } from './logger.js';
4
+ import { deriveKey, computeKeyCheck } from './crypto.js';
5
+ import { isEncryptedResult, decryptResultPayload } from './envelope.js';
4
6
  function requireApiKey(globalOpts) {
5
7
  const apiKey = getApiKey(globalOpts.apiKey);
6
8
  if (!apiKey) {
@@ -73,13 +75,48 @@ export function registerDokoCommands(program) {
73
75
  const apiKey = requireApiKey(globalOpts);
74
76
  const serverUrl = getServerUrl(globalOpts.server);
75
77
  const client = new ServerClient(serverUrl, apiKey);
76
- 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
+ }
77
112
  }
78
- if (result.title)
79
- console.log(`# ${result.title}\n`);
80
- console.log(result.text);
81
- if (result.canContinue && result.sessionId) {
82
- 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
+ }
83
120
  }
84
121
  }
85
122
  catch (error) {
@@ -147,4 +184,28 @@ export function registerDokoCommands(program) {
147
184
  }
148
185
  });
149
186
  }
187
+ async function resolveEncryptionKey(globalOpts, client) {
188
+ const config = loadConfig();
189
+ if (config.encryptionKey) {
190
+ return Buffer.from(config.encryptionKey, 'base64');
191
+ }
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.');
197
+ process.exit(1);
198
+ }
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
+ }
208
+ }
209
+ return undefined;
210
+ }
150
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"}
@@ -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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"}
@@ -13,6 +13,21 @@ export declare class ServerClient {
13
13
  sessionId?: string;
14
14
  }): Promise<ReadPageResult>;
15
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
+ }>;
16
31
  search(params: {
17
32
  query: string;
18
33
  num?: number;
@@ -59,6 +59,29 @@ export class ServerClient {
59
59
  throw new Error(`Close session failed (${res.status}): ${body.error || res.statusText}`);
60
60
  }
61
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
+ }
62
85
  async search(params) {
63
86
  const res = await this.request('/api/tools/search', {
64
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.2.0",
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": {