@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 +20 -3
- package/dist/src/cli.js +60 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.d.ts +2 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/crypto.d.ts +9 -0
- package/dist/src/crypto.js +55 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/doko.js +68 -7
- package/dist/src/doko.js.map +1 -1
- package/dist/src/envelope.d.ts +26 -0
- package/dist/src/envelope.js +43 -0
- package/dist/src/envelope.js.map +1 -0
- package/dist/src/local-client.d.ts +1 -0
- package/dist/src/local-client.js.map +1 -1
- package/dist/src/server-client.d.ts +15 -0
- package/dist/src/server-client.js +23 -0
- package/dist/src/server-client.js.map +1 -1
- package/dist/src/version.js +14 -3
- package/dist/src/version.js.map +1 -1
- package/package.json +3 -1
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
package/dist/src/cli.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.d.ts
CHANGED
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAgBrD,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAe,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAkB;IAC1C,OAAO,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,YAAqB;IAChD,OAAO,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,EAAE,CAAC,SAAS,IAAI,oBAAoB,CAAC;AACvG,CAAC"}
|
|
@@ -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
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
package/dist/src/doko.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doko.js","sourceRoot":"","sources":["../../src/doko.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,SAAS,EAAE,YAAY,
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/local-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAGvC,MAAM,OAAO,WAAW;IACd,KAAK,CAAO;IAEpB,YAAY,UAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,
|
|
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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"}
|
package/dist/src/version.js
CHANGED
|
@@ -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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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';
|
package/dist/src/version.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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": {
|