@synap-core/cli 1.11.0 → 1.12.2
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/README.md +23 -198
- package/dist/build-info.json +6 -0
- package/dist/commands/agent-run.js +3 -2
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/agents.d.ts +33 -17
- package/dist/commands/agents.js +203 -237
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/app.d.ts +143 -0
- package/dist/commands/app.js +523 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/automate.d.ts +21 -0
- package/dist/commands/automate.js +42 -0
- package/dist/commands/automate.js.map +1 -0
- package/dist/commands/automation-schema.test.d.ts +16 -0
- package/dist/commands/automation-schema.test.js +77 -0
- package/dist/commands/automation-schema.test.js.map +1 -0
- package/dist/commands/automation.d.ts +12 -0
- package/dist/commands/automation.js +80 -35
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/bridge-setup.d.ts +14 -1
- package/dist/commands/bridge-setup.js +392 -128
- package/dist/commands/bridge-setup.js.map +1 -1
- package/dist/commands/cap-connections.d.ts +4 -4
- package/dist/commands/cap-connections.js +14 -14
- package/dist/commands/cap-connections.js.map +1 -1
- package/dist/commands/capability.d.ts +2 -0
- package/dist/commands/capability.js +218 -168
- package/dist/commands/capability.js.map +1 -1
- package/dist/commands/catalog.d.ts +275 -0
- package/dist/commands/catalog.js +481 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/cell.d.ts +155 -8
- package/dist/commands/cell.js +416 -40
- package/dist/commands/cell.js.map +1 -1
- package/dist/commands/centrality.js +1 -13
- package/dist/commands/centrality.js.map +1 -1
- package/dist/commands/connect.d.ts +38 -13
- package/dist/commands/connect.js +68 -167
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.d.ts +3 -2
- package/dist/commands/connections.js +95 -25
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/context.js +7 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +34 -0
- package/dist/commands/data-extra.js +193 -23
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +120 -2
- package/dist/commands/data.js +293 -20
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +66 -4
- package/dist/commands/diagnose.js +285 -28
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/doc.d.ts +11 -4
- package/dist/commands/doc.js +39 -14
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/doctor.d.ts +112 -3
- package/dist/commands/doctor.js +657 -32
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/explain.js +5 -5
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/import.d.ts +368 -13
- package/dist/commands/import.js +1064 -54
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +20 -9
- package/dist/commands/init.js +433 -973
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +1 -0
- package/dist/commands/keys.js +15 -2
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/knowledge.d.ts +22 -6
- package/dist/commands/knowledge.js +117 -55
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/lens.d.ts +37 -1
- package/dist/commands/lens.js +192 -71
- package/dist/commands/lens.js.map +1 -1
- package/dist/commands/market-authoring.d.ts +29 -2
- package/dist/commands/market-authoring.js +348 -7
- package/dist/commands/market-authoring.js.map +1 -1
- package/dist/commands/market-official.d.ts +58 -0
- package/dist/commands/market-official.js +84 -0
- package/dist/commands/market-official.js.map +1 -0
- package/dist/commands/market.d.ts +400 -16
- package/dist/commands/market.js +1802 -146
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +60 -25
- package/dist/commands/mcp.js +251 -64
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/open.d.ts +39 -9
- package/dist/commands/open.js +80 -25
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/playbook.d.ts +42 -0
- package/dist/commands/playbook.js +162 -0
- package/dist/commands/playbook.js.map +1 -0
- package/dist/commands/pod.js +1 -1
- package/dist/commands/pod.js.map +1 -1
- package/dist/commands/pods.d.ts +5 -0
- package/dist/commands/pods.js +97 -116
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +62 -0
- package/dist/commands/proposals-actions.js +143 -8
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/proposals-await.d.ts +68 -0
- package/dist/commands/proposals-await.js +248 -0
- package/dist/commands/proposals-await.js.map +1 -0
- package/dist/commands/proton-setup.d.ts +73 -0
- package/dist/commands/proton-setup.js +577 -0
- package/dist/commands/proton-setup.js.map +1 -0
- package/dist/commands/providers.d.ts +23 -0
- package/dist/commands/providers.js +126 -1
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/raycast.js +6 -2
- package/dist/commands/raycast.js.map +1 -1
- package/dist/commands/rule.d.ts +150 -0
- package/dist/commands/rule.js +447 -0
- package/dist/commands/rule.js.map +1 -0
- package/dist/commands/session-wait.d.ts +111 -0
- package/dist/commands/session-wait.js +209 -0
- package/dist/commands/session-wait.js.map +1 -0
- package/dist/commands/sessions.d.ts +52 -0
- package/dist/commands/sessions.js +478 -58
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +136 -19
- package/dist/commands/skill-manage.js.map +1 -1
- package/dist/commands/skills.js +16 -0
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +1 -4
- package/dist/commands/status.js +5 -34
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.backoff.test.d.ts +13 -0
- package/dist/commands/statusline.backoff.test.js +100 -0
- package/dist/commands/statusline.backoff.test.js.map +1 -0
- package/dist/commands/statusline.js +16 -9
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/sync-status.d.ts +12 -0
- package/dist/commands/sync-status.js +125 -0
- package/dist/commands/sync-status.js.map +1 -0
- package/dist/commands/templates-retire.d.ts +34 -0
- package/dist/commands/templates-retire.js +192 -0
- package/dist/commands/templates-retire.js.map +1 -0
- package/dist/commands/tools.js +6 -21
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/tracks.d.ts +51 -0
- package/dist/commands/tracks.js +291 -0
- package/dist/commands/tracks.js.map +1 -0
- package/dist/commands/update.d.ts +3 -11
- package/dist/commands/update.js +5 -134
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.d.ts +41 -3
- package/dist/commands/upload.js +120 -18
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/vendor.d.ts +28 -0
- package/dist/commands/vendor.js +110 -0
- package/dist/commands/vendor.js.map +1 -0
- package/dist/commands/versions.js +6 -0
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.js +10 -5
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/whoami.d.ts +23 -3
- package/dist/commands/whoami.js +169 -23
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/worker.d.ts +122 -0
- package/dist/commands/worker.js +435 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/commands/worker.test.d.ts +1 -0
- package/dist/commands/worker.test.js +116 -0
- package/dist/commands/worker.test.js.map +1 -0
- package/dist/commands/workspace-ops.d.ts +35 -0
- package/dist/commands/workspace-ops.js +153 -0
- package/dist/commands/workspace-ops.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +900 -180
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-connections.d.ts +31 -0
- package/dist/lib/agent-connections.js +33 -0
- package/dist/lib/agent-connections.js.map +1 -0
- package/dist/lib/agent-detect.d.ts +27 -0
- package/dist/lib/agent-detect.js +71 -0
- package/dist/lib/agent-detect.js.map +1 -0
- package/dist/lib/agent-door.d.ts +138 -0
- package/dist/lib/agent-door.js +426 -0
- package/dist/lib/agent-door.js.map +1 -0
- package/dist/lib/agents-config.d.ts +2 -0
- package/dist/lib/agents-config.js +4 -9
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +31 -2
- package/dist/lib/approval-poll.js +20 -7
- package/dist/lib/approval-poll.js.map +1 -1
- package/dist/lib/atomic-file.d.ts +48 -0
- package/dist/lib/atomic-file.js +129 -0
- package/dist/lib/atomic-file.js.map +1 -0
- package/dist/lib/auth.d.ts +14 -9
- package/dist/lib/auth.js +44 -61
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/batch-approval.d.ts +85 -0
- package/dist/lib/batch-approval.js +170 -0
- package/dist/lib/batch-approval.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +6 -5
- package/dist/lib/capture-lane.js +6 -5
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/capture-structure.d.ts +230 -11
- package/dist/lib/capture-structure.js +251 -13
- package/dist/lib/capture-structure.js.map +1 -1
- package/dist/lib/catalog-templates.d.ts +59 -0
- package/dist/lib/catalog-templates.js +126 -0
- package/dist/lib/catalog-templates.js.map +1 -0
- package/dist/lib/cli-build.d.ts +19 -0
- package/dist/lib/cli-build.js +37 -0
- package/dist/lib/cli-build.js.map +1 -0
- package/dist/lib/conversation-headers.d.ts +18 -0
- package/dist/lib/conversation-headers.js +32 -0
- package/dist/lib/conversation-headers.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +167 -11
- package/dist/lib/cp-packages.js +253 -21
- package/dist/lib/cp-packages.js.map +1 -1
- package/dist/lib/credential-class.d.ts +117 -0
- package/dist/lib/credential-class.js +116 -0
- package/dist/lib/credential-class.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +35 -0
- package/dist/lib/describe-lens.js +40 -0
- package/dist/lib/describe-lens.js.map +1 -1
- package/dist/lib/device-connect.d.ts +125 -0
- package/dist/lib/device-connect.js +256 -0
- package/dist/lib/device-connect.js.map +1 -0
- package/dist/lib/directory-lens.d.ts +99 -0
- package/dist/lib/directory-lens.js +187 -0
- package/dist/lib/directory-lens.js.map +1 -0
- package/dist/lib/exporter-coverage.d.ts +71 -0
- package/dist/lib/exporter-coverage.js +97 -0
- package/dist/lib/exporter-coverage.js.map +1 -0
- package/dist/lib/hub-client.d.ts +29 -8
- package/dist/lib/hub-client.js +328 -55
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/init-connect.d.ts +41 -0
- package/dist/lib/init-connect.js +75 -0
- package/dist/lib/init-connect.js.map +1 -0
- package/dist/lib/init-exit.d.ts +24 -0
- package/dist/lib/init-exit.js +41 -0
- package/dist/lib/init-exit.js.map +1 -0
- package/dist/lib/init-flow.d.ts +25 -0
- package/dist/lib/init-flow.js +40 -0
- package/dist/lib/init-flow.js.map +1 -0
- package/dist/lib/init-handoff.d.ts +16 -0
- package/dist/lib/init-handoff.js +19 -0
- package/dist/lib/init-handoff.js.map +1 -0
- package/dist/lib/init-output.d.ts +18 -0
- package/dist/lib/init-output.js +43 -0
- package/dist/lib/init-output.js.map +1 -0
- package/dist/lib/init-pod.d.ts +45 -0
- package/dist/lib/init-pod.js +36 -0
- package/dist/lib/init-pod.js.map +1 -0
- package/dist/lib/installed.d.ts +210 -11
- package/dist/lib/installed.js +234 -36
- package/dist/lib/installed.js.map +1 -1
- package/dist/lib/key-approval.d.ts +57 -0
- package/dist/lib/key-approval.js +117 -0
- package/dist/lib/key-approval.js.map +1 -0
- package/dist/lib/key-diagnosis.d.ts +56 -0
- package/dist/lib/key-diagnosis.js +227 -0
- package/dist/lib/key-diagnosis.js.map +1 -0
- package/dist/lib/key-doctor.d.ts +136 -0
- package/dist/lib/key-doctor.js +286 -0
- package/dist/lib/key-doctor.js.map +1 -0
- package/dist/lib/key-locations.d.ts +120 -0
- package/dist/lib/key-locations.js +326 -0
- package/dist/lib/key-locations.js.map +1 -0
- package/dist/lib/key-source.d.ts +66 -0
- package/dist/lib/key-source.js +106 -0
- package/dist/lib/key-source.js.map +1 -0
- package/dist/lib/key-state.d.ts +70 -0
- package/dist/lib/key-state.js +115 -0
- package/dist/lib/key-state.js.map +1 -0
- package/dist/lib/kind-package.d.ts +181 -0
- package/dist/lib/kind-package.js +679 -0
- package/dist/lib/kind-package.js.map +1 -0
- package/dist/lib/knowledge-title.d.ts +24 -0
- package/dist/lib/knowledge-title.js +46 -0
- package/dist/lib/knowledge-title.js.map +1 -0
- package/dist/lib/knowledge-title.test.d.ts +1 -0
- package/dist/lib/knowledge-title.test.js +34 -0
- package/dist/lib/knowledge-title.test.js.map +1 -0
- package/dist/lib/machine-instance.d.ts +64 -0
- package/dist/lib/machine-instance.js +142 -0
- package/dist/lib/machine-instance.js.map +1 -0
- package/dist/lib/mcp-bridge.d.ts +42 -0
- package/dist/lib/mcp-bridge.js +147 -0
- package/dist/lib/mcp-bridge.js.map +1 -0
- package/dist/lib/mcp-bridge.test.d.ts +1 -0
- package/dist/lib/mcp-bridge.test.js +90 -0
- package/dist/lib/mcp-bridge.test.js.map +1 -0
- package/dist/lib/mcp-call.d.ts +30 -0
- package/dist/lib/mcp-call.js +107 -0
- package/dist/lib/mcp-call.js.map +1 -0
- package/dist/lib/mcp-snippets.d.ts +53 -0
- package/dist/lib/mcp-snippets.js +82 -0
- package/dist/lib/mcp-snippets.js.map +1 -0
- package/dist/lib/next-steps.d.ts +8 -0
- package/dist/lib/next-steps.js +31 -1
- package/dist/lib/next-steps.js.map +1 -1
- package/dist/lib/package-wire.d.ts +179 -0
- package/dist/lib/package-wire.js +68 -0
- package/dist/lib/package-wire.js.map +1 -0
- package/dist/lib/pair-link.d.ts +38 -0
- package/dist/lib/pair-link.js +68 -0
- package/dist/lib/pair-link.js.map +1 -0
- package/dist/lib/pod-wide.d.ts +40 -0
- package/dist/lib/pod-wide.js +46 -0
- package/dist/lib/pod-wide.js.map +1 -0
- package/dist/lib/pod.d.ts +66 -112
- package/dist/lib/pod.js +134 -412
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +9 -3
- package/dist/lib/project-ref.js +10 -4
- package/dist/lib/project-ref.js.map +1 -1
- package/dist/lib/review-credential.d.ts +119 -0
- package/dist/lib/review-credential.js +147 -0
- package/dist/lib/review-credential.js.map +1 -0
- package/dist/lib/safe-open.d.ts +49 -0
- package/dist/lib/safe-open.js +119 -0
- package/dist/lib/safe-open.js.map +1 -0
- package/dist/lib/session-lens.d.ts +40 -1
- package/dist/lib/session-lens.js +54 -4
- package/dist/lib/session-lens.js.map +1 -1
- package/dist/lib/superwhisper-import.d.ts +8 -0
- package/dist/lib/superwhisper-import.js +14 -7
- package/dist/lib/superwhisper-import.js.map +1 -1
- package/dist/lib/superwhisper-title.test.d.ts +1 -0
- package/dist/lib/superwhisper-title.test.js +18 -0
- package/dist/lib/superwhisper-title.test.js.map +1 -0
- package/dist/lib/targets.d.ts +134 -10
- package/dist/lib/targets.js +962 -258
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/template-file.d.ts +4 -0
- package/dist/lib/template-file.js.map +1 -1
- package/dist/lib/template-lifecycle.d.ts +217 -0
- package/dist/lib/template-lifecycle.js +433 -0
- package/dist/lib/template-lifecycle.js.map +1 -0
- package/dist/lib/template-steps.d.ts +88 -0
- package/dist/lib/template-steps.js +118 -0
- package/dist/lib/template-steps.js.map +1 -0
- package/dist/lib/time-ago.d.ts +2 -0
- package/dist/lib/time-ago.js +15 -0
- package/dist/lib/time-ago.js.map +1 -0
- package/dist/utils/logger.js +5 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +23 -17
- package/skills/README.md +12 -10
- package/skills/agent-os/SKILL.md +214 -99
- package/skills/manifest.json +1 -1
- package/skills/onboard/SKILL.md +55 -26
- package/skills/synap/README.md +5 -8
- package/skills/synap/SKILL.md +1086 -283
- package/skills/synap/_order.txt +7 -0
- package/skills/synap/_skill.yaml +1 -1
- package/skills/synap/automations.md +15 -0
- package/skills/synap/capture.md +5 -0
- package/skills/synap/cli-operations.md +24 -18
- package/skills/synap/concepts.md +28 -0
- package/skills/synap/content-os.md +10 -1
- package/skills/synap/creative-loop.md +15 -10
- package/skills/synap/crm.md +21 -52
- package/skills/synap/document-embeds.md +141 -47
- package/skills/synap/escalation-ladder.md +20 -10
- package/skills/synap/focus-sessions.md +47 -21
- package/skills/synap/from-intent.md +142 -0
- package/skills/synap/governance-rules.md +4 -4
- package/skills/synap/governance.md +10 -7
- package/skills/synap/hand-off.md +33 -0
- package/skills/synap/inline-patterns.md +15 -7
- package/skills/synap/lenses.md +33 -15
- package/skills/synap/linking.md +41 -40
- package/skills/synap/mcp-remote-servers.md +64 -0
- package/skills/synap/mental-model.md +17 -15
- package/skills/synap/operating-mode-rules.md +1 -1
- package/skills/synap/processes.md +118 -0
- package/skills/synap/quick-reference.md +5 -1
- package/skills/synap/reading.md +3 -1
- package/skills/synap/reflexes.md +12 -42
- package/skills/synap/viewframe-cells.md +38 -5
- package/skills/synap/work-flow.md +1 -1
- package/skills/synap/work-model.md +96 -0
- package/skills/synap/worked-examples.md +4 -5
- package/skills/synap/workspace-design.md +14 -10
- package/skills/synap/writes.md +97 -24
- package/skills/synap/writing-titles.md +63 -0
- package/skills/synap-app/SKILL.md +2 -2
- package/skills/synap-app/_skill.yaml +1 -1
- package/skills/synap-app/install-commands.md +1 -1
- package/skills/synap-design/SKILL.md +474 -0
- package/skills/synap-design/_order.txt +4 -0
- package/skills/synap-design/_skill.yaml +21 -0
- package/skills/synap-design/loop.md +134 -0
- package/skills/synap-design/overview.md +44 -0
- package/skills/synap-design/principles.md +130 -0
- package/skills/synap-design/system.md +133 -0
- package/skills/synap-market/SKILL.md +306 -16
- package/skills/synap-market/_skill.yaml +1 -1
- package/skills/synap-market/author-and-publish.md +145 -8
- package/skills/synap-market/governance-and-catalog.md +7 -0
- package/skills/synap-market/install.md +79 -1
- package/skills/synap-market/overview.md +74 -6
- package/skills/synap-schema/SKILL.md +172 -10
- package/skills/synap-schema/_order.txt +2 -0
- package/skills/synap-schema/_skill.yaml +4 -2
- package/skills/synap-schema/common-mistakes.md +4 -2
- package/skills/synap-schema/discover-profiles.md +1 -1
- package/skills/synap-schema/entity-scope.md +15 -3
- package/skills/synap-schema/extend-first.md +29 -0
- package/skills/synap-schema/extend-vs-create.md +1 -1
- package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
- package/skills/synap-schema/property-types.md +1 -1
- package/skills/synap-schema/relations.md +1 -1
- package/skills/synap-ui/SKILL.md +19 -12
- package/skills/synap-ui/_skill.yaml +1 -1
- package/skills/synap-ui/ai-companion.md +1 -1
- package/skills/synap-ui/arranging-bento.md +2 -0
- package/skills/synap-ui/bento-layouts.md +10 -10
- package/skills/synap-ui/bento-recipes.md +313 -543
- package/skills/synap-ui/four-builds.md +5 -0
- package/skills/synap-ui/view-types.md +2 -2
- package/skills/synap-ui/widget-catalog.md +22 -278
- package/templates/automations/bookmark-enrichment.automation.json +290 -13
- package/templates/automations/url-bookmark-capture.automation.json +73 -11
- package/templates/skills/authoring-playbooks/SKILL.md +6 -3
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
- package/dist/commands/infra.d.ts +0 -21
- package/dist/commands/infra.js +0 -262
- package/dist/commands/infra.js.map +0 -1
- package/dist/commands/template.d.ts +0 -42
- package/dist/commands/template.js +0 -191
- package/dist/commands/template.js.map +0 -1
- package/dist/lib/browser-auth.d.ts +0 -35
- package/dist/lib/browser-auth.js +0 -170
- package/dist/lib/browser-auth.js.map +0 -1
- package/dist/lib/openclaw.d.ts +0 -32
- package/dist/lib/openclaw.js +0 -164
- package/dist/lib/openclaw.js.map +0 -1
- package/dist/lib/seed.d.ts +0 -13
- package/dist/lib/seed.js +0 -135
- package/dist/lib/seed.js.map +0 -1
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -1261
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -1647
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -1647
- package/node_modules/@synap/hub-rest-client/dist/index.js +0 -1231
- package/node_modules/@synap/hub-rest-client/package.json +0 -45
- package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1631
- package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
- package/node_modules/@synap/hub-rest-client/src/index.ts +0 -153
- package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -133
- package/node_modules/@synap/hub-rest-client/src/types.ts +0 -1299
package/dist/commands/infra.js
DELETED
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* synap infra
|
|
3
|
-
*
|
|
4
|
-
* Infrastructure management via Dokploy — view servers, trigger deploys,
|
|
5
|
-
* tail logs, and sync server state into Synap entities.
|
|
6
|
-
*
|
|
7
|
-
* synap infra — overview: servers + services status
|
|
8
|
-
* synap infra status — same as above
|
|
9
|
-
* synap infra deploy <app> — trigger a redeploy for a named app
|
|
10
|
-
* synap infra logs <app> — tail logs for a service
|
|
11
|
-
* synap infra sync — pull Dokploy state into Synap entities
|
|
12
|
-
* synap infra open — open Dokploy dashboard in browser
|
|
13
|
-
*/
|
|
14
|
-
import chalk from "chalk";
|
|
15
|
-
import ora from "ora";
|
|
16
|
-
import { execSync } from "child_process";
|
|
17
|
-
import { log, banner } from "../utils/logger.js";
|
|
18
|
-
function getDokployConfig() {
|
|
19
|
-
const url = process.env.DOKPLOY_URL ?? process.env.DEPLOY_DOMAIN
|
|
20
|
-
? `https://${process.env.DEPLOY_DOMAIN}`
|
|
21
|
-
: "https://deploy.synap.live";
|
|
22
|
-
const apiKey = process.env.DOKPLOY_API_KEY ?? "";
|
|
23
|
-
if (!apiKey)
|
|
24
|
-
return null;
|
|
25
|
-
return { url, apiKey };
|
|
26
|
-
}
|
|
27
|
-
async function dokployFetch(path, options = {}) {
|
|
28
|
-
const config = getDokployConfig();
|
|
29
|
-
if (!config) {
|
|
30
|
-
throw new Error("DOKPLOY_API_KEY not set. Get it from the Dokploy dashboard → Settings → API Keys,\n" +
|
|
31
|
-
" then add it to your .env or export DOKPLOY_API_KEY=<key>");
|
|
32
|
-
}
|
|
33
|
-
const res = await fetch(`${config.url}${path}`, {
|
|
34
|
-
...options,
|
|
35
|
-
headers: {
|
|
36
|
-
"Content-Type": "application/json",
|
|
37
|
-
"x-api-key": config.apiKey,
|
|
38
|
-
...options.headers,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
if (!res.ok) {
|
|
42
|
-
const text = await res.text().catch(() => res.statusText);
|
|
43
|
-
throw new Error(`Dokploy ${path}: ${res.status} ${text}`);
|
|
44
|
-
}
|
|
45
|
-
return res.json();
|
|
46
|
-
}
|
|
47
|
-
// ─── Status overview ─────────────────────────────────────────────────────────
|
|
48
|
-
export async function infraStatus() {
|
|
49
|
-
banner();
|
|
50
|
-
const config = getDokployConfig();
|
|
51
|
-
if (!config) {
|
|
52
|
-
log.warn("Dokploy API key not configured.");
|
|
53
|
-
log.blank();
|
|
54
|
-
log.dim("1. Open https://deploy.synap.live → Settings → API Keys → Create key");
|
|
55
|
-
log.dim("2. Add to your shell: export DOKPLOY_API_KEY=<key>");
|
|
56
|
-
log.dim("3. Or add to .env: DOKPLOY_API_KEY=<key>");
|
|
57
|
-
log.blank();
|
|
58
|
-
log.info(`Dashboard: ${chalk.cyan("https://deploy.synap.live")}`);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const spinner = ora("Fetching infrastructure status...").start();
|
|
62
|
-
try {
|
|
63
|
-
// Dokploy API: GET /api/servers and GET /api/applications
|
|
64
|
-
const [servers, apps] = await Promise.all([
|
|
65
|
-
dokployFetch("/api/server.all").catch(() => []),
|
|
66
|
-
dokployFetch("/api/application.all").catch(() => []),
|
|
67
|
-
]);
|
|
68
|
-
spinner.stop();
|
|
69
|
-
// ── Servers ──
|
|
70
|
-
log.heading("Servers");
|
|
71
|
-
if (servers.length === 0) {
|
|
72
|
-
log.dim(" No servers connected. Add one in the Dokploy dashboard.");
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
for (const s of servers) {
|
|
76
|
-
const dot = s.status === "active"
|
|
77
|
-
? chalk.green("●")
|
|
78
|
-
: s.status === "inactive"
|
|
79
|
-
? chalk.red("●")
|
|
80
|
-
: chalk.yellow("●");
|
|
81
|
-
console.log(` ${dot} ${chalk.bold(s.name)} ${chalk.dim(s.ip)}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
log.blank();
|
|
85
|
-
// ── Services ──
|
|
86
|
-
log.heading("Services");
|
|
87
|
-
if (apps.length === 0) {
|
|
88
|
-
log.dim(" No services deployed yet.");
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
const byServer = new Map();
|
|
92
|
-
for (const app of apps) {
|
|
93
|
-
const key = app.serverId ?? "local";
|
|
94
|
-
if (!byServer.has(key))
|
|
95
|
-
byServer.set(key, []);
|
|
96
|
-
byServer.get(key).push(app);
|
|
97
|
-
}
|
|
98
|
-
for (const [serverId, list] of byServer) {
|
|
99
|
-
const server = servers.find((s) => s.id === serverId);
|
|
100
|
-
if (server)
|
|
101
|
-
log.dim(` ── ${server.name} ──`);
|
|
102
|
-
for (const app of list) {
|
|
103
|
-
const status = app.status === "running"
|
|
104
|
-
? chalk.green(app.status)
|
|
105
|
-
: app.status === "error"
|
|
106
|
-
? chalk.red(app.status)
|
|
107
|
-
: chalk.yellow(app.status);
|
|
108
|
-
console.log(` ${chalk.bold(app.name)} ${status} ${chalk.dim(app.env ?? "")}`);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
log.blank();
|
|
113
|
-
log.dim(`Dashboard: ${chalk.cyan(config.url)}`);
|
|
114
|
-
log.dim("To deploy: synap infra deploy <app-name>");
|
|
115
|
-
log.dim("To tail logs: synap infra logs <app-name>");
|
|
116
|
-
}
|
|
117
|
-
catch (err) {
|
|
118
|
-
spinner.fail("Failed to reach Dokploy");
|
|
119
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
120
|
-
log.error(msg);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
// ─── Deploy ──────────────────────────────────────────────────────────────────
|
|
124
|
-
export async function infraDeploy(appName) {
|
|
125
|
-
const spinner = ora(`Triggering deploy for ${chalk.bold(appName)}...`).start();
|
|
126
|
-
try {
|
|
127
|
-
// List apps, find by name
|
|
128
|
-
const apps = await dokployFetch("/api/application.all");
|
|
129
|
-
const match = apps.find((a) => a.name.toLowerCase() === appName.toLowerCase() ||
|
|
130
|
-
a.appName?.toLowerCase() === appName.toLowerCase());
|
|
131
|
-
if (!match) {
|
|
132
|
-
spinner.fail(`App not found: ${appName}`);
|
|
133
|
-
log.blank();
|
|
134
|
-
log.dim("Available apps:");
|
|
135
|
-
for (const a of apps)
|
|
136
|
-
log.dim(` • ${a.name}`);
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
await dokployFetch(`/api/application.deploy`, {
|
|
140
|
-
method: "POST",
|
|
141
|
-
body: JSON.stringify({ applicationId: match.id }),
|
|
142
|
-
});
|
|
143
|
-
spinner.succeed(`Deploy triggered for ${chalk.bold(match.name)}`);
|
|
144
|
-
log.dim(`Watch progress: synap infra logs ${appName}`);
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
spinner.fail("Deploy failed");
|
|
148
|
-
log.error(err instanceof Error ? err.message : String(err));
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// ─── Logs ────────────────────────────────────────────────────────────────────
|
|
152
|
-
export async function infraLogs(appName, opts) {
|
|
153
|
-
try {
|
|
154
|
-
const apps = await dokployFetch("/api/application.all");
|
|
155
|
-
const match = apps.find((a) => a.name.toLowerCase() === appName.toLowerCase() ||
|
|
156
|
-
a.appName?.toLowerCase() === appName.toLowerCase());
|
|
157
|
-
if (!match) {
|
|
158
|
-
log.error(`App not found: ${appName}`);
|
|
159
|
-
log.blank();
|
|
160
|
-
log.dim("Available apps:");
|
|
161
|
-
for (const a of apps)
|
|
162
|
-
log.dim(` • ${a.name}`);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
// Use docker logs via container name (Dokploy uses appName as container name)
|
|
166
|
-
const containerName = match.appName ?? match.name;
|
|
167
|
-
const tail = opts.lines ?? 100;
|
|
168
|
-
const followFlag = opts.follow ? "-f" : "";
|
|
169
|
-
const cmd = `docker logs --tail ${tail} ${followFlag} ${containerName}`;
|
|
170
|
-
log.dim(`> ${cmd}`);
|
|
171
|
-
log.blank();
|
|
172
|
-
execSync(cmd, { stdio: "inherit" });
|
|
173
|
-
}
|
|
174
|
-
catch (err) {
|
|
175
|
-
log.error(err instanceof Error ? err.message : String(err));
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
// ─── Sync ─────────────────────────────────────────────────────────────────────
|
|
179
|
-
export async function infraSync(podUrl, apiKey) {
|
|
180
|
-
const spinner = ora("Syncing Dokploy state into Synap entities...").start();
|
|
181
|
-
try {
|
|
182
|
-
const [servers, apps] = await Promise.all([
|
|
183
|
-
dokployFetch("/api/server.all"),
|
|
184
|
-
dokployFetch("/api/application.all"),
|
|
185
|
-
]);
|
|
186
|
-
spinner.text = `Upserting ${servers.length} servers + ${apps.length} deployments...`;
|
|
187
|
-
// Push to Synap Hub Protocol
|
|
188
|
-
const headers = {
|
|
189
|
-
"Content-Type": "application/json",
|
|
190
|
-
Authorization: `Bearer ${apiKey}`,
|
|
191
|
-
};
|
|
192
|
-
let created = 0;
|
|
193
|
-
let updated = 0;
|
|
194
|
-
for (const s of servers) {
|
|
195
|
-
const res = await fetch(`${podUrl}/api/hub/entities/upsert`, {
|
|
196
|
-
method: "POST",
|
|
197
|
-
headers,
|
|
198
|
-
body: JSON.stringify({
|
|
199
|
-
profileSlug: "server",
|
|
200
|
-
dedupeKey: `dokploy:server:${s.id}`,
|
|
201
|
-
title: s.name,
|
|
202
|
-
properties: {
|
|
203
|
-
ip: s.ip,
|
|
204
|
-
status: s.status === "active" ? "online" : "offline",
|
|
205
|
-
region: s.region ?? "",
|
|
206
|
-
dokployServerId: s.id,
|
|
207
|
-
},
|
|
208
|
-
}),
|
|
209
|
-
});
|
|
210
|
-
if (res.ok) {
|
|
211
|
-
const { created: c } = await res.json();
|
|
212
|
-
c ? created++ : updated++;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
for (const app of apps) {
|
|
216
|
-
const res = await fetch(`${podUrl}/api/hub/entities/upsert`, {
|
|
217
|
-
method: "POST",
|
|
218
|
-
headers,
|
|
219
|
-
body: JSON.stringify({
|
|
220
|
-
profileSlug: "deployment",
|
|
221
|
-
dedupeKey: `dokploy:app:${app.id}`,
|
|
222
|
-
title: app.name,
|
|
223
|
-
properties: {
|
|
224
|
-
deployStatus: app.status,
|
|
225
|
-
env: app.env ?? "production",
|
|
226
|
-
url: app.domain ? `https://${app.domain}` : "",
|
|
227
|
-
image: app.image ?? "",
|
|
228
|
-
dokployAppId: app.id,
|
|
229
|
-
},
|
|
230
|
-
}),
|
|
231
|
-
});
|
|
232
|
-
if (res.ok) {
|
|
233
|
-
const { created: c } = await res.json();
|
|
234
|
-
c ? created++ : updated++;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
spinner.succeed(`Sync complete — ${chalk.green(created)} created, ${chalk.blue(updated)} updated`);
|
|
238
|
-
}
|
|
239
|
-
catch (err) {
|
|
240
|
-
spinner.fail("Sync failed");
|
|
241
|
-
log.error(err instanceof Error ? err.message : String(err));
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// ─── Open dashboard ──────────────────────────────────────────────────────────
|
|
245
|
-
export function infraOpen() {
|
|
246
|
-
const config = getDokployConfig();
|
|
247
|
-
const url = config?.url ?? "https://deploy.synap.live";
|
|
248
|
-
try {
|
|
249
|
-
const platform = process.platform;
|
|
250
|
-
const cmd = platform === "darwin"
|
|
251
|
-
? "open"
|
|
252
|
-
: platform === "win32"
|
|
253
|
-
? "start"
|
|
254
|
-
: "xdg-open";
|
|
255
|
-
execSync(`${cmd} ${url}`);
|
|
256
|
-
log.success(`Opening ${url}`);
|
|
257
|
-
}
|
|
258
|
-
catch {
|
|
259
|
-
log.info(`Dashboard: ${chalk.cyan(url)}`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
//# sourceMappingURL=infra.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"infra.js","sourceRoot":"","sources":["../../src/commands/infra.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
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
|
-
/**
|
|
25
|
-
* `synap template publish <file>` — the plan's "one request". A thin alias over
|
|
26
|
-
* the existing `marketPublish` so there is exactly ONE publish implementation
|
|
27
|
-
* (same validator, same CP write door, same `--public`/`--from-workspace`/`--json`).
|
|
28
|
-
*/
|
|
29
|
-
export declare function templatePublish(file: string | undefined, opts: {
|
|
30
|
-
public?: boolean;
|
|
31
|
-
private?: boolean;
|
|
32
|
-
fromWorkspace?: string;
|
|
33
|
-
json?: boolean;
|
|
34
|
-
podUrl?: string;
|
|
35
|
-
apiKey?: string;
|
|
36
|
-
}): Promise<void>;
|
|
37
|
-
export declare function templateList(opts: {
|
|
38
|
-
json?: boolean;
|
|
39
|
-
}): Promise<void>;
|
|
40
|
-
export declare function templateGet(slug: string, opts: {
|
|
41
|
-
json?: boolean;
|
|
42
|
-
}): Promise<void>;
|
|
@@ -1,191 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser-based connect flow — the recommended provisioning path.
|
|
3
|
-
*
|
|
4
|
-
* 1. Start a local HTTP server on an ephemeral port.
|
|
5
|
-
* 2. Build `{podUrl}/admin/connect?integration=cli&redirect_uri=http://127.0.0.1:<port>/callback`.
|
|
6
|
-
* 3. Open the user's default browser at that URL.
|
|
7
|
-
* 4. Admin UI authenticates the user (Kratos session), mints a scoped Hub
|
|
8
|
-
* Protocol API key via `trpc.apiKeys.connectIntegration`, and redirects
|
|
9
|
-
* to `http://127.0.0.1:<port>/callback?context={apiKey,podUrl,workspaceId}`.
|
|
10
|
-
* 5. Local server receives the callback, extracts credentials, shuts down.
|
|
11
|
-
*
|
|
12
|
-
* This is the same flow Raycast uses (via a `raycast://` deeplink) — for CLI
|
|
13
|
-
* we just swap the deeplink for a loopback HTTP URL. The admin UI's redirect
|
|
14
|
-
* whitelist accepts both.
|
|
15
|
-
*
|
|
16
|
-
* Security notes:
|
|
17
|
-
* - Loopback only (127.0.0.1) — no external network can intercept.
|
|
18
|
-
* - One-shot: server only handles the first /callback, then exits.
|
|
19
|
-
* - 5-minute timeout.
|
|
20
|
-
* - No CSRF token: single-use, host-local, bound to the process.
|
|
21
|
-
*/
|
|
22
|
-
export interface BrowserAuthResult {
|
|
23
|
-
apiKey: string;
|
|
24
|
-
podUrl: string;
|
|
25
|
-
workspaceId?: string;
|
|
26
|
-
}
|
|
27
|
-
export interface BrowserAuthOptions {
|
|
28
|
-
podUrl: string;
|
|
29
|
-
integration: "cli" | "raycast" | "openclaw" | "custom";
|
|
30
|
-
/** Milliseconds to wait for the callback. Default 5min. */
|
|
31
|
-
timeoutMs?: number;
|
|
32
|
-
/** Hook invoked with the admin-panel URL right before opening the browser. */
|
|
33
|
-
onUrlReady?: (url: string) => void;
|
|
34
|
-
}
|
|
35
|
-
export declare function runBrowserAuth(opts: BrowserAuthOptions): Promise<BrowserAuthResult>;
|