@synap-core/cli 1.7.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.d.ts +47 -0
- package/dist/commands/agent-run.js +301 -0
- package/dist/commands/agent-run.js.map +1 -0
- package/dist/commands/agents.js +85 -46
- package/dist/commands/agents.js.map +1 -1
- 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 +601 -0
- package/dist/commands/automation.js.map +1 -0
- 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/cell.d.ts +55 -0
- package/dist/commands/cell.js +277 -0
- package/dist/commands/cell.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 +25 -10
- 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/context.d.ts +22 -0
- package/dist/commands/context.js +149 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/data-extra.d.ts +14 -0
- package/dist/commands/data-extra.js +185 -0
- package/dist/commands/data-extra.js.map +1 -0
- package/dist/commands/data.d.ts +14 -10
- package/dist/commands/data.js +353 -192
- 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/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 +69 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/explain.d.ts +21 -0
- package/dist/commands/explain.js +251 -0
- package/dist/commands/explain.js.map +1 -0
- 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.d.ts +18 -0
- package/dist/commands/graph.js +74 -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/import.d.ts +38 -0
- package/dist/commands/import.js +440 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.js +97 -118
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +9 -0
- package/dist/commands/keys.js +78 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/knowledge.d.ts +34 -18
- package/dist/commands/knowledge.js +355 -57
- 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.d.ts +9 -0
- package/dist/commands/observe.js +93 -0
- package/dist/commands/observe.js.map +1 -0
- package/dist/commands/open.d.ts +32 -0
- package/dist/commands/open.js +85 -0
- package/dist/commands/open.js.map +1 -0
- 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 +6 -0
- package/dist/commands/pods.js +160 -50
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +7 -0
- package/dist/commands/proposals-actions.js +77 -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/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.d.ts +31 -0
- package/dist/commands/sessions.js +248 -0
- package/dist/commands/sessions.js.map +1 -0
- 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.d.ts +26 -0
- package/dist/commands/skills-commands.js +187 -0
- package/dist/commands/skills-commands.js.map +1 -0
- package/dist/commands/skills.d.ts +26 -0
- package/dist/commands/skills.js +196 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +3 -1
- package/dist/commands/status.js +231 -41
- 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.d.ts +19 -0
- package/dist/commands/subscribe.js +91 -0
- package/dist/commands/subscribe.js.map +1 -0
- 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.d.ts +57 -0
- package/dist/commands/view.js +195 -0
- package/dist/commands/view.js.map +1 -0
- 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.d.ts +3 -4
- package/dist/index.js +1524 -202
- 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/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 +67 -0
- package/dist/lib/capture-lane.js +136 -0
- package/dist/lib/capture-lane.js.map +1 -0
- 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 +84 -1
- package/dist/lib/hub-client.js +502 -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 +104 -19
- package/dist/lib/pod.js +245 -57
- 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 +16 -5
- package/dist/lib/skills-installer.js +132 -18
- 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 +66 -2
- package/dist/lib/targets.js +914 -132
- 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 +10 -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 +1524 -104
- 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 +38 -11
- 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/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/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
- 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
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap providers
|
|
3
|
+
*
|
|
4
|
+
* Discover and configure AI providers from the connected pod.
|
|
5
|
+
*
|
|
6
|
+
* synap providers list — show available providers on the pod
|
|
7
|
+
* synap providers pull [--target] — write provider config to a local tool
|
|
8
|
+
*/
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import ora from "ora";
|
|
11
|
+
import prompts from "prompts";
|
|
12
|
+
import { log } from "../utils/logger.js";
|
|
13
|
+
import { getActivePodConfig } from "../lib/pod.js";
|
|
14
|
+
/**
|
|
15
|
+
* Fetch enabled providers (model IDs only, no keys) from the pod.
|
|
16
|
+
* Used for display / listing.
|
|
17
|
+
*/
|
|
18
|
+
export async function fetchPodProviders(podUrl, apiKey) {
|
|
19
|
+
let res;
|
|
20
|
+
try {
|
|
21
|
+
res = await fetch(`${podUrl.replace(/\/$/, "")}/api/hub/providers/models`, {
|
|
22
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
23
|
+
signal: AbortSignal.timeout(8000),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
throw new Error(`Could not reach pod at ${podUrl}: ${err.message}`);
|
|
28
|
+
}
|
|
29
|
+
if (res.status === 401 || res.status === 403) {
|
|
30
|
+
throw new Error(`Credentials rejected by pod (HTTP ${res.status}) — check your API key.`);
|
|
31
|
+
}
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
throw new Error(`Pod returned HTTP ${res.status} for /api/hub/providers/models.`);
|
|
34
|
+
}
|
|
35
|
+
const data = (await res.json());
|
|
36
|
+
return data.providers ?? [];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Fetch enabled providers WITH decrypted API keys from the pod vault.
|
|
40
|
+
* The pod resolves: user-level override > workspace > pod-wide key.
|
|
41
|
+
* Used by local tool installers (opencode, aider, etc.) that need real keys.
|
|
42
|
+
*/
|
|
43
|
+
export async function fetchPodCredentials(podUrl, apiKey, workspaceId) {
|
|
44
|
+
const base = podUrl.replace(/\/$/, "");
|
|
45
|
+
const url = workspaceId
|
|
46
|
+
? `${base}/api/hub/providers/credentials?workspaceId=${encodeURIComponent(workspaceId)}`
|
|
47
|
+
: `${base}/api/hub/providers/credentials`;
|
|
48
|
+
let res;
|
|
49
|
+
try {
|
|
50
|
+
res = await fetch(url, {
|
|
51
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
52
|
+
signal: AbortSignal.timeout(8000),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
throw new Error(`Could not reach pod at ${podUrl}: ${err.message}`);
|
|
57
|
+
}
|
|
58
|
+
if (res.status === 401 || res.status === 403) {
|
|
59
|
+
throw new Error(`Credentials rejected by pod (HTTP ${res.status}) — check your API key.`);
|
|
60
|
+
}
|
|
61
|
+
if (!res.ok) {
|
|
62
|
+
throw new Error(`Pod returned HTTP ${res.status} for /api/hub/providers/credentials.`);
|
|
63
|
+
}
|
|
64
|
+
const data = (await res.json());
|
|
65
|
+
return data.providers ?? [];
|
|
66
|
+
}
|
|
67
|
+
// ─── Commands ────────────────────────────────────────────────────────────────
|
|
68
|
+
export async function providersList(opts) {
|
|
69
|
+
let podUrl = opts.podUrl;
|
|
70
|
+
let apiKey = opts.apiKey;
|
|
71
|
+
if (!podUrl || !apiKey) {
|
|
72
|
+
const cfg = getActivePodConfig();
|
|
73
|
+
podUrl = podUrl ?? cfg?.podUrl;
|
|
74
|
+
apiKey = apiKey ?? cfg?.hubApiKey;
|
|
75
|
+
}
|
|
76
|
+
if (!podUrl || !apiKey) {
|
|
77
|
+
log.error("Not connected to a pod. Run: synap init");
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
const spinner = ora("Fetching providers from pod...").start();
|
|
81
|
+
let providers;
|
|
82
|
+
try {
|
|
83
|
+
providers = await fetchPodProviders(podUrl, apiKey);
|
|
84
|
+
spinner.succeed(`Fetched ${providers.length} provider(s).`);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
spinner.fail(err.message);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
if (opts.json) {
|
|
91
|
+
console.log(JSON.stringify(providers, null, 2));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (providers.length === 0) {
|
|
95
|
+
log.warn("No enabled providers found on this pod.");
|
|
96
|
+
log.dim(`Add providers at: ${podUrl}/admin/intelligence → Providers`);
|
|
97
|
+
log.dim("Then re-run: synap providers list");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
log.heading(`AI Providers (${providers.length})`);
|
|
101
|
+
for (const p of providers) {
|
|
102
|
+
const modelCount = p.models.length;
|
|
103
|
+
const badge = p.enabled ? chalk.green("●") : chalk.red("○");
|
|
104
|
+
console.log(` ${badge} ${chalk.bold(p.name.padEnd(20))} ${chalk.dim(p.providerId)}`);
|
|
105
|
+
if (modelCount > 0) {
|
|
106
|
+
const ids = p.models.slice(0, 3).map((m) => m.id);
|
|
107
|
+
const extra = modelCount > 3 ? chalk.dim(` +${modelCount - 3} more`) : "";
|
|
108
|
+
console.log(` ${chalk.dim("models:")} ${ids.join(", ")}${extra}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
console.log();
|
|
112
|
+
log.dim(`IS endpoint: ${podUrl}/v1 (OpenAI-compatible — use with any OpenAI-SDK client)`);
|
|
113
|
+
}
|
|
114
|
+
export async function providersPull(opts) {
|
|
115
|
+
let podUrl = opts.podUrl;
|
|
116
|
+
let apiKey = opts.apiKey;
|
|
117
|
+
if (!podUrl || !apiKey) {
|
|
118
|
+
const cfg = getActivePodConfig();
|
|
119
|
+
podUrl = podUrl ?? cfg?.podUrl;
|
|
120
|
+
apiKey = apiKey ?? cfg?.hubApiKey;
|
|
121
|
+
}
|
|
122
|
+
if (!podUrl || !apiKey) {
|
|
123
|
+
log.error("Not connected to a pod. Run: synap init");
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const VALID_TARGETS = ["opencode", "aider", "show"];
|
|
127
|
+
let target = opts.target;
|
|
128
|
+
if (target && !VALID_TARGETS.includes(target)) {
|
|
129
|
+
log.error(`Unknown target: ${chalk.bold(target)}`);
|
|
130
|
+
log.dim(`Valid targets: ${VALID_TARGETS.join(", ")}`);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
if (!target) {
|
|
134
|
+
const { picked } = await prompts({
|
|
135
|
+
type: "select",
|
|
136
|
+
name: "picked",
|
|
137
|
+
message: "Configure provider for which tool?",
|
|
138
|
+
choices: [
|
|
139
|
+
{ title: "opencode", description: "Write ~/.config/opencode/opencode.json", value: "opencode" },
|
|
140
|
+
{ title: "aider", description: "Write ~/.aider.conf.yml", value: "aider" },
|
|
141
|
+
{ title: "Show IS endpoint (manual setup)", description: "Print base URL + key for any OpenAI-compatible client", value: "show" },
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
target = picked;
|
|
145
|
+
if (!target)
|
|
146
|
+
return; // user cancelled (Ctrl-C)
|
|
147
|
+
}
|
|
148
|
+
let ok = true;
|
|
149
|
+
if (target === "opencode") {
|
|
150
|
+
const { installOpencode } = await import("../lib/targets.js");
|
|
151
|
+
ok = await installOpencode({ podUrl, apiKey });
|
|
152
|
+
}
|
|
153
|
+
else if (target === "aider") {
|
|
154
|
+
const { installAider } = await import("../lib/targets.js");
|
|
155
|
+
ok = await installAider({ podUrl, apiKey });
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// "show" — print the IS endpoint for manual configuration
|
|
159
|
+
log.heading("Intelligence Service endpoint");
|
|
160
|
+
log.info(`Base URL: ${chalk.cyan(podUrl + "/v1")}`);
|
|
161
|
+
log.info(`API Key: ${chalk.dim(apiKey)}`);
|
|
162
|
+
log.blank();
|
|
163
|
+
log.dim("This is an OpenAI-compatible endpoint. Use it as your AI provider base URL.");
|
|
164
|
+
log.dim("The API key is your Hub Protocol key — it authenticates and scopes requests.");
|
|
165
|
+
}
|
|
166
|
+
if (!ok) {
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap workspace purge <id|name>` / `synap project purge <id|name>` —
|
|
3
|
+
* HARD teardown for the pod owner. Irreversible.
|
|
4
|
+
*
|
|
5
|
+
* Calls the backend purge endpoints (owner-only):
|
|
6
|
+
* workspace: POST /api/hub/workspaces/:id/purge body { confirm: "<exact name>" }
|
|
7
|
+
* → { purged, workspaceId, entitiesDeleted, blobsDeleted }
|
|
8
|
+
* project: POST /api/hub/projects/:id/purge body { confirm: "<exact name>" }
|
|
9
|
+
* → { purged, projectId, podWideEntitiesDeleted, relationsDeleted }
|
|
10
|
+
*
|
|
11
|
+
* SAFETY: resolves the target's exact name, then requires the operator to TYPE
|
|
12
|
+
* that name (interactive) — or pass it via --confirm <name> / --yes — before any
|
|
13
|
+
* server call is made. A local name mismatch aborts before the network.
|
|
14
|
+
*/
|
|
15
|
+
export interface PurgeOpts {
|
|
16
|
+
confirm?: string;
|
|
17
|
+
yes?: boolean;
|
|
18
|
+
json?: boolean;
|
|
19
|
+
podUrl?: string;
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function workspacePurge(target: string, opts: PurgeOpts): Promise<void>;
|
|
23
|
+
export declare function projectPurge(target: string, opts: PurgeOpts): Promise<void>;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap workspace purge <id|name>` / `synap project purge <id|name>` —
|
|
3
|
+
* HARD teardown for the pod owner. Irreversible.
|
|
4
|
+
*
|
|
5
|
+
* Calls the backend purge endpoints (owner-only):
|
|
6
|
+
* workspace: POST /api/hub/workspaces/:id/purge body { confirm: "<exact name>" }
|
|
7
|
+
* → { purged, workspaceId, entitiesDeleted, blobsDeleted }
|
|
8
|
+
* project: POST /api/hub/projects/:id/purge body { confirm: "<exact name>" }
|
|
9
|
+
* → { purged, projectId, podWideEntitiesDeleted, relationsDeleted }
|
|
10
|
+
*
|
|
11
|
+
* SAFETY: resolves the target's exact name, then requires the operator to TYPE
|
|
12
|
+
* that name (interactive) — or pass it via --confirm <name> / --yes — before any
|
|
13
|
+
* server call is made. A local name mismatch aborts before the network.
|
|
14
|
+
*/
|
|
15
|
+
import chalk from "chalk";
|
|
16
|
+
import * as readline from "node:readline/promises";
|
|
17
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
18
|
+
import { log } from "../utils/logger.js";
|
|
19
|
+
import { resolveHubConfig, hubGet, hubPost } from "../lib/hub-client.js";
|
|
20
|
+
import { unwrapList } from "../lib/unwrapList.js";
|
|
21
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
22
|
+
/** Resolve a workspace <id|name> to its { id, name }. Throws if unknown. */
|
|
23
|
+
async function resolveWorkspace(value, cfg) {
|
|
24
|
+
// GET /workspaces returns a { workspaces: [...] } envelope.
|
|
25
|
+
const res = (await hubGet("/workspaces", {}, cfg));
|
|
26
|
+
const list = unwrapList(res, ["workspaces"]);
|
|
27
|
+
const match = UUID_RE.test(value)
|
|
28
|
+
? list.find((w) => String(w.id) === value)
|
|
29
|
+
: list.find((w) => String(w.name ?? "").toLowerCase() === value.toLowerCase());
|
|
30
|
+
if (!match) {
|
|
31
|
+
const names = list.map((w) => String(w.name ?? w.id)).join(", ");
|
|
32
|
+
throw new Error(`Workspace '${value}' not found.${names ? ` Available: ${names}` : ""}`);
|
|
33
|
+
}
|
|
34
|
+
return { id: String(match.id), name: String(match.name ?? match.id) };
|
|
35
|
+
}
|
|
36
|
+
/** Resolve a project <id|name> to its { id, name }. Throws if unknown. */
|
|
37
|
+
async function resolveProject(value, cfg) {
|
|
38
|
+
// GET /projects returns a RAW array (no envelope).
|
|
39
|
+
const res = (await hubGet("/projects", {}, cfg));
|
|
40
|
+
const list = unwrapList(res, ["projects"]);
|
|
41
|
+
const match = UUID_RE.test(value)
|
|
42
|
+
? list.find((p) => String(p.id) === value)
|
|
43
|
+
: list.find((p) => String(p.name ?? "").toLowerCase() === value.toLowerCase());
|
|
44
|
+
if (!match) {
|
|
45
|
+
const names = list.map((p) => String(p.name ?? p.id)).join(", ");
|
|
46
|
+
throw new Error(`Project '${value}' not found.${names ? ` Available: ${names}` : ""}`);
|
|
47
|
+
}
|
|
48
|
+
return { id: String(match.id), name: String(match.name ?? match.id) };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Obtain the confirmation string and check it matches `name` locally — BEFORE
|
|
52
|
+
* any destructive server call. Returns the validated confirm value, or null if
|
|
53
|
+
* the operator aborted / mismatched.
|
|
54
|
+
*/
|
|
55
|
+
async function getConfirmation(name, opts) {
|
|
56
|
+
// Non-interactive: --confirm <name> (must match) or --yes (use resolved name).
|
|
57
|
+
if (opts.confirm !== undefined) {
|
|
58
|
+
if (opts.confirm !== name) {
|
|
59
|
+
log.error(`--confirm '${opts.confirm}' does not match the exact name '${name}'. Aborting.`);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return opts.confirm;
|
|
63
|
+
}
|
|
64
|
+
if (opts.yes)
|
|
65
|
+
return name;
|
|
66
|
+
// Interactive: operator must TYPE the exact name.
|
|
67
|
+
const rl = readline.createInterface({ input, output });
|
|
68
|
+
try {
|
|
69
|
+
const answer = await rl.question(chalk.bold(` Type the exact name to confirm purge (${chalk.red(name)}): `));
|
|
70
|
+
if (answer.trim() !== name) {
|
|
71
|
+
log.error("Name does not match. Aborting — nothing was purged.");
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return answer.trim();
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
rl.close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Surface a thrown hub error: 4xx body + a friendly hint for known statuses. */
|
|
81
|
+
function reportError(e) {
|
|
82
|
+
const msg = e.message ?? String(e);
|
|
83
|
+
log.error(msg);
|
|
84
|
+
if (/HTTP 403/.test(msg)) {
|
|
85
|
+
log.dim("403 — owner-only operation, or this is a protected/system workspace.");
|
|
86
|
+
}
|
|
87
|
+
else if (/HTTP 404/.test(msg)) {
|
|
88
|
+
log.dim("404 — target no longer exists.");
|
|
89
|
+
}
|
|
90
|
+
else if (/HTTP 400/.test(msg)) {
|
|
91
|
+
log.dim("400 — confirmation name mismatch or malformed request.");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export async function workspacePurge(target, opts) {
|
|
95
|
+
try {
|
|
96
|
+
const cfg = await resolveHubConfig(opts);
|
|
97
|
+
const ws = await resolveWorkspace(target, cfg);
|
|
98
|
+
if (!opts.json) {
|
|
99
|
+
log.heading(`Purge workspace — ${ws.name}`);
|
|
100
|
+
log.warn("This is a HARD, IRREVERSIBLE teardown.");
|
|
101
|
+
log.dim(`Deletes the workspace ${chalk.dim(ws.id.slice(0, 8))}, all its entities, and their blobs.`);
|
|
102
|
+
}
|
|
103
|
+
const confirm = await getConfirmation(ws.name, opts);
|
|
104
|
+
if (confirm === null)
|
|
105
|
+
process.exit(1);
|
|
106
|
+
const res = (await hubPost(`/workspaces/${ws.id}/purge`, { confirm }, cfg, 120_000));
|
|
107
|
+
if (opts.json) {
|
|
108
|
+
console.log(JSON.stringify(res, null, 2));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
log.success(`Purged workspace '${ws.name}'.`);
|
|
112
|
+
log.dim(`Entities deleted: ${chalk.bold(String(res.entitiesDeleted ?? 0))}`);
|
|
113
|
+
log.dim(`Blobs deleted: ${chalk.bold(String(res.blobsDeleted ?? 0))}`);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
reportError(e);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export async function projectPurge(target, opts) {
|
|
121
|
+
try {
|
|
122
|
+
const cfg = await resolveHubConfig(opts);
|
|
123
|
+
const proj = await resolveProject(target, cfg);
|
|
124
|
+
if (!opts.json) {
|
|
125
|
+
log.heading(`Purge project — ${proj.name}`);
|
|
126
|
+
log.warn("This is a HARD, IRREVERSIBLE teardown.");
|
|
127
|
+
log.dim(`Deletes the project ${chalk.dim(proj.id.slice(0, 8))}, its pod-wide-exclusive entities, and belongs_to_project links.`);
|
|
128
|
+
log.dim("Note: workspace-scoped entities are NOT removed here — use `synap workspace purge` for those.");
|
|
129
|
+
}
|
|
130
|
+
const confirm = await getConfirmation(proj.name, opts);
|
|
131
|
+
if (confirm === null)
|
|
132
|
+
process.exit(1);
|
|
133
|
+
const res = (await hubPost(`/projects/${proj.id}/purge`, { confirm }, cfg, 120_000));
|
|
134
|
+
if (opts.json) {
|
|
135
|
+
console.log(JSON.stringify(res, null, 2));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
log.success(`Purged project '${proj.name}'.`);
|
|
139
|
+
log.dim(`Pod-wide entities deleted: ${chalk.bold(String(res.podWideEntitiesDeleted ?? 0))}`);
|
|
140
|
+
log.dim(`Relations deleted: ${chalk.bold(String(res.relationsDeleted ?? 0))}`);
|
|
141
|
+
log.dim("Reminder: workspace-scoped entities are removed by `synap workspace purge`.");
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
reportError(e);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=purge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purge.js","sourceRoot":"","sources":["../../src/commands/purge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap raycast generate — Emit Raycast Script Commands for enabled capabilities
|
|
3
|
+
*
|
|
4
|
+
* For each ENABLED runnable verb on the pod, writes a Raycast Script Command shell
|
|
5
|
+
* script that calls back into `synap capability run <verbId>`. Per-parameter
|
|
6
|
+
* Raycast arguments are derived from the verb's argsSchema (or the backing skill's
|
|
7
|
+
* `parameters`); if no schema is reachable, a single freeform `input` arg is used.
|
|
8
|
+
*
|
|
9
|
+
* Subcommand: generate
|
|
10
|
+
*/
|
|
11
|
+
export interface RaycastGenerateOpts {
|
|
12
|
+
out?: string;
|
|
13
|
+
workspace?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function raycastGenerate(opts: RaycastGenerateOpts): Promise<void>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap raycast generate — Emit Raycast Script Commands for enabled capabilities
|
|
3
|
+
*
|
|
4
|
+
* For each ENABLED runnable verb on the pod, writes a Raycast Script Command shell
|
|
5
|
+
* script that calls back into `synap capability run <verbId>`. Per-parameter
|
|
6
|
+
* Raycast arguments are derived from the verb's argsSchema (or the backing skill's
|
|
7
|
+
* `parameters`); if no schema is reachable, a single freeform `input` arg is used.
|
|
8
|
+
*
|
|
9
|
+
* Subcommand: generate
|
|
10
|
+
*/
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import ora from "ora";
|
|
13
|
+
import { chmodSync, mkdirSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { resolveHubConfig, hubGet } from "../lib/hub-client.js";
|
|
17
|
+
import { unwrapList } from "../lib/unwrapList.js";
|
|
18
|
+
import { log } from "../utils/logger.js";
|
|
19
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
20
|
+
function isEnabled(cap) {
|
|
21
|
+
return cap.approved === true || cap.governance === "auto";
|
|
22
|
+
}
|
|
23
|
+
/** Extract parameter NAMES from a skill `parameters` / verb `argsSchema` blob. */
|
|
24
|
+
function extractParamNames(schema) {
|
|
25
|
+
if (!schema || typeof schema !== "object" || Array.isArray(schema))
|
|
26
|
+
return [];
|
|
27
|
+
const obj = schema;
|
|
28
|
+
// JSON-schema style: { type:"object", properties:{ to:{...}, subject:{...} } }
|
|
29
|
+
if (obj.properties && typeof obj.properties === "object" && !Array.isArray(obj.properties)) {
|
|
30
|
+
return Object.keys(obj.properties);
|
|
31
|
+
}
|
|
32
|
+
// Flat key→type map: { to:"string", subject:"string", body:"string" }
|
|
33
|
+
return Object.keys(obj);
|
|
34
|
+
}
|
|
35
|
+
/** Filename-safe slug for a script name. */
|
|
36
|
+
function slugify(name) {
|
|
37
|
+
return name
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(/[^a-z0-9_-]+/g, "-")
|
|
40
|
+
.replace(/^-+|-+$/g, "") || "verb";
|
|
41
|
+
}
|
|
42
|
+
/** Render one Raycast Script Command. Returns the script body + a fallback flag. */
|
|
43
|
+
function renderScript(verb) {
|
|
44
|
+
const usedFallback = verb.params.length === 0;
|
|
45
|
+
const params = usedFallback ? ["input"] : verb.params;
|
|
46
|
+
const argLines = params.map((p, i) => `# @raycast.argument${i + 1} { "type": "text", "placeholder": "${p}" }`);
|
|
47
|
+
const flags = params.map((p, i) => `--${p} "$${i + 1}"`).join(" ");
|
|
48
|
+
const content = [
|
|
49
|
+
`#!/bin/bash`,
|
|
50
|
+
`# @raycast.schemaVersion 1`,
|
|
51
|
+
`# @raycast.title ${verb.toolName} — ${verb.label}`,
|
|
52
|
+
`# @raycast.mode fullOutput`,
|
|
53
|
+
`# @raycast.packageName Synap`,
|
|
54
|
+
`# @raycast.icon 🧠`,
|
|
55
|
+
...argLines,
|
|
56
|
+
``,
|
|
57
|
+
`exec synap capability run ${verb.verbId} ${flags}`,
|
|
58
|
+
``,
|
|
59
|
+
].join("\n");
|
|
60
|
+
return { content, usedFallback };
|
|
61
|
+
}
|
|
62
|
+
export async function raycastGenerate(opts) {
|
|
63
|
+
let cfg;
|
|
64
|
+
try {
|
|
65
|
+
cfg = await resolveHubConfig();
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
log.error(err.message);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
const workspaceId = opts.workspace ?? cfg.workspaceId;
|
|
72
|
+
if (!workspaceId) {
|
|
73
|
+
log.error("A workspace is required. Set one with `synap use <workspace>` or pass --workspace <id>.");
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const outDir = opts.out ?? join(homedir(), ".synap", "raycast-commands");
|
|
77
|
+
const spinner = ora({ text: "Fetching capabilities…", color: "cyan" }).start();
|
|
78
|
+
// The capability read-model already carries each verb's `argsSchema` and each
|
|
79
|
+
// skill cap's `inputSchema`, so /capabilities is the required source. /skills is
|
|
80
|
+
// a best-effort fallback (verb.id → skill.parameters) — it can be slow, so a
|
|
81
|
+
// failure there degrades gracefully rather than aborting generation.
|
|
82
|
+
let caps;
|
|
83
|
+
let skills = [];
|
|
84
|
+
try {
|
|
85
|
+
const capRes = await hubGet("/capabilities", { workspaceId }, cfg);
|
|
86
|
+
caps = unwrapList(capRes, ["capabilities"]);
|
|
87
|
+
spinner.stop();
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
spinner.fail(chalk.red("Failed to fetch capabilities"));
|
|
91
|
+
log.error(err.message);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const skillRes = await hubGet("/skills", { workspaceId }, cfg);
|
|
96
|
+
skills = unwrapList(skillRes, ["skills"]);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Best-effort enrichment only — proceed with the capability read-model's schemas.
|
|
100
|
+
}
|
|
101
|
+
const skillParamsByName = new Map(skills.map((s) => [s.name, extractParamNames(s.parameters)]));
|
|
102
|
+
// Flatten enabled, runnable verbs. Tool verbs carry an explicit `granted`
|
|
103
|
+
// state; a skill-kind capability is itself the runnable unit when enabled.
|
|
104
|
+
const runnables = [];
|
|
105
|
+
for (const cap of caps) {
|
|
106
|
+
if (cap.verbs && cap.verbs.length > 0) {
|
|
107
|
+
for (const v of cap.verbs) {
|
|
108
|
+
if (v.granted !== true)
|
|
109
|
+
continue;
|
|
110
|
+
const fromArgs = extractParamNames(v.argsSchema);
|
|
111
|
+
const params = fromArgs.length > 0 ? fromArgs : skillParamsByName.get(v.id) ?? [];
|
|
112
|
+
runnables.push({ toolName: cap.name, verbId: v.id, label: v.label, params });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else if (cap.kind === "skill" && isEnabled(cap)) {
|
|
116
|
+
const fromSchema = extractParamNames(cap.inputSchema);
|
|
117
|
+
const params = fromSchema.length > 0 ? fromSchema : skillParamsByName.get(cap.name) ?? [];
|
|
118
|
+
runnables.push({ toolName: cap.name, verbId: cap.name, label: cap.name, params });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (runnables.length === 0) {
|
|
122
|
+
log.warn("No enabled runnable verbs found in this workspace.");
|
|
123
|
+
log.dim("Enable one first: synap capability enable <verb>");
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
mkdirSync(outDir, { recursive: true });
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
log.error(`Could not create output dir ${outDir}: ${err.message}`);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
let fallbackCount = 0;
|
|
134
|
+
for (const verb of runnables) {
|
|
135
|
+
const { content, usedFallback } = renderScript(verb);
|
|
136
|
+
if (usedFallback)
|
|
137
|
+
fallbackCount++;
|
|
138
|
+
const file = join(outDir, `${slugify(verb.verbId)}.sh`);
|
|
139
|
+
writeFileSync(file, content, "utf-8");
|
|
140
|
+
chmodSync(file, 0o755);
|
|
141
|
+
}
|
|
142
|
+
log.heading(`Generated ${runnables.length} Raycast Script Command${runnables.length === 1 ? "" : "s"}`);
|
|
143
|
+
console.log();
|
|
144
|
+
log.dim(outDir);
|
|
145
|
+
console.log();
|
|
146
|
+
log.info("Add this directory in Raycast → Extensions → Script Commands → Add Directory");
|
|
147
|
+
if (fallbackCount > 0) {
|
|
148
|
+
console.log();
|
|
149
|
+
log.warn(`${fallbackCount} verb${fallbackCount === 1 ? "" : "s"} had no parameter schema — ` +
|
|
150
|
+
`generated with a single freeform "input" argument.`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=raycast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raycast.js","sourceRoot":"","sources":["../../src/commands/raycast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAsCzC,iFAAiF;AAEjF,SAAS,SAAS,CAAC,GAAe;IAChC,OAAO,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;AAC5D,CAAC;AAED,kFAAkF;AAClF,SAAS,iBAAiB,CAAC,MAAe;IACxC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,+EAA+E;IAC/E,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3F,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAqC,CAAC,CAAC;IAChE,CAAC;IACD,sEAAsE;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,4CAA4C;AAC5C,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;AACvC,CAAC;AAED,oFAAoF;AACpF,SAAS,YAAY,CAAC,IAAkB;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAEtD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,sBAAsB,CAAC,GAAG,CAAC,sCAAsC,CAAC,KAAK,CAC1E,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG;QACd,aAAa;QACb,4BAA4B;QAC5B,oBAAoB,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,KAAK,EAAE;QACnD,4BAA4B;QAC5B,8BAA8B;QAC9B,oBAAoB;QACpB,GAAG,QAAQ;QACX,EAAE;QACF,6BAA6B,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;QACnD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,WAAW,CAAC;IACtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;QACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAEzE,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/E,8EAA8E;IAC9E,iFAAiF;IACjF,6EAA6E;IAC7E,qEAAqE;IACrE,IAAI,IAAkB,CAAC;IACvB,IAAI,MAAM,GAAe,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,GAAG,UAAU,CAAa,MAAM,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,GAAG,UAAU,CAAW,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;IACpF,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAC7D,CAAC;IAEF,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;oBAAE,SAAS;gBACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBAClF,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1F,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC/D,GAAG,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,+BAA+B,MAAM,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,YAAY;YAAE,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,aAAa,SAAS,CAAC,MAAM,0BAA0B,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IACzF,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CACN,GAAG,aAAa,QAAQ,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,6BAA6B;YACjF,oDAAoD,CACvD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type BaseOpts } from "./data.js";
|
|
2
|
+
export declare function startSession(opts: BaseOpts & {
|
|
3
|
+
goal: string;
|
|
4
|
+
workspace?: string;
|
|
5
|
+
taskId?: string;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
export declare function listSessions(opts: BaseOpts & {
|
|
8
|
+
workspace?: string;
|
|
9
|
+
status?: string;
|
|
10
|
+
limit?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
export declare function getSession(id: string, opts: BaseOpts & {
|
|
13
|
+
workspace?: string;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function updateSession(id: string, opts: BaseOpts & {
|
|
16
|
+
workspace?: string;
|
|
17
|
+
progress?: string;
|
|
18
|
+
status?: string;
|
|
19
|
+
goal?: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
export declare function attachSession(id: string, opts: BaseOpts): Promise<void>;
|
|
22
|
+
export declare function detachSession(opts: {
|
|
23
|
+
json?: boolean;
|
|
24
|
+
}): void;
|
|
25
|
+
export declare function sessionStatus(opts: {
|
|
26
|
+
json?: boolean;
|
|
27
|
+
}): void;
|
|
28
|
+
export declare function closeSession(id: string, opts: BaseOpts & {
|
|
29
|
+
workspace?: string;
|
|
30
|
+
recap?: string;
|
|
31
|
+
}): Promise<void>;
|