@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
@@ -1,18 +1,28 @@
1
1
  /**
2
2
  * synap status
3
3
  *
4
- * Show Synap pod + OpenClaw health at a glance.
4
+ * API-only status: hits the pod's `/health` endpoint and related remote
5
+ * status endpoints. Never shells out to Docker; never SSHes. The bash
6
+ * `./synap health` on the pod host is the canonical local health check —
7
+ * this npm CLI is the remote / laptop-side view.
8
+ *
9
+ * Sources (all HTTP):
10
+ * - Pod `/health` (basic reachability + version)
11
+ * - Pod `/api/provision/status` (Intelligence Service state)
12
+ * - CP `/openclaw/status/:podId` for managed pods (via stored creds)
13
+ *
14
+ * Explicitly NOT sources anymore:
15
+ * - `docker ps` / `docker inspect` / `docker logs` (was getOpenClawDockerStatus)
16
+ * - `docker exec openclaw openclaw skills list` (was isSynapSkillInstalledInDocker)
17
+ * For those, the user runs `./synap health` on the pod host.
5
18
  */
6
19
  import chalk from "chalk";
7
20
  import { readFileSync } from "fs";
8
21
  import { fileURLToPath } from "url";
9
22
  import { dirname, join } from "path";
10
23
  import { log, banner } from "../utils/logger.js";
11
- import { detectOpenClaw } from "../lib/openclaw.js";
12
- import { checkPodHealth, getLocalPodConfig } from "../lib/pod.js";
13
- import { runSecurityChecks, computeScore } from "../lib/hardening.js";
14
- import { execSync } from "child_process";
15
- import { isLoggedIn, getStoredToken, isTokenLocallyExpired, getOpenClawRemoteStatus } from "../lib/auth.js";
24
+ import { checkPodHealth, getActivePodConfig, listPodProfiles } from "../lib/pod.js";
25
+ import { isLoggedIn, getStoredToken, isTokenLocallyExpired, getOpenClawRemoteStatus, } from "../lib/auth.js";
16
26
  const __filename = fileURLToPath(import.meta.url);
17
27
  const __dirname = dirname(__filename);
