@synap-core/cli 1.13.0 → 1.13.1-next.20261102.ec3d166

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 (221) hide show
  1. package/README.md +13 -3
  2. package/dist/build-info.json +2 -3
  3. package/dist/commands/agents.js +12 -2
  4. package/dist/commands/agents.js.map +1 -1
  5. package/dist/commands/capability.d.ts +86 -0
  6. package/dist/commands/capability.js +117 -30
  7. package/dist/commands/capability.js.map +1 -1
  8. package/dist/commands/data-extra.d.ts +13 -0
  9. package/dist/commands/data-extra.js +23 -2
  10. package/dist/commands/data-extra.js.map +1 -1
  11. package/dist/commands/doctor.d.ts +18 -0
  12. package/dist/commands/doctor.js +28 -1
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/init.js +4 -2
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/keys-request.d.ts +48 -0
  17. package/dist/commands/keys-request.js +236 -0
  18. package/dist/commands/keys-request.js.map +1 -0
  19. package/dist/commands/keys-request.test.d.ts +1 -0
  20. package/dist/commands/keys-request.test.js +176 -0
  21. package/dist/commands/keys-request.test.js.map +1 -0
  22. package/dist/commands/knowledge.d.ts +6 -0
  23. package/dist/commands/knowledge.js +9 -1
  24. package/dist/commands/knowledge.js.map +1 -1
  25. package/dist/commands/market.d.ts +61 -4
  26. package/dist/commands/market.js +106 -48
  27. package/dist/commands/market.js.map +1 -1
  28. package/dist/commands/mcp.d.ts +1 -1
  29. package/dist/commands/mcp.js +14 -9
  30. package/dist/commands/mcp.js.map +1 -1
  31. package/dist/commands/pods.js +6 -2
  32. package/dist/commands/pods.js.map +1 -1
  33. package/dist/commands/proposals-actions.js +7 -1
  34. package/dist/commands/proposals-actions.js.map +1 -1
  35. package/dist/commands/providers.d.ts +22 -6
  36. package/dist/commands/providers.js +39 -32
  37. package/dist/commands/providers.js.map +1 -1
  38. package/dist/commands/raycast.d.ts +15 -0
  39. package/dist/commands/raycast.js +36 -10
  40. package/dist/commands/raycast.js.map +1 -1
  41. package/dist/commands/status.js +12 -6
  42. package/dist/commands/status.js.map +1 -1
  43. package/dist/commands/statusline.backoff.test.js +13 -3
  44. package/dist/commands/statusline.backoff.test.js.map +1 -1
  45. package/dist/commands/statusline.d.ts +104 -9
  46. package/dist/commands/statusline.js +392 -148
  47. package/dist/commands/statusline.js.map +1 -1
  48. package/dist/commands/statusline.line2.test.d.ts +15 -0
  49. package/dist/commands/statusline.line2.test.js +226 -0
  50. package/dist/commands/statusline.line2.test.js.map +1 -0
  51. package/dist/commands/statusline.needs-you.test.d.ts +1 -0
  52. package/dist/commands/statusline.needs-you.test.js +17 -0
  53. package/dist/commands/statusline.needs-you.test.js.map +1 -0
  54. package/dist/commands/statusline.now.test.d.ts +10 -0
  55. package/dist/commands/statusline.now.test.js +250 -0
  56. package/dist/commands/statusline.now.test.js.map +1 -0
  57. package/dist/commands/tracks.d.ts +1 -0
  58. package/dist/commands/tracks.js +4 -0
  59. package/dist/commands/tracks.js.map +1 -1
  60. package/dist/commands/upload.js +12 -0
  61. package/dist/commands/upload.js.map +1 -1
  62. package/dist/commands/wait.d.ts +124 -0
  63. package/dist/commands/wait.js +384 -0
  64. package/dist/commands/wait.js.map +1 -0
  65. package/dist/commands/wait.test.d.ts +8 -0
  66. package/dist/commands/wait.test.js +308 -0
  67. package/dist/commands/wait.test.js.map +1 -0
  68. package/dist/commands/worker-github-app.d.ts +63 -0
  69. package/dist/commands/worker-github-app.js +161 -0
  70. package/dist/commands/worker-github-app.js.map +1 -0
  71. package/dist/commands/worker-github-app.test.d.ts +1 -0
  72. package/dist/commands/worker-github-app.test.js +102 -0
  73. package/dist/commands/worker-github-app.test.js.map +1 -0
  74. package/dist/commands/worker-github-broker.d.ts +39 -0
  75. package/dist/commands/worker-github-broker.js +106 -0
  76. package/dist/commands/worker-github-broker.js.map +1 -0
  77. package/dist/commands/worker-github-broker.test.d.ts +1 -0
  78. package/dist/commands/worker-github-broker.test.js +90 -0
  79. package/dist/commands/worker-github-broker.test.js.map +1 -0
  80. package/dist/commands/worker-runs.test.d.ts +1 -0
  81. package/dist/commands/worker-runs.test.js +150 -0
  82. package/dist/commands/worker-runs.test.js.map +1 -0
  83. package/dist/commands/worker-worktrees.d.ts +34 -0
  84. package/dist/commands/worker-worktrees.js +87 -0
  85. package/dist/commands/worker-worktrees.js.map +1 -0
  86. package/dist/commands/worker.d.ts +192 -5
  87. package/dist/commands/worker.js +467 -45
  88. package/dist/commands/worker.js.map +1 -1
  89. package/dist/commands/worker.test.js +269 -3
  90. package/dist/commands/worker.test.js.map +1 -1
  91. package/dist/index.js +59 -4
  92. package/dist/index.js.map +1 -1
  93. package/dist/lib/agents-config.d.ts +9 -0
  94. package/dist/lib/agents-config.js +20 -0
  95. package/dist/lib/agents-config.js.map +1 -1
  96. package/dist/lib/atomic-file.d.ts +20 -1
  97. package/dist/lib/atomic-file.js +100 -2
  98. package/dist/lib/atomic-file.js.map +1 -1
  99. package/dist/lib/auth.d.ts +25 -0
  100. package/dist/lib/auth.js +49 -9
  101. package/dist/lib/auth.js.map +1 -1
  102. package/dist/lib/box/job-server.js +4 -0
  103. package/dist/lib/box/job-server.js.map +1 -1
  104. package/dist/lib/bridge-invocation.test.d.ts +1 -0
  105. package/dist/lib/bridge-invocation.test.js +75 -0
  106. package/dist/lib/bridge-invocation.test.js.map +1 -0
  107. package/dist/lib/bridge-status.d.ts +144 -0
  108. package/dist/lib/bridge-status.js +227 -0
  109. package/dist/lib/bridge-status.js.map +1 -0
  110. package/dist/lib/bridge-status.test.d.ts +6 -0
  111. package/dist/lib/bridge-status.test.js +197 -0
  112. package/dist/lib/bridge-status.test.js.map +1 -0
  113. package/dist/lib/client-header.test.js +19 -1
  114. package/dist/lib/client-header.test.js.map +1 -1
  115. package/dist/lib/conversation-headers.d.ts +67 -2
  116. package/dist/lib/conversation-headers.js +122 -6
  117. package/dist/lib/conversation-headers.js.map +1 -1
  118. package/dist/lib/conversation-headers.test.d.ts +1 -0
  119. package/dist/lib/conversation-headers.test.js +78 -0
  120. package/dist/lib/conversation-headers.test.js.map +1 -0
  121. package/dist/lib/credential-class.d.ts +12 -1
  122. package/dist/lib/credential-class.js +20 -0
  123. package/dist/lib/credential-class.js.map +1 -1
  124. package/dist/lib/device-connect.d.ts +45 -0
  125. package/dist/lib/device-connect.js +60 -0
  126. package/dist/lib/device-connect.js.map +1 -1
  127. package/dist/lib/goal-words.js +6 -3
  128. package/dist/lib/goal-words.js.map +1 -1
  129. package/dist/lib/hub-client.d.ts +59 -1
  130. package/dist/lib/hub-client.js +130 -36
  131. package/dist/lib/hub-client.js.map +1 -1
  132. package/dist/lib/key-locations.d.ts +3 -3
  133. package/dist/lib/key-locations.js +3 -39
  134. package/dist/lib/key-locations.js.map +1 -1
  135. package/dist/lib/machine-instance.d.ts +7 -5
  136. package/dist/lib/machine-instance.js +7 -5
  137. package/dist/lib/machine-instance.js.map +1 -1
  138. package/dist/lib/mcp-bridge.d.ts +43 -0
  139. package/dist/lib/mcp-bridge.js +199 -11
  140. package/dist/lib/mcp-bridge.js.map +1 -1
  141. package/dist/lib/mcp-bridge.test.js +194 -2
  142. package/dist/lib/mcp-bridge.test.js.map +1 -1
  143. package/dist/lib/mcp-call.d.ts +5 -1
  144. package/dist/lib/mcp-call.js +7 -6
  145. package/dist/lib/mcp-call.js.map +1 -1
  146. package/dist/lib/mcp-connector-url.test.d.ts +1 -0
  147. package/dist/lib/mcp-connector-url.test.js +13 -0
  148. package/dist/lib/mcp-connector-url.test.js.map +1 -0
  149. package/dist/lib/mcp-snippets.d.ts +16 -0
  150. package/dist/lib/mcp-snippets.js +20 -2
  151. package/dist/lib/mcp-snippets.js.map +1 -1
  152. package/dist/lib/now-line.d.ts +66 -0
  153. package/dist/lib/now-line.js +193 -0
  154. package/dist/lib/now-line.js.map +1 -0
  155. package/dist/lib/now-line.test.d.ts +5 -0
  156. package/dist/lib/now-line.test.js +177 -0
  157. package/dist/lib/now-line.test.js.map +1 -0
  158. package/dist/lib/package-updates.d.ts +66 -0
  159. package/dist/lib/package-updates.js +76 -0
  160. package/dist/lib/package-updates.js.map +1 -0
  161. package/dist/lib/pod.d.ts +0 -4
  162. package/dist/lib/pod.js +0 -7
  163. package/dist/lib/pod.js.map +1 -1
  164. package/dist/lib/register-claude-code-mcp.test.js +19 -0
  165. package/dist/lib/register-claude-code-mcp.test.js.map +1 -1
  166. package/dist/lib/safe-open.d.ts +5 -3
  167. package/dist/lib/safe-open.js +9 -8
  168. package/dist/lib/safe-open.js.map +1 -1
  169. package/dist/lib/self-host.d.ts +17 -0
  170. package/dist/lib/self-host.js +24 -0
  171. package/dist/lib/self-host.js.map +1 -0
  172. package/dist/lib/targets.d.ts +31 -0
  173. package/dist/lib/targets.js +100 -104
  174. package/dist/lib/targets.js.map +1 -1
  175. package/dist/lib/term.d.ts +24 -0
  176. package/dist/lib/term.js +52 -0
  177. package/dist/lib/term.js.map +1 -0
  178. package/dist/lib/term.test.d.ts +1 -0
  179. package/dist/lib/term.test.js +29 -0
  180. package/dist/lib/term.test.js.map +1 -0
  181. package/dist/lib/transcript-index.d.ts +94 -0
  182. package/dist/lib/transcript-index.js +321 -0
  183. package/dist/lib/transcript-index.js.map +1 -0
  184. package/dist/lib/transcript-index.test.d.ts +10 -0
  185. package/dist/lib/transcript-index.test.js +200 -0
  186. package/dist/lib/transcript-index.test.js.map +1 -0
  187. package/dist/lib/wait-help.d.ts +11 -0
  188. package/dist/lib/wait-help.js +25 -0
  189. package/dist/lib/wait-help.js.map +1 -0
  190. package/dist/lib/wait-state.d.ts +57 -0
  191. package/dist/lib/wait-state.js +114 -0
  192. package/dist/lib/wait-state.js.map +1 -0
  193. package/package.json +2 -2
  194. package/skills/synap/SKILL.md +71 -38
  195. package/skills/synap/code-skills.md +15 -1
  196. package/skills/synap/concepts.md +36 -26
  197. package/skills/synap/document-embeds.md +15 -1
  198. package/skills/synap/focus-sessions.md +4 -4
  199. package/skills/synap/from-intent.md +2 -2
  200. package/skills/synap/governance-rules.md +2 -0
  201. package/skills/synap/reflexes.md +4 -4
  202. package/skills/synap/work-model.md +1 -1
  203. package/skills/synap/writing-titles.md +7 -0
  204. package/skills/synap-app/SKILL.md +2 -2
  205. package/skills/synap-app/overview.md +2 -2
  206. package/skills/synap-market/SKILL.md +1 -1
  207. package/skills/synap-market/governance-and-catalog.md +1 -1
  208. package/skills/synap-schema/SKILL.md +4 -1
  209. package/skills/synap-schema/intent-vocabulary-ssot.md +4 -1
  210. package/dist/commands/template.d.ts +0 -42
  211. package/dist/commands/template.js +0 -191
  212. package/dist/commands/template.js.map +0 -1
  213. package/dist/lib/browser-auth.d.ts +0 -35
  214. package/dist/lib/browser-auth.js +0 -170
  215. package/dist/lib/browser-auth.js.map +0 -1
  216. package/dist/lib/openclaw.d.ts +0 -32
  217. package/dist/lib/openclaw.js +0 -165
  218. package/dist/lib/openclaw.js.map +0 -1
  219. package/dist/lib/seed.d.ts +0 -13
  220. package/dist/lib/seed.js +0 -135
  221. package/dist/lib/seed.js.map +0 -1
