@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,224 @@
1
+ import chalk from "chalk";
2
+ import { log } from "../utils/logger.js";
3
+ import { resolveHubConfig, hubGet, hubPatch, hubPost, writeActiveSessionId, clearActiveSessionId, readActiveSessionId, } from "../lib/hub-client.js";
4
+ // ─── startSession ─────────────────────────────────────────────────────────────
5
+ export async function startSession(opts) {
6
+ try {
7
+ const cfg = await resolveHubConfig(opts);
8
+ const workspaceId = opts.workspace || cfg.workspaceId;
9
+ if (!workspaceId) {
10
+ console.error(chalk.red("Error: --workspace <id> is required (or set active workspace with 'synap use')"));
11
+ process.exit(1);
12
+ }
13
+ // Resolve caller userId from the hub key
14
+ const me = (await hubGet("/users/me", {}, cfg));
15
+ const userId = me?.id;
16
+ if (!userId) {
17
+ console.error(chalk.red("Error: could not resolve userId from /users/me"));
18
+ process.exit(1);
19
+ }
20
+ const body = {
21
+ workspaceId,
22
+ userId,
23
+ goal: opts.goal,
24
+ };
25
+ if (opts.taskId)
26
+ body.correlationId = `task:${opts.taskId}`;
27
+ const session = (await hubPost("/focus-sessions", body, cfg));
28
+ if (opts.json) {
29
+ console.log(JSON.stringify(session, null, 2));
30
+ return;
31
+ }
32
+ const id = String(session.id ?? "");
33
+ // Auto-attach: make this session active for the current terminal
34
+ writeActiveSessionId(id);
35
+ log.success(`Session started and attached`);
36
+ console.log(` ID: ${chalk.bold(id)}`);
37
+ console.log(` Goal: ${chalk.white(opts.goal)}`);
38
+ if (opts.taskId)
39
+ console.log(` Task: ${chalk.dim(opts.taskId)}`);
40
+ log.dim(` Active in this terminal (.synap-session)`);
41
+ console.log();
42
+ // Print the ID alone on a final line so scripts can grab it easily
43
+ console.log(id);
44
+ }
45
+ catch (e) {
46
+ console.error(chalk.red("Error: " + e.message));
47
+ process.exit(1);
48
+ }
49
+ }
50
+ // ─── listSessions ─────────────────────────────────────────────────────────────
51
+ export async function listSessions(opts) {
52
+ try {
53
+ const cfg = await resolveHubConfig(opts);
54
+ const params = {};
55
+ if (opts.workspace)
56
+ params.workspaceId = opts.workspace;
57
+ if (opts.status)
58
+ params.status = opts.status;
59
+ if (opts.limit)
60
+ params.limit = parseInt(opts.limit, 10);
61
+ const res = (await hubGet("/focus-sessions", params, cfg));
62
+ const sessions = res?.sessions ?? [];
63
+ if (opts.json) {
64
+ console.log(JSON.stringify(res, null, 2));
65
+ return;
66
+ }
67
+ if (!sessions.length) {
68
+ log.dim("No sessions found");
69
+ return;
70
+ }
71
+ for (const s of sessions) {
72
+ const status = String(s.status ?? "");
73
+ const statusColor = status === "active"
74
+ ? chalk.green(status)
75
+ : status === "paused"
76
+ ? chalk.yellow(status)
77
+ : chalk.dim(status);
78
+ const progress = typeof s.progress === "number" ? ` ${chalk.dim(`[${s.progress}%]`)}` : "";
79
+ console.log(` ${chalk.bold(String(s.id ?? "").slice(0, 8))} ${statusColor}${progress} ${chalk.white(String(s.goal ?? ""))}`);
80
+ }
81
+ }
82
+ catch (e) {
83
+ console.error(chalk.red("Error: " + e.message));
84
+ process.exit(1);
85
+ }
86
+ }
87
+ // ─── getSession ───────────────────────────────────────────────────────────────
88
+ export async function getSession(id, opts) {
89
+ try {
90
+ const cfg = await resolveHubConfig(opts);
91
+ const params = {};
92
+ if (opts.workspace)
93
+ params.workspaceId = opts.workspace;
94
+ const res = await hubGet(`/focus-sessions/${id}`, params, cfg);
95
+ if (opts.json) {
96
+ console.log(JSON.stringify(res, null, 2));
97
+ return;
98
+ }
99
+ const s = res;
100
+ log.info(`Session ${chalk.bold(String(s.id ?? ""))}`);
101
+ console.log(` Goal: ${chalk.white(String(s.goal ?? ""))}`);
102
+ console.log(` Status: ${chalk.cyan(String(s.status ?? ""))}`);
103
+ if (typeof s.progress === "number")
104
+ console.log(` Progress: ${s.progress}%`);
105
+ if (s.templateId)
106
+ console.log(` Template: ${chalk.dim(String(s.templateId))}`);
107
+ if (Array.isArray(s.agentIds) && s.agentIds.length)
108
+ console.log(` Agents: ${s.agentIds.join(", ")}`);
109
+ if (Array.isArray(s.expectedOutputs) && s.expectedOutputs.length)
110
+ console.log(` Outputs: ${s.expectedOutputs.map((o) => o.label).join(", ")}`);
111
+ if (s.correlationId)
112
+ console.log(` CorrelationId: ${chalk.dim(String(s.correlationId))}`);
113
+ }
114
+ catch (e) {
115
+ console.error(chalk.red("Error: " + e.message));
116
+ process.exit(1);
117
+ }
118
+ }
119
+ // ─── updateSession ────────────────────────────────────────────────────────────
120
+ export async function updateSession(id, opts) {
121
+ try {
122
+ const cfg = await resolveHubConfig(opts);
123
+ if (!opts.workspace) {
124
+ console.error(chalk.red("Error: --workspace <id> is required"));
125
+ process.exit(1);
126
+ }
127
+ const body = { workspaceId: opts.workspace };
128
+ if (opts.progress !== undefined)
129
+ body.progress = parseInt(opts.progress, 10);
130
+ if (opts.status)
131
+ body.status = opts.status;
132
+ if (opts.goal)
133
+ body.goal = opts.goal;
134
+ const res = await hubPatch(`/focus-sessions/${id}`, body, cfg);
135
+ if (opts.json) {
136
+ console.log(JSON.stringify(res, null, 2));
137
+ return;
138
+ }
139
+ log.success(`Session updated ${chalk.dim(id.slice(0, 8))}`);
140
+ if (opts.progress !== undefined)
141
+ log.dim(` progress → ${opts.progress}%`);
142
+ if (opts.status)
143
+ log.dim(` status → ${opts.status}`);
144
+ }
145
+ catch (e) {
146
+ console.error(chalk.red("Error: " + e.message));
147
+ process.exit(1);
148
+ }
149
+ }
150
+ // ─── attachSession ────────────────────────────────────────────────────────────
151
+ export async function attachSession(id, opts) {
152
+ // Validate the session exists before attaching
153
+ try {
154
+ const cfg = await resolveHubConfig(opts);
155
+ await hubGet(`/focus-sessions/${id}`, {}, cfg);
156
+ }
157
+ catch (e) {
158
+ console.error(chalk.red("Error: session not found — " + e.message));
159
+ process.exit(1);
160
+ }
161
+ writeActiveSessionId(id);
162
+ if (opts.json) {
163
+ console.log(JSON.stringify({ ok: true, sessionId: id }));
164
+ return;
165
+ }
166
+ log.success(`Session attached ${chalk.dim(id.slice(0, 8))}`);
167
+ log.dim(` All hub calls in this terminal will tag X-Session-Id: ${id.slice(0, 8)}…`);
168
+ }
169
+ // ─── detachSession ────────────────────────────────────────────────────────────
170
+ export function detachSession(opts) {
171
+ const current = readActiveSessionId();
172
+ clearActiveSessionId();
173
+ if (opts.json) {
174
+ console.log(JSON.stringify({ ok: true }));
175
+ return;
176
+ }
177
+ if (current) {
178
+ log.success(`Session detached ${chalk.dim(current.slice(0, 8))}`);
179
+ }
180
+ else {
181
+ log.dim("No active session to detach");
182
+ }
183
+ }
184
+ // ─── sessionStatus ────────────────────────────────────────────────────────────
185
+ export function sessionStatus(opts) {
186
+ const id = readActiveSessionId();
187
+ if (opts.json) {
188
+ console.log(JSON.stringify({ sessionId: id ?? null }));
189
+ return;
190
+ }
191
+ if (id) {
192
+ log.info(`Active session: ${chalk.bold(id.slice(0, 8))}… ${chalk.dim("(from .synap-session or SYNAP_SESSION_ID)")}`);
193
+ }
194
+ else {
195
+ log.dim("No active session — run `synap session start` or `synap session attach <id>`");
196
+ }
197
+ }
198
+ // ─── closeSession ─────────────────────────────────────────────────────────────
199
+ export async function closeSession(id, opts) {
200
+ try {
201
+ const cfg = await resolveHubConfig(opts);
202
+ if (!opts.workspace) {
203
+ console.error(chalk.red("Error: --workspace <id> is required"));
204
+ process.exit(1);
205
+ }
206
+ // Close via PATCH — the /focus-sessions/:id endpoint sets closedAt automatically
207
+ // when status transitions to "closed"
208
+ const body = { workspaceId: opts.workspace, status: "closed" };
209
+ await hubPatch(`/focus-sessions/${id}`, body, cfg);
210
+ // Detach if this was the active terminal session
211
+ if (readActiveSessionId() === id)
212
+ clearActiveSessionId();
213
+ if (opts.json) {
214
+ console.log(JSON.stringify({ ok: true }));
215
+ return;
216
+ }
217
+ log.success(`Session closed ${chalk.dim(id.slice(0, 8))}`);
218
+ }
219
+ catch (e) {
220
+ console.error(chalk.red("Error: " + e.message));
221
+ process.exit(1);
222
+ }
223
+ }
224
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * synap skill — skill knowledge base commands
3
+ *
4
+ * Manage agent skills stored in the pod's agent_skills table.
5
+ * Skills are structured knowledge packages shared across all agents.
6
+ *
7
+ * Commands:
8
+ * synap skill suggest <topic> Search skills by topic/query
9
+ * synap skill get <slug> Fetch a single skill by slug
10
+ * synap skill sync [--from] Bulk import skills from local disk
11
+ */
12
+ interface SkillOpts {
13
+ podUrl?: string;
14
+ apiKey?: string;
15
+ }
16
+ export declare function suggestSkills(topic: string, opts: SkillOpts): Promise<void>;
17
+ export declare function getSkill(slug: string, opts: SkillOpts): Promise<void>;
18
+ /**
19
+ * Sync skill files from local disk into the pod's agent_skills table.
20
+ * Default source: ~/.claude/skills/ — each subdirectory with a SKILL.md
21
+ * becomes one agent_skill row. Slug = directory name.
22
+ */
23
+ export declare function syncSkills(opts: SkillOpts & {
24
+ from?: string;
25
+ }): Promise<void>;
26
+ export {};
@@ -0,0 +1,186 @@
1
+ /**
2
+ * synap skill — skill knowledge base commands
3
+ *
4
+ * Manage agent skills stored in the pod's agent_skills table.
5
+ * Skills are structured knowledge packages shared across all agents.
6
+ *
7
+ * Commands:
8
+ * synap skill suggest <topic> Search skills by topic/query
9
+ * synap skill get <slug> Fetch a single skill by slug
10
+ * synap skill sync [--from] Bulk import skills from local disk
11
+ */
12
+ import chalk from "chalk";
13
+ import fs from "node:fs";
14
+ import path from "node:path";
15
+ import os from "node:os";
16
+ import { readFile } from "node:fs/promises";
17
+ import { log } from "../utils/logger.js";
18
+ import { resolveHubConfig, hubGet, hubPost } from "../lib/hub-client.js";
19
+ import ora from "ora";
20
+ // ─── suggest ───────────────────────────────────────────────────────────────
21
+ export async function suggestSkills(topic, opts) {
22
+ try {
23
+ const cfg = await resolveHubConfig(opts);
24
+ const result = await hubGet("/agent-skills", { topic, limit: 20 }, cfg);
25
+ const skills = result.skills ?? [];
26
+ if (skills.length === 0) {
27
+ log.info(`No skills found for topic "${topic}".`);
28
+ log.dim("Try: synap skill sync — to import skills from ~/.claude/skills/");
29
+ return;
30
+ }
31
+ log.heading(`Skills matching "${topic}" (${result.total} total)`);
32
+ log.blank();
33
+ for (const s of skills) {
34
+ const tagStr = s.tags.length > 0 ? chalk.dim(` [${s.tags.slice(0, 3).join(", ")}${s.tags.length > 3 ? ", …" : ""}]`) : "";
35
+ const desc = s.description ? chalk.dim(` ${s.description}`) : "";
36
+ console.log(` ${chalk.bold(s.slug)}${tagStr}`);
37
+ console.log(` ${chalk.cyan(s.name)}${desc}`);
38
+ const topicsStr = s.topics.length > 0 ? chalk.dim(` topics: ${s.topics.join(", ")}`) : "";
39
+ if (topicsStr)
40
+ console.log(topicsStr);
41
+ console.log();
42
+ }
43
+ log.dim("To view a skill body: synap skill get <slug>");
44
+ }
45
+ catch (e) {
46
+ log.error("Error: " + e.message);
47
+ process.exit(1);
48
+ }
49
+ }
50
+ // ─── get ───────────────────────────────────────────────────────────────────
51
+ export async function getSkill(slug, opts) {
52
+ try {
53
+ const cfg = await resolveHubConfig(opts);
54
+ const skill = await hubGet(`/agent-skills/by-slug/${encodeURIComponent(slug)}`, {}, cfg);
55
+ if (!skill || !skill.slug) {
56
+ log.error(`Skill "${slug}" not found.`);
57
+ log.dim("Try: synap skill suggest <topic> — to find available skills");
58
+ return;
59
+ }
60
+ log.heading(`${skill.name} ${chalk.dim(`(${skill.slug})`)}`);
61
+ log.blank();
62
+ if (skill.description) {
63
+ console.log(` ${skill.description}`);
64
+ log.blank();
65
+ }
66
+ if (skill.topics.length > 0) {
67
+ console.log(` ${chalk.dim("topics:")} ${skill.topics.join(", ")}`);
68
+ }
69
+ if (skill.tags.length > 0) {
70
+ console.log(` ${chalk.dim("tags:")} ${skill.tags.join(", ")}`);
71
+ }
72
+ if (skill.version) {
73
+ console.log(` ${chalk.dim("version:")} ${skill.version}`);
74
+ }
75
+ if (skill.author) {
76
+ console.log(` ${chalk.dim("author:")} ${skill.author}`);
77
+ }
78
+ log.blank();
79
+ // Print the skill body
80
+ console.log(skill.body);
81
+ log.blank();
82
+ }
83
+ catch (e) {
84
+ log.error("Error: " + e.message);
85
+ process.exit(1);
86
+ }
87
+ }
88
+ // ─── sync ──────────────────────────────────────────────────────────────────
89
+ /**
90
+ * Sync skill files from local disk into the pod's agent_skills table.
91
+ * Default source: ~/.claude/skills/ — each subdirectory with a SKILL.md
92
+ * becomes one agent_skill row. Slug = directory name.
93
+ */
94
+ export async function syncSkills(opts) {
95
+ const skillsDir = opts.from ?? path.join(os.homedir(), ".claude", "skills");
96
+ if (!fs.existsSync(skillsDir)) {
97
+ log.error(`Skills directory not found: ${skillsDir}`);
98
+ log.dim("Create skill files at ~/.claude/skills/<name>/SKILL.md");
99
+ return;
100
+ }
101
+ const spinner = ora("Scanning skills directory...").start();
102
+ const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
103
+ const skillDirs = entries.filter((e) => e.isDirectory() || (e.isSymbolicLink() && fs.statSync(path.join(skillsDir, e.name)).isDirectory()));
104
+ if (skillDirs.length === 0) {
105
+ spinner.fail("No skill directories found");
106
+ log.dim(`Each skill needs: ${skillsDir}/<slug>/SKILL.md`);
107
+ return;
108
+ }
109
+ spinner.text = `Found ${skillDirs.length} skill(s)`;
110
+ const cfg = await resolveHubConfig(opts);
111
+ let imported = 0;
112
+ let skipped = 0;
113
+ let errors = 0;
114
+ for (const dir of skillDirs) {
115
+ const slug = dir.name;
116
+ const skillPath = path.join(skillsDir, slug, "SKILL.md");
117
+ const metaPath = path.join(skillsDir, slug, "meta.json");
118
+ if (!fs.existsSync(skillPath)) {
119
+ skipped++;
120
+ continue;
121
+ }
122
+ try {
123
+ const body = await readFile(skillPath, "utf-8");
124
+ let name = slug;
125
+ let description = "";
126
+ let topics = [];
127
+ let tags = [];
128
+ let version = "";
129
+ let author = "";
130
+ // Read optional meta.json
131
+ if (fs.existsSync(metaPath)) {
132
+ try {
133
+ const meta = JSON.parse(await readFile(metaPath, "utf-8"));
134
+ name = meta.name ?? slug;
135
+ description = meta.description ?? "";
136
+ topics = meta.topics ?? [];
137
+ tags = meta.tags ?? [];
138
+ version = meta.version ?? "";
139
+ author = meta.author ?? "";
140
+ }
141
+ catch {
142
+ // non-fatal
143
+ }
144
+ }
145
+ // Extract name from first heading if not from meta
146
+ if (name === slug) {
147
+ const firstLine = body.split("\n").find((l) => l.startsWith("# "));
148
+ if (firstLine)
149
+ name = firstLine.replace(/^#\s+/, "").trim();
150
+ }
151
+ await hubPost("/agent-skills", {
152
+ slug,
153
+ name,
154
+ description: description || null,
155
+ topics,
156
+ body,
157
+ source: `file://${skillPath}`,
158
+ author: author || os.userInfo().username,
159
+ version: version || null,
160
+ tags,
161
+ }, cfg);
162
+ imported++;
163
+ spinner.text = `Imported: ${slug}`;
164
+ }
165
+ catch (e) {
166
+ const err = e;
167
+ // 409 = slug exists — skip
168
+ if (err.message.includes("409")) {
169
+ skipped++;
170
+ continue;
171
+ }
172
+ errors++;
173
+ spinner.text = `Error: ${slug} — ${err.message.slice(0, 80)}`;
174
+ }
175
+ }
176
+ if (errors > 0) {
177
+ spinner.warn(`Done: ${imported} imported, ${skipped} skipped, ${errors} errors`);
178
+ }
179
+ else {
180
+ spinner.succeed(`Done: ${imported} imported, ${skipped} skipped`);
181
+ }
182
+ log.blank();
183
+ log.dim("Try: synap skill suggest <topic> — to search skills");
184
+ log.dim(" synap skill get <slug> — to view a skill");
185
+ }
186
+ //# sourceMappingURL=skills-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-commands.js","sourceRoot":"","sources":["../../src/commands/skills-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,GAAG,MAAM,KAAK,CAAC;AAsBtB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,IAAe;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,eAAe,EACf,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EACpB,GAAG,CACuC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAEnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,8BAA8B,KAAK,IAAI,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,oBAAoB,KAAK,MAAM,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;QAClE,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1H,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,IAAI,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAe;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,MAAM,MAAM,CACxB,yBAAyB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACnD,EAAE,EACF,GAAG,CACU,CAAC;QAEhB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC;YACxC,GAAG,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAmC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE5E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAC1G,CAAC;IAEF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,qBAAqB,SAAS,kBAAkB,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,GAAG,SAAS,SAAS,CAAC,MAAM,WAAW,CAAC;IAEpD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAEzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,MAAM,GAAa,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,0BAA0B;YAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC3D,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;oBACzB,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;oBACrC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;oBAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;oBACvB,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC7B,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,IAAI,SAAS;oBAAE,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,CAAC;YAED,MAAM,OAAO,CACX,eAAe,EACf;gBACE,IAAI;gBACJ,IAAI;gBACJ,WAAW,EAAE,WAAW,IAAI,IAAI;gBAChC,MAAM;gBACN,IAAI;gBACJ,MAAM,EAAE,UAAU,SAAS,EAAE;gBAC7B,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ;gBACxC,OAAO,EAAE,OAAO,IAAI,IAAI;gBACxB,IAAI;aACL,EACD,GAAG,CACJ,CAAC;YAEF,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,GAAG,aAAa,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAU,CAAC;YACvB,2BAA2B;YAC3B,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,GAAG,UAAU,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,cAAc,OAAO,aAAa,MAAM,SAAS,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,SAAS,QAAQ,cAAc,OAAO,UAAU,CAAC,CAAC;IACpE,CAAC;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IAChE,GAAG,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type BaseOpts } from "./data.js";
2
+ export interface SkillOpts extends BaseOpts {
3
+ session?: string;
4
+ workspace?: string;
5
+ }
6
+ /**
7
+ * Gather context for a session:
8
+ * 1. Query /entities/recall from the pod (semantic search in pod KG)
9
+ * 2. Read local CLAUDE.md if it exists
10
+ * 3. Read .claude/kg-verify if it exists
11
+ * Returns a markdown context report and updates the session with it.
12
+ */
13
+ export declare function gatherContext(opts: SkillOpts & {
14
+ session: string;
15
+ }): Promise<void>;
16
+ /**
17
+ * Run the project's type-check + test gate and store the result on the session.
18
+ * The AI reads CLAUDE.md to find the right commands; this function accepts them
19
+ * explicitly so the AI can pass exactly what to run.
20
+ *
21
+ * Usage: synap skill verify-code --session <id> --workspace <id> --cmd "pnpm type-check"
22
+ */
23
+ export declare function verifyCode(opts: SkillOpts & {
24
+ session: string;
25
+ cmd?: string;
26
+ }): Promise<void>;