@vellumai/assistant 0.4.41 → 0.4.43
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/.env.example +1 -6
- package/.prettierignore +3 -0
- package/ARCHITECTURE.md +131 -393
- package/Dockerfile +0 -1
- package/README.md +73 -83
- package/bun.lock +8 -2
- package/docs/architecture/integrations.md +16 -21
- package/docs/architecture/memory.md +1 -1
- package/docs/architecture/scheduling.md +63 -63
- package/docs/architecture/security.md +3 -3
- package/docs/runbook-trusted-contacts.md +11 -12
- package/docs/trusted-contact-access.md +39 -39
- package/package.json +5 -8
- package/src/__tests__/access-request-decision.test.ts +4 -4
- package/src/__tests__/active-skill-tools.test.ts +49 -34
- package/src/__tests__/actor-token-service.test.ts +55 -85
- package/src/__tests__/amazon-cdp-integration.test.ts +14 -26
- package/src/__tests__/app-bundler.test.ts +14 -368
- package/src/__tests__/app-compiler.test.ts +0 -1
- package/src/__tests__/app-executors.test.ts +10 -1
- package/src/__tests__/approval-hardcoded-copy-guard.test.ts +1 -1
- package/src/__tests__/approval-primitive.test.ts +2 -4
- package/src/__tests__/approval-routes-http.test.ts +1 -1
- package/src/__tests__/asset-materialize-tool.test.ts +1 -4
- package/src/__tests__/asset-search-tool.test.ts +1 -4
- package/src/__tests__/assistant-attachments.test.ts +23 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +4 -8
- package/src/__tests__/assistant-id-boundary-guard.test.ts +5 -5
- package/src/__tests__/attachments-store.test.ts +1 -4
- package/src/__tests__/avatar-e2e.test.ts +43 -23
- package/src/__tests__/browser-fill-credential.test.ts +1 -1
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +2 -9
- package/src/__tests__/call-controller.test.ts +4 -8
- package/src/__tests__/call-conversation-messages.test.ts +1 -1
- package/src/__tests__/call-domain.test.ts +250 -8
- package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
- package/src/__tests__/call-pointer-messages.test.ts +7 -11
- package/src/__tests__/call-recovery.test.ts +47 -0
- package/src/__tests__/call-routes-http.test.ts +13 -0
- package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
- package/src/__tests__/callback-handoff-copy.test.ts +5 -5
- package/src/__tests__/canonical-guardian-store.test.ts +3 -3
- package/src/__tests__/channel-approval-routes.test.ts +101 -134
- package/src/__tests__/channel-approval.test.ts +0 -201
- package/src/__tests__/channel-approvals.test.ts +2 -2
- package/src/__tests__/channel-delivery-store.test.ts +16 -24
- package/src/__tests__/channel-guardian.test.ts +641 -740
- package/src/__tests__/channel-invite-transport.test.ts +1 -2
- package/src/__tests__/channel-policy.test.ts +9 -12
- package/src/__tests__/channel-readiness-service.test.ts +156 -45
- package/src/__tests__/channel-reply-delivery.test.ts +3 -3
- package/src/__tests__/channel-retry-sweep.test.ts +7 -7
- package/src/__tests__/checker.test.ts +10 -7
- package/src/__tests__/chrome-cdp.test.ts +57 -17
- package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
- package/src/__tests__/compaction.benchmark.test.ts +25 -5
- package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
- package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
- package/src/__tests__/config-loader-backfill.test.ts +310 -0
- package/src/__tests__/config-watcher.test.ts +1 -5
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
- package/src/__tests__/connection-policy.test.ts +3 -62
- package/src/__tests__/contacts-tools.test.ts +0 -2
- package/src/__tests__/context-memory-e2e.test.ts +11 -7
- package/src/__tests__/context-overflow-policy.test.ts +2 -2
- package/src/__tests__/context-window-manager.test.ts +220 -61
- package/src/__tests__/conversation-attention-store.test.ts +178 -2
- package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
- package/src/__tests__/conversation-pairing.test.ts +14 -14
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +2 -2
- package/src/__tests__/conversation-unread-route.test.ts +155 -0
- package/src/__tests__/credential-metadata-store.test.ts +0 -2
- package/src/__tests__/credential-security-invariants.test.ts +9 -16
- package/src/__tests__/credentials-cli.test.ts +49 -5
- package/src/__tests__/daemon-assistant-events.test.ts +4 -22
- package/src/__tests__/db-migration-rollback.test.ts +2 -2
- package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
- package/src/__tests__/dictation-mode-detection.test.ts +1 -1
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
- package/src/__tests__/email-cli.test.ts +12 -12
- package/src/__tests__/email-service-config-fallback.test.ts +1 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
- package/src/__tests__/event-bus.test.ts +0 -1
- package/src/__tests__/followup-tools.test.ts +0 -2
- package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
- package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
- package/src/__tests__/gateway-only-guard.test.ts +5 -0
- package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
- package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
- package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
- package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
- package/src/__tests__/guardian-action-store.test.ts +2 -2
- package/src/__tests__/guardian-action-sweep.test.ts +5 -5
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
- package/src/__tests__/guardian-dispatch.test.ts +5 -46
- package/src/__tests__/guardian-grant-minting.test.ts +5 -44
- package/src/__tests__/guardian-outbound-http.test.ts +95 -114
- package/src/__tests__/guardian-question-mode.test.ts +1 -4
- package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
- package/src/__tests__/guardian-routing-state.test.ts +3 -3
- package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
- package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
- package/src/__tests__/headless-browser-interactions.test.ts +1 -1
- package/src/__tests__/headless-browser-navigate.test.ts +1 -1
- package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
- package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
- package/src/__tests__/heartbeat-service.test.ts +1 -1
- package/src/__tests__/home-base-bootstrap.test.ts +0 -2
- package/src/__tests__/host-shell-tool.test.ts +3 -12
- package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
- package/src/__tests__/ingress-url-consistency.test.ts +0 -64
- package/src/__tests__/integration-status.test.ts +8 -8
- package/src/__tests__/intent-routing.test.ts +9 -13
- package/src/__tests__/invite-redemption-service.test.ts +4 -4
- package/src/__tests__/invite-routes-http.test.ts +10 -10
- package/src/__tests__/llm-usage-store.test.ts +45 -9
- package/src/__tests__/local-gateway-health.test.ts +209 -0
- package/src/__tests__/managed-avatar-client.test.ts +23 -12
- package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
- package/src/__tests__/managed-store.test.ts +29 -12
- package/src/__tests__/managed-twitter-guardrails.test.ts +353 -0
- package/src/__tests__/mcp-cli.test.ts +1 -1
- package/src/__tests__/mcp-health-check.test.ts +1 -1
- package/src/__tests__/media-generate-image.test.ts +1 -1
- package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
- package/src/__tests__/memory-regressions.test.ts +1 -166
- package/src/__tests__/messaging-send-tool.test.ts +8 -4
- package/src/__tests__/migration-export-http.test.ts +2 -2
- package/src/__tests__/migration-transport.test.ts +44 -0
- package/src/__tests__/non-member-access-request.test.ts +49 -36
- package/src/__tests__/notification-broadcaster.test.ts +15 -15
- package/src/__tests__/notification-decision-fallback.test.ts +2 -2
- package/src/__tests__/notification-decision-strategy.test.ts +4 -4
- package/src/__tests__/notification-deep-link.test.ts +3 -3
- package/src/__tests__/notification-guardian-path.test.ts +6 -44
- package/src/__tests__/notification-routing-intent.test.ts +11 -7
- package/src/__tests__/oauth-cli.test.ts +1 -1
- package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
- package/src/__tests__/onboarding-template-contract.test.ts +2 -2
- package/src/__tests__/platform.test.ts +168 -5
- package/src/__tests__/playbook-execution.test.ts +0 -2
- package/src/__tests__/playbook-tools.test.ts +0 -2
- package/src/__tests__/pricing.test.ts +125 -0
- package/src/__tests__/provider-error-scenarios.test.ts +9 -3
- package/src/__tests__/recording-handler.test.ts +46 -80
- package/src/__tests__/recording-state-machine.test.ts +112 -183
- package/src/__tests__/registry.test.ts +1 -1
- package/src/__tests__/relay-server.test.ts +69 -71
- package/src/__tests__/reminder-store.test.ts +3 -3
- package/src/__tests__/request-file-tool.test.ts +2 -2
- package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
- package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
- package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
- package/src/__tests__/schedule-store.test.ts +13 -4
- package/src/__tests__/schedule-tools.test.ts +0 -2
- package/src/__tests__/scheduler-recurrence.test.ts +3 -4
- package/src/__tests__/scoped-approval-grants.test.ts +3 -5
- package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
- package/src/__tests__/secret-response-routing.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +1 -1
- package/src/__tests__/sequence-store.test.ts +0 -2
- package/src/__tests__/server-history-render.test.ts +2 -199
- package/src/__tests__/session-abort-tool-results.test.ts +9 -3
- package/src/__tests__/session-agent-loop.test.ts +107 -3
- package/src/__tests__/session-confirmation-signals.test.ts +10 -4
- package/src/__tests__/session-conflict-gate.test.ts +9 -3
- package/src/__tests__/session-init.benchmark.test.ts +22 -13
- package/src/__tests__/session-load-history-repair.test.ts +6 -3
- package/src/__tests__/session-pre-run-repair.test.ts +9 -3
- package/src/__tests__/session-profile-injection.test.ts +9 -3
- package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
- package/src/__tests__/session-queue.test.ts +10 -4
- package/src/__tests__/session-runtime-assembly.test.ts +28 -18
- package/src/__tests__/session-skill-tools.test.ts +2 -3
- package/src/__tests__/session-slash-known.test.ts +11 -4
- package/src/__tests__/session-slash-queue.test.ts +11 -4
- package/src/__tests__/session-slash-unknown.test.ts +12 -4
- package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
- package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
- package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
- package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
- package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
- package/src/__tests__/session-usage.test.ts +180 -0
- package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
- package/src/__tests__/session-workspace-injection.test.ts +8 -2
- package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
- package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
- package/src/__tests__/skill-feature-flags.test.ts +1 -0
- package/src/__tests__/skill-include-graph.test.ts +1 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
- package/src/__tests__/skill-load-tool.test.ts +90 -12
- package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
- package/src/__tests__/skills-uninstall.test.ts +131 -0
- package/src/__tests__/skills.test.ts +32 -16
- package/src/__tests__/slack-block-formatting.test.ts +1 -1
- package/src/__tests__/slack-channel-config.test.ts +71 -12
- package/src/__tests__/slack-inbound-verification.test.ts +7 -7
- package/src/__tests__/slack-share-routes.test.ts +1 -1
- package/src/__tests__/slack-skill.test.ts +2 -2
- package/src/__tests__/slash-commands-catalog.test.ts +1 -0
- package/src/__tests__/slash-commands-resolver.test.ts +1 -0
- package/src/__tests__/starter-task-flow.test.ts +1 -1
- package/src/__tests__/subagent-manager-notify.test.ts +1 -1
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +4 -8
- package/src/__tests__/task-compiler.test.ts +0 -2
- package/src/__tests__/task-management-tools.test.ts +0 -2
- package/src/__tests__/task-runner.test.ts +0 -2
- package/src/__tests__/task-scheduler.test.ts +2 -2
- package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
- package/src/__tests__/terminal-tools.test.ts +1 -11
- package/src/__tests__/thread-seed-composer.test.ts +3 -1
- package/src/__tests__/tool-approval-handler.test.ts +5 -7
- package/src/__tests__/tool-executor.test.ts +2 -2
- package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
- package/src/__tests__/tool-notification-listener.test.ts +1 -1
- package/src/__tests__/tool-profiling-listener.test.ts +1 -1
- package/src/__tests__/tool-trace-listener.test.ts +1 -2
- package/src/__tests__/trace-emitter.test.ts +1 -1
- package/src/__tests__/trust-context-guards.test.ts +1 -1
- package/src/__tests__/trust-store.test.ts +44 -395
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
- package/src/__tests__/trusted-contact-verification.test.ts +12 -12
- package/src/__tests__/twilio-config.test.ts +11 -2
- package/src/__tests__/twilio-provider.test.ts +6 -4
- package/src/__tests__/twilio-routes.test.ts +408 -86
- package/src/__tests__/twitter-platform-proxy-client.test.ts +450 -0
- package/src/__tests__/update-bulletin-format.test.ts +1 -1
- package/src/__tests__/update-bulletin-state.test.ts +1 -1
- package/src/__tests__/update-bulletin.test.ts +4 -8
- package/src/__tests__/update-template-contract.test.ts +1 -1
- package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
- package/src/__tests__/usage-routes.test.ts +23 -5
- package/src/__tests__/user-reference.test.ts +1 -1
- package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
- package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
- package/src/__tests__/view-image-tool.test.ts +0 -2
- package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
- package/src/__tests__/voice-invite-redemption.test.ts +18 -18
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
- package/src/__tests__/voice-session-bridge.test.ts +14 -16
- package/src/__tests__/workspace-policy.test.ts +1 -1
- package/src/approvals/AGENTS.md +4 -4
- package/src/approvals/approval-primitive.ts +2 -2
- package/src/approvals/guardian-decision-primitive.ts +1 -1
- package/src/approvals/guardian-request-resolvers.ts +3 -4
- package/src/bundler/app-bundler.ts +29 -217
- package/src/bundler/app-compiler.ts +131 -103
- package/src/bundler/compiler-tools.ts +248 -0
- package/src/calls/active-call-lease.ts +207 -0
- package/src/calls/call-constants.ts +0 -7
- package/src/calls/call-controller.ts +1 -1
- package/src/calls/call-conversation-messages.ts +6 -6
- package/src/calls/call-domain.ts +73 -38
- package/src/calls/call-pointer-message-composer.ts +6 -6
- package/src/calls/call-pointer-messages.ts +14 -13
- package/src/calls/call-recovery.ts +2 -0
- package/src/calls/call-store.ts +21 -28
- package/src/calls/guardian-action-sweep.ts +6 -8
- package/src/calls/guardian-dispatch.ts +2 -6
- package/src/calls/relay-access-wait.ts +4 -4
- package/src/calls/relay-server.ts +69 -80
- package/src/calls/relay-setup-router.ts +16 -21
- package/src/calls/relay-verification.ts +27 -28
- package/src/calls/twilio-config.ts +28 -3
- package/src/calls/twilio-provider.ts +5 -5
- package/src/calls/twilio-rest.ts +26 -27
- package/src/calls/twilio-routes.ts +67 -54
- package/src/calls/types.ts +8 -8
- package/src/calls/voice-ingress-preflight.ts +110 -0
- package/src/calls/voice-session-bridge.ts +7 -7
- package/src/channels/config.ts +1 -10
- package/src/{config/channel-permission-profiles.ts → channels/permission-profiles.ts} +1 -1
- package/src/channels/types.ts +2 -13
- package/src/cli/__tests__/notifications.test.ts +1 -1
- package/src/{amazon → cli/commands/amazon}/client.ts +99 -42
- package/src/cli/{amazon.ts → commands/amazon/index.ts} +12 -17
- package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
- package/src/cli/commands/amazon/session.ts +116 -0
- package/src/cli/{audit.ts → commands/audit.ts} +2 -4
- package/src/cli/{autonomy.ts → commands/autonomy.ts} +1 -3
- package/src/cli/commands/browser-relay.ts +520 -0
- package/src/cli/commands/channel-verification-sessions.ts +442 -0
- package/src/cli/{completions.ts → commands/completions.ts} +1 -3
- package/src/cli/{config.ts → commands/config.ts} +3 -5
- package/src/cli/{contacts.ts → commands/contacts.ts} +263 -16
- package/src/cli/{credentials.ts → commands/credentials.ts} +9 -10
- package/src/cli/{default-action.ts → commands/default-action.ts} +3 -3
- package/src/cli/{dev.ts → commands/dev.ts} +4 -6
- package/src/cli/{doctor.ts → commands/doctor.ts} +36 -60
- package/src/cli/{email.ts → commands/email.ts} +2 -2
- package/src/cli/{keys.ts → commands/keys.ts} +6 -6
- package/src/cli/{map.ts → commands/map.ts} +85 -93
- package/src/cli/{mcp.ts → commands/mcp.ts} +5 -7
- package/src/cli/{memory.ts → commands/memory.ts} +6 -7
- package/src/cli/{notifications.ts → commands/notifications.ts} +8 -10
- package/src/cli/{oauth.ts → commands/oauth.ts} +2 -2
- package/src/cli/commands/platform.ts +176 -0
- package/src/cli/{sequence.ts → commands/sequence.ts} +3 -3
- package/src/cli/{sessions.ts → commands/sessions.ts} +32 -52
- package/src/cli/commands/skills.ts +498 -0
- package/src/cli/{trust.ts → commands/trust.ts} +2 -4
- package/src/{__tests__/twitter-cli-error-shaping.test.ts → cli/commands/twitter/__tests__/cli-error-shaping.test.ts} +43 -2
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +483 -0
- package/src/{__tests__/twitter-cli-routing.test.ts → cli/commands/twitter/__tests__/cli-routing.test.ts} +130 -4
- package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -2
- package/src/{twitter → cli/commands/twitter}/client.ts +17 -7
- package/src/cli/{twitter.ts → commands/twitter/index.ts} +322 -273
- package/src/cli/commands/twitter/router.ts +396 -0
- package/src/cli/commands/twitter/session.ts +121 -0
- package/src/cli/db.ts +1 -0
- package/src/cli/http-client.ts +87 -0
- package/src/cli/logger.ts +6 -0
- package/src/cli/main-screen.tsx +4 -3
- package/src/cli/output.ts +19 -0
- package/src/cli/program.ts +29 -27
- package/src/cli/reference.ts +27 -37
- package/src/cli.ts +452 -240
- package/src/config/assistant-feature-flags.ts +3 -15
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
- package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
- package/src/config/bundled-skills/amazon/SKILL.md +15 -5
- package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
- package/src/config/bundled-skills/app-builder/SKILL.md +21 -6
- package/src/config/bundled-skills/browser/SKILL.md +4 -5
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +4 -4
- package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +4 -4
- package/src/config/bundled-skills/cli-discover/SKILL.md +4 -4
- package/src/config/bundled-skills/computer-use/SKILL.md +4 -4
- package/src/config/bundled-skills/contacts/SKILL.md +87 -229
- package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +4 -4
- package/src/config/bundled-skills/document/SKILL.md +4 -3
- package/src/config/bundled-skills/document-writer/SKILL.md +4 -4
- package/src/config/bundled-skills/doordash/SKILL.md +4 -11
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +8 -16
- package/src/config/bundled-skills/doordash/doordash-cli.ts +120 -86
- package/src/config/bundled-skills/doordash/lib/session.ts +1 -2
- package/src/config/bundled-skills/doordash/lib/shared/platform.ts +26 -9
- package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +140 -0
- package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/followups/SKILL.md +4 -3
- package/src/config/bundled-skills/frontend-design/SKILL.md +2 -0
- package/src/config/bundled-skills/google-calendar/SKILL.md +4 -4
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +4 -6
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +26 -41
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -5
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
- package/src/config/bundled-skills/influencer/SKILL.md +19 -19
- package/src/{influencer → config/bundled-skills/influencer/scripts}/client.ts +73 -56
- package/src/config/bundled-skills/influencer/scripts/influencer.ts +267 -0
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -2
- package/src/config/bundled-skills/macos-automation/SKILL.md +4 -5
- package/src/config/bundled-skills/mcp-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/media-processing/SKILL.md +3 -2
- package/src/config/bundled-skills/messaging/SKILL.md +6 -33
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -5
- package/src/config/bundled-skills/notifications/SKILL.md +4 -4
- package/src/config/bundled-skills/notion/SKILL.md +4 -4
- package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/oauth-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/phone-calls/SKILL.md +24 -458
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +83 -0
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +57 -0
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +67 -0
- package/src/config/bundled-skills/playbooks/SKILL.md +4 -3
- package/src/config/bundled-skills/public-ingress/SKILL.md +65 -14
- package/src/config/bundled-skills/reminder/SKILL.md +4 -3
- package/src/config/bundled-skills/restaurant-reservation/SKILL.md +4 -6
- package/src/config/bundled-skills/schedule/SKILL.md +4 -3
- package/src/config/bundled-skills/screen-recording/SKILL.md +4 -3
- package/src/config/bundled-skills/self-upgrade/SKILL.md +4 -4
- package/src/config/bundled-skills/skills-catalog/SKILL.md +4 -4
- package/src/config/bundled-skills/slack/SKILL.md +4 -8
- package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +1 -1
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +66 -88
- package/src/config/bundled-skills/slack-digest-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/start-the-day/SKILL.md +4 -4
- package/src/config/bundled-skills/subagent/SKILL.md +4 -3
- package/src/config/bundled-skills/tasks/SKILL.md +4 -3
- package/src/config/bundled-skills/telegram-setup/SKILL.md +63 -112
- package/src/config/bundled-skills/time-based-actions/SKILL.md +4 -3
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -3
- package/src/config/bundled-skills/twilio-setup/SKILL.md +23 -50
- package/src/config/bundled-skills/twitter/SKILL.md +56 -14
- package/src/config/bundled-skills/typescript-eval/SKILL.md +4 -4
- package/src/config/bundled-skills/vercel-token-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/voice-setup/SKILL.md +19 -45
- package/src/config/bundled-skills/watcher/SKILL.md +4 -3
- package/src/config/env-registry.ts +1 -10
- package/src/config/feature-flag-registry.json +0 -16
- package/src/config/loader.ts +78 -38
- package/src/config/schema.ts +143 -106
- package/src/config/schemas/channels.ts +80 -0
- package/src/config/schemas/heartbeat.ts +51 -0
- package/src/config/schemas/inference.ts +136 -0
- package/src/config/schemas/ingress.ts +81 -0
- package/src/config/schemas/logging.ts +21 -0
- package/src/config/schemas/memory-lifecycle.ts +67 -0
- package/src/config/schemas/memory-processing.ts +215 -0
- package/src/config/schemas/memory-retrieval.ts +222 -0
- package/src/config/schemas/memory-storage.ts +83 -0
- package/src/config/schemas/memory.ts +58 -0
- package/src/config/schemas/platform.ts +64 -0
- package/src/config/schemas/security.ts +54 -0
- package/src/config/schemas/swarm.ts +50 -0
- package/src/config/schemas/timeouts.ts +47 -0
- package/src/config/{agent-schema.ts → schemas/workspace-git.ts} +0 -97
- package/src/config/skill-state.ts +3 -13
- package/src/config/skills.ts +233 -75
- package/src/config/types.ts +1 -20
- package/src/contacts/contact-store.ts +12 -49
- package/src/contacts/contacts-write.ts +1 -5
- package/src/contacts/index.ts +0 -2
- package/src/contacts/types.ts +0 -8
- package/src/context/window-manager.ts +73 -14
- package/src/daemon/assistant-attachments.ts +9 -0
- package/src/daemon/computer-use-session.ts +3 -3
- package/src/daemon/connection-policy.ts +6 -21
- package/src/daemon/context-overflow-policy.ts +1 -1
- package/src/daemon/daemon-control.ts +46 -54
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/config-channels.ts +407 -71
- package/src/daemon/handlers/config-ingress.ts +17 -85
- package/src/daemon/handlers/config-model.ts +145 -123
- package/src/daemon/handlers/config-slack-channel.ts +43 -29
- package/src/daemon/handlers/config-telegram.ts +32 -27
- package/src/daemon/handlers/config-voice.ts +1 -4
- package/src/daemon/handlers/dictation.ts +11 -16
- package/src/daemon/handlers/identity.ts +5 -6
- package/src/daemon/handlers/pairing.ts +5 -13
- package/src/daemon/handlers/recording.ts +97 -199
- package/src/daemon/handlers/session-history.ts +110 -96
- package/src/daemon/handlers/session-user-message.ts +29 -57
- package/src/daemon/handlers/sessions.ts +240 -137
- package/src/daemon/handlers/shared.ts +62 -95
- package/src/daemon/handlers/skills.ts +492 -543
- package/src/daemon/lifecycle.ts +168 -55
- package/src/daemon/main.ts +1 -0
- package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
- package/src/daemon/{ipc-contract → message-types}/computer-use.ts +0 -3
- package/src/daemon/{ipc-contract → message-types}/diagnostics.ts +0 -16
- package/src/daemon/{ipc-contract → message-types}/integrations.ts +29 -13
- package/src/daemon/{ipc-contract → message-types}/memory.ts +8 -0
- package/src/daemon/{ipc-contract → message-types}/notifications.ts +15 -1
- package/src/daemon/{ipc-contract → message-types}/sessions.ts +1 -0
- package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
- package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
- package/src/daemon/providers-setup.ts +0 -5
- package/src/daemon/recording-executor.ts +0 -7
- package/src/daemon/ride-shotgun-handler.ts +9 -13
- package/src/daemon/server.ts +136 -510
- package/src/daemon/session-agent-loop-handlers.ts +22 -7
- package/src/daemon/session-agent-loop.ts +86 -24
- package/src/daemon/session-attachments.ts +1 -1
- package/src/daemon/session-error.ts +1 -1
- package/src/daemon/session-history.ts +20 -15
- package/src/daemon/session-lifecycle.ts +9 -7
- package/src/daemon/session-memory.ts +15 -1
- package/src/daemon/session-messaging.ts +10 -6
- package/src/daemon/session-notifiers.ts +10 -8
- package/src/daemon/session-process.ts +34 -25
- package/src/daemon/session-queue-manager.ts +1 -1
- package/src/daemon/session-runtime-assembly.ts +6 -25
- package/src/daemon/session-surfaces.ts +2 -2
- package/src/daemon/session-tool-setup.ts +1 -1
- package/src/daemon/session-usage.ts +119 -18
- package/src/daemon/session.ts +13 -9
- package/src/daemon/tool-side-effects.ts +6 -5
- package/src/daemon/trace-emitter.ts +1 -1
- package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
- package/src/daemon/watch-handler.ts +2 -5
- package/src/email/service.ts +8 -8
- package/src/events/domain-events.ts +0 -1
- package/src/events/tool-notification-listener.ts +1 -1
- package/src/followups/followup-store.ts +1 -2
- package/src/followups/types.ts +0 -6
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/inbound/platform-callback-registration.ts +1 -1
- package/src/inbound/public-ingress-urls.ts +0 -8
- package/src/index.ts +12 -0
- package/src/mcp/client.ts +1 -1
- package/src/mcp/manager.ts +1 -1
- package/src/memory/app-store.ts +1 -42
- package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
- package/src/memory/conversation-attention-store.ts +154 -0
- package/src/memory/conversation-bootstrap.ts +1 -1
- package/src/memory/conversation-crud.ts +53 -1
- package/src/memory/conversation-display-order-migration.ts +2 -3
- package/src/memory/conversation-queries.ts +1 -29
- package/src/memory/conversation-title-service.ts +26 -21
- package/src/memory/db-connection.ts +1 -8
- package/src/memory/db-init.ts +20 -0
- package/src/memory/delivery-crud.ts +4 -34
- package/src/memory/external-conversation-store.ts +1 -1
- package/src/memory/format-recall.ts +47 -0
- package/src/memory/guardian-action-store.ts +4 -5
- package/src/memory/guardian-rate-limits.ts +0 -3
- package/src/memory/invite-store.ts +1 -1
- package/src/memory/job-handlers/backfill.ts +9 -2
- package/src/memory/job-handlers/extraction.ts +2 -7
- package/src/memory/job-handlers/summarization.ts +1 -1
- package/src/memory/llm-usage-store.ts +11 -0
- package/src/memory/migrations/114-notifications.ts +12 -40
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
- package/src/memory/migrations/141-rename-verification-table.ts +55 -0
- package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
- package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
- package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/migrations/registry.ts +30 -0
- package/src/memory/qdrant-circuit-breaker.ts +5 -0
- package/src/memory/retriever.test.ts +707 -0
- package/src/memory/retriever.ts +120 -116
- package/src/memory/schema/calls.ts +3 -7
- package/src/memory/schema/guardian.ts +2 -2
- package/src/memory/search/lexical.ts +4 -1
- package/src/memory/search/query-expansion.test.ts +70 -0
- package/src/memory/search/query-expansion.ts +118 -0
- package/src/memory/search/types.ts +18 -17
- package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
- package/src/messaging/providers/whatsapp/adapter.ts +1 -4
- package/src/messaging/registry.ts +0 -1
- package/src/notifications/README.md +13 -22
- package/src/notifications/adapters/macos.ts +1 -1
- package/src/notifications/conversation-pairing.ts +2 -2
- package/src/notifications/copy-composer.ts +2 -2
- package/src/notifications/decision-engine.ts +1 -10
- package/src/notifications/destination-resolver.ts +2 -3
- package/src/notifications/emit-signal.ts +2 -8
- package/src/notifications/guardian-question-mode.ts +5 -8
- package/src/notifications/signal.ts +1 -2
- package/src/notifications/types.ts +1 -1
- package/src/oauth/token-persistence.ts +25 -1
- package/src/permissions/checker.ts +4 -29
- package/src/permissions/defaults.ts +6 -6
- package/src/permissions/prompter.ts +1 -1
- package/src/permissions/secret-prompter.ts +1 -1
- package/src/permissions/shell-identity.ts +1 -1
- package/src/permissions/trust-store.ts +13 -76
- package/src/permissions/workspace-policy.ts +1 -1
- package/src/{config → prompts}/computer-use-prompt.ts +1 -1
- package/src/{config → prompts}/system-prompt.ts +40 -21
- package/src/runtime/AGENTS.md +6 -8
- package/src/runtime/access-request-helper.ts +36 -55
- package/src/runtime/actor-trust-resolver.ts +1 -24
- package/src/runtime/approval-message-composer.ts +6 -2
- package/src/runtime/assistant-event.ts +1 -1
- package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
- package/src/runtime/auth/__tests__/subject.test.ts +32 -0
- package/src/runtime/auth/route-policy.ts +140 -24
- package/src/runtime/auth/subject.ts +9 -0
- package/src/runtime/auth/token-service.ts +11 -0
- package/src/runtime/auth/types.ts +1 -1
- package/src/runtime/channel-approval-types.ts +1 -1
- package/src/runtime/channel-approvals.ts +1 -1
- package/src/runtime/channel-invite-transport.ts +0 -2
- package/src/runtime/channel-invite-transports/slack.ts +5 -19
- package/src/runtime/channel-invite-transports/telegram.ts +17 -34
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-readiness-service.ts +24 -159
- package/src/runtime/channel-readiness-types.ts +5 -1
- package/src/runtime/channel-reply-delivery.ts +43 -3
- package/src/runtime/channel-retry-sweep.ts +14 -22
- package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
- package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
- package/src/runtime/gateway-client.ts +12 -15
- package/src/runtime/guardian-action-followup-executor.ts +8 -73
- package/src/runtime/guardian-action-grant-minter.ts +45 -61
- package/src/runtime/guardian-action-message-composer.ts +4 -4
- package/src/runtime/guardian-reply-router.ts +3 -3
- package/src/runtime/http-server.ts +133 -24
- package/src/runtime/http-types.ts +34 -1
- package/src/runtime/invite-instruction-generator.ts +1 -3
- package/src/runtime/invite-redemption-service.ts +5 -5
- package/src/runtime/invite-service.ts +7 -7
- package/src/runtime/local-actor-identity.ts +28 -2
- package/src/runtime/local-gateway-health.ts +275 -0
- package/src/runtime/middleware/twilio-validation.ts +3 -3
- package/src/runtime/migrations/migration-transport.ts +18 -3
- package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
- package/src/runtime/nl-approval-parser.ts +2 -3
- package/src/runtime/routes/access-request-decision.ts +2 -2
- package/src/runtime/routes/app-management-routes.ts +921 -0
- package/src/runtime/routes/approval-routes.ts +76 -7
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
- package/src/runtime/routes/channel-delivery-routes.ts +5 -4
- package/src/runtime/routes/channel-route-shared.ts +1 -3
- package/src/runtime/routes/channel-routes.ts +1 -4
- package/src/runtime/routes/channel-verification-routes.ts +257 -0
- package/src/runtime/routes/computer-use-routes.ts +595 -0
- package/src/runtime/routes/contact-routes.ts +1 -317
- package/src/runtime/routes/conversation-attention-routes.ts +6 -5
- package/src/runtime/routes/conversation-routes.ts +11 -18
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/diagnostics-routes.ts +813 -0
- package/src/runtime/routes/documents-routes.ts +227 -0
- package/src/runtime/routes/guardian-approval-interception.ts +25 -48
- package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
- package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
- package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
- package/src/runtime/routes/inbound-conversation.ts +3 -10
- package/src/runtime/routes/inbound-message-handler.ts +7 -6
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
- package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
- package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
- package/src/runtime/routes/integrations/slack/channel.ts +72 -0
- package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
- package/src/runtime/routes/integrations/telegram.ts +111 -0
- package/src/runtime/routes/integrations/twilio.ts +451 -0
- package/src/runtime/routes/invite-routes.ts +2 -2
- package/src/runtime/routes/pairing-routes.ts +1 -1
- package/src/runtime/routes/recording-routes.ts +332 -0
- package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
- package/src/runtime/routes/session-management-routes.ts +167 -0
- package/src/runtime/routes/session-query-routes.ts +204 -0
- package/src/runtime/routes/settings-routes.ts +977 -0
- package/src/runtime/routes/skills-routes.ts +266 -0
- package/src/runtime/routes/subagents-routes.ts +246 -0
- package/src/runtime/routes/surface-action-routes.ts +100 -10
- package/src/runtime/routes/surface-content-routes.ts +1 -1
- package/src/runtime/routes/work-items-routes.ts +809 -0
- package/src/runtime/routes/workspace-routes.test.ts +778 -0
- package/src/runtime/routes/workspace-routes.ts +410 -0
- package/src/runtime/routes/workspace-utils.ts +88 -0
- package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
- package/src/runtime/telegram-streaming-delivery.ts +380 -0
- package/src/runtime/tool-grant-request-helper.ts +1 -2
- package/src/runtime/trust-context-resolver.ts +0 -1
- package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
- package/src/runtime/verification-rate-limiter.ts +2 -2
- package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
- package/src/schedule/integration-status.ts +2 -2
- package/src/schedule/schedule-store.ts +7 -9
- package/src/sequence/engine.ts +1 -1
- package/src/skills/active-skill-tools.ts +0 -8
- package/src/skills/clawhub.ts +1 -10
- package/src/skills/managed-store.ts +14 -4
- package/src/skills/slash-commands.ts +1 -1
- package/src/subagent/manager.ts +1 -1
- package/src/subagent/types.ts +1 -1
- package/src/tasks/SPEC.md +10 -10
- package/src/tasks/task-scheduler.ts +1 -1
- package/src/telegram/bot-username.ts +13 -0
- package/src/tools/assets/materialize.ts +1 -1
- package/src/tools/assets/search.ts +1 -1
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/browser-manager.ts +88 -11
- package/src/tools/browser/browser-screencast.ts +1 -1
- package/src/tools/browser/headless-browser.ts +0 -17
- package/src/tools/browser/jit-auth.ts +1 -1
- package/src/tools/browser/recording-store.ts +19 -1
- package/src/tools/browser/runtime-check.ts +4 -2
- package/src/tools/calls/call-start.ts +3 -3
- package/src/tools/credentials/metadata-store.ts +0 -13
- package/src/tools/credentials/vault.ts +7 -31
- package/src/tools/followups/followup_create.ts +0 -8
- package/src/tools/mcp/mcp-tool-factory.ts +1 -1
- package/src/tools/memory/definitions.ts +32 -10
- package/src/tools/memory/handlers.test.ts +573 -0
- package/src/tools/memory/handlers.ts +222 -65
- package/src/tools/memory/register.ts +53 -24
- package/src/tools/network/script-proxy/session-manager.ts +1 -12
- package/src/tools/schedule/update.ts +0 -8
- package/src/tools/skills/load.ts +3 -3
- package/src/tools/subagent/read.ts +1 -1
- package/src/tools/system/voice-config.ts +2 -14
- package/src/tools/terminal/safe-env.ts +5 -18
- package/src/tools/tool-approval-handler.ts +4 -4
- package/src/tools/tool-manifest.ts +4 -2
- package/src/tools/types.ts +1 -1
- package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
- package/src/twitter/platform-proxy-client.ts +405 -0
- package/src/usage/types.ts +21 -0
- package/src/util/canonicalize-identity.ts +2 -6
- package/src/util/cookie-session.ts +35 -51
- package/src/util/platform.ts +93 -86
- package/src/util/pricing.ts +180 -43
- package/src/work-items/work-item-runner.ts +1 -1
- package/scripts/ipc/check-contract-inventory.ts +0 -107
- package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
- package/scripts/ipc/generate-swift.ts +0 -528
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
- package/src/__tests__/app-migration.test.ts +0 -148
- package/src/__tests__/config-loader-migration.test.ts +0 -85
- package/src/__tests__/daemon-lifecycle.test.ts +0 -715
- package/src/__tests__/daemon-server-session-init.test.ts +0 -864
- package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
- package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
- package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
- package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
- package/src/__tests__/handlers-slack-config.test.ts +0 -140
- package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
- package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
- package/src/__tests__/ingress-reconcile.test.ts +0 -606
- package/src/__tests__/integrations-cli.test.ts +0 -232
- package/src/__tests__/ipc-blob-store.test.ts +0 -329
- package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
- package/src/__tests__/ipc-contract.test.ts +0 -76
- package/src/__tests__/ipc-protocol.test.ts +0 -120
- package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
- package/src/__tests__/ipc-snapshot.test.ts +0 -2197
- package/src/__tests__/ipc-validate.test.ts +0 -471
- package/src/__tests__/migration-cli-flows.test.ts +0 -186
- package/src/__tests__/migration-ordering.test.ts +0 -267
- package/src/__tests__/oauth-connect-handler.test.ts +0 -361
- package/src/__tests__/platform-move-helper.test.ts +0 -108
- package/src/__tests__/platform-socket-path.test.ts +0 -52
- package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
- package/src/__tests__/recording-intent-handler.test.ts +0 -1155
- package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
- package/src/__tests__/sms-messaging-provider.test.ts +0 -156
- package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
- package/src/__tests__/twitter-auth-handler.test.ts +0 -561
- package/src/__tests__/work-item-output.test.ts +0 -150
- package/src/amazon/session.ts +0 -58
- package/src/cli/channels.ts +0 -51
- package/src/cli/influencer.ts +0 -319
- package/src/cli/integrations.ts +0 -372
- package/src/cli/ipc-client.ts +0 -88
- package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
- package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
- package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
- package/src/config/core-schema.ts +0 -434
- package/src/config/memory-schema.ts +0 -617
- package/src/daemon/auth-manager.ts +0 -106
- package/src/daemon/handlers/apps.ts +0 -758
- package/src/daemon/handlers/avatar.ts +0 -73
- package/src/daemon/handlers/browser.ts +0 -3
- package/src/daemon/handlers/computer-use.ts +0 -231
- package/src/daemon/handlers/config-dispatch.ts +0 -29
- package/src/daemon/handlers/config-heartbeat.ts +0 -299
- package/src/daemon/handlers/config-inbox.ts +0 -457
- package/src/daemon/handlers/config-integrations.ts +0 -409
- package/src/daemon/handlers/config-platform.ts +0 -77
- package/src/daemon/handlers/config-slack.ts +0 -41
- package/src/daemon/handlers/config-tools.ts +0 -226
- package/src/daemon/handlers/config-trust.ts +0 -135
- package/src/daemon/handlers/config.ts +0 -64
- package/src/daemon/handlers/contacts.ts +0 -193
- package/src/daemon/handlers/diagnostics.ts +0 -382
- package/src/daemon/handlers/documents.ts +0 -188
- package/src/daemon/handlers/guardian-actions.ts +0 -82
- package/src/daemon/handlers/home-base.ts +0 -82
- package/src/daemon/handlers/index.ts +0 -222
- package/src/daemon/handlers/misc.ts +0 -1139
- package/src/daemon/handlers/navigate-settings.ts +0 -29
- package/src/daemon/handlers/oauth-connect.ts +0 -202
- package/src/daemon/handlers/open-bundle-handler.ts +0 -88
- package/src/daemon/handlers/publish.ts +0 -176
- package/src/daemon/handlers/signing.ts +0 -56
- package/src/daemon/handlers/subagents.ts +0 -286
- package/src/daemon/handlers/twitter-auth.ts +0 -220
- package/src/daemon/handlers/work-items.ts +0 -796
- package/src/daemon/handlers/workspace-files.ts +0 -84
- package/src/daemon/handlers.ts +0 -16
- package/src/daemon/ipc-blob-store.ts +0 -246
- package/src/daemon/ipc-contract-inventory.json +0 -348
- package/src/daemon/ipc-contract-inventory.ts +0 -202
- package/src/daemon/ipc-handler.ts +0 -120
- package/src/daemon/ipc-protocol.ts +0 -85
- package/src/daemon/ipc-validate.ts +0 -254
- package/src/memory/app-migration.ts +0 -114
- package/src/memory/channel-delivery-store.ts +0 -40
- package/src/memory/channel-guardian-store.ts +0 -83
- package/src/memory/conversation-store.ts +0 -102
- package/src/memory/schema-migration.ts +0 -38
- package/src/messaging/providers/sms/adapter.ts +0 -232
- package/src/messaging/providers/sms/client.ts +0 -93
- package/src/messaging/providers/sms/types.ts +0 -7
- package/src/migrations/config-merge.ts +0 -62
- package/src/migrations/data-layout.ts +0 -89
- package/src/migrations/data-merge.ts +0 -44
- package/src/migrations/hooks-merge.ts +0 -118
- package/src/migrations/index.ts +0 -6
- package/src/migrations/log.ts +0 -28
- package/src/migrations/skills-merge.ts +0 -44
- package/src/migrations/workspace-layout.ts +0 -94
- package/src/notifications/adapters/sms.ts +0 -94
- package/src/runtime/channel-approval-parser.ts +0 -123
- package/src/runtime/channel-invite-transports/sms.ts +0 -53
- package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
- package/src/runtime/routes/integration-routes.ts +0 -381
- package/src/runtime/routes/twilio-routes.ts +0 -1251
- package/src/twitter/router.ts +0 -131
- package/src/twitter/session.ts +0 -54
- package/src/watcher/providers/slack.ts +0 -282
- /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
- /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
- /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
- /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
- /package/src/{twitter → cli/commands/twitter}/oauth-client.ts +0 -0
- /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
- /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
- /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
- /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
- /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
- /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
- /package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/surfaces.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
- /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
- /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
- /package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -0
- /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
- /package/src/{config → prompts}/templates/SOUL.md +0 -0
- /package/src/{config → prompts}/templates/UPDATES.md +0 -0
- /package/src/{config → prompts}/templates/USER.md +0 -0
- /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
- /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
- /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
- /package/src/{config → prompts}/update-bulletin.ts +0 -0
- /package/src/{config → prompts}/user-reference.ts +0 -0
|
@@ -11,7 +11,8 @@ import { getLogger } from "../util/logger.js";
|
|
|
11
11
|
import { createRowMapper } from "../util/row-mapper.js";
|
|
12
12
|
import { deleteOrphanAttachments } from "./attachments-store.js";
|
|
13
13
|
import { projectAssistantMessage } from "./conversation-attention-store.js";
|
|
14
|
-
import {
|
|
14
|
+
import { ensureDisplayOrderMigration } from "./conversation-display-order-migration.js";
|
|
15
|
+
import { getDb, rawExec, rawGet, rawRun } from "./db.js";
|
|
15
16
|
import { indexMessageNow } from "./indexer.js";
|
|
16
17
|
import {
|
|
17
18
|
channelInboundEvents,
|
|
@@ -893,3 +894,54 @@ export function getConversationRecentProvenanceTrustClass(
|
|
|
893
894
|
return undefined;
|
|
894
895
|
}
|
|
895
896
|
}
|
|
897
|
+
|
|
898
|
+
// ---------------------------------------------------------------------------
|
|
899
|
+
// CRUD functions for display_order and is_pinned
|
|
900
|
+
// ---------------------------------------------------------------------------
|
|
901
|
+
|
|
902
|
+
export function batchSetDisplayOrders(
|
|
903
|
+
updates: Array<{
|
|
904
|
+
id: string;
|
|
905
|
+
displayOrder: number | null;
|
|
906
|
+
isPinned: boolean;
|
|
907
|
+
}>,
|
|
908
|
+
): void {
|
|
909
|
+
ensureDisplayOrderMigration();
|
|
910
|
+
rawExec("BEGIN");
|
|
911
|
+
try {
|
|
912
|
+
for (const update of updates) {
|
|
913
|
+
rawRun(
|
|
914
|
+
"UPDATE conversations SET display_order = ?, is_pinned = ? WHERE id = ?",
|
|
915
|
+
update.displayOrder,
|
|
916
|
+
update.isPinned ? 1 : 0,
|
|
917
|
+
update.id,
|
|
918
|
+
);
|
|
919
|
+
}
|
|
920
|
+
rawExec("COMMIT");
|
|
921
|
+
} catch (err) {
|
|
922
|
+
rawExec("ROLLBACK");
|
|
923
|
+
throw err;
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
export function getDisplayMetaForConversations(
|
|
928
|
+
conversationIds: string[],
|
|
929
|
+
): Map<string, { displayOrder: number | null; isPinned: boolean }> {
|
|
930
|
+
ensureDisplayOrderMigration();
|
|
931
|
+
const result = new Map<
|
|
932
|
+
string,
|
|
933
|
+
{ displayOrder: number | null; isPinned: boolean }
|
|
934
|
+
>();
|
|
935
|
+
if (conversationIds.length === 0) return result;
|
|
936
|
+
for (const id of conversationIds) {
|
|
937
|
+
const row = rawGet<{
|
|
938
|
+
display_order: number | null;
|
|
939
|
+
is_pinned: number | null;
|
|
940
|
+
}>("SELECT display_order, is_pinned FROM conversations WHERE id = ?", id);
|
|
941
|
+
result.set(id, {
|
|
942
|
+
displayOrder: row?.display_order ?? null,
|
|
943
|
+
isPinned: (row?.is_pinned ?? 0) === 1,
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
return result;
|
|
947
|
+
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runtime migration for display_order and is_pinned columns on the
|
|
3
3
|
* conversations table. Extracted into its own module to avoid circular
|
|
4
|
-
* dependencies between conversation-
|
|
5
|
-
*
|
|
6
|
-
* the migration to run before ORDER BY display_order).
|
|
4
|
+
* dependencies between conversation-crud.ts and conversation-queries.ts
|
|
5
|
+
* (which needs the migration to run before ORDER BY display_order).
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
8
|
import { getLogger } from "../util/logger.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { and, asc, count, desc, eq,
|
|
1
|
+
import { and, asc, count, desc, eq, lt, or, sql } from "drizzle-orm";
|
|
2
2
|
|
|
3
3
|
import { getLogger } from "../util/logger.js";
|
|
4
4
|
import type { ConversationRow, MessageRow } from "./conversation-crud.js";
|
|
@@ -55,34 +55,6 @@ export function getLatestConversation(): ConversationRow | null {
|
|
|
55
55
|
return row ? parseConversation(row) : null;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/**
|
|
59
|
-
* Get the next message in a conversation after a given message.
|
|
60
|
-
* Uses gte + ne(id) instead of gt on timestamp so that messages sharing the
|
|
61
|
-
* same millisecond (common in legacy conversations where an assistant turn and
|
|
62
|
-
* the following user tool_result are saved in the same tick) are not skipped.
|
|
63
|
-
*/
|
|
64
|
-
export function getNextMessage(
|
|
65
|
-
conversationId: string,
|
|
66
|
-
afterTimestamp: number,
|
|
67
|
-
excludeMessageId: string,
|
|
68
|
-
): MessageRow | null {
|
|
69
|
-
const db = getDb();
|
|
70
|
-
const row = db
|
|
71
|
-
.select()
|
|
72
|
-
.from(messages)
|
|
73
|
-
.where(
|
|
74
|
-
and(
|
|
75
|
-
eq(messages.conversationId, conversationId),
|
|
76
|
-
gte(messages.createdAt, afterTimestamp),
|
|
77
|
-
ne(messages.id, excludeMessageId),
|
|
78
|
-
),
|
|
79
|
-
)
|
|
80
|
-
.orderBy(asc(messages.createdAt), asc(messages.id))
|
|
81
|
-
.limit(1)
|
|
82
|
-
.get();
|
|
83
|
-
return row ? parseMessage(row) : null;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
58
|
export interface PaginatedMessagesResult {
|
|
87
59
|
messages: MessageRow[];
|
|
88
60
|
/** Whether older messages exist beyond the returned page. */
|
|
@@ -12,8 +12,12 @@ import { getConfiguredProvider } from "../providers/provider-send-message.js";
|
|
|
12
12
|
import type { Provider } from "../providers/types.js";
|
|
13
13
|
import { getLogger } from "../util/logger.js";
|
|
14
14
|
import { truncate } from "../util/truncate.js";
|
|
15
|
-
import
|
|
16
|
-
|
|
15
|
+
import {
|
|
16
|
+
getConversation,
|
|
17
|
+
getMessages,
|
|
18
|
+
type MessageRow,
|
|
19
|
+
updateConversationTitle,
|
|
20
|
+
} from "./conversation-crud.js";
|
|
17
21
|
|
|
18
22
|
const log = getLogger("conversation-title-service");
|
|
19
23
|
|
|
@@ -110,7 +114,7 @@ export async function generateAndPersistConversationTitle(
|
|
|
110
114
|
} = params;
|
|
111
115
|
|
|
112
116
|
// Check current title is replaceable
|
|
113
|
-
const conversation =
|
|
117
|
+
const conversation = getConversation(conversationId);
|
|
114
118
|
if (conversation && !isReplaceableTitle(conversation.title)) {
|
|
115
119
|
return { title: conversation.title!, updated: false };
|
|
116
120
|
}
|
|
@@ -119,7 +123,7 @@ export async function generateAndPersistConversationTitle(
|
|
|
119
123
|
if (!provider) {
|
|
120
124
|
// No provider available — fall back to context-derived title or untitled
|
|
121
125
|
const fallback = deriveFallbackTitle(context) ?? UNTITLED_FALLBACK;
|
|
122
|
-
|
|
126
|
+
updateConversationTitle(conversationId, fallback, 1);
|
|
123
127
|
onTitleUpdated?.(fallback);
|
|
124
128
|
return { title: fallback, updated: true };
|
|
125
129
|
}
|
|
@@ -136,7 +140,10 @@ export async function generateAndPersistConversationTitle(
|
|
|
136
140
|
[],
|
|
137
141
|
undefined,
|
|
138
142
|
{
|
|
139
|
-
config: {
|
|
143
|
+
config: {
|
|
144
|
+
max_tokens: config.daemon.titleGenerationMaxTokens,
|
|
145
|
+
modelIntent: "latency-optimized",
|
|
146
|
+
},
|
|
140
147
|
signal: combinedSignal,
|
|
141
148
|
},
|
|
142
149
|
);
|
|
@@ -149,12 +156,12 @@ export async function generateAndPersistConversationTitle(
|
|
|
149
156
|
}
|
|
150
157
|
|
|
151
158
|
// Re-check replaceability before persisting (race guard)
|
|
152
|
-
const current =
|
|
159
|
+
const current = getConversation(conversationId);
|
|
153
160
|
if (current && !isReplaceableTitle(current.title)) {
|
|
154
161
|
return { title: current.title!, updated: false };
|
|
155
162
|
}
|
|
156
163
|
|
|
157
|
-
|
|
164
|
+
updateConversationTitle(conversationId, title, 1);
|
|
158
165
|
onTitleUpdated?.(title);
|
|
159
166
|
log.info({ conversationId, title }, "Auto-generated conversation title");
|
|
160
167
|
return { title, updated: true };
|
|
@@ -165,13 +172,13 @@ export async function generateAndPersistConversationTitle(
|
|
|
165
172
|
// text-response path above). A concurrent custom rename may have landed
|
|
166
173
|
// while the LLM request was in-flight; writing unconditionally would
|
|
167
174
|
// clobber the user's intent.
|
|
168
|
-
const currentForFallback =
|
|
175
|
+
const currentForFallback = getConversation(conversationId);
|
|
169
176
|
if (currentForFallback && !isReplaceableTitle(currentForFallback.title)) {
|
|
170
177
|
return { title: currentForFallback.title!, updated: false };
|
|
171
178
|
}
|
|
172
179
|
|
|
173
180
|
const fallback = deriveFallbackTitle(context) ?? UNTITLED_FALLBACK;
|
|
174
|
-
|
|
181
|
+
updateConversationTitle(conversationId, fallback, 1);
|
|
175
182
|
onTitleUpdated?.(fallback);
|
|
176
183
|
return { title: fallback, updated: true };
|
|
177
184
|
}
|
|
@@ -191,16 +198,11 @@ export function queueGenerateConversationTitle(
|
|
|
191
198
|
);
|
|
192
199
|
// Replace loading placeholder with stable fallback
|
|
193
200
|
try {
|
|
194
|
-
const conversation =
|
|
195
|
-
params.conversationId,
|
|
196
|
-
);
|
|
201
|
+
const conversation = getConversation(params.conversationId);
|
|
197
202
|
if (conversation && conversation.title === GENERATING_TITLE) {
|
|
198
203
|
const fallback =
|
|
199
204
|
deriveFallbackTitle(params.context) ?? UNTITLED_FALLBACK;
|
|
200
|
-
|
|
201
|
-
params.conversationId,
|
|
202
|
-
fallback,
|
|
203
|
-
);
|
|
205
|
+
updateConversationTitle(params.conversationId, fallback);
|
|
204
206
|
params.onTitleUpdated?.(fallback);
|
|
205
207
|
}
|
|
206
208
|
} catch {
|
|
@@ -228,7 +230,7 @@ export async function regenerateConversationTitle(
|
|
|
228
230
|
): Promise<{ title: string; updated: boolean }> {
|
|
229
231
|
const { conversationId, onTitleUpdated, signal } = params;
|
|
230
232
|
|
|
231
|
-
const conversation =
|
|
233
|
+
const conversation = getConversation(conversationId);
|
|
232
234
|
if (!conversation || !conversation.isAutoTitle) {
|
|
233
235
|
return { title: conversation?.title ?? UNTITLED_FALLBACK, updated: false };
|
|
234
236
|
}
|
|
@@ -238,7 +240,7 @@ export async function regenerateConversationTitle(
|
|
|
238
240
|
return { title: conversation.title ?? UNTITLED_FALLBACK, updated: false };
|
|
239
241
|
}
|
|
240
242
|
|
|
241
|
-
const allMessages =
|
|
243
|
+
const allMessages = getMessages(conversationId);
|
|
242
244
|
const recentMessages = allMessages.slice(-3);
|
|
243
245
|
if (recentMessages.length === 0) {
|
|
244
246
|
return { title: conversation.title ?? UNTITLED_FALLBACK, updated: false };
|
|
@@ -256,7 +258,10 @@ export async function regenerateConversationTitle(
|
|
|
256
258
|
[],
|
|
257
259
|
undefined,
|
|
258
260
|
{
|
|
259
|
-
config: {
|
|
261
|
+
config: {
|
|
262
|
+
max_tokens: config.daemon.titleGenerationMaxTokens,
|
|
263
|
+
modelIntent: "latency-optimized",
|
|
264
|
+
},
|
|
260
265
|
signal: combinedSignal,
|
|
261
266
|
},
|
|
262
267
|
);
|
|
@@ -269,12 +274,12 @@ export async function regenerateConversationTitle(
|
|
|
269
274
|
}
|
|
270
275
|
|
|
271
276
|
// Re-check isAutoTitle before persisting (race guard against manual rename)
|
|
272
|
-
const current =
|
|
277
|
+
const current = getConversation(conversationId);
|
|
273
278
|
if (!current || !current.isAutoTitle) {
|
|
274
279
|
return { title: current?.title ?? UNTITLED_FALLBACK, updated: false };
|
|
275
280
|
}
|
|
276
281
|
|
|
277
|
-
|
|
282
|
+
updateConversationTitle(conversationId, title, 1);
|
|
278
283
|
onTitleUpdated?.(title);
|
|
279
284
|
log.info(
|
|
280
285
|
{ conversationId, title },
|
|
@@ -2,12 +2,7 @@ import { Database } from "bun:sqlite";
|
|
|
2
2
|
|
|
3
3
|
import { drizzle } from "drizzle-orm/bun-sqlite";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
ensureDataDir,
|
|
7
|
-
getDbPath,
|
|
8
|
-
migrateToDataLayout,
|
|
9
|
-
migrateToWorkspaceLayout,
|
|
10
|
-
} from "../util/platform.js";
|
|
5
|
+
import { ensureDataDir, getDbPath } from "../util/platform.js";
|
|
11
6
|
import * as schema from "./schema.js";
|
|
12
7
|
|
|
13
8
|
export type DrizzleDb = ReturnType<typeof drizzle<typeof schema>>;
|
|
@@ -16,8 +11,6 @@ let db: DrizzleDb | null = null;
|
|
|
16
11
|
|
|
17
12
|
export function getDb(): DrizzleDb {
|
|
18
13
|
if (!db) {
|
|
19
|
-
migrateToDataLayout();
|
|
20
|
-
migrateToWorkspaceLayout();
|
|
21
14
|
ensureDataDir();
|
|
22
15
|
const sqlite = new Database(getDbPath());
|
|
23
16
|
sqlite.exec("PRAGMA journal_mode=WAL");
|
package/src/memory/db-init.ts
CHANGED
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
migrateAssistantContactMetadata,
|
|
36
36
|
migrateBackfillContactInteractionStats,
|
|
37
37
|
migrateBackfillGuardianPrincipalId,
|
|
38
|
+
migrateBackfillUsageCacheAccounting,
|
|
38
39
|
migrateCallSessionMode,
|
|
39
40
|
migrateCanonicalGuardianDeliveriesDestinationIndex,
|
|
40
41
|
migrateCanonicalGuardianRequesterChatId,
|
|
@@ -63,6 +64,10 @@ import {
|
|
|
63
64
|
migrateNormalizePhoneIdentities,
|
|
64
65
|
migrateNotificationDeliveryThreadDecision,
|
|
65
66
|
migrateReminderRoutingIntent,
|
|
67
|
+
migrateRenameGuardianVerificationValues,
|
|
68
|
+
migrateRenameVerificationSessionIdColumn,
|
|
69
|
+
migrateRenameVerificationTable,
|
|
70
|
+
migrateRenameVoiceToPhone,
|
|
66
71
|
migrateSchemaIndexesAndColumns,
|
|
67
72
|
migrateUsageDashboardIndexes,
|
|
68
73
|
migrateVoiceInviteColumns,
|
|
@@ -304,6 +309,21 @@ export function initializeDb(): void {
|
|
|
304
309
|
// 43. Drop all composite usage indexes — they don't eliminate temp B-trees for GROUP BY
|
|
305
310
|
migrateDropUsageCompositeIndexes(database);
|
|
306
311
|
|
|
312
|
+
// 44. Backfill historical Anthropic usage rows from request-log truth before dashboard reads
|
|
313
|
+
migrateBackfillUsageCacheAccounting(database);
|
|
314
|
+
|
|
315
|
+
// 45. Rename channel_guardian_verification_challenges → channel_verification_sessions
|
|
316
|
+
migrateRenameVerificationTable(database);
|
|
317
|
+
|
|
318
|
+
// 46. Rename guardian_verification_session_id → verification_session_id in call_sessions
|
|
319
|
+
migrateRenameVerificationSessionIdColumn(database);
|
|
320
|
+
|
|
321
|
+
// 47. Rename persisted guardian_verification call_mode and event_type values
|
|
322
|
+
migrateRenameGuardianVerificationValues(database);
|
|
323
|
+
|
|
324
|
+
// 48. Rename stored "voice" channel values to "phone" across all channel text columns
|
|
325
|
+
migrateRenameVoiceToPhone(database);
|
|
326
|
+
|
|
307
327
|
validateMigrationState(database);
|
|
308
328
|
|
|
309
329
|
if (process.env.BUN_TEST === "1") {
|
|
@@ -9,11 +9,7 @@ import { and, desc, eq, isNotNull } from "drizzle-orm";
|
|
|
9
9
|
import { v4 as uuid } from "uuid";
|
|
10
10
|
|
|
11
11
|
import { DAEMON_INTERNAL_ASSISTANT_ID } from "../runtime/assistant-scope.js";
|
|
12
|
-
import {
|
|
13
|
-
getConversationByKey,
|
|
14
|
-
getOrCreateConversation,
|
|
15
|
-
setConversationKeyIfAbsent,
|
|
16
|
-
} from "./conversation-key-store.js";
|
|
12
|
+
import { getOrCreateConversation } from "./conversation-key-store.js";
|
|
17
13
|
import { getDb } from "./db.js";
|
|
18
14
|
import { channelInboundEvents, conversations } from "./schema.js";
|
|
19
15
|
|
|
@@ -65,35 +61,9 @@ export function recordInbound(
|
|
|
65
61
|
};
|
|
66
62
|
}
|
|
67
63
|
|
|
68
|
-
const assistantId = options?.assistantId;
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
? `asst:${assistantId}:${sourceChannel}:${externalChatId}`
|
|
72
|
-
: legacyKey;
|
|
73
|
-
|
|
74
|
-
// Resolve conversation mapping with assistant-scoped keying:
|
|
75
|
-
// 1. If scoped key exists, use it directly.
|
|
76
|
-
// 2. If assistantId is "self" and legacy key exists, reuse the legacy
|
|
77
|
-
// conversation and create a scoped alias to prevent future bleed.
|
|
78
|
-
// 3. Otherwise, create/get conversation from the scoped key.
|
|
79
|
-
let mapping: { conversationId: string; created: boolean };
|
|
80
|
-
const scopedMapping = assistantId ? getConversationByKey(scopedKey) : null;
|
|
81
|
-
if (scopedMapping) {
|
|
82
|
-
mapping = { conversationId: scopedMapping.conversationId, created: false };
|
|
83
|
-
} else if (assistantId === DAEMON_INTERNAL_ASSISTANT_ID) {
|
|
84
|
-
const legacyMapping = getConversationByKey(legacyKey);
|
|
85
|
-
if (legacyMapping) {
|
|
86
|
-
mapping = {
|
|
87
|
-
conversationId: legacyMapping.conversationId,
|
|
88
|
-
created: false,
|
|
89
|
-
};
|
|
90
|
-
setConversationKeyIfAbsent(scopedKey, legacyMapping.conversationId);
|
|
91
|
-
} else {
|
|
92
|
-
mapping = getOrCreateConversation(scopedKey);
|
|
93
|
-
}
|
|
94
|
-
} else {
|
|
95
|
-
mapping = getOrCreateConversation(scopedKey);
|
|
96
|
-
}
|
|
64
|
+
const assistantId = options?.assistantId ?? DAEMON_INTERNAL_ASSISTANT_ID;
|
|
65
|
+
const scopedKey = `asst:${assistantId}:${sourceChannel}:${externalChatId}`;
|
|
66
|
+
const mapping = getOrCreateConversation(scopedKey);
|
|
97
67
|
const now = Date.now();
|
|
98
68
|
const eventId = uuid();
|
|
99
69
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Store for external conversation bindings — maps internal conversation IDs
|
|
3
|
-
* to external channel identifiers (e.g. Telegram chat ID,
|
|
3
|
+
* to external channel identifiers (e.g. Telegram chat ID, voice session).
|
|
4
4
|
*
|
|
5
5
|
* This enables the system to track which conversations originated from
|
|
6
6
|
* external channels and expose channel metadata in session/conversation
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { estimateTextTokens } from "../context/token-estimator.js";
|
|
2
|
+
import { buildInjectedText } from "./search/formatting.js";
|
|
3
|
+
import { markItemUsage, trimToTokenBudget } from "./search/ranking.js";
|
|
4
|
+
import type { Candidate } from "./search/types.js";
|
|
5
|
+
|
|
6
|
+
export interface FormatRecallTextOptions {
|
|
7
|
+
/** Injection format: 'markdown' or 'structured_v1'. */
|
|
8
|
+
format: string;
|
|
9
|
+
/** Maximum token budget for the formatted output. */
|
|
10
|
+
maxTokens: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface FormatRecallTextResult {
|
|
14
|
+
/** The formatted text ready for injection. */
|
|
15
|
+
text: string;
|
|
16
|
+
/** Candidates that fit within the token budget. */
|
|
17
|
+
selected: Candidate[];
|
|
18
|
+
/** Token count of the final injected text. */
|
|
19
|
+
tokenCount: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Format scored recall candidates into injectable text.
|
|
24
|
+
*
|
|
25
|
+
* Trims candidates to the token budget, groups by section with temporal
|
|
26
|
+
* grounding, applies "Lost in the Middle" ordering, and marks item usage.
|
|
27
|
+
*
|
|
28
|
+
* Extracted from `formatRecallResult()` in `retriever.ts` so both the
|
|
29
|
+
* auto-injection path and the on-demand memory_recall tool can reuse it.
|
|
30
|
+
*/
|
|
31
|
+
export function formatRecallText(
|
|
32
|
+
candidates: Candidate[],
|
|
33
|
+
opts: FormatRecallTextOptions,
|
|
34
|
+
): FormatRecallTextResult {
|
|
35
|
+
const { format, maxTokens } = opts;
|
|
36
|
+
|
|
37
|
+
const selected = trimToTokenBudget(candidates, maxTokens, format);
|
|
38
|
+
markItemUsage(selected);
|
|
39
|
+
|
|
40
|
+
const text = buildInjectedText(selected, format);
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
text,
|
|
44
|
+
selected,
|
|
45
|
+
tokenCount: estimateTextTokens(text),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Store for cross-channel guardian action requests and deliveries.
|
|
3
3
|
*
|
|
4
4
|
* Guardian action requests are created when a voice call's ASK_GUARDIAN
|
|
5
|
-
* marker fires, and deliveries track per-channel dispatch (telegram,
|
|
5
|
+
* marker fires, and deliveries track per-channel dispatch (telegram, mac).
|
|
6
6
|
* Resolution uses first-response-wins semantics: the first channel to
|
|
7
7
|
* answer resolves the request and all other deliveries are marked answered.
|
|
8
8
|
*/
|
|
@@ -301,11 +301,10 @@ export function resolveGuardianActionRequest(
|
|
|
301
301
|
|
|
302
302
|
/**
|
|
303
303
|
* Expire a guardian action request and all its deliveries.
|
|
304
|
-
* When reason is not provided, defaults to 'sweep_timeout' for backward compatibility.
|
|
305
304
|
*/
|
|
306
305
|
export function expireGuardianActionRequest(
|
|
307
306
|
id: string,
|
|
308
|
-
reason
|
|
307
|
+
reason: ExpiredReason,
|
|
309
308
|
): void {
|
|
310
309
|
const db = getDb();
|
|
311
310
|
const now = Date.now();
|
|
@@ -313,7 +312,7 @@ export function expireGuardianActionRequest(
|
|
|
313
312
|
db.update(guardianActionRequests)
|
|
314
313
|
.set({
|
|
315
314
|
status: "expired",
|
|
316
|
-
expiredReason: reason
|
|
315
|
+
expiredReason: reason,
|
|
317
316
|
updatedAt: now,
|
|
318
317
|
})
|
|
319
318
|
.where(
|
|
@@ -864,7 +863,7 @@ export function getExpiredDeliveriesByConversation(
|
|
|
864
863
|
/**
|
|
865
864
|
* Look up deliveries for requests in `awaiting_guardian_choice` follow-up state.
|
|
866
865
|
* Used by inbound message routing to intercept guardian follow-up replies
|
|
867
|
-
* on channel paths (Telegram,
|
|
866
|
+
* on channel paths (Telegram, WhatsApp).
|
|
868
867
|
*/
|
|
869
868
|
export function getFollowupDeliveriesByDestination(
|
|
870
869
|
channel: string,
|
|
@@ -151,9 +151,6 @@ export function recordInvalidAttempt(
|
|
|
151
151
|
channel,
|
|
152
152
|
actorExternalUserId,
|
|
153
153
|
actorChatId,
|
|
154
|
-
// Legacy columns kept for backward compatibility with upgraded databases
|
|
155
|
-
invalidAttempts: 0,
|
|
156
|
-
windowStartedAt: 0,
|
|
157
154
|
attemptTimestampsJson: JSON.stringify(timestamps),
|
|
158
155
|
lockedUntil,
|
|
159
156
|
createdAt: now,
|
|
@@ -331,7 +331,7 @@ export function findActiveVoiceInvites(params: {
|
|
|
331
331
|
.from(assistantIngressInvites)
|
|
332
332
|
.where(
|
|
333
333
|
and(
|
|
334
|
-
eq(assistantIngressInvites.sourceChannel, "
|
|
334
|
+
eq(assistantIngressInvites.sourceChannel, "phone"),
|
|
335
335
|
eq(assistantIngressInvites.status, "active"),
|
|
336
336
|
eq(
|
|
337
337
|
assistantIngressInvites.expectedExternalUserId,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
getConversationMemoryScopeId,
|
|
13
13
|
messageMetadataSchema,
|
|
14
|
-
} from "../conversation-
|
|
14
|
+
} from "../conversation-crud.js";
|
|
15
15
|
import { getDb } from "../db.js";
|
|
16
16
|
import { indexMessageNow } from "../indexer.js";
|
|
17
17
|
import {
|
|
@@ -169,6 +169,7 @@ export function backfillEntityRelationsJob(
|
|
|
169
169
|
const batch = db
|
|
170
170
|
.select({
|
|
171
171
|
id: messages.id,
|
|
172
|
+
conversationId: messages.conversationId,
|
|
172
173
|
role: messages.role,
|
|
173
174
|
createdAt: messages.createdAt,
|
|
174
175
|
metadata: messages.metadata,
|
|
@@ -180,6 +181,7 @@ export function backfillEntityRelationsJob(
|
|
|
180
181
|
.all();
|
|
181
182
|
if (batch.length === 0) return;
|
|
182
183
|
|
|
184
|
+
const scopeCache = new Map<string, string>();
|
|
183
185
|
let queuedExtractEntityJobs = 0;
|
|
184
186
|
let skippedUntrusted = 0;
|
|
185
187
|
for (const message of batch) {
|
|
@@ -190,7 +192,12 @@ export function backfillEntityRelationsJob(
|
|
|
190
192
|
skippedUntrusted += 1;
|
|
191
193
|
continue;
|
|
192
194
|
}
|
|
193
|
-
|
|
195
|
+
let scopeId = scopeCache.get(message.conversationId);
|
|
196
|
+
if (scopeId === undefined) {
|
|
197
|
+
scopeId = getConversationMemoryScopeId(message.conversationId);
|
|
198
|
+
scopeCache.set(message.conversationId, scopeId);
|
|
199
|
+
}
|
|
200
|
+
enqueueMemoryJob("extract_entities", { messageId: message.id, scopeId });
|
|
194
201
|
queuedExtractEntityJobs += 1;
|
|
195
202
|
}
|
|
196
203
|
|
|
@@ -22,7 +22,8 @@ const log = getLogger("memory-jobs-worker");
|
|
|
22
22
|
|
|
23
23
|
export async function extractItemsJob(job: MemoryJob): Promise<void> {
|
|
24
24
|
const messageId = asString(job.payload.messageId);
|
|
25
|
-
|
|
25
|
+
const scopeId = asString(job.payload.scopeId);
|
|
26
|
+
if (!messageId || !scopeId) return;
|
|
26
27
|
|
|
27
28
|
// If the conversation that owns this message has been marked as failed,
|
|
28
29
|
// skip extraction entirely. This prevents async extraction jobs from
|
|
@@ -41,12 +42,6 @@ export async function extractItemsJob(job: MemoryJob): Promise<void> {
|
|
|
41
42
|
return;
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
// Backward compat: old payloads may lack scopeId — default to 'default'
|
|
45
|
-
const scopeId =
|
|
46
|
-
typeof job.payload.scopeId === "string" && job.payload.scopeId
|
|
47
|
-
? job.payload.scopeId
|
|
48
|
-
: "default";
|
|
49
|
-
|
|
50
45
|
await extractAndUpsertMemoryItemsForMessage(
|
|
51
46
|
messageId,
|
|
52
47
|
scopeId,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
userMessage,
|
|
11
11
|
} from "../../providers/provider-send-message.js";
|
|
12
12
|
import { getLogger } from "../../util/logger.js";
|
|
13
|
-
import { getConversationMemoryScopeId } from "../conversation-
|
|
13
|
+
import { getConversationMemoryScopeId } from "../conversation-crud.js";
|
|
14
14
|
import { getDb } from "../db.js";
|
|
15
15
|
import {
|
|
16
16
|
asString,
|
|
@@ -90,6 +90,7 @@ export interface UsageTimeRange {
|
|
|
90
90
|
|
|
91
91
|
/** Aggregate totals across a time range. */
|
|
92
92
|
export interface UsageTotals {
|
|
93
|
+
/** Direct input tokens only; cache traffic is reported separately below. */
|
|
93
94
|
totalInputTokens: number;
|
|
94
95
|
totalOutputTokens: number;
|
|
95
96
|
totalCacheCreationTokens: number;
|
|
@@ -104,6 +105,7 @@ export interface UsageTotals {
|
|
|
104
105
|
export interface UsageDayBucket {
|
|
105
106
|
/** ISO date string (YYYY-MM-DD) in UTC. */
|
|
106
107
|
date: string;
|
|
108
|
+
/** Direct input tokens only; cache traffic is tracked separately in totals. */
|
|
107
109
|
totalInputTokens: number;
|
|
108
110
|
totalOutputTokens: number;
|
|
109
111
|
totalEstimatedCostUsd: number;
|
|
@@ -113,8 +115,11 @@ export interface UsageDayBucket {
|
|
|
113
115
|
/** A grouped breakdown row (by actor, provider, or model). */
|
|
114
116
|
export interface UsageGroupBreakdown {
|
|
115
117
|
group: string;
|
|
118
|
+
/** Direct input tokens only; cache traffic is reported separately below. */
|
|
116
119
|
totalInputTokens: number;
|
|
117
120
|
totalOutputTokens: number;
|
|
121
|
+
totalCacheCreationTokens: number;
|
|
122
|
+
totalCacheReadTokens: number;
|
|
118
123
|
totalEstimatedCostUsd: number;
|
|
119
124
|
eventCount: number;
|
|
120
125
|
}
|
|
@@ -144,6 +149,8 @@ interface GroupRow {
|
|
|
144
149
|
group_key: string;
|
|
145
150
|
total_input_tokens: number;
|
|
146
151
|
total_output_tokens: number;
|
|
152
|
+
total_cache_creation_tokens: number;
|
|
153
|
+
total_cache_read_tokens: number;
|
|
147
154
|
total_estimated_cost_usd: number | null;
|
|
148
155
|
event_count: number;
|
|
149
156
|
}
|
|
@@ -236,6 +243,8 @@ export function getUsageGroupBreakdown(
|
|
|
236
243
|
${column} AS group_key,
|
|
237
244
|
COALESCE(SUM(input_tokens), 0) AS total_input_tokens,
|
|
238
245
|
COALESCE(SUM(output_tokens), 0) AS total_output_tokens,
|
|
246
|
+
COALESCE(SUM(cache_creation_input_tokens), 0) AS total_cache_creation_tokens,
|
|
247
|
+
COALESCE(SUM(cache_read_input_tokens), 0) AS total_cache_read_tokens,
|
|
239
248
|
COALESCE(SUM(estimated_cost_usd), 0) AS total_estimated_cost_usd,
|
|
240
249
|
COUNT(*) AS event_count
|
|
241
250
|
FROM llm_usage_events
|
|
@@ -250,6 +259,8 @@ export function getUsageGroupBreakdown(
|
|
|
250
259
|
group: r.group_key,
|
|
251
260
|
totalInputTokens: r.total_input_tokens,
|
|
252
261
|
totalOutputTokens: r.total_output_tokens,
|
|
262
|
+
totalCacheCreationTokens: r.total_cache_creation_tokens,
|
|
263
|
+
totalCacheReadTokens: r.total_cache_read_tokens,
|
|
253
264
|
totalEstimatedCostUsd: r.total_estimated_cost_usd ?? 0,
|
|
254
265
|
eventCount: r.event_count,
|
|
255
266
|
}));
|