@synap-core/cli 1.8.0 → 1.10.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-chat.d.ts +47 -0
- package/dist/commands/agent-chat.js +250 -0
- package/dist/commands/agent-chat.js.map +1 -0
- package/dist/commands/agent-run.js +3 -4
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/agents.js +85 -46
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/automation.js +2 -1
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/bridge-setup.d.ts +66 -0
- package/dist/commands/bridge-setup.js +1112 -0
- package/dist/commands/bridge-setup.js.map +1 -0
- package/dist/commands/cap-connections.d.ts +28 -0
- package/dist/commands/cap-connections.js +224 -0
- package/dist/commands/cap-connections.js.map +1 -0
- package/dist/commands/capability.d.ts +89 -0
- package/dist/commands/capability.js +1523 -0
- package/dist/commands/capability.js.map +1 -0
- package/dist/commands/centrality.d.ts +20 -0
- package/dist/commands/centrality.js +94 -0
- package/dist/commands/centrality.js.map +1 -0
- package/dist/commands/connect.d.ts +2 -0
- package/dist/commands/connect.js +16 -35
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/context.js +4 -6
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +1 -0
- package/dist/commands/data-extra.js +34 -10
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +4 -4
- package/dist/commands/data.js +241 -184
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +20 -0
- package/dist/commands/diagnose.js +143 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/digest.d.ts +17 -0
- package/dist/commands/digest.js +121 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/discover.d.ts +2 -0
- package/dist/commands/discover.js +25 -8
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/events.js +2 -1
- package/dist/commands/events.js.map +1 -1
- package/dist/commands/explain.d.ts +1 -1
- package/dist/commands/explain.js +18 -15
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/facet.d.ts +29 -0
- package/dist/commands/facet.js +113 -0
- package/dist/commands/facet.js.map +1 -0
- package/dist/commands/graph.js +2 -1
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/import.d.ts +38 -0
- package/dist/commands/import.js +440 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.js +35 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.js +3 -4
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/knowledge.d.ts +2 -0
- package/dist/commands/knowledge.js +61 -9
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/launch.d.ts +50 -0
- package/dist/commands/launch.js +790 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/lens.d.ts +45 -0
- package/dist/commands/lens.js +386 -0
- package/dist/commands/lens.js.map +1 -0
- package/dist/commands/market.d.ts +209 -0
- package/dist/commands/market.js +1368 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp.d.ts +42 -0
- package/dist/commands/mcp.js +184 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/observe.js +14 -11
- package/dist/commands/observe.js.map +1 -1
- package/dist/commands/open.d.ts +21 -4
- package/dist/commands/open.js +45 -4
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/pod.d.ts +100 -0
- package/dist/commands/pod.js +359 -0
- package/dist/commands/pod.js.map +1 -0
- package/dist/commands/pods.d.ts +1 -0
- package/dist/commands/pods.js +77 -15
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.js +40 -3
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/purge.d.ts +23 -0
- package/dist/commands/purge.js +148 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/raycast.d.ts +15 -0
- package/dist/commands/raycast.js +153 -0
- package/dist/commands/raycast.js.map +1 -0
- package/dist/commands/sessions.js +45 -21
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +195 -0
- package/dist/commands/skill-manage.js.map +1 -0
- package/dist/commands/skills-commands.js +2 -1
- package/dist/commands/skills-commands.js.map +1 -1
- package/dist/commands/skills.js +4 -3
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +3 -1
- package/dist/commands/status.js +166 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.d.ts +24 -0
- package/dist/commands/statusline.js +450 -0
- package/dist/commands/statusline.js.map +1 -0
- package/dist/commands/subscribe.js +2 -2
- package/dist/commands/subscribe.js.map +1 -1
- package/dist/commands/tools.d.ts +30 -0
- package/dist/commands/tools.js +315 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/versions.d.ts +27 -0
- package/dist/commands/versions.js +277 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/commands/view.js +3 -2
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/whoami.d.ts +21 -0
- package/dist/commands/whoami.js +129 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.js +776 -60
- package/dist/index.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +42 -0
- package/dist/lib/approval-poll.js +52 -0
- package/dist/lib/approval-poll.js.map +1 -0
- package/dist/lib/auth.d.ts +29 -6
- package/dist/lib/auth.js +105 -94
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/bundle-version.d.ts +11 -0
- package/dist/lib/bundle-version.js +33 -0
- package/dist/lib/bundle-version.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +30 -12
- package/dist/lib/capture-lane.js +71 -14
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/cp-packages.d.ts +121 -0
- package/dist/lib/cp-packages.js +218 -0
- package/dist/lib/cp-packages.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +46 -0
- package/dist/lib/describe-lens.js +33 -0
- package/dist/lib/describe-lens.js.map +1 -0
- package/dist/lib/hub-client.d.ts +78 -1
- package/dist/lib/hub-client.js +474 -22
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/installed.d.ts +51 -0
- package/dist/lib/installed.js +70 -0
- package/dist/lib/installed.js.map +1 -0
- package/dist/lib/next-steps.d.ts +61 -0
- package/dist/lib/next-steps.js +146 -0
- package/dist/lib/next-steps.js.map +1 -0
- package/dist/lib/pod.d.ts +91 -19
- package/dist/lib/pod.js +222 -56
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +95 -0
- package/dist/lib/project-ref.js +144 -0
- package/dist/lib/project-ref.js.map +1 -0
- package/dist/lib/project.d.ts +35 -0
- package/dist/lib/project.js +39 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/session-lens.d.ts +33 -0
- package/dist/lib/session-lens.js +76 -0
- package/dist/lib/session-lens.js.map +1 -0
- package/dist/lib/skill-import.d.ts +40 -0
- package/dist/lib/skill-import.js +203 -0
- package/dist/lib/skill-import.js.map +1 -0
- package/dist/lib/skills-installer.d.ts +17 -6
- package/dist/lib/skills-installer.js +133 -19
- package/dist/lib/skills-installer.js.map +1 -1
- package/dist/lib/suite.d.ts +28 -0
- package/dist/lib/suite.js +29 -0
- package/dist/lib/suite.js.map +1 -0
- package/dist/lib/superwhisper-import.d.ts +40 -0
- package/dist/lib/superwhisper-import.js +389 -0
- package/dist/lib/superwhisper-import.js.map +1 -0
- package/dist/lib/targets.d.ts +49 -1
- package/dist/lib/targets.js +420 -288
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/unwrapList.d.ts +1 -0
- package/dist/lib/unwrapList.js +20 -0
- package/dist/lib/unwrapList.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +10 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +9 -4
- package/skills/agent-os/SKILL.md +212 -0
- package/skills/manifest.json +5 -0
- package/skills/onboard/SKILL.md +186 -0
- package/skills/synap/SKILL.md +1182 -37
- package/skills/synap/_order.txt +37 -0
- package/skills/synap/_skill.yaml +24 -0
- package/skills/synap/authentication.md +10 -0
- package/skills/synap/automations.md +264 -0
- package/skills/synap/capabilities.md +107 -0
- package/skills/synap/capture.md +10 -0
- package/skills/synap/cli-operations.md +107 -0
- package/skills/synap/common-mistakes.md +12 -0
- package/skills/synap/creative-loop.md +43 -0
- package/skills/synap/crm.md +117 -0
- package/skills/synap/diagnostics.md +35 -0
- package/skills/synap/digesting-a-channel.md +38 -0
- package/skills/synap/document-embeds.md +123 -0
- package/skills/synap/escalation-ladder.md +71 -0
- package/skills/synap/focus-sessions.md +47 -0
- package/skills/synap/governance-rules.md +64 -0
- package/skills/synap/governance.md +6 -6
- package/skills/synap/graph-gardening.md +21 -0
- package/skills/synap/inline-patterns.md +38 -0
- package/skills/synap/lenses.md +38 -0
- package/skills/synap/linking-principle.md +39 -0
- package/skills/synap/linking.md +1 -0
- package/skills/synap/mental-model.md +45 -0
- package/skills/synap/more.md +7 -0
- package/skills/synap/multi-entity-capture.md +10 -0
- package/skills/synap/next-action.md +37 -0
- package/skills/synap/north-star.md +17 -0
- package/skills/synap/operating-mode-rules.md +45 -0
- package/skills/synap/operating-mode.md +9 -0
- package/skills/synap/quick-reference.md +67 -0
- package/skills/synap/reading.md +43 -0
- package/skills/synap/recap.md +21 -0
- package/skills/synap/reflexes.md +46 -0
- package/skills/synap/response-style.md +21 -0
- package/skills/synap/scope.md +13 -0
- package/skills/synap/showing.md +17 -0
- package/skills/synap/user-model.md +25 -0
- package/skills/synap/viewframe-cells.md +290 -0
- package/skills/synap/work-flow.md +113 -0
- package/skills/synap/worked-examples.md +53 -0
- package/skills/synap/workspace-design.md +45 -0
- package/skills/synap/workspace-edges.md +49 -0
- package/skills/synap/writes.md +156 -0
- package/skills/synap-schema/SKILL.md +97 -6
- package/skills/synap-schema/_order.txt +13 -0
- package/skills/synap-schema/_skill.yaml +22 -0
- package/skills/synap-schema/before-you-touch.md +14 -0
- package/skills/synap-schema/common-mistakes.md +9 -0
- package/skills/synap-schema/creating-profiles.md +17 -0
- package/skills/synap-schema/discover-profiles.md +24 -0
- package/skills/synap-schema/entity-scope.md +8 -0
- package/skills/synap-schema/extend-vs-create.md +31 -0
- package/skills/synap-schema/more.md +6 -0
- package/skills/synap-schema/overlay-properties.md +22 -0
- package/skills/synap-schema/profiles.md +3 -0
- package/skills/synap-schema/property-defs.md +29 -0
- package/skills/synap-schema/read-before-write.md +50 -0
- package/skills/synap-schema/relations.md +18 -0
- package/skills/synap-schema/worked-example.md +30 -0
- package/skills/synap-ui/SKILL.md +26 -2
- package/skills/synap-ui/_order.txt +13 -0
- package/skills/synap-ui/_skill.yaml +23 -0
- package/skills/synap-ui/ai-companion.md +27 -0
- package/skills/synap-ui/arranging-bento.md +8 -0
- package/skills/synap-ui/before-you-build.md +20 -0
- package/skills/synap-ui/bento-layouts.md +35 -0
- package/skills/synap-ui/common-mistakes.md +10 -0
- package/skills/synap-ui/creating-views.md +26 -0
- package/skills/synap-ui/four-builds.md +24 -0
- package/skills/synap-ui/more.md +7 -0
- package/skills/synap-ui/proposing-vs-extending.md +11 -0
- package/skills/synap-ui/view-list.md +24 -0
- package/skills/synap-ui/views.md +3 -0
- package/skills/synap-ui/worked-example.md +18 -0
- package/skills/synap-ui/workspaces.md +47 -0
- package/templates/automations/bookmark-enrichment.automation.json +44 -0
- package/templates/automations/mail-feed.automation.json +86 -0
- package/templates/automations/url-bookmark-capture.automation.json +70 -0
- package/templates/skills/README.md +21 -0
- package/templates/skills/authoring-automations/SKILL.md +95 -0
- package/templates/skills/authoring-automations/reference/node-matrix.md +49 -0
- package/templates/skills/authoring-capabilities/SKILL.md +93 -0
- package/templates/skills/authoring-capabilities/reference/template-anatomy.md +70 -0
- package/templates/skills/authoring-playbooks/SKILL.md +102 -0
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +35 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +64 -0
- package/templates/skills/bookmark-enrichment/SKILL.md +40 -0
- package/templates/skills/coordinating-agents/SKILL.md +32 -0
- package/templates/skills/coordinating-branches/SKILL.md +27 -0
- package/templates/skills/mapping-the-server/SKILL.md +54 -0
- package/templates/skills/reading-client-progress/SKILL.md +65 -0
- package/templates/skills/routing-to-channels/SKILL.md +54 -0
- package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
- package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
- package/templates/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
- package/templates/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
- package/templates/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
- package/templates/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
- package/templates/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
- package/dist/commands/connectors.d.ts +0 -31
- package/dist/commands/connectors.js +0 -276
- package/dist/commands/connectors.js.map +0 -1
- package/dist/commands/finish.d.ts +0 -25
- package/dist/commands/finish.js +0 -274
- package/dist/commands/finish.js.map +0 -1
- package/dist/commands/openclaw.d.ts +0 -40
- package/dist/commands/openclaw.js +0 -1148
- package/dist/commands/openclaw.js.map +0 -1
- package/dist/commands/security-audit.d.ts +0 -12
- package/dist/commands/security-audit.js +0 -100
- package/dist/commands/security-audit.js.map +0 -1
- package/dist/lib/hardening.d.ts +0 -18
- package/dist/lib/hardening.js +0 -214
- package/dist/lib/hardening.js.map +0 -1
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -881
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -907
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -907
- package/node_modules/@synap/hub-rest-client/dist/index.js +0 -851
- package/node_modules/@synap/hub-rest-client/package.json +0 -45
- package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1143
- package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
- package/node_modules/@synap/hub-rest-client/src/index.ts +0 -111
- package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -77
- package/node_modules/@synap/hub-rest-client/src/types.ts +0 -639
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
* Skill installer — copies the synap skill tree into a target's skills directory.
|
|
3
3
|
*
|
|
4
4
|
* Source resolution order:
|
|
5
|
-
* 1. $SYNAP_SKILLS_DIR (explicit override)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* 1. $SYNAP_SKILLS_DIR (explicit override) or an adjacent ../synap-backend/skills/
|
|
6
|
+
* checkout (monorepo dev mode) — both are local disk, dev escape hatches.
|
|
7
|
+
* 2. the connected pod — GET /api/hub/skills/system (pod-first: production
|
|
8
|
+
* users get whatever skill packages their pod actually serves, not a
|
|
9
|
+
* snapshot baked into this CLI's npm release).
|
|
10
|
+
* 3. bundled skills/ inside this package (production / published npm,
|
|
11
|
+
* offline, or pod unreachable).
|
|
9
12
|
*
|
|
10
13
|
* If none resolve, prints a manual install command and returns false.
|
|
11
14
|
*/
|
|
@@ -13,20 +16,129 @@ import fs from "node:fs";
|
|
|
13
16
|
import path from "node:path";
|
|
14
17
|
import { fileURLToPath } from "node:url";
|
|
15
18
|
import { log } from "../utils/logger.js";
|
|
16
|
-
|
|
19
|
+
import { resolveHubConfig } from "./hub-client.js";
|
|
20
|
+
/** Last-resort constant — only used when no manifest.json can be found on
|
|
21
|
+
* disk (dev or bundled) AND the pod is unreachable/unconfigured. */
|
|
22
|
+
export const SKILL_NAMES = ["synap", "synap-schema", "synap-ui"];
|
|
17
23
|
const __filename = fileURLToPath(import.meta.url);
|
|
18
24
|
const __dirname = path.dirname(__filename);
|
|
25
|
+
/**
|
|
26
|
+
* Baseline skills are safe to install into every agent context. Workflow
|
|
27
|
+
* packages are intentionally loaded only when the target/user asks for them;
|
|
28
|
+
* installing them by default turns progressive teaching back into prompt bulk.
|
|
29
|
+
*/
|
|
30
|
+
export function getDeliverableSkills() {
|
|
31
|
+
const srcDir = resolveDiskSource();
|
|
32
|
+
if (srcDir) {
|
|
33
|
+
const manifestPath = path.join(srcDir, "manifest.json");
|
|
34
|
+
try {
|
|
35
|
+
const raw = fs.readFileSync(manifestPath, "utf8");
|
|
36
|
+
const manifest = JSON.parse(raw);
|
|
37
|
+
const baseline = Array.isArray(manifest.baseline) ? manifest.baseline : [];
|
|
38
|
+
if (baseline.length > 0)
|
|
39
|
+
return baseline;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// manifest absent or malformed — fall through to hardcoded list
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return [...SKILL_NAMES];
|
|
46
|
+
}
|
|
19
47
|
export async function installSkills(opts) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
log.dim("
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
48
|
+
// 1. Local disk source — explicit override or monorepo dev checkout.
|
|
49
|
+
const diskSrc = resolveDiskSource();
|
|
50
|
+
if (diskSrc) {
|
|
51
|
+
log.dim("Skill source: local disk");
|
|
52
|
+
return installFromDisk(diskSrc, opts);
|
|
53
|
+
}
|
|
54
|
+
// 2. The connected pod.
|
|
55
|
+
const podPackages = await fetchSkillsFromPod();
|
|
56
|
+
if (podPackages && podPackages.length > 0) {
|
|
57
|
+
const names = opts.skills ?? getDeliverableSkills();
|
|
58
|
+
const installed = installFromPackages(podPackages, names, opts.destDir);
|
|
59
|
+
if (installed > 0) {
|
|
60
|
+
log.dim("Skill source: pod (/api/hub/skills/system)");
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// 3. Bundled fallback inside this package.
|
|
65
|
+
const bundledSrc = resolveBundledSource();
|
|
66
|
+
if (bundledSrc) {
|
|
67
|
+
log.dim("Skill source: bundled fallback");
|
|
68
|
+
return installFromDisk(bundledSrc, opts);
|
|
69
|
+
}
|
|
70
|
+
log.warn("Could not locate skills source.");
|
|
71
|
+
log.dim("Set SYNAP_SKILLS_DIR to the folder containing synap/, synap-schema/, synap-ui/");
|
|
72
|
+
log.dim("Or connect a pod: synap pods add");
|
|
73
|
+
log.dim("Or clone: git clone https://github.com/Synap-core/synap.git");
|
|
74
|
+
log.dim(`Then copy synap/synap-backend/skills/* → ${opts.destDir}/`);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
/** Fetch the pod's system skill packages over Hub Protocol. Returns null on
|
|
78
|
+
* any failure (no pod configured, unreachable, non-2xx, bad payload) so
|
|
79
|
+
* installSkills() can fall through to the bundled tier gracefully. */
|
|
80
|
+
async function fetchSkillsFromPod() {
|
|
81
|
+
try {
|
|
82
|
+
const cfg = await resolveHubConfig();
|
|
83
|
+
if (!cfg.podUrl || !cfg.apiKey)
|
|
84
|
+
return null;
|
|
85
|
+
const res = await fetch(`${cfg.podUrl}/api/hub/skills/system?scope=full`, {
|
|
86
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}` },
|
|
87
|
+
signal: AbortSignal.timeout(5000),
|
|
88
|
+
});
|
|
89
|
+
if (!res.ok)
|
|
90
|
+
return null;
|
|
91
|
+
const data = (await res.json());
|
|
92
|
+
if (!Array.isArray(data))
|
|
93
|
+
return null;
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Write the requested packages' files to destDir, same on-disk layout as
|
|
101
|
+
* installFromDisk (destDir/<slug>/<file>). Returns count installed. */
|
|
102
|
+
function installFromPackages(packages, names, destDir) {
|
|
103
|
+
let installed = 0;
|
|
104
|
+
for (const name of names) {
|
|
105
|
+
const pkg = packages.find((p) => p.slug === name);
|
|
106
|
+
if (!pkg || pkg.files.length === 0) {
|
|
107
|
+
log.warn(`Skill '${name}' not found on pod (skipping)`);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const dst = resolveWithin(destDir, name);
|
|
111
|
+
if (!dst) {
|
|
112
|
+
log.warn(`Skill '${name}' has an unsafe destination (skipping)`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
fs.mkdirSync(dst, { recursive: true });
|
|
116
|
+
for (const file of pkg.files) {
|
|
117
|
+
const filePath = resolveWithin(dst, file.path);
|
|
118
|
+
if (!filePath) {
|
|
119
|
+
log.warn(`Skill '${name}' contains unsafe file path '${file.path}' (skipping)`);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
123
|
+
fs.writeFileSync(filePath, file.content, "utf8");
|
|
124
|
+
}
|
|
125
|
+
installed++;
|
|
126
|
+
log.success(`Installed ${name} → ${shortenHome(dst)}`);
|
|
27
127
|
}
|
|
128
|
+
return installed;
|
|
129
|
+
}
|
|
130
|
+
/** Resolve a pod-supplied package/file name without allowing directory escape. */
|
|
131
|
+
function resolveWithin(root, relativePath) {
|
|
132
|
+
if (!relativePath || path.isAbsolute(relativePath))
|
|
133
|
+
return null;
|
|
134
|
+
const rootPath = path.resolve(root);
|
|
135
|
+
const target = path.resolve(rootPath, relativePath);
|
|
136
|
+
return target.startsWith(rootPath + path.sep) ? target : null;
|
|
137
|
+
}
|
|
138
|
+
function installFromDisk(srcDir, opts) {
|
|
139
|
+
const skills = opts.skills ?? getDeliverableSkills();
|
|
28
140
|
let installed = 0;
|
|
29
|
-
for (const name of
|
|
141
|
+
for (const name of skills) {
|
|
30
142
|
const src = path.join(srcDir, name);
|
|
31
143
|
if (!fs.existsSync(src)) {
|
|
32
144
|
log.warn(`Skill '${name}' not found in source (skipping)`);
|
|
@@ -43,14 +155,14 @@ export async function installSkills(opts) {
|
|
|
43
155
|
}
|
|
44
156
|
return true;
|
|
45
157
|
}
|
|
46
|
-
|
|
47
|
-
|
|
158
|
+
/** Explicit override ($SYNAP_SKILLS_DIR) or the adjacent ../synap-backend/skills/
|
|
159
|
+
* checkout (monorepo dev mode). Both are local-disk, dev-only escape hatches. */
|
|
160
|
+
function resolveDiskSource() {
|
|
48
161
|
const override = process.env.SYNAP_SKILLS_DIR;
|
|
49
162
|
if (override && fs.existsSync(override)) {
|
|
50
163
|
return override;
|
|
51
164
|
}
|
|
52
|
-
//
|
|
53
|
-
// __dirname is .../synap-cli/dist/lib OR .../synap-cli/src/lib
|
|
165
|
+
// __dirname is .../synap-cli/dist/lib OR .../synap-cli/src/lib
|
|
54
166
|
const candidates = [
|
|
55
167
|
path.resolve(__dirname, "..", "..", "..", "synap-backend", "skills"),
|
|
56
168
|
path.resolve(__dirname, "..", "..", "..", "..", "synap-backend", "skills"),
|
|
@@ -60,12 +172,14 @@ function resolveSkillsSource() {
|
|
|
60
172
|
return c;
|
|
61
173
|
}
|
|
62
174
|
}
|
|
63
|
-
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
/** Bundled inside the package — synap-cli/skills/ (production / published npm). */
|
|
178
|
+
function resolveBundledSource() {
|
|
64
179
|
const bundled = path.resolve(__dirname, "..", "..", "skills");
|
|
65
180
|
if (fs.existsSync(path.join(bundled, "synap", "SKILL.md"))) {
|
|
66
181
|
return bundled;
|
|
67
182
|
}
|
|
68
|
-
// 4. TODO: remote fetch fallback
|
|
69
183
|
return null;
|
|
70
184
|
}
|
|
71
185
|
function copyDir(src, dst) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-installer.js","sourceRoot":"","sources":["../../src/lib/skills-installer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skills-installer.js","sourceRoot":"","sources":["../../src/lib/skills-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suite detection — data-driven, not a hardcoded slug allowlist.
|
|
3
|
+
* =============================================================
|
|
4
|
+
*
|
|
5
|
+
* A SUITE is a headline package that installs a whole operating core by
|
|
6
|
+
* composing/requiring several constituent workspaces (e.g. `enterprise-os`,
|
|
7
|
+
* `the-arch`). It is authored in the template YAML's `meta.tags` and mirrored
|
|
8
|
+
* onto every catalog surface, so "is this a suite?" is a first-class signal
|
|
9
|
+
* rather than the `COMPANY_SUITE` / `PRIVATE_SUITE` slug constants the CLI used
|
|
10
|
+
* to hand-maintain.
|
|
11
|
+
*
|
|
12
|
+
* This is a MIRROR, not a second source of truth. The SSOT is
|
|
13
|
+
* `@synap-core/marketplace` (`SUITE_TAG` / `isSuite` in `src/types.ts`). That
|
|
14
|
+
* package is a React feature package with no build output and a barrel that
|
|
15
|
+
* drags in `react` / JSX, so a Node CLI compiled with `tsc` cannot import it
|
|
16
|
+
* without breaking its build. The value is a single string — mirrored here the
|
|
17
|
+
* same way `marketplace/types.ts` itself mirrors the CP's schema vocabulary.
|
|
18
|
+
*/
|
|
19
|
+
/** The tag that marks a package as a suite. SSOT: `@synap-core/marketplace`. */
|
|
20
|
+
export declare const SUITE_TAG: "suite";
|
|
21
|
+
/**
|
|
22
|
+
* A suite is identified by the presence of `SUITE_TAG` in its tags. Works on any
|
|
23
|
+
* catalog shape carrying tags — a bundled `CatalogEntry`, a `RemoteEntry`, or a
|
|
24
|
+
* raw `{ tags }` projection.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isSuite(entry: {
|
|
27
|
+
tags?: readonly string[] | null;
|
|
28
|
+
}): boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suite detection — data-driven, not a hardcoded slug allowlist.
|
|
3
|
+
* =============================================================
|
|
4
|
+
*
|
|
5
|
+
* A SUITE is a headline package that installs a whole operating core by
|
|
6
|
+
* composing/requiring several constituent workspaces (e.g. `enterprise-os`,
|
|
7
|
+
* `the-arch`). It is authored in the template YAML's `meta.tags` and mirrored
|
|
8
|
+
* onto every catalog surface, so "is this a suite?" is a first-class signal
|
|
9
|
+
* rather than the `COMPANY_SUITE` / `PRIVATE_SUITE` slug constants the CLI used
|
|
10
|
+
* to hand-maintain.
|
|
11
|
+
*
|
|
12
|
+
* This is a MIRROR, not a second source of truth. The SSOT is
|
|
13
|
+
* `@synap-core/marketplace` (`SUITE_TAG` / `isSuite` in `src/types.ts`). That
|
|
14
|
+
* package is a React feature package with no build output and a barrel that
|
|
15
|
+
* drags in `react` / JSX, so a Node CLI compiled with `tsc` cannot import it
|
|
16
|
+
* without breaking its build. The value is a single string — mirrored here the
|
|
17
|
+
* same way `marketplace/types.ts` itself mirrors the CP's schema vocabulary.
|
|
18
|
+
*/
|
|
19
|
+
/** The tag that marks a package as a suite. SSOT: `@synap-core/marketplace`. */
|
|
20
|
+
export const SUITE_TAG = "suite";
|
|
21
|
+
/**
|
|
22
|
+
* A suite is identified by the presence of `SUITE_TAG` in its tags. Works on any
|
|
23
|
+
* catalog shape carrying tags — a bundled `CatalogEntry`, a `RemoteEntry`, or a
|
|
24
|
+
* raw `{ tags }` projection.
|
|
25
|
+
*/
|
|
26
|
+
export function isSuite(entry) {
|
|
27
|
+
return entry.tags?.includes(SUITE_TAG) ?? false;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/lib/suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,OAAgB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAA0C;IAChE,OAAO,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Superwhisper store-first import — pair meta.json + output.wav into pod-wide
|
|
3
|
+
* notes with optional audio provenance. No AI structure on the WAV (IS STT is
|
|
4
|
+
* a stub); transcript comes from Superwhisper's meta.
|
|
5
|
+
*
|
|
6
|
+
* Idempotency: local ledger (~/.synap/import-ledger/superwhisper.json) maps
|
|
7
|
+
* recordingId → entityId so resume/re-run skips completed units. Server-side
|
|
8
|
+
* external_links land in Wave 3; ledger is the v1 resume story.
|
|
9
|
+
*/
|
|
10
|
+
export interface SuperwhisperImportOpts {
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
yes?: boolean;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
withAudio?: boolean;
|
|
15
|
+
/** Max units to process (for probes). */
|
|
16
|
+
limit?: number;
|
|
17
|
+
/** Max concurrent unit uploads (default 2). */
|
|
18
|
+
concurrency?: number;
|
|
19
|
+
/** Skip units already in the local ledger. Default true. */
|
|
20
|
+
resume?: boolean;
|
|
21
|
+
podUrl?: string;
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface SuperwhisperUnit {
|
|
25
|
+
recordingId: string;
|
|
26
|
+
dir: string;
|
|
27
|
+
metaPath: string;
|
|
28
|
+
wavPath: string | null;
|
|
29
|
+
wavSize: number;
|
|
30
|
+
datetime?: string;
|
|
31
|
+
language?: string;
|
|
32
|
+
duration?: number;
|
|
33
|
+
modeName?: string;
|
|
34
|
+
transcript: string;
|
|
35
|
+
title: string;
|
|
36
|
+
}
|
|
37
|
+
/** Expand a Superwhisper recordings root (or a single clip dir) into units. */
|
|
38
|
+
export declare function collectSuperwhisperUnits(root: string): SuperwhisperUnit[];
|
|
39
|
+
/** Run store-first Superwhisper import for one or more roots. */
|
|
40
|
+
export declare function importSuperwhisperStoreFirst(roots: string[], opts: SuperwhisperImportOpts): Promise<void>;
|