@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
|
@@ -72,6 +72,7 @@ export async function handleTwitterAuthStart(
|
|
|
72
72
|
clientId,
|
|
73
73
|
clientSecret,
|
|
74
74
|
extraParams: {},
|
|
75
|
+
tokenEndpointAuthMethod: clientSecret ? 'client_secret_basic' : undefined,
|
|
75
76
|
};
|
|
76
77
|
|
|
77
78
|
const result = await startOAuth2Flow(oauthConfig, {
|
|
@@ -131,6 +132,7 @@ export async function handleTwitterAuthStart(
|
|
|
131
132
|
oauth2TokenUrl: 'https://api.x.com/2/oauth2/token',
|
|
132
133
|
oauth2ClientId: clientId,
|
|
133
134
|
oauth2ClientSecret: clientSecret ?? null,
|
|
135
|
+
oauth2TokenEndpointAuthMethod: clientSecret ? 'client_secret_basic' : undefined,
|
|
134
136
|
grantedScopes: result.grantedScopes,
|
|
135
137
|
expiresAt: result.tokens.expiresIn ? Date.now() + result.tokens.expiresIn * 1000 : null,
|
|
136
138
|
});
|
|
@@ -148,15 +148,23 @@ function broadcastWorkItemStatus(ctx: HandlerContext, id: string): void {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
/**
|
|
152
|
-
|
|
151
|
+
/**
|
|
152
|
+
* Extract only the latest assistant text block from stored content.
|
|
153
|
+
* Consolidation merges multiple assistant messages into one DB row; scanning
|
|
154
|
+
* from the end keeps task output focused on the final assistant response.
|
|
155
|
+
*/
|
|
156
|
+
function extractLatestTextFromContent(content: string): string {
|
|
153
157
|
try {
|
|
154
158
|
const parsed = JSON.parse(content);
|
|
155
159
|
if (Array.isArray(parsed)) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
.
|
|
159
|
-
.
|
|
160
|
+
for (let i = parsed.length - 1; i >= 0; i--) {
|
|
161
|
+
const block = parsed[i] as { type?: unknown; text?: unknown };
|
|
162
|
+
if (block.type !== 'text') continue;
|
|
163
|
+
if (typeof block.text !== 'string') continue;
|
|
164
|
+
if (!block.text.trim()) continue;
|
|
165
|
+
return block.text;
|
|
166
|
+
}
|
|
167
|
+
return '';
|
|
160
168
|
}
|
|
161
169
|
} catch {
|
|
162
170
|
// Plain text content — use as-is
|
|
@@ -299,7 +307,7 @@ export function handleWorkItemOutput(
|
|
|
299
307
|
const m = msgs[i];
|
|
300
308
|
if (m.role !== 'assistant') continue;
|
|
301
309
|
|
|
302
|
-
const text =
|
|
310
|
+
const text = extractLatestTextFromContent(m.content);
|
|
303
311
|
if (!text.trim()) continue;
|
|
304
312
|
|
|
305
313
|
summary = truncate(text, 2000, '');
|
|
@@ -385,7 +393,7 @@ export async function handleWorkItemRunTask(
|
|
|
385
393
|
// Compute required tools using the same resolution logic as preflight:
|
|
386
394
|
// work-item snapshot first, then task template, then all registered tools.
|
|
387
395
|
let requiredTools: string[];
|
|
388
|
-
if (workItem.requiredTools
|
|
396
|
+
if (workItem.requiredTools != null) {
|
|
389
397
|
requiredTools = sanitizeToolList(JSON.parse(workItem.requiredTools));
|
|
390
398
|
} else {
|
|
391
399
|
requiredTools = task.requiredTools
|
|
@@ -505,7 +513,7 @@ export async function handleWorkItemPreflight(
|
|
|
505
513
|
// back to the task template (or all registered tools) when the
|
|
506
514
|
// snapshot is null.
|
|
507
515
|
let requiredTools: string[];
|
|
508
|
-
if (workItem.requiredTools
|
|
516
|
+
if (workItem.requiredTools != null) {
|
|
509
517
|
requiredTools = sanitizeToolList(JSON.parse(workItem.requiredTools));
|
|
510
518
|
} else {
|
|
511
519
|
const task = getTask(workItem.taskId);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as net from 'node:net';
|
|
2
|
-
import {
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
3
|
import { join, resolve, sep } from 'node:path';
|
|
4
|
+
import { pathExists } from '../../util/fs.js';
|
|
4
5
|
import { getWorkspaceDir } from '../../util/platform.js';
|
|
5
6
|
import { log, defineHandlers, type HandlerContext } from './shared.js';
|
|
6
7
|
import type { WorkspaceFileReadRequest } from '../ipc-protocol.js';
|
|
@@ -13,7 +14,7 @@ function handleWorkspaceFilesList(socket: net.Socket, ctx: HandlerContext): void
|
|
|
13
14
|
const files = WORKSPACE_FILES.map((name) => ({
|
|
14
15
|
path: name,
|
|
15
16
|
name,
|
|
16
|
-
exists:
|
|
17
|
+
exists: pathExists(join(base, name)),
|
|
17
18
|
}));
|
|
18
19
|
ctx.send(socket, { type: 'workspace_files_list_response', files });
|
|
19
20
|
}
|
|
@@ -42,7 +43,7 @@ function handleWorkspaceFileRead(
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
try {
|
|
45
|
-
if (!
|
|
46
|
+
if (!pathExists(resolved)) {
|
|
46
47
|
ctx.send(socket, {
|
|
47
48
|
type: 'workspace_file_read_response',
|
|
48
49
|
path: requested,
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installs standalone CLI launcher scripts in ~/.vellum/bin/ so that
|
|
3
|
+
* integration commands (e.g. `doordash`, `map`) can be invoked directly
|
|
4
|
+
* without requiring `vellum` on PATH.
|
|
5
|
+
*
|
|
6
|
+
* Each launcher is a shell script that hardcodes absolute paths to `bun`
|
|
7
|
+
* and the CLI entrypoint, forwarding all arguments to the appropriate
|
|
8
|
+
* subcommand.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { execSync } from 'node:child_process';
|
|
12
|
+
import { existsSync, mkdirSync, writeFileSync, chmodSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { getLogger } from '../util/logger.js';
|
|
16
|
+
|
|
17
|
+
const log = getLogger('install-cli-launchers');
|
|
18
|
+
|
|
19
|
+
/** Integration subcommands that should get standalone launchers. */
|
|
20
|
+
const INTEGRATION_COMMANDS = ['doordash', 'map'];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the absolute path to the bun binary.
|
|
24
|
+
* Prefers process.execPath (works when running under bun), then falls
|
|
25
|
+
* back to `which bun`.
|
|
26
|
+
*/
|
|
27
|
+
function resolveBunPath(): string {
|
|
28
|
+
// process.execPath points to the bun binary when running under bun
|
|
29
|
+
if (process.execPath && process.execPath.includes('bun')) {
|
|
30
|
+
return process.execPath;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return execSync('which bun', { encoding: 'utf-8' }).trim();
|
|
34
|
+
} catch {
|
|
35
|
+
throw new Error('Could not find bun binary');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the absolute path to the CLI entrypoint (index.ts).
|
|
41
|
+
* Uses import.meta.dirname to find the source tree root.
|
|
42
|
+
*/
|
|
43
|
+
function resolveCliEntrypoint(): string {
|
|
44
|
+
// This file is at assistant/src/daemon/install-cli-launchers.ts
|
|
45
|
+
// The CLI entrypoint is at assistant/src/index.ts
|
|
46
|
+
const thisDir = import.meta.dirname ?? __dirname;
|
|
47
|
+
return join(thisDir, '..', 'index.ts');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Check whether a given command name conflicts with an existing system
|
|
52
|
+
* binary (i.e. something other than our own launcher).
|
|
53
|
+
*/
|
|
54
|
+
function hasSystemConflict(name: string, binDir: string): boolean {
|
|
55
|
+
try {
|
|
56
|
+
const result = execSync(`which ${name}`, { encoding: 'utf-8' }).trim();
|
|
57
|
+
// If `which` resolves to our own bin dir, that's not a conflict
|
|
58
|
+
if (result.startsWith(binDir)) return false;
|
|
59
|
+
return true;
|
|
60
|
+
} catch {
|
|
61
|
+
// `which` failed — no conflict
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Install standalone CLI launcher scripts in ~/.vellum/bin/.
|
|
68
|
+
*
|
|
69
|
+
* For each integration command, generates a shell script that execs
|
|
70
|
+
* bun with the CLI entrypoint and the subcommand name prepended.
|
|
71
|
+
* Uses the short name by default (e.g. `doordash`), falling back to
|
|
72
|
+
* `vellum-<name>` if the short name conflicts with an existing system binary.
|
|
73
|
+
*/
|
|
74
|
+
export function installCliLaunchers(): void {
|
|
75
|
+
const binDir = join(homedir(), '.vellum', 'bin');
|
|
76
|
+
|
|
77
|
+
let bunPath: string;
|
|
78
|
+
try {
|
|
79
|
+
bunPath = resolveBunPath();
|
|
80
|
+
} catch (err) {
|
|
81
|
+
log.warn({ err }, 'Cannot install CLI launchers: bun not found');
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const entrypoint = resolveCliEntrypoint();
|
|
86
|
+
if (!existsSync(entrypoint)) {
|
|
87
|
+
// In compiled builds (e.g. macOS app via `bun build --compile`), the
|
|
88
|
+
// source tree isn't available. Launcher scripts are a dev-mode
|
|
89
|
+
// convenience; compiled builds use their own command dispatch, so we
|
|
90
|
+
// silently skip installation.
|
|
91
|
+
log.debug({ entrypoint }, 'CLI entrypoint not found (compiled build?) — skipping launcher installation');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (!existsSync(binDir)) {
|
|
96
|
+
mkdirSync(binDir, { recursive: true });
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
for (const name of INTEGRATION_COMMANDS) {
|
|
100
|
+
const launcherName = hasSystemConflict(name, binDir) ? `vellum-${name}` : name;
|
|
101
|
+
const launcherPath = join(binDir, launcherName);
|
|
102
|
+
|
|
103
|
+
const script = `#!/bin/bash
|
|
104
|
+
exec "${bunPath}" "${entrypoint}" ${name} "$@"
|
|
105
|
+
`;
|
|
106
|
+
|
|
107
|
+
writeFileSync(launcherPath, script);
|
|
108
|
+
chmodSync(launcherPath, 0o755);
|
|
109
|
+
log.debug({ launcherName, launcherPath }, 'Installed CLI launcher');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
log.info({ binDir, commands: INTEGRATION_COMMANDS }, 'CLI launchers installed');
|
|
113
|
+
}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
// App management, gallery, publishing, and sharing types.
|
|
2
|
+
|
|
3
|
+
import type { GalleryManifest } from '../../gallery/gallery-manifest.js';
|
|
4
|
+
|
|
5
|
+
// === Client → Server ===
|
|
6
|
+
|
|
7
|
+
export interface AppDataRequest {
|
|
8
|
+
type: 'app_data_request';
|
|
9
|
+
surfaceId: string;
|
|
10
|
+
callId: string;
|
|
11
|
+
method: 'query' | 'create' | 'update' | 'delete';
|
|
12
|
+
appId: string;
|
|
13
|
+
recordId?: string;
|
|
14
|
+
data?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface AppsListRequest {
|
|
18
|
+
type: 'apps_list';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface HomeBaseGetRequest {
|
|
22
|
+
type: 'home_base_get';
|
|
23
|
+
/** If true, daemon ensures a durable Home Base link exists before responding. */
|
|
24
|
+
ensureLinked?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface AppOpenRequest {
|
|
28
|
+
type: 'app_open_request';
|
|
29
|
+
appId: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface SharedAppsListRequest {
|
|
33
|
+
type: 'shared_apps_list';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface SharedAppDeleteRequest {
|
|
37
|
+
type: 'shared_app_delete';
|
|
38
|
+
uuid: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ForkSharedAppRequest {
|
|
42
|
+
type: 'fork_shared_app';
|
|
43
|
+
uuid: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface BundleAppRequest {
|
|
47
|
+
type: 'bundle_app';
|
|
48
|
+
appId: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface AppUpdatePreviewRequest {
|
|
52
|
+
type: 'app_update_preview';
|
|
53
|
+
appId: string;
|
|
54
|
+
/** Base64-encoded PNG screenshot thumbnail. */
|
|
55
|
+
preview: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface AppPreviewRequest {
|
|
59
|
+
type: 'app_preview_request';
|
|
60
|
+
appId: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface OpenBundleRequest {
|
|
64
|
+
type: 'open_bundle';
|
|
65
|
+
filePath: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface SignBundlePayloadResponse {
|
|
69
|
+
type: 'sign_bundle_payload_response';
|
|
70
|
+
requestId: string;
|
|
71
|
+
signature?: string;
|
|
72
|
+
keyId?: string;
|
|
73
|
+
publicKey?: string;
|
|
74
|
+
error?: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface GetSigningIdentityResponse {
|
|
78
|
+
type: 'get_signing_identity_response';
|
|
79
|
+
requestId: string;
|
|
80
|
+
keyId?: string;
|
|
81
|
+
publicKey?: string;
|
|
82
|
+
error?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface GalleryListRequest {
|
|
86
|
+
type: 'gallery_list';
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface GalleryInstallRequest {
|
|
90
|
+
type: 'gallery_install';
|
|
91
|
+
galleryAppId: string;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface AppHistoryRequest {
|
|
95
|
+
type: 'app_history_request';
|
|
96
|
+
appId: string;
|
|
97
|
+
limit?: number;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface AppDiffRequest {
|
|
101
|
+
type: 'app_diff_request';
|
|
102
|
+
appId: string;
|
|
103
|
+
fromCommit: string;
|
|
104
|
+
toCommit?: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface AppFileAtVersionRequest {
|
|
108
|
+
type: 'app_file_at_version_request';
|
|
109
|
+
appId: string;
|
|
110
|
+
path: string;
|
|
111
|
+
commitHash: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface AppRestoreRequest {
|
|
115
|
+
type: 'app_restore_request';
|
|
116
|
+
appId: string;
|
|
117
|
+
commitHash: string;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface ShareAppCloudRequest {
|
|
121
|
+
type: 'share_app_cloud';
|
|
122
|
+
appId: string;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface ShareToSlackRequest {
|
|
126
|
+
type: 'share_to_slack';
|
|
127
|
+
appId: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface PublishPageRequest {
|
|
131
|
+
type: 'publish_page';
|
|
132
|
+
html: string;
|
|
133
|
+
title?: string;
|
|
134
|
+
appId?: string;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface UnpublishPageRequest {
|
|
138
|
+
type: 'unpublish_page';
|
|
139
|
+
deploymentId: string;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// === Server → Client ===
|
|
143
|
+
|
|
144
|
+
export interface AppDataResponse {
|
|
145
|
+
type: 'app_data_response';
|
|
146
|
+
surfaceId: string;
|
|
147
|
+
callId: string;
|
|
148
|
+
success: boolean;
|
|
149
|
+
result?: unknown;
|
|
150
|
+
error?: string;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export interface AppUpdatePreviewResponse {
|
|
154
|
+
type: 'app_update_preview_response';
|
|
155
|
+
success: boolean;
|
|
156
|
+
appId: string;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export interface AppPreviewResponse {
|
|
160
|
+
type: 'app_preview_response';
|
|
161
|
+
appId: string;
|
|
162
|
+
preview?: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export interface AppsListResponse {
|
|
166
|
+
type: 'apps_list_response';
|
|
167
|
+
apps: Array<{
|
|
168
|
+
id: string;
|
|
169
|
+
name: string;
|
|
170
|
+
description?: string;
|
|
171
|
+
icon?: string;
|
|
172
|
+
preview?: string;
|
|
173
|
+
createdAt: number;
|
|
174
|
+
version?: string;
|
|
175
|
+
contentId?: string;
|
|
176
|
+
appType?: string;
|
|
177
|
+
}>;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export interface HomeBaseGetResponse {
|
|
181
|
+
type: 'home_base_get_response';
|
|
182
|
+
homeBase: {
|
|
183
|
+
appId: string;
|
|
184
|
+
source: string;
|
|
185
|
+
starterTasks: string[];
|
|
186
|
+
onboardingTasks: string[];
|
|
187
|
+
preview: {
|
|
188
|
+
title: string;
|
|
189
|
+
subtitle: string;
|
|
190
|
+
description: string;
|
|
191
|
+
icon: string;
|
|
192
|
+
metrics: Array<{ label: string; value: string }>;
|
|
193
|
+
};
|
|
194
|
+
} | null;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export interface SharedAppsListResponse {
|
|
198
|
+
type: 'shared_apps_list_response';
|
|
199
|
+
apps: Array<{
|
|
200
|
+
uuid: string;
|
|
201
|
+
name: string;
|
|
202
|
+
description?: string;
|
|
203
|
+
icon?: string;
|
|
204
|
+
preview?: string;
|
|
205
|
+
entry: string;
|
|
206
|
+
trustTier: string;
|
|
207
|
+
signerDisplayName?: string;
|
|
208
|
+
bundleSizeBytes: number;
|
|
209
|
+
installedAt: string;
|
|
210
|
+
version?: string;
|
|
211
|
+
contentId?: string;
|
|
212
|
+
updateAvailable?: boolean;
|
|
213
|
+
}>;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export interface SharedAppDeleteResponse {
|
|
217
|
+
type: 'shared_app_delete_response';
|
|
218
|
+
success: boolean;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export interface ForkSharedAppResponse {
|
|
222
|
+
type: 'fork_shared_app_response';
|
|
223
|
+
success: boolean;
|
|
224
|
+
appId?: string;
|
|
225
|
+
name?: string;
|
|
226
|
+
error?: string;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export interface BundleAppResponse {
|
|
230
|
+
type: 'bundle_app_response';
|
|
231
|
+
bundlePath: string;
|
|
232
|
+
manifest: {
|
|
233
|
+
format_version: number;
|
|
234
|
+
name: string;
|
|
235
|
+
description?: string;
|
|
236
|
+
icon?: string;
|
|
237
|
+
created_at: string;
|
|
238
|
+
created_by: string;
|
|
239
|
+
entry: string;
|
|
240
|
+
capabilities: string[];
|
|
241
|
+
version?: string;
|
|
242
|
+
content_id?: string;
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export interface OpenBundleResponse {
|
|
247
|
+
type: 'open_bundle_response';
|
|
248
|
+
manifest: {
|
|
249
|
+
format_version: number;
|
|
250
|
+
name: string;
|
|
251
|
+
description?: string;
|
|
252
|
+
icon?: string;
|
|
253
|
+
created_at: string;
|
|
254
|
+
created_by: string;
|
|
255
|
+
entry: string;
|
|
256
|
+
capabilities: string[];
|
|
257
|
+
};
|
|
258
|
+
scanResult: {
|
|
259
|
+
passed: boolean;
|
|
260
|
+
blocked: string[];
|
|
261
|
+
warnings: string[];
|
|
262
|
+
};
|
|
263
|
+
signatureResult: {
|
|
264
|
+
trustTier: 'verified' | 'signed' | 'unsigned' | 'tampered';
|
|
265
|
+
signerKeyId?: string;
|
|
266
|
+
signerDisplayName?: string;
|
|
267
|
+
signerAccount?: string;
|
|
268
|
+
};
|
|
269
|
+
bundleSizeBytes: number;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export interface SignBundlePayloadRequest {
|
|
273
|
+
type: 'sign_bundle_payload';
|
|
274
|
+
requestId: string;
|
|
275
|
+
payload: string;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export interface GetSigningIdentityRequest {
|
|
279
|
+
type: 'get_signing_identity';
|
|
280
|
+
requestId: string;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export interface ShareAppCloudResponse {
|
|
284
|
+
type: 'share_app_cloud_response';
|
|
285
|
+
success: boolean;
|
|
286
|
+
shareToken?: string;
|
|
287
|
+
shareUrl?: string;
|
|
288
|
+
error?: string;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export interface GalleryListResponse {
|
|
292
|
+
type: 'gallery_list_response';
|
|
293
|
+
gallery: GalleryManifest;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export interface GalleryInstallResponse {
|
|
297
|
+
type: 'gallery_install_response';
|
|
298
|
+
success: boolean;
|
|
299
|
+
appId?: string;
|
|
300
|
+
name?: string;
|
|
301
|
+
error?: string;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
export interface AppHistoryResponse {
|
|
305
|
+
type: 'app_history_response';
|
|
306
|
+
appId: string;
|
|
307
|
+
versions: Array<{
|
|
308
|
+
commitHash: string;
|
|
309
|
+
message: string;
|
|
310
|
+
timestamp: number;
|
|
311
|
+
}>;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export interface AppDiffResponse {
|
|
315
|
+
type: 'app_diff_response';
|
|
316
|
+
appId: string;
|
|
317
|
+
diff: string;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export interface AppFileAtVersionResponse {
|
|
321
|
+
type: 'app_file_at_version_response';
|
|
322
|
+
appId: string;
|
|
323
|
+
path: string;
|
|
324
|
+
content: string;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export interface AppRestoreResponse {
|
|
328
|
+
type: 'app_restore_response';
|
|
329
|
+
success: boolean;
|
|
330
|
+
error?: string;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export interface ShareToSlackResponse {
|
|
334
|
+
type: 'share_to_slack_response';
|
|
335
|
+
success: boolean;
|
|
336
|
+
error?: string;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export interface PublishPageResponse {
|
|
340
|
+
type: 'publish_page_response';
|
|
341
|
+
success: boolean;
|
|
342
|
+
publicUrl?: string;
|
|
343
|
+
deploymentId?: string;
|
|
344
|
+
error?: string;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
export interface UnpublishPageResponse {
|
|
348
|
+
type: 'unpublish_page_response';
|
|
349
|
+
success: boolean;
|
|
350
|
+
error?: string;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface AppFilesChanged {
|
|
354
|
+
type: 'app_files_changed';
|
|
355
|
+
appId: string;
|
|
356
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Browser interaction types.
|
|
2
|
+
|
|
3
|
+
export interface BrowserFrame {
|
|
4
|
+
type: 'browser_frame';
|
|
5
|
+
sessionId: string;
|
|
6
|
+
surfaceId: string;
|
|
7
|
+
frame: string; // base64 JPEG
|
|
8
|
+
metadata?: { offsetTop: number; pageScaleFactor: number; scrollOffsetX: number; scrollOffsetY: number; timestamp: number };
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface BrowserCDPRequest {
|
|
12
|
+
type: 'browser_cdp_request';
|
|
13
|
+
sessionId: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface BrowserCDPResponse {
|
|
17
|
+
type: 'browser_cdp_response';
|
|
18
|
+
sessionId: string;
|
|
19
|
+
success: boolean;
|
|
20
|
+
declined?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface BrowserUserClick {
|
|
24
|
+
type: 'browser_user_click';
|
|
25
|
+
sessionId: string;
|
|
26
|
+
surfaceId: string;
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
button?: 'left' | 'right';
|
|
30
|
+
doubleClick?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface BrowserUserScroll {
|
|
34
|
+
type: 'browser_user_scroll';
|
|
35
|
+
sessionId: string;
|
|
36
|
+
surfaceId: string;
|
|
37
|
+
deltaX: number;
|
|
38
|
+
deltaY: number;
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface BrowserUserKeypress {
|
|
44
|
+
type: 'browser_user_keypress';
|
|
45
|
+
sessionId: string;
|
|
46
|
+
surfaceId: string;
|
|
47
|
+
key: string;
|
|
48
|
+
modifiers?: string[];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface BrowserInteractiveMode {
|
|
52
|
+
type: 'browser_interactive_mode';
|
|
53
|
+
sessionId: string;
|
|
54
|
+
surfaceId: string;
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface BrowserInteractiveModeChanged {
|
|
59
|
+
type: 'browser_interactive_mode_changed';
|
|
60
|
+
sessionId: string;
|
|
61
|
+
surfaceId: string;
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
reason?: string;
|
|
64
|
+
message?: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface BrowserHandoffRequest {
|
|
68
|
+
type: 'browser_handoff_request';
|
|
69
|
+
sessionId: string;
|
|
70
|
+
surfaceId: string;
|
|
71
|
+
reason: 'auth' | 'checkout' | 'captcha' | 'custom';
|
|
72
|
+
message: string;
|
|
73
|
+
bringToFront?: boolean;
|
|
74
|
+
}
|