@vellumai/assistant 0.4.44 → 0.4.45
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/.prettierignore +4 -0
- package/ARCHITECTURE.md +34 -31
- package/README.md +4 -4
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -197
- package/docs/architecture/keychain-broker.md +1 -1
- package/docs/architecture/memory.md +2 -2
- package/docs/architecture/scheduling.md +1 -1
- package/docs/architecture/security.md +11 -11
- package/docs/error-handling.md +1 -1
- package/docs/trusted-contact-access.md +3 -3
- package/drizzle/meta/0000_snapshot.json +34 -100
- package/drizzle/meta/_journal.json +1 -1
- package/drizzle.config.ts +4 -4
- package/package.json +3 -2
- package/scripts/capture-x-graphql.ts +237 -141
- package/scripts/generate-bundled-tool-registry.ts +223 -0
- package/src/__tests__/access-request-decision.test.ts +0 -1
- package/src/__tests__/actor-token-service.test.ts +23 -24
- package/src/__tests__/agent-loop.test.ts +0 -131
- package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
- package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +11 -1
- package/src/__tests__/asset-materialize-tool.test.ts +0 -1
- package/src/__tests__/asset-search-tool.test.ts +0 -1
- package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
- package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
- package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
- package/src/__tests__/attachments-store.test.ts +0 -1
- package/src/__tests__/avatar-e2e.test.ts +74 -115
- package/src/__tests__/avatar-router.test.ts +25 -62
- package/src/__tests__/browser-manager.test.ts +24 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
- package/src/__tests__/browser-skill-endstate.test.ts +8 -11
- package/src/__tests__/btw-routes.test.ts +326 -0
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/call-conversation-messages.test.ts +0 -1
- package/src/__tests__/call-domain.test.ts +0 -1
- package/src/__tests__/call-pointer-messages.test.ts +0 -1
- package/src/__tests__/call-recovery.test.ts +0 -1
- package/src/__tests__/call-routes-http.test.ts +0 -1
- package/src/__tests__/call-store.test.ts +0 -1
- package/src/__tests__/canonical-guardian-store.test.ts +0 -1
- package/src/__tests__/channel-approval-routes.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +0 -1
- package/src/__tests__/channel-guardian.test.ts +5 -7
- package/src/__tests__/channel-retry-sweep.test.ts +0 -1
- package/src/__tests__/checker.test.ts +4 -11
- package/src/__tests__/compaction.benchmark.test.ts +16 -14
- package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
- package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
- package/src/__tests__/computer-use-tools.test.ts +35 -31
- package/src/__tests__/config-schema.test.ts +11 -15
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/conflict-store.test.ts +0 -1
- package/src/__tests__/connection-policy.test.ts +4 -7
- package/src/__tests__/contacts-tools.test.ts +0 -1
- package/src/__tests__/context-memory-e2e.test.ts +2 -4
- package/src/__tests__/context-overflow-reducer.test.ts +2 -4
- package/src/__tests__/context-window-manager.test.ts +147 -60
- package/src/__tests__/contradiction-checker.test.ts +0 -1
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
- package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
- package/src/__tests__/conversation-store.test.ts +0 -1
- package/src/__tests__/conversation-unread-route.test.ts +1 -2
- package/src/__tests__/credential-security-invariants.test.ts +7 -8
- package/src/__tests__/cross-provider-web-search.test.ts +353 -0
- package/src/__tests__/daemon-assistant-events.test.ts +6 -7
- package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
- package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
- package/src/__tests__/diagnostics-export.test.ts +189 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
- package/src/__tests__/entity-extractor.test.ts +0 -1
- package/src/__tests__/entity-search.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +2 -4
- package/src/__tests__/file-read-tool.test.ts +86 -0
- package/src/__tests__/followup-tools.test.ts +0 -1
- package/src/__tests__/frontmatter.test.ts +77 -34
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/gateway-only-guard.test.ts +1 -1
- package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
- package/src/__tests__/guardian-action-store.test.ts +0 -1
- package/src/__tests__/guardian-action-sweep.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -2
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-outbound-http.test.ts +0 -1
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
- package/src/__tests__/guardian-routing-state.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
- package/src/__tests__/host-bash-proxy.test.ts +335 -0
- package/src/__tests__/host-file-proxy.test.ts +374 -0
- package/src/__tests__/host-shell-tool.test.ts +147 -1
- package/src/__tests__/http-user-message-parity.test.ts +361 -0
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
- package/src/__tests__/integration-status.test.ts +3 -8
- package/src/__tests__/intent-routing.test.ts +7 -46
- package/src/__tests__/invite-redemption-service.test.ts +0 -1
- package/src/__tests__/invite-routes-http.test.ts +0 -1
- package/src/__tests__/llm-usage-store.test.ts +0 -1
- package/src/__tests__/managed-avatar-client.test.ts +101 -55
- package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
- package/src/__tests__/managed-store.test.ts +94 -21
- package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
- package/src/__tests__/memory-recall-quality.test.ts +0 -1
- package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
- package/src/__tests__/memory-regressions.test.ts +0 -1
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
- package/src/__tests__/messaging-send-tool.test.ts +35 -0
- package/src/__tests__/messaging-skill-split.test.ts +138 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
- package/src/__tests__/migration-export-http.test.ts +2 -3
- package/src/__tests__/migration-import-commit-http.test.ts +1 -2
- package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
- package/src/__tests__/migration-validate-http.test.ts +1 -2
- package/src/__tests__/native-web-search.test.ts +475 -0
- package/src/__tests__/navigate-settings-tab.test.ts +84 -0
- package/src/__tests__/non-member-access-request.test.ts +0 -1
- package/src/__tests__/notification-broadcaster.test.ts +15 -15
- package/src/__tests__/notification-decision-strategy.test.ts +6 -6
- package/src/__tests__/notification-deep-link.test.ts +7 -7
- package/src/__tests__/notification-guardian-path.test.ts +2 -3
- package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
- package/src/__tests__/notification-thread-candidates.test.ts +4 -4
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/playbook-execution.test.ts +0 -1
- package/src/__tests__/playbook-tools.test.ts +0 -1
- package/src/__tests__/profile-compiler.test.ts +0 -1
- package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
- package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
- package/src/__tests__/recording-handler.test.ts +30 -94
- package/src/__tests__/registry.test.ts +28 -35
- package/src/__tests__/relay-server.test.ts +0 -1
- package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +0 -1
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
- package/src/__tests__/schedule-store.test.ts +441 -1
- package/src/__tests__/schedule-tools.test.ts +468 -7
- package/src/__tests__/scheduler-recurrence.test.ts +196 -23
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
- package/src/__tests__/secret-response-routing.test.ts +4 -1
- package/src/__tests__/send-endpoint-busy.test.ts +14 -2
- package/src/__tests__/send-notification-tool.test.ts +0 -7
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/server-history-render.test.ts +1 -2
- package/src/__tests__/session-abort-tool-results.test.ts +0 -1
- package/src/__tests__/session-agent-loop.test.ts +46 -6
- package/src/__tests__/session-confirmation-signals.test.ts +0 -1
- package/src/__tests__/session-conflict-gate.test.ts +2 -6
- package/src/__tests__/session-error.test.ts +5 -14
- package/src/__tests__/session-init.benchmark.test.ts +3 -5
- package/src/__tests__/session-load-history-repair.test.ts +0 -1
- package/src/__tests__/session-media-retry.test.ts +12 -74
- package/src/__tests__/session-pre-run-repair.test.ts +0 -1
- package/src/__tests__/session-profile-injection.test.ts +2 -6
- package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
- package/src/__tests__/session-queue.test.ts +94 -139
- package/src/__tests__/session-skill-tools.test.ts +115 -115
- package/src/__tests__/session-slash-known.test.ts +0 -1
- package/src/__tests__/session-slash-queue.test.ts +0 -1
- package/src/__tests__/session-slash-unknown.test.ts +0 -1
- package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
- package/src/__tests__/session-usage.test.ts +0 -1
- package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
- package/src/__tests__/session-workspace-injection.test.ts +2 -6
- package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
- package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
- package/src/__tests__/skill-feature-flags.test.ts +125 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
- package/src/__tests__/skill-load-tool.test.ts +194 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
- package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
- package/src/__tests__/skills.test.ts +14 -53
- package/src/__tests__/slack-channel-config.test.ts +0 -1
- package/src/__tests__/slack-inbound-verification.test.ts +0 -1
- package/src/__tests__/slack-skill.test.ts +1 -1
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +4 -3
- package/src/__tests__/task-compiler.test.ts +0 -1
- package/src/__tests__/task-management-tools.test.ts +0 -1
- package/src/__tests__/task-memory-cleanup.test.ts +0 -1
- package/src/__tests__/task-runner.test.ts +0 -1
- package/src/__tests__/task-scheduler.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -1
- package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
- package/src/__tests__/thread-seed-composer.test.ts +5 -5
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +8 -86
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/tool-notification-listener.test.ts +1 -1
- package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
- package/src/__tests__/trust-store.test.ts +80 -4
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/trusted-contact-verification.test.ts +0 -1
- package/src/__tests__/twilio-provider.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
- package/src/__tests__/update-bulletin.test.ts +0 -1
- package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
- package/src/__tests__/usage-routes.test.ts +0 -1
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
- package/src/__tests__/voice-invite-redemption.test.ts +0 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/__tests__/voice-session-bridge.test.ts +9 -1
- package/src/__tests__/web-fetch.test.ts +57 -0
- package/src/__tests__/workspace-git-service.test.ts +5 -14
- package/src/__tests__/workspace-policy.test.ts +0 -1
- package/src/agent/loop.ts +22 -34
- package/src/bundler/bundle-signer.ts +4 -4
- package/src/calls/call-controller.ts +1 -1
- package/src/calls/relay-server.ts +1 -1
- package/src/calls/twilio-rest.ts +1 -1
- package/src/calls/voice-session-bridge.ts +3 -1
- package/src/cli/__tests__/notifications.test.ts +3 -4
- package/src/cli/commands/map.ts +2 -6
- package/src/cli/commands/mcp.ts +73 -15
- package/src/cli/commands/notifications.ts +4 -4
- package/src/cli/commands/sessions.ts +9 -1
- package/src/cli/commands/skills.ts +6 -10
- package/src/cli/http-client.ts +2 -3
- package/src/cli/main-screen.tsx +10 -10
- package/src/cli/program.ts +0 -4
- package/src/cli/reference.ts +0 -2
- package/src/cli.ts +15 -9
- package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
- package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
- package/src/config/bundled-skills/browser/SKILL.md +6 -1
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
- package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
- package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
- package/src/config/bundled-skills/contacts/SKILL.md +10 -1
- package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
- package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
- package/src/config/bundled-skills/document/SKILL.md +4 -1
- package/src/config/bundled-skills/doordash/SKILL.md +8 -1
- package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
- package/src/config/bundled-skills/followups/SKILL.md +4 -1
- package/src/config/bundled-skills/gmail/SKILL.md +180 -0
- package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
- package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
- package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
- package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
- package/src/config/bundled-skills/messaging/SKILL.md +23 -139
- package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
- package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
- package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
- package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
- package/src/config/bundled-skills/notifications/SKILL.md +5 -1
- package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
- package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
- package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
- package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
- package/src/config/bundled-skills/schedule/SKILL.md +70 -9
- package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
- package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
- package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
- package/src/config/bundled-skills/sequences/SKILL.md +47 -0
- package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
- package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
- package/src/config/bundled-skills/settings/SKILL.md +12 -0
- package/src/config/bundled-skills/settings/TOOLS.json +112 -0
- package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
- package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
- package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
- package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
- package/src/config/bundled-skills/slack/SKILL.md +5 -1
- package/src/config/bundled-skills/subagent/SKILL.md +4 -1
- package/src/config/bundled-skills/tasks/SKILL.md +5 -2
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
- package/src/config/bundled-skills/watcher/SKILL.md +4 -1
- package/src/config/bundled-tool-registry.ts +118 -107
- package/src/config/env.ts +5 -2
- package/src/config/feature-flag-registry.json +25 -9
- package/src/config/loader.ts +10 -2
- package/src/config/schema.ts +19 -16
- package/src/config/schemas/inference.ts +12 -22
- package/src/config/schemas/memory-storage.ts +19 -1
- package/src/config/schemas/platform.ts +0 -16
- package/src/config/skill-state.ts +11 -8
- package/src/config/skills.ts +83 -32
- package/src/context/token-estimator.ts +11 -0
- package/src/context/window-manager.ts +180 -151
- package/src/daemon/computer-use-session.ts +11 -43
- package/src/daemon/daemon-control.ts +4 -1
- package/src/daemon/handlers/config-channels.ts +5 -9
- package/src/daemon/handlers/config-ingress.ts +0 -4
- package/src/daemon/handlers/config-model.ts +7 -13
- package/src/daemon/handlers/config-telegram.ts +4 -8
- package/src/daemon/handlers/config-voice.ts +2 -5
- package/src/daemon/handlers/dictation.ts +2 -12
- package/src/daemon/handlers/identity.ts +0 -105
- package/src/daemon/handlers/recording.ts +3 -23
- package/src/daemon/handlers/session-history.ts +1 -1
- package/src/daemon/handlers/sessions.ts +53 -72
- package/src/daemon/handlers/shared.ts +7 -28
- package/src/daemon/handlers/skills.ts +31 -27
- package/src/daemon/host-bash-proxy.ts +148 -0
- package/src/daemon/host-file-proxy.ts +135 -0
- package/src/daemon/lifecycle.ts +49 -24
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/browser.ts +1 -1
- package/src/daemon/message-types/computer-use.ts +1 -4
- package/src/daemon/message-types/guardian-actions.ts +1 -1
- package/src/daemon/message-types/host-bash.ts +18 -0
- package/src/daemon/message-types/host-file.ts +44 -0
- package/src/daemon/message-types/integrations.ts +1 -67
- package/src/daemon/message-types/messages.ts +15 -0
- package/src/daemon/message-types/schedules.ts +11 -27
- package/src/daemon/message-types/sessions.ts +2 -1
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/ride-shotgun-handler.ts +2 -42
- package/src/daemon/server.ts +43 -10
- package/src/daemon/session-agent-loop-handlers.ts +48 -7
- package/src/daemon/session-agent-loop.ts +97 -66
- package/src/daemon/session-attachments.ts +1 -1
- package/src/daemon/session-error.ts +17 -16
- package/src/daemon/session-lifecycle.ts +20 -1
- package/src/daemon/session-media-retry.ts +1 -15
- package/src/daemon/session-messaging.ts +14 -6
- package/src/daemon/session-process.ts +36 -7
- package/src/daemon/session-queue-manager.ts +62 -103
- package/src/daemon/session-runtime-assembly.ts +27 -0
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +19 -97
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +77 -13
- package/src/errors.ts +0 -2
- package/src/export/formatter.ts +6 -0
- package/src/mcp/mcp-oauth-provider.ts +1 -3
- package/src/media/avatar-router.ts +20 -28
- package/src/media/avatar-types.ts +7 -14
- package/src/media/managed-avatar-client.ts +70 -34
- package/src/memory/conversation-title-service.ts +1 -2
- package/src/memory/db-init.ts +16 -0
- package/src/memory/embedding-backend.ts +129 -27
- package/src/memory/embedding-gemini.test.ts +256 -0
- package/src/memory/embedding-gemini.ts +47 -13
- package/src/memory/embedding-local.ts +14 -2
- package/src/memory/embedding-ollama.ts +15 -2
- package/src/memory/embedding-openai.ts +15 -2
- package/src/memory/embedding-types.test.ts +116 -0
- package/src/memory/embedding-types.ts +61 -0
- package/src/memory/fingerprint.ts +1 -1
- package/src/memory/indexer.ts +25 -1
- package/src/memory/job-handlers/embedding.test.ts +258 -0
- package/src/memory/job-handlers/embedding.ts +81 -1
- package/src/memory/job-handlers/index-maintenance.ts +35 -1
- package/src/memory/job-handlers/media-processing.ts +11 -1
- package/src/memory/job-utils.ts +21 -6
- package/src/memory/jobs-store.ts +5 -1
- package/src/memory/jobs-worker.ts +8 -0
- package/src/memory/message-content.ts +66 -0
- package/src/memory/migrations/100-core-tables.ts +1 -31
- package/src/memory/migrations/104-core-indexes.ts +0 -11
- package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
- package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
- package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
- package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
- package/src/memory/migrations/index.ts +4 -0
- package/src/memory/migrations/registry.ts +19 -0
- package/src/memory/qdrant-client.ts +158 -43
- package/src/memory/retriever.test.ts +0 -1
- package/src/memory/retriever.ts +12 -2
- package/src/memory/schema/infrastructure.ts +5 -29
- package/src/memory/search/formatting.ts +34 -9
- package/src/memory/search/semantic.ts +57 -2
- package/src/memory/search/types.ts +2 -1
- package/src/notifications/AGENTS.md +2 -2
- package/src/notifications/README.md +59 -58
- package/src/notifications/adapters/macos.ts +1 -1
- package/src/notifications/broadcaster.ts +5 -5
- package/src/notifications/copy-composer.ts +1 -1
- package/src/notifications/decision-engine.ts +2 -2
- package/src/notifications/destination-resolver.ts +2 -2
- package/src/notifications/emit-signal.ts +8 -8
- package/src/notifications/signal.ts +1 -1
- package/src/notifications/thread-seed-composer.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +1 -1
- package/src/oauth/token-persistence.ts +1 -1
- package/src/permissions/checker.ts +12 -1
- package/src/permissions/defaults.ts +10 -14
- package/src/permissions/trust-store.ts +37 -0
- package/src/permissions/workspace-policy.ts +0 -1
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
- package/src/prompts/computer-use-prompt.ts +1 -1
- package/src/prompts/system-prompt.ts +29 -30
- package/src/prompts/templates/SOUL.md +1 -2
- package/src/prompts/templates/UPDATES.md +16 -7
- package/src/providers/anthropic/client.ts +87 -33
- package/src/providers/gemini/client.ts +6 -0
- package/src/providers/managed-proxy/constants.ts +5 -0
- package/src/providers/openai/client.ts +15 -0
- package/src/providers/registry.ts +2 -2
- package/src/providers/types.ts +24 -2
- package/src/runtime/AGENTS.md +18 -0
- package/src/runtime/assistant-event-hub.ts +2 -3
- package/src/runtime/assistant-event.ts +4 -4
- package/src/runtime/auth/__tests__/context.test.ts +5 -5
- package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
- package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
- package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
- package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
- package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
- package/src/runtime/auth/__tests__/subject.test.ts +8 -8
- package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
- package/src/runtime/auth/route-policy.ts +8 -4
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +0 -23
- package/src/runtime/auth/types.ts +3 -3
- package/src/runtime/guardian-action-followup-executor.ts +1 -1
- package/src/runtime/guardian-action-grant-minter.ts +1 -1
- package/src/runtime/guardian-action-service.ts +3 -3
- package/src/runtime/http-server.ts +15 -2
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +2 -3
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/btw-routes.ts +155 -0
- package/src/runtime/routes/computer-use-routes.ts +77 -31
- package/src/runtime/routes/conversation-routes.ts +230 -46
- package/src/runtime/routes/diagnostics-routes.ts +63 -29
- package/src/runtime/routes/documents-routes.ts +2 -2
- package/src/runtime/routes/global-search-routes.ts +1 -1
- package/src/runtime/routes/host-bash-routes.ts +83 -0
- package/src/runtime/routes/host-file-routes.ts +79 -0
- package/src/runtime/routes/integrations/slack/share.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +120 -0
- package/src/runtime/routes/mcp-routes.ts +20 -0
- package/src/runtime/routes/migration-routes.ts +3 -3
- package/src/runtime/routes/pairing-routes.ts +1 -1
- package/src/runtime/routes/recording-routes.ts +6 -4
- package/src/runtime/routes/schedule-routes.ts +31 -5
- package/src/runtime/routes/session-management-routes.ts +2 -6
- package/src/runtime/routes/session-query-routes.ts +18 -15
- package/src/runtime/routes/settings-routes.ts +7 -261
- package/src/runtime/routes/skills-routes.ts +7 -6
- package/src/runtime/routes/subagents-routes.ts +4 -10
- package/src/runtime/routes/surface-action-routes.ts +3 -14
- package/src/runtime/routes/surface-content-routes.ts +22 -5
- package/src/runtime/routes/work-items-routes.ts +21 -25
- package/src/runtime/routes/workspace-routes.test.ts +3 -3
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/telegram-streaming-delivery.ts +3 -0
- package/src/runtime/verification-outbound-actions.ts +2 -2
- package/src/schedule/integration-status.ts +0 -6
- package/src/schedule/schedule-store.ts +234 -43
- package/src/schedule/scheduler.ts +73 -74
- package/src/security/oauth2.ts +1 -1
- package/src/sequence/store.ts +12 -2
- package/src/skills/frontmatter.ts +19 -77
- package/src/skills/managed-store.ts +11 -2
- package/src/subagent/manager.ts +5 -3
- package/src/tasks/ephemeral-permissions.ts +3 -5
- package/src/tools/AGENTS.md +0 -1
- package/src/tools/browser/browser-manager.ts +17 -11
- package/src/tools/browser/jit-auth.ts +4 -1
- package/src/tools/claude-code/claude-code.ts +1 -1
- package/src/tools/computer-use/definitions.ts +48 -60
- package/src/tools/document/document-tool.ts +6 -6
- package/src/tools/filesystem/edit.ts +2 -1
- package/src/tools/filesystem/read.ts +20 -2
- package/src/tools/filesystem/write.ts +2 -1
- package/src/tools/host-filesystem/edit.ts +17 -1
- package/src/tools/host-filesystem/read.ts +16 -1
- package/src/tools/host-filesystem/write.ts +15 -1
- package/src/tools/host-terminal/host-shell.ts +24 -0
- package/src/tools/memory/definitions.ts +45 -81
- package/src/tools/memory/handlers.test.ts +0 -1
- package/src/tools/memory/handlers.ts +1 -1
- package/src/tools/memory/register.ts +26 -60
- package/src/tools/network/script-proxy/session-manager.ts +6 -8
- package/src/tools/network/web-fetch.ts +7 -1
- package/src/tools/network/web-search.ts +2 -1
- package/src/tools/registry.ts +23 -0
- package/src/tools/schedule/create.ts +113 -5
- package/src/tools/schedule/list.ts +57 -15
- package/src/tools/schedule/update.ts +73 -3
- package/src/tools/shared/filesystem/image-read.ts +192 -0
- package/src/tools/side-effects.ts +1 -7
- package/src/tools/skills/delete-managed.ts +27 -64
- package/src/tools/skills/execute.ts +54 -0
- package/src/tools/skills/load.ts +127 -5
- package/src/tools/skills/scaffold-managed.ts +93 -172
- package/src/tools/subagent/message.ts +0 -7
- package/src/tools/subagent/spawn.ts +1 -1
- package/src/tools/swarm/delegate.ts +0 -3
- package/src/tools/system/avatar-generator.ts +13 -19
- package/src/tools/system/request-permission.ts +2 -1
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/tool-manifest.ts +41 -47
- package/src/tools/types.ts +6 -2
- package/src/tools/ui-surface/definitions.ts +0 -55
- package/src/util/errors.ts +0 -10
- package/src/workspace/git-service.ts +0 -2
- package/src/__tests__/account-registry.test.ts +0 -258
- package/src/__tests__/email-classifier.test.ts +0 -25
- package/src/__tests__/gmail-integration.test.ts +0 -97
- package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
- package/src/__tests__/recording-intent-fallback.test.ts +0 -199
- package/src/__tests__/recording-intent.test.ts +0 -985
- package/src/__tests__/recording-state-machine.test.ts +0 -1574
- package/src/__tests__/reminder-store.test.ts +0 -350
- package/src/__tests__/reminder.test.ts +0 -337
- package/src/__tests__/scan-result-store.test.ts +0 -121
- package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
- package/src/__tests__/view-image-tool.test.ts +0 -241
- package/src/cli/commands/amazon/cart.ts +0 -513
- package/src/cli/commands/amazon/checkout.ts +0 -394
- package/src/cli/commands/amazon/client.ts +0 -513
- package/src/cli/commands/amazon/index.ts +0 -885
- package/src/cli/commands/amazon/product-details.ts +0 -145
- package/src/cli/commands/amazon/request-extractor.ts +0 -187
- package/src/cli/commands/amazon/search.ts +0 -76
- package/src/cli/commands/amazon/session.ts +0 -108
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
- package/src/cli/commands/twitter/index.ts +0 -420
- package/src/cli/commands/twitter/oauth-client.ts +0 -60
- package/src/cli/commands/twitter/router.ts +0 -351
- package/src/cli/commands/twitter/types.ts +0 -30
- package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
- package/src/config/bundled-skills/agentmail/icon.svg +0 -21
- package/src/config/bundled-skills/amazon/SKILL.md +0 -136
- package/src/config/bundled-skills/amazon/icon.svg +0 -13
- package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
- package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
- package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
- package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
- package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
- package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
- package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
- package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
- package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
- package/src/config/bundled-skills/influencer/SKILL.md +0 -144
- package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
- package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
- package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
- package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
- package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
- package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
- package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
- package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
- package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
- package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
- package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
- package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
- package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
- package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
- package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
- package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
- package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
- package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
- package/src/config/bundled-skills/notion/SKILL.md +0 -240
- package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
- package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
- package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
- package/src/config/bundled-skills/reminder/SKILL.md +0 -79
- package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
- package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
- package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
- package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
- package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
- package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
- 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/telegram-setup/SKILL.md +0 -105
- package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
- package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
- package/src/config/bundled-skills/twitter/SKILL.md +0 -206
- package/src/config/bundled-skills/twitter/icon.svg +0 -14
- package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
- package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
- package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
- package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
- package/src/daemon/handlers/pairing.ts +0 -119
- package/src/daemon/handlers/session-user-message.ts +0 -961
- package/src/daemon/recording-executor.ts +0 -180
- package/src/daemon/recording-intent-fallback.ts +0 -162
- package/src/daemon/recording-intent.ts +0 -493
- package/src/memory/account-store.ts +0 -117
- package/src/messaging/activity-analyzer.ts +0 -76
- package/src/messaging/email-classifier.ts +0 -208
- package/src/messaging/index.ts +0 -2
- package/src/messaging/outreach-classifier.ts +0 -185
- package/src/messaging/thread-summarizer.ts +0 -346
- package/src/messaging/types.ts +0 -17
- package/src/tools/browser/x-auto-navigate.ts +0 -254
- package/src/tools/credentials/account-registry.ts +0 -144
- package/src/tools/filesystem/view-image.ts +0 -244
- package/src/tools/reminder/reminder-store.ts +0 -194
- package/src/tools/reminder/reminder.ts +0 -158
- package/src/tools/system/navigate-settings.ts +0 -74
- package/src/tools/system/open-system-settings.ts +0 -85
- package/src/tools/system/version.ts +0 -54
- package/src/twitter/platform-proxy-client.ts +0 -408
- /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
|
@@ -32,11 +32,8 @@ mock.module("../config/loader.js", () => ({
|
|
|
32
32
|
contextWindow: {
|
|
33
33
|
enabled: true,
|
|
34
34
|
maxInputTokens: 180000,
|
|
35
|
-
|
|
36
|
-
compactThreshold: 0.8,
|
|
37
|
-
preserveRecentUserTurns: 8,
|
|
38
|
-
summaryMaxTokens: 1200,
|
|
39
|
-
chunkTokens: 12000,
|
|
35
|
+
targetBudgetRatio: 0.30,
|
|
36
|
+
compactThreshold: 0.8, summaryBudgetRatio: 0.05,
|
|
40
37
|
},
|
|
41
38
|
}),
|
|
42
39
|
invalidateConfigCache: noop,
|
|
@@ -153,8 +150,8 @@ mock.module("node:fs", () => {
|
|
|
153
150
|
import {
|
|
154
151
|
__resetRecordingState,
|
|
155
152
|
handleRecordingStart,
|
|
153
|
+
handleRecordingStatusCore,
|
|
156
154
|
handleRecordingStop,
|
|
157
|
-
recordingHandlers,
|
|
158
155
|
} from "../daemon/handlers/recording.js";
|
|
159
156
|
import type { HandlerContext } from "../daemon/handlers/shared.js";
|
|
160
157
|
import type { RecordingStatus } from "../daemon/message-types/computer-use.js";
|
|
@@ -206,15 +203,11 @@ describe("handleRecordingStart", () => {
|
|
|
206
203
|
mockFileSize = 1024;
|
|
207
204
|
});
|
|
208
205
|
|
|
209
|
-
test("sends recording_start
|
|
206
|
+
test("sends recording_start event and returns a UUID", () => {
|
|
210
207
|
const { ctx, sent } = createCtx();
|
|
211
208
|
const conversationId = "conv-1";
|
|
212
209
|
|
|
213
|
-
const recordingId = handleRecordingStart(
|
|
214
|
-
conversationId,
|
|
215
|
-
undefined,
|
|
216
|
-
ctx,
|
|
217
|
-
);
|
|
210
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
218
211
|
|
|
219
212
|
expect(recordingId).not.toBeNull();
|
|
220
213
|
// UUID v4 format
|
|
@@ -256,19 +249,11 @@ describe("handleRecordingStart", () => {
|
|
|
256
249
|
test("returns null when a different conversation already has an active recording (global guard)", () => {
|
|
257
250
|
const { ctx, sent } = createCtx();
|
|
258
251
|
|
|
259
|
-
const id1 = handleRecordingStart(
|
|
260
|
-
"conv-global-a",
|
|
261
|
-
undefined,
|
|
262
|
-
ctx,
|
|
263
|
-
);
|
|
252
|
+
const id1 = handleRecordingStart("conv-global-a", undefined, ctx);
|
|
264
253
|
expect(id1).toBeTruthy();
|
|
265
254
|
|
|
266
255
|
// A second start from a different conversation should be rejected
|
|
267
|
-
const id2 = handleRecordingStart(
|
|
268
|
-
"conv-global-b",
|
|
269
|
-
undefined,
|
|
270
|
-
ctx,
|
|
271
|
-
);
|
|
256
|
+
const id2 = handleRecordingStart("conv-global-b", undefined, ctx);
|
|
272
257
|
expect(id2).toBeNull();
|
|
273
258
|
|
|
274
259
|
// Only the first call sends recording_start
|
|
@@ -294,11 +279,7 @@ describe("handleRecordingStop", () => {
|
|
|
294
279
|
const conversationId = "conv-stop-1";
|
|
295
280
|
|
|
296
281
|
// Start a recording first
|
|
297
|
-
const recordingId = handleRecordingStart(
|
|
298
|
-
conversationId,
|
|
299
|
-
undefined,
|
|
300
|
-
ctx,
|
|
301
|
-
);
|
|
282
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
302
283
|
expect(recordingId).not.toBeNull();
|
|
303
284
|
sent.length = 0; // Clear the start message
|
|
304
285
|
|
|
@@ -353,7 +334,7 @@ describe("handleRecordingStop", () => {
|
|
|
353
334
|
});
|
|
354
335
|
});
|
|
355
336
|
|
|
356
|
-
describe("
|
|
337
|
+
describe("handleRecordingStatusCore", () => {
|
|
357
338
|
beforeEach(() => {
|
|
358
339
|
__resetRecordingState();
|
|
359
340
|
mockMessages.length = 0;
|
|
@@ -368,11 +349,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
368
349
|
const { ctx } = createCtx();
|
|
369
350
|
const conversationId = "conv-status-1";
|
|
370
351
|
|
|
371
|
-
const recordingId = handleRecordingStart(
|
|
372
|
-
conversationId,
|
|
373
|
-
undefined,
|
|
374
|
-
ctx,
|
|
375
|
-
);
|
|
352
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
376
353
|
expect(recordingId).not.toBeNull();
|
|
377
354
|
|
|
378
355
|
const statusMsg: RecordingStatus = {
|
|
@@ -382,7 +359,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
382
359
|
};
|
|
383
360
|
|
|
384
361
|
// Should not throw
|
|
385
|
-
await
|
|
362
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
386
363
|
});
|
|
387
364
|
|
|
388
365
|
test("handles stopped status with file — creates attachment and notifies client", async () => {
|
|
@@ -391,11 +368,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
391
368
|
|
|
392
369
|
// Bind socket
|
|
393
370
|
|
|
394
|
-
const recordingId = handleRecordingStart(
|
|
395
|
-
conversationId,
|
|
396
|
-
undefined,
|
|
397
|
-
ctx,
|
|
398
|
-
);
|
|
371
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
399
372
|
expect(recordingId).not.toBeNull();
|
|
400
373
|
sent.length = 0;
|
|
401
374
|
|
|
@@ -414,7 +387,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
414
387
|
durationMs: 5000,
|
|
415
388
|
};
|
|
416
389
|
|
|
417
|
-
await
|
|
390
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
418
391
|
|
|
419
392
|
// Should have sent assistant_text_delta and message_complete
|
|
420
393
|
const textDeltas = sent.filter((m) => m.type === "assistant_text_delta");
|
|
@@ -442,12 +415,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
442
415
|
const { ctx, sent } = createCtx();
|
|
443
416
|
const conversationId = "conv-status-no-msg";
|
|
444
417
|
|
|
445
|
-
|
|
446
|
-
const recordingId = handleRecordingStart(
|
|
447
|
-
conversationId,
|
|
448
|
-
undefined,
|
|
449
|
-
ctx,
|
|
450
|
-
);
|
|
418
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
451
419
|
expect(recordingId).not.toBeNull();
|
|
452
420
|
sent.length = 0;
|
|
453
421
|
|
|
@@ -461,7 +429,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
461
429
|
durationMs: 3000,
|
|
462
430
|
};
|
|
463
431
|
|
|
464
|
-
await
|
|
432
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
465
433
|
|
|
466
434
|
// An assistant message should have been created via addMessage mock
|
|
467
435
|
expect(mockMessages.length).toBeGreaterThanOrEqual(1);
|
|
@@ -475,11 +443,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
475
443
|
|
|
476
444
|
mockFileExists = false;
|
|
477
445
|
|
|
478
|
-
const recordingId = handleRecordingStart(
|
|
479
|
-
conversationId,
|
|
480
|
-
undefined,
|
|
481
|
-
ctx,
|
|
482
|
-
);
|
|
446
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
483
447
|
expect(recordingId).not.toBeNull();
|
|
484
448
|
sent.length = 0;
|
|
485
449
|
|
|
@@ -492,7 +456,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
492
456
|
};
|
|
493
457
|
|
|
494
458
|
// Should not throw — the handler logs the error and notifies the client
|
|
495
|
-
await
|
|
459
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
496
460
|
|
|
497
461
|
// No attachment should have been created
|
|
498
462
|
expect(mockAttachments.length).toBe(0);
|
|
@@ -514,11 +478,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
514
478
|
mockFileExists = true;
|
|
515
479
|
mockFileSize = 0;
|
|
516
480
|
|
|
517
|
-
const recordingId = handleRecordingStart(
|
|
518
|
-
conversationId,
|
|
519
|
-
undefined,
|
|
520
|
-
ctx,
|
|
521
|
-
);
|
|
481
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
522
482
|
expect(recordingId).not.toBeNull();
|
|
523
483
|
sent.length = 0;
|
|
524
484
|
|
|
@@ -530,7 +490,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
530
490
|
durationMs: 2000,
|
|
531
491
|
};
|
|
532
492
|
|
|
533
|
-
await
|
|
493
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
534
494
|
|
|
535
495
|
// No attachment should have been created for a zero-length file
|
|
536
496
|
expect(mockAttachments.length).toBe(0);
|
|
@@ -559,11 +519,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
559
519
|
mockFileExists = true;
|
|
560
520
|
mockFileSize = 4096;
|
|
561
521
|
|
|
562
|
-
const recordingId = handleRecordingStart(
|
|
563
|
-
conversationId,
|
|
564
|
-
undefined,
|
|
565
|
-
ctx,
|
|
566
|
-
);
|
|
522
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
567
523
|
expect(recordingId).not.toBeNull();
|
|
568
524
|
sent.length = 0;
|
|
569
525
|
|
|
@@ -575,7 +531,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
575
531
|
durationMs: 5000,
|
|
576
532
|
};
|
|
577
533
|
|
|
578
|
-
await
|
|
534
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
579
535
|
|
|
580
536
|
// Attachment should have been created
|
|
581
537
|
expect(mockAttachments.length).toBe(1);
|
|
@@ -600,11 +556,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
600
556
|
mockFileExists = true;
|
|
601
557
|
mockFileSize = 4096;
|
|
602
558
|
|
|
603
|
-
const recordingId = handleRecordingStart(
|
|
604
|
-
conversationId,
|
|
605
|
-
undefined,
|
|
606
|
-
ctx,
|
|
607
|
-
);
|
|
559
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
608
560
|
expect(recordingId).not.toBeNull();
|
|
609
561
|
sent.length = 0;
|
|
610
562
|
|
|
@@ -616,7 +568,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
616
568
|
durationMs: 5000,
|
|
617
569
|
};
|
|
618
570
|
|
|
619
|
-
await
|
|
571
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
620
572
|
|
|
621
573
|
// No attachment should have been created — path is outside allowlist
|
|
622
574
|
expect(mockAttachments.length).toBe(0);
|
|
@@ -637,12 +589,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
637
589
|
const { ctx, sent } = createCtx();
|
|
638
590
|
const conversationId = "conv-status-fail-final";
|
|
639
591
|
|
|
640
|
-
|
|
641
|
-
const recordingId = handleRecordingStart(
|
|
642
|
-
conversationId,
|
|
643
|
-
undefined,
|
|
644
|
-
ctx,
|
|
645
|
-
);
|
|
592
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
646
593
|
expect(recordingId).not.toBeNull();
|
|
647
594
|
sent.length = 0;
|
|
648
595
|
|
|
@@ -654,7 +601,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
654
601
|
error: "Video writer finished with non-completed status 3",
|
|
655
602
|
};
|
|
656
603
|
|
|
657
|
-
await
|
|
604
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
658
605
|
|
|
659
606
|
// No attachment should have been created
|
|
660
607
|
expect(mockAttachments.length).toBe(0);
|
|
@@ -676,12 +623,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
676
623
|
const { ctx, sent } = createCtx();
|
|
677
624
|
const conversationId = "conv-status-failed";
|
|
678
625
|
|
|
679
|
-
|
|
680
|
-
const recordingId = handleRecordingStart(
|
|
681
|
-
conversationId,
|
|
682
|
-
undefined,
|
|
683
|
-
ctx,
|
|
684
|
-
);
|
|
626
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
685
627
|
expect(recordingId).not.toBeNull();
|
|
686
628
|
sent.length = 0;
|
|
687
629
|
|
|
@@ -692,7 +634,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
692
634
|
error: "Permission denied",
|
|
693
635
|
};
|
|
694
636
|
|
|
695
|
-
await
|
|
637
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
696
638
|
|
|
697
639
|
// Should send error notification
|
|
698
640
|
const textDeltas = sent.filter((m) => m.type === "assistant_text_delta");
|
|
@@ -708,12 +650,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
708
650
|
const { ctx, sent } = createCtx();
|
|
709
651
|
const conversationId = "conv-status-failed-no-err";
|
|
710
652
|
|
|
711
|
-
|
|
712
|
-
const recordingId = handleRecordingStart(
|
|
713
|
-
conversationId,
|
|
714
|
-
undefined,
|
|
715
|
-
ctx,
|
|
716
|
-
);
|
|
653
|
+
const recordingId = handleRecordingStart(conversationId, undefined, ctx);
|
|
717
654
|
expect(recordingId).not.toBeNull();
|
|
718
655
|
sent.length = 0;
|
|
719
656
|
|
|
@@ -723,7 +660,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
723
660
|
status: "failed",
|
|
724
661
|
};
|
|
725
662
|
|
|
726
|
-
await
|
|
663
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
727
664
|
|
|
728
665
|
const textDeltas = sent.filter((m) => m.type === "assistant_text_delta");
|
|
729
666
|
expect(textDeltas.length).toBeGreaterThanOrEqual(1);
|
|
@@ -734,7 +671,6 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
734
671
|
const { ctx, sent } = createCtx();
|
|
735
672
|
const conversationId = "conv-fallback";
|
|
736
673
|
|
|
737
|
-
|
|
738
674
|
// Send a recording_status directly with attachToConversationId
|
|
739
675
|
// without having started a recording through handleRecordingStart
|
|
740
676
|
const statusMsg: RecordingStatus = {
|
|
@@ -746,7 +682,7 @@ describe("recordingHandlers.recording_status", () => {
|
|
|
746
682
|
};
|
|
747
683
|
|
|
748
684
|
// Should not throw — uses attachToConversationId as fallback
|
|
749
|
-
await
|
|
685
|
+
await handleRecordingStatusCore(statusMsg, ctx);
|
|
750
686
|
|
|
751
687
|
const textDeltas = sent.filter((m) => m.type === "assistant_text_delta");
|
|
752
688
|
expect(textDeltas.length).toBeGreaterThanOrEqual(1);
|
|
@@ -128,33 +128,24 @@ describe("tool registry host tools", () => {
|
|
|
128
128
|
});
|
|
129
129
|
|
|
130
130
|
describe("tool registry dynamic-tools tools", () => {
|
|
131
|
-
test("registers
|
|
131
|
+
test("registers skill_load tool", async () => {
|
|
132
132
|
await initializeTools();
|
|
133
133
|
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
"delete_managed_skill",
|
|
137
|
-
"skill_load",
|
|
138
|
-
] as const;
|
|
139
|
-
|
|
140
|
-
for (const toolName of dynamicToolNames) {
|
|
141
|
-
const tool = getTool(toolName);
|
|
142
|
-
expect(tool).toBeDefined();
|
|
143
|
-
}
|
|
134
|
+
const tool = getTool("skill_load");
|
|
135
|
+
expect(tool).toBeDefined();
|
|
144
136
|
|
|
145
137
|
const definitionNames = getAllToolDefinitions().map((def) => def.name);
|
|
146
|
-
|
|
147
|
-
expect(definitionNames).toContain(toolName);
|
|
148
|
-
}
|
|
138
|
+
expect(definitionNames).toContain("skill_load");
|
|
149
139
|
});
|
|
150
140
|
|
|
151
|
-
test("scaffold and delete are
|
|
141
|
+
test("scaffold and delete are NOT in the core tool registry (moved to bundled skill)", async () => {
|
|
152
142
|
await initializeTools();
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
143
|
+
// scaffold_managed_skill and delete_managed_skill moved to the
|
|
144
|
+
// skill-management bundled skill — they are no longer registered as core
|
|
145
|
+
// tools. Their High risk classification is handled by classifyRisk() in
|
|
146
|
+
// checker.ts so security behavior is preserved.
|
|
147
|
+
expect(getTool("scaffold_managed_skill")).toBeUndefined();
|
|
148
|
+
expect(getTool("delete_managed_skill")).toBeUndefined();
|
|
158
149
|
});
|
|
159
150
|
|
|
160
151
|
test("skill_load is registered as Low risk", async () => {
|
|
@@ -176,29 +167,30 @@ describe("tool manifest", () => {
|
|
|
176
167
|
});
|
|
177
168
|
|
|
178
169
|
test("manifest declares expected core lazy tools", () => {
|
|
179
|
-
// bash
|
|
170
|
+
// bash moved from lazy to eager registration
|
|
171
|
+
// swarm_delegate moved to the orchestration bundled skill
|
|
180
172
|
const lazyNames = new Set(lazyTools.map((t) => t.name));
|
|
181
173
|
expect(lazyNames.has("bash")).toBe(false);
|
|
182
174
|
expect(lazyNames.has("evaluate_typescript_code")).toBe(false);
|
|
183
175
|
expect(lazyNames.has("claude_code")).toBe(false);
|
|
184
176
|
expect(lazyNames.has("swarm_delegate")).toBe(false);
|
|
185
|
-
//
|
|
177
|
+
// bash is in eager tools; swarm_delegate is now a bundled skill tool
|
|
186
178
|
expect(eagerModuleToolNames).toContain("bash");
|
|
187
|
-
expect(eagerModuleToolNames).toContain("swarm_delegate");
|
|
179
|
+
expect(eagerModuleToolNames).not.toContain("swarm_delegate");
|
|
180
|
+
expect(eagerModuleToolNames).not.toContain("version");
|
|
188
181
|
});
|
|
189
182
|
|
|
190
183
|
test("eager module tool names list contains expected count", () => {
|
|
191
|
-
expect(eagerModuleToolNames.length).toBe(
|
|
184
|
+
expect(eagerModuleToolNames.length).toBe(11);
|
|
192
185
|
});
|
|
193
186
|
|
|
194
|
-
test("explicit tools list includes memory
|
|
187
|
+
test("explicit tools list includes memory and credential tools", () => {
|
|
195
188
|
const names = explicitTools.map((t) => t.name);
|
|
196
189
|
expect(names).toContain("memory_recall");
|
|
197
|
-
expect(names).toContain("
|
|
198
|
-
expect(names).toContain("memory_update");
|
|
190
|
+
expect(names).toContain("memory_manage");
|
|
199
191
|
expect(names).toContain("credential_store");
|
|
200
|
-
|
|
201
|
-
expect(names).toContain("start_screen_watch");
|
|
192
|
+
// start_screen_watch moved to the screen-watch bundled skill
|
|
193
|
+
expect(names).not.toContain("start_screen_watch");
|
|
202
194
|
});
|
|
203
195
|
|
|
204
196
|
test("registered tool count is at least eager + lazy + host", async () => {
|
|
@@ -211,6 +203,11 @@ describe("tool manifest", () => {
|
|
|
211
203
|
});
|
|
212
204
|
|
|
213
205
|
describe("baseline characterization: hardcoded tool loading", () => {
|
|
206
|
+
test("version is NOT registered in the global registry after initializeTools()", async () => {
|
|
207
|
+
await initializeTools();
|
|
208
|
+
expect(getTool("version")).toBeUndefined();
|
|
209
|
+
});
|
|
210
|
+
|
|
214
211
|
test("gmail tools are NOT registered in the global registry after initializeTools()", async () => {
|
|
215
212
|
await initializeTools();
|
|
216
213
|
const allTools = getAllTools();
|
|
@@ -223,9 +220,7 @@ describe("baseline characterization: hardcoded tool loading", () => {
|
|
|
223
220
|
"gmail_mark_read",
|
|
224
221
|
"gmail_draft",
|
|
225
222
|
"gmail_archive",
|
|
226
|
-
"gmail_batch_archive",
|
|
227
223
|
"gmail_label",
|
|
228
|
-
"gmail_batch_label",
|
|
229
224
|
"gmail_trash",
|
|
230
225
|
"gmail_send",
|
|
231
226
|
"gmail_unsubscribe",
|
|
@@ -243,9 +238,7 @@ describe("baseline characterization: hardcoded tool loading", () => {
|
|
|
243
238
|
"gmail_mark_read",
|
|
244
239
|
"gmail_draft",
|
|
245
240
|
"gmail_archive",
|
|
246
|
-
"gmail_batch_archive",
|
|
247
241
|
"gmail_label",
|
|
248
|
-
"gmail_batch_label",
|
|
249
242
|
"gmail_trash",
|
|
250
243
|
"gmail_send",
|
|
251
244
|
"gmail_unsubscribe",
|
|
@@ -517,7 +510,7 @@ describe("computer-use registration split", () => {
|
|
|
517
510
|
// Start each test from a completely empty registry so assertions are
|
|
518
511
|
// non-vacuous — the split functions must actually register tools.
|
|
519
512
|
|
|
520
|
-
test("registerComputerUseActionTools registers all
|
|
513
|
+
test("registerComputerUseActionTools registers all 10 CU action tools and nothing else", async () => {
|
|
521
514
|
const { registerComputerUseActionTools } =
|
|
522
515
|
await import("../tools/computer-use/registry.js");
|
|
523
516
|
|
|
@@ -527,7 +520,7 @@ describe("computer-use registration split", () => {
|
|
|
527
520
|
registerComputerUseActionTools();
|
|
528
521
|
|
|
529
522
|
const registered = getAllTools();
|
|
530
|
-
expect(registered).toHaveLength(
|
|
523
|
+
expect(registered).toHaveLength(10);
|
|
531
524
|
expect(registered.every((t) => t.name.startsWith("computer_use_"))).toBe(
|
|
532
525
|
true,
|
|
533
526
|
);
|
|
@@ -40,7 +40,6 @@ mock.module("../util/platform.js", () => ({
|
|
|
40
40
|
isMacOS: () => process.platform === "darwin",
|
|
41
41
|
isLinux: () => process.platform === "linux",
|
|
42
42
|
isWindows: () => process.platform === "win32",
|
|
43
|
-
getSocketPath: () => join(testDir, "test.sock"),
|
|
44
43
|
getPidPath: () => join(testDir, "test.pid"),
|
|
45
44
|
getDbPath: () => join(testDir, "test.db"),
|
|
46
45
|
getLogPath: () => join(testDir, "test.log"),
|
|
@@ -73,10 +73,6 @@ mock.module("../tools/browser/auto-navigate.js", () => ({
|
|
|
73
73
|
autoNavigate: async () => [],
|
|
74
74
|
}));
|
|
75
75
|
|
|
76
|
-
mock.module("../tools/browser/x-auto-navigate.js", () => ({
|
|
77
|
-
navigateXPages: async () => [],
|
|
78
|
-
}));
|
|
79
|
-
|
|
80
76
|
mock.module("../util/logger.js", () => ({
|
|
81
77
|
getLogger: () => ({
|
|
82
78
|
info: () => {},
|
|
@@ -248,10 +244,7 @@ describe("ride-shotgun-handler", () => {
|
|
|
248
244
|
|
|
249
245
|
// Find the session and stop it
|
|
250
246
|
const watchId = [...watchSessions.keys()][0]!;
|
|
251
|
-
await handleRideShotgunStop(
|
|
252
|
-
{ type: "ride_shotgun_stop", watchId },
|
|
253
|
-
ctx,
|
|
254
|
-
);
|
|
247
|
+
await handleRideShotgunStop({ type: "ride_shotgun_stop", watchId }, ctx);
|
|
255
248
|
|
|
256
249
|
expect(mockMinimizeCalled).toBe(true);
|
|
257
250
|
expect(mockMinimizeBaseUrl).toBe("http://localhost:9222");
|
|
@@ -282,10 +275,7 @@ describe("ride-shotgun-handler", () => {
|
|
|
282
275
|
|
|
283
276
|
// Find the session and stop it
|
|
284
277
|
const watchId = [...watchSessions.keys()][0]!;
|
|
285
|
-
await handleRideShotgunStop(
|
|
286
|
-
{ type: "ride_shotgun_stop", watchId },
|
|
287
|
-
ctx,
|
|
288
|
-
);
|
|
278
|
+
await handleRideShotgunStop({ type: "ride_shotgun_stop", watchId }, ctx);
|
|
289
279
|
|
|
290
280
|
expect(mockMinimizeCalled).toBe(false);
|
|
291
281
|
});
|
|
@@ -311,10 +301,7 @@ describe("ride-shotgun-handler", () => {
|
|
|
311
301
|
|
|
312
302
|
// Clean up
|
|
313
303
|
const watchId = [...watchSessions.keys()][0]!;
|
|
314
|
-
await handleRideShotgunStop(
|
|
315
|
-
{ type: "ride_shotgun_stop", watchId },
|
|
316
|
-
ctx,
|
|
317
|
-
);
|
|
304
|
+
await handleRideShotgunStop({ type: "ride_shotgun_stop", watchId }, ctx);
|
|
318
305
|
});
|
|
319
306
|
|
|
320
307
|
test("sends watch_started message with session IDs", async () => {
|
|
@@ -342,10 +329,7 @@ describe("ride-shotgun-handler", () => {
|
|
|
342
329
|
|
|
343
330
|
// Clean up
|
|
344
331
|
const watchId = startMsg.watchId;
|
|
345
|
-
await handleRideShotgunStop(
|
|
346
|
-
{ type: "ride_shotgun_stop", watchId },
|
|
347
|
-
ctx,
|
|
348
|
-
);
|
|
332
|
+
await handleRideShotgunStop({ type: "ride_shotgun_stop", watchId }, ctx);
|
|
349
333
|
});
|
|
350
334
|
|
|
351
335
|
test("sends ride_shotgun_error when ensureChromeWithCdp fails", async () => {
|
|
@@ -22,7 +22,6 @@ mock.module("../util/platform.js", () => ({
|
|
|
22
22
|
isMacOS: () => process.platform === "darwin",
|
|
23
23
|
isLinux: () => process.platform === "linux",
|
|
24
24
|
isWindows: () => process.platform === "win32",
|
|
25
|
-
getSocketPath: () => join(testDir, "test.sock"),
|
|
26
25
|
getPidPath: () => join(testDir, "test.pid"),
|
|
27
26
|
getDbPath: () => join(testDir, "test.db"),
|
|
28
27
|
getLogPath: () => join(testDir, "test.log"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* HTTP parity tests for the SSE assistant-events endpoint.
|
|
3
3
|
*
|
|
4
|
-
* Asserts that every streaming/delta
|
|
4
|
+
* Asserts that every streaming/delta ServerMessage type is preserved
|
|
5
5
|
* exactly — field-for-field — when delivered through the SSE route.
|
|
6
6
|
*
|
|
7
7
|
* Message types covered:
|
|
@@ -30,7 +30,6 @@ mock.module("../util/platform.js", () => ({
|
|
|
30
30
|
isMacOS: () => process.platform === "darwin",
|
|
31
31
|
isLinux: () => process.platform === "linux",
|
|
32
32
|
isWindows: () => process.platform === "win32",
|
|
33
|
-
getSocketPath: () => join(testDir, "test.sock"),
|
|
34
33
|
getPidPath: () => join(testDir, "test.pid"),
|
|
35
34
|
getDbPath: () => join(testDir, "test.db"),
|
|
36
35
|
getLogPath: () => join(testDir, "test.log"),
|
|
@@ -125,7 +124,7 @@ async function publishAndReadFrame(
|
|
|
125
124
|
// Tests
|
|
126
125
|
// ---------------------------------------------------------------------------
|
|
127
126
|
|
|
128
|
-
describe("SSE
|
|
127
|
+
describe("SSE HTTP parity — streaming/delta message types", () => {
|
|
129
128
|
beforeEach(() => {
|
|
130
129
|
const db = getDb();
|
|
131
130
|
db.run("DELETE FROM conversation_keys");
|
|
@@ -21,7 +21,6 @@ mock.module("../util/platform.js", () => ({
|
|
|
21
21
|
isMacOS: () => process.platform === "darwin",
|
|
22
22
|
isLinux: () => process.platform === "linux",
|
|
23
23
|
isWindows: () => process.platform === "win32",
|
|
24
|
-
getSocketPath: () => join(testDir, "test.sock"),
|
|
25
24
|
getPidPath: () => join(testDir, "test.pid"),
|
|
26
25
|
getDbPath: () => join(testDir, "test.db"),
|
|
27
26
|
getLogPath: () => join(testDir, "test.log"),
|
|
@@ -19,7 +19,6 @@ mock.module("../util/platform.js", () => ({
|
|
|
19
19
|
isLinux: () => mockIsLinux,
|
|
20
20
|
getRootDir: () => "/tmp/vellum-test",
|
|
21
21
|
getDataDir: () => "/tmp/vellum-test/data",
|
|
22
|
-
getSocketPath: () => "/tmp/vellum-test/vellum.sock",
|
|
23
22
|
getDbPath: () => "/tmp/vellum-test/data/db/assistant.db",
|
|
24
23
|
getLogPath: () => "/tmp/vellum-test/data/logs/daemon.log",
|
|
25
24
|
getSandboxRootDir: () => "/tmp/vellum-test/sandbox",
|