@ravi-hq/ravi 0.6.2 → 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.
- package/README.md +14 -9
- package/dist/auth.d.ts +31 -28
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +28 -51
- package/dist/auth.js.map +1 -1
- package/dist/bin/ravi-secrets.d.ts +1 -2
- package/dist/bin/ravi-secrets.d.ts.map +1 -1
- package/dist/bin/ravi-secrets.js +7 -34
- package/dist/bin/ravi-secrets.js.map +1 -1
- package/dist/channels/email-trusted.d.ts +2 -0
- package/dist/channels/email-trusted.d.ts.map +1 -1
- package/dist/channels/email-trusted.js +18 -51
- package/dist/channels/email-trusted.js.map +1 -1
- package/dist/channels/email.d.ts +2 -0
- package/dist/channels/email.d.ts.map +1 -1
- package/dist/channels/email.js +18 -60
- package/dist/channels/email.js.map +1 -1
- package/dist/cli.d.ts +12 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +178 -307
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +13 -28
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +22 -63
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -73
- package/dist/index.js.map +1 -1
- package/dist/polling.d.ts +2 -12
- package/dist/polling.d.ts.map +1 -1
- package/dist/polling.js +2 -36
- package/dist/polling.js.map +1 -1
- package/dist/tools/contacts.d.ts.map +1 -1
- package/dist/tools/contacts.js +8 -21
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/email-send.d.ts.map +1 -1
- package/dist/tools/email-send.js +6 -23
- package/dist/tools/email-send.js.map +1 -1
- package/dist/tools/feedback.d.ts.map +1 -1
- package/dist/tools/feedback.js +1 -5
- package/dist/tools/feedback.js.map +1 -1
- package/dist/tools/identity.d.ts +0 -7
- package/dist/tools/identity.d.ts.map +1 -1
- package/dist/tools/identity.js +6 -26
- package/dist/tools/identity.js.map +1 -1
- package/dist/tools/inbox.d.ts.map +1 -1
- package/dist/tools/inbox.js +4 -24
- package/dist/tools/inbox.js.map +1 -1
- package/dist/tools/passwords.d.ts +1 -7
- package/dist/tools/passwords.d.ts.map +1 -1
- package/dist/tools/passwords.js +24 -81
- package/dist/tools/passwords.js.map +1 -1
- package/dist/tools/secrets.d.ts +1 -3
- package/dist/tools/secrets.d.ts.map +1 -1
- package/dist/tools/secrets.js +13 -49
- package/dist/tools/secrets.js.map +1 -1
- package/dist/tools/sms-send.d.ts.map +1 -1
- package/dist/tools/sms-send.js +1 -6
- package/dist/tools/sms-send.js.map +1 -1
- package/dist/types.d.ts +31 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +0 -6
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +0 -18
- package/dist/utils.js.map +1 -1
- package/openclaw.plugin.json +1 -0
- package/package.json +1 -5
- package/dist/crypto.d.ts +0 -156
- package/dist/crypto.d.ts.map +0 -1
- package/dist/crypto.js +0 -350
- 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
|
|
5
|
-
import { loadAuth, saveAuth,
|
|
6
|
-
|
|
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
|
-
*
|
|
18
|
-
*
|
|
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
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
throw new Error("PINs do not match.");
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
93
17
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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 →
|
|
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,
|
|
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
|
-
|
|
200
|
-
refresh_token: tokenData.refresh,
|
|
136
|
+
management_key: tokenData.management_key,
|
|
201
137
|
user_email: tokenData.user.email,
|
|
202
138
|
};
|
|
203
|
-
//
|
|
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/
|
|
288
|
-
return { client,
|
|
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
|
-
|
|
325
|
-
|
|
326
|
-
|
|
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
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
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
|
-
|
|
360
|
-
|
|
361
|
-
|
|
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
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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(`
|
|
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
|
|
260
|
+
// Step 3: Auto-configure OpenClaw with the selected identity
|
|
406
261
|
if (selectedUuid) {
|
|
407
|
-
const
|
|
408
|
-
const ok = await openclawConfigSet(configPath, selectedUuid);
|
|
262
|
+
const ok = await autoConfigureOpenClaw(selectedUuid);
|
|
409
263
|
if (ok) {
|
|
410
|
-
process.stderr.write(`OpenClaw config updated
|
|
264
|
+
process.stderr.write(`OpenClaw config updated (identityUuid + secrets provider).\n`);
|
|
411
265
|
}
|
|
412
266
|
else {
|
|
413
|
-
process.stderr.write(
|
|
414
|
-
process.stderr.write(` openclaw config set
|
|
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
|
|
279
|
+
description: "Show authentication status and current identity.",
|
|
435
280
|
handler: async (_args, _config) => {
|
|
436
281
|
const auth = loadAuth();
|
|
437
|
-
|
|
438
|
-
|
|
282
|
+
const config = loadConfig();
|
|
283
|
+
if (!auth?.management_key) {
|
|
284
|
+
return `Not logged in. Run 'openclaw ravi onboard' to authenticate.`;
|
|
439
285
|
}
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
output +=
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
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
|
-
|
|
463
|
-
|
|
464
|
-
|
|
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
|
-
|
|
470
|
-
|
|
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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"}
|