@synap-core/cli 1.2.0 → 1.5.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 (74) hide show
  1. package/README.md +26 -0
  2. package/dist/commands/agents.d.ts +31 -0
  3. package/dist/commands/agents.js +478 -0
  4. package/dist/commands/agents.js.map +1 -0
  5. package/dist/commands/connect.d.ts +18 -1
  6. package/dist/commands/connect.js +154 -74
  7. package/dist/commands/connect.js.map +1 -1
  8. package/dist/commands/connections.d.ts +9 -0
  9. package/dist/commands/connections.js +161 -0
  10. package/dist/commands/connections.js.map +1 -0
  11. package/dist/commands/data.d.ts +43 -0
  12. package/dist/commands/data.js +387 -0
  13. package/dist/commands/data.js.map +1 -0
  14. package/dist/commands/finish.js +41 -8
  15. package/dist/commands/finish.js.map +1 -1
  16. package/dist/commands/infra.d.ts +21 -0
  17. package/dist/commands/infra.js +262 -0
  18. package/dist/commands/infra.js.map +1 -0
  19. package/dist/commands/init.js +188 -10
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/knowledge.d.ts +36 -0
  22. package/dist/commands/knowledge.js +123 -0
  23. package/dist/commands/knowledge.js.map +1 -0
  24. package/dist/commands/openclaw.d.ts +2 -0
  25. package/dist/commands/openclaw.js +300 -23
  26. package/dist/commands/openclaw.js.map +1 -1
  27. package/dist/commands/pods.d.ts +17 -0
  28. package/dist/commands/pods.js +371 -0
  29. package/dist/commands/pods.js.map +1 -0
  30. package/dist/commands/status.d.ts +14 -1
  31. package/dist/commands/status.js +78 -220
  32. package/dist/commands/status.js.map +1 -1
  33. package/dist/commands/update.d.ts +11 -2
  34. package/dist/commands/update.js +116 -5
  35. package/dist/commands/update.js.map +1 -1
  36. package/dist/index.js +370 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/agents-config.d.ts +20 -0
  39. package/dist/lib/agents-config.js +45 -0
  40. package/dist/lib/agents-config.js.map +1 -0
  41. package/dist/lib/auth.d.ts +4 -0
  42. package/dist/lib/auth.js +4 -0
  43. package/dist/lib/auth.js.map +1 -1
  44. package/dist/lib/browser-auth.d.ts +35 -0
  45. package/dist/lib/browser-auth.js +170 -0
  46. package/dist/lib/browser-auth.js.map +1 -0
  47. package/dist/lib/hub-client.d.ts +17 -0
  48. package/dist/lib/hub-client.js +115 -0
  49. package/dist/lib/hub-client.js.map +1 -0
  50. package/dist/lib/openclaw.js +30 -19
  51. package/dist/lib/openclaw.js.map +1 -1
  52. package/dist/lib/pod.d.ts +32 -1
  53. package/dist/lib/pod.js +121 -9
  54. package/dist/lib/pod.js.map +1 -1
  55. package/dist/lib/skills-installer.d.ts +18 -0
  56. package/dist/lib/skills-installer.js +97 -0
  57. package/dist/lib/skills-installer.js.map +1 -0
  58. package/dist/lib/targets.d.ts +65 -0
  59. package/dist/lib/targets.js +673 -0
  60. package/dist/lib/targets.js.map +1 -0
  61. package/package.json +5 -3
  62. package/skills/README.md +91 -0
  63. package/skills/synap/README.md +76 -0
  64. package/skills/synap/SKILL.md +882 -0
  65. package/skills/synap/capture.md +170 -0
  66. package/skills/synap/governance.md +206 -0
  67. package/skills/synap/linking.md +128 -0
  68. package/skills/synap/scripts/orient.sh +28 -0
  69. package/skills/synap-schema/SKILL.md +231 -0
  70. package/skills/synap-schema/property-types.md +228 -0
  71. package/skills/synap-ui/SKILL.md +295 -0
  72. package/skills/synap-ui/bento-recipes.md +608 -0
  73. package/skills/synap-ui/view-types.md +259 -0
  74. package/skills/synap-ui/widget-catalog.md +305 -0
package/README.md CHANGED
@@ -76,6 +76,32 @@ Wraps the things you actually need after install.
76
76
 
