@vellumai/assistant 0.6.5 → 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/AGENTS.md +9 -1
- package/ARCHITECTURE.md +15 -17
- package/Dockerfile +6 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +283 -0
- package/docs/architecture/integrations.md +32 -39
- package/docs/architecture/memory.md +25 -30
- package/docs/architecture/security.md +7 -6
- package/docs/browser-use-architecture-phase2.md +63 -20
- package/docs/plugins.md +761 -0
- 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/node_modules/@vellumai/egress-proxy/src/types.ts +19 -0
- package/openapi.yaml +212 -68
- package/package.json +1 -1
- package/src/__tests__/app-compiler.test.ts +57 -0
- package/src/__tests__/approval-cascade.test.ts +7 -2
- package/src/__tests__/auto-analysis-end-to-end.test.ts +1 -0
- package/src/__tests__/avatar-generator.test.ts +4 -2
- package/src/__tests__/bundled-asset.test.ts +6 -6
- package/src/__tests__/catalog-cache.test.ts +69 -0
- package/src/__tests__/checker.test.ts +459 -171
- package/src/__tests__/circuit-breaker-pipeline.test.ts +406 -0
- 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__/config-model-image-provider.test.ts +110 -0
- package/src/__tests__/config-schema.test.ts +22 -9
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -4
- package/src/__tests__/contacts-tools.test.ts +26 -0
- package/src/__tests__/context-overflow-policy.test.ts +7 -7
- package/src/__tests__/context-window-manager.test.ts +355 -4
- package/src/__tests__/conversation-abort-tool-results.test.ts +4 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +26 -30
- package/src/__tests__/conversation-agent-loop.test.ts +30 -141
- package/src/__tests__/conversation-confirmation-signals.test.ts +6 -1
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +2 -16
- package/src/__tests__/conversation-pairing.test.ts +174 -10
- package/src/__tests__/conversation-pre-run-repair.test.ts +4 -1
- package/src/__tests__/conversation-process-callsite.test.ts +3 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +16 -7
- package/src/__tests__/conversation-queue.test.ts +29 -14
- package/src/__tests__/conversation-routes-disk-view.test.ts +7 -6
- package/src/__tests__/conversation-runtime-assembly.test.ts +155 -110
- package/src/__tests__/conversation-runtime-workspace.test.ts +23 -38
- package/src/__tests__/conversation-seed-composer.test.ts +2 -2
- package/src/__tests__/conversation-slash-queue.test.ts +7 -2
- package/src/__tests__/conversation-slash-unknown.test.ts +25 -2
- package/src/__tests__/conversation-speed-override.test.ts +6 -1
- package/src/__tests__/conversation-title-service.test.ts +116 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +41 -2
- package/src/__tests__/conversation-usage.test.ts +1 -1
- package/src/__tests__/conversation-workspace-cache-state.test.ts +4 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +3 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +4 -1
- package/src/__tests__/credential-health-service.test.ts +78 -9
- package/src/__tests__/credential-security-invariants.test.ts +2 -2
- package/src/__tests__/db-schedule-syntax-migration.test.ts +1 -0
- package/src/__tests__/empty-response-pipeline.test.ts +305 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +3 -3
- package/src/__tests__/first-greeting.test.ts +247 -5
- package/src/__tests__/headless-browser-mode.test.ts +57 -0
- 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__/image-credentials.test.ts +137 -0
- package/src/__tests__/image-service-dispatcher.test.ts +186 -0
- package/src/__tests__/injector-chain.test.ts +526 -0
- package/src/__tests__/intent-routing.test.ts +0 -26
- package/src/__tests__/llm-call-pipeline.test.ts +285 -0
- package/src/__tests__/llm-schema.test.ts +1 -1
- 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__/migration-import-from-url.test.ts +5 -68
- package/src/__tests__/model-intents.test.ts +4 -2
- package/src/__tests__/notification-broadcaster.test.ts +3 -3
- 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 +41 -76
- package/src/__tests__/onboarding-template-contract.test.ts +16 -64
- package/src/__tests__/openai-image-service.test.ts +368 -0
- package/src/__tests__/overflow-reduce-pipeline.test.ts +676 -0
- package/src/__tests__/permission-checker-host-gate.test.ts +0 -24
- package/src/__tests__/persist-onboarding-artifacts.test.ts +266 -0
- package/src/__tests__/persistence-pipeline.test.ts +377 -0
- package/src/__tests__/pipeline-runner.test.ts +565 -0
- 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 +44 -12
- package/src/__tests__/proxy-approval-callback.test.ts +69 -8
- package/src/__tests__/reaction-persistence.test.ts +1 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +0 -2
- 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__/shell-identity.test.ts +0 -134
- package/src/__tests__/suggestion-routes.test.ts +103 -4
- package/src/__tests__/task-memory-cleanup.test.ts +1 -0
- package/src/__tests__/task-scheduler.test.ts +3 -15
- package/src/__tests__/test-preload.ts +11 -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 +0 -6
- package/src/__tests__/tool-executor-shell-integration.test.ts +7 -10
- package/src/__tests__/tool-executor.test.ts +141 -0
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +356 -0
- package/src/__tests__/tool-result-truncation.test.ts +0 -110
- package/src/__tests__/user-plugin-loader.test.ts +191 -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-remove-hooks.test.ts +99 -0
- package/src/__tests__/workspace-policy.test.ts +21 -3
- package/src/agent/loop.ts +340 -102
- package/src/approvals/__tests__/guardian-feed-event.test.ts +304 -0
- package/src/approvals/guardian-request-resolvers.ts +80 -0
- package/src/backup/__tests__/backup-worker.test.ts +2 -13
- package/src/backup/backup-worker.ts +3 -15
- package/src/bundler/app-compiler.ts +84 -1
- package/src/calls/call-state.ts +2 -2
- package/src/channels/__tests__/types.test.ts +3 -3
- package/src/channels/types.ts +6 -4
- package/src/cli/__tests__/notifications.test.ts +87 -211
- package/src/cli/commands/__tests__/backup.test.ts +1 -1
- package/src/cli/commands/__tests__/image-generation.test.ts +255 -35
- package/src/cli/commands/__tests__/inference-send.test.ts +12 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +12 -0
- package/src/cli/commands/backup.ts +2 -2
- package/src/cli/commands/clients.ts +138 -0
- package/src/cli/commands/completions.ts +2 -9
- package/src/cli/commands/conversations.ts +55 -7
- package/src/cli/commands/image-generation.ts +33 -34
- 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/skills.ts +3 -4
- package/src/cli/program.ts +25 -29
- 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/messaging/SKILL.md +3 -3
- 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 +12 -0
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +58 -0
- 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-tool-registry.ts +0 -15
- package/src/config/feature-flag-registry.json +17 -1
- package/src/config/schema.ts +19 -0
- package/src/config/schemas/backup.ts +1 -1
- package/src/config/schemas/conversations.ts +16 -0
- package/src/config/schemas/llm.ts +2 -3
- package/src/config/schemas/security.ts +6 -6
- package/src/config/schemas/tts.ts +11 -0
- package/src/config/skill-state.ts +6 -2
- package/src/config/skills.ts +94 -5
- package/src/context/__tests__/compact-prompt.test.ts +27 -9
- package/src/context/prompts/compact.md +26 -12
- package/src/context/tool-result-truncation.ts +3 -63
- package/src/context/window-manager.ts +190 -16
- 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/config-watcher.ts +0 -2
- package/src/daemon/context-overflow-policy.ts +4 -13
- package/src/daemon/conversation-agent-loop-handlers.ts +83 -22
- package/src/daemon/conversation-agent-loop.ts +984 -683
- package/src/daemon/conversation-history.ts +10 -19
- package/src/daemon/conversation-lifecycle.ts +37 -19
- package/src/daemon/conversation-notifiers.ts +2 -110
- package/src/daemon/conversation-process.ts +14 -7
- package/src/daemon/conversation-runtime-assembly.ts +532 -411
- package/src/daemon/conversation-tool-setup.ts +41 -4
- package/src/daemon/conversation.ts +80 -35
- package/src/daemon/external-plugins-bootstrap.ts +478 -0
- package/src/daemon/first-greeting.ts +191 -14
- package/src/daemon/handlers/config-model.ts +11 -0
- package/src/daemon/handlers/skills.ts +5 -1
- package/src/daemon/lifecycle.ts +33 -68
- package/src/daemon/message-types/computer-use.ts +2 -34
- package/src/daemon/message-types/conversations.ts +49 -0
- package/src/daemon/message-types/messages.ts +12 -0
- package/src/daemon/server.ts +5 -3
- package/src/daemon/shutdown-handlers.ts +2 -12
- package/src/daemon/tool-side-effects.ts +14 -56
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +160 -0
- package/src/heartbeat/heartbeat-service.ts +24 -1
- package/src/home/__tests__/feed-population-integration.test.ts +312 -0
- package/src/home/emit-feed-event.ts +7 -0
- package/src/home/feed-types.ts +41 -2
- package/src/home/rewrite-command-preview.ts +66 -0
- package/src/ipc/__tests__/socket-path.test.ts +11 -50
- package/src/ipc/cli-client.ts +1 -1
- package/src/ipc/cli-server.ts +3 -3
- package/src/ipc/gateway-client.ts +4 -1
- package/src/ipc/routes/browser-context.ts +2 -0
- package/src/ipc/routes/browser.ts +1 -0
- package/src/ipc/routes/get-contact.ts +16 -0
- package/src/ipc/routes/index.ts +14 -0
- 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/upsert-contact.ts +25 -0
- package/src/ipc/socket-path.ts +14 -38
- 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/conversation-crud.ts +48 -18
- package/src/memory/conversation-queries.ts +57 -4
- package/src/memory/conversation-title-service.ts +25 -0
- package/src/memory/db-init.ts +8 -0
- 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/extraction.ts +10 -2
- package/src/memory/graph/graph-search.test.ts +1 -0
- package/src/memory/graph/inspect.ts +2 -2
- package/src/memory/graph/retriever.ts +10 -3
- package/src/memory/migrations/041-approval-prompt-ts-tracker.ts +26 -0
- package/src/memory/migrations/149-oauth-tables.ts +1 -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 +4 -0
- package/src/memory/pkb/pkb-index.test.ts +1 -0
- package/src/memory/pkb/pkb-reconcile.test.ts +1 -0
- package/src/memory/pkb/pkb-search.test.ts +65 -4
- package/src/memory/pkb/pkb-search.ts +40 -18
- package/src/memory/qdrant-client.test.ts +60 -0
- package/src/memory/qdrant-client.ts +25 -0
- package/src/memory/schema/infrastructure.ts +1 -0
- package/src/memory/schema/oauth.ts +4 -1
- package/src/messaging/providers/slack/render-transcript.test.ts +77 -29
- package/src/messaging/providers/slack/render-transcript.ts +58 -0
- package/src/notifications/conversation-pairing.ts +78 -19
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/emit-signal.ts +1 -1
- 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 +30 -14
- package/src/oauth/provider-serializer.ts +6 -1
- package/src/oauth/seed-providers.ts +56 -108
- package/src/outbound-proxy/http-forwarder.ts +9 -0
- package/src/permissions/approval-policy.test.ts +293 -18
- package/src/permissions/approval-policy.ts +110 -58
- 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 +414 -2
- package/src/permissions/bash-risk-classifier.ts +303 -60
- package/src/permissions/checker.ts +157 -29
- package/src/permissions/command-registry.test.ts +239 -0
- package/src/permissions/command-registry.ts +234 -54
- package/src/permissions/defaults.ts +5 -4
- package/src/permissions/gateway-threshold-reader.ts +196 -0
- package/src/permissions/prompter.ts +4 -0
- package/src/permissions/risk-types.ts +61 -4
- package/src/permissions/schedule-risk-classifier.test.ts +129 -0
- package/src/permissions/schedule-risk-classifier.ts +85 -0
- package/src/permissions/shell-identity.ts +2 -42
- package/src/permissions/types.ts +2 -0
- package/src/permissions/workspace-policy.ts +8 -3
- 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/templates/BOOTSTRAP.md +27 -77
- package/src/providers/model-catalog.ts +52 -29
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openrouter/client.ts +5 -1
- 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/xai-realtime.test.ts +72 -4
- package/src/providers/speech-to-text/xai-realtime.ts +39 -14
- package/src/runtime/AGENTS.md +25 -16
- 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/client-registry.ts +261 -0
- package/src/runtime/http-server.ts +77 -8
- package/src/runtime/http-types.ts +0 -2
- package/src/runtime/migrations/vbundle-builder.ts +1 -22
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +51 -31
- package/src/runtime/routes/approval-routes.ts +17 -0
- package/src/runtime/routes/browser-extension-pair-routes.ts +27 -8
- package/src/runtime/routes/conversation-routes.ts +223 -116
- package/src/runtime/routes/inbound-message-handler.ts +88 -13
- package/src/runtime/routes/memory-item-routes.test.ts +1 -0
- package/src/runtime/routes/migration-routes.ts +0 -3
- 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/skill-route-registry.ts +75 -15
- package/src/schedule/run-script.ts +68 -0
- package/src/schedule/schedule-store.ts +7 -1
- package/src/schedule/scheduler.ts +48 -8
- package/src/skills/catalog-cache.ts +12 -5
- package/src/tools/browser/__tests__/browser-status.test.ts +189 -0
- package/src/tools/browser/browser-execution.ts +88 -19
- 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/extension-cdp-client.ts +54 -3
- package/src/tools/browser/cdp-client/factory.ts +15 -4
- package/src/tools/executor.ts +126 -74
- package/src/tools/network/script-proxy/session-manager.ts +37 -1
- package/src/tools/permission-checker.ts +98 -49
- package/src/tools/policy-context.ts +4 -0
- package/src/tools/registry.ts +140 -3
- 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/system/avatar-generator.ts +6 -2
- package/src/tools/types.ts +28 -2
- package/src/util/platform.ts +7 -2
- package/src/util/pricing.ts +26 -3
- 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/041-backfill-google-gmail-settings-scope.ts +3 -4
- 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/registry.ts +12 -0
- 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__/compaction-circuit-breaker.test.ts +0 -336
- package/src/__tests__/context-overflow-approval.test.ts +0 -156
- 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__/send-notification-tool.test.ts +0 -83
- package/src/cli/commands/shotgun.ts +0 -266
- 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 -88
- 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/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/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/runtime/gateway-internal-client.ts +0 -94
- package/src/runtime/routes/watch-routes.ts +0 -156
- 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
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Echo plugin
|
|
2
|
+
|
|
3
|
+
Minimal example plugin. Observes every assistant pipeline and logs one JSON
|
|
4
|
+
line per invocation to `stderr`:
|
|
5
|
+
|
|
6
|
+
```json
|
|
7
|
+
{"plugin":"echo","pipeline":"toolExecute","durationMs":42,"outcome":"success"}
|
|
8
|
+
{"plugin":"echo","pipeline":"llmCall","durationMs":1873,"outcome":"success"}
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Use this as a starting point for writing your own plugin, or as a quick way
|
|
12
|
+
to eyeball which pipelines fire during a conversation and how long they
|
|
13
|
+
take.
|
|
14
|
+
|
|
15
|
+
For the full plugin authoring guide, see
|
|
16
|
+
[`assistant/docs/plugins.md`](../../../docs/plugins.md).
|
|
17
|
+
|
|
18
|
+
## What it does
|
|
19
|
+
|
|
20
|
+
- Registers one observer middleware per slot in
|
|
21
|
+
`PipelineMiddlewareMap` — `turn`, `llmCall`, `toolExecute`,
|
|
22
|
+
`memoryRetrieval`, `historyRepair`, `tokenEstimate`, `compaction`,
|
|
23
|
+
`overflowReduce`, `persistence`, `titleGenerate`, `toolResultTruncate`,
|
|
24
|
+
`emptyResponse`, `toolError`, and `circuitBreaker`.
|
|
25
|
+
- Each middleware calls `next(args)` to pass the request through unchanged,
|
|
26
|
+
measures wall-clock duration, and emits one line to `stderr` whether the
|
|
27
|
+
downstream succeeded or threw.
|
|
28
|
+
- Never modifies arguments, never rewrites results, never swallows errors.
|
|
29
|
+
It is purely observational — safe to stack alongside any other plugin.
|
|
30
|
+
|
|
31
|
+
## Install locally
|
|
32
|
+
|
|
33
|
+
The assistant scans `~/.vellum/plugins/*` for subdirectories containing a
|
|
34
|
+
`register.{ts,js}` file and dynamic-imports each one during assistant
|
|
35
|
+
startup. Dropping (or symlinking) this directory in place is enough to
|
|
36
|
+
enable it.
|
|
37
|
+
|
|
38
|
+
### Option 1 — symlink from the repo (recommended)
|
|
39
|
+
|
|
40
|
+
From the repo root:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
mkdir -p ~/.vellum/plugins
|
|
44
|
+
ln -s "$(pwd)/assistant/examples/plugins/echo" ~/.vellum/plugins/echo
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Symlinks let you edit the plugin in-place and restart the assistant to
|
|
48
|
+
pick up changes. **This is the only zero-edit install path** — the
|
|
49
|
+
`register.ts` in this directory uses relative imports
|
|
50
|
+
(`../../../src/plugins/registry.js`) that resolve into the in-repo
|
|
51
|
+
assistant sources, so the file must stay reachable at that relative
|
|
52
|
+
location.
|
|
53
|
+
|
|
54
|
+
### Option 2 — standalone copy (requires edits)
|
|
55
|
+
|
|
56
|
+
If you want a fully isolated install that does not depend on a local
|
|
57
|
+
vellum-assistant checkout, a plain `cp -R` of this directory into
|
|
58
|
+
`~/.vellum/plugins/echo/` will **not** work as-is: the relative imports
|
|
59
|
+
in `register.ts` resolve to `~/.vellum/src/plugins/...`, which does not
|
|
60
|
+
exist. The assistant does not currently publish the plugin API as an npm
|
|
61
|
+
package, so to copy-and-adapt this template into a standalone plugin you
|
|
62
|
+
must rewrite the imports in `register.ts` to point at an absolute path
|
|
63
|
+
inside a vellum-assistant checkout, for example:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
// before (repo-local):
|
|
67
|
+
import { registerPlugin } from "../../../src/plugins/registry.js";
|
|
68
|
+
// after (standalone, edit to your checkout path):
|
|
69
|
+
import { registerPlugin } from "/path/to/vellum-assistant/assistant/src/plugins/registry.js";
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Apply the same rewrite to the `import type` line that pulls from
|
|
73
|
+
`../../../src/plugins/types.js`. Until a published package exists, the
|
|
74
|
+
symlink recipe above is simpler and more portable for day-to-day
|
|
75
|
+
development.
|
|
76
|
+
|
|
77
|
+
### Restart the assistant
|
|
78
|
+
|
|
79
|
+
Plugins register at assistant startup. After installing, restart the
|
|
80
|
+
assistant:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
vellum restart
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Verify it works
|
|
87
|
+
|
|
88
|
+
With the plugin installed and the assistant restarted, send any message
|
|
89
|
+
that exercises a pipeline — a conversation turn, a tool call, a title
|
|
90
|
+
generation — and tail the assistant's stderr log:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
tail -f ~/.vellum/daemon.log
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
You should see one line per pipeline invocation, similar to:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{"plugin":"echo","pipeline":"persistence","durationMs":3,"outcome":"success"}
|
|
100
|
+
{"plugin":"echo","pipeline":"tokenEstimate","durationMs":1,"outcome":"success"}
|
|
101
|
+
{"plugin":"echo","pipeline":"memoryRetrieval","durationMs":64,"outcome":"success"}
|
|
102
|
+
{"plugin":"echo","pipeline":"historyRepair","durationMs":0,"outcome":"success"}
|
|
103
|
+
{"plugin":"echo","pipeline":"llmCall","durationMs":1520,"outcome":"success"}
|
|
104
|
+
{"plugin":"echo","pipeline":"turn","durationMs":1590,"outcome":"success"}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
If a pipeline throws (for example, a tool that errors out), you'll see a
|
|
108
|
+
line with `"outcome":"error"` — the plugin rethrows after logging so the
|
|
109
|
+
original error still propagates.
|
|
110
|
+
|
|
111
|
+
## Uninstall
|
|
112
|
+
|
|
113
|
+
Remove the symlink (or the copied directory) and restart the assistant:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
rm ~/.vellum/plugins/echo
|
|
117
|
+
vellum restart
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Next steps
|
|
121
|
+
|
|
122
|
+
- Read [`assistant/docs/plugins.md`](../../../docs/plugins.md) for the full
|
|
123
|
+
plugin authoring guide: manifest shape, middleware patterns
|
|
124
|
+
(observe / transform / short-circuit / veto), strict-fail semantics, the
|
|
125
|
+
per-pipeline timeout table, credential and config access, and
|
|
126
|
+
troubleshooting.
|
|
127
|
+
- Look at the first-party default plugins under
|
|
128
|
+
`assistant/src/plugins/defaults/` for examples of non-observational
|
|
129
|
+
middleware.
|
|
130
|
+
- Build your own plugin by copying this directory, renaming the manifest
|
|
131
|
+
`name`, and replacing the observer with a middleware that does whatever
|
|
132
|
+
you need.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vellumai/plugin-echo-example",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Example plugin that observes every assistant pipeline and logs one structured line per invocation to stderr. Meant as an authoring reference — not shipped with the assistant runtime.",
|
|
5
|
+
"private": true,
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./register.ts",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=20.12.0"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"@types/bun": "1.3.10",
|
|
14
|
+
"@types/node": "25.5.0",
|
|
15
|
+
"typescript": "5.9.3"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Echo plugin — observes every assistant pipeline and logs one structured
|
|
3
|
+
* line per invocation to stderr.
|
|
4
|
+
*
|
|
5
|
+
* This plugin is bundled in the repository as an authoring reference. It is
|
|
6
|
+
* not shipped with the assistant runtime; to try it locally, symlink this
|
|
7
|
+
* directory into `~/.vellum/plugins/echo/` and restart the assistant. See
|
|
8
|
+
* `README.md` in this directory for the full install recipe and
|
|
9
|
+
* `assistant/docs/plugins.md` for general plugin authoring docs.
|
|
10
|
+
*
|
|
11
|
+
* ## IMPORTANT — imports below are REPO-LOCAL
|
|
12
|
+
*
|
|
13
|
+
* The relative imports from `../../../src/plugins/...` resolve correctly
|
|
14
|
+
* only while this file lives inside the vellum-assistant repo at
|
|
15
|
+
* `assistant/examples/plugins/echo/`. The path walks back to
|
|
16
|
+
* `assistant/src/plugins/` so the example compiles against the assistant's
|
|
17
|
+
* in-repo types.
|
|
18
|
+
*
|
|
19
|
+
* If you copy (rather than symlink) this directory to
|
|
20
|
+
* `~/.vellum/plugins/echo/`, these imports will fail because
|
|
21
|
+
* `~/.vellum/src/plugins/...` does not exist. The assistant does not
|
|
22
|
+
* currently publish the plugin API as an npm package, so the only
|
|
23
|
+
* zero-edit install path is the symlink recipe (Option 1 in README.md).
|
|
24
|
+
*
|
|
25
|
+
* For a standalone copy that lives outside the repo, you must either:
|
|
26
|
+
* - Point the imports at an absolute path into a vellum-assistant checkout
|
|
27
|
+
* (`/path/to/vellum-assistant/assistant/src/plugins/registry.js`), or
|
|
28
|
+
* - Rewrite the plugin to consume only the public types you need and drop
|
|
29
|
+
* the direct registry import in favor of your own entry-point wiring.
|
|
30
|
+
*
|
|
31
|
+
* See README.md "Option 2 — standalone copy" for the recommended
|
|
32
|
+
* standalone-template adaptation steps.
|
|
33
|
+
*
|
|
34
|
+
* ## Design
|
|
35
|
+
*
|
|
36
|
+
* - Registers an observer middleware on every slot of `PipelineMiddlewareMap`.
|
|
37
|
+
* - Each middleware records a start timestamp, calls `next(args)`, and on
|
|
38
|
+
* return — whether successful or not — emits one JSON line on `stderr` with
|
|
39
|
+
* `{ plugin, pipeline, durationMs, outcome }`. A `try { return await next(); }
|
|
40
|
+
* catch { outcome = "error"; rethrow; } finally { log(); }` pattern keeps the
|
|
41
|
+
* observation strictly non-interfering: the plugin never swallows errors
|
|
42
|
+
* and never rewrites arguments or results.
|
|
43
|
+
* - Middleware is declared as async functions with stable names so the
|
|
44
|
+
* pipeline runner's `chain` log field attributes them correctly.
|
|
45
|
+
*
|
|
46
|
+
* The file exports no named symbols at module level — it only runs
|
|
47
|
+
* `registerPlugin(echoPlugin)` as an import-time side effect, matching the
|
|
48
|
+
* user-plugin-loader contract (see `assistant/src/plugins/user-loader.ts`).
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
import { registerPlugin } from "../../../src/plugins/registry.js";
|
|
52
|
+
import type {
|
|
53
|
+
CircuitBreakerArgs,
|
|
54
|
+
CircuitBreakerResult,
|
|
55
|
+
CompactionArgs,
|
|
56
|
+
CompactionResult,
|
|
57
|
+
EmptyResponseArgs,
|
|
58
|
+
EmptyResponseResult,
|
|
59
|
+
HistoryRepairArgs,
|
|
60
|
+
HistoryRepairResult,
|
|
61
|
+
LLMCallArgs,
|
|
62
|
+
LLMCallResult,
|
|
63
|
+
MemoryArgs,
|
|
64
|
+
MemoryResult,
|
|
65
|
+
OverflowReduceArgs,
|
|
66
|
+
OverflowReduceResult,
|
|
67
|
+
PersistArgs,
|
|
68
|
+
PersistResult,
|
|
69
|
+
Plugin,
|
|
70
|
+
TitleArgs,
|
|
71
|
+
TitleResult,
|
|
72
|
+
TokenEstimateArgs,
|
|
73
|
+
TokenEstimateResult,
|
|
74
|
+
ToolErrorArgs,
|
|
75
|
+
ToolErrorResult,
|
|
76
|
+
ToolExecuteArgs,
|
|
77
|
+
ToolExecuteResult,
|
|
78
|
+
ToolResultTruncateArgs,
|
|
79
|
+
ToolResultTruncateResult,
|
|
80
|
+
TurnArgs,
|
|
81
|
+
TurnResult,
|
|
82
|
+
} from "../../../src/plugins/types.js";
|
|
83
|
+
|
|
84
|
+
const PLUGIN_NAME = "echo";
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* One line written to stderr per pipeline invocation. Kept intentionally
|
|
88
|
+
* compact — pino-style JSON so operators can pipe the assistant's stderr
|
|
89
|
+
* through `jq` without reshaping.
|
|
90
|
+
*/
|
|
91
|
+
function emit(
|
|
92
|
+
pipelineName: string,
|
|
93
|
+
startMs: number,
|
|
94
|
+
outcome: "success" | "error",
|
|
95
|
+
): void {
|
|
96
|
+
const durationMs = Math.round(performance.now() - startMs);
|
|
97
|
+
const record = {
|
|
98
|
+
plugin: PLUGIN_NAME,
|
|
99
|
+
pipeline: pipelineName,
|
|
100
|
+
durationMs,
|
|
101
|
+
outcome,
|
|
102
|
+
};
|
|
103
|
+
process.stderr.write(`${JSON.stringify(record)}\n`);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Factory for a pipeline-agnostic observer middleware. The returned function
|
|
108
|
+
* carries a `name` so `runPipeline`'s `chain` log field attributes this
|
|
109
|
+
* plugin's frame correctly. Error paths rethrow — the plugin is purely
|
|
110
|
+
* observational and must never change the turn's outcome.
|
|
111
|
+
*/
|
|
112
|
+
function makeObserver<A, R>(
|
|
113
|
+
pipelineName: string,
|
|
114
|
+
): (args: A, next: (args: A) => Promise<R>, _ctx: unknown) => Promise<R> {
|
|
115
|
+
const fn = async function echoObserver(
|
|
116
|
+
args: A,
|
|
117
|
+
next: (args: A) => Promise<R>,
|
|
118
|
+
_ctx: unknown,
|
|
119
|
+
): Promise<R> {
|
|
120
|
+
const start = performance.now();
|
|
121
|
+
let outcome: "success" | "error" = "success";
|
|
122
|
+
try {
|
|
123
|
+
return await next(args);
|
|
124
|
+
} catch (err) {
|
|
125
|
+
outcome = "error";
|
|
126
|
+
throw err;
|
|
127
|
+
} finally {
|
|
128
|
+
emit(pipelineName, start, outcome);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
return fn;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* The echo plugin. Declares one middleware per slot in
|
|
136
|
+
* `PipelineMiddlewareMap` — all thin observers produced by `makeObserver`.
|
|
137
|
+
*
|
|
138
|
+
* Manifest:
|
|
139
|
+
* - `requires.pluginRuntime: "v1"` satisfies the registry's mandatory
|
|
140
|
+
* capability negotiation.
|
|
141
|
+
* - `provides: {}` — the plugin exposes no capabilities to other plugins.
|
|
142
|
+
* - No `requiresCredential` or `requiresFlag` — the plugin needs no external
|
|
143
|
+
* state and runs unconditionally.
|
|
144
|
+
*/
|
|
145
|
+
const echoPlugin: Plugin = {
|
|
146
|
+
manifest: {
|
|
147
|
+
name: PLUGIN_NAME,
|
|
148
|
+
version: "0.1.0",
|
|
149
|
+
provides: {},
|
|
150
|
+
requires: { pluginRuntime: "v1" },
|
|
151
|
+
},
|
|
152
|
+
middleware: {
|
|
153
|
+
turn: makeObserver<TurnArgs, TurnResult>("turn"),
|
|
154
|
+
llmCall: makeObserver<LLMCallArgs, LLMCallResult>("llmCall"),
|
|
155
|
+
toolExecute: makeObserver<ToolExecuteArgs, ToolExecuteResult>(
|
|
156
|
+
"toolExecute",
|
|
157
|
+
),
|
|
158
|
+
memoryRetrieval: makeObserver<MemoryArgs, MemoryResult>("memoryRetrieval"),
|
|
159
|
+
historyRepair: makeObserver<HistoryRepairArgs, HistoryRepairResult>(
|
|
160
|
+
"historyRepair",
|
|
161
|
+
),
|
|
162
|
+
tokenEstimate: makeObserver<TokenEstimateArgs, TokenEstimateResult>(
|
|
163
|
+
"tokenEstimate",
|
|
164
|
+
),
|
|
165
|
+
compaction: makeObserver<CompactionArgs, CompactionResult>("compaction"),
|
|
166
|
+
overflowReduce: makeObserver<OverflowReduceArgs, OverflowReduceResult>(
|
|
167
|
+
"overflowReduce",
|
|
168
|
+
),
|
|
169
|
+
persistence: makeObserver<PersistArgs, PersistResult>("persistence"),
|
|
170
|
+
titleGenerate: makeObserver<TitleArgs, TitleResult>("titleGenerate"),
|
|
171
|
+
toolResultTruncate: makeObserver<
|
|
172
|
+
ToolResultTruncateArgs,
|
|
173
|
+
ToolResultTruncateResult
|
|
174
|
+
>("toolResultTruncate"),
|
|
175
|
+
emptyResponse: makeObserver<EmptyResponseArgs, EmptyResponseResult>(
|
|
176
|
+
"emptyResponse",
|
|
177
|
+
),
|
|
178
|
+
toolError: makeObserver<ToolErrorArgs, ToolErrorResult>("toolError"),
|
|
179
|
+
circuitBreaker: makeObserver<CircuitBreakerArgs, CircuitBreakerResult>(
|
|
180
|
+
"circuitBreaker",
|
|
181
|
+
),
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
// Side-effect registration — the user-plugin loader dynamic-imports this
|
|
186
|
+
// file and expects the registry to pick up the plugin during that import.
|
|
187
|
+
registerPlugin(echoPlugin);
|
|
@@ -197,12 +197,19 @@ export type PolicyDecision =
|
|
|
197
197
|
/**
|
|
198
198
|
* Callback invoked by the proxy HTTP forwarder for each outbound request.
|
|
199
199
|
* Returns injected headers on allow, or `null` to block the request.
|
|
200
|
+
*
|
|
201
|
+
* `method` and `requestHeaders` are populated for plain-HTTP proxied
|
|
202
|
+
* requests (absolute-URL form). For HTTPS CONNECT tunnels the proxy has
|
|
203
|
+
* not yet terminated TLS and cannot see HTTP-level details, so these are
|
|
204
|
+
* left undefined.
|
|
200
205
|
*/
|
|
201
206
|
export type PolicyCallback = (
|
|
202
207
|
hostname: string,
|
|
203
208
|
port: number | null,
|
|
204
209
|
path: string,
|
|
205
210
|
scheme: "http" | "https",
|
|
211
|
+
method?: string,
|
|
212
|
+
requestHeaders?: Record<string, string | string[] | undefined>,
|
|
206
213
|
) => Promise<Record<string, string> | null>;
|
|
207
214
|
|
|
208
215
|
/**
|
|
@@ -216,6 +223,18 @@ export interface ProxyApprovalRequest {
|
|
|
216
223
|
| PolicyDecisionAskUnauthenticated;
|
|
217
224
|
/** The proxy session ID that originated the request. */
|
|
218
225
|
sessionId: ProxySessionId;
|
|
226
|
+
/**
|
|
227
|
+
* HTTP method of the incoming request, when available. Undefined for HTTPS
|
|
228
|
+
* CONNECT tunnels — at CONNECT time the proxy has not terminated TLS so
|
|
229
|
+
* no HTTP-level information is visible.
|
|
230
|
+
*/
|
|
231
|
+
method?: string;
|
|
232
|
+
/**
|
|
233
|
+
* Curated subset of request headers, when available. Only non-sensitive
|
|
234
|
+
* headers are surfaced (content-type, content-length, user-agent, accept).
|
|
235
|
+
* Undefined for HTTPS CONNECT tunnels.
|
|
236
|
+
*/
|
|
237
|
+
requestHeaders?: Record<string, string>;
|
|
219
238
|
}
|
|
220
239
|
|
|
221
240
|
/**
|