@vellumai/assistant 0.12.1-staging.1 → 0.12.1
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/AGENTS.md +0 -4
- package/ARCHITECTURE.md +12 -11
- package/docs/architecture/turn-actor.md +8 -15
- package/openapi.yaml +1 -291
- package/package.json +1 -1
- package/src/__tests__/always-loaded-tools-guard.test.ts +10 -18
- package/src/__tests__/app-compiler.test.ts +0 -6
- package/src/__tests__/app-control-tool-schemas.test.ts +2 -5
- package/src/__tests__/app-dir-path-guard.test.ts +3 -1
- package/src/__tests__/app-source-watcher.test.ts +218 -0
- package/src/{calls/__tests__ → __tests__}/call-controller.test.ts +82 -503
- package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +2 -5
- package/src/__tests__/computer-use-tools.test.ts +5 -17
- package/src/__tests__/config-schema-cmd.test.ts +2 -2
- package/src/__tests__/config-schema.test.ts +29 -28
- package/src/__tests__/config-watcher-skill-reseed.test.ts +359 -0
- package/src/__tests__/config-watcher.test.ts +8 -23
- package/src/__tests__/connection-model-compat.test.ts +2 -2
- package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +0 -26
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +10 -4
- package/src/__tests__/conversation-queue.test.ts +207 -48
- package/src/__tests__/conversation-retry-discard.test.ts +1 -54
- package/src/__tests__/conversation-skill-tools.test.ts +0 -27
- package/src/__tests__/conversation-surfaces-app-control.test.ts +3 -8
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -67
- package/src/__tests__/conversation-title-service.test.ts +10 -14
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +5 -3
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -51
- package/src/__tests__/credential-record-retire.test.ts +1 -171
- package/src/__tests__/credential-routes.test.ts +3 -212
- package/src/__tests__/credential-security-invariants.test.ts +1 -2
- package/src/__tests__/cu-unified-flow.test.ts +2 -8
- package/src/__tests__/drain-kick-guard.test.ts +2 -0
- package/src/__tests__/drain-requeue-on-contention.test.ts +6 -0
- package/src/__tests__/evict-conversations-for-reload.test.ts +1 -1
- package/src/__tests__/host-bash-proxy.test.ts +45 -26
- package/src/__tests__/host-browser-proxy.test.ts +17 -6
- package/src/__tests__/host-file-proxy-targeted.test.ts +0 -23
- package/src/__tests__/host-file-proxy.test.ts +23 -11
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +9 -30
- package/src/__tests__/llm-catalog-parity.test.ts +0 -25
- package/src/__tests__/mcp-auth-routes.test.ts +9 -6
- package/src/__tests__/mcp-config-secret-boundary.test.ts +136 -78
- package/src/__tests__/mcp-health-check.test.ts +11 -8
- package/src/__tests__/mcp-list-plugin-servers.test.ts +10 -8
- package/src/{calls/__tests__ → __tests__}/media-stream-audio-transcode.test.ts +1 -1
- package/src/{calls/__tests__ → __tests__}/media-stream-output.test.ts +8 -37
- package/src/{calls/__tests__ → __tests__}/media-stream-parser.test.ts +1 -1
- package/src/{calls/__tests__ → __tests__}/media-stream-server-integration.test.ts +57 -150
- package/src/{calls/__tests__ → __tests__}/media-stream-stt-session.test.ts +5 -5
- package/src/{calls/__tests__ → __tests__}/media-turn-detector.test.ts +1 -1
- package/src/__tests__/messages-after-tiebreaker.test.ts +0 -91
- package/src/__tests__/messages-read-boundary-guard.test.ts +1 -1
- package/src/__tests__/messaging-send-tool.test.ts +548 -355
- package/src/__tests__/model-intents.test.ts +0 -3
- package/src/__tests__/outlook-messaging-provider.test.ts +6 -6
- package/src/__tests__/platform-client-verify-credential.test.ts +0 -2
- package/src/__tests__/plugin-import-boundary-guard.test.ts +0 -13
- package/src/__tests__/script-proxy-certs.test.ts +0 -35
- package/src/__tests__/skill-feature-flags-integration.test.ts +1 -1
- package/src/__tests__/skill-feature-flags.test.ts +2 -2
- package/src/__tests__/speaker-identification.test.ts +56 -0
- package/src/__tests__/subagent-tool-gate-mode.test.ts +3 -19
- package/src/__tests__/subagent-tools.test.ts +2 -3
- package/src/__tests__/telephony-tts-guard.test.ts +3 -38
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +0 -4
- package/src/{calls/__tests__/voice-session-bridge-turn-flow.test.ts → __tests__/voice-session-bridge.test.ts} +12 -20
- package/src/__tests__/watch-retro-tool-availability.test.ts +17 -8
- package/src/__tests__/workspace-git-service.test.ts +0 -26
- package/src/acp/__tests__/agent-process.test.ts +4 -258
- package/src/acp/__tests__/auth-required.test.ts +0 -96
- package/src/acp/__tests__/client-handler.test.ts +2 -90
- package/src/acp/__tests__/session-manager-persistence.test.ts +1 -5
- package/src/acp/__tests__/session-manager-resume.test.ts +6 -270
- package/src/acp/__tests__/session-manager-usage.test.ts +2 -4
- package/src/acp/__tests__/session-manager.test.ts +4 -895
- package/src/acp/agent-process.test.ts +1 -4
- package/src/acp/agent-process.ts +9 -94
- package/src/acp/auth-required.ts +1 -50
- package/src/acp/auto-install.test.ts +7 -9
- package/src/acp/client-handler.ts +3 -16
- package/src/acp/resolve-agent.test.ts +6 -220
- package/src/acp/resolve-agent.ts +23 -88
- package/src/acp/session-manager.test.ts +3 -196
- package/src/acp/session-manager.ts +18 -441
- package/src/acp/types.ts +5 -50
- package/src/api/events/app-files-changed.ts +3 -4
- package/src/api/index.ts +0 -6
- package/src/apps/app-store.ts +1 -1
- package/src/bundler/app-compiler.ts +0 -15
- package/src/calls/__tests__/voice-control-protocol.test.ts +25 -58
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -37
- package/src/calls/__tests__/voice-triage-escalate.test.ts +0 -105
- package/src/calls/call-constants.ts +4 -24
- package/src/calls/call-controller.ts +199 -499
- package/src/calls/call-transport.ts +0 -16
- package/src/calls/media-stream-output.ts +0 -32
- package/src/calls/media-stream-server.ts +30 -82
- package/src/calls/media-stream-stt-session.ts +0 -15
- package/src/calls/resolve-call-tts-provider.ts +2 -33
- package/src/calls/speaker-identification.ts +233 -0
- package/src/calls/tts-call-strategy.ts +5 -9
- package/src/calls/types.ts +0 -2
- package/src/calls/voice-control-protocol.ts +21 -53
- package/src/calls/voice-session-bridge.ts +46 -59
- package/src/calls/voice-triage-escalate.ts +56 -175
- package/src/cli/commands/apps.help.ts +13 -67
- package/src/cli/commands/apps.ts +0 -183
- package/src/cli/commands/channels/index.help.ts +2 -70
- package/src/cli/commands/channels/index.ts +3 -16
- package/src/cli/commands/credentials.help.ts +2 -6
- package/src/cli/commands/credentials.ts +2 -2
- package/src/cli/commands/mcp.help.ts +8 -8
- package/src/cli/commands/mcp.ts +1 -1
- package/src/cli/commands/roadmap.help.ts +1 -5
- package/src/cli/commands/roadmap.ts +1 -1
- package/src/cli/lib/bundled-marketplace.json +90 -103
- package/src/config/__tests__/default-profile-catalog.test.ts +0 -22
- package/src/config/__tests__/memory-retrospective-schema.test.ts +1 -15
- package/src/config/__tests__/platform-rehydration.test.ts +0 -93
- package/src/config/acp-defaults.test.ts +3 -13
- package/src/config/acp-defaults.ts +6 -23
- package/src/config/acp-schema.ts +2 -30
- package/src/config/bundled-skills/acp/SKILL.md +14 -22
- package/src/config/bundled-skills/acp/TOOLS.json +1 -5
- package/src/config/bundled-skills/app-builder/SKILL.md +9 -12
- package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +1 -1
- package/src/config/bundled-skills/messaging/TOOLS.json +3 -3
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +139 -67
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +1 -1
- package/src/config/bundled-skills/screen-annotation/SKILL.md +1 -8
- package/src/config/bundled-skills/screen-annotation/tools/screen-annotation.test.ts +1 -4
- package/src/config/bundled-skills/skill-management/TOOLS.json +2 -2
- package/src/config/default-profile-catalog.ts +1 -1
- package/src/config/env.ts +2 -2
- package/src/config/feature-flag-registry.json +12 -8
- package/src/config/memory-v3-gate.test.ts +0 -31
- package/src/config/memory-v3-gate.ts +16 -20
- package/src/config/platform-rehydration.ts +21 -75
- package/src/config/schema.ts +2 -2
- package/src/config/schemas/__tests__/live-voice.test.ts +158 -8
- package/src/config/schemas/calls.ts +28 -1
- package/src/config/schemas/live-voice.ts +173 -1
- package/src/config/schemas/mcp.ts +1 -1
- package/src/config/schemas/memory-retrospective.ts +0 -10
- package/src/config/schemas/skills.ts +14 -0
- package/src/credential-execution/process-manager.test.ts +19 -18
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +121 -66
- package/src/daemon/__tests__/plugin-mcp-reconcile.test.ts +1 -4
- package/src/daemon/app-source-watcher.ts +218 -0
- package/src/daemon/config-watcher.ts +194 -13
- package/src/daemon/conversation-process.ts +64 -35
- package/src/daemon/conversation-skill-tools.ts +31 -13
- package/src/daemon/conversation-store.ts +1 -1
- package/src/daemon/conversation-surfaces.ts +8 -10
- package/src/daemon/conversation-tool-setup.ts +43 -37
- package/src/daemon/conversation.ts +3 -0
- package/src/daemon/host-bash-proxy.ts +12 -8
- package/src/daemon/host-browser-proxy.ts +1 -15
- package/src/daemon/host-file-proxy.ts +10 -8
- package/src/daemon/host-transfer-proxy.ts +18 -14
- package/src/daemon/lifecycle.ts +5 -0
- package/src/daemon/mcp-reload-service.ts +5 -5
- package/src/daemon/message-types/sync.ts +0 -1
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/shutdown-handlers.ts +9 -1
- package/src/daemon/skill-memory-refresh.ts +0 -64
- package/src/daemon/tool-side-effects.ts +18 -7
- package/src/hooks/types.ts +0 -33
- package/src/inbound/platform-callback-registration.ts +5 -4
- package/src/live-voice/__tests__/live-voice-metrics.test.ts +3 -0
- package/src/live-voice/__tests__/live-voice-progress.test.ts +15 -15
- package/src/live-voice/__tests__/live-voice-vad.test.ts +2 -2
- package/src/{calls → live-voice}/__tests__/progress-narration.test.ts +4 -4
- package/src/{calls → live-voice}/__tests__/progress-phrases.test.ts +1 -1
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +69 -13
- package/src/live-voice/live-voice-session.ts +693 -213
- package/src/{calls → live-voice}/progress-narration.ts +2 -2
- package/src/live-voice/protocol.ts +2 -0
- package/src/mcp/__tests__/effective-config.test.ts +2 -2
- package/src/mcp/effective-config.ts +3 -3
- package/src/mcp/mcp-header-store.ts +45 -29
- package/src/mcp/startup.ts +4 -8
- package/src/messaging/provider.ts +3 -10
- package/src/messaging/providers/callback-routing.ts +0 -18
- package/src/messaging/providers/channel-transport.ts +0 -56
- package/src/messaging/providers/discord/transport.ts +0 -17
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +17 -6
- package/src/messaging/providers/slack/adapter.ts +44 -7
- package/src/messaging/providers/slack/transport.ts +0 -16
- package/src/messaging/providers/telegram-bot/adapter.ts +48 -1
- package/src/messaging/providers/telegram-bot/client.ts +26 -0
- package/src/messaging/providers/telegram-bot/transport.ts +0 -20
- package/src/messaging/providers/whatsapp/adapter.ts +48 -1
- package/src/messaging/providers/whatsapp/client.ts +29 -0
- package/src/messaging/providers/whatsapp/transport.ts +0 -18
- package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +0 -8
- package/src/notifications/__tests__/assistant-reply-producer.test.ts +0 -55
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +3 -153
- package/src/notifications/assistant-reply-producer.ts +3 -8
- package/src/notifications/conversation-pairing.ts +16 -36
- package/src/notifications/delivered-post-record.ts +1 -11
- package/src/notifications/home-feed-side-effect.ts +7 -55
- package/src/outbound-proxy/certs.ts +5 -3
- package/src/permissions/checker.test.ts +6 -11
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/conversation-crud.ts +63 -71
- package/src/persistence/conversation-lineage.ts +4 -12
- package/src/persistence/conversation-title-service.ts +26 -9
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/message-reads.ts +0 -30
- package/src/persistence/migrations/157-invite-contact-id.ts +6 -18
- package/src/persistence/schema/memory-core.ts +0 -5
- package/src/platform/client.test.ts +0 -2
- package/src/platform/client.ts +10 -2
- package/src/plugin-api/constants.ts +0 -2
- package/src/plugin-api/index.ts +0 -1
- package/src/plugin-api/types.ts +0 -2
- package/src/plugins/defaults/index.ts +0 -2
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +0 -46
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +5 -9
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +10 -20
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-state.test.ts +0 -219
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +0 -31
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-trigger-check.test.ts +0 -63
- package/src/plugins/defaults/memory/__tests__/shutdown-hook.test.ts +0 -4
- package/src/plugins/defaults/memory/graph/capability-seed.ts +6 -4
- package/src/plugins/defaults/memory/hooks/init.ts +0 -10
- package/src/plugins/defaults/memory/hooks/shutdown.ts +0 -2
- package/src/plugins/defaults/memory/jobs-worker.ts +0 -13
- package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +60 -34
- package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +5 -3
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -12
- package/src/plugins/defaults/memory/memory-retrospective-state.ts +71 -312
- package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +1 -2
- package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +3 -5
- package/src/plugins/defaults/memory/startup.ts +1 -6
- package/src/plugins/defaults/memory/substrate/__tests__/skill-content.test.ts +9 -7
- package/src/plugins/defaults/memory/substrate/skill-content.ts +2 -2
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +0 -89
- package/src/plugins/defaults/memory/worker.ts +0 -6
- package/src/plugins/mcp-servers.ts +75 -15
- package/src/providers/__tests__/connection-model-compat.test.ts +3 -3
- package/src/providers/gemini/client.ts +23 -9
- package/src/providers/model-catalog.ts +0 -34
- package/src/providers/model-intents.ts +5 -10
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +18 -146
- package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +1 -83
- package/src/providers/openai/chat-completions-provider.ts +78 -192
- package/src/providers/openai/codex-models.ts +4 -0
- package/src/runtime/AGENTS.md +0 -2
- package/src/runtime/auth/same-actor.ts +3 -38
- package/src/runtime/http-server.ts +151 -160
- package/src/runtime/routes/__tests__/acp-routes.test.ts +4 -159
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +1 -108
- package/src/runtime/routes/__tests__/mcp-add-default-risk.test.ts +12 -16
- package/src/runtime/routes/acp-routes.test.ts +0 -15
- package/src/runtime/routes/acp-routes.ts +9 -72
- package/src/runtime/routes/app-management-routes.ts +0 -73
- package/src/runtime/routes/app-routes.ts +1 -1
- package/src/runtime/routes/conversation-list-routes.ts +3 -14
- package/src/runtime/routes/conversation-query-routes.ts +0 -40
- package/src/runtime/routes/credential-routes.ts +10 -19
- package/src/runtime/routes/diagnostics-routes.ts +3 -55
- package/src/runtime/routes/index.ts +0 -4
- package/src/runtime/routes/log-export-routes.ts +0 -2
- package/src/runtime/routes/mcp-auth-routes.ts +47 -39
- package/src/runtime/routes/migration-routes.ts +21 -8
- package/src/runtime/routes/platform-routes.ts +15 -18
- package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -28
- package/src/runtime/services/conversation-serializer.ts +3 -16
- package/src/runtime/sync/resource-sync-events.ts +1 -2
- package/src/schedule/worker.ts +1 -1
- package/src/security/ces-rpc-record-backend.ts +0 -7
- package/src/subagent/consult-context.ts +25 -12
- package/src/tools/acp/list-agents.test.ts +1 -3
- package/src/tools/acp/spawn.test.ts +11 -146
- package/src/tools/acp/spawn.ts +3 -21
- package/src/tools/acp/status.ts +3 -40
- package/src/tools/app-control/skill-proxy-bridge.ts +1 -2
- package/src/tools/capability-offer.test.ts +2 -22
- package/src/tools/capability-offer.ts +1 -16
- package/src/tools/computer-use/definitions.ts +2 -4
- package/src/tools/computer-use/skill-proxy-bridge.ts +1 -2
- package/src/tools/credentials/metadata-store.ts +0 -100
- package/src/tools/host-filesystem/edit.test.ts +1 -2
- package/src/tools/host-filesystem/edit.ts +2 -2
- package/src/tools/host-filesystem/read.test.ts +1 -2
- package/src/tools/host-filesystem/read.ts +2 -2
- package/src/tools/host-filesystem/transfer.test.ts +1 -2
- package/src/tools/host-filesystem/transfer.ts +2 -2
- package/src/tools/host-filesystem/write.test.ts +1 -2
- package/src/tools/host-filesystem/write.ts +2 -2
- package/src/tools/host-terminal/host-shell.test.ts +0 -16
- package/src/tools/host-terminal/host-shell.ts +20 -4
- package/src/tools/policy-context.ts +7 -6
- package/src/tools/subagent/spawn.ts +8 -5
- package/src/tools/watch/watch-retro-report.ts +8 -0
- package/src/util/__tests__/language-subtag.test.ts +1 -23
- package/src/util/fs-watcher-error.ts +36 -0
- package/src/util/language-subtag.ts +0 -16
- package/src/util/platform.ts +0 -8
- package/src/workspace/git-service.ts +54 -5
- package/src/workspace/migrations/registry.ts +0 -6
- package/scripts/smoke-desktop-window-theme.ts +0 -186
- package/src/__tests__/git-porcelain.test.ts +0 -47
- package/src/__tests__/helpers/set-workspace-mcp.ts +0 -11
- package/src/__tests__/message-deleted-hook-dispatch.test.ts +0 -119
- package/src/__tests__/resolve-app.test.ts +0 -135
- package/src/__tests__/source-fingerprint.test.ts +0 -184
- package/src/__tests__/workspace-migration-154-repair-retired-codex-gpt-5-4-model-ids.test.ts +0 -336
- package/src/acp/__tests__/helpers/acp-model-option.ts +0 -51
- package/src/acp/model-config.test.ts +0 -166
- package/src/acp/model-config.ts +0 -138
- package/src/api/events/acp-session-model-update.test.ts +0 -88
- package/src/api/events/acp-session-model-update.ts +0 -46
- package/src/apps/resolve-app.ts +0 -81
- package/src/apps/source-fingerprint.ts +0 -266
- package/src/calls/__tests__/barge-in-guard.test.ts +0 -81
- package/src/calls/__tests__/voice-leg-coordinator.test.ts +0 -229
- package/src/calls/__tests__/voice-progress-cadence.test.ts +0 -274
- package/src/calls/barge-in-guard.ts +0 -118
- package/src/calls/voice-leg-coordinator.ts +0 -189
- package/src/calls/voice-progress-cadence.ts +0 -423
- package/src/cli/commands/__tests__/apps.test.ts +0 -245
- package/src/cli/commands/__tests__/roadmap.help.test.ts +0 -19
- package/src/cli/commands/channels/__tests__/send.test.ts +0 -218
- package/src/cli/commands/channels/send.ts +0 -128
- package/src/config/__tests__/platform-identity.test.ts +0 -117
- package/src/config/acp-agent-write.ts +0 -43
- package/src/config/acp-schema.test.ts +0 -81
- package/src/config/platform-identity.ts +0 -144
- package/src/config/schemas/__tests__/voice.test.ts +0 -148
- package/src/config/schemas/voice.ts +0 -150
- package/src/daemon/__tests__/skill-memory-refresh-mtime.test.ts +0 -133
- package/src/daemon/app-change-notify.ts +0 -45
- package/src/desktop/__tests__/fake-desktop.ts +0 -119
- package/src/desktop/desktop-chrome-policy.test.ts +0 -71
- package/src/desktop/desktop-chrome-policy.ts +0 -42
- package/src/desktop/desktop-dependencies.test.ts +0 -102
- package/src/desktop/desktop-dependencies.ts +0 -306
- package/src/desktop/desktop-feature.test.ts +0 -18
- package/src/desktop/desktop-feature.ts +0 -19
- package/src/desktop/desktop-panel-config.test.ts +0 -135
- package/src/desktop/desktop-panel-config.ts +0 -149
- package/src/desktop/desktop-session-manager.test.ts +0 -627
- package/src/desktop/desktop-session-manager.ts +0 -814
- package/src/desktop/desktop-stream-bridge.test.ts +0 -395
- package/src/desktop/desktop-stream-bridge.ts +0 -214
- package/src/desktop/desktop-wallpaper.test.ts +0 -191
- package/src/desktop/desktop-wallpaper.ts +0 -113
- package/src/desktop/desktop-window-theme.ts +0 -170
- package/src/i18n/AGENTS.md +0 -22
- package/src/i18n/__tests__/i18n.test.ts +0 -108
- package/src/i18n/index.ts +0 -16
- package/src/i18n/locales.ts +0 -93
- package/src/i18n/messages.ts +0 -61
- package/src/i18n/title.ts +0 -25
- package/src/mcp/__tests__/workspace-mcp-config.test.ts +0 -135
- package/src/mcp/spec-schema.ts +0 -111
- package/src/mcp/workspace-mcp-config.ts +0 -188
- package/src/messaging/providers/__tests__/proactive-address.test.ts +0 -95
- package/src/persistence/conversation-title-placeholders.ts +0 -23
- package/src/persistence/message-cursor.ts +0 -78
- package/src/persistence/migrations/__tests__/157-invite-contact-id.test.ts +0 -149
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-backfill.test.ts +0 -118
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-preserve.test.ts +0 -83
- package/src/plugins/defaults/memory/hooks/message-deleted.ts +0 -21
- package/src/plugins/defaults/memory/memory-retrospective-cursor-backfill.ts +0 -126
- package/src/plugins/defaults/memory/memory-retrospective-cursor-preserve.ts +0 -79
- package/src/plugins/defaults/memory/memory-retrospective-cursor.ts +0 -28
- package/src/plugins/defaults/memory/skill-md-mtime-poll.ts +0 -9
- package/src/providers/gemini-thought-signature.test.ts +0 -63
- package/src/providers/gemini-thought-signature.ts +0 -44
- package/src/providers/openai/__tests__/chat-completions-provider-thought-signature.test.ts +0 -613
- package/src/providers/openai/__tests__/google-thought-signature.test.ts +0 -235
- package/src/providers/openai/google-thought-signature.ts +0 -320
- package/src/runtime/__tests__/channel-send.test.ts +0 -443
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +0 -89
- package/src/runtime/__tests__/live-voice-upgrade.test.ts +0 -58
- package/src/runtime/__tests__/runtime-ws-test-utils.ts +0 -72
- package/src/runtime/__tests__/watch-stream-upgrade.test.ts +0 -59
- package/src/runtime/channel-send.ts +0 -316
- package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +0 -205
- package/src/runtime/routes/__tests__/channel-send-routes.test.ts +0 -127
- package/src/runtime/routes/__tests__/dictation-cleanup-guard.test.ts +0 -107
- package/src/runtime/routes/channel-send-routes.ts +0 -85
- package/src/runtime/routes/desktop-setup-routes.test.ts +0 -74
- package/src/runtime/routes/desktop-setup-routes.ts +0 -35
- package/src/security/__tests__/ces-http-record-backend.test.ts +0 -137
- package/src/security/ces-http-record-backend.ts +0 -120
- package/src/skills/__tests__/workspace-skill-md-signature.test.ts +0 -60
- package/src/skills/workspace-skill-md-signature.ts +0 -50
- package/src/tools/acp/status.test.ts +0 -94
- package/src/util/ca-bundle.ts +0 -13
- package/src/workspace/git-porcelain.ts +0 -66
- package/src/workspace/migrations/154-repair-retired-codex-gpt-5-4-model-ids.ts +0 -258
- package/src/workspace/migrations/155-move-front-model-config-to-voice.ts +0 -78
- package/src/workspace/migrations/156-extract-workspace-mcp-json.ts +0 -214
- package/src/workspace/migrations/__tests__/155-move-front-model-config-to-voice.test.ts +0 -102
- package/src/workspace/migrations/__tests__/156-extract-workspace-mcp-json.test.ts +0 -199
- /package/src/{calls → live-voice}/progress-phrases.ts +0 -0
|
@@ -12,8 +12,6 @@ mock.module("../memory-retrospective-enqueue.js", () => ({
|
|
|
12
12
|
},
|
|
13
13
|
}));
|
|
14
14
|
|
|
15
|
-
import { eq } from "drizzle-orm";
|
|
16
|
-
|
|
17
15
|
import type { AssistantConfig } from "../../../../config/types.js";
|
|
18
16
|
import { createConversation } from "../../../../persistence/conversation-crud.js";
|
|
19
17
|
import {
|
|
@@ -309,64 +307,3 @@ describe("maybeEnqueueRetrospective — kind-aware accounting", () => {
|
|
|
309
307
|
]);
|
|
310
308
|
});
|
|
311
309
|
});
|
|
312
|
-
|
|
313
|
-
// ---------------------------------------------------------------------------
|
|
314
|
-
// maybeEnqueueRetrospective: the cursor survives a regenerated reply.
|
|
315
|
-
//
|
|
316
|
-
// The cursor normally lands on the latest assistant reply, and a regenerate
|
|
317
|
-
// deletes exactly that row. With its `createdAt` persisted the cursor still
|
|
318
|
-
// bounds the count, so the conversation keeps getting retrospectives.
|
|
319
|
-
// ---------------------------------------------------------------------------
|
|
320
|
-
|
|
321
|
-
describe("maybeEnqueueRetrospective: cursor survives a regenerated reply", () => {
|
|
322
|
-
beforeEach(() => {
|
|
323
|
-
resetTables();
|
|
324
|
-
enqueueCalls = [];
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
test("a regenerate that deletes the cursor's row does not stall the conversation", async () => {
|
|
328
|
-
const conv = createConversation("conv");
|
|
329
|
-
insertMessage(conv.id, { createdAt: 1_000 });
|
|
330
|
-
const reply = insertMessage(conv.id, {
|
|
331
|
-
role: "assistant",
|
|
332
|
-
createdAt: 2_000,
|
|
333
|
-
});
|
|
334
|
-
await upsertRetrospectiveState({
|
|
335
|
-
conversationId: conv.id,
|
|
336
|
-
lastProcessedMessageId: reply,
|
|
337
|
-
lastProcessedCreatedAt: 2_000,
|
|
338
|
-
lastRunAt: Date.now() - 24 * 60 * 60_000,
|
|
339
|
-
});
|
|
340
|
-
// Regenerate: the retry route discards the latest assistant turn, then
|
|
341
|
-
// a fresh reply and the next user message land.
|
|
342
|
-
getDb().delete(messages).where(eq(messages.id, reply)).run();
|
|
343
|
-
insertMessage(conv.id, { role: "assistant", createdAt: 3_000 });
|
|
344
|
-
insertMessage(conv.id, { createdAt: 4_000 });
|
|
345
|
-
|
|
346
|
-
maybeEnqueueRetrospective(conv.id, makeConfig());
|
|
347
|
-
|
|
348
|
-
expect(enqueueCalls).toEqual([
|
|
349
|
-
{ conversationId: conv.id, trigger: "interval" },
|
|
350
|
-
]);
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
test("a cursor written without a timestamp still goes quiet once its row is gone", async () => {
|
|
354
|
-
const conv = createConversation("conv");
|
|
355
|
-
insertMessage(conv.id, { createdAt: 1_000 });
|
|
356
|
-
const reply = insertMessage(conv.id, {
|
|
357
|
-
role: "assistant",
|
|
358
|
-
createdAt: 2_000,
|
|
359
|
-
});
|
|
360
|
-
await upsertRetrospectiveState({
|
|
361
|
-
conversationId: conv.id,
|
|
362
|
-
lastProcessedMessageId: reply,
|
|
363
|
-
lastRunAt: Date.now() - 24 * 60 * 60_000,
|
|
364
|
-
});
|
|
365
|
-
getDb().delete(messages).where(eq(messages.id, reply)).run();
|
|
366
|
-
insertMessage(conv.id, { createdAt: 4_000 });
|
|
367
|
-
|
|
368
|
-
maybeEnqueueRetrospective(conv.id, makeConfig());
|
|
369
|
-
|
|
370
|
-
expect(enqueueCalls).toEqual([]);
|
|
371
|
-
});
|
|
372
|
-
});
|
|
@@ -14,10 +14,6 @@ mock.module("../worker-control.js", () => ({
|
|
|
14
14
|
},
|
|
15
15
|
}));
|
|
16
16
|
|
|
17
|
-
mock.module("../skill-md-mtime-poll.js", () => ({
|
|
18
|
-
stopWorkspaceSkillMdMtimePoll: () => {},
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
17
|
const memoryShutdown = (await import("../hooks/shutdown.js")).default;
|
|
22
18
|
|
|
23
19
|
describe("memory shutdown hook", () => {
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
loadSkillCatalog,
|
|
17
17
|
type SkillSummary,
|
|
18
18
|
} from "../../../../config/skills.js";
|
|
19
|
-
import { loadWorkspaceMcpConfig } from "../../../../mcp/workspace-mcp-config.js";
|
|
20
19
|
import {
|
|
21
20
|
enqueueMemoryJob,
|
|
22
21
|
upsertEmbedGraphNodeJob,
|
|
@@ -132,9 +131,12 @@ export function seedSkillGraphNodes(): void {
|
|
|
132
131
|
const input = fromSkillSummary(summary);
|
|
133
132
|
|
|
134
133
|
if (summary.id === "mcp-setup") {
|
|
135
|
-
const
|
|
136
|
-
if (
|
|
137
|
-
|
|
134
|
+
const servers = config.mcp?.servers;
|
|
135
|
+
if (servers) {
|
|
136
|
+
const names = Object.keys(servers);
|
|
137
|
+
if (names.length > 0) {
|
|
138
|
+
input.description += ` Configured: ${names.join(", ")}`;
|
|
139
|
+
}
|
|
138
140
|
}
|
|
139
141
|
}
|
|
140
142
|
|
|
@@ -17,7 +17,6 @@ import type { HookFunction, InitContext } from "@vellumai/plugin-api";
|
|
|
17
17
|
import { getConfig } from "../../../../config/loader.js";
|
|
18
18
|
import { registerMemoryPluginJobHandlers } from "../job-handler-registration.js";
|
|
19
19
|
import { getLogger } from "../logging.js";
|
|
20
|
-
import { backfillRetrospectiveCursorTimestamps } from "../memory-retrospective-cursor-backfill.js";
|
|
21
20
|
import { runMemoryStartup } from "../startup.js";
|
|
22
21
|
import { ensureMemoryV3PluginSchema } from "../v3/plugin-schema.js";
|
|
23
22
|
|
|
@@ -31,15 +30,6 @@ const init: HookFunction<InitContext> = async () => {
|
|
|
31
30
|
// against an empty table and failed as an unknown type.
|
|
32
31
|
registerMemoryPluginJobHandlers();
|
|
33
32
|
|
|
34
|
-
// Retrospective cursors written before the timestamp column existed can
|
|
35
|
-
// only be completed while their message rows still exist, so start the
|
|
36
|
-
// fill at boot, ahead of any client regenerating a reply. Detached and
|
|
37
|
-
// fail-open like the rest of memory startup; the memory worker runs the
|
|
38
|
-
// same idempotent pass as a second chance.
|
|
39
|
-
void backfillRetrospectiveCursorTimestamps().catch((err) =>
|
|
40
|
-
log.warn({ err }, "Retrospective cursor timestamp backfill failed"),
|
|
41
|
-
);
|
|
42
|
-
|
|
43
33
|
// The memory-v3 plugin-owned schema on the memory connection
|
|
44
34
|
// (`v3/plugin-schema.ts`): the pools and injected-sections tables and the
|
|
45
35
|
// selection log's `section_key` column, ensured idempotently on every
|
|
@@ -9,11 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
import type { HookFunction, ShutdownContext } from "@vellumai/plugin-api";
|
|
11
11
|
|
|
12
|
-
import { stopWorkspaceSkillMdMtimePoll } from "../skill-md-mtime-poll.js";
|
|
13
12
|
import { stopMemoryWorkerProcess } from "../worker-control.js";
|
|
14
13
|
|
|
15
14
|
const shutdown: HookFunction<ShutdownContext> = async () => {
|
|
16
|
-
stopWorkspaceSkillMdMtimePoll();
|
|
17
15
|
stopMemoryWorkerProcess();
|
|
18
16
|
};
|
|
19
17
|
|
|
@@ -62,7 +62,6 @@ import {
|
|
|
62
62
|
import { isJobQueueResolution, type JobHandler } from "../../types.js";
|
|
63
63
|
import { sweepOrphanConversationMemoryTables } from "./conversation-memory-orphan-sweep.js";
|
|
64
64
|
import { getLogger } from "./logging.js";
|
|
65
|
-
import { backfillRetrospectiveCursorTimestamps } from "./memory-retrospective-cursor-backfill.js";
|
|
66
65
|
import { sweepOrphanMemoryRetrospectiveConversations } from "./memory-retrospective-startup-cleanup.js";
|
|
67
66
|
import { getWorkspaceDir } from "./paths.js";
|
|
68
67
|
// SUBSTRATE (v2+v3) — feeds `enqueueSubstrateMaintenanceJobs`.
|
|
@@ -260,18 +259,6 @@ export function startMemoryJobsWorkerLoop(): MemoryJobsWorker {
|
|
|
260
259
|
);
|
|
261
260
|
});
|
|
262
261
|
|
|
263
|
-
// Second chance for the cursor timestamp backfill the daemon's memory init
|
|
264
|
-
// hook starts at boot: rows written before the column existed get their
|
|
265
|
-
// `createdAt` so a later deletion of the row they point at (a regenerated
|
|
266
|
-
// reply) cannot stall the conversation's retrospectives. Idempotent,
|
|
267
|
-
// detached, and best-effort, same as the sweeps.
|
|
268
|
-
void backfillRetrospectiveCursorTimestamps().catch((err: unknown) => {
|
|
269
|
-
log.warn(
|
|
270
|
-
{ err },
|
|
271
|
-
"Retrospective cursor timestamp backfill failed; continuing worker startup",
|
|
272
|
-
);
|
|
273
|
-
});
|
|
274
|
-
|
|
275
262
|
// Also catch up on relocated conversation-keyed tables orphaned while the
|
|
276
263
|
// plugin was disabled: with memory off, the conversation-deleted hook never
|
|
277
264
|
// fired, so deletes during that window left rows behind (the pre-Wave-2 main
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
// accounting; once newer real messages arrive it is copied into the next
|
|
32
32
|
// run's fork as inert prefix context.
|
|
33
33
|
|
|
34
|
-
import { and, eq, like, or } from "drizzle-orm";
|
|
34
|
+
import { and, eq, gt, like, or } from "drizzle-orm";
|
|
35
35
|
|
|
36
36
|
import {
|
|
37
37
|
countMessagesAfter,
|
|
@@ -43,11 +43,6 @@ import {
|
|
|
43
43
|
SIGHT_FRAME_ATTACHMENT_IDS_KEY,
|
|
44
44
|
} from "../../../persistence/conversation-types.js";
|
|
45
45
|
import { getDb } from "../../../persistence/db-connection.js";
|
|
46
|
-
import {
|
|
47
|
-
messagesAfterBoundFilter,
|
|
48
|
-
type MessagesAfterRef,
|
|
49
|
-
resolveMessagesAfterBound,
|
|
50
|
-
} from "../../../persistence/message-cursor.js";
|
|
51
46
|
import { messages } from "../../../persistence/schema/index.js";
|
|
52
47
|
import { SKILL_CARD_MESSAGE_KIND } from "./memory-retrospective-constants.js";
|
|
53
48
|
|
|
@@ -103,9 +98,9 @@ export function isSkillCardMessage(row: { metadata: string | null }): boolean {
|
|
|
103
98
|
*/
|
|
104
99
|
export function getRetrospectiveMessagesAfter(
|
|
105
100
|
conversationId: string,
|
|
106
|
-
|
|
101
|
+
afterMessageId: string | null,
|
|
107
102
|
): MessageRow[] {
|
|
108
|
-
const rows = getMessagesAfter(conversationId,
|
|
103
|
+
const rows = getMessagesAfter(conversationId, afterMessageId);
|
|
109
104
|
const firstUnfinalized = rows.findIndex((row) => row.finalized !== 1);
|
|
110
105
|
const bounded =
|
|
111
106
|
firstUnfinalized === -1 ? rows : rows.slice(0, firstUnfinalized);
|
|
@@ -121,13 +116,13 @@ export function getRetrospectiveMessagesAfter(
|
|
|
121
116
|
*/
|
|
122
117
|
export function countRetrospectiveMessagesAfter(
|
|
123
118
|
conversationId: string,
|
|
124
|
-
|
|
119
|
+
afterMessageId: string | null,
|
|
125
120
|
): number {
|
|
126
|
-
const total = countMessagesAfter(conversationId,
|
|
121
|
+
const total = countMessagesAfter(conversationId, afterMessageId);
|
|
127
122
|
if (total === 0) {
|
|
128
123
|
return 0;
|
|
129
124
|
}
|
|
130
|
-
const excluded = countExcludedMessagesAfter(conversationId,
|
|
125
|
+
const excluded = countExcludedMessagesAfter(conversationId, afterMessageId);
|
|
131
126
|
return Math.max(0, total - excluded);
|
|
132
127
|
}
|
|
133
128
|
|
|
@@ -172,8 +167,7 @@ export function messagesHaveUserActivity(
|
|
|
172
167
|
* a non-tool_result block. Powers the `memory.retrospective.requireUserActivity`
|
|
173
168
|
* enqueue gate, so only user rows are loaded. Cursor semantics mirror
|
|
174
169
|
* `countMessagesAfter`: a null/`""` reference scans the whole conversation,
|
|
175
|
-
* a
|
|
176
|
-
* bare id whose row is gone means no new work.
|
|
170
|
+
* and a vanished reference means no new work.
|
|
177
171
|
*
|
|
178
172
|
* Operates on the raw `content` column: rows that do not parse to a block
|
|
179
173
|
* array (file-backed `{ ref }` rows, legacy plain strings) count as
|
|
@@ -183,15 +177,37 @@ export function messagesHaveUserActivity(
|
|
|
183
177
|
*/
|
|
184
178
|
export function hasQualifyingUserMessageAfter(
|
|
185
179
|
conversationId: string,
|
|
186
|
-
|
|
180
|
+
afterMessageId: string | null,
|
|
187
181
|
): boolean {
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
182
|
+
const cursorId =
|
|
183
|
+
afterMessageId === null || afterMessageId === "" ? null : afterMessageId;
|
|
184
|
+
const db = getDb();
|
|
185
|
+
|
|
186
|
+
let ref: { createdAt: number } | undefined;
|
|
187
|
+
if (cursorId !== null) {
|
|
188
|
+
ref = db
|
|
189
|
+
.select({ createdAt: messages.createdAt })
|
|
190
|
+
.from(messages)
|
|
191
|
+
.where(eq(messages.id, cursorId))
|
|
192
|
+
.get();
|
|
193
|
+
if (!ref) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
191
196
|
}
|
|
197
|
+
|
|
192
198
|
const afterCursor =
|
|
193
|
-
|
|
194
|
-
|
|
199
|
+
cursorId !== null && ref
|
|
200
|
+
? [
|
|
201
|
+
or(
|
|
202
|
+
gt(messages.createdAt, ref.createdAt),
|
|
203
|
+
and(
|
|
204
|
+
eq(messages.createdAt, ref.createdAt),
|
|
205
|
+
gt(messages.id, cursorId),
|
|
206
|
+
),
|
|
207
|
+
),
|
|
208
|
+
]
|
|
209
|
+
: [];
|
|
210
|
+
const rows = db
|
|
195
211
|
.select({ content: messages.content, metadata: messages.metadata })
|
|
196
212
|
.from(messages)
|
|
197
213
|
.where(
|
|
@@ -232,14 +248,18 @@ function rawUserContentCarriesActivity(raw: string | null): boolean {
|
|
|
232
248
|
* — at most one per successful retrospective run); each candidate is then
|
|
233
249
|
* JSON-verified by {@link isSkillCardMessage} so an incidental substring
|
|
234
250
|
* match in unrelated metadata can never exclude a real message from
|
|
235
|
-
* accounting. The cursor
|
|
236
|
-
* including the null/`""` "count everything" cases
|
|
237
|
-
* "no new work" case.
|
|
251
|
+
* accounting. The cursor comparison mirrors `countMessagesAfter`'s
|
|
252
|
+
* tie-breaker semantics, including the null/`""` "count everything" cases
|
|
253
|
+
* and the vanished-reference "no new work" case.
|
|
238
254
|
*/
|
|
239
255
|
function countExcludedMessagesAfter(
|
|
240
256
|
conversationId: string,
|
|
241
|
-
|
|
257
|
+
afterMessageId: string | null,
|
|
242
258
|
): number {
|
|
259
|
+
// The `""` sentinel (failure-only state rows) counts everything, matching
|
|
260
|
+
// `countMessagesAfter`.
|
|
261
|
+
const cursorId =
|
|
262
|
+
afterMessageId === null || afterMessageId === "" ? null : afterMessageId;
|
|
243
263
|
const db = getDb();
|
|
244
264
|
const candidates = db
|
|
245
265
|
.select({
|
|
@@ -262,11 +282,18 @@ function countExcludedMessagesAfter(
|
|
|
262
282
|
return 0;
|
|
263
283
|
}
|
|
264
284
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
285
|
+
let ref: { createdAt: number } | undefined;
|
|
286
|
+
if (cursorId !== null) {
|
|
287
|
+
ref = db
|
|
288
|
+
.select({ createdAt: messages.createdAt })
|
|
289
|
+
.from(messages)
|
|
290
|
+
.where(eq(messages.id, cursorId))
|
|
291
|
+
.get();
|
|
292
|
+
// Vanished reference: `countMessagesAfter` reported 0, so there is
|
|
293
|
+
// nothing to subtract from.
|
|
294
|
+
if (!ref) {
|
|
295
|
+
return 0;
|
|
296
|
+
}
|
|
270
297
|
}
|
|
271
298
|
|
|
272
299
|
let count = 0;
|
|
@@ -274,12 +301,11 @@ function countExcludedMessagesAfter(
|
|
|
274
301
|
if (!isExcludedFromRetrospectiveAccounting(row)) {
|
|
275
302
|
continue;
|
|
276
303
|
}
|
|
277
|
-
if (
|
|
278
|
-
const
|
|
279
|
-
|
|
280
|
-
row.createdAt
|
|
281
|
-
|
|
282
|
-
if (!isAfter) {
|
|
304
|
+
if (cursorId !== null && ref) {
|
|
305
|
+
const after =
|
|
306
|
+
row.createdAt > ref.createdAt ||
|
|
307
|
+
(row.createdAt === ref.createdAt && row.id > cursorId);
|
|
308
|
+
if (!after) {
|
|
283
309
|
continue;
|
|
284
310
|
}
|
|
285
311
|
}
|
|
@@ -47,7 +47,6 @@ import { resolveCapabilities } from "../../../runtime/capabilities.js";
|
|
|
47
47
|
import { getLogger } from "./logging.js";
|
|
48
48
|
import { hasQualifyingUserMessageAfter } from "./memory-retrospective-accounting.js";
|
|
49
49
|
import { isMemoryRetrospectiveSource } from "./memory-retrospective-constants.js";
|
|
50
|
-
import { retrospectiveCursor } from "./memory-retrospective-cursor.js";
|
|
51
50
|
import { getRetrospectiveState } from "./memory-retrospective-state.js";
|
|
52
51
|
|
|
53
52
|
const log = getLogger("memory-retrospective-enqueue");
|
|
@@ -140,7 +139,7 @@ function isRetrospectiveEnabled(): boolean {
|
|
|
140
139
|
/**
|
|
141
140
|
* The `memory.retrospective.requireUserActivity` gate: pass when the config
|
|
142
141
|
* is off or the unprocessed tail (everything after the conversation's
|
|
143
|
-
*
|
|
142
|
+
* `lastProcessedMessageId`) contains at least one user message carrying
|
|
144
143
|
* non-tool_result content. A gate that cannot be evaluated (config or DB
|
|
145
144
|
* unavailable) passes — an unevaluable gate must not silence retrospectives.
|
|
146
145
|
*/
|
|
@@ -154,7 +153,10 @@ function passesUserActivityGate(
|
|
|
154
153
|
}
|
|
155
154
|
const state = getRetrospectiveState(conversationId);
|
|
156
155
|
if (
|
|
157
|
-
hasQualifyingUserMessageAfter(
|
|
156
|
+
hasQualifyingUserMessageAfter(
|
|
157
|
+
conversationId,
|
|
158
|
+
state?.lastProcessedMessageId ?? null,
|
|
159
|
+
)
|
|
158
160
|
) {
|
|
159
161
|
return true;
|
|
160
162
|
}
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
parseClientOs,
|
|
59
59
|
parseInterfaceId,
|
|
60
60
|
} from "../../../channels/types.js";
|
|
61
|
-
import {
|
|
61
|
+
import { isV3TierActive } from "../../../config/memory-v3-gate.js";
|
|
62
62
|
import type { AssistantConfig } from "../../../config/types.js";
|
|
63
63
|
import { warmGuardianBindings } from "../../../contacts/guardian-delivery-reader.js";
|
|
64
64
|
import { extractTurnContextTimestamp } from "../../../context/compactor.js";
|
|
@@ -95,7 +95,6 @@ import {
|
|
|
95
95
|
MEMORY_RETROSPECTIVE_SOURCE,
|
|
96
96
|
SKILL_MANAGEMENT_SKILL_ID,
|
|
97
97
|
} from "./memory-retrospective-constants.js";
|
|
98
|
-
import { retrospectiveCursor } from "./memory-retrospective-cursor.js";
|
|
99
98
|
import { loadRetrospectiveRunMessages } from "./memory-retrospective-fork-boundary.js";
|
|
100
99
|
import { buildForkInstruction } from "./memory-retrospective-prompt.js";
|
|
101
100
|
import {
|
|
@@ -358,7 +357,7 @@ export async function runForkBasedRetrospective(
|
|
|
358
357
|
// `memory-retrospective-accounting.ts`.
|
|
359
358
|
const newMessages = getRetrospectiveMessagesAfter(
|
|
360
359
|
sourceConversationId,
|
|
361
|
-
|
|
360
|
+
lastProcessedMessageId,
|
|
362
361
|
);
|
|
363
362
|
|
|
364
363
|
if (newMessages.length === 0) {
|
|
@@ -449,7 +448,7 @@ export async function runForkBasedRetrospective(
|
|
|
449
448
|
}
|
|
450
449
|
const forkId = forkConversationRow.id;
|
|
451
450
|
|
|
452
|
-
const procToSkillsActive =
|
|
451
|
+
const procToSkillsActive = isV3TierActive(config);
|
|
453
452
|
const instruction = buildForkInstruction({
|
|
454
453
|
windowStartTimestamp,
|
|
455
454
|
windowAnchorKind: turnContextTimestamp ? "turn_context" : "created_at",
|
|
@@ -651,7 +650,6 @@ export async function runForkBasedRetrospective(
|
|
|
651
650
|
sourceConversationId,
|
|
652
651
|
retrospectiveConversationId: forkId,
|
|
653
652
|
cutoffMessageId,
|
|
654
|
-
cutoffCreatedAt: cutoffMessage.createdAt,
|
|
655
653
|
newMessageCount: newMessages.length,
|
|
656
654
|
prior,
|
|
657
655
|
priorRemembers,
|
|
@@ -949,11 +947,6 @@ async function finalizeSuccessfulRetrospective(args: {
|
|
|
949
947
|
sourceConversationId: string;
|
|
950
948
|
retrospectiveConversationId: string;
|
|
951
949
|
cutoffMessageId: string;
|
|
952
|
-
/**
|
|
953
|
-
* `createdAt` of the cutoff row, persisted beside its id so the cursor
|
|
954
|
-
* keeps bounding reads after the row is deleted.
|
|
955
|
-
*/
|
|
956
|
-
cutoffCreatedAt: number;
|
|
957
950
|
newMessageCount: number;
|
|
958
951
|
prior: PriorRetrospective | null;
|
|
959
952
|
priorRemembers: string[];
|
|
@@ -973,7 +966,6 @@ async function finalizeSuccessfulRetrospective(args: {
|
|
|
973
966
|
sourceConversationId,
|
|
974
967
|
retrospectiveConversationId,
|
|
975
968
|
cutoffMessageId,
|
|
976
|
-
cutoffCreatedAt,
|
|
977
969
|
newMessageCount,
|
|
978
970
|
prior,
|
|
979
971
|
priorRemembers,
|
|
@@ -985,7 +977,6 @@ async function finalizeSuccessfulRetrospective(args: {
|
|
|
985
977
|
await upsertRetrospectiveState({
|
|
986
978
|
conversationId: sourceConversationId,
|
|
987
979
|
lastProcessedMessageId: cutoffMessageId,
|
|
988
|
-
lastProcessedCreatedAt: cutoffCreatedAt,
|
|
989
980
|
lastRunAt: Date.now(),
|
|
990
981
|
rememberedLog: appendToRememberedLog(priorRemembers, runRemembers),
|
|
991
982
|
});
|