@synap-core/cli 1.8.0 → 1.11.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 +1594 -0
- package/dist/commands/capability.js.map +1 -0
- package/dist/commands/centrality.d.ts +20 -0
- package/dist/commands/centrality.js +95 -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 +6 -7
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +1 -0
- package/dist/commands/data-extra.js +41 -14
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +4 -4
- package/dist/commands/data.js +254 -187
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +20 -0
- package/dist/commands/diagnose.js +186 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/digest.d.ts +17 -0
- package/dist/commands/digest.js +122 -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 +14 -0
- package/dist/commands/doc.js +61 -4
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/doctor.d.ts +21 -0
- package/dist/commands/doctor.js +189 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.js +5 -2
- 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 +7 -4
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/import.d.ts +38 -0
- package/dist/commands/import.js +471 -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 +8 -0
- package/dist/commands/knowledge.js +308 -33
- 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-authoring.d.ts +45 -0
- package/dist/commands/market-authoring.js +225 -0
- package/dist/commands/market-authoring.js.map +1 -0
- package/dist/commands/market.d.ts +224 -0
- package/dist/commands/market.js +1643 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp.d.ts +64 -0
- package/dist/commands/mcp.js +265 -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 +15 -0
- package/dist/commands/pods.js +233 -17
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.js +43 -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 +47 -22
- 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 +7 -4
- 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/template.d.ts +42 -0
- package/dist/commands/template.js +191 -0
- package/dist/commands/template.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/upload.d.ts +30 -0
- package/dist/commands/upload.js +155 -0
- package/dist/commands/upload.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 +894 -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 +73 -14
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/capture-structure.d.ts +123 -0
- package/dist/lib/capture-structure.js +57 -0
- package/dist/lib/capture-structure.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +177 -0
- package/dist/lib/cp-packages.js +389 -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 +91 -1
- package/dist/lib/hub-client.js +565 -22
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/id.d.ts +23 -0
- package/dist/lib/id.js +35 -0
- package/dist/lib/id.js.map +1 -0
- 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 +144 -22
- package/dist/lib/pod.js +302 -64
- 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/template-file.d.ts +74 -0
- package/dist/lib/template-file.js +140 -0
- package/dist/lib/template-file.js.map +1 -0
- 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/node_modules/@synap/hub-rest-client/dist/index.cjs +414 -34
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +762 -22
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +762 -22
- package/node_modules/@synap/hub-rest-client/dist/index.js +414 -34
- package/node_modules/@synap/hub-rest-client/package.json +1 -1
- package/node_modules/@synap/hub-rest-client/src/client.ts +525 -37
- package/node_modules/@synap/hub-rest-client/src/index.ts +42 -0
- package/node_modules/@synap/hub-rest-client/src/setup.ts +57 -1
- package/node_modules/@synap/hub-rest-client/src/types.ts +697 -37
- package/package.json +11 -5
- package/skills/agent-os/SKILL.md +218 -0
- package/skills/manifest.json +5 -0
- package/skills/onboard/SKILL.md +193 -0
- package/skills/synap/SKILL.md +1284 -58
- 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 +50 -142
- package/skills/synap/cli-operations.md +107 -0
- package/skills/synap/common-mistakes.md +13 -0
- package/skills/synap/content-os.md +83 -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 +63 -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 +12 -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 +74 -0
- package/skills/synap/workspace-design.md +45 -0
- package/skills/synap/workspace-edges.md +49 -0
- package/skills/synap/writes.md +213 -0
- package/skills/synap-app/SKILL.md +319 -0
- package/skills/synap-app/_order.txt +5 -0
- package/skills/synap-app/_skill.yaml +20 -0
- package/skills/synap-app/creating-the-base-app.md +64 -0
- package/skills/synap-app/governance.md +42 -0
- package/skills/synap-app/install-commands.md +55 -0
- package/skills/synap-app/overview.md +50 -0
- package/skills/synap-app/using-the-sdk.md +73 -0
- package/skills/synap-market/SKILL.md +335 -0
- package/skills/synap-market/_order.txt +5 -0
- package/skills/synap-market/_skill.yaml +24 -0
- package/skills/synap-market/author-and-publish.md +75 -0
- package/skills/synap-market/discover-and-fetch.md +59 -0
- package/skills/synap-market/governance-and-catalog.md +56 -0
- package/skills/synap-market/install.md +55 -0
- package/skills/synap-market/overview.md +51 -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
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap template` — the "one request" template surface (TEMPLATE-ONE-PATH-PLAN §3-4).
|
|
3
|
+
* =====================================================================================
|
|
4
|
+
*
|
|
5
|
+
* The plan names ONE governed write door for adding/updating a workspace template:
|
|
6
|
+
* `synap template publish <file>` → CP `POST /api/packages` (validated server-side).
|
|
7
|
+
* No npm publish, no lockfile-bump, no redeploy. This file is that named surface.
|
|
8
|
+
*
|
|
9
|
+
* synap template publish <file> — validate + upsert to the CP (private by default; --public to share)
|
|
10
|
+
* synap template publish --from-workspace <id> — serialize a LIVE workspace, then publish
|
|
11
|
+
* synap template list — the caller-visible catalog (own private + public), slug/name/vis/version
|
|
12
|
+
* synap template get <slug> — one template's metadata + definition shape
|
|
13
|
+
*
|
|
14
|
+
* REUSE, no reinvention: publish delegates to the existing `marketPublish` (same
|
|
15
|
+
* validator, same CP transport). list/get read through `lib/cp-packages` — the ONE
|
|
16
|
+
* authed CP `/api/packages` client (Bearer from `lib/auth`'s stored login token).
|
|
17
|
+
* No `fetch` is hand-rolled here.
|
|
18
|
+
*
|
|
19
|
+
* NOTE (for the orchestrator): this overlaps `synap market publish/validate/
|
|
20
|
+
* unpublish`, which already ship the same authoring loop. `synap template` is the
|
|
21
|
+
* plan-canonical name; picking one and retiring/aliasing the other is a §4 Wave 2
|
|
22
|
+
* cleanup decision, not made here.
|
|
23
|
+
*/
|
|
24
|
+
import chalk from "chalk";
|
|
25
|
+
import { log } from "../utils/logger.js";
|
|
26
|
+
import { getStoredToken, isTokenLocallyExpired } from "../lib/auth.js";
|
|
27
|
+
import { fetchMyRows, fetchPublicBrowseRows, fetchPackageDefinition, } from "../lib/cp-packages.js";
|
|
28
|
+
// ─── publish ─────────────────────────────────────────────────────────────────
|
|
29
|
+
/**
|
|
30
|
+
* `synap template publish <file>` — the plan's "one request". A thin alias over
|
|
31
|
+
* the existing `marketPublish` so there is exactly ONE publish implementation
|
|
32
|
+
* (same validator, same CP write door, same `--public`/`--from-workspace`/`--json`).
|
|
33
|
+
*/
|
|
34
|
+
export async function templatePublish(file, opts) {
|
|
35
|
+
const { marketPublish } = await import("./market-authoring.js");
|
|
36
|
+
await marketPublish(file, opts);
|
|
37
|
+
}
|
|
38
|
+
/** private/public/unknown → a short colored label. */
|
|
39
|
+
function visLabel(isPublic) {
|
|
40
|
+
if (isPublic === false)
|
|
41
|
+
return chalk.yellow("private");
|
|
42
|
+
if (isPublic === true)
|
|
43
|
+
return chalk.green("public");
|
|
44
|
+
return chalk.dim("public");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Fetch the caller-visible catalog: the caller's own rows (incl. private) when
|
|
48
|
+
* logged in, merged with the public browse rows. `/mine` wins a slug tie so the
|
|
49
|
+
* real `isPublic` flag and owned marker survive.
|
|
50
|
+
*/
|
|
51
|
+
async function fetchCatalog() {
|
|
52
|
+
const creds = getStoredToken();
|
|
53
|
+
const loggedIn = !!creds && !isTokenLocallyExpired(creds);
|
|
54
|
+
const filters = { category: "workspace" };
|
|
55
|
+
// Public browse is best-effort — a private catalog that resolves is still useful.
|
|
56
|
+
const publicRows = await fetchPublicBrowseRows(filters).catch(() => []);
|
|
57
|
+
const bySlug = new Map();
|
|
58
|
+
for (const r of publicRows) {
|
|
59
|
+
bySlug.set(r.slug, {
|
|
60
|
+
slug: r.slug,
|
|
61
|
+
displayName: r.displayName,
|
|
62
|
+
description: r.description,
|
|
63
|
+
version: r.version,
|
|
64
|
+
isPublic: true,
|
|
65
|
+
owned: false,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (loggedIn) {
|
|
69
|
+
const mineRows = await fetchMyRows(creds.token, filters);
|
|
70
|
+
for (const r of mineRows) {
|
|
71
|
+
bySlug.set(r.slug, {
|
|
72
|
+
slug: r.slug,
|
|
73
|
+
displayName: r.displayName,
|
|
74
|
+
description: r.description,
|
|
75
|
+
version: r.version,
|
|
76
|
+
isPublic: r.isPublic,
|
|
77
|
+
owned: true,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const rows = [...bySlug.values()].sort((a, b) => a.slug.localeCompare(b.slug));
|
|
82
|
+
return { rows, loggedIn };
|
|
83
|
+
}
|
|
84
|
+
export async function templateList(opts) {
|
|
85
|
+
let catalog;
|
|
86
|
+
try {
|
|
87
|
+
catalog = await fetchCatalog();
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
if (opts.json) {
|
|
91
|
+
console.log(JSON.stringify({ ok: false, error: e.message }, null, 2));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
log.error(`Could not list templates: ${e.message}`);
|
|
95
|
+
log.hint("Log in for your private templates: synap login");
|
|
96
|
+
}
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
if (opts.json) {
|
|
100
|
+
console.log(JSON.stringify({ ok: true, loggedIn: catalog.loggedIn, templates: catalog.rows }, null, 2));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (catalog.rows.length === 0) {
|
|
104
|
+
log.info("No templates visible.");
|
|
105
|
+
if (!catalog.loggedIn)
|
|
106
|
+
log.hint("Your private templates are hidden until you log in: synap login");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
log.heading(`Templates (${catalog.rows.length})`);
|
|
110
|
+
if (!catalog.loggedIn)
|
|
111
|
+
log.dim("Logged out — showing public templates only. `synap login` to see your private ones.");
|
|
112
|
+
log.blank();
|
|
113
|
+
for (const r of catalog.rows) {
|
|
114
|
+
const ver = r.version ? chalk.dim(` ${r.version}`) : "";
|
|
115
|
+
const owned = r.owned ? chalk.dim(" (yours)") : "";
|
|
116
|
+
console.log(` ${chalk.bold(r.slug)}${ver} ${visLabel(r.isPublic)}${owned}`);
|
|
117
|
+
console.log(` ${chalk.cyan(r.displayName)}${r.description ? chalk.dim(` ${r.description}`) : ""}`);
|
|
118
|
+
}
|
|
119
|
+
log.blank();
|
|
120
|
+
log.dim("Publish a template: synap template publish <file>");
|
|
121
|
+
log.dim("Inspect one: synap template get <slug>");
|
|
122
|
+
}
|
|
123
|
+
// ─── get ─────────────────────────────────────────────────────────────────────
|
|
124
|
+
export async function templateGet(slug, opts) {
|
|
125
|
+
const creds = getStoredToken();
|
|
126
|
+
const token = creds && !isTokenLocallyExpired(creds) ? creds.token : undefined;
|
|
127
|
+
// Metadata: prefer the caller's own row (carries isPublic + version), else the
|
|
128
|
+
// public browse row for this slug.
|
|
129
|
+
let meta;
|
|
130
|
+
try {
|
|
131
|
+
if (token) {
|
|
132
|
+
const mine = await fetchMyRows(token, { category: "workspace", search: slug });
|
|
133
|
+
const own = mine.find((r) => r.slug === slug);
|
|
134
|
+
if (own) {
|
|
135
|
+
meta = { slug: own.slug, displayName: own.displayName, description: own.description, version: own.version, isPublic: own.isPublic, owned: true };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (!meta) {
|
|
139
|
+
const pub = await fetchPublicBrowseRows({ category: "workspace", search: slug });
|
|
140
|
+
const row = pub.find((r) => r.slug === slug);
|
|
141
|
+
if (row) {
|
|
142
|
+
meta = { slug: row.slug, displayName: row.displayName, description: row.description, version: row.version, isPublic: true, owned: false };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
if (opts.json) {
|
|
148
|
+
console.log(JSON.stringify({ ok: false, slug, error: e.message }, null, 2));
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
log.error(`Could not fetch "${slug}": ${e.message}`);
|
|
152
|
+
}
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
// Full definition (the install payload) — authed so a private template resolves.
|
|
156
|
+
const definition = await fetchPackageDefinition(slug, token).catch(() => null);
|
|
157
|
+
if (!meta && !definition) {
|
|
158
|
+
if (opts.json) {
|
|
159
|
+
console.log(JSON.stringify({ ok: false, slug, error: "not found" }, null, 2));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
log.error(`Template "${slug}" not found or not visible.`);
|
|
163
|
+
if (!token)
|
|
164
|
+
log.hint("If it is private, log in first: synap login");
|
|
165
|
+
}
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
if (opts.json) {
|
|
169
|
+
console.log(JSON.stringify({ ok: true, slug, ...meta, definition }, null, 2));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const displayName = meta?.displayName ?? slug;
|
|
173
|
+
log.heading(`${displayName} ${chalk.dim(`(${slug})`)}`);
|
|
174
|
+
log.blank();
|
|
175
|
+
if (meta?.description) {
|
|
176
|
+
console.log(` ${meta.description}`);
|
|
177
|
+
log.blank();
|
|
178
|
+
}
|
|
179
|
+
if (meta?.version)
|
|
180
|
+
console.log(` ${chalk.dim("version:")} ${meta.version}`);
|
|
181
|
+
console.log(` ${chalk.dim("visibility:")} ${visLabel(meta?.isPublic)}${meta?.owned ? chalk.dim(" (yours)") : ""}`);
|
|
182
|
+
const def = definition;
|
|
183
|
+
if (def) {
|
|
184
|
+
const count = (v) => (Array.isArray(v) ? v.length : 0);
|
|
185
|
+
console.log(` ${chalk.dim("profiles:")} ${count(def.profiles)}`);
|
|
186
|
+
console.log(` ${chalk.dim("views:")} ${count(def.views)}`);
|
|
187
|
+
}
|
|
188
|
+
log.blank();
|
|
189
|
+
log.dim(`Install it: synap market install ${slug}`);
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap tools — Add and manage external service tools (credentials + connections)
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: list, connect, disconnect, sync, schema
|
|
5
|
+
*/
|
|
6
|
+
export interface ConnectOpts {
|
|
7
|
+
workspace?: string;
|
|
8
|
+
podUrl?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function toolsConnect(service: string | undefined, opts: ConnectOpts): Promise<void>;
|
|
12
|
+
export interface ListOpts {
|
|
13
|
+
json?: boolean;
|
|
14
|
+
workspace?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function toolsList(opts: ListOpts): Promise<void>;
|
|
17
|
+
export interface SyncOpts {
|
|
18
|
+
workspace?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function toolsSync(provider: string, opts: SyncOpts): Promise<void>;
|
|
21
|
+
export interface DisconnectOpts {
|
|
22
|
+
workspace?: string;
|
|
23
|
+
force?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function toolsDisconnect(provider: string, opts: DisconnectOpts): Promise<void>;
|
|
26
|
+
export interface SchemaOpts {
|
|
27
|
+
writeContext?: string | boolean;
|
|
28
|
+
json?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function toolsSchema(opts: SchemaOpts): Promise<void>;
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap tools — Add and manage external service tools (credentials + connections)
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: list, connect, disconnect, sync, schema
|
|
5
|
+
*/
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import ora from "ora";
|
|
8
|
+
import { exec } from "child_process";
|
|
9
|
+
import { mkdirSync, writeFileSync, existsSync } from "fs";
|
|
10
|
+
import { resolveHubConfig, hubGet, hubPost, renderHubError } from "../lib/hub-client.js";
|
|
11
|
+
import { capabilityList, capabilityConnect, capabilityDisconnect } from "./capability.js";
|
|
12
|
+
import { log } from "../utils/logger.js";
|
|
13
|
+
/**
|
|
14
|
+
* The one deprecation line every `tools` subcommand prints. `synap capability`
|
|
15
|
+
* (alias `cap`) is the single capability root; `tools` survives only as an alias
|
|
16
|
+
* so existing scripts keep working.
|
|
17
|
+
*/
|
|
18
|
+
const TOOLS_DEPRECATED = "`synap tools` is deprecated — use `synap cap`";
|
|
19
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
20
|
+
/** Render the verbs a connection installed, e.g. after OAuth completes. */
|
|
21
|
+
function printUnlocked(unlocked) {
|
|
22
|
+
const skills = (unlocked ?? []).flatMap((u) => u.skills);
|
|
23
|
+
if (skills.length === 0)
|
|
24
|
+
return;
|
|
25
|
+
console.log();
|
|
26
|
+
log.heading("Capabilities installed");
|
|
27
|
+
for (const s of skills) {
|
|
28
|
+
const label = s.name.replace(/_/g, " ");
|
|
29
|
+
console.log(` ${chalk.green("✓")} ${chalk.bold(label)}${s.description ? chalk.dim(` — ${s.description}`) : ""}`);
|
|
30
|
+
}
|
|
31
|
+
console.log();
|
|
32
|
+
// Code skills are seeded as DRAFT (a deliberate gate — code runs unreviewed
|
|
33
|
+
// only after an explicit enable). Be honest about the one-time step.
|
|
34
|
+
log.dim("Enable these in Synap → Settings → Capabilities to let your agent use them.");
|
|
35
|
+
log.dim("Once enabled, each action still asks for your approval before it runs.");
|
|
36
|
+
}
|
|
37
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
38
|
+
/**
|
|
39
|
+
* Poll the connect door until the provider flips to `connected` (the user
|
|
40
|
+
* finished OAuth in the browser). The door is self-completing: on `connected`
|
|
41
|
+
* it materializes the tool + family template server-side and returns `unlocked`.
|
|
42
|
+
* Bounded so the CLI never hangs forever.
|
|
43
|
+
*/
|
|
44
|
+
async function pollUntilConnected(cfg, provider, workspaceId, timeoutMs = 180_000, intervalMs = 3_000) {
|
|
45
|
+
const deadline = Date.now() + timeoutMs;
|
|
46
|
+
while (Date.now() < deadline) {
|
|
47
|
+
await sleep(intervalMs);
|
|
48
|
+
try {
|
|
49
|
+
const body = { provider };
|
|
50
|
+
if (workspaceId)
|
|
51
|
+
body.workspaceId = workspaceId;
|
|
52
|
+
const res = (await hubPost("/connectors/connect", body, cfg));
|
|
53
|
+
if (String(res.status) === "connected")
|
|
54
|
+
return res;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// transient — keep polling until the deadline
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
function openBrowser(url) {
|
|
63
|
+
const platform = process.platform;
|
|
64
|
+
let cmd;
|
|
65
|
+
if (platform === "darwin") {
|
|
66
|
+
cmd = `open "${url}"`;
|
|
67
|
+
}
|
|
68
|
+
else if (platform === "win32") {
|
|
69
|
+
cmd = `start "" "${url}"`;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
cmd = `xdg-open "${url}"`;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
exec(cmd);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// silently ignore — caller already prints the URL
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function fetchProviders(cfg, workspaceId) {
|
|
82
|
+
const params = {};
|
|
83
|
+
if (workspaceId)
|
|
84
|
+
params.workspaceId = workspaceId;
|
|
85
|
+
const res = await hubGet("/connectors/providers", params, cfg);
|
|
86
|
+
const r = res;
|
|
87
|
+
return (r.providers ?? []);
|
|
88
|
+
}
|
|
89
|
+
export async function toolsConnect(service, opts) {
|
|
90
|
+
log.dim(TOOLS_DEPRECATED);
|
|
91
|
+
// Capabilities are the one root now — forward the named-service connect to
|
|
92
|
+
// `cap connect` (the capability-first equivalent).
|
|
93
|
+
if (service) {
|
|
94
|
+
await capabilityConnect(service, { workspace: opts.workspace });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
let cfg;
|
|
98
|
+
try {
|
|
99
|
+
cfg = await resolveHubConfig({ podUrl: opts.podUrl, apiKey: opts.apiKey });
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
log.error(err.message);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
const workspaceId = opts.workspace ?? cfg.workspaceId;
|
|
106
|
+
const spinner = ora({ text: "Resolving connection…", color: "cyan" }).start();
|
|
107
|
+
// The unified door: resolves the provider, checks for an existing connection,
|
|
108
|
+
// and returns connected / setup_required / provider_required in one call.
|
|
109
|
+
// Connects as the operator (the CLI's key owner) — no per-user binding here.
|
|
110
|
+
let res;
|
|
111
|
+
try {
|
|
112
|
+
const body = {};
|
|
113
|
+
if (service)
|
|
114
|
+
body.provider = service;
|
|
115
|
+
if (workspaceId)
|
|
116
|
+
body.workspaceId = workspaceId;
|
|
117
|
+
res = (await hubPost("/connectors/connect", body, cfg));
|
|
118
|
+
spinner.stop();
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
spinner.fail(chalk.red("Failed to resolve connection"));
|
|
122
|
+
log.error(err.message);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
const status = String(res.status);
|
|
126
|
+
if (status === "connected") {
|
|
127
|
+
log.heading(`${res.displayName ?? res.provider} is already connected`);
|
|
128
|
+
printUnlocked(res.unlocked);
|
|
129
|
+
log.dim(`Run \`synap tools list\` to see all tools and their credentials.`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (status === "provider_required") {
|
|
133
|
+
// The door only returns `provider_required` when Nango ANSWERED and declares
|
|
134
|
+
// at least one integration — "nothing declared" is `provider_unavailable`
|
|
135
|
+
// now, so this list is never empty. (The old fallback here opened a Connect
|
|
136
|
+
// session "for all services" against a Nango that declared none: it could
|
|
137
|
+
// only ever dead-end.)
|
|
138
|
+
const providers = (res.providers ?? []);
|
|
139
|
+
log.heading("Which service do you want to connect?");
|
|
140
|
+
console.log();
|
|
141
|
+
for (const p of providers) {
|
|
142
|
+
console.log(` ${chalk.cyan(p.provider)}${p.displayName ? chalk.dim(` (${p.displayName})`) : ""}`);
|
|
143
|
+
}
|
|
144
|
+
console.log();
|
|
145
|
+
log.dim(`Run \`synap cap connect <name>\` with one of the above.`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (status === "provider_unavailable") {
|
|
149
|
+
// The pod can't offer this provider (not declared / unreachable / malformed).
|
|
150
|
+
// The server message already names the real cause + remedy — print it as-is.
|
|
151
|
+
// No browser, and no "re-run connect": re-running cannot fix a server-side gap.
|
|
152
|
+
log.warn(`${res.displayName ?? res.provider ?? service ?? "That service"} is unavailable on this pod.`);
|
|
153
|
+
if (res.message)
|
|
154
|
+
log.dim(String(res.message));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// setup_required (or any status this CLI doesn't know) → only ever open a
|
|
158
|
+
// browser when the server actually handed us a URL. An older/newer pod that
|
|
159
|
+
// returns a status we don't handle must NOT send the user to "undefined".
|
|
160
|
+
const redirectUrl = typeof res.redirectUrl === "string" && res.redirectUrl.length > 0 ? res.redirectUrl : null;
|
|
161
|
+
if (!redirectUrl) {
|
|
162
|
+
log.warn(`Couldn't start a connection for ${res.displayName ?? res.provider ?? service ?? "that service"}.`);
|
|
163
|
+
if (res.message)
|
|
164
|
+
log.dim(String(res.message));
|
|
165
|
+
else
|
|
166
|
+
log.dim(`The pod returned status "${status}" with no connect URL. Check the pod's connector configuration.`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const matchedProvider = res.provider ? String(res.provider) : service;
|
|
170
|
+
log.heading(`Connect to ${res.displayName ?? res.provider ?? service ?? "external service"}`);
|
|
171
|
+
console.log();
|
|
172
|
+
console.log(` Opening OAuth flow in your browser…`);
|
|
173
|
+
console.log(` ${chalk.dim("If it didn't open, paste this URL in your browser:")}`);
|
|
174
|
+
console.log();
|
|
175
|
+
console.log(` ${chalk.underline(chalk.cyan(redirectUrl))}`);
|
|
176
|
+
console.log();
|
|
177
|
+
openBrowser(redirectUrl);
|
|
178
|
+
// Wait for the user to finish OAuth, then confirm + show what unlocked. The
|
|
179
|
+
// connect door materializes the capability server-side on `connected`, so by
|
|
180
|
+
// the time this resolves the agent can already use the new verbs.
|
|
181
|
+
if (matchedProvider) {
|
|
182
|
+
const waitSpinner = ora({ text: "Waiting for you to finish in the browser…", color: "cyan" }).start();
|
|
183
|
+
const connected = await pollUntilConnected(cfg, matchedProvider, workspaceId);
|
|
184
|
+
if (connected) {
|
|
185
|
+
waitSpinner.succeed(chalk.green(`Connected ${chalk.bold(String(connected.displayName ?? matchedProvider))}!`));
|
|
186
|
+
printUnlocked(connected.unlocked);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
waitSpinner.stop();
|
|
190
|
+
log.dim(`Didn't detect a connection yet — finish the browser flow, then run \`synap tools list\` to check status.`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
log.dim(`Once connected, records will import automatically. Run \`synap tools list\` to check status.`);
|
|
194
|
+
}
|
|
195
|
+
export async function toolsList(opts) {
|
|
196
|
+
// `cap list` is the one capability-first view.
|
|
197
|
+
log.dim(TOOLS_DEPRECATED);
|
|
198
|
+
await capabilityList({ json: opts.json, workspace: opts.workspace });
|
|
199
|
+
}
|
|
200
|
+
export async function toolsSync(provider, opts) {
|
|
201
|
+
log.dim(TOOLS_DEPRECATED);
|
|
202
|
+
let cfg;
|
|
203
|
+
try {
|
|
204
|
+
cfg = await resolveHubConfig();
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
log.error(err.message);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
const workspaceId = opts.workspace ?? cfg.workspaceId;
|
|
211
|
+
try {
|
|
212
|
+
const providers = await fetchProviders(cfg, workspaceId);
|
|
213
|
+
const match = providers.find((p) => p.provider === provider || p.id === provider || p.displayName.toLowerCase() === provider.toLowerCase());
|
|
214
|
+
if (!match || !match.connected) {
|
|
215
|
+
log.error(`Provider ${chalk.bold(provider)} is not connected. Run: ${chalk.cyan(`synap cap connect ${provider}`)}`);
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
renderHubError(err);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
// The old background-import "sync" (POST /connectors/actions, a Nango named
|
|
224
|
+
// action) was retired — self-hosted Nango doesn't run Actions, and the model
|
|
225
|
+
// moved to ON-DEMAND access: a connected service is reached live via its
|
|
226
|
+
// capability skills (e.g. gmail_search), not pre-imported on a schedule. There
|
|
227
|
+
// is nothing to trigger, so this command does nothing and must not claim
|
|
228
|
+
// otherwise.
|
|
229
|
+
log.warn(`\`synap tools sync\` does nothing and will be removed.`);
|
|
230
|
+
log.dim(`${provider} is connected. Connected services are queried on demand by your ` +
|
|
231
|
+
"agent's capabilities (e.g. search, list, send), not imported on a schedule — " +
|
|
232
|
+
"so there is no sync to trigger.");
|
|
233
|
+
log.dim(`See connection status: synap cap list`);
|
|
234
|
+
}
|
|
235
|
+
export async function toolsDisconnect(provider, opts) {
|
|
236
|
+
log.dim(TOOLS_DEPRECATED);
|
|
237
|
+
// `cap disconnect` resolves a capability name OR a raw provider id, so the
|
|
238
|
+
// provider ids this command has always taken keep resolving.
|
|
239
|
+
await capabilityDisconnect(provider, { workspace: opts.workspace, force: opts.force });
|
|
240
|
+
}
|
|
241
|
+
export async function toolsSchema(opts) {
|
|
242
|
+
let cfg;
|
|
243
|
+
try {
|
|
244
|
+
cfg = await resolveHubConfig();
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
log.error(err.message);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
const spinner = opts.json ? null : ora({ text: "Fetching tool schema…", color: "cyan" }).start();
|
|
251
|
+
// The dedicated /connectors/schema route was retired; the provider catalog +
|
|
252
|
+
// connection status now comes from /connectors/providers (the same source the
|
|
253
|
+
// list command uses). Shape it into the { providers } envelope the markdown
|
|
254
|
+
// builder expects.
|
|
255
|
+
let schema;
|
|
256
|
+
try {
|
|
257
|
+
const providers = await fetchProviders(cfg);
|
|
258
|
+
schema = { providers };
|
|
259
|
+
spinner?.stop();
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
spinner?.fail(chalk.red("Failed to fetch tool schema"));
|
|
263
|
+
log.error(err.message);
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
if (opts.json) {
|
|
267
|
+
console.log(JSON.stringify(schema, null, 2));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const s = schema;
|
|
271
|
+
const md = buildToolSchemaMarkdown(s, cfg.podUrl);
|
|
272
|
+
if (opts.writeContext !== undefined && opts.writeContext !== false) {
|
|
273
|
+
const outputPath = typeof opts.writeContext === "string" && opts.writeContext.length > 0
|
|
274
|
+
? opts.writeContext
|
|
275
|
+
: ".claude/TOOLS_CONTEXT.md";
|
|
276
|
+
const dir = outputPath.includes("/") ? outputPath.split("/").slice(0, -1).join("/") : ".";
|
|
277
|
+
if (dir && dir !== "." && !existsSync(dir)) {
|
|
278
|
+
mkdirSync(dir, { recursive: true });
|
|
279
|
+
}
|
|
280
|
+
writeFileSync(outputPath, md, "utf-8");
|
|
281
|
+
log.success(`Context written to ${chalk.underline(outputPath)} — Claude Code will auto-load this in all sessions from this directory`);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
console.log(md);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function buildToolSchemaMarkdown(schema, podUrl) {
|
|
288
|
+
const lines = [
|
|
289
|
+
`# Synap Tool Reference`,
|
|
290
|
+
``,
|
|
291
|
+
`> Fetched from pod: ${podUrl} — use this context to connect, manage, and query external service integrations.`,
|
|
292
|
+
``,
|
|
293
|
+
`## Supported Providers`,
|
|
294
|
+
];
|
|
295
|
+
const providers = (schema.providers ?? schema.supported ?? []);
|
|
296
|
+
if (providers.length > 0) {
|
|
297
|
+
for (const p of providers) {
|
|
298
|
+
lines.push(``, `### ${p.displayName ?? p.provider ?? p.id}`);
|
|
299
|
+
if (p.description)
|
|
300
|
+
lines.push(``, String(p.description));
|
|
301
|
+
if (p.actions) {
|
|
302
|
+
lines.push(``, `**Available actions:**`);
|
|
303
|
+
for (const action of p.actions) {
|
|
304
|
+
lines.push(`- \`${action}\``);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
lines.push(``, `Providers are configured in Nango. Common integrations include:`, `- Google Workspace (gmail, google-calendar, google-drive)`, `- GitHub (github)`, `- Notion (notion)`, `- Linear (linear)`, `- Slack (slack)`, `- HubSpot (hubspot)`);
|
|
311
|
+
}
|
|
312
|
+
lines.push(``, `## CLI Commands`, ``, `\`\`\`bash`, `# Connect a service (opens OAuth flow in browser)`, `synap cap connect [name]`, `synap cap connect "Nango — Google Workspace"`, ``, `# List all capabilities and connection status`, `synap tools list`, `synap tools list --json`, `synap cap list`, ``, `# Show one capability's detail (status, connection, verbs, next action)`, `synap cap show <name>`, ``, `# Turn on a capability (ensures its connection, then picks verbs)`, `synap cap enable [name]`, ``, `# Run a verb`, `synap cap run <verb>`, ``, `# Disconnect a provider`, `synap tools disconnect <provider>`, `synap tools disconnect google --force`, ``, `# Fetch this schema`, `synap tools schema`, `synap tools schema --write-context # writes to .claude/TOOLS_CONTEXT.md`, `\`\`\``, ``, `## Hub REST Endpoints`, ``, `| Method | Path | Description |`, `|--------|------|-------------|`, `| POST | /api/hub/connectors/connect | Resolve-or-start a connection (unified door) |`, `| GET | /api/hub/connectors/providers | List providers and connection status |`, `| POST | /api/hub/connectors/session | Start OAuth session, get redirectUrl |`, `| POST | /api/hub/connectors/disconnect | Disconnect a provider |`, `| POST | /api/hub/connectors/tool-execute | Run a provider call (proxied, governed) |`, ``, `## AI Usage Flow`, ``, `1. Check connected services: \`synap cap list\``, `2. Connect a new service: \`synap cap connect <name>\` — opens OAuth in browser`, `3. Connecting installs the service's capability skills (e.g. gmail_send, gmail_search)`, `4. The agent reaches the service ON DEMAND through those skills (no scheduled import)`, `5. Ask naturally: \`synap ask "any emails from Acme this week?"\``);
|
|
313
|
+
return lines.join("\n");
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap upload
|
|
3
|
+
*
|
|
4
|
+
* Store a real file (arbitrary bytes) on the pod. Closes the "an AI/CLI cannot
|
|
5
|
+
* store a real file" gap: the CLI reads the file from disk and POSTs it as
|
|
6
|
+
* multipart/form-data to the standalone file door, which mints a `file`
|
|
7
|
+
* entity for the bytes.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* synap upload ./report.pdf
|
|
11
|
+
* synap upload ./logo.png --title "Brand logo" --workspace <id>
|
|
12
|
+
* synap upload ./spec.pdf --attach <entityId> # also link doc → entity
|
|
13
|
+
*
|
|
14
|
+
* API:
|
|
15
|
+
* POST /api/hub/files (multipart) — field `file` (≤10MB) + REQUIRED
|
|
16
|
+
* workspaceId (membership-gated) +
|
|
17
|
+
* optional title → { fileEntityId, documentId }
|
|
18
|
+
* POST /api/hub/relations — with --attach: `references` relation
|
|
19
|
+
* from the target entity to the new doc.
|
|
20
|
+
*/
|
|
21
|
+
export interface UploadOpts {
|
|
22
|
+
workspace?: string;
|
|
23
|
+
attach?: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
open?: boolean;
|
|
26
|
+
json?: boolean;
|
|
27
|
+
podUrl?: string;
|
|
28
|
+
apiKey?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function uploadFile(path: string, opts: UploadOpts): Promise<void>;
|