@vellumai/assistant 0.10.2-dev.202606250318.5e7cfb0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.lock +0 -20
- package/docs/workspace-tools.md +33 -42
- package/eslint-rules/cli-no-daemon-internals.js +0 -6
- package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +0 -31
- package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +0 -44
- package/node_modules/@vellumai/gateway-client/src/index.ts +0 -14
- package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +0 -17
- package/node_modules/@vellumai/service-contracts/package.json +0 -1
- package/node_modules/@vellumai/service-contracts/src/index.ts +0 -1
- package/openapi.yaml +0 -155
- package/package.json +1 -4
- package/scripts/test.sh +15 -36
- package/src/__tests__/actor-token-service.test.ts +14 -36
- package/src/__tests__/agent-loop-override-profile.test.ts +0 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -2
- package/src/__tests__/agent-wake-override-profile.test.ts +0 -2
- package/src/__tests__/annotate-activity-metadata.test.ts +0 -2
- package/src/__tests__/annotate-risk-options.test.ts +0 -2
- package/src/__tests__/approval-cascade.test.ts +0 -2
- package/src/__tests__/assistant-attachments.test.ts +0 -42
- package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
- package/src/__tests__/btw-routes.test.ts +0 -2
- package/src/__tests__/build-persisted-content.test.ts +0 -2
- package/src/__tests__/call-controller.test.ts +0 -19
- package/src/__tests__/channel-guardian.test.ts +58 -94
- package/src/__tests__/channel-reply-delivery.test.ts +0 -2
- package/src/__tests__/compaction-events.test.ts +0 -2
- package/src/__tests__/compaction.benchmark.test.ts +0 -2
- package/src/__tests__/compactor-call-site-logging.test.ts +0 -2
- package/src/__tests__/compactor-low-watermark-cut.test.ts +0 -2
- package/src/__tests__/compactor-preserved-tail-count.test.ts +0 -2
- package/src/__tests__/compactor-summary-call-truncation.test.ts +0 -2
- package/src/__tests__/compactor-web-search-strip.test.ts +0 -2
- package/src/__tests__/config-loader-backfill.test.ts +10 -123
- package/src/__tests__/config-schema.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +29 -31
- package/src/__tests__/contacts-relay-reads.test.ts +15 -13
- package/src/__tests__/conversation-abort-tool-results.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop.test.ts +0 -134
- package/src/__tests__/conversation-analysis-routes.test.ts +0 -2
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +0 -2
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -2
- package/src/__tests__/conversation-history-web-search.test.ts +0 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +0 -2
- package/src/__tests__/conversation-load-history-stripped.test.ts +0 -2
- package/src/__tests__/conversation-pairing.test.ts +0 -2
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +0 -2
- package/src/__tests__/conversation-process-callsite.test.ts +0 -2
- package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -2
- package/src/__tests__/conversation-queue.test.ts +0 -91
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -14
- package/src/__tests__/conversation-routes-slash-commands.test.ts +0 -14
- package/src/__tests__/conversation-slash-queue.test.ts +0 -2
- package/src/__tests__/conversation-slash-unknown.test.ts +0 -2
- package/src/__tests__/conversation-speed-override.test.ts +0 -2
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -29
- package/src/__tests__/conversation-title-service.test.ts +0 -2
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -47
- package/src/__tests__/conversation-usage.test.ts +0 -2
- package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -2
- package/src/__tests__/conversation-workspace-injection.test.ts +0 -2
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -2
- package/src/__tests__/credential-security-invariants.test.ts +1 -1
- package/src/__tests__/db-migration-rollback.test.ts +171 -205
- package/src/__tests__/db-test-helpers.ts +4 -5
- package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -4
- package/src/__tests__/disk-pressure-guard.test.ts +0 -41
- package/src/__tests__/dm-persistence.test.ts +0 -2
- package/src/__tests__/emit-signal-routing-intent.test.ts +5 -10
- package/src/__tests__/events-dev-bypass-actor.test.ts +1 -7
- package/src/__tests__/exploration-drift-hook.test.ts +2 -3
- package/src/__tests__/filing-service.test.ts +0 -2
- package/src/__tests__/guardian-binding-drift-heal.test.ts +10 -75
- package/src/__tests__/guardian-dispatch.test.ts +1 -95
- package/src/__tests__/guardian-outbound-http.test.ts +0 -13
- package/src/__tests__/heartbeat-disk-pressure.test.ts +0 -2
- package/src/__tests__/heartbeat-service.test.ts +0 -2
- package/src/__tests__/helpers/channel-test-adapter.ts +7 -1
- package/src/__tests__/host-app-control-routes.test.ts +30 -24
- package/src/__tests__/host-bash-routes.test.ts +41 -31
- package/src/__tests__/host-browser-routes.test.ts +32 -26
- package/src/__tests__/host-cu-routes-targeted.test.ts +33 -25
- package/src/__tests__/host-file-routes-targeted.test.ts +52 -40
- package/src/__tests__/host-transfer-routes-targeted.test.ts +43 -31
- package/src/__tests__/http-user-message-parity.test.ts +8 -290
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -28
- package/src/__tests__/inbound-slack-persistence.test.ts +0 -2
- package/src/__tests__/invite-redemption-service.test.ts +0 -198
- package/src/__tests__/llm-context-normalization.test.ts +0 -105
- package/src/__tests__/llm-request-log-error-payload.test.ts +9 -71
- package/src/__tests__/llm-usage-store.test.ts +0 -25
- package/src/__tests__/mcp-health-check.test.ts +1 -2
- package/src/__tests__/media-stream-server-integration.test.ts +0 -127
- package/src/__tests__/memory-retrieval-hook.test.ts +0 -2
- package/src/__tests__/messaging-send-tool.test.ts +0 -2
- package/src/__tests__/migration-import-from-url.test.ts +2 -2
- package/src/__tests__/mtime-cache.test.ts +5 -146
- package/src/__tests__/native-web-search.test.ts +0 -2
- package/src/__tests__/non-member-access-request.test.ts +17 -189
- package/src/__tests__/notification-broadcaster.test.ts +0 -4
- package/src/__tests__/notification-decision-recipient-context.test.ts +32 -33
- package/src/__tests__/notification-deep-link.test.ts +0 -6
- package/src/__tests__/notification-guardian-path.test.ts +0 -19
- package/src/__tests__/openai-provider.test.ts +12 -22
- package/src/__tests__/openai-responses-provider.test.ts +2 -12
- package/src/__tests__/outbound-slack-persistence.test.ts +0 -2
- package/src/__tests__/pending-interactions-resolved-event.test.ts +4 -7
- package/src/__tests__/persistence-secret-redaction.test.ts +0 -2
- package/src/__tests__/plugin-bootstrap.test.ts +73 -3
- package/src/__tests__/plugin-route-contribution.test.ts +17 -4
- package/src/__tests__/plugin-tool-contribution.test.ts +18 -3
- package/src/__tests__/plugin-types.test.ts +2 -0
- package/src/__tests__/process-message-background-slack.test.ts +0 -2
- package/src/__tests__/process-message-display-content.test.ts +0 -2
- package/src/__tests__/provider-error-scenarios.test.ts +4 -5
- package/src/__tests__/provider-usage-tracking.test.ts +0 -39
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +0 -2
- package/src/__tests__/registry.test.ts +1 -4
- package/src/__tests__/relay-server.test.ts +25 -694
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -0
- package/src/__tests__/secret-ingress-http.test.ts +0 -14
- package/src/__tests__/send-endpoint-busy.test.ts +8 -30
- package/src/__tests__/skills.test.ts +0 -44
- package/src/__tests__/slack-inbound-verification.test.ts +2 -47
- package/src/__tests__/stt-hints.test.ts +13 -44
- package/src/__tests__/subagent-detail.test.ts +0 -27
- package/src/__tests__/subagent-disposal.test.ts +0 -65
- package/src/__tests__/subagent-notify-parent.test.ts +0 -2
- package/src/__tests__/subagent-role-registry.test.ts +2 -7
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +0 -2
- package/src/__tests__/subagent-tools.test.ts +0 -2
- package/src/__tests__/suggestion-routes.test.ts +0 -2
- package/src/__tests__/title-generate-hook.test.ts +0 -2
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -2
- package/src/__tests__/tool-executor.test.ts +11 -16
- package/src/__tests__/tool-preview-lifecycle.test.ts +0 -2
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +0 -2
- package/src/__tests__/tool-start-timestamp.test.ts +0 -2
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +10 -10
- package/src/__tests__/twilio-routes.test.ts +0 -96
- package/src/__tests__/ui-file-upload-surface.test.ts +0 -86
- package/src/__tests__/verification-control-plane-policy.test.ts +0 -2
- package/src/__tests__/voice-invite-redemption.test.ts +0 -33
- package/src/__tests__/web-search-backend-failure.test.ts +0 -2
- package/src/__tests__/workspace-migration-remove-hooks.test.ts +35 -14
- package/src/__tests__/workspace-tool-loader.test.ts +2 -195
- package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
- package/src/agent/loop.ts +0 -56
- package/src/api/index.ts +1 -19
- package/src/api/responses/llm-request-log-entry.ts +0 -29
- package/src/api/responses/subagent-detail.ts +0 -17
- package/src/api/surfaces.ts +3 -39
- package/src/approvals/guardian-request-resolvers.ts +11 -1
- package/src/calls/__tests__/relay-setup-router.test.ts +4 -262
- package/src/calls/call-domain.ts +3 -3
- package/src/calls/guardian-dispatch.ts +8 -10
- package/src/calls/inbound-trust-reader.ts +1 -17
- package/src/calls/media-stream-server.ts +0 -21
- package/src/calls/relay-server.ts +50 -167
- package/src/calls/relay-setup-router.ts +7 -37
- package/src/calls/relay-verification.ts +4 -4
- package/src/calls/stt-hints.ts +12 -9
- package/src/calls/twilio-routes.ts +4 -14
- package/src/channels/types.ts +20 -10
- package/src/cli/commands/__tests__/cache.test.ts +1 -8
- package/src/cli/commands/cache.ts +181 -194
- package/src/cli/commands/db/__tests__/repair.test.ts +5 -6
- package/src/cli/commands/db/status.ts +1 -37
- package/src/cli/commands/mcp.ts +218 -252
- package/src/cli/commands/memory/index.ts +0 -2
- package/src/cli/commands/plugins.ts +3 -75
- package/src/cli/lib/__tests__/install-from-github.test.ts +0 -102
- package/src/cli/lib/__tests__/list-installed-plugins.test.ts +1 -160
- package/src/cli/lib/list-installed-plugins.ts +1 -179
- package/src/config/__tests__/sync-gated-profiles.test.ts +3 -11
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +17 -27
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +3 -13
- package/src/config/bundled-skills/subagent/SKILL.md +1 -1
- package/src/config/bundled-skills/subagent/TOOLS.json +1 -1
- package/src/config/feature-flag-registry.json +13 -5
- package/src/config/loader.ts +5 -38
- package/src/config/schemas/__tests__/memory-v3.test.ts +0 -1
- package/src/config/schemas/memory-lifecycle.ts +0 -12
- package/src/config/schemas/memory-v3.ts +0 -7
- package/src/config/schemas/memory.ts +0 -4
- package/src/config/schemas/timeouts.ts +0 -8
- package/src/config/seed-inference-profiles.ts +11 -21
- package/src/config/skills.ts +5 -27
- package/src/config/sync-gated-profiles.ts +13 -12
- package/src/contacts/contacts-write.ts +0 -3
- package/src/daemon/assistant-attachments.ts +4 -27
- package/src/daemon/conversation-agent-loop.ts +0 -28
- package/src/daemon/conversation-process.ts +16 -35
- package/src/daemon/conversation-surfaces.ts +38 -111
- package/src/daemon/conversation-tool-setup.ts +16 -50
- package/src/daemon/conversation.ts +1 -13
- package/src/daemon/disk-pressure-guard.ts +2 -12
- package/src/daemon/event-loop-watchdog.ts +1 -28
- package/src/daemon/external-plugins-bootstrap.ts +34 -4
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +0 -25
- package/src/daemon/handlers/config-a2a.ts +14 -6
- package/src/daemon/handlers/config-channels.ts +22 -78
- package/src/daemon/handlers/conversations.ts +0 -77
- package/src/daemon/lifecycle.ts +0 -4
- package/src/daemon/mcp-reload-service.ts +0 -10
- package/src/daemon/memory-v2-startup.test.ts +0 -72
- package/src/daemon/memory-v2-startup.ts +19 -87
- package/src/daemon/message-types/conversations.ts +0 -2
- package/src/daemon/message-types/surfaces.ts +12 -12
- package/src/daemon/server.ts +4 -0
- package/src/daemon/shutdown-handlers.ts +0 -20
- package/src/daemon/tool-setup-types.ts +0 -9
- package/src/daemon/workspace-tools-watcher.ts +328 -0
- package/src/ipc/__tests__/clients-list-ipc.test.ts +1 -1
- package/src/ipc/assistant-server.ts +2 -2
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +0 -1
- package/src/mcp/client.ts +1 -15
- package/src/mcp/mcp-auth-orchestrator.ts +1 -6
- package/src/mcp/mcp-oauth-provider.ts +8 -19
- package/src/memory/__tests__/memory-retrospective-job.test.ts +0 -8
- package/src/memory/conversation-crud.ts +0 -38
- package/src/memory/db-connection.ts +3 -22
- package/src/memory/db-init.ts +502 -36
- package/src/memory/db-singleton.ts +4 -6
- package/src/memory/jobs-worker.ts +0 -58
- package/src/memory/llm-request-log-store.ts +1 -26
- package/src/memory/llm-usage-store.ts +20 -48
- package/src/memory/memory-retrospective-job.ts +8 -9
- package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +56 -130
- package/src/memory/migrations/__tests__/run-migrations.test.ts +2 -2
- package/src/memory/migrations/registry.ts +573 -0
- package/src/memory/migrations/run-migrations.ts +6 -90
- package/src/memory/migrations/validate-migration-state.ts +66 -101
- package/src/memory/schema/conversations.ts +0 -9
- package/src/memory/schema/infrastructure.ts +0 -20
- package/src/memory/v2/__tests__/cli-command-store.test.ts +0 -25
- package/src/memory/v2/__tests__/skill-store.test.ts +0 -80
- package/src/memory/v2/cli-command-store.ts +38 -75
- package/src/memory/v2/prompts/consolidation.ts +82 -13
- package/src/memory/v2/prompts/router.ts +93 -21
- package/src/memory/v2/skill-store.ts +31 -68
- package/src/notifications/__tests__/broadcaster.test.ts +8 -16
- package/src/notifications/__tests__/decision-engine.test.ts +9 -78
- package/src/notifications/broadcaster.ts +1 -8
- package/src/notifications/decision-engine.ts +7 -15
- package/src/notifications/destination-resolver.ts +24 -68
- package/src/notifications/emit-signal.ts +14 -39
- package/src/permissions/question-prompter.test.ts +1 -1
- package/src/permissions/question-prompter.ts +4 -7
- package/src/plugin-api/index.ts +6 -6
- package/src/plugin-api/types.ts +5 -3
- package/src/plugin-api/vision-support.test.ts +4 -28
- package/src/plugin-api/vision-support.ts +31 -66
- package/src/plugins/defaults/advisor/__tests__/consult.test.ts +0 -161
- package/src/plugins/defaults/advisor/consult.ts +6 -110
- package/src/plugins/defaults/advisor/steering.ts +2 -14
- package/src/plugins/defaults/advisor/tools/advisor.ts +5 -32
- package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +1 -2
- package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +7 -47
- package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +11 -10
- package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +20 -12
- package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +11 -42
- package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +3 -33
- package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +4 -48
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +8 -4
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +15 -43
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +2 -11
- package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +13 -77
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +11 -12
- package/src/plugins/mtime-cache.ts +291 -76
- package/src/plugins/pipeline.ts +13 -111
- package/src/plugins/types.ts +2 -0
- package/src/providers/anthropic/client.ts +0 -5
- package/src/providers/call-site-routing.ts +0 -4
- package/src/providers/model-catalog.ts +0 -16
- package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
- package/src/providers/openai/chat-completions-provider.ts +83 -37
- package/src/providers/openai/responses-provider.ts +46 -50
- package/src/providers/openrouter/client.ts +0 -5
- package/src/providers/provider-send-message.ts +0 -4
- package/src/providers/ratelimit.ts +0 -4
- package/src/providers/retry.ts +0 -4
- package/src/providers/types.ts +0 -9
- package/src/providers/usage-tracking.ts +0 -4
- package/src/runtime/__tests__/trust-verdict-consumer.test.ts +3 -335
- package/src/runtime/access-request-helper.ts +39 -19
- package/src/runtime/actor-trust-resolver.ts +2 -2
- package/src/runtime/assistant-event-hub.ts +1 -1
- package/src/runtime/assistant-stream-state.ts +2 -9
- package/src/runtime/auth/require-bound-guardian.ts +11 -21
- package/src/runtime/channel-verification-service.ts +31 -56
- package/src/runtime/confirmation-request-guardian-bridge.ts +3 -3
- package/src/runtime/guardian-vellum-migration.ts +7 -66
- package/src/runtime/invite-redemption-service.ts +187 -198
- package/src/runtime/local-actor-identity.ts +11 -76
- package/src/runtime/pending-interactions.ts +1 -11
- package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +5 -56
- package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +0 -187
- package/src/runtime/routes/browser-routes.ts +1 -1
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +5 -13
- package/src/runtime/routes/channel-verification-routes.ts +3 -3
- package/src/runtime/routes/contact-routes.ts +32 -8
- package/src/runtime/routes/conversation-cli-routes.ts +5 -4
- package/src/runtime/routes/conversation-list-routes.ts +7 -4
- package/src/runtime/routes/conversation-query-routes.ts +0 -72
- package/src/runtime/routes/conversation-routes.ts +85 -84
- package/src/runtime/routes/events-routes.ts +2 -2
- package/src/runtime/routes/global-search-routes.ts +1 -3
- package/src/runtime/routes/guardian-action-routes.ts +5 -4
- package/src/runtime/routes/host-app-control-routes.ts +4 -5
- package/src/runtime/routes/host-bash-routes.ts +4 -5
- package/src/runtime/routes/host-browser-routes.ts +11 -9
- package/src/runtime/routes/host-cu-routes.ts +4 -5
- package/src/runtime/routes/host-file-routes.ts +4 -5
- package/src/runtime/routes/host-transfer-routes.ts +6 -6
- package/src/runtime/routes/http-adapter.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +2 -3
- package/src/runtime/routes/inbound-message-handler.ts +5 -5
- package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +5 -97
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +49 -61
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +4 -16
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +7 -7
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +8 -21
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +3 -14
- package/src/runtime/routes/index.ts +0 -2
- package/src/runtime/routes/llm-context-normalization.ts +0 -83
- package/src/runtime/routes/mcp-auth-routes.ts +19 -171
- package/src/runtime/routes/migration-rollback-routes.ts +3 -4
- package/src/runtime/routes/migration-routes.ts +1 -4
- package/src/runtime/routes/subagents-routes.ts +0 -5
- package/src/runtime/routes/surface-action-routes.ts +56 -42
- package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -1
- package/src/runtime/services/conversation-serializer.ts +9 -7
- package/src/runtime/tool-grant-request-helper.ts +3 -3
- package/src/runtime/trust-verdict-consumer.ts +9 -85
- package/src/runtime/verification-outbound-actions.ts +18 -18
- package/src/signals/user-message.ts +0 -16
- package/src/subagent/manager.ts +0 -9
- package/src/subagent/types.ts +3 -3
- package/src/telemetry/types.ts +1 -34
- package/src/telemetry/usage-telemetry-reporter.test.ts +2 -3
- package/src/telemetry/usage-telemetry-reporter.ts +3 -87
- package/src/tools/ask-question/ask-question-tool.test.ts +0 -29
- package/src/tools/ask-question/ask-question-tool.ts +0 -13
- package/src/tools/executor.ts +4 -4
- package/src/tools/registry.ts +0 -18
- package/src/tools/shared/filesystem/path-policy.ts +5 -12
- package/src/tools/tool-approval-handler.ts +1 -1
- package/src/tools/tool-defaults.ts +2 -9
- package/src/tools/tool-manifest.ts +0 -3
- package/src/tools/types.ts +2 -17
- package/src/tools/workspace-tools/loader.ts +244 -348
- package/src/util/errors.ts +1 -26
- package/src/util/platform.ts +0 -5
- package/src/workflows/library.test.ts +0 -140
- package/src/workflows/library.ts +28 -82
- package/src/workspace/migrations/017-seed-persona-dirs.ts +34 -3
- package/src/workspace/migrations/019-scope-journal-to-guardian.ts +24 -3
- package/src/workspace/migrations/048-remove-workspace-hooks.ts +66 -14
- package/src/workspace/migrations/registry.ts +0 -2
- package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-delivery-contract.test.ts +0 -91
- package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +0 -48
- package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +0 -28
- package/node_modules/@vellumai/service-contracts/src/channels.ts +0 -41
- package/src/__tests__/code-search-tool.test.ts +0 -585
- package/src/__tests__/guardian-expiry-notifier.test.ts +0 -282
- package/src/__tests__/mcp-config-secret-boundary.test.ts +0 -390
- package/src/__tests__/plugin-pipeline.test.ts +0 -96
- package/src/__tests__/sse-actor-principal-guardian-source.test.ts +0 -102
- package/src/__tests__/steer-on-enqueue-question.test.ts +0 -181
- package/src/__tests__/workspace-migration-111-prune-seeded-callsite-defaults.test.ts +0 -208
- package/src/agent/loop-exclusive-tool.test.ts +0 -150
- package/src/api/constants/sse-replay.ts +0 -41
- package/src/api/events/conversation-notice.ts +0 -26
- package/src/approvals/guardian-channel-delivery.ts +0 -30
- package/src/approvals/guardian-expiry-notifier.ts +0 -148
- package/src/cli/commands/memory/__tests__/worker.test.ts +0 -302
- package/src/cli/commands/memory/worker.ts +0 -175
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +0 -143
- package/src/config/prune-seeded-callsite-defaults.ts +0 -110
- package/src/contacts/__tests__/contacts-write-revoke-relay.test.ts +0 -129
- package/src/contacts/__tests__/guardian-delivery-reader.test.ts +0 -312
- package/src/contacts/__tests__/member-write-relay.test.ts +0 -202
- package/src/contacts/guardian-delivery-reader.ts +0 -223
- package/src/contacts/member-write-relay.ts +0 -189
- package/src/daemon/conversation-notices.ts +0 -60
- package/src/daemon/handlers/__tests__/config-channels.test.ts +0 -225
- package/src/hooks/hook-loader.ts +0 -341
- package/src/mcp/mcp-header-store.ts +0 -134
- package/src/memory/__tests__/301-create-watchdog-events.test.ts +0 -110
- package/src/memory/__tests__/prompt-override.test.ts +0 -192
- package/src/memory/__tests__/watchdog-events-store.test.ts +0 -161
- package/src/memory/migrations/300-add-processing-started-at.ts +0 -30
- package/src/memory/migrations/301-create-watchdog-events.ts +0 -45
- package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +0 -224
- package/src/memory/prompt-override.ts +0 -129
- package/src/memory/steps.ts +0 -573
- package/src/memory/watchdog-events-store.ts +0 -87
- package/src/memory/worker-control.ts +0 -118
- package/src/memory/worker-process.ts +0 -72
- package/src/notifications/__tests__/connected-channels.test.ts +0 -114
- package/src/notifications/__tests__/destination-resolver.test.ts +0 -256
- package/src/onboarding/checkin-event.test.ts +0 -222
- package/src/onboarding/checkin-event.ts +0 -321
- package/src/onboarding/schedule-checkin.ts +0 -190
- package/src/plugins/defaults/advisor/__tests__/context-pack-gating.test.ts +0 -106
- package/src/plugins/defaults/advisor/__tests__/context-pack.test.ts +0 -60
- package/src/plugins/defaults/advisor/context-pack.ts +0 -288
- package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +0 -146
- package/src/plugins/surface-import.ts +0 -121
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +0 -321
- package/src/providers/openai/api-error-normalization.ts +0 -270
- package/src/runtime/__tests__/channel-verification-service.test.ts +0 -133
- package/src/runtime/__tests__/guardian-vellum-migration.test.ts +0 -181
- package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +0 -66
- package/src/runtime/__tests__/local-principal-trust.test.ts +0 -164
- package/src/runtime/anchored-guardian.test.ts +0 -156
- package/src/runtime/anchored-guardian.ts +0 -135
- package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +0 -99
- package/src/runtime/local-principal-trust.ts +0 -52
- package/src/runtime/routes/__tests__/contact-routes.test.ts +0 -212
- package/src/runtime/routes/__tests__/global-search-routes.test.ts +0 -93
- package/src/runtime/routes/onboarding-checkin-routes.ts +0 -86
- package/src/tools/filesystem/search.ts +0 -543
- package/src/util/telemetry-db-path.ts +0 -24
- package/src/workspace/migrations/111-prune-seeded-callsite-defaults.ts +0 -134
|
@@ -17,9 +17,6 @@ import { log } from "../logger.js";
|
|
|
17
17
|
/** Warn (stderr) when a raw payload exceeds this byte count. */
|
|
18
18
|
const MAX_PAYLOAD_BYTES = 1_000_000; // 1 MB
|
|
19
19
|
|
|
20
|
-
/** Standard input file descriptor. */
|
|
21
|
-
const STDIN_FD = 0;
|
|
22
|
-
|
|
23
20
|
// ── TTL parsing ───────────────────────────────────────────────────────
|
|
24
21
|
|
|
25
22
|
const TTL_PATTERN = /^(\d+(?:\.\d+)?)\s*(ms|s|m|h)$/;
|
|
@@ -102,11 +99,6 @@ function parseJsonPayload(raw: string, source: string): unknown {
|
|
|
102
99
|
* Read JSON payload from stdin when piped. Throws when stdin is a TTY
|
|
103
100
|
* (no piped input) or when the input is empty/invalid JSON, so the CLI
|
|
104
101
|
* can surface actionable parse errors.
|
|
105
|
-
*
|
|
106
|
-
* Reads file descriptor 0 directly rather than reopening the `/dev/stdin`
|
|
107
|
-
* path. When the caller is a spawned subprocess whose stdin is a pipe (e.g.
|
|
108
|
-
* `Bun.spawn(..., { stdin: "pipe" })`), `open("/dev/stdin")` fails with ENXIO
|
|
109
|
-
* because a pipe read-end cannot be reopened by path; the fd is readable.
|
|
110
102
|
*/
|
|
111
103
|
function readPayloadFromStdin(): unknown {
|
|
112
104
|
if (process.stdin.isTTY) {
|
|
@@ -119,7 +111,7 @@ function readPayloadFromStdin(): unknown {
|
|
|
119
111
|
|
|
120
112
|
let raw: string;
|
|
121
113
|
try {
|
|
122
|
-
raw = readFileSync(
|
|
114
|
+
raw = readFileSync("/dev/stdin", "utf-8");
|
|
123
115
|
} catch (err) {
|
|
124
116
|
throw new Error(
|
|
125
117
|
`Failed to read stdin: ${err instanceof Error ? err.message : String(err)}.\n` +
|
|
@@ -181,9 +173,10 @@ export function registerCacheCommand(program: Command): void {
|
|
|
181
173
|
transport: "ipc",
|
|
182
174
|
description: "Interact with the assistant's in-memory key/value cache",
|
|
183
175
|
build: (cache) => {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
176
|
+
|
|
177
|
+
cache.addHelpText(
|
|
178
|
+
"after",
|
|
179
|
+
`
|
|
187
180
|
The cache is a TTL-aware, LRU-evicting in-memory store managed by the
|
|
188
181
|
running assistant. Data is scoped to the assistant process lifetime and
|
|
189
182
|
is not persisted across restarts.
|
|
@@ -197,33 +190,33 @@ Examples:
|
|
|
197
190
|
$ echo '{"result": [1,2,3]}' | assistant cache set --ttl 5m
|
|
198
191
|
$ assistant cache get my-key
|
|
199
192
|
$ assistant cache delete my-key`,
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
// ── set ───────────────────────────────────────────────────────────
|
|
196
|
+
|
|
197
|
+
cache
|
|
198
|
+
.command("set")
|
|
199
|
+
.description("Store a JSON value in the cache")
|
|
200
|
+
.option(
|
|
201
|
+
"--key <key>",
|
|
202
|
+
"Cache key for idempotent upsert. Omit to auto-generate.",
|
|
203
|
+
)
|
|
204
|
+
.option(
|
|
205
|
+
"--ttl <duration>",
|
|
206
|
+
"Time-to-live (minimum 1s). Units: ms, s, m, h (e.g. 1000ms, 30s, 5m, 2h). Defaults to 30m if omitted.",
|
|
207
|
+
)
|
|
208
|
+
.option(
|
|
209
|
+
"--value <json>",
|
|
210
|
+
"JSON payload to store. Alternative to piping via stdin.",
|
|
211
|
+
)
|
|
212
|
+
.option(
|
|
213
|
+
"--file <path>",
|
|
214
|
+
"Path to a file containing the JSON payload. Alternative to piping via stdin.",
|
|
215
|
+
)
|
|
216
|
+
.option("--json", "Output result as machine-readable JSON.")
|
|
217
|
+
.addHelpText(
|
|
218
|
+
"after",
|
|
219
|
+
`
|
|
227
220
|
Stores a JSON payload in the cache and prints the assigned key. The payload
|
|
228
221
|
can be provided via --value, --file, or piped through stdin. If --key is
|
|
229
222
|
provided, the entry is upserted (created or replaced). If omitted, a new
|
|
@@ -247,86 +240,86 @@ Examples:
|
|
|
247
240
|
$ assistant cache set --file /tmp/payload.json --key scores --ttl 10m
|
|
248
241
|
$ echo '{"scores":[98,85,72]}' | assistant cache set
|
|
249
242
|
$ echo '"simple string"' | assistant cache set --ttl 1h --json`,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
if (opts.json) {
|
|
312
|
-
process.stdout.write(
|
|
313
|
-
JSON.stringify({ ok: true, key: result.result!.key }) + "\n",
|
|
314
|
-
);
|
|
315
|
-
} else {
|
|
316
|
-
log.info(`Cached with key: ${result.result!.key}`);
|
|
317
|
-
}
|
|
318
|
-
},
|
|
319
|
-
);
|
|
243
|
+
)
|
|
244
|
+
.action(
|
|
245
|
+
async (opts: {
|
|
246
|
+
key?: string;
|
|
247
|
+
ttl?: string;
|
|
248
|
+
value?: string;
|
|
249
|
+
file?: string;
|
|
250
|
+
json?: boolean;
|
|
251
|
+
}) => {
|
|
252
|
+
let data: unknown;
|
|
253
|
+
try {
|
|
254
|
+
data = resolvePayload(opts);
|
|
255
|
+
} catch (err) {
|
|
256
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
257
|
+
if (opts.json) {
|
|
258
|
+
process.stdout.write(
|
|
259
|
+
JSON.stringify({ ok: false, error: msg }) + "\n",
|
|
260
|
+
);
|
|
261
|
+
} else {
|
|
262
|
+
log.error(msg);
|
|
263
|
+
}
|
|
264
|
+
process.exitCode = 1;
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
let ttl_ms: number | undefined;
|
|
269
|
+
try {
|
|
270
|
+
ttl_ms = parseTtl(opts.ttl);
|
|
271
|
+
} catch (err) {
|
|
272
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
273
|
+
if (opts.json) {
|
|
274
|
+
process.stdout.write(
|
|
275
|
+
JSON.stringify({ ok: false, error: msg }) + "\n",
|
|
276
|
+
);
|
|
277
|
+
} else {
|
|
278
|
+
log.error(msg);
|
|
279
|
+
}
|
|
280
|
+
process.exitCode = 1;
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const params: Record<string, unknown> = { data };
|
|
285
|
+
if (ttl_ms !== undefined) params.ttl_ms = ttl_ms;
|
|
286
|
+
if (opts.key) params.key = opts.key;
|
|
287
|
+
|
|
288
|
+
const result = await cliIpcCall<{ key: string }>("cache_set", {
|
|
289
|
+
body: params,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
if (!result.ok) {
|
|
293
|
+
if (opts.json) {
|
|
294
|
+
process.stdout.write(
|
|
295
|
+
JSON.stringify({ ok: false, error: result.error }) + "\n",
|
|
296
|
+
);
|
|
297
|
+
} else {
|
|
298
|
+
log.error(`Error: ${result.error}`);
|
|
299
|
+
}
|
|
300
|
+
process.exitCode = 1;
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
320
303
|
|
|
321
|
-
|
|
304
|
+
if (opts.json) {
|
|
305
|
+
process.stdout.write(
|
|
306
|
+
JSON.stringify({ ok: true, key: result.result!.key }) + "\n",
|
|
307
|
+
);
|
|
308
|
+
} else {
|
|
309
|
+
log.info(`Cached with key: ${result.result!.key}`);
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
// ── get ───────────────────────────────────────────────────────────
|
|
322
315
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
316
|
+
cache
|
|
317
|
+
.command("get <key>")
|
|
318
|
+
.description("Retrieve a cached value by key")
|
|
319
|
+
.option("--json", "Output result as machine-readable JSON.")
|
|
320
|
+
.addHelpText(
|
|
321
|
+
"after",
|
|
322
|
+
`
|
|
330
323
|
Arguments:
|
|
331
324
|
key The cache key to look up. Run 'assistant cache set' to store a
|
|
332
325
|
value and receive its key.
|
|
@@ -338,52 +331,49 @@ exist or has expired, reports not-found. In --json mode, a miss returns
|
|
|
338
331
|
Examples:
|
|
339
332
|
$ assistant cache get my-key
|
|
340
333
|
$ assistant cache get my-key --json`,
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
334
|
+
)
|
|
335
|
+
.action(async (key: string, opts: { json?: boolean }) => {
|
|
336
|
+
const result = await cliIpcCall<{ data: unknown } | null>("cache_get", {
|
|
337
|
+
body: { key },
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
if (!result.ok) {
|
|
341
|
+
if (opts.json) {
|
|
342
|
+
process.stdout.write(
|
|
343
|
+
JSON.stringify({ ok: false, error: result.error }) + "\n",
|
|
348
344
|
);
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
.command("delete <key>")
|
|
382
|
-
.description("Remove a cached entry by key")
|
|
383
|
-
.option("--json", "Output result as machine-readable JSON.")
|
|
384
|
-
.addHelpText(
|
|
385
|
-
"after",
|
|
386
|
-
`
|
|
345
|
+
} else {
|
|
346
|
+
log.error(`Error: ${result.error}`);
|
|
347
|
+
}
|
|
348
|
+
process.exitCode = 1;
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (opts.json) {
|
|
353
|
+
process.stdout.write(
|
|
354
|
+
JSON.stringify({
|
|
355
|
+
ok: true,
|
|
356
|
+
data: result.result ? result.result.data : null,
|
|
357
|
+
}) + "\n",
|
|
358
|
+
);
|
|
359
|
+
} else {
|
|
360
|
+
if (result.result == null) {
|
|
361
|
+
log.info(`No cache entry found for key "${key}".`);
|
|
362
|
+
} else {
|
|
363
|
+
log.info(JSON.stringify(result.result.data, null, 2));
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
// ── delete ────────────────────────────────────────────────────────
|
|
369
|
+
|
|
370
|
+
cache
|
|
371
|
+
.command("delete <key>")
|
|
372
|
+
.description("Remove a cached entry by key")
|
|
373
|
+
.option("--json", "Output result as machine-readable JSON.")
|
|
374
|
+
.addHelpText(
|
|
375
|
+
"after",
|
|
376
|
+
`
|
|
387
377
|
Arguments:
|
|
388
378
|
key The cache key to remove. Run 'assistant cache get <key>' to
|
|
389
379
|
verify a key exists before deleting.
|
|
@@ -394,39 +384,36 @@ existed or not, but reports whether an entry was actually removed.
|
|
|
394
384
|
Examples:
|
|
395
385
|
$ assistant cache delete my-key
|
|
396
386
|
$ assistant cache delete my-key --json`,
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
387
|
+
)
|
|
388
|
+
.action(async (key: string, opts: { json?: boolean }) => {
|
|
389
|
+
const result = await cliIpcCall<{ deleted: boolean }>("cache_delete", {
|
|
390
|
+
body: { key },
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
if (!result.ok) {
|
|
394
|
+
if (opts.json) {
|
|
395
|
+
process.stdout.write(
|
|
396
|
+
JSON.stringify({ ok: false, error: result.error }) + "\n",
|
|
404
397
|
);
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
log.info(`Deleted cache entry "${key}".`);
|
|
425
|
-
} else {
|
|
426
|
-
log.info(`No cache entry "${key}" (nothing to delete).`);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
});
|
|
398
|
+
} else {
|
|
399
|
+
log.error(`Error: ${result.error}`);
|
|
400
|
+
}
|
|
401
|
+
process.exitCode = 1;
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
const deleted = result.result!.deleted;
|
|
406
|
+
|
|
407
|
+
if (opts.json) {
|
|
408
|
+
process.stdout.write(JSON.stringify({ ok: true, deleted }) + "\n");
|
|
409
|
+
} else {
|
|
410
|
+
if (deleted) {
|
|
411
|
+
log.info(`Deleted cache entry "${key}".`);
|
|
412
|
+
} else {
|
|
413
|
+
log.info(`No cache entry "${key}" (nothing to delete).`);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
});
|
|
430
417
|
},
|
|
431
418
|
});
|
|
432
419
|
}
|
|
@@ -456,9 +456,6 @@ async function initSchema(): Promise<void> {
|
|
|
456
456
|
clearStoredDb("memory");
|
|
457
457
|
}
|
|
458
458
|
|
|
459
|
-
// Every test here runs initSchema(), which replays the full production
|
|
460
|
-
// migration suite, plus at least one repair pass. On a loaded machine that
|
|
461
|
-
// comfortably exceeds bun's 5s per-test default, so each gets a 30s ceiling.
|
|
462
459
|
describe("assistant db repair — conversation-backfill step", () => {
|
|
463
460
|
test("backfills a disk-only conversation into SQLite", async () => {
|
|
464
461
|
await initSchema();
|
|
@@ -502,7 +499,7 @@ describe("assistant db repair — conversation-backfill step", () => {
|
|
|
502
499
|
} finally {
|
|
503
500
|
verify.close();
|
|
504
501
|
}
|
|
505
|
-
}
|
|
502
|
+
});
|
|
506
503
|
|
|
507
504
|
test("skips conversations already present (idempotent)", async () => {
|
|
508
505
|
await initSchema();
|
|
@@ -519,6 +516,8 @@ describe("assistant db repair — conversation-backfill step", () => {
|
|
|
519
516
|
expect(parsed.steps[1].result.data.recovered).toBe(0);
|
|
520
517
|
expect(parsed.steps[1].result.data.skipped).toBe(1);
|
|
521
518
|
expect(parsed.steps[1].result.status).toBe("ok");
|
|
519
|
+
// Two full repair passes (each walks the DB via integrity-check) exceed
|
|
520
|
+
// bun's 5s per-test default, so raise the ceiling to keep CI stable.
|
|
522
521
|
}, 30_000);
|
|
523
522
|
|
|
524
523
|
test("reports nothing-to-backfill on an empty conversations dir", async () => {
|
|
@@ -530,7 +529,7 @@ describe("assistant db repair — conversation-backfill step", () => {
|
|
|
530
529
|
expect(parsed.steps[1].result.status).toBe("ok");
|
|
531
530
|
expect(parsed.steps[1].result.summary).toContain("nothing to backfill");
|
|
532
531
|
expect(parsed.steps[1].result.data.recovered).toBe(0);
|
|
533
|
-
}
|
|
532
|
+
});
|
|
534
533
|
|
|
535
534
|
test("surfaces warnings for malformed meta.json without erroring the step", async () => {
|
|
536
535
|
await initSchema();
|
|
@@ -548,5 +547,5 @@ describe("assistant db repair — conversation-backfill step", () => {
|
|
|
548
547
|
w.includes("malformed meta.json"),
|
|
549
548
|
),
|
|
550
549
|
).toBe(true);
|
|
551
|
-
}
|
|
550
|
+
});
|
|
552
551
|
});
|
|
@@ -31,7 +31,6 @@ import type { Command } from "commander";
|
|
|
31
31
|
import { getLogsDbPath } from "../../../util/logs-db-path.js";
|
|
32
32
|
import { getMemoryDbPath } from "../../../util/memory-db-path.js";
|
|
33
33
|
import { getDbPath } from "../../../util/platform.js";
|
|
34
|
-
import { getTelemetryDbPath } from "../../../util/telemetry-db-path.js";
|
|
35
34
|
import { red } from "../../lib/cli-colors.js";
|
|
36
35
|
import { shouldOutputJson, writeOutput } from "../../output.js";
|
|
37
36
|
import {
|
|
@@ -100,15 +99,6 @@ interface StatusReport {
|
|
|
100
99
|
*/
|
|
101
100
|
memoryFile?: FileFacts;
|
|
102
101
|
memoryDb?: DbFacts | null;
|
|
103
|
-
/**
|
|
104
|
-
* The dedicated telemetry database (`assistant-telemetry.db`). Like
|
|
105
|
-
* `logsFile` and `memoryFile`, it is omitted from the report until the file
|
|
106
|
-
* exists on disk — it is created the first time the daemon opens its
|
|
107
|
-
* connection, so a fresh install that has never run the daemon won't have
|
|
108
|
-
* one.
|
|
109
|
-
*/
|
|
110
|
-
telemetryFile?: FileFacts;
|
|
111
|
-
telemetryDb?: DbFacts | null;
|
|
112
102
|
}
|
|
113
103
|
|
|
114
104
|
interface MigrationSummary {
|
|
@@ -337,13 +327,6 @@ function renderHuman(report: StatusReport): string {
|
|
|
337
327
|
out += renderDbBlock(report.memoryFile, report.memoryDb ?? null);
|
|
338
328
|
}
|
|
339
329
|
|
|
340
|
-
// The secondary telemetry file is likewise only reported once it exists.
|
|
341
|
-
if (report.telemetryFile?.exists) {
|
|
342
|
-
out += "\n";
|
|
343
|
-
out += "Telemetry database (telemetry event tables)\n";
|
|
344
|
-
out += renderDbBlock(report.telemetryFile, report.telemetryDb ?? null);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
330
|
// Cross-database migration summary — the checkpoint ledger lives only in
|
|
348
331
|
// the main DB, so this is a single block at the end covering all three.
|
|
349
332
|
out += renderSummary(report.migration);
|
|
@@ -426,13 +409,7 @@ function readMigrationSummary(mainDbPath: string): MigrationSummary | null {
|
|
|
426
409
|
// No table yet.
|
|
427
410
|
}
|
|
428
411
|
|
|
429
|
-
return {
|
|
430
|
-
latestKey,
|
|
431
|
-
latestUpdatedAtMs,
|
|
432
|
-
appliedSteps,
|
|
433
|
-
appliedRegistry,
|
|
434
|
-
crashed,
|
|
435
|
-
};
|
|
412
|
+
return { latestKey, latestUpdatedAtMs, appliedSteps, appliedRegistry, crashed };
|
|
436
413
|
} finally {
|
|
437
414
|
db.close();
|
|
438
415
|
}
|
|
@@ -542,17 +519,6 @@ export function registerDbStatus(parent: Command): void {
|
|
|
542
519
|
}
|
|
543
520
|
}
|
|
544
521
|
|
|
545
|
-
// Same best-effort probe for the dedicated telemetry DB.
|
|
546
|
-
const telemetryFile = readFileFacts(getTelemetryDbPath());
|
|
547
|
-
let telemetryDb: DbFacts | null = null;
|
|
548
|
-
if (telemetryFile.exists) {
|
|
549
|
-
try {
|
|
550
|
-
telemetryDb = readDbFacts(telemetryFile.path);
|
|
551
|
-
} catch {
|
|
552
|
-
telemetryDb = null;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
|
|
556
522
|
// Cross-database migration summary from the main DB's checkpoint ledger.
|
|
557
523
|
let migration: MigrationSummary | null = null;
|
|
558
524
|
try {
|
|
@@ -569,8 +535,6 @@ export function registerDbStatus(parent: Command): void {
|
|
|
569
535
|
logsDb,
|
|
570
536
|
memoryFile,
|
|
571
537
|
memoryDb,
|
|
572
|
-
telemetryFile,
|
|
573
|
-
telemetryDb,
|
|
574
538
|
};
|
|
575
539
|
if (shouldOutputJson(this)) {
|
|
576
540
|
writeOutput(this, report);
|