77
77
  Overview: gateway status, AI provider, skill, dashboard URL, next steps.
78
78
 
79
+ ### `synap openclaw connections`
80
+
81
+ Single-screen summary of what's wired up: AI providers (Anthropic/OpenAI/Google/Synap IS), installed skills, connected channels (Telegram/Discord/WhatsApp/Slack/Signal/iMessage/Matrix), MCP client commands, and the dashboard URL.
82
+
83
+ ```bash
84
+ synap openclaw connections
85
+ ```
86
+
87
+ Everything marked `○` is something you'd manage from the OpenClaw dashboard — the command shows you exactly how to get there.
88
+
89
+ ### `synap openclaw open [section]`
90
+
91
+ Deep-link to a specific dashboard section.
92
+
93
+ ```bash
94
+ synap openclaw open # Main dashboard
95
+ synap openclaw open channels # Channels tab
96
+ synap openclaw open skills # Skills tab
97
+ synap openclaw open config # Config editor
98
+ synap openclaw open chat # Chat
99
+ synap openclaw open sessions # Sessions
100
+ synap openclaw open logs # Logs
101
+ ```
102
+
103
+ Uses the public URL if `setup-domain` has been run, otherwise localhost.
104
+
79
105
  ### `synap openclaw dashboard`
80
106
 
81
107
  Opens the OpenClaw web UI. If a public domain is configured, opens it directly. Otherwise opens `http://localhost:18789` or — on a remote Linux server — prints an SSH tunnel command.
