@vellumai/assistant 0.3.4 → 0.3.6
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/Dockerfile +2 -0
- package/README.md +88 -2
- package/eslint.config.mjs +31 -0
- package/package.json +1 -1
- package/scripts/ipc/check-swift-decoder-drift.ts +4 -1
- package/scripts/ipc/generate-swift.ts +31 -2
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +438 -1
- package/src/__tests__/approval-conversation-turn.test.ts +214 -0
- package/src/__tests__/approval-hardcoded-copy-guard.test.ts +41 -0
- package/src/__tests__/approval-message-composer.test.ts +253 -0
- package/src/__tests__/browser-manager.test.ts +1 -0
- package/src/__tests__/call-conversation-messages.test.ts +130 -0
- package/src/__tests__/call-domain.test.ts +12 -2
- package/src/__tests__/call-orchestrator.test.ts +799 -249
- package/src/__tests__/call-pointer-messages.test.ts +148 -0
- package/src/__tests__/call-recovery.test.ts +3 -0
- package/src/__tests__/call-routes-http.test.ts +32 -2
- package/src/__tests__/call-store.test.ts +3 -0
- package/src/__tests__/channel-approval-routes.test.ts +1277 -98
- package/src/__tests__/channel-approval.test.ts +37 -0
- package/src/__tests__/channel-approvals.test.ts +36 -50
- package/src/__tests__/channel-guardian.test.ts +630 -22
- package/src/__tests__/channel-readiness-service.test.ts +324 -0
- package/src/__tests__/checker.test.ts +14 -7
- package/src/__tests__/clarification-resolver.test.ts +44 -24
- package/src/__tests__/commit-message-enrichment-service.test.ts +9 -4
- package/src/__tests__/computer-use-session-working-dir.test.ts +8 -0
- package/src/__tests__/config-schema.test.ts +14 -8
- package/src/__tests__/context-window-manager.test.ts +30 -2
- package/src/__tests__/contradiction-checker.test.ts +20 -5
- package/src/__tests__/credential-security-invariants.test.ts +7 -2
- package/src/__tests__/daemon-lifecycle.test.ts +13 -12
- package/src/__tests__/db-migration-rollback.test.ts +752 -0
- package/src/__tests__/dictation-mode-detection.test.ts +63 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -0
- package/src/__tests__/entity-search.test.ts +615 -0
- package/src/__tests__/fuzzy-match-property.test.ts +5 -5
- package/src/__tests__/guardian-action-store.test.ts +123 -0
- package/src/__tests__/guardian-action-sweep.test.ts +277 -0
- package/src/__tests__/guardian-dispatch.test.ts +389 -0
- package/src/__tests__/guardian-question-copy.test.ts +47 -0
- package/src/__tests__/handlers-telegram-config.test.ts +4 -2
- package/src/__tests__/handlers-twilio-config.test.ts +533 -0
- package/src/__tests__/intent-routing.test.ts +2 -0
- package/src/__tests__/ipc-snapshot.test.ts +291 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +828 -0
- package/src/__tests__/messaging-send-tool.test.ts +65 -0
- package/src/__tests__/model-intents.test.ts +96 -0
- package/src/__tests__/no-direct-anthropic-sdk-imports.test.ts +42 -0
- package/src/__tests__/oauth2-gateway-transport.test.ts +130 -0
- package/src/__tests__/onboarding-starter-tasks.test.ts +2 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +89 -13
- package/src/__tests__/provider-error-scenarios.test.ts +621 -0
- package/src/__tests__/provider-fail-open-selection.test.ts +119 -0
- package/src/__tests__/qdrant-manager.test.ts +27 -20
- package/src/__tests__/relay-server.test.ts +779 -40
- package/src/__tests__/run-orchestrator-assistant-events.test.ts +6 -0
- package/src/__tests__/run-orchestrator.test.ts +42 -4
- package/src/__tests__/runtime-runs-http.test.ts +17 -1
- package/src/__tests__/runtime-runs.test.ts +16 -0
- package/src/__tests__/schedule-store.test.ts +18 -4
- package/src/__tests__/scheduler-recurrence.test.ts +13 -4
- package/src/__tests__/session-abort-tool-results.test.ts +6 -0
- package/src/__tests__/session-agent-loop.test.ts +857 -0
- package/src/__tests__/session-conflict-gate.test.ts +6 -0
- package/src/__tests__/session-pre-run-repair.test.ts +6 -0
- package/src/__tests__/session-profile-injection.test.ts +6 -0
- package/src/__tests__/session-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/session-queue.test.ts +6 -0
- package/src/__tests__/session-runtime-assembly.test.ts +321 -13
- package/src/__tests__/session-slash-known.test.ts +6 -0
- package/src/__tests__/session-slash-queue.test.ts +6 -0
- package/src/__tests__/session-slash-unknown.test.ts +6 -0
- package/src/__tests__/session-surfaces-task-progress.test.ts +2 -0
- package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -0
- package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -0
- package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -0
- package/src/__tests__/session-workspace-injection.test.ts +6 -0
- package/src/__tests__/session-workspace-tool-tracking.test.ts +6 -0
- package/src/__tests__/skills.test.ts +2 -0
- package/src/__tests__/sms-messaging-provider.test.ts +126 -0
- package/src/__tests__/starter-task-flow.test.ts +2 -0
- package/src/__tests__/swarm-dag-pathological.test.ts +535 -0
- package/src/__tests__/system-prompt.test.ts +2 -0
- package/src/__tests__/task-management-tools.test.ts +2 -2
- package/src/__tests__/task-runner.test.ts +14 -4
- package/src/__tests__/terminal-tools.test.ts +25 -19
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +545 -0
- package/src/__tests__/tool-executor-shell-integration.test.ts +11 -11
- package/src/__tests__/tool-executor.test.ts +23 -24
- package/src/__tests__/trust-store.test.ts +3 -3
- package/src/__tests__/twilio-rest.test.ts +29 -0
- package/src/__tests__/twilio-routes-elevenlabs.test.ts +3 -0
- package/src/__tests__/twilio-routes-twiml.test.ts +11 -0
- package/src/__tests__/twilio-routes.test.ts +167 -11
- package/src/__tests__/twitter-cli-error-shaping.test.ts +2 -2
- package/src/__tests__/user-reference.test.ts +2 -0
- package/src/__tests__/voice-quality.test.ts +222 -0
- package/src/__tests__/web-search.test.ts +46 -30
- package/src/__tests__/work-item-output.test.ts +110 -0
- package/src/agent/loop.ts +1 -1
- package/src/agent-heartbeat/agent-heartbeat-service.ts +2 -10
- package/src/amazon/client.ts +1418 -0
- package/src/amazon/request-extractor.ts +135 -0
- package/src/amazon/session.ts +109 -0
- package/src/autonomy/autonomy-store.ts +5 -5
- package/src/browser-extension-relay/client.ts +124 -0
- package/src/browser-extension-relay/protocol.ts +63 -0
- package/src/browser-extension-relay/server.ts +177 -0
- package/src/bundler/app-bundler.ts +3 -3
- package/src/bundler/bundle-signer.ts +1 -1
- package/src/bundler/signature-verifier.ts +1 -1
- package/src/calls/call-conversation-messages.ts +33 -0
- package/src/calls/call-domain.ts +114 -10
- package/src/calls/call-orchestrator.ts +268 -59
- package/src/calls/call-pointer-messages.ts +53 -0
- package/src/calls/call-recovery.ts +3 -8
- package/src/calls/call-store.ts +69 -87
- package/src/calls/elevenlabs-config.ts +3 -2
- package/src/calls/guardian-action-sweep.ts +105 -0
- package/src/calls/guardian-dispatch.ts +203 -0
- package/src/calls/guardian-question-copy.ts +133 -0
- package/src/calls/relay-server.ts +466 -8
- package/src/calls/speaker-identification.ts +1 -1
- package/src/calls/twilio-config.ts +22 -14
- package/src/calls/twilio-provider.ts +6 -4
- package/src/calls/twilio-rest.ts +308 -7
- package/src/calls/twilio-routes.ts +65 -12
- package/src/calls/types.ts +3 -1
- package/src/channels/types.ts +25 -0
- package/src/cli/amazon.ts +815 -0
- package/src/cli/config-commands.ts +2 -2
- package/src/cli/core-commands.ts +4 -3
- package/src/cli/influencer.ts +244 -0
- package/src/cli/map.ts +89 -6
- package/src/cli.ts +1 -1
- package/src/config/agent-schema.ts +171 -0
- package/src/config/bundled-skills/amazon/SKILL.md +127 -0
- package/src/config/bundled-skills/amazon/icon.svg +13 -0
- package/src/config/bundled-skills/api-mapping/SKILL.md +78 -0
- package/src/config/bundled-skills/browser/SKILL.md +1 -0
- package/src/config/bundled-skills/browser/TOOLS.json +17 -0
- package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +25 -0
- package/src/config/bundled-skills/doordash/SKILL.md +51 -51
- package/src/config/bundled-skills/email-setup/SKILL.md +14 -5
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +183 -0
- package/src/config/bundled-skills/influencer/SKILL.md +144 -0
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +15 -0
- package/src/config/bundled-skills/knowledge-graph/TOOLS.json +56 -0
- package/src/config/bundled-skills/knowledge-graph/tools/graph-query.ts +185 -0
- package/src/config/bundled-skills/macos-automation/icon.svg +12 -0
- package/src/config/bundled-skills/media-processing/SKILL.md +176 -0
- package/src/config/bundled-skills/media-processing/TOOLS.json +230 -0
- package/src/config/bundled-skills/media-processing/__tests__/concurrency-pool.test.ts +77 -0
- package/src/config/bundled-skills/media-processing/__tests__/cost-tracker.test.ts +69 -0
- package/src/config/bundled-skills/media-processing/__tests__/preprocess.test.ts +303 -0
- package/src/config/bundled-skills/media-processing/services/concurrency-pool.ts +55 -0
- package/src/config/bundled-skills/media-processing/services/cost-tracker.ts +86 -0
- package/src/config/bundled-skills/media-processing/services/gemini-map.ts +339 -0
- package/src/config/bundled-skills/media-processing/services/preprocess.ts +551 -0
- package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +259 -0
- package/src/config/bundled-skills/media-processing/services/reduce.ts +197 -0
- package/src/config/bundled-skills/media-processing/tools/analyze-keyframes.ts +136 -0
- package/src/config/bundled-skills/media-processing/tools/extract-keyframes.ts +59 -0
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +195 -0
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +197 -0
- package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +143 -0
- package/src/config/bundled-skills/media-processing/tools/media-status.ts +75 -0
- package/src/config/bundled-skills/media-processing/tools/query-media-events.ts +65 -0
- package/src/config/bundled-skills/messaging/SKILL.md +33 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -7
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +2 -1
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +5 -1
- package/src/config/bundled-skills/phone-calls/SKILL.md +88 -23
- package/src/config/bundled-skills/twitter/SKILL.md +19 -3
- package/src/config/bundled-skills/twitter/icon.svg +14 -0
- package/src/config/bundled-tool-registry.ts +310 -0
- package/src/config/calls-schema.ts +181 -0
- package/src/config/core-schema.ts +309 -0
- package/src/config/defaults.ts +28 -3
- package/src/config/env-registry.ts +162 -0
- package/src/config/env.ts +175 -0
- package/src/config/loader.ts +6 -6
- package/src/config/memory-schema.ts +528 -0
- package/src/config/sandbox-schema.ts +55 -0
- package/src/config/schema.ts +158 -1133
- package/src/config/skill-state.ts +1 -1
- package/src/config/skills-schema.ts +32 -0
- package/src/config/skills.ts +35 -24
- package/src/config/system-prompt.ts +131 -56
- package/src/config/templates/IDENTITY.md +2 -2
- package/src/config/templates/SOUL.md +1 -1
- package/src/config/types.ts +1 -0
- package/src/config/user-reference.ts +4 -9
- package/src/config/vellum-skills/catalog.json +6 -7
- package/src/config/vellum-skills/chatgpt-import/tools/chatgpt-import.ts +5 -1
- package/src/config/vellum-skills/slack-oauth-setup/SKILL.md +4 -3
- package/src/config/vellum-skills/sms-setup/SKILL.md +216 -0
- package/src/config/vellum-skills/twilio-setup/SKILL.md +40 -8
- package/src/context/window-manager.ts +27 -7
- package/src/daemon/approval-generators.ts +186 -0
- package/src/daemon/approved-devices-store.ts +140 -0
- package/src/daemon/assistant-attachments.ts +1 -1
- package/src/daemon/classifier.ts +35 -32
- package/src/daemon/config-watcher.ts +1 -1
- package/src/daemon/daemon-control.ts +217 -0
- package/src/daemon/handlers/apps.ts +2 -3
- package/src/daemon/handlers/config-channels.ts +158 -0
- package/src/daemon/handlers/config-inbox.ts +540 -0
- package/src/daemon/handlers/config-ingress.ts +231 -0
- package/src/daemon/handlers/config-integrations.ts +258 -0
- package/src/daemon/handlers/config-model.ts +143 -0
- package/src/daemon/handlers/config-parental.ts +163 -0
- package/src/daemon/handlers/config-scheduling.ts +172 -0
- package/src/daemon/handlers/config-slack.ts +92 -0
- package/src/daemon/handlers/config-telegram.ts +301 -0
- package/src/daemon/handlers/config-tools.ts +177 -0
- package/src/daemon/handlers/config-trust.ts +104 -0
- package/src/daemon/handlers/config-twilio.ts +1080 -0
- package/src/daemon/handlers/config.ts +53 -1689
- package/src/daemon/handlers/diagnostics.ts +1 -1
- package/src/daemon/handlers/dictation.ts +180 -0
- package/src/daemon/handlers/documents.ts +18 -32
- package/src/daemon/handlers/identity.ts +14 -23
- package/src/daemon/handlers/index.ts +11 -0
- package/src/daemon/handlers/misc.ts +3 -5
- package/src/daemon/handlers/pairing.ts +98 -0
- package/src/daemon/handlers/sessions.ts +56 -5
- package/src/daemon/handlers/shared.ts +6 -1
- package/src/daemon/handlers/skills.ts +1 -1
- package/src/daemon/handlers/twitter-auth.ts +2 -0
- package/src/daemon/handlers/work-items.ts +17 -9
- package/src/daemon/handlers/workspace-files.ts +4 -3
- package/src/daemon/install-cli-launchers.ts +113 -0
- package/src/daemon/ipc-contract/apps.ts +356 -0
- package/src/daemon/ipc-contract/browser.ts +74 -0
- package/src/daemon/ipc-contract/computer-use.ts +151 -0
- package/src/daemon/ipc-contract/diagnostics.ts +56 -0
- package/src/daemon/ipc-contract/documents.ts +74 -0
- package/src/daemon/ipc-contract/inbox.ts +209 -0
- package/src/daemon/ipc-contract/integrations.ts +284 -0
- package/src/daemon/ipc-contract/memory.ts +48 -0
- package/src/daemon/ipc-contract/messages.ts +211 -0
- package/src/daemon/ipc-contract/pairing.ts +45 -0
- package/src/daemon/ipc-contract/parental-control.ts +95 -0
- package/src/daemon/ipc-contract/schedules.ts +97 -0
- package/src/daemon/ipc-contract/sessions.ts +315 -0
- package/src/daemon/ipc-contract/shared.ts +42 -0
- package/src/daemon/ipc-contract/skills.ts +120 -0
- package/src/daemon/ipc-contract/subagents.ts +58 -0
- package/src/daemon/ipc-contract/surfaces.ts +250 -0
- package/src/daemon/ipc-contract/trust.ts +60 -0
- package/src/daemon/ipc-contract/work-items.ts +225 -0
- package/src/daemon/ipc-contract/workspace.ts +113 -0
- package/src/daemon/ipc-contract-inventory.json +70 -0
- package/src/daemon/ipc-contract-inventory.ts +55 -29
- package/src/daemon/ipc-contract.ts +229 -2426
- package/src/daemon/ipc-protocol.ts +1 -1
- package/src/daemon/ipc-validate.ts +7 -0
- package/src/daemon/lifecycle.ts +97 -377
- package/src/daemon/pairing-store.ts +177 -0
- package/src/daemon/providers-setup.ts +43 -0
- package/src/daemon/ride-shotgun-handler.ts +68 -3
- package/src/daemon/server.ts +66 -46
- package/src/daemon/session-agent-loop-handlers.ts +421 -0
- package/src/daemon/session-agent-loop.ts +117 -275
- package/src/daemon/session-dynamic-profile.ts +1 -1
- package/src/daemon/session-history.ts +1 -1
- package/src/daemon/session-media-retry.ts +1 -1
- package/src/daemon/session-messaging.ts +37 -2
- package/src/daemon/session-notifiers.ts +5 -25
- package/src/daemon/session-process.ts +99 -59
- package/src/daemon/session-queue-manager.ts +96 -4
- package/src/daemon/session-runtime-assembly.ts +199 -10
- package/src/daemon/session-surfaces.ts +19 -4
- package/src/daemon/session-tool-setup.ts +30 -30
- package/src/daemon/session-workspace.ts +1 -1
- package/src/daemon/session.ts +35 -2
- package/src/daemon/shutdown-handlers.ts +122 -0
- package/src/daemon/trace-emitter.ts +1 -1
- package/src/daemon/watch-handler.ts +36 -33
- package/src/doordash/cart-queries.ts +787 -0
- package/src/doordash/client.ts +144 -127
- package/src/doordash/order-queries.ts +85 -0
- package/src/doordash/queries.ts +10 -1308
- package/src/doordash/search-queries.ts +203 -0
- package/src/doordash/session.ts +3 -2
- package/src/doordash/store-queries.ts +246 -0
- package/src/doordash/types.ts +367 -0
- package/src/email/providers/agentmail.ts +2 -1
- package/src/email/providers/index.ts +3 -2
- package/src/email/service.ts +3 -2
- package/src/errors.ts +43 -0
- package/src/home-base/prebuilt/seed.ts +1 -1
- package/src/hooks/cli.ts +6 -5
- package/src/hooks/config.ts +6 -8
- package/src/hooks/discovery.ts +6 -5
- package/src/hooks/manager.ts +4 -3
- package/src/hooks/runner.ts +2 -2
- package/src/hooks/templates.ts +5 -5
- package/src/inbound/public-ingress-urls.ts +6 -4
- package/src/index.ts +4 -2
- package/src/influencer/client.ts +1104 -0
- package/src/instrument.ts +4 -3
- package/src/logfire.ts +4 -3
- package/src/memory/admin.ts +25 -35
- package/src/memory/attachments-store.ts +4 -7
- package/src/memory/channel-delivery-store.ts +30 -1
- package/src/memory/channel-guardian-store.ts +202 -2
- package/src/memory/clarification-resolver.ts +37 -33
- package/src/memory/conflict-store.ts +67 -61
- package/src/memory/contradiction-checker.ts +141 -117
- package/src/memory/conversation-store.ts +335 -51
- package/src/memory/db-connection.ts +27 -4
- package/src/memory/db-init.ts +265 -4
- package/src/memory/db.ts +14 -1
- package/src/memory/embedding-backend.ts +27 -5
- package/src/memory/embedding-ollama.ts +2 -1
- package/src/memory/entity-extractor.ts +38 -35
- package/src/memory/guardian-action-store.ts +430 -0
- package/src/memory/inbox-escalation-projection.ts +59 -0
- package/src/memory/inbox-thread-store.ts +218 -0
- package/src/memory/ingress-invite-store.ts +338 -0
- package/src/memory/ingress-member-store.ts +350 -0
- package/src/memory/items-extractor.ts +91 -97
- package/src/memory/job-handlers/index-maintenance.ts +3 -3
- package/src/memory/job-handlers/media-processing.ts +69 -0
- package/src/memory/job-handlers/summarization.ts +32 -26
- package/src/memory/job-utils.ts +3 -10
- package/src/memory/jobs-store.ts +8 -10
- package/src/memory/jobs-worker.ts +55 -36
- package/src/memory/media-store.ts +759 -0
- package/src/memory/migrations/001-job-deferrals.ts +45 -0
- package/src/memory/migrations/002-tool-invocations-fk.ts +43 -0
- package/src/memory/migrations/003-memory-fts-backfill.ts +24 -0
- package/src/memory/migrations/004-entity-relation-dedup.ts +87 -0
- package/src/memory/migrations/005-fingerprint-scope-unique.ts +80 -0
- package/src/memory/migrations/006-scope-salted-fingerprints.ts +62 -0
- package/src/memory/migrations/007-assistant-id-to-self.ts +254 -0
- package/src/memory/migrations/008-remove-assistant-id-columns.ts +208 -0
- package/src/memory/migrations/009-llm-usage-events-drop-assistant-id.ts +83 -0
- package/src/memory/migrations/010-ext-conv-bindings-channel-chat-unique.ts +56 -0
- package/src/memory/migrations/011-call-sessions-provider-sid-dedup.ts +63 -0
- package/src/memory/migrations/012-call-sessions-add-initiated-from.ts +19 -0
- package/src/memory/migrations/013-guardian-action-tables.ts +68 -0
- package/src/memory/migrations/014-backfill-inbox-thread-state.ts +76 -0
- package/src/memory/migrations/015-drop-active-search-index.ts +27 -0
- package/src/memory/migrations/016-memory-segments-indexes.ts +11 -0
- package/src/memory/migrations/017-memory-items-indexes.ts +10 -0
- package/src/memory/migrations/018-remaining-table-indexes.ts +13 -0
- package/src/memory/migrations/index.ts +24 -0
- package/src/memory/migrations/registry.ts +79 -0
- package/src/memory/migrations/validate-migration-state.ts +69 -0
- package/src/memory/qdrant-manager.ts +49 -8
- package/src/memory/query-builder.ts +1 -1
- package/src/memory/raw-query.ts +119 -0
- package/src/memory/recall-cache.ts +4 -1
- package/src/memory/retriever.ts +165 -47
- package/src/memory/schema-migration.ts +25 -984
- package/src/memory/schema.ts +228 -7
- package/src/memory/search/entity.ts +205 -31
- package/src/memory/search/lexical.ts +81 -52
- package/src/memory/search/ranking.ts +27 -23
- package/src/memory/search/semantic.ts +157 -19
- package/src/memory/search/types.ts +24 -0
- package/src/memory/shared-app-links-store.ts +4 -5
- package/src/memory/validation.ts +19 -0
- package/src/messaging/draft-store.ts +5 -6
- package/src/messaging/provider-types.ts +2 -0
- package/src/messaging/providers/sms/adapter.ts +201 -0
- package/src/messaging/providers/sms/client.ts +93 -0
- package/src/messaging/providers/sms/types.ts +7 -0
- package/src/messaging/providers/telegram-bot/adapter.ts +2 -5
- package/src/messaging/providers/whatsapp/adapter.ts +136 -0
- package/src/messaging/providers/whatsapp/client.ts +67 -0
- package/src/messaging/style-analyzer.ts +5 -4
- package/src/messaging/thread-summarizer.ts +61 -69
- package/src/messaging/triage-engine.ts +62 -71
- package/src/migrations/config-merge.ts +53 -0
- package/src/migrations/data-layout.ts +68 -0
- package/src/migrations/data-merge.ts +33 -0
- package/src/migrations/hooks-merge.ts +90 -0
- package/src/migrations/index.ts +6 -0
- package/src/migrations/log.ts +23 -0
- package/src/migrations/skills-merge.ts +33 -0
- package/src/migrations/workspace-layout.ts +79 -0
- package/src/permissions/checker.ts +133 -11
- package/src/permissions/prompter.ts +14 -0
- package/src/permissions/shell-identity.ts +31 -1
- package/src/permissions/trust-store.ts +21 -1
- package/src/providers/anthropic/client.ts +4 -4
- package/src/providers/failover.ts +2 -2
- package/src/providers/model-intents.ts +70 -0
- package/src/providers/ollama/client.ts +2 -1
- package/src/providers/provider-send-message.ts +176 -0
- package/src/providers/registry.ts +71 -30
- package/src/providers/retry.ts +35 -1
- package/src/providers/types.ts +12 -1
- package/src/runtime/approval-conversation-turn.ts +97 -0
- package/src/runtime/approval-message-composer.ts +253 -0
- package/src/runtime/channel-approval-parser.ts +36 -2
- package/src/runtime/channel-approvals.ts +11 -24
- package/src/runtime/channel-guardian-service.ts +88 -21
- package/src/runtime/channel-readiness-service.ts +418 -0
- package/src/runtime/channel-readiness-types.ts +35 -0
- package/src/runtime/channel-retry-sweep.ts +184 -0
- package/src/runtime/guardian-context-resolver.ts +108 -0
- package/src/runtime/http-server.ts +275 -717
- package/src/runtime/http-types.ts +59 -3
- package/src/runtime/middleware/auth.ts +116 -0
- package/src/runtime/middleware/error-handler.ts +33 -0
- package/src/runtime/middleware/twilio-validation.ts +127 -0
- package/src/runtime/routes/app-routes.ts +1 -1
- package/src/runtime/routes/call-routes.ts +51 -7
- package/src/runtime/routes/channel-delivery-routes.ts +170 -0
- package/src/runtime/routes/channel-guardian-routes.ts +1191 -0
- package/src/runtime/routes/channel-inbound-routes.ts +1152 -0
- package/src/runtime/routes/channel-route-shared.ts +144 -0
- package/src/runtime/routes/channel-routes.ts +32 -1588
- package/src/runtime/routes/conversation-routes.ts +50 -7
- package/src/runtime/routes/events-routes.ts +2 -2
- package/src/runtime/routes/identity-routes.ts +126 -0
- package/src/runtime/routes/pairing-routes.ts +143 -0
- package/src/runtime/routes/run-routes.ts +15 -1
- package/src/runtime/run-orchestrator.ts +86 -35
- package/src/schedule/schedule-store.ts +36 -32
- package/src/schedule/scheduler.ts +3 -3
- package/src/security/encrypted-store.ts +5 -7
- package/src/security/oauth2.ts +45 -15
- package/src/security/parental-control-store.ts +183 -0
- package/src/security/secret-allowlist.ts +4 -3
- package/src/security/secret-scanner.ts +5 -5
- package/src/security/secure-keys.ts +1 -1
- package/src/security/token-manager.ts +3 -2
- package/src/services/vercel-deploy.ts +6 -2
- package/src/skills/tool-manifest.ts +3 -3
- package/src/skills/vellum-catalog-remote.ts +75 -16
- package/src/slack/slack-webhook.ts +2 -1
- package/src/swarm/orchestrator.ts +92 -1
- package/src/swarm/router-planner.ts +6 -9
- package/src/swarm/worker-prompts.ts +9 -12
- package/src/tasks/task-compiler.ts +19 -28
- package/src/tasks/task-runner.ts +1 -1
- package/src/tools/assets/materialize.ts +2 -2
- package/src/tools/assets/search.ts +15 -14
- package/src/tools/browser/__tests__/auth-detector.test.ts +1 -0
- package/src/tools/browser/auto-navigate.ts +1 -0
- package/src/tools/browser/browser-execution.ts +10 -1
- package/src/tools/browser/browser-manager.ts +119 -4
- package/src/tools/browser/network-recorder.ts +5 -0
- package/src/tools/calls/call-start.ts +1 -0
- package/src/tools/credentials/broker.ts +11 -2
- package/src/tools/credentials/metadata-store.ts +18 -14
- package/src/tools/credentials/post-connect-hooks.ts +61 -0
- package/src/tools/credentials/vault.ts +49 -23
- package/src/tools/execution-target.ts +11 -1
- package/src/tools/executor.ts +68 -9
- package/src/tools/host-terminal/cli-discover.ts +1 -1
- package/src/tools/network/script-proxy/http-forwarder.ts +1 -1
- package/src/tools/network/script-proxy/mitm-handler.ts +1 -1
- package/src/tools/network/script-proxy/server.ts +1 -1
- package/src/tools/network/script-proxy/session-manager.ts +6 -5
- package/src/tools/network/web-fetch.ts +18 -2
- package/src/tools/network/web-search.ts +8 -4
- package/src/tools/reminder/reminder-store.ts +14 -15
- package/src/tools/schedule/create.ts +1 -0
- package/src/tools/schedule/list.ts +2 -1
- package/src/tools/shared/filesystem/file-ops-service.ts +5 -7
- package/src/tools/skills/skill-script-runner.ts +24 -9
- package/src/tools/skills/skill-tool-factory.ts +1 -0
- package/src/tools/tasks/work-item-enqueue.ts +2 -2
- package/src/tools/terminal/evaluate-typescript.ts +21 -12
- package/src/tools/terminal/parser.ts +50 -0
- package/src/tools/types.ts +2 -0
- package/src/tools/watcher/delete.ts +6 -0
- package/src/tools/weather/service.ts +1 -1
- package/src/twitter/client.ts +190 -24
- package/src/twitter/router.ts +1 -1
- package/src/twitter/session.ts +4 -3
- package/src/util/clipboard.ts +1 -1
- package/src/util/errors.ts +65 -8
- package/src/util/fs.ts +40 -0
- package/src/util/json.ts +10 -0
- package/src/util/log-redact.ts +189 -0
- package/src/util/logger.ts +19 -17
- package/src/util/object.ts +3 -0
- package/src/util/platform.ts +105 -363
- package/src/util/pricing.ts +1 -1
- package/src/util/promise-guard.ts +1 -1
- package/src/util/retry.ts +19 -0
- package/src/util/row-mapper.ts +79 -0
- package/src/util/silently.ts +21 -0
- package/src/watcher/engine.ts +5 -1
- package/src/watcher/provider-types.ts +20 -0
- package/src/watcher/providers/github.ts +156 -0
- package/src/watcher/providers/gmail.ts +1 -0
- package/src/watcher/providers/google-calendar.ts +1 -0
- package/src/watcher/providers/linear.ts +460 -0
- package/src/watcher/providers/slack.ts +1 -0
- package/src/work-items/work-item-runner.ts +1 -1
- package/src/workspace/git-service.ts +1 -1
- package/src/workspace/provider-commit-message-generator.ts +51 -22
- package/src/__tests__/call-bridge.test.ts +0 -517
- package/src/__tests__/session-process-bridge.test.ts +0 -244
- package/src/calls/call-bridge.ts +0 -168
- package/src/config/vellum-skills/google-oauth-setup/SKILL.md +0 -199
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// Surface types, UI surface lifecycle messages.
|
|
2
|
+
|
|
3
|
+
// === Surface type definitions ===
|
|
4
|
+
|
|
5
|
+
export type SurfaceType = 'card' | 'form' | 'list' | 'table' | 'confirmation' | 'dynamic_page' | 'file_upload' | 'browser_view' | 'document_preview';
|
|
6
|
+
|
|
7
|
+
export const INTERACTIVE_SURFACE_TYPES: SurfaceType[] = ['form', 'confirmation', 'dynamic_page', 'file_upload'];
|
|
8
|
+
|
|
9
|
+
export interface SurfaceAction {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
style?: 'primary' | 'secondary' | 'destructive';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface CardSurfaceData {
|
|
16
|
+
title: string;
|
|
17
|
+
subtitle?: string;
|
|
18
|
+
body: string;
|
|
19
|
+
metadata?: Array<{ label: string; value: string }>;
|
|
20
|
+
/** Optional template name for specialized rendering (e.g. "weather_forecast"). */
|
|
21
|
+
template?: string;
|
|
22
|
+
/** Arbitrary data consumed by the template renderer. Shape depends on template. */
|
|
23
|
+
templateData?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface FormField {
|
|
27
|
+
id: string;
|
|
28
|
+
type: 'text' | 'textarea' | 'select' | 'toggle' | 'number' | 'password';
|
|
29
|
+
label: string;
|
|
30
|
+
placeholder?: string;
|
|
31
|
+
required?: boolean;
|
|
32
|
+
defaultValue?: string | number | boolean;
|
|
33
|
+
options?: Array<{ label: string; value: string }>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface FormPage {
|
|
37
|
+
id: string;
|
|
38
|
+
title: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
fields: FormField[];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface FormSurfaceData {
|
|
44
|
+
description?: string;
|
|
45
|
+
fields: FormField[];
|
|
46
|
+
submitLabel?: string;
|
|
47
|
+
pages?: FormPage[];
|
|
48
|
+
pageLabels?: { next?: string; back?: string; submit?: string };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface ListItem {
|
|
52
|
+
id: string;
|
|
53
|
+
title: string;
|
|
54
|
+
subtitle?: string;
|
|
55
|
+
icon?: string;
|
|
56
|
+
selected?: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface ListSurfaceData {
|
|
60
|
+
items: ListItem[];
|
|
61
|
+
selectionMode: 'single' | 'multiple' | 'none';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface ConfirmationSurfaceData {
|
|
65
|
+
message: string;
|
|
66
|
+
detail?: string;
|
|
67
|
+
confirmLabel?: string;
|
|
68
|
+
cancelLabel?: string;
|
|
69
|
+
destructive?: boolean;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface DynamicPagePreview {
|
|
73
|
+
title: string;
|
|
74
|
+
subtitle?: string;
|
|
75
|
+
description?: string;
|
|
76
|
+
icon?: string;
|
|
77
|
+
metrics?: Array<{ label: string; value: string }>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface DynamicPageSurfaceData {
|
|
81
|
+
html: string;
|
|
82
|
+
width?: number;
|
|
83
|
+
height?: number;
|
|
84
|
+
appId?: string;
|
|
85
|
+
appType?: string;
|
|
86
|
+
reloadGeneration?: number;
|
|
87
|
+
status?: string;
|
|
88
|
+
preview?: DynamicPagePreview;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface FileUploadSurfaceData {
|
|
92
|
+
prompt: string;
|
|
93
|
+
acceptedTypes?: string[];
|
|
94
|
+
maxFiles?: number;
|
|
95
|
+
maxSizeBytes?: number;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface TableColumn {
|
|
99
|
+
id: string;
|
|
100
|
+
label: string;
|
|
101
|
+
width?: number;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface TableRow {
|
|
105
|
+
id: string;
|
|
106
|
+
cells: Record<string, string>;
|
|
107
|
+
selectable?: boolean;
|
|
108
|
+
selected?: boolean;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface TableSurfaceData {
|
|
112
|
+
columns: TableColumn[];
|
|
113
|
+
rows: TableRow[];
|
|
114
|
+
selectionMode?: 'none' | 'single' | 'multiple';
|
|
115
|
+
caption?: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface BrowserViewSurfaceData {
|
|
119
|
+
sessionId: string;
|
|
120
|
+
currentUrl: string;
|
|
121
|
+
status: 'navigating' | 'idle' | 'interacting';
|
|
122
|
+
frame?: string; // base64 JPEG
|
|
123
|
+
actionText?: string; // "Clicking 'Submit' button"
|
|
124
|
+
highlights?: Array<{ x: number; y: number; w: number; h: number; label: string }>;
|
|
125
|
+
pages?: Array<{ id: string; title: string; url: string; active: boolean }>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface DocumentPreviewSurfaceData {
|
|
129
|
+
title: string;
|
|
130
|
+
surfaceId: string; // the doc's real surfaceId, for focusing the panel
|
|
131
|
+
subtitle?: string;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export type SurfaceData = CardSurfaceData | FormSurfaceData | ListSurfaceData | TableSurfaceData | ConfirmationSurfaceData | DynamicPageSurfaceData | FileUploadSurfaceData | BrowserViewSurfaceData | DocumentPreviewSurfaceData;
|
|
135
|
+
|
|
136
|
+
// === Client → Server ===
|
|
137
|
+
|
|
138
|
+
export interface UiSurfaceAction {
|
|
139
|
+
type: 'ui_surface_action';
|
|
140
|
+
sessionId: string;
|
|
141
|
+
surfaceId: string;
|
|
142
|
+
actionId: string;
|
|
143
|
+
data?: Record<string, unknown>;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export interface UiSurfaceUndoRequest {
|
|
147
|
+
type: 'ui_surface_undo';
|
|
148
|
+
sessionId: string;
|
|
149
|
+
surfaceId: string;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// === Server → Client ===
|
|
153
|
+
|
|
154
|
+
/** Common fields shared by all UiSurfaceShow variants. */
|
|
155
|
+
interface UiSurfaceShowBase {
|
|
156
|
+
type: 'ui_surface_show';
|
|
157
|
+
sessionId: string;
|
|
158
|
+
surfaceId: string;
|
|
159
|
+
title?: string;
|
|
160
|
+
actions?: SurfaceAction[];
|
|
161
|
+
display?: 'inline' | 'panel';
|
|
162
|
+
/** The message ID that this surface belongs to (for history loading). */
|
|
163
|
+
messageId?: string;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export interface UiSurfaceShowCard extends UiSurfaceShowBase {
|
|
167
|
+
surfaceType: 'card';
|
|
168
|
+
data: CardSurfaceData;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export interface UiSurfaceShowForm extends UiSurfaceShowBase {
|
|
172
|
+
surfaceType: 'form';
|
|
173
|
+
data: FormSurfaceData;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export interface UiSurfaceShowList extends UiSurfaceShowBase {
|
|
177
|
+
surfaceType: 'list';
|
|
178
|
+
data: ListSurfaceData;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface UiSurfaceShowConfirmation extends UiSurfaceShowBase {
|
|
182
|
+
surfaceType: 'confirmation';
|
|
183
|
+
data: ConfirmationSurfaceData;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export interface UiSurfaceShowDynamicPage extends UiSurfaceShowBase {
|
|
187
|
+
surfaceType: 'dynamic_page';
|
|
188
|
+
data: DynamicPageSurfaceData;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export interface UiSurfaceShowTable extends UiSurfaceShowBase {
|
|
192
|
+
surfaceType: 'table';
|
|
193
|
+
data: TableSurfaceData;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export interface UiSurfaceShowFileUpload extends UiSurfaceShowBase {
|
|
197
|
+
surfaceType: 'file_upload';
|
|
198
|
+
data: FileUploadSurfaceData;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export interface UiSurfaceShowBrowserView extends UiSurfaceShowBase {
|
|
202
|
+
surfaceType: 'browser_view';
|
|
203
|
+
data: BrowserViewSurfaceData;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface UiSurfaceShowDocumentPreview extends UiSurfaceShowBase {
|
|
207
|
+
surfaceType: 'document_preview';
|
|
208
|
+
data: DocumentPreviewSurfaceData;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export type UiSurfaceShow =
|
|
212
|
+
| UiSurfaceShowCard
|
|
213
|
+
| UiSurfaceShowForm
|
|
214
|
+
| UiSurfaceShowList
|
|
215
|
+
| UiSurfaceShowTable
|
|
216
|
+
| UiSurfaceShowConfirmation
|
|
217
|
+
| UiSurfaceShowDynamicPage
|
|
218
|
+
| UiSurfaceShowFileUpload
|
|
219
|
+
| UiSurfaceShowBrowserView
|
|
220
|
+
| UiSurfaceShowDocumentPreview;
|
|
221
|
+
|
|
222
|
+
export interface UiSurfaceUpdate {
|
|
223
|
+
type: 'ui_surface_update';
|
|
224
|
+
sessionId: string;
|
|
225
|
+
surfaceId: string;
|
|
226
|
+
data: Partial<SurfaceData>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export interface UiSurfaceDismiss {
|
|
230
|
+
type: 'ui_surface_dismiss';
|
|
231
|
+
sessionId: string;
|
|
232
|
+
surfaceId: string;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export interface UiSurfaceComplete {
|
|
236
|
+
type: 'ui_surface_complete';
|
|
237
|
+
sessionId: string;
|
|
238
|
+
surfaceId: string;
|
|
239
|
+
summary: string;
|
|
240
|
+
submittedData?: Record<string, unknown>;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export interface UiSurfaceUndoResult {
|
|
244
|
+
type: 'ui_surface_undo_result';
|
|
245
|
+
sessionId: string;
|
|
246
|
+
surfaceId: string;
|
|
247
|
+
success: boolean;
|
|
248
|
+
/** Number of remaining undo entries after this undo. */
|
|
249
|
+
remainingUndos: number;
|
|
250
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Trust rule and starter bundle types.
|
|
2
|
+
|
|
3
|
+
// === Client → Server ===
|
|
4
|
+
|
|
5
|
+
export interface AddTrustRule {
|
|
6
|
+
type: 'add_trust_rule';
|
|
7
|
+
toolName: string;
|
|
8
|
+
pattern: string;
|
|
9
|
+
scope: string;
|
|
10
|
+
decision: 'allow' | 'deny' | 'ask';
|
|
11
|
+
/** When true, the rule also covers high-risk invocations. */
|
|
12
|
+
allowHighRisk?: boolean;
|
|
13
|
+
/** Execution target override for this rule. */
|
|
14
|
+
executionTarget?: 'host' | 'sandbox';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface TrustRulesList {
|
|
18
|
+
type: 'trust_rules_list';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface RemoveTrustRule {
|
|
22
|
+
type: 'remove_trust_rule';
|
|
23
|
+
id: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface UpdateTrustRule {
|
|
27
|
+
type: 'update_trust_rule';
|
|
28
|
+
id: string;
|
|
29
|
+
tool?: string;
|
|
30
|
+
pattern?: string;
|
|
31
|
+
scope?: string;
|
|
32
|
+
decision?: 'allow' | 'deny' | 'ask';
|
|
33
|
+
priority?: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface AcceptStarterBundle {
|
|
37
|
+
type: 'accept_starter_bundle';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// === Server → Client ===
|
|
41
|
+
|
|
42
|
+
export interface TrustRulesListResponse {
|
|
43
|
+
type: 'trust_rules_list_response';
|
|
44
|
+
rules: Array<{
|
|
45
|
+
id: string;
|
|
46
|
+
tool: string;
|
|
47
|
+
pattern: string;
|
|
48
|
+
scope: string;
|
|
49
|
+
decision: 'allow' | 'deny' | 'ask';
|
|
50
|
+
priority: number;
|
|
51
|
+
createdAt: number;
|
|
52
|
+
}>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface AcceptStarterBundleResponse {
|
|
56
|
+
type: 'accept_starter_bundle_response';
|
|
57
|
+
accepted: boolean;
|
|
58
|
+
rulesAdded: number;
|
|
59
|
+
alreadyAccepted: boolean;
|
|
60
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Work item (task queue) types.
|
|
2
|
+
|
|
3
|
+
// === Client → Server ===
|
|
4
|
+
|
|
5
|
+
export interface WorkItemsListRequest {
|
|
6
|
+
type: 'work_items_list';
|
|
7
|
+
status?: string; // optional filter
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface WorkItemGetRequest {
|
|
11
|
+
type: 'work_item_get';
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface WorkItemUpdateRequest {
|
|
16
|
+
type: 'work_item_update';
|
|
17
|
+
id: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
notes?: string;
|
|
20
|
+
status?: string;
|
|
21
|
+
priorityTier?: number;
|
|
22
|
+
sortIndex?: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface WorkItemCompleteRequest {
|
|
26
|
+
type: 'work_item_complete';
|
|
27
|
+
id: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface WorkItemDeleteRequest {
|
|
31
|
+
type: 'work_item_delete';
|
|
32
|
+
id: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface WorkItemRunTaskRequest {
|
|
36
|
+
type: 'work_item_run_task';
|
|
37
|
+
id: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface WorkItemOutputRequest {
|
|
41
|
+
type: 'work_item_output';
|
|
42
|
+
id: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface WorkItemPreflightRequest {
|
|
46
|
+
type: 'work_item_preflight';
|
|
47
|
+
id: string; // work item ID
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface WorkItemApprovePermissionsRequest {
|
|
51
|
+
type: 'work_item_approve_permissions';
|
|
52
|
+
id: string;
|
|
53
|
+
approvedTools: string[]; // tools the user approved
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface WorkItemCancelRequest {
|
|
57
|
+
type: 'work_item_cancel';
|
|
58
|
+
id: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// === Server → Client ===
|
|
62
|
+
|
|
63
|
+
export interface WorkItemsListResponse {
|
|
64
|
+
type: 'work_items_list_response';
|
|
65
|
+
items: Array<{
|
|
66
|
+
id: string;
|
|
67
|
+
taskId: string;
|
|
68
|
+
title: string;
|
|
69
|
+
notes: string | null;
|
|
70
|
+
status: string;
|
|
71
|
+
priorityTier: number;
|
|
72
|
+
sortIndex: number | null;
|
|
73
|
+
lastRunId: string | null;
|
|
74
|
+
lastRunConversationId: string | null;
|
|
75
|
+
lastRunStatus: string | null;
|
|
76
|
+
sourceType: string | null;
|
|
77
|
+
sourceId: string | null;
|
|
78
|
+
createdAt: number;
|
|
79
|
+
updatedAt: number;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface WorkItemGetResponse {
|
|
84
|
+
type: 'work_item_get_response';
|
|
85
|
+
item: {
|
|
86
|
+
id: string;
|
|
87
|
+
taskId: string;
|
|
88
|
+
title: string;
|
|
89
|
+
notes: string | null;
|
|
90
|
+
status: string;
|
|
91
|
+
priorityTier: number;
|
|
92
|
+
sortIndex: number | null;
|
|
93
|
+
lastRunId: string | null;
|
|
94
|
+
lastRunConversationId: string | null;
|
|
95
|
+
lastRunStatus: string | null;
|
|
96
|
+
sourceType: string | null;
|
|
97
|
+
sourceId: string | null;
|
|
98
|
+
createdAt: number;
|
|
99
|
+
updatedAt: number;
|
|
100
|
+
} | null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface WorkItemUpdateResponse {
|
|
104
|
+
type: 'work_item_update_response';
|
|
105
|
+
item: {
|
|
106
|
+
id: string;
|
|
107
|
+
taskId: string;
|
|
108
|
+
title: string;
|
|
109
|
+
notes: string | null;
|
|
110
|
+
status: string;
|
|
111
|
+
priorityTier: number;
|
|
112
|
+
sortIndex: number | null;
|
|
113
|
+
lastRunId: string | null;
|
|
114
|
+
lastRunConversationId: string | null;
|
|
115
|
+
lastRunStatus: string | null;
|
|
116
|
+
sourceType: string | null;
|
|
117
|
+
sourceId: string | null;
|
|
118
|
+
createdAt: number;
|
|
119
|
+
updatedAt: number;
|
|
120
|
+
} | null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface WorkItemDeleteResponse {
|
|
124
|
+
type: 'work_item_delete_response';
|
|
125
|
+
id: string;
|
|
126
|
+
success: boolean;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export type WorkItemRunTaskErrorCode = 'not_found' | 'already_running' | 'invalid_status' | 'no_task' | 'permission_required';
|
|
130
|
+
|
|
131
|
+
export interface WorkItemRunTaskResponse {
|
|
132
|
+
type: 'work_item_run_task_response';
|
|
133
|
+
id: string;
|
|
134
|
+
lastRunId: string;
|
|
135
|
+
success: boolean;
|
|
136
|
+
error?: string;
|
|
137
|
+
/** Structured error code so the client can deterministically re-enable buttons or show contextual UI. */
|
|
138
|
+
errorCode?: WorkItemRunTaskErrorCode;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export interface WorkItemOutputResponse {
|
|
142
|
+
type: 'work_item_output_response';
|
|
143
|
+
id: string;
|
|
144
|
+
success: boolean;
|
|
145
|
+
error?: string;
|
|
146
|
+
output?: {
|
|
147
|
+
title: string;
|
|
148
|
+
status: string;
|
|
149
|
+
runId: string | null;
|
|
150
|
+
conversationId: string | null;
|
|
151
|
+
completedAt: number | null;
|
|
152
|
+
summary: string;
|
|
153
|
+
highlights: string[];
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export interface WorkItemPreflightResponse {
|
|
158
|
+
type: 'work_item_preflight_response';
|
|
159
|
+
id: string;
|
|
160
|
+
success: boolean;
|
|
161
|
+
error?: string;
|
|
162
|
+
permissions?: {
|
|
163
|
+
tool: string;
|
|
164
|
+
description: string;
|
|
165
|
+
riskLevel: 'low' | 'medium' | 'high';
|
|
166
|
+
currentDecision: 'allow' | 'deny' | 'prompt';
|
|
167
|
+
}[];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export interface WorkItemApprovePermissionsResponse {
|
|
171
|
+
type: 'work_item_approve_permissions_response';
|
|
172
|
+
id: string;
|
|
173
|
+
success: boolean;
|
|
174
|
+
error?: string;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface WorkItemCancelResponse {
|
|
178
|
+
type: 'work_item_cancel_response';
|
|
179
|
+
id: string;
|
|
180
|
+
success: boolean;
|
|
181
|
+
error?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Server push — tells the client to open/focus the tasks window. */
|
|
185
|
+
export interface OpenTasksWindow {
|
|
186
|
+
type: 'open_tasks_window';
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Server push — lightweight invalidation signal: the task queue has been mutated, refetch your list. */
|
|
190
|
+
export interface TasksChanged {
|
|
191
|
+
type: 'tasks_changed';
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** Server push — broadcast when a work item status changes (e.g. running -> awaiting_review). */
|
|
195
|
+
export interface WorkItemStatusChanged {
|
|
196
|
+
type: 'work_item_status_changed';
|
|
197
|
+
item: {
|
|
198
|
+
id: string;
|
|
199
|
+
taskId: string;
|
|
200
|
+
title: string;
|
|
201
|
+
status: string;
|
|
202
|
+
lastRunId: string | null;
|
|
203
|
+
lastRunConversationId: string | null;
|
|
204
|
+
lastRunStatus: string | null;
|
|
205
|
+
updatedAt: number;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** Server push — broadcast when a task run creates a conversation, so the client can show it as a chat thread. */
|
|
210
|
+
export interface TaskRunThreadCreated {
|
|
211
|
+
type: 'task_run_thread_created';
|
|
212
|
+
conversationId: string;
|
|
213
|
+
workItemId: string;
|
|
214
|
+
title: string;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** Server push — broadcast when a guardian action request creates a thread for the mac channel. */
|
|
218
|
+
export interface GuardianRequestThreadCreated {
|
|
219
|
+
type: 'guardian_request_thread_created';
|
|
220
|
+
conversationId: string;
|
|
221
|
+
requestId: string;
|
|
222
|
+
callSessionId: string;
|
|
223
|
+
title: string;
|
|
224
|
+
questionText: string;
|
|
225
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Workspace file, identity, and tool permission types.
|
|
2
|
+
|
|
3
|
+
// === Client → Server ===
|
|
4
|
+
|
|
5
|
+
export interface WorkspaceFilesListRequest {
|
|
6
|
+
type: 'workspace_files_list';
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface WorkspaceFileReadRequest {
|
|
10
|
+
type: 'workspace_file_read';
|
|
11
|
+
/** Relative path within the workspace directory (e.g. "IDENTITY.md"). */
|
|
12
|
+
path: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface IdentityGetRequest {
|
|
16
|
+
type: 'identity_get';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ToolPermissionSimulateRequest {
|
|
20
|
+
type: 'tool_permission_simulate';
|
|
21
|
+
/** Tool name to simulate (e.g. 'bash', 'file_write'). */
|
|
22
|
+
toolName: string;
|
|
23
|
+
/** Tool input record to simulate. */
|
|
24
|
+
input: Record<string, unknown>;
|
|
25
|
+
/** Working directory context; defaults to daemon cwd when omitted. */
|
|
26
|
+
workingDir?: string;
|
|
27
|
+
/** Whether the simulated context is interactive (default true). */
|
|
28
|
+
isInteractive?: boolean;
|
|
29
|
+
/** When true, side-effect tools that would normally be auto-allowed get promoted to prompt. */
|
|
30
|
+
forcePromptSideEffects?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ToolNamesListRequest {
|
|
34
|
+
type: 'tool_names_list';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// === Server → Client ===
|
|
38
|
+
|
|
39
|
+
export interface WorkspaceFilesListResponse {
|
|
40
|
+
type: 'workspace_files_list_response';
|
|
41
|
+
files: Array<{
|
|
42
|
+
/** Relative path within the workspace (e.g. "IDENTITY.md", "skills/my-skill"). */
|
|
43
|
+
path: string;
|
|
44
|
+
/** Display name (e.g. "IDENTITY.md"). */
|
|
45
|
+
name: string;
|
|
46
|
+
/** Whether the file/directory exists. */
|
|
47
|
+
exists: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface WorkspaceFileReadResponse {
|
|
52
|
+
type: 'workspace_file_read_response';
|
|
53
|
+
path: string;
|
|
54
|
+
content: string | null;
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface IdentityGetResponse {
|
|
59
|
+
type: 'identity_get_response';
|
|
60
|
+
/** Whether an IDENTITY.md file was found. When false, all fields are empty defaults. Optional for backwards compat with older daemons. */
|
|
61
|
+
found?: boolean;
|
|
62
|
+
name: string;
|
|
63
|
+
role: string;
|
|
64
|
+
personality: string;
|
|
65
|
+
emoji: string;
|
|
66
|
+
home: string;
|
|
67
|
+
version?: string;
|
|
68
|
+
assistantId?: string;
|
|
69
|
+
createdAt?: string;
|
|
70
|
+
originSystem?: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ToolPermissionSimulateResponse {
|
|
74
|
+
type: 'tool_permission_simulate_response';
|
|
75
|
+
success: boolean;
|
|
76
|
+
/** The simulated permission decision. */
|
|
77
|
+
decision?: 'allow' | 'deny' | 'prompt';
|
|
78
|
+
/** Risk level of the simulated tool invocation. */
|
|
79
|
+
riskLevel?: string;
|
|
80
|
+
/** Human-readable reason for the decision. */
|
|
81
|
+
reason?: string;
|
|
82
|
+
/** When decision is 'prompt', the data needed to render a ToolConfirmationBubble. */
|
|
83
|
+
promptPayload?: {
|
|
84
|
+
allowlistOptions: Array<{ label: string; description: string; pattern: string }>;
|
|
85
|
+
scopeOptions: Array<{ label: string; scope: string }>;
|
|
86
|
+
persistentDecisionsAllowed: boolean;
|
|
87
|
+
};
|
|
88
|
+
/** Resolved execution target for the tool. */
|
|
89
|
+
executionTarget?: 'host' | 'sandbox';
|
|
90
|
+
/** ID of the trust rule that matched (if any). */
|
|
91
|
+
matchedRuleId?: string;
|
|
92
|
+
/** Error message when success is false. */
|
|
93
|
+
error?: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface ToolInputSchema {
|
|
97
|
+
type: 'object';
|
|
98
|
+
properties?: Record<string, {
|
|
99
|
+
type?: string;
|
|
100
|
+
description?: string;
|
|
101
|
+
enum?: string[];
|
|
102
|
+
[key: string]: unknown;
|
|
103
|
+
}>;
|
|
104
|
+
required?: string[];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface ToolNamesListResponse {
|
|
108
|
+
type: 'tool_names_list_response';
|
|
109
|
+
/** Sorted list of all registered tool names. */
|
|
110
|
+
names: string[];
|
|
111
|
+
/** Input schemas keyed by tool name. */
|
|
112
|
+
schemas?: Record<string, ToolInputSchema>;
|
|
113
|
+
}
|