18
28
  function getCliVersion() {
@@ -37,84 +47,21 @@ function timeAgo(isoDate) {
37
47
  const days = Math.floor(hours / 24);
38
48
  return `${days} day${days === 1 ? "" : "s"} ago`;
39
49
  }
40
- /**
41
- * Inspect the OpenClaw Docker container without needing CP auth.
42
- * Works even when `openclaw` binary isn't installed (server Docker path).
43
- */
44
- function getOpenClawDockerStatus() {
45
- try {
46
- // Find the container — try common name patterns
47
- const psOut = execSync("docker ps -a --format '{{.Names}}\\t{{.Image}}\\t{{.Status}}' 2>/dev/null", { encoding: "utf-8", timeout: 4000 });
48
- let containerName = null;
49
- let image = "unknown";
50
- for (const line of psOut.split("\n")) {
51
- if (/openclaw/i.test(line)) {
52
- const parts = line.split("\t");
53
- containerName = parts[0]?.trim() ?? null;
54
- image = parts[1]?.trim() ?? "unknown";
55
- break;
56
- }
57
- }
58
- if (!containerName)
59
- return null;
60
- // Get structured state + health
61
- const inspectRaw = execSync(`docker inspect --format '{{.State.Status}}\\t{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}' ${containerName} 2>/dev/null`, { encoding: "utf-8", timeout: 4000 }).trim();
62
- const [state, healthRaw] = inspectRaw.split("\t");
63
- const health = healthRaw === "none" || !healthRaw ? null : healthRaw;
64
- // Grab last 15 log lines, strip ANSI codes and docker timestamps
65
- let logs = [];
66
- try {
67
- const rawLogs = execSync(`docker logs ${containerName} --tail 15 2>&1`, { encoding: "utf-8", timeout: 5000 });
68
- logs = rawLogs
69
- .split("\n")
70
- // Strip ANSI escape codes
71
- .map((l) => l.replace(/\x1b\[[0-9;]*m/g, "").trim())
72
- // Strip docker log timestamps (2026-04-10T12:34:56.789Z )
73
- .map((l) => l.replace(/^\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+/, ""))
74
- .filter((l) => l.length > 0)
75
- // Only show warnings, errors, or startup messages — skip noisy health pings
76
- .filter((l) => {
77
- const lower = l.toLowerCase();
78
- return (lower.includes("error") ||
79
- lower.includes("warn") ||
80
- lower.includes("fatal") ||
81
- lower.includes("start") ||
82
- lower.includes("listen") ||
83
- lower.includes("ready") ||
84
- lower.includes("connect") ||
85
- lower.includes("fail"));
86
- })
87
- .slice(-8); // cap at 8 meaningful lines
88
- }
89
- catch {
90
- // logs unavailable — not critical
91
- }
92
- return { state: state?.trim() ?? "unknown", health, image, logs };
93
- }
94
- catch {
95
- return null;
96
- }
97
- }
98
50
  export async function status() {
99
51
  banner();
100
52
  // CLI version + update hint
101
53
  const cliVersion = getCliVersion();
102
- log.info(`CLI v${cliVersion} ${chalk.dim("Update: npm update -g @synap/cli")}`);
103
- // Hoist creds so all sections can use it
54
+ log.info(`CLI v${cliVersion} ${chalk.dim("Update: npm update -g @synap-core/cli")}`);
55
+ log.dim("Remote / API-only view. For local docker health, run ./synap health on the pod host.");
104
56
  const creds = getStoredToken();
105
- // Auth status
106
- // Strategy: show what we know locally first (email from stored creds),
107
- // then validate with the server. If the server is unreachable, trust the
108
- // local token as long as it hasn't locally expired. Only prompt to re-login
109
- // when the server explicitly rejects it (401) or the local expiry has passed.
57
+ // ── Account ────────────────────────────────────────────────────────────
110
58
  log.heading("Account");
111
59
  let loggedIn = false;
112
60
  if (creds) {
113
- // Always show local identity immediately — don't wait for server
114
61
  log.success(`Logged in as ${chalk.bold(creds.email)}`);
115
62
  log.dim(`User ID: ${creds.userId}`);
116
63
  if (isTokenLocallyExpired(creds)) {
117
- // Local expiry passed — validate against server to confirm
64
+ // Local expiry passed — confirm with CP before declaring dead.
118
65
  const authStatus = await isLoggedIn();
119
66
  if (authStatus.valid) {
120
67
  loggedIn = true;
@@ -126,121 +73,36 @@ export async function status() {
126
73
  }
127
74
  }
128
75
  else {
129
- // Token is locally fresh — validate in background but don't block on failure
76
+ // Token is locally fresh — validate in background but don't block on failure.
130
77
  loggedIn = true;
131
78
  const authStatus = await isLoggedIn().catch(() => ({ valid: false }));
132
79
  if (authStatus.valid) {
133
80
  log.dim(`Token valid until ${new Date(creds.expiresAt).toLocaleDateString()}`);
134
81
  }
135
82
  else {
136
- // CP unreachable but token is fresh trust it, just note it
137
- log.dim(`Token fresh (CP unreachable — cached credentials in use)`);
83
+ log.dim("Token fresh (CP unreachable — cached credentials in use)");
138
84
  }
139
85
  }
140
86
  }
141
87
  else {
142
88
  log.dim("Not logged in. Run: synap login");
143
89
  }
144
- // OpenClaw status
145
- log.heading("OpenClaw");
146
- const oc = detectOpenClaw();
147
- let skillInstalled = false;
148
- const localConfig = getLocalPodConfig();
149
- if (oc.found) {
150
- const runtimeLabel = oc.runtime === "docker"
151
- ? chalk.cyan(`Docker (${oc.containerName ?? "openclaw"})`)
152
- : chalk.dim("local install");
153
- log.success(`Gateway: ${oc.gatewayRunning ? chalk.green("running") : chalk.yellow("stopped")} (port ${oc.gatewayPort ?? 18789}) [${runtimeLabel}]`);
154
- if (oc.version)
155
- log.info(`Version: ${oc.version}`);
156
- const checks = runSecurityChecks(oc.version);
157
- const score = computeScore(checks);
158
- const passed = checks.filter((c) => c.passed).length;
159
- log.info(`Security: ${score === "A" ? chalk.green(score) : score === "B" ? chalk.yellow(score) : chalk.red(score)} (${passed}/${checks.length})`);
160
- }
161
- else {
162
- // Check Docker container (works even without CP login)
163
- const dockerInfo = getOpenClawDockerStatus();
164
- if (dockerInfo) {
165
- const { state, health, image, logs } = dockerInfo;
166
- const stateLabel = state === "running"
167
- ? chalk.green("running")
168
- : state === "restarting"
169
- ? chalk.yellow("restarting")
170
- : state === "exited"
171
- ? chalk.red("exited")
172
- : chalk.dim(state);
173
- log.info(`Container: ${stateLabel}${health ? ` (${health})` : ""} [${image}]`);
174
- if (state === "running" && health !== "healthy") {
175
- log.warn("Container is up but gateway health check hasn't passed yet");
176
- log.dim("Give it another minute, then: synap status");
177
- }
178
- else if (state === "restarting") {
179
- log.warn("Container is crash-looping — check logs below");
180
- }
181
- else if (state === "exited") {
182
- log.warn("Container has stopped — check logs below");
183
- log.dim("Restart: docker compose --profile openclaw up -d openclaw");
184
- }
185
- if (logs.length > 0) {
186
- log.blank();
187
- log.info("Recent container logs:");
188
- for (const line of logs) {
189
- console.log(chalk.dim(` ${line}`));
190
- }
191
- }
192
- }
193
- else if (localConfig?.podId && creds) {
194
- // No Docker container visible here — check CP for remote provisioning state
195
- const remoteStatus = await getOpenClawRemoteStatus(creds.token, localConfig.podId).catch(() => null);
196
- if (remoteStatus === null) {
197
- // CP unreachable — show what we know locally
198
- log.dim(`Pod ID: ${localConfig.podId}`);
199
- log.dim("CP unreachable — cannot check remote OpenClaw state");
200
- log.dim("If on the pod server, run: docker ps | grep openclaw");
201
- }
202
- else if (remoteStatus.status === "not_provisioned") {
203
- log.dim("Not provisioned on pod server. Run: synap init");
204
- }
205
- else if (remoteStatus.status === "provisioning") {
206
- log.info(`Pod server: ${chalk.yellow("provisioning")} — still starting up`);
207
- log.dim("Check: docker logs openclaw --tail 30");
208
- log.dim("Once ready: synap finish");
209
- }
210
- else if (remoteStatus.status === "running") {
211
- log.success(`Pod server: ${chalk.green("running")}`);
212
- if (remoteStatus.url)
213
- log.dim(`URL: ${remoteStatus.url}`);
214
- log.dim("Run synap finish to install the skill");
215
- }
216
- else if (remoteStatus.status === "error") {
217
- log.warn(`Pod server: ${chalk.red("error")} — provisioning failed`);
218
- log.dim("Re-run: synap init");
219
- }
220
- }
221
- else {
222
- log.dim("Not detected locally");
223
- if (!localConfig) {
224
- log.dim("Run synap init to connect to a pod");
225
- }
226
- else {
227
- log.dim("Run synap init to set up OpenClaw");
228
- }
229
- }
230
- }
231
- // Pod status
90
+ // ── Pod ────────────────────────────────────────────────────────────────
91
+ const localConfig = getActivePodConfig();
92
+ const podUrl = localConfig?.podUrl ?? process.env.SYNAP_POD_URL;
93
+ const allProfiles = listPodProfiles();
232
94
  log.heading("Synap Pod");
233
- const ocConfig = oc.found
234
- ? oc.config?.synap
235
- : null;
236
- const podUrl = ocConfig?.podUrl ??
237
- localConfig?.podUrl ??
238
- process.env.SYNAP_POD_URL;
95
+ let podHealthy = false;
239
96
  if (!podUrl) {
240
97
  log.dim("Not connected. Run: synap init");
241
98
  }
242
99
  else {
243
100
  const pod = await checkPodHealth(podUrl);
101
+ podHealthy = pod.healthy;
102
+ if (allProfiles.length > 1) {
103
+ const active = allProfiles.find((p) => p.active);
104
+ log.info(`Active profile: ${chalk.bold(active?.name ?? "default")} ${chalk.dim("(synap pods list to see all)")}`);
105
+ }
244
106
  log.info(`URL: ${podUrl}`);
245
107
  log.info(`Health: ${pod.healthy ? chalk.green("healthy") : chalk.red("unreachable")}`);
246
108
  if (pod.version)
@@ -248,7 +110,7 @@ export async function status() {
248
110
  if (localConfig?.workspaceId)
249
111
  log.dim(`Workspace: ${localConfig.workspaceId}`);
250
112
  }
251
- // Workspace Config section
113
+ // ── Workspace Config ───────────────────────────────────────────────────
252
114
  log.heading("Workspace Config");
253
115
  if (localConfig) {
254
116
  log.info(`Workspace ID: ${localConfig.workspaceId}`);
@@ -258,9 +120,48 @@ export async function status() {
258
120
  else {
259
121
  log.dim("No local config — run: synap init");
260
122
  }
261
- // Intelligence Service
123
+ // ── OpenClaw (remote state via CP, not local Docker) ───────────────────
124
+ log.heading("OpenClaw (remote)");
125
+ if (!localConfig?.podId) { // localConfig is the active pod config
126
+ log.dim("No pod ID on file — cannot query managed-pod OpenClaw state.");
127
+ log.dim("If self-hosted: run `./synap services status openclaw` on the pod host.");
128
+ }
129
+ else if (!creds) {
130
+ log.dim("Not logged in — cannot query CP for OpenClaw state.");
131
+ log.dim("Run: synap login");
132
+ }
133
+ else {
134
+ const remote = await getOpenClawRemoteStatus(creds.token, localConfig.podId).catch(() => null);
135
+ if (remote === null) {
136
+ log.dim("CP unreachable — cannot check remote OpenClaw state");
137
+ log.dim("If self-hosted: run `./synap services status openclaw` on the pod host.");
138
+ }
139
+ else if (remote.status === "not_provisioned") {
140
+ log.dim("Not provisioned on pod server. Run: synap init");
141
+ }
142
+ else if (remote.status === "provisioning") {
143
+ log.info(`Pod server: ${chalk.yellow("provisioning")} — still starting up`);
144
+ log.dim("Check progress again in a minute.");
145
+ }
146
+ else if (remote.status === "running") {
147
+ log.success(`Pod server: ${chalk.green("running")}`);
148
+ if (remote.url)
149
+ log.dim(`URL: ${remote.url}`);
150
+ }
151
+ else if (remote.status === "error") {
152
+ log.warn(`Pod server: ${chalk.red("error")} — provisioning failed`);
153
+ log.dim("Re-run: synap init");
154
+ }
155
+ }
156
+ // ── Intelligence Service (via pod's own endpoint) ──────────────────────
262
157
  log.heading("Intelligence Service");
263
- if (podUrl) {
158
+ if (!podUrl) {
159
+ log.dim("No pod connected");
160
+ }
161
+ else if (!podHealthy) {
162
+ log.dim("Pod unreachable — cannot check IS status");
163
+ }
164
+ else {
264
165
  try {
265
166
  const isRes = await fetch(`${podUrl}/api/provision/status`, {
266
167
  signal: AbortSignal.timeout(5000),
@@ -295,47 +196,7 @@ export async function status() {
295
196
  log.dim("Could not check IS status");
296
197
  }
297
198
  }
298
- else {
299
- log.dim("No pod connected");
300
- }
301
- // Synap skill
302
- log.heading("Synap Skill");
303
- if (oc.found) {
304
- if (oc.runtime === "docker") {
305
- // Check inside the container
306
- const { isSynapSkillInstalledInDocker } = await import("../lib/pod.js");
307
- const container = oc.containerName ?? "openclaw";
308
- try {
309
- const installed = isSynapSkillInstalledInDocker(container);
310
- if (installed) {
311
- skillInstalled = true;
312
- log.success(`Installed (inside ${container})`);
313
- }
314
- else {
315
- log.dim(`Not installed. Run: docker exec ${container} openclaw skills install synap`);
316
- log.dim("Or: synap finish");
317
- }
318
- }
319
- catch {
320
- log.dim(`Could not check — try: docker exec ${container} openclaw skills list`);
321
- }
322
- }
323
- else if (oc.skillsDir) {
324
- const { existsSync } = await import("fs");
325
- const skillPath = join(oc.skillsDir, "synap");
326
- if (existsSync(skillPath)) {
327
- skillInstalled = true;
328
- log.success("Installed");
329
- }
330
- else {
331
- log.dim("Not installed. Run: openclaw skills install synap");
332
- }
333
- }
334
- }
335
- else {
336
- log.dim("Cannot check — OpenClaw not detected");
337
- }
338
- // Next Steps section
199
+ // ── Next Steps ─────────────────────────────────────────────────────────
339
200
  log.heading("Next Steps");
340
201
  if (!loggedIn) {
341
202
  log.info("Login: synap login");
@@ -343,14 +204,11 @@ export async function status() {
343
204
  else if (!localConfig) {
344
205
  log.info("Connect to a pod: synap init");
345
206
  }
346
- else if (!oc.found) {
347
- log.info("OpenClaw not running. Start it or run: synap init");
348
- }
349
- else if (!skillInstalled) {
350
- log.info("Install skill: synap finish");
207
+ else if (!podHealthy) {
208
+ log.info("Pod unreachable check it with: ./synap health on the pod host");
351
209
  }
352
210
  else {
353
- log.dim("All set. Use synap update to refresh the skill.");
211
+ log.dim("All set. To install/update the OpenClaw skill on your laptop: synap update");
354
212
  }
355
213
  log.blank();
356
214
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,15 @@
1
1
  /**
2
2
  * synap update
3
3
  *
4
- * Update the synap skill and check for CLI updates.
4
+ * Update the synap skill and optionally trigger a server-side redeploy
5
+ * via Dokploy when DOKPLOY_API_KEY is configured.
6
+ *
7
+ * synap update — update skill + show service status
8
+ * synap update --server — also trigger Dokploy redeploy of control-plane
9
+ * synap update --all — trigger redeploy of all registered Dokploy services
5
10
  */
6
- export declare function update(): Promise<void>;
11
+ export interface UpdateOptions {
12
+ server?: boolean;
13
+ all?: boolean;
14
+ }
15
+ export declare function update(opts?: UpdateOptions): Promise<void>;
@@ -1,16 +1,65 @@
1
1
  /**
2
2
  * synap update
3
3
  *
4
- * Update the synap skill and check for CLI updates.
4
+ * Update the synap skill and optionally trigger a server-side redeploy
5
+ * via Dokploy when DOKPLOY_API_KEY is configured.
6
+ *
7
+ * synap update — update skill + show service status
8
+ * synap update --server — also trigger Dokploy redeploy of control-plane
9
+ * synap update --all — trigger redeploy of all registered Dokploy services
5
10
  */
11
+ import chalk from "chalk";
6
12
  import ora from "ora";
7
13
  import { log, banner } from "../utils/logger.js";
8
14
  import { detectOpenClaw } from "../lib/openclaw.js";
9
15
  import { installSynapSkill } from "../lib/pod.js";
10
- export async function update() {
16
+ function getDokployBase() {
17
+ const key = process.env.DOKPLOY_API_KEY ?? "";
18
+ if (!key)
19
+ return null;
20
+ const domain = process.env.DEPLOY_DOMAIN ?? "deploy.synap.live";
21
+ const url = process.env.DOKPLOY_URL ?? `https://${domain}`;
22
+ return { url, key };
23
+ }
24
+ async function fetchApps() {
25
+ const dok = getDokployBase();
26
+ if (!dok)
27
+ return [];
28
+ try {
29
+ const res = await fetch(`${dok.url}/api/application.all`, {
30
+ headers: { "x-api-key": dok.key },
31
+ signal: AbortSignal.timeout(8000),
32
+ });
33
+ if (!res.ok)
34
+ return [];
35
+ return (await res.json());
36
+ }
37
+ catch {
38
+ return [];
39
+ }
40
+ }
41
+ async function triggerDeploy(appId) {
42
+ const dok = getDokployBase();
43
+ if (!dok)
44
+ return false;
45
+ try {
46
+ const res = await fetch(`${dok.url}/api/application.deploy`, {
47
+ method: "POST",
48
+ headers: { "Content-Type": "application/json", "x-api-key": dok.key },
49
+ body: JSON.stringify({ applicationId: appId }),
50
+ signal: AbortSignal.timeout(10000),
51
+ });
52
+ return res.ok;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ // ─── Main ────────────────────────────────────────────────────────────────────
59
+ export async function update(opts = {}) {
11
60
  banner();
12
61
  log.heading("Update");
13
- // Update skill
62
+ // ── 1. Skill update (OpenClaw) ────────────────────────────────────────────
14
63
  const oc = detectOpenClaw();
15
64
  if (oc.found) {
16
65
  const spinner = ora("Updating synap skill...").start();
@@ -19,13 +68,75 @@ export async function update() {
19
68
  spinner.succeed("Synap skill updated");
20
69
  }
21
70
  catch (err) {
22
- spinner.fail(err instanceof Error ? err.message : "Update failed");
71
+ spinner.fail(err instanceof Error ? err.message : "Skill update failed");
23
72
  }
24
73
  }
25
74
  else {
26
75
  log.dim("OpenClaw not detected — skipping skill update");
27
76
  }
28
- // Check CLI version
77
+ // ── 2. Dokploy service status ─────────────────────────────────────────────
78
+ log.blank();
79
+ const dok = getDokployBase();
80
+ if (!dok) {
81
+ log.dim("Dokploy not configured (DOKPLOY_API_KEY not set)");
82
+ log.dim("To enable server management: set DOKPLOY_API_KEY + DEPLOY_DOMAIN in your env");
83
+ log.blank();
84
+ log.info("To update the CLI itself:");
85
+ log.dim(" npm update -g @synap/cli");
86
+ log.blank();
87
+ return;
88
+ }
89
+ const appsSpinner = ora("Fetching service status from Dokploy...").start();
90
+ const apps = await fetchApps();
91
+ appsSpinner.stop();
92
+ if (apps.length === 0) {
93
+ log.dim("No services found in Dokploy (or API unreachable)");
94
+ }
95
+ else {
96
+ log.heading("Services");
97
+ for (const app of apps) {
98
+ const status = app.status === "running"
99
+ ? chalk.green(app.status)
100
+ : app.status === "error"
101
+ ? chalk.red(app.status)
102
+ : chalk.yellow(app.status);
103
+ console.log(` ${chalk.bold(app.name.padEnd(24))} ${status} ${chalk.dim(app.env ?? "")}`);
104
+ }
105
+ }
106
+ // ── 3. Trigger redeploys if requested ─────────────────────────────────────
107
+ if (opts.server || opts.all) {
108
+ log.blank();
109
+ log.heading(opts.all ? "Redeploying all services" : "Redeploying control-plane");
110
+ const targets = opts.all
111
+ ? apps
112
+ : apps.filter((a) => a.name.toLowerCase().includes("control-plane") ||
113
+ a.appName?.toLowerCase().includes("control-plane"));
114
+ if (targets.length === 0) {
115
+ log.dim("No matching services found in Dokploy");
116
+ log.dim("Register services first: synap infra status");
117
+ }
118
+ else {
119
+ for (const app of targets) {
120
+ const spinner = ora(`Deploying ${app.name}...`).start();
121
+ const ok = await triggerDeploy(app.id);
122
+ if (ok) {
123
+ spinner.succeed(`${app.name}: deploy triggered`);
124
+ }
125
+ else {
126
+ spinner.fail(`${app.name}: deploy failed`);
127
+ }
128
+ }
129
+ }
130
+ log.blank();
131
+ log.dim(`Watch progress: ${chalk.cyan(`${dok.url}`)}`);
132
+ log.dim("Or tail logs: synap infra logs <service-name>");
133
+ }
134
+ else if (apps.length > 0) {
135
+ log.blank();
136
+ log.dim(`To redeploy: ${chalk.cyan("synap update --server")} (control-plane only)`);
137
+ log.dim(` ${chalk.cyan("synap update --all")} (all services)`);
138
+ }
139
+ // ── 4. CLI update reminder ────────────────────────────────────────────────
29
140
  log.blank();
30
141
  log.info("To update the CLI itself:");
31
142
  log.dim(" npm update -g @synap/cli");
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,EAAE,CAAC;IACT,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtB,eAAe;IACf,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,iBAAiB,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC3D,CAAC;IAED,oBAAoB;IACpB,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAEtC,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}