@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
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* The create→approve→poll shape used by both:
|
|
5
5
|
* - CP login (`login()` in auth.ts) — poll the CP for a session token + pod,
|
|
6
6
|
* gated by a pollSecret Bearer header.
|
|
7
|
-
* - Pod agent-key approval
|
|
8
|
-
*
|
|
7
|
+
* - (Pod agent-key approval no longer polls here: it waits on the pending
|
|
8
|
+
* key's own `/auth/key-state` — `waitForKeyLive` in key-approval.ts.)
|
|
9
9
|
*
|
|
10
10
|
* No localhost server, no redirect back to the CLI — the browser only APPROVES
|
|
11
11
|
* a pending record; the CLI holds a secret and polls for the outcome. Every
|
|
@@ -16,6 +16,23 @@ export interface PollForApprovalOptions<T> {
|
|
|
16
16
|
url: string;
|
|
17
17
|
/** Auth/other headers sent on every poll (e.g. Bearer pollSecret). */
|
|
18
18
|
headers?: Record<string, string>;
|
|
19
|
+
/** HTTP method. Default GET. */
|
|
20
|
+
method?: "GET" | "POST";
|
|
21
|
+
/** JSON body sent on every poll (POST), e.g. an RFC 8628 `device_code`. */
|
|
22
|
+
body?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Hand a 4xx JSON body to the predicates instead of treating it as a blip.
|
|
25
|
+
* RFC 8628 answers every not-yet-approved poll with a 400
|
|
26
|
+
* (`authorization_pending`, `slow_down`, `access_denied`, `expired_token`).
|
|
27
|
+
* 5xx and unparsable bodies stay transient. Default false.
|
|
28
|
+
*/
|
|
29
|
+
readErrorBodies?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The delay before the next poll, given the parsed response and the current
|
|
32
|
+
* delay — RFC 8628 §3.5 `slow_down` widens it for the rest of the wait.
|
|
33
|
+
* Default: unchanged.
|
|
34
|
+
*/
|
|
35
|
+
nextIntervalMs?: (data: unknown, currentMs: number) => number;
|
|
19
36
|
/** Delay between polls. Default 2000ms. */
|
|
20
37
|
intervalMs?: number;
|
|
21
38
|
/** Overall deadline. Default 120_000ms. */
|
|
@@ -32,6 +49,18 @@ export interface PollForApprovalOptions<T> {
|
|
|
32
49
|
rejectedError?: string;
|
|
33
50
|
/** Error thrown when the deadline elapses. */
|
|
34
51
|
timeoutError?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Called once per loop iteration, after the fetch attempt. `data` is the
|
|
54
|
+
* parsed body, or null when the tick was a network blip / non-2xx / unparsable.
|
|
55
|
+
*
|
|
56
|
+
* Exists so a caller waiting minutes (corpus import) can show a heartbeat
|
|
57
|
+
* WITHOUT forking a second poll loop. Optional and default-undefined — the
|
|
58
|
+
* approval callers (CP login, agent-key) are byte-for-byte unaffected.
|
|
59
|
+
*/
|
|
60
|
+
onTick?: (info: {
|
|
61
|
+
data: unknown | null;
|
|
62
|
+
elapsedMs: number;
|
|
63
|
+
}) => void;
|
|
35
64
|
}
|
|
36
65
|
/**
|
|
37
66
|
* Poll `url` until the response is approved (→ resolve with `onApproved`),
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* The create→approve→poll shape used by both:
|
|
5
5
|
* - CP login (`login()` in auth.ts) — poll the CP for a session token + pod,
|
|
6
6
|
* gated by a pollSecret Bearer header.
|
|
7
|
-
* - Pod agent-key approval
|
|
8
|
-
*
|
|
7
|
+
* - (Pod agent-key approval no longer polls here: it waits on the pending
|
|
8
|
+
* key's own `/auth/key-state` — `waitForKeyLive` in key-approval.ts.)
|
|
9
9
|
*
|
|
10
10
|
* No localhost server, no redirect back to the CLI — the browser only APPROVES
|
|
11
11
|
* a pending record; the CLI holds a secret and polls for the outcome. Every
|
|
@@ -18,27 +18,40 @@
|
|
|
18
18
|
* and simply retried until the deadline.
|
|
19
19
|
*/
|
|
20
20
|
export async function pollForApproval(opts) {
|
|
21
|
-
|
|
21
|
+
let intervalMs = opts.intervalMs ?? 2000;
|
|
22
22
|
const timeoutMs = opts.timeoutMs ?? 120_000;
|
|
23
23
|
const requestTimeoutMs = opts.requestTimeoutMs ?? 30_000;
|
|
24
|
-
const
|
|
24
|
+
const startedAt = Date.now();
|
|
25
|
+
const deadline = startedAt + timeoutMs;
|
|
26
|
+
const tick = (data) => opts.onTick?.({ data, elapsedMs: Date.now() - startedAt });
|
|
25
27
|
while (Date.now() < deadline) {
|
|
26
28
|
await new Promise((r) => setTimeout(r, intervalMs));
|
|
27
29
|
let res;
|
|
28
30
|
try {
|
|
29
31
|
res = await fetch(opts.url, {
|
|
30
|
-
|
|
32
|
+
method: opts.method ?? "GET",
|
|
33
|
+
headers: opts.body ? { "Content-Type": "application/json", ...opts.headers } : opts.headers,
|
|
34
|
+
...(opts.body ? { body: opts.body } : {}),
|
|
31
35
|
signal: AbortSignal.timeout(requestTimeoutMs),
|
|
32
36
|
});
|
|
33
37
|
}
|
|
34
38
|
catch {
|
|
39
|
+
tick(null);
|
|
35
40
|
continue; // network blip — retry
|
|
36
41
|
}
|
|
37
|
-
|
|
42
|
+
const readable = res.ok || (opts.readErrorBodies === true && res.status >= 400 && res.status < 500);
|
|
43
|
+
if (!readable) {
|
|
44
|
+
tick(null);
|
|
38
45
|
continue; // transient (throttle/5xx) — retry
|
|
46
|
+
}
|
|
39
47
|
const data = (await res.json().catch(() => null));
|
|
40
|
-
if (data === null)
|
|
48
|
+
if (data === null) {
|
|
49
|
+
tick(null);
|
|
41
50
|
continue;
|
|
51
|
+
}
|
|
52
|
+
tick(data);
|
|
53
|
+
if (opts.nextIntervalMs)
|
|
54
|
+
intervalMs = opts.nextIntervalMs(data, intervalMs);
|
|
42
55
|
if (opts.isRejected(data)) {
|
|
43
56
|
throw new Error(opts.rejectedError ?? "Request was rejected.");
|
|
44
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-poll.js","sourceRoot":"","sources":["../../src/lib/approval-poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"approval-poll.js","sourceRoot":"","sources":["../../src/lib/approval-poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmDH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA+B;IAE/B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC;IAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,IAAoB,EAAQ,EAAE,CAC1C,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAE7D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAEpD,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;gBAC5B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;gBAC3F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,SAAS,CAAC,uBAAuB;QACnC,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACpG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,SAAS,CAAC,mCAAmC;QAC/C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAY,CAAC;QAC7D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC;QACX,IAAI,IAAI,CAAC,cAAc;YAAE,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE5E,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,uBAAuB;IACzB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,iCAAiC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config writes that cannot half-happen, and config reads that cannot mistake
|
|
3
|
+
* a broken file for an empty one.
|
|
4
|
+
*
|
|
5
|
+
* `~/.synap/config.json` holds every pod profile and every agent key. Two
|
|
6
|
+
* defects could wipe it:
|
|
7
|
+
* 1. `fs.writeFileSync` truncates first, then writes — a crash, a full disk or
|
|
8
|
+
* a concurrent reader between the two sees (or keeps) an empty/partial file.
|
|
9
|
+
* 2. A parse failure was read as `{}` ("start fresh"), and the next write then
|
|
10
|
+
* persisted that `{}` merged with one field — every other profile gone.
|
|
11
|
+
*
|
|
12
|
+
* So: write a temp file in the same directory, fsync it, rename it over the
|
|
13
|
+
* target (atomic on POSIX), keeping the target's mode (0600 for ~/.synap). And
|
|
14
|
+
* a file that exists but does not parse THROWS — it is never an empty config.
|
|
15
|
+
*/
|
|
16
|
+
/** The file exists but is not valid JSON — never to be treated as empty. */
|
|
17
|
+
export declare class ConfigUnreadableError extends Error {
|
|
18
|
+
readonly file: string;
|
|
19
|
+
readonly cause: unknown;
|
|
20
|
+
constructor(file: string, cause: unknown);
|
|
21
|
+
}
|
|
22
|
+
/** Parsed JSON object, or `null` ONLY when the file does not exist. Throws on anything else. */
|
|
23
|
+
export declare function readJsonStrict<T = Record<string, unknown>>(file: string): T | null;
|
|
24
|
+
/**
|
|
25
|
+
* Write `data` to `file` atomically: temp file in the same directory → fsync →
|
|
26
|
+
* rename. The mode is `opts.mode`, else the existing file's mode, else 0600.
|
|
27
|
+
*/
|
|
28
|
+
export declare function writeFileAtomic(file: string, data: string, opts?: {
|
|
29
|
+
mode?: number;
|
|
30
|
+
}): void;
|
|
31
|
+
/**
|
|
32
|
+
* The ONE door for a file that holds a credential and is written in place.
|
|
33
|
+
*
|
|
34
|
+
* `fs.writeFileSync(f, d, { mode: 0o600 })` applies the mode only when it
|
|
35
|
+
* CREATES the file — an existing 0644 file keeps 0644. So write, then chmod.
|
|
36
|
+
* Accepts the same `{ mode }` options object so call sites swap in by name.
|
|
37
|
+
*/
|
|
38
|
+
export declare function writeSecretFile(file: string, data: string, opts?: {
|
|
39
|
+
mode?: number;
|
|
40
|
+
}): void;
|
|
41
|
+
/** Copy a file that may hold credentials (a `.bak`) and force it to 0600. */
|
|
42
|
+
export declare function copySecretBackup(src: string, dst: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Create `dir` (and parents) as 0700 and tighten it if it already existed.
|
|
45
|
+
* Only for directories Synap owns (`~/.synap`, `~/.synap/contexts`) — never a
|
|
46
|
+
* client's own config directory.
|
|
47
|
+
*/
|
|
48
|
+
export declare function ensureSecretDir(dir: string): void;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config writes that cannot half-happen, and config reads that cannot mistake
|
|
3
|
+
* a broken file for an empty one.
|
|
4
|
+
*
|
|
5
|
+
* `~/.synap/config.json` holds every pod profile and every agent key. Two
|
|
6
|
+
* defects could wipe it:
|
|
7
|
+
* 1. `fs.writeFileSync` truncates first, then writes — a crash, a full disk or
|
|
8
|
+
* a concurrent reader between the two sees (or keeps) an empty/partial file.
|
|
9
|
+
* 2. A parse failure was read as `{}` ("start fresh"), and the next write then
|
|
10
|
+
* persisted that `{}` merged with one field — every other profile gone.
|
|
11
|
+
*
|
|
12
|
+
* So: write a temp file in the same directory, fsync it, rename it over the
|
|
13
|
+
* target (atomic on POSIX), keeping the target's mode (0600 for ~/.synap). And
|
|
14
|
+
* a file that exists but does not parse THROWS — it is never an empty config.
|
|
15
|
+
*/
|
|
16
|
+
import fs from "node:fs";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import { randomBytes } from "node:crypto";
|
|
19
|
+
/** The file exists but is not valid JSON — never to be treated as empty. */
|
|
20
|
+
export class ConfigUnreadableError extends Error {
|
|
21
|
+
file;
|
|
22
|
+
cause;
|
|
23
|
+
constructor(file, cause) {
|
|
24
|
+
super(`${file} exists but could not be read as JSON (${cause instanceof Error ? cause.message : String(cause)}). ` +
|
|
25
|
+
`Nothing was written. Fix the file, or move it aside and run \`synap init\` again.`);
|
|
26
|
+
this.file = file;
|
|
27
|
+
this.cause = cause;
|
|
28
|
+
this.name = "ConfigUnreadableError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Parsed JSON object, or `null` ONLY when the file does not exist. Throws on anything else. */
|
|
32
|
+
export function readJsonStrict(file) {
|
|
33
|
+
let raw;
|
|
34
|
+
try {
|
|
35
|
+
raw = fs.readFileSync(file, "utf8");
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
if (err.code === "ENOENT")
|
|
39
|
+
return null;
|
|
40
|
+
throw new ConfigUnreadableError(file, err);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const v = JSON.parse(raw);
|
|
44
|
+
if (!v || typeof v !== "object" || Array.isArray(v))
|
|
45
|
+
throw new Error("not a JSON object");
|
|
46
|
+
return v;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
throw new ConfigUnreadableError(file, err);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Write `data` to `file` atomically: temp file in the same directory → fsync →
|
|
54
|
+
* rename. The mode is `opts.mode`, else the existing file's mode, else 0600.
|
|
55
|
+
*/
|
|
56
|
+
export function writeFileAtomic(file, data, opts = {}) {
|
|
57
|
+
const dir = path.dirname(file);
|
|
58
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
59
|
+
let mode = opts.mode;
|
|
60
|
+
if (mode === undefined) {
|
|
61
|
+
try {
|
|
62
|
+
mode = fs.statSync(file).mode & 0o777;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
mode = 0o600;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const tmp = path.join(dir, `.${path.basename(file)}.${process.pid}.${randomBytes(4).toString("hex")}.tmp`);
|
|
69
|
+
const fd = fs.openSync(tmp, "wx", mode);
|
|
70
|
+
try {
|
|
71
|
+
fs.writeFileSync(fd, data);
|
|
72
|
+
fs.fsyncSync(fd);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
fs.closeSync(fd);
|
|
76
|
+
fs.rmSync(tmp, { force: true });
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
fs.closeSync(fd);
|
|
80
|
+
// openSync's mode is filtered by the umask; set it exactly.
|
|
81
|
+
fs.chmodSync(tmp, mode);
|
|
82
|
+
try {
|
|
83
|
+
fs.renameSync(tmp, file);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
fs.rmSync(tmp, { force: true });
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
// Persist the rename itself (best-effort: not every platform can fsync a dir).
|
|
90
|
+
try {
|
|
91
|
+
const dfd = fs.openSync(dir, "r");
|
|
92
|
+
try {
|
|
93
|
+
fs.fsyncSync(dfd);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
fs.closeSync(dfd);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
/* Windows / unsupported */
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The ONE door for a file that holds a credential and is written in place.
|
|
105
|
+
*
|
|
106
|
+
* `fs.writeFileSync(f, d, { mode: 0o600 })` applies the mode only when it
|
|
107
|
+
* CREATES the file — an existing 0644 file keeps 0644. So write, then chmod.
|
|
108
|
+
* Accepts the same `{ mode }` options object so call sites swap in by name.
|
|
109
|
+
*/
|
|
110
|
+
export function writeSecretFile(file, data, opts = {}) {
|
|
111
|
+
const mode = opts.mode ?? 0o600;
|
|
112
|
+
fs.writeFileSync(file, data, { mode });
|
|
113
|
+
fs.chmodSync(file, mode);
|
|
114
|
+
}
|
|
115
|
+
/** Copy a file that may hold credentials (a `.bak`) and force it to 0600. */
|
|
116
|
+
export function copySecretBackup(src, dst) {
|
|
117
|
+
fs.copyFileSync(src, dst);
|
|
118
|
+
fs.chmodSync(dst, 0o600);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create `dir` (and parents) as 0700 and tighten it if it already existed.
|
|
122
|
+
* Only for directories Synap owns (`~/.synap`, `~/.synap/contexts`) — never a
|
|
123
|
+
* client's own config directory.
|
|
124
|
+
*/
|
|
125
|
+
export function ensureSecretDir(dir) {
|
|
126
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
127
|
+
fs.chmodSync(dir, 0o700);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=atomic-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-file.js","sourceRoot":"","sources":["../../src/lib/atomic-file.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* (waitForPodCallback below still uses a localhost server — that's the separate
|
|
13
13
|
* managed-pod provisioning path, not login.)
|
|
14
14
|
*/
|
|
15
|
+
export declare const CP_URL: string;
|
|
15
16
|
export interface StoredCredentials {
|
|
16
17
|
token: string;
|
|
17
18
|
expiresAt: string;
|
|
@@ -35,10 +36,16 @@ export declare function isLoggedIn(): Promise<{
|
|
|
35
36
|
* Store a manually provided API token (Better Auth session token).
|
|
36
37
|
* Validates against the CP before saving.
|
|
37
38
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
39
|
+
* Not wired to any command: `synap login` has no --token flag (it uses the
|
|
40
|
+
* device-approval flow below, which works from a box without a browser).
|
|
40
41
|
*/
|
|
41
42
|
export declare function loginWithToken(token: string): Promise<StoredCredentials | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Best effort: try to open a browser on THIS machine. Never throws, never
|
|
45
|
+
* blocks long. Callers print the URL first, so a box with no browser (SSH,
|
|
46
|
+
* a server) still has the one instruction it needs.
|
|
47
|
+
*/
|
|
48
|
+
export declare function openBrowser(url: string): boolean;
|
|
42
49
|
/**
|
|
43
50
|
* Browser login via the CP poll-based approval flow.
|
|
44
51
|
*
|
|
@@ -65,20 +72,19 @@ export interface PodCallbackResult {
|
|
|
65
72
|
}
|
|
66
73
|
export declare function waitForPodCallback(timeoutMs?: number): Promise<PodCallbackResult | null>;
|
|
67
74
|
export declare function getCpUrl(): string;
|
|
75
|
+
/** One pod as the CP's `GET /pods` lists it (routes/pods.ts, `podUrl(pod)`). */
|
|
68
76
|
export interface Pod {
|
|
69
77
|
id: string;
|
|
70
78
|
subdomain: string;
|
|
71
79
|
customDomain: string | null;
|
|
72
80
|
status: string;
|
|
73
|
-
|
|
74
|
-
url: string;
|
|
81
|
+
podUrl?: string;
|
|
75
82
|
}
|
|
76
|
-
export declare function listPods(token: string): Promise<Pod[]>;
|
|
77
83
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
84
|
+
* The pod's public URL. The CP sends it as `podUrl`; when absent, derive it the
|
|
85
|
+
* way the CP does (lib/pod-public-url.ts): the custom domain wins over
|
|
86
|
+
* `<subdomain>.synap.live`. Reading a non-existent `url` field here once sent
|
|
87
|
+
* a custom-domain pod (pod.antoinesrvt.synap.live) to perso.synap.live.
|
|
80
88
|
*/
|
|
81
|
-
export declare function
|
|
82
|
-
|
|
83
|
-
url: string | null;
|
|
84
|
-
} | null>;
|
|
89
|
+
export declare function podUrlOf(pod: Pick<Pod, "podUrl" | "customDomain" | "subdomain">): string;
|
|
90
|
+
export declare function listPods(token: string): Promise<Pod[]>;
|
package/dist/lib/auth.js
CHANGED
|
@@ -13,25 +13,29 @@
|
|
|
13
13
|
* managed-pod provisioning path, not login.)
|
|
14
14
|
*/
|
|
15
15
|
import http from "node:http";
|
|
16
|
-
import {
|
|
16
|
+
import { openExternalUrl } from "./safe-open.js";
|
|
17
17
|
import fs from "node:fs";
|
|
18
|
+
import { ensureSecretDir, writeSecretFile } from "./atomic-file.js";
|
|
18
19
|
import path from "node:path";
|
|
19
20
|
import os from "node:os";
|
|
20
|
-
const CP_URL = process.env.SYNAP_CP_URL || "https://api.synap.live";
|
|
21
|
+
export const CP_URL = process.env.SYNAP_CP_URL || "https://api.synap.live";
|
|
21
22
|
const LANDING_URL = process.env.SYNAP_LANDING_URL || "https://synap.live";
|
|
23
|
+
/**
|
|
24
|
+
* How long a CLI login request lives on the CP (CLI_AUTH_TTL_SECONDS in
|
|
25
|
+
* synap-control-plane-api/src/lib/cli-auth.ts). Used only when the CP does not
|
|
26
|
+
* send `expiresAt`. Sign-in may happen on another device (a box over SSH), so
|
|
27
|
+
* the CLI waits as long as the request lives, not a couple of minutes.
|
|
28
|
+
*/
|
|
29
|
+
const CLI_LOGIN_REQUEST_TTL_MS = 15 * 60_000;
|
|
22
30
|
const CREDENTIALS_DIR = path.join(os.homedir(), ".synap");
|
|
23
31
|
const CREDENTIALS_FILE = path.join(CREDENTIALS_DIR, "credentials.json");
|
|
24
32
|
// ─── Credential Storage ────────────────────────────────────────────────────
|
|
25
33
|
function ensureCredentialsDir() {
|
|
26
|
-
|
|
27
|
-
fs.mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });
|
|
28
|
-
}
|
|
34
|
+
ensureSecretDir(CREDENTIALS_DIR);
|
|
29
35
|
}
|
|
30
36
|
function writeCredentials(creds) {
|
|
31
37
|
ensureCredentialsDir();
|
|
32
|
-
|
|
33
|
-
mode: 0o600,
|
|
34
|
-
});
|
|
38
|
+
writeSecretFile(CREDENTIALS_FILE, JSON.stringify(creds, null, 2));
|
|
35
39
|
}
|
|
36
40
|
export function getStoredToken() {
|
|
37
41
|
try {
|
|
@@ -94,8 +98,8 @@ export async function isLoggedIn() {
|
|
|
94
98
|
* Store a manually provided API token (Better Auth session token).
|
|
95
99
|
* Validates against the CP before saving.
|
|
96
100
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
101
|
+
* Not wired to any command: `synap login` has no --token flag (it uses the
|
|
102
|
+
* device-approval flow below, which works from a box without a browser).
|
|
99
103
|
*/
|
|
100
104
|
export async function loginWithToken(token) {
|
|
101
105
|
const res = await fetch(`${CP_URL}/auth/me`, {
|
|
@@ -115,26 +119,14 @@ export async function loginWithToken(token) {
|
|
|
115
119
|
return creds;
|
|
116
120
|
}
|
|
117
121
|
// ─── Browser Login Flow ────────────────────────────────────────────────────
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
break;
|
|
127
|
-
case "win32":
|
|
128
|
-
execSync(`start "" "${url}"`);
|
|
129
|
-
break;
|
|
130
|
-
default:
|
|
131
|
-
// Can't open browser — caller handles fallback
|
|
132
|
-
throw new Error("Unsupported platform");
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
throw new Error("Could not open browser");
|
|
137
|
-
}
|
|
122
|
+
/**
|
|
123
|
+
* Best effort: try to open a browser on THIS machine. Never throws, never
|
|
124
|
+
* blocks long. Callers print the URL first, so a box with no browser (SSH,
|
|
125
|
+
* a server) still has the one instruction it needs.
|
|
126
|
+
*/
|
|
127
|
+
export function openBrowser(url) {
|
|
128
|
+
// argv only, http(s) only, no headless-Linux attempt — `safe-open.ts`.
|
|
129
|
+
return openExternalUrl(url);
|
|
138
130
|
}
|
|
139
131
|
/**
|
|
140
132
|
* Browser login via the CP poll-based approval flow.
|
|
@@ -175,6 +167,10 @@ export async function login() {
|
|
|
175
167
|
const { requestId, pollSecret, userCode } = created;
|
|
176
168
|
if (!requestId || !pollSecret || !userCode)
|
|
177
169
|
return null;
|
|
170
|
+
const expiresAtMs = created.expiresAt ? Date.parse(created.expiresAt) : NaN;
|
|
171
|
+
const waitMs = Number.isFinite(expiresAtMs) && expiresAtMs > Date.now()
|
|
172
|
+
? expiresAtMs - Date.now()
|
|
173
|
+
: CLI_LOGIN_REQUEST_TTL_MS;
|
|
178
174
|
// The CLI already owns its (self-hosted) pod locally — `synap login` is
|
|
179
175
|
// ACCOUNT auth, not pod selection. Pass the active pod's host so the browser
|
|
180
176
|
// can SHOW "your CLI is using <pod>" instead of forcing a redundant re-pick.
|
|
@@ -195,20 +191,18 @@ export async function login() {
|
|
|
195
191
|
// terminal so a phished approve link can't authorize someone else.
|
|
196
192
|
const approveUrl = `${LANDING_URL}/cli?request=${encodeURIComponent(requestId)}` +
|
|
197
193
|
(podLabel ? `&pod=${encodeURIComponent(podLabel)}` : "");
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
console.log(` Open this URL in your browser:\n`);
|
|
205
|
-
console.log(` ${approveUrl}\n`);
|
|
206
|
-
}
|
|
194
|
+
// The link + code are THE instruction (works from any device, e.g. over
|
|
195
|
+
// SSH); opening a browser here is only a shortcut.
|
|
196
|
+
console.log(`\n Open this link on any device and enter the code:\n`);
|
|
197
|
+
console.log(` ${approveUrl}`);
|
|
198
|
+
console.log(` Code: ${userCode}\n`);
|
|
199
|
+
openBrowser(approveUrl);
|
|
207
200
|
// 3. Poll for approval — the payload IS the StoredCredentials.
|
|
208
201
|
try {
|
|
209
202
|
const creds = await pollForApproval({
|
|
210
203
|
url: `${CP_URL}/auth/cli-request/${requestId}`,
|
|
211
204
|
headers: { Authorization: `Bearer ${pollSecret}` },
|
|
205
|
+
timeoutMs: waitMs,
|
|
212
206
|
isApproved: (d) => d.status === "approved",
|
|
213
207
|
isRejected: (d) => {
|
|
214
208
|
const s = d.status;
|
|
@@ -277,13 +271,9 @@ export async function waitForPodCallback(timeoutMs = 300_000 // 5-minute window
|
|
|
277
271
|
const port = addr.port;
|
|
278
272
|
const callbackUrl = `http://localhost:${port}/callback`;
|
|
279
273
|
const provisionUrl = `${LANDING_URL}/account/pod/provision?cli_callback=${encodeURIComponent(callbackUrl)}`;
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
catch {
|
|
284
|
-
console.log(`\n Open this URL in your browser to provision your pod:\n`);
|
|
285
|
-
console.log(` ${provisionUrl}\n`);
|
|
286
|
-
}
|
|
274
|
+
console.log(`\n Open this link to create your pod:\n`);
|
|
275
|
+
console.log(` ${provisionUrl}\n`);
|
|
276
|
+
openBrowser(provisionUrl);
|
|
287
277
|
});
|
|
288
278
|
const timeout = setTimeout(() => {
|
|
289
279
|
cleanup();
|
|
@@ -304,6 +294,17 @@ export async function waitForPodCallback(timeoutMs = 300_000 // 5-minute window
|
|
|
304
294
|
export function getCpUrl() {
|
|
305
295
|
return CP_URL;
|
|
306
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* The pod's public URL. The CP sends it as `podUrl`; when absent, derive it the
|
|
299
|
+
* way the CP does (lib/pod-public-url.ts): the custom domain wins over
|
|
300
|
+
* `<subdomain>.synap.live`. Reading a non-existent `url` field here once sent
|
|
301
|
+
* a custom-domain pod (pod.antoinesrvt.synap.live) to perso.synap.live.
|
|
302
|
+
*/
|
|
303
|
+
export function podUrlOf(pod) {
|
|
304
|
+
if (pod.podUrl)
|
|
305
|
+
return pod.podUrl.replace(/\/+$/, "");
|
|
306
|
+
return pod.customDomain ? `https://${pod.customDomain}` : `https://${pod.subdomain}.synap.live`;
|
|
307
|
+
}
|
|
307
308
|
export async function listPods(token) {
|
|
308
309
|
const res = await fetch(`${CP_URL}/pods`, {
|
|
309
310
|
headers: { Authorization: `Bearer ${token}` },
|
|
@@ -316,22 +317,4 @@ export async function listPods(token) {
|
|
|
316
317
|
// Only show active/provisioning pods — not deleted/archived
|
|
317
318
|
return (data.pods ?? []).filter((p) => p.status === "active" || p.status === "provisioning" || p.status === "syncing_intelligence");
|
|
318
319
|
}
|
|
319
|
-
/**
|
|
320
|
-
* Get the remote OpenClaw provisioning status from the CP.
|
|
321
|
-
* Returns null if not provisioned or on network error.
|
|
322
|
-
*/
|
|
323
|
-
export async function getOpenClawRemoteStatus(cpToken, podId) {
|
|
324
|
-
try {
|
|
325
|
-
const res = await fetch(`${getCpUrl()}/openclaw/status?podId=${encodeURIComponent(podId)}`, {
|
|
326
|
-
headers: { Authorization: `Bearer ${cpToken}` },
|
|
327
|
-
signal: AbortSignal.timeout(8000),
|
|
328
|
-
});
|
|
329
|
-
if (!res.ok)
|
|
330
|
-
return null;
|
|
331
|
-
return (await res.json());
|
|
332
|
-
}
|
|
333
|
-
catch {
|
|
334
|
-
return null;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
320
|
//# sourceMappingURL=auth.js.map
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|