@@ -0,0 +1,31 @@
1
+ /**
2
+ * synap agents — manage named agent identities
3
+ *
4
+ * synap agents list list all configured agent identities
5
+ * synap agents add add a named agent identity (legacy — use create for new agents)
6
+ * synap agents create create a new agent on the pod with template support
7
+ * synap agents remove <name> remove an agent identity
8
+ * synap agents info <name> show details for an agent identity
9
+ * synap agents rotate-key <n> rotate the API key for an agent
10
+ */
11
+ export declare function agentsList(opts?: {
12
+ json?: boolean;
13
+ }): void;
14
+ export declare function agentsAdd(opts?: {
15
+ name?: string;
16
+ apiKey?: string;
17
+ pod?: string;
18
+ workspace?: string;
19
+ label?: string;
20
+ }): Promise<void>;
21
+ export declare function agentsRemove(name: string): void;
22
+ export declare function agentsInfo(name: string): void;
23
+ export declare function agentsCreate(opts?: {
24
+ template?: string;
25
+ name?: string;
26
+ type?: string;
27
+ role?: string;
28
+ workspace?: string;
29
+ pod?: string;
30
+ }): Promise<void>;
31
+ export declare function agentsRotateKey(nameOrId: string): Promise<void>;
@@ -0,0 +1,478 @@
1
+ /**
2
+ * synap agents — manage named agent identities
3
+ *
4
+ * synap agents list list all configured agent identities
5
+ * synap agents add add a named agent identity (legacy — use create for new agents)
6
+ * synap agents create create a new agent on the pod with template support
7
+ * synap agents remove <name> remove an agent identity
8
+ * synap agents info <name> show details for an agent identity
9
+ * synap agents rotate-key <n> rotate the API key for an agent
10
+ */
11
+ import chalk from "chalk";
12
+ import ora from "ora";
13
+ import prompts from "prompts";
14
+ import { log } from "../utils/logger.js";
15
+ import { listAgents, getAgent, addAgent, removeAgent, } from "../lib/agents-config.js";
16
+ import { listPodProfiles } from "../lib/pod.js";
17
+ import { resolveHubConfig, hubGet } from "../lib/hub-client.js";
18
+ function maskKey(key) {
19
+ if (key.length <= 12)
20
+ return key.slice(0, 4) + "...";
21
+ return key.slice(0, 12) + "...";
22
+ }
23
+ function resolveGovernance(profile) {
24
+ const template = profile.template;
25
+ if (template === "twin")
26
+ return "inherited";
27
+ if (template === "assistant")
28
+ return "strict";
29
+ return "standard";
30
+ }
31
+ // ─── list ─────────────────────────────────────────────────────────────────────
32
+ export function agentsList(opts = {}) {
33
+ const agents = listAgents();
34
+ if (opts.json) {
35
+ console.log(JSON.stringify(agents.map(({ name, profile }) => ({
36
+ name,
37
+ pod: profile.podName,
38
+ workspaceId: profile.workspaceId ?? null,
39
+ label: profile.label ?? null,
40
+ template: profile.template ?? null,
41
+ governance: resolveGovernance(profile),
42
+ createdAt: profile.createdAt,
43
+ })), null, 2));
44
+ return;
45
+ }
46
+ if (agents.length === 0) {
47
+ log.info("No agent identities configured. Use: synap agents create --template=assistant --name <n>");
48
+ return;
49
+ }
50
+ log.heading("Configured agent identities");
51
+ for (const { name, profile } of agents) {
52
+ const workspace = profile.workspaceId ? chalk.dim(` ws:${profile.workspaceId.slice(0, 8)}…`) : "";
53
+ const label = profile.label ? chalk.dim(` (${profile.label})`) : "";
54
+ const template = chalk.dim((profile.template ?? "—").padEnd(10));
55
+ const governance = chalk.dim(resolveGovernance(profile).padEnd(10));
56
+ console.log(` ${chalk.bold(name.padEnd(16))}` +
57
+ ` pod:${chalk.cyan(profile.podName.padEnd(12))}` +
58
+ ` key:${chalk.dim(maskKey(profile.apiKey))}` +
59
+ ` tmpl:${template}` +
60
+ ` gov:${governance}` +
61
+ workspace +
62
+ label);
63
+ }
64
+ log.blank();
65
+ log.dim("synap agents create — create a new agent on the pod");
66
+ log.dim("synap agents info <n> — show full details");
67
+ }
68
+ // ─── add (legacy) ─────────────────────────────────────────────────────────────
69
+ // Deprecated: Use `synap agents create` for new agents.
70
+ // `add` is for registering pre-existing agent credentials.
71
+ export async function agentsAdd(opts = {}) {
72
+ const isTTY = process.stdin.isTTY;
73
+ // ── name ──────────────────────────────────────────────────────────────────
74
+ let agentName = opts.name;
75
+ if (!agentName) {
76
+ if (!isTTY) {
77
+ log.error("--name is required in non-interactive mode");
78
+ return;
79
+ }
80
+ const { inputName } = await prompts({
81
+ type: "text",
82
+ name: "inputName",
83
+ message: "Identifier for this agent (e.g. researcher, builder):",
84
+ validate: (v) => v.trim().length > 0 || "Name is required",
85
+ });
86
+ if (!inputName)
87
+ return;
88
+ agentName = inputName.trim().toLowerCase().replace(/\s+/g, "-");
89
+ }
90
+ // ── apiKey ────────────────────────────────────────────────────────────────
91
+ let apiKey = opts.apiKey;
92
+ if (!apiKey) {
93
+ if (!isTTY) {
94
+ log.error("--api-key is required in non-interactive mode");
95
+ return;
96
+ }
97
+ const { key } = await prompts({
98
+ type: "password",
99
+ name: "key",
100
+ message: "Hub Protocol API key for this agent:",
101
+ validate: (v) => v.trim().length > 0 || "API key is required",
102
+ });
103
+ if (!key)
104
+ return;
105
+ apiKey = key.trim();
106
+ }
107
+ // ── pod ───────────────────────────────────────────────────────────────────
108
+ let podName = opts.pod;
109
+ if (!podName) {
110
+ const profiles = listPodProfiles();
111
+ if (profiles.length === 0) {
112
+ log.error("No pod profiles configured. Run: synap pods add");
113
+ return;
114
+ }
115
+ const activePod = profiles.find((p) => p.active);
116
+ const defaultPod = activePod?.name ?? profiles[0].name;
117
+ if (!isTTY) {
118
+ podName = defaultPod;
119
+ }
120
+ else {
121
+ const { picked } = await prompts({
122
+ type: "select",
123
+ name: "picked",
124
+ message: "Which pod profile should this agent use?",
125
+ choices: profiles.map((p) => ({
126
+ title: `${chalk.bold(p.name)}${p.active ? chalk.green(" ← active") : ""} ${chalk.dim(p.config.podUrl)}`,
127
+ value: p.name,
128
+ })),
129
+ initial: profiles.indexOf(activePod ?? profiles[0]),
130
+ });
131
+ if (!picked)
132
+ return;
133
+ podName = picked;
134
+ }
135
+ }
136
+ // Validate pod profile exists
137
+ const allProfiles = listPodProfiles();
138
+ if (!allProfiles.find((p) => p.name === podName)) {
139
+ log.error(`Pod profile '${podName}' not found.`);
140
+ if (allProfiles.length > 0)
141
+ log.dim("Available: " + allProfiles.map((p) => p.name).join(", "));
142
+ return;
143
+ }
144
+ // Validate the key works before storing
145
+ const spinner = ora("Validating API key...").start();
146
+ try {
147
+ const podProfile = listPodProfiles().find(p => p.name === podName);
148
+ const podUrl = podProfile?.config.podUrl ?? "";
149
+ if (podUrl) {
150
+ const res = await fetch(`${podUrl}/api/hub/users/me`, {
151
+ headers: { Authorization: `Bearer ${apiKey}` },
152
+ signal: AbortSignal.timeout(8000),
153
+ });
154
+ if (!res.ok) {
155
+ spinner.fail(`Key validation failed (HTTP ${res.status}) — key not stored.`);
156
+ return;
157
+ }
158
+ const me = await res.json();
159
+ spinner.succeed(`Key valid — identity: ${me.id?.slice(0, 8) ?? "unknown"}...`);
160
+ }
161
+ else {
162
+ spinner.warn("No pod URL to validate against — storing anyway.");
163
+ }
164
+ }
165
+ catch {
166
+ spinner.warn("Could not validate key (pod unreachable) — storing anyway.");
167
+ }
168
+ const profile = {
169
+ podName,
170
+ apiKey,
171
+ createdAt: new Date().toISOString(),
172
+ };
173
+ if (opts.workspace)
174
+ profile.workspaceId = opts.workspace;
175
+ if (opts.label)
176
+ profile.label = opts.label;
177
+ addAgent(agentName, profile);
178
+ log.blank();
179
+ log.success(`Agent '${agentName}' saved.`);
180
+ log.dim(`Use SYNAP_AGENT=${agentName} to activate this identity.`);
181
+ }
182
+ // ─── remove ───────────────────────────────────────────────────────────────────
183
+ export function agentsRemove(name) {
184
+ try {
185
+ removeAgent(name);
186
+ log.success(`Removed agent '${name}'.`);
187
+ }
188
+ catch (err) {
189
+ log.error(err instanceof Error ? err.message : String(err));
190
+ }
191
+ }
192
+ // ─── info ─────────────────────────────────────────────────────────────────────
193
+ export function agentsInfo(name) {
194
+ const profile = getAgent(name);
195
+ if (!profile) {
196
+ log.error(`Agent '${name}' not found.`);
197
+ const all = listAgents();
198
+ if (all.length > 0)
199
+ log.dim("Available: " + all.map((a) => a.name).join(", "));
200
+ return;
201
+ }
202
+ log.heading(`Agent: ${name}`);
203
+ console.log(` ${"Pod".padEnd(12)} ${chalk.cyan(profile.podName)}`);
204
+ console.log(` ${"API key".padEnd(12)} ${chalk.dim(maskKey(profile.apiKey))}`);
205
+ if (profile.workspaceId)
206
+ console.log(` ${"Workspace".padEnd(12)} ${profile.workspaceId}`);
207
+ if (profile.label)
208
+ console.log(` ${"Label".padEnd(12)} ${profile.label}`);
209
+ if (profile.template)
210
+ console.log(` ${"Template".padEnd(12)} ${profile.template}`);
211
+ if (profile.template)
212
+ console.log(` ${"Governance".padEnd(12)} ${resolveGovernance(profile)}`);
213
+ if (profile.agentUserId)
214
+ console.log(` ${"Agent ID".padEnd(12)} ${profile.agentUserId}`);
215
+ console.log(` ${"Created".padEnd(12)} ${chalk.dim(profile.createdAt)}`);
216
+ log.blank();
217
+ log.dim(`Usage: SYNAP_AGENT=${name} synap <command>`);
218
+ }
219
+ async function trpcMutation(podUrl, apiKey, procedure, input) {
220
+ const url = `${podUrl}/trpc/${procedure}`;
221
+ const res = await fetch(url, {
222
+ method: "POST",
223
+ headers: {
224
+ Authorization: `Bearer ${apiKey}`,
225
+ "Content-Type": "application/json",
226
+ },
227
+ body: JSON.stringify({ json: input }),
228
+ signal: AbortSignal.timeout(15_000),
229
+ });
230
+ const body = (await res.json());
231
+ if (!res.ok || body.error) {
232
+ throw new Error(body.error?.message ?? `HTTP ${res.status}`);
233
+ }
234
+ if (!body.result?.data)
235
+ throw new Error("Unexpected empty response from tRPC");
236
+ return body.result.data;
237
+ }
238
+ async function resolveWorkspace(cfg, preferredWorkspaceId) {
239
+ if (preferredWorkspaceId)
240
+ return preferredWorkspaceId;
241
+ const result = await hubGet("/workspaces", {}, cfg);
242
+ const workspaceList = result.workspaces ?? result;
243
+ const list = Array.isArray(workspaceList) ? workspaceList : [];
244
+ if (list.length === 0)
245
+ throw new Error("No workspaces found on this pod.");
246
+ if (list.length === 1)
247
+ return list[0].id;
248
+ if (!process.stdin.isTTY)
249
+ return list[0].id;
250
+ const { picked } = await prompts({
251
+ type: "select",
252
+ name: "picked",
253
+ message: "Which workspace should this agent belong to?",
254
+ choices: list.map((ws) => ({ title: `${ws.name} (${ws.id.slice(0, 8)}…)`, value: ws.id })),
255
+ });
256
+ if (!picked)
257
+ throw new Error("Workspace selection cancelled.");
258
+ return picked;
259
+ }
260
+ export async function agentsCreate(opts = {}) {
261
+ const template = (opts.template ?? "custom");
262
+ if (!["twin", "assistant", "custom"].includes(template)) {
263
+ log.error(`Unknown template '${template}'. Use: twin | assistant | custom`);
264
+ return;
265
+ }
266
+ // Resolve pod profile
267
+ const allProfiles = listPodProfiles();
268
+ if (allProfiles.length === 0) {
269
+ log.error("No pod profiles configured. Run: synap pods add");
270
+ return;
271
+ }
272
+ const activePod = opts.pod
273
+ ? allProfiles.find((p) => p.name === opts.pod)
274
+ : allProfiles.find((p) => p.active) ?? allProfiles[0];
275
+ if (!activePod) {
276
+ log.error(`Pod profile '${opts.pod}' not found.`);
277
+ return;
278
+ }
279
+ const cfg = await resolveHubConfig();
280
+ // Resolve workspace
281
+ let workspaceId;
282
+ try {
283
+ workspaceId = await resolveWorkspace(cfg, opts.workspace);
284
+ }
285
+ catch (err) {
286
+ log.error(err instanceof Error ? err.message : String(err));
287
+ return;
288
+ }
289
+ // Resolve name
290
+ let agentName = opts.name;
291
+ if (template === "twin") {
292
+ // Fetch the caller's display name for a generated twin name
293
+ try {
294
+ const me = await hubGet("/users/me", {}, cfg);
295
+ agentName = agentName ?? `${me.name ?? me.email ?? "User"}'s Twin`;
296
+ }
297
+ catch {
298
+ agentName = agentName ?? "My Twin";
299
+ }
300
+ }
301
+ else if (!agentName) {
302
+ if (!process.stdin.isTTY) {
303
+ log.error("--name is required for assistant/custom templates in non-interactive mode");
304
+ return;
305
+ }
306
+ const { inputName } = await prompts({
307
+ type: "text",
308
+ name: "inputName",
309
+ message: `Agent name (template: ${template}):`,
310
+ validate: (v) => v.trim().length > 0 || "Name is required",
311
+ });
312
+ if (!inputName)
313
+ return;
314
+ agentName = inputName.trim();
315
+ }
316
+ // Resolve agentType
317
+ let agentType = opts.type;
318
+ if (!agentType) {
319
+ agentType = template === "twin" ? "twin" : template === "assistant" ? "assistant" : "custom";
320
+ }
321
+ // Resolve role — twin inherits, others default to editor
322
+ const role = template === "twin"
323
+ ? "editor"
324
+ : (opts.role ?? "editor");
325
+ const spinner = ora(`Creating ${template} agent on pod...`).start();
326
+ try {
327
+ // Step 1: create agent user on the pod via tRPC
328
+ const created = await trpcMutation(activePod.config.podUrl, cfg.apiKey, "agentUsers.create", {
329
+ workspaceId,
330
+ agentType,
331
+ name: agentName,
332
+ role,
333
+ description: `Created via synap CLI (template: ${template})`,
334
+ capabilities: [template],
335
+ });
336
+ // Step 2: mint a Hub Protocol API key for the new agent
337
+ const keyResult = await trpcMutation(activePod.config.podUrl, cfg.apiKey, "apiKeys.create", {
338
+ keyName: `${agentName} — CLI (${template})`,
339
+ scope: ["hub-protocol.read", "hub-protocol.write"],
340
+ workspaceId,
341
+ });
342
+ spinner.succeed(`Agent created: ${chalk.bold(agentName)}`);
343
+ log.blank();
344
+ console.log(` ${"ID".padEnd(12)} ${chalk.dim(created.id)}`);
345
+ console.log(` ${"Name".padEnd(12)} ${chalk.bold(created.name)}`);
346
+ console.log(` ${"Template".padEnd(12)} ${template}`);
347
+ console.log(` ${"Role".padEnd(12)} ${role}`);
348
+ console.log(` ${"Workspace".padEnd(12)} ${workspaceId.slice(0, 8)}…`);
349
+ log.blank();
350
+ if (keyResult.key) {
351
+ console.log(chalk.yellow(" *** Save this API key — it will not be shown again ***"));
352
+ console.log();
353
+ console.log(` ${chalk.bold("API key:")} ${chalk.green(keyResult.key)}`);
354
+ console.log();
355
+ console.log(chalk.yellow(" *** End of key — store it securely now ***"));
356
+ log.blank();
357
+ }
358
+ // Determine a safe local name for this agent identity
359
+ const localName = agentName
360
+ .toLowerCase()
361
+ .replace(/[^a-z0-9]+/g, "-")
362
+ .replace(/^-|-$/g, "");
363
+ // Store locally in agents config
364
+ const profile = {
365
+ podName: activePod.name,
366
+ apiKey: keyResult.key,
367
+ workspaceId,
368
+ label: agentName,
369
+ createdAt: new Date().toISOString(),
370
+ template,
371
+ agentUserId: created.id,
372
+ };
373
+ addAgent(localName, profile);
374
+ log.success(`Agent identity '${localName}' saved locally.`);
375
+ log.dim(`Use SYNAP_AGENT=${localName} to activate this identity.`);
376
+ }
377
+ catch (err) {
378
+ spinner.fail("Agent creation failed.");
379
+ log.error(err instanceof Error ? err.message : String(err));
380
+ }
381
+ }
382
+ // ─── rotate-key ───────────────────────────────────────────────────────────────
383
+ export async function agentsRotateKey(nameOrId) {
384
+ // Look up agent locally by name or agentUserId
385
+ const all = listAgents();
386
+ const match = all.find((a) => a.name === nameOrId || a.profile.agentUserId === nameOrId);
387
+ if (!match) {
388
+ log.error(`Agent '${nameOrId}' not found in local config.`);
389
+ if (all.length > 0)
390
+ log.dim("Available: " + all.map((a) => a.name).join(", "));
391
+ return;
392
+ }
393
+ const { name, profile } = match;
394
+ log.heading(`Rotate key for agent: ${name}`);
395
+ console.log(` ${"Pod".padEnd(12)} ${chalk.cyan(profile.podName)}`);
396
+ console.log(` ${"Template".padEnd(12)} ${profile.template ?? "—"}`);
397
+ console.log(` ${"Role".padEnd(12)} ${profile.template ? resolveGovernance(profile) : "—"}`);
398
+ console.log(` ${"Current key".padEnd(12)} ${chalk.dim(maskKey(profile.apiKey))}`);
399
+ log.blank();
400
+ if (!process.stdin.isTTY) {
401
+ log.error("rotate-key requires interactive mode (stdin must be a TTY).");
402
+ return;
403
+ }
404
+ const { confirmed } = await prompts({
405
+ type: "confirm",
406
+ name: "confirmed",
407
+ message: "This will invalidate the current API key. Continue?",
408
+ initial: false,
409
+ });
410
+ if (!confirmed) {
411
+ log.info("Cancelled.");
412
+ return;
413
+ }
414
+ const cfg = await resolveHubConfig();
415
+ const allProfiles = listPodProfiles();
416
+ const podProfile = allProfiles.find((p) => p.name === profile.podName);
417
+ if (!podProfile) {
418
+ log.error(`Pod profile '${profile.podName}' not found.`);
419
+ return;
420
+ }
421
+ const spinner = ora("Finding active key and rotating...").start();
422
+ try {
423
+ // Find the active API key for this agent user
424
+ // We list keys owned by the caller and find one matching the agent
425
+ // The key was created with the agent's userId — but we minted it as the
426
+ // caller, so it's under the caller's keys. We look up by prefix match.
427
+ const keysResult = await fetch(`${podProfile.config.podUrl}/trpc/apiKeys.list`, {
428
+ method: "GET",
429
+ headers: { Authorization: `Bearer ${cfg.apiKey}` },
430
+ signal: AbortSignal.timeout(10_000),
431
+ });
432
+ let activeKeyId;
433
+ if (keysResult.ok) {
434
+ const keysBody = (await keysResult.json());
435
+ const keys = keysBody.result?.data ?? [];
436
+ // Match by keyName pattern used in agentsCreate
437
+ const agentKeyName = profile.label ?? name;
438
+ const match = keys.find((k) => k.isActive && k.keyName.startsWith(agentKeyName));
439
+ activeKeyId = match?.id;
440
+ }
441
+ if (!activeKeyId) {
442
+ spinner.warn("Could not find an active key record — will create a fresh key instead.");
443
+ // Create a new key directly
444
+ const newKeyResult = await trpcMutation(podProfile.config.podUrl, cfg.apiKey, "apiKeys.create", {
445
+ keyName: `${profile.label ?? name} — CLI (rotated ${new Date().toISOString().slice(0, 10)})`,
446
+ scope: ["hub-protocol.read", "hub-protocol.write"],
447
+ workspaceId: profile.workspaceId,
448
+ });
449
+ spinner.succeed("New key minted.");
450
+ displayNewKey(newKeyResult.key);
451
+ updateLocalKey(name, profile, newKeyResult.key);
452
+ return;
453
+ }
454
+ // Rotate the found key
455
+ const rotated = await trpcMutation(podProfile.config.podUrl, cfg.apiKey, "apiKeys.rotate", { keyId: activeKeyId });
456
+ spinner.succeed("Key rotated successfully.");
457
+ displayNewKey(rotated.key);
458
+ updateLocalKey(name, profile, rotated.key);
459
+ }
460
+ catch (err) {
461
+ spinner.fail("Key rotation failed.");
462
+ log.error(err instanceof Error ? err.message : String(err));
463
+ }
464
+ }
465
+ function displayNewKey(key) {
466
+ log.blank();
467
+ console.log(chalk.yellow(" *** Save this new API key — it will not be shown again ***"));
468
+ console.log();
469
+ console.log(` ${chalk.bold("New API key:")} ${chalk.green(key)}`);
470
+ console.log();
471
+ console.log(chalk.yellow(" *** End of key — store it securely now ***"));
472
+ log.blank();
473
+ }
474
+ function updateLocalKey(name, profile, newKey) {
475
+ addAgent(name, { ...profile, apiKey: newKey });
476
+ log.success(`Local agent config updated with new key.`);
477
+ }
478
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,28 @@
1
1
  /**
2
2
  * synap connect
3
3
  *
4
- * Quick connection: link existing OpenClaw to existing Synap pod.
4
+ * Wire an AI surface to a configured Synap pod. Credentials come from stored
5
+ * pod profiles (synap pods add) — no re-authentication needed.
6
+ *
7
+ * Usage:
8
+ * synap connect (interactive: pick surface + pod)
9
+ * synap connect --target=claude-code
10
+ * synap connect --target=claude-desktop
11
+ * synap connect --target=cursor
12
+ * synap connect --target=raycast
13
+ * synap connect --target=openclaw
14
+ * synap connect --target=claude-code --name=team (use specific pod profile)
15
+ *
16
+ * Escape hatch for scripting:
17
+ * synap connect --pod-url <url> --api-key <key> (bypass stored profiles)
5
18
  */
6
19
  interface ConnectOptions {
7
20
  podUrl?: string;
8
21
  apiKey?: string;
22
+ target?: string;
23
+ list?: boolean;
24
+ name?: string;
25
+ manualKey?: boolean;
9
26
  }
10
27
  export declare function connect(opts: ConnectOptions): Promise<void>;
11
28
  export {};