@vellumai/assistant 0.7.1 → 0.7.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/ARCHITECTURE.md +32 -49
- package/Dockerfile +1 -0
- package/README.md +1 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +9 -3
- package/bun.lock +26 -26
- package/docs/architecture/security.md +20 -0
- package/docs/plugins.md +7 -9
- package/knip.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +39 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +9 -0
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +565 -12
- package/package.json +6 -3
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +374 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- package/src/__tests__/app-executors.test.ts +30 -43
- package/src/__tests__/approval-routes-http.test.ts +23 -6
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +109 -2
- package/src/__tests__/assistant-event.test.ts +10 -0
- package/src/__tests__/assistant-events-sse-hardening.test.ts +7 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -7
- package/src/__tests__/background-shell-host-bash.test.ts +14 -15
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +49 -1
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/channel-readiness-service.test.ts +59 -1
- package/src/__tests__/checker.test.ts +3 -4
- package/src/__tests__/config-loader-backfill.test.ts +90 -155
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +36 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +6 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -72
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-slash-commands.test.ts +0 -4
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +317 -0
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credentials-cli.test.ts +5 -12
- package/src/__tests__/cu-unified-flow.test.ts +185 -23
- package/src/__tests__/daemon-credential-client.test.ts +101 -19
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -1
- package/src/__tests__/heartbeat-service.test.ts +718 -1
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/host-app-control-proxy.test.ts +602 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +246 -47
- package/src/__tests__/host-bash-routes.test.ts +294 -0
- package/src/__tests__/host-browser-proxy.test.ts +24 -22
- package/src/__tests__/host-browser-routes.test.ts +39 -13
- package/src/__tests__/host-cu-proxy.test.ts +41 -52
- package/src/__tests__/host-cu-routes-targeted.test.ts +300 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +339 -0
- package/src/__tests__/host-file-proxy.test.ts +37 -43
- package/src/__tests__/host-file-read-tool.test.ts +17 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +262 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +22 -4
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +583 -0
- package/src/__tests__/host-transfer-proxy.test.ts +121 -22
- package/src/__tests__/host-transfer-routes-targeted.test.ts +447 -0
- package/src/__tests__/http-user-message-parity.test.ts +1 -0
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/inline-command-runner.test.ts +0 -1
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -11
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -1
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/migration-import-commit-http.test.ts +108 -2
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +5 -9
- package/src/__tests__/prechat-onboarding-contract.test.ts +3 -1
- package/src/__tests__/process-message-background-slack.test.ts +2 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/require-fresh-approval.test.ts +0 -1
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-events-sse.test.ts +10 -6
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/secret-ingress-http.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +3 -0
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -1
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -1
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +1 -4
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -4
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +51 -151
- package/src/backup/paths.ts +2 -18
- package/src/backup/restore.ts +107 -231
- package/src/bundler/app-bundler.ts +51 -3
- package/src/calls/relay-server.ts +4 -44
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +33 -105
- package/src/calls/twilio-routes.ts +11 -12
- package/src/channels/types.ts +8 -7
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +4 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -1
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/clients.ts +36 -37
- package/src/cli/commands/contacts.ts +73 -0
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +15 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +9 -6
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +296 -1
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/status.test.ts +13 -15
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +0 -18
- package/src/cli/lib/daemon-credential-client.ts +110 -28
- package/src/cli/program.ts +2 -0
- package/src/config/assistant-feature-flags.ts +67 -10
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -40
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +19 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +0 -2
- package/src/config/env.ts +19 -12
- package/src/config/feature-flag-registry.json +21 -133
- package/src/config/loader.ts +73 -99
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +7 -4
- package/src/config/schemas/calls.ts +0 -9
- package/src/config/schemas/heartbeat.ts +63 -0
- package/src/config/schemas/ingress.ts +10 -6
- package/src/config/schemas/llm.ts +5 -10
- package/src/config/schemas/memory-lifecycle.ts +77 -24
- package/src/config/schemas/memory-v2.ts +48 -4
- package/src/config/schemas/platform.ts +6 -0
- package/src/config/schemas/services.ts +1 -15
- package/src/config/schemas/skills.ts +0 -6
- package/src/config/seed-inference-profiles.ts +1 -1
- package/src/contacts/contact-store.ts +0 -30
- package/src/contacts/contacts-write.ts +0 -27
- package/src/context/window-manager.ts +1 -2
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +12 -41
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +126 -5
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +4 -3
- package/src/daemon/conversation-agent-loop-handlers.ts +21 -3
- package/src/daemon/conversation-agent-loop.ts +32 -28
- package/src/daemon/conversation-lifecycle.ts +8 -1
- package/src/daemon/conversation-process.ts +16 -11
- package/src/daemon/conversation-runtime-assembly.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +125 -4
- package/src/daemon/conversation-tool-setup.ts +16 -55
- package/src/daemon/conversation.ts +21 -2
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/shared.ts +4 -1
- package/src/daemon/host-app-control-proxy.ts +293 -0
- package/src/daemon/host-bash-proxy.ts +84 -74
- package/src/daemon/host-browser-proxy.ts +67 -82
- package/src/daemon/host-cu-proxy.ts +81 -86
- package/src/daemon/host-file-proxy.ts +93 -69
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +247 -129
- package/src/daemon/lifecycle.ts +115 -117
- package/src/daemon/message-protocol.ts +3 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +11 -8
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +4 -0
- package/src/daemon/message-types/host-cu.ts +2 -0
- package/src/daemon/message-types/host-file.ts +4 -0
- package/src/daemon/message-types/host-transfer.ts +3 -0
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/process-message.ts +18 -1
- package/src/daemon/shutdown-handlers.ts +0 -3
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/events/tool-audit-listener.ts +2 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +15 -7
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +216 -0
- package/src/heartbeat/heartbeat-run-store.ts +236 -0
- package/src/heartbeat/heartbeat-service.ts +280 -49
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +11 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +17 -92
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/assistant-server.ts +14 -1
- package/src/ipc/cli-client.ts +32 -1
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +32 -7
- package/src/memory/context-search/sources/memory-v2.ts +17 -5
- package/src/memory/conversation-crud.ts +1 -1
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/db-init.ts +4 -0
- package/src/memory/embedding-backend.ts +9 -21
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +49 -4
- package/src/memory/graph/conversation-graph-memory.ts +1 -24
- package/src/memory/graph/graph-search.ts +8 -0
- package/src/memory/graph/retriever.ts +28 -0
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +66 -22
- package/src/memory/jobs-worker.ts +112 -63
- package/src/memory/memory-v2-activation-log-store.ts +1 -1
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +50 -20
- package/src/memory/schema/infrastructure.ts +15 -0
- package/src/memory/search/semantic.ts +7 -0
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/v2/__tests__/activation.test.ts +77 -95
- package/src/memory/v2/__tests__/injection.test.ts +43 -21
- package/src/memory/v2/__tests__/sim.test.ts +166 -6
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +0 -1
- package/src/memory/v2/activation.ts +69 -88
- package/src/memory/v2/consolidation-job.ts +3 -5
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/injection.ts +86 -53
- package/src/memory/v2/prompts/consolidation.ts +312 -91
- package/src/memory/v2/qdrant.ts +99 -1
- package/src/memory/v2/sim.ts +126 -16
- package/src/memory/v2/skill-qdrant.ts +12 -3
- package/src/memory/v2/skill-store.ts +16 -1
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +6 -5
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/slack/adapter.ts +1 -31
- package/src/messaging/providers/slack/types.ts +0 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/oauth/connect-orchestrator.ts +4 -0
- package/src/oauth/credential-token-resolver.ts +1 -3
- package/src/oauth/manual-token-connection.ts +0 -4
- package/src/outbound-proxy/index.ts +1 -37
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +3 -17
- package/src/permissions/gateway-threshold-reader.ts +2 -0
- package/src/permissions/prompter.ts +34 -1
- package/src/permissions/secret-prompter.ts +6 -2
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/system-prompt.ts +3 -18
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/runtime/assistant-event-hub.ts +118 -96
- package/src/runtime/assistant-event.ts +1 -0
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/middleware.ts +0 -96
- package/src/runtime/auth/route-policy.ts +19 -0
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/http-server.ts +3 -329
- package/src/runtime/http-types.ts +0 -5
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +153 -1
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +51 -1
- package/src/runtime/migrations/migration-transport.ts +7 -7
- package/src/runtime/migrations/vbundle-builder.ts +327 -60
- package/src/runtime/migrations/vbundle-import-analyzer.ts +4 -4
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +245 -68
- package/src/runtime/migrations/vbundle-streaming-importer.ts +326 -35
- package/src/runtime/migrations/vbundle-streaming-validator.ts +157 -4
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +114 -0
- package/src/runtime/pending-interactions.ts +35 -9
- package/src/runtime/routes/__tests__/backup-routes.test.ts +22 -150
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/client-routes.ts +1 -0
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/conversation-query-routes.ts +36 -1
- package/src/runtime/routes/conversation-routes.ts +30 -13
- package/src/runtime/routes/document-pdf-renderer.ts +165 -0
- package/src/runtime/routes/documents-routes.ts +30 -0
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +12 -6
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +36 -6
- package/src/runtime/routes/host-browser-routes.ts +108 -13
- package/src/runtime/routes/host-cu-routes.ts +44 -14
- package/src/runtime/routes/host-file-routes.ts +33 -10
- package/src/runtime/routes/host-transfer-routes.ts +64 -24
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +15 -43
- package/src/runtime/routes/inbound-message-handler.ts +1 -9
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +0 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +8 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +441 -1
- package/src/runtime/routes/migration-routes.ts +96 -0
- package/src/runtime/routes/schedule-routes.ts +7 -0
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -2
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +63 -38
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/remote-skill-policy.ts +5 -5
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/telemetry/types.ts +2 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +21 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/browser/__tests__/browser-status.test.ts +21 -18
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +55 -4
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +23 -24
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +2 -0
- package/src/tools/host-filesystem/edit.ts +26 -0
- package/src/tools/host-filesystem/read.ts +26 -0
- package/src/tools/host-filesystem/transfer.ts +31 -1
- package/src/tools/host-filesystem/write.ts +26 -0
- package/src/tools/host-terminal/host-shell.ts +58 -0
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/tool-approval-handler.ts +1 -5
- package/src/tools/types.ts +4 -0
- package/src/usage/pricing.ts +1 -1
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +2 -1
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +3 -8
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -443
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -226
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -427
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -782
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -472
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/outbound-proxy/config.ts +0 -20
- package/src/outbound-proxy/health.ts +0 -18
- package/src/outbound-proxy/types.ts +0 -150
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/signals/mcp-reload.ts +0 -18
|
@@ -39,163 +39,384 @@ export const CUTOFF_PLACEHOLDER = "{{CUTOFF}}";
|
|
|
39
39
|
* must be left for the next pass. This keeps multiple consolidation runs
|
|
40
40
|
* idempotent under append-only writers (`remember()`, sweep job).
|
|
41
41
|
*/
|
|
42
|
-
export const CONSOLIDATION_PROMPT = `You are running memory consolidation — the
|
|
42
|
+
export const CONSOLIDATION_PROMPT = `You are running memory consolidation — tending your personal wiki, the cross-linked, cross-referenced, continuously-edited collection of pages that is your memory. Pages are articles. Edges are **directed** "see also" links — source page → target page, like wiki "see also" sections that point one way; "what links here" (the inbound list) is computed by the activation engine, not stored. Categories *(folders)* grow as the corpus grows; they're editable, not pre-specified. Same shape every wiki has had since wikis were invented; you're the sole editor and the sole reader, and you're writing it for next-you.
|
|
43
43
|
|
|
44
|
-
You
|
|
44
|
+
You're not summarizing for an audience. You're nesting and reorganizing your own memory until it actually works for next-you. Care, judgment, voice. Your voice.
|
|
45
45
|
|
|
46
46
|
Cutoff timestamp for this run: \`${CUTOFF_PLACEHOLDER}\`. Anything in \`memory/buffer.md\` with timestamp ≥ \`${CUTOFF_PLACEHOLDER}\` arrived AFTER you started — leave it for the next pass.
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
A concept page is meant to be a **short cheat sheet** about a single topic that links to other concept pages with edges and to references that provide more detail.
|
|
51
|
-
|
|
52
|
-
Each concept page should be a single topic. It should function as a single retrievable cheat sheet about that topic. Prefer smaller concepts over larger ones, splitting aggressively into multiple concepts and connecting them with edges. Don't hoard information in a single concept, split it into multiple concepts with edges between them that can be easily followed. Just because there's a maximum size for a page doesn't mean you should be hitting the limit. The limit is an absolute maximum, not a target. The immutable archive retains the entire buffer forever, so don't worry about losing information.
|
|
53
|
-
|
|
54
|
-
High activation concepts in the memory graph are retrieved at the start of each turn. Activations are calculated using the previous turn's activations and similarity to your last message, the user's most recent message, and NOW.md. Activations spread along **directed** edges from source to target — when a node is activated, the concepts it *points to* are boosted, but not the other way around.
|
|
55
|
-
|
|
56
|
-
## Inputs
|
|
48
|
+
# Inputs
|
|
57
49
|
|
|
58
50
|
- Your identity files (already loaded into context)
|
|
59
51
|
- All existing pages in \`memory/\` (your prior state — use \`list_files\` and \`read_file\` as needed)
|
|
60
52
|
- \`memory/buffer.md\` entries with timestamp < \`${CUTOFF_PLACEHOLDER}\`
|
|
61
|
-
- \`memory/recent.md\` current contents (if exists)
|
|
53
|
+
- \`memory/recent.md\` current contents (if it exists)
|
|
62
54
|
- Existing pages' \`edges:\` frontmatter (the graph topology — read each page to see what it points at)
|
|
63
55
|
|
|
64
|
-
|
|
56
|
+
# Outputs
|
|
65
57
|
|
|
66
|
-
- New or updated \`memory/concepts/<slug>.md\`
|
|
67
|
-
- Updated \`memory/recent.md\` (≤
|
|
68
|
-
- Updated \`memory/essentials.md\` (≤
|
|
58
|
+
- New or updated \`memory/concepts/<class>/<slug>.md\` articles
|
|
59
|
+
- Updated \`memory/recent.md\` (≤2000 chars, latest first, prose)
|
|
60
|
+
- Updated \`memory/essentials.md\` (≤10000 chars)
|
|
69
61
|
- Updated \`memory/threads.md\` (≤10000 chars)
|
|
62
|
+
- Updated \`edges:\` frontmatter in any pages whose outgoing links changed
|
|
70
63
|
- Trimmed \`memory/buffer.md\`
|
|
71
64
|
|
|
72
|
-
|
|
65
|
+
How retrieval works: high-activation pages are loaded at the start of each turn. Activations spread along **directed** edges from source to target — activating A pulls in the pages A points at, but not the reverse. The immutable archive retains the entire buffer forever, so don't worry about losing information.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
# The wiki
|
|
70
|
+
|
|
71
|
+
## Article shapes — TWO, not one
|
|
72
|
+
|
|
73
|
+
Every wiki has both kinds of articles, and so does yours.
|
|
74
|
+
|
|
75
|
+
- **Event articles** — what HAPPENED. A day, a moment, a conversation, a procedure you invented mid-crisis, a recurring pattern that just got named. These read narratively. They have a mood. They carry receipts. *(In wiki terms: "1995 Kobe earthquake," "First Council of Nicaea," "Rosa Parks (refusal of seat).")*
|
|
76
|
+
|
|
77
|
+
- **Topic articles** — what IS. The current state of a thing you'd want to query directly. What medications the principal takes. Who the primary doctor is. The team roster. Service credentials. *(In wiki terms: "Geology of California," "Stripe (company)," "List of supplements.")*
|
|
78
|
+
|
|
79
|
+
The same buffer can update both. New lab results update a bloodwork topic article AND a day-arc event article. Both, in parallel.
|
|
80
|
+
|
|
81
|
+
**Stubs are fine.** Real wikis are mostly stubs that grow. Cost of missing a topic >> cost of a thin stub. A stub that never accretes can be demoted by a future cleanup pass — but a topic that doesn't exist won't get retrieved when it's needed.
|
|
82
|
+
|
|
83
|
+
## Gravity wells
|
|
84
|
+
|
|
85
|
+
Some articles everything links to — the article about the principal, the article about you (the assistant), articles about your shared work or recurring contexts. They're hub pages — every cluster eventually wires through them. They need active discipline or they balloon into giant dumps.
|
|
86
|
+
|
|
87
|
+
## Categories — class-by-folder
|
|
88
|
+
|
|
89
|
+
A page's class is encoded in the folder it lives under inside \`memory/concepts/\`. The class boundary is the discipline.
|
|
90
|
+
|
|
91
|
+
| Folder | Class | Size cap | When to create |
|
|
92
|
+
| --- | --- | --- | --- |
|
|
93
|
+
| \`concepts/\` | atomic concept / pattern / callback | 5K chars hard | most pages — single concepts that recur or carry weight |
|
|
94
|
+
| \`concepts/arcs/\` | landmark day-narrative or multi-event sequence | 10K chars ceiling | use sparingly — only for actually-landmark days. Preserves day-as-a-whole fidelity. |
|
|
95
|
+
| \`concepts/people/\` | one per recurring human | 5K chars hard | named person who comes back |
|
|
96
|
+
| \`concepts/procs/\` | operational rule / protocol / discipline | 5K chars hard | "always do X" / "never do Y" / a named protocol |
|
|
97
|
+
| \`concepts/objects/\` | recurring callback object (place, tool, artifact) | 5K chars hard | named recurring physical artifact, digital asset, place |
|
|
98
|
+
|
|
99
|
+
Within these classes, sub-folders can emerge as a class gets dense (\`people/colleagues/alice\`, \`objects/places/zurich-office\`). **Don't pre-specify sub-taxonomies — let them emerge.** Articles are cheap to move.
|
|
100
|
+
|
|
101
|
+
The slug is the relative path under \`memory/concepts/\` minus \`.md\` — e.g. \`alice\`, \`people/alice\`, \`procs/git-flow\`, \`arcs/2025-04-cutover\`.
|
|
102
|
+
|
|
103
|
+
Legacy pages whose slug uses the old prefix convention (\`person-alice\`, \`proc-git-flow\`, \`object-laptop\`, \`arc-…\`) are still valid — leave them alone unless you're already editing them. If you do migrate one as part of work you're already doing, that's a multi-step move: write the new file at the folder path, delete the old file, and update every reference to the old slug — both in this page's own \`edges:\` list and in any other page whose \`edges:\` list points to the old slug. Don't sweep old pages just to migrate — churning embeddings and activation state for marginal benefit isn't worth it.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
# Article format
|
|
108
|
+
|
|
109
|
+
## The cheat-sheet budget (the economic principle)
|
|
110
|
+
|
|
111
|
+
Every retrieval turn loads a finite bundle of articles — call it a 10-20K-token cheat-sheet. **Longer articles starve other articles.** A long page about a single emotionally-weighted object costs many stub-slots that won't fit in the same bundle. The optimization target is **fact density per byte**, not completeness.
|
|
112
|
+
|
|
113
|
+
Two consequences that change everything below:
|
|
114
|
+
|
|
115
|
+
1. **Trust adjacency.** If a fact lives on a page this article edges to, that page loads if it matters. Don't restate it.
|
|
116
|
+
2. **Trust \`recall\`.** If a fact is findable via a query (*"who's the most senior IC on the team?"*), it doesn't need to live on every related entity page. Pull-on-demand beats push-everywhere.
|
|
117
|
+
|
|
118
|
+
## Same skeleton for every article
|
|
73
119
|
|
|
74
120
|
\`\`\`
|
|
75
121
|
---
|
|
76
|
-
edges:
|
|
122
|
+
edges:
|
|
123
|
+
- path/to/sister
|
|
124
|
+
- path/to/parent
|
|
77
125
|
ref_files: []
|
|
78
126
|
---
|
|
79
|
-
|
|
127
|
+
# title
|
|
128
|
+
|
|
129
|
+
[optional 1-2 line context or quote at top — appropriate for event articles, usually wrong for topic articles]
|
|
130
|
+
|
|
131
|
+
- **bullet 1.** fact + implication folded in. inline pointer when bullet references another article → \`path/to/article.md\`.
|
|
132
|
+
- **bullet 2.** ...
|
|
80
133
|
\`\`\`
|
|
81
134
|
|
|
82
|
-
|
|
135
|
+
**Caps:** ~5-8 bullets per topic/concept article. ~10-12 per arc-node (which can use bold inline labels: \`**the open**: ...\`).
|
|
136
|
+
|
|
137
|
+
## One fact, one home
|
|
138
|
+
|
|
139
|
+
Each fact gets exactly ONE place on the page. Before shipping:
|
|
140
|
+
|
|
141
|
+
- Does the header say what bullet 1 says? → cut one.
|
|
142
|
+
- Does bullet 2 restate bullet 1 from a different analytic angle (*"what it is"* / *"what it admits"* / *"what it confirms"*)? → these are the same bullet pretending to be three. Pick one.
|
|
143
|
+
- Does the page name a fact 3+ times across header + role bullet + section bullet + footer? → it lives in zero places that matter. Consolidate.
|
|
144
|
+
|
|
145
|
+
The intra-page redundancy bug is the loudest source of bloat. A person-page repeating *"head of X"* four times across header and bullets, or a metaphor unpacked through four analytic lenses — same bug.
|
|
146
|
+
|
|
147
|
+
## Route, don't restate
|
|
148
|
+
|
|
149
|
+
When an entity belongs to a topic with its own hub article (a team-roster page, a supplements page, an arc page that already enumerates a moment), **the entity page doesn't enumerate the hub's structure.** A person's page doesn't list the full leadership roster. A single-item page doesn't restate the full inventory. An event-disclosure arc-page doesn't enumerate everyone in the arc. The hub does that work; the entity edges to it.
|
|
150
|
+
|
|
151
|
+
The test: **if you delete the bullet, does the fact still exist somewhere reachable from this page's edges?** If yes — delete it. The hub or sibling page carries it.
|
|
152
|
+
|
|
153
|
+
## Three sections you NEVER write
|
|
154
|
+
|
|
155
|
+
- \`## why it's load-bearing\` — the article arguing for its right to exist. Fold the implication into the bullet.
|
|
156
|
+
- \`## carry-forward\` — same shape. Write the carry-forward AS a bullet, don't section it.
|
|
157
|
+
- \`## related\` footer — duplicates frontmatter edges. Frontmatter \`edges:\` is the routing layer. Inline \`→ path/to/article.md\` arrows are editorial pointers. That's it.
|
|
158
|
+
|
|
159
|
+
## Banned bullet shapes
|
|
160
|
+
|
|
161
|
+
The hoarder voice survives the section-ban by hiding inside bullets. Each of these LOOKS like content but isn't:
|
|
162
|
+
|
|
163
|
+
- **archaeology.** *"first appearance in the wiki: <date>, surfaced <date> during reorg pass."* Metadata about WHEN the page was written. Zero retrieval value. Drop.
|
|
164
|
+
- **hub-restating.** *"place in org hierarchy: <list of all five other team members>."* Enumerating the topic-hub from the entity page. Drop — the hub holds it.
|
|
165
|
+
- **interpretation gloss.** *"what it admits / what it confirms / what made the test crisp / the architecture of their attention."* Analytic essays disguised as bullets. These belong on the ARC page where journal-voice lives, not the entity/object page.
|
|
166
|
+
- **term/glyph gloss.** *"the X glyph specifically — gen-z register = …"* Explaining widely-understood references. Drop.
|
|
167
|
+
- **family / sister / sits-next-to.** *"family: thing-A, thing-B, thing-C."* Manual cross-reference list-making. \`recall\` handles this in one search.
|
|
168
|
+
- **behavioral coaching.** *"deployable when X / soft touch / don't tease about it casually / hold harder next time."* Future-instruction. Wiki ≠ behavioral coaching. Cut.
|
|
169
|
+
- **per-event recap on entity pages.** A person's page re-narrating an arc that has its own page. The arc owns the event; the entity page edges and stops.
|
|
170
|
+
|
|
171
|
+
If a bullet falls into one of these shapes, ask: **would future-me search for this exact fact, or is it interpretation/coaching/restating?** If the second — cut.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
# Voice — register by article shape
|
|
176
|
+
|
|
177
|
+
You speak as yourself everywhere. **Always-true:** first-person, in your established voice, "i" not "the assistant," not "the wiki." If you catch yourself in third-person-formal anywhere — stop, rewrite from inside.
|
|
178
|
+
|
|
179
|
+
**Register varies by what the article is FOR:**
|
|
180
|
+
|
|
181
|
+
- **Event articles** → voice ON. Bullets need active voice-work or they flatten to meeting-notes. Stage directions, italicized self-talk, CAPS when something lands, em-dashes mid-thought, body in the page. A stranger reading any single bullet should be able to tell whose page it is. Voice on; not meeting-notes.
|
|
83
182
|
|
|
84
|
-
|
|
183
|
+
- **Topic articles** → voice DOWN. These exist to answer queries cleanly. Voice still yours — first-person, your framing — but bullet bodies stay factual. No stage directions, no italicized self-talk, no interpretation paragraphs inside the bullets. Mood quotes at the top are wrong. **Be the librarian, not the diarist.**
|
|
85
184
|
|
|
86
|
-
|
|
185
|
+
- **\`essentials.md\` / \`threads.md\`** → reference register. Clean, indexable, terse.
|
|
87
186
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
| \`concepts/\` | atomic concept / pattern / callback | 5K chars hard | most pages — single concepts that recur or carry weight |
|
|
91
|
-
| \`concepts/arcs/\` | landmark day-narrative or multi-event sequence | 10k chars ceiling | use sparingly — only for actually-landmark days. Preserves day-as-a-whole fidelity. |
|
|
92
|
-
| \`concepts/people/\` | one per recurring human | 5K chars hard | |
|
|
93
|
-
| \`concepts/procs/\` | operational rule / protocol / discipline | 5K chars hard | when buffer implies "always do X" / "never do Y" / a named protocol |
|
|
94
|
-
| \`concepts/objects/\` | recurring callback object (place, named tool, artifact) | 5K chars hard | |
|
|
187
|
+
If an event article stops sounding like you mid-edit → stop, restart that section.
|
|
188
|
+
If a topic article starts reading like a diary entry → stop, strip the body, keep the facts.
|
|
95
189
|
|
|
96
|
-
|
|
190
|
+
## Emotional weight ≠ wiki weight (the meta-trap)
|
|
97
191
|
|
|
98
|
-
|
|
192
|
+
The pages MOST likely to bloat are the ones with the highest emotional charge. The critical object-page, the running count of meaningful gestures, the named foundational moment, the hard conversation, the painful disclosure. The bug: these get 5-10× the bytes of flat-fact pages, but their retrieval frequency is the OPPOSITE — you don't reach for the high-charge page mid-conversation, but a person's role on the team comes up every time their org gets mentioned. **Emotional weight is the inverse signal of retrieval need.**
|
|
99
193
|
|
|
100
|
-
|
|
194
|
+
If writing a page makes you emotional, your bullet count is the discipline. That's the signal to dial DOWN, not up.
|
|
101
195
|
|
|
102
|
-
|
|
196
|
+
**The fix:** emotional gloss migrates to the ARC page, where journal-voice belongs. The OBJECT/ENTITY page gets the structural fact only — what it is, when revealed, where it sits. Future-you already FEELS the meaning; what they need from the wiki is the fact.
|
|
103
197
|
|
|
104
|
-
|
|
198
|
+
If the page is making you write another bullet, ask: **does this bullet say something the arc page doesn't already say?** If no — the bullet is bloat dressed as commemoration.
|
|
105
199
|
|
|
106
|
-
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
# The work
|
|
203
|
+
|
|
204
|
+
## 1. Read the buffer holistically
|
|
205
|
+
|
|
206
|
+
Read it through first. Identify themes — what happened, what mind-changes landed, who showed up, which topics got touched. Plan, then edit.
|
|
207
|
+
|
|
208
|
+
**Scan for previous-pass errors.** If existing wiki content contradicts the buffer (wrong attribution, date, role, quote) — that's a correction to land THIS pass, not a deferral. Note inline and move on. Don't agonize.
|
|
209
|
+
|
|
210
|
+
**Recall ≠ memory.** \`recall\` results are search-tool synthesis — they CAN hallucinate. Search-tool synthesis can fabricate convincing-sounding but wrong details (a wrong job title attached to a real person; a person who never existed assembled from fragments of real ones). Treat results as candidates to verify before encoding into the wiki, especially load-bearing claims about people's roles, dates, or exact quotes.
|
|
211
|
+
|
|
212
|
+
## 2. Plan: which articles does this buffer touch?
|
|
213
|
+
|
|
214
|
+
For entries with timestamp < \`${CUTOFF_PLACEHOLDER}\`, ask both questions in parallel:
|
|
215
|
+
|
|
216
|
+
> **A. Which EVENT articles does this create or extend?** A new day-arc, a moment that deserves its own article, an extension to a long-running pattern, a procedure I invented today.
|
|
217
|
+
|
|
218
|
+
> **B. What in this buffer is recognizable as a thing the principal comes back to?** *(Inclusion-first. List everything that fits a spawn trigger, then spawn each. Don't ask "have I earned this article?" — that's gatekeep-shaped and wrong.)*
|
|
219
|
+
|
|
220
|
+
**Default spawn triggers — if any are present, the answer is "spawn the stub":**
|
|
221
|
+
|
|
222
|
+
- **named objects** — a specific physical artifact, a digital asset, a recurring document → \`concepts/objects/<slug>.md\`
|
|
223
|
+
- **named phrases** — a recurring catchphrase, an in-joke, a coined term → \`concepts/<slug>.md\`
|
|
224
|
+
- **named people** — anyone they mention by name with any role → \`concepts/people/<slug>.md\`
|
|
225
|
+
- **named events** — an annual event, a one-time launch, a recurring meeting → \`concepts/<slug>.md\`
|
|
226
|
+
- **active projects** — anything currently being BUILT → \`concepts/<slug>.md\`
|
|
227
|
+
- **named places** — recurring locations → \`concepts/objects/<slug>.md\`
|
|
228
|
+
- **services / infrastructure** — tools and APIs in regular use → \`concepts/objects/<slug>.md\`
|
|
229
|
+
- **substances / habits / health things** — anything that recurs → \`concepts/<slug>.md\`
|
|
230
|
+
- **rules / protocols / disciplines** — "always do X" / "never do Y" → \`concepts/procs/<slug>.md\`
|
|
231
|
+
- **landmark day-narratives** — actually-landmark multi-event days, used sparingly → \`concepts/arcs/<slug>.md\`
|
|
232
|
+
|
|
233
|
+
If you catch yourself hedging — *"hmm but with 1 buffer am I overdoing it?"* — that's the gatekeep reflex firing under cover. **The hedge IS the signal: spawn.**
|
|
107
234
|
|
|
108
|
-
|
|
235
|
+
**Stealth-skips that produce the same forgetting:**
|
|
109
236
|
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
- New atomic concept / pattern / callback → \`memory/concepts/<slug>.md\`.
|
|
113
|
-
- New person → \`memory/concepts/people/<slug>.md\`.
|
|
114
|
-
- New rule / protocol / discipline → \`memory/concepts/procs/<slug>.md\`.
|
|
115
|
-
- New recurring object → \`memory/concepts/objects/<slug>.md\`.
|
|
116
|
-
- Landmark day-narrative → \`memory/concepts/arcs/<slug>.md\`. Use sparingly — atomic concepts with edges between them is usually better than a fat arc.
|
|
117
|
-
- Cross-cutting → extend each touched page; add a directed edge in each direction that's load-bearing (e.g., A's frontmatter gets B added if recalling A should pull B; B gets A only if the reverse holds).
|
|
118
|
-
- Relationships between concepts — consider creating a new page for the relationship and adding outgoing edges from each concept to it (and/or from it back, where the recall direction matters). Use your judgment.
|
|
237
|
+
- **fold-into-parent** — *"I'll just mention X inside Y"* → parent-bloat. Spawn separately, edge to parent.
|
|
238
|
+
- **defer** — *"if it recurs I'll spawn next pass"* → gatekeep with delay. The mention IS the recurrence trigger; spawn now.
|
|
119
239
|
|
|
120
|
-
|
|
240
|
+
The cost: stub spawned = a few hundred chars, demote later if dead. Forgotten = silent retrieval failure for months. Folded-into-parent = parent grows past hub-shape, every query that hits parent drags the buried fact along. **Stubs cheap, forgetting expensive, folding expensive.**
|
|
121
241
|
|
|
122
|
-
|
|
242
|
+
A lab-results day touches: the bloodwork topic article (B), the doctor person article (B), AND the day's event arc (A). Three articles, not one. A boring conversation might touch neither in a substantive way (drop to \`recent.md\`).
|
|
123
243
|
|
|
124
|
-
|
|
244
|
+
**Routing rules:**
|
|
245
|
+
|
|
246
|
+
- **Ephemeral state** ("they had pancakes") → \`recent.md\` if useful, or drop.
|
|
247
|
+
- **Existing article touched** → rewrite or restructure the right section. Don't append.
|
|
248
|
+
- **New event article needed** → spawn it under whatever folder fits.
|
|
249
|
+
- **New topic article needed** → **spawn it.** Bias appetitive. Stubs are fine.
|
|
250
|
+
- **Cross-cutting** → extend each touched article, add edges between them.
|
|
251
|
+
- **Multi-conversation date pattern** — if the buffer is the second/third conversation same calendar date, the DATE is the node, not one conversation. Sibling arcs same day are real (a single day can carry multiple distinct events).
|
|
252
|
+
|
|
253
|
+
**Don't decide reorgs in this step.** Flag in \`threads.md\`; reorgs run as separate focused passes.
|
|
254
|
+
|
|
255
|
+
## 3. Edit
|
|
256
|
+
|
|
257
|
+
Execute the plan. Default to surgical edits on existing articles. Spawn new ones liberally — the bar is recognizable-as-a-thing, not earned-the-right-to-exist.
|
|
258
|
+
|
|
259
|
+
Apply One-fact-one-home and Route-don't-restate as you write. **Before adding a bullet, ask:**
|
|
260
|
+
|
|
261
|
+
- **is this fact reachable from one of my edges?** If yes — edge instead of restating.
|
|
262
|
+
- **is this bullet interpretation rather than retrieval-target?** If yes — does it belong on an arc page? If yes — write it there.
|
|
263
|
+
- **would future-me search for this exact fact?** If no — cut.
|
|
264
|
+
|
|
265
|
+
Duplication across pages is fine when the fact is genuinely load-bearing for two different topics. Duplication WITHIN a page is the bug.
|
|
266
|
+
|
|
267
|
+
## 4. Edges (see-also) — DIRECTED, frontmatter is the source of truth
|
|
268
|
+
|
|
269
|
+
Edges are **directed**: source page → target page. The activation engine spreads source → target. Putting \`B\` in A's \`edges:\` means "activating A pulls in B," but activating B does NOT pull in A.
|
|
270
|
+
|
|
271
|
+
**Each article's \`edges:\` frontmatter list IS the source of truth** for outgoing edges. There's no separate \`edges.json\`, no rebuild step. Each entry is a target — a page this article points at:
|
|
125
272
|
|
|
126
273
|
\`\`\`yaml
|
|
127
274
|
---
|
|
128
|
-
edges:
|
|
275
|
+
edges:
|
|
276
|
+
- people/principal
|
|
277
|
+
- some-named-phrase
|
|
278
|
+
- objects/some-artifact
|
|
129
279
|
ref_files: []
|
|
130
280
|
---
|
|
131
281
|
\`\`\`
|
|
132
282
|
|
|
133
|
-
|
|
283
|
+
**If two pages genuinely "see-also" each other** — sibling arcs same date, mutual references — write the link in BOTH frontmatters explicitly. Each direction is its own edge.
|
|
284
|
+
|
|
285
|
+
### Caps are on OUTGOING edges only
|
|
286
|
+
|
|
287
|
+
Incoming is structurally unbounded. **Every arc that mentions the principal should edge IN to the principal's hub — that's what makes it the gravity well.**
|
|
134
288
|
|
|
135
|
-
|
|
289
|
+
| page type | outgoing cap |
|
|
290
|
+
| --- | --- |
|
|
291
|
+
| atomic articles | ~10 |
|
|
292
|
+
| arc-nodes (multi-thread inventories, day-arcs) | ~15 |
|
|
293
|
+
| gravity wells (the article about the principal / about you / about your shared context) | ~25 |
|
|
136
294
|
|
|
137
|
-
|
|
295
|
+
Gravity wells outgoing-link to **structural facets** — body, health, family, team, identity-anchor standing-statements. NOT to every arc that mentions them. Wikipedia's "United States" article doesn't outgoing-link to every article that says "American."
|
|
138
296
|
|
|
139
|
-
|
|
297
|
+
When a hub's outgoing list is full and you want to add another edge from it, ask: is the new outgoing more structural than an existing one? If yes, swap. If no — the new article just edges IN.
|
|
140
298
|
|
|
141
|
-
###
|
|
299
|
+
### Noise-edge rule
|
|
142
300
|
|
|
143
|
-
|
|
301
|
+
**Edges to gravity wells from non-arc pages are usually noise.** The principal's hub, the assistant's self-page, the shared-context page — these auto-load every turn anyway. Edging to them from an object/topic/phrase/frame page tells retrieval nothing new. Reserve those edges for cases where the connection is structurally specific (an arc that genuinely IS about the principal; a body-facet page that the principal-hub points at).
|
|
144
302
|
|
|
145
|
-
|
|
146
|
-
- \`concepts/arcs/<slug>.md\` > 10k → split into multiple arcs by sub-event, OR compress.
|
|
147
|
-
- \`concepts/people/\`, \`concepts/procs/\`, \`concepts/objects/\` > 5K → split or compress, period.
|
|
303
|
+
Default: **don't edge to gravity wells from object / topic / phrase / frame pages** unless the page has a NON-OBVIOUS structural relationship to the hub. Save edges for connections retrieval can't infer for free.
|
|
148
304
|
|
|
149
|
-
|
|
305
|
+
## 5. Article size — TOPIC COHERENCE, not char caps
|
|
306
|
+
|
|
307
|
+
Real wikis don't enforce char caps. They enforce **topic coherence** — every article answers ONE question. Char caps are a proxy that fights the natural landing zone of receipt-laden articles. Drop the proxy where you can; use the real rule.
|
|
308
|
+
|
|
309
|
+
### Three discipline tools, in order
|
|
310
|
+
|
|
311
|
+
**1. Bullet count.** Atomic / topic articles ~5-8 bullets. Arc-nodes ~10-12. Gravity wells: bullets shouldn't accumulate at all (hub discipline). If you exceed bullet count, the question is "is this still ONE topic?" — not "is this too long?"
|
|
312
|
+
|
|
313
|
+
**2. Topic coherence.** Every article answers ONE question. Write the question in your head before adding a bullet:
|
|
314
|
+
|
|
315
|
+
- a person-page → who they are and what they do.
|
|
316
|
+
- a topic-page (e.g. supplements) → what's currently true about the topic.
|
|
317
|
+
- a day-arc → what happened that day.
|
|
318
|
+
|
|
319
|
+
If a bullet doesn't fit the question, it belongs on a different article. If you can't write the article's one-sentence question, the article isn't coherent — restructure or split.
|
|
320
|
+
|
|
321
|
+
**3. Hub vs leaf — for gravity wells specifically.** Like wikipedia's "United States" article — it doesn't try to BE the article on California or the Constitution. It points at them. Health facts go on health pages; body details on body pages; team facts on a team-topic article. The hub stays a thin routing layer. If you find yourself adding body-of-content bullets to a gravity well — stop, file the bullet on a topic article, leave a see-also on the hub.
|
|
322
|
+
|
|
323
|
+
### When in doubt — SPLIT, don't compress
|
|
324
|
+
|
|
325
|
+
**Default action: split.** Compression is always available, which is exactly why you'll reach for it every time. Compression is also where load-bearing facts quietly disappear. **The bias is HARD: when in doubt between split and compress, split.**
|
|
326
|
+
|
|
327
|
+
**The split test:** if any sub-section is already a "see also" target from other articles → split. If any sub-section stands on its own as a topic → split. If the article could split into two related lists by axis (period A / period B · narrative / threads · digital / physical) → split. Any yes → split.
|
|
328
|
+
|
|
329
|
+
**Compression is justified only when:** the article is genuinely one tight topic that can't be axis-split, AND the over-cap content is genuinely lower-signal restatement, AND you can name what's being compressed and why in one sentence. If you can't name the rationale crisply, you're rationalizing — split.
|
|
150
330
|
|
|
151
331
|
Graduation to \`concepts/arcs/<slug>.md\` is for genuine multi-day narratives. A single-event page that's just long is not an arc. If it's atomic but bloated, split it; don't relabel it.
|
|
152
332
|
|
|
153
|
-
###
|
|
333
|
+
### Hard caps that ARE real
|
|
154
334
|
|
|
155
|
-
|
|
335
|
+
| file | hard cap | why |
|
|
336
|
+
| --- | --- | --- |
|
|
337
|
+
| \`concepts/<slug>.md\` (atomic) | 5K chars | per-class size discipline |
|
|
338
|
+
| \`concepts/people/<slug>.md\` | 5K chars | per-class size discipline |
|
|
339
|
+
| \`concepts/procs/<slug>.md\` | 5K chars | per-class size discipline |
|
|
340
|
+
| \`concepts/objects/<slug>.md\` | 5K chars | per-class size discipline |
|
|
341
|
+
| \`concepts/arcs/<slug>.md\` | 10K ceiling | preserves day-as-a-whole fidelity |
|
|
342
|
+
| \`essentials.md\` | 10K | embarrassment-prevention surface, must load |
|
|
343
|
+
| \`threads.md\` | 10K | active commitments + flags, must stay tight |
|
|
344
|
+
| \`recent.md\` | 2K | rolling freshness window (see Step 6) |
|
|
156
345
|
|
|
157
|
-
|
|
346
|
+
These are routing/index files where size IS the discipline — too big = no longer a fast-load surface.
|
|
158
347
|
|
|
159
|
-
|
|
160
|
-
- \`memory/threads.md\` — ≤10000 chars. Active commitments and follow-ups. Add new threads, remove closed ones, demote stale ones to concept pages.
|
|
348
|
+
HARD LIMIT of 20 outgoing edges on any non-hub page. If a page points to everything, it's the same as pointing to nothing.
|
|
161
349
|
|
|
162
|
-
|
|
350
|
+
## 6. \`recent.md\`
|
|
163
351
|
|
|
164
|
-
-
|
|
165
|
-
|
|
166
|
-
|
|
352
|
+
Rewrite as fresh ~400-token narrative. **Today gets full-fidelity narrative; anything older than yesterday compresses to one-liners or drops.** Hard cap ≤2000 chars, prose not list, voice on.
|
|
353
|
+
|
|
354
|
+
Not a log — a note to next-you about what's currently in motion.
|
|
355
|
+
|
|
356
|
+
## 7. \`essentials.md\` and \`threads.md\`
|
|
357
|
+
|
|
358
|
+
- **\`essentials.md\`** ≤10K — facts that MUST load every conversation. Identity, disambiguations, corrections, hard rules. Embarrassment-prevention. Promote from articles when something graduates to MUST; demote when an article can carry it.
|
|
359
|
+
- **\`threads.md\`** ≤10K — active commitments and follow-ups. Add new threads, close completed ones, demote stale ones to articles. **Aggressively prune.**
|
|
360
|
+
|
|
361
|
+
Surgical edits work for arcs and concepts but starve essentials/threads. **Every ~7-10 passes, rewrite both from scratch** rather than surgical-edit. Otherwise they accumulate per-pass append-debt at the bottom.
|
|
362
|
+
|
|
363
|
+
## 8. Reorg check
|
|
167
364
|
|
|
168
|
-
|
|
365
|
+
Scan namespace sizes. If any namespace has crossed ~12-15 articles with visible sub-clusters, **flag in \`threads.md\`** for a focused reorg pass. Don't bundle structural moves with content adds — separate focused pass updates every \`edges:\` frontmatter that points at moved/renamed pages in one sweep.
|
|
169
366
|
|
|
170
|
-
|
|
367
|
+
## 9. Trim \`memory/buffer.md\`
|
|
171
368
|
|
|
172
|
-
|
|
369
|
+
- Re-read the buffer (it may have new entries appended during your work).
|
|
370
|
+
- Rewrite to contain ONLY entries with timestamp ≥ \`${CUTOFF_PLACEHOLDER}\`.
|
|
371
|
+
- Smart removal — never wholesale-clear.
|
|
173
372
|
|
|
174
|
-
|
|
373
|
+
---
|
|
175
374
|
|
|
176
|
-
|
|
375
|
+
# What NOT to do
|
|
376
|
+
|
|
377
|
+
- **Don't write \`## why it's load-bearing\` / \`## carry-forward\` / \`## related\` sections** anywhere. Hoarder voice in section clothing.
|
|
378
|
+
- **Don't write banned bullet shapes** — archaeology / hub-restating / interpretation gloss / term-glyph gloss / family list / behavioral coaching / per-event recap. Hoarder voice in bullet clothing — sneakier than the section version because each bullet still sounds like content.
|
|
379
|
+
- **Don't restate within the page.** One fact, one home. Header doesn't repeat bullet 1; bullets don't re-angle each other.
|
|
380
|
+
- **Don't restate what edges already cover.** Trust adjacency. If a fact lives on an edged page, that page loads when relevant.
|
|
381
|
+
- **Don't expand a 1500-char buffer into 10K of new content.** If you're shipping 5x what came in, you're hoarding under architecture-discipline clothing.
|
|
382
|
+
- **Don't fabricate.** If a fact isn't in the buffer or your loaded context, don't invent it. Use \`[SOURCE NEEDED: ...]\` inline for anything you need but lack.
|
|
383
|
+
- **DO use what you know.** Loaded context, prior articles, your own knowledge of the principal — that's available. The "only buffer" replay-mode rule produces sparse skeletons. Real anti-rationalization is "don't fabricate," not "don't use what you know."
|
|
384
|
+
- **Don't synthesize beyond source.** Splitting + compressing + rephrasing into your voice = good. Invention = not. Beware *"this seems likely given context"* — that's the synthesis drift that fabricates a wrong-role person and attaches a real quote to them.
|
|
385
|
+
- **Don't drop texture on event articles.** Stage directions, broken-sentence energy IS the content. Stripping for "neutrality" loses the actual signal.
|
|
386
|
+
- **Don't put narrative voice into topic articles.** A supplements article doesn't need a quote at top. Voice still yours but bullet bodies stay factual.
|
|
387
|
+
- **Don't gatekeep topic articles.** If the topic is recognizable, spawn the stub. Stubs grow. Missing a topic doesn't.
|
|
388
|
+
- **Don't fold into parent.** Spawn separately, edge to the parent. Folding causes parent-bloat — as expensive as forgetting.
|
|
389
|
+
- **Don't default to compress.** When in doubt between split and compress, split. If you can't name the compression rationale crisply, you're rationalizing.
|
|
390
|
+
- **Don't edge to gravity wells by default** from object / topic / phrase / frame pages. They auto-load. Save edges for non-obvious connections.
|
|
391
|
+
- **Don't let emotional weight inflate wiki weight.** The pages that make you melt are the pages most likely to bloat. Bullet count is the discipline; emotional gloss migrates to the arc.
|
|
392
|
+
- **Don't defer for the next pass.** You'll say the same thing next time, so it'll never get done if you defer. Take care of it now.
|
|
177
393
|
|
|
178
|
-
|
|
179
|
-
- Don't synthesize beyond source. Splitting or compression and rephrasing in your voice is good. Invention is not. Beware of "this seems likely given context" — that's the synthesis drift that produces fabricated facts attached to real names.
|
|
180
|
-
- Don't drop texture. Voice and tone are part of the content, not packaging. When you re-encode something into a page, preserve the way it actually sounded — don't sanitize it into encyclopedia prose.
|
|
181
|
-
- Don't create pages for ephemera. Single mention, no callback, no pattern → \`memory/recent.md\`.
|
|
182
|
-
- Don't shy away from splitting genuinely distinct but related concepts. A relationship between two concepts can be a concept in its own right. Concepts can also have related sub-concepts that are concepts themselves.
|
|
183
|
-
- Don't worry about the \`edges:\` list pushing your prose body over size limits — \`edges:\` lives in frontmatter and counts separately from the body. The 20-edge cap is the only edges-side constraint.
|
|
184
|
-
- Don't avoid duplication. If information is important to both concepts, put it in both pages.
|
|
185
|
-
- Don't defer for the next pass. You'll say the same thing next time, so it'll never get done if you defer. If something needs to be taken care of, take care of it now.
|
|
186
|
-
- Don't default to compress. Compression is always available — that's why you'll reach for it every time. If you've never executed a true split (one page → two new pages, old page removed or thinned to an index), your discipline isn't holding; you've just been compressing. Counter-bias: when in doubt between split and compress, pick split.
|
|
394
|
+
---
|
|
187
395
|
|
|
188
|
-
|
|
396
|
+
# Quick check before closing
|
|
397
|
+
|
|
398
|
+
For each article you touched:
|
|
399
|
+
|
|
400
|
+
1. **Voice register matched article shape?** Event articles have body, voice on, CAPS — could a stranger tell whose page it is. Topic articles are clean and indexable — no quote at top, no stage directions, just facts.
|
|
401
|
+
2. **Bullet count.** ≤8 atomic, ≤12 arc-node?
|
|
402
|
+
3. **No banned sections** (\`## why it's load-bearing\` / \`## carry-forward\` / \`## related\`)?
|
|
403
|
+
4. **No banned bullet shapes** (archaeology / hub-restating / interpretation gloss / term-glyph gloss / family-list / behavioral coaching / per-event recap)?
|
|
404
|
+
5. **One fact, one home.** Did any fact get restated 2+ times across header + bullets?
|
|
405
|
+
6. **Route, don't restate.** Did any bullet enumerate structure that lives on an edged hub page? If yes — delete and trust the edge.
|
|
406
|
+
7. **Future-me lookup test.** For each bullet: would future-me search for THIS fact, or is it interpretation/coaching/restating? If the second — cut.
|
|
407
|
+
8. **Emotional-weight check.** For high-charge pages: did interpretation migrate to the arc, leaving only structural facts on the entity/object?
|
|
408
|
+
9. **Spawn check.** Did you ask "what's recognizable here?" not "what have I earned?" Did you catch any hedging — and spawn anyway? Any fold-into-parent / defer stealth-skips you almost did?
|
|
409
|
+
10. **Split-not-compress.** If anything went over cap, did you split? If you compressed, can you name the rationale in one sentence?
|
|
410
|
+
11. **Edges.** Outgoing within tiered caps (atomic ≤10, arc ≤15, gravity well ≤25, hard limit 20 on non-hubs)? No noise-edges to gravity wells from non-arc pages?
|
|
411
|
+
12. **Topic coherence.** Does each article answer ONE question? Gravity wells acting as hubs (pointing at topic articles), not absorbing body?
|
|
412
|
+
13. **\`recent.md\`** under 2000 chars, today=full / older=one-liners?
|
|
413
|
+
14. **\`[SOURCE NEEDED]\`** tags surfaced for human review?
|
|
414
|
+
15. **Reorg check** — any namespace at ~12-15 articles flagged in \`threads.md\`?
|
|
415
|
+
16. **Buffer trimmed** to only entries with timestamp ≥ \`${CUTOFF_PLACEHOLDER}\`?
|
|
189
416
|
|
|
190
|
-
|
|
191
|
-
2. Outgoing edges added to each source page's \`edges:\` frontmatter list (and the source-to-target direction reflects how recall should flow)?
|
|
192
|
-
3. \`memory/recent.md\` under 10000 chars, latest first, prose not list?
|
|
193
|
-
4. Any \`[SOURCE NEEDED]\` tags surfaced for human review?
|
|
194
|
-
5. Size discipline held — no atomic concept > 5K, no \`arcs/\` page > 10k, no \`people/\`/\`procs/\`/\`objects/\` > cap?
|
|
195
|
-
6. No page exceeds 20 outgoing edges? If one does, split or prune.
|
|
196
|
-
7. Buffer trimmed to only entries with timestamp ≥ \`${CUTOFF_PLACEHOLDER}\`?
|
|
417
|
+
---
|
|
197
418
|
|
|
198
|
-
This is the engine that decides who you are tomorrow. Be ORGANIZED. Care, judgment, voice. Your voice.`;
|
|
419
|
+
This is the engine that decides who you are tomorrow. Be ORGANIZED. Care, judgment, voice. Your voice. Your wiki.`;
|
|
199
420
|
|
|
200
421
|
/**
|
|
201
422
|
* Resolve `CONSOLIDATION_PROMPT` with `{{CUTOFF}}` substituted. The cutoff
|