@synap-core/cli 1.10.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 +297 -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 +3 -14
- 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 +9 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +34 -0
- package/dist/commands/data-extra.js +198 -25
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +120 -2
- package/dist/commands/data.js +307 -24
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +66 -4
- package/dist/commands/diagnose.js +329 -29
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/digest.js +2 -1
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/doc.d.ts +25 -4
- package/dist/commands/doc.js +100 -18
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/doctor.d.ts +130 -0
- package/dist/commands/doctor.js +814 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.js +3 -1
- package/dist/commands/events.js.map +1 -1
- package/dist/commands/explain.js +5 -5
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/graph.js +5 -3
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/import.d.ts +368 -13
- package/dist/commands/import.js +1096 -55
- 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 +28 -6
- package/dist/commands/knowledge.js +358 -73
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/launch.js +2 -2
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/lens.d.ts +37 -1
- package/dist/commands/lens.js +193 -72
- package/dist/commands/lens.js.map +1 -1
- package/dist/commands/market-authoring.d.ts +72 -0
- package/dist/commands/market-authoring.js +566 -0
- package/dist/commands/market-authoring.js.map +1 -0
- 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 +419 -20
- package/dist/commands/market.js +2124 -193
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +70 -13
- package/dist/commands/mcp.js +308 -40
- 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 +19 -0
- package/dist/commands/pods.js +220 -85
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +62 -0
- package/dist/commands/proposals-actions.js +146 -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 +479 -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 +19 -1
- 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 +68 -0
- package/dist/commands/upload.js +257 -0
- package/dist/commands/upload.js.map +1 -0
- 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 +1009 -171
- 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 +11 -8
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/capture-structure.d.ts +342 -0
- package/dist/lib/capture-structure.js +295 -0
- package/dist/lib/capture-structure.js.map +1 -0
- 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 +216 -4
- package/dist/lib/cp-packages.js +414 -11
- 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 +43 -9
- package/dist/lib/hub-client.js +429 -65
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/id.d.ts +23 -0
- package/dist/lib/id.js +35 -0
- package/dist/lib/id.js.map +1 -0
- 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 +119 -115
- package/dist/lib/pod.js +206 -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 +78 -0
- package/dist/lib/template-file.js +140 -0
- package/dist/lib/template-file.js.map +1 -0
- 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 +25 -18
- package/skills/README.md +12 -10
- package/skills/agent-os/SKILL.md +220 -99
- package/skills/manifest.json +2 -2
- package/skills/onboard/SKILL.md +61 -25
- package/skills/synap/README.md +5 -8
- package/skills/synap/SKILL.md +1185 -301
- 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 +54 -151
- package/skills/synap/cli-operations.md +24 -18
- package/skills/synap/common-mistakes.md +1 -0
- package/skills/synap/concepts.md +28 -0
- package/skills/synap/content-os.md +92 -0
- package/skills/synap/creative-loop.md +15 -10
- package/skills/synap/crm.md +21 -52
- package/skills/synap/digesting-a-channel.md +25 -0
- 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 +24 -22
- package/skills/synap/multi-entity-capture.md +6 -4
- 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 +21 -1
- package/skills/synap/workspace-design.md +14 -10
- package/skills/synap/writes.md +165 -35
- package/skills/synap/writing-titles.md +63 -0
- package/skills/synap-app/SKILL.md +319 -0
- package/skills/synap-app/_order.txt +5 -0
- package/skills/synap-app/_skill.yaml +20 -0
- package/skills/synap-app/creating-the-base-app.md +64 -0
- package/skills/synap-app/governance.md +42 -0
- package/skills/synap-app/install-commands.md +55 -0
- package/skills/synap-app/overview.md +50 -0
- package/skills/synap-app/using-the-sdk.md +73 -0
- 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 +625 -0
- package/skills/synap-market/_order.txt +5 -0
- package/skills/synap-market/_skill.yaml +24 -0
- package/skills/synap-market/author-and-publish.md +212 -0
- package/skills/synap-market/discover-and-fetch.md +59 -0
- package/skills/synap-market/governance-and-catalog.md +63 -0
- package/skills/synap-market/install.md +133 -0
- package/skills/synap-market/overview.md +119 -0
- 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/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
|
@@ -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** (track), 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) | **Track** | `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.
|
|
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`).
|
|
25
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` — near-duplicate names are rejected with the existing candidates; (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.
|
|
26
|
-
5. **If it's a
|
|
27
|
-
6. **
|
|
29
|
+
5. **If it's a lasting goal a project pursues** ("keep the content side of the launch going") → a **track**: `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 track), 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,6 +1,30 @@
|
|
|
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
|
|
11
|
+
fully-structured, typed entity you already have. For anything unstructured,
|
|
12
|
+
several entities, or a graph — or **when in doubt** — use the capture door
|
|
13
|
+
(`synap_capture`, see `capture.md`): precision comes from sending more structure
|
|
14
|
+
in the SAME call, never from picking a different tool or a second commit step.
|
|
15
|
+
|
|
16
|
+
The difference that is NOT visible in either tool's description: `create_entity`
|
|
17
|
+
writes one entity with per-entity governance and REJECTS a name collision unless
|
|
18
|
+
`forceCreate`; capture-with-`entities[]` files ONE atomic proposal for the whole
|
|
19
|
+
graph and DEDUP-MERGES instead of rejecting. Pick by whether you want a partial
|
|
20
|
+
write to be possible, not by how structured your data feels.
|
|
21
|
+
|
|
22
|
+
**Every title is linted.** Both doors return `titleLint` in the receipt when a
|
|
23
|
+
title breaks the rubric (too long, cut off, status words, ids, a placeholder…);
|
|
24
|
+
the title is stored as sent, so rewrite it. Over 200 characters the write is
|
|
25
|
+
refused. Title rules and what counts as knowledge: `writing-titles.md`.
|
|
26
|
+
|
|
27
|
+
### Create an entity (one exact typed entity)
|
|
4
28
|
|
|
5
29
|
Before this call, use `/discover?userId=…&profileSlugs=<kind>` to read the
|
|
6
30
|
real fields, required/default values, constraints and reference targets. Omit
|
|
@@ -22,15 +46,28 @@ POST /api/hub/entities
|
|
|
22
46
|
```
|
|
23
47
|
|
|
24
48
|
The response has legacy `status`/`id` fields plus `writeReceipt`:
|
|
25
|
-
`pending` means a proposal exists and no entity is live;
|
|
26
|
-
reported direct write completed; `partial` means a follow-up
|
|
27
|
-
facet) failed after the entity applied.
|
|
28
|
-
|
|
49
|
+
`pending`/`proposed` means a proposal exists and no entity is live yet;
|
|
50
|
+
`applied` means the reported direct write completed; `partial` means a follow-up
|
|
51
|
+
(for example a facet) failed after the entity applied. **A `proposed`/`pending`
|
|
52
|
+
receipt is a governed success, not an error** — you MUST surface its
|
|
53
|
+
`reviewUrl` as a clickable markdown link in the same reply (see
|
|
54
|
+
`inline-patterns.md`), never claim completion, and only enrich again when the
|
|
55
|
+
receipt identifies a real missing fact.
|
|
29
56
|
|
|
30
57
|
For several entities, creation-time roles/facets, or relations that need one
|
|
31
|
-
review,
|
|
32
|
-
|
|
33
|
-
|
|
58
|
+
review, send the whole graph through the capture door (`synap_capture` with
|
|
59
|
+
`entities[]` + `relations[]`) instead of sequencing independent creates. It is
|
|
60
|
+
ONE governed call: policy auto-applies when every op is safe, otherwise the
|
|
61
|
+
whole graph is proposed (atomic). There is no separate commit step.
|
|
62
|
+
|
|
63
|
+
**Name-refs, not UUIDs.** Reference an existing project by name — the server
|
|
64
|
+
resolves it against the caller's own projects (exact match files there; no match
|
|
65
|
+
proposes, never mis-files). Never ask the user for a UUID.
|
|
66
|
+
|
|
67
|
+
**Dedup is advisory across kinds.** Strong signals (`email`/`phone`/`website` —
|
|
68
|
+
not a bare `url`) dedup within a kind; a same-title hit in a _different_ kind
|
|
69
|
+
comes back as an advisory candidate, never an auto-merge. "No exact match" is not
|
|
70
|
+
"safe to create" when advisory candidates are returned — review them first.
|
|
34
71
|
|
|
35
72
|
### Update an entity
|
|
36
73
|
|
|
@@ -41,6 +78,70 @@ PATCH /api/hub/entities/{entityId}
|
|
|
41
78
|
|
|
42
79
|
**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.
|
|
43
80
|
|
|
81
|
+
**Many changes → ONE call: `synap_update_entities`** (up to 500 items
|
|
82
|
+
`{id, patch, expected?}`; Hub: `POST /api/hub/entities/batch-update`). Never
|
|
83
|
+
script a loop of single updates, and never apply a change set over Hub REST with
|
|
84
|
+
a user key. Governance is per item: some apply now, the rest ride ONE review for
|
|
85
|
+
the person; the answer lists `applied` / `proposed` / `denied` / `skipped` — a
|
|
86
|
+
partial result is normal. Send `validate: true` first to see each verdict without
|
|
87
|
+
writing, and an `idempotencyKey` so a retry never acts twice.
|
|
88
|
+
|
|
89
|
+
**A write blocked on a space join is KEPT.** When you write into a space your
|
|
90
|
+
agent has not joined (`synap_orient` marks it `joined: false`), the answer is
|
|
91
|
+
`proposed` with `proposalType: "join"`, `deferred: true` and a `ref`: the write
|
|
92
|
+
rides the join request and is replayed for you once it is approved. Do not
|
|
93
|
+
resend it, and do not retry it into another space.
|
|
94
|
+
|
|
95
|
+
**Moving, not recreating.** A session into another space:
|
|
96
|
+
`synap_update_session` with `moveToWorkspaceId` (never `workspaceId` — that is
|
|
97
|
+
the connection's lens). A kind another space needs: `synap_change_kind_scope`
|
|
98
|
+
(`scope: "shared"` + `allowedWorkspaceIds`), never a twin kind. Records:
|
|
99
|
+
`synap_move_entities`. All three are reviewed.
|
|
100
|
+
|
|
101
|
+
### Authored text is content, not a `file`
|
|
102
|
+
|
|
103
|
+
Something **you** author — a pitch deck, a strategic plan, a note body — is
|
|
104
|
+
**never** a `file`- or `document`-kind entity. Create it as the right CONTENT
|
|
105
|
+
kind (`note`, `knowledge`, or a fitting domain kind) with `content` set to the
|
|
106
|
+
Markdown body; Synap **auto-materializes** that `content` into a real
|
|
107
|
+
versioned document behind the scenes (`entities WHERE documentId = ?`) — no
|
|
108
|
+
upload step needed. `file` is reserved for real uploaded bytes you actually
|
|
109
|
+
have (`synap_store_file`; over 10MB `synap_request_upload`) — authored text
|
|
110
|
+
never becomes a `file`. Reach for `synap_create_document` /
|
|
111
|
+
`POST /api/hub/documents` directly only for a standalone rich document that
|
|
112
|
+
isn't itself a title-worthy entity (see below) — never as a substitute for an
|
|
113
|
+
entity's `content`.
|
|
114
|
+
|
|
115
|
+
### "I want to add a real FILE" — the decision tree
|
|
116
|
+
|
|
117
|
+
You CAN store content you **hold** — you send it inline. Pick by what you have:
|
|
118
|
+
|
|
119
|
+
| You have… | Do this | Result |
|
|
120
|
+
| ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
121
|
+
| **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) |
|
|
122
|
+
| 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` |
|
|
123
|
+
| Only a **URL/link** (no bytes) — a Google Doc, a PDF url, an article | `synap_create_document` with **`url`**, or attach via `entityId` | an external **reference** document (no bytes) |
|
|
124
|
+
| 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 |
|
|
125
|
+
| Only a file's **name**, nothing else | you **cannot** invent it — ask the human/client to provide the content or a link | — |
|
|
126
|
+
|
|
127
|
+
**A typed thing with a file → the KIND first, the bytes on it.** When a kind
|
|
128
|
+
exists for the thing (a logo is a `brand-asset`, not a `file`; check the space
|
|
129
|
+
brief or `synap_list_profiles`): (1) resolve-or-create that entity
|
|
130
|
+
(`synap_ask`, then `synap_create_entity`); (2) `synap_store_file` with
|
|
131
|
+
`attachToEntityId` = its id (`content` for SVG/text, `contentBase64` for
|
|
132
|
+
binary, ≤10MB inline; larger: `synap_request_upload`, then `uploadToken`); (3) link it /
|
|
133
|
+
`synap_file_into_project` if asked. A `proposed` create has no live id yet —
|
|
134
|
+
attach after approval. A bare `file` is only for bytes with no kind.
|
|
135
|
+
|
|
136
|
+
**Store ≠ analyze.** `synap_store_file` / `synap_create_document` store content
|
|
137
|
+
**deterministically — the file is NEVER read by an LLM.** Only fetch a document
|
|
138
|
+
and reason over it when the user explicitly says "read/analyze this file."
|
|
139
|
+
|
|
140
|
+
**Do NOT over-structure a file request.** "Store this file" / "how do I add this
|
|
141
|
+
file" is ONE intent → at most one stored file (plus, only if asked, a linking
|
|
142
|
+
relation). Never inflate it into a task + note + placeholder-file scaffold, and
|
|
143
|
+
never dump the request text into a note and call it done.
|
|
144
|
+
|
|
44
145
|
### Create a document (attach to an entity)
|
|
45
146
|
|
|
46
147
|
```json
|
|
@@ -53,11 +154,19 @@ POST /api/hub/documents
|
|
|
53
154
|
"type": "markdown", // "markdown" | "html" | "text" | "code"
|
|
54
155
|
"entityId": "ent_event_..." // attach to an entity for context
|
|
55
156
|
}
|
|
157
|
+
// → { "id": "doc_abc", "documentId": "doc_abc", "status": "created", "ackState": "applied",
|
|
158
|
+
// "attached": { "entityId": "ent_event_...", "documentId": "doc_abc", "status": "updated" } }
|
|
56
159
|
```
|
|
57
160
|
|
|
161
|
+
`attached` reports the attach outcome: it is a governed entity update, so it can
|
|
162
|
+
be `proposed`, and it is `skipped` (with a `reason`) while the document itself is
|
|
163
|
+
awaiting review. Other optional fields: `url` (an https link — creates a reference
|
|
164
|
+
document with no stored bytes), `idempotencyKey` (a retry with the same key returns
|
|
165
|
+
the prior document), `expectedLabel` (the session-output slot it fulfils).
|
|
166
|
+
|
|
58
167
|
`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.
|
|
59
168
|
|
|
60
|
-
**
|
|
169
|
+
**HTML document workflow:**
|
|
61
170
|
|
|
62
171
|
```json
|
|
63
172
|
// 1. Create the HTML document
|
|
@@ -66,53 +175,72 @@ POST /api/hub/documents
|
|
|
66
175
|
"title": "Q2 Revenue Report", "type": "html",
|
|
67
176
|
"content": "<!DOCTYPE html><html>…</html>",
|
|
68
177
|
"entityId": "ent_project_..." }
|
|
69
|
-
// → { "
|
|
70
|
-
|
|
71
|
-
// 2. Place the html-doc cell in any bento view
|
|
72
|
-
POST /api/hub/views/{bentoViewId}/arrange
|
|
73
|
-
{ "userId": "{userId}", "workspaceId": "{workspaceId}",
|
|
74
|
-
"widgets": [
|
|
75
|
-
{ "id": "b1", "kind": "html-doc", "config": { "documentId": "doc_abc" },
|
|
76
|
-
"layout": { "x": 0, "y": 0, "w": 8, "h": 6 } }
|
|
77
|
-
] }
|
|
178
|
+
// → { "id": "doc_abc", "documentId": "doc_abc", "status": "created", ... }
|
|
78
179
|
|
|
79
|
-
//
|
|
180
|
+
// 2. Replace the HTML (read it first: GET → `revision`)
|
|
80
181
|
PATCH /api/hub/documents/doc_abc
|
|
81
|
-
{ "userId": "{userId}", "content": "<!DOCTYPE html>…updated…</html>" }
|
|
182
|
+
{ "userId": "{userId}", "content": "<!DOCTYPE html>…updated…</html>", "baseRevision": 3 }
|
|
183
|
+
// → a pending proposal; readers see the new HTML only once it is approved
|
|
82
184
|
```
|
|
83
185
|
|
|
186
|
+
`html-doc` is **not** an agent-placeable bento widget: `arrange` rejects it. The
|
|
187
|
+
document renders where it is opened (the Files app, or the entity it is attached
|
|
188
|
+
to). For HTML you want to embed elsewhere, create an HTML cell instance
|
|
189
|
+
(`POST /api/hub/cell-instances/html`) and embed it by `instanceId`.
|
|
190
|
+
|
|
84
191
|
The iframe uses `sandbox="allow-scripts"` — scripts run but have no same-origin access to the parent app. The HTML is fully isolated.
|
|
85
192
|
|
|
86
|
-
### Update a document (
|
|
193
|
+
### Update a document's content (a patch, reviewed)
|
|
194
|
+
|
|
195
|
+
Change the part you mean, not the whole body. Read it first —
|
|
196
|
+
`GET /api/hub/documents/{id}?userId={userId}` → `content`, `revision`,
|
|
197
|
+
`sections` (id + owner) — then:
|
|
87
198
|
|
|
88
199
|
```json
|
|
89
|
-
|
|
200
|
+
POST /api/hub/documents/{documentId}/patch
|
|
90
201
|
{
|
|
91
202
|
"userId": "{userId}",
|
|
92
|
-
"
|
|
93
|
-
"
|
|
203
|
+
"baseRevision": 3,
|
|
204
|
+
"ops": [
|
|
205
|
+
{ "op": "replace_text", "old": "ships on Friday", "new": "ships on Monday" },
|
|
206
|
+
{ "op": "upsert_section", "id": "risks", "title": "Risks", "body": "None yet." }
|
|
207
|
+
]
|
|
94
208
|
}
|
|
95
209
|
```
|
|
96
210
|
|
|
97
|
-
|
|
211
|
+
Ops: `upsert_section {id, title, body}` (one section by id), `replace_text {old,
|
|
212
|
+
new}` (`old` must match **exactly once**, else 400 with the count), `append
|
|
213
|
+
{body}`, `replace_all {content}`. An agent's edit is filed as a proposal (a
|
|
214
|
+
governance rule may apply it directly); a person's section (`owner="human"`) is
|
|
215
|
+
never changed and an embed is never dropped unless you pass
|
|
216
|
+
`"allowRemovingEmbeds": true` (403 otherwise). A moved document answers 409 and
|
|
217
|
+
nothing is written: read again. An applied or approved edit reaches open editors
|
|
218
|
+
(`document:content-replaced`), so they reload instead of overwriting it. `PATCH /api/hub/documents/{id}` with `content` is the same door with
|
|
219
|
+
one `replace_all` — it cannot rename (a `title` is refused with 400; to rename an
|
|
220
|
+
entity's document, update the entity's title). MCP: `synap_update_document`;
|
|
221
|
+
full syntax in `document-embeds.md`.
|
|
98
222
|
|
|
99
223
|
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.
|
|
100
224
|
|
|
101
|
-
###
|
|
225
|
+
### Remember a fact about the user — use sparingly
|
|
102
226
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
227
|
+
A fact _about the user_ goes through `remember_fact` (CLI: `synap capture --type
|
|
228
|
+
observation`). It writes a governed `user_observation` — not an ungoverned
|
|
229
|
+
throwaway row: a fact the user explicitly stated auto-approves; a fact you
|
|
230
|
+
inferred returns `proposed` (normal — surface the review link). Because it's a
|
|
231
|
+
real entity it's addressable, linkable and revertible.
|
|
107
232
|
|
|
108
|
-
|
|
233
|
+
**Use it only for loose, unstructured, hard-to-title facts about the user** — a
|
|
234
|
+
stated preference, a throwaway detail. Everything with a title-worthy noun or
|
|
235
|
+
something to link to is an ENTITY through the capture door, not an observation.
|
|
109
236
|
|
|
110
|
-
**The test:** if the user later asked "show me all X,"
|
|
237
|
+
**The test:** if the user later asked "show me all X," could a loose observation
|
|
238
|
+
answer? It can only keyword-match — it has no structure. So:
|
|
111
239
|
|
|
112
240
|
| Input | Use |
|
|
113
241
|
| ------------------------------------------------------- | --------------------------------------------------------------- |
|
|
114
|
-
| "User prefers async communication" |
|
|
115
|
-
| "Garage code is 4321" |
|
|
242
|
+
| "User prefers async communication" | observation — it's a preference |
|
|
243
|
+
| "Garage code is 4321" | observation — throwaway fact |
|
|
116
244
|
| "Should we use LangGraph or CrewAI for Eve?" | **entity `question`** — substantive inquiry, start of flow |
|
|
117
245
|
| "Here's what I found comparing LangGraph and CrewAI…" | **entity `research`** — investigation with sources + conclusion |
|
|
118
246
|
| "We decided to use LangGraph over OpenClaude's native…" | **entity `decision`** — has title, rationale, project |
|
|
@@ -122,7 +250,7 @@ Always auto-approved. **Memory is for loose, unstructured, hard-to-title facts o
|
|
|
122
250
|
| "Action item from meeting: ship MVP by Friday" | **entity `task`** linked to the `event` (meeting) |
|
|
123
251
|
| "Agreed with Sarah: we'll split backend & frontend" | **entity `decision`** linked to Sarah + the project |
|
|
124
252
|
|
|
125
|
-
**Rule of thumb:** if it has a title-worthy noun OR context to link to (a project, a person, a meeting) OR a lifecycle (status/supersession) — it's an entity, not
|
|
253
|
+
**Rule of thumb:** if it has a title-worthy noun OR context to link to (a project, a person, a meeting) OR a lifecycle (status/supersession) — it's an entity through the capture door, not an observation. A user observation is the fallback, not the default.
|
|
126
254
|
|
|
127
255
|
**For decisions specifically** — use the `decision` system profile:
|
|
128
256
|
|
|
@@ -145,6 +273,8 @@ POST /api/hub/entities
|
|
|
145
273
|
|
|
146
274
|
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.
|
|
147
275
|
|
|
276
|
+
**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. 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.
|
|
277
|
+
|
|
148
278
|
### Post to the user's personal channel
|
|
149
279
|
|
|
150
280
|
```
|
|
@@ -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.
|