@synap-core/cli 1.7.0 → 1.8.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 (115) hide show
  1. package/dist/commands/agent-run.d.ts +47 -0
  2. package/dist/commands/agent-run.js +302 -0
  3. package/dist/commands/agent-run.js.map +1 -0
  4. package/dist/commands/artifact.d.ts +26 -0
  5. package/dist/commands/artifact.js +76 -0
  6. package/dist/commands/artifact.js.map +1 -0
  7. package/dist/commands/automation.d.ts +47 -0
  8. package/dist/commands/automation.js +600 -0
  9. package/dist/commands/automation.js.map +1 -0
  10. package/dist/commands/cell.d.ts +55 -0
  11. package/dist/commands/cell.js +277 -0
  12. package/dist/commands/cell.js.map +1 -0
  13. package/dist/commands/connect.js +41 -7
  14. package/dist/commands/connect.js.map +1 -1
  15. package/dist/commands/connections.js +0 -16
  16. package/dist/commands/connections.js.map +1 -1
  17. package/dist/commands/connectors.d.ts +31 -0
  18. package/dist/commands/connectors.js +276 -0
  19. package/dist/commands/connectors.js.map +1 -0
  20. package/dist/commands/context.d.ts +22 -0
  21. package/dist/commands/context.js +151 -0
  22. package/dist/commands/context.js.map +1 -0
  23. package/dist/commands/data-extra.d.ts +13 -0
  24. package/dist/commands/data-extra.js +161 -0
  25. package/dist/commands/data-extra.js.map +1 -0
  26. package/dist/commands/data.d.ts +13 -9
  27. package/dist/commands/data.js +213 -109
  28. package/dist/commands/data.js.map +1 -1
  29. package/dist/commands/doc.d.ts +39 -0
  30. package/dist/commands/doc.js +130 -0
  31. package/dist/commands/doc.js.map +1 -0
  32. package/dist/commands/events.d.ts +26 -0
  33. package/dist/commands/events.js +68 -0
  34. package/dist/commands/events.js.map +1 -0
  35. package/dist/commands/explain.d.ts +21 -0
  36. package/dist/commands/explain.js +248 -0
  37. package/dist/commands/explain.js.map +1 -0
  38. package/dist/commands/graph.d.ts +18 -0
  39. package/dist/commands/graph.js +73 -0
  40. package/dist/commands/graph.js.map +1 -0
  41. package/dist/commands/home.d.ts +12 -0
  42. package/dist/commands/home.js +54 -0
  43. package/dist/commands/home.js.map +1 -0
  44. package/dist/commands/init.d.ts +0 -2
  45. package/dist/commands/init.js +62 -102
  46. package/dist/commands/init.js.map +1 -1
  47. package/dist/commands/keys.d.ts +9 -0
  48. package/dist/commands/keys.js +79 -0
  49. package/dist/commands/keys.js.map +1 -0
  50. package/dist/commands/knowledge.d.ts +32 -18
  51. package/dist/commands/knowledge.js +301 -55
  52. package/dist/commands/knowledge.js.map +1 -1
  53. package/dist/commands/observe.d.ts +9 -0
  54. package/dist/commands/observe.js +90 -0
  55. package/dist/commands/observe.js.map +1 -0
  56. package/dist/commands/open.d.ts +15 -0
  57. package/dist/commands/open.js +44 -0
  58. package/dist/commands/open.js.map +1 -0
  59. package/dist/commands/pods.d.ts +5 -0
  60. package/dist/commands/pods.js +85 -37
  61. package/dist/commands/pods.js.map +1 -1
  62. package/dist/commands/proposals-actions.d.ts +7 -0
  63. package/dist/commands/proposals-actions.js +40 -0
  64. package/dist/commands/proposals-actions.js.map +1 -0
  65. package/dist/commands/providers.d.ts +38 -0
  66. package/dist/commands/providers.js +170 -0
  67. package/dist/commands/providers.js.map +1 -0
  68. package/dist/commands/sessions.d.ts +31 -0
  69. package/dist/commands/sessions.js +224 -0
  70. package/dist/commands/sessions.js.map +1 -0
  71. package/dist/commands/skills-commands.d.ts +26 -0
  72. package/dist/commands/skills-commands.js +186 -0
  73. package/dist/commands/skills-commands.js.map +1 -0
  74. package/dist/commands/skills.d.ts +26 -0
  75. package/dist/commands/skills.js +195 -0
  76. package/dist/commands/skills.js.map +1 -0
  77. package/dist/commands/status.js +68 -30
  78. package/dist/commands/status.js.map +1 -1
  79. package/dist/commands/subscribe.d.ts +19 -0
  80. package/dist/commands/subscribe.js +91 -0
  81. package/dist/commands/subscribe.js.map +1 -0
  82. package/dist/commands/view.d.ts +57 -0
  83. package/dist/commands/view.js +194 -0
  84. package/dist/commands/view.js.map +1 -0
  85. package/dist/index.d.ts +3 -4
  86. package/dist/index.js +812 -206
  87. package/dist/index.js.map +1 -1
  88. package/dist/lib/agent-templates.d.ts +25 -0
  89. package/dist/lib/agent-templates.js +148 -0
  90. package/dist/lib/agent-templates.js.map +1 -0
  91. package/dist/lib/agents-config.d.ts +4 -1
  92. package/dist/lib/agents-config.js +19 -2
  93. package/dist/lib/agents-config.js.map +1 -1
  94. package/dist/lib/capture-lane.d.ts +49 -0
  95. package/dist/lib/capture-lane.js +79 -0
  96. package/dist/lib/capture-lane.js.map +1 -0
  97. package/dist/lib/hub-client.d.ts +6 -0
  98. package/dist/lib/hub-client.js +31 -3
  99. package/dist/lib/hub-client.js.map +1 -1
  100. package/dist/lib/pod.d.ts +14 -1
  101. package/dist/lib/pod.js +24 -2
  102. package/dist/lib/pod.js.map +1 -1
  103. package/dist/lib/skills-installer.d.ts +1 -1
  104. package/dist/lib/skills-installer.js +1 -1
  105. package/dist/lib/skills-installer.js.map +1 -1
  106. package/dist/lib/targets.d.ts +17 -1
  107. package/dist/lib/targets.js +713 -63
  108. package/dist/lib/targets.js.map +1 -1
  109. package/package.json +2 -1
  110. package/skills/synap/SKILL.md +357 -82
  111. package/skills/synap-ui/SKILL.md +12 -9
  112. package/dist/lib/templates.d.ts +0 -11
  113. package/dist/lib/templates.js +0 -13
  114. package/dist/lib/templates.js.map +0 -1
  115. package/dist/templates/agent-os.json +0 -3090
