@synap-core/cli 1.11.0 → 1.13.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/LICENSE +21 -0
- package/README.md +40 -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 +32 -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 +524 -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 +116 -66
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/box.d.ts +42 -0
- package/dist/commands/box.js +89 -0
- package/dist/commands/box.js.map +1 -0
- package/dist/commands/bridge-setup.d.ts +14 -1
- package/dist/commands/bridge-setup.js +395 -129
- 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 +3 -1
- package/dist/commands/capability.js +249 -176
- 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/close-questions.d.ts +27 -0
- package/dist/commands/close-questions.js +49 -0
- package/dist/commands/close-questions.js.map +1 -0
- package/dist/commands/close-questions.test.d.ts +1 -0
- package/dist/commands/close-questions.test.js +52 -0
- package/dist/commands/close-questions.test.js.map +1 -0
- package/dist/commands/connect.d.ts +36 -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 +79 -44
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +34 -0
- package/dist/commands/data-extra.js +203 -25
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +120 -2
- package/dist/commands/data.js +295 -21
- 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 +133 -3
- package/dist/commands/doctor.js +761 -41
- 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/hooks.d.ts +19 -0
- package/dist/commands/hooks.js +70 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/import.d.ts +393 -13
- package/dist/commands/import.js +1150 -54
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +34 -9
- package/dist/commands/init.js +481 -981
- 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 +121 -57
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/lens.d.ts +37 -1
- package/dist/commands/lens.js +194 -72
- 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/observe.category.test.d.ts +1 -0
- package/dist/commands/observe.category.test.js +59 -0
- package/dist/commands/observe.category.test.js.map +1 -0
- package/dist/commands/observe.d.ts +3 -0
- package/dist/commands/observe.js +7 -5
- package/dist/commands/observe.js.map +1 -1
- package/dist/commands/observe.title.test.d.ts +1 -0
- package/dist/commands/observe.title.test.js +37 -0
- package/dist/commands/observe.title.test.js.map +1 -0
- 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 +171 -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 +11 -1
- package/dist/commands/pods.js +129 -131
- 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 +579 -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-feed-wait.d.ts +48 -0
- package/dist/commands/session-feed-wait.js +261 -0
- package/dist/commands/session-feed-wait.js.map +1 -0
- package/dist/commands/session-post.d.ts +40 -0
- package/dist/commands/session-post.js +96 -0
- package/dist/commands/session-post.js.map +1 -0
- package/dist/commands/session-wait.d.ts +116 -0
- package/dist/commands/session-wait.js +224 -0
- package/dist/commands/session-wait.js.map +1 -0
- package/dist/commands/sessions.d.ts +54 -0
- package/dist/commands/sessions.js +501 -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-commands.d.ts +2 -0
- package/dist/commands/skills-commands.js +9 -1
- package/dist/commands/skills-commands.js.map +1 -1
- package/dist/commands/skills-commands.test.d.ts +1 -0
- package/dist/commands/skills-commands.test.js +57 -0
- package/dist/commands/skills-commands.test.js.map +1 -0
- 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 +6 -35
- 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 +112 -0
- package/dist/commands/tracks.js +543 -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 +30 -3
- package/dist/commands/whoami.js +186 -23
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/worker-accounts.d.ts +149 -0
- package/dist/commands/worker-accounts.js +339 -0
- package/dist/commands/worker-accounts.js.map +1 -0
- package/dist/commands/worker-accounts.test.d.ts +1 -0
- package/dist/commands/worker-accounts.test.js +224 -0
- package/dist/commands/worker-accounts.test.js.map +1 -0
- package/dist/commands/worker.d.ts +331 -0
- package/dist/commands/worker.js +1067 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/commands/worker.test.d.ts +1 -0
- package/dist/commands/worker.test.js +427 -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 +1043 -186
- 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 +136 -0
- package/dist/lib/agent-door.js +429 -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 +17 -11
- package/dist/lib/auth.js +47 -64
- 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/box/egress.d.ts +82 -0
- package/dist/lib/box/egress.js +264 -0
- package/dist/lib/box/egress.js.map +1 -0
- package/dist/lib/box/evidence.d.ts +86 -0
- package/dist/lib/box/evidence.js +121 -0
- package/dist/lib/box/evidence.js.map +1 -0
- package/dist/lib/box/job-server.d.ts +72 -0
- package/dist/lib/box/job-server.js +246 -0
- package/dist/lib/box/job-server.js.map +1 -0
- package/dist/lib/box/provisioner.d.ts +83 -0
- package/dist/lib/box/provisioner.js +312 -0
- package/dist/lib/box/provisioner.js.map +1 -0
- package/dist/lib/box/proxmox.d.ts +112 -0
- package/dist/lib/box/proxmox.js +211 -0
- package/dist/lib/box/proxmox.js.map +1 -0
- package/dist/lib/box/wire.d.ts +98 -0
- package/dist/lib/box/wire.js +70 -0
- package/dist/lib/box/wire.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/client-header.test.d.ts +1 -0
- package/dist/lib/client-header.test.js +85 -0
- package/dist/lib/client-header.test.js.map +1 -0
- package/dist/lib/conversation-headers.d.ts +33 -0
- package/dist/lib/conversation-headers.js +69 -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 +144 -0
- package/dist/lib/credential-class.js +138 -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/goal-words.d.ts +38 -0
- package/dist/lib/goal-words.js +112 -0
- package/dist/lib/goal-words.js.map +1 -0
- package/dist/lib/hub-client.d.ts +57 -15
- package/dist/lib/hub-client.js +396 -82
- 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 +24 -0
- package/dist/lib/init-handoff.js +26 -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 +68 -0
- package/dist/lib/key-source.js +109 -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 +25 -0
- package/dist/lib/knowledge-title.js +47 -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 +49 -0
- package/dist/lib/mcp-bridge.js +180 -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 +118 -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/openclaw.js +3 -2
- package/dist/lib/openclaw.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-moved.d.ts +70 -0
- package/dist/lib/pod-moved.js +146 -0
- package/dist/lib/pod-moved.js.map +1 -0
- package/dist/lib/pod-reach.d.ts +39 -0
- package/dist/lib/pod-reach.js +117 -0
- package/dist/lib/pod-reach.js.map +1 -0
- package/dist/lib/pod-reach.test.d.ts +1 -0
- package/dist/lib/pod-reach.test.js +67 -0
- package/dist/lib/pod-reach.test.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 +74 -112
- package/dist/lib/pod.js +146 -415
- 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/register-claude-code-mcp.test.d.ts +1 -0
- package/dist/lib/register-claude-code-mcp.test.js +78 -0
- package/dist/lib/register-claude-code-mcp.test.js.map +1 -0
- package/dist/lib/review-credential.d.ts +119 -0
- package/dist/lib/review-credential.js +149 -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-feed.d.ts +185 -0
- package/dist/lib/session-feed.js +257 -0
- package/dist/lib/session-feed.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 +152 -10
- package/dist/lib/targets.js +974 -325
- 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/lib/wake-hook-settings.d.ts +57 -0
- package/dist/lib/wake-hook-settings.js +153 -0
- package/dist/lib/wake-hook-settings.js.map +1 -0
- package/dist/lib/wake-state.d.ts +65 -0
- package/dist/lib/wake-state.js +122 -0
- package/dist/lib/wake-state.js.map +1 -0
- package/dist/utils/logger.js +5 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +26 -17
- package/skills/README.md +13 -11
- 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 +1149 -289
- 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/code-skills.md +70 -0
- package/skills/synap/concepts.md +36 -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 +143 -47
- package/skills/synap/escalation-ladder.md +20 -10
- package/skills/synap/focus-sessions.md +56 -21
- package/skills/synap/from-intent.md +158 -0
- package/skills/synap/governance-rules.md +5 -5
- 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 +34 -16
- package/skills/synap/linking.md +42 -41
- package/skills/synap/mcp-remote-servers.md +64 -0
- package/skills/synap/mental-model.md +17 -15
- package/skills/synap/operating-mode-rules.md +2 -2
- package/skills/synap/processes.md +118 -0
- package/skills/synap/quick-reference.md +7 -2
- 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 +110 -0
- package/skills/synap/worked-examples.md +4 -5
- package/skills/synap/workspace-design.md +15 -11
- package/skills/synap/writes.md +105 -25
- package/skills/synap/writing-titles.md +63 -0
- package/skills/synap-app/SKILL.md +149 -67
- package/skills/synap-app/_skill.yaml +1 -1
- package/skills/synap-app/creating-the-base-app.md +12 -7
- package/skills/synap-app/governance.md +27 -16
- package/skills/synap-app/install-commands.md +18 -9
- package/skills/synap-app/overview.md +16 -9
- package/skills/synap-app/using-the-sdk.md +75 -25
- 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/box/runner.py +206 -0
- 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/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/update.js
CHANGED
|
@@ -1,145 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* synap update
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* synap update — update skill + show service status
|
|
8
|
-
* synap update --server — also trigger Dokploy redeploy of control-plane
|
|
9
|
-
* synap update --all — trigger redeploy of all registered Dokploy services
|
|
4
|
+
* Tells the user how to update the CLI itself. (It used to also update an
|
|
5
|
+
* agent's skill; Synap installs no agent now, so the hint is all that is left.)
|
|
10
6
|
*/
|
|
11
|
-
import chalk from "chalk";
|
|
12
|
-
import ora from "ora";
|
|
13
7
|
import { log, banner } from "../utils/logger.js";
|
|
14
|
-
|
|
15
|
-
import { installSynapSkill } from "../lib/pod.js";
|
|
16
|
-
function getDokployBase() {
|
|
17
|
-
const key = process.env.DOKPLOY_API_KEY ?? "";
|
|
18
|
-
if (!key)
|
|
19
|
-
return null;
|
|
20
|
-
const domain = process.env.DEPLOY_DOMAIN ?? "deploy.synap.live";
|
|
21
|
-
const url = process.env.DOKPLOY_URL ?? `https://${domain}`;
|
|
22
|
-
return { url, key };
|
|
23
|
-
}
|
|
24
|
-
async function fetchApps() {
|
|
25
|
-
const dok = getDokployBase();
|
|
26
|
-
if (!dok)
|
|
27
|
-
return [];
|
|
28
|
-
try {
|
|
29
|
-
const res = await fetch(`${dok.url}/api/application.all`, {
|
|
30
|
-
headers: { "x-api-key": dok.key },
|
|
31
|
-
signal: AbortSignal.timeout(8000),
|
|
32
|
-
});
|
|
33
|
-
if (!res.ok)
|
|
34
|
-
return [];
|
|
35
|
-
return (await res.json());
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
return [];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async function triggerDeploy(appId) {
|
|
42
|
-
const dok = getDokployBase();
|
|
43
|
-
if (!dok)
|
|
44
|
-
return false;
|
|
45
|
-
try {
|
|
46
|
-
const res = await fetch(`${dok.url}/api/application.deploy`, {
|
|
47
|
-
method: "POST",
|
|
48
|
-
headers: { "Content-Type": "application/json", "x-api-key": dok.key },
|
|
49
|
-
body: JSON.stringify({ applicationId: appId }),
|
|
50
|
-
signal: AbortSignal.timeout(10000),
|
|
51
|
-
});
|
|
52
|
-
return res.ok;
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// ─── Main ────────────────────────────────────────────────────────────────────
|
|
59
|
-
export async function update(opts = {}) {
|
|
8
|
+
export async function update() {
|
|
60
9
|
banner();
|
|
61
10
|
log.heading("Update");
|
|
62
|
-
// ── 1. Skill update (OpenClaw) ────────────────────────────────────────────
|
|
63
|
-
const oc = detectOpenClaw();
|
|
64
|
-
if (oc.found) {
|
|
65
|
-
const spinner = ora("Updating synap skill...").start();
|
|
66
|
-
try {
|
|
67
|
-
installSynapSkill();
|
|
68
|
-
spinner.succeed("Synap skill updated");
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
spinner.fail(err instanceof Error ? err.message : "Skill update failed");
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
log.dim("OpenClaw not detected — skipping skill update");
|
|
76
|
-
}
|
|
77
|
-
// ── 2. Dokploy service status ─────────────────────────────────────────────
|
|
78
|
-
log.blank();
|
|
79
|
-
const dok = getDokployBase();
|
|
80
|
-
if (!dok) {
|
|
81
|
-
log.dim("Dokploy not configured (DOKPLOY_API_KEY not set)");
|
|
82
|
-
log.dim("To enable server management: set DOKPLOY_API_KEY + DEPLOY_DOMAIN in your env");
|
|
83
|
-
log.blank();
|
|
84
|
-
log.info("To update the CLI itself:");
|
|
85
|
-
log.dim(" npm update -g @synap/cli");
|
|
86
|
-
log.blank();
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const appsSpinner = ora("Fetching service status from Dokploy...").start();
|
|
90
|
-
const apps = await fetchApps();
|
|
91
|
-
appsSpinner.stop();
|
|
92
|
-
if (apps.length === 0) {
|
|
93
|
-
log.dim("No services found in Dokploy (or API unreachable)");
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
log.heading("Services");
|
|
97
|
-
for (const app of apps) {
|
|
98
|
-
const status = app.status === "running"
|
|
99
|
-
? chalk.green(app.status)
|
|
100
|
-
: app.status === "error"
|
|
101
|
-
? chalk.red(app.status)
|
|
102
|
-
: chalk.yellow(app.status);
|
|
103
|
-
console.log(` ${chalk.bold(app.name.padEnd(24))} ${status} ${chalk.dim(app.env ?? "")}`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
// ── 3. Trigger redeploys if requested ─────────────────────────────────────
|
|
107
|
-
if (opts.server || opts.all) {
|
|
108
|
-
log.blank();
|
|
109
|
-
log.heading(opts.all ? "Redeploying all services" : "Redeploying control-plane");
|
|
110
|
-
const targets = opts.all
|
|
111
|
-
? apps
|
|
112
|
-
: apps.filter((a) => a.name.toLowerCase().includes("control-plane") ||
|
|
113
|
-
a.appName?.toLowerCase().includes("control-plane"));
|
|
114
|
-
if (targets.length === 0) {
|
|
115
|
-
log.dim("No matching services found in Dokploy");
|
|
116
|
-
log.dim("Register services first: synap infra status");
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
for (const app of targets) {
|
|
120
|
-
const spinner = ora(`Deploying ${app.name}...`).start();
|
|
121
|
-
const ok = await triggerDeploy(app.id);
|
|
122
|
-
if (ok) {
|
|
123
|
-
spinner.succeed(`${app.name}: deploy triggered`);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
spinner.fail(`${app.name}: deploy failed`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
log.blank();
|
|
131
|
-
log.dim(`Watch progress: ${chalk.cyan(`${dok.url}`)}`);
|
|
132
|
-
log.dim("Or tail logs: synap infra logs <service-name>");
|
|
133
|
-
}
|
|
134
|
-
else if (apps.length > 0) {
|
|
135
|
-
log.blank();
|
|
136
|
-
log.dim(`To redeploy: ${chalk.cyan("synap update --server")} (control-plane only)`);
|
|
137
|
-
log.dim(` ${chalk.cyan("synap update --all")} (all services)`);
|
|
138
|
-
}
|
|
139
|
-
// ── 4. CLI update reminder ────────────────────────────────────────────────
|
|
140
|
-
log.blank();
|
|
141
11
|
log.info("To update the CLI itself:");
|
|
142
|
-
log.dim(" npm update -g @synap/cli");
|
|
12
|
+
log.dim(" npm update -g @synap-core/cli");
|
|
13
|
+
log.dim(" npx @synap-core/cli@latest (no global install)");
|
|
143
14
|
log.blank();
|
|
144
15
|
}
|
|
145
16
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,EAAE,CAAC;IACT,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtB,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAC9D,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC"}
|
|
@@ -9,17 +9,39 @@
|
|
|
9
9
|
* Usage:
|
|
10
10
|
* synap upload ./report.pdf
|
|
11
11
|
* synap upload ./logo.png --title "Brand logo" --workspace <id>
|
|
12
|
+
* synap upload ./logo.svg --profile brand-asset --prop variant=dark
|
|
13
|
+
* synap upload ./launch.mp4 --workspace <id> # >10MB → presigned lane
|
|
12
14
|
* synap upload ./spec.pdf --attach <entityId> # also link doc → entity
|
|
13
15
|
*
|
|
14
16
|
* API:
|
|
15
|
-
* POST /api/hub/files (multipart) — field `file`
|
|
16
|
-
* workspaceId (membership-gated) +
|
|
17
|
-
*
|
|
17
|
+
* POST /api/hub/files (multipart) — ≤10MB (fonts ≤5MB): field `file` +
|
|
18
|
+
* workspaceId (membership-gated) + optional
|
|
19
|
+
* title / profileSlug / properties /
|
|
20
|
+
* targetWorkspaceId → { fileEntityId, documentId }
|
|
21
|
+
* POST /api/hub/files/uploads — >10MB: presigned PUT URL (caps per mime:
|
|
22
|
+
* PUT <uploadUrl> video 500MB · audio 100MB · zip 200MB);
|
|
23
|
+
* POST /api/hub/files/uploads/finalize the bytes go straight to storage, then
|
|
24
|
+
* finalize mints the entity (same shape).
|
|
18
25
|
* POST /api/hub/relations — with --attach: `references` relation
|
|
19
26
|
* from the target entity to the new doc.
|
|
27
|
+
*
|
|
28
|
+
* `--workspace` is an EXPLICIT placement pin (sent as `targetWorkspaceId`).
|
|
29
|
+
* Without it the configured workspace is only context, and a pod-scope kind
|
|
30
|
+
* such as `file` lands pod-wide — which is why `--workspace` used to look
|
|
31
|
+
* ignored (the entity came back with workspaceId null).
|
|
20
32
|
*/
|
|
33
|
+
import { type HubConfig } from "../lib/hub-client.js";
|
|
34
|
+
/** Mirror of the pod's per-mime caps (C4) — refuse before any round-trip. */
|
|
35
|
+
export declare function maxUploadBytesForMime(mime: string): number;
|
|
36
|
+
export declare function mimeFor(path: string): string;
|
|
37
|
+
/** `--prop key=value` (repeatable) → the entity `properties` object. */
|
|
38
|
+
export declare function parseProps(pairs: string[] | undefined): Record<string, string>;
|
|
21
39
|
export interface UploadOpts {
|
|
22
40
|
workspace?: string;
|
|
41
|
+
/** Entity kind to create (default `file`), e.g. `brand-asset`. */
|
|
42
|
+
profile?: string;
|
|
43
|
+
/** Repeatable `key=value` entity properties. */
|
|
44
|
+
prop?: string[];
|
|
23
45
|
attach?: string;
|
|
24
46
|
title?: string;
|
|
25
47
|
open?: boolean;
|
|
@@ -27,4 +49,20 @@ export interface UploadOpts {
|
|
|
27
49
|
podUrl?: string;
|
|
28
50
|
apiKey?: string;
|
|
29
51
|
}
|
|
52
|
+
export interface UploadRequest {
|
|
53
|
+
buf: Buffer<ArrayBuffer>;
|
|
54
|
+
filename: string;
|
|
55
|
+
mimeType: string;
|
|
56
|
+
workspaceId?: string;
|
|
57
|
+
targetWorkspaceId?: string;
|
|
58
|
+
title?: string;
|
|
59
|
+
profileSlug?: string;
|
|
60
|
+
properties: Record<string, string>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Pick the lane by size: the buffered multipart door up to 10MB, the presigned
|
|
64
|
+
* lane above it (request → PUT straight to storage → finalize). Both answer
|
|
65
|
+
* `{ fileEntityId, documentId }` or a governed `proposed` handle.
|
|
66
|
+
*/
|
|
67
|
+
export declare function sendUpload(req: UploadRequest, cfg: HubConfig): Promise<Record<string, unknown>>;
|
|
30
68
|
export declare function uploadFile(path: string, opts: UploadOpts): Promise<void>;
|
package/dist/commands/upload.js
CHANGED
|
@@ -9,24 +9,49 @@
|
|
|
9
9
|
* Usage:
|
|
10
10
|
* synap upload ./report.pdf
|
|
11
11
|
* synap upload ./logo.png --title "Brand logo" --workspace <id>
|
|
12
|
+
* synap upload ./logo.svg --profile brand-asset --prop variant=dark
|
|
13
|
+
* synap upload ./launch.mp4 --workspace <id> # >10MB → presigned lane
|
|
12
14
|
* synap upload ./spec.pdf --attach <entityId> # also link doc → entity
|
|
13
15
|
*
|
|
14
16
|
* API:
|
|
15
|
-
* POST /api/hub/files (multipart) — field `file`
|
|
16
|
-
* workspaceId (membership-gated) +
|
|
17
|
-
*
|
|
17
|
+
* POST /api/hub/files (multipart) — ≤10MB (fonts ≤5MB): field `file` +
|
|
18
|
+
* workspaceId (membership-gated) + optional
|
|
19
|
+
* title / profileSlug / properties /
|
|
20
|
+
* targetWorkspaceId → { fileEntityId, documentId }
|
|
21
|
+
* POST /api/hub/files/uploads — >10MB: presigned PUT URL (caps per mime:
|
|
22
|
+
* PUT <uploadUrl> video 500MB · audio 100MB · zip 200MB);
|
|
23
|
+
* POST /api/hub/files/uploads/finalize the bytes go straight to storage, then
|
|
24
|
+
* finalize mints the entity (same shape).
|
|
18
25
|
* POST /api/hub/relations — with --attach: `references` relation
|
|
19
26
|
* from the target entity to the new doc.
|
|
27
|
+
*
|
|
28
|
+
* `--workspace` is an EXPLICIT placement pin (sent as `targetWorkspaceId`).
|
|
29
|
+
* Without it the configured workspace is only context, and a pod-scope kind
|
|
30
|
+
* such as `file` lands pod-wide — which is why `--workspace` used to look
|
|
31
|
+
* ignored (the entity came back with workspaceId null).
|
|
20
32
|
*/
|
|
21
33
|
import { readFileSync } from "fs";
|
|
22
34
|
import { basename, extname } from "path";
|
|
23
35
|
import { log } from "../utils/logger.js";
|
|
24
|
-
import { resolveHubConfig, resolveUserId, hubPostMultipart, renderHubError, } from "../lib/hub-client.js";
|
|
36
|
+
import { resolveHubConfig, resolveUserId, hubPost, hubPostMultipart, renderHubError, } from "../lib/hub-client.js";
|
|
25
37
|
import { writeGovernance } from "../lib/capture-lane.js";
|
|
26
38
|
import { createRelation } from "./data.js";
|
|
27
39
|
import { openInBrowser } from "./open.js";
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
const MB = 1024 * 1024;
|
|
41
|
+
/** The buffered multipart door's ceiling (the pod holds that body in memory). */
|
|
42
|
+
const MAX_BUFFERED_BYTES = 10 * MB;
|
|
43
|
+
/** Mirror of the pod's per-mime caps (C4) — refuse before any round-trip. */
|
|
44
|
+
export function maxUploadBytesForMime(mime) {
|
|
45
|
+
if (mime.startsWith("video/"))
|
|
46
|
+
return 500 * MB;
|
|
47
|
+
if (mime.startsWith("audio/"))
|
|
48
|
+
return 100 * MB;
|
|
49
|
+
if (mime === "application/zip")
|
|
50
|
+
return 200 * MB;
|
|
51
|
+
if (mime.startsWith("font/"))
|
|
52
|
+
return 5 * MB;
|
|
53
|
+
return MAX_BUFFERED_BYTES;
|
|
54
|
+
}
|
|
30
55
|
/** Best-effort extension → mime. Backend accepts arbitrary mime; octet-stream is the safe default. */
|
|
31
56
|
const MIME = {
|
|
32
57
|
".md": "text/markdown",
|
|
@@ -51,11 +76,75 @@ const MIME = {
|
|
|
51
76
|
".ogg": "audio/ogg",
|
|
52
77
|
".mp4": "video/mp4",
|
|
53
78
|
".mov": "video/quicktime",
|
|
79
|
+
".webm": "video/webm",
|
|
54
80
|
".zip": "application/zip",
|
|
81
|
+
".woff2": "font/woff2",
|
|
82
|
+
".woff": "font/woff",
|
|
83
|
+
".ttf": "font/ttf",
|
|
84
|
+
".otf": "font/otf",
|
|
55
85
|
};
|
|
56
|
-
function mimeFor(path) {
|
|
86
|
+
export function mimeFor(path) {
|
|
57
87
|
return MIME[extname(path).toLowerCase()] ?? "application/octet-stream";
|
|
58
88
|
}
|
|
89
|
+
/** `--prop key=value` (repeatable) → the entity `properties` object. */
|
|
90
|
+
export function parseProps(pairs) {
|
|
91
|
+
const out = {};
|
|
92
|
+
for (const pair of pairs ?? []) {
|
|
93
|
+
const i = pair.indexOf("=");
|
|
94
|
+
if (i <= 0)
|
|
95
|
+
throw new Error(`--prop expects key=value, got "${pair}"`);
|
|
96
|
+
out[pair.slice(0, i)] = pair.slice(i + 1);
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Pick the lane by size: the buffered multipart door up to 10MB, the presigned
|
|
102
|
+
* lane above it (request → PUT straight to storage → finalize). Both answer
|
|
103
|
+
* `{ fileEntityId, documentId }` or a governed `proposed` handle.
|
|
104
|
+
*/
|
|
105
|
+
export async function sendUpload(req, cfg) {
|
|
106
|
+
const hasProps = Object.keys(req.properties).length > 0;
|
|
107
|
+
if (req.buf.byteLength <= MAX_BUFFERED_BYTES) {
|
|
108
|
+
const form = new FormData();
|
|
109
|
+
form.append("file", new File([req.buf], req.filename, { type: req.mimeType }));
|
|
110
|
+
if (req.workspaceId)
|
|
111
|
+
form.append("workspaceId", req.workspaceId);
|
|
112
|
+
if (req.targetWorkspaceId)
|
|
113
|
+
form.append("targetWorkspaceId", req.targetWorkspaceId);
|
|
114
|
+
if (req.title)
|
|
115
|
+
form.append("title", req.title);
|
|
116
|
+
if (req.profileSlug)
|
|
117
|
+
form.append("profileSlug", req.profileSlug);
|
|
118
|
+
if (hasProps)
|
|
119
|
+
form.append("properties", JSON.stringify(req.properties));
|
|
120
|
+
return (await hubPostMultipart("/files", form, cfg));
|
|
121
|
+
}
|
|
122
|
+
const ticket = (await hubPost("/files/uploads", {
|
|
123
|
+
workspaceId: req.workspaceId,
|
|
124
|
+
...(req.targetWorkspaceId ? { targetWorkspaceId: req.targetWorkspaceId } : {}),
|
|
125
|
+
filename: req.filename,
|
|
126
|
+
mimeType: req.mimeType,
|
|
127
|
+
size: req.buf.byteLength,
|
|
128
|
+
}, cfg));
|
|
129
|
+
// Straight to object storage — signed for exactly this type and length.
|
|
130
|
+
const put = await fetch(ticket.uploadUrl, {
|
|
131
|
+
method: "PUT",
|
|
132
|
+
headers: { ...(ticket.headers ?? {}), "Content-Type": req.mimeType },
|
|
133
|
+
body: req.buf,
|
|
134
|
+
signal: AbortSignal.timeout(30 * 60_000),
|
|
135
|
+
});
|
|
136
|
+
if (!put.ok) {
|
|
137
|
+
const detail = await put.text().catch(() => "");
|
|
138
|
+
throw new Error(`Upload to storage failed (HTTP ${put.status})${detail ? `: ${detail.slice(0, 300)}` : ""}`);
|
|
139
|
+
}
|
|
140
|
+
return (await hubPost("/files/uploads/finalize", {
|
|
141
|
+
uploadToken: ticket.uploadToken,
|
|
142
|
+
...(req.title ? { title: req.title } : {}),
|
|
143
|
+
...(req.profileSlug ? { profileSlug: req.profileSlug } : {}),
|
|
144
|
+
...(hasProps ? { properties: req.properties } : {}),
|
|
145
|
+
...(req.targetWorkspaceId ? { targetWorkspaceId: req.targetWorkspaceId } : {}),
|
|
146
|
+
}, cfg, 60_000));
|
|
147
|
+
}
|
|
59
148
|
export async function uploadFile(path, opts) {
|
|
60
149
|
try {
|
|
61
150
|
const cfg = await resolveHubConfig(opts);
|
|
@@ -78,19 +167,32 @@ export async function uploadFile(path, opts) {
|
|
|
78
167
|
log.error(`File is empty: ${path}`);
|
|
79
168
|
process.exit(1);
|
|
80
169
|
}
|
|
81
|
-
|
|
82
|
-
|
|
170
|
+
const filename = basename(path);
|
|
171
|
+
const mimeType = mimeFor(path);
|
|
172
|
+
const cap = maxUploadBytesForMime(mimeType);
|
|
173
|
+
if (buf.byteLength > cap) {
|
|
174
|
+
log.error(`File too large: ${(buf.byteLength / MB).toFixed(1)}MB — the pod accepts up to ${cap / MB}MB for ${mimeType}.`);
|
|
83
175
|
process.exit(1);
|
|
84
176
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const res =
|
|
177
|
+
let properties;
|
|
178
|
+
try {
|
|
179
|
+
properties = parseProps(opts.prop);
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
log.error(e.message);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
const res = await sendUpload({
|
|
186
|
+
buf,
|
|
187
|
+
filename,
|
|
188
|
+
mimeType,
|
|
189
|
+
workspaceId,
|
|
190
|
+
// Only an explicit --workspace pins; the configured default stays context.
|
|
191
|
+
targetWorkspaceId: opts.workspace,
|
|
192
|
+
title: opts.title,
|
|
193
|
+
profileSlug: opts.profile,
|
|
194
|
+
properties,
|
|
195
|
+
}, cfg);
|
|
94
196
|
const governance = writeGovernance(res);
|
|
95
197
|
const fileEntityId = String(res.fileEntityId ?? "");
|
|
96
198
|
const documentId = String(res.documentId ?? "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap vendor` — the author's PUBLISHER PROFILE.
|
|
3
|
+
* ================================================
|
|
4
|
+
*
|
|
5
|
+
* A package is attributed to a vendor or to nobody. The CP's publish handler is
|
|
6
|
+
* `if (body.vendorId) { … }` with no else: it never auto-creates a vendor, never
|
|
7
|
+
* infers one from the session, and never back-fills attribution afterwards. So
|
|
8
|
+
* an author who publishes before creating a profile is orphaned permanently —
|
|
9
|
+
* their packages can never appear on `GET /api/vendors/:slug`, the page the
|
|
10
|
+
* landing site links as `/superpowers/by/<slug>`.
|
|
11
|
+
*
|
|
12
|
+
* The browser has always had this door (`PublishWizard`'s Publisher step, which
|
|
13
|
+
* blocks until a vendor exists). The CLI only ever READ one. This is the missing
|
|
14
|
+
* half — the same endpoint, the same field names.
|
|
15
|
+
*
|
|
16
|
+
* Transport lives in `lib/cp-packages.ts` (`createVendor` / `fetchMyVendorId`);
|
|
17
|
+
* this file is presentation + exit codes only.
|
|
18
|
+
*/
|
|
19
|
+
export declare function vendorCreate(slug: string, opts: {
|
|
20
|
+
json?: boolean;
|
|
21
|
+
name?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
website?: string;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
/** `synap vendor show` — do I have a publisher profile, and what is published under it? */
|
|
26
|
+
export declare function vendorShow(opts: {
|
|
27
|
+
json?: boolean;
|
|
28
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap vendor` — the author's PUBLISHER PROFILE.
|
|
3
|
+
* ================================================
|
|
4
|
+
*
|
|
5
|
+
* A package is attributed to a vendor or to nobody. The CP's publish handler is
|
|
6
|
+
* `if (body.vendorId) { … }` with no else: it never auto-creates a vendor, never
|
|
7
|
+
* infers one from the session, and never back-fills attribution afterwards. So
|
|
8
|
+
* an author who publishes before creating a profile is orphaned permanently —
|
|
9
|
+
* their packages can never appear on `GET /api/vendors/:slug`, the page the
|
|
10
|
+
* landing site links as `/superpowers/by/<slug>`.
|
|
11
|
+
*
|
|
12
|
+
* The browser has always had this door (`PublishWizard`'s Publisher step, which
|
|
13
|
+
* blocks until a vendor exists). The CLI only ever READ one. This is the missing
|
|
14
|
+
* half — the same endpoint, the same field names.
|
|
15
|
+
*
|
|
16
|
+
* Transport lives in `lib/cp-packages.ts` (`createVendor` / `fetchMyVendorId`);
|
|
17
|
+
* this file is presentation + exit codes only.
|
|
18
|
+
*/
|
|
19
|
+
import chalk from "chalk";
|
|
20
|
+
import { log } from "../utils/logger.js";
|
|
21
|
+
import { createVendor, fetchMyVendorId, CpWriteError, } from "../lib/cp-packages.js";
|
|
22
|
+
import { getCpUrl, getStoredToken } from "../lib/auth.js";
|
|
23
|
+
/** `my-studio` → `My Studio` — a default `--name` when the author gives none. */
|
|
24
|
+
function titleFromSlug(slug) {
|
|
25
|
+
return (slug
|
|
26
|
+
.split(/[-_]/)
|
|
27
|
+
.filter(Boolean)
|
|
28
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
29
|
+
.join(" ") || slug);
|
|
30
|
+
}
|
|
31
|
+
export async function vendorCreate(slug, opts) {
|
|
32
|
+
// Same rule as the CP's `createVendorSchema` — checked here so a typo costs a
|
|
33
|
+
// message rather than a round-trip and a raw zod error.
|
|
34
|
+
if (!/^[a-z][a-z0-9-]{1,63}$/.test(slug)) {
|
|
35
|
+
const message = "A publisher slug must be lowercase kebab-case, start with a letter, and be 2–64 characters.";
|
|
36
|
+
if (opts.json) {
|
|
37
|
+
console.log(JSON.stringify({ ok: false, error: message, slug }, null, 2));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
log.error(message);
|
|
41
|
+
log.hint(`e.g. synap vendor create my-studio --name "My Studio"`);
|
|
42
|
+
}
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
const displayName = opts.name?.trim() || titleFromSlug(slug);
|
|
46
|
+
try {
|
|
47
|
+
const vendor = await createVendor({
|
|
48
|
+
slug,
|
|
49
|
+
displayName,
|
|
50
|
+
description: opts.description,
|
|
51
|
+
website: opts.website,
|
|
52
|
+
});
|
|
53
|
+
if (opts.json) {
|
|
54
|
+
console.log(JSON.stringify({ ok: true, vendor }, null, 2));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
log.success(`Publisher profile ${chalk.bold(vendor.displayName)} created (@${vendor.slug}).`);
|
|
58
|
+
log.dim("Everything you publish from now on is attributed to it:");
|
|
59
|
+
log.dim(` ${getCpUrl()}/api/vendors/${vendor.slug}`);
|
|
60
|
+
log.dim("Already published something? Publish it again — the CP attributes");
|
|
61
|
+
log.dim("on write and never back-fills.");
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
if (e instanceof CpWriteError) {
|
|
65
|
+
if (opts.json) {
|
|
66
|
+
console.log(JSON.stringify({ ok: false, status: e.status, error: e.serverMessage, slug }, null, 2));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
log.error(`Could not create the publisher profile${e.status ? ` (HTTP ${e.status})` : ""}: ${e.serverMessage}`);
|
|
70
|
+
// The CP returns 409 for BOTH "you already have one" and "slug taken" —
|
|
71
|
+
// its message distinguishes them, so only add the next action.
|
|
72
|
+
if (e.status === 409)
|
|
73
|
+
log.hint("Run: synap vendor show");
|
|
74
|
+
if (e.status === 401)
|
|
75
|
+
log.hint("Run: synap login");
|
|
76
|
+
}
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
log.error(`Could not create the publisher profile: ${e.message}`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** `synap vendor show` — do I have a publisher profile, and what is published under it? */
|
|
84
|
+
export async function vendorShow(opts) {
|
|
85
|
+
const token = getStoredToken()?.token;
|
|
86
|
+
if (!token) {
|
|
87
|
+
if (opts.json) {
|
|
88
|
+
console.log(JSON.stringify({ ok: false, error: "not-logged-in" }, null, 2));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
log.error("Not logged in.");
|
|
92
|
+
log.hint("Run: synap login");
|
|
93
|
+
}
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
const id = await fetchMyVendorId(getCpUrl(), token);
|
|
97
|
+
if (opts.json) {
|
|
98
|
+
console.log(JSON.stringify({ ok: true, vendorId: id }, null, 2));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (!id) {
|
|
102
|
+
// A refusal that names the consequence, not just the absence.
|
|
103
|
+
log.warn("You have no publisher profile.");
|
|
104
|
+
log.hint("Packages you publish will be attributed to nobody, and the CP never back-fills.");
|
|
105
|
+
log.hint(`Create one: synap vendor create <slug> --name "<name>"`);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
log.success(`You have a publisher profile (id ${id}).`);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=vendor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../src/commands/vendor.ts"],"names":[],"mappings":"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"}
|
|
@@ -143,6 +143,12 @@ function isNewer(from, to) {
|
|
|
143
143
|
name: "cmp",
|
|
144
144
|
tags: [],
|
|
145
145
|
isPrivate: false,
|
|
146
|
+
// `items` became required on `CatalogEntryBase` when the type split into a
|
|
147
|
+
// bundled/remote union (`@synap-core/workspace-templates` 0.11.0). This is a
|
|
148
|
+
// SYNTHETIC entry that exists only to reuse the shared version comparator —
|
|
149
|
+
// it summarises no real package, so `[]` is the honest value, exactly as the
|
|
150
|
+
// field's own contract prescribes for an entry that carries no cells.
|
|
151
|
+
items: [],
|
|
146
152
|
source: "remote",
|
|
147
153
|
remote: { slug: "__cmp__", name: "cmp", definition: { sourcePackage: { version: to } } },
|
|
148
154
|
};
|