@@ -1,170 +0,0 @@
1
- /**
2
- * Browser-based connect flow — the recommended provisioning path.
3
- *
4
- * 1. Start a local HTTP server on an ephemeral port.
5
- * 2. Build `{podUrl}/admin/connect?integration=cli&redirect_uri=http://127.0.0.1:<port>/callback`.
6
- * 3. Open the user's default browser at that URL.
7
- * 4. Admin UI authenticates the user (Kratos session), mints a scoped Hub
8
- * Protocol API key via `trpc.apiKeys.connectIntegration`, and redirects
9
- * to `http://127.0.0.1:<port>/callback?context={apiKey,podUrl,workspaceId}`.
10
- * 5. Local server receives the callback, extracts credentials, shuts down.
11
- *
12
- * This is the same flow Raycast uses (via a `raycast://` deeplink) — for CLI
13
- * we just swap the deeplink for a loopback HTTP URL. The admin UI's redirect
14
- * whitelist accepts both.
15
- *
16
- * Security notes:
17
- * - Loopback only (127.0.0.1) — no external network can intercept.
18
- * - One-shot: server only handles the first /callback, then exits.
19
- * - 5-minute timeout.
20
- * - No CSRF token: single-use, host-local, bound to the process.
21
- */
22
- import http from "node:http";
23
- import { URL } from "node:url";
24
- import { spawn } from "node:child_process";
25
- export async function runBrowserAuth(opts) {
26
- const podUrl = opts.podUrl.replace(/\/$/, "");
27
- const timeoutMs = opts.timeoutMs ?? 5 * 60_000;
28
- return new Promise((resolve, reject) => {
29
- const server = http.createServer();
30
- let settled = false;
31
- const settle = (fn) => {
32
- if (settled)
33
- return;
34
- settled = true;
35
- fn();
36
- server.close();
37
- clearTimeout(timeout);
38
- };
39
- const timeout = setTimeout(() => {
40
- settle(() => reject(new Error("Timed out waiting for browser approval. Run again, or use --manual-key.")));
41
- }, timeoutMs);
42
- server.on("request", (req, res) => {
43
- // Only accept GET /callback — reject anything else.
44
- const reqUrl = new URL(req.url ?? "/", `http://127.0.0.1`);
45
- if (reqUrl.pathname !== "/callback") {
46
- res.writeHead(404).end("Not found");
47
- return;
48
- }
49
- const raw = reqUrl.searchParams.get("context");
50
- if (!raw) {
51
- res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
52
- res.end(errorHtml("No context received — try again."));
53
- settle(() => reject(new Error("Callback missing `context` parameter")));
54
- return;
55
- }
56
- try {
57
- const parsed = JSON.parse(raw);
58
- if (!parsed.apiKey || !parsed.podUrl) {
59
- throw new Error("Callback missing apiKey or podUrl");
60
- }
61
- res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
62
- res.end(successHtml(opts.integration));
63
- settle(() => resolve({
64
- apiKey: parsed.apiKey,
65
- podUrl: parsed.podUrl,
66
- workspaceId: parsed.workspaceId ?? undefined,
67
- }));
68
- }
69
- catch (err) {
70
- res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
71
- res.end(errorHtml("Invalid callback payload."));
72
- settle(() => reject(err instanceof Error ? err : new Error(String(err))));
73
- }
74
- });
75
- server.on("error", (err) => {
76
- settle(() => reject(err));
77
- });
78
- server.listen(0, "127.0.0.1", () => {
79
- const port = server.address().port;
80
- const redirectUri = `http://127.0.0.1:${port}/callback`;
81
- const adminUrl = new URL(`${podUrl}/admin/connect`);
82
- adminUrl.searchParams.set("integration", opts.integration);
83
- adminUrl.searchParams.set("redirect_uri", redirectUri);
84
- const fullUrl = adminUrl.toString();
85
- opts.onUrlReady?.(fullUrl);
86
- openBrowser(fullUrl).catch(() => {
87
- // Browser open failure is non-fatal — user can paste the URL themselves.
88
- });
89
- });
90
- });
91
- }
92
- /**
93
- * Cross-platform browser open. Returns when the launcher has been kicked off,
94
- * not when the user has actually seen the page.
95
- */
96
- async function openBrowser(url) {
97
- const platform = process.platform;
98
- const [command, args] = platform === "darwin"
99
- ? ["open", [url]]
100
- : platform === "win32"
101
- ? ["cmd", ["/c", "start", "", url]]
102
- : ["xdg-open", [url]];
103
- return new Promise((resolve, reject) => {
104
- const child = spawn(command, args, {
105
- stdio: "ignore",
106
- detached: true,
107
- });
108
- child.once("error", reject);
109
- child.once("spawn", () => {
110
- child.unref();
111
- resolve();
112
- });
113
- });
114
- }
115
- // ─── Page HTML ──────────────────────────────────────────────────────────────
116
- // Short, no external deps, CLI-tool vibe. Shown once per connect.
117
- function successHtml(integration) {
118
- const label = integration.charAt(0).toUpperCase() + integration.slice(1);
119
- return `<!doctype html>
120
- <html lang="en">
121
- <head><meta charset="utf-8"><title>Synap connected</title>
122
- <meta name="viewport" content="width=device-width, initial-scale=1">
123
- <style>
124
- :root { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; }
125
- body { margin: 0; background: #0A0A0A; color: #FAFAFA; display: grid; place-items: center; min-height: 100vh; }
126
- .card { max-width: 420px; padding: 32px; text-align: center; }
127
- .check { width: 48px; height: 48px; margin: 0 auto 16px; border-radius: 9999px; background: rgba(16, 185, 129, 0.12); display: grid; place-items: center; color: #10B981; }
128
- h1 { font-size: 20px; margin: 0 0 8px; font-weight: 600; letter-spacing: -0.01em; }
129
- p { margin: 0; color: rgba(250, 250, 250, 0.6); font-size: 14px; line-height: 1.5; }
130
- code { background: rgba(250, 250, 250, 0.08); padding: 2px 6px; border-radius: 4px; font-size: 12px; }
131
- </style>
132
- </head>
133
- <body>
134
- <div class="card">
135
- <div class="check">
136
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
137
- </div>
138
- <h1>${label} connected</h1>
139
- <p>You can close this tab and return to your terminal.</p>
140
- </div>
141
- <script>setTimeout(() => window.close(), 3000);</script>
142
- </body>
143
- </html>`;
144
- }
145
- function errorHtml(reason) {
146
- return `<!doctype html>
147
- <html lang="en">
148
- <head><meta charset="utf-8"><title>Synap connect failed</title>
149
- <meta name="viewport" content="width=device-width, initial-scale=1">
150
- <style>
151
- :root { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; }
152
- body { margin: 0; background: #0A0A0A; color: #FAFAFA; display: grid; place-items: center; min-height: 100vh; }
153
- .card { max-width: 420px; padding: 32px; text-align: center; }
154
- .x { width: 48px; height: 48px; margin: 0 auto 16px; border-radius: 9999px; background: rgba(239, 68, 68, 0.12); display: grid; place-items: center; color: #EF4444; }
155
- h1 { font-size: 20px; margin: 0 0 8px; font-weight: 600; }
156
- p { margin: 0; color: rgba(250, 250, 250, 0.6); font-size: 14px; line-height: 1.5; }
157
- </style>
158
- </head>
159
- <body>
160
- <div class="card">
161
- <div class="x">
162
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
163
- </div>
164
- <h1>Connect failed</h1>
165
- <p>${reason}</p>
166
- </div>
167
- </body>
168
- </html>`;
169
- }
170
- //# sourceMappingURL=browser-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-auth.js","sourceRoot":"","sources":["../../src/lib/browser-auth.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * OpenClaw detection and configuration utilities.
3
- * Reads/writes OpenClaw config without modifying unrelated settings.
4
- */
5
- export interface OpenClawInfo {
6
- found: boolean;
7
- /** How OpenClaw was detected — affects which commands can be used */
8
- runtime?: "local" | "docker";
9
- /** Docker container name, set when runtime === "docker" */
10
- containerName?: string;
11
- version?: string;
12
- configPath?: string;
13
- config?: Record<string, unknown>;
14
- gatewayRunning?: boolean;
15
- gatewayPort?: number;
16
- skillsDir?: string;
17
- }
18
- export declare function detectOpenClaw(): OpenClawInfo;
19
- export declare function readOpenClawConfig(): Record<string, unknown> | null;
20
- export declare function writeOpenClawConfig(config: Record<string, unknown>): void;
21
- export declare function getConfigPermissions(): {
22
- mode: string;
23
- safe: boolean;
24
- };
25
- /**
26
- * Get a nested config value safely.
27
- */
28
- export declare function getConfigValue(config: Record<string, unknown>, path: string): unknown;
29
- /**
30
- * Set a nested config value.
31
- */
32
- export declare function setConfigValue(config: Record<string, unknown>, path: string, value: unknown): void;
@@ -1,165 +0,0 @@
1
- /**
2
- * OpenClaw detection and configuration utilities.
3
- * Reads/writes OpenClaw config without modifying unrelated settings.
4
- */
5
- import { existsSync, readFileSync, statSync } from "fs";
6
- import { writeSecretFile } from "./atomic-file.js";
7
- import { homedir } from "os";
8
- import { join } from "path";
9
- import { execSync } from "child_process";
10
- const OPENCLAW_DIR = join(homedir(), ".openclaw");
11
- const OPENCLAW_CONFIG = join(OPENCLAW_DIR, "openclaw.json");
12
- const OPENCLAW_SKILLS = join(OPENCLAW_DIR, "skills");
13
- export function detectOpenClaw() {
14
- // Detection priority:
15
- // 1. Docker container (most reliable — actively running state)
16
- // 2. Local install (openclaw binary in PATH + ~/.openclaw dir)
17
- //
18
- // Why Docker first: the presence of ~/.openclaw on the host doesn't prove
19
- // OpenClaw is installed locally — it may be a stray directory, or the
20
- // Synap deploy dir may live in the same home. A running Docker container
21
- // is a much stronger signal.
22
- // ── Path 1: Docker container ───────────────────────────────────────────
23
- const dockerInfo = detectOpenClawDocker();
24
- if (dockerInfo)
25
- return dockerInfo;
26
- // ── Path 2: Local install (npm -g or npx) ─────────────────────────────
27
- // Require BOTH ~/.openclaw AND an `openclaw` binary in PATH.
28
- // ~/.openclaw alone is not enough (could be a leftover dir).
29
- let localBinaryVersion;
30
- try {
31
- const out = execSync("openclaw --version 2>/dev/null", {
32
- encoding: "utf-8",
33
- timeout: 5000,
34
- }).trim();
35
- const match = out.match(/\d+\.\d+\.\d+/);
36
- if (match)
37
- localBinaryVersion = match[0];
38
- }
39
- catch {
40
- // binary not in PATH — not a local install
41
- }
42
- if (existsSync(OPENCLAW_DIR) && localBinaryVersion) {
43
- const info = {
44
- found: true,
45
- runtime: "local",
46
- configPath: OPENCLAW_CONFIG,
47
- skillsDir: OPENCLAW_SKILLS,
48
- version: localBinaryVersion,
49
- };
50
- // Config
51
- if (existsSync(OPENCLAW_CONFIG)) {
52
- try {
53
- info.config = JSON.parse(readFileSync(OPENCLAW_CONFIG, "utf-8"));
54
- }
55
- catch { /* corrupted */ }
56
- }
57
- // Gateway
58
- const port = info.config?.gateway?.port ?? 18789;
59
- info.gatewayPort = port;
60
- try {
61
- execSync(`curl -sf http://127.0.0.1:${port}/health >/dev/null 2>&1`, { timeout: 3000 });
62
- info.gatewayRunning = true;
63
- }
64
- catch {
65
- info.gatewayRunning = false;
66
- }
67
- return info;
68
- }
69
- return { found: false };
70
- }
71
- function detectOpenClawDocker() {
72
- // (a) Check for a running container with "openclaw" in the name/image
73
- let containerName = null;
74
- let version;
75
- try {
76
- const psOut = execSync("docker ps --format '{{.Names}}\\t{{.Image}}' 2>/dev/null", { encoding: "utf-8", timeout: 4000 });
77
- for (const line of psOut.split("\n")) {
78
- if (/openclaw/i.test(line)) {
79
- containerName = line.split("\t")[0]?.trim() ?? null;
80
- // Extract version from image tag e.g. openclaw:2026.3.31
81
- const verMatch = line.match(/:(\d{4}\.\d+\.\d+)/);
82
- if (verMatch)
83
- version = verMatch[1];
84
- break;
85
- }
86
- }
87
- }
88
- catch { /* docker not available */ }
89
- // (b) Gateway probe — works even if container name doesn't match pattern
90
- let gatewayRunning = false;
91
- try {
92
- execSync("curl -sf http://127.0.0.1:18789/health >/dev/null 2>&1", { timeout: 3000 });
93
- gatewayRunning = true;
94
- }
95
- catch { /* not responding */ }
96
- // Need at least one signal to claim found
97
- if (!containerName && !gatewayRunning)
98
- return null;
99
- return {
100
- found: true,
101
- runtime: "docker",
102
- containerName: containerName ?? "openclaw",
103
- version,
104
- gatewayRunning,
105
- gatewayPort: 18789,
106
- // No local config/skillsDir — they live inside the container volume
107
- configPath: undefined,
108
- skillsDir: undefined,
109
- };
110
- }
111
- export function readOpenClawConfig() {
112
- if (!existsSync(OPENCLAW_CONFIG))
113
- return null;
114
- try {
115
- return JSON.parse(readFileSync(OPENCLAW_CONFIG, "utf-8"));
116
- }
117
- catch {
118
- return null;
119
- }
120
- }
121
- export function writeOpenClawConfig(config) {
122
- writeSecretFile(OPENCLAW_CONFIG, JSON.stringify(config, null, 2) + "\n");
123
- }
124
- export function getConfigPermissions() {
125
- try {
126
- const stat = statSync(OPENCLAW_DIR);
127
- const mode = (stat.mode & 0o777).toString(8);
128
- return { mode, safe: (stat.mode & 0o077) === 0 }; // safe = no group/world perms
129
- }
130
- catch (err) {
131
- // ENOENT = dir doesn't exist (Docker runtime — config lives in container volume)
132
- const code = err?.code;
133
- if (code === "ENOENT")
134
- return { mode: "N/A", safe: true };
135
- return { mode: "???", safe: false };
136
- }
137
- }
138
- /**
139
- * Get a nested config value safely.
140
- */
141
- export function getConfigValue(config, path) {
142
- const parts = path.split(".");
143
- let current = config;
144
- for (const part of parts) {
145
- if (current == null || typeof current !== "object")
146
- return undefined;
147
- current = current[part];
148
- }
149
- return current;
150
- }
151
- /**
152
- * Set a nested config value.
153
- */
154
- export function setConfigValue(config, path, value) {
155
- const parts = path.split(".");
156
- let current = config;
157
- for (let i = 0; i < parts.length - 1; i++) {
158
- if (!(parts[i] in current) || typeof current[parts[i]] !== "object") {
159
- current[parts[i]] = {};
160
- }
161
- current = current[parts[i]];
162
- }
163
- current[parts[parts.length - 1]] = value;
164
- }
165
- //# sourceMappingURL=openclaw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/lib/openclaw.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Seed Agent OS entities from OpenClaw config.
3
- *
4
- * Auto-detects the OpenClaw agent, installed skills, and model provider,
5
- * then creates corresponding entities in the Synap pod so the dashboard
6
- * is pre-populated on first open.
7
- */
8
- import type { OpenClawInfo } from "./openclaw.js";
9
- /**
10
- * Detect OpenClaw config and create Agent, Skill, Provider entities.
11
- * Returns the number of entities created.
12
- */
13
- export declare function seedAgentEntities(podUrl: string, apiKey: string, oc: OpenClawInfo): Promise<number>;
package/dist/lib/seed.js DELETED
@@ -1,135 +0,0 @@
1
- /**
2
- * Seed Agent OS entities from OpenClaw config.
3
- *
4
- * Auto-detects the OpenClaw agent, installed skills, and model provider,
5
- * then creates corresponding entities in the Synap pod so the dashboard
6
- * is pre-populated on first open.
7
- */
8
- import { getConfigValue } from "./openclaw.js";
9
- /**
10
- * Detect OpenClaw config and create Agent, Skill, Provider entities.
11
- * Returns the number of entities created.
12
- */
13
- export async function seedAgentEntities(podUrl, apiKey, oc) {
14
- const entities = [];
15
- // 1. Agent entity — the OpenClaw instance itself
16
- const agentProps = {
17
- "agent-status": oc.gatewayRunning ? "Active" : "Idle",
18
- "agent-runtime": "OpenClaw",
19
- "agent-deployment": "Local Machine",
20
- };
21
- if (oc.version)
22
- agentProps["agent-version"] = oc.version;
23
- // Detect channels from config
24
- if (oc.config) {
25
- const channels = [];
26
- const channelConfig = getConfigValue(oc.config, "channels");
27
- if (channelConfig) {
28
- if (channelConfig.telegram)
29
- channels.push("Telegram");
30
- if (channelConfig.discord)
31
- channels.push("Discord");
32
- if (channelConfig.slack)
33
- channels.push("Slack");
34
- if (channelConfig.whatsapp)
35
- channels.push("WhatsApp");
36
- if (channelConfig.email)
37
- channels.push("Email");
38
- }
39
- // Always has CLI/TUI
40
- channels.push("CLI");
41
- agentProps["agent-channels"] = channels;
42
- if (channels.length > 0)
43
- agentProps["agent-channel"] = channels[0];
44
- }
45
- // Detect model
46
- const model = oc.config
47
- ? getConfigValue(oc.config, "models.default") ??
48
- getConfigValue(oc.config, "models.primary")
49
- : undefined;
50
- if (model)
51
- agentProps["agent-model"] = model;
52
- entities.push({
53
- profileSlug: "agent",
54
- title: `OpenClaw Agent${oc.version ? ` v${oc.version}` : ""}`,
55
- properties: agentProps,
56
- });
57
- // 2. Skill entities — from installed skills
58
- if (oc.config) {
59
- const skills = getConfigValue(oc.config, "skills.installed");
60
- if (Array.isArray(skills)) {
61
- for (const skill of skills.slice(0, 10)) {
62
- // cap at 10
63
- const name = skill.name ?? skill.id ?? "Unknown Skill";
64
- entities.push({
65
- profileSlug: "skill",
66
- title: name,
67
- properties: {
68
- "skill-category": "community",
69
- "skill-source-url": skill.id
70
- ? `https://clawhub.io/skills/${skill.id}`
71
- : undefined,
72
- },
73
- });
74
- }
75
- }
76
- }
77
- // Always add synap skill
78
- entities.push({
79
- profileSlug: "skill",
80
- title: "synap",
81
- properties: {
82
- "skill-category": "infrastructure",
83
- "skill-source-url": "https://github.com/synap-core/backend/tree/main/skills/synap",
84
- "skill-trust": "Verified",
85
- },
86
- });
87
- // 3. Provider entity — model provider
88
- if (oc.config) {
89
- const providers = getConfigValue(oc.config, "models.providers");
90
- if (providers) {
91
- for (const [name, config] of Object.entries(providers).slice(0, 5)) {
92
- const providerConfig = config;
93
- entities.push({
94
- profileSlug: "provider",
95
- title: name.charAt(0).toUpperCase() + name.slice(1),
96
- properties: {
97
- "provider-type": name,
98
- "provider-base-url": providerConfig.baseUrl,
99
- "provider-key-health": providerConfig.apiKey
100
- ? "Healthy"
101
- : "Missing",
102
- },
103
- });
104
- }
105
- }
106
- }
107
- // Create entities via Hub Protocol
108
- let created = 0;
109
- for (const entity of entities) {
110
- try {
111
- const res = await fetch(`${podUrl}/api/hub/entities`, {
112
- method: "POST",
113
- headers: {
114
- "Content-Type": "application/json",
115
- Authorization: `Bearer ${apiKey}`,
116
- },
117
- body: JSON.stringify({
118
- userId: "system",
119
- agentUserId: "system",
120
- profileSlug: entity.profileSlug,
121
- title: entity.title,
122
- properties: entity.properties,
123
- reasoning: "Auto-seeded by synap init",
124
- }),
125
- });
126
- if (res.ok)
127
- created++;
128
- }
129
- catch {
130
- // skip failed entities silently
131
- }
132
- }
133
- return created;
134
- }
135
- //# sourceMappingURL=seed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/lib/seed.ts"],"names":[],"mappings":"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"}