@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
|
@@ -1,45 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP route handlers for settings, identity/avatar, voice config,
|
|
3
|
-
* OAuth connect,
|
|
3
|
+
* OAuth connect, and workspace files.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - handlers/avatar.ts (generate_avatar)
|
|
8
|
-
* - handlers/oauth-connect.ts (oauth_connect_start)
|
|
9
|
-
* - handlers/twitter-auth.ts (twitter_auth_start, twitter_auth_status)
|
|
10
|
-
* - handlers/home-base.ts (home_base_get)
|
|
11
|
-
* - handlers/workspace-files.ts (workspace_files_list, workspace_file_read)
|
|
5
|
+
* Handles settings, identity/avatar, voice config,
|
|
6
|
+
* OAuth connect, and workspace files.
|
|
12
7
|
* - handlers/config-tools.ts (tool_names_list, tool_permission_simulate, env_vars_request)
|
|
13
8
|
*/
|
|
14
9
|
|
|
15
10
|
import { readFileSync } from "node:fs";
|
|
16
11
|
import { join } from "node:path";
|
|
17
12
|
|
|
18
|
-
import {
|
|
19
|
-
getPlatformAssistantId,
|
|
20
|
-
getPlatformBaseUrl,
|
|
21
|
-
} from "../../config/env.js";
|
|
22
|
-
import {
|
|
23
|
-
getNestedValue,
|
|
24
|
-
invalidateConfigCache,
|
|
25
|
-
loadConfig,
|
|
26
|
-
loadRawConfig,
|
|
27
|
-
saveRawConfig,
|
|
28
|
-
setNestedValue,
|
|
29
|
-
} from "../../config/loader.js";
|
|
30
13
|
import { loadSkillCatalog } from "../../config/skills.js";
|
|
31
14
|
import { normalizeActivationKey } from "../../daemon/handlers/config-voice.js";
|
|
32
|
-
import { getHomeBaseAppLink } from "../../home-base/app-link-store.js";
|
|
33
|
-
import {
|
|
34
|
-
bootstrapHomeBaseAppLink,
|
|
35
|
-
resolveHomeBaseAppId,
|
|
36
|
-
} from "../../home-base/bootstrap.js";
|
|
37
|
-
import {
|
|
38
|
-
getPrebuiltHomeBasePreview,
|
|
39
|
-
getPrebuiltHomeBaseTaskPayload,
|
|
40
|
-
} from "../../home-base/prebuilt/seed.js";
|
|
41
|
-
import { getPublicBaseUrl } from "../../inbound/public-ingress-urls.js";
|
|
42
|
-
import { getApp } from "../../memory/app-store.js";
|
|
43
15
|
import { orchestrateOAuthConnect } from "../../oauth/connect-orchestrator.js";
|
|
44
16
|
import {
|
|
45
17
|
getProviderProfile,
|
|
@@ -61,7 +33,6 @@ import {
|
|
|
61
33
|
import { getAllTools, getTool } from "../../tools/registry.js";
|
|
62
34
|
import { isSideEffectTool } from "../../tools/side-effects.js";
|
|
63
35
|
import { setAvatarTool } from "../../tools/system/avatar-generator.js";
|
|
64
|
-
import { ConfigError } from "../../util/errors.js";
|
|
65
36
|
import { pathExists } from "../../util/fs.js";
|
|
66
37
|
import { getLogger } from "../../util/logger.js";
|
|
67
38
|
import { getWorkspaceDir } from "../../util/platform.js";
|
|
@@ -80,9 +51,8 @@ function handleVoiceConfigUpdate(activationKey: string): Response {
|
|
|
80
51
|
if (!result.ok) {
|
|
81
52
|
return httpError("BAD_REQUEST", result.reason, 400);
|
|
82
53
|
}
|
|
83
|
-
// The
|
|
84
|
-
//
|
|
85
|
-
// applies the setting locally.
|
|
54
|
+
// The HTTP route validates and returns the canonical value; the caller
|
|
55
|
+
// (client) applies the setting locally.
|
|
86
56
|
return Response.json({ ok: true, activationKey: result.value });
|
|
87
57
|
}
|
|
88
58
|
|
|
@@ -269,296 +239,7 @@ async function handleOAuthConnectStart(body: {
|
|
|
269
239
|
}
|
|
270
240
|
|
|
271
241
|
// ---------------------------------------------------------------------------
|
|
272
|
-
//
|
|
273
|
-
// ---------------------------------------------------------------------------
|
|
274
|
-
|
|
275
|
-
function sanitizeTwitterAuthError(message: string): string {
|
|
276
|
-
const lower = message.toLowerCase();
|
|
277
|
-
if (lower.includes("timed out")) {
|
|
278
|
-
return "Twitter authentication timed out. Please try again.";
|
|
279
|
-
}
|
|
280
|
-
if (lower.includes("user_cancelled") || lower.includes("cancelled")) {
|
|
281
|
-
return "Twitter authentication was cancelled.";
|
|
282
|
-
}
|
|
283
|
-
if (lower.includes("denied") || lower.includes("invalid_grant")) {
|
|
284
|
-
return "Twitter denied the authorization request. Please try again.";
|
|
285
|
-
}
|
|
286
|
-
return "Twitter authentication failed. Please try again.";
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
async function handleTwitterAuthStart(): Promise<Response> {
|
|
290
|
-
try {
|
|
291
|
-
assertMetadataWritable();
|
|
292
|
-
} catch {
|
|
293
|
-
return httpError(
|
|
294
|
-
"UNPROCESSABLE_ENTITY",
|
|
295
|
-
"Credential metadata file has an unrecognized version. Cannot store OAuth credentials.",
|
|
296
|
-
422,
|
|
297
|
-
);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
try {
|
|
301
|
-
const raw = loadRawConfig();
|
|
302
|
-
const mode =
|
|
303
|
-
(getNestedValue(raw, "twitter.integrationMode") as string | undefined) ??
|
|
304
|
-
"local_byo";
|
|
305
|
-
if (mode === "managed") {
|
|
306
|
-
const apiKey = getSecureKey("credential:vellum:assistant_api_key");
|
|
307
|
-
if (!apiKey) {
|
|
308
|
-
return Response.json(
|
|
309
|
-
{
|
|
310
|
-
ok: false,
|
|
311
|
-
error:
|
|
312
|
-
"An AssistantAPIKey is required for managed Twitter. Run assistant setup.",
|
|
313
|
-
errorCode: "managed_missing_api_key",
|
|
314
|
-
},
|
|
315
|
-
{ status: 400 },
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
return Response.json(
|
|
319
|
-
{
|
|
320
|
-
ok: false,
|
|
321
|
-
error:
|
|
322
|
-
"Managed Twitter authentication is handled through the Vellum platform. Open Settings to connect.",
|
|
323
|
-
errorCode: "managed_auth_via_platform",
|
|
324
|
-
},
|
|
325
|
-
{ status: 400 },
|
|
326
|
-
);
|
|
327
|
-
}
|
|
328
|
-
if (mode !== "local_byo") {
|
|
329
|
-
return httpError(
|
|
330
|
-
"BAD_REQUEST",
|
|
331
|
-
'Twitter integration mode must be "local_byo" to use this flow.',
|
|
332
|
-
400,
|
|
333
|
-
);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
const clientId = getSecureKey("credential:integration:twitter:client_id");
|
|
337
|
-
if (!clientId) {
|
|
338
|
-
return httpError(
|
|
339
|
-
"BAD_REQUEST",
|
|
340
|
-
"No Twitter client credentials configured. Please set up your Client ID first.",
|
|
341
|
-
400,
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
const clientSecret =
|
|
346
|
-
getSecureKey("credential:integration:twitter:client_secret") || undefined;
|
|
347
|
-
|
|
348
|
-
let config;
|
|
349
|
-
try {
|
|
350
|
-
config = loadConfig();
|
|
351
|
-
} catch (err) {
|
|
352
|
-
const detail = err instanceof ConfigError ? err.message : String(err);
|
|
353
|
-
return httpError(
|
|
354
|
-
"INTERNAL_ERROR",
|
|
355
|
-
`Unable to load config: ${detail}`,
|
|
356
|
-
500,
|
|
357
|
-
);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
try {
|
|
361
|
-
getPublicBaseUrl(config);
|
|
362
|
-
} catch {
|
|
363
|
-
return httpError(
|
|
364
|
-
"BAD_REQUEST",
|
|
365
|
-
"Set ingress.publicBaseUrl (or INGRESS_PUBLIC_BASE_URL) so OAuth callbacks can route through /webhooks/oauth/callback on the gateway.",
|
|
366
|
-
400,
|
|
367
|
-
);
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
let authUrl: string | undefined;
|
|
371
|
-
|
|
372
|
-
const result = await orchestrateOAuthConnect({
|
|
373
|
-
service: "integration:twitter",
|
|
374
|
-
clientId,
|
|
375
|
-
clientSecret,
|
|
376
|
-
isInteractive: true,
|
|
377
|
-
openUrl: (url: string) => {
|
|
378
|
-
authUrl = url;
|
|
379
|
-
},
|
|
380
|
-
allowedTools: ["twitter_post"],
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
if (!result.success) {
|
|
384
|
-
log.error(
|
|
385
|
-
{ err: result.error },
|
|
386
|
-
"Twitter OAuth orchestrator returned error",
|
|
387
|
-
);
|
|
388
|
-
return httpError(
|
|
389
|
-
"INTERNAL_ERROR",
|
|
390
|
-
result.safeError
|
|
391
|
-
? result.error
|
|
392
|
-
: sanitizeTwitterAuthError(result.error),
|
|
393
|
-
500,
|
|
394
|
-
);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
if (result.deferred) {
|
|
398
|
-
return Response.json({
|
|
399
|
-
ok: true,
|
|
400
|
-
deferred: true,
|
|
401
|
-
authUrl: result.authUrl,
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
// Persist accountInfo to config
|
|
406
|
-
if (result.accountInfo) {
|
|
407
|
-
try {
|
|
408
|
-
const raw2 = loadRawConfig();
|
|
409
|
-
setNestedValue(raw2, "twitter.accountInfo", result.accountInfo);
|
|
410
|
-
saveRawConfig(raw2);
|
|
411
|
-
invalidateConfigCache();
|
|
412
|
-
} catch {
|
|
413
|
-
// Non-fatal
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
return Response.json({
|
|
418
|
-
ok: true,
|
|
419
|
-
accountInfo: result.accountInfo,
|
|
420
|
-
...(authUrl ? { authUrl } : {}),
|
|
421
|
-
});
|
|
422
|
-
} catch (err) {
|
|
423
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
424
|
-
log.error({ err }, "Twitter OAuth flow failed");
|
|
425
|
-
return httpError("INTERNAL_ERROR", sanitizeTwitterAuthError(message), 500);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
function handleTwitterAuthStatus(): Response {
|
|
430
|
-
try {
|
|
431
|
-
const accessToken = getSecureKey(
|
|
432
|
-
"credential:integration:twitter:access_token",
|
|
433
|
-
);
|
|
434
|
-
const raw = loadRawConfig();
|
|
435
|
-
const mode =
|
|
436
|
-
(getNestedValue(raw, "twitter.integrationMode") as
|
|
437
|
-
| "local_byo"
|
|
438
|
-
| "managed"
|
|
439
|
-
| undefined) ?? "local_byo";
|
|
440
|
-
const accountInfo = getNestedValue(raw, "twitter.accountInfo") as
|
|
441
|
-
| string
|
|
442
|
-
| undefined;
|
|
443
|
-
|
|
444
|
-
// Managed prerequisites
|
|
445
|
-
const integrationModeManaged = mode === "managed";
|
|
446
|
-
const assistantApiKeyPresent = !!getSecureKey(
|
|
447
|
-
"credential:vellum:assistant_api_key",
|
|
448
|
-
);
|
|
449
|
-
const platformBaseUrlFromEnv = getPlatformBaseUrl();
|
|
450
|
-
const platformBaseUrlFromConfig = (
|
|
451
|
-
raw?.platform as Record<string, unknown> | undefined
|
|
452
|
-
)?.baseUrl as string | undefined;
|
|
453
|
-
const platformAssistantIdResolvable = !!(
|
|
454
|
-
(platformBaseUrlFromEnv || platformBaseUrlFromConfig) &&
|
|
455
|
-
getPlatformAssistantId()
|
|
456
|
-
);
|
|
457
|
-
|
|
458
|
-
const managedPrerequisites = {
|
|
459
|
-
integrationModeManaged,
|
|
460
|
-
assistantApiKeyPresent,
|
|
461
|
-
platformAssistantIdResolvable,
|
|
462
|
-
};
|
|
463
|
-
const managedAvailable =
|
|
464
|
-
integrationModeManaged &&
|
|
465
|
-
assistantApiKeyPresent &&
|
|
466
|
-
platformAssistantIdResolvable;
|
|
467
|
-
|
|
468
|
-
// Local client configured
|
|
469
|
-
const localClientConfigured = !!getSecureKey(
|
|
470
|
-
"credential:integration:twitter:client_id",
|
|
471
|
-
);
|
|
472
|
-
|
|
473
|
-
// Strategy
|
|
474
|
-
const strategyRaw = getNestedValue(raw, "twitter.strategy") as
|
|
475
|
-
| string
|
|
476
|
-
| undefined;
|
|
477
|
-
const strategy = strategyRaw ?? "auto";
|
|
478
|
-
const strategyConfigured = strategyRaw !== undefined;
|
|
479
|
-
|
|
480
|
-
// In managed mode, connected is always false (auth goes through platform)
|
|
481
|
-
const connected = mode === "managed" ? false : !!accessToken;
|
|
482
|
-
|
|
483
|
-
return Response.json({
|
|
484
|
-
connected,
|
|
485
|
-
accountInfo: accountInfo ?? undefined,
|
|
486
|
-
mode,
|
|
487
|
-
managedAvailable,
|
|
488
|
-
managedPrerequisites,
|
|
489
|
-
localClientConfigured,
|
|
490
|
-
strategy,
|
|
491
|
-
strategyConfigured,
|
|
492
|
-
});
|
|
493
|
-
} catch (err) {
|
|
494
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
495
|
-
log.error({ err }, "Failed to get Twitter auth status");
|
|
496
|
-
return httpError("INTERNAL_ERROR", message, 500);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// ---------------------------------------------------------------------------
|
|
501
|
-
// Home base
|
|
502
|
-
// ---------------------------------------------------------------------------
|
|
503
|
-
|
|
504
|
-
function handleHomeBaseGet(ensureLinked: boolean): Response {
|
|
505
|
-
try {
|
|
506
|
-
if (ensureLinked !== false) {
|
|
507
|
-
bootstrapHomeBaseAppLink();
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
const appId = resolveHomeBaseAppId();
|
|
511
|
-
if (!appId) {
|
|
512
|
-
return Response.json({ homeBase: null });
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
const link = getHomeBaseAppLink();
|
|
516
|
-
const source = link?.source ?? "prebuilt_seed";
|
|
517
|
-
|
|
518
|
-
let preview: {
|
|
519
|
-
title: string;
|
|
520
|
-
subtitle: string;
|
|
521
|
-
description: string;
|
|
522
|
-
icon: string;
|
|
523
|
-
metrics: Array<{ label: string; value: string }>;
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
if (source === "personalized") {
|
|
527
|
-
const app = getApp(appId);
|
|
528
|
-
if (app) {
|
|
529
|
-
preview = {
|
|
530
|
-
title: app.name,
|
|
531
|
-
subtitle: "Dashboard",
|
|
532
|
-
description: app.description ?? "",
|
|
533
|
-
icon: app.icon ?? "🏠",
|
|
534
|
-
metrics: [],
|
|
535
|
-
};
|
|
536
|
-
} else {
|
|
537
|
-
preview = getPrebuiltHomeBasePreview();
|
|
538
|
-
}
|
|
539
|
-
} else {
|
|
540
|
-
preview = getPrebuiltHomeBasePreview();
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
const tasks = getPrebuiltHomeBaseTaskPayload();
|
|
544
|
-
|
|
545
|
-
return Response.json({
|
|
546
|
-
homeBase: {
|
|
547
|
-
appId,
|
|
548
|
-
source,
|
|
549
|
-
starterTasks: tasks.starterTasks,
|
|
550
|
-
onboardingTasks: tasks.onboardingTasks,
|
|
551
|
-
preview,
|
|
552
|
-
},
|
|
553
|
-
});
|
|
554
|
-
} catch (err) {
|
|
555
|
-
log.error({ err }, "Failed to resolve home base metadata");
|
|
556
|
-
return Response.json({ homeBase: null });
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
// ---------------------------------------------------------------------------
|
|
561
|
-
// Workspace files (IPC-style list/read)
|
|
242
|
+
// Workspace files (list/read)
|
|
562
243
|
// ---------------------------------------------------------------------------
|
|
563
244
|
|
|
564
245
|
const WORKSPACE_FILES = ["IDENTITY.md", "SOUL.md", "USER.md", "skills/"];
|
|
@@ -892,32 +573,7 @@ export function settingsRouteDefinitions(): RouteDefinition[] {
|
|
|
892
573
|
},
|
|
893
574
|
},
|
|
894
575
|
|
|
895
|
-
//
|
|
896
|
-
{
|
|
897
|
-
endpoint: "integrations/twitter/auth/start",
|
|
898
|
-
method: "POST",
|
|
899
|
-
policyKey: "integrations/twitter/auth/start",
|
|
900
|
-
handler: async () => handleTwitterAuthStart(),
|
|
901
|
-
},
|
|
902
|
-
{
|
|
903
|
-
endpoint: "integrations/twitter/auth/status",
|
|
904
|
-
method: "GET",
|
|
905
|
-
policyKey: "integrations/twitter/auth/status",
|
|
906
|
-
handler: () => handleTwitterAuthStatus(),
|
|
907
|
-
},
|
|
908
|
-
|
|
909
|
-
// Home base
|
|
910
|
-
{
|
|
911
|
-
endpoint: "home-base",
|
|
912
|
-
method: "GET",
|
|
913
|
-
policyKey: "home-base",
|
|
914
|
-
handler: ({ url }) => {
|
|
915
|
-
const ensureLinked = url.searchParams.get("ensureLinked") !== "false";
|
|
916
|
-
return handleHomeBaseGet(ensureLinked);
|
|
917
|
-
},
|
|
918
|
-
},
|
|
919
|
-
|
|
920
|
-
// Workspace files (IPC-style list/read -- distinct from workspace-routes.ts tree/file)
|
|
576
|
+
// Workspace files (list/read -- distinct from workspace-routes.ts tree/file)
|
|
921
577
|
{
|
|
922
578
|
endpoint: "workspace-files",
|
|
923
579
|
method: "GET",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Route handlers for skill management operations.
|
|
3
3
|
*
|
|
4
|
-
* These HTTP routes expose the same business logic as the
|
|
4
|
+
* These HTTP routes expose the same business logic as the skill handlers,
|
|
5
5
|
* using the standalone functions extracted in `../../daemon/handlers/skills.ts`.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -173,12 +173,13 @@ export function skillRouteDefinitions(deps: SkillRouteDeps): RouteDefinition[] {
|
|
|
173
173
|
if (!body.sourceText || typeof body.sourceText !== "string") {
|
|
174
174
|
return httpError("BAD_REQUEST", "sourceText is required", 400);
|
|
175
175
|
}
|
|
176
|
-
const result = await draftSkill(
|
|
177
|
-
{ sourceText: body.sourceText },
|
|
178
|
-
ctx(),
|
|
179
|
-
);
|
|
176
|
+
const result = await draftSkill({ sourceText: body.sourceText }, ctx());
|
|
180
177
|
if (!result.success) {
|
|
181
|
-
return httpError(
|
|
178
|
+
return httpError(
|
|
179
|
+
"INTERNAL_ERROR",
|
|
180
|
+
result.error ?? "Draft failed",
|
|
181
|
+
500,
|
|
182
|
+
);
|
|
182
183
|
}
|
|
183
184
|
return Response.json(result);
|
|
184
185
|
},
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Route handlers for subagent operations.
|
|
3
3
|
*
|
|
4
4
|
* Exposes subagent detail, abort, and message operations over HTTP,
|
|
5
|
-
* sharing business logic with the
|
|
5
|
+
* sharing business logic with the handlers in
|
|
6
6
|
* `daemon/handlers/subagents.ts`.
|
|
7
7
|
*/
|
|
8
8
|
import { getMessages } from "../../memory/conversation-crud.js";
|
|
@@ -14,7 +14,7 @@ import type { RouteDefinition } from "../http-router.js";
|
|
|
14
14
|
const log = getLogger("subagents-routes");
|
|
15
15
|
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
|
-
// Shared business logic (used by both
|
|
17
|
+
// Shared business logic (used by both message handlers and HTTP routes)
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
19
|
|
|
20
20
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
@@ -167,7 +167,7 @@ export function subagentRouteDefinitions(): RouteDefinition[] {
|
|
|
167
167
|
const manager = getSubagentManager();
|
|
168
168
|
const aborted = manager.abort(
|
|
169
169
|
params.id,
|
|
170
|
-
() => {}, // No
|
|
170
|
+
() => {}, // No send callback needed for HTTP
|
|
171
171
|
sessionId,
|
|
172
172
|
);
|
|
173
173
|
|
|
@@ -219,13 +219,7 @@ export function subagentRouteDefinitions(): RouteDefinition[] {
|
|
|
219
219
|
|
|
220
220
|
const result = await manager.sendMessage(params.id, body.content);
|
|
221
221
|
|
|
222
|
-
if (result === "
|
|
223
|
-
return httpError(
|
|
224
|
-
"CONFLICT",
|
|
225
|
-
`Subagent "${params.id}" message queue is full. Please wait for current messages to be processed.`,
|
|
226
|
-
409,
|
|
227
|
-
);
|
|
228
|
-
} else if (result === "empty") {
|
|
222
|
+
if (result === "empty") {
|
|
229
223
|
return httpError(
|
|
230
224
|
"BAD_REQUEST",
|
|
231
225
|
"Message content is empty or whitespace-only.",
|
|
@@ -62,11 +62,7 @@ export async function handleSurfaceAction(
|
|
|
62
62
|
: findSessionBySurfaceId?.(surfaceId);
|
|
63
63
|
|
|
64
64
|
if (!session) {
|
|
65
|
-
return httpError(
|
|
66
|
-
"NOT_FOUND",
|
|
67
|
-
"No active session found",
|
|
68
|
-
404,
|
|
69
|
-
);
|
|
65
|
+
return httpError("NOT_FOUND", "No active session found", 404);
|
|
70
66
|
}
|
|
71
67
|
|
|
72
68
|
try {
|
|
@@ -115,11 +111,7 @@ export async function handleSurfaceUndo(
|
|
|
115
111
|
: findSessionBySurfaceId?.(surfaceId);
|
|
116
112
|
|
|
117
113
|
if (!session) {
|
|
118
|
-
return httpError(
|
|
119
|
-
"NOT_FOUND",
|
|
120
|
-
"No active session found",
|
|
121
|
-
404,
|
|
122
|
-
);
|
|
114
|
+
return httpError("NOT_FOUND", "No active session found", 404);
|
|
123
115
|
}
|
|
124
116
|
|
|
125
117
|
if (!session.handleSurfaceUndo) {
|
|
@@ -132,10 +124,7 @@ export async function handleSurfaceUndo(
|
|
|
132
124
|
|
|
133
125
|
try {
|
|
134
126
|
session.handleSurfaceUndo(surfaceId);
|
|
135
|
-
log.info(
|
|
136
|
-
{ sessionId, surfaceId },
|
|
137
|
-
"Surface undo handled via HTTP",
|
|
138
|
-
);
|
|
127
|
+
log.info({ sessionId, surfaceId }, "Surface undo handled via HTTP");
|
|
139
128
|
return Response.json({ ok: true });
|
|
140
129
|
} catch (err) {
|
|
141
130
|
log.error(
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* session's in-memory surface state. Used by clients to re-hydrate surfaces
|
|
6
6
|
* whose data was stripped during memory compaction.
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
SurfaceData,
|
|
10
|
+
SurfaceType,
|
|
11
|
+
} from "../../daemon/message-types/surfaces.js";
|
|
9
12
|
import { getLogger } from "../../util/logger.js";
|
|
10
13
|
import { httpError } from "../http-errors.js";
|
|
11
14
|
import type { RouteDefinition } from "../http-router.js";
|
|
@@ -53,12 +56,20 @@ export function surfaceContentRouteDefinitions(deps: {
|
|
|
53
56
|
|
|
54
57
|
const sessionId = url.searchParams.get("sessionId");
|
|
55
58
|
if (!sessionId) {
|
|
56
|
-
return httpError(
|
|
59
|
+
return httpError(
|
|
60
|
+
"BAD_REQUEST",
|
|
61
|
+
"sessionId query parameter is required",
|
|
62
|
+
400,
|
|
63
|
+
);
|
|
57
64
|
}
|
|
58
65
|
|
|
59
66
|
const surfaceId = params.surfaceId;
|
|
60
67
|
if (!surfaceId) {
|
|
61
|
-
return httpError(
|
|
68
|
+
return httpError(
|
|
69
|
+
"BAD_REQUEST",
|
|
70
|
+
"surfaceId path parameter is required",
|
|
71
|
+
400,
|
|
72
|
+
);
|
|
62
73
|
}
|
|
63
74
|
|
|
64
75
|
const session = deps.findSession(sessionId);
|
|
@@ -73,7 +84,10 @@ export function surfaceContentRouteDefinitions(deps: {
|
|
|
73
84
|
// Look up the surface in the session's in-memory state.
|
|
74
85
|
const stored = session.surfaceState.get(surfaceId);
|
|
75
86
|
if (stored) {
|
|
76
|
-
log.info(
|
|
87
|
+
log.info(
|
|
88
|
+
{ sessionId, surfaceId },
|
|
89
|
+
"Surface content served from surfaceState",
|
|
90
|
+
);
|
|
77
91
|
return Response.json({
|
|
78
92
|
surfaceId,
|
|
79
93
|
surfaceType: stored.surfaceType,
|
|
@@ -88,7 +102,10 @@ export function surfaceContentRouteDefinitions(deps: {
|
|
|
88
102
|
(s) => s.surfaceId === surfaceId,
|
|
89
103
|
);
|
|
90
104
|
if (turnSurface) {
|
|
91
|
-
log.info(
|
|
105
|
+
log.info(
|
|
106
|
+
{ sessionId, surfaceId },
|
|
107
|
+
"Surface content served from currentTurnSurfaces",
|
|
108
|
+
);
|
|
92
109
|
return Response.json({
|
|
93
110
|
surfaceId,
|
|
94
111
|
surfaceType: turnSurface.surfaceType,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Route handlers for work item (task queue) operations.
|
|
3
3
|
*
|
|
4
4
|
* Exposes all work item CRUD and lifecycle operations over HTTP,
|
|
5
|
-
* sharing business logic with the
|
|
5
|
+
* sharing business logic with the handlers in
|
|
6
6
|
* `daemon/handlers/work-items.ts`.
|
|
7
7
|
*/
|
|
8
8
|
import type { ServerMessage } from "../../daemon/message-protocol.js";
|
|
@@ -195,7 +195,7 @@ function extractToolHighlights(
|
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
// ---------------------------------------------------------------------------
|
|
198
|
-
// Shared business logic functions (exported for
|
|
198
|
+
// Shared business logic functions (exported for handler reuse)
|
|
199
199
|
// ---------------------------------------------------------------------------
|
|
200
200
|
|
|
201
201
|
export interface WorkItemOutputResult {
|
|
@@ -283,8 +283,7 @@ export function getWorkItemOutput(id: string): WorkItemOutputResult {
|
|
|
283
283
|
if (!summary && msgs.length > 0) {
|
|
284
284
|
const toolHighlights = extractToolHighlights(msgs, 10);
|
|
285
285
|
if (toolHighlights.length > 0) {
|
|
286
|
-
summary =
|
|
287
|
-
"Task completed. Tool outcomes:\n" + toolHighlights.join("\n");
|
|
286
|
+
summary = "Task completed. Tool outcomes:\n" + toolHighlights.join("\n");
|
|
288
287
|
highlights = toolHighlights.slice(0, 5);
|
|
289
288
|
}
|
|
290
289
|
}
|
|
@@ -458,10 +457,7 @@ export function workItemRouteDefinitions(
|
|
|
458
457
|
// Don't allow overwriting a cancelled status
|
|
459
458
|
if (body.status !== undefined) {
|
|
460
459
|
const existing = getWorkItem(params.id);
|
|
461
|
-
if (
|
|
462
|
-
existing?.status === "cancelled" &&
|
|
463
|
-
body.status !== "cancelled"
|
|
464
|
-
) {
|
|
460
|
+
if (existing?.status === "cancelled" && body.status !== "cancelled") {
|
|
465
461
|
return Response.json({ item: existing });
|
|
466
462
|
}
|
|
467
463
|
}
|
|
@@ -497,7 +493,11 @@ export function workItemRouteDefinitions(
|
|
|
497
493
|
handler: ({ params }) => {
|
|
498
494
|
const existing = getWorkItem(params.id);
|
|
499
495
|
if (!existing) {
|
|
500
|
-
return httpError(
|
|
496
|
+
return httpError(
|
|
497
|
+
"NOT_FOUND",
|
|
498
|
+
`Work item not found: ${params.id}`,
|
|
499
|
+
404,
|
|
500
|
+
);
|
|
501
501
|
}
|
|
502
502
|
if (existing.status !== "awaiting_review") {
|
|
503
503
|
return httpError(
|
|
@@ -580,9 +580,16 @@ export function workItemRouteDefinitions(
|
|
|
580
580
|
handler: async ({ req, params }) => {
|
|
581
581
|
const body = (await req.json()) as { approvedTools?: string[] };
|
|
582
582
|
if (!Array.isArray(body.approvedTools)) {
|
|
583
|
-
return httpError(
|
|
583
|
+
return httpError(
|
|
584
|
+
"BAD_REQUEST",
|
|
585
|
+
"approvedTools array is required",
|
|
586
|
+
400,
|
|
587
|
+
);
|
|
584
588
|
}
|
|
585
|
-
const result = approveWorkItemPermissions(
|
|
589
|
+
const result = approveWorkItemPermissions(
|
|
590
|
+
params.id,
|
|
591
|
+
body.approvedTools,
|
|
592
|
+
);
|
|
586
593
|
if (!result.success) {
|
|
587
594
|
return httpError("NOT_FOUND", result.error!, 404);
|
|
588
595
|
}
|
|
@@ -620,11 +627,7 @@ export function workItemRouteDefinitions(
|
|
|
620
627
|
}
|
|
621
628
|
|
|
622
629
|
if (workItem.status === "running") {
|
|
623
|
-
return httpError(
|
|
624
|
-
"CONFLICT",
|
|
625
|
-
"Work item is already running",
|
|
626
|
-
409,
|
|
627
|
-
);
|
|
630
|
+
return httpError("CONFLICT", "Work item is already running", 409);
|
|
628
631
|
}
|
|
629
632
|
|
|
630
633
|
const NON_RUNNABLE_STATUSES: readonly string[] = ["archived"];
|
|
@@ -755,10 +758,7 @@ export function workItemRouteDefinitions(
|
|
|
755
758
|
if (session) {
|
|
756
759
|
(session as { headlessLock: boolean }).headlessLock = false;
|
|
757
760
|
}
|
|
758
|
-
log.error(
|
|
759
|
-
{ err, workItemId },
|
|
760
|
-
"work_item_run_task (HTTP) failed",
|
|
761
|
-
);
|
|
761
|
+
log.error({ err, workItemId }, "work_item_run_task (HTTP) failed");
|
|
762
762
|
updateWorkItem(workItemId, {
|
|
763
763
|
status: "failed",
|
|
764
764
|
lastRunStatus: "failed",
|
|
@@ -797,11 +797,7 @@ export function workItemRouteDefinitions(
|
|
|
797
797
|
{ err, workItemId: params.id },
|
|
798
798
|
"GET /v1/work-items/:id/output failed",
|
|
799
799
|
);
|
|
800
|
-
return httpError(
|
|
801
|
-
"INTERNAL_ERROR",
|
|
802
|
-
"Failed to load task output",
|
|
803
|
-
500,
|
|
804
|
-
);
|
|
800
|
+
return httpError("INTERNAL_ERROR", "Failed to load task output", 500);
|
|
805
801
|
}
|
|
806
802
|
},
|
|
807
803
|
},
|
|
@@ -657,9 +657,9 @@ describe("POST /v1/workspace/rename", () => {
|
|
|
657
657
|
const res = await handler(ctx);
|
|
658
658
|
expect(res.status).toBe(200);
|
|
659
659
|
expect(existsSync(srcDir)).toBe(false);
|
|
660
|
-
expect(
|
|
661
|
-
|
|
662
|
-
)
|
|
660
|
+
expect(existsSync(join(testWorkspaceDir, "dir-renamed", "child.txt"))).toBe(
|
|
661
|
+
true,
|
|
662
|
+
);
|
|
663
663
|
});
|
|
664
664
|
|
|
665
665
|
test("rejects missing source with 404", async () => {
|