@@ -0,0 +1,195 @@
1
+ import chalk from "chalk";
2
+ import { log } from "../utils/logger.js";
3
+ import { resolveHubConfig, hubPatch, hubPost, } from "../lib/hub-client.js";
4
+ import { readFileSync, existsSync } from "fs";
5
+ import { resolve } from "path";
6
+ // ─── gatherContext ────────────────────────────────────────────────────────────
7
+ /**
8
+ * Gather context for a session:
9
+ * 1. Query /entities/recall from the pod (semantic search in pod KG)
10
+ * 2. Read local CLAUDE.md if it exists
11
+ * 3. Read .claude/kg-verify if it exists
12
+ * Returns a markdown context report and updates the session with it.
13
+ */
14
+ export async function gatherContext(opts) {
15
+ try {
16
+ const cfg = await resolveHubConfig(opts);
17
+ const sessionId = opts.session;
18
+ if (!sessionId) {
19
+ console.error(chalk.red("Error: --session SESSION_ID is required"));
20
+ process.exit(1);
21
+ }
22
+ const workspaceId = opts.workspace || cfg.workspaceId;
23
+ if (!workspaceId) {
24
+ console.error(chalk.red("Error: --workspace is required or set active workspace with 'synap use'"));
25
+ process.exit(1);
26
+ }
27
+ // Phase 1: Fetch semantic recall from pod
28
+ let contextReport = "# Gathered Context\n\n";
29
+ contextReport += `**Session:** ${sessionId}\n`;
30
+ contextReport += `**Workspace:** ${workspaceId}\n`;
31
+ contextReport += `**Gathered at:** ${new Date().toISOString()}\n\n`;
32
+ contextReport += "## Pod Knowledge Graph\n\n";
33
+ try {
34
+ const recallRes = (await hubPost("/entities/recall", { workspaceId, limit: 10 }, cfg));
35
+ const entities = recallRes?.entities ?? [];
36
+ if (entities.length > 0) {
37
+ contextReport += "### Recent Entities\n\n";
38
+ for (const e of entities) {
39
+ const type = String(e.profileSlug ?? "unknown");
40
+ contextReport += `- **${String(e.title ?? e.id)}** (${type}): ${String(e.id).slice(0, 8)}\n`;
41
+ }
42
+ }
43
+ else {
44
+ contextReport += "_(No recent entities found in pod)_\n\n";
45
+ }
46
+ }
47
+ catch (recallErr) {
48
+ contextReport += `_Note: Pod recall failed — ${recallErr.message}_\n\n`;
49
+ }
50
+ // Phase 2: Read CLAUDE.md if it exists
51
+ contextReport += "## Project Instructions (CLAUDE.md)\n\n";
52
+ const claudeMdPath = resolve(process.cwd(), "CLAUDE.md");
53
+ if (existsSync(claudeMdPath)) {
54
+ try {
55
+ const claudeContent = readFileSync(claudeMdPath, "utf-8");
56
+ const lines = claudeContent.split("\n");
57
+ const truncated = lines.slice(0, 50).join("\n");
58
+ contextReport += "```markdown\n";
59
+ contextReport += truncated;
60
+ if (lines.length > 50) {
61
+ contextReport += `\n... (${lines.length - 50} more lines)\n`;
62
+ }
63
+ contextReport += "```\n\n";
64
+ }
65
+ catch (fileErr) {
66
+ contextReport += `_Could not read CLAUDE.md — ${fileErr.message}_\n\n`;
67
+ }
68
+ }
69
+ else {
70
+ contextReport += "_(CLAUDE.md not found in current directory)_\n\n";
71
+ }
72
+ // Phase 3: Read .claude/kg-verify if it exists
73
+ contextReport += "## KG Verification State (.claude/kg-verify)\n\n";
74
+ const kgVerifyPath = resolve(process.cwd(), ".claude", "kg-verify");
75
+ if (existsSync(kgVerifyPath)) {
76
+ try {
77
+ const kgVerifyContent = readFileSync(kgVerifyPath, "utf-8");
78
+ contextReport += "```\n";
79
+ contextReport += kgVerifyContent;
80
+ contextReport += "```\n\n";
81
+ }
82
+ catch (fileErr) {
83
+ contextReport += `_Could not read .claude/kg-verify — ${fileErr.message}_\n\n`;
84
+ }
85
+ }
86
+ else {
87
+ contextReport += "_(KG verification state not found)_\n\n";
88
+ }
89
+ // Phase 4: Update session with the report
90
+ try {
91
+ await hubPatch(`/focus-sessions/${sessionId}`, {
92
+ workspaceId,
93
+ contextReport,
94
+ }, cfg);
95
+ }
96
+ catch (patchErr) {
97
+ if (opts.json) {
98
+ console.log(JSON.stringify({
99
+ success: false,
100
+ error: "Failed to update session with context report",
101
+ details: patchErr.message,
102
+ }, null, 2));
103
+ }
104
+ else {
105
+ console.error(chalk.yellow("⚠ Context gathered but failed to update session: " + patchErr.message));
106
+ }
107
+ }
108
+ if (opts.json) {
109
+ console.log(JSON.stringify({
110
+ success: true,
111
+ sessionId,
112
+ workspaceId,
113
+ reportLength: contextReport.length,
114
+ }, null, 2));
115
+ return;
116
+ }
117
+ log.success(`Context gathered and session updated`);
118
+ log.dim(`Session: ${sessionId.slice(0, 8)}`);
119
+ log.dim(`Report: ${contextReport.length} bytes`);
120
+ }
121
+ catch (e) {
122
+ console.error(chalk.red("Error: " + e.message));
123
+ process.exit(1);
124
+ }
125
+ }
126
+ // ─── verifyCode ───────────────────────────────────────────────────────────────
127
+ /**
128
+ * Run the project's type-check + test gate and store the result on the session.
129
+ * The AI reads CLAUDE.md to find the right commands; this function accepts them
130
+ * explicitly so the AI can pass exactly what to run.
131
+ *
132
+ * Usage: synap skill verify-code --session <id> --workspace <id> --cmd "pnpm type-check"
133
+ */
134
+ export async function verifyCode(opts) {
135
+ const { execSync } = await import("child_process");
136
+ const cfg = await resolveHubConfig(opts);
137
+ const sessionId = opts.session;
138
+ if (!sessionId) {
139
+ console.error(chalk.red("Error: --session SESSION_ID is required"));
140
+ process.exit(1);
141
+ }
142
+ const workspaceId = opts.workspace || cfg.workspaceId;
143
+ if (!workspaceId) {
144
+ console.error(chalk.red("Error: --workspace is required"));
145
+ process.exit(1);
146
+ }
147
+ const cmd = opts.cmd;
148
+ if (!cmd) {
149
+ console.error(chalk.red("Error: --cmd <command> is required (e.g. --cmd 'pnpm type-check')"));
150
+ process.exit(1);
151
+ }
152
+ const startedAt = Date.now();
153
+ let passed = false;
154
+ let output = "";
155
+ try {
156
+ output = execSync(cmd, { encoding: "utf-8", stdio: "pipe" });
157
+ passed = true;
158
+ }
159
+ catch (e) {
160
+ const err = e;
161
+ output = [err.stdout, err.stderr, err.message].filter(Boolean).join("\n");
162
+ passed = false;
163
+ }
164
+ const elapsedMs = Date.now() - startedAt;
165
+ const verificationReport = {
166
+ codeQuality: {
167
+ cmd,
168
+ passed,
169
+ elapsedMs,
170
+ output: output.slice(0, 4000),
171
+ ranAt: new Date().toISOString(),
172
+ },
173
+ };
174
+ try {
175
+ await hubPatch(`/focus-sessions/${sessionId}`, { workspaceId, verificationReport }, cfg);
176
+ }
177
+ catch {
178
+ // non-fatal — still print the result
179
+ }
180
+ if (opts.json) {
181
+ console.log(JSON.stringify({ passed, cmd, elapsedMs, output }, null, 2));
182
+ return;
183
+ }
184
+ if (passed) {
185
+ log.success(`Verification passed (${elapsedMs}ms)`);
186
+ log.dim(` cmd: ${cmd}`);
187
+ }
188
+ else {
189
+ log.warn(`Verification FAILED (${elapsedMs}ms)`);
190
+ log.dim(` cmd: ${cmd}`);
191
+ console.log(chalk.red(output.slice(0, 2000)));
192
+ process.exit(1);
193
+ }
194
+ }
195
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -21,8 +21,9 @@ import { readFileSync } from "fs";
21
21
  import { fileURLToPath } from "url";
