vellum 0.2.13 → 0.3.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/bin/vellum.js +2 -0
- package/package.json +6 -65
- package/.dockerignore +0 -27
- package/.env.example +0 -22
- package/Dockerfile +0 -99
- package/Dockerfile.sandbox +0 -5
- package/README.md +0 -169
- package/bun.lock +0 -1743
- package/bunfig.toml +0 -2
- package/docs/skills.md +0 -158
- package/drizzle/0000_dizzy_maggott.sql +0 -301
- package/drizzle/meta/0000_snapshot.json +0 -1999
- package/drizzle/meta/_journal.json +0 -13
- package/drizzle.config.ts +0 -7
- package/eslint.config.mjs +0 -17
- package/hook-templates/debug-prompt-logger/hook.json +0 -7
- package/hook-templates/debug-prompt-logger/run.sh +0 -68
- package/knip.json +0 -9
- package/scripts/capture-x-graphql.ts +0 -545
- package/scripts/ipc/check-contract-inventory.ts +0 -104
- package/scripts/ipc/check-swift-decoder-drift.ts +0 -164
- package/scripts/ipc/generate-swift.ts +0 -492
- package/scripts/test-filesystem-tools.sh +0 -48
- package/scripts/test.sh +0 -127
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -2316
- package/src/__tests__/account-registry.test.ts +0 -245
- package/src/__tests__/active-skill-tools.test.ts +0 -378
- package/src/__tests__/agent-heartbeat-service.test.ts +0 -250
- package/src/__tests__/agent-loop-thinking.test.ts +0 -81
- package/src/__tests__/agent-loop.test.ts +0 -1135
- package/src/__tests__/anthropic-provider.test.ts +0 -778
- package/src/__tests__/app-builder-tool-scripts.test.ts +0 -290
- package/src/__tests__/app-bundler.test.ts +0 -292
- package/src/__tests__/app-executors.test.ts +0 -613
- package/src/__tests__/app-open-proxy.test.ts +0 -62
- package/src/__tests__/asset-materialize-tool.test.ts +0 -452
- package/src/__tests__/asset-search-tool.test.ts +0 -477
- package/src/__tests__/assistant-attachment-directive.test.ts +0 -401
- package/src/__tests__/assistant-attachments.test.ts +0 -437
- package/src/__tests__/assistant-event-hub.test.ts +0 -226
- package/src/__tests__/assistant-event.test.ts +0 -123
- package/src/__tests__/attachments-store.test.ts +0 -476
- package/src/__tests__/attachments.test.ts +0 -134
- package/src/__tests__/audit-log-rotation.test.ts +0 -154
- package/src/__tests__/browser-fill-credential.test.ts +0 -309
- package/src/__tests__/browser-manager.test.ts +0 -203
- package/src/__tests__/browser-runtime-check.test.ts +0 -55
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +0 -68
- package/src/__tests__/browser-skill-endstate.test.ts +0 -195
- package/src/__tests__/bundle-scanner.test.ts +0 -313
- package/src/__tests__/call-bridge.test.ts +0 -425
- package/src/__tests__/call-constants.test.ts +0 -40
- package/src/__tests__/call-orchestrator.test.ts +0 -512
- package/src/__tests__/call-recovery.test.ts +0 -518
- package/src/__tests__/call-routes-http.test.ts +0 -459
- package/src/__tests__/call-state-machine.test.ts +0 -143
- package/src/__tests__/call-state.test.ts +0 -174
- package/src/__tests__/call-store.test.ts +0 -691
- package/src/__tests__/checker.test.ts +0 -3960
- package/src/__tests__/clarification-resolver.test.ts +0 -159
- package/src/__tests__/classifier.test.ts +0 -67
- package/src/__tests__/claude-code-skill-regression.test.ts +0 -127
- package/src/__tests__/claude-code-tool-profiles.test.ts +0 -88
- package/src/__tests__/cli-discover.test.ts +0 -85
- package/src/__tests__/cli.test.ts +0 -81
- package/src/__tests__/clipboard.test.ts +0 -80
- package/src/__tests__/commit-guarantee.test.ts +0 -335
- package/src/__tests__/commit-message-enrichment-service.test.ts +0 -550
- package/src/__tests__/compaction.benchmark.test.ts +0 -176
- package/src/__tests__/computer-use-session-compaction.test.ts +0 -132
- package/src/__tests__/computer-use-session-lifecycle.test.ts +0 -293
- package/src/__tests__/computer-use-session-working-dir.test.ts +0 -117
- package/src/__tests__/computer-use-skill-baseline.test.ts +0 -74
- package/src/__tests__/computer-use-skill-endstate.test.ts +0 -89
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +0 -217
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +0 -107
- package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +0 -54
- package/src/__tests__/computer-use-tools.test.ts +0 -250
- package/src/__tests__/config-schema.test.ts +0 -1343
- package/src/__tests__/conflict-store.test.ts +0 -330
- package/src/__tests__/connection-policy.test.ts +0 -102
- package/src/__tests__/contacts-tools.test.ts +0 -331
- package/src/__tests__/context-memory-e2e.test.ts +0 -434
- package/src/__tests__/context-token-estimator.test.ts +0 -135
- package/src/__tests__/context-window-manager.test.ts +0 -376
- package/src/__tests__/contradiction-checker.test.ts +0 -216
- package/src/__tests__/conversation-store.test.ts +0 -612
- package/src/__tests__/credential-broker-browser-fill.test.ts +0 -517
- package/src/__tests__/credential-broker-server-use.test.ts +0 -554
- package/src/__tests__/credential-broker.test.ts +0 -167
- package/src/__tests__/credential-host-pattern-match.test.ts +0 -104
- package/src/__tests__/credential-metadata-store.test.ts +0 -779
- package/src/__tests__/credential-policy-validate.test.ts +0 -121
- package/src/__tests__/credential-resolve.test.ts +0 -328
- package/src/__tests__/credential-security-e2e.test.ts +0 -352
- package/src/__tests__/credential-security-invariants.test.ts +0 -567
- package/src/__tests__/credential-selection.test.ts +0 -354
- package/src/__tests__/credential-vault.test.ts +0 -852
- package/src/__tests__/daemon-assistant-events.test.ts +0 -164
- package/src/__tests__/daemon-server-session-init.test.ts +0 -522
- package/src/__tests__/date-context.test.ts +0 -373
- package/src/__tests__/db-schedule-syntax-migration.test.ts +0 -129
- package/src/__tests__/delete-managed-skill-tool.test.ts +0 -97
- package/src/__tests__/diff.test.ts +0 -121
- package/src/__tests__/domain-normalize.test.ts +0 -112
- package/src/__tests__/domain-policy.test.ts +0 -124
- package/src/__tests__/doordash-client.test.ts +0 -186
- package/src/__tests__/doordash-session.test.ts +0 -152
- package/src/__tests__/dynamic-page-surface.test.ts +0 -91
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -132
- package/src/__tests__/edit-engine.test.ts +0 -180
- package/src/__tests__/elevenlabs-client.test.ts +0 -209
- package/src/__tests__/email-cli.test.ts +0 -283
- package/src/__tests__/encrypted-store.test.ts +0 -332
- package/src/__tests__/entity-extractor.test.ts +0 -190
- package/src/__tests__/ephemeral-permissions.test.ts +0 -312
- package/src/__tests__/evaluate-typescript-tool.test.ts +0 -286
- package/src/__tests__/event-bus.test.ts +0 -222
- package/src/__tests__/file-edit-tool.test.ts +0 -122
- package/src/__tests__/file-ops-service.test.ts +0 -330
- package/src/__tests__/file-read-tool.test.ts +0 -75
- package/src/__tests__/file-write-tool.test.ts +0 -113
- package/src/__tests__/fixtures/credential-security-fixtures.ts +0 -181
- package/src/__tests__/fixtures/media-reuse-fixtures.ts +0 -126
- package/src/__tests__/fixtures/mock-signup-server.ts +0 -387
- package/src/__tests__/fixtures/proxy-fixtures.ts +0 -147
- package/src/__tests__/followup-tools.test.ts +0 -303
- package/src/__tests__/forbidden-legacy-symbols.test.ts +0 -71
- package/src/__tests__/fuzzy-match-property.test.ts +0 -216
- package/src/__tests__/fuzzy-match.test.ts +0 -138
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -436
- package/src/__tests__/gemini-image-service.test.ts +0 -261
- package/src/__tests__/gemini-provider.test.ts +0 -651
- package/src/__tests__/get-weather.test.ts +0 -318
- package/src/__tests__/gmail-integration.test.ts +0 -73
- package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -351
- package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -190
- package/src/__tests__/handlers-slack-config.test.ts +0 -199
- package/src/__tests__/handlers-task-submit-slash.test.ts +0 -38
- package/src/__tests__/handlers-twitter-config.test.ts +0 -718
- package/src/__tests__/headless-browser-interactions.test.ts +0 -536
- package/src/__tests__/headless-browser-navigate.test.ts +0 -211
- package/src/__tests__/headless-browser-read-tools.test.ts +0 -261
- package/src/__tests__/headless-browser-snapshot.test.ts +0 -185
- package/src/__tests__/history-repair-observability.test.ts +0 -56
- package/src/__tests__/history-repair.test.ts +0 -510
- package/src/__tests__/home-base-bootstrap.test.ts +0 -82
- package/src/__tests__/hooks-blocking.test.ts +0 -128
- package/src/__tests__/hooks-cli.test.ts +0 -144
- package/src/__tests__/hooks-config.test.ts +0 -93
- package/src/__tests__/hooks-discovery.test.ts +0 -199
- package/src/__tests__/hooks-integration.test.ts +0 -189
- package/src/__tests__/hooks-manager.test.ts +0 -187
- package/src/__tests__/hooks-runner.test.ts +0 -178
- package/src/__tests__/hooks-settings.test.ts +0 -154
- package/src/__tests__/hooks-templates.test.ts +0 -137
- package/src/__tests__/hooks-ts-runner.test.ts +0 -125
- package/src/__tests__/hooks-watch.test.ts +0 -100
- package/src/__tests__/host-file-edit-tool.test.ts +0 -104
- package/src/__tests__/host-file-read-tool.test.ts +0 -61
- package/src/__tests__/host-file-write-tool.test.ts +0 -77
- package/src/__tests__/host-shell-tool.test.ts +0 -311
- package/src/__tests__/ingress-url-consistency.test.ts +0 -214
- package/src/__tests__/intent-routing.test.ts +0 -259
- package/src/__tests__/ipc-blob-store.test.ts +0 -315
- package/src/__tests__/ipc-contract-inventory.test.ts +0 -54
- package/src/__tests__/ipc-contract.test.ts +0 -74
- package/src/__tests__/ipc-protocol.test.ts +0 -113
- package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -237
- package/src/__tests__/ipc-snapshot.test.ts +0 -1698
- package/src/__tests__/ipc-validate.test.ts +0 -357
- package/src/__tests__/key-migration.test.ts +0 -183
- package/src/__tests__/keychain.test.ts +0 -258
- package/src/__tests__/llm-usage-store.test.ts +0 -221
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -257
- package/src/__tests__/managed-store.test.ts +0 -608
- package/src/__tests__/media-generate-image.test.ts +0 -238
- package/src/__tests__/media-reuse-story.e2e.test.ts +0 -676
- package/src/__tests__/media-visibility-policy.test.ts +0 -141
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +0 -235
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -481
- package/src/__tests__/memory-query-builder.test.ts +0 -59
- package/src/__tests__/memory-recall-quality.test.ts +0 -846
- package/src/__tests__/memory-regressions.experimental.test.ts +0 -538
- package/src/__tests__/memory-regressions.test.ts +0 -4336
- package/src/__tests__/memory-retrieval-budget.test.ts +0 -49
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -430
- package/src/__tests__/migration-cli-flows.test.ts +0 -169
- package/src/__tests__/migration-ordering.test.ts +0 -249
- package/src/__tests__/mock-signup-server.test.ts +0 -528
- package/src/__tests__/oauth-callback-registry.test.ts +0 -85
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -285
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -176
- package/src/__tests__/onboarding-template-contract.test.ts +0 -58
- package/src/__tests__/openai-provider.test.ts +0 -753
- package/src/__tests__/parallel-tool.benchmark.test.ts +0 -294
- package/src/__tests__/parser.test.ts +0 -472
- package/src/__tests__/path-classifier.test.ts +0 -73
- package/src/__tests__/path-policy.test.ts +0 -435
- package/src/__tests__/platform-move-helper.test.ts +0 -99
- package/src/__tests__/platform-socket-path.test.ts +0 -52
- package/src/__tests__/platform-workspace-migration.test.ts +0 -1000
- package/src/__tests__/platform.test.ts +0 -131
- package/src/__tests__/playbook-tools.test.ts +0 -342
- package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -75
- package/src/__tests__/pricing.test.ts +0 -256
- package/src/__tests__/profile-compiler.test.ts +0 -374
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -342
- package/src/__tests__/provider-registry-ollama.test.ts +0 -16
- package/src/__tests__/provider-streaming.benchmark.test.ts +0 -773
- package/src/__tests__/proxy-approval-callback.test.ts +0 -601
- package/src/__tests__/public-ingress-urls.test.ts +0 -222
- package/src/__tests__/ratelimit.test.ts +0 -297
- package/src/__tests__/recurrence-engine-rruleset.test.ts +0 -78
- package/src/__tests__/recurrence-engine.test.ts +0 -69
- package/src/__tests__/recurrence-types.test.ts +0 -71
- package/src/__tests__/registry.test.ts +0 -494
- package/src/__tests__/relay-server.test.ts +0 -688
- package/src/__tests__/reminder-store.test.ts +0 -223
- package/src/__tests__/reminder.test.ts +0 -229
- package/src/__tests__/request-file-tool.test.ts +0 -158
- package/src/__tests__/run-orchestrator-assistant-events.test.ts +0 -222
- package/src/__tests__/run-orchestrator.test.ts +0 -200
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -189
- package/src/__tests__/runtime-events-sse-parity.test.ts +0 -343
- package/src/__tests__/runtime-events-sse.test.ts +0 -162
- package/src/__tests__/runtime-runs-http.test.ts +0 -433
- package/src/__tests__/runtime-runs.test.ts +0 -273
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -408
- package/src/__tests__/sandbox-host-parity.test.ts +0 -950
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -253
- package/src/__tests__/schedule-store.test.ts +0 -482
- package/src/__tests__/schedule-tools.test.ts +0 -700
- package/src/__tests__/scheduler-recurrence.test.ts +0 -329
- package/src/__tests__/script-proxy-certs.test.ts +0 -90
- package/src/__tests__/script-proxy-connect-tunnel.test.ts +0 -177
- package/src/__tests__/script-proxy-decision-trace.test.ts +0 -156
- package/src/__tests__/script-proxy-http-forwarder.test.ts +0 -281
- package/src/__tests__/script-proxy-injection-runtime.test.ts +0 -401
- package/src/__tests__/script-proxy-mitm-handler.test.ts +0 -407
- package/src/__tests__/script-proxy-policy-runtime.test.ts +0 -287
- package/src/__tests__/script-proxy-policy.test.ts +0 -310
- package/src/__tests__/script-proxy-rewrite-specificity.test.ts +0 -135
- package/src/__tests__/script-proxy-router.test.ts +0 -180
- package/src/__tests__/script-proxy-session-manager.test.ts +0 -382
- package/src/__tests__/script-proxy-session-runtime.test.ts +0 -113
- package/src/__tests__/secret-allowlist.test.ts +0 -229
- package/src/__tests__/secret-ingress-handler.test.ts +0 -99
- package/src/__tests__/secret-onetime-send.test.ts +0 -130
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +0 -106
- package/src/__tests__/secret-response-routing.test.ts +0 -93
- package/src/__tests__/secret-scanner-executor.test.ts +0 -348
- package/src/__tests__/secret-scanner.test.ts +0 -857
- package/src/__tests__/secure-keys.test.ts +0 -323
- package/src/__tests__/server-history-render.test.ts +0 -431
- package/src/__tests__/session-abort-tool-results.test.ts +0 -240
- package/src/__tests__/session-conflict-gate.test.ts +0 -700
- package/src/__tests__/session-error.test.ts +0 -369
- package/src/__tests__/session-evictor.test.ts +0 -188
- package/src/__tests__/session-init.benchmark.test.ts +0 -462
- package/src/__tests__/session-load-history-repair.test.ts +0 -222
- package/src/__tests__/session-pre-run-repair.test.ts +0 -213
- package/src/__tests__/session-profile-injection.test.ts +0 -444
- package/src/__tests__/session-provider-retry-repair.test.ts +0 -306
- package/src/__tests__/session-queue.test.ts +0 -1535
- package/src/__tests__/session-runtime-assembly.test.ts +0 -476
- package/src/__tests__/session-runtime-workspace.test.ts +0 -183
- package/src/__tests__/session-skill-tools.test.ts +0 -2431
- package/src/__tests__/session-slash-known.test.ts +0 -368
- package/src/__tests__/session-slash-queue.test.ts +0 -288
- package/src/__tests__/session-slash-unknown.test.ts +0 -271
- package/src/__tests__/session-surfaces-task-progress.test.ts +0 -104
- package/src/__tests__/session-tool-setup-app-refresh.test.ts +0 -473
- package/src/__tests__/session-tool-setup-memory-scope.test.ts +0 -140
- package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +0 -140
- package/src/__tests__/session-undo.test.ts +0 -75
- package/src/__tests__/session-workspace-cache-state.test.ts +0 -246
- package/src/__tests__/session-workspace-injection.test.ts +0 -327
- package/src/__tests__/session-workspace-tool-tracking.test.ts +0 -240
- package/src/__tests__/shared-filesystem-errors.test.ts +0 -78
- package/src/__tests__/shell-credential-ref.test.ts +0 -187
- package/src/__tests__/shell-parser-fuzz.test.ts +0 -544
- package/src/__tests__/shell-parser-property.test.ts +0 -433
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -272
- package/src/__tests__/signup-e2e.test.ts +0 -353
- package/src/__tests__/size-guard.test.ts +0 -117
- package/src/__tests__/skill-include-graph.test.ts +0 -303
- package/src/__tests__/skill-load-tool.test.ts +0 -409
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -328
- package/src/__tests__/skill-script-runner-host.test.ts +0 -489
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -349
- package/src/__tests__/skill-script-runner.test.ts +0 -159
- package/src/__tests__/skill-tool-factory.test.ts +0 -252
- package/src/__tests__/skill-tool-manifest.test.ts +0 -658
- package/src/__tests__/skill-version-hash.test.ts +0 -182
- package/src/__tests__/skills.test.ts +0 -680
- package/src/__tests__/slash-commands-catalog.test.ts +0 -86
- package/src/__tests__/slash-commands-parser.test.ts +0 -119
- package/src/__tests__/slash-commands-resolver.test.ts +0 -193
- package/src/__tests__/slash-commands-rewrite.test.ts +0 -39
- package/src/__tests__/speaker-identification.test.ts +0 -52
- package/src/__tests__/starter-bundle.test.ts +0 -136
- package/src/__tests__/starter-task-flow.test.ts +0 -143
- package/src/__tests__/subagent-manager-notify.test.ts +0 -404
- package/src/__tests__/subagent-tools.test.ts +0 -218
- package/src/__tests__/subagent-types.test.ts +0 -78
- package/src/__tests__/swarm-orchestrator.test.ts +0 -428
- package/src/__tests__/swarm-plan-validator.test.ts +0 -330
- package/src/__tests__/swarm-recursion.test.ts +0 -165
- package/src/__tests__/swarm-router-planner.test.ts +0 -208
- package/src/__tests__/swarm-session-integration.test.ts +0 -274
- package/src/__tests__/swarm-tool.test.ts +0 -145
- package/src/__tests__/swarm-worker-backend.test.ts +0 -129
- package/src/__tests__/swarm-worker-runner.test.ts +0 -272
- package/src/__tests__/system-prompt.test.ts +0 -439
- package/src/__tests__/task-compiler.test.ts +0 -284
- package/src/__tests__/task-runner.test.ts +0 -216
- package/src/__tests__/task-scheduler.test.ts +0 -217
- package/src/__tests__/task-tools.test.ts +0 -595
- package/src/__tests__/terminal-sandbox-docker.test.ts +0 -1064
- package/src/__tests__/terminal-sandbox.integration.test.ts +0 -178
- package/src/__tests__/terminal-sandbox.test.ts +0 -202
- package/src/__tests__/test-support/browser-skill-harness.ts +0 -90
- package/src/__tests__/test-support/computer-use-skill-harness.ts +0 -45
- package/src/__tests__/tool-audit-listener.test.ts +0 -113
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -253
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -500
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -516
- package/src/__tests__/tool-executor-redaction.test.ts +0 -289
- package/src/__tests__/tool-executor.test.ts +0 -2055
- package/src/__tests__/tool-metrics-listener.test.ts +0 -225
- package/src/__tests__/tool-notification-listener.test.ts +0 -49
- package/src/__tests__/tool-policy.test.ts +0 -54
- package/src/__tests__/tool-profiling-listener.test.ts +0 -268
- package/src/__tests__/tool-result-truncation.test.ts +0 -217
- package/src/__tests__/tool-trace-listener.test.ts +0 -226
- package/src/__tests__/top-level-renderer.test.ts +0 -121
- package/src/__tests__/top-level-scanner.test.ts +0 -141
- package/src/__tests__/trace-emitter.test.ts +0 -173
- package/src/__tests__/trust-store.test.ts +0 -2031
- package/src/__tests__/turn-commit.test.ts +0 -554
- package/src/__tests__/twilio-provider.test.ts +0 -179
- package/src/__tests__/twilio-routes-twiml.test.ts +0 -127
- package/src/__tests__/twilio-routes.test.ts +0 -822
- package/src/__tests__/twitter-auth-handler.test.ts +0 -666
- package/src/__tests__/url-safety.test.ts +0 -418
- package/src/__tests__/view-image-tool.test.ts +0 -217
- package/src/__tests__/weather-skill-regression.test.ts +0 -225
- package/src/__tests__/web-fetch.test.ts +0 -869
- package/src/__tests__/web-search.test.ts +0 -584
- package/src/__tests__/workspace-git-service.test.ts +0 -1153
- package/src/__tests__/workspace-heartbeat-service.test.ts +0 -486
- package/src/__tests__/workspace-lifecycle.test.ts +0 -292
- package/src/agent/attachments.ts +0 -35
- package/src/agent/loop.ts +0 -500
- package/src/agent/message-types.ts +0 -17
- package/src/agent-heartbeat/agent-heartbeat-service.ts +0 -155
- package/src/autonomy/autonomy-resolver.ts +0 -60
- package/src/autonomy/autonomy-store.ts +0 -122
- package/src/autonomy/disposition-mapper.ts +0 -31
- package/src/autonomy/index.ts +0 -11
- package/src/autonomy/types.ts +0 -39
- package/src/bundler/app-bundler.ts +0 -295
- package/src/bundler/bundle-scanner.ts +0 -535
- package/src/bundler/bundle-signer.ts +0 -124
- package/src/bundler/manifest.ts +0 -21
- package/src/bundler/signature-verifier.ts +0 -184
- package/src/calls/call-bridge.ts +0 -95
- package/src/calls/call-constants.ts +0 -48
- package/src/calls/call-domain.ts +0 -278
- package/src/calls/call-orchestrator.ts +0 -412
- package/src/calls/call-recovery.ts +0 -207
- package/src/calls/call-state-machine.ts +0 -68
- package/src/calls/call-state.ts +0 -87
- package/src/calls/call-store.ts +0 -416
- package/src/calls/elevenlabs-client.ts +0 -89
- package/src/calls/elevenlabs-config.ts +0 -29
- package/src/calls/relay-server.ts +0 -390
- package/src/calls/speaker-identification.ts +0 -213
- package/src/calls/twilio-config.ts +0 -45
- package/src/calls/twilio-provider.ts +0 -178
- package/src/calls/twilio-routes.ts +0 -316
- package/src/calls/types.ts +0 -37
- package/src/calls/voice-provider.ts +0 -14
- package/src/calls/voice-quality.ts +0 -92
- package/src/cli/autonomy.ts +0 -188
- package/src/cli/config-commands.ts +0 -334
- package/src/cli/contacts.ts +0 -149
- package/src/cli/core-commands.ts +0 -784
- package/src/cli/doordash.ts +0 -1055
- package/src/cli/email-guardrails.ts +0 -200
- package/src/cli/email.ts +0 -405
- package/src/cli/ipc-client.ts +0 -82
- package/src/cli/main-screen.tsx +0 -53
- package/src/cli/map.ts +0 -270
- package/src/cli/twitter.ts +0 -575
- package/src/cli.ts +0 -937
- package/src/commands/__tests__/cc-command-registry.test.ts +0 -319
- package/src/commands/cc-command-registry.ts +0 -209
- package/src/config/bundled-skills/.gitkeep +0 -0
- package/src/config/bundled-skills/agentmail/SKILL.md +0 -128
- package/src/config/bundled-skills/agentmail/icon.svg +0 -21
- package/src/config/bundled-skills/app-builder/SKILL.md +0 -1404
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -279
- package/src/config/bundled-skills/app-builder/icon.svg +0 -9
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +0 -15
- package/src/config/bundled-skills/app-builder/tools/app-delete.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-file-edit.ts +0 -11
- package/src/config/bundled-skills/app-builder/tools/app-file-list.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-file-read.ts +0 -18
- package/src/config/bundled-skills/app-builder/tools/app-file-write.ts +0 -11
- package/src/config/bundled-skills/app-builder/tools/app-list.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-query.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-update.ts +0 -20
- package/src/config/bundled-skills/browser/SKILL.md +0 -28
- package/src/config/bundled-skills/browser/TOOLS.json +0 -234
- package/src/config/bundled-skills/browser/tools/browser-click.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-close.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-extract.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-navigate.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-press-key.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-type.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +0 -9
- package/src/config/bundled-skills/claude-code/SKILL.md +0 -50
- package/src/config/bundled-skills/claude-code/TOOLS.json +0 -40
- package/src/config/bundled-skills/claude-code/tools/claude-code.ts +0 -9
- package/src/config/bundled-skills/computer-use/SKILL.md +0 -17
- package/src/config/bundled-skills/computer-use/TOOLS.json +0 -326
- package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-done.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-double-click.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-drag.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-key.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-open-app.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-request-control.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-respond.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-right-click.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-run-applescript.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-scroll.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-type-text.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-wait.ts +0 -9
- package/src/config/bundled-skills/contacts/SKILL.md +0 -39
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -122
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +0 -9
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +0 -9
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +0 -9
- package/src/config/bundled-skills/document/SKILL.md +0 -26
- package/src/config/bundled-skills/document/TOOLS.json +0 -53
- package/src/config/bundled-skills/document/tools/document-create.ts +0 -9
- package/src/config/bundled-skills/document/tools/document-update.ts +0 -9
- package/src/config/bundled-skills/doordash/SKILL.md +0 -163
- package/src/config/bundled-skills/followups/SKILL.md +0 -32
- package/src/config/bundled-skills/followups/TOOLS.json +0 -100
- package/src/config/bundled-skills/followups/icon.svg +0 -24
- package/src/config/bundled-skills/followups/tools/followup-create.ts +0 -9
- package/src/config/bundled-skills/followups/tools/followup-list.ts +0 -9
- package/src/config/bundled-skills/followups/tools/followup-resolve.ts +0 -9
- package/src/config/bundled-skills/google-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/google-calendar/TOOLS.json +0 -108
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +0 -165
- package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +0 -21
- package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +0 -42
- package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +0 -13
- package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +0 -30
- package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +0 -41
- package/src/config/bundled-skills/google-calendar/tools/shared.ts +0 -18
- package/src/config/bundled-skills/google-calendar/types.ts +0 -97
- package/src/config/bundled-skills/image-studio/SKILL.md +0 -32
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -42
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +0 -115
- package/src/config/bundled-skills/macos-automation/SKILL.md +0 -66
- package/src/config/bundled-skills/messaging/SKILL.md +0 -130
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -357
- package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -23
- package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -23
- package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/gmail-draft.ts +0 -26
- package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/gmail-trash.ts +0 -23
- package/src/config/bundled-skills/messaging/tools/gmail-unsubscribe.ts +0 -84
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -18
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +0 -125
- package/src/config/bundled-skills/messaging/tools/messaging-auth-test.ts +0 -16
- package/src/config/bundled-skills/messaging/tools/messaging-draft.ts +0 -49
- package/src/config/bundled-skills/messaging/tools/messaging-list-conversations.ts +0 -21
- package/src/config/bundled-skills/messaging/tools/messaging-mark-read.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/messaging-read.ts +0 -28
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -29
- package/src/config/bundled-skills/messaging/tools/messaging-search.ts +0 -22
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/shared.ts +0 -71
- package/src/config/bundled-skills/messaging/tools/slack-add-reaction.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/slack-leave-channel.ts +0 -23
- package/src/config/bundled-skills/phone-calls/SKILL.md +0 -414
- package/src/config/bundled-skills/playbooks/SKILL.md +0 -31
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -126
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +0 -9
- package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +0 -9
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +0 -9
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +0 -9
- package/src/config/bundled-skills/public-ingress/SKILL.md +0 -183
- package/src/config/bundled-skills/reminder/SKILL.md +0 -20
- package/src/config/bundled-skills/reminder/TOOLS.json +0 -67
- package/src/config/bundled-skills/reminder/tools/reminder-cancel.ts +0 -9
- package/src/config/bundled-skills/reminder/tools/reminder-create.ts +0 -9
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -9
- package/src/config/bundled-skills/schedule/SKILL.md +0 -74
- package/src/config/bundled-skills/schedule/TOOLS.json +0 -135
- package/src/config/bundled-skills/schedule/tools/schedule-create.ts +0 -9
- package/src/config/bundled-skills/schedule/tools/schedule-delete.ts +0 -9
- package/src/config/bundled-skills/schedule/tools/schedule-list.ts +0 -9
- package/src/config/bundled-skills/schedule/tools/schedule-update.ts +0 -9
- package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -68
- package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
- package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
- package/src/config/bundled-skills/subagent/SKILL.md +0 -25
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -107
- package/src/config/bundled-skills/subagent/tools/subagent-abort.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-message.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-read.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-spawn.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-status.ts +0 -9
- package/src/config/bundled-skills/tasks/SKILL.md +0 -28
- package/src/config/bundled-skills/tasks/TOOLS.json +0 -281
- package/src/config/bundled-skills/tasks/tools/task-delete.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-add.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-show.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-update.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-run.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-save.ts +0 -9
- package/src/config/bundled-skills/transcribe/SKILL.md +0 -25
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -32
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +0 -370
- package/src/config/bundled-skills/twitter/SKILL.md +0 -134
- package/src/config/bundled-skills/watcher/SKILL.md +0 -27
- package/src/config/bundled-skills/watcher/TOOLS.json +0 -147
- package/src/config/bundled-skills/watcher/tools/watcher-create.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-list.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-update.ts +0 -9
- package/src/config/bundled-skills/weather/SKILL.md +0 -37
- package/src/config/bundled-skills/weather/TOOLS.json +0 -32
- package/src/config/bundled-skills/weather/icon.svg +0 -24
- package/src/config/bundled-skills/weather/tools/get-weather.ts +0 -9
- package/src/config/computer-use-prompt.ts +0 -97
- package/src/config/defaults.ts +0 -252
- package/src/config/loader.ts +0 -339
- package/src/config/schema.ts +0 -1356
- package/src/config/skill-state.ts +0 -95
- package/src/config/skills.ts +0 -972
- package/src/config/system-prompt.ts +0 -675
- package/src/config/templates/BOOTSTRAP.md +0 -70
- package/src/config/templates/IDENTITY.md +0 -25
- package/src/config/templates/LOOKS.md +0 -25
- package/src/config/templates/SOUL.md +0 -37
- package/src/config/templates/USER.md +0 -19
- package/src/config/types.ts +0 -40
- package/src/config/vellum-skills/deploy-fullstack-vercel/SKILL.md +0 -179
- package/src/config/vellum-skills/document-writer/SKILL.md +0 -195
- package/src/config/vellum-skills/google-oauth-setup/SKILL.md +0 -199
- package/src/config/vellum-skills/slack-oauth-setup/SKILL.md +0 -153
- package/src/config/vellum-skills/telegram-setup/SKILL.md +0 -102
- package/src/contacts/contact-store.ts +0 -410
- package/src/contacts/index.ts +0 -11
- package/src/contacts/types.ts +0 -28
- package/src/context/token-estimator.ts +0 -108
- package/src/context/tool-result-truncation.ts +0 -128
- package/src/context/window-manager.ts +0 -531
- package/src/daemon/assistant-attachments.ts +0 -689
- package/src/daemon/classifier.ts +0 -110
- package/src/daemon/computer-use-session.ts +0 -903
- package/src/daemon/connection-policy.ts +0 -41
- package/src/daemon/date-context.ts +0 -136
- package/src/daemon/handlers/apps.ts +0 -461
- package/src/daemon/handlers/browser.ts +0 -54
- package/src/daemon/handlers/computer-use.ts +0 -187
- package/src/daemon/handlers/config.ts +0 -707
- package/src/daemon/handlers/diagnostics.ts +0 -338
- package/src/daemon/handlers/documents.ts +0 -173
- package/src/daemon/handlers/home-base.ts +0 -78
- package/src/daemon/handlers/identity.ts +0 -127
- package/src/daemon/handlers/index.ts +0 -128
- package/src/daemon/handlers/misc.ts +0 -331
- package/src/daemon/handlers/open-bundle-handler.ts +0 -80
- package/src/daemon/handlers/publish.ts +0 -187
- package/src/daemon/handlers/sessions.ts +0 -539
- package/src/daemon/handlers/shared.ts +0 -569
- package/src/daemon/handlers/signing.ts +0 -37
- package/src/daemon/handlers/skills.ts +0 -501
- package/src/daemon/handlers/subagents.ts +0 -210
- package/src/daemon/handlers/twitter-auth.ts +0 -198
- package/src/daemon/handlers/work-items.ts +0 -632
- package/src/daemon/handlers/workspace-files.ts +0 -75
- package/src/daemon/handlers.ts +0 -17
- package/src/daemon/history-repair.ts +0 -214
- package/src/daemon/ipc-blob-store.ts +0 -231
- package/src/daemon/ipc-contract-inventory.json +0 -463
- package/src/daemon/ipc-contract-inventory.ts +0 -126
- package/src/daemon/ipc-contract.ts +0 -2352
- package/src/daemon/ipc-protocol.ts +0 -75
- package/src/daemon/ipc-validate.ts +0 -171
- package/src/daemon/lifecycle.ts +0 -580
- package/src/daemon/main.ts +0 -21
- package/src/daemon/media-visibility-policy.ts +0 -57
- package/src/daemon/ride-shotgun-handler.ts +0 -309
- package/src/daemon/server.ts +0 -1207
- package/src/daemon/session-agent-loop.ts +0 -922
- package/src/daemon/session-attachments.ts +0 -196
- package/src/daemon/session-conflict-gate.ts +0 -128
- package/src/daemon/session-dynamic-profile.ts +0 -63
- package/src/daemon/session-error.ts +0 -290
- package/src/daemon/session-evictor.ts +0 -196
- package/src/daemon/session-history.ts +0 -437
- package/src/daemon/session-lifecycle.ts +0 -147
- package/src/daemon/session-media-retry.ts +0 -147
- package/src/daemon/session-memory.ts +0 -212
- package/src/daemon/session-messaging.ts +0 -145
- package/src/daemon/session-notifiers.ts +0 -193
- package/src/daemon/session-process.ts +0 -264
- package/src/daemon/session-queue-manager.ts +0 -82
- package/src/daemon/session-runtime-assembly.ts +0 -447
- package/src/daemon/session-skill-tools.ts +0 -356
- package/src/daemon/session-slash.ts +0 -305
- package/src/daemon/session-surfaces.ts +0 -702
- package/src/daemon/session-tool-setup.ts +0 -524
- package/src/daemon/session-usage.ts +0 -72
- package/src/daemon/session-workspace.ts +0 -19
- package/src/daemon/session.ts +0 -400
- package/src/daemon/trace-emitter.ts +0 -82
- package/src/daemon/video-thumbnail.ts +0 -60
- package/src/daemon/watch-handler.ts +0 -274
- package/src/doordash/client.ts +0 -999
- package/src/doordash/queries.ts +0 -1311
- package/src/doordash/query-extractor.ts +0 -93
- package/src/doordash/session.ts +0 -82
- package/src/email/provider.ts +0 -117
- package/src/email/providers/agentmail.ts +0 -317
- package/src/email/providers/index.ts +0 -58
- package/src/email/service.ts +0 -303
- package/src/email/types.ts +0 -126
- package/src/events/bus.ts +0 -157
- package/src/events/domain-events.ts +0 -83
- package/src/events/index.ts +0 -18
- package/src/events/tool-audit-listener.ts +0 -80
- package/src/events/tool-domain-event-publisher.ts +0 -111
- package/src/events/tool-metrics-listener.ts +0 -159
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/events/tool-profiling-listener.ts +0 -158
- package/src/events/tool-trace-listener.ts +0 -75
- package/src/export/formatter.ts +0 -98
- package/src/followups/followup-store.ts +0 -168
- package/src/followups/index.ts +0 -10
- package/src/followups/types.ts +0 -29
- package/src/gallery/default-gallery.ts +0 -795
- package/src/gallery/gallery-manifest.ts +0 -24
- package/src/home-base/app-link-store.ts +0 -82
- package/src/home-base/bootstrap.ts +0 -68
- package/src/home-base/prebuilt/index.html +0 -662
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -112
- package/src/home-base/prebuilt-home-base-updater.ts +0 -30
- package/src/hooks/cli.ts +0 -163
- package/src/hooks/config.ts +0 -88
- package/src/hooks/discovery.ts +0 -110
- package/src/hooks/manager.ts +0 -128
- package/src/hooks/runner.ts +0 -123
- package/src/hooks/templates.ts +0 -52
- package/src/hooks/types.ts +0 -72
- package/src/inbound/public-ingress-urls.ts +0 -123
- package/src/index.ts +0 -75
- package/src/instrument.ts +0 -60
- package/src/logfire.ts +0 -99
- package/src/media/gemini-image-service.ts +0 -136
- package/src/memory/account-store.ts +0 -108
- package/src/memory/admin.ts +0 -211
- package/src/memory/app-store.ts +0 -556
- package/src/memory/attachments-store.ts +0 -397
- package/src/memory/channel-delivery-store.ts +0 -353
- package/src/memory/checkpoints.ts +0 -52
- package/src/memory/clarification-resolver.ts +0 -298
- package/src/memory/conflict-intent.ts +0 -114
- package/src/memory/conflict-store.ts +0 -342
- package/src/memory/contradiction-checker.ts +0 -330
- package/src/memory/conversation-key-store.ts +0 -107
- package/src/memory/conversation-store.ts +0 -470
- package/src/memory/db.ts +0 -1825
- package/src/memory/embedding-backend.ts +0 -229
- package/src/memory/embedding-gemini.ts +0 -52
- package/src/memory/embedding-local.ts +0 -75
- package/src/memory/embedding-ollama.ts +0 -55
- package/src/memory/embedding-openai.ts +0 -25
- package/src/memory/entity-extractor.ts +0 -474
- package/src/memory/fingerprint.ts +0 -20
- package/src/memory/indexer.ts +0 -156
- package/src/memory/items-extractor.ts +0 -461
- package/src/memory/job-handlers/backfill.ts +0 -139
- package/src/memory/job-handlers/cleanup.ts +0 -58
- package/src/memory/job-handlers/conflict.ts +0 -121
- package/src/memory/job-handlers/embedding.ts +0 -61
- package/src/memory/job-handlers/extraction.ts +0 -123
- package/src/memory/job-handlers/index-maintenance.ts +0 -54
- package/src/memory/job-handlers/summarization.ts +0 -286
- package/src/memory/job-utils.ts +0 -170
- package/src/memory/jobs-store.ts +0 -401
- package/src/memory/jobs-worker.ts +0 -274
- package/src/memory/llm-request-log-store.ts +0 -45
- package/src/memory/llm-usage-store.ts +0 -60
- package/src/memory/message-content.ts +0 -54
- package/src/memory/profile-compiler.ts +0 -160
- package/src/memory/published-pages-store.ts +0 -137
- package/src/memory/qdrant-client.ts +0 -366
- package/src/memory/qdrant-manager.ts +0 -242
- package/src/memory/query-builder.ts +0 -45
- package/src/memory/retrieval-budget.ts +0 -30
- package/src/memory/retriever.ts +0 -653
- package/src/memory/runs-store.ts +0 -255
- package/src/memory/schema.ts +0 -588
- package/src/memory/search/entity.ts +0 -298
- package/src/memory/search/formatting.ts +0 -207
- package/src/memory/search/lexical.ts +0 -227
- package/src/memory/search/ranking.ts +0 -401
- package/src/memory/search/semantic.ts +0 -121
- package/src/memory/search/types.ts +0 -137
- package/src/memory/segmenter.ts +0 -68
- package/src/memory/shared-app-links-store.ts +0 -138
- package/src/memory/tool-usage-store.ts +0 -62
- package/src/messaging/activity-analyzer.ts +0 -76
- package/src/messaging/draft-store.ts +0 -88
- package/src/messaging/index.ts +0 -3
- package/src/messaging/provider-types.ts +0 -80
- package/src/messaging/provider.ts +0 -43
- package/src/messaging/providers/gmail/adapter.ts +0 -193
- package/src/messaging/providers/gmail/client.ts +0 -204
- package/src/messaging/providers/gmail/types.ts +0 -90
- package/src/messaging/providers/slack/adapter.ts +0 -202
- package/src/messaging/providers/slack/client.ts +0 -198
- package/src/messaging/providers/slack/types.ts +0 -119
- package/src/messaging/registry.ts +0 -34
- package/src/messaging/style-analyzer.ts +0 -159
- package/src/messaging/thread-summarizer.ts +0 -306
- package/src/messaging/triage-engine.ts +0 -323
- package/src/messaging/types.ts +0 -55
- package/src/permissions/checker.ts +0 -636
- package/src/permissions/defaults.ts +0 -254
- package/src/permissions/prompter.ts +0 -102
- package/src/permissions/secret-prompter.ts +0 -114
- package/src/permissions/trust-store.ts +0 -584
- package/src/permissions/types.ts +0 -62
- package/src/playbooks/index.ts +0 -2
- package/src/playbooks/playbook-compiler.ts +0 -90
- package/src/playbooks/types.ts +0 -55
- package/src/providers/anthropic/client.ts +0 -751
- package/src/providers/failover.ts +0 -129
- package/src/providers/fireworks/client.ts +0 -20
- package/src/providers/gemini/client.ts +0 -285
- package/src/providers/ollama/client.ts +0 -30
- package/src/providers/openai/client.ts +0 -337
- package/src/providers/openrouter/client.ts +0 -20
- package/src/providers/ratelimit.ts +0 -93
- package/src/providers/registry.ts +0 -146
- package/src/providers/retry.ts +0 -106
- package/src/providers/stream-timeout.ts +0 -38
- package/src/providers/types.ts +0 -109
- package/src/runtime/assistant-event-hub.ts +0 -120
- package/src/runtime/assistant-event.ts +0 -82
- package/src/runtime/gateway-client.ts +0 -42
- package/src/runtime/http-server.ts +0 -1056
- package/src/runtime/http-types.ts +0 -66
- package/src/runtime/routes/app-routes.ts +0 -174
- package/src/runtime/routes/attachment-routes.ts +0 -133
- package/src/runtime/routes/call-routes.ts +0 -140
- package/src/runtime/routes/channel-routes.ts +0 -382
- package/src/runtime/routes/conversation-routes.ts +0 -352
- package/src/runtime/routes/events-routes.ts +0 -79
- package/src/runtime/routes/run-routes.ts +0 -262
- package/src/runtime/routes/secret-routes.ts +0 -76
- package/src/runtime/run-orchestrator.ts +0 -296
- package/src/schedule/recurrence-engine.ts +0 -138
- package/src/schedule/recurrence-types.ts +0 -67
- package/src/schedule/schedule-store.ts +0 -497
- package/src/schedule/scheduler.ts +0 -171
- package/src/security/encrypted-store.ts +0 -238
- package/src/security/keychain.ts +0 -252
- package/src/security/oauth-callback-registry.ts +0 -66
- package/src/security/oauth2.ts +0 -274
- package/src/security/redaction.ts +0 -89
- package/src/security/secret-allowlist.ts +0 -164
- package/src/security/secret-ingress.ts +0 -57
- package/src/security/secret-scanner.ts +0 -543
- package/src/security/secure-keys.ts +0 -180
- package/src/security/token-manager.ts +0 -141
- package/src/services/published-app-updater.ts +0 -69
- package/src/services/vercel-deploy.ts +0 -73
- package/src/skills/active-skill-tools.ts +0 -81
- package/src/skills/clawhub.ts +0 -414
- package/src/skills/include-graph.ts +0 -146
- package/src/skills/managed-store.ts +0 -233
- package/src/skills/path-classifier.ts +0 -128
- package/src/skills/slash-commands.ts +0 -174
- package/src/skills/tool-manifest.ts +0 -165
- package/src/skills/version-hash.ts +0 -110
- package/src/slack/slack-webhook.ts +0 -61
- package/src/subagent/index.ts +0 -19
- package/src/subagent/manager.ts +0 -511
- package/src/subagent/types.ts +0 -69
- package/src/swarm/backend-claude-code.ts +0 -145
- package/src/swarm/index.ts +0 -44
- package/src/swarm/limits.ts +0 -37
- package/src/swarm/orchestrator.ts +0 -279
- package/src/swarm/plan-validator.ts +0 -151
- package/src/swarm/router-planner.ts +0 -100
- package/src/swarm/router-prompts.ts +0 -36
- package/src/swarm/synthesizer.ts +0 -62
- package/src/swarm/types.ts +0 -62
- package/src/swarm/worker-backend.ts +0 -121
- package/src/swarm/worker-prompts.ts +0 -79
- package/src/swarm/worker-runner.ts +0 -164
- package/src/tasks/SPEC.md +0 -139
- package/src/tasks/candidate-store.ts +0 -86
- package/src/tasks/ephemeral-permissions.ts +0 -50
- package/src/tasks/task-compiler.ts +0 -199
- package/src/tasks/task-runner.ts +0 -90
- package/src/tasks/task-scheduler.ts +0 -20
- package/src/tasks/task-store.ts +0 -127
- package/src/tasks/tool-sanitizer.ts +0 -36
- package/src/tools/apps/definitions.ts +0 -59
- package/src/tools/apps/executors.ts +0 -313
- package/src/tools/apps/open-proxy.ts +0 -43
- package/src/tools/apps/registry.ts +0 -16
- package/src/tools/assets/materialize.ts +0 -218
- package/src/tools/assets/search.ts +0 -361
- package/src/tools/browser/__tests__/auth-cache.test.ts +0 -219
- package/src/tools/browser/__tests__/auth-detector.test.ts +0 -362
- package/src/tools/browser/__tests__/jit-auth.test.ts +0 -189
- package/src/tools/browser/api-map.ts +0 -293
- package/src/tools/browser/auth-cache.ts +0 -149
- package/src/tools/browser/auth-detector.ts +0 -347
- package/src/tools/browser/auto-navigate.ts +0 -270
- package/src/tools/browser/browser-execution.ts +0 -980
- package/src/tools/browser/browser-handoff.ts +0 -79
- package/src/tools/browser/browser-manager.ts +0 -715
- package/src/tools/browser/browser-screencast.ts +0 -217
- package/src/tools/browser/headless-browser.ts +0 -450
- package/src/tools/browser/jit-auth.ts +0 -51
- package/src/tools/browser/network-recorder.ts +0 -349
- package/src/tools/browser/network-recording-types.ts +0 -49
- package/src/tools/browser/recording-store.ts +0 -49
- package/src/tools/browser/runtime-check.ts +0 -43
- package/src/tools/browser/x-auto-navigate.ts +0 -207
- package/src/tools/calls/call-end.ts +0 -67
- package/src/tools/calls/call-start.ts +0 -73
- package/src/tools/calls/call-status.ts +0 -81
- package/src/tools/claude-code/claude-code.ts +0 -428
- package/src/tools/computer-use/definitions.ts +0 -443
- package/src/tools/computer-use/registry.ts +0 -22
- package/src/tools/computer-use/request-computer-control.ts +0 -53
- package/src/tools/computer-use/skill-proxy-bridge.ts +0 -28
- package/src/tools/contacts/contact-merge.ts +0 -55
- package/src/tools/contacts/contact-search.ts +0 -58
- package/src/tools/contacts/contact-upsert.ts +0 -64
- package/src/tools/credentials/account-registry.ts +0 -127
- package/src/tools/credentials/broker-types.ts +0 -107
- package/src/tools/credentials/broker.ts +0 -372
- package/src/tools/credentials/domain-policy.ts +0 -51
- package/src/tools/credentials/host-pattern-match.ts +0 -60
- package/src/tools/credentials/metadata-store.ts +0 -335
- package/src/tools/credentials/policy-types.ts +0 -52
- package/src/tools/credentials/policy-validate.ts +0 -80
- package/src/tools/credentials/resolve.ts +0 -122
- package/src/tools/credentials/selection.ts +0 -159
- package/src/tools/credentials/tool-policy.ts +0 -25
- package/src/tools/credentials/vault.ts +0 -657
- package/src/tools/document/document-tool.ts +0 -92
- package/src/tools/document/editor-template.ts +0 -237
- package/src/tools/executor.ts +0 -944
- package/src/tools/filesystem/edit.ts +0 -127
- package/src/tools/filesystem/fuzzy-match.ts +0 -202
- package/src/tools/filesystem/read.ts +0 -71
- package/src/tools/filesystem/view-image.ts +0 -199
- package/src/tools/filesystem/write.ts +0 -79
- package/src/tools/followups/followup_create.ts +0 -76
- package/src/tools/followups/followup_list.ts +0 -60
- package/src/tools/followups/followup_resolve.ts +0 -56
- package/src/tools/host-filesystem/edit.ts +0 -125
- package/src/tools/host-filesystem/read.ts +0 -80
- package/src/tools/host-filesystem/write.ts +0 -76
- package/src/tools/host-terminal/cli-discover.ts +0 -180
- package/src/tools/host-terminal/host-shell.ts +0 -191
- package/src/tools/memory/definitions.ts +0 -69
- package/src/tools/memory/handlers.ts +0 -246
- package/src/tools/memory/register.ts +0 -66
- package/src/tools/network/__tests__/web-search.test.ts +0 -427
- package/src/tools/network/domain-normalize.ts +0 -85
- package/src/tools/network/script-proxy/__tests__/logging.test.ts +0 -248
- package/src/tools/network/script-proxy/__tests__/policy.test.ts +0 -234
- package/src/tools/network/script-proxy/__tests__/router.test.ts +0 -76
- package/src/tools/network/script-proxy/certs.ts +0 -237
- package/src/tools/network/script-proxy/connect-tunnel.ts +0 -82
- package/src/tools/network/script-proxy/http-forwarder.ts +0 -151
- package/src/tools/network/script-proxy/index.ts +0 -28
- package/src/tools/network/script-proxy/logging.ts +0 -196
- package/src/tools/network/script-proxy/mitm-handler.ts +0 -269
- package/src/tools/network/script-proxy/policy.ts +0 -152
- package/src/tools/network/script-proxy/router.ts +0 -60
- package/src/tools/network/script-proxy/server.ts +0 -136
- package/src/tools/network/script-proxy/session-manager.ts +0 -534
- package/src/tools/network/script-proxy/types.ts +0 -125
- package/src/tools/network/url-safety.ts +0 -227
- package/src/tools/network/web-fetch.ts +0 -713
- package/src/tools/network/web-search.ts +0 -319
- package/src/tools/playbooks/index.ts +0 -4
- package/src/tools/playbooks/playbook-create.ts +0 -96
- package/src/tools/playbooks/playbook-delete.ts +0 -52
- package/src/tools/playbooks/playbook-list.ts +0 -74
- package/src/tools/playbooks/playbook-update.ts +0 -111
- package/src/tools/registry.ts +0 -295
- package/src/tools/reminder/reminder-store.ts +0 -148
- package/src/tools/reminder/reminder.ts +0 -80
- package/src/tools/schedule/create.ts +0 -81
- package/src/tools/schedule/delete.ts +0 -28
- package/src/tools/schedule/list.ts +0 -69
- package/src/tools/schedule/update.ts +0 -90
- package/src/tools/shared/filesystem/edit-engine.ts +0 -56
- package/src/tools/shared/filesystem/errors.ts +0 -85
- package/src/tools/shared/filesystem/file-ops-service.ts +0 -215
- package/src/tools/shared/filesystem/format-diff.ts +0 -35
- package/src/tools/shared/filesystem/path-policy.ts +0 -125
- package/src/tools/shared/filesystem/size-guard.ts +0 -41
- package/src/tools/shared/filesystem/types.ts +0 -80
- package/src/tools/shared/shell-output.ts +0 -52
- package/src/tools/skills/delete-managed.ts +0 -60
- package/src/tools/skills/load.ts +0 -139
- package/src/tools/skills/sandbox-runner.ts +0 -279
- package/src/tools/skills/scaffold-managed.ts +0 -150
- package/src/tools/skills/script-contract.ts +0 -6
- package/src/tools/skills/skill-script-runner.ts +0 -86
- package/src/tools/skills/skill-tool-factory.ts +0 -64
- package/src/tools/skills/vellum-catalog.ts +0 -217
- package/src/tools/subagent/abort.ts +0 -33
- package/src/tools/subagent/message.ts +0 -39
- package/src/tools/subagent/read.ts +0 -67
- package/src/tools/subagent/spawn.ts +0 -46
- package/src/tools/subagent/status.ts +0 -45
- package/src/tools/swarm/delegate.ts +0 -183
- package/src/tools/system/request-permission.ts +0 -98
- package/src/tools/system/version.ts +0 -43
- package/src/tools/tasks/index.ts +0 -27
- package/src/tools/tasks/task-delete.ts +0 -82
- package/src/tools/tasks/task-list.ts +0 -44
- package/src/tools/tasks/task-run.ts +0 -97
- package/src/tools/tasks/task-save.ts +0 -47
- package/src/tools/tasks/work-item-enqueue.ts +0 -234
- package/src/tools/tasks/work-item-list.ts +0 -55
- package/src/tools/tasks/work-item-remove.ts +0 -60
- package/src/tools/tasks/work-item-run.ts +0 -78
- package/src/tools/tasks/work-item-update.ts +0 -114
- package/src/tools/terminal/backends/docker.ts +0 -372
- package/src/tools/terminal/backends/native.ts +0 -190
- package/src/tools/terminal/backends/types.ts +0 -26
- package/src/tools/terminal/evaluate-typescript.ts +0 -275
- package/src/tools/terminal/parser.ts +0 -415
- package/src/tools/terminal/safe-env.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -149
- package/src/tools/terminal/sandbox.ts +0 -44
- package/src/tools/terminal/shell.ts +0 -257
- package/src/tools/tool-manifest.ts +0 -198
- package/src/tools/types.ts +0 -183
- package/src/tools/ui-surface/definitions.ts +0 -244
- package/src/tools/ui-surface/registry.ts +0 -14
- package/src/tools/watch/screen-watch.ts +0 -130
- package/src/tools/watch/watch-state.ts +0 -119
- package/src/tools/watcher/create.ts +0 -64
- package/src/tools/watcher/delete.ts +0 -27
- package/src/tools/watcher/digest.ts +0 -50
- package/src/tools/watcher/list.ts +0 -60
- package/src/tools/watcher/update.ts +0 -56
- package/src/tools/weather/service.ts +0 -551
- package/src/twitter/client.ts +0 -690
- package/src/twitter/session.ts +0 -91
- package/src/usage/actors.ts +0 -24
- package/src/usage/types.ts +0 -37
- package/src/util/clipboard.ts +0 -33
- package/src/util/content-id.ts +0 -16
- package/src/util/diff.ts +0 -181
- package/src/util/errors.ts +0 -129
- package/src/util/logger.ts +0 -243
- package/src/util/platform.ts +0 -607
- package/src/util/pricing.ts +0 -150
- package/src/util/spinner.ts +0 -51
- package/src/util/time.ts +0 -16
- package/src/util/truncate.ts +0 -6
- package/src/util/xml.ts +0 -4
- package/src/version.ts +0 -3
- package/src/watcher/constants.ts +0 -11
- package/src/watcher/engine.ts +0 -199
- package/src/watcher/provider-registry.ts +0 -15
- package/src/watcher/provider-types.ts +0 -48
- package/src/watcher/providers/gmail.ts +0 -198
- package/src/watcher/providers/google-calendar.ts +0 -228
- package/src/watcher/providers/slack.ts +0 -129
- package/src/watcher/watcher-store.ts +0 -419
- package/src/work-items/work-item-runner.ts +0 -171
- package/src/work-items/work-item-store.ts +0 -325
- package/src/workspace/commit-message-enrichment-service.ts +0 -284
- package/src/workspace/commit-message-provider.ts +0 -95
- package/src/workspace/git-service.ts +0 -840
- package/src/workspace/heartbeat-service.ts +0 -345
- package/src/workspace/provider-commit-message-generator.ts +0 -285
- package/src/workspace/top-level-renderer.ts +0 -19
- package/src/workspace/top-level-scanner.ts +0 -41
- package/src/workspace/turn-commit.ts +0 -175
- package/tsconfig.json +0 -21
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { getLogger } from '../util/logger.js';
|
|
2
|
-
|
|
3
|
-
const log = getLogger('session-evictor');
|
|
4
|
-
|
|
5
|
-
/** Minimal interface a session must satisfy to be evictable. */
|
|
6
|
-
export interface EvictableSession {
|
|
7
|
-
isProcessing(): boolean;
|
|
8
|
-
dispose(): void;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface EvictorOptions {
|
|
12
|
-
/** Max idle time before a session is eligible for eviction (ms). Default: 30 min. */
|
|
13
|
-
ttlMs?: number;
|
|
14
|
-
/** Max number of in-memory sessions before LRU eviction kicks in. Default: 100. */
|
|
15
|
-
maxSessions?: number;
|
|
16
|
-
/** RSS threshold (bytes) above which idle sessions are aggressively evicted. Default: 3 GB. */
|
|
17
|
-
memoryThresholdBytes?: number;
|
|
18
|
-
/** Interval between periodic sweeps (ms). Default: 60 s. */
|
|
19
|
-
sweepIntervalMs?: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface EvictionResult {
|
|
23
|
-
/** Sessions evicted because they exceeded TTL. */
|
|
24
|
-
ttlEvicted: number;
|
|
25
|
-
/** Sessions evicted because pool exceeded maxSessions (LRU order). */
|
|
26
|
-
lruEvicted: number;
|
|
27
|
-
/** Sessions evicted due to memory pressure. */
|
|
28
|
-
memoryEvicted: number;
|
|
29
|
-
/** Sessions skipped because they were actively processing. */
|
|
30
|
-
skipped: number;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const DEFAULT_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
34
|
-
const DEFAULT_MAX_SESSIONS = 100;
|
|
35
|
-
const DEFAULT_MEMORY_THRESHOLD_BYTES = 3072 * 1024 * 1024; // 3 GB
|
|
36
|
-
const DEFAULT_SWEEP_INTERVAL_MS = 60 * 1000; // 60 seconds
|
|
37
|
-
|
|
38
|
-
export class SessionEvictor {
|
|
39
|
-
private readonly ttlMs: number;
|
|
40
|
-
private readonly maxSessions: number;
|
|
41
|
-
private readonly memoryThresholdBytes: number;
|
|
42
|
-
private readonly sweepIntervalMs: number;
|
|
43
|
-
|
|
44
|
-
/** Tracks last access time per session ID. */
|
|
45
|
-
private lastAccess = new Map<string, number>();
|
|
46
|
-
|
|
47
|
-
private sweepTimer: ReturnType<typeof setInterval> | null = null;
|
|
48
|
-
private sessions: Map<string, EvictableSession>;
|
|
49
|
-
|
|
50
|
-
/** Optional hook called for each evicted session (for cleanup in DaemonServer). */
|
|
51
|
-
onEvict?: (sessionId: string) => void;
|
|
52
|
-
|
|
53
|
-
/** Optional guard: if this returns true, the session is protected from eviction. */
|
|
54
|
-
shouldProtect?: (sessionId: string) => boolean;
|
|
55
|
-
|
|
56
|
-
constructor(
|
|
57
|
-
sessions: Map<string, EvictableSession>,
|
|
58
|
-
options?: EvictorOptions,
|
|
59
|
-
) {
|
|
60
|
-
this.sessions = sessions;
|
|
61
|
-
this.ttlMs = options?.ttlMs ?? DEFAULT_TTL_MS;
|
|
62
|
-
this.maxSessions = options?.maxSessions ?? DEFAULT_MAX_SESSIONS;
|
|
63
|
-
this.memoryThresholdBytes = options?.memoryThresholdBytes ?? DEFAULT_MEMORY_THRESHOLD_BYTES;
|
|
64
|
-
this.sweepIntervalMs = options?.sweepIntervalMs ?? DEFAULT_SWEEP_INTERVAL_MS;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** Record an access for the given session (resets its idle clock). */
|
|
68
|
-
touch(sessionId: string): void {
|
|
69
|
-
this.lastAccess.set(sessionId, Date.now());
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Remove tracking state for a session that was externally removed. */
|
|
73
|
-
remove(sessionId: string): void {
|
|
74
|
-
this.lastAccess.delete(sessionId);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** Start the periodic sweep timer. */
|
|
78
|
-
start(): void {
|
|
79
|
-
if (this.sweepTimer) return;
|
|
80
|
-
this.sweepTimer = setInterval(() => {
|
|
81
|
-
try {
|
|
82
|
-
const result = this.sweep();
|
|
83
|
-
const total = result.ttlEvicted + result.lruEvicted + result.memoryEvicted;
|
|
84
|
-
if (total > 0) {
|
|
85
|
-
log.info(result, 'Session eviction sweep completed');
|
|
86
|
-
}
|
|
87
|
-
} catch (err) {
|
|
88
|
-
log.error({ err }, 'Session eviction sweep failed');
|
|
89
|
-
}
|
|
90
|
-
}, this.sweepIntervalMs);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/** Stop the periodic sweep timer. */
|
|
94
|
-
stop(): void {
|
|
95
|
-
if (this.sweepTimer) {
|
|
96
|
-
clearInterval(this.sweepTimer);
|
|
97
|
-
this.sweepTimer = null;
|
|
98
|
-
}
|
|
99
|
-
this.lastAccess.clear();
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Run a single eviction sweep. Safe to call manually (e.g. from tests)
|
|
104
|
-
* in addition to the periodic timer.
|
|
105
|
-
*/
|
|
106
|
-
sweep(): EvictionResult {
|
|
107
|
-
const now = Date.now();
|
|
108
|
-
const result: EvictionResult = {
|
|
109
|
-
ttlEvicted: 0,
|
|
110
|
-
lruEvicted: 0,
|
|
111
|
-
memoryEvicted: 0,
|
|
112
|
-
skipped: 0,
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
// Phase 1: TTL eviction — remove sessions idle longer than ttlMs.
|
|
116
|
-
for (const [id, session] of this.sessions) {
|
|
117
|
-
const lastAccessTime = this.lastAccess.get(id) ?? 0;
|
|
118
|
-
if (now - lastAccessTime < this.ttlMs) continue;
|
|
119
|
-
if (session.isProcessing() || this.shouldProtect?.(id)) {
|
|
120
|
-
result.skipped++;
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
this.evict(id, session);
|
|
124
|
-
result.ttlEvicted++;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Phase 2: LRU eviction — if still over capacity, evict least-recently-used.
|
|
128
|
-
if (this.sessions.size > this.maxSessions) {
|
|
129
|
-
const sorted = this.idleSessionsByLru();
|
|
130
|
-
for (const [id, session] of sorted) {
|
|
131
|
-
if (this.sessions.size <= this.maxSessions) break;
|
|
132
|
-
this.evict(id, session);
|
|
133
|
-
result.lruEvicted++;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Phase 3: Memory pressure — if RSS exceeds threshold, evict idle sessions
|
|
138
|
-
// starting from least-recently-used until we're under the threshold or
|
|
139
|
-
// no more idle sessions remain.
|
|
140
|
-
const rss = process.memoryUsage.rss();
|
|
141
|
-
if (rss > this.memoryThresholdBytes) {
|
|
142
|
-
const sorted = this.idleSessionsByLru();
|
|
143
|
-
if (sorted.length > 0) {
|
|
144
|
-
log.warn(
|
|
145
|
-
{ rssBytes: rss, thresholdBytes: this.memoryThresholdBytes, sessionCount: this.sessions.size },
|
|
146
|
-
'Memory pressure detected, evicting idle sessions',
|
|
147
|
-
);
|
|
148
|
-
for (const [id, session] of sorted) {
|
|
149
|
-
if (process.memoryUsage.rss() <= this.memoryThresholdBytes) break;
|
|
150
|
-
this.evict(id, session);
|
|
151
|
-
result.memoryEvicted++;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Clean up stale lastAccess entries for sessions that no longer exist
|
|
157
|
-
// (e.g. removed by clearAllSessions or evictSessionsForReload).
|
|
158
|
-
for (const id of this.lastAccess.keys()) {
|
|
159
|
-
if (!this.sessions.has(id)) {
|
|
160
|
-
this.lastAccess.delete(id);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return result;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** Current number of tracked sessions (for diagnostics). */
|
|
168
|
-
get trackedCount(): number {
|
|
169
|
-
return this.lastAccess.size;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// ── Internals ──────────────────────────────────────────────────────
|
|
173
|
-
|
|
174
|
-
private evict(id: string, session: EvictableSession): void {
|
|
175
|
-
session.dispose();
|
|
176
|
-
this.sessions.delete(id);
|
|
177
|
-
this.lastAccess.delete(id);
|
|
178
|
-
this.onEvict?.(id);
|
|
179
|
-
log.debug({ sessionId: id }, 'Evicted idle session');
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Return idle (non-processing) sessions sorted by last access time
|
|
184
|
-
* ascending (least recently used first).
|
|
185
|
-
*/
|
|
186
|
-
private idleSessionsByLru(): Array<[string, EvictableSession]> {
|
|
187
|
-
const idle: Array<[string, EvictableSession, number]> = [];
|
|
188
|
-
for (const [id, session] of this.sessions) {
|
|
189
|
-
if (session.isProcessing()) continue;
|
|
190
|
-
if (this.shouldProtect?.(id)) continue;
|
|
191
|
-
idle.push([id, session, this.lastAccess.get(id) ?? 0]);
|
|
192
|
-
}
|
|
193
|
-
idle.sort((a, b) => a[2] - b[2]);
|
|
194
|
-
return idle.map(([id, session]) => [id, session]);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
import { v4 as uuid } from 'uuid';
|
|
2
|
-
import type { Message, ContentBlock } from '../providers/types.js';
|
|
3
|
-
import type { ServerMessage } from './ipc-protocol.js';
|
|
4
|
-
import { getQdrantClient } from '../memory/qdrant-client.js';
|
|
5
|
-
import { enqueueMemoryJob } from '../memory/jobs-store.js';
|
|
6
|
-
import * as conversationStore from '../memory/conversation-store.js';
|
|
7
|
-
import { getSummaryFromContextMessage } from '../context/window-manager.js';
|
|
8
|
-
import type { TraceEmitter } from './trace-emitter.js';
|
|
9
|
-
import { getLogger } from '../util/logger.js';
|
|
10
|
-
|
|
11
|
-
const log = getLogger('session-history');
|
|
12
|
-
|
|
13
|
-
// ── Helpers ──────────────────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
function isUndoableUserMessage(message: Message): boolean {
|
|
16
|
-
if (message.role !== 'user') return false;
|
|
17
|
-
if (getSummaryFromContextMessage(message) !== null) return false;
|
|
18
|
-
// A user message is undoable if it contains user-authored content (non-tool_result
|
|
19
|
-
// blocks). Messages that contain ONLY tool_result blocks (e.g. automated tool
|
|
20
|
-
// responses) are not undoable. Messages that have both tool_result and text blocks
|
|
21
|
-
// (e.g. after repairHistory merges a tool_result turn with a user prompt) are still
|
|
22
|
-
// undoable because they contain real user content.
|
|
23
|
-
const hasNonToolResultContent = message.content.some(
|
|
24
|
-
(block) => block.type !== 'tool_result',
|
|
25
|
-
);
|
|
26
|
-
if (!hasNonToolResultContent) return false;
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function findLastUndoableUserMessageIndex(messages: Message[]): number {
|
|
31
|
-
for (let i = messages.length - 1; i >= 0; i--) {
|
|
32
|
-
if (isUndoableUserMessage(messages[i])) {
|
|
33
|
-
return i;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return -1;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// ── Qdrant Vector Cleanup ────────────────────────────────────────────
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Delete Qdrant vector entries for the given segment and item IDs.
|
|
43
|
-
* Individual deletion failures are logged and enqueued as retry jobs
|
|
44
|
-
* to prevent silently orphaned vectors.
|
|
45
|
-
*/
|
|
46
|
-
export async function cleanupQdrantVectors(
|
|
47
|
-
conversationId: string,
|
|
48
|
-
segmentIds: string[],
|
|
49
|
-
orphanedItemIds: string[],
|
|
50
|
-
): Promise<void> {
|
|
51
|
-
let qdrant: ReturnType<typeof getQdrantClient>;
|
|
52
|
-
try {
|
|
53
|
-
qdrant = getQdrantClient();
|
|
54
|
-
} catch {
|
|
55
|
-
return; // Qdrant not initialized — nothing to clean up.
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (segmentIds.length === 0 && orphanedItemIds.length === 0) return;
|
|
59
|
-
|
|
60
|
-
const targets: Array<{ targetType: string; targetId: string }> = [];
|
|
61
|
-
for (const segId of segmentIds) {
|
|
62
|
-
targets.push({ targetType: 'segment', targetId: segId });
|
|
63
|
-
}
|
|
64
|
-
for (const itemId of orphanedItemIds) {
|
|
65
|
-
targets.push({ targetType: 'item', targetId: itemId });
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const results = await Promise.allSettled(
|
|
69
|
-
targets.map((t) => qdrant.deleteByTarget(t.targetType, t.targetId)),
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
let succeeded = 0;
|
|
73
|
-
let failed = 0;
|
|
74
|
-
for (let i = 0; i < results.length; i++) {
|
|
75
|
-
const result = results[i];
|
|
76
|
-
if (result.status === 'fulfilled') {
|
|
77
|
-
succeeded++;
|
|
78
|
-
} else {
|
|
79
|
-
failed++;
|
|
80
|
-
const { targetType, targetId } = targets[i];
|
|
81
|
-
log.warn(
|
|
82
|
-
{ err: result.reason, targetType, targetId, conversationId },
|
|
83
|
-
'Qdrant vector deletion failed, enqueuing retry job',
|
|
84
|
-
);
|
|
85
|
-
enqueueMemoryJob('delete_qdrant_vectors', { targetType, targetId });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (succeeded > 0) {
|
|
90
|
-
log.info(
|
|
91
|
-
{ conversationId, succeeded, failed, segments: segmentIds.length, items: orphanedItemIds.length },
|
|
92
|
-
'Cleaned up Qdrant vectors after regenerate',
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ── Consolidation ────────────────────────────────────────────────────
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Consolidate consecutive assistant messages created during an agent loop.
|
|
101
|
-
* After the loop completes, merge all assistant messages that came after
|
|
102
|
-
* the user message into a single message, and delete the internal tool_result
|
|
103
|
-
* user messages. This ensures the database matches what the client sees
|
|
104
|
-
* during streaming (one consolidated message per user request).
|
|
105
|
-
*/
|
|
106
|
-
export function consolidateAssistantMessages(conversationId: string, userMessageId: string): void {
|
|
107
|
-
const allMessages = conversationStore.getMessages(conversationId);
|
|
108
|
-
const userMsgIndex = allMessages.findIndex((m) => m.id === userMessageId);
|
|
109
|
-
if (userMsgIndex === -1) return;
|
|
110
|
-
|
|
111
|
-
const messagesToConsolidate: typeof allMessages = [];
|
|
112
|
-
const internalToolResultMessages: typeof allMessages = [];
|
|
113
|
-
const messagesToDelete: string[] = [];
|
|
114
|
-
|
|
115
|
-
// Collect all assistant messages and internal tool_result user messages after this user message
|
|
116
|
-
for (let i = userMsgIndex + 1; i < allMessages.length; i++) {
|
|
117
|
-
const msg = allMessages[i];
|
|
118
|
-
if (msg.role === 'assistant') {
|
|
119
|
-
messagesToConsolidate.push(msg);
|
|
120
|
-
} else if (msg.role === 'user') {
|
|
121
|
-
// Check if this is an internal tool_result message (no text, only tool_result blocks)
|
|
122
|
-
try {
|
|
123
|
-
const content = JSON.parse(msg.content);
|
|
124
|
-
const isToolResultOnly = Array.isArray(content) &&
|
|
125
|
-
content.every((block) => block.type === 'tool_result') &&
|
|
126
|
-
content.length > 0;
|
|
127
|
-
if (isToolResultOnly) {
|
|
128
|
-
internalToolResultMessages.push(msg);
|
|
129
|
-
messagesToDelete.push(msg.id);
|
|
130
|
-
} else {
|
|
131
|
-
// Hit a real user message, stop consolidating
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
} catch {
|
|
135
|
-
// Can't parse, assume it's a real user message
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Only consolidate if there are multiple assistant messages
|
|
142
|
-
if (messagesToConsolidate.length <= 1) {
|
|
143
|
-
// Still delete internal tool_result messages even if only one assistant message,
|
|
144
|
-
// and collect IDs for vector cleanup
|
|
145
|
-
const allSegmentIds: string[] = [];
|
|
146
|
-
const allOrphanedItemIds: string[] = [];
|
|
147
|
-
for (const id of messagesToDelete) {
|
|
148
|
-
const deleted = conversationStore.deleteMessageById(id);
|
|
149
|
-
allSegmentIds.push(...deleted.segmentIds);
|
|
150
|
-
allOrphanedItemIds.push(...deleted.orphanedItemIds);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Clean up Qdrant vectors (fire-and-forget)
|
|
154
|
-
if (allSegmentIds.length > 0 || allOrphanedItemIds.length > 0) {
|
|
155
|
-
cleanupQdrantVectors(conversationId, allSegmentIds, allOrphanedItemIds).catch((err) => {
|
|
156
|
-
log.warn({ err, conversationId }, 'Qdrant cleanup after consolidation failed (non-fatal)');
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
log.info({
|
|
163
|
-
conversationId,
|
|
164
|
-
userMessageId,
|
|
165
|
-
assistantCount: messagesToConsolidate.length,
|
|
166
|
-
internalMessageCount: messagesToDelete.length,
|
|
167
|
-
}, 'Consolidating assistant messages');
|
|
168
|
-
|
|
169
|
-
// Merge all content blocks from all assistant messages AND tool_result blocks from internal user messages
|
|
170
|
-
const consolidatedContent: ContentBlock[] = [];
|
|
171
|
-
for (const msg of messagesToConsolidate) {
|
|
172
|
-
try {
|
|
173
|
-
const content = JSON.parse(msg.content);
|
|
174
|
-
if (Array.isArray(content)) {
|
|
175
|
-
const toolUseBlocks = content.filter((b: Record<string, unknown>) => b.type === 'tool_use');
|
|
176
|
-
log.info({ messageId: msg.id, blockCount: content.length, toolUseCount: toolUseBlocks.length }, 'Consolidating assistant message content');
|
|
177
|
-
consolidatedContent.push(...content);
|
|
178
|
-
}
|
|
179
|
-
} catch (err) {
|
|
180
|
-
log.warn({ err, messageId: msg.id }, 'Failed to parse message content during consolidation');
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Also merge tool_result blocks from internal user messages
|
|
185
|
-
for (const msg of internalToolResultMessages) {
|
|
186
|
-
try {
|
|
187
|
-
const content = JSON.parse(msg.content);
|
|
188
|
-
if (Array.isArray(content)) {
|
|
189
|
-
const toolResultBlocks = content.filter((b: Record<string, unknown>) => b.type === 'tool_result');
|
|
190
|
-
log.info({ messageId: msg.id, blockCount: content.length, toolResultCount: toolResultBlocks.length }, 'Merging tool_result blocks from internal user message');
|
|
191
|
-
consolidatedContent.push(...content);
|
|
192
|
-
}
|
|
193
|
-
} catch (err) {
|
|
194
|
-
log.warn({ err, messageId: msg.id }, 'Failed to parse internal tool_result message during consolidation');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
const toolUseBlocksInConsolidated = consolidatedContent.filter((b) => b.type === 'tool_use').length;
|
|
199
|
-
const toolResultBlocksInConsolidated = consolidatedContent.filter((b) => b.type === 'tool_result').length;
|
|
200
|
-
log.info({ totalBlocks: consolidatedContent.length, toolUseBlocks: toolUseBlocksInConsolidated, toolResultBlocks: toolResultBlocksInConsolidated }, 'Final consolidated content');
|
|
201
|
-
|
|
202
|
-
// Update the first assistant message with all content
|
|
203
|
-
const firstAssistantMsg = messagesToConsolidate[0];
|
|
204
|
-
conversationStore.updateMessageContent(firstAssistantMsg.id, JSON.stringify(consolidatedContent));
|
|
205
|
-
|
|
206
|
-
// Re-link attachments from messages about to be deleted to the consolidated
|
|
207
|
-
// message. Without this, ON DELETE CASCADE on message_attachments destroys
|
|
208
|
-
// the attachment links, and deleteOrphanAttachments removes the data.
|
|
209
|
-
const messageIdsToDelete = [
|
|
210
|
-
...messagesToConsolidate.slice(1).map((m) => m.id),
|
|
211
|
-
...messagesToDelete,
|
|
212
|
-
];
|
|
213
|
-
if (messageIdsToDelete.length > 0) {
|
|
214
|
-
const relinked = conversationStore.relinkAttachments(messageIdsToDelete, firstAssistantMsg.id);
|
|
215
|
-
if (relinked > 0) {
|
|
216
|
-
log.info({ relinked, targetMessageId: firstAssistantMsg.id }, 'Re-linked attachments to consolidated message');
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Delete the other assistant messages and internal tool_result messages,
|
|
221
|
-
// and collect IDs for vector cleanup
|
|
222
|
-
const allSegmentIds: string[] = [];
|
|
223
|
-
const allOrphanedItemIds: string[] = [];
|
|
224
|
-
for (let i = 1; i < messagesToConsolidate.length; i++) {
|
|
225
|
-
const deleted = conversationStore.deleteMessageById(messagesToConsolidate[i].id);
|
|
226
|
-
allSegmentIds.push(...deleted.segmentIds);
|
|
227
|
-
allOrphanedItemIds.push(...deleted.orphanedItemIds);
|
|
228
|
-
}
|
|
229
|
-
for (const id of messagesToDelete) {
|
|
230
|
-
const deleted = conversationStore.deleteMessageById(id);
|
|
231
|
-
allSegmentIds.push(...deleted.segmentIds);
|
|
232
|
-
allOrphanedItemIds.push(...deleted.orphanedItemIds);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Clean up Qdrant vectors (fire-and-forget)
|
|
236
|
-
if (allSegmentIds.length > 0 || allOrphanedItemIds.length > 0) {
|
|
237
|
-
cleanupQdrantVectors(conversationId, allSegmentIds, allOrphanedItemIds).catch((err) => {
|
|
238
|
-
log.warn({ err, conversationId }, 'Qdrant cleanup after consolidation failed (non-fatal)');
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
log.info({
|
|
243
|
-
conversationId,
|
|
244
|
-
consolidatedMessageId: firstAssistantMsg.id,
|
|
245
|
-
deletedCount: messagesToConsolidate.length - 1 + messagesToDelete.length,
|
|
246
|
-
}, 'Assistant messages consolidated');
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// ── Undo ─────────────────────────────────────────────────────────────
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Subset of Session state that undo/regenerate need access to.
|
|
253
|
-
*/
|
|
254
|
-
export interface HistorySessionContext {
|
|
255
|
-
readonly conversationId: string;
|
|
256
|
-
readonly traceEmitter: TraceEmitter;
|
|
257
|
-
messages: Message[];
|
|
258
|
-
processing: boolean;
|
|
259
|
-
abortController: AbortController | null;
|
|
260
|
-
currentRequestId?: string;
|
|
261
|
-
runAgentLoop(
|
|
262
|
-
content: string,
|
|
263
|
-
userMessageId: string,
|
|
264
|
-
onEvent: (msg: ServerMessage) => void,
|
|
265
|
-
options?: { skipPreMessageRollback?: boolean },
|
|
266
|
-
): Promise<void>;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Remove the last user+assistant exchange from memory and DB.
|
|
271
|
-
* Returns the number of messages removed.
|
|
272
|
-
*/
|
|
273
|
-
export function undo(session: HistorySessionContext): number {
|
|
274
|
-
if (session.processing) return 0;
|
|
275
|
-
|
|
276
|
-
const lastUserIdx = findLastUndoableUserMessageIndex(session.messages);
|
|
277
|
-
if (lastUserIdx === -1) return 0;
|
|
278
|
-
|
|
279
|
-
const removed = session.messages.length - lastUserIdx;
|
|
280
|
-
session.messages = session.messages.slice(0, lastUserIdx);
|
|
281
|
-
|
|
282
|
-
// Also remove from DB. We may need to call deleteLastExchange multiple
|
|
283
|
-
// times because the DB stores tool_result user messages as separate rows.
|
|
284
|
-
// The in-memory findLastUndoableUserMessageIndex skips these, but the DB's
|
|
285
|
-
// deleteLastExchange only finds the last role='user' row — which may be a
|
|
286
|
-
// tool_result message, leaving the real user message orphaned.
|
|
287
|
-
//
|
|
288
|
-
// Strategy: peel back any trailing tool_result exchanges first, then
|
|
289
|
-
// delete the real user message exchange only if tool_result rows were
|
|
290
|
-
// actually encountered. The do-while handles the case where the last DB
|
|
291
|
-
// exchange is a tool_result row; the flag ensures we only issue the extra
|
|
292
|
-
// deleteLastExchange when the loop peeled back tool_result messages.
|
|
293
|
-
let hadToolResult = false;
|
|
294
|
-
do {
|
|
295
|
-
conversationStore.deleteLastExchange(session.conversationId);
|
|
296
|
-
if (conversationStore.isLastUserMessageToolResult(session.conversationId)) {
|
|
297
|
-
hadToolResult = true;
|
|
298
|
-
} else {
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
} while (true);
|
|
302
|
-
if (hadToolResult) {
|
|
303
|
-
conversationStore.deleteLastExchange(session.conversationId);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
return removed;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// ── Regenerate ───────────────────────────────────────────────────────
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Regenerate the last assistant response: remove the assistant's reply
|
|
313
|
-
* (and any intermediate tool_result messages) from memory, DB, and
|
|
314
|
-
* Qdrant, then re-run the agent loop with the same user message.
|
|
315
|
-
*/
|
|
316
|
-
export async function regenerate(
|
|
317
|
-
session: HistorySessionContext,
|
|
318
|
-
onEvent: (msg: ServerMessage) => void,
|
|
319
|
-
requestId?: string,
|
|
320
|
-
): Promise<void> {
|
|
321
|
-
if (session.processing) {
|
|
322
|
-
onEvent({ type: 'error', message: 'Cannot regenerate while processing' });
|
|
323
|
-
if (requestId) {
|
|
324
|
-
session.traceEmitter.emit('request_error', 'Cannot regenerate while processing', {
|
|
325
|
-
requestId,
|
|
326
|
-
status: 'error',
|
|
327
|
-
attributes: { reason: 'already_processing' },
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Find the last undoable user message — everything after it is the
|
|
334
|
-
// assistant's exchange that we want to regenerate.
|
|
335
|
-
const lastUserIdx = findLastUndoableUserMessageIndex(session.messages);
|
|
336
|
-
if (lastUserIdx === -1) {
|
|
337
|
-
onEvent({ type: 'error', message: 'No messages to regenerate' });
|
|
338
|
-
if (requestId) {
|
|
339
|
-
session.traceEmitter.emit('request_error', 'No messages to regenerate', {
|
|
340
|
-
requestId,
|
|
341
|
-
status: 'error',
|
|
342
|
-
attributes: { reason: 'no_messages' },
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// There must be at least one message after the user message (the assistant reply).
|
|
349
|
-
if (lastUserIdx >= session.messages.length - 1) {
|
|
350
|
-
onEvent({ type: 'error', message: 'No assistant response to regenerate' });
|
|
351
|
-
if (requestId) {
|
|
352
|
-
session.traceEmitter.emit('request_error', 'No assistant response to regenerate', {
|
|
353
|
-
requestId,
|
|
354
|
-
status: 'error',
|
|
355
|
-
attributes: { reason: 'no_assistant_response' },
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
// Remove the assistant's exchange from in-memory history (keep the user message).
|
|
362
|
-
session.messages = session.messages.slice(0, lastUserIdx + 1);
|
|
363
|
-
|
|
364
|
-
// Find DB message IDs to delete: get all messages from the DB, then
|
|
365
|
-
// identify the ones that come after the last user message.
|
|
366
|
-
const dbMessages = conversationStore.getMessages(session.conversationId);
|
|
367
|
-
|
|
368
|
-
// Walk backwards to find the last real (non-tool_result) user message in the DB.
|
|
369
|
-
let dbUserMsgIdx = -1;
|
|
370
|
-
for (let i = dbMessages.length - 1; i >= 0; i--) {
|
|
371
|
-
if (dbMessages[i].role !== 'user') continue;
|
|
372
|
-
try {
|
|
373
|
-
const parsed = JSON.parse(dbMessages[i].content);
|
|
374
|
-
if (Array.isArray(parsed) && parsed.length > 0 && parsed.every((b: Record<string, unknown>) => b.type === 'tool_result')) {
|
|
375
|
-
continue; // Skip tool_result-only user messages
|
|
376
|
-
}
|
|
377
|
-
} catch { /* plain text = real user message */ }
|
|
378
|
-
dbUserMsgIdx = i;
|
|
379
|
-
break;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
if (dbUserMsgIdx === -1) {
|
|
383
|
-
onEvent({ type: 'error', message: 'No user message found in DB' });
|
|
384
|
-
if (requestId) {
|
|
385
|
-
session.traceEmitter.emit('request_error', 'No user message found in DB', {
|
|
386
|
-
requestId,
|
|
387
|
-
status: 'error',
|
|
388
|
-
attributes: { reason: 'no_db_user_message' },
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// Capture the existing DB user message ID so we can pass it to
|
|
395
|
-
// runAgentLoop without re-persisting the user message.
|
|
396
|
-
const existingUserMessageId = dbMessages[dbUserMsgIdx].id;
|
|
397
|
-
|
|
398
|
-
// Everything after the user message needs to be deleted.
|
|
399
|
-
const messagesToDelete = dbMessages.slice(dbUserMsgIdx + 1);
|
|
400
|
-
|
|
401
|
-
// Delete each message via deleteMessageById and collect IDs for Qdrant cleanup.
|
|
402
|
-
const allSegmentIds: string[] = [];
|
|
403
|
-
const allOrphanedItemIds: string[] = [];
|
|
404
|
-
for (const msg of messagesToDelete) {
|
|
405
|
-
const deleted = conversationStore.deleteMessageById(msg.id);
|
|
406
|
-
allSegmentIds.push(...deleted.segmentIds);
|
|
407
|
-
allOrphanedItemIds.push(...deleted.orphanedItemIds);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
// Clean up Qdrant vectors (fire-and-forget).
|
|
411
|
-
cleanupQdrantVectors(session.conversationId, allSegmentIds, allOrphanedItemIds).catch((err) => {
|
|
412
|
-
log.warn({ err, conversationId: session.conversationId }, 'Qdrant cleanup after regenerate failed (non-fatal)');
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
// Re-extract the user message content for the agent loop.
|
|
416
|
-
// Use all content blocks (text, image, file) so attachments are
|
|
417
|
-
// preserved — not just text blocks.
|
|
418
|
-
const userMessage = session.messages[lastUserIdx];
|
|
419
|
-
const textBlocks = userMessage.content.filter(
|
|
420
|
-
(b) => b.type === 'text',
|
|
421
|
-
);
|
|
422
|
-
const content = textBlocks
|
|
423
|
-
.map((b) => (b as { type: 'text'; text: string }).text)
|
|
424
|
-
.join('');
|
|
425
|
-
|
|
426
|
-
// Notify client that the old response has been removed.
|
|
427
|
-
onEvent({ type: 'undo_complete', removedCount: messagesToDelete.length, sessionId: session.conversationId });
|
|
428
|
-
|
|
429
|
-
// Set up processing state manually and call runAgentLoop directly,
|
|
430
|
-
// bypassing processMessage to avoid duplicating the user message
|
|
431
|
-
// in both this.messages and the DB.
|
|
432
|
-
session.processing = true;
|
|
433
|
-
session.abortController = new AbortController();
|
|
434
|
-
session.currentRequestId = requestId ?? uuid();
|
|
435
|
-
|
|
436
|
-
await session.runAgentLoop(content, existingUserMessageId, onEvent, { skipPreMessageRollback: true });
|
|
437
|
-
}
|