@vellumai/assistant 0.7.1 → 0.7.2
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/ARCHITECTURE.md +32 -49
- package/Dockerfile +1 -0
- package/README.md +1 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +9 -3
- package/bun.lock +26 -26
- package/docs/architecture/security.md +20 -0
- package/docs/plugins.md +7 -9
- package/knip.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +39 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +9 -0
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +565 -12
- package/package.json +6 -3
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +374 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- package/src/__tests__/app-executors.test.ts +30 -43
- package/src/__tests__/approval-routes-http.test.ts +23 -6
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +109 -2
- package/src/__tests__/assistant-event.test.ts +10 -0
- package/src/__tests__/assistant-events-sse-hardening.test.ts +7 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -7
- package/src/__tests__/background-shell-host-bash.test.ts +14 -15
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +49 -1
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/channel-readiness-service.test.ts +59 -1
- package/src/__tests__/checker.test.ts +3 -4
- package/src/__tests__/config-loader-backfill.test.ts +90 -155
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +36 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +6 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -72
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-slash-commands.test.ts +0 -4
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +317 -0
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credentials-cli.test.ts +5 -12
- package/src/__tests__/cu-unified-flow.test.ts +185 -23
- package/src/__tests__/daemon-credential-client.test.ts +101 -19
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -1
- package/src/__tests__/heartbeat-service.test.ts +718 -1
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/host-app-control-proxy.test.ts +602 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +246 -47
- package/src/__tests__/host-bash-routes.test.ts +294 -0
- package/src/__tests__/host-browser-proxy.test.ts +24 -22
- package/src/__tests__/host-browser-routes.test.ts +39 -13
- package/src/__tests__/host-cu-proxy.test.ts +41 -52
- package/src/__tests__/host-cu-routes-targeted.test.ts +300 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +339 -0
- package/src/__tests__/host-file-proxy.test.ts +37 -43
- package/src/__tests__/host-file-read-tool.test.ts +17 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +262 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +22 -4
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +583 -0
- package/src/__tests__/host-transfer-proxy.test.ts +121 -22
- package/src/__tests__/host-transfer-routes-targeted.test.ts +447 -0
- package/src/__tests__/http-user-message-parity.test.ts +1 -0
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/inline-command-runner.test.ts +0 -1
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -11
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -1
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/migration-import-commit-http.test.ts +108 -2
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +5 -9
- package/src/__tests__/prechat-onboarding-contract.test.ts +3 -1
- package/src/__tests__/process-message-background-slack.test.ts +2 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/require-fresh-approval.test.ts +0 -1
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-events-sse.test.ts +10 -6
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/secret-ingress-http.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +3 -0
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -1
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -1
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +1 -4
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -4
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +51 -151
- package/src/backup/paths.ts +2 -18
- package/src/backup/restore.ts +107 -231
- package/src/bundler/app-bundler.ts +51 -3
- package/src/calls/relay-server.ts +4 -44
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +33 -105
- package/src/calls/twilio-routes.ts +11 -12
- package/src/channels/types.ts +8 -7
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +4 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -1
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/clients.ts +36 -37
- package/src/cli/commands/contacts.ts +73 -0
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +15 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +9 -6
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +296 -1
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/status.test.ts +13 -15
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +0 -18
- package/src/cli/lib/daemon-credential-client.ts +110 -28
- package/src/cli/program.ts +2 -0
- package/src/config/assistant-feature-flags.ts +67 -10
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -40
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +19 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +0 -2
- package/src/config/env.ts +19 -12
- package/src/config/feature-flag-registry.json +21 -133
- package/src/config/loader.ts +73 -99
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +7 -4
- package/src/config/schemas/calls.ts +0 -9
- package/src/config/schemas/heartbeat.ts +63 -0
- package/src/config/schemas/ingress.ts +10 -6
- package/src/config/schemas/llm.ts +5 -10
- package/src/config/schemas/memory-lifecycle.ts +77 -24
- package/src/config/schemas/memory-v2.ts +48 -4
- package/src/config/schemas/platform.ts +6 -0
- package/src/config/schemas/services.ts +1 -15
- package/src/config/schemas/skills.ts +0 -6
- package/src/config/seed-inference-profiles.ts +1 -1
- package/src/contacts/contact-store.ts +0 -30
- package/src/contacts/contacts-write.ts +0 -27
- package/src/context/window-manager.ts +1 -2
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +12 -41
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +126 -5
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +4 -3
- package/src/daemon/conversation-agent-loop-handlers.ts +21 -3
- package/src/daemon/conversation-agent-loop.ts +32 -28
- package/src/daemon/conversation-lifecycle.ts +8 -1
- package/src/daemon/conversation-process.ts +16 -11
- package/src/daemon/conversation-runtime-assembly.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +125 -4
- package/src/daemon/conversation-tool-setup.ts +16 -55
- package/src/daemon/conversation.ts +21 -2
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/shared.ts +4 -1
- package/src/daemon/host-app-control-proxy.ts +293 -0
- package/src/daemon/host-bash-proxy.ts +84 -74
- package/src/daemon/host-browser-proxy.ts +67 -82
- package/src/daemon/host-cu-proxy.ts +81 -86
- package/src/daemon/host-file-proxy.ts +93 -69
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +247 -129
- package/src/daemon/lifecycle.ts +115 -117
- package/src/daemon/message-protocol.ts +3 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +11 -8
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +4 -0
- package/src/daemon/message-types/host-cu.ts +2 -0
- package/src/daemon/message-types/host-file.ts +4 -0
- package/src/daemon/message-types/host-transfer.ts +3 -0
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/process-message.ts +18 -1
- package/src/daemon/shutdown-handlers.ts +0 -3
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/events/tool-audit-listener.ts +2 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +15 -7
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +216 -0
- package/src/heartbeat/heartbeat-run-store.ts +236 -0
- package/src/heartbeat/heartbeat-service.ts +280 -49
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +11 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +17 -92
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/assistant-server.ts +14 -1
- package/src/ipc/cli-client.ts +32 -1
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +32 -7
- package/src/memory/context-search/sources/memory-v2.ts +17 -5
- package/src/memory/conversation-crud.ts +1 -1
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/db-init.ts +4 -0
- package/src/memory/embedding-backend.ts +9 -21
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +49 -4
- package/src/memory/graph/conversation-graph-memory.ts +1 -24
- package/src/memory/graph/graph-search.ts +8 -0
- package/src/memory/graph/retriever.ts +28 -0
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +66 -22
- package/src/memory/jobs-worker.ts +112 -63
- package/src/memory/memory-v2-activation-log-store.ts +1 -1
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +50 -20
- package/src/memory/schema/infrastructure.ts +15 -0
- package/src/memory/search/semantic.ts +7 -0
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/v2/__tests__/activation.test.ts +77 -95
- package/src/memory/v2/__tests__/injection.test.ts +43 -21
- package/src/memory/v2/__tests__/sim.test.ts +166 -6
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +0 -1
- package/src/memory/v2/activation.ts +69 -88
- package/src/memory/v2/consolidation-job.ts +3 -5
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/injection.ts +86 -53
- package/src/memory/v2/prompts/consolidation.ts +312 -91
- package/src/memory/v2/qdrant.ts +99 -1
- package/src/memory/v2/sim.ts +126 -16
- package/src/memory/v2/skill-qdrant.ts +12 -3
- package/src/memory/v2/skill-store.ts +16 -1
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +6 -5
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/slack/adapter.ts +1 -31
- package/src/messaging/providers/slack/types.ts +0 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/oauth/connect-orchestrator.ts +4 -0
- package/src/oauth/credential-token-resolver.ts +1 -3
- package/src/oauth/manual-token-connection.ts +0 -4
- package/src/outbound-proxy/index.ts +1 -37
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +3 -17
- package/src/permissions/gateway-threshold-reader.ts +2 -0
- package/src/permissions/prompter.ts +34 -1
- package/src/permissions/secret-prompter.ts +6 -2
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/system-prompt.ts +3 -18
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/runtime/assistant-event-hub.ts +118 -96
- package/src/runtime/assistant-event.ts +1 -0
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/middleware.ts +0 -96
- package/src/runtime/auth/route-policy.ts +19 -0
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/http-server.ts +3 -329
- package/src/runtime/http-types.ts +0 -5
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +153 -1
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +51 -1
- package/src/runtime/migrations/migration-transport.ts +7 -7
- package/src/runtime/migrations/vbundle-builder.ts +327 -60
- package/src/runtime/migrations/vbundle-import-analyzer.ts +4 -4
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +245 -68
- package/src/runtime/migrations/vbundle-streaming-importer.ts +326 -35
- package/src/runtime/migrations/vbundle-streaming-validator.ts +157 -4
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +114 -0
- package/src/runtime/pending-interactions.ts +35 -9
- package/src/runtime/routes/__tests__/backup-routes.test.ts +22 -150
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/client-routes.ts +1 -0
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/conversation-query-routes.ts +36 -1
- package/src/runtime/routes/conversation-routes.ts +30 -13
- package/src/runtime/routes/document-pdf-renderer.ts +165 -0
- package/src/runtime/routes/documents-routes.ts +30 -0
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +12 -6
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +36 -6
- package/src/runtime/routes/host-browser-routes.ts +108 -13
- package/src/runtime/routes/host-cu-routes.ts +44 -14
- package/src/runtime/routes/host-file-routes.ts +33 -10
- package/src/runtime/routes/host-transfer-routes.ts +64 -24
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +15 -43
- package/src/runtime/routes/inbound-message-handler.ts +1 -9
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +0 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +8 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +441 -1
- package/src/runtime/routes/migration-routes.ts +96 -0
- package/src/runtime/routes/schedule-routes.ts +7 -0
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -2
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +63 -38
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/remote-skill-policy.ts +5 -5
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/telemetry/types.ts +2 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +21 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/browser/__tests__/browser-status.test.ts +21 -18
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +55 -4
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +23 -24
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +2 -0
- package/src/tools/host-filesystem/edit.ts +26 -0
- package/src/tools/host-filesystem/read.ts +26 -0
- package/src/tools/host-filesystem/transfer.ts +31 -1
- package/src/tools/host-filesystem/write.ts +26 -0
- package/src/tools/host-terminal/host-shell.ts +58 -0
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/tool-approval-handler.ts +1 -5
- package/src/tools/types.ts +4 -0
- package/src/usage/pricing.ts +1 -1
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +2 -1
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +3 -8
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -443
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -226
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -427
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -782
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -472
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/outbound-proxy/config.ts +0 -20
- package/src/outbound-proxy/health.ts +0 -18
- package/src/outbound-proxy/types.ts +0 -150
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/signals/mcp-reload.ts +0 -18
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "app_create",
|
|
6
|
-
"description": "Create a persistent app with a name, optional description, JSON schema,
|
|
6
|
+
"description": "Create a persistent multi-file TSX app scaffold with a name, optional description, and JSON schema. Write source files under src/ with file tools, then call app_refresh.",
|
|
7
7
|
"category": "apps",
|
|
8
8
|
"risk": "low",
|
|
9
9
|
"input_schema": {
|
|
@@ -21,17 +21,6 @@
|
|
|
21
21
|
"type": "string",
|
|
22
22
|
"description": "JSON schema defining the app data structure"
|
|
23
23
|
},
|
|
24
|
-
"html": {
|
|
25
|
-
"type": "string",
|
|
26
|
-
"description": "Optional HTML definition for the main index.html page. If omitted, a minimal scaffold is created and you can write index.html later via file_write."
|
|
27
|
-
},
|
|
28
|
-
"pages": {
|
|
29
|
-
"type": "object",
|
|
30
|
-
"description": "Optional additional pages as a mapping of filename to HTML content (e.g. {\"settings.html\": \"<html>...</html>\"}). Navigate between pages with <a href=\"settings.html\">. Do not include index.html here \u2014 use the html parameter instead.",
|
|
31
|
-
"additionalProperties": {
|
|
32
|
-
"type": "string"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
24
|
"auto_open": {
|
|
36
25
|
"type": "boolean",
|
|
37
26
|
"description": "When true (default), an inline preview card is shown in chat after creation. The app is NOT automatically opened in a workspace panel \u2014 users can open it explicitly via the 'Open App' button on the inline card."
|
|
@@ -78,10 +67,6 @@
|
|
|
78
67
|
"change_summary": {
|
|
79
68
|
"type": "string",
|
|
80
69
|
"description": "Short summary of what changed, using git conventional commit format (e.g. 'feat: add coin flip app', 'fix: correct button alignment'). Used as the version history entry."
|
|
81
|
-
},
|
|
82
|
-
"activity": {
|
|
83
|
-
"type": "string",
|
|
84
|
-
"description": "Brief non-technical explanation of why this tool is being called"
|
|
85
70
|
}
|
|
86
71
|
},
|
|
87
72
|
"required": ["name"]
|
|
@@ -104,10 +89,6 @@
|
|
|
104
89
|
"change_summary": {
|
|
105
90
|
"type": "string",
|
|
106
91
|
"description": "Short summary of what changed, using git conventional commit format (e.g. 'chore: delete unused app'). Used as the version history entry."
|
|
107
|
-
},
|
|
108
|
-
"activity": {
|
|
109
|
-
"type": "string",
|
|
110
|
-
"description": "Brief non-technical explanation of why this tool is being called"
|
|
111
92
|
}
|
|
112
93
|
},
|
|
113
94
|
"required": ["app_id"]
|
|
@@ -130,10 +111,6 @@
|
|
|
130
111
|
"change_summary": {
|
|
131
112
|
"type": "string",
|
|
132
113
|
"description": "Short summary of what changed, using git conventional commit format (e.g. 'feat: add dark mode toggle', 'fix: form validation'). Used as the version history entry."
|
|
133
|
-
},
|
|
134
|
-
"activity": {
|
|
135
|
-
"type": "string",
|
|
136
|
-
"description": "Brief non-technical explanation of why this tool is being called"
|
|
137
114
|
}
|
|
138
115
|
},
|
|
139
116
|
"required": ["app_id"]
|
|
@@ -160,10 +137,6 @@
|
|
|
160
137
|
"change_summary": {
|
|
161
138
|
"type": "string",
|
|
162
139
|
"description": "Short summary of what changed, using git conventional commit format (e.g. 'feat: generate app icon'). Used as the version history entry."
|
|
163
|
-
},
|
|
164
|
-
"activity": {
|
|
165
|
-
"type": "string",
|
|
166
|
-
"description": "Brief non-technical explanation of why this tool is being called"
|
|
167
140
|
}
|
|
168
141
|
},
|
|
169
142
|
"required": ["app_id"]
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { isAssistantFeatureFlagEnabled } from "../../../../config/assistant-feature-flags.js";
|
|
2
|
-
import { getConfig } from "../../../../config/loader.js";
|
|
3
1
|
import { setAppCommitMessage } from "../../../../memory/app-git-service.js";
|
|
4
2
|
import * as appStore from "../../../../memory/app-store.js";
|
|
5
3
|
import type { AppCreateInput } from "../../../../tools/apps/executors.js";
|
|
@@ -16,13 +14,6 @@ export async function run(
|
|
|
16
14
|
if (typeof input.change_summary === "string" && input.change_summary.trim()) {
|
|
17
15
|
setAppCommitMessage(context.conversationId, input.change_summary.trim());
|
|
18
16
|
}
|
|
19
|
-
const
|
|
20
|
-
"app-builder-multifile",
|
|
21
|
-
getConfig(),
|
|
22
|
-
);
|
|
23
|
-
const createInput: AppCreateInput = {
|
|
24
|
-
...(input as unknown as AppCreateInput),
|
|
25
|
-
featureFlags: { multifileEnabled },
|
|
26
|
-
};
|
|
17
|
+
const createInput: AppCreateInput = input as unknown as AppCreateInput;
|
|
27
18
|
return executeAppCreate(createInput, appStore, context.proxyToolResolver);
|
|
28
19
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: app-control
|
|
3
|
+
description: Drive a specific named macOS app via raw input bypassing the Accessibility tree
|
|
4
|
+
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
+
metadata:
|
|
6
|
+
emoji: "🎯"
|
|
7
|
+
vellum:
|
|
8
|
+
display-name: "App Control"
|
|
9
|
+
feature-flag: "app-control"
|
|
10
|
+
activation-hints:
|
|
11
|
+
- "User explicitly directs the assistant to drive a specific named app via raw input (emulator, game, OpenGL canvas, custom-rendered Electron app)"
|
|
12
|
+
- "User says the macOS Accessibility tree is unhelpful or empty for the target app"
|
|
13
|
+
avoid-when:
|
|
14
|
+
- "Task can be done via the computer-use skill (general macOS UI navigation)"
|
|
15
|
+
- "Task can be done via a CLI / API alternative"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
This skill exposes the `app_control_*` proxy tools for driving a single
|
|
19
|
+
named macOS application via raw input — keyboard, mouse, screenshot — that
|
|
20
|
+
bypasses the system Accessibility tree. Use it only when explicitly directed
|
|
21
|
+
to a specific app where the AX tree is unhelpful (emulators, games, OpenGL
|
|
22
|
+
canvases, custom-rendered Electron apps). For general macOS UI navigation
|
|
23
|
+
prefer the `computer-use` skill.
|
|
24
|
+
|
|
25
|
+
Tools in this skill are proxy tools — execution is forwarded to the connected
|
|
26
|
+
macOS client, never handled locally by the assistant.
|
|
27
|
+
|
|
28
|
+
## Cadence
|
|
29
|
+
|
|
30
|
+
Take 2-3 actions per turn, then yield with a short narration so the user can
|
|
31
|
+
interject. Do not chain long sequences without surfacing what you are doing.
|
|
32
|
+
|
|
33
|
+
## Always observe before acting
|
|
34
|
+
|
|
35
|
+
Call `app_control_observe` before your first input action whenever the screen
|
|
36
|
+
state matters (e.g. you need to know what is on screen, where a UI element is,
|
|
37
|
+
or whether the app is even running). Re-observe after actions that may have
|
|
38
|
+
moved the window or changed visibility.
|
|
39
|
+
|
|
40
|
+
`observe` waits a short settle delay (default ~200ms) before capturing so the
|
|
41
|
+
target app and the WindowServer can flush pending input and composite a fresh
|
|
42
|
+
frame. If the captured screenshot looks one input behind the latest state
|
|
43
|
+
(common with emulators or other slow-feedback apps), pass a larger
|
|
44
|
+
`settle_ms`. For static UIs where you just want a quick snapshot, pass
|
|
45
|
+
`settle_ms: 0` to skip the wait.
|
|
46
|
+
|
|
47
|
+
## Input choice
|
|
48
|
+
|
|
49
|
+
- Prefer `app_control_sequence` over multiple back-to-back `app_control_press`
|
|
50
|
+
calls when sending an ordered batch of presses (e.g. menu navigation,
|
|
51
|
+
repeated movement). Sequence runs in a single round-trip — the target app is
|
|
52
|
+
activated once at the start and the keys are sent serially without any
|
|
53
|
+
window for keyboard focus to drift to another app between presses. Each step
|
|
54
|
+
may carry its own `duration_ms` (hold) and `gap_ms` (pause after).
|
|
55
|
+
- Prefer `app_control_combo` over rapid sequential `app_control_press` for
|
|
56
|
+
simultaneous inputs (e.g. cmd+shift+4). `combo` holds every key at once;
|
|
57
|
+
sequential presses interleave key-down and key-up events.
|
|
58
|
+
- Use `app_control_type` for literal text into a focused field.
|
|
59
|
+
|
|
60
|
+
## Coordinate caveat
|
|
61
|
+
|
|
62
|
+
`app_control_click` and `app_control_drag` use **window-relative** coordinates.
|
|
63
|
+
The window may move or resize between observation and click — if you are
|
|
64
|
+
uncertain whether the window has shifted, re-observe first.
|
|
65
|
+
|
|
66
|
+
## App targeting
|
|
67
|
+
|
|
68
|
+
Use bundle IDs (e.g. `com.example.app`) when possible — they are the most
|
|
69
|
+
reliable identifier. Fall back to localized process names if a bundle ID is
|
|
70
|
+
unavailable.
|
|
71
|
+
|
|
72
|
+
## Ending the session
|
|
73
|
+
|
|
74
|
+
Call `app_control_stop` when you are done. Do **not** auto-quit the controlled
|
|
75
|
+
app — `stop` only ends the app-control session, leaving the app running.
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"tools": [
|
|
4
|
+
{
|
|
5
|
+
"name": "app_control_start",
|
|
6
|
+
"description": "Start (launch or focus) the target application. Optionally pass command-line arguments. Begins an app-control session targeting this app.",
|
|
7
|
+
"category": "app-control",
|
|
8
|
+
"risk": "medium",
|
|
9
|
+
"input_schema": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"app": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
15
|
+
},
|
|
16
|
+
"args": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": { "type": "string" },
|
|
19
|
+
"description": "Optional command-line arguments to launch the app with"
|
|
20
|
+
},
|
|
21
|
+
"reasoning": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Explanation of why you are starting this app"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"required": ["app", "reasoning"]
|
|
27
|
+
},
|
|
28
|
+
"executor": "tools/app-control-start.ts",
|
|
29
|
+
"execution_target": "host"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "app_control_observe",
|
|
33
|
+
"description": "Capture the current window state of the target application — returns lifecycle state (running/missing/minimized), an optional screenshot, and window bounds. Use this before issuing input actions, or to check progress without acting.",
|
|
34
|
+
"category": "app-control",
|
|
35
|
+
"risk": "low",
|
|
36
|
+
"input_schema": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"app": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
42
|
+
},
|
|
43
|
+
"settle_ms": {
|
|
44
|
+
"type": "integer",
|
|
45
|
+
"description": "Milliseconds to wait before capturing so the target app and the WindowServer can flush pending input + composite a fresh frame. Default ~200ms (sized for emulator-class apps at 60fps). Pass 0 for static UIs; raise for slow-feedback apps."
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"required": ["app"]
|
|
49
|
+
},
|
|
50
|
+
"executor": "tools/app-control-observe.ts",
|
|
51
|
+
"execution_target": "host"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "app_control_press",
|
|
55
|
+
"description": "Press a single key in the target application, with optional modifiers (cmd/shift/option/ctrl) and a hold duration in milliseconds.",
|
|
56
|
+
"category": "app-control",
|
|
57
|
+
"risk": "low",
|
|
58
|
+
"input_schema": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"properties": {
|
|
61
|
+
"app": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
64
|
+
},
|
|
65
|
+
"key": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Key identifier, e.g. \"return\", \"a\", \"f12\""
|
|
68
|
+
},
|
|
69
|
+
"modifiers": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": { "type": "string" },
|
|
72
|
+
"description": "Modifier list, e.g. [\"cmd\", \"shift\"]. Omit for no modifiers."
|
|
73
|
+
},
|
|
74
|
+
"duration_ms": {
|
|
75
|
+
"type": "integer",
|
|
76
|
+
"description": "Hold duration in milliseconds"
|
|
77
|
+
},
|
|
78
|
+
"reasoning": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "Explanation of why you are pressing this key"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"required": ["app", "key", "reasoning"]
|
|
84
|
+
},
|
|
85
|
+
"executor": "tools/app-control-press.ts",
|
|
86
|
+
"execution_target": "host"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "app_control_combo",
|
|
90
|
+
"description": "Press multiple keys simultaneously in the target application (e.g. cmd+shift+4). Use for keyboard shortcuts where every key is held at once.",
|
|
91
|
+
"category": "app-control",
|
|
92
|
+
"risk": "low",
|
|
93
|
+
"input_schema": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"properties": {
|
|
96
|
+
"app": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
99
|
+
},
|
|
100
|
+
"keys": {
|
|
101
|
+
"type": "array",
|
|
102
|
+
"items": { "type": "string" },
|
|
103
|
+
"description": "Sequence of keys pressed simultaneously, e.g. [\"cmd\", \"shift\", \"4\"]"
|
|
104
|
+
},
|
|
105
|
+
"duration_ms": {
|
|
106
|
+
"type": "integer",
|
|
107
|
+
"description": "Hold duration in milliseconds"
|
|
108
|
+
},
|
|
109
|
+
"reasoning": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"description": "Explanation of why you are pressing this combo"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"required": ["app", "keys", "reasoning"]
|
|
115
|
+
},
|
|
116
|
+
"executor": "tools/app-control-combo.ts",
|
|
117
|
+
"execution_target": "host"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"name": "app_control_sequence",
|
|
121
|
+
"description": "Send an ordered batch of single-key presses to the target application. The target app is activated once at the start, then each step is pressed serially with optional inter-step gaps. PREFER this over multiple back-to-back app_control_press calls when sending an ordered batch (e.g. menu navigation, repeated movement) — sequence runs in a single round-trip with no window for keyboard focus to drift between presses.",
|
|
122
|
+
"category": "app-control",
|
|
123
|
+
"risk": "low",
|
|
124
|
+
"input_schema": {
|
|
125
|
+
"type": "object",
|
|
126
|
+
"properties": {
|
|
127
|
+
"app": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
130
|
+
},
|
|
131
|
+
"steps": {
|
|
132
|
+
"type": "array",
|
|
133
|
+
"description": "Ordered list of single-key presses to execute serially.",
|
|
134
|
+
"items": {
|
|
135
|
+
"type": "object",
|
|
136
|
+
"properties": {
|
|
137
|
+
"key": {
|
|
138
|
+
"type": "string",
|
|
139
|
+
"description": "Key identifier, e.g. \"return\", \"a\", \"right\""
|
|
140
|
+
},
|
|
141
|
+
"modifiers": {
|
|
142
|
+
"type": "array",
|
|
143
|
+
"items": { "type": "string" },
|
|
144
|
+
"description": "Modifier list for this step, e.g. [\"cmd\", \"shift\"]. Omit for no modifiers."
|
|
145
|
+
},
|
|
146
|
+
"duration_ms": {
|
|
147
|
+
"type": "integer",
|
|
148
|
+
"description": "Hold duration for this key in milliseconds (default 50)"
|
|
149
|
+
},
|
|
150
|
+
"gap_ms": {
|
|
151
|
+
"type": "integer",
|
|
152
|
+
"description": "Pause after this step before starting the next, in milliseconds (default 30)"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"required": ["key"]
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"reasoning": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"description": "Explanation of what this sequence does and why"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"required": ["app", "steps", "reasoning"]
|
|
164
|
+
},
|
|
165
|
+
"executor": "tools/app-control-sequence.ts",
|
|
166
|
+
"execution_target": "host"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "app_control_type",
|
|
170
|
+
"description": "Type literal text into the target application at the current focus. Ensure the intended field is focused before calling.",
|
|
171
|
+
"category": "app-control",
|
|
172
|
+
"risk": "low",
|
|
173
|
+
"input_schema": {
|
|
174
|
+
"type": "object",
|
|
175
|
+
"properties": {
|
|
176
|
+
"app": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
179
|
+
},
|
|
180
|
+
"text": {
|
|
181
|
+
"type": "string",
|
|
182
|
+
"description": "The text to type"
|
|
183
|
+
},
|
|
184
|
+
"reasoning": {
|
|
185
|
+
"type": "string",
|
|
186
|
+
"description": "Explanation of what you are typing and why"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"required": ["app", "text", "reasoning"]
|
|
190
|
+
},
|
|
191
|
+
"executor": "tools/app-control-type.ts",
|
|
192
|
+
"execution_target": "host"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"name": "app_control_click",
|
|
196
|
+
"description": "Click at the given (x, y) coordinates inside the target application's window. Defaults to a single left-click; pass `button` and/or `double` to vary.",
|
|
197
|
+
"category": "app-control",
|
|
198
|
+
"risk": "low",
|
|
199
|
+
"input_schema": {
|
|
200
|
+
"type": "object",
|
|
201
|
+
"properties": {
|
|
202
|
+
"app": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
205
|
+
},
|
|
206
|
+
"x": {
|
|
207
|
+
"type": "integer",
|
|
208
|
+
"description": "X coordinate (window-relative)"
|
|
209
|
+
},
|
|
210
|
+
"y": {
|
|
211
|
+
"type": "integer",
|
|
212
|
+
"description": "Y coordinate (window-relative)"
|
|
213
|
+
},
|
|
214
|
+
"button": {
|
|
215
|
+
"type": "string",
|
|
216
|
+
"enum": ["left", "right", "middle"],
|
|
217
|
+
"description": "Mouse button (default: \"left\")"
|
|
218
|
+
},
|
|
219
|
+
"double": {
|
|
220
|
+
"type": "boolean",
|
|
221
|
+
"description": "When true, performs a double-click"
|
|
222
|
+
},
|
|
223
|
+
"reasoning": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"description": "Explanation of what you see and why you are clicking here"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"required": ["app", "x", "y", "reasoning"]
|
|
229
|
+
},
|
|
230
|
+
"executor": "tools/app-control-click.ts",
|
|
231
|
+
"execution_target": "host"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"name": "app_control_drag",
|
|
235
|
+
"description": "Drag from (from_x, from_y) to (to_x, to_y) inside the target application's window. Defaults to left button.",
|
|
236
|
+
"category": "app-control",
|
|
237
|
+
"risk": "low",
|
|
238
|
+
"input_schema": {
|
|
239
|
+
"type": "object",
|
|
240
|
+
"properties": {
|
|
241
|
+
"app": {
|
|
242
|
+
"type": "string",
|
|
243
|
+
"description": "Bundle ID (preferred, e.g. 'com.apple.Safari') or process name of the target application"
|
|
244
|
+
},
|
|
245
|
+
"from_x": {
|
|
246
|
+
"type": "integer",
|
|
247
|
+
"description": "Source X coordinate (window-relative)"
|
|
248
|
+
},
|
|
249
|
+
"from_y": {
|
|
250
|
+
"type": "integer",
|
|
251
|
+
"description": "Source Y coordinate (window-relative)"
|
|
252
|
+
},
|
|
253
|
+
"to_x": {
|
|
254
|
+
"type": "integer",
|
|
255
|
+
"description": "Destination X coordinate (window-relative)"
|
|
256
|
+
},
|
|
257
|
+
"to_y": {
|
|
258
|
+
"type": "integer",
|
|
259
|
+
"description": "Destination Y coordinate (window-relative)"
|
|
260
|
+
},
|
|
261
|
+
"button": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"enum": ["left", "right", "middle"],
|
|
264
|
+
"description": "Mouse button (default: \"left\")"
|
|
265
|
+
},
|
|
266
|
+
"reasoning": {
|
|
267
|
+
"type": "string",
|
|
268
|
+
"description": "Explanation of what you are dragging and why"
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"required": ["app", "from_x", "from_y", "to_x", "to_y", "reasoning"]
|
|
272
|
+
},
|
|
273
|
+
"executor": "tools/app-control-drag.ts",
|
|
274
|
+
"execution_target": "host"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"name": "app_control_stop",
|
|
278
|
+
"description": "Stop the current app-control session. When `app` is omitted, stops whichever app currently holds the session. This is the terminal action for an app-control flow.",
|
|
279
|
+
"category": "app-control",
|
|
280
|
+
"risk": "low",
|
|
281
|
+
"input_schema": {
|
|
282
|
+
"type": "object",
|
|
283
|
+
"properties": {
|
|
284
|
+
"app": {
|
|
285
|
+
"type": "string",
|
|
286
|
+
"description": "Optional bundle ID or process name. When omitted, stops whichever app currently holds the session."
|
|
287
|
+
},
|
|
288
|
+
"reason": {
|
|
289
|
+
"type": "string",
|
|
290
|
+
"description": "Free-form reason, surfaced for logging"
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
"required": []
|
|
294
|
+
},
|
|
295
|
+
"executor": "tools/app-control-stop.ts",
|
|
296
|
+
"execution_target": "host"
|
|
297
|
+
}
|
|
298
|
+
]
|
|
299
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_click", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_combo", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_drag", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_observe", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_press", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_sequence", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_start", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_stop", input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { forwardAppControlProxyTool } from "../../../../tools/app-control/skill-proxy-bridge.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return forwardAppControlProxyTool("app_control_type", input, context);
|
|
12
|
+
}
|
|
@@ -6,6 +6,12 @@ metadata:
|
|
|
6
6
|
emoji: "🖥️"
|
|
7
7
|
vellum:
|
|
8
8
|
display-name: "Computer Use"
|
|
9
|
+
activation-hints:
|
|
10
|
+
- "User asks the assistant to click, type, drag, or interact with the macOS GUI directly"
|
|
11
|
+
- "User wants control of a desktop app with no CLI or API alternative (games, design tools, visual workflows)"
|
|
12
|
+
- "User wants screenshots or visual inspection of what is currently on screen"
|
|
13
|
+
avoid-when:
|
|
14
|
+
- "Task can be done via a more specific skill (gmail, calendar, contacts, terminal-sessions) or a CLI / API call"
|
|
9
15
|
---
|
|
10
16
|
|
|
11
17
|
This skill provides the computer_use_* action tools for controlling
|