@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
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bridge, driven through its real stdin/stdout pump against a fake pod.
|
|
3
|
+
* Rows where a looser bridge disagrees: the conversation headers must reach
|
|
4
|
+
* EVERY request (not just initialize); the pod-minted Mcp-Session-Id must be
|
|
5
|
+
* echoed after initialize; a pod failure must answer the waiting request (a
|
|
6
|
+
* silent drop hangs Claude Code); SSE and JSON bodies both come through; a
|
|
7
|
+
* notification (no id) gets no invented reply.
|
|
8
|
+
*/
|
|
9
|
+
import { PassThrough } from "node:stream";
|
|
10
|
+
import { describe, expect, it } from "vitest";
|
|
11
|
+
import { runMcpBridge, sseEvents, withConversationMeta } from "./mcp-bridge.js";
|
|
12
|
+
import { conversationHeaders, claudeCodeConversation, cliConversation } from "./conversation-headers.js";
|
|
13
|
+
const SID = "8c34a72b-b1c1-4c37-9c1f-02920b69ccb2";
|
|
14
|
+
async function drive(lines, respond, headers = {}) {
|
|
15
|
+
const input = new PassThrough();
|
|
16
|
+
const output = new PassThrough();
|
|
17
|
+
const chunks = [];
|
|
18
|
+
output.on("data", (c) => chunks.push(String(c)));
|
|
19
|
+
const seen = [];
|
|
20
|
+
const fetchImpl = (async (_url, init) => {
|
|
21
|
+
seen.push({ headers: init.headers, body: String(init.body) });
|
|
22
|
+
return respond(JSON.parse(String(init.body)), seen.length);
|
|
23
|
+
});
|
|
24
|
+
const done = runMcpBridge({ url: "https://pod/mcp", apiKey: "k", headers, input, output, fetchImpl, log: () => { } });
|
|
25
|
+
for (const l of lines)
|
|
26
|
+
input.write(JSON.stringify(l) + "\n");
|
|
27
|
+
input.end();
|
|
28
|
+
await done;
|
|
29
|
+
const out = chunks.join("").split("\n").filter(Boolean).map((l) => JSON.parse(l));
|
|
30
|
+
return { seen, out };
|
|
31
|
+
}
|
|
32
|
+
const json = (body, extra = {}) => new Response(JSON.stringify(body), { status: 200, headers: { "content-type": "application/json", ...extra } });
|
|
33
|
+
describe("runMcpBridge", () => {
|
|
34
|
+
it("names the conversation on every request and echoes the minted session id", async () => {
|
|
35
|
+
const conv = conversationHeaders(SID, "/Users/a/code");
|
|
36
|
+
const { seen, out } = await drive([{ jsonrpc: "2.0", id: 1, method: "initialize", params: {} }], () => json({ jsonrpc: "2.0", id: 1, result: { protocolVersion: "2025-11-25" } }, { "mcp-session-id": "minted-1" }), conv);
|
|
37
|
+
expect(seen[0].headers["X-Synap-Conversation"]).toBe(`claude-code:${SID}`);
|
|
38
|
+
expect(seen[0].headers["X-Synap-Conversation-Cwd"]).toBe("/Users/a/code");
|
|
39
|
+
expect(out).toEqual([{ jsonrpc: "2.0", id: 1, result: { protocolVersion: "2025-11-25" } }]);
|
|
40
|
+
// Second connection turn: after initialize, the minted id + version ride along.
|
|
41
|
+
const input = new PassThrough();
|
|
42
|
+
const output = new PassThrough();
|
|
43
|
+
const sent = [];
|
|
44
|
+
let n = 0;
|
|
45
|
+
const fetchImpl = (async (_u, init) => {
|
|
46
|
+
sent.push(init.headers);
|
|
47
|
+
n += 1;
|
|
48
|
+
return n === 1
|
|
49
|
+
? json({ jsonrpc: "2.0", id: 1, result: { protocolVersion: "2025-11-25" } }, { "mcp-session-id": "minted-1" })
|
|
50
|
+
: new Response(null, { status: 202 });
|
|
51
|
+
});
|
|
52
|
+
const done = runMcpBridge({ url: "u", apiKey: "k", headers: conv, input, output, fetchImpl, log: () => { } });
|
|
53
|
+
input.write(JSON.stringify({ jsonrpc: "2.0", id: 1, method: "initialize", params: {} }) + "\n");
|
|
54
|
+
await new Promise((r) => setTimeout(r, 20));
|
|
55
|
+
input.write(JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized" }) + "\n");
|
|
56
|
+
input.end();
|
|
57
|
+
await done;
|
|
58
|
+
expect(sent[1]["Mcp-Session-Id"]).toBe("minted-1");
|
|
59
|
+
expect(sent[1]["Mcp-Protocol-Version"]).toBe("2025-11-25");
|
|
60
|
+
expect(sent[1]["X-Synap-Conversation"]).toBe(`claude-code:${SID}`);
|
|
61
|
+
});
|
|
62
|
+
it("a pod failure answers the waiting request; a notification gets no reply", async () => {
|
|
63
|
+
const { out } = await drive([
|
|
64
|
+
{ jsonrpc: "2.0", id: 7, method: "tools/call", params: {} },
|
|
65
|
+
{ jsonrpc: "2.0", method: "notifications/initialized" },
|
|
66
|
+
], () => new Response("boom", { status: 502 }));
|
|
67
|
+
expect(out).toHaveLength(1);
|
|
68
|
+
expect(out[0]).toMatchObject({ jsonrpc: "2.0", id: 7, error: { code: -32000 } });
|
|
69
|
+
expect(out[0].error.message).toContain("HTTP 502");
|
|
70
|
+
});
|
|
71
|
+
it("an SSE body is unwrapped into its messages", async () => {
|
|
72
|
+
const sse = `event: message\ndata: {"jsonrpc":"2.0","id":3,"result":{"ok":true}}\n\n`;
|
|
73
|
+
const { out } = await drive([{ jsonrpc: "2.0", id: 3, method: "tools/list" }], () => new Response(sse, { status: 200, headers: { "content-type": "text/event-stream" } }));
|
|
74
|
+
expect(out).toEqual([{ jsonrpc: "2.0", id: 3, result: { ok: true } }]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe("conversation headers", () => {
|
|
78
|
+
it("only a real Claude Code UUID names a conversation", () => {
|
|
79
|
+
expect(claudeCodeConversation(SID.toUpperCase())).toBe(`claude-code:${SID}`);
|
|
80
|
+
expect(claudeCodeConversation("not-a-uuid")).toBeUndefined();
|
|
81
|
+
});
|
|
82
|
+
it("outside Claude Code the run names itself: one id per process, SYNAP_RUN_ID wins", () => {
|
|
83
|
+
const a = conversationHeaders(undefined, "/x")["X-Synap-Conversation"];
|
|
84
|
+
expect(a).toMatch(/^synap-cli:[0-9a-f-]{36}$/);
|
|
85
|
+
expect(conversationHeaders(undefined, "/y")["X-Synap-Conversation"]).toBe(a);
|
|
86
|
+
expect(conversationHeaders(undefined, "/x")).not.toHaveProperty("X-Synap-Conversation-Cwd");
|
|
87
|
+
expect(cliConversation({ SYNAP_RUN_ID: "nightly-42" })).toBe("synap-cli:nightly-42");
|
|
88
|
+
expect(cliConversation({ SYNAP_RUN_ID: "bad id" })).toBe(a);
|
|
89
|
+
});
|
|
90
|
+
it("a non-ASCII cwd is dropped, the conversation still sent", () => {
|
|
91
|
+
expect(conversationHeaders(SID, "/Users/é")).toEqual({ "X-Synap-Conversation": `claude-code:${SID}` });
|
|
92
|
+
});
|
|
93
|
+
it("sseEvents keeps an incomplete event for the next chunk", () => {
|
|
94
|
+
expect(sseEvents("data: a\n\ndata: b")).toEqual({ events: ["a"], rest: "data: b" });
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("conversation in _meta", () => {
|
|
98
|
+
const conv = conversationHeaders(SID, "/Users/a/code");
|
|
99
|
+
it("every forwarded request carries live.synap/conversation (and the cwd) in params._meta", async () => {
|
|
100
|
+
const { seen } = await drive([
|
|
101
|
+
{ jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "t", _meta: { keep: 1 } } },
|
|
102
|
+
{ jsonrpc: "2.0", id: 2, method: "tools/list" },
|
|
103
|
+
], (b) => json({ jsonrpc: "2.0", id: b.id, result: {} }), conv);
|
|
104
|
+
const bodies = seen.map((s) => JSON.parse(s.body));
|
|
105
|
+
for (const b of bodies) {
|
|
106
|
+
expect(b.params._meta["live.synap/conversation"]).toBe(`claude-code:${SID}`);
|
|
107
|
+
expect(b.params._meta["live.synap/conversationCwd"]).toBe("/Users/a/code");
|
|
108
|
+
}
|
|
109
|
+
expect(bodies.find((b) => b.id === 1).params).toMatchObject({ name: "t", _meta: { keep: 1 } });
|
|
110
|
+
});
|
|
111
|
+
it("leaves responses and header-less bridges untouched", () => {
|
|
112
|
+
const resp = { jsonrpc: "2.0", id: 1, result: {} };
|
|
113
|
+
expect(withConversationMeta(resp, conv)).toEqual(resp);
|
|
114
|
+
const req = { jsonrpc: "2.0", id: 1, method: "ping" };
|
|
115
|
+
expect(withConversationMeta(req, {})).toBe(req);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=mcp-bridge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bridge.test.js","sourceRoot":"","sources":["../../src/lib/mcp-bridge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal MCP `tools/call` client over the pod's Streamable-HTTP `/mcp` door.
|
|
3
|
+
*
|
|
4
|
+
* For CLI commands that must read an AGENT-facing tool as a named agent: the
|
|
5
|
+
* worker reads `synap_orient`'s `handedToYou`, and the Hub `/orient` REST door
|
|
6
|
+
* refuses grant-scoped agent keys (GRANT_DOOR_UNSUPPORTED) while the MCP door
|
|
7
|
+
* serves them. One MCP session per client, re-initialised once if the pod
|
|
8
|
+
* forgets it. Replies may be plain JSON or SSE; both are read.
|
|
9
|
+
*
|
|
10
|
+
* A FAILED call is never an empty result: transport and JSON-RPC errors throw,
|
|
11
|
+
* and a tool error comes back as `isError: true` with the pod's text.
|
|
12
|
+
*/
|
|
13
|
+
export interface McpToolResult {
|
|
14
|
+
isError: boolean;
|
|
15
|
+
text: string;
|
|
16
|
+
}
|
|
17
|
+
export interface McpCallClient {
|
|
18
|
+
call(tool: string, args?: Record<string, unknown>): Promise<McpToolResult>;
|
|
19
|
+
}
|
|
20
|
+
export interface McpCallOptions {
|
|
21
|
+
/** The pod's MCP endpoint, e.g. `https://pod.example/mcp`. */
|
|
22
|
+
url: string;
|
|
23
|
+
apiKey: string;
|
|
24
|
+
clientName?: string;
|
|
25
|
+
fetchImpl?: typeof fetch;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
}
|
|
28
|
+
/** The `data:` payload of the LAST complete SSE event, or the body itself. */
|
|
29
|
+
export declare function lastJsonPayload(body: string): string;
|
|
30
|
+
export declare function createMcpClient(opts: McpCallOptions): McpCallClient;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal MCP `tools/call` client over the pod's Streamable-HTTP `/mcp` door.
|
|
3
|
+
*
|
|
4
|
+
* For CLI commands that must read an AGENT-facing tool as a named agent: the
|
|
5
|
+
* worker reads `synap_orient`'s `handedToYou`, and the Hub `/orient` REST door
|
|
6
|
+
* refuses grant-scoped agent keys (GRANT_DOOR_UNSUPPORTED) while the MCP door
|
|
7
|
+
* serves them. One MCP session per client, re-initialised once if the pod
|
|
8
|
+
* forgets it. Replies may be plain JSON or SSE; both are read.
|
|
9
|
+
*
|
|
10
|
+
* A FAILED call is never an empty result: transport and JSON-RPC errors throw,
|
|
11
|
+
* and a tool error comes back as `isError: true` with the pod's text.
|
|
12
|
+
*/
|
|
13
|
+
/** The `data:` payload of the LAST complete SSE event, or the body itself. */
|
|
14
|
+
export function lastJsonPayload(body) {
|
|
15
|
+
if (!/^\s*(event:|data:)/m.test(body))
|
|
16
|
+
return body;
|
|
17
|
+
const data = body
|
|
18
|
+
.split(/\r?\n/)
|
|
19
|
+
.filter((l) => l.startsWith("data:"))
|
|
20
|
+
.map((l) => l.slice(5).replace(/^ /, ""));
|
|
21
|
+
return data.length ? data[data.length - 1] : "";
|
|
22
|
+
}
|
|
23
|
+
export function createMcpClient(opts) {
|
|
24
|
+
const doFetch = opts.fetchImpl ?? fetch;
|
|
25
|
+
const timeoutMs = opts.timeoutMs ?? 120_000;
|
|
26
|
+
let sessionId;
|
|
27
|
+
let initialized = false;
|
|
28
|
+
let nextId = 1;
|
|
29
|
+
const post = async (message) => {
|
|
30
|
+
const headers = {
|
|
31
|
+
Authorization: `Bearer ${opts.apiKey}`,
|
|
32
|
+
"Content-Type": "application/json",
|
|
33
|
+
Accept: "application/json, text/event-stream",
|
|
34
|
+
};
|
|
35
|
+
if (sessionId)
|
|
36
|
+
headers["mcp-session-id"] = sessionId;
|
|
37
|
+
const res = await doFetch(opts.url, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers,
|
|
40
|
+
body: JSON.stringify(message),
|
|
41
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
42
|
+
});
|
|
43
|
+
const minted = res.headers.get("mcp-session-id");
|
|
44
|
+
if (minted)
|
|
45
|
+
sessionId = minted;
|
|
46
|
+
const body = await res.text();
|
|
47
|
+
return { status: res.status, body };
|
|
48
|
+
};
|
|
49
|
+
const initialize = async () => {
|
|
50
|
+
sessionId = undefined;
|
|
51
|
+
const { status, body } = await post({
|
|
52
|
+
jsonrpc: "2.0",
|
|
53
|
+
id: nextId++,
|
|
54
|
+
method: "initialize",
|
|
55
|
+
params: {
|
|
56
|
+
protocolVersion: "2025-06-18",
|
|
57
|
+
capabilities: {},
|
|
58
|
+
clientInfo: { name: opts.clientName ?? "synap-cli", version: "1" },
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
if (status < 200 || status >= 300) {
|
|
62
|
+
throw new Error(`MCP initialize failed (HTTP ${status}): ${body.slice(0, 200)}`);
|
|
63
|
+
}
|
|
64
|
+
// Notifications get no reply; a failure here is not fatal to the session.
|
|
65
|
+
await post({ jsonrpc: "2.0", method: "notifications/initialized", params: {} }).catch(() => undefined);
|
|
66
|
+
initialized = true;
|
|
67
|
+
};
|
|
68
|
+
const callOnce = async (tool, args) => {
|
|
69
|
+
if (!initialized)
|
|
70
|
+
await initialize();
|
|
71
|
+
return post({
|
|
72
|
+
jsonrpc: "2.0",
|
|
73
|
+
id: nextId++,
|
|
74
|
+
method: "tools/call",
|
|
75
|
+
params: { name: tool, arguments: args },
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
return {
|
|
79
|
+
async call(tool, args = {}) {
|
|
80
|
+
let { status, body } = await callOnce(tool, args);
|
|
81
|
+
if (status === 404 || status === 400) {
|
|
82
|
+
// The pod forgot the session (restart, expiry): one fresh handshake.
|
|
83
|
+
initialized = false;
|
|
84
|
+
({ status, body } = await callOnce(tool, args));
|
|
85
|
+
}
|
|
86
|
+
if (status < 200 || status >= 300) {
|
|
87
|
+
throw new Error(`MCP ${tool} failed (HTTP ${status}): ${body.slice(0, 300)}`);
|
|
88
|
+
}
|
|
89
|
+
const payload = lastJsonPayload(body);
|
|
90
|
+
let msg;
|
|
91
|
+
try {
|
|
92
|
+
msg = JSON.parse(payload);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
throw new Error(`MCP ${tool} returned an unreadable reply: ${payload.slice(0, 200)}`);
|
|
96
|
+
}
|
|
97
|
+
if (msg.error)
|
|
98
|
+
throw new Error(`MCP ${tool} error: ${msg.error.message ?? JSON.stringify(msg.error)}`);
|
|
99
|
+
const text = (msg.result?.content ?? [])
|
|
100
|
+
.filter((c) => c.type === "text" && typeof c.text === "string")
|
|
101
|
+
.map((c) => c.text)
|
|
102
|
+
.join("");
|
|
103
|
+
return { isError: Boolean(msg.result?.isError), text };
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=mcp-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-call.js","sourceRoot":"","sources":["../../src/lib/mcp-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE paste-ready printout of a pod MCP connection: URL, key, and the
|
|
3
|
+
* client-specific forms (Claude Code command, native mcpServers JSON, the
|
|
4
|
+
* mcp-remote stdio bridge, header-based UIs). `synap mcp url` and a custom
|
|
5
|
+
* agent from `synap agents add` both print through here, so the two can never
|
|
6
|
+
* hand a user different instructions for the same connection.
|
|
7
|
+
*/
|
|
8
|
+
/** Name of the env var every printed snippet references instead of the key. */
|
|
9
|
+
export declare const MCP_KEY_ENV = "SYNAP_MCP_KEY";
|
|
10
|
+
/** `synap_abcd1234wxyz` → `synap_…wxyz`. Never enough to use, enough to recognise. */
|
|
11
|
+
export declare function redactKey(key: string): string;
|
|
12
|
+
export interface McpSnippetFiles {
|
|
13
|
+
/** `export SYNAP_MCP_KEY=…` — `source` it before launching the client. */
|
|
14
|
+
envFile: string;
|
|
15
|
+
/** Ready-to-merge client config blocks carrying the REAL key. */
|
|
16
|
+
jsonFile: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The key must reach a client config without crossing argv, stdout or shell
|
|
20
|
+
* history. So the CLI writes the full material to 0600 files under `~/.synap`
|
|
21
|
+
* and prints only redacted forms + these paths.
|
|
22
|
+
*/
|
|
23
|
+
export declare function writeMcpSnippetFiles(url: string, hubApiKey: string, agentUserId: string): McpSnippetFiles;
|
|
24
|
+
/** Native-HTTP and mcp-remote blocks. `key` is real (file) or redacted (screen). */
|
|
25
|
+
export declare function mcpClientBlocks(url: string, key: string): {
|
|
26
|
+
mcpServers: {
|
|
27
|
+
synap: {
|
|
28
|
+
url: string;
|
|
29
|
+
headers: {
|
|
30
|
+
Authorization: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
mcpRemote: {
|
|
35
|
+
mcpServers: {
|
|
36
|
+
synap: {
|
|
37
|
+
command: string;
|
|
38
|
+
args: string[];
|
|
39
|
+
env: {
|
|
40
|
+
SYNAP_AUTH: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export interface McpConnectionPrintout {
|
|
47
|
+
url: string;
|
|
48
|
+
hubApiKey: string;
|
|
49
|
+
agentUserId: string;
|
|
50
|
+
workspaceId?: string;
|
|
51
|
+
projectId?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function printMcpConnection(c: McpConnectionPrintout): void;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE paste-ready printout of a pod MCP connection: URL, key, and the
|
|
3
|
+
* client-specific forms (Claude Code command, native mcpServers JSON, the
|
|
4
|
+
* mcp-remote stdio bridge, header-based UIs). `synap mcp url` and a custom
|
|
5
|
+
* agent from `synap agents add` both print through here, so the two can never
|
|
6
|
+
* hand a user different instructions for the same connection.
|
|
7
|
+
*/
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import { log } from "../utils/logger.js";
|
|
12
|
+
import { ensureSecretDir, writeSecretFile } from "./atomic-file.js";
|
|
13
|
+
/** Name of the env var every printed snippet references instead of the key. */
|
|
14
|
+
export const MCP_KEY_ENV = "SYNAP_MCP_KEY";
|
|
15
|
+
/** `synap_abcd1234wxyz` → `synap_…wxyz`. Never enough to use, enough to recognise. */
|
|
16
|
+
export function redactKey(key) {
|
|
17
|
+
const prefix = key.startsWith("synap_") ? "synap_" : "";
|
|
18
|
+
return `${prefix}…${key.slice(-4)}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The key must reach a client config without crossing argv, stdout or shell
|
|
22
|
+
* history. So the CLI writes the full material to 0600 files under `~/.synap`
|
|
23
|
+
* and prints only redacted forms + these paths.
|
|
24
|
+
*/
|
|
25
|
+
export function writeMcpSnippetFiles(url, hubApiKey, agentUserId) {
|
|
26
|
+
const dir = path.join(os.homedir(), ".synap", "mcp-keys");
|
|
27
|
+
ensureSecretDir(path.join(os.homedir(), ".synap"));
|
|
28
|
+
ensureSecretDir(dir);
|
|
29
|
+
const id = (agentUserId || "agent").replace(/[^A-Za-z0-9_-]/g, "_");
|
|
30
|
+
const envFile = path.join(dir, `${id}.env`);
|
|
31
|
+
const jsonFile = path.join(dir, `${id}.json`);
|
|
32
|
+
writeSecretFile(envFile, `export ${MCP_KEY_ENV}='${hubApiKey}'\n`);
|
|
33
|
+
writeSecretFile(jsonFile, JSON.stringify(mcpClientBlocks(url, hubApiKey), null, 2) + "\n");
|
|
34
|
+
return { envFile, jsonFile };
|
|
35
|
+
}
|
|
36
|
+
/** Native-HTTP and mcp-remote blocks. `key` is real (file) or redacted (screen). */
|
|
37
|
+
export function mcpClientBlocks(url, key) {
|
|
38
|
+
return {
|
|
39
|
+
mcpServers: {
|
|
40
|
+
synap: { url, headers: { Authorization: `Bearer ${key}` } },
|
|
41
|
+
},
|
|
42
|
+
// mcp-remote: the header VALUE comes from env, so the key is not in argv
|
|
43
|
+
// (and a space inside an argument is a known mcp-remote/Windows trap).
|
|
44
|
+
mcpRemote: {
|
|
45
|
+
mcpServers: {
|
|
46
|
+
synap: {
|
|
47
|
+
command: "npx",
|
|
48
|
+
args: ["-y", "mcp-remote", url, "--header", "Authorization:${SYNAP_AUTH}"],
|
|
49
|
+
env: { SYNAP_AUTH: `Bearer ${key}` },
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function printMcpConnection(c) {
|
|
56
|
+
const { url, hubApiKey, agentUserId, workspaceId, projectId } = c;
|
|
57
|
+
const red = redactKey(hubApiKey);
|
|
58
|
+
const files = writeMcpSnippetFiles(url, hubApiKey, agentUserId);
|
|
59
|
+
const blocks = mcpClientBlocks(url, red);
|
|
60
|
+
const mcpServers = { mcpServers: blocks.mcpServers };
|
|
61
|
+
const mcpRemote = blocks.mcpRemote;
|
|
62
|
+
log.heading("\nSynap MCP connection");
|
|
63
|
+
console.log(` ${chalk.dim("URL")} ${url}`);
|
|
64
|
+
console.log(` ${chalk.dim("Header")} Authorization: Bearer ${red}`);
|
|
65
|
+
console.log(` ${chalk.dim("Key")} saved to ${files.envFile} and ${files.jsonFile} (0600) — the full key is never printed here`);
|
|
66
|
+
console.log(` ${chalk.dim("Agent")} ${agentUserId}${workspaceId ? chalk.dim(` · workspace ${workspaceId}`) : chalk.dim(" · pod-wide")}${projectId ? chalk.dim(` · project ${projectId}`) : ""}`);
|
|
67
|
+
console.log(chalk.bold("\nClaude Code"));
|
|
68
|
+
console.log(chalk.cyan(` source ${files.envFile}\n claude mcp add --transport http synap ${url} \\\n --header 'Authorization: Bearer \${${MCP_KEY_ENV}}' --scope user`));
|
|
69
|
+
console.log(chalk.bold("\nCursor / VS Code / native-HTTP clients (mcp.json)"));
|
|
70
|
+
console.log(chalk.dim(` (redacted — merge the block from ${files.jsonFile})`));
|
|
71
|
+
console.log(chalk.dim(JSON.stringify(mcpServers, null, 2)));
|
|
72
|
+
console.log(chalk.bold("\nClaude Desktop / stdio-only clients (mcp-remote bridge)"));
|
|
73
|
+
console.log(chalk.dim(` (redacted — merge the "mcpRemote" block from ${files.jsonFile})`));
|
|
74
|
+
console.log(chalk.dim(JSON.stringify(mcpRemote, null, 2)));
|
|
75
|
+
console.log(chalk.bold("\nUI clients that accept an API key / custom header (ChatGPT, Raycast, …)"));
|
|
76
|
+
console.log(` Paste the URL above and add the Authorization header.`);
|
|
77
|
+
console.log(chalk.dim(" Raycast: run “Install MCP Server” → transport HTTP → paste the URL + a “Authorization: Bearer <key from the file above>” header."));
|
|
78
|
+
console.log(chalk.dim(" ChatGPT: Settings → enable Developer mode → add a connector → paste the URL and choose API-key auth."));
|
|
79
|
+
console.log(chalk.yellow("\nclaude.ai (web) uses OAuth via Synap Cloud MCP — run `synap mcp connect-claude` to print https://api.synap.live/mcp (no header field in that UI)."));
|
|
80
|
+
console.log(chalk.dim("\nTip: for a known client, `synap agents add <client>` writes the config for you."));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=mcp-snippets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-snippets.js","sourceRoot":"","sources":["../../src/lib/mcp-snippets.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEpE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAE3C,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAW,EACX,SAAiB,EACjB,WAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1D,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9C,eAAe,CAAC,OAAO,EAAE,UAAU,WAAW,KAAK,SAAS,KAAK,CAAC,CAAC;IACnE,eAAe,CACb,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAChE,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,GAAW;IACtD,OAAO;QACL,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE;SAC5D;QACD,yEAAyE;QACzE,uEAAuE;QACvE,SAAS,EAAE;YACT,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,6BAA6B,CAAC;oBAC1E,GAAG,EAAE,EAAE,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE;iBACrC;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,kBAAkB,CAAC,CAAwB;IACzD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,QAAQ,KAAK,CAAC,QAAQ,8CAA8C,CACzH,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CACxL,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,YAAY,KAAK,CAAC,OAAO,6CAA6C,GAAG,+CAA+C,WAAW,iBAAiB,CACrJ,CACF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CACxF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,oIAAoI,CACrI,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,wGAAwG,CACzG,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,qJAAqJ,CACtJ,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,mFAAmF,CACpF,CACF,CAAC;AACJ,CAAC"}
|
package/dist/lib/next-steps.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export declare const FLOW: {
|
|
|
38
38
|
afterProjectUse(name: string): NextStep[];
|
|
39
39
|
/** After creating a new project. */
|
|
40
40
|
afterProjectNew(name: string, id: string): NextStep[];
|
|
41
|
+
/** After pinning a workspace as the active lens (peer of afterProjectUse). */
|
|
42
|
+
afterWorkspaceUse(name: string): NextStep[];
|
|
41
43
|
/** After listing projects (or after orient). */
|
|
42
44
|
afterProjectList(): NextStep[];
|
|
43
45
|
/** After browsing the marketplace. */
|
|
@@ -56,6 +58,12 @@ export declare const FLOW: {
|
|
|
56
58
|
afterMarketUpdateCheck(slugsWithUpdates: string[]): NextStep[];
|
|
57
59
|
/** After `synap market installed` inventoried the pod (found drift or not). */
|
|
58
60
|
afterMarketInstalledCheck(slugsWithUpdates: string[]): NextStep[];
|
|
61
|
+
/**
|
|
62
|
+
* After a background corpus import (`synap import` → /import/enqueue-corpus)
|
|
63
|
+
* finished. The result is a PENDING proposal, so every step here is about
|
|
64
|
+
* reviewing it — nothing is in the graph until it is approved.
|
|
65
|
+
*/
|
|
66
|
+
afterCorpusImport(): NextStep[];
|
|
59
67
|
/** After `synap market update` applied one or more updates. */
|
|
60
68
|
afterMarketUpdateApply(): NextStep[];
|
|
61
69
|
};
|
package/dist/lib/next-steps.js
CHANGED
|
@@ -30,6 +30,15 @@ export function renderNextSteps(steps) {
|
|
|
30
30
|
console.log(chalk.dim(` ${s.command.padEnd(width)} — ${s.why}`));
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* After structure exists (launch / a live market install): fill it via the
|
|
35
|
+
* onboard interview — not a second create. Same step on both edges so the hint
|
|
36
|
+
* cannot drift.
|
|
37
|
+
*/
|
|
38
|
+
const FILL_EMPTY_WORKSPACE = {
|
|
39
|
+
command: 'synap ask "help me set up this workspace"',
|
|
40
|
+
why: "guided interview to fill the empty workspace — do not create another",
|
|
41
|
+
};
|
|
33
42
|
/**
|
|
34
43
|
* The canonical flow graph. Each edge is a small function returning 1–3
|
|
35
44
|
* `NextStep`s for "you just did X → here's the sensible next move(s)."
|
|
@@ -68,11 +77,19 @@ export const FLOW = {
|
|
|
68
77
|
{ command: `synap market install <slug> --project ${id}`, why: `add a single package to ${name}` },
|
|
69
78
|
];
|
|
70
79
|
},
|
|
80
|
+
/** After pinning a workspace as the active lens (peer of afterProjectUse). */
|
|
81
|
+
afterWorkspaceUse(name) {
|
|
82
|
+
return [
|
|
83
|
+
{ command: "synap orient", why: `see what's in ${name}` },
|
|
84
|
+
{ command: "synap workspace list", why: "switch to another operational domain" },
|
|
85
|
+
{ command: "synap project use <ref>", why: "compose the cross-cutting project lens on top" },
|
|
86
|
+
];
|
|
87
|
+
},
|
|
71
88
|
/** After listing projects (or after orient). */
|
|
72
89
|
afterProjectList() {
|
|
73
90
|
return [
|
|
74
91
|
{ command: "synap project use <id>", why: "focus a project (cross-cutting lens)" },
|
|
75
|
-
{ command: "synap project new <name>", why: "create a
|
|
92
|
+
{ command: "synap project new <name>", why: "create a project — a commitment you are driving, with whom" },
|
|
76
93
|
];
|
|
77
94
|
},
|
|
78
95
|
/** After browsing the marketplace. */
|
|
@@ -90,6 +107,7 @@ export const FLOW = {
|
|
|
90
107
|
return [
|
|
91
108
|
{ command: "synap orient", why: `see ${args.slug} in ${args.projectName ?? "your pod"}` },
|
|
92
109
|
{ command: "synap open", why: "open it in the browser" },
|
|
110
|
+
FILL_EMPTY_WORKSPACE,
|
|
93
111
|
];
|
|
94
112
|
},
|
|
95
113
|
/** After `synap launch` stands up a company/OS (pod-wide, or under a project). */
|
|
@@ -102,6 +120,7 @@ export const FLOW = {
|
|
|
102
120
|
: "see the new workspaces",
|
|
103
121
|
},
|
|
104
122
|
{ command: "synap market --list", why: "add more packages" },
|
|
123
|
+
FILL_EMPTY_WORKSPACE,
|
|
105
124
|
];
|
|
106
125
|
},
|
|
107
126
|
/** After orienting on the pod. */
|
|
@@ -135,6 +154,17 @@ export const FLOW = {
|
|
|
135
154
|
}
|
|
136
155
|
return steps;
|
|
137
156
|
},
|
|
157
|
+
/**
|
|
158
|
+
* After a background corpus import (`synap import` → /import/enqueue-corpus)
|
|
159
|
+
* finished. The result is a PENDING proposal, so every step here is about
|
|
160
|
+
* reviewing it — nothing is in the graph until it is approved.
|
|
161
|
+
*/
|
|
162
|
+
afterCorpusImport() {
|
|
163
|
+
return [
|
|
164
|
+
{ command: "synap proposals list", why: "see the import.graph proposal this run filed" },
|
|
165
|
+
{ command: "synap open proposal <id>", why: "review the graph and approve it — approval is what writes it" },
|
|
166
|
+
];
|
|
167
|
+
},
|
|
138
168
|
/** After `synap market update` applied one or more updates. */
|
|
139
169
|
afterMarketUpdateApply() {
|
|
140
170
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../src/lib/next-steps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AASzC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,sCAAsC;IACtC,WAAW,CAAC,OAAe;QACzB,OAAO;YACL,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,EAAE,sBAAsB,OAAO,qBAAqB,EAAE;YAC9F,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE,0BAA0B,EAAE;YACnE,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,sCAAsC,EAAE;SACzE,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,UAAU,CAAC,KAAc;QACvB,OAAO;YACL;gBACE,OAAO,EAAE,qBAAqB;gBAC9B,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,0BAA0B,KAAK,mBAAmB,CAAC,CAAC,CAAC,uCAAuC;aAC1G;YACD,EAAE,OAAO,EAAE,6BAA6B,EAAE,GAAG,EAAE,mCAAmC,EAAE;SACrF,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,eAAe,CAAC,IAAY;QAC1B,OAAO;YACL,EAAE,OAAO,EAAE,6BAA6B,EAAE,GAAG,EAAE,oBAAoB,IAAI,EAAE,EAAE;YAC3E,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE,6BAA6B,EAAE;YACtE,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,gCAAgC,EAAE;SACnE,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,eAAe,CAAC,IAAY,EAAE,EAAU;QACtC,OAAO;YACL,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,iDAAiD,IAAI,EAAE,EAAE;YACzF,EAAE,OAAO,EAAE,yCAAyC,EAAE,EAAE,EAAE,GAAG,EAAE,2BAA2B,IAAI,EAAE,EAAE;SACnG,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,gBAAgB;QACd,OAAO;YACL,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,EAAE,sCAAsC,EAAE;YAClF,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../src/lib/next-steps.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/openclaw.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* OpenClaw detection and configuration utilities.
|
|
3
3
|
* Reads/writes OpenClaw config without modifying unrelated settings.
|
|
4
4
|
*/
|
|
5
|
-
import { existsSync, readFileSync,
|
|
5
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
6
|
+
import { writeSecretFile } from "./atomic-file.js";
|
|
6
7
|
import { homedir } from "os";
|
|
7
8
|
import { join } from "path";
|
|
8
9
|
import { execSync } from "child_process";
|
|
@@ -118,7 +119,7 @@ export function readOpenClawConfig() {
|
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
export function writeOpenClawConfig(config) {
|
|
121
|
-
|
|
122
|
+
writeSecretFile(OPENCLAW_CONFIG, JSON.stringify(config, null, 2) + "\n");
|
|
122
123
|
}
|
|
123
124
|
export function getConfigPermissions() {
|
|
124
125
|
try {
|
package/dist/lib/openclaw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/lib/openclaw.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/lib/openclaw.ts"],"names":[],"mappings":"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"}
|