@synap-core/cli 1.6.1 → 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.
- package/dist/commands/agent-run.d.ts +47 -0
- package/dist/commands/agent-run.js +302 -0
- package/dist/commands/agent-run.js.map +1 -0
- package/dist/commands/artifact.d.ts +26 -0
- package/dist/commands/artifact.js +76 -0
- package/dist/commands/artifact.js.map +1 -0
- package/dist/commands/automation.d.ts +47 -0
- package/dist/commands/automation.js +600 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/cell.d.ts +55 -0
- package/dist/commands/cell.js +277 -0
- package/dist/commands/cell.js.map +1 -0
- package/dist/commands/connect.js +41 -7
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.js +0 -16
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/connectors.d.ts +31 -0
- package/dist/commands/connectors.js +276 -0
- package/dist/commands/connectors.js.map +1 -0
- package/dist/commands/context.d.ts +22 -0
- package/dist/commands/context.js +151 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/data-extra.d.ts +13 -0
- package/dist/commands/data-extra.js +161 -0
- package/dist/commands/data-extra.js.map +1 -0
- package/dist/commands/data.d.ts +13 -9
- package/dist/commands/data.js +220 -109
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/discover.d.ts +18 -0
- package/dist/commands/discover.js +71 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doc.d.ts +39 -0
- package/dist/commands/doc.js +130 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/events.d.ts +26 -0
- package/dist/commands/events.js +68 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/explain.d.ts +21 -0
- package/dist/commands/explain.js +248 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/graph.d.ts +18 -0
- package/dist/commands/graph.js +73 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/home.d.ts +12 -0
- package/dist/commands/home.js +54 -0
- package/dist/commands/home.js.map +1 -0
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.js +62 -102
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +9 -0
- package/dist/commands/keys.js +79 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/knowledge.d.ts +32 -18
- package/dist/commands/knowledge.js +303 -53
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/observe.d.ts +9 -0
- package/dist/commands/observe.js +90 -0
- package/dist/commands/observe.js.map +1 -0
- package/dist/commands/open.d.ts +15 -0
- package/dist/commands/open.js +44 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/pods.d.ts +5 -0
- package/dist/commands/pods.js +85 -37
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +7 -0
- package/dist/commands/proposals-actions.js +40 -0
- package/dist/commands/proposals-actions.js.map +1 -0
- package/dist/commands/providers.d.ts +38 -0
- package/dist/commands/providers.js +170 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/sessions.d.ts +31 -0
- package/dist/commands/sessions.js +224 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/skills-commands.d.ts +26 -0
- package/dist/commands/skills-commands.js +186 -0
- package/dist/commands/skills-commands.js.map +1 -0
- package/dist/commands/skills.d.ts +26 -0
- package/dist/commands/skills.js +195 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.js +68 -30
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/subscribe.d.ts +19 -0
- package/dist/commands/subscribe.js +91 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/view.d.ts +57 -0
- package/dist/commands/view.js +194 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.js +823 -206
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-templates.d.ts +25 -0
- package/dist/lib/agent-templates.js +148 -0
- package/dist/lib/agent-templates.js.map +1 -0
- package/dist/lib/agents-config.d.ts +4 -1
- package/dist/lib/agents-config.js +19 -2
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/capture-lane.d.ts +49 -0
- package/dist/lib/capture-lane.js +79 -0
- package/dist/lib/capture-lane.js.map +1 -0
- package/dist/lib/hub-client.d.ts +14 -0
- package/dist/lib/hub-client.js +45 -3
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/pod.d.ts +22 -1
- package/dist/lib/pod.js +32 -2
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/skills-installer.d.ts +1 -1
- package/dist/lib/skills-installer.js +1 -1
- package/dist/lib/skills-installer.js.map +1 -1
- package/dist/lib/targets.d.ts +17 -1
- package/dist/lib/targets.js +744 -70
- package/dist/lib/targets.js.map +1 -1
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +881 -0
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +907 -0
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +907 -0
- package/node_modules/@synap/hub-rest-client/dist/index.js +851 -0
- package/node_modules/@synap/hub-rest-client/package.json +45 -0
- package/node_modules/@synap/hub-rest-client/src/client.ts +1143 -0
- package/node_modules/@synap/hub-rest-client/src/errors.ts +30 -0
- package/node_modules/@synap/hub-rest-client/src/index.ts +111 -0
- package/node_modules/@synap/hub-rest-client/src/setup.ts +77 -0
- package/node_modules/@synap/hub-rest-client/src/types.ts +639 -0
- package/package.json +9 -2
- package/skills/synap/SKILL.md +374 -100
- package/skills/synap-ui/SKILL.md +12 -9
- package/dist/lib/templates.d.ts +0 -11
- package/dist/lib/templates.js +0 -13
- package/dist/lib/templates.js.map +0 -1
- 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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"}
|
package/dist/commands/status.js
CHANGED
|
@@ -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 {
|
|
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
|
-
// ──
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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 (!
|
|
130
|
-
log.dim("
|
|
131
|
-
log.dim("Run: synap login");
|
|
132
|
+
else if (!podHealthy) {
|
|
133
|
+
log.dim("Pod unreachable — cannot verify key.");
|
|
132
134
|
}
|
|
133
135
|
else {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
log.
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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.
|
|
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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,UAAU,EACV,cAAc,EACd,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC3C,CAAC;QAC1B,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,EAAE,CAAC;IAET,4BAA4B;IAC5B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,GAAG,CAAC,IAAI,CAAC,QAAQ,UAAU,MAAM,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;IACvF,GAAG,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC;IAEhG,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAE/B,0EAA0E;IAC1E,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,GAAG,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAEpC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,+DAA+D;YAC/D,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC;YACtC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,GAAG,CAAC,GAAG,CAAC,gCAAgC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YAC7F,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;gBAC/C,GAAG,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8EAA8E;YAC9E,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC,CAAC;YAC/E,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC7C,CAAC;IAED,0EAA0E;IAC1E,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,WAAW,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAChE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QACzC,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;QACzB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;QACrH,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;QAC3B,GAAG,CAAC,IAAI,CACN,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAC7E,CAAC;QACF,IAAI,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,IAAI,WAAW,EAAE,WAAW;YAAE,GAAG,CAAC,GAAG,CAAC,cAAc,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,0EAA0E;IAC1E,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,iBAAiB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,iBAAiB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAC/C,CAAC;IAED,0EAA0E;IAC1E,wEAAwE;IACxE,6EAA6E;IAC7E,sDAAsD;IACtD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,EAAE,CAAC;YACrC,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAChF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC;gBACxE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;gBAC3E,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,2BAA2B,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,uBAAuB,EAAE;gBAC1D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAGjC,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,EAAE,mBAAmB,CAAC;gBACxC,IAAI,GAAG,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvD,IAAI,MAAM,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;wBACtC,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;qBAAM,IAAI,GAAG,EAAE,CAAC;oBACf,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;oBAC3B,IAAI,KAAK,EAAE,CAAC;wBACV,GAAG,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;oBACpF,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;oBAC3E,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5B,IAAI,WAAW,EAAE,MAAM,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,iBAAiB,CAAC;QACzC,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;qBAClF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,MAAM,CACjB,YAAwC,CAAC,KAAK;wBAC/C,CAAE,YAA0C,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,CACrE,CAAC;oBACF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACd,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,oBAAoB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;oBACxF,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAChD,CAAC;IAED,0EAA0E;IAC1E,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC3F,CAAC;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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>;
|