@vellumai/assistant 0.6.4 → 0.6.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/.prettierignore +5 -0
- package/AGENTS.md +9 -1
- package/ARCHITECTURE.md +43 -49
- package/Dockerfile +17 -3
- package/README.md +3 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +283 -0
- package/bun.lock +8 -3
- package/docs/architecture/integrations.md +33 -59
- package/docs/architecture/memory.md +25 -30
- package/docs/architecture/security.md +19 -18
- package/docs/browser-use-architecture-phase2.md +63 -20
- package/docs/error-handling.md +111 -0
- package/docs/plugins.md +761 -0
- package/docs/skills.md +10 -10
- package/docs/stt-provider-onboarding.md +2 -1
- package/examples/plugins/echo/README.md +132 -0
- package/examples/plugins/echo/package.json +17 -0
- package/examples/plugins/echo/register.ts +187 -0
- package/knip.json +9 -2
- package/node_modules/@vellumai/ces-contracts/package.json +2 -1
- package/node_modules/@vellumai/ces-contracts/src/__tests__/trust-rules.test.ts +471 -0
- package/node_modules/@vellumai/ces-contracts/src/trust-rules.ts +398 -4
- package/node_modules/@vellumai/credential-storage/bun.lock +2 -2
- package/node_modules/@vellumai/credential-storage/package.json +2 -2
- package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +20 -2
- package/node_modules/@vellumai/egress-proxy/bun.lock +2 -2
- package/node_modules/@vellumai/egress-proxy/package.json +2 -2
- package/node_modules/@vellumai/egress-proxy/src/types.ts +19 -0
- package/openapi.yaml +334 -78
- package/package.json +6 -3
- package/scripts/generate-openapi.ts +50 -11
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +318 -0
- package/src/__tests__/agent-loop-sentry-hygiene.test.ts +137 -0
- package/src/__tests__/agent-loop.test.ts +112 -1
- package/src/__tests__/anthropic-error-formatting.test.ts +98 -0
- package/src/__tests__/anthropic-provider.test.ts +171 -2
- package/src/__tests__/app-compiler.test.ts +57 -0
- package/src/__tests__/approval-cascade.test.ts +36 -10
- package/src/__tests__/approval-routes-http.test.ts +134 -10
- package/src/__tests__/assistant-attachments.test.ts +44 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -0
- package/src/__tests__/auto-analysis-end-to-end.test.ts +1 -0
- package/src/__tests__/avatar-generator.test.ts +4 -2
- package/src/__tests__/browser-fill-credential.test.ts +1 -1
- package/src/__tests__/browser-identifier-parity-guard.test.ts +53 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +23 -33
- package/src/__tests__/browser-skill-endstate.test.ts +51 -182
- package/src/__tests__/btw-routes.test.ts +47 -1
- package/src/__tests__/bundled-asset.test.ts +6 -6
- package/src/__tests__/call-controller.test.ts +1 -2
- package/src/__tests__/call-site-routing-provider.test.ts +214 -0
- package/src/__tests__/catalog-cache.test.ts +96 -4
- package/src/__tests__/channel-approval-routes.test.ts +4 -4
- package/src/__tests__/channel-reply-delivery.test.ts +300 -2
- package/src/__tests__/checker.test.ts +870 -655
- package/src/__tests__/circuit-breaker-pipeline.test.ts +406 -0
- package/src/__tests__/cli-command-risk-guard.test.ts +30 -33
- package/src/__tests__/compaction-events.test.ts +501 -0
- package/src/__tests__/compaction-pipeline.test.ts +210 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +181 -0
- package/src/__tests__/compaction-timeout-recovery.test.ts +262 -0
- package/src/__tests__/compaction.benchmark.test.ts +1 -1
- package/src/__tests__/config-analysis.test.ts +11 -28
- package/src/__tests__/config-loader-backfill.test.ts +174 -0
- package/src/__tests__/config-loader-corrupt.test.ts +183 -0
- package/src/__tests__/config-loader-quarantine-bulletin.test.ts +202 -0
- package/src/__tests__/config-model-image-provider.test.ts +110 -0
- package/src/__tests__/config-schema-cmd.test.ts +11 -5
- package/src/__tests__/config-schema.test.ts +440 -114
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -4
- package/src/__tests__/config-watcher.test.ts +2 -2
- package/src/__tests__/contact-store-user-file.test.ts +72 -73
- package/src/__tests__/contacts-tools.test.ts +26 -0
- package/src/__tests__/contacts-write.test.ts +4 -4
- package/src/__tests__/context-overflow-policy.test.ts +7 -7
- package/src/__tests__/context-token-estimator.test.ts +191 -1
- package/src/__tests__/context-window-manager.test.ts +883 -4
- package/src/__tests__/conversation-abort-tool-results.test.ts +32 -15
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +86 -46
- package/src/__tests__/conversation-agent-loop.test.ts +435 -216
- package/src/__tests__/conversation-attachments.test.ts +1 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +36 -10
- package/src/__tests__/conversation-error.test.ts +37 -6
- package/src/__tests__/conversation-history-web-search.test.ts +7 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +34 -12
- package/src/__tests__/conversation-lifecycle.test.ts +336 -0
- package/src/__tests__/conversation-load-history-repair.test.ts +27 -10
- package/src/__tests__/conversation-pairing.test.ts +174 -10
- package/src/__tests__/conversation-pre-run-repair.test.ts +32 -15
- package/src/__tests__/conversation-process-callsite.test.ts +309 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +44 -21
- package/src/__tests__/conversation-queue.test.ts +68 -38
- package/src/__tests__/conversation-routes-disk-view.test.ts +36 -7
- package/src/__tests__/conversation-routes-slash-commands.test.ts +31 -3
- package/src/__tests__/conversation-runtime-assembly.test.ts +2877 -152
- package/src/__tests__/conversation-runtime-workspace.test.ts +35 -50
- package/src/__tests__/conversation-seed-composer.test.ts +2 -2
- package/src/__tests__/conversation-skill-tools.test.ts +12 -146
- package/src/__tests__/conversation-slash-queue.test.ts +39 -19
- package/src/__tests__/conversation-slash-unknown.test.ts +53 -16
- package/src/__tests__/conversation-speed-override.test.ts +36 -12
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +1035 -0
- package/src/__tests__/conversation-surfaces-standalone.test.ts +630 -0
- package/src/__tests__/conversation-title-service.test.ts +118 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +41 -2
- package/src/__tests__/conversation-tool-setup-batch-authorized.test.ts +1 -1
- package/src/__tests__/conversation-unread-route.test.ts +2 -2
- package/src/__tests__/conversation-usage.test.ts +4 -2
- package/src/__tests__/conversation-workspace-cache-state.test.ts +33 -9
- package/src/__tests__/conversation-workspace-injection.test.ts +46 -15
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +46 -15
- package/src/__tests__/credential-broker-browser-fill.test.ts +110 -0
- package/src/__tests__/credential-health-service.test.ts +78 -9
- package/src/__tests__/credential-security-invariants.test.ts +5 -2
- package/src/__tests__/credential-storage-oauth-compat.test.ts +18 -0
- package/src/__tests__/credential-storage-static-compat.test.ts +28 -0
- package/src/__tests__/credential-vault-unit.test.ts +135 -19
- package/src/__tests__/credentials-cli.test.ts +1 -9
- package/src/__tests__/cross-provider-web-search.test.ts +84 -0
- package/src/__tests__/daemon-server-persist-and-process-callsite.test.ts +92 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +1 -0
- package/src/__tests__/delete-propagation.test.ts +437 -0
- package/src/__tests__/dm-backfill.test.ts +417 -0
- package/src/__tests__/dm-persistence.test.ts +227 -0
- package/src/__tests__/edit-propagation.test.ts +280 -0
- package/src/__tests__/empty-response-pipeline.test.ts +305 -0
- package/src/__tests__/ephemeral-permissions.test.ts +93 -3
- package/src/__tests__/estimator-calibration-integration.test.ts +208 -0
- package/src/__tests__/estimator-calibration.test.ts +213 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +29 -10
- package/src/__tests__/file-write-tool.test.ts +151 -1
- package/src/__tests__/filing-service.test.ts +255 -0
- package/src/__tests__/first-greeting.test.ts +247 -5
- package/src/__tests__/gemini-provider.test.ts +0 -3
- package/src/__tests__/guardian-grant-minting.test.ts +8 -0
- package/src/__tests__/headless-browser-interactions.test.ts +1 -1
- package/src/__tests__/headless-browser-mode.test.ts +57 -0
- package/src/__tests__/heartbeat-service.test.ts +96 -15
- package/src/__tests__/history-repair-pipeline.test.ts +399 -0
- package/src/__tests__/host-browser-e2e-cloud.test.ts +307 -0
- package/src/__tests__/host-browser-e2e-self-hosted.test.ts +3 -3
- package/src/__tests__/host-proxy-interface.test.ts +36 -2
- package/src/__tests__/host-shell-tool.test.ts +124 -18
- package/src/__tests__/http-user-message-parity.test.ts +29 -1
- package/src/__tests__/image-credentials.test.ts +137 -0
- package/src/__tests__/image-service-dispatcher.test.ts +186 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +340 -0
- package/src/__tests__/injector-chain.test.ts +526 -0
- package/src/__tests__/intent-routing.test.ts +1 -66
- package/src/__tests__/llm-call-pipeline.test.ts +285 -0
- package/src/__tests__/llm-catalog-parity.test.ts +174 -0
- package/src/__tests__/llm-context-normalization.test.ts +121 -0
- package/src/__tests__/llm-resolver.test.ts +214 -0
- package/src/__tests__/llm-schema.test.ts +223 -0
- package/src/__tests__/managed-proxy-context.test.ts +6 -2
- package/src/__tests__/media-generate-image.test.ts +119 -13
- package/src/__tests__/memory-retrieval-pipeline.test.ts +401 -0
- package/src/__tests__/memory-upsert-concurrency.test.ts +1 -0
- package/src/__tests__/messaging-skill-split.test.ts +3 -34
- package/src/__tests__/migration-import-from-url.test.ts +621 -0
- package/src/__tests__/model-intents.test.ts +11 -83
- package/src/__tests__/notification-broadcaster.test.ts +3 -3
- package/src/__tests__/notification-decision-fallback.test.ts +0 -10
- package/src/__tests__/notification-decision-identity.test.ts +0 -9
- package/src/__tests__/notification-decision-recipient-context.test.ts +0 -9
- package/src/__tests__/notification-decision-strategy.test.ts +0 -11
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +108 -0
- package/src/__tests__/oauth-apps-routes.test.ts +1 -1
- package/src/__tests__/oauth-cli.test.ts +14 -12
- package/src/__tests__/oauth-connect-orchestrator.test.ts +4 -13
- package/src/__tests__/oauth-provider-serializer.test.ts +6 -4
- package/src/__tests__/oauth-provider-visibility.test.ts +3 -5
- package/src/__tests__/oauth-providers-routes.test.ts +3 -2
- package/src/__tests__/oauth-store.test.ts +46 -78
- package/src/__tests__/oauth2-gateway-transport.test.ts +8 -3
- package/src/__tests__/oauth2-refresh-retry.test.ts +279 -0
- package/src/__tests__/onboarding-template-contract.test.ts +16 -64
- package/src/__tests__/openai-image-service.test.ts +368 -0
- package/src/__tests__/openai-provider.test.ts +7 -0
- package/src/__tests__/openai-responses-provider.test.ts +396 -0
- package/src/__tests__/openrouter-provider-only.test.ts +135 -0
- package/src/__tests__/outbound-slack-persistence.test.ts +293 -0
- package/src/__tests__/overflow-reduce-pipeline.test.ts +676 -0
- package/src/__tests__/permission-checker-host-gate.test.ts +1 -25
- package/src/__tests__/permission-mode.test.ts +16 -0
- package/src/__tests__/permission-types.test.ts +0 -1
- package/src/__tests__/persist-onboarding-artifacts.test.ts +266 -0
- package/src/__tests__/persistence-pipeline.test.ts +377 -0
- package/src/__tests__/persona-resolver.test.ts +13 -13
- package/src/__tests__/pipeline-runner.test.ts +565 -0
- package/src/__tests__/pkb-autoinject.test.ts +37 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +1 -1
- package/src/__tests__/platform.test.ts +5 -2
- package/src/__tests__/plugin-bootstrap.test.ts +483 -0
- package/src/__tests__/plugin-registry.test.ts +273 -0
- package/src/__tests__/plugin-route-contribution.test.ts +288 -0
- package/src/__tests__/plugin-skill-contribution.test.ts +367 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +286 -0
- package/src/__tests__/plugin-types.test.ts +320 -0
- package/src/__tests__/pricing.test.ts +93 -14
- package/src/__tests__/profiler-routes.test.ts +1 -1
- package/src/__tests__/provider-commit-message-generator.test.ts +14 -84
- package/src/__tests__/provider-env-vars-scope.test.ts +52 -0
- package/src/__tests__/provider-error-scenarios.test.ts +135 -6
- package/src/__tests__/provider-managed-proxy-integration.test.ts +42 -11
- package/src/__tests__/provider-registry-ollama.test.ts +1 -2
- package/src/__tests__/proxy-approval-callback.test.ts +69 -9
- package/src/__tests__/reaction-persistence.test.ts +561 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +0 -2
- package/src/__tests__/relay-server.test.ts +1 -1
- package/src/__tests__/require-fresh-approval.test.ts +1 -1
- package/src/__tests__/retry-openrouter-only-normalization.test.ts +136 -0
- package/src/__tests__/retry-thinking-tool-choice.test.ts +226 -0
- package/src/__tests__/risk-classifier-parity.test.ts +230 -0
- package/src/__tests__/sanitize-config-for-transfer.test.ts +78 -1
- package/src/__tests__/schedule-routes.test.ts +131 -1
- package/src/__tests__/scheduler-recurrence.test.ts +14 -70
- package/src/__tests__/scheduler-reuse-conversation.test.ts +10 -50
- package/src/__tests__/secret-detection-handler.test.ts +0 -10
- package/src/__tests__/secret-ingress-http.test.ts +28 -0
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +125 -0
- package/src/__tests__/secret-routes-managed-proxy.test.ts +2 -3
- package/src/__tests__/secret-scanner-executor.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +29 -1
- package/src/__tests__/server-history-render.test.ts +31 -0
- package/src/__tests__/shell-identity.test.ts +0 -134
- package/src/__tests__/shell-parser-property.test.ts +13 -13
- package/src/__tests__/skill-cache-store.test.ts +182 -0
- package/src/__tests__/skills.test.ts +19 -33
- package/src/__tests__/slack-app-setup-skill-regression.test.ts +3 -1
- package/src/__tests__/slack-skill.test.ts +3 -8
- package/src/__tests__/starter-bundle.test.ts +35 -0
- package/src/__tests__/subagent-call-site-routing.test.ts +280 -0
- package/src/__tests__/suggestion-routes.test.ts +259 -3
- package/src/__tests__/system-prompt.test.ts +22 -35
- package/src/__tests__/task-memory-cleanup.test.ts +1 -0
- package/src/__tests__/task-runner.test.ts +3 -1
- package/src/__tests__/task-scheduler.test.ts +3 -15
- package/src/__tests__/tcc-sandbox-deny.test.ts +198 -0
- package/src/__tests__/terminal-tools.test.ts +8 -0
- package/src/__tests__/test-preload.ts +11 -0
- package/src/__tests__/test-support/browser-skill-harness.ts +2 -52
- package/src/__tests__/thread-backfill.test.ts +941 -0
- package/src/__tests__/title-generate-pipeline.test.ts +224 -0
- package/src/__tests__/token-estimate-pipeline.test.ts +431 -0
- package/src/__tests__/tool-error-pipeline.test.ts +244 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +431 -0
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -8
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -2
- package/src/__tests__/tool-executor-shell-integration.test.ts +7 -10
- package/src/__tests__/tool-executor.test.ts +201 -94
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +356 -0
- package/src/__tests__/tool-result-truncation.test.ts +0 -110
- package/src/__tests__/trust-store.test.ts +442 -109
- package/src/__tests__/update-bulletin-job.test.ts +389 -0
- package/src/__tests__/usage-cache-backfill-migration.test.ts +3 -1
- package/src/__tests__/user-plugin-loader.test.ts +191 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +1 -22
- package/src/__tests__/voice-session-bridge.test.ts +39 -0
- package/src/__tests__/volume-security-guard.test.ts +3 -2
- package/src/__tests__/web-search-history.test.ts +337 -0
- package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +343 -0
- package/src/__tests__/workspace-migration-043-release-notes-latex-rendering.test.ts +202 -0
- package/src/__tests__/workspace-migration-045-release-notes-meet-avatar.test.ts +210 -0
- package/src/__tests__/workspace-migration-046-seed-conversation-starters-callsite.test.ts +185 -0
- package/src/__tests__/workspace-migration-049-release-notes-default-sonnet.test.ts +100 -0
- package/src/__tests__/workspace-migration-050-seed-main-agent-opus-callsite.test.ts +171 -0
- package/src/__tests__/workspace-migration-051-seed-conversation-summarization-callsite.test.ts +252 -0
- package/src/__tests__/workspace-migration-drop-user-md.test.ts +11 -11
- package/src/__tests__/workspace-migration-remove-hooks.test.ts +99 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +841 -0
- package/src/__tests__/workspace-policy.test.ts +22 -16
- package/src/acp/client-handler.ts +1 -2
- package/src/agent/loop.ts +545 -115
- package/src/approvals/__tests__/guardian-feed-event.test.ts +304 -0
- package/src/approvals/guardian-request-resolvers.ts +80 -0
- package/src/avatar/resvg-lazy.test.ts +136 -0
- package/src/avatar/resvg-lazy.ts +82 -9
- package/src/avatar/traits-png-sync.ts +21 -1
- package/src/backup/__tests__/backup-worker.test.ts +2 -13
- package/src/backup/backup-worker.ts +3 -15
- package/src/browser/__tests__/operations.test.ts +163 -0
- package/src/browser/identifiers.ts +51 -0
- package/src/browser/operations.ts +660 -0
- package/src/browser/types.ts +81 -0
- package/src/bundler/app-compiler.ts +84 -1
- package/src/calls/call-state.ts +2 -2
- package/src/calls/guardian-question-copy.ts +2 -2
- package/src/calls/telephony-stt-routing.ts +1 -1
- package/src/calls/voice-session-bridge.ts +1 -0
- package/src/channels/__tests__/types.test.ts +3 -3
- package/src/channels/types.ts +6 -4
- package/src/cli/AGENTS.md +1 -1
- package/src/cli/__tests__/notifications.test.ts +87 -211
- package/src/cli/commands/__tests__/attachment.test.ts +438 -0
- package/src/cli/commands/__tests__/backup.test.ts +1 -1
- package/src/cli/commands/__tests__/browser.test.ts +554 -0
- package/src/cli/commands/__tests__/cache.test.ts +623 -0
- package/src/cli/commands/__tests__/email-list.test.ts +6 -0
- package/src/cli/commands/__tests__/email-send.test.ts +93 -1
- package/src/cli/commands/__tests__/image-generation.test.ts +886 -0
- package/src/cli/commands/__tests__/inference-send.test.ts +463 -0
- package/src/cli/commands/__tests__/stt-transcribe.test.ts +454 -0
- package/src/cli/commands/__tests__/task.test.ts +913 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +606 -0
- package/src/cli/commands/__tests__/ui-confirm.test.ts +650 -0
- package/src/cli/commands/__tests__/ui.test.ts +1215 -0
- package/src/cli/commands/__tests__/watchers.test.ts +716 -0
- package/src/cli/commands/attachment.ts +182 -0
- package/src/cli/commands/backup.ts +2 -2
- package/src/cli/commands/browser.ts +350 -0
- package/src/cli/commands/cache.ts +341 -0
- package/src/cli/commands/clients.ts +138 -0
- package/src/cli/commands/completions.ts +2 -12
- package/src/cli/commands/config.ts +6 -6
- package/src/cli/commands/conversations-import.ts +347 -0
- package/src/cli/commands/conversations.ts +69 -8
- package/src/cli/commands/email.ts +234 -194
- package/src/cli/commands/image-generation.ts +299 -0
- package/src/cli/commands/inference.ts +200 -0
- package/src/cli/commands/memory.ts +127 -17
- package/src/cli/commands/notifications.ts +68 -103
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +1 -1
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +1 -1
- package/src/cli/commands/oauth/connect.ts +2 -2
- package/src/cli/commands/oauth/providers.ts +176 -8
- package/src/cli/commands/oauth/status.ts +46 -36
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +0 -1
- package/src/cli/commands/skills.ts +3 -4
- package/src/cli/commands/stt.ts +339 -0
- package/src/cli/commands/task.ts +795 -0
- package/src/cli/commands/trust.ts +50 -19
- package/src/cli/commands/tts.ts +273 -0
- package/src/cli/commands/ui.ts +670 -0
- package/src/cli/commands/watchers.ts +509 -0
- package/src/cli/lib/daemon-credential-client.ts +0 -19
- package/src/cli/program.ts +39 -24
- package/src/cli.ts +0 -37
- package/src/config/__tests__/backup-schema.test.ts +7 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +10 -10
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +66 -87
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +28 -51
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +22 -40
- package/src/config/bundled-skills/image-studio/SKILL.md +2 -1
- package/src/config/bundled-skills/image-studio/TOOLS.json +2 -1
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +23 -39
- package/src/config/bundled-skills/media-processing/services/reduce.ts +1 -1
- package/src/config/bundled-skills/messaging/SKILL.md +5 -5
- package/src/config/bundled-skills/messaging/TOOLS.json +4 -0
- package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +207 -0
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +20 -1
- package/src/config/bundled-skills/messaging/tools/messaging-read.ts +15 -1
- package/src/config/bundled-skills/messaging/tools/messaging-search.ts +21 -1
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +69 -12
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +9 -8
- package/src/config/bundled-skills/schedule/SKILL.md +8 -3
- package/src/config/bundled-skills/schedule/TOOLS.json +15 -7
- package/src/config/bundled-skills/schedule/references/SCRIPT_MODE_PATTERNS.md +59 -0
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-tool-registry.ts +0 -190
- package/src/config/env.ts +7 -2
- package/src/config/feature-flag-registry.json +42 -10
- package/src/config/llm-resolver.ts +128 -0
- package/src/config/loader.ts +194 -10
- package/src/config/raw-config-utils.ts +30 -2
- package/src/config/sanitize-for-transfer.ts +35 -0
- package/src/config/schema.ts +49 -41
- package/src/config/schemas/analysis.ts +3 -22
- package/src/config/schemas/backup.ts +1 -1
- package/src/config/schemas/calls.ts +0 -4
- package/src/config/schemas/conversations.ts +16 -0
- package/src/config/schemas/filing.ts +2 -7
- package/src/config/schemas/heartbeat.ts +0 -5
- package/src/config/schemas/inference.ts +3 -23
- package/src/config/schemas/llm.ts +317 -0
- package/src/config/schemas/memory-processing.ts +1 -9
- package/src/config/schemas/notifications.ts +4 -11
- package/src/config/schemas/platform.ts +3 -9
- package/src/config/schemas/security.ts +33 -0
- package/src/config/schemas/services.ts +9 -4
- package/src/config/schemas/stt.ts +1 -0
- package/src/config/schemas/tts.ts +64 -0
- package/src/config/schemas/updates.ts +1 -1
- package/src/config/schemas/workspace-git.ts +3 -40
- package/src/config/skill-state.ts +6 -2
- package/src/config/skills.ts +96 -7
- package/src/context/__tests__/compact-prompt.test.ts +63 -0
- package/src/context/__tests__/microcompact.test.ts +805 -0
- package/src/context/estimator-calibration.ts +136 -0
- package/src/context/microcompact.ts +443 -0
- package/src/context/prompts/compact.md +26 -0
- package/src/context/token-estimator.ts +61 -3
- package/src/context/tool-result-truncation.ts +3 -63
- package/src/context/window-manager.ts +417 -39
- package/src/credential-execution/approval-bridge.ts +0 -1
- package/src/credential-execution/executable-discovery.ts +19 -8
- package/src/credential-execution/process-manager.test.ts +109 -0
- package/src/credential-execution/process-manager.ts +65 -2
- package/src/credential-health/credential-health-service.ts +19 -6
- package/src/daemon/__tests__/conversation-feed-event.test.ts +317 -0
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +4 -12
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +14 -15
- package/src/daemon/approval-generators.ts +29 -4
- package/src/daemon/assistant-attachments.ts +24 -13
- package/src/daemon/classifier.ts +2 -2
- package/src/daemon/config-watcher.ts +0 -3
- package/src/daemon/context-overflow-policy.ts +4 -13
- package/src/daemon/context-overflow-reducer.ts +4 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +162 -34
- package/src/daemon/conversation-agent-loop.ts +1282 -599
- package/src/daemon/conversation-attachments.ts +2 -6
- package/src/daemon/conversation-error.ts +36 -1
- package/src/daemon/conversation-history.ts +10 -19
- package/src/daemon/conversation-lifecycle.ts +59 -17
- package/src/daemon/conversation-messaging.ts +73 -4
- package/src/daemon/conversation-notifiers.ts +2 -110
- package/src/daemon/conversation-process.ts +24 -11
- package/src/daemon/conversation-queue-manager.ts +3 -0
- package/src/daemon/conversation-runtime-assembly.ts +1063 -211
- package/src/daemon/conversation-slash.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +389 -1
- package/src/daemon/conversation-tool-setup.ts +51 -9
- package/src/daemon/conversation-usage.ts +1 -1
- package/src/daemon/conversation.ts +197 -64
- package/src/daemon/external-plugins-bootstrap.ts +478 -0
- package/src/daemon/external-skills-bootstrap.ts +41 -0
- package/src/daemon/first-greeting.ts +191 -14
- package/src/daemon/guardian-action-generators.ts +34 -14
- package/src/daemon/handlers/config-model.test.ts +86 -0
- package/src/daemon/handlers/config-model.ts +65 -12
- package/src/daemon/handlers/conversations.ts +9 -2
- package/src/daemon/handlers/shared.ts +39 -11
- package/src/daemon/handlers/skills.ts +7 -3
- package/src/daemon/handlers/slack-channel-oauth-install.ts +197 -0
- package/src/daemon/lifecycle.ts +109 -82
- package/src/daemon/message-types/computer-use.ts +2 -34
- package/src/daemon/message-types/conversations.ts +63 -0
- package/src/daemon/message-types/messages.ts +21 -1
- package/src/daemon/message-types/trust.ts +0 -2
- package/src/daemon/parse-actual-tokens-from-error.test.ts +57 -1
- package/src/daemon/parse-actual-tokens-from-error.ts +66 -0
- package/src/daemon/pkb-context-tracker.test.ts +169 -0
- package/src/daemon/pkb-context-tracker.ts +125 -0
- package/src/daemon/pkb-reminder-builder.test.ts +70 -0
- package/src/daemon/pkb-reminder-builder.ts +31 -0
- package/src/daemon/providers-setup.ts +6 -0
- package/src/daemon/server.ts +122 -12
- package/src/daemon/shutdown-handlers.ts +2 -12
- package/src/daemon/tool-side-effects.ts +14 -65
- package/src/daemon/web-search-history.ts +126 -0
- package/src/events/domain-events.ts +0 -1
- package/src/filing/filing-service.ts +9 -10
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +160 -0
- package/src/heartbeat/heartbeat-service.ts +99 -28
- package/src/home/__tests__/feed-population-integration.test.ts +312 -0
- package/src/home/__tests__/feed-scheduler.test.ts +39 -11
- package/src/home/__tests__/rollup-producer.test.ts +44 -0
- package/src/home/assistant-feed-authoring.ts +4 -0
- package/src/home/emit-feed-event.ts +11 -0
- package/src/home/feed-scheduler.ts +20 -4
- package/src/home/feed-types.ts +97 -4
- package/src/home/relationship-state-writer.ts +2 -2
- package/src/home/rewrite-command-preview.ts +66 -0
- package/src/home/rollup-producer.ts +34 -5
- package/src/home/suggested-prompts.ts +101 -0
- package/src/ipc/__tests__/attachment-ipc.test.ts +213 -0
- package/src/ipc/__tests__/browser-ipc.test.ts +339 -0
- package/src/ipc/__tests__/cache-ipc.test.ts +266 -0
- package/src/ipc/__tests__/socket-path.test.ts +34 -0
- package/src/ipc/__tests__/task-ipc.test.ts +577 -0
- package/src/ipc/__tests__/ui-request-route.test.ts +495 -0
- package/src/ipc/__tests__/watcher-ipc.test.ts +295 -0
- package/src/ipc/cli-client.ts +2 -1
- package/src/ipc/cli-server.ts +26 -8
- package/src/ipc/gateway-client.ts +6 -3
- package/src/ipc/routes/attachment.ts +114 -0
- package/src/ipc/routes/browser-context.ts +63 -0
- package/src/ipc/routes/browser.ts +97 -0
- package/src/ipc/routes/cache.ts +96 -0
- package/src/ipc/routes/get-contact.ts +16 -0
- package/src/ipc/routes/index.ts +31 -1
- package/src/ipc/routes/list-clients.ts +31 -0
- package/src/ipc/routes/merge-contacts.ts +17 -0
- package/src/ipc/routes/notification.ts +133 -0
- package/src/ipc/routes/rename-conversation.ts +59 -0
- package/src/ipc/routes/search-contacts.ts +19 -0
- package/src/ipc/routes/task-queue.ts +226 -0
- package/src/ipc/routes/task.ts +173 -0
- package/src/ipc/routes/ui-request.ts +50 -0
- package/src/ipc/routes/upsert-contact.ts +25 -0
- package/src/ipc/routes/watcher.ts +203 -0
- package/src/ipc/socket-path.ts +76 -0
- package/src/media/app-icon-generator.ts +23 -46
- package/src/media/avatar-router.ts +26 -41
- package/src/media/gemini-image-service.ts +8 -41
- package/src/media/image-credentials.ts +73 -0
- package/src/media/image-service.ts +85 -0
- package/src/media/openai-image-service.ts +131 -0
- package/src/media/types.ts +46 -0
- package/src/memory/__tests__/conversation-analyze-job.test.ts +9 -8
- package/src/memory/__tests__/conversation-group-migration.test.ts +99 -0
- package/src/memory/admin.ts +18 -0
- package/src/memory/conversation-analyze-job.ts +14 -13
- package/src/memory/conversation-attention-store.ts +13 -6
- package/src/memory/conversation-crud.ts +133 -3
- package/src/memory/conversation-group-migration.ts +38 -6
- package/src/memory/conversation-queries.ts +57 -4
- package/src/memory/conversation-title-service.ts +32 -4
- package/src/memory/db-init.ts +10 -0
- package/src/memory/embedding-backend.ts +1 -1
- package/src/memory/embedding-gemini.test.ts +41 -2
- package/src/memory/embedding-gemini.ts +6 -1
- package/src/memory/graph/bootstrap.test.ts +282 -0
- package/src/memory/graph/bootstrap.ts +8 -5
- package/src/memory/graph/compaction.ts +299 -0
- package/src/memory/graph/consolidation.ts +4 -4
- package/src/memory/graph/conversation-graph-memory.ts +89 -29
- package/src/memory/graph/extraction.test.ts +272 -2
- package/src/memory/graph/extraction.ts +183 -53
- package/src/memory/graph/graph-search.test.ts +93 -0
- package/src/memory/graph/graph-search.ts +4 -1
- package/src/memory/graph/inspect.ts +2 -2
- package/src/memory/graph/narrative.ts +2 -2
- package/src/memory/graph/pattern-scan.ts +2 -2
- package/src/memory/graph/retriever.test.ts +459 -0
- package/src/memory/graph/retriever.ts +237 -48
- package/src/memory/graph/store.ts +41 -0
- package/src/memory/graph/tool-handlers.ts +27 -0
- package/src/memory/graph/tools.ts +6 -1
- package/src/memory/indexer.ts +5 -5
- package/src/memory/job-handlers/conversation-starters.ts +23 -20
- package/src/memory/job-handlers/summarization.ts +2 -2
- package/src/memory/job-utils.ts +7 -1
- package/src/memory/jobs/embed-pkb-file.test.ts +168 -0
- package/src/memory/jobs/embed-pkb-file.ts +54 -0
- package/src/memory/jobs-store.ts +44 -3
- package/src/memory/jobs-worker.ts +4 -0
- package/src/memory/migrations/041-approval-prompt-ts-tracker.ts +26 -0
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +1 -1
- package/src/memory/migrations/149-oauth-tables.ts +1 -0
- package/src/memory/migrations/220-normalize-user-file-by-principal.ts +2 -2
- package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +82 -0
- package/src/memory/migrations/223-schedule-script-column.ts +11 -0
- package/src/memory/migrations/224-oauth-providers-managed-service-is-paid.ts +24 -0
- package/src/memory/migrations/225-oauth-providers-available-scopes.ts +13 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/pkb/pkb-index.test.ts +369 -0
- package/src/memory/pkb/pkb-index.ts +255 -0
- package/src/memory/pkb/pkb-reconcile.test.ts +252 -0
- package/src/memory/pkb/pkb-reconcile.ts +148 -0
- package/src/memory/pkb/pkb-search.test.ts +499 -0
- package/src/memory/pkb/pkb-search.ts +159 -0
- package/src/memory/pkb/types.ts +53 -0
- package/src/memory/qdrant-client.test.ts +60 -0
- package/src/memory/qdrant-client.ts +147 -1
- package/src/memory/schema/infrastructure.ts +1 -0
- package/src/memory/schema/oauth.ts +4 -1
- package/src/memory/slack-thread-store.ts +37 -0
- package/src/messaging/providers/gmail/adapter.ts +6 -16
- package/src/messaging/providers/gmail/client.ts +22 -0
- package/src/messaging/providers/gmail/types.ts +7 -0
- package/src/messaging/providers/slack/adapter.ts +14 -2
- package/src/messaging/providers/slack/backfill.test.ts +257 -0
- package/src/messaging/providers/slack/backfill.ts +101 -0
- package/src/messaging/providers/slack/message-metadata.test.ts +316 -0
- package/src/messaging/providers/slack/message-metadata.ts +123 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +1421 -0
- package/src/messaging/providers/slack/render-transcript.ts +501 -0
- package/src/messaging/style-analyzer.ts +5 -2
- package/src/notifications/README.md +9 -5
- package/src/notifications/conversation-pairing.ts +78 -19
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/decision-engine.ts +3 -9
- package/src/notifications/emit-signal.ts +1 -1
- package/src/notifications/preference-extractor.ts +2 -6
- package/src/notifications/signal.ts +1 -2
- package/src/oauth/AGENTS.md +1 -1
- package/src/oauth/__tests__/identity-verifier.test.ts +2 -1
- package/src/oauth/connect-orchestrator.ts +8 -34
- package/src/oauth/connect-types.ts +6 -10
- package/src/oauth/manual-token-connection.ts +23 -0
- package/src/oauth/oauth-store.ts +31 -14
- package/src/oauth/platform-connection.test.ts +47 -0
- package/src/oauth/platform-connection.ts +15 -5
- package/src/oauth/provider-serializer.ts +6 -1
- package/src/oauth/seed-providers.ts +56 -106
- package/src/outbound-proxy/http-forwarder.ts +9 -0
- package/src/permissions/approval-policy.test.ts +1223 -0
- package/src/permissions/approval-policy.ts +309 -0
- package/src/permissions/arg-parser.test.ts +161 -0
- package/src/permissions/arg-parser.ts +141 -0
- package/src/permissions/bash-risk-classifier.test.ts +1620 -0
- package/src/permissions/bash-risk-classifier.ts +950 -0
- package/src/permissions/checker.ts +348 -711
- package/src/permissions/command-registry.test.ts +774 -0
- package/src/permissions/command-registry.ts +1005 -0
- package/src/permissions/defaults.ts +28 -79
- package/src/permissions/file-risk-classifier.test.ts +535 -0
- package/src/permissions/file-risk-classifier.ts +274 -0
- package/src/permissions/gateway-threshold-reader.ts +196 -0
- package/src/permissions/prompter.ts +4 -0
- package/src/permissions/risk-types.ts +262 -0
- package/src/permissions/schedule-risk-classifier.test.ts +129 -0
- package/src/permissions/schedule-risk-classifier.ts +85 -0
- package/src/permissions/secret-prompter.ts +53 -2
- package/src/permissions/shell-identity.ts +2 -42
- package/src/permissions/skill-risk-classifier.test.ts +311 -0
- package/src/permissions/skill-risk-classifier.ts +214 -0
- package/src/permissions/trust-client.ts +52 -25
- package/src/permissions/trust-store-interface.ts +1 -6
- package/src/permissions/trust-store.ts +161 -62
- package/src/permissions/types.ts +25 -14
- package/src/permissions/web-risk-classifier.test.ts +170 -0
- package/src/permissions/web-risk-classifier.ts +89 -0
- package/src/permissions/workspace-policy.ts +9 -19
- package/src/platform/client.ts +19 -1
- package/src/plugins/defaults/circuit-breaker.ts +146 -0
- package/src/plugins/defaults/compaction.ts +145 -0
- package/src/plugins/defaults/empty-response.ts +126 -0
- package/src/plugins/defaults/history-repair.ts +85 -0
- package/src/plugins/defaults/index.ts +116 -0
- package/src/plugins/defaults/injectors.ts +491 -0
- package/src/plugins/defaults/llm-call.ts +82 -0
- package/src/plugins/defaults/memory-retrieval.ts +226 -0
- package/src/plugins/defaults/overflow-reduce.ts +181 -0
- package/src/plugins/defaults/persistence.ts +129 -0
- package/src/plugins/defaults/title-generate.ts +95 -0
- package/src/plugins/defaults/token-estimate.ts +104 -0
- package/src/plugins/defaults/tool-error.ts +126 -0
- package/src/plugins/defaults/tool-execute.ts +89 -0
- package/src/plugins/defaults/tool-result-truncate.ts +88 -0
- package/src/plugins/pipeline.ts +316 -0
- package/src/plugins/plugin-skill-contributions.ts +292 -0
- package/src/plugins/registry.ts +241 -0
- package/src/plugins/types.ts +1134 -0
- package/src/plugins/user-loader.ts +177 -0
- package/src/prompts/persona-resolver.ts +3 -3
- package/src/prompts/system-prompt.ts +19 -20
- package/src/prompts/templates/BOOTSTRAP.md +27 -77
- package/src/prompts/templates/SOUL.md +2 -2
- package/src/prompts/update-bulletin-job.ts +190 -0
- package/src/providers/__tests__/context-overflow-error.test.ts +328 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +102 -0
- package/src/providers/__tests__/retry-callsite.test.ts +424 -0
- package/src/providers/anthropic/client.ts +183 -14
- package/src/providers/call-site-routing.ts +71 -0
- package/src/providers/gemini/client.ts +65 -2
- package/src/providers/managed-proxy/constants.ts +2 -1
- package/src/providers/model-catalog.ts +524 -33
- package/src/providers/model-intents.ts +4 -4
- package/src/providers/openai/chat-completions-provider.ts +57 -1
- package/src/providers/openai/responses-provider.ts +86 -9
- package/src/providers/openrouter/client.ts +80 -9
- package/src/providers/provider-env-vars.ts +56 -0
- package/src/providers/provider-send-message.ts +22 -5
- package/src/providers/ratelimit.ts +4 -0
- package/src/providers/registry.ts +19 -8
- package/src/providers/retry.ts +174 -39
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +55 -0
- package/src/providers/speech-to-text/deepgram-realtime.test.ts +61 -0
- package/src/providers/speech-to-text/deepgram-realtime.ts +57 -0
- package/src/providers/speech-to-text/google-gemini-live-stream.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +17 -0
- package/src/providers/speech-to-text/resolve.ts +7 -0
- package/src/providers/speech-to-text/xai-realtime.test.ts +646 -0
- package/src/providers/speech-to-text/xai-realtime.ts +821 -0
- package/src/providers/speech-to-text/xai.test.ts +155 -0
- package/src/providers/speech-to-text/xai.ts +97 -0
- package/src/providers/types.ts +93 -3
- package/src/runtime/AGENTS.md +27 -18
- package/src/runtime/__tests__/agent-wake.test.ts +43 -2
- package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +3 -3
- package/src/runtime/__tests__/client-registry.test.ts +293 -0
- package/src/runtime/__tests__/interactive-ui.test.ts +673 -0
- package/src/runtime/agent-wake.ts +63 -22
- package/src/runtime/auth/route-policy.ts +4 -0
- package/src/runtime/btw-sidechain.ts +13 -3
- package/src/runtime/channel-reply-delivery.ts +106 -2
- package/src/runtime/client-registry.ts +261 -0
- package/src/runtime/decision-token.ts +116 -0
- package/src/runtime/gateway-client.ts +2 -2
- package/src/runtime/http-router.ts +32 -0
- package/src/runtime/http-server.ts +129 -9
- package/src/runtime/http-types.ts +23 -3
- package/src/runtime/interactive-ui.ts +362 -0
- package/src/runtime/invite-instruction-generator.ts +2 -2
- package/src/runtime/migrations/__tests__/gcs-signed-url.test.ts +176 -0
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +390 -0
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +221 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +1540 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +453 -0
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +222 -0
- package/src/runtime/migrations/gcs-signed-url.ts +162 -0
- package/src/runtime/migrations/vbundle-builder.ts +1 -22
- package/src/runtime/migrations/vbundle-importer.ts +154 -9
- package/src/runtime/migrations/vbundle-metadata-merge.ts +124 -0
- package/src/runtime/migrations/vbundle-streaming-importer.ts +2522 -0
- package/src/runtime/migrations/vbundle-streaming-validator.ts +244 -0
- package/src/runtime/migrations/vbundle-tar-stream.ts +217 -0
- package/src/runtime/migrations/vbundle-validator.ts +15 -6
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +111 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +114 -75
- package/src/runtime/routes/__tests__/migration-vellum-metadata-reconcile.test.ts +246 -0
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +78 -0
- package/src/runtime/routes/approval-routes.ts +29 -17
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +9 -0
- package/src/runtime/routes/avatar-routes.ts +20 -4
- package/src/runtime/routes/browser-extension-pair-routes.ts +27 -8
- package/src/runtime/routes/btw-routes.ts +1 -4
- package/src/runtime/routes/conversation-management-routes.ts +20 -2
- package/src/runtime/routes/conversation-routes.ts +351 -138
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/diagnostics-routes.ts +6 -4
- package/src/runtime/routes/events-routes.ts +16 -0
- package/src/runtime/routes/guardian-approval-interception.ts +33 -3
- package/src/runtime/routes/guardian-approval-prompt.ts +13 -3
- package/src/runtime/routes/home-feed-routes.ts +120 -2
- package/src/runtime/routes/inbound-message-handler.ts +987 -2
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +113 -2
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +61 -3
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +129 -6
- package/src/runtime/routes/integrations/slack/channel.ts +25 -3
- package/src/runtime/routes/llm-context-normalization.ts +23 -1
- package/src/runtime/routes/memory-item-routes.test.ts +1 -0
- package/src/runtime/routes/migration-routes.ts +720 -127
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +284 -0
- package/src/runtime/routes/playground/__tests__/guard.test.ts +80 -0
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +294 -0
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +271 -0
- package/src/runtime/routes/playground/__tests__/seed-conversation.test.ts +202 -0
- package/src/runtime/routes/playground/__tests__/seeded-conversations.test.ts +309 -0
- package/src/runtime/routes/playground/__tests__/state.test.ts +224 -0
- package/src/runtime/routes/playground/conversation-not-found.ts +29 -0
- package/src/runtime/routes/playground/deps.ts +56 -0
- package/src/runtime/routes/playground/force-compact.ts +73 -0
- package/src/runtime/routes/playground/guard.ts +37 -0
- package/src/runtime/routes/playground/index.ts +28 -0
- package/src/runtime/routes/playground/inject-failures.ts +159 -0
- package/src/runtime/routes/playground/reset-circuit.ts +115 -0
- package/src/runtime/routes/playground/seed-conversation.ts +139 -0
- package/src/runtime/routes/playground/seeded-conversations.ts +78 -0
- package/src/runtime/routes/playground/state.ts +78 -0
- package/src/runtime/routes/schedule-routes.ts +89 -8
- package/src/runtime/routes/settings-routes.ts +4 -2
- package/src/runtime/routes/trust-rules-routes.ts +30 -14
- package/src/runtime/routes/work-items-routes.test.ts +1 -1
- package/src/runtime/routes/work-items-routes.ts +3 -2
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +25 -43
- package/src/runtime/services/analyze-conversation.ts +12 -16
- package/src/runtime/skill-route-registry.ts +97 -15
- package/src/schedule/run-script.ts +68 -0
- package/src/schedule/schedule-store.ts +7 -1
- package/src/schedule/scheduler.ts +56 -8
- package/src/security/__tests__/provider-key-env-fallback.test.ts +119 -0
- package/src/security/__tests__/untrusted-content.test.ts +109 -0
- package/src/security/oauth2.ts +98 -35
- package/src/security/secure-keys.ts +7 -8
- package/src/security/token-manager.ts +27 -13
- package/src/security/untrusted-content.ts +102 -0
- package/src/skills/catalog-cache.ts +35 -9
- package/src/skills/catalog-install.ts +31 -3
- package/src/skills/skill-cache-store.ts +97 -0
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +76 -0
- package/src/stt/daemon-batch-transcriber.ts +33 -0
- package/src/stt/stt-stream-session.ts +8 -1
- package/src/stt/types.ts +5 -1
- package/src/subagent/manager.ts +41 -13
- package/src/tasks/ephemeral-permissions.ts +9 -4
- package/src/telemetry/usage-telemetry-reporter.ts +27 -5
- package/src/tools/browser/__tests__/browser-status.test.ts +234 -2
- package/src/tools/browser/browser-execution.ts +150 -54
- package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +230 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +146 -3
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +22 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +54 -3
- package/src/tools/browser/cdp-client/factory.ts +15 -4
- package/src/tools/credentials/tool-policy.ts +39 -5
- package/src/tools/credentials/vault.ts +9 -4
- package/src/tools/executor.ts +129 -73
- package/src/tools/filesystem/write.ts +52 -0
- package/src/tools/host-terminal/host-shell.ts +45 -5
- package/src/tools/memory/register.test.ts +185 -0
- package/src/tools/memory/register.ts +3 -1
- package/src/tools/network/script-proxy/session-manager.ts +37 -1
- package/src/tools/network/web-fetch.ts +20 -10
- package/src/tools/network/web-search.ts +19 -4
- package/src/tools/permission-checker.ts +116 -46
- package/src/tools/policy-context.ts +29 -8
- package/src/tools/registry.ts +195 -6
- package/src/tools/schedule/create.ts +23 -8
- package/src/tools/schedule/update.ts +3 -1
- package/src/tools/secret-detection-handler.ts +0 -51
- package/src/tools/side-effects.ts +0 -11
- package/src/tools/skills/execute.ts +2 -2
- package/src/tools/skills/sandbox-runner.ts +5 -2
- package/src/tools/system/avatar-generator.ts +6 -2
- package/src/tools/terminal/backends/native.ts +51 -2
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +1 -0
- package/src/tools/tool-manifest.ts +6 -21
- package/src/tools/types.ts +40 -5
- package/src/tools/verification-control-plane-policy.ts +1 -1
- package/src/tts/__tests__/provider-adapters.test.ts +240 -13
- package/src/tts/provider-catalog.ts +18 -0
- package/src/tts/providers/index.ts +2 -0
- package/src/tts/providers/xai-provider.ts +224 -0
- package/src/tts/types.ts +46 -0
- package/src/types/tar-stream.d.ts +66 -0
- package/src/util/json.ts +17 -0
- package/src/util/platform.ts +9 -4
- package/src/util/pricing.ts +41 -8
- package/src/watcher/engine.ts +1 -1
- package/src/watcher/providers/google-calendar.ts +134 -8
- package/src/watcher/providers/outlook-calendar.ts +42 -2
- package/src/workspace/git-service.ts +23 -4
- package/src/workspace/migrations/006-services-config.ts +2 -4
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +2 -3
- package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +516 -0
- package/src/workspace/migrations/039-drop-legacy-llm-keys.ts +171 -0
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +154 -0
- package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +56 -0
- package/src/workspace/migrations/042-fix-backfill-google-gmail-settings-scope.ts +70 -0
- package/src/workspace/migrations/043-release-notes-latex-rendering.ts +75 -0
- package/src/workspace/migrations/044-bump-stale-provider-stream-timeout.ts +51 -0
- package/src/workspace/migrations/045-release-notes-meet-avatar.ts +130 -0
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +108 -0
- package/src/workspace/migrations/047-remove-watch-callsites.ts +54 -0
- package/src/workspace/migrations/048-remove-workspace-hooks.ts +81 -0
- package/src/workspace/migrations/049-release-notes-default-sonnet.ts +80 -0
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +86 -0
- package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +128 -0
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/registry.ts +28 -0
- package/src/workspace/provider-commit-message-generator.ts +19 -38
- package/tsconfig.json +1 -1
- package/hook-templates/debug-prompt-logger/hook.json +0 -7
- package/hook-templates/debug-prompt-logger/run.sh +0 -66
- package/src/__tests__/context-overflow-approval.test.ts +0 -156
- package/src/__tests__/gmail-archive-fallback.test.ts +0 -193
- package/src/__tests__/gmail-archive-gate.test.ts +0 -246
- package/src/__tests__/gmail-preferences.test.ts +0 -117
- package/src/__tests__/hooks-blocking.test.ts +0 -178
- package/src/__tests__/hooks-cli.test.ts +0 -182
- package/src/__tests__/hooks-config.test.ts +0 -108
- package/src/__tests__/hooks-discovery.test.ts +0 -211
- package/src/__tests__/hooks-integration.test.ts +0 -196
- package/src/__tests__/hooks-manager.test.ts +0 -226
- package/src/__tests__/hooks-runner.test.ts +0 -175
- package/src/__tests__/hooks-settings.test.ts +0 -160
- package/src/__tests__/hooks-templates.test.ts +0 -169
- package/src/__tests__/hooks-ts-runner.test.ts +0 -170
- package/src/__tests__/hooks-watch.test.ts +0 -112
- package/src/__tests__/notification-schedule-dedup.test.ts +0 -213
- package/src/__tests__/oauth-scope-policy.test.ts +0 -180
- package/src/__tests__/outlook-attachments.test.ts +0 -301
- package/src/__tests__/outlook-automation-tools.test.ts +0 -425
- package/src/__tests__/outlook-categories.test.ts +0 -212
- package/src/__tests__/outlook-compose-tools.test.ts +0 -325
- package/src/__tests__/outlook-declutter-tools.test.ts +0 -585
- package/src/__tests__/outlook-follow-up.test.ts +0 -196
- package/src/__tests__/outlook-trash.test.ts +0 -77
- package/src/__tests__/outlook-unsubscribe.test.ts +0 -279
- package/src/__tests__/send-notification-tool.test.ts +0 -83
- package/src/__tests__/update-bulletin-format.test.ts +0 -181
- package/src/__tests__/update-bulletin-state.test.ts +0 -135
- package/src/__tests__/update-bulletin.test.ts +0 -478
- package/src/__tests__/update-template-contract.test.ts +0 -29
- package/src/cli/commands/doctor.ts +0 -341
- package/src/cli/commands/shotgun.ts +0 -266
- package/src/config/bundled-skills/browser/SKILL.md +0 -88
- package/src/config/bundled-skills/browser/TOOLS.json +0 -516
- package/src/config/bundled-skills/browser/tools/browser-attach.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-click.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-close.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-detach.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-extract.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-hover.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-navigate.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-press-key.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-scroll.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-select-option.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-status.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-type.ts +0 -12
- package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +0 -49
- package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +0 -12
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +0 -27
- package/src/config/bundled-skills/chatgpt-import/TOOLS.json +0 -27
- package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +0 -378
- package/src/config/bundled-skills/conversations/SKILL.md +0 -20
- package/src/config/bundled-skills/conversations/TOOLS.json +0 -23
- package/src/config/bundled-skills/conversations/tools/rename-conversation.ts +0 -66
- package/src/config/bundled-skills/gmail/SKILL.md +0 -221
- package/src/config/bundled-skills/gmail/TOOLS.json +0 -588
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +0 -256
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +0 -112
- package/src/config/bundled-skills/gmail/tools/gmail-draft.ts +0 -44
- package/src/config/bundled-skills/gmail/tools/gmail-filters.ts +0 -81
- package/src/config/bundled-skills/gmail/tools/gmail-follow-up.ts +0 -108
- package/src/config/bundled-skills/gmail/tools/gmail-forward.ts +0 -146
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +0 -53
- package/src/config/bundled-skills/gmail/tools/gmail-outreach-scan.ts +0 -347
- package/src/config/bundled-skills/gmail/tools/gmail-preferences-tool.ts +0 -59
- package/src/config/bundled-skills/gmail/tools/gmail-preferences.ts +0 -82
- package/src/config/bundled-skills/gmail/tools/gmail-send-draft.ts +0 -26
- package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +0 -347
- package/src/config/bundled-skills/gmail/tools/gmail-trash.ts +0 -29
- package/src/config/bundled-skills/gmail/tools/gmail-unsubscribe.ts +0 -122
- package/src/config/bundled-skills/gmail/tools/gmail-vacation.ts +0 -67
- package/src/config/bundled-skills/gmail/tools/scan-result-store.ts +0 -100
- package/src/config/bundled-skills/gmail/tools/shared.ts +0 -47
- package/src/config/bundled-skills/google-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/google-calendar/TOOLS.json +0 -226
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +0 -223
- package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +0 -27
- package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +0 -48
- package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +0 -19
- package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +0 -36
- package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +0 -58
- package/src/config/bundled-skills/google-calendar/tools/shared.ts +0 -17
- package/src/config/bundled-skills/google-calendar/types.ts +0 -97
- package/src/config/bundled-skills/heartbeat/SKILL.md +0 -43
- package/src/config/bundled-skills/notifications/SKILL.md +0 -40
- package/src/config/bundled-skills/notifications/TOOLS.json +0 -80
- package/src/config/bundled-skills/notifications/tools/send-notification.ts +0 -152
- package/src/config/bundled-skills/notifications/tools/shared.ts +0 -13
- package/src/config/bundled-skills/outlook/SKILL.md +0 -196
- package/src/config/bundled-skills/outlook/TOOLS.json +0 -530
- package/src/config/bundled-skills/outlook/tools/outlook-attachments.ts +0 -85
- package/src/config/bundled-skills/outlook/tools/outlook-categories.ts +0 -77
- package/src/config/bundled-skills/outlook/tools/outlook-draft.ts +0 -84
- package/src/config/bundled-skills/outlook/tools/outlook-follow-up.ts +0 -94
- package/src/config/bundled-skills/outlook/tools/outlook-forward.ts +0 -49
- package/src/config/bundled-skills/outlook/tools/outlook-outreach-scan.ts +0 -237
- package/src/config/bundled-skills/outlook/tools/outlook-rules.ts +0 -161
- package/src/config/bundled-skills/outlook/tools/outlook-send-draft.ts +0 -32
- package/src/config/bundled-skills/outlook/tools/outlook-sender-digest.ts +0 -272
- package/src/config/bundled-skills/outlook/tools/outlook-trash.ts +0 -29
- package/src/config/bundled-skills/outlook/tools/outlook-unsubscribe.ts +0 -129
- package/src/config/bundled-skills/outlook/tools/outlook-vacation.ts +0 -87
- package/src/config/bundled-skills/outlook/tools/shared.ts +0 -20
- package/src/config/bundled-skills/outlook-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/outlook-calendar/TOOLS.json +0 -221
- package/src/config/bundled-skills/outlook-calendar/calendar-client.ts +0 -252
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-check-availability.ts +0 -53
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-create-event.ts +0 -74
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-get-event.ts +0 -18
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-list-events.ts +0 -46
- package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-rsvp.ts +0 -36
- package/src/config/bundled-skills/outlook-calendar/tools/shared.ts +0 -17
- package/src/config/bundled-skills/outlook-calendar/types.ts +0 -120
- package/src/config/bundled-skills/screen-watch/SKILL.md +0 -27
- package/src/config/bundled-skills/screen-watch/TOOLS.json +0 -35
- package/src/config/bundled-skills/screen-watch/tools/start-screen-watch.ts +0 -12
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -84
- package/src/config/bundled-skills/slack/SKILL.md +0 -108
- package/src/config/bundled-skills/tasks/SKILL.md +0 -37
- package/src/config/bundled-skills/tasks/TOOLS.json +0 -353
- package/src/config/bundled-skills/tasks/icon.svg +0 -34
- package/src/config/bundled-skills/tasks/tools/task-delete.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-add.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-show.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list-update.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-list.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-run.ts +0 -12
- package/src/config/bundled-skills/tasks/tools/task-save.ts +0 -12
- package/src/config/bundled-skills/watcher/SKILL.md +0 -31
- package/src/config/bundled-skills/watcher/TOOLS.json +0 -167
- package/src/config/bundled-skills/watcher/tools/watcher-create.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-list.ts +0 -12
- package/src/config/bundled-skills/watcher/tools/watcher-update.ts +0 -12
- package/src/daemon/context-overflow-approval.ts +0 -52
- package/src/daemon/watch-handler.ts +0 -399
- package/src/hooks/cli.ts +0 -253
- package/src/hooks/config.ts +0 -100
- package/src/hooks/discovery.ts +0 -135
- package/src/hooks/manager.ts +0 -179
- package/src/hooks/runner.ts +0 -117
- package/src/hooks/templates.ts +0 -77
- package/src/hooks/types.ts +0 -75
- package/src/oauth/scope-policy.ts +0 -89
- package/src/prompts/templates/UPDATES.md +0 -50
- package/src/prompts/update-bulletin-format.ts +0 -85
- package/src/prompts/update-bulletin-state.ts +0 -58
- package/src/prompts/update-bulletin-template-path.ts +0 -13
- package/src/prompts/update-bulletin.ts +0 -139
- package/src/runtime/gateway-internal-client.ts +0 -94
- package/src/runtime/routes/watch-routes.ts +0 -156
- package/src/shared/provider-env-vars.ts +0 -19
- package/src/signals/shotgun.ts +0 -203
- package/src/tools/watch/screen-watch.ts +0 -144
- package/src/tools/watch/watch-state.ts +0 -142
- package/src/tools/watcher/create.ts +0 -86
- package/src/tools/watcher/delete.ts +0 -36
- package/src/tools/watcher/digest.ts +0 -54
- package/src/tools/watcher/list.ts +0 -83
- package/src/tools/watcher/update.ts +0 -71
|
@@ -0,0 +1,660 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared browser operations contract.
|
|
3
|
+
*
|
|
4
|
+
* This module is the single execution entrypoint for all browser
|
|
5
|
+
* operations. Both the existing tool wrappers and the CLI command
|
|
6
|
+
* builder consume this contract. All metadata is defined inline —
|
|
7
|
+
* this module has no dependency on skill registration files.
|
|
8
|
+
*
|
|
9
|
+
* Responsibilities:
|
|
10
|
+
* - Dispatch to existing browser-execution.ts implementations.
|
|
11
|
+
* - Command-oriented metadata for CLI subcommand generation.
|
|
12
|
+
* - `wait_for_download` mode-constraint enforcement.
|
|
13
|
+
*
|
|
14
|
+
* Identifier-only exports (BROWSER_TOOL_NAMES, name mapping helpers)
|
|
15
|
+
* live in `browser/identifiers.ts` to avoid pulling the browser
|
|
16
|
+
* execution stack into policy/classification modules. This module
|
|
17
|
+
* re-exports them for backwards compatibility.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
executeBrowserAttach,
|
|
22
|
+
executeBrowserClick,
|
|
23
|
+
executeBrowserClose,
|
|
24
|
+
executeBrowserDetach,
|
|
25
|
+
executeBrowserExtract,
|
|
26
|
+
executeBrowserFillCredential,
|
|
27
|
+
executeBrowserHover,
|
|
28
|
+
executeBrowserNavigate,
|
|
29
|
+
executeBrowserPressKey,
|
|
30
|
+
executeBrowserScreenshot,
|
|
31
|
+
executeBrowserScroll,
|
|
32
|
+
executeBrowserSelectOption,
|
|
33
|
+
executeBrowserSnapshot,
|
|
34
|
+
executeBrowserStatus,
|
|
35
|
+
executeBrowserType,
|
|
36
|
+
executeBrowserWaitFor,
|
|
37
|
+
} from "../tools/browser/browser-execution.js";
|
|
38
|
+
import { browserManager } from "../tools/browser/browser-manager.js";
|
|
39
|
+
import { normalizeBrowserMode } from "../tools/browser/browser-mode.js";
|
|
40
|
+
import type { ToolContext, ToolExecutionResult } from "../tools/types.js";
|
|
41
|
+
import {
|
|
42
|
+
BROWSER_OPERATIONS,
|
|
43
|
+
type BrowserOperation,
|
|
44
|
+
type BrowserOperationMeta,
|
|
45
|
+
} from "./types.js";
|
|
46
|
+
|
|
47
|
+
// ── Re-exports from identifiers.ts ───────────────────────────────────
|
|
48
|
+
//
|
|
49
|
+
// Identifier-only constants and helpers are defined in the lightweight
|
|
50
|
+
// `browser/identifiers.ts` module so that policy/classification
|
|
51
|
+
// consumers can import them without pulling in the browser execution
|
|
52
|
+
// stack. Re-exported here for backwards compatibility with existing
|
|
53
|
+
// callers that import from `browser/operations.js`.
|
|
54
|
+
|
|
55
|
+
export {
|
|
56
|
+
BROWSER_TOOL_NAMES,
|
|
57
|
+
browserOperationToToolName,
|
|
58
|
+
browserToolNameToOperation,
|
|
59
|
+
} from "./identifiers.js";
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* All canonical browser operation identifiers (re-exported from types).
|
|
63
|
+
*/
|
|
64
|
+
export const BROWSER_OPERATION_NAMES: readonly BrowserOperation[] =
|
|
65
|
+
BROWSER_OPERATIONS;
|
|
66
|
+
|
|
67
|
+
// ── Dispatch handlers ────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Handler signature for a browser operation dispatcher.
|
|
71
|
+
*/
|
|
72
|
+
type OperationHandler = (
|
|
73
|
+
input: Record<string, unknown>,
|
|
74
|
+
context: ToolContext,
|
|
75
|
+
) => Promise<ToolExecutionResult>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Inline `wait_for_download` handler. Downloads are only supported
|
|
79
|
+
* on auto/local browser modes; the handler validates the mode and
|
|
80
|
+
* delegates to `browserManager.waitForDownload()`.
|
|
81
|
+
*/
|
|
82
|
+
async function executeWaitForDownload(
|
|
83
|
+
input: Record<string, unknown>,
|
|
84
|
+
context: ToolContext,
|
|
85
|
+
): Promise<ToolExecutionResult> {
|
|
86
|
+
// Validate browser_mode: only auto/local are supported for downloads.
|
|
87
|
+
const modeResult = normalizeBrowserMode(input.browser_mode);
|
|
88
|
+
if ("error" in modeResult) {
|
|
89
|
+
return { content: `Error: ${modeResult.error}`, isError: true };
|
|
90
|
+
}
|
|
91
|
+
const { mode } = modeResult;
|
|
92
|
+
if (mode !== "auto" && mode !== "local") {
|
|
93
|
+
return {
|
|
94
|
+
content:
|
|
95
|
+
`Error: browser_wait_for_download does not support browser_mode "${mode}". ` +
|
|
96
|
+
`File downloads require the local Playwright backend. ` +
|
|
97
|
+
`Use browser_mode "auto" or "local" instead.`,
|
|
98
|
+
isError: true,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const timeout =
|
|
103
|
+
typeof input.timeout === "number"
|
|
104
|
+
? Math.min(Math.max(input.timeout, 1000), 120_000)
|
|
105
|
+
: 30_000;
|
|
106
|
+
|
|
107
|
+
try {
|
|
108
|
+
const download = await browserManager.waitForDownload(
|
|
109
|
+
context.conversationId,
|
|
110
|
+
timeout,
|
|
111
|
+
);
|
|
112
|
+
return {
|
|
113
|
+
content: JSON.stringify({
|
|
114
|
+
filename: download.filename,
|
|
115
|
+
path: download.path,
|
|
116
|
+
}),
|
|
117
|
+
isError: false,
|
|
118
|
+
};
|
|
119
|
+
} catch (err) {
|
|
120
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
121
|
+
return { content: `Error: ${msg}`, isError: true };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Registry mapping each operation to its dispatch handler.
|
|
127
|
+
* Every entry in BROWSER_OPERATIONS must have a corresponding handler.
|
|
128
|
+
*/
|
|
129
|
+
const DISPATCH_HANDLERS: Record<BrowserOperation, OperationHandler> = {
|
|
130
|
+
navigate: executeBrowserNavigate,
|
|
131
|
+
snapshot: executeBrowserSnapshot,
|
|
132
|
+
screenshot: executeBrowserScreenshot,
|
|
133
|
+
close: executeBrowserClose,
|
|
134
|
+
attach: executeBrowserAttach,
|
|
135
|
+
detach: executeBrowserDetach,
|
|
136
|
+
click: executeBrowserClick,
|
|
137
|
+
type: executeBrowserType,
|
|
138
|
+
press_key: executeBrowserPressKey,
|
|
139
|
+
scroll: executeBrowserScroll,
|
|
140
|
+
select_option: executeBrowserSelectOption,
|
|
141
|
+
hover: executeBrowserHover,
|
|
142
|
+
wait_for: executeBrowserWaitFor,
|
|
143
|
+
extract: executeBrowserExtract,
|
|
144
|
+
wait_for_download: executeWaitForDownload,
|
|
145
|
+
fill_credential: executeBrowserFillCredential,
|
|
146
|
+
status: executeBrowserStatus,
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// ── Execute ──────────────────────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Execute a browser operation by its canonical identifier.
|
|
153
|
+
*
|
|
154
|
+
* This is the single execution entrypoint. Callers pass the operation
|
|
155
|
+
* name (e.g. `"navigate"`), a flat input object, and a {@link ToolContext}.
|
|
156
|
+
* The function looks up the handler in the dispatch registry and
|
|
157
|
+
* delegates to the existing browser-execution.ts implementation.
|
|
158
|
+
*
|
|
159
|
+
* @param operation - Canonical operation identifier (e.g. `"navigate"`).
|
|
160
|
+
* @param input - Flat input object matching the operation's field schema.
|
|
161
|
+
* @param context - Tool execution context (conversation ID, signal, etc.).
|
|
162
|
+
* @returns The tool execution result from the underlying handler.
|
|
163
|
+
* If the operation identifier is not recognized, returns an error
|
|
164
|
+
* result (`isError: true`) rather than throwing.
|
|
165
|
+
*/
|
|
166
|
+
export async function executeBrowserOperation(
|
|
167
|
+
operation: BrowserOperation,
|
|
168
|
+
input: Record<string, unknown>,
|
|
169
|
+
context: ToolContext,
|
|
170
|
+
): Promise<ToolExecutionResult> {
|
|
171
|
+
const handler = DISPATCH_HANDLERS[operation];
|
|
172
|
+
if (!handler) {
|
|
173
|
+
return {
|
|
174
|
+
content: `Error: Unknown browser operation "${operation}".`,
|
|
175
|
+
isError: true,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return handler(input, context);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// ── Command-oriented metadata ────────────────────────────────────────
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Metadata for every browser operation, describing fields, types, and
|
|
185
|
+
* constraints. Used by the CLI command builder to generate subcommands.
|
|
186
|
+
*
|
|
187
|
+
* The `browser_mode` field is handled as a shared parent-level option
|
|
188
|
+
* on the `assistant browser` command (--browser-mode), not as a
|
|
189
|
+
* per-operation field. The `activity` field is omitted because it is
|
|
190
|
+
* an internal execution concern, not a user-facing parameter.
|
|
191
|
+
*/
|
|
192
|
+
export const BROWSER_OPERATION_META: readonly BrowserOperationMeta[] = [
|
|
193
|
+
{
|
|
194
|
+
operation: "navigate",
|
|
195
|
+
description: "Navigate the browser to a URL and return the page title.",
|
|
196
|
+
fields: [
|
|
197
|
+
{
|
|
198
|
+
name: "url",
|
|
199
|
+
type: "string",
|
|
200
|
+
description: "The URL to navigate to.",
|
|
201
|
+
required: true,
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: "allow_private_network",
|
|
205
|
+
type: "boolean",
|
|
206
|
+
description: "Allow navigation to localhost/private-network hosts.",
|
|
207
|
+
required: false,
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
helpText: `Loads the given URL and waits for the page to reach a stable state.
|
|
211
|
+
Returns the page title on success.
|
|
212
|
+
|
|
213
|
+
Examples:
|
|
214
|
+
$ assistant browser navigate --url https://example.com
|
|
215
|
+
$ assistant browser navigate --url http://localhost:3000 --allow-private-network
|
|
216
|
+
$ assistant browser --session s1 navigate --url https://github.com`,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
operation: "snapshot",
|
|
220
|
+
description:
|
|
221
|
+
"List interactive elements on the current page with unique IDs.",
|
|
222
|
+
fields: [],
|
|
223
|
+
helpText: `Returns a structured list of interactive elements (buttons, links,
|
|
224
|
+
inputs, etc.) with stable element IDs that can be passed to click,
|
|
225
|
+
type, and other element-targeting commands.
|
|
226
|
+
|
|
227
|
+
Examples:
|
|
228
|
+
$ assistant browser snapshot
|
|
229
|
+
$ assistant browser --json snapshot`,
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
operation: "screenshot",
|
|
233
|
+
description: "Take a visual screenshot of the current page.",
|
|
234
|
+
fields: [
|
|
235
|
+
{
|
|
236
|
+
name: "full_page",
|
|
237
|
+
type: "boolean",
|
|
238
|
+
description:
|
|
239
|
+
"Capture the full scrollable page instead of just the viewport.",
|
|
240
|
+
required: false,
|
|
241
|
+
},
|
|
242
|
+
],
|
|
243
|
+
helpText: `Captures a JPEG screenshot. Use --output to save to a file, or
|
|
244
|
+
--json to receive base64-encoded image data in the output.
|
|
245
|
+
|
|
246
|
+
Examples:
|
|
247
|
+
$ assistant browser screenshot --output page.jpg
|
|
248
|
+
$ assistant browser screenshot --full-page --output full.jpg
|
|
249
|
+
$ assistant browser --json screenshot`,
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
operation: "close",
|
|
253
|
+
description: "Close the browser page for the current conversation.",
|
|
254
|
+
fields: [
|
|
255
|
+
{
|
|
256
|
+
name: "close_all_pages",
|
|
257
|
+
type: "boolean",
|
|
258
|
+
description: "Close all browser pages and the browser context.",
|
|
259
|
+
required: false,
|
|
260
|
+
},
|
|
261
|
+
],
|
|
262
|
+
helpText: `Closes the browser page for the current session. Use --close-all-pages
|
|
263
|
+
to tear down the entire browser context including all pages.
|
|
264
|
+
|
|
265
|
+
Examples:
|
|
266
|
+
$ assistant browser close
|
|
267
|
+
$ assistant browser close --close-all-pages
|
|
268
|
+
$ assistant browser --session s1 close`,
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
operation: "attach",
|
|
272
|
+
description: "Attach the Chrome debugger to the active browser tab.",
|
|
273
|
+
fields: [],
|
|
274
|
+
helpText: `Connects the assistant to a running Chrome instance via the Chrome
|
|
275
|
+
DevTools Protocol. Required before interacting with Chrome-attached tabs.
|
|
276
|
+
|
|
277
|
+
Examples:
|
|
278
|
+
$ assistant browser attach
|
|
279
|
+
$ assistant browser --session s1 attach`,
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
operation: "detach",
|
|
283
|
+
description: "Detach the Chrome debugger from the active browser tab.",
|
|
284
|
+
fields: [],
|
|
285
|
+
helpText: `Disconnects the assistant from the Chrome DevTools Protocol session.
|
|
286
|
+
The browser tab continues running but is no longer controlled.
|
|
287
|
+
|
|
288
|
+
Examples:
|
|
289
|
+
$ assistant browser detach
|
|
290
|
+
$ assistant browser --session s1 detach`,
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
operation: "click",
|
|
294
|
+
description: "Click an element on the page.",
|
|
295
|
+
fields: [
|
|
296
|
+
{
|
|
297
|
+
name: "element_id",
|
|
298
|
+
type: "string",
|
|
299
|
+
description: "Element ID from a previous browser snapshot.",
|
|
300
|
+
required: false,
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
name: "selector",
|
|
304
|
+
type: "string",
|
|
305
|
+
description: "CSS selector to target.",
|
|
306
|
+
required: false,
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
helpText: `Clicks an element identified by element ID (from snapshot) or CSS
|
|
310
|
+
selector. Provide at least one of --element-id or --selector.
|
|
311
|
+
|
|
312
|
+
Examples:
|
|
313
|
+
$ assistant browser click --element-id e14
|
|
314
|
+
$ assistant browser click --selector "#login-button"
|
|
315
|
+
$ assistant browser click --selector "a.nav-link"`,
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
operation: "type",
|
|
319
|
+
description: "Type text into an input element.",
|
|
320
|
+
fields: [
|
|
321
|
+
{
|
|
322
|
+
name: "text",
|
|
323
|
+
type: "string",
|
|
324
|
+
description: "The text to type into the element.",
|
|
325
|
+
required: true,
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
name: "element_id",
|
|
329
|
+
type: "string",
|
|
330
|
+
description: "Element ID from a previous browser snapshot.",
|
|
331
|
+
required: false,
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: "selector",
|
|
335
|
+
type: "string",
|
|
336
|
+
description: "CSS selector to target.",
|
|
337
|
+
required: false,
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: "clear_first",
|
|
341
|
+
type: "boolean",
|
|
342
|
+
description: "Clear existing content before typing. Default: true.",
|
|
343
|
+
required: false,
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
name: "press_enter",
|
|
347
|
+
type: "boolean",
|
|
348
|
+
description: "Press Enter after typing the text.",
|
|
349
|
+
required: false,
|
|
350
|
+
},
|
|
351
|
+
],
|
|
352
|
+
helpText: `Types text into the focused or targeted element. By default, existing
|
|
353
|
+
content is cleared first (--clear-first). Use --no-clear-first to
|
|
354
|
+
append to existing content. Use --press-enter to submit after typing.
|
|
355
|
+
|
|
356
|
+
Examples:
|
|
357
|
+
$ assistant browser type --text "hello world" --element-id e14
|
|
358
|
+
$ assistant browser type --text "search query" --selector "#search" --press-enter
|
|
359
|
+
$ assistant browser type --text "append this" --no-clear-first`,
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
operation: "press_key",
|
|
363
|
+
description: "Press a keyboard key, optionally targeting an element.",
|
|
364
|
+
fields: [
|
|
365
|
+
{
|
|
366
|
+
name: "key",
|
|
367
|
+
type: "string",
|
|
368
|
+
description:
|
|
369
|
+
'The key to press (e.g. "Enter", "Escape", "Tab", "ArrowDown").',
|
|
370
|
+
required: true,
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
name: "element_id",
|
|
374
|
+
type: "string",
|
|
375
|
+
description: "Optional element ID from browser snapshot.",
|
|
376
|
+
required: false,
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
name: "selector",
|
|
380
|
+
type: "string",
|
|
381
|
+
description: "Optional CSS selector to target.",
|
|
382
|
+
required: false,
|
|
383
|
+
},
|
|
384
|
+
],
|
|
385
|
+
helpText: `Sends a keyboard key press. If --element-id or --selector is given,
|
|
386
|
+
the key is dispatched to that element; otherwise to the focused element.
|
|
387
|
+
|
|
388
|
+
Examples:
|
|
389
|
+
$ assistant browser press-key --key Enter
|
|
390
|
+
$ assistant browser press-key --key Tab --element-id e5
|
|
391
|
+
$ assistant browser press-key --key Escape`,
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
operation: "scroll",
|
|
395
|
+
description: "Scroll the page or a specific element.",
|
|
396
|
+
fields: [
|
|
397
|
+
{
|
|
398
|
+
name: "direction",
|
|
399
|
+
type: "string",
|
|
400
|
+
description: "The direction to scroll.",
|
|
401
|
+
required: true,
|
|
402
|
+
enum: ["up", "down", "left", "right"],
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
name: "amount",
|
|
406
|
+
type: "number",
|
|
407
|
+
description: "The number of pixels to scroll. Default: 500.",
|
|
408
|
+
required: false,
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
name: "element_id",
|
|
412
|
+
type: "string",
|
|
413
|
+
description: "Optional element ID to scroll within.",
|
|
414
|
+
required: false,
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
name: "selector",
|
|
418
|
+
type: "string",
|
|
419
|
+
description: "Optional CSS selector of element to scroll within.",
|
|
420
|
+
required: false,
|
|
421
|
+
},
|
|
422
|
+
],
|
|
423
|
+
helpText: `Scrolls the page or a specific scrollable element. Direction is
|
|
424
|
+
required; amount defaults to 500 pixels.
|
|
425
|
+
|
|
426
|
+
Examples:
|
|
427
|
+
$ assistant browser scroll --direction down
|
|
428
|
+
$ assistant browser scroll --direction up --amount 1000
|
|
429
|
+
$ assistant browser scroll --direction down --element-id e8`,
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
operation: "select_option",
|
|
433
|
+
description: "Select an option from a native <select> element.",
|
|
434
|
+
fields: [
|
|
435
|
+
{
|
|
436
|
+
name: "element_id",
|
|
437
|
+
type: "string",
|
|
438
|
+
description: "Element ID of the <select> from browser snapshot.",
|
|
439
|
+
required: false,
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
name: "selector",
|
|
443
|
+
type: "string",
|
|
444
|
+
description: "CSS selector for the <select> element.",
|
|
445
|
+
required: false,
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
name: "value",
|
|
449
|
+
type: "string",
|
|
450
|
+
description: "The value attribute of the <option> to select.",
|
|
451
|
+
required: false,
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
name: "label",
|
|
455
|
+
type: "string",
|
|
456
|
+
description: "The visible text of the <option> to select.",
|
|
457
|
+
required: false,
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
name: "index",
|
|
461
|
+
type: "number",
|
|
462
|
+
description: "The zero-based index of the <option> to select.",
|
|
463
|
+
required: false,
|
|
464
|
+
},
|
|
465
|
+
],
|
|
466
|
+
helpText: `Selects an option in a <select> element by value, label, or index.
|
|
467
|
+
Provide at least one of --value, --label, or --index to identify
|
|
468
|
+
the option, and --element-id or --selector to identify the <select>.
|
|
469
|
+
|
|
470
|
+
Examples:
|
|
471
|
+
$ assistant browser select-option --element-id e12 --label "United States"
|
|
472
|
+
$ assistant browser select-option --selector "#country" --value "us"
|
|
473
|
+
$ assistant browser select-option --element-id e12 --index 3`,
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
operation: "hover",
|
|
477
|
+
description: "Hover over an element on the page.",
|
|
478
|
+
fields: [
|
|
479
|
+
{
|
|
480
|
+
name: "element_id",
|
|
481
|
+
type: "string",
|
|
482
|
+
description: "Element ID from a previous browser snapshot.",
|
|
483
|
+
required: false,
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
name: "selector",
|
|
487
|
+
type: "string",
|
|
488
|
+
description: "CSS selector to target.",
|
|
489
|
+
required: false,
|
|
490
|
+
},
|
|
491
|
+
],
|
|
492
|
+
helpText: `Moves the mouse cursor over an element to trigger hover effects
|
|
493
|
+
(tooltips, dropdowns, etc.). Provide --element-id or --selector.
|
|
494
|
+
|
|
495
|
+
Examples:
|
|
496
|
+
$ assistant browser hover --element-id e7
|
|
497
|
+
$ assistant browser hover --selector ".dropdown-trigger"`,
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
operation: "wait_for",
|
|
501
|
+
description:
|
|
502
|
+
"Wait for a condition: a CSS selector, text, or fixed duration.",
|
|
503
|
+
fields: [
|
|
504
|
+
{
|
|
505
|
+
name: "selector",
|
|
506
|
+
type: "string",
|
|
507
|
+
description: "Wait for an element matching this CSS selector.",
|
|
508
|
+
required: false,
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
name: "text",
|
|
512
|
+
type: "string",
|
|
513
|
+
description: "Wait for this text to appear on the page.",
|
|
514
|
+
required: false,
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
name: "duration",
|
|
518
|
+
type: "number",
|
|
519
|
+
description: "Wait for this many milliseconds.",
|
|
520
|
+
required: false,
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
name: "timeout",
|
|
524
|
+
type: "number",
|
|
525
|
+
description:
|
|
526
|
+
"Maximum wait time in milliseconds. Default and max: 30000.",
|
|
527
|
+
required: false,
|
|
528
|
+
},
|
|
529
|
+
],
|
|
530
|
+
helpText: `Blocks until a condition is met: an element appears (--selector),
|
|
531
|
+
text appears (--text), or a fixed duration elapses (--duration).
|
|
532
|
+
Provide exactly one condition. --timeout caps the overall wait.
|
|
533
|
+
|
|
534
|
+
Examples:
|
|
535
|
+
$ assistant browser wait-for --selector ".results-loaded"
|
|
536
|
+
$ assistant browser wait-for --text "Success"
|
|
537
|
+
$ assistant browser wait-for --duration 2000`,
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
operation: "extract",
|
|
541
|
+
description: "Extract the text content of the current page.",
|
|
542
|
+
fields: [
|
|
543
|
+
{
|
|
544
|
+
name: "include_links",
|
|
545
|
+
type: "boolean",
|
|
546
|
+
description: "Include a list of links found on the page.",
|
|
547
|
+
required: false,
|
|
548
|
+
},
|
|
549
|
+
],
|
|
550
|
+
helpText: `Extracts the visible text content of the current page. Optionally
|
|
551
|
+
includes a list of all links found on the page.
|
|
552
|
+
|
|
553
|
+
Examples:
|
|
554
|
+
$ assistant browser extract
|
|
555
|
+
$ assistant browser extract --include-links
|
|
556
|
+
$ assistant browser --json extract`,
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
operation: "wait_for_download",
|
|
560
|
+
description: "Wait for a file download to complete on the current page.",
|
|
561
|
+
allowedModes: ["auto", "local"],
|
|
562
|
+
fields: [
|
|
563
|
+
{
|
|
564
|
+
name: "timeout",
|
|
565
|
+
type: "number",
|
|
566
|
+
description:
|
|
567
|
+
"Maximum wait time in milliseconds. Default: 30000, max: 120000.",
|
|
568
|
+
required: false,
|
|
569
|
+
},
|
|
570
|
+
],
|
|
571
|
+
helpText: `Waits for an in-progress file download to complete and returns the
|
|
572
|
+
filename and path. Only supported in "auto" and "local" browser modes.
|
|
573
|
+
|
|
574
|
+
Examples:
|
|
575
|
+
$ assistant browser wait-for-download
|
|
576
|
+
$ assistant browser wait-for-download --timeout 60000`,
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
operation: "fill_credential",
|
|
580
|
+
description:
|
|
581
|
+
"Fill a stored credential into a form field without exposing the value.",
|
|
582
|
+
fields: [
|
|
583
|
+
{
|
|
584
|
+
name: "service",
|
|
585
|
+
type: "string",
|
|
586
|
+
description: "Credential vault service name.",
|
|
587
|
+
required: true,
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
name: "field",
|
|
591
|
+
type: "string",
|
|
592
|
+
description: "Credential vault field name.",
|
|
593
|
+
required: true,
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
name: "element_id",
|
|
597
|
+
type: "string",
|
|
598
|
+
description: "Element ID from browser snapshot.",
|
|
599
|
+
required: false,
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
name: "selector",
|
|
603
|
+
type: "string",
|
|
604
|
+
description: "CSS selector for target element.",
|
|
605
|
+
required: false,
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
name: "press_enter",
|
|
609
|
+
type: "boolean",
|
|
610
|
+
description: "Press Enter after filling.",
|
|
611
|
+
required: false,
|
|
612
|
+
},
|
|
613
|
+
],
|
|
614
|
+
helpText: `Fills a credential from the assistant's credential vault into a form
|
|
615
|
+
field. The credential value is never exposed in CLI output. Use
|
|
616
|
+
'assistant credentials list' to see available service:field pairs.
|
|
617
|
+
|
|
618
|
+
Examples:
|
|
619
|
+
$ assistant browser fill-credential --service github --field token --element-id e9
|
|
620
|
+
$ assistant browser fill-credential --service github --field password --selector "#password" --press-enter`,
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
operation: "status",
|
|
624
|
+
description: "Check browser backend readiness and remediation guidance.",
|
|
625
|
+
fields: [
|
|
626
|
+
{
|
|
627
|
+
name: "check_local_launch",
|
|
628
|
+
type: "boolean",
|
|
629
|
+
description:
|
|
630
|
+
"Run an active local Playwright launch probe. Default: false.",
|
|
631
|
+
required: false,
|
|
632
|
+
},
|
|
633
|
+
],
|
|
634
|
+
helpText: `Reports the readiness of available browser backends (local Playwright,
|
|
635
|
+
Chrome extension). Includes remediation steps if a backend is not ready.
|
|
636
|
+
Use --check-local-launch for an active Playwright launch probe (slower).
|
|
637
|
+
|
|
638
|
+
Examples:
|
|
639
|
+
$ assistant browser status
|
|
640
|
+
$ assistant browser status --check-local-launch
|
|
641
|
+
$ assistant browser --json status`,
|
|
642
|
+
},
|
|
643
|
+
];
|
|
644
|
+
|
|
645
|
+
// ── Lookup helper ────────────────────────────────────────────────────
|
|
646
|
+
|
|
647
|
+
/** Index for O(1) metadata lookups by operation. */
|
|
648
|
+
const META_BY_OPERATION = new Map<BrowserOperation, BrowserOperationMeta>(
|
|
649
|
+
BROWSER_OPERATION_META.map((m) => [m.operation, m]),
|
|
650
|
+
);
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* Get metadata for a specific operation. Returns `undefined` if the
|
|
654
|
+
* operation is not recognized.
|
|
655
|
+
*/
|
|
656
|
+
export function getBrowserOperationMeta(
|
|
657
|
+
operation: BrowserOperation,
|
|
658
|
+
): BrowserOperationMeta | undefined {
|
|
659
|
+
return META_BY_OPERATION.get(operation);
|
|
660
|
+
}
|