@synap-core/cli 1.11.0 → 1.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -198
- package/dist/build-info.json +6 -0
- package/dist/commands/agent-run.js +3 -2
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/agents.d.ts +33 -17
- package/dist/commands/agents.js +203 -237
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/app.d.ts +143 -0
- package/dist/commands/app.js +523 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/automate.d.ts +21 -0
- package/dist/commands/automate.js +42 -0
- package/dist/commands/automate.js.map +1 -0
- package/dist/commands/automation-schema.test.d.ts +16 -0
- package/dist/commands/automation-schema.test.js +77 -0
- package/dist/commands/automation-schema.test.js.map +1 -0
- package/dist/commands/automation.d.ts +12 -0
- package/dist/commands/automation.js +80 -35
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/bridge-setup.d.ts +14 -1
- package/dist/commands/bridge-setup.js +392 -128
- package/dist/commands/bridge-setup.js.map +1 -1
- package/dist/commands/cap-connections.d.ts +4 -4
- package/dist/commands/cap-connections.js +14 -14
- package/dist/commands/cap-connections.js.map +1 -1
- package/dist/commands/capability.d.ts +2 -0
- package/dist/commands/capability.js +218 -168
- package/dist/commands/capability.js.map +1 -1
- package/dist/commands/catalog.d.ts +275 -0
- package/dist/commands/catalog.js +481 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/cell.d.ts +155 -8
- package/dist/commands/cell.js +416 -40
- package/dist/commands/cell.js.map +1 -1
- package/dist/commands/centrality.js +1 -13
- package/dist/commands/centrality.js.map +1 -1
- package/dist/commands/connect.d.ts +38 -13
- package/dist/commands/connect.js +68 -167
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.d.ts +3 -2
- package/dist/commands/connections.js +95 -25
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/context.js +7 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +34 -0
- package/dist/commands/data-extra.js +193 -23
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +120 -2
- package/dist/commands/data.js +293 -20
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +66 -4
- package/dist/commands/diagnose.js +285 -28
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/doc.d.ts +11 -4
- package/dist/commands/doc.js +39 -14
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/doctor.d.ts +112 -3
- package/dist/commands/doctor.js +657 -32
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/explain.js +5 -5
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/import.d.ts +368 -13
- package/dist/commands/import.js +1064 -54
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +20 -9
- package/dist/commands/init.js +433 -973
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +1 -0
- package/dist/commands/keys.js +15 -2
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/knowledge.d.ts +22 -6
- package/dist/commands/knowledge.js +117 -55
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/lens.d.ts +37 -1
- package/dist/commands/lens.js +192 -71
- package/dist/commands/lens.js.map +1 -1
- package/dist/commands/market-authoring.d.ts +29 -2
- package/dist/commands/market-authoring.js +348 -7
- package/dist/commands/market-authoring.js.map +1 -1
- package/dist/commands/market-official.d.ts +58 -0
- package/dist/commands/market-official.js +84 -0
- package/dist/commands/market-official.js.map +1 -0
- package/dist/commands/market.d.ts +400 -16
- package/dist/commands/market.js +1802 -146
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +60 -25
- package/dist/commands/mcp.js +251 -64
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/open.d.ts +39 -9
- package/dist/commands/open.js +80 -25
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/playbook.d.ts +42 -0
- package/dist/commands/playbook.js +162 -0
- package/dist/commands/playbook.js.map +1 -0
- package/dist/commands/pod.js +1 -1
- package/dist/commands/pod.js.map +1 -1
- package/dist/commands/pods.d.ts +5 -0
- package/dist/commands/pods.js +97 -116
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +62 -0
- package/dist/commands/proposals-actions.js +143 -8
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/proposals-await.d.ts +68 -0
- package/dist/commands/proposals-await.js +248 -0
- package/dist/commands/proposals-await.js.map +1 -0
- package/dist/commands/proton-setup.d.ts +73 -0
- package/dist/commands/proton-setup.js +577 -0
- package/dist/commands/proton-setup.js.map +1 -0
- package/dist/commands/providers.d.ts +23 -0
- package/dist/commands/providers.js +126 -1
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/raycast.js +6 -2
- package/dist/commands/raycast.js.map +1 -1
- package/dist/commands/rule.d.ts +150 -0
- package/dist/commands/rule.js +447 -0
- package/dist/commands/rule.js.map +1 -0
- package/dist/commands/session-wait.d.ts +111 -0
- package/dist/commands/session-wait.js +209 -0
- package/dist/commands/session-wait.js.map +1 -0
- package/dist/commands/sessions.d.ts +52 -0
- package/dist/commands/sessions.js +478 -58
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +136 -19
- package/dist/commands/skill-manage.js.map +1 -1
- package/dist/commands/skills.js +16 -0
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +1 -4
- package/dist/commands/status.js +5 -34
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.backoff.test.d.ts +13 -0
- package/dist/commands/statusline.backoff.test.js +100 -0
- package/dist/commands/statusline.backoff.test.js.map +1 -0
- package/dist/commands/statusline.js +16 -9
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/sync-status.d.ts +12 -0
- package/dist/commands/sync-status.js +125 -0
- package/dist/commands/sync-status.js.map +1 -0
- package/dist/commands/templates-retire.d.ts +34 -0
- package/dist/commands/templates-retire.js +192 -0
- package/dist/commands/templates-retire.js.map +1 -0
- package/dist/commands/tools.js +6 -21
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/tracks.d.ts +51 -0
- package/dist/commands/tracks.js +291 -0
- package/dist/commands/tracks.js.map +1 -0
- package/dist/commands/update.d.ts +3 -11
- package/dist/commands/update.js +5 -134
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.d.ts +41 -3
- package/dist/commands/upload.js +120 -18
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/vendor.d.ts +28 -0
- package/dist/commands/vendor.js +110 -0
- package/dist/commands/vendor.js.map +1 -0
- package/dist/commands/versions.js +6 -0
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.js +10 -5
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/whoami.d.ts +23 -3
- package/dist/commands/whoami.js +169 -23
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/worker.d.ts +122 -0
- package/dist/commands/worker.js +435 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/commands/worker.test.d.ts +1 -0
- package/dist/commands/worker.test.js +116 -0
- package/dist/commands/worker.test.js.map +1 -0
- package/dist/commands/workspace-ops.d.ts +35 -0
- package/dist/commands/workspace-ops.js +153 -0
- package/dist/commands/workspace-ops.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +900 -180
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-connections.d.ts +31 -0
- package/dist/lib/agent-connections.js +33 -0
- package/dist/lib/agent-connections.js.map +1 -0
- package/dist/lib/agent-detect.d.ts +27 -0
- package/dist/lib/agent-detect.js +71 -0
- package/dist/lib/agent-detect.js.map +1 -0
- package/dist/lib/agent-door.d.ts +138 -0
- package/dist/lib/agent-door.js +426 -0
- package/dist/lib/agent-door.js.map +1 -0
- package/dist/lib/agents-config.d.ts +2 -0
- package/dist/lib/agents-config.js +4 -9
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +31 -2
- package/dist/lib/approval-poll.js +20 -7
- package/dist/lib/approval-poll.js.map +1 -1
- package/dist/lib/atomic-file.d.ts +48 -0
- package/dist/lib/atomic-file.js +129 -0
- package/dist/lib/atomic-file.js.map +1 -0
- package/dist/lib/auth.d.ts +14 -9
- package/dist/lib/auth.js +44 -61
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/batch-approval.d.ts +85 -0
- package/dist/lib/batch-approval.js +170 -0
- package/dist/lib/batch-approval.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +6 -5
- package/dist/lib/capture-lane.js +6 -5
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/capture-structure.d.ts +230 -11
- package/dist/lib/capture-structure.js +251 -13
- package/dist/lib/capture-structure.js.map +1 -1
- package/dist/lib/catalog-templates.d.ts +59 -0
- package/dist/lib/catalog-templates.js +126 -0
- package/dist/lib/catalog-templates.js.map +1 -0
- package/dist/lib/cli-build.d.ts +19 -0
- package/dist/lib/cli-build.js +37 -0
- package/dist/lib/cli-build.js.map +1 -0
- package/dist/lib/conversation-headers.d.ts +18 -0
- package/dist/lib/conversation-headers.js +32 -0
- package/dist/lib/conversation-headers.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +167 -11
- package/dist/lib/cp-packages.js +253 -21
- package/dist/lib/cp-packages.js.map +1 -1
- package/dist/lib/credential-class.d.ts +117 -0
- package/dist/lib/credential-class.js +116 -0
- package/dist/lib/credential-class.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +35 -0
- package/dist/lib/describe-lens.js +40 -0
- package/dist/lib/describe-lens.js.map +1 -1
- package/dist/lib/device-connect.d.ts +125 -0
- package/dist/lib/device-connect.js +256 -0
- package/dist/lib/device-connect.js.map +1 -0
- package/dist/lib/directory-lens.d.ts +99 -0
- package/dist/lib/directory-lens.js +187 -0
- package/dist/lib/directory-lens.js.map +1 -0
- package/dist/lib/exporter-coverage.d.ts +71 -0
- package/dist/lib/exporter-coverage.js +97 -0
- package/dist/lib/exporter-coverage.js.map +1 -0
- package/dist/lib/hub-client.d.ts +29 -8
- package/dist/lib/hub-client.js +328 -55
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/init-connect.d.ts +41 -0
- package/dist/lib/init-connect.js +75 -0
- package/dist/lib/init-connect.js.map +1 -0
- package/dist/lib/init-exit.d.ts +24 -0
- package/dist/lib/init-exit.js +41 -0
- package/dist/lib/init-exit.js.map +1 -0
- package/dist/lib/init-flow.d.ts +25 -0
- package/dist/lib/init-flow.js +40 -0
- package/dist/lib/init-flow.js.map +1 -0
- package/dist/lib/init-handoff.d.ts +16 -0
- package/dist/lib/init-handoff.js +19 -0
- package/dist/lib/init-handoff.js.map +1 -0
- package/dist/lib/init-output.d.ts +18 -0
- package/dist/lib/init-output.js +43 -0
- package/dist/lib/init-output.js.map +1 -0
- package/dist/lib/init-pod.d.ts +45 -0
- package/dist/lib/init-pod.js +36 -0
- package/dist/lib/init-pod.js.map +1 -0
- package/dist/lib/installed.d.ts +210 -11
- package/dist/lib/installed.js +234 -36
- package/dist/lib/installed.js.map +1 -1
- package/dist/lib/key-approval.d.ts +57 -0
- package/dist/lib/key-approval.js +117 -0
- package/dist/lib/key-approval.js.map +1 -0
- package/dist/lib/key-diagnosis.d.ts +56 -0
- package/dist/lib/key-diagnosis.js +227 -0
- package/dist/lib/key-diagnosis.js.map +1 -0
- package/dist/lib/key-doctor.d.ts +136 -0
- package/dist/lib/key-doctor.js +286 -0
- package/dist/lib/key-doctor.js.map +1 -0
- package/dist/lib/key-locations.d.ts +120 -0
- package/dist/lib/key-locations.js +326 -0
- package/dist/lib/key-locations.js.map +1 -0
- package/dist/lib/key-source.d.ts +66 -0
- package/dist/lib/key-source.js +106 -0
- package/dist/lib/key-source.js.map +1 -0
- package/dist/lib/key-state.d.ts +70 -0
- package/dist/lib/key-state.js +115 -0
- package/dist/lib/key-state.js.map +1 -0
- package/dist/lib/kind-package.d.ts +181 -0
- package/dist/lib/kind-package.js +679 -0
- package/dist/lib/kind-package.js.map +1 -0
- package/dist/lib/knowledge-title.d.ts +24 -0
- package/dist/lib/knowledge-title.js +46 -0
- package/dist/lib/knowledge-title.js.map +1 -0
- package/dist/lib/knowledge-title.test.d.ts +1 -0
- package/dist/lib/knowledge-title.test.js +34 -0
- package/dist/lib/knowledge-title.test.js.map +1 -0
- package/dist/lib/machine-instance.d.ts +64 -0
- package/dist/lib/machine-instance.js +142 -0
- package/dist/lib/machine-instance.js.map +1 -0
- package/dist/lib/mcp-bridge.d.ts +42 -0
- package/dist/lib/mcp-bridge.js +147 -0
- package/dist/lib/mcp-bridge.js.map +1 -0
- package/dist/lib/mcp-bridge.test.d.ts +1 -0
- package/dist/lib/mcp-bridge.test.js +90 -0
- package/dist/lib/mcp-bridge.test.js.map +1 -0
- package/dist/lib/mcp-call.d.ts +30 -0
- package/dist/lib/mcp-call.js +107 -0
- package/dist/lib/mcp-call.js.map +1 -0
- package/dist/lib/mcp-snippets.d.ts +53 -0
- package/dist/lib/mcp-snippets.js +82 -0
- package/dist/lib/mcp-snippets.js.map +1 -0
- package/dist/lib/next-steps.d.ts +8 -0
- package/dist/lib/next-steps.js +31 -1
- package/dist/lib/next-steps.js.map +1 -1
- package/dist/lib/package-wire.d.ts +179 -0
- package/dist/lib/package-wire.js +68 -0
- package/dist/lib/package-wire.js.map +1 -0
- package/dist/lib/pair-link.d.ts +38 -0
- package/dist/lib/pair-link.js +68 -0
- package/dist/lib/pair-link.js.map +1 -0
- package/dist/lib/pod-wide.d.ts +40 -0
- package/dist/lib/pod-wide.js +46 -0
- package/dist/lib/pod-wide.js.map +1 -0
- package/dist/lib/pod.d.ts +66 -112
- package/dist/lib/pod.js +134 -412
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +9 -3
- package/dist/lib/project-ref.js +10 -4
- package/dist/lib/project-ref.js.map +1 -1
- package/dist/lib/review-credential.d.ts +119 -0
- package/dist/lib/review-credential.js +147 -0
- package/dist/lib/review-credential.js.map +1 -0
- package/dist/lib/safe-open.d.ts +49 -0
- package/dist/lib/safe-open.js +119 -0
- package/dist/lib/safe-open.js.map +1 -0
- package/dist/lib/session-lens.d.ts +40 -1
- package/dist/lib/session-lens.js +54 -4
- package/dist/lib/session-lens.js.map +1 -1
- package/dist/lib/superwhisper-import.d.ts +8 -0
- package/dist/lib/superwhisper-import.js +14 -7
- package/dist/lib/superwhisper-import.js.map +1 -1
- package/dist/lib/superwhisper-title.test.d.ts +1 -0
- package/dist/lib/superwhisper-title.test.js +18 -0
- package/dist/lib/superwhisper-title.test.js.map +1 -0
- package/dist/lib/targets.d.ts +134 -10
- package/dist/lib/targets.js +962 -258
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/template-file.d.ts +4 -0
- package/dist/lib/template-file.js.map +1 -1
- package/dist/lib/template-lifecycle.d.ts +217 -0
- package/dist/lib/template-lifecycle.js +433 -0
- package/dist/lib/template-lifecycle.js.map +1 -0
- package/dist/lib/template-steps.d.ts +88 -0
- package/dist/lib/template-steps.js +118 -0
- package/dist/lib/template-steps.js.map +1 -0
- package/dist/lib/time-ago.d.ts +2 -0
- package/dist/lib/time-ago.js +15 -0
- package/dist/lib/time-ago.js.map +1 -0
- package/dist/utils/logger.js +5 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +23 -17
- package/skills/README.md +12 -10
- package/skills/agent-os/SKILL.md +214 -99
- package/skills/manifest.json +1 -1
- package/skills/onboard/SKILL.md +55 -26
- package/skills/synap/README.md +5 -8
- package/skills/synap/SKILL.md +1086 -283
- package/skills/synap/_order.txt +7 -0
- package/skills/synap/_skill.yaml +1 -1
- package/skills/synap/automations.md +15 -0
- package/skills/synap/capture.md +5 -0
- package/skills/synap/cli-operations.md +24 -18
- package/skills/synap/concepts.md +28 -0
- package/skills/synap/content-os.md +10 -1
- package/skills/synap/creative-loop.md +15 -10
- package/skills/synap/crm.md +21 -52
- package/skills/synap/document-embeds.md +141 -47
- package/skills/synap/escalation-ladder.md +20 -10
- package/skills/synap/focus-sessions.md +47 -21
- package/skills/synap/from-intent.md +142 -0
- package/skills/synap/governance-rules.md +4 -4
- package/skills/synap/governance.md +10 -7
- package/skills/synap/hand-off.md +33 -0
- package/skills/synap/inline-patterns.md +15 -7
- package/skills/synap/lenses.md +33 -15
- package/skills/synap/linking.md +41 -40
- package/skills/synap/mcp-remote-servers.md +64 -0
- package/skills/synap/mental-model.md +17 -15
- package/skills/synap/operating-mode-rules.md +1 -1
- package/skills/synap/processes.md +118 -0
- package/skills/synap/quick-reference.md +5 -1
- package/skills/synap/reading.md +3 -1
- package/skills/synap/reflexes.md +12 -42
- package/skills/synap/viewframe-cells.md +38 -5
- package/skills/synap/work-flow.md +1 -1
- package/skills/synap/work-model.md +96 -0
- package/skills/synap/worked-examples.md +4 -5
- package/skills/synap/workspace-design.md +14 -10
- package/skills/synap/writes.md +97 -24
- package/skills/synap/writing-titles.md +63 -0
- package/skills/synap-app/SKILL.md +2 -2
- package/skills/synap-app/_skill.yaml +1 -1
- package/skills/synap-app/install-commands.md +1 -1
- package/skills/synap-design/SKILL.md +474 -0
- package/skills/synap-design/_order.txt +4 -0
- package/skills/synap-design/_skill.yaml +21 -0
- package/skills/synap-design/loop.md +134 -0
- package/skills/synap-design/overview.md +44 -0
- package/skills/synap-design/principles.md +130 -0
- package/skills/synap-design/system.md +133 -0
- package/skills/synap-market/SKILL.md +306 -16
- package/skills/synap-market/_skill.yaml +1 -1
- package/skills/synap-market/author-and-publish.md +145 -8
- package/skills/synap-market/governance-and-catalog.md +7 -0
- package/skills/synap-market/install.md +79 -1
- package/skills/synap-market/overview.md +74 -6
- package/skills/synap-schema/SKILL.md +172 -10
- package/skills/synap-schema/_order.txt +2 -0
- package/skills/synap-schema/_skill.yaml +4 -2
- package/skills/synap-schema/common-mistakes.md +4 -2
- package/skills/synap-schema/discover-profiles.md +1 -1
- package/skills/synap-schema/entity-scope.md +15 -3
- package/skills/synap-schema/extend-first.md +29 -0
- package/skills/synap-schema/extend-vs-create.md +1 -1
- package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
- package/skills/synap-schema/property-types.md +1 -1
- package/skills/synap-schema/relations.md +1 -1
- package/skills/synap-ui/SKILL.md +19 -12
- package/skills/synap-ui/_skill.yaml +1 -1
- package/skills/synap-ui/ai-companion.md +1 -1
- package/skills/synap-ui/arranging-bento.md +2 -0
- package/skills/synap-ui/bento-layouts.md +10 -10
- package/skills/synap-ui/bento-recipes.md +313 -543
- package/skills/synap-ui/four-builds.md +5 -0
- package/skills/synap-ui/view-types.md +2 -2
- package/skills/synap-ui/widget-catalog.md +22 -278
- package/templates/automations/bookmark-enrichment.automation.json +290 -13
- package/templates/automations/url-bookmark-capture.automation.json +73 -11
- package/templates/skills/authoring-playbooks/SKILL.md +6 -3
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
- package/dist/commands/infra.d.ts +0 -21
- package/dist/commands/infra.js +0 -262
- package/dist/commands/infra.js.map +0 -1
- package/dist/commands/template.d.ts +0 -42
- package/dist/commands/template.js +0 -191
- package/dist/commands/template.js.map +0 -1
- package/dist/lib/browser-auth.d.ts +0 -35
- package/dist/lib/browser-auth.js +0 -170
- package/dist/lib/browser-auth.js.map +0 -1
- package/dist/lib/openclaw.d.ts +0 -32
- package/dist/lib/openclaw.js +0 -164
- package/dist/lib/openclaw.js.map +0 -1
- package/dist/lib/seed.d.ts +0 -13
- package/dist/lib/seed.js +0 -135
- package/dist/lib/seed.js.map +0 -1
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -1261
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -1647
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -1647
- package/node_modules/@synap/hub-rest-client/dist/index.js +0 -1231
- package/node_modules/@synap/hub-rest-client/package.json +0 -45
- package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1631
- package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
- package/node_modules/@synap/hub-rest-client/src/index.ts +0 -153
- package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -133
- package/node_modules/@synap/hub-rest-client/src/types.ts +0 -1299
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap proposals await <id>` — block until a proposal is decided.
|
|
3
|
+
*
|
|
4
|
+
* The dev-loop primitive: an agent files a proposal, then WAITS for the human
|
|
5
|
+
* to answer it before continuing. Without this the only shapes available were
|
|
6
|
+
* "fire and forget" (the agent never learns the outcome) or a hand-rolled sleep
|
|
7
|
+
* loop in every caller.
|
|
8
|
+
*
|
|
9
|
+
* Reuses `pollForApproval` — the ONE poll loop already shared by CP login and
|
|
10
|
+
* agent-key provisioning. This command adds no second poller; it supplies the
|
|
11
|
+
* predicates and a first immediate check so an already-decided proposal returns
|
|
12
|
+
* without paying one interval of latency.
|
|
13
|
+
*
|
|
14
|
+
* Status vocabulary comes from `PROPOSAL_STATUS_FILTERS` (data-extra.ts), which
|
|
15
|
+
* itself mirrors the pod's SSOT. It is NOT hand-mirrored here: the terminal
|
|
16
|
+
* classification below is asserted exhaustive against that list by a test, so a
|
|
17
|
+
* new pod status cannot silently fall through.
|
|
18
|
+
*/
|
|
19
|
+
import chalk from "chalk";
|
|
20
|
+
import { log } from "../utils/logger.js";
|
|
21
|
+
import { resolveHubConfig, hubGet, renderHubError, } from "../lib/hub-client.js";
|
|
22
|
+
import { requireFullId } from "../lib/id.js";
|
|
23
|
+
import { pollForApproval } from "../lib/approval-poll.js";
|
|
24
|
+
import { PROPOSAL_STATUS_FILTERS, proposalStatusLabel } from "./data-extra.js";
|
|
25
|
+
// ─── status classification ────────────────────────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Every value a proposal ROW can hold — the shared `--status` vocabulary minus
|
|
28
|
+
* the `all` filter sentinel, which no row ever carries. Derived, never retyped.
|
|
29
|
+
*/
|
|
30
|
+
export const PROPOSAL_ROW_STATUSES = PROPOSAL_STATUS_FILTERS.filter((s) => s !== "all");
|
|
31
|
+
/** Decided, and the decision was YES. Exit 0. */
|
|
32
|
+
const SUCCESS_STATUSES = new Set(["approved", "auto_approved"]);
|
|
33
|
+
/**
|
|
34
|
+
* Decided, and the decision was NOT yes. Exit 1.
|
|
35
|
+
*
|
|
36
|
+
* NOTE ON `cancelled`: the pod has no such status. The equivalent row state is
|
|
37
|
+
* `withdrawn` (proposer retracted it). `reverted` and `approval_failed` are
|
|
38
|
+
* likewise terminal-not-approved: the write did not stand.
|
|
39
|
+
*/
|
|
40
|
+
const FAILURE_STATUSES = new Set([
|
|
41
|
+
"rejected",
|
|
42
|
+
"expired",
|
|
43
|
+
"withdrawn",
|
|
44
|
+
"reverted",
|
|
45
|
+
"approval_failed",
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* Classify a proposal's status.
|
|
49
|
+
*
|
|
50
|
+
* `unknown` is deliberately NON-terminal: a status this CLI has never heard of
|
|
51
|
+
* may well be transient on a newer pod, and calling it "rejected" would be the
|
|
52
|
+
* client inventing a decision the pod never made. An unknown status therefore
|
|
53
|
+
* keeps polling and, failing that, times out (exit 2) — an honest "I could not
|
|
54
|
+
* determine the outcome" rather than a fabricated one.
|
|
55
|
+
*/
|
|
56
|
+
export function classifyProposalStatus(status) {
|
|
57
|
+
if (!status)
|
|
58
|
+
return "unknown";
|
|
59
|
+
const s = status.trim().toLowerCase();
|
|
60
|
+
if (SUCCESS_STATUSES.has(s))
|
|
61
|
+
return "approved";
|
|
62
|
+
if (FAILURE_STATUSES.has(s))
|
|
63
|
+
return "rejected";
|
|
64
|
+
if (s === "pending")
|
|
65
|
+
return "pending";
|
|
66
|
+
return "unknown";
|
|
67
|
+
}
|
|
68
|
+
/** Process exit code for a finished await. */
|
|
69
|
+
export function exitCodeForOutcome(outcome) {
|
|
70
|
+
if (outcome === "approved")
|
|
71
|
+
return 0;
|
|
72
|
+
if (outcome === "rejected")
|
|
73
|
+
return 1;
|
|
74
|
+
return 2; // pending at deadline, or an outcome we could not classify
|
|
75
|
+
}
|
|
76
|
+
/** Read `status` off a `GET /proposals/:id` body, tolerating an envelope. */
|
|
77
|
+
export function statusOf(data) {
|
|
78
|
+
if (!data || typeof data !== "object")
|
|
79
|
+
return undefined;
|
|
80
|
+
const row = data;
|
|
81
|
+
const nested = row.proposal;
|
|
82
|
+
const source = nested && typeof nested === "object" ? nested : row;
|
|
83
|
+
const status = source.status;
|
|
84
|
+
return typeof status === "string" ? status : undefined;
|
|
85
|
+
}
|
|
86
|
+
// ─── duration parsing ─────────────────────────────────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Parse `30m` / `10s` / `2h` / a bare number of seconds into milliseconds.
|
|
89
|
+
* Returns null for anything unparseable so the caller can name the accepted
|
|
90
|
+
* shapes instead of silently defaulting.
|
|
91
|
+
*/
|
|
92
|
+
export function parseDuration(value, fallbackMs) {
|
|
93
|
+
if (value === undefined || value === null || String(value).trim() === "")
|
|
94
|
+
return fallbackMs;
|
|
95
|
+
const m = String(value).trim().toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);
|
|
96
|
+
if (!m)
|
|
97
|
+
return null;
|
|
98
|
+
const n = Number(m[1]);
|
|
99
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
100
|
+
return null;
|
|
101
|
+
const unit = m[2] ?? "s";
|
|
102
|
+
const factor = unit === "ms" ? 1 : unit === "s" ? 1000 : unit === "m" ? 60_000 : 3_600_000;
|
|
103
|
+
return Math.round(n * factor);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Poll until the proposal is terminal or the deadline elapses. Never throws for
|
|
107
|
+
* a decision — a rejection is a RESULT, not an error. Only a genuinely broken
|
|
108
|
+
* call (bad id, 403) propagates, via the first immediate check.
|
|
109
|
+
*/
|
|
110
|
+
export async function awaitProposal(id, cfg, opts) {
|
|
111
|
+
const startedAt = Date.now();
|
|
112
|
+
// First check is IMMEDIATE — an already-decided proposal must not pay a full
|
|
113
|
+
// interval of latency, and a 404/403 must surface as an error now rather than
|
|
114
|
+
// being swallowed as a retryable blip by the poll loop.
|
|
115
|
+
const first = (await hubGet(`/proposals/${id}`, {}, cfg));
|
|
116
|
+
const firstStatus = statusOf(first);
|
|
117
|
+
const firstOutcome = classifyProposalStatus(firstStatus);
|
|
118
|
+
if (firstOutcome === "approved" || firstOutcome === "rejected") {
|
|
119
|
+
return {
|
|
120
|
+
id,
|
|
121
|
+
status: firstStatus,
|
|
122
|
+
outcome: firstOutcome,
|
|
123
|
+
elapsedMs: Date.now() - startedAt,
|
|
124
|
+
proposal: first,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
let lastStatus = firstStatus;
|
|
128
|
+
let decided = null;
|
|
129
|
+
try {
|
|
130
|
+
const approved = await pollForApproval({
|
|
131
|
+
url: `${cfg.podUrl.replace(/\/+$/, "")}/api/hub/proposals/${id}`,
|
|
132
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}` },
|
|
133
|
+
intervalMs: opts.intervalMs,
|
|
134
|
+
timeoutMs: opts.timeoutMs,
|
|
135
|
+
isApproved: (d) => classifyProposalStatus(statusOf(d)) === "approved",
|
|
136
|
+
isRejected: (d) => {
|
|
137
|
+
const status = statusOf(d);
|
|
138
|
+
if (status)
|
|
139
|
+
lastStatus = status;
|
|
140
|
+
if (classifyProposalStatus(status) !== "rejected")
|
|
141
|
+
return false;
|
|
142
|
+
decided = { data: d, outcome: "rejected" };
|
|
143
|
+
return true;
|
|
144
|
+
},
|
|
145
|
+
onApproved: (d) => {
|
|
146
|
+
const status = statusOf(d);
|
|
147
|
+
if (status)
|
|
148
|
+
lastStatus = status;
|
|
149
|
+
return d;
|
|
150
|
+
},
|
|
151
|
+
// Track the last status seen even on ticks that are neither terminal.
|
|
152
|
+
onTick: ({ data }) => {
|
|
153
|
+
const status = statusOf(data);
|
|
154
|
+
if (status)
|
|
155
|
+
lastStatus = status;
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
return {
|
|
159
|
+
id,
|
|
160
|
+
status: statusOf(approved) ?? lastStatus,
|
|
161
|
+
outcome: "approved",
|
|
162
|
+
elapsedMs: Date.now() - startedAt,
|
|
163
|
+
proposal: approved,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// `pollForApproval` throws for exactly two reasons: isRejected fired, or the
|
|
168
|
+
// deadline elapsed. `decided` disambiguates without string-matching a message.
|
|
169
|
+
if (decided) {
|
|
170
|
+
const settled = decided;
|
|
171
|
+
return {
|
|
172
|
+
id,
|
|
173
|
+
status: statusOf(settled.data) ?? lastStatus,
|
|
174
|
+
outcome: "rejected",
|
|
175
|
+
elapsedMs: Date.now() - startedAt,
|
|
176
|
+
proposal: settled.data,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
id,
|
|
181
|
+
status: lastStatus,
|
|
182
|
+
outcome: lastStatus && classifyProposalStatus(lastStatus) === "pending" ? "pending" : "unknown",
|
|
183
|
+
elapsedMs: Date.now() - startedAt,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Human wording for a status. Goes through the SAME helper the listing uses
|
|
189
|
+
* (`proposalStatusLabel`) so the two surfaces can never render one status two
|
|
190
|
+
* ways — the fork that put "Refused" in one governance surface and "Rejected"
|
|
191
|
+
* in another. An unrecognised value falls back to "undecided" rather than
|
|
192
|
+
* leaking a raw token.
|
|
193
|
+
*/
|
|
194
|
+
function describeStatus(status) {
|
|
195
|
+
if (!status)
|
|
196
|
+
return "undecided";
|
|
197
|
+
const known = PROPOSAL_STATUS_FILTERS.includes(status);
|
|
198
|
+
return known
|
|
199
|
+
? proposalStatusLabel(status)
|
|
200
|
+
: "undecided";
|
|
201
|
+
}
|
|
202
|
+
// ─── command ──────────────────────────────────────────────────────────────────
|
|
203
|
+
const DEFAULT_TIMEOUT_MS = 30 * 60_000;
|
|
204
|
+
const DEFAULT_INTERVAL_MS = 10_000;
|
|
205
|
+
export async function awaitProposalCommand(id, opts) {
|
|
206
|
+
requireFullId(id, "proposal", chalk, log);
|
|
207
|
+
const timeoutMs = parseDuration(opts.timeout, DEFAULT_TIMEOUT_MS);
|
|
208
|
+
const intervalMs = parseDuration(opts.interval, DEFAULT_INTERVAL_MS);
|
|
209
|
+
if (timeoutMs === null || intervalMs === null) {
|
|
210
|
+
console.error(chalk.red(`Unparseable duration. Use a number with a unit: 500ms, 30s, 15m, 2h (bare number = seconds).`));
|
|
211
|
+
process.exit(2);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
let cfg;
|
|
215
|
+
let result;
|
|
216
|
+
try {
|
|
217
|
+
cfg = await resolveHubConfig(opts);
|
|
218
|
+
if (!opts.json) {
|
|
219
|
+
log.dim(`Waiting for proposal ${id.slice(0, 8)} — checking every ${Math.round(intervalMs / 1000)}s, up to ${Math.round(timeoutMs / 60_000)}m.`);
|
|
220
|
+
}
|
|
221
|
+
result = await awaitProposal(id, cfg, { timeoutMs, intervalMs });
|
|
222
|
+
}
|
|
223
|
+
catch (e) {
|
|
224
|
+
renderHubError(e);
|
|
225
|
+
process.exit(2);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (opts.json) {
|
|
229
|
+
console.log(JSON.stringify({
|
|
230
|
+
id: result.id,
|
|
231
|
+
status: result.status ?? null,
|
|
232
|
+
outcome: result.outcome,
|
|
233
|
+
elapsedMs: result.elapsedMs,
|
|
234
|
+
}, null, 2));
|
|
235
|
+
}
|
|
236
|
+
else if (result.outcome === "approved") {
|
|
237
|
+
log.success(`Proposal ${describeStatus(result.status)} ${chalk.dim(id.slice(0, 8))}`);
|
|
238
|
+
}
|
|
239
|
+
else if (result.outcome === "rejected") {
|
|
240
|
+
log.error(`Proposal ${describeStatus(result.status)} ${chalk.dim(id.slice(0, 8))}`);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
log.error(`Timed out after ${Math.round(result.elapsedMs / 1000)}s — still ${describeStatus(result.status)}.`);
|
|
244
|
+
log.dim(` Review → synap open proposal ${id}`);
|
|
245
|
+
}
|
|
246
|
+
process.exit(exitCodeForOutcome(result.outcome));
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=proposals-await.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposals-await.js","sourceRoot":"","sources":["../../src/commands/proposals-await.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synap proton-setup (HIDDEN)
|
|
3
|
+
*
|
|
4
|
+
* One-shot provisioning for the Proton Mail ↔ Synap bridge — a fork of
|
|
5
|
+
* `bridge-setup` (the Discord bridge) for the SOVEREIGN self-host Proton path:
|
|
6
|
+
* a locally-run, headless Proton Bridge decrypts Proton's end-to-end-encrypted
|
|
7
|
+
* mail and exposes it as plain IMAP/SMTP on localhost; this command wires that
|
|
8
|
+
* bridge up to a Synap pod. See the catalog's `synap-app/packages/
|
|
9
|
+
* workspace-templates/capabilities/proton.capability.json` for the template
|
|
10
|
+
* (vault ref `proton-account`, tool `proton`) and its documented
|
|
11
|
+
* MUTUAL-EXCLUSIVITY rule against the `mailgun` template's Proton-forward path
|
|
12
|
+
* — do not run both for the same mailbox (double-ingest).
|
|
13
|
+
*
|
|
14
|
+
* CREDENTIAL MODEL: the operator enters their Proton ACCOUNT credentials
|
|
15
|
+
* (email + password + optional TOTP seed + optional mailbox password for
|
|
16
|
+
* two-password-mode accounts) ONCE, here — NOT a Bridge-generated password.
|
|
17
|
+
* They are assembled into one JSON secret
|
|
18
|
+
* (`{"email","password","totpSeed","mailboxPassword"}`, last two optional) and
|
|
19
|
+
* stored in the pod vault under ref `proton-account`. The headless bridge redeems
|
|
20
|
+
* that secret and auto-logs-in with it on boot (implemented in the
|
|
21
|
+
* synap-proton-bridge repo); no manual `protonmail-bridge login` step remains. If
|
|
22
|
+
* Proton throws a one-time human-verification challenge (more likely on
|
|
23
|
+
* datacenter/VPS IPs), a URL appears in the bridge logs to click once — see
|
|
24
|
+
* `printNextSteps`.
|
|
25
|
+
*
|
|
26
|
+
* Automates everything that CAN be automated:
|
|
27
|
+
*
|
|
28
|
+
* 1. lets you CHOOSE which saved pod the bridge connects to (kept separate
|
|
29
|
+
* from your global CLI pod via the "proton" surface override), then
|
|
30
|
+
* resolves a durable hub key + workspace from it
|
|
31
|
+
* 2. sanity-checks pod reachability + key scope (GET /capabilities)
|
|
32
|
+
* 3. applies the bridge's OWN capability definition (POST /capabilities/apply)
|
|
33
|
+
* — read from the bridge repo so there is ONE source of truth
|
|
34
|
+
* 4. writes the bridge .env (pod creds + vault ref), preserving any other
|
|
35
|
+
* existing keys, and purges any raw Proton env credentials once vaulted
|
|
36
|
+
* 5. prints the one-time human-verification note (only a human can click it)
|
|
37
|
+
*
|
|
38
|
+
* Hidden on purpose: this is a dogfood/dev convenience, not a first-class
|
|
39
|
+
* surface. Not shown in `synap --help`.
|
|
40
|
+
*
|
|
41
|
+
* The bridge lands data POD-WIDE by default. An OPTIONAL project scope can be
|
|
42
|
+
* picked interactively (or via --project-id); --workspace-id remains an
|
|
43
|
+
* advanced/legacy escape hatch to pin a single workspace, never prompted.
|
|
44
|
+
*
|
|
45
|
+
* Usage:
|
|
46
|
+
* synap proton-setup [--bridge-dir <path>] [--pod <profile-name>]
|
|
47
|
+
* [--workspace-id <uuid>] [--project-id <uuid>] [--pod-url <url>] [--api-key <key>]
|
|
48
|
+
* [--proton-email <email>] [--proton-password <password>]
|
|
49
|
+
* [--proton-totp-seed <seed>] [--proton-mailbox-password <password>]
|
|
50
|
+
*/
|
|
51
|
+
import { type GovernancePreset } from "../lib/targets.js";
|
|
52
|
+
export interface ProtonSetupOpts {
|
|
53
|
+
/** Saved pod profile to connect the bridge to (separate from the global CLI pod). */
|
|
54
|
+
pod?: string;
|
|
55
|
+
/** Governance preset for the agent — skips the interactive prompt when set. */
|
|
56
|
+
governance?: GovernancePreset;
|
|
57
|
+
podUrl?: string;
|
|
58
|
+
apiKey?: string;
|
|
59
|
+
bridgeDir?: string;
|
|
60
|
+
/** Advanced/legacy escape hatch — pins the bridge to one workspace instead of pod-wide. */
|
|
61
|
+
workspaceId?: string;
|
|
62
|
+
/** Scopes the bridge to one project (peer lens to workspace). Skips the project prompt. */
|
|
63
|
+
projectId?: string;
|
|
64
|
+
/** Proton ACCOUNT email — the account the bridge auto-logs-in as. */
|
|
65
|
+
protonEmail?: string;
|
|
66
|
+
/** Proton ACCOUNT password (not a bridge-generated value) — provisioned into the pod vault. */
|
|
67
|
+
protonPassword?: string;
|
|
68
|
+
/** Proton ACCOUNT 2FA/TOTP seed (base32), optional — provisioned into the pod vault. */
|
|
69
|
+
protonTotpSeed?: string;
|
|
70
|
+
/** Proton mailbox password (two-password-mode accounts only), optional — provisioned into the pod vault. */
|
|
71
|
+
protonMailboxPassword?: string;
|
|
72
|
+
}
|
|
73
|
+
export declare function protonSetup(opts: ProtonSetupOpts): Promise<void>;
|