@vellumai/assistant 0.8.3 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +2 -2
- package/docker-entrypoint.sh +0 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/knip.json +2 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +2 -0
- package/openapi.yaml +1492 -100
- package/package.json +1 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +4 -5
- package/src/__tests__/agent-loop-override-profile.test.ts +1 -1
- package/src/__tests__/agent-loop.test.ts +88 -3
- package/src/__tests__/anthropic-provider.test.ts +302 -33
- package/src/__tests__/approval-cascade.test.ts +1 -1
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +3 -3
- package/src/__tests__/audit-log-rotation.test.ts +70 -16
- package/src/__tests__/background-workers-disk-pressure.test.ts +4 -3
- package/src/__tests__/btw-routes.test.ts +2 -3
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +193 -0
- package/src/__tests__/channel-guardian.test.ts +3 -3
- package/src/__tests__/channel-reply-delivery.test.ts +284 -5
- package/src/__tests__/channel-retry-sweep.test.ts +274 -1
- package/src/__tests__/checker.test.ts +6 -15
- package/src/__tests__/compaction-events.test.ts +2 -1
- package/src/__tests__/compactor-call-site-logging.test.ts +214 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +110 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +5 -11
- package/src/__tests__/computer-use-tools.test.ts +2 -4
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-token-estimator.test.ts +91 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +55 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +228 -8
- package/src/__tests__/conversation-agent-loop.test.ts +188 -129
- package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -5
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clean-command.test.ts +137 -0
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -1
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +31 -0
- package/src/__tests__/conversation-fork-crud.test.ts +324 -0
- package/src/__tests__/conversation-lifecycle.test.ts +53 -12
- package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
- package/src/__tests__/conversation-load-history-stripped.test.ts +279 -0
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-process-callsite.test.ts +1 -1
- package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-routes-disk-view.test.ts +109 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +35 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +264 -81
- package/src/__tests__/conversation-seed-composer.test.ts +66 -4
- package/src/__tests__/conversation-skill-tools.test.ts +2 -5
- package/src/__tests__/conversation-slash-commands.test.ts +36 -8
- package/src/__tests__/conversation-slash-queue.test.ts +1 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -1
- package/src/__tests__/conversation-speed-override.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +220 -0
- package/src/__tests__/conversation-sync-tags.test.ts +99 -32
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +9 -7
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-security-invariants.test.ts +7 -0
- package/src/__tests__/credential-vault-unit.test.ts +2 -2
- package/src/__tests__/cu-unified-flow.test.ts +10 -1
- package/src/__tests__/dm-backfill.test.ts +64 -0
- package/src/__tests__/dm-persistence.test.ts +33 -0
- package/src/__tests__/document-find-replace.test.ts +501 -0
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/first-greeting.test.ts +23 -2
- package/src/__tests__/gateway-flag-listener.test.ts +237 -0
- package/src/__tests__/gemini-provider.test.ts +78 -0
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +7 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
- package/src/__tests__/headless-browser-navigate.test.ts +172 -0
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +4 -0
- package/src/__tests__/host-bash-proxy.test.ts +6 -0
- package/src/__tests__/host-browser-proxy.test.ts +10 -0
- package/src/__tests__/host-cu-proxy.test.ts +8 -1
- package/src/__tests__/host-file-proxy.test.ts +8 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/host-transfer-proxy.test.ts +8 -1
- package/src/__tests__/identity-routes.test.ts +57 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +3 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-chain.test.ts +2 -0
- package/src/__tests__/injector-document-comments.test.ts +378 -0
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +4 -25
- package/src/__tests__/list-messages-attachments.test.ts +21 -17
- package/src/__tests__/list-messages-hidden-metadata.test.ts +217 -0
- package/src/__tests__/list-messages-page-latest.test.ts +130 -14
- package/src/__tests__/list-messages-tool-merge.test.ts +77 -17
- package/src/__tests__/llm-context-normalization.test.ts +0 -2
- package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
- package/src/__tests__/llm-resolver.test.ts +161 -9
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/log-export-routes.test.ts +99 -2
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/message-queue-steer.test.ts +114 -0
- package/src/__tests__/model-intents.test.ts +2 -4
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/onboarding-template-contract.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +151 -0
- package/src/__tests__/openai-responses-provider.test.ts +118 -16
- package/src/__tests__/outbound-slack-persistence.test.ts +187 -20
- package/src/__tests__/pending-interactions-resolved-event.test.ts +189 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -5
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +2 -2
- package/src/__tests__/plugin-source-watcher.test.ts +302 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +13 -6
- package/src/__tests__/plugin-types.test.ts +3 -2
- package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
- package/src/__tests__/pricing.test.ts +12 -0
- package/src/__tests__/process-message-background-slack.test.ts +1 -51
- package/src/__tests__/process-message-display-content.test.ts +21 -16
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/registry.test.ts +2 -8
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/server-history-render.test.ts +83 -4
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags.test.ts +2 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +4 -7
- package/src/__tests__/skill-projection.benchmark.test.ts +2 -6
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/steer-tool-repair.test.ts +249 -0
- package/src/__tests__/subagent-notify-parent.test.ts +1 -1
- package/src/__tests__/suggestion-routes.test.ts +1 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +161 -124
- package/src/__tests__/terminal-tools.test.ts +12 -2
- package/src/__tests__/thinking-block-replay.test.ts +113 -0
- package/src/__tests__/thread-backfill.test.ts +370 -22
- package/src/__tests__/tool-approval-handler.test.ts +1 -5
- package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +15 -5
- package/src/__tests__/tool-executor.test.ts +89 -53
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +167 -0
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +1 -1
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
- package/src/__tests__/web-fetch.test.ts +2 -2
- package/src/__tests__/workspace-git-service.test.ts +94 -10
- package/src/__tests__/workspace-migration-088-deprecate-background-conversation-override.test.ts +158 -0
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +1 -1
- package/src/agent/attachments.ts +1 -0
- package/src/agent/loop.ts +65 -20
- package/src/api/README.md +5 -0
- package/src/api/index.ts +4 -0
- package/src/api/package.json +10 -0
- package/src/background-wake/background-wake-routes.test.ts +233 -0
- package/src/background-wake/next-wake.test.ts +289 -0
- package/src/background-wake/next-wake.ts +172 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/browser/operations.ts +15 -0
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +572 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
- package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
- package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +10 -12
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/conversations.ts +128 -1
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference-providers.ts +147 -1
- package/src/cli/commands/inference.ts +93 -40
- package/src/cli/commands/memory-v2-compare-render.ts +115 -0
- package/src/cli/commands/memory-v2.ts +483 -0
- package/src/cli/commands/memory-v3-render.ts +344 -0
- package/src/cli/commands/memory-v3.ts +316 -0
- package/src/cli/commands/notifications.ts +24 -2
- package/src/cli/program.ts +2 -0
- package/src/cli/utils/conversation-id.ts +17 -5
- package/src/config/assistant-feature-flags.ts +21 -9
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/document-editor/SKILL.md +124 -0
- package/src/config/bundled-skills/document-editor/TOOLS.json +258 -0
- package/src/config/bundled-skills/document-editor/tools/comment-list.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-reply.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-resolve.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-find.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-replace-text.ts +12 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
- package/src/config/bundled-skills/media-processing/SKILL.md +8 -0
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +8 -0
- package/src/config/bundled-tool-registry.ts +24 -12
- package/src/config/call-site-defaults.ts +20 -0
- package/src/config/feature-flag-registry.json +115 -3
- package/src/config/llm-resolver.ts +16 -2
- package/src/config/schemas/__tests__/memory-v2.test.ts +217 -1
- package/src/config/schemas/call-site-catalog.ts +35 -0
- package/src/config/schemas/llm.ts +14 -0
- package/src/config/schemas/memory-v2.ts +294 -1
- package/src/config/schemas/memory.ts +2 -1
- package/src/context/compactor.ts +60 -1
- package/src/context/token-estimator.ts +47 -4
- package/src/context/window-manager.ts +25 -0
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-health/credential-health-service.ts +34 -19
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +66 -6
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +1 -1
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +357 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +287 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +155 -36
- package/src/daemon/conversation-agent-loop.ts +307 -88
- package/src/daemon/conversation-error.ts +31 -1
- package/src/daemon/conversation-lifecycle.ts +149 -118
- package/src/daemon/conversation-messaging.ts +3 -0
- package/src/daemon/conversation-process.ts +273 -0
- package/src/daemon/conversation-queue-manager.ts +14 -0
- package/src/daemon/conversation-runtime-assembly.ts +145 -84
- package/src/daemon/conversation-slash.ts +37 -5
- package/src/daemon/conversation-surfaces.ts +45 -2
- package/src/daemon/conversation-tool-setup.ts +70 -3
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +54 -32
- package/src/daemon/disk-pressure-guard.ts +14 -2
- package/src/daemon/first-greeting.ts +10 -0
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +498 -0
- package/src/daemon/handlers/config-a2a.ts +160 -0
- package/src/daemon/handlers/config-model.test.ts +2 -0
- package/src/daemon/handlers/conversations.ts +90 -3
- package/src/daemon/handlers/shared.ts +92 -29
- package/src/daemon/host-bash-proxy.ts +1 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +5 -5
- package/src/daemon/host-file-proxy.ts +5 -5
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +11 -11
- package/src/daemon/lifecycle.ts +40 -23
- package/src/daemon/meet-manifest-loader.ts +1 -7
- package/src/daemon/message-protocol.ts +4 -0
- package/src/daemon/message-types/conversations.ts +14 -9
- package/src/daemon/message-types/document-comments.ts +50 -0
- package/src/daemon/message-types/home.ts +1 -13
- package/src/daemon/message-types/messages.ts +66 -7
- package/src/daemon/message-types/surfaces.ts +3 -1
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/message-types/web-activity.ts +57 -0
- package/src/daemon/plugin-source-watcher.ts +135 -3
- package/src/daemon/process-message.ts +69 -12
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +52 -0
- package/src/daemon/tool-setup-types.ts +13 -0
- package/src/daemon/trust-context.ts +6 -0
- package/src/documents/document-comments-store.test.ts +338 -0
- package/src/documents/document-comments-store.ts +237 -0
- package/src/documents/document-store.ts +202 -0
- package/src/events/relationship-state-updated.ts +25 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -2
- package/src/heartbeat/heartbeat-service.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +33 -2
- package/src/home/feed-types.ts +6 -1
- package/src/home/home-content-refresh.ts +52 -0
- package/src/home/home-greeting-cache.ts +69 -0
- package/src/home/home-greeting.ts +85 -0
- package/src/home/suggested-prompts.ts +168 -9
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/registries.ts +8 -12
- package/src/memory/__tests__/db-async-query.test.ts +165 -0
- package/src/memory/__tests__/db-maintenance.test.ts +115 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +241 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +135 -2
- package/src/memory/__tests__/memory-retrospective-job.test.ts +327 -6
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-crud.ts +191 -100
- package/src/memory/conversation-starters-cadence.ts +3 -1
- package/src/memory/conversation-title-service.ts +19 -3
- package/src/memory/db-async-query.ts +214 -0
- package/src/memory/db-init.ts +26 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/delivery-crud.ts +41 -0
- package/src/memory/delivery-status.ts +141 -15
- package/src/memory/external-conversation-store.ts +32 -1
- package/src/memory/graph/bootstrap.ts +8 -1
- package/src/memory/graph/capability-seed.ts +7 -3
- package/src/memory/graph/conversation-graph-memory.ts +100 -17
- package/src/memory/graph/extraction.ts +1 -5
- package/src/memory/graph/graph-search.ts +7 -1
- package/src/memory/indexer.ts +28 -18
- package/src/memory/job-handlers/cleanup.ts +76 -18
- package/src/memory/job-handlers/conversation-starters.ts +1 -4
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +68 -15
- package/src/memory/llm-request-log-source-clickhouse.ts +42 -2
- package/src/memory/llm-request-log-source-local.ts +7 -0
- package/src/memory/llm-request-log-source.ts +9 -2
- package/src/memory/llm-request-log-store.ts +43 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-constants.ts +28 -0
- package/src/memory/memory-retrospective-enqueue.ts +11 -3
- package/src/memory/memory-retrospective-job.ts +413 -18
- package/src/memory/memory-retrospective-startup-cleanup.ts +3 -3
- package/src/memory/memory-v2-activation-log-store.ts +41 -14
- package/src/memory/migrations/100-core-tables.ts +1 -0
- package/src/memory/migrations/109-external-conversation-bindings.ts +1 -0
- package/src/memory/migrations/253-conversation-last-notified-profile.ts +15 -0
- package/src/memory/migrations/253-document-comments.ts +47 -0
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +43 -0
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +24 -0
- package/src/memory/migrations/256-memory-v2-injection-events.ts +113 -0
- package/src/memory/migrations/257-strip-base-url-non-openai-compatible.ts +22 -0
- package/src/memory/migrations/258-onboarding-events-prior-assistants.ts +13 -0
- package/src/memory/migrations/259-conversation-cleaned-at.ts +33 -0
- package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
- package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
- package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
- package/src/memory/migrations/index.ts +34 -0
- package/src/memory/migrations/registry.ts +58 -0
- package/src/memory/onboarding-events-store.ts +7 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +3 -0
- package/src/memory/schema/infrastructure.ts +22 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
- package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +74 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +225 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +109 -0
- package/src/memory/v2/__tests__/injection-events.test.ts +318 -0
- package/src/memory/v2/__tests__/injection.test.ts +158 -112
- package/src/memory/v2/__tests__/page-index.test.ts +365 -1
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +660 -4
- package/src/memory/v2/consolidation-job.ts +14 -0
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +124 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +224 -0
- package/src/memory/v2/harness/retriever.ts +74 -0
- package/src/memory/v2/harness/router-retriever.ts +43 -0
- package/src/memory/v2/harness/runner.ts +106 -0
- package/src/memory/v2/harness/trace.ts +58 -0
- package/src/memory/v2/injection-events.ts +101 -0
- package/src/memory/v2/injection.ts +42 -25
- package/src/memory/v2/page-index.ts +209 -7
- package/src/memory/v2/page-store.ts +18 -0
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +369 -62
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +468 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +563 -0
- package/src/memory/v3/__tests__/filter.test.ts +512 -0
- package/src/memory/v3/__tests__/gate.test.ts +574 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +233 -0
- package/src/memory/v3/__tests__/loop.test.ts +530 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +440 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +312 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +469 -0
- package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
- package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
- package/src/memory/v3/__tests__/tree-walk.test.ts +707 -0
- package/src/memory/v3/__tests__/validate.test.ts +245 -0
- package/src/memory/v3/auto-edges.ts +223 -0
- package/src/memory/v3/coactivation-store.ts +124 -0
- package/src/memory/v3/consolidation-job.ts +323 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +249 -0
- package/src/memory/v3/filter.ts +281 -0
- package/src/memory/v3/gate.ts +334 -0
- package/src/memory/v3/index-composition.ts +113 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +382 -0
- package/src/memory/v3/maintenance.ts +144 -0
- package/src/memory/v3/prompt-context.ts +33 -0
- package/src/memory/v3/prompts/consolidation.ts +458 -0
- package/src/memory/v3/prompts/system-prompts.ts +196 -0
- package/src/memory/v3/retriever.ts +33 -0
- package/src/memory/v3/scouts.ts +420 -0
- package/src/memory/v3/shadow-middleware.ts +305 -0
- package/src/memory/v3/traversal.ts +206 -0
- package/src/memory/v3/tree-index.ts +237 -0
- package/src/memory/v3/tree-store.ts +394 -0
- package/src/memory/v3/tree-walk.ts +351 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +300 -0
- package/src/messaging/providers/index.ts +7 -1
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +329 -3
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +34 -1
- package/src/messaging/providers/slack/adapter.ts +178 -25
- package/src/messaging/providers/slack/api.test.ts +54 -0
- package/src/messaging/providers/slack/api.ts +119 -3
- package/src/messaging/providers/slack/client.ts +12 -0
- package/src/messaging/providers/slack/deep-link.ts +20 -1
- package/src/messaging/providers/slack/message-metadata.test.ts +48 -0
- package/src/messaging/providers/slack/message-metadata.ts +156 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +107 -75
- package/src/messaging/providers/slack/render-transcript.ts +176 -49
- package/src/messaging/providers/slack/send.test.ts +77 -0
- package/src/messaging/providers/slack/send.ts +8 -2
- package/src/messaging/providers/slack/types.ts +14 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +4 -1
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +116 -54
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/conversation-seed-composer.ts +14 -2
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/deferred-emit.ts +135 -0
- package/src/notifications/emit-signal.ts +38 -50
- package/src/notifications/home-feed-side-effect.ts +60 -30
- package/src/oauth/connect-orchestrator.ts +3 -0
- package/src/oauth/credential-token-resolver.ts +2 -0
- package/src/oauth/manual-token-connection.ts +19 -0
- package/src/oauth/oauth-store.ts +12 -0
- package/src/oauth/seed-providers.ts +22 -0
- package/src/permissions/prompter.ts +8 -5
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +6 -3
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +100 -20
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +11 -16
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/prompts/__tests__/system-prompt.test.ts +46 -2
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/normalize-onboarding.ts +40 -0
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +69 -19
- package/src/prompts/system-prompt.ts +118 -216
- package/src/prompts/template-detection.ts +37 -0
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +141 -0
- package/src/prompts/templates/BOOTSTRAP.md +10 -2
- package/src/prompts/templates/VOICE.md +3 -0
- package/src/prompts/templates/system-sections.ts +281 -9
- package/src/providers/__tests__/connection-model-compat.test.ts +234 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +159 -66
- package/src/providers/call-site-routing.ts +14 -2
- package/src/providers/connection-model-compat.ts +38 -0
- package/src/providers/connection-resolution.ts +16 -2
- package/src/providers/fireworks/client.ts +20 -2
- package/src/providers/gemini/client.ts +49 -6
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +342 -0
- package/src/providers/inference/__tests__/base-url-security.test.ts +189 -0
- package/src/providers/inference/__tests__/codex-token-refresh.test.ts +254 -0
- package/src/providers/inference/adapter-factory.ts +18 -1
- package/src/providers/inference/auth.ts +3 -3
- package/src/providers/inference/codex-token-refresh.ts +128 -0
- package/src/providers/inference/resolve-auth.ts +49 -6
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +91 -1
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openai/chat-completions-provider.ts +63 -23
- package/src/providers/openai/codex-models.ts +18 -0
- package/src/providers/openai/responses-provider.ts +86 -23
- package/src/providers/openrouter/client.ts +5 -1
- package/src/providers/provider-send-message.ts +7 -1
- package/src/providers/retry.ts +34 -3
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/types.ts +25 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +214 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +128 -0
- package/src/runtime/agent-wake.ts +152 -56
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +43 -3
- package/src/runtime/background-job-runner.ts +26 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-reply-delivery.ts +182 -47
- package/src/runtime/channel-retry-sweep.ts +141 -16
- package/src/runtime/http-types.ts +7 -6
- package/src/runtime/migrations/vbundle-builder.ts +10 -3
- package/src/runtime/pending-interactions.ts +50 -8
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +162 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +161 -1
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +14 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +290 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +280 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +266 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/approval-routes.ts +4 -1
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +188 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +0 -6
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +246 -0
- package/src/runtime/routes/content-source-routes.ts +78 -0
- package/src/runtime/routes/conversation-cli-routes.ts +147 -2
- package/src/runtime/routes/conversation-list-routes.ts +12 -4
- package/src/runtime/routes/conversation-management-routes.ts +77 -20
- package/src/runtime/routes/conversation-query-routes.ts +196 -31
- package/src/runtime/routes/conversation-routes.ts +472 -425
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/document-comments-routes.ts +287 -0
- package/src/runtime/routes/documents-routes.ts +33 -0
- package/src/runtime/routes/domain-routes.ts +60 -10
- package/src/runtime/routes/email-routes.ts +5 -2
- package/src/runtime/routes/events-routes.ts +54 -10
- package/src/runtime/routes/group-routes.ts +24 -8
- package/src/runtime/routes/home-feed-routes.ts +6 -3
- package/src/runtime/routes/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-browser-routes.ts +17 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-routes.ts +21 -0
- package/src/runtime/routes/inbound-message-handler.ts +288 -58
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +365 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +283 -82
- package/src/runtime/routes/index.ts +20 -4
- package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
- package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
- package/src/runtime/routes/inference-provider-connection-routes.ts +63 -7
- package/src/runtime/routes/integrations/a2a.ts +60 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/log-export-routes.ts +39 -0
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +427 -0
- package/src/runtime/routes/memory-v3-routes.ts +316 -0
- package/src/runtime/routes/migration-routes.ts +21 -24
- package/src/runtime/routes/notification-routes.ts +19 -2
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/question-routes.ts +4 -1
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/sanity-routes.ts +159 -0
- package/src/runtime/routes/secret-routes.ts +25 -5
- package/src/runtime/routes/settings-routes.ts +12 -11
- package/src/runtime/routes/slack-channel-routes.ts +188 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/conversation-serializer.ts +30 -4
- package/src/runtime/sync/resource-sync-events.ts +106 -38
- package/src/runtime/sync/sync-publisher.test.ts +49 -0
- package/src/runtime/sync/sync-publisher.ts +2 -1
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/schedule/integration-status.ts +3 -1
- package/src/security/__tests__/oauth2-device-code.test.ts +479 -0
- package/src/security/oauth2-device-code.ts +307 -0
- package/src/security/oauth2.ts +26 -9
- package/src/security/secure-keys.ts +5 -0
- package/src/skills/catalog-install.ts +6 -2
- package/src/telemetry/types.ts +12 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/acp/spawn.test.ts +119 -0
- package/src/tools/acp/spawn.ts +15 -2
- package/src/tools/apps/definitions.ts +2 -8
- package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
- package/src/tools/ask-question/ask-question-tool.ts +38 -45
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +150 -0
- package/src/tools/browser/browser-execution.ts +106 -0
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +28 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +4 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +22 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +42 -2
- package/src/tools/browser/cdp-client/factory.ts +171 -4
- package/src/tools/browser/cdp-client/local-cdp-client.ts +21 -0
- package/src/tools/browser/cdp-client/types.ts +101 -0
- package/src/tools/browser/pinned-tabs.ts +146 -0
- package/src/tools/computer-use/definitions.ts +22 -78
- package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
- package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
- package/src/tools/credentials/vault.ts +3 -9
- package/src/tools/document/document-comment-tool.test.ts +379 -0
- package/src/tools/document/document-comment-tool.ts +156 -0
- package/src/tools/document/document-tool.ts +187 -2
- package/src/tools/execution-target.ts +21 -23
- package/src/tools/executor.ts +6 -1
- package/src/tools/filesystem/edit.ts +3 -9
- package/src/tools/filesystem/list.ts +3 -9
- package/src/tools/filesystem/read.ts +3 -9
- package/src/tools/filesystem/write.ts +3 -9
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.ts +3 -9
- package/src/tools/host-terminal/host-shell.ts +3 -9
- package/src/tools/mcp/mcp-tool-factory.ts +1 -8
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/__tests__/web-fetch-metadata.test.ts +229 -0
- package/src/tools/network/__tests__/web-search-metadata.test.ts +346 -0
- package/src/tools/network/domain-normalize.ts +17 -0
- package/src/tools/network/web-fetch.ts +216 -73
- package/src/tools/network/web-search.ts +216 -98
- package/src/tools/registry.ts +7 -23
- package/src/tools/schema-transforms.ts +1 -1
- package/src/tools/skills/execute.ts +3 -9
- package/src/tools/skills/load.ts +3 -9
- package/src/tools/skills/skill-tool-factory.ts +1 -8
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +19 -12
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/types.ts +31 -98
- package/src/tools/ui-surface/definitions.ts +9 -23
- package/src/types/onboarding-context.ts +4 -0
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/__tests__/favicon.test.ts +84 -0
- package/src/util/favicon.ts +40 -0
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -7
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/git-service.ts +75 -4
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +103 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
- package/src/__tests__/message-complete-display-id.test.ts +0 -175
- package/src/config/bundled-skills/document/SKILL.md +0 -54
- package/src/config/bundled-skills/document/TOOLS.json +0 -106
- package/src/daemon/seed-files.ts +0 -18
- package/src/prompts/cache-boundary.ts +0 -8
- package/src/runtime/routes/interface-routes.ts +0 -43
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-create.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-delete.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-list.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-read.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-update.ts +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isPrivateOrLocalHost } from "../tools/network/url-safety.js";
|
|
2
|
+
|
|
3
|
+
/** Strip the trailing `:port` from a host string. IPv6 hosts are bracketed
|
|
4
|
+
* ("[::1]:8080" → "[::1]"); IPv4/DNS hosts have a single colon ("host:8080" → "host"). */
|
|
5
|
+
function stripPort(host: string): string {
|
|
6
|
+
if (host.startsWith("[")) {
|
|
7
|
+
const end = host.indexOf("]");
|
|
8
|
+
return end === -1 ? host : host.slice(0, end + 1);
|
|
9
|
+
}
|
|
10
|
+
const lastColon = host.lastIndexOf(":");
|
|
11
|
+
if (lastColon === -1) return host;
|
|
12
|
+
return host.slice(0, lastColon);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Match any IP literal — IPv4 dotted-quad or IPv6 (bracketed or bare with a colon).
|
|
16
|
+
* We reject every IP from the favicon path because we don't reverse-lookup hosts,
|
|
17
|
+
* so a raw IP — public or private — would expose the literal to Google when the
|
|
18
|
+
* client renders the icon. DNS names are fine; only literals are rejected. */
|
|
19
|
+
function isIPLiteral(host: string): boolean {
|
|
20
|
+
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(host)) return true;
|
|
21
|
+
if (host.startsWith("[") || host.includes(":")) return true;
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Deterministic favicon URL for a host using Google's s2 service.
|
|
26
|
+
* Returns undefined for empty/malformed hosts, raw IP literals, and any host
|
|
27
|
+
* isPrivateOrLocalHost flags. Callers omit the field on undefined so we never
|
|
28
|
+
* leak internal hostnames or arbitrary IPs to Google when clients render the
|
|
29
|
+
* icon. */
|
|
30
|
+
export function faviconUrlForDomain(domain: string): string | undefined {
|
|
31
|
+
const trimmed = domain.trim().toLowerCase();
|
|
32
|
+
if (!trimmed || trimmed.includes("/") || trimmed.includes(" ")) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const hostOnly = stripPort(trimmed);
|
|
36
|
+
if (!hostOnly || isIPLiteral(hostOnly) || isPrivateOrLocalHost(hostOnly)) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(hostOnly)}&sz=64`;
|
|
40
|
+
}
|
package/src/util/logger.ts
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
getIsContainerized,
|
|
18
18
|
} from "../config/env-registry.js";
|
|
19
19
|
import { logSerializers } from "./log-redact.js";
|
|
20
|
-
import {
|
|
20
|
+
import { getLogsDir } from "./platform.js";
|
|
21
21
|
import { createSentryLogStream } from "./sentry-log-stream.js";
|
|
22
22
|
|
|
23
23
|
/** Common pino-pretty options that inline [module] into the message prefix. */
|
|
@@ -87,7 +87,7 @@ function resolveLogDir(config: LogFileConfig): string | undefined {
|
|
|
87
87
|
if (getIsContainerized()) {
|
|
88
88
|
// Config has a host-specific path that can't be created inside the
|
|
89
89
|
// container (e.g. /Users/…). Fall back to the default log directory.
|
|
90
|
-
const fallback =
|
|
90
|
+
const fallback = getLogsDir();
|
|
91
91
|
console.warn(
|
|
92
92
|
`[logger] Configured logFile.dir "${config.dir}" cannot be created ` +
|
|
93
93
|
`in container (${(err as Error).message}). Falling back to "${fallback}".`,
|
|
@@ -210,7 +210,8 @@ function getRootLogger(): pino.Logger {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
try {
|
|
213
|
-
const
|
|
213
|
+
const logDir = getLogsDir();
|
|
214
|
+
const logPath = logFilePathForDate(logDir, new Date());
|
|
214
215
|
// Use sync: true so the fd is opened immediately. This prevents
|
|
215
216
|
// "sonic boom is not ready yet" errors when commander calls
|
|
216
217
|
// process.exit(0) for --help/--version before the async fd is ready.
|
|
@@ -247,6 +248,10 @@ function getRootLogger(): pino.Logger {
|
|
|
247
248
|
fileStream,
|
|
248
249
|
);
|
|
249
250
|
}
|
|
251
|
+
|
|
252
|
+
// Register state so ensureCurrentDate() rebuilds across UTC midnight.
|
|
253
|
+
activeLogFileConfig = { dir: logDir, retentionDays: 0 };
|
|
254
|
+
activeLogDate = formatDate(new Date());
|
|
250
255
|
} catch {
|
|
251
256
|
rootLogger = pino(
|
|
252
257
|
{
|
|
@@ -274,16 +279,20 @@ export function truncateForLog(value: string, maxLen = 500): string {
|
|
|
274
279
|
/**
|
|
275
280
|
* Returns a lazy logger that only initializes pino when a log method is called.
|
|
276
281
|
* This avoids "sonic boom is not ready yet" errors when the process exits
|
|
277
|
-
* quickly (e.g. `assistant --help`).
|
|
282
|
+
* quickly (e.g. `assistant --help`). The child is rebuilt whenever the
|
|
283
|
+
* underlying root logger changes (e.g. day rollover, late initLogger()).
|
|
278
284
|
*/
|
|
279
285
|
export function getLogger(name: string): pino.Logger {
|
|
286
|
+
let cachedRoot: pino.Logger | null = null;
|
|
280
287
|
let child: pino.Logger | null = null;
|
|
281
288
|
const handler: ProxyHandler<pino.Logger> = {
|
|
282
289
|
get(_target, prop, receiver) {
|
|
283
|
-
|
|
284
|
-
|
|
290
|
+
const root = getRootLogger();
|
|
291
|
+
if (root !== cachedRoot) {
|
|
292
|
+
cachedRoot = root;
|
|
293
|
+
child = root.child({ module: name });
|
|
285
294
|
}
|
|
286
|
-
const val = Reflect.get(child
|
|
295
|
+
const val = Reflect.get(child!, prop, receiver);
|
|
287
296
|
if (typeof val === "function") {
|
|
288
297
|
return val.bind(child);
|
|
289
298
|
}
|
package/src/util/platform.ts
CHANGED
|
@@ -103,10 +103,6 @@ export function getSandboxWorkingDir(): string {
|
|
|
103
103
|
return getWorkspaceDir();
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
export function getInterfacesDir(): string {
|
|
107
|
-
return join(getDataDir(), "interfaces");
|
|
108
|
-
}
|
|
109
|
-
|
|
110
106
|
/**
|
|
111
107
|
* Returns the sounds directory (~/.vellum/workspace/data/sounds).
|
|
112
108
|
* Custom sound files and sound configuration live here.
|
|
@@ -162,8 +158,13 @@ export function getDbPath(): string {
|
|
|
162
158
|
return join(getDataDir(), "db", "assistant.db");
|
|
163
159
|
}
|
|
164
160
|
|
|
165
|
-
|
|
166
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Returns the directory where logs live: `<dataDir>/logs/`. Files rotate
|
|
163
|
+
* daily (`assistant-YYYY-MM-DD.log`), so callers ask for the directory and
|
|
164
|
+
* let the logger own the filename.
|
|
165
|
+
*/
|
|
166
|
+
export function getLogsDir(): string {
|
|
167
|
+
return join(getDataDir(), "logs");
|
|
167
168
|
}
|
|
168
169
|
|
|
169
170
|
export function getHistoryPath(): string {
|
|
@@ -413,7 +414,6 @@ export function ensureDataDir(): void {
|
|
|
413
414
|
join(wsData, "memory", "knowledge"),
|
|
414
415
|
join(wsData, "apps"),
|
|
415
416
|
join(wsData, "attachments"),
|
|
416
|
-
join(wsData, "interfaces"),
|
|
417
417
|
join(wsData, "sounds"),
|
|
418
418
|
];
|
|
419
419
|
for (const dir of dirs) {
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper for locating a `sqlite3` CLI binary on the host.
|
|
3
|
+
*
|
|
4
|
+
* Used by `memory/db-async-query.ts` so slow statements (`VACUUM`,
|
|
5
|
+
* `PRAGMA optimize`, large bulk deletes) can be shelled out to a
|
|
6
|
+
* subprocess and run without blocking the daemon's main event loop.
|
|
7
|
+
*
|
|
8
|
+
* Resolution order (matches the spirit of `bun-runtime.ts#findBun()`):
|
|
9
|
+
* 1. Common system install locations
|
|
10
|
+
* 2. `Bun.which("sqlite3")` (PATH lookup)
|
|
11
|
+
*
|
|
12
|
+
* Unlike `bun-runtime.ts`, this module does **not** download `sqlite3`
|
|
13
|
+
* when missing. The async path is opt-out (callers fall back to the
|
|
14
|
+
* synchronous in-process `bun:sqlite` connection); if a user wants the
|
|
15
|
+
* non-blocking behavior they install one package.
|
|
16
|
+
*
|
|
17
|
+
* On platform (k8s assistant container) `sqlite3` is installed in the
|
|
18
|
+
* Dockerfile, so the primary path is always available there. On macOS
|
|
19
|
+
* `sqlite3` ships with the OS. On most Linux distros it's available via
|
|
20
|
+
* the system package manager.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { existsSync } from "node:fs";
|
|
24
|
+
|
|
25
|
+
let cachedSqlite3Path: string | undefined | null;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Synchronous lookup for a usable `sqlite3` CLI binary.
|
|
29
|
+
* Returns the path if found, `undefined` otherwise. Result is cached
|
|
30
|
+
* per-process so the filesystem checks only happen once.
|
|
31
|
+
*/
|
|
32
|
+
export function findSqlite3(): string | undefined {
|
|
33
|
+
if (cachedSqlite3Path !== undefined) {
|
|
34
|
+
return cachedSqlite3Path ?? undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 1. Common install locations. We check these before `Bun.which` so we
|
|
38
|
+
// pick a deterministic, predictable binary even when PATH is
|
|
39
|
+
// unusual (e.g. a daemon launched with a stripped env).
|
|
40
|
+
for (const p of [
|
|
41
|
+
"/usr/bin/sqlite3",
|
|
42
|
+
"/usr/local/bin/sqlite3",
|
|
43
|
+
"/opt/homebrew/bin/sqlite3",
|
|
44
|
+
]) {
|
|
45
|
+
if (existsSync(p)) {
|
|
46
|
+
cachedSqlite3Path = p;
|
|
47
|
+
return p;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 2. PATH lookup.
|
|
52
|
+
const which = Bun.which("sqlite3");
|
|
53
|
+
if (which) {
|
|
54
|
+
cachedSqlite3Path = which;
|
|
55
|
+
return which;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
cachedSqlite3Path = null;
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Reset the cached lookup. Test-only. */
|
|
63
|
+
export function _resetSqlite3Cache(): void {
|
|
64
|
+
cachedSqlite3Path = undefined;
|
|
65
|
+
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { execFile, spawnSync } from "node:child_process";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
chmodSync,
|
|
4
|
+
existsSync,
|
|
5
|
+
mkdirSync,
|
|
6
|
+
readFileSync,
|
|
7
|
+
unlinkSync,
|
|
8
|
+
writeFileSync,
|
|
9
|
+
} from "node:fs";
|
|
3
10
|
import { join } from "node:path";
|
|
4
11
|
import { promisify } from "node:util";
|
|
5
12
|
|
|
@@ -70,6 +77,41 @@ const WORKSPACE_GITIGNORE_RULES = [
|
|
|
70
77
|
"session-token",
|
|
71
78
|
];
|
|
72
79
|
|
|
80
|
+
const NULL_GIT_OID = "0000000000000000000000000000000000000000";
|
|
81
|
+
|
|
82
|
+
const WORKSPACE_BRANCH_GUARD_HOOK = `#!/bin/sh
|
|
83
|
+
set -eu
|
|
84
|
+
|
|
85
|
+
state="\${1:-}"
|
|
86
|
+
if [ "$state" != "prepared" ]; then
|
|
87
|
+
exit 0
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
while read -r _old_oid new_oid refname; do
|
|
91
|
+
case "$refname" in
|
|
92
|
+
refs/heads/main)
|
|
93
|
+
;;
|
|
94
|
+
refs/heads/*)
|
|
95
|
+
if [ "$new_oid" = "${NULL_GIT_OID}" ]; then
|
|
96
|
+
continue
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
cat >&2 <<MSG
|
|
100
|
+
Blocked: assistant workspace git branches are disabled.
|
|
101
|
+
|
|
102
|
+
Use the workspace main branch for assistant state. Create task branches only in
|
|
103
|
+
external product repositories or dedicated worktrees.
|
|
104
|
+
|
|
105
|
+
Rejected ref update: $refname
|
|
106
|
+
MSG
|
|
107
|
+
exit 1
|
|
108
|
+
;;
|
|
109
|
+
esac
|
|
110
|
+
done
|
|
111
|
+
|
|
112
|
+
exit 0
|
|
113
|
+
`;
|
|
114
|
+
|
|
73
115
|
/** Properties added by Node's child_process errors. */
|
|
74
116
|
interface ExecError extends Error {
|
|
75
117
|
killed?: boolean;
|
|
@@ -426,7 +468,9 @@ export class WorkspaceGitService {
|
|
|
426
468
|
// These calls are OUTSIDE the rev-parse try/catch so that
|
|
427
469
|
// normalization errors are not misclassified as "no commits".
|
|
428
470
|
this.ensureGitignoreRulesLocked();
|
|
471
|
+
this.ensureBranchGuardHookLocked();
|
|
429
472
|
await this.ensureCommitIdentityLocked();
|
|
473
|
+
await this.ensureBranchGuardConfigLocked();
|
|
430
474
|
await this.ensureOnMainLocked();
|
|
431
475
|
this.initialized = true;
|
|
432
476
|
this.recordInitSuccess();
|
|
@@ -444,7 +488,9 @@ export class WorkspaceGitService {
|
|
|
444
488
|
// in the corruption-recovery path we fall through here after
|
|
445
489
|
// removing .git, so branch enforcement is still useful.
|
|
446
490
|
this.ensureGitignoreRulesLocked();
|
|
491
|
+
this.ensureBranchGuardHookLocked();
|
|
447
492
|
await this.ensureCommitIdentityLocked();
|
|
493
|
+
await this.ensureBranchGuardConfigLocked();
|
|
448
494
|
await this.ensureOnMainLocked();
|
|
449
495
|
|
|
450
496
|
// Create initial commit synchronously within the lock to prevent
|
|
@@ -452,9 +498,14 @@ export class WorkspaceGitService {
|
|
|
452
498
|
// initial commit could run concurrently and consume edits meant
|
|
453
499
|
// for the first user-requested commit.
|
|
454
500
|
const status = await this.getStatusInternal();
|
|
455
|
-
const
|
|
456
|
-
|
|
457
|
-
|
|
501
|
+
const autoCreatedInitFiles = new Set([
|
|
502
|
+
".gitignore",
|
|
503
|
+
".githooks/",
|
|
504
|
+
".githooks/reference-transaction",
|
|
505
|
+
]);
|
|
506
|
+
const hasExistingFiles = status.untracked.some(
|
|
507
|
+
(f) => !autoCreatedInitFiles.has(f),
|
|
508
|
+
);
|
|
458
509
|
|
|
459
510
|
await this.execGit(["add", "-A"]);
|
|
460
511
|
|
|
@@ -766,6 +817,26 @@ export class WorkspaceGitService {
|
|
|
766
817
|
await this.execGit(["config", "user.email", gitEmail]);
|
|
767
818
|
}
|
|
768
819
|
|
|
820
|
+
/**
|
|
821
|
+
* Ensure workspace branch guard hook is present.
|
|
822
|
+
* Must be called with the mutex lock held.
|
|
823
|
+
*/
|
|
824
|
+
private ensureBranchGuardHookLocked(): void {
|
|
825
|
+
const hooksDir = join(this.workspaceDir, ".githooks");
|
|
826
|
+
const hookPath = join(hooksDir, "reference-transaction");
|
|
827
|
+
mkdirSync(hooksDir, { recursive: true });
|
|
828
|
+
writeFileSync(hookPath, WORKSPACE_BRANCH_GUARD_HOOK, "utf-8");
|
|
829
|
+
chmodSync(hookPath, 0o755);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* Ensure workspace git uses the branch guard hook path.
|
|
834
|
+
* Must be called with the mutex lock held.
|
|
835
|
+
*/
|
|
836
|
+
private async ensureBranchGuardConfigLocked(): Promise<void> {
|
|
837
|
+
await this.execGit(["config", "core.hooksPath", ".githooks"]);
|
|
838
|
+
}
|
|
839
|
+
|
|
769
840
|
/**
|
|
770
841
|
* Ensure the workspace repo is on the `main` branch.
|
|
771
842
|
* If on a different branch or in detached HEAD state, switches to main
|
|
@@ -140,6 +140,7 @@ const GEMINI_CATALOG_MODELS = new Set<string>([
|
|
|
140
140
|
"gemini-3.1-pro-preview-customtools",
|
|
141
141
|
"gemini-3-flash-preview",
|
|
142
142
|
"gemini-3.1-flash-lite-preview",
|
|
143
|
+
"gemini-3.1-flash-lite",
|
|
143
144
|
"gemini-2.5-flash",
|
|
144
145
|
"gemini-2.5-flash-lite",
|
|
145
146
|
"gemini-2.5-pro",
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace migration 088: Deprecate stale
|
|
3
|
+
* `prompts/system/08-background-conversation.md` overrides.
|
|
4
|
+
*
|
|
5
|
+
* PR #31210 moved the background-conversation guidance out of the bundled
|
|
6
|
+
* system prompt and into a per-turn user-message injector. As a side effect:
|
|
7
|
+
*
|
|
8
|
+
* - Workspace overrides that gated on `{{#isBackgroundConversation}}` now
|
|
9
|
+
* evaluate the gate as false (the key is no longer passed to the system
|
|
10
|
+
* prompt context) and silently stop rendering in background turns.
|
|
11
|
+
* - Plain-text overrides without a gate would now render unconditionally
|
|
12
|
+
* in ALL conversations — the opposite of intended behavior.
|
|
13
|
+
*
|
|
14
|
+
* Either failure mode is silent. To prevent it, this migration renames any
|
|
15
|
+
* existing `prompts/system/08-background-conversation.md` to
|
|
16
|
+
* `08-background-conversation.md.deprecated` so the section-discovery walker
|
|
17
|
+
* (which only picks up `.md` files) stops loading it, while preserving the
|
|
18
|
+
* user's customized text on disk for manual review.
|
|
19
|
+
*
|
|
20
|
+
* Idempotent: re-runs after `08-background-conversation.md` has already been
|
|
21
|
+
* renamed are no-ops. If both files exist (a user re-created the override
|
|
22
|
+
* after a prior partial run), the bundled section is gone — drop the `.md`
|
|
23
|
+
* and keep the previously-preserved `.deprecated` copy.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { existsSync, renameSync, unlinkSync } from "node:fs";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
|
|
29
|
+
import { getLogger } from "../../util/logger.js";
|
|
30
|
+
import type { WorkspaceMigration } from "./types.js";
|
|
31
|
+
|
|
32
|
+
const log = getLogger(
|
|
33
|
+
"workspace-migration-088-deprecate-background-conversation-override",
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const OVERRIDE_FILENAME = "08-background-conversation.md";
|
|
37
|
+
const DEPRECATED_FILENAME = "08-background-conversation.md.deprecated";
|
|
38
|
+
|
|
39
|
+
export const deprecateBackgroundConversationOverrideMigration: WorkspaceMigration =
|
|
40
|
+
{
|
|
41
|
+
id: "088-deprecate-background-conversation-override",
|
|
42
|
+
description:
|
|
43
|
+
"Rename stale prompts/system/08-background-conversation.md overrides to .deprecated so they stop rendering after the section moved to a per-turn injector",
|
|
44
|
+
retryFailedCheckpoint: true,
|
|
45
|
+
|
|
46
|
+
run(workspaceDir: string): void {
|
|
47
|
+
const promptDir = join(workspaceDir, "prompts", "system");
|
|
48
|
+
const overridePath = join(promptDir, OVERRIDE_FILENAME);
|
|
49
|
+
const deprecatedPath = join(promptDir, DEPRECATED_FILENAME);
|
|
50
|
+
|
|
51
|
+
if (!existsSync(overridePath)) return;
|
|
52
|
+
|
|
53
|
+
if (existsSync(deprecatedPath)) {
|
|
54
|
+
try {
|
|
55
|
+
unlinkSync(overridePath);
|
|
56
|
+
log.info(
|
|
57
|
+
{ path: overridePath, preserved: deprecatedPath },
|
|
58
|
+
"Removed re-created background-conversation override; preserved copy already exists",
|
|
59
|
+
);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
log.warn(
|
|
62
|
+
{ err, path: overridePath },
|
|
63
|
+
"Failed to remove background-conversation override",
|
|
64
|
+
);
|
|
65
|
+
throw err;
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
renameSync(overridePath, deprecatedPath);
|
|
72
|
+
log.info(
|
|
73
|
+
{ from: overridePath, to: deprecatedPath },
|
|
74
|
+
"Renamed stale background-conversation override to .deprecated",
|
|
75
|
+
);
|
|
76
|
+
} catch (err) {
|
|
77
|
+
log.warn(
|
|
78
|
+
{ err, from: overridePath, to: deprecatedPath },
|
|
79
|
+
"Failed to rename background-conversation override",
|
|
80
|
+
);
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
down(workspaceDir: string): void {
|
|
86
|
+
const promptDir = join(workspaceDir, "prompts", "system");
|
|
87
|
+
const overridePath = join(promptDir, OVERRIDE_FILENAME);
|
|
88
|
+
const deprecatedPath = join(promptDir, DEPRECATED_FILENAME);
|
|
89
|
+
|
|
90
|
+
if (!existsSync(deprecatedPath)) return;
|
|
91
|
+
if (existsSync(overridePath)) return;
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
renameSync(deprecatedPath, overridePath);
|
|
95
|
+
} catch (err) {
|
|
96
|
+
log.warn(
|
|
97
|
+
{ err, from: deprecatedPath, to: overridePath },
|
|
98
|
+
"Failed to restore background-conversation override",
|
|
99
|
+
);
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { getLogger } from "../../util/logger.js";
|
|
5
|
+
import type { WorkspaceMigration } from "./types.js";
|
|
6
|
+
|
|
7
|
+
const log = getLogger("workspace-migration-089-move-memory-tree-out-of-v3");
|
|
8
|
+
|
|
9
|
+
function isNotFoundError(err: unknown): boolean {
|
|
10
|
+
return (
|
|
11
|
+
typeof err === "object" &&
|
|
12
|
+
err !== null &&
|
|
13
|
+
"code" in err &&
|
|
14
|
+
err.code === "ENOENT"
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Move `<workspace>/memory/<fromRel>` to `<workspace>/memory/<toRel>` when the
|
|
20
|
+
* source exists and the destination does not. Idempotent: a missing source is a
|
|
21
|
+
* no-op (already migrated, or never created), and an existing destination is
|
|
22
|
+
* left untouched (we never clobber). Both directions go through here so `run`
|
|
23
|
+
* and `down` share the same safety checks.
|
|
24
|
+
*/
|
|
25
|
+
function moveMemorySubdir(
|
|
26
|
+
workspaceDir: string,
|
|
27
|
+
fromRel: string,
|
|
28
|
+
toRel: string,
|
|
29
|
+
): void {
|
|
30
|
+
const memoryDir = join(workspaceDir, "memory");
|
|
31
|
+
const src = join(memoryDir, fromRel);
|
|
32
|
+
const dest = join(memoryDir, toRel);
|
|
33
|
+
try {
|
|
34
|
+
if (!fs.existsSync(src)) return;
|
|
35
|
+
if (fs.existsSync(dest)) {
|
|
36
|
+
log.warn(
|
|
37
|
+
{ src, dest },
|
|
38
|
+
"Both source and destination tree dirs exist; leaving in place for manual resolution",
|
|
39
|
+
);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
fs.mkdirSync(dirname(dest), { recursive: true });
|
|
43
|
+
fs.renameSync(src, dest);
|
|
44
|
+
log.info({ src, dest }, "Moved memory tree directory");
|
|
45
|
+
} catch (err) {
|
|
46
|
+
if (isNotFoundError(err)) return;
|
|
47
|
+
log.warn({ err, src, dest }, "Failed to move memory tree directory");
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Remove `<workspace>/memory/v3` if it is now an empty wrapper (the tree was
|
|
53
|
+
* its only child). Best-effort — a non-empty or missing dir is left alone. */
|
|
54
|
+
function removeEmptyV3Wrapper(workspaceDir: string): void {
|
|
55
|
+
const v3Dir = join(workspaceDir, "memory", "v3");
|
|
56
|
+
try {
|
|
57
|
+
if (fs.existsSync(v3Dir) && fs.readdirSync(v3Dir).length === 0) {
|
|
58
|
+
fs.rmdirSync(v3Dir);
|
|
59
|
+
}
|
|
60
|
+
} catch {
|
|
61
|
+
// Non-fatal: leaving an empty memory/v3 wrapper is harmless.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Relocate the v3 memory tree from `memory/v3/tree` to `memory/tree`.
|
|
67
|
+
*
|
|
68
|
+
* The tree is a DAG overlay over the flat `memory/concepts/` pages and is now a
|
|
69
|
+
* top-level sibling of `concepts/` (matching the storage design), no longer
|
|
70
|
+
* nested under a `v3/` wrapper. `getTreeDir` reads `memory/tree` after this
|
|
71
|
+
* change, so any pre-existing hand-authored tree must move with it.
|
|
72
|
+
*/
|
|
73
|
+
export const moveMemoryTreeOutOfV3Migration: WorkspaceMigration = {
|
|
74
|
+
id: "089-move-memory-tree-out-of-v3",
|
|
75
|
+
description: "Relocate the v3 memory tree from memory/v3/tree to memory/tree",
|
|
76
|
+
retryFailedCheckpoint: true,
|
|
77
|
+
|
|
78
|
+
run(workspaceDir: string): void {
|
|
79
|
+
moveMemorySubdir(workspaceDir, join("v3", "tree"), "tree");
|
|
80
|
+
removeEmptyV3Wrapper(workspaceDir);
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
down(workspaceDir: string): void {
|
|
84
|
+
moveMemorySubdir(workspaceDir, "tree", join("v3", "tree"));
|
|
85
|
+
},
|
|
86
|
+
};
|
|
@@ -85,6 +85,8 @@ import { removeLegacySkillsIndexMigration } from "./084-remove-legacy-skills-ind
|
|
|
85
85
|
import { memoryV2Bm25BReembedDisabledV2PagesMigration } from "./085-memory-v2-bm25-b-reembed-disabled-v2-pages.js";
|
|
86
86
|
import { revertStaleGeminiMisRewritesMigration } from "./086-revert-stale-gemini-mis-rewrites.js";
|
|
87
87
|
import { memoryRouterBalancedProfileMigration } from "./087-memory-router-balanced-profile.js";
|
|
88
|
+
import { deprecateBackgroundConversationOverrideMigration } from "./088-deprecate-background-conversation-override.js";
|
|
89
|
+
import { moveMemoryTreeOutOfV3Migration } from "./089-move-memory-tree-out-of-v3.js";
|
|
88
90
|
import { migrateToWorkspaceVolumeMigration } from "./migrate-to-workspace-volume.js";
|
|
89
91
|
import type { WorkspaceMigration } from "./types.js";
|
|
90
92
|
|
|
@@ -181,4 +183,6 @@ export const WORKSPACE_MIGRATIONS: WorkspaceMigration[] = [
|
|
|
181
183
|
memoryV2Bm25BReembedDisabledV2PagesMigration,
|
|
182
184
|
revertStaleGeminiMisRewritesMigration,
|
|
183
185
|
memoryRouterBalancedProfileMigration,
|
|
186
|
+
deprecateBackgroundConversationOverrideMigration,
|
|
187
|
+
moveMemoryTreeOutOfV3Migration,
|
|
184
188
|
];
|