22
22
  import { dirname, join } from "path";
23
23
  import { log, banner } from "../utils/logger.js";
24
- import { checkPodHealth, getActivePodConfig, listPodProfiles } from "../lib/pod.js";
25
- import { isLoggedIn, getStoredToken, isTokenLocallyExpired, getOpenClawRemoteStatus, } from "../lib/auth.js";
24
+ import { checkPodHealth, getActivePodConfig, listPodProfiles, getAgentWorkspaceRouting } from "../lib/pod.js";
25
+ import { resolveHubConfig, hubGet } from "../lib/hub-client.js";
26
+ import { isLoggedIn, getStoredToken, isTokenLocallyExpired, } from "../lib/auth.js";
26
27
  const __filename = fileURLToPath(import.meta.url);
27
28
  const __dirname = dirname(__filename);
28
29
  function getCliVersion() {
@@ -120,37 +121,35 @@ export async function status() {
120
121
  else {
121
122
  log.dim("No local config — run: synap init");
122
123
  }
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.");
124
+ // ── API Key ────────────────────────────────────────────────────────────
125
+ // Probe the Hub API to verify the stored key is still valid. A 401 here
126
+ // means the key was rotated or revoked — surface the exact reconnect command
127
+ // so the user doesn't have to diagnose it themselves.
128
+ log.heading("API Key");
129
+ if (!localConfig) {
130
+ log.dim("No pod configured.");
128
131
  }
129
- else if (!creds) {
130
- log.dim("Not logged in — cannot query CP for OpenClaw state.");
131
- log.dim("Run: synap login");
132
+ else if (!podHealthy) {
133
+ log.dim("Pod unreachable — cannot verify key.");
132
134
  }
133
135
  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}`);
136
+ try {
137
+ const cfg = await resolveHubConfig();
138
+ await hubGet("/users/me", {}, cfg);
139
+ log.success("Valid");
140
+ log.dim(`Key saved: ${timeAgo(localConfig.savedAt)}`);
150
141
  }
151
- else if (remote.status === "error") {
152
- log.warn(`Pod server: ${chalk.red("error")} — provisioning failed`);
153
- log.dim("Re-run: synap init");
142
+ catch (err) {
143
+ const msg = err instanceof Error ? err.message : String(err);
144
+ const is401 = msg.includes("401") || msg.toLowerCase().includes("unauthorized");
145
+ if (is401) {
146
+ const activeName = allProfiles.find((p) => p.active)?.name ?? "default";
147
+ log.warn(chalk.red("Invalid or expired — credentials must be refreshed."));
148
+ log.info(`Run: ${chalk.cyan(`synap login --reconnect ${activeName}`)}`);
149
+ }
150
+ else {
151
+ log.dim(`Could not verify key: ${msg}`);
152
+ }
154
153
  }
155
154
  }
156
155
  // ── Intelligence Service (via pod's own endpoint) ──────────────────────
@@ -196,6 +195,45 @@ export async function status() {
196
195
  log.dim("Could not check IS status");
197
196
  }
198
197
  }
198
+ // ── Data Context ───────────────────────────────────────────────────────
199
+ // Show who the agent is, what workspace is active, and pending proposals.
200
+ log.heading("Data Context");
201
+ if (localConfig?.podUrl ?? podUrl) {
202
+ const routing = getAgentWorkspaceRouting();
203
+ const memWs = routing?.memoryWorkspaceId;
204
+ if (localConfig?.workspaceId) {
205
+ log.info(`Active ws : ${localConfig.workspaceId}`);
206
+ }
207
+ if (localConfig?.agentUserId) {
208
+ log.info(`Agent user : ${localConfig.agentUserId}`);
209
+ }
210
+ if (memWs) {
211
+ log.info(`Memory ws : ${memWs}`);
212
+ }
213
+ if (podHealthy) {
214
+ try {
215
+ const cfg = await resolveHubConfig();
216
+ const proposalsRes = await hubGet("/proposals", { status: "pending", limit: 1 }, cfg)
217
+ .catch(() => null);
218
+ if (proposalsRes) {
219
+ const total = Number(proposalsRes.total ??
220
+ (proposalsRes.proposals?.length ?? 0));
221
+ if (total > 0) {
222
+ log.warn(`${total} pending proposal${total !== 1 ? "s" : ""} — run: synap proposals`);
223
+ }
224
+ else {
225
+ log.dim("No pending proposals.");
226
+ }
227
+ }
228
+ }
229
+ catch {
230
+ log.dim("Could not check proposals.");
231
+ }
232
+ }
233
+ }
234
+ else {
235
+ log.dim("No pod connected — run: synap init");
236
+ }
199
237
  // ── Next Steps ─────────────────────────────────────────────────────────
200
238
  log.heading("Next Steps");
201
239
  if (!loggedIn) {
@@ -208,7 +246,7 @@ export async function status() {
208
246
  log.info("Pod unreachable — check it with: ./synap health on the pod host");
209
247
  }
210
248
  else {
211
- log.dim("All set. To install/update the OpenClaw skill on your laptop: synap update");
249
+ log.dim("All set. Run: synap context to load workspace context for an agent session.");
212
250
  }
213
251
  log.blank();
214
252
  }
@@ -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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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * synap subscribe
3
+ *
4
+ * Long-poll the pod's Pulse/subscription feed and stream events as NDJSON.
5
+ * Polls GET /api/hub/subscriptions every 3 seconds with a cursor.
6
+ *
7
+ * Usage:
8
+ * synap subscribe # all events
9
+ * synap subscribe --event proposal.* # filter by eventType pattern
10
+ * synap subscribe --limit 50 # events per poll
11
+ */
12
+ export interface SubscribeOpts {
13
+ event?: string;
14
+ limit?: string;
15
+ json?: boolean;
16
+ podUrl?: string;
17
+ apiKey?: string;
18
+ }
19
+ export declare function subscribeEvents(opts: SubscribeOpts): Promise<void>;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * synap subscribe
3
+ *
4
+ * Long-poll the pod's Pulse/subscription feed and stream events as NDJSON.
5
+ * Polls GET /api/hub/subscriptions every 3 seconds with a cursor.
6
+ *
7
+ * Usage:
8
+ * synap subscribe # all events
9
+ * synap subscribe --event proposal.* # filter by eventType pattern
10
+ * synap subscribe --limit 50 # events per poll
11
+ */
12
+ import { log } from "../utils/logger.js";
13
+ import { resolveHubConfig, hubGet } from "../lib/hub-client.js";
14
+ /** Simple glob match: "proposal.*" matches "proposal.approved", "proposal.created", etc. */
15
+ function matchesPattern(eventType, pattern) {
16
+ if (pattern === "*")
17
+ return true;
18
+ if (pattern.endsWith(".*")) {
19
+ const prefix = pattern.slice(0, -2);
20
+ return eventType === prefix || eventType.startsWith(prefix + ".");
21
+ }
22
+ // Escape regex special chars except * which we convert to .*
23
+ const regexStr = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
24
+ return new RegExp(`^${regexStr}$`).test(eventType);
25
+ }
26
+ export async function subscribeEvents(opts) {
27
+ const cfg = await resolveHubConfig(opts);
28
+ const limit = parseInt(opts.limit ?? "20", 10);
29
+ if (!opts.json) {
30
+ log.dim("Subscribing to pod events... (Ctrl+C to stop)");
31
+ if (opts.event) {
32
+ log.dim(` filter: ${opts.event}`);
33
+ }
34
+ }
35
+ // Seen-event deduplication cache (keep last 500 ids)
36
+ const seenIds = new Set();
37
+ const MAX_SEEN = 500;
38
+ // Start cursor at now so we only get future events
39
+ let cursor = new Date().toISOString();
40
+ let intervalHandle = null;
41
+ let stopped = false;
42
+ let consecutiveErrors = 0;
43
+ const poll = async () => {
44
+ if (stopped)
45
+ return;
46
+ try {
47
+ const params = { limit, since: cursor };
48
+ const res = await hubGet("/subscriptions", params, cfg);
49
+ consecutiveErrors = 0;
50
+ const rawEvents = (res.events ?? res.items ?? []);
51
+ const events = Array.isArray(rawEvents) ? rawEvents : [];
52
+ for (const event of events) {
53
+ const id = String(event.id ?? "");
54
+ if (id && seenIds.has(id))
55
+ continue;
56
+ if (id) {
57
+ seenIds.add(id);
58
+ if (seenIds.size > MAX_SEEN) {
59
+ const first = seenIds.values().next().value;
60
+ if (first !== undefined)
61
+ seenIds.delete(first);
62
+ }
63
+ }
64
+ const eventType = String(event.eventType ?? event.type ?? "");
65
+ if (opts.event && eventType && !matchesPattern(eventType, opts.event))
66
+ continue;
67
+ const createdAt = String(event.createdAt ?? event.timestamp ?? "");
68
+ if (createdAt && createdAt > cursor)
69
+ cursor = createdAt;
70
+ console.log(JSON.stringify(event));
71
+ }
72
+ }
73
+ catch {
74
+ consecutiveErrors++;
75
+ if (consecutiveErrors === 3 && !opts.json) {
76
+ log.dim(" Pod unreachable — retrying...");
77
+ }
78
+ }
79
+ };
80
+ // Graceful shutdown on SIGINT (Ctrl+C)
81
+ process.on("SIGINT", () => {
82
+ stopped = true;
83
+ if (intervalHandle !== null)
84
+ clearInterval(intervalHandle);
85
+ process.exit(0);
86
+ });
87
+ // Run immediately then every 3 seconds
88
+ await poll();
89
+ intervalHandle = setInterval(() => { void poll(); }, 3_000);
90
+ }
91
+ //# sourceMappingURL=subscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAUhE,4FAA4F;AAC5F,SAAS,cAAc,CAAC,SAAiB,EAAE,OAAe;IACxD,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,SAAS,KAAK,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpF,OAAO,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAmB;IACvD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,GAAG,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC;IAErB,mDAAmD;IACnD,IAAI,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEtC,IAAI,cAAc,GAA0C,IAAI,CAAC;IACjE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,CAA4B,CAAC;YACnF,iBAAiB,GAAG,CAAC,CAAC;YAEtB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAA8B,CAAC;YAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAEzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACpC,IAAI,EAAE,EAAE,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;wBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;wBAC5C,IAAI,KAAK,KAAK,SAAS;4BAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9D,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAEhF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBACnE,IAAI,SAAS,IAAI,SAAS,GAAG,MAAM;oBAAE,MAAM,GAAG,SAAS,CAAC;gBAExD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,EAAE,CAAC;YACpB,IAAI,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1C,GAAG,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,cAAc,KAAK,IAAI;YAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,IAAI,EAAE,CAAC;IACb,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * synap view
3
+ *
4
+ * Manage views on the pod.
5
+ *
6
+ * Usage:
7
+ * synap view create --type kanban --profile task --name "My Board" --workspace <id>
8
+ * synap view create --type bento --profile note --json
9
+ * synap view list [--workspace <id>]
10
+ *
11
+ * API:
12
+ * POST /api/hub/views — CreateViewRequest: { userId, workspaceId, name, type, profileId, config, metadata }
13
+ * GET /api/hub/views — ListViewsQuery: { userId, workspaceId, type, profileId }
14
+ *
15
+ * Note: the backend accepts `profileId` (not `profileSlug`). The CLI accepts
16
+ * `--profile <slug>` for convenience and passes it as `profileId` — the backend
17
+ * resolves it at the entity level or stores it as-is. Pass a UUID if you need
18
+ * exact profile routing.
19
+ */
20
+ export interface ViewCreateOpts {
21
+ type: string;
22
+ profile?: string;
23
+ name?: string;
24
+ workspace?: string;
25
+ json?: boolean;
26
+ podUrl?: string;
27
+ apiKey?: string;
28
+ }
29
+ export interface ViewListOpts {
30
+ workspace?: string;
31
+ type?: string;
32
+ json?: boolean;
33
+ podUrl?: string;
34
+ apiKey?: string;
35
+ }
36
+ export declare function viewCreate(opts: ViewCreateOpts): Promise<void>;
37
+ export declare function viewList(opts: ViewListOpts): Promise<void>;
38
+ export interface ViewArrangeOpts {
39
+ file?: string;
40
+ workspace?: string;
41
+ json?: boolean;
42
+ podUrl?: string;
43
+ apiKey?: string;
44
+ }
45
+ /**
46
+ * POST /api/hub/views/:viewId/arrange
47
+ *
48
+ * Replaces the widget arrangement for a bento-type view.
49
+ * Payload: { userId, workspaceId?, widgets: BentoWidget[] }
50
+ *
51
+ * BentoWidget shape: { id, kind, x?, y?, w?, h?, config?, ...passthrough }
52
+ *
53
+ * Layout JSON can be provided via --file <path> or piped from stdin.
54
+ * Expected format: an array of BentoWidget objects, OR
55
+ * { widgets: BentoWidget[] } wrapper — both are accepted.
56
+ */
57
+ export declare function viewArrange(viewId: string, opts: ViewArrangeOpts): Promise<void>;