@vellumai/assistant 0.4.43 → 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 +46 -44
- package/README.md +15 -16
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -215
- 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 -3
- 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-asset.test.ts +1 -1
- 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 +32 -36
- 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 +31 -7
- 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 +8 -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__/error-handler-friendly-messages.test.ts +46 -0
- 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__/onboarding-template-contract.test.ts +0 -10
- 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-fail-open-selection.test.ts +12 -2
- 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 -5
- 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 +7 -46
- 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__/starter-task-flow.test.ts +9 -19
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +7 -7
- 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 +84 -8
- 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 -7
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
- 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 -2
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
- package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
- package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
- 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-cancel.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-create.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 +33 -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 +42 -10
- 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 +53 -41
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/apps.ts +0 -25
- 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 -73
- 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 +8 -2
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/ride-shotgun-handler.ts +35 -43
- package/src/daemon/seed-files.ts +3 -27
- package/src/daemon/server.ts +45 -28
- package/src/daemon/session-agent-loop-handlers.ts +72 -9
- 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 -7
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +192 -118
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +75 -37
- 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/app-store.ts +0 -18
- 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 -37
- 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 +13 -17
- 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 +33 -35
- package/src/prompts/templates/BOOTSTRAP.md +0 -3
- 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 +4 -6
- 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 +3 -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 +9 -8
- 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 -8
- package/src/runtime/auth/scopes.ts +2 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +1 -24
- 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/http-types.ts +10 -0
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/middleware/error-handler.ts +14 -1
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +63 -67
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
- package/src/runtime/routes/brain-graph-routes.ts +4 -42
- 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 +234 -47
- package/src/runtime/routes/diagnostics-routes.ts +154 -43
- 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 -351
- 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 +37 -0
- package/src/tools/apps/executors.ts +0 -6
- 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/document/editor-template.ts +10 -8
- 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 +12 -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__/home-base-bootstrap.test.ts +0 -84
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
- package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
- 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 -450
- 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 -920
- 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 -116
- package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
- package/src/cli/commands/twitter/client.ts +0 -989
- package/src/cli/commands/twitter/index.ts +0 -1160
- package/src/cli/commands/twitter/oauth-client.ts +0 -94
- package/src/cli/commands/twitter/router.ts +0 -396
- package/src/cli/commands/twitter/session.ts +0 -121
- 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 -137
- 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 -319
- 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/home-base/app-link-store.ts +0 -78
- package/src/home-base/bootstrap.ts +0 -74
- package/src/home-base/prebuilt/brain-graph.html +0 -1483
- package/src/home-base/prebuilt/index.html +0 -702
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -122
- package/src/home-base/prebuilt-home-base-updater.ts +0 -36
- 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 -405
- package/src/util/cookie-session.ts +0 -98
- /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
|
@@ -11,7 +11,6 @@ import type {
|
|
|
11
11
|
import { MODEL_TO_PROVIDER } from "../session-slash.js";
|
|
12
12
|
import {
|
|
13
13
|
CONFIG_RELOAD_DEBOUNCE_MS,
|
|
14
|
-
defineHandlers,
|
|
15
14
|
type HandlerContext,
|
|
16
15
|
log,
|
|
17
16
|
} from "./shared.js";
|
|
@@ -42,10 +41,13 @@ export function getModelInfo(): ModelInfo {
|
|
|
42
41
|
|
|
43
42
|
/**
|
|
44
43
|
* Minimal interface for the side-effects needed by setModel / setImageGenModel.
|
|
45
|
-
* Keeps the business logic decoupled from
|
|
44
|
+
* Keeps the business logic decoupled from transport-specific HandlerContext.
|
|
46
45
|
*/
|
|
47
46
|
export interface ModelSetContext {
|
|
48
|
-
sessions: Map<
|
|
47
|
+
sessions: Map<
|
|
48
|
+
string,
|
|
49
|
+
{ isProcessing(): boolean; dispose(): void; markStale(): void }
|
|
50
|
+
>;
|
|
49
51
|
suppressConfigReload: boolean;
|
|
50
52
|
setSuppressConfigReload(value: boolean): void;
|
|
51
53
|
updateConfigFingerprint(): void;
|
|
@@ -128,10 +130,7 @@ export function setModel(modelId: string, ctx: ModelSetContext): ModelInfo {
|
|
|
128
130
|
/**
|
|
129
131
|
* Set the image generation model. Throws on failure.
|
|
130
132
|
*/
|
|
131
|
-
export function setImageGenModel(
|
|
132
|
-
modelId: string,
|
|
133
|
-
ctx: ModelSetContext,
|
|
134
|
-
): void {
|
|
133
|
+
export function setImageGenModel(modelId: string, ctx: ModelSetContext): void {
|
|
135
134
|
const raw = loadRawConfig();
|
|
136
135
|
raw.imageGenModel = modelId;
|
|
137
136
|
|
|
@@ -156,7 +155,7 @@ export function setImageGenModel(
|
|
|
156
155
|
}
|
|
157
156
|
|
|
158
157
|
// ---------------------------------------------------------------------------
|
|
159
|
-
//
|
|
158
|
+
// HTTP handlers (delegate to shared logic)
|
|
160
159
|
// ---------------------------------------------------------------------------
|
|
161
160
|
|
|
162
161
|
export function handleModelGet(ctx: HandlerContext): void {
|
|
@@ -195,8 +194,3 @@ export function handleImageGenModelSet(
|
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
|
|
198
|
-
export const modelHandlers = defineHandlers({
|
|
199
|
-
model_get: (_msg, ctx) => handleModelGet(ctx),
|
|
200
|
-
model_set: handleModelSet,
|
|
201
|
-
image_gen_model_set: handleImageGenModelSet,
|
|
202
|
-
});
|
|
@@ -22,7 +22,7 @@ import type {
|
|
|
22
22
|
TelegramConfigRequest,
|
|
23
23
|
TelegramConfigResponse,
|
|
24
24
|
} from "../message-protocol.js";
|
|
25
|
-
import {
|
|
25
|
+
import { type HandlerContext, log } from "./shared.js";
|
|
26
26
|
|
|
27
27
|
const TELEGRAM_BOT_TOKEN_IN_URL_PATTERN =
|
|
28
28
|
/\/bot\d{8,10}:[A-Za-z0-9_-]{30,120}\//g;
|
|
@@ -53,7 +53,7 @@ export function summarizeTelegramError(err: unknown): string {
|
|
|
53
53
|
return redactTelegramBotTokens(parts.join(" "));
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
// -- Transport-agnostic result type (omits the
|
|
56
|
+
// -- Transport-agnostic result type (omits the `type` discriminant) --
|
|
57
57
|
|
|
58
58
|
export type TelegramConfigResult = Omit<TelegramConfigResponse, "type">;
|
|
59
59
|
|
|
@@ -359,7 +359,7 @@ export async function setupTelegram(
|
|
|
359
359
|
};
|
|
360
360
|
}
|
|
361
361
|
|
|
362
|
-
// --
|
|
362
|
+
// -- Message handler (thin wrapper over extracted functions) --
|
|
363
363
|
|
|
364
364
|
export async function handleTelegramConfig(
|
|
365
365
|
msg: TelegramConfigRequest,
|
|
@@ -401,8 +401,4 @@ export async function handleTelegramConfig(
|
|
|
401
401
|
error: message,
|
|
402
402
|
});
|
|
403
403
|
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
export const telegramHandlers = defineHandlers({
|
|
407
|
-
telegram_config: handleTelegramConfig,
|
|
408
|
-
});
|
|
404
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VoiceConfigUpdateRequest } from "../message-types/settings.js";
|
|
2
|
-
import {
|
|
2
|
+
import { type HandlerContext, log } from "./shared.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Send a client_settings_update message to all connected clients.
|
|
@@ -194,7 +194,7 @@ export function normalizeActivationKey(
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
/**
|
|
197
|
-
* Process a voice configuration update request from a session or
|
|
197
|
+
* Process a voice configuration update request from a session or client.
|
|
198
198
|
* Validates the activation key and broadcasts the change to all connected clients.
|
|
199
199
|
*/
|
|
200
200
|
export function handleVoiceConfigUpdate(
|
|
@@ -214,6 +214,3 @@ export function handleVoiceConfigUpdate(
|
|
|
214
214
|
);
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
-
export const voiceHandlers = defineHandlers({
|
|
218
|
-
voice_config_update: handleVoiceConfigUpdate,
|
|
219
|
-
});
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
expandSnippets,
|
|
14
14
|
} from "../dictation-text-processing.js";
|
|
15
15
|
import type { DictationRequest } from "../message-protocol.js";
|
|
16
|
-
import {
|
|
16
|
+
import { type HandlerContext, log } from "./shared.js";
|
|
17
17
|
|
|
18
18
|
// Action verbs for fast heuristic fallback (used when LLM classifier is unavailable)
|
|
19
19
|
const ACTION_VERBS = [
|
|
@@ -245,13 +245,7 @@ export async function handleDictationRequest(
|
|
|
245
245
|
// Command mode: selected text present — deterministic, no classification needed
|
|
246
246
|
if (msg.context.selectedText && msg.context.selectedText.trim().length > 0) {
|
|
247
247
|
log.info({ mode: "command" }, "Command mode (selected text present)");
|
|
248
|
-
await handleCommandMode(
|
|
249
|
-
msg,
|
|
250
|
-
ctx,
|
|
251
|
-
profile,
|
|
252
|
-
profileMeta,
|
|
253
|
-
stylePrompt,
|
|
254
|
-
);
|
|
248
|
+
await handleCommandMode(msg, ctx, profile, profileMeta, stylePrompt);
|
|
255
249
|
return;
|
|
256
250
|
}
|
|
257
251
|
|
|
@@ -477,7 +471,3 @@ async function handleCommandMode(
|
|
|
477
471
|
});
|
|
478
472
|
}
|
|
479
473
|
}
|
|
480
|
-
|
|
481
|
-
export const dictationHandlers = defineHandlers({
|
|
482
|
-
dictation_request: handleDictationRequest,
|
|
483
|
-
});
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
|
|
5
|
-
import { getWorkspacePromptPath, readLockfile } from "../../util/platform.js";
|
|
6
|
-
import { defineHandlers, type HandlerContext, log } from "./shared.js";
|
|
7
|
-
|
|
8
1
|
export interface IdentityFields {
|
|
9
2
|
name: string;
|
|
10
3
|
role: string;
|
|
@@ -58,101 +51,3 @@ export function parseIdentityFields(content: string): IdentityFields {
|
|
|
58
51
|
home: fields.home ?? "",
|
|
59
52
|
};
|
|
60
53
|
}
|
|
61
|
-
|
|
62
|
-
function handleIdentityGet(ctx: HandlerContext): void {
|
|
63
|
-
const identityPath = getWorkspacePromptPath("IDENTITY.md");
|
|
64
|
-
|
|
65
|
-
if (!existsSync(identityPath)) {
|
|
66
|
-
ctx.send({
|
|
67
|
-
type: "identity_get_response",
|
|
68
|
-
found: false,
|
|
69
|
-
name: "",
|
|
70
|
-
role: "",
|
|
71
|
-
personality: "",
|
|
72
|
-
emoji: "",
|
|
73
|
-
home: "",
|
|
74
|
-
});
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
const content = readFileSync(identityPath, "utf-8");
|
|
80
|
-
const fields = parseIdentityFields(content);
|
|
81
|
-
|
|
82
|
-
// Read version from package.json
|
|
83
|
-
let version: string | undefined;
|
|
84
|
-
try {
|
|
85
|
-
const pkgPath = join(
|
|
86
|
-
dirname(fileURLToPath(import.meta.url)),
|
|
87
|
-
"../../../package.json",
|
|
88
|
-
);
|
|
89
|
-
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
90
|
-
version = pkg.version;
|
|
91
|
-
} catch {
|
|
92
|
-
// ignore
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Read createdAt from IDENTITY.md file birthtime
|
|
96
|
-
let createdAt: string | undefined;
|
|
97
|
-
try {
|
|
98
|
-
const stats = statSync(identityPath);
|
|
99
|
-
createdAt = stats.birthtime.toISOString();
|
|
100
|
-
} catch {
|
|
101
|
-
// ignore
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Read lockfile for assistantId, cloud, and originSystem
|
|
105
|
-
let assistantId: string | undefined;
|
|
106
|
-
let cloud: string | undefined;
|
|
107
|
-
let originSystem: string | undefined;
|
|
108
|
-
try {
|
|
109
|
-
const lockData = readLockfile();
|
|
110
|
-
const assistants = lockData?.assistants as
|
|
111
|
-
| Array<Record<string, unknown>>
|
|
112
|
-
| undefined;
|
|
113
|
-
if (assistants && assistants.length > 0) {
|
|
114
|
-
// Use the most recently hatched assistant
|
|
115
|
-
const sorted = [...assistants].sort((a, b) => {
|
|
116
|
-
const dateA = new Date((a.hatchedAt as string) || 0).getTime();
|
|
117
|
-
const dateB = new Date((b.hatchedAt as string) || 0).getTime();
|
|
118
|
-
return dateB - dateA;
|
|
119
|
-
});
|
|
120
|
-
const latest = sorted[0];
|
|
121
|
-
assistantId = latest.assistantId as string | undefined;
|
|
122
|
-
cloud = latest.cloud as string | undefined;
|
|
123
|
-
originSystem = cloud === "local" ? "local" : cloud;
|
|
124
|
-
}
|
|
125
|
-
} catch {
|
|
126
|
-
// ignore — lockfile may not exist
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
ctx.send({
|
|
130
|
-
type: "identity_get_response",
|
|
131
|
-
found: true,
|
|
132
|
-
name: fields.name,
|
|
133
|
-
role: fields.role,
|
|
134
|
-
personality: fields.personality,
|
|
135
|
-
emoji: fields.emoji,
|
|
136
|
-
home: fields.home,
|
|
137
|
-
version,
|
|
138
|
-
assistantId,
|
|
139
|
-
createdAt,
|
|
140
|
-
originSystem,
|
|
141
|
-
});
|
|
142
|
-
} catch (err) {
|
|
143
|
-
log.error({ err }, "Failed to read identity");
|
|
144
|
-
ctx.send({
|
|
145
|
-
type: "identity_get_response",
|
|
146
|
-
found: false,
|
|
147
|
-
name: "",
|
|
148
|
-
role: "",
|
|
149
|
-
personality: "",
|
|
150
|
-
emoji: "",
|
|
151
|
-
home: "",
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export const identityHandlers = defineHandlers({
|
|
157
|
-
identity_get: (_msg, ctx) => handleIdentityGet(ctx),
|
|
158
|
-
});
|
|
@@ -9,11 +9,7 @@ import {
|
|
|
9
9
|
} from "../../memory/attachments-store.js";
|
|
10
10
|
import { addMessage } from "../../memory/conversation-crud.js";
|
|
11
11
|
import type { RecordingOptions, RecordingStatus } from "../message-protocol.js";
|
|
12
|
-
import {
|
|
13
|
-
defineHandlers,
|
|
14
|
-
type HandlerContext,
|
|
15
|
-
log,
|
|
16
|
-
} from "./shared.js";
|
|
12
|
+
import { type HandlerContext, log } from "./shared.js";
|
|
17
13
|
|
|
18
14
|
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
19
15
|
|
|
@@ -501,7 +497,7 @@ export async function finalizeAndPublishRecording(params: {
|
|
|
501
497
|
}
|
|
502
498
|
|
|
503
499
|
// Restrict accepted file paths to the app's recordings directory to
|
|
504
|
-
// prevent attachment of arbitrary files via crafted
|
|
500
|
+
// prevent attachment of arbitrary files via crafted messages.
|
|
505
501
|
let resolvedPath: string;
|
|
506
502
|
try {
|
|
507
503
|
resolvedPath = realpathSync(filePath);
|
|
@@ -725,7 +721,7 @@ export async function finalizeAndPublishRecording(params: {
|
|
|
725
721
|
* after recording stops, broadcasting recording lifecycle events, and
|
|
726
722
|
* triggering deferred recording restarts.
|
|
727
723
|
*
|
|
728
|
-
*
|
|
724
|
+
* This is the supported entry point for both HTTP routes and tests.
|
|
729
725
|
*/
|
|
730
726
|
export async function handleRecordingStatusCore(
|
|
731
727
|
msg: RecordingStatus,
|
|
@@ -1049,19 +1045,3 @@ export function __resetRecordingState(): void {
|
|
|
1049
1045
|
finalizedRecordingIds.clear();
|
|
1050
1046
|
activeRestartToken = null;
|
|
1051
1047
|
}
|
|
1052
|
-
|
|
1053
|
-
// ─── IPC handler wrapper ─────────────────────────────────────────────────────
|
|
1054
|
-
|
|
1055
|
-
/** IPC-compatible wrapper: ignores the socket (unused) and delegates to core. */
|
|
1056
|
-
async function handleRecordingStatusIpc(
|
|
1057
|
-
msg: RecordingStatus,
|
|
1058
|
-
ctx: HandlerContext,
|
|
1059
|
-
): Promise<void> {
|
|
1060
|
-
return handleRecordingStatusCore(msg, ctx);
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
// ─── Export handler group ────────────────────────────────────────────────────
|
|
1064
|
-
|
|
1065
|
-
export const recordingHandlers = defineHandlers({
|
|
1066
|
-
recording_status: handleRecordingStatusIpc,
|
|
1067
|
-
});
|
|
@@ -27,6 +27,43 @@ import {
|
|
|
27
27
|
renderHistoryContent,
|
|
28
28
|
} from "./shared.js";
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* In light mode, strip heavy payloads (e.g. full HTML) from surface data
|
|
32
|
+
* but preserve the fields the client needs to parse and render the surface.
|
|
33
|
+
*/
|
|
34
|
+
function lightModeSurfaceData(s: HistorySurface): Record<string, unknown> {
|
|
35
|
+
switch (s.surfaceType) {
|
|
36
|
+
case "dynamic_page":
|
|
37
|
+
return {
|
|
38
|
+
...(s.data.preview ? { preview: s.data.preview } : {}),
|
|
39
|
+
...(s.data.appId ? { appId: s.data.appId } : {}),
|
|
40
|
+
};
|
|
41
|
+
case "card":
|
|
42
|
+
return {
|
|
43
|
+
...(typeof s.data.title === "string" ? { title: s.data.title } : {}),
|
|
44
|
+
...(typeof s.data.body === "string" ? { body: s.data.body } : {}),
|
|
45
|
+
...(typeof s.data.template === "string"
|
|
46
|
+
? { template: s.data.template }
|
|
47
|
+
: {}),
|
|
48
|
+
...(s.data.templateData ? { templateData: s.data.templateData } : {}),
|
|
49
|
+
};
|
|
50
|
+
case "document_preview":
|
|
51
|
+
return {
|
|
52
|
+
...(typeof s.data.surfaceId === "string"
|
|
53
|
+
? { surfaceId: s.data.surfaceId }
|
|
54
|
+
: {}),
|
|
55
|
+
...(typeof s.data.title === "string" ? { title: s.data.title } : {}),
|
|
56
|
+
...(typeof s.data.content === "string"
|
|
57
|
+
? { content: s.data.content }
|
|
58
|
+
: {}),
|
|
59
|
+
};
|
|
60
|
+
default:
|
|
61
|
+
// For other types (list, table, form, confirmation, etc.),
|
|
62
|
+
// preserve the full data — these are generally small.
|
|
63
|
+
return s.data;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
30
67
|
export function handleHistoryRequest(
|
|
31
68
|
msg: HistoryRequest,
|
|
32
69
|
ctx: HandlerContext,
|
|
@@ -190,7 +227,9 @@ export function handleHistoryRequest(
|
|
|
190
227
|
})
|
|
191
228
|
: m.toolCalls;
|
|
192
229
|
|
|
193
|
-
// In light mode, strip
|
|
230
|
+
// In light mode, strip heavy payloads but keep essential fields so
|
|
231
|
+
// the client can still parse and render surfaces (e.g. card title/body,
|
|
232
|
+
// dynamic_page preview, document_preview metadata).
|
|
194
233
|
const filteredSurfaces =
|
|
195
234
|
m.surfaces.length > 0
|
|
196
235
|
? includeSurfaceData
|
|
@@ -199,14 +238,7 @@ export function handleHistoryRequest(
|
|
|
199
238
|
surfaceId: s.surfaceId,
|
|
200
239
|
surfaceType: s.surfaceType,
|
|
201
240
|
title: s.title,
|
|
202
|
-
data:
|
|
203
|
-
...(s.surfaceType === "dynamic_page"
|
|
204
|
-
? {
|
|
205
|
-
...(s.data.preview ? { preview: s.data.preview } : {}),
|
|
206
|
-
...(s.data.appId ? { appId: s.data.appId } : {}),
|
|
207
|
-
}
|
|
208
|
-
: {}),
|
|
209
|
-
} as Record<string, unknown>,
|
|
241
|
+
data: lightModeSurfaceData(s),
|
|
210
242
|
...(s.actions ? { actions: s.actions } : {}),
|
|
211
243
|
...(s.display ? { display: s.display } : {}),
|
|
212
244
|
}))
|
|
@@ -370,7 +402,7 @@ export function getMessageContent(
|
|
|
370
402
|
}
|
|
371
403
|
|
|
372
404
|
// ---------------------------------------------------------------------------
|
|
373
|
-
//
|
|
405
|
+
// HTTP handlers (delegate to shared logic)
|
|
374
406
|
// ---------------------------------------------------------------------------
|
|
375
407
|
|
|
376
408
|
export function handleConversationSearch(
|
|
@@ -34,6 +34,8 @@ import * as externalConversationStore from "../../memory/external-conversation-s
|
|
|
34
34
|
import * as pendingInteractions from "../../runtime/pending-interactions.js";
|
|
35
35
|
import { getSubagentManager } from "../../subagent/index.js";
|
|
36
36
|
import { truncate } from "../../util/truncate.js";
|
|
37
|
+
import { HostBashProxy } from "../host-bash-proxy.js";
|
|
38
|
+
import { HostFileProxy } from "../host-file-proxy.js";
|
|
37
39
|
import type {
|
|
38
40
|
CancelRequest,
|
|
39
41
|
ConfirmationResponse,
|
|
@@ -55,13 +57,6 @@ import {
|
|
|
55
57
|
classifySessionError,
|
|
56
58
|
} from "../session-error.js";
|
|
57
59
|
import {
|
|
58
|
-
handleConversationSearch,
|
|
59
|
-
handleHistoryRequest,
|
|
60
|
-
handleMessageContentRequest,
|
|
61
|
-
} from "./session-history.js";
|
|
62
|
-
import { handleUserMessage } from "./session-user-message.js";
|
|
63
|
-
import {
|
|
64
|
-
defineHandlers,
|
|
65
60
|
type HandlerContext,
|
|
66
61
|
log,
|
|
67
62
|
pendingStandaloneSecrets,
|
|
@@ -85,7 +80,7 @@ function parseBindingSourceChannel(
|
|
|
85
80
|
return null;
|
|
86
81
|
}
|
|
87
82
|
|
|
88
|
-
export function
|
|
83
|
+
export function syncCanonicalStatusFromConfirmationDecision(
|
|
89
84
|
requestId: string,
|
|
90
85
|
decision: ConfirmationResponse["decision"],
|
|
91
86
|
): void {
|
|
@@ -101,12 +96,12 @@ export function syncCanonicalStatusFromIpcConfirmationDecision(
|
|
|
101
96
|
} catch (err) {
|
|
102
97
|
log.debug(
|
|
103
98
|
{ err, requestId, targetStatus },
|
|
104
|
-
"Failed to resolve canonical request from
|
|
99
|
+
"Failed to resolve canonical request from local confirmation response",
|
|
105
100
|
);
|
|
106
101
|
}
|
|
107
102
|
}
|
|
108
103
|
|
|
109
|
-
export function
|
|
104
|
+
export function makeEventSender(params: {
|
|
110
105
|
ctx: HandlerContext;
|
|
111
106
|
session: Session;
|
|
112
107
|
conversationId: string;
|
|
@@ -149,7 +144,7 @@ export function makeIpcEventSender(params: {
|
|
|
149
144
|
} catch (err) {
|
|
150
145
|
log.debug(
|
|
151
146
|
{ err, requestId: event.requestId, conversationId },
|
|
152
|
-
"Failed to create canonical request from
|
|
147
|
+
"Failed to create canonical request from local confirmation event",
|
|
153
148
|
);
|
|
154
149
|
}
|
|
155
150
|
} else if (event.type === "secret_request") {
|
|
@@ -158,6 +153,18 @@ export function makeIpcEventSender(params: {
|
|
|
158
153
|
conversationId,
|
|
159
154
|
kind: "secret",
|
|
160
155
|
});
|
|
156
|
+
} else if (event.type === "host_bash_request") {
|
|
157
|
+
pendingInteractions.register(event.requestId, {
|
|
158
|
+
session,
|
|
159
|
+
conversationId,
|
|
160
|
+
kind: "host_bash",
|
|
161
|
+
});
|
|
162
|
+
} else if (event.type === "host_file_request") {
|
|
163
|
+
pendingInteractions.register(event.requestId, {
|
|
164
|
+
session,
|
|
165
|
+
conversationId,
|
|
166
|
+
kind: "host_file",
|
|
167
|
+
});
|
|
161
168
|
}
|
|
162
169
|
|
|
163
170
|
ctx.send(event);
|
|
@@ -182,10 +189,7 @@ export function handleConfirmationResponse(
|
|
|
182
189
|
undefined,
|
|
183
190
|
{ source: "button" },
|
|
184
191
|
);
|
|
185
|
-
|
|
186
|
-
msg.requestId,
|
|
187
|
-
msg.decision,
|
|
188
|
-
);
|
|
192
|
+
syncCanonicalStatusFromConfirmationDecision(msg.requestId, msg.decision);
|
|
189
193
|
pendingInteractions.resolve(msg.requestId);
|
|
190
194
|
return;
|
|
191
195
|
}
|
|
@@ -200,10 +204,7 @@ export function handleConfirmationResponse(
|
|
|
200
204
|
msg.selectedPattern,
|
|
201
205
|
msg.selectedScope,
|
|
202
206
|
);
|
|
203
|
-
|
|
204
|
-
msg.requestId,
|
|
205
|
-
msg.decision,
|
|
206
|
-
);
|
|
207
|
+
syncCanonicalStatusFromConfirmationDecision(msg.requestId, msg.decision);
|
|
207
208
|
pendingInteractions.resolve(msg.requestId);
|
|
208
209
|
return;
|
|
209
210
|
}
|
|
@@ -332,7 +333,7 @@ export function handleSessionList(
|
|
|
332
333
|
*/
|
|
333
334
|
export function clearAllSessions(ctx: HandlerContext): number {
|
|
334
335
|
const cleared = ctx.clearAllSessions();
|
|
335
|
-
// Also clear DB conversations. When a new
|
|
336
|
+
// Also clear DB conversations. When a new local connection triggers
|
|
336
337
|
// sendInitialSession, it auto-creates a conversation if none exist.
|
|
337
338
|
// Without this DB clear, that auto-created row survives, contradicting
|
|
338
339
|
// the "clear all conversations" intent.
|
|
@@ -340,9 +341,7 @@ export function clearAllSessions(ctx: HandlerContext): number {
|
|
|
340
341
|
return cleared;
|
|
341
342
|
}
|
|
342
343
|
|
|
343
|
-
export function handleSessionsClear(
|
|
344
|
-
ctx: HandlerContext,
|
|
345
|
-
): void {
|
|
344
|
+
export function handleSessionsClear(ctx: HandlerContext): void {
|
|
346
345
|
const cleared = clearAllSessions(ctx);
|
|
347
346
|
ctx.send({ type: "sessions_clear_response", cleared });
|
|
348
347
|
}
|
|
@@ -389,7 +388,7 @@ export async function handleSessionCreate(
|
|
|
389
388
|
if (title === GENERATING_TITLE) {
|
|
390
389
|
queueGenerateConversationTitle({
|
|
391
390
|
conversationId: conversation.id,
|
|
392
|
-
context: { origin: "
|
|
391
|
+
context: { origin: "local" },
|
|
393
392
|
userMessage: msg.initialMessage,
|
|
394
393
|
onTitleUpdated: (newTitle) => {
|
|
395
394
|
ctx.send({
|
|
@@ -404,13 +403,12 @@ export async function handleSessionCreate(
|
|
|
404
403
|
const requestId = uuid();
|
|
405
404
|
const transportChannel =
|
|
406
405
|
parseChannelId(msg.transport?.channelId) ?? "vellum";
|
|
407
|
-
const sendEvent =
|
|
406
|
+
const sendEvent = makeEventSender({
|
|
408
407
|
ctx,
|
|
409
408
|
session,
|
|
410
409
|
conversationId: conversation.id,
|
|
411
410
|
sourceChannel: transportChannel,
|
|
412
411
|
});
|
|
413
|
-
session.updateClient(sendEvent, false);
|
|
414
412
|
session.setTurnChannelContext({
|
|
415
413
|
userMessageChannel: transportChannel,
|
|
416
414
|
assistantMessageChannel: transportChannel,
|
|
@@ -421,6 +419,20 @@ export async function handleSessionCreate(
|
|
|
421
419
|
userMessageInterface: transportInterface,
|
|
422
420
|
assistantMessageInterface: transportInterface,
|
|
423
421
|
});
|
|
422
|
+
// Only create the host bash proxy for desktop client interfaces that can
|
|
423
|
+
// execute commands on the user's machine. Set before updateClient so
|
|
424
|
+
// updateClient's call to hostBashProxy.updateSender targets the new proxy.
|
|
425
|
+
if (transportInterface === "macos" || transportInterface === "ios") {
|
|
426
|
+
const proxy = new HostBashProxy(sendEvent, (requestId) => {
|
|
427
|
+
pendingInteractions.resolve(requestId);
|
|
428
|
+
});
|
|
429
|
+
session.setHostBashProxy(proxy);
|
|
430
|
+
const fileProxy = new HostFileProxy(sendEvent, (requestId) => {
|
|
431
|
+
pendingInteractions.resolve(requestId);
|
|
432
|
+
});
|
|
433
|
+
session.setHostFileProxy(fileProxy);
|
|
434
|
+
}
|
|
435
|
+
session.updateClient(sendEvent, false);
|
|
424
436
|
session
|
|
425
437
|
.processMessage(msg.initialMessage, [], sendEvent, requestId)
|
|
426
438
|
.catch((err) => {
|
|
@@ -520,10 +532,7 @@ export async function handleSessionSwitch(
|
|
|
520
532
|
/**
|
|
521
533
|
* Rename a session/conversation. Returns true on success, false if not found.
|
|
522
534
|
*/
|
|
523
|
-
export function renameSession(
|
|
524
|
-
sessionId: string,
|
|
525
|
-
name: string,
|
|
526
|
-
): boolean {
|
|
535
|
+
export function renameSession(sessionId: string, name: string): boolean {
|
|
527
536
|
const conversation = getConversation(sessionId);
|
|
528
537
|
if (!conversation) {
|
|
529
538
|
return false;
|
|
@@ -572,10 +581,7 @@ export function cancelGeneration(
|
|
|
572
581
|
return true;
|
|
573
582
|
}
|
|
574
583
|
|
|
575
|
-
export function handleCancel(
|
|
576
|
-
msg: CancelRequest,
|
|
577
|
-
ctx: HandlerContext,
|
|
578
|
-
): void {
|
|
584
|
+
export function handleCancel(msg: CancelRequest, ctx: HandlerContext): void {
|
|
579
585
|
const sessionId = msg.sessionId;
|
|
580
586
|
if (sessionId) {
|
|
581
587
|
cancelGeneration(sessionId, ctx);
|
|
@@ -598,10 +604,7 @@ export function undoLastMessage(
|
|
|
598
604
|
return { removedCount };
|
|
599
605
|
}
|
|
600
606
|
|
|
601
|
-
export function handleUndo(
|
|
602
|
-
msg: UndoRequest,
|
|
603
|
-
ctx: HandlerContext,
|
|
604
|
-
): void {
|
|
607
|
+
export function handleUndo(msg: UndoRequest, ctx: HandlerContext): void {
|
|
605
608
|
const result = undoLastMessage(msg.sessionId, ctx);
|
|
606
609
|
if (!result) {
|
|
607
610
|
ctx.send({ type: "error", message: "No active session" });
|
|
@@ -616,7 +619,7 @@ export function handleUndo(
|
|
|
616
619
|
|
|
617
620
|
/**
|
|
618
621
|
* Regenerate the last assistant response for a session. The caller provides
|
|
619
|
-
* a `sendEvent` callback for delivering streaming events
|
|
622
|
+
* a `sendEvent` callback for delivering streaming events via HTTP/SSE.
|
|
620
623
|
* Returns null if the session is not found. Throws on regeneration errors.
|
|
621
624
|
*/
|
|
622
625
|
export async function regenerateResponse(
|
|
@@ -667,7 +670,7 @@ export async function handleRegenerate(
|
|
|
667
670
|
const regenerateChannel =
|
|
668
671
|
parseChannelId(session.getTurnChannelContext()?.assistantMessageChannel) ??
|
|
669
672
|
"vellum";
|
|
670
|
-
const sendEvent =
|
|
673
|
+
const sendEvent = makeEventSender({
|
|
671
674
|
ctx,
|
|
672
675
|
session,
|
|
673
676
|
conversationId: msg.sessionId,
|
|
@@ -717,8 +720,12 @@ export function handleUsageRequest(
|
|
|
717
720
|
export function deleteQueuedMessage(
|
|
718
721
|
sessionId: string,
|
|
719
722
|
requestId: string,
|
|
720
|
-
findSession: (
|
|
721
|
-
|
|
723
|
+
findSession: (
|
|
724
|
+
id: string,
|
|
725
|
+
) => { removeQueuedMessage(requestId: string): boolean } | undefined,
|
|
726
|
+
):
|
|
727
|
+
| { removed: true }
|
|
728
|
+
| { removed: false; reason: "session_not_found" | "message_not_found" } {
|
|
722
729
|
const session = findSession(sessionId);
|
|
723
730
|
if (!session) {
|
|
724
731
|
log.warn(
|
|
@@ -731,25 +738,20 @@ export function deleteQueuedMessage(
|
|
|
731
738
|
if (removed) {
|
|
732
739
|
return { removed: true };
|
|
733
740
|
}
|
|
734
|
-
log.warn(
|
|
735
|
-
{ sessionId, requestId },
|
|
736
|
-
"Queued message not found for deletion",
|
|
737
|
-
);
|
|
741
|
+
log.warn({ sessionId, requestId }, "Queued message not found for deletion");
|
|
738
742
|
return { removed: false, reason: "message_not_found" };
|
|
739
743
|
}
|
|
740
744
|
|
|
741
745
|
// ---------------------------------------------------------------------------
|
|
742
|
-
//
|
|
746
|
+
// HTTP handler (delegates to shared logic)
|
|
743
747
|
// ---------------------------------------------------------------------------
|
|
744
748
|
|
|
745
749
|
export function handleDeleteQueuedMessage(
|
|
746
750
|
msg: DeleteQueuedMessage,
|
|
747
751
|
ctx: HandlerContext,
|
|
748
752
|
): void {
|
|
749
|
-
const result = deleteQueuedMessage(
|
|
750
|
-
|
|
751
|
-
msg.requestId,
|
|
752
|
-
(id) => ctx.sessions.get(id),
|
|
753
|
+
const result = deleteQueuedMessage(msg.sessionId, msg.requestId, (id) =>
|
|
754
|
+
ctx.sessions.get(id),
|
|
753
755
|
);
|
|
754
756
|
if (result.removed) {
|
|
755
757
|
ctx.send({
|
|
@@ -775,24 +777,3 @@ export function handleReorderThreads(
|
|
|
775
777
|
})),
|
|
776
778
|
);
|
|
777
779
|
}
|
|
778
|
-
|
|
779
|
-
export const sessionHandlers = defineHandlers({
|
|
780
|
-
user_message: handleUserMessage,
|
|
781
|
-
confirmation_response: handleConfirmationResponse,
|
|
782
|
-
secret_response: handleSecretResponse,
|
|
783
|
-
session_list: (msg, ctx) =>
|
|
784
|
-
handleSessionList(ctx, msg.offset ?? 0, msg.limit ?? 50),
|
|
785
|
-
session_create: handleSessionCreate,
|
|
786
|
-
sessions_clear: (_msg, ctx) => handleSessionsClear(ctx),
|
|
787
|
-
session_switch: handleSessionSwitch,
|
|
788
|
-
session_rename: handleSessionRename,
|
|
789
|
-
cancel: handleCancel,
|
|
790
|
-
delete_queued_message: handleDeleteQueuedMessage,
|
|
791
|
-
history_request: handleHistoryRequest,
|
|
792
|
-
message_content_request: handleMessageContentRequest,
|
|
793
|
-
undo: handleUndo,
|
|
794
|
-
regenerate: handleRegenerate,
|
|
795
|
-
usage_request: handleUsageRequest,
|
|
796
|
-
conversation_search: handleConversationSearch,
|
|
797
|
-
reorder_threads: handleReorderThreads,
|
|
798
|
-
});
|