@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
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
{ "userId": "{userId}",
|
|
26
26
|
"sourceEntityId": "ent_new_task",
|
|
27
27
|
"targetEntityId": "ent_acme",
|
|
28
|
-
"type": "
|
|
28
|
+
"type": "relates_to" }
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
5. Confirm: "Task created and linked to Acme, due Friday."
|
|
@@ -57,18 +57,17 @@
|
|
|
57
57
|
You are authoring this text yourself — it is not a file you have. Don't create
|
|
58
58
|
a `file`/`document`-kind entity and stuff the Markdown into it.
|
|
59
59
|
|
|
60
|
-
1. Search for an existing plan: `GET /entities?q=Q3 launch&profileSlug=
|
|
60
|
+
1. Search for an existing plan: `GET /entities?q=Q3 launch&profileSlug=note&workspaceId=…` → none
|
|
61
61
|
2. Create a CONTENT-kind entity carrying the plan as `content` (the doc auto-materializes):
|
|
62
62
|
|
|
63
63
|
```json
|
|
64
64
|
POST /api/hub/entities
|
|
65
65
|
{ "userId": "{userId}", "workspaceId": "{wsId}",
|
|
66
|
-
"profileSlug": "
|
|
66
|
+
"profileSlug": "note",
|
|
67
67
|
"title": "Q3 launch strategic plan",
|
|
68
|
-
"properties": { "ek_type": "reference" },
|
|
69
68
|
"content": "# Q3 Launch Plan\n\n## Goals\n…\n\n## Timeline\n…"
|
|
70
69
|
}
|
|
71
70
|
```
|
|
72
71
|
|
|
73
|
-
3. Link it to the relevant project: `POST /api/hub/relations` `{ sourceEntityId: "ent_new_plan", targetEntityId: "ent_project_q3", type: "
|
|
72
|
+
3. Link it to the relevant project: `POST /api/hub/relations` `{ sourceEntityId: "ent_new_plan", targetEntityId: "ent_project_q3", type: "relates_to" }`.
|
|
74
73
|
4. Confirm: "Plan captured and linked to Q3 launch." No upload, no `file` entity, no separate `synap_create_document` call.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
## Workspace design — is this concern a WORKSPACE, or something smaller?
|
|
2
2
|
|
|
3
|
-
Before you create a workspace, run the decision rule. A workspace (an operational **domain**) is the heaviest structure in the pod — it owns kinds, confers roles, carries its own team and automations. Most new concerns are NOT domains; they are a **hat**, an **initiative**, or a **
|
|
3
|
+
Before you create a workspace, run the decision rule. A workspace (an operational **domain**) is the heaviest structure in the pod — it owns kinds, confers roles, carries its own team and automations. Most new concerns are NOT domains; they are a **hat**, an **initiative**, a **lasting goal** (a goal — `track` in tools), or a **status**. Creating a workspace for one of those is the anti-pattern that fragments the graph. Decide first, then create. What each word means: `concepts` (the one glossary).
|
|
4
|
+
|
|
5
|
+
**One space per domain:** A space is a domain, installed once (Content, Brand, CRM…). A project is a filter across spaces. To make something “for project X”: file it into X inside the domain's space (`file_into_project`), and link X to the space (`project_use_workspace`). Never create a space named after a project, a brand or a client.
|
|
4
6
|
|
|
5
7
|
## The decision rule — a concern earns a workspace ONLY if ALL FOUR hold
|
|
6
8
|
|
|
@@ -11,20 +13,22 @@ Before you create a workspace, run the decision rule. A workspace (an operationa
|
|
|
11
13
|
|
|
12
14
|
**All four, or it is not a workspace.** Then fork it to the right lighter structure:
|
|
13
15
|
|
|
14
|
-
| If the concern is… | It is a…
|
|
15
|
-
| ----------------------------------------------------------- |
|
|
16
|
-
| a **role/hat** an existing entity wears in a domain | **Facet**
|
|
17
|
-
| a **cross-cutting, time-bound initiative** spanning domains | **Project**
|
|
18
|
-
| a **
|
|
16
|
+
| If the concern is… | It is a… | Substrate | Example |
|
|
17
|
+
| ----------------------------------------------------------- | ----------- | -------------------------------------- | ------------------------------------------- |
|
|
18
|
+
| a **role/hat** an existing entity wears in a domain | **Facet** | `attach_facet` (`profileKind: "role"`) | `client`, `sponsor`, `prospect`, `investor` |
|
|
19
|
+
| a **cross-cutting, time-bound initiative** spanning domains | **Project** | `create_project` (a lens) | a campaign, an engagement, a launch |
|
|
20
|
+
| a **lasting goal** a project pursues (worked in sessions) | **Goal** | `start_track` (no method needed) | grow the newsletter, win ten clients |
|
|
21
|
+
| a **stage/filter WITHIN a domain** | **Status** | an option of the kind's lifecycle | pipeline stage, "active"/"archived" |
|
|
19
22
|
|
|
20
23
|
## The decision procedure (follow in order)
|
|
21
24
|
|
|
22
25
|
1. **Name the source-of-truth noun.** What kind would this workspace _own_ that no existing workspace owns? Run `list_profiles` — if the noun already lives in another domain, you have a facet or a project, not a domain. STOP.
|
|
23
26
|
2. **Test all four conditions.** Owns kinds AND own team AND native automations AND stable. Any one fails → fork below.
|
|
24
|
-
3. **If it's a hat** (a status/role on an entity that already exists elsewhere) → resolve the entity, `attach_facet`. Never a workspace, never a second entity.
|
|
25
|
-
4. **If it's time-bound work across domains** → `create_project` and set it as the lens; the work files into it from whatever workspace holds the data. **A project is a COMMITMENT WITH GRAVITY** — a real initiative that ties work together (a campaign, an engagement, a client, a launch). Tasks, plans, repos, themes, and topics are **entities**, never projects. Before you create one: (a) **search existing projects first** (`synap orient` / `GET /api/hub/projects`) and prefer **linking into an existing project** via `belongs_to_project` — near-duplicate
|
|
26
|
-
5. **If it's a
|
|
27
|
-
6. **
|
|
27
|
+
3. **If it's a hat** (a status/role on an entity that already exists elsewhere) → resolve the entity, `attach_facet`. Never a workspace, never a second entity. One role per name, pod-wide: a role several workspaces use is ONE role, each workspace adding properties by overlay — never a per-workspace twin (`concepts`).
|
|
28
|
+
4. **If it's time-bound work across domains** → `create_project` and set it as the lens; the work files into it from whatever workspace holds the data. **A project is a COMMITMENT WITH GRAVITY** — a real initiative that ties work together (a campaign, an engagement, a client, a launch). Tasks, plans, repos, themes, and topics are **entities**, never projects. Before you create one: (a) **search existing projects first** (`synap orient` / `GET /api/hub/projects`) and prefer **linking into an existing project** via `belongs_to_project` — a near-duplicate name is filed for the person to review, showing the existing project; (b) an agent-created project must cite **≥5 existing entities** that would belong to it as `evidenceEntityIds` — the backend rejects a project with no gravity and tells you to store it as an entity or reuse an existing project instead; (c) **never create a project for the pod owner's own company** — the company _is_ the pod, not a project inside it.
|
|
29
|
+
5. **If it's a lasting goal a project pursues** ("keep the content side of the launch going") → a **goal**: `list_tracks`, else `start_track` (`name`, `direction`); work in it with `start_session` + `trackId`. Never a workspace, never a twin project.
|
|
30
|
+
6. **If it's a stage inside a domain** → it is an option of the kind's or role's declared lifecycle, never a role and never a space. Its pipeline is computed from the lifecycle: open it, don't build one. A kind with no lifecycle yet gets a `status` property def (`create_property_def`).
|
|
31
|
+
7. **Only if all four held** → **template first** (escalation ladder L3):
|
|
28
32
|
`market.search({query, kind: "template"})` and propose install of a matching
|
|
29
33
|
template before freehand `create_workspace`. Freehand create is last resort
|
|
30
34
|
and always proposed — a deliberate move, offer it to the user (see
|
|
@@ -32,7 +36,7 @@ Before you create a workspace, run the decision rule. A workspace (an operationa
|
|
|
32
36
|
|
|
33
37
|
## The CRM corollary — the load-bearing example
|
|
34
38
|
|
|
35
|
-
Operational state — **prospect → client → delivered** — is a **FLOW across domains**, expressed as **facets +
|
|
39
|
+
Operational state — **prospect → client → delivered** — is a **FLOW across domains**, expressed as **facets + an engagement project** (its delivery runs as a goal), NEVER as workspaces and NEVER by bolting delivery onto the identity domain.
|
|
36
40
|
|
|
37
41
|
- CRM = **who** (owns `person`/`company`, confers the `lead`/`client` facets).
|
|
38
42
|
- Operations = **what we do for them** (owns `engagement`/`contract`/`deliverable`).
|
package/skills/synap/writes.md
CHANGED
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
## Core writes
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
> **Scope of this page.** It covers writes that produce ENTITY-shaped data.
|
|
4
|
+
> There are ~30 other write tools (sessions, capabilities, automations, cells,
|
|
5
|
+
> playbooks, views, channels…) that this page does not orient across — reach for
|
|
6
|
+
> `synap_list_capabilities` / the escalation ladder for those. If you are about
|
|
7
|
+
> to pick a tool and the choice feels ambiguous, that ambiguity is real: the
|
|
8
|
+
> tools below differ in ATOMICITY and COLLISION policy, not just in shape.
|
|
9
|
+
|
|
10
|
+
**Two entity-write doors, one gradient.** `create_entity` is for exactly ONE
|
|
4
11
|
fully-structured, typed entity you already have. For anything unstructured,
|
|
5
12
|
several entities, or a graph — or **when in doubt** — use the capture door
|
|
6
13
|
(`synap_capture`, see `capture.md`): precision comes from sending more structure
|
|
7
14
|
in the SAME call, never from picking a different tool or a second commit step.
|
|
8
15
|
|
|
16
|
+
The difference that is NOT visible in either tool's description: `create_entity`
|
|
17
|
+
writes one entity with per-entity governance; capture-with-`entities[]` files ONE
|
|
18
|
+
atomic proposal for the whole graph. Neither rejects a look-alike: a record (or
|
|
19
|
+
one of your own pending proposals) of the same kind with the same name or
|
|
20
|
+
identity makes the write a proposal carrying `duplicateCheck`, and the person
|
|
21
|
+
decides (keep both, use the existing one, fill its empty fields). Only a strong
|
|
22
|
+
identity (email, phone, url, handle, external id) links to the existing record
|
|
23
|
+
on its own. Pick by whether you want a partial write to be possible, not by how
|
|
24
|
+
structured your data feels.
|
|
25
|
+
|
|
26
|
+
**Every title is linted.** Both doors return `titleLint` in the receipt when a
|
|
27
|
+
title breaks the rubric (too long, cut off, status words, ids, a placeholder…);
|
|
28
|
+
the title is stored as sent, so rewrite it. Over 200 characters the write is
|
|
29
|
+
refused. Title rules and what counts as knowledge: `writing-titles.md`.
|
|
30
|
+
|
|
9
31
|
### Create an entity (one exact typed entity)
|
|
10
32
|
|
|
11
33
|
Before this call, use `/discover?userId=…&profileSlugs=<kind>` to read the
|
|
@@ -31,9 +53,10 @@ The response has legacy `status`/`id` fields plus `writeReceipt`:
|
|
|
31
53
|
`pending`/`proposed` means a proposal exists and no entity is live yet;
|
|
32
54
|
`applied` means the reported direct write completed; `partial` means a follow-up
|
|
33
55
|
(for example a facet) failed after the entity applied. **A `proposed`/`pending`
|
|
34
|
-
receipt is a governed success, not an error** — surface its
|
|
35
|
-
|
|
36
|
-
|
|
56
|
+
receipt is a governed success, not an error** — you MUST surface its
|
|
57
|
+
`reviewUrl` as a clickable markdown link in the same reply (see
|
|
58
|
+
`inline-patterns.md`), never claim completion, and only enrich again when the
|
|
59
|
+
receipt identifies a real missing fact.
|
|
37
60
|
|
|
38
61
|
For several entities, creation-time roles/facets, or relations that need one
|
|
39
62
|
review, send the whole graph through the capture door (`synap_capture` with
|
|
@@ -59,6 +82,28 @@ PATCH /api/hub/entities/{entityId}
|
|
|
59
82
|
|
|
60
83
|
**Properties are deep-merged — send only the keys you want to change.** An update with `{ "status": "done" }` leaves all other properties untouched. You never need to re-send the full properties object.
|
|
61
84
|
|
|
85
|
+
**Many changes → ONE call: `synap_update_entities`** (up to 500 items
|
|
86
|
+
`{id, patch, expected?}`; Hub: `POST /api/hub/entities/batch-update`). Never
|
|
87
|
+
script a loop of single updates, and never apply a change set over Hub REST with
|
|
88
|
+
a user key. Governance is per item: some apply now, the rest ride ONE review for
|
|
89
|
+
the person; the answer lists `applied` / `proposed` / `denied` / `skipped` — a
|
|
90
|
+
partial result is normal. Send `validate: true` first to see each verdict without
|
|
91
|
+
writing, and an `idempotencyKey` so a retry never acts twice.
|
|
92
|
+
|
|
93
|
+
**A write blocked on a space join is KEPT.** When you write into a space your
|
|
94
|
+
agent has not joined (`synap_orient` marks it `joined: false`), the answer is
|
|
95
|
+
`proposed` with `proposalType: "join"`, `deferred: true` and a `ref`: the write
|
|
96
|
+
rides the join request and is replayed for you once it is approved. Do not
|
|
97
|
+
resend it, and do not retry it into another space.
|
|
98
|
+
|
|
99
|
+
**Moving, not recreating.** A session into another space:
|
|
100
|
+
`synap_update_session` with `moveToWorkspaceId` (never `workspaceId` — that is
|
|
101
|
+
the connection's lens). A kind another space needs: `synap_change_kind_scope`
|
|
102
|
+
(`scope: "shared"` + `allowedWorkspaceIds`), never a twin kind. Records:
|
|
103
|
+
`synap_move_entities`. All three are reviewed.
|
|
104
|
+
|
|
105
|
+
**Removing one: `synap_delete_entity`** (`entityId`, optional `reasoning`). For an agent it is always a proposal — nothing is deleted until the person approves, and no rule can widen that. An approved delete hides the entity (its body is kept) and the person can undo it from the proposal. Do not retry a `proposed` answer.
|
|
106
|
+
|
|
62
107
|
### Authored text is content, not a `file`
|
|
63
108
|
|
|
64
109
|
Something **you** author — a pitch deck, a strategic plan, a note body — is
|
|
@@ -67,8 +112,8 @@ kind (`note`, `knowledge`, or a fitting domain kind) with `content` set to the
|
|
|
67
112
|
Markdown body; Synap **auto-materializes** that `content` into a real
|
|
68
113
|
versioned document behind the scenes (`entities WHERE documentId = ?`) — no
|
|
69
114
|
upload step needed. `file` is reserved for real uploaded bytes you actually
|
|
70
|
-
have (
|
|
71
|
-
|
|
115
|
+
have (`synap_store_file`; over 10MB `synap_request_upload`) — authored text
|
|
116
|
+
never becomes a `file`. Reach for `synap_create_document` /
|
|
72
117
|
`POST /api/hub/documents` directly only for a standalone rich document that
|
|
73
118
|
isn't itself a title-worthy entity (see below) — never as a substitute for an
|
|
74
119
|
entity's `content`.
|
|
@@ -81,10 +126,19 @@ You CAN store content you **hold** — you send it inline. Pick by what you have
|
|
|
81
126
|
| ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
82
127
|
| **Content in hand** — a report/CSV/image/PDF/etc. you generated or received (text or bytes) | **`synap_store_file`** (`content` for text, `contentBase64` for binary) + `mimeType`/`filename` | a `file` entity, content stored **as-is, never read** (≤10MB inline) |
|
|
83
128
|
| Text you're **authoring as a note/idea** (not "a file") — a plan, a thought | `synap_create_entity` with `content` (a content kind) | body auto-becomes a document — NOT a `file` |
|
|
84
|
-
| Only a **URL/link** (no bytes) — a Google Doc, a PDF url, an article | `synap_create_document` with **`url
|
|
85
|
-
| A **large file
|
|
129
|
+
| Only a **URL/link** (no bytes) — a Google Doc, a PDF url, an article | `synap_create_document` with **`url`**; `entityId` only for a thing with no body yet | an external **reference** document (no bytes) |
|
|
130
|
+
| A **large file** (over 10MB, up to 500MB video) | `synap_request_upload` → PUT the bytes to `uploadUrl` → `synap_store_file({ uploadToken })` | a `file` entity backed by stored bytes |
|
|
86
131
|
| Only a file's **name**, nothing else | you **cannot** invent it — ask the human/client to provide the content or a link | — |
|
|
87
132
|
|
|
133
|
+
**A typed thing with a file → the KIND first, the bytes on it.** When a kind
|
|
134
|
+
exists for the thing (a logo is a `brand-asset`, not a `file`; check the space
|
|
135
|
+
brief or `synap_list_profiles`): (1) resolve-or-create that entity
|
|
136
|
+
(`synap_ask`, then `synap_create_entity`); (2) `synap_store_file` with
|
|
137
|
+
`attachToEntityId` = its id (`content` for SVG/text, `contentBase64` for
|
|
138
|
+
binary, ≤10MB inline; larger: `synap_request_upload`, then `uploadToken`); (3) link it /
|
|
139
|
+
`synap_file_into_project` if asked. A `proposed` create has no live id yet —
|
|
140
|
+
attach after approval. A bare `file` is only for bytes with no kind.
|
|
141
|
+
|
|
88
142
|
**Store ≠ analyze.** `synap_store_file` / `synap_create_document` store content
|
|
89
143
|
**deterministically — the file is NEVER read by an LLM.** Only fetch a document
|
|
90
144
|
and reason over it when the user explicitly says "read/analyze this file."
|
|
@@ -106,11 +160,19 @@ POST /api/hub/documents
|
|
|
106
160
|
"type": "markdown", // "markdown" | "html" | "text" | "code"
|
|
107
161
|
"entityId": "ent_event_..." // attach to an entity for context
|
|
108
162
|
}
|
|
163
|
+
// → { "id": "doc_abc", "documentId": "doc_abc", "status": "created", "ackState": "applied",
|
|
164
|
+
// "attached": { "entityId": "ent_event_...", "documentId": "doc_abc", "status": "updated" } }
|
|
109
165
|
```
|
|
110
166
|
|
|
167
|
+
`attached` reports the attach outcome: it is a governed entity update, so it can
|
|
168
|
+
be `proposed`, and it is `skipped` (with a `reason`) while the document itself is
|
|
169
|
+
awaiting review. Other optional fields: `url` (an https link — creates a reference
|
|
170
|
+
document with no stored bytes), `idempotencyKey` (a retry with the same key returns
|
|
171
|
+
the prior document), `expectedLabel` (the session-output slot it fulfils).
|
|
172
|
+
|
|
111
173
|
`type: "html"` stores self-contained HTML. The browser renders it via the `html-doc` cell in a sandboxed iframe. Use for AI-generated reports, rich visualisations, custom charts, or anything beyond markdown.
|
|
112
174
|
|
|
113
|
-
**
|
|
175
|
+
**HTML document workflow:**
|
|
114
176
|
|
|
115
177
|
```json
|
|
116
178
|
// 1. Create the HTML document
|
|
@@ -119,35 +181,51 @@ POST /api/hub/documents
|
|
|
119
181
|
"title": "Q2 Revenue Report", "type": "html",
|
|
120
182
|
"content": "<!DOCTYPE html><html>…</html>",
|
|
121
183
|
"entityId": "ent_project_..." }
|
|
122
|
-
// → { "
|
|
123
|
-
|
|
124
|
-
// 2. Place the html-doc cell in any bento view
|
|
125
|
-
POST /api/hub/views/{bentoViewId}/arrange
|
|
126
|
-
{ "userId": "{userId}", "workspaceId": "{workspaceId}",
|
|
127
|
-
"widgets": [
|
|
128
|
-
{ "id": "b1", "kind": "html-doc", "config": { "documentId": "doc_abc" },
|
|
129
|
-
"layout": { "x": 0, "y": 0, "w": 8, "h": 6 } }
|
|
130
|
-
] }
|
|
184
|
+
// → { "id": "doc_abc", "documentId": "doc_abc", "status": "created", ... }
|
|
131
185
|
|
|
132
|
-
//
|
|
186
|
+
// 2. Replace the HTML (read it first: GET → `revision`)
|
|
133
187
|
PATCH /api/hub/documents/doc_abc
|
|
134
|
-
{ "userId": "{userId}", "content": "<!DOCTYPE html>…updated…</html>" }
|
|
188
|
+
{ "userId": "{userId}", "content": "<!DOCTYPE html>…updated…</html>", "baseRevision": 3 }
|
|
189
|
+
// → a pending proposal; readers see the new HTML only once it is approved
|
|
135
190
|
```
|
|
136
191
|
|
|
192
|
+
`html-doc` is **not** an agent-placeable bento widget: `arrange` rejects it. The
|
|
193
|
+
document renders where it is opened (the Files app, or the entity it is attached
|
|
194
|
+
to). For HTML you want to embed elsewhere, create an HTML cell instance
|
|
195
|
+
(`POST /api/hub/cell-instances/html`) and embed it by `instanceId`.
|
|
196
|
+
|
|
137
197
|
The iframe uses `sandbox="allow-scripts"` — scripts run but have no same-origin access to the parent app. The HTML is fully isolated.
|
|
138
198
|
|
|
139
|
-
### Update a document (
|
|
199
|
+
### Update a document's content (a patch, reviewed)
|
|
200
|
+
|
|
201
|
+
Change the part you mean, not the whole body. Read it first —
|
|
202
|
+
`GET /api/hub/documents/{id}?userId={userId}` → `content`, `revision`,
|
|
203
|
+
`sections` (id + owner) — then:
|
|
140
204
|
|
|
141
205
|
```json
|
|
142
|
-
|
|
206
|
+
POST /api/hub/documents/{documentId}/patch
|
|
143
207
|
{
|
|
144
208
|
"userId": "{userId}",
|
|
145
|
-
"
|
|
146
|
-
"
|
|
209
|
+
"baseRevision": 3,
|
|
210
|
+
"ops": [
|
|
211
|
+
{ "op": "replace_text", "old": "ships on Friday", "new": "ships on Monday" },
|
|
212
|
+
{ "op": "upsert_section", "id": "risks", "title": "Risks", "body": "None yet." }
|
|
213
|
+
]
|
|
147
214
|
}
|
|
148
215
|
```
|
|
149
216
|
|
|
150
|
-
|
|
217
|
+
Ops: `upsert_section {id, title, body}` (one section by id), `replace_text {old,
|
|
218
|
+
new}` (`old` must match **exactly once**, else 400 with the count), `append
|
|
219
|
+
{body}`, `replace_all {content}`, `set_title {title}` (renames the document, a
|
|
220
|
+
human name). An agent's edit is filed as a proposal (a
|
|
221
|
+
governance rule may apply it directly); a person's section (`owner="human"`) is
|
|
222
|
+
never changed and an embed is never dropped unless you pass
|
|
223
|
+
`"allowRemovingEmbeds": true` (403 otherwise). A moved document answers 409 and
|
|
224
|
+
nothing is written: read again. An applied or approved edit reaches open editors
|
|
225
|
+
(`document:content-replaced`), so they reload instead of overwriting it. `PATCH /api/hub/documents/{id}` with `content` is the same door with
|
|
226
|
+
one `replace_all` — it cannot rename (a `title` is refused with 400; to rename the
|
|
227
|
+
document, send a `set_title` op to `POST /api/hub/documents/{id}/patch`). MCP: `synap_update_document`;
|
|
228
|
+
full syntax in `document-embeds.md`.
|
|
151
229
|
|
|
152
230
|
The reverse lookup is `entities WHERE documentId = ?`. Always attach the document to a meaningful entity (the meeting event, the project, the person) — a floating document is another orphan.
|
|
153
231
|
|
|
@@ -202,6 +280,8 @@ POST /api/hub/entities
|
|
|
202
280
|
|
|
203
281
|
This creates a first-class decision entity linked to Project Eve. It shows up in traversals, can be superseded later (`supersededBy: newDecisionId`), and survives governance. Memory can't do any of that.
|
|
204
282
|
|
|
283
|
+
**A decision the PERSON must make** — create it with `decisionStatus: "proposed"` and the pod asks them for you: pass `decisionOptions` (≤8 of `{label, value?, description?}`) and `recommendedOption` (an option's `value`, else its `label`); set `sourceSessionId` to keep the question in your session. With no options the person sees its `title` with Accept / Reject, each saying what it does. So give it a short `title` (the decision itself, never "Decide: …") and a `summary` that says what the title does not. Only a decision YOU propose asks: a person's own proposed decision is their note, and the pod never asks them about it. Their answer UPDATES that decision — never create a second one. Every answered `confirm`/`choose` ask already files its decision (`slot.decisionId`): don't create one for it. A person-owned slot blocked on a decision is ANSWERED by them (Yes/No or a choice) — it is never closed by marking it done. **Before you recommend**, recall the user's past decisions (`synap_ask`, or find `decision` entities) so your pick follows their past choices.
|
|
284
|
+
|
|
205
285
|
### Post to the user's personal channel
|
|
206
286
|
|
|
207
287
|
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
## Writing titles and knowledge
|
|
2
|
+
|
|
3
|
+
Every write receipt runs the title rubric and returns `titleLint` when a title
|
|
4
|
+
breaks it. The title is stored as you sent it — **rewrite it** (update the
|
|
5
|
+
title) instead of leaving it. The pod never shortens a title for you, and over
|
|
6
|
+
200 characters it refuses the write.
|
|
7
|
+
|
|
8
|
+
### Title rules (every kind, every pod)
|
|
9
|
+
|
|
10
|
+
1. **One complete phrase, 80 characters at most** (aim for 40–70; a question
|
|
11
|
+
may take 110). If it does not fit, rewrite it — never cut it, never end it
|
|
12
|
+
with "…".
|
|
13
|
+
2. **Name the lasting thing, not the event.** No SHIPPED, LIVE, FIXED, DONE,
|
|
14
|
+
VERIFIED, CORRECTION, no emoji. Status goes in a status property; the date
|
|
15
|
+
is already on the record.
|
|
16
|
+
3. **No machinery in the title:** no hashes, ids, file paths, line numbers,
|
|
17
|
+
markdown, URLs. They go in the body as evidence.
|
|
18
|
+
4. **Do not repeat the kind** ("Lesson:", "Decision:", "Caution:", "Finding:").
|
|
19
|
+
The kind and `knowledgeForm` already say it.
|
|
20
|
+
5. **Plain words.** A code is allowed only when the pod's glossary has it;
|
|
21
|
+
plan codes (T1, D3, W4, Wave A) are replaced by words.
|
|
22
|
+
6. **Same language as the body.**
|
|
23
|
+
7. **Search before you create** (`synap_ask`) and keep a title stable on
|
|
24
|
+
update. A superseded decision gets a title that says what replaced it.
|
|
25
|
+
8. **Never empty, never a placeholder** ("Untitled", "Test", a URL, the first
|
|
26
|
+
words of a transcript).
|
|
27
|
+
|
|
28
|
+
| Kind | Title shape | Example |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| Knowledge | The claim as a short sentence | Space skills are linked by the brief, not by a row |
|
|
31
|
+
| Decision | What was decided, as a fact | Connection data lives in one package: @synap-core/integrations |
|
|
32
|
+
| Question | A real question ending in ? | Should Grida replace or complement the tldraw whiteboard? |
|
|
33
|
+
| Task | Verb + object (+ who/when) | Send signed agreement to Harbor Goods |
|
|
34
|
+
| Research | Subject + what was assessed | Excalidraw evaluated as a Synap capability |
|
|
35
|
+
| Issue | The problem as a statement | Capture reads the URL but never feeds it to the structurer |
|
|
36
|
+
| Note | What it is about | Farm-to-Client Market — idea brief |
|
|
37
|
+
| Work session | The outcome, short | Frontend package consolidation: 4 layer packages |
|
|
38
|
+
| Run | Run name + instance | Daily client briefing — 12 Oct |
|
|
39
|
+
| Report | Scope + period | Builder weekly report — week of 5 Oct |
|
|
40
|
+
|
|
41
|
+
### What counts as knowledge
|
|
42
|
+
|
|
43
|
+
Knowledge is something that will **still be true and useful in three months**,
|
|
44
|
+
whenever it was learned. It takes one `knowledgeForm`:
|
|
45
|
+
|
|
46
|
+
- `fact` — how something works.
|
|
47
|
+
- `caution` — a pitfall and how to avoid it.
|
|
48
|
+
- `convention` — how we do things here.
|
|
49
|
+
|
|
50
|
+
The full sentence goes in `ek_claim`; the title is its short handle, never the
|
|
51
|
+
claim cut off. Everything else goes elsewhere:
|
|
52
|
+
|
|
53
|
+
| It is really… | File it as |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| progress, "shipped", "verified", "done" | the session's outcome or report — not a lasting entity |
|
|
56
|
+
| a choice that was made | `decision` |
|
|
57
|
+
| an open bug or problem | `issue` |
|
|
58
|
+
| a plan, an idea, a hypothesis | `note` (or `question` if it is one) |
|
|
59
|
+
| steps to follow | a skill |
|
|
60
|
+
| a fact about an outside tool, vendor or market | `research` |
|
|
61
|
+
|
|
62
|
+
When unsure, ask: "will this still help someone in three months, and is it a
|
|
63
|
+
fact, a pitfall or a rule?" If not, it is not knowledge.
|