@ravi-hq/ravi 0.6.3 → 0.7.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.
Files changed (60) hide show
  1. package/README.md +14 -9
  2. package/dist/auth.d.ts +31 -28
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +28 -51
  5. package/dist/auth.js.map +1 -1
  6. package/dist/bin/ravi-secrets.d.ts +1 -2
  7. package/dist/bin/ravi-secrets.d.ts.map +1 -1
  8. package/dist/bin/ravi-secrets.js +7 -34
  9. package/dist/bin/ravi-secrets.js.map +1 -1
  10. package/dist/channels/email-trusted.d.ts +2 -0
  11. package/dist/channels/email-trusted.d.ts.map +1 -1
  12. package/dist/channels/email-trusted.js +18 -51
  13. package/dist/channels/email-trusted.js.map +1 -1
  14. package/dist/channels/email.d.ts +2 -0
  15. package/dist/channels/email.d.ts.map +1 -1
  16. package/dist/channels/email.js +18 -60
  17. package/dist/channels/email.js.map +1 -1
  18. package/dist/cli.d.ts +12 -5
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +178 -307
  21. package/dist/cli.js.map +1 -1
  22. package/dist/client.d.ts +13 -28
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +22 -63
  25. package/dist/client.js.map +1 -1
  26. package/dist/config.d.ts +1 -1
  27. package/dist/config.js +1 -1
  28. package/dist/index.d.ts +13 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +52 -45
  31. package/dist/index.js.map +1 -1
  32. package/dist/polling.d.ts +2 -12
  33. package/dist/polling.d.ts.map +1 -1
  34. package/dist/polling.js +2 -36
  35. package/dist/polling.js.map +1 -1
  36. package/dist/tools/identity.d.ts +0 -7
  37. package/dist/tools/identity.d.ts.map +1 -1
  38. package/dist/tools/identity.js.map +1 -1
  39. package/dist/tools/passwords.d.ts +1 -7
  40. package/dist/tools/passwords.d.ts.map +1 -1
  41. package/dist/tools/passwords.js +18 -58
  42. package/dist/tools/passwords.js.map +1 -1
  43. package/dist/tools/secrets.d.ts +1 -3
  44. package/dist/tools/secrets.d.ts.map +1 -1
  45. package/dist/tools/secrets.js +11 -37
  46. package/dist/tools/secrets.js.map +1 -1
  47. package/dist/types.d.ts +31 -6
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +1 -2
  50. package/dist/types.js.map +1 -1
  51. package/dist/utils.d.ts +0 -6
  52. package/dist/utils.d.ts.map +1 -1
  53. package/dist/utils.js +0 -18
  54. package/dist/utils.js.map +1 -1
  55. package/openclaw.plugin.json +1 -0
  56. package/package.json +1 -5
  57. package/dist/crypto.d.ts +0 -156
  58. package/dist/crypto.d.ts.map +0 -1
  59. package/dist/crypto.js +0 -350
  60. package/dist/crypto.js.map +0 -1
package/dist/cli.js CHANGED
@@ -1,104 +1,45 @@
1
- import { execFile } from "node:child_process";
2
- import { platform } from "node:os";
3
1
  import { RAVI_API_URL } from "./config.js";
4
- import { RaviClient, RaviApiError } from "./client.js";
5
- import { loadAuth, saveAuth, updateAuth, saveConfig, saveRecoveryKey } from "./auth.js";
6
- /** Try to open a URL in the user's default browser. Non-fatal on failure. */
7
- function openBrowser(url) {
8
- const cmd = platform() === "darwin" ? "open" :
9
- platform() === "win32" ? "cmd" :
10
- "xdg-open";
11
- const args = platform() === "win32" ? ["/c", "start", url] : [url];
12
- execFile(cmd, args, () => {
13
- // Silently ignore errors — user can open the URL manually
14
- });
15
- }
2
+ import { RaviClient } from "./client.js";
3
+ import { loadAuth, saveAuth, saveConfig, loadConfig } from "./auth.js";
4
+ import { getRaviRuntime } from "./runtime.js";
16
5
  /**
17
- * Try to set an OpenClaw config value via `openclaw config set`.
18
- * Returns true on success, false on failure (command not found, schema error, etc.).
6
+ * Auto-configure OpenClaw via the runtime config API.
7
+ * Sets identityUuid and secrets provider in the gateway config.
8
+ * Returns true on success, false if runtime is not available.
19
9
  */
20
- function openclawConfigSet(path, value) {
21
- return new Promise((resolve) => {
22
- execFile("openclaw", ["config", "set", path, value], (err) => {
23
- resolve(!err);
24
- });
25
- });
26
- }
27
- /**
28
- * Prompt the user for a 6-digit PIN via stdin (hidden input).
29
- * Matches the CLI's interactive PIN prompt behavior.
30
- */
31
- async function promptPIN(prompt) {
32
- return new Promise((resolve, reject) => {
33
- process.stderr.write(prompt);
34
- const stdin = process.stdin;
35
- const wasRaw = stdin.isRaw;
36
- if (stdin.isTTY && stdin.setRawMode) {
37
- stdin.setRawMode(true);
38
- }
39
- stdin.resume();
40
- let pin = "";
41
- const timeout = setTimeout(() => {
42
- cleanup();
43
- reject(new Error("PIN prompt timed out — no input received within 60 seconds."));
44
- }, 60_000);
45
- const cleanup = () => {
46
- clearTimeout(timeout);
47
- if (stdin.isTTY && stdin.setRawMode)
48
- stdin.setRawMode(wasRaw ?? false);
49
- stdin.removeListener("data", onData);
50
- stdin.removeListener("end", onEnd);
51
- stdin.pause();
52
- };
53
- const onEnd = () => {
54
- cleanup();
55
- reject(new Error("stdin closed — cannot read PIN in non-interactive mode."));
56
- };
57
- const onData = (key) => {
58
- const ch = key.toString();
59
- if (ch === "\r" || ch === "\n") {
60
- cleanup();
61
- process.stderr.write("\n");
62
- resolve(pin);
63
- }
64
- else if (ch === "\x03") {
65
- // Ctrl+C
66
- cleanup();
67
- reject(new Error("Cancelled"));
68
- }
69
- else if (ch === "\x7f" || ch === "\b") {
70
- // Backspace
71
- pin = pin.slice(0, -1);
72
- }
73
- else if (/^\d$/.test(ch)) {
74
- pin += ch;
75
- }
76
- };
77
- stdin.on("data", onData);
78
- stdin.on("end", onEnd);
79
- });
80
- }
81
- /**
82
- * Prompt for PIN with choose + confirm (first-time setup),
83
- * or just enter PIN (returning user). Validates 6-digit format.
84
- */
85
- async function promptAndConfirmPIN() {
86
- const pin = await promptPIN("Choose a 6-digit encryption PIN: ");
87
- if (!/^\d{6}$/.test(pin)) {
88
- throw new Error("PIN must be exactly 6 digits.");
10
+ async function autoConfigureOpenClaw(identityUuid) {
11
+ let runtime;
12
+ try {
13
+ runtime = getRaviRuntime();
89
14
  }
90
- const confirm = await promptPIN("Confirm PIN: ");
91
- if (pin !== confirm) {
92
- throw new Error("PINs do not match.");
15
+ catch {
16
+ return false;
93
17
  }
94
- return pin;
95
- }
96
- async function promptExistingPIN() {
97
- const pin = await promptPIN("Enter your 6-digit encryption PIN: ");
98
- if (!/^\d{6}$/.test(pin)) {
99
- throw new Error("PIN must be exactly 6 digits.");
18
+ if (!runtime?.config)
19
+ return false;
20
+ try {
21
+ const cfg = runtime.config.loadConfig();
22
+ const plugins = (cfg.plugins ?? {});
23
+ const entries = (plugins.entries ?? {});
24
+ const ravi = (entries.ravi ?? {});
25
+ const raviConfig = (ravi.config ?? {});
26
+ raviConfig.identityUuid = identityUuid;
27
+ ravi.config = raviConfig;
28
+ entries.ravi = ravi;
29
+ plugins.entries = entries;
30
+ cfg.plugins = plugins;
31
+ // Set secrets provider
32
+ const secrets = (cfg.secrets ?? {});
33
+ const providers = (secrets.providers ?? {});
34
+ providers.ravi = { source: "exec", command: "ravi-secrets" };
35
+ secrets.providers = providers;
36
+ cfg.secrets = secrets;
37
+ await runtime.config.writeConfigFile(cfg);
38
+ return true;
39
+ }
40
+ catch {
41
+ return false;
100
42
  }
101
- return pin;
102
43
  }
103
44
  /**
104
45
  * Prompt the user to choose from a numbered list via stdin.
@@ -142,8 +83,7 @@ async function promptChoice(prompt, count) {
142
83
  });
143
84
  }
144
85
  /**
145
- * Run the full device-code authentication flow: initiate → poll → encryption
146
- * setup → save credentials. Does NOT select an identity or configure OpenClaw.
86
+ * Run the full device-code authentication flow: initiate → poll → save credentials.
147
87
  */
148
88
  export async function performLogin() {
149
89
  const apiUrl = RAVI_API_URL;
@@ -162,10 +102,8 @@ export async function performLogin() {
162
102
  const url = new URL(data.verification_uri);
163
103
  url.searchParams.set("user_code", data.user_code);
164
104
  const verifyUrl = url.toString();
165
- openBrowser(verifyUrl);
166
105
  process.stderr.write(`\nTo authenticate, visit: ${verifyUrl}\n`);
167
- process.stderr.write(`Code: ${data.user_code}\n`);
168
- process.stderr.write(`(Attempting to open browser automatically)\n\n`);
106
+ process.stderr.write(`Code: ${data.user_code}\n\n`);
169
107
  process.stderr.write(`Waiting for authorization...\n`);
170
108
  // Step 3: Poll for token until authorized or expired
171
109
  const intervalMs = (data.interval || 5) * 1000;
@@ -192,100 +130,16 @@ export async function performLogin() {
192
130
  consecutiveNetworkErrors = 0;
193
131
  if (tokenResponse.ok) {
194
132
  const tokenData = (await tokenResponse.json());
195
- const client = new RaviClient({ apiUrl, token: tokenData.access });
133
+ const client = new RaviClient({ apiUrl, apiKey: tokenData.management_key });
196
134
  process.stderr.write(`\nAuthenticated as ${tokenData.user.email}\n\n`);
197
- // Build auth.json — tokens first, encryption keys added below
198
135
  const authData = {
199
- access_token: tokenData.access,
200
- refresh_token: tokenData.refresh,
136
+ management_key: tokenData.management_key,
201
137
  user_email: tokenData.user.email,
202
138
  };
203
- // Step 4: Encryption setup derive keypair and store in auth.json
204
- let meta = null;
205
- try {
206
- meta = await client.getEncryptionMeta();
207
- }
208
- catch (err) {
209
- const msg = err instanceof Error ? err.message : String(err);
210
- process.stderr.write(`WARNING: Could not check encryption status: ${msg}\n\n`);
211
- }
212
- if (meta && !meta.public_key) {
213
- // First-time setup — prompt for PIN, derive keypair, store keys
214
- try {
215
- const pin = await promptAndConfirmPIN();
216
- const { setupEncryption } = await import("./crypto.js");
217
- const setup = await setupEncryption(pin);
218
- const recoveryPath = saveRecoveryKey(setup.recoveryKey);
219
- await client.updateEncryptionMeta({
220
- salt: setup.salt,
221
- public_key: setup.publicKey,
222
- verifier: setup.verifier,
223
- });
224
- // Store derived keypair in auth.json (returned by setupEncryption)
225
- const { bytesToBase64 } = await import("./crypto.js");
226
- authData.pin_salt = setup.salt;
227
- authData.public_key = setup.publicKey;
228
- authData.private_key = bytesToBase64(setup.keyPair.secretKey);
229
- process.stderr.write(`E2E encryption set up successfully!\n`);
230
- process.stderr.write(`Recovery key saved to ${recoveryPath} — back this up!\n\n`);
231
- }
232
- catch (err) {
233
- if (err instanceof Error && err.message === "Cancelled")
234
- throw err;
235
- const msg = err instanceof Error ? err.message : String(err);
236
- process.stderr.write(`PIN setup skipped: ${msg}\n`);
237
- process.stderr.write(`Run 'openclaw ravi login' again to set up encryption.\n\n`);
238
- }
239
- }
240
- else if (meta && meta.public_key) {
241
- // Existing encryption — verify PIN, derive and store keypair (up to 3 attempts)
242
- const { deriveKeyPair, verify, bytesToBase64 } = await import("./crypto.js");
243
- let pinVerified = false;
244
- for (let attempt = 1; attempt <= 3; attempt++) {
245
- try {
246
- const pin = await promptExistingPIN();
247
- const kp = await deriveKeyPair(pin, meta.salt);
248
- const valid = await verify(kp, meta.verifier);
249
- if (!valid) {
250
- const remaining = 3 - attempt;
251
- if (remaining > 0) {
252
- process.stderr.write(`Incorrect PIN. ${remaining} attempt${remaining === 1 ? "" : "s"} remaining.\n`);
253
- }
254
- else {
255
- process.stderr.write(`Incorrect PIN. No attempts remaining.\n`);
256
- }
257
- continue;
258
- }
259
- // Extra safety: verify derived public key matches server's stored key
260
- const derivedPubB64 = bytesToBase64(kp.publicKey);
261
- if (derivedPubB64 !== meta.public_key) {
262
- process.stderr.write(`WARNING: Derived public key does not match server record — possible data corruption.\n`);
263
- process.stderr.write(`Run 'openclaw ravi login' again or contact support.\n\n`);
264
- break;
265
- }
266
- authData.pin_salt = meta.salt;
267
- authData.public_key = meta.public_key;
268
- authData.private_key = bytesToBase64(kp.secretKey);
269
- pinVerified = true;
270
- process.stderr.write(`PIN verified — E2E encryption is ready.\n\n`);
271
- break;
272
- }
273
- catch (err) {
274
- if (err instanceof Error && err.message === "Cancelled")
275
- throw err;
276
- const msg = err instanceof Error ? err.message : String(err);
277
- process.stderr.write(`PIN entry failed: ${msg}\n\n`);
278
- break;
279
- }
280
- }
281
- if (!pinVerified) {
282
- process.stderr.write(`Encryption keys not saved. Run 'openclaw ravi login' to try again.\n\n`);
283
- }
284
- }
285
- // Save auth to ~/.ravi/auth.json (like CLI)
139
+ // Save auth to ~/.ravi/config.json (like CLI)
286
140
  saveAuth(authData);
287
- process.stderr.write(`Credentials saved to ~/.ravi/auth.json\n\n`);
288
- return { client, authData, userEmail: tokenData.user.email };
141
+ process.stderr.write(`Credentials saved to ~/.ravi/config.json\n\n`);
142
+ return { client, userEmail: tokenData.user.email, tokenData };
289
143
  }
290
144
  // Check whether the error is "still waiting" or a terminal failure
291
145
  const error = (await tokenResponse.json().catch(() => ({})));
@@ -321,159 +175,176 @@ export const cliCommands = [
321
175
  let client;
322
176
  // Step 1: Check existing auth — skip login if already authenticated
323
177
  const existingAuth = loadAuth();
324
- if (existingAuth?.access_token) {
325
- client = new RaviClient({
326
- apiUrl,
327
- token: existingAuth.access_token,
328
- refreshToken: existingAuth.refresh_token,
329
- onTokenRefresh: (newToken) => {
330
- updateAuth({ access_token: newToken });
331
- },
332
- });
178
+ let tokenData;
179
+ if (existingAuth?.management_key) {
180
+ client = new RaviClient({ apiUrl, apiKey: existingAuth.management_key });
333
181
  process.stderr.write(`Already authenticated — skipping login.\n\n`);
334
182
  }
335
183
  else {
336
184
  const result = await performLogin();
337
185
  client = result.client;
186
+ tokenData = result.tokenData;
338
187
  }
339
- // Step 2: Identity selection
188
+ // Step 2: Identity selection — use signup data if available, otherwise list identities
340
189
  let selectedUuid;
341
- try {
342
- const identities = await client.listIdentities();
343
- if (identities.length === 1) {
344
- selectedUuid = identities[0].uuid;
345
- saveConfig({
346
- identity_uuid: identities[0].uuid,
347
- identity_name: identities[0].name,
348
- });
349
- process.stderr.write(`Auto-selected identity: ${identities[0].name}\n\n`);
350
- }
351
- else if (identities.length > 1) {
352
- // Interactive identity selection (matches Go CLI behavior)
353
- process.stderr.write(`Select an identity:\n`);
354
- for (let i = 0; i < identities.length; i++) {
355
- const id = identities[i];
356
- const details = [id.inbox, id.phone].filter(Boolean).join(", ");
357
- process.stderr.write(` ${i + 1}. ${id.name}${details ? ` (${details})` : ""}\n`);
190
+ if (tokenData?.identity_key && tokenData?.identity) {
191
+ // Signup path: identity key already created by the backend
192
+ const identity = tokenData.identity;
193
+ selectedUuid = identity.uuid;
194
+ saveConfig({
195
+ identity_uuid: identity.uuid,
196
+ identity_name: identity.name,
197
+ identity_key: tokenData.identity_key,
198
+ });
199
+ process.stderr.write(`Identity: ${identity.name}${identity.email ? ` (${identity.email})` : ""}\n\n`);
200
+ }
201
+ else {
202
+ // Login path: let user select identity, then create identity key
203
+ const loginIdentities = tokenData?.identities;
204
+ try {
205
+ const identities = loginIdentities ?? await client.listIdentities();
206
+ if (identities.length === 0) {
207
+ process.stderr.write(`No identities found. Create one with the ravi_identity_create tool.\n`);
358
208
  }
359
- try {
360
- const idx = await promptChoice(`Enter number [1-${identities.length}]: `, identities.length);
361
- const selected = identities[idx];
209
+ else {
210
+ let selected;
211
+ if (identities.length === 1) {
212
+ selected = identities[0];
213
+ process.stderr.write(`Auto-selected identity: ${selected.name}\n\n`);
214
+ }
215
+ else {
216
+ // Interactive identity selection (matches Go CLI behavior)
217
+ process.stderr.write(`Select an identity:\n`);
218
+ for (let i = 0; i < identities.length; i++) {
219
+ const id = identities[i];
220
+ const detail = "inbox" in id && "phone" in id
221
+ ? [id.inbox, id.phone].filter(Boolean).join(", ")
222
+ : id.email ?? "";
223
+ process.stderr.write(` ${i + 1}. ${id.name}${detail ? ` (${detail})` : ""}\n`);
224
+ }
225
+ try {
226
+ const idx = await promptChoice(`Enter number [1-${identities.length}]: `, identities.length);
227
+ selected = identities[idx];
228
+ process.stderr.write(`Selected: ${selected.name}\n\n`);
229
+ }
230
+ catch {
231
+ // Fallback to first if prompt fails (non-interactive)
232
+ selected = identities[0];
233
+ process.stderr.write(`Defaulting to: ${selected.name}\n\n`);
234
+ }
235
+ }
362
236
  selectedUuid = selected.uuid;
363
- saveConfig({
364
- identity_uuid: selected.uuid,
365
- identity_name: selected.name,
366
- });
367
- process.stderr.write(`Selected: ${selected.name}\n\n`);
368
- }
369
- catch (err) {
370
- if (err instanceof Error && err.message === "Cancelled")
371
- throw err;
372
- // Fallback to first if prompt fails (non-interactive)
373
- selectedUuid = identities[0].uuid;
374
- saveConfig({
375
- identity_uuid: identities[0].uuid,
376
- identity_name: identities[0].name,
377
- });
378
- process.stderr.write(`Defaulting to: ${identities[0].name}\n\n`);
237
+ // Create identity key via management API
238
+ try {
239
+ const keyResp = await client.createIdentityKey(selected.uuid, "openclaw");
240
+ saveConfig({
241
+ identity_uuid: selected.uuid,
242
+ identity_name: selected.name,
243
+ identity_key: keyResp.key,
244
+ });
245
+ process.stderr.write(`Identity key created and saved.\n`);
246
+ }
247
+ catch (err) {
248
+ const detail = err instanceof Error ? err.message : String(err);
249
+ process.stderr.write(`WARNING: Failed to create identity key: ${detail}\n`);
250
+ process.stderr.write(`Identity-scoped operations may not work. Run 'openclaw ravi onboard' to retry.\n\n`);
251
+ saveConfig({ identity_uuid: selected.uuid, identity_name: selected.name });
252
+ }
379
253
  }
380
254
  }
381
- else {
382
- process.stderr.write(`No identities found. Create one with the ravi_identity_create tool.\n`);
383
- }
384
- }
385
- catch (err) {
386
- const detail = err instanceof Error ? err.message : String(err);
387
- process.stderr.write(`Could not list identities: ${detail}\nAdd identityUuid to your config manually.\n`);
388
- }
389
- // Step 3: Bind identity to get identity-scoped tokens
390
- if (selectedUuid) {
391
- try {
392
- const bindResult = await client.bindIdentity(selectedUuid);
393
- updateAuth({
394
- bound_access_token: bindResult.access,
395
- bound_refresh_token: bindResult.refresh,
396
- });
397
- process.stderr.write(`Identity bound — identity-scoped tokens saved.\n`);
398
- }
399
255
  catch (err) {
400
256
  const detail = err instanceof Error ? err.message : String(err);
401
- process.stderr.write(`WARNING: Failed to bind identity: ${detail}\n`);
402
- process.stderr.write(`Identity-scoped operations may not work. Run 'openclaw ravi onboard' to retry.\n\n`);
257
+ process.stderr.write(`Could not list identities: ${detail}\nAdd identityUuid to your config manually.\n`);
403
258
  }
404
259
  }
405
- // Step 4: Auto-configure OpenClaw with the selected identity
260
+ // Step 3: Auto-configure OpenClaw with the selected identity
406
261
  if (selectedUuid) {
407
- const configPath = "plugins.entries.ravi.config.identityUuid";
408
- const ok = await openclawConfigSet(configPath, selectedUuid);
262
+ const ok = await autoConfigureOpenClaw(selectedUuid);
409
263
  if (ok) {
410
- process.stderr.write(`OpenClaw config updated automatically (identityUuid set).\n`);
264
+ process.stderr.write(`OpenClaw config updated (identityUuid + secrets provider).\n`);
411
265
  }
412
266
  else {
413
- process.stderr.write(`To complete setup, run:\n\n`);
414
- process.stderr.write(` openclaw config set ${configPath} "${selectedUuid}"\n\n`);
267
+ process.stderr.write(`\nTo complete setup, run:\n\n`);
268
+ process.stderr.write(` openclaw config set plugins.entries.ravi.config.identityUuid "${selectedUuid}"\n`);
269
+ process.stderr.write(` openclaw config set secrets.providers.ravi.source exec\n`);
270
+ process.stderr.write(` openclaw config set secrets.providers.ravi.command ravi-secrets\n\n`);
415
271
  }
416
272
  }
417
- // Step 5: Auto-configure secrets provider
418
- const srcOk = await openclawConfigSet("secrets.providers.ravi.source", "exec");
419
- const cmdOk = await openclawConfigSet("secrets.providers.ravi.command", "ravi-secrets");
420
- if (srcOk && cmdOk) {
421
- process.stderr.write(`Secrets provider configured (ravi-secrets).\n`);
422
- }
423
- else {
424
- process.stderr.write(`To configure the secrets provider manually, run:\n\n`);
425
- process.stderr.write(` openclaw config set secrets.providers.ravi.source exec\n`);
426
- process.stderr.write(` openclaw config set secrets.providers.ravi.command ravi-secrets\n\n`);
427
- }
428
273
  return "Onboard complete.";
429
274
  },
430
275
  },
431
276
  // ── status ──────────────────────────────────────────────────────────────
432
277
  {
433
278
  name: "status",
434
- description: "Show authentication status and available identities.",
279
+ description: "Show authentication status and current identity.",
435
280
  handler: async (_args, _config) => {
436
281
  const auth = loadAuth();
437
- if (!auth?.access_token) {
438
- return `Not logged in. Run 'openclaw ravi login' to authenticate.`;
282
+ const config = loadConfig();
283
+ if (!auth?.management_key) {
284
+ return `Not logged in. Run 'openclaw ravi onboard' to authenticate.`;
439
285
  }
440
- const apiUrl = RAVI_API_URL;
441
- const client = new RaviClient({
442
- apiUrl,
443
- token: auth.access_token,
444
- refreshToken: auth.refresh_token,
445
- onTokenRefresh: (newToken) => {
446
- updateAuth({ access_token: newToken });
447
- },
448
- });
449
- try {
450
- const identities = await client.listIdentities();
451
- const hasKeypair = !!(auth.public_key && auth.private_key);
452
- let output = `Authenticated to ${apiUrl}\n`;
453
- output += `E2E encryption: ${hasKeypair ? "Yes" : "No"}\n`;
454
- output += `\nIdentities (${identities.length}):\n`;
455
- for (const identity of identities) {
456
- output += ` - ${identity.name} (${identity.uuid})\n`;
457
- if (identity.inbox)
458
- output += ` Email: ${identity.inbox}\n`;
459
- if (identity.phone)
460
- output += ` Phone: ${identity.phone}\n`;
286
+ const maskKey = (key) => `${key.slice(0, 12)}...${key.slice(-4)}`;
287
+ let output = `Authenticated to ${RAVI_API_URL}\n`;
288
+ output += `\nManagement key: ${maskKey(auth.management_key)}\n`;
289
+ if (config?.identity_key) {
290
+ output += `Identity key: ${maskKey(config.identity_key)}\n`;
291
+ }
292
+ else {
293
+ output += `Identity key: not set (run 'openclaw ravi onboard' to configure)\n`;
294
+ }
295
+ if (config?.identity_name || config?.identity_uuid) {
296
+ output += `\nIdentity: ${config.identity_name ?? "(unnamed)"} (${config.identity_uuid ?? ""})\n`;
297
+ }
298
+ else {
299
+ output += `\nNo identity selected. Run 'openclaw ravi onboard' to select one.\n`;
300
+ }
301
+ if (auth.user_email) {
302
+ output += `Account: ${auth.user_email}\n`;
303
+ }
304
+ return output;
305
+ },
306
+ },
307
+ // ── create-agent-key ──────────────────────────────────────────────────
308
+ {
309
+ name: "create-agent-key",
310
+ description: "Create an identity key for a sub-agent (requires management key).",
311
+ args: [
312
+ { name: "<uuid>", description: "Identity UUID" },
313
+ { name: "[label]", description: "Key label" },
314
+ ],
315
+ handler: async (args, _config) => {
316
+ const auth = loadConfig();
317
+ if (!auth?.management_key) {
318
+ return "Error: Management key required. Only the main agent can create identity keys.\nRun 'openclaw ravi onboard' to authenticate with a management key.";
319
+ }
320
+ const client = new RaviClient({ apiUrl: RAVI_API_URL, apiKey: auth.management_key });
321
+ const identityUuid = args[0];
322
+ if (!identityUuid) {
323
+ try {
324
+ const identities = await client.listIdentities();
325
+ let output = "Usage: openclaw ravi create-agent-key <identity-uuid> [label]\n\nAvailable identities:\n";
326
+ for (const id of identities) {
327
+ output += ` ${id.uuid} ${id.name}\n`;
328
+ }
329
+ return output;
461
330
  }
462
- if (!hasKeypair) {
463
- output += `\nWARNING: No encryption keypair encrypted data (passwords, secrets) will not be readable.\n`;
464
- output += `Run 'openclaw ravi login' to set up E2E encryption.\n`;
331
+ catch (err) {
332
+ const detail = err instanceof Error ? err.message : String(err);
333
+ return `Error listing identities: ${detail}`;
465
334
  }
335
+ }
336
+ const label = args[1] || `sub-agent-${Date.now()}`;
337
+ try {
338
+ const keyResp = await client.createIdentityKey(identityUuid, label);
339
+ let output = `Identity key created.\n\n`;
340
+ output += `To configure the sub-agent, run:\n\n`;
341
+ output += ` openclaw config set plugins.entries.ravi.config.identityKey "${keyResp.key}"\n`;
342
+ output += ` openclaw config set plugins.entries.ravi.config.identityUuid "${identityUuid}"\n`;
466
343
  return output;
467
344
  }
468
345
  catch (err) {
469
- if (err instanceof RaviApiError && (err.status === 401 || err.status === 403)) {
470
- return `Token expired or invalid. Run 'openclaw ravi login' to re-authenticate.`;
471
- }
472
- if (err instanceof RaviApiError && err.status === 402) {
473
- return `Billing issue (HTTP 402). Please check your Ravi subscription.`;
474
- }
475
- const message = err instanceof Error ? err.message : String(err);
476
- return `Failed to fetch status: ${message}\n\nIf this persists, check your network connection and API URL.`;
346
+ const detail = err instanceof Error ? err.message : String(err);
347
+ return `Error creating identity key: ${detail}`;
477
348
  }
478
349
  },
479
350
  },
package/dist/cli.js.map CHANGED
@@ -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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"}