@vellumai/assistant 0.9.0 → 0.10.0-staging.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +18 -34
- package/bun.lock +7 -8
- package/docs/activation-funnel-telemetry.md +28 -22
- package/docs/architecture/security.md +29 -28
- package/docs/stt-provider-onboarding.md +3 -5
- package/docs/workflows-testing.md +13 -44
- package/docs/workflows.md +3 -5
- package/node_modules/@vellumai/ces-client/src/__tests__/ces-client.test.ts +47 -0
- package/node_modules/@vellumai/ces-client/src/rpc-client.ts +28 -5
- package/node_modules/@vellumai/environments/src/seeds.ts +2 -5
- package/node_modules/@vellumai/gateway-client/src/admission-policy-contract.ts +97 -0
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +10 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +32 -6
- package/node_modules/@vellumai/gateway-client/src/outbound-contract.ts +119 -0
- package/node_modules/@vellumai/gateway-client/src/types.ts +15 -84
- package/openapi.yaml +976 -63
- package/package.json +2 -1
- package/scripts/sync-llm-catalog.ts +6 -15
- package/scripts/sync-web-search-catalog.ts +3 -11
- package/src/__tests__/access-request-card-view.test.ts +98 -0
- package/src/__tests__/access-request-seed-content-blocks.test.ts +2 -4
- package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +72 -32
- package/src/__tests__/agent-loop-compaction-strip.test.ts +241 -0
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +16 -13
- package/src/__tests__/agent-loop-output-hooks.test.ts +69 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +25 -0
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -3
- package/src/__tests__/app-compiler.test.ts +15 -1
- package/src/__tests__/app-dir-path-guard.test.ts +0 -1
- package/src/__tests__/assistant-feature-flag-guard.test.ts +1 -4
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
- package/src/__tests__/auth-fallback-events-store.test.ts +6 -14
- package/src/__tests__/avatar-identity-sync.test.ts +2 -27
- package/src/__tests__/btw-routes.test.ts +6 -8
- package/src/__tests__/call-pointer-messages.test.ts +28 -0
- package/src/__tests__/cancel-clears-processing.test.ts +89 -0
- package/src/__tests__/channel-approval-routes.test.ts +0 -4
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +5 -15
- package/src/__tests__/checker.test.ts +0 -3
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +3 -4
- package/src/__tests__/compactor-image-manifest-trust.test.ts +21 -1
- package/src/__tests__/compactor-summary-call-truncation.test.ts +223 -0
- package/src/__tests__/config-loader-backfill.test.ts +268 -27
- package/src/__tests__/config-schema.test.ts +35 -0
- package/src/__tests__/config-watcher.test.ts +0 -18
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +2 -2
- package/src/__tests__/contact-store-user-file.test.ts +0 -6
- package/src/__tests__/contacts-tools.test.ts +29 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +22 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -0
- package/src/__tests__/conversation-agent-loop.test.ts +58 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +0 -1
- package/src/__tests__/conversation-lifecycle.test.ts +7 -9
- package/src/__tests__/conversation-load-history-repair.test.ts +101 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +15 -12
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +6 -3
- package/src/__tests__/conversation-title-service.test.ts +62 -0
- package/src/__tests__/credential-broker.test.ts +449 -1
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +18 -11
- package/src/__tests__/credential-execution-tools.test.ts +0 -1
- package/src/__tests__/credential-prompt-route.test.ts +4 -4
- package/src/__tests__/credential-routes.test.ts +360 -0
- package/src/__tests__/credential-security-invariants.test.ts +4 -13
- package/src/__tests__/disk-pressure-policy.test.ts +12 -0
- package/src/__tests__/disk-usage.test.ts +65 -0
- package/src/__tests__/dynamic-page-surface.test.ts +152 -1
- package/src/__tests__/fixtures/credential-security-fixtures.ts +2 -33
- package/src/__tests__/gateway-flag-listener.test.ts +110 -1
- package/src/__tests__/gateway-only-guard.test.ts +3 -7
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-card-withdrawal.test.ts +403 -0
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +5 -3
- package/src/__tests__/guardian-grant-minting.test.ts +3 -35
- package/src/__tests__/guardian-routing-invariants.test.ts +64 -26
- package/src/__tests__/guardian-routing-state.test.ts +0 -1
- package/src/__tests__/headless-browser-mode.test.ts +10 -0
- package/src/__tests__/headless-browser-navigate.test.ts +8 -3
- package/src/__tests__/helpers/create-guardian-binding.ts +0 -1
- package/src/__tests__/host-browser-proxy.test.ts +87 -0
- package/src/__tests__/identity-routes.test.ts +0 -189
- package/src/__tests__/inbound-invite-redemption.test.ts +4 -4
- package/src/__tests__/injector-v3-suppression.test.ts +27 -20
- package/src/__tests__/internal-telemetry-routes.test.ts +6 -14
- package/src/__tests__/invite-redemption-service.test.ts +4 -7
- package/src/__tests__/llm-callsite-catalog.test.ts +5 -6
- package/src/__tests__/llm-catalog-parity.test.ts +30 -23
- package/src/__tests__/llm-resolver.test.ts +70 -24
- package/src/__tests__/llm-schema.test.ts +1 -0
- package/src/__tests__/managed-profile-guard.test.ts +163 -4
- package/src/__tests__/mcp-health-check.test.ts +6 -7
- package/src/__tests__/media-stream-server-integration.test.ts +317 -13
- package/src/__tests__/oauth-provider-seed-logos.test.ts +4 -6
- package/src/__tests__/onboarding-persona-write.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +34 -0
- package/src/__tests__/persona-resolver.test.ts +49 -14
- package/src/__tests__/plugin-api-model-profiles.test.ts +178 -0
- package/src/__tests__/plugin-api-provider.test.ts +24 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +6 -3
- package/src/__tests__/post-compaction-reinjection-idempotency.test.ts +214 -0
- package/src/__tests__/provider-send-message-override-profile.test.ts +76 -0
- package/src/__tests__/reaction-persistence.test.ts +150 -29
- package/src/__tests__/registry.test.ts +2 -7
- package/src/__tests__/relay-server.test.ts +285 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
- package/src/__tests__/schedule-routes-workflow-validation.test.ts +1 -10
- package/src/__tests__/schedule-routes.test.ts +0 -30
- package/src/__tests__/schedule-tools.test.ts +2 -18
- package/src/__tests__/scheduler-reuse-conversation.test.ts +8 -5
- package/src/__tests__/skill-execute-input.test.ts +51 -1
- package/src/__tests__/skill-runtime-path.test.ts +2 -3
- package/src/__tests__/skills.test.ts +51 -0
- package/src/__tests__/slack-notification-approval-card.test.ts +176 -0
- package/src/__tests__/slack-reaction-canonical-approval.test.ts +285 -0
- package/src/__tests__/subagent-tools.test.ts +266 -0
- package/src/__tests__/surface-completion-nudge-hook.test.ts +367 -0
- package/src/__tests__/task-progress-nudge-hook.test.ts +1 -1
- package/src/__tests__/title-generate-hook.test.ts +100 -3
- package/src/__tests__/token-estimator-accuracy.benchmark.test.ts +1 -29
- package/src/__tests__/token-manager.test.ts +519 -0
- package/src/__tests__/tool-approval-seed-content-blocks.test.ts +1 -1
- package/src/__tests__/tool-audit-listener.test.ts +7 -7
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +6 -3
- package/src/__tests__/tool-executor.test.ts +0 -79
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +4 -2
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +220 -3
- package/src/__tests__/trusted-contact-multichannel.test.ts +3 -3
- package/src/__tests__/trusted-contact-verification.test.ts +8 -10
- package/src/__tests__/twilio-routes.test.ts +81 -1
- package/src/__tests__/voice-invite-redemption.test.ts +2 -3
- package/src/__tests__/weak-open-model.test.ts +30 -0
- package/src/__tests__/web-search-catalog-parity.test.ts +6 -25
- package/src/__tests__/workspace-greetings.test.ts +152 -0
- package/src/__tests__/workspace-migration-105-enable-memory-v3-live-for-new-workspaces.test.ts +149 -0
- package/src/__tests__/workspace-migration-108-drop-balanced-economy-profile.test.ts +285 -0
- package/src/__tests__/workspace-migration-add-send-diagnostics.test.ts +1 -1
- package/src/__tests__/workspace-migration-drop-collect-usage-data.test.ts +118 -0
- package/src/__tests__/workspace-migration-drop-send-diagnostics.test.ts +118 -0
- package/src/a2a/__tests__/e2e-a2a-channel.test.ts +0 -4
- package/src/agent/loop.ts +49 -29
- package/src/api/README.md +6 -6
- package/src/api/events/tool-result.ts +6 -0
- package/src/api/events/workflow-completed.ts +53 -0
- package/src/api/events/workflow-leaf-finished.ts +38 -0
- package/src/api/events/workflow-leaf-started.ts +35 -0
- package/src/api/events/workflow-progress.ts +32 -0
- package/src/api/events/workflow-started.ts +31 -0
- package/src/api/index.ts +40 -0
- package/src/api/responses/conversation-message.ts +28 -4
- package/src/api/responses/home.ts +26 -4
- package/src/api/responses/workflow-journal.ts +53 -0
- package/src/approvals/guardian-card-withdrawal.ts +145 -0
- package/src/approvals/guardian-decision-primitive.ts +26 -3
- package/src/approvals/guardian-request-resolvers.ts +183 -80
- package/src/calls/__tests__/channel-admission-reader.test.ts +132 -0
- package/src/calls/__tests__/relay-setup-router.test.ts +350 -0
- package/src/calls/call-pointer-messages.ts +10 -4
- package/src/calls/channel-admission-reader.ts +104 -0
- package/src/calls/guardian-dispatch.ts +17 -45
- package/src/calls/media-stream-server.ts +84 -2
- package/src/calls/relay-access-wait.ts +1 -1
- package/src/calls/relay-server.ts +66 -0
- package/src/calls/relay-setup-router.ts +82 -1
- package/src/calls/twilio-routes.ts +17 -8
- package/src/calls/voice-session-bridge.ts +2 -2
- package/src/cli/commands/clients.ts +3 -0
- package/src/cli/commands/{__tests__ → memory/__tests__}/memory-v2-compare-render.test.ts +1 -1
- package/src/cli/commands/{__tests__ → memory/__tests__}/memory-v2.test.ts +8 -7
- package/src/cli/commands/{__tests__ → memory/__tests__}/memory-v3.test.ts +5 -4
- package/src/cli/commands/memory/index.ts +30 -0
- package/src/cli/commands/{memory-v2-compare-render.ts → memory/memory-v2-compare-render.ts} +1 -1
- package/src/cli/commands/{memory-v2.ts → memory/memory-v2.ts} +6 -15
- package/src/cli/commands/{memory-v3.ts → memory/memory-v3.ts} +97 -11
- package/src/cli/commands/oauth/status.test.ts +36 -0
- package/src/cli/commands/oauth/status.ts +23 -3
- package/src/cli/commands/plugins.ts +197 -4
- package/src/cli/lib/__tests__/diff-plugin.test.ts +443 -0
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +54 -0
- package/src/cli/lib/__tests__/merge-plugin-tree.test.ts +443 -0
- package/src/cli/lib/__tests__/plugin-surfaces.test.ts +111 -0
- package/src/cli/lib/__tests__/upgrade-plugin.test.ts +295 -2
- package/src/cli/lib/diff-plugin.ts +346 -0
- package/src/cli/lib/inspect-plugin.ts +12 -1
- package/src/cli/lib/install-from-github.ts +105 -17
- package/src/cli/lib/merge-plugin-tree.ts +328 -0
- package/src/cli/lib/plugin-fingerprint.ts +14 -0
- package/src/cli/lib/plugin-surfaces.ts +104 -0
- package/src/cli/lib/upgrade-plugin.ts +298 -10
- package/src/cli/program.ts +2 -6
- package/src/config/__tests__/sync-gated-profiles.test.ts +368 -0
- package/src/config/assistant-feature-flags.ts +22 -7
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +0 -1
- package/src/config/bundled-skills/messaging/SKILL.md +6 -4
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +9 -8
- package/src/config/bundled-skills/subagent/SKILL.md +4 -0
- package/src/config/bundled-skills/subagent/TOOLS.json +4 -0
- package/src/config/bundled-skills/workflows/SKILL.md +14 -8
- package/src/config/bundled-tool-registry.ts +2 -7
- package/src/config/call-site-defaults.ts +15 -2
- package/src/config/feature-flag-registry.json +46 -31
- package/src/config/inference-profile-validation.ts +26 -0
- package/src/config/llm-resolver.ts +3 -0
- package/src/config/loader.ts +4 -0
- package/src/config/memory-v3-gate.ts +11 -0
- package/src/config/profile-order.ts +28 -0
- package/src/config/schema.ts +8 -6
- package/src/config/schemas/__tests__/memory-v3.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +7 -0
- package/src/config/schemas/channels.ts +11 -0
- package/src/config/schemas/elevenlabs.ts +0 -1
- package/src/config/schemas/llm.ts +31 -0
- package/src/config/schemas/memory-lifecycle.ts +3 -7
- package/src/config/schemas/memory-v3.ts +6 -0
- package/src/config/schemas/platform.ts +0 -8
- package/src/config/schemas/services.ts +18 -0
- package/src/config/seed-inference-profiles.ts +109 -44
- package/src/config/skills.ts +21 -0
- package/src/config/sync-gated-profiles.ts +220 -0
- package/src/contacts/contact-store.ts +89 -106
- package/src/contacts/contacts-write.ts +5 -22
- package/src/contacts/types.ts +0 -1
- package/src/context/compactor.ts +88 -54
- package/src/context/strip-injections.ts +58 -10
- package/src/context/token-estimator.ts +1 -1
- package/src/credential-execution/process-manager.ts +55 -14
- package/src/credential-execution/prompted-credential.ts +2 -3
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -2
- package/src/daemon/config-watcher.ts +0 -4
- package/src/daemon/conversation-agent-loop-handlers.ts +2 -0
- package/src/daemon/conversation-agent-loop.ts +114 -22
- package/src/daemon/conversation-history.ts +1 -1
- package/src/daemon/conversation-lifecycle.ts +3 -5
- package/src/daemon/conversation-process.ts +13 -5
- package/src/daemon/conversation-runtime-assembly.ts +13 -15
- package/src/daemon/conversation-slash.ts +2 -23
- package/src/daemon/conversation-surfaces.ts +26 -0
- package/src/daemon/conversation-tool-setup.ts +27 -14
- package/src/daemon/conversation.ts +66 -14
- package/src/daemon/disk-pressure-policy.ts +5 -3
- package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +0 -1
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +0 -1
- package/src/daemon/handlers/config-a2a.ts +0 -2
- package/src/daemon/handlers/config-channels.ts +15 -16
- package/src/daemon/handlers/config-slack-channel.ts +22 -3
- package/src/daemon/handlers/conversations.ts +107 -0
- package/src/daemon/host-browser-proxy.ts +41 -0
- package/src/daemon/lifecycle.ts +55 -27
- package/src/daemon/message-provenance.ts +2 -0
- package/src/daemon/message-types/contacts.ts +0 -1
- package/src/daemon/message-types/conversations.ts +3 -3
- package/src/daemon/message-types/sync.ts +0 -1
- package/src/daemon/message-types/web-activity.ts +7 -1
- package/src/daemon/message-types/workflows.ts +83 -1
- package/src/daemon/orphan-reaper.test.ts +0 -19
- package/src/daemon/orphan-reaper.ts +2 -24
- package/src/daemon/server.ts +0 -10
- package/src/daemon/tool-setup-types.ts +4 -0
- package/src/daemon/trust-context.ts +1 -1
- package/src/events/tool-audit-listener.ts +2 -2
- package/src/home/feed-source-enrichment.test.ts +151 -0
- package/src/home/feed-source-enrichment.ts +176 -0
- package/src/home/relationship-state.ts +2 -4
- package/src/instrument.ts +18 -6
- package/src/ipc/__tests__/binary-result-ipc.test.ts +81 -0
- package/src/ipc/__tests__/clients-list-ipc.test.ts +20 -0
- package/src/ipc/assistant-server.ts +37 -4
- package/src/ipc/gateway-flag-listener.ts +18 -2
- package/src/memory/__tests__/auto-analysis-enqueue.test.ts +5 -16
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +7 -11
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +37 -7
- package/src/memory/__tests__/memory-retrospective-job.test.ts +229 -401
- package/src/memory/__tests__/onboarding-events-store.test.ts +7 -7
- package/src/memory/auth-fallback-events-store.ts +2 -2
- package/src/memory/auto-analysis-enqueue.ts +3 -5
- package/src/memory/bookmark-crud.ts +1 -2
- package/src/memory/canonical-guardian-store.ts +39 -1
- package/src/memory/conversation-crud.ts +9 -4
- package/src/memory/conversation-key-store.ts +17 -2
- package/src/memory/conversation-title-service.ts +64 -7
- package/src/memory/db-init.ts +17 -17
- package/src/memory/embedding-backend.ts +38 -1
- package/src/memory/embedding-billing-breaker.ts +96 -0
- package/src/memory/jobs-store.ts +25 -13
- package/src/memory/jobs-worker.ts +54 -1
- package/src/memory/lifecycle-events-store.ts +2 -2
- package/src/memory/memory-retrospective-constants.ts +4 -4
- package/src/memory/memory-retrospective-enqueue.ts +31 -6
- package/src/memory/memory-retrospective-job.ts +28 -227
- package/src/memory/migrations/129-contact-channels-access-fields.ts +18 -9
- package/src/memory/migrations/131-drop-legacy-member-guardian-tables.ts +14 -2
- package/src/memory/migrations/289-contact-channels-unique-ext-user.ts +10 -0
- package/src/memory/migrations/291-contact-channels-renormalize-addresses.ts +72 -0
- package/src/memory/migrations/292-schedule-default-no-reuse-conversation.test.ts +67 -0
- package/src/memory/migrations/292-schedule-default-no-reuse-conversation.ts +25 -0
- package/src/memory/migrations/293-workflow-journal-leaf-tokens.ts +32 -0
- package/src/memory/migrations/294-drop-external-user-id.ts +31 -0
- package/src/memory/migrations/295-drop-approval-prompt-ts-tracker.ts +20 -0
- package/src/memory/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +110 -0
- package/src/memory/migrations/296-rewrite-balanced-economy-profile-pins.ts +68 -0
- package/src/memory/migrations/__tests__/131-drop-legacy-member-guardian-tables.test.ts +154 -0
- package/src/memory/migrations/__tests__/289-contact-channels-unique-ext-user.test.ts +31 -0
- package/src/memory/migrations/__tests__/291-contact-channels-renormalize-addresses.test.ts +341 -0
- package/src/memory/migrations/__tests__/run-migrations.test.ts +52 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/migrations/run-migrations.ts +41 -0
- package/src/memory/migrations/validate-migration-state.ts +1 -1
- package/src/memory/onboarding-events-store.ts +3 -3
- package/src/memory/schema/contacts.ts +0 -5
- package/src/memory/skill-loaded-events-store.test.ts +7 -15
- package/src/memory/skill-loaded-events-store.ts +2 -2
- package/src/memory/tool-executed-events-store.test.ts +7 -7
- package/src/memory/turn-trace-store.test.ts +736 -0
- package/src/memory/turn-trace-store.ts +364 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +8 -0
- package/src/memory/v2/__tests__/skill-content.test.ts +30 -0
- package/src/memory/v2/consolidation-job.ts +2 -2
- package/src/memory/v2/skill-content.ts +25 -7
- package/src/memory/v2/skill-store.ts +7 -1
- package/src/memory/v3-eval/__tests__/eval-packets.test.ts +248 -0
- package/src/memory/v3-eval/eval-packets.ts +546 -0
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/api.ts +31 -0
- package/src/messaging/providers/slack/send.test.ts +114 -2
- package/src/messaging/providers/slack/send.ts +30 -7
- package/src/messaging/providers/slack/withdraw.test.ts +200 -0
- package/src/messaging/providers/slack/withdraw.ts +161 -0
- package/src/notifications/AGENTS.md +2 -0
- package/src/notifications/access-request-copy.ts +72 -59
- package/src/notifications/adapters/shared.ts +29 -0
- package/src/notifications/adapters/slack.ts +58 -103
- package/src/notifications/adapters/telegram.ts +2 -20
- package/src/notifications/approval-card-data.ts +333 -0
- package/src/notifications/broadcaster.ts +16 -3
- package/src/notifications/canonical-delivery-recorder.ts +139 -0
- package/src/notifications/copy-composer.ts +3 -3
- package/src/notifications/decision-engine.ts +4 -2
- package/src/notifications/destination-resolver.ts +4 -6
- package/src/notifications/guardian-question-mode.ts +10 -0
- package/src/notifications/home-feed-side-effect.ts +7 -16
- package/src/notifications/notification-utils.ts +19 -20
- package/src/notifications/signal.ts +79 -43
- package/src/notifications/types.ts +98 -121
- package/src/oauth/AGENTS.md +5 -24
- package/src/permissions/checker.test.ts +51 -0
- package/src/permissions/checker.ts +185 -26
- package/src/permissions/ipc-risk-types.ts +24 -0
- package/src/permissions/question-prompter.test.ts +27 -0
- package/src/permissions/question-prompter.ts +4 -0
- package/src/platform/client.test.ts +119 -0
- package/src/platform/client.ts +66 -0
- package/src/platform/consent-cache.test.ts +267 -0
- package/src/platform/consent-cache.ts +174 -0
- package/src/plugin-api/constants.ts +1 -1
- package/src/plugin-api/index.ts +33 -1
- package/src/plugin-api/model-profiles.ts +33 -0
- package/src/plugin-api/types.ts +50 -2
- package/src/plugins/defaults/advisor/__tests__/advisor-gate.test.ts +56 -0
- package/src/plugins/defaults/advisor/__tests__/advisor-state-store.test.ts +43 -0
- package/src/plugins/defaults/advisor/__tests__/agent-loop-integration.test.ts +137 -0
- package/src/plugins/defaults/advisor/__tests__/consult.test.ts +153 -0
- package/src/plugins/defaults/advisor/__tests__/hooks.test.ts +138 -0
- package/src/plugins/defaults/advisor/__tests__/transcript.test.ts +147 -0
- package/src/plugins/defaults/advisor/advisor-gate.ts +29 -0
- package/src/plugins/defaults/advisor/advisor-state-store.ts +94 -0
- package/src/plugins/defaults/advisor/config.ts +21 -0
- package/src/plugins/defaults/advisor/consult.ts +93 -0
- package/src/plugins/defaults/advisor/hooks/post-model-call.ts +34 -0
- package/src/plugins/defaults/advisor/hooks/pre-model-call.ts +30 -0
- package/src/plugins/defaults/advisor/hooks/user-prompt-submit.ts +19 -0
- package/src/plugins/defaults/advisor/package.json +14 -0
- package/src/plugins/defaults/advisor/steering.ts +67 -0
- package/src/plugins/defaults/advisor/tools/advisor.ts +65 -0
- package/src/plugins/defaults/advisor/transcript.ts +76 -0
- package/src/plugins/defaults/index.ts +60 -0
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +22 -9
- package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +2 -2
- package/src/plugins/defaults/memory-retrieval/tail-reinjection-strip.ts +64 -0
- package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +29 -21
- package/src/plugins/defaults/memory-v3-shadow/__tests__/carry-integration.test.ts +1 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +1 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +129 -9
- package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +31 -4
- package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +77 -2
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +1 -0
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +7 -10
- package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +144 -11
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +32 -20
- package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +56 -3
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +23 -2
- package/src/plugins/defaults/surface-completion-nudge/hooks/post-model-call.ts +276 -0
- package/src/plugins/defaults/surface-completion-nudge/hooks/stop.ts +22 -0
- package/src/plugins/defaults/surface-completion-nudge/nudge-state-store.ts +46 -0
- package/src/plugins/defaults/surface-completion-nudge/package.json +14 -0
- package/src/plugins/defaults/task-progress-nudge/hooks/post-tool-use.ts +3 -13
- package/src/plugins/defaults/title-generate/hooks/stop.ts +56 -21
- package/src/prompts/persona-resolver.ts +14 -4
- package/src/prompts/templates/system-sections.ts +7 -2
- package/src/providers/__tests__/provider-env-vars.test.ts +6 -0
- package/src/providers/__tests__/provider-secret-catalog.test.ts +1 -0
- package/src/providers/__tests__/retry-callsite.test.ts +176 -0
- package/src/providers/atlascloud/client.ts +85 -0
- package/src/providers/fetch-provider-catalog.ts +85 -0
- package/src/providers/inference/adapter-factory.ts +3 -0
- package/src/providers/model-catalog.ts +58 -0
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +33 -0
- package/src/providers/openai/chat-completions-provider.ts +7 -0
- package/src/providers/openai/responses-provider.ts +10 -0
- package/src/providers/provider-send-message.ts +11 -3
- package/src/providers/retry.ts +53 -12
- package/src/providers/search-provider-catalog.ts +10 -0
- package/src/providers/weak-open-model.ts +22 -0
- package/src/runtime/AGENTS.md +0 -1
- package/src/runtime/__tests__/agent-wake.test.ts +181 -0
- package/src/runtime/__tests__/client-health.test.ts +44 -0
- package/src/runtime/access-request-helper.ts +21 -53
- package/src/runtime/actor-trust-resolver.ts +59 -63
- package/src/runtime/agent-wake.ts +52 -0
- package/src/runtime/assistant-event-hub.ts +18 -4
- package/src/runtime/auth/__tests__/route-policy.test.ts +12 -0
- package/src/runtime/auth/require-bound-guardian.ts +1 -4
- package/src/runtime/btw-sidechain.ts +3 -6
- package/src/runtime/capabilities.test.ts +120 -0
- package/src/runtime/capabilities.ts +197 -0
- package/src/runtime/channel-approval-types.ts +22 -45
- package/src/runtime/channel-invite-transports/telegram.ts +4 -4
- package/src/runtime/channel-retry-sweep.ts +1 -0
- package/src/runtime/channel-verification-service.ts +3 -3
- package/src/runtime/client-health.ts +26 -0
- package/src/runtime/confirmation-request-guardian-bridge.ts +38 -29
- package/src/runtime/effective-capabilities.test.ts +128 -0
- package/src/runtime/effective-capabilities.ts +84 -0
- package/src/runtime/guardian-reply-router.ts +106 -21
- package/src/runtime/invite-redemption-service.ts +9 -25
- package/src/runtime/migrations/__tests__/vbundle-builder-fd-leak.test.ts +123 -0
- package/src/runtime/migrations/vbundle-builder.ts +49 -20
- package/src/runtime/pending-interactions.ts +15 -0
- package/src/runtime/routes/__tests__/client-routes.test.ts +13 -0
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +67 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +240 -1
- package/src/runtime/routes/app-routes.ts +1 -1
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +2 -2
- package/src/runtime/routes/assets/vellum-design-system.css +1959 -0
- package/src/runtime/routes/browser-tabs-routes.ts +9 -0
- package/src/runtime/routes/btw-routes.ts +1 -27
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +17 -8
- package/src/runtime/routes/client-routes.ts +10 -0
- package/src/runtime/routes/contact-routes.ts +31 -8
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-management-routes.ts +80 -1
- package/src/runtime/routes/conversation-query-routes.ts +68 -22
- package/src/runtime/routes/conversation-routes.ts +39 -14
- package/src/runtime/routes/credential-routes.ts +40 -16
- package/src/runtime/routes/empty-state-greeting-cache.ts +1 -2
- package/src/runtime/routes/events-routes.ts +1 -3
- package/src/runtime/routes/guardian-approval-interception.ts +14 -73
- package/src/runtime/routes/guardian-approval-prompt.ts +22 -4
- package/src/runtime/routes/home-feed-routes.ts +8 -3
- package/src/runtime/routes/identity-routes.ts +1 -296
- package/src/runtime/routes/inbound-message-handler.ts +214 -228
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +89 -7
- package/src/runtime/routes/inbound-stages/admission-policy.test.ts +154 -0
- package/src/runtime/routes/inbound-stages/admission-policy.ts +140 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +3 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +11 -6
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +1 -2
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +1 -2
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +7 -7
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +47 -28
- package/src/runtime/routes/inbound-stages/reaction-intercept.ts +358 -0
- package/src/runtime/routes/index.ts +2 -0
- package/src/runtime/routes/integrations/slack/__tests__/channel.test.ts +8 -0
- package/src/runtime/routes/integrations/slack/channel.ts +36 -0
- package/src/runtime/routes/internal-telemetry-routes.ts +1 -1
- package/src/runtime/routes/mcp-auth-routes.ts +233 -41
- package/src/runtime/routes/memory-eval-routes.ts +87 -0
- package/src/runtime/routes/notification-routes.ts +122 -133
- package/src/runtime/routes/platform-routes.ts +2 -2
- package/src/runtime/routes/plugins-routes.ts +202 -3
- package/src/runtime/routes/schedule-routes.ts +0 -22
- package/src/runtime/routes/secret-routes.ts +10 -0
- package/src/runtime/routes/surface-action-routes.ts +2 -1
- package/src/runtime/routes/tool-call-question-enrichment.test.ts +146 -0
- package/src/runtime/routes/tool-call-question-enrichment.ts +66 -0
- package/src/runtime/routes/workflow-routes.test.ts +229 -44
- package/src/runtime/routes/workflow-routes.ts +131 -29
- package/src/runtime/routes/workspace-greetings.ts +55 -0
- package/src/runtime/sync/resource-sync-events.ts +1 -11
- package/src/runtime/tool-grant-request-helper.ts +18 -16
- package/src/runtime/trust-context-resolver.ts +8 -5
- package/src/schedule/inference-profile.ts +2 -14
- package/src/schedule/schedule-store.ts +1 -1
- package/src/schedule/scheduler-types.ts +5 -1
- package/src/security/__tests__/provider-key-env-fallback.test.ts +6 -0
- package/src/security/secret-patterns.ts +3 -0
- package/src/subagent/manager.ts +17 -4
- package/src/subagent/types.ts +6 -0
- package/src/telemetry/trace-collection-policy.test.ts +28 -0
- package/src/telemetry/trace-collection-policy.ts +30 -0
- package/src/telemetry/types.ts +89 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +586 -36
- package/src/telemetry/usage-telemetry-reporter.ts +148 -41
- package/src/tools/AGENTS.md +3 -3
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +31 -0
- package/src/tools/browser/browser-execution.ts +30 -19
- package/src/tools/document/document-tool.ts +2 -3
- package/src/tools/executor.ts +5 -3
- package/src/tools/host-terminal/host-shell.ts +5 -4
- package/src/tools/memory/register.ts +2 -2
- package/src/tools/network/__tests__/web-fetch-firecrawl.test.ts +360 -0
- package/src/tools/network/__tests__/web-search.test.ts +143 -0
- package/src/tools/network/web-fetch.ts +372 -1
- package/src/tools/network/web-search-error.ts +1 -1
- package/src/tools/network/web-search.ts +213 -10
- package/src/tools/permission-checker.ts +4 -3
- package/src/tools/registry.ts +20 -0
- package/src/tools/schedule/create.ts +7 -12
- package/src/tools/schedule/update.ts +4 -11
- package/src/tools/shared/filesystem/path-policy.ts +39 -13
- package/src/tools/side-effects.ts +2 -17
- package/src/tools/skills/execute.ts +33 -0
- package/src/tools/subagent/spawn.ts +61 -12
- package/src/tools/terminal/shell.ts +10 -4
- package/src/tools/tool-approval-handler.ts +18 -13
- package/src/tools/tool-manifest.ts +0 -2
- package/src/tools/types.ts +9 -0
- package/src/tools/ui-surface/definitions.ts +64 -3
- package/src/tools/verification-control-plane-policy.ts +3 -1
- package/src/tools/workflows/run-workflow.test.ts +8 -18
- package/src/tools/workflows/run-workflow.ts +1 -0
- package/src/util/disk-usage.ts +78 -23
- package/src/util/platform.ts +10 -3
- package/src/watcher/telemetry.ts +2 -2
- package/src/workflows/capabilities.ts +2 -3
- package/src/workflows/engine.test.ts +175 -1
- package/src/workflows/engine.ts +82 -0
- package/src/workflows/journal-store.test.ts +70 -0
- package/src/workflows/journal-store.ts +18 -3
- package/src/workflows/run-manager.test.ts +171 -28
- package/src/workflows/run-manager.ts +66 -24
- package/src/workspace/migrations/105-enable-memory-v3-live-for-new-workspaces.ts +63 -0
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +47 -0
- package/src/workspace/migrations/107-drop-send-diagnostics.ts +47 -0
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +129 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +0 -98
- package/src/__tests__/credential-security-e2e.test.ts +0 -362
- package/src/__tests__/credential-vault-unit.test.ts +0 -1528
- package/src/__tests__/credential-vault.test.ts +0 -1706
- package/src/__tests__/identity-intro-cache.test.ts +0 -315
- package/src/__tests__/secret-onetime-send.test.ts +0 -182
- package/src/cli/commands/__tests__/task.test.ts +0 -914
- package/src/cli/commands/task.ts +0 -771
- package/src/config/bundled-skills/personal-page/SKILL.md +0 -57
- package/src/config/bundled-skills/personal-page/TOOLS.json +0 -27
- package/src/config/bundled-skills/personal-page/tools/app-refresh.ts +0 -17
- package/src/config/preloaded-apps/personal-page/src/components/About.tsx +0 -22
- package/src/config/preloaded-apps/personal-page/src/components/App.tsx +0 -16
- package/src/config/preloaded-apps/personal-page/src/components/Features.tsx +0 -77
- package/src/config/preloaded-apps/personal-page/src/components/Hero.tsx +0 -57
- package/src/config/preloaded-apps/personal-page/src/components/Pending.tsx +0 -28
- package/src/config/preloaded-apps/personal-page/src/components/animations.tsx +0 -234
- package/src/config/preloaded-apps/personal-page/src/components/icons.tsx +0 -48
- package/src/config/preloaded-apps/personal-page/src/components/media.ts +0 -16
- package/src/config/preloaded-apps/personal-page/src/index.html +0 -20
- package/src/config/preloaded-apps/personal-page/src/main.tsx +0 -7
- package/src/config/preloaded-apps/personal-page/src/profile-data.ts +0 -82
- package/src/config/preloaded-apps/personal-page/src/styles.css +0 -759
- package/src/memory/__tests__/preloaded-apps.test.ts +0 -85
- package/src/memory/preloaded-apps.ts +0 -116
- package/src/notifications/tool-approval-copy.ts +0 -142
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +0 -78
- package/src/runtime/routes/identity-intro-cache.ts +0 -172
- package/src/tools/credentials/vault.ts +0 -712
|
@@ -45,6 +45,14 @@ export interface CesTransport {
|
|
|
45
45
|
isAlive(): boolean;
|
|
46
46
|
/** Tear down the transport connection. */
|
|
47
47
|
close(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Register a callback that fires once when the transport dies (its read side
|
|
50
|
+
* ends, the process exits, or the socket closes). Lets the client fail-fast
|
|
51
|
+
* any in-flight requests instead of letting each wait out its timeout.
|
|
52
|
+
* Optional: a transport that doesn't implement it falls back to
|
|
53
|
+
* timeout-based failure.
|
|
54
|
+
*/
|
|
55
|
+
onClose?(handler: () => void): void;
|
|
48
56
|
}
|
|
49
57
|
|
|
50
58
|
// ---------------------------------------------------------------------------
|
|
@@ -155,6 +163,16 @@ export function createCesRpcClient(
|
|
|
155
163
|
|
|
156
164
|
const pending = new Map<string, PendingRequest>();
|
|
157
165
|
|
|
166
|
+
/** Reject and clear every in-flight request. Shared by `close()` and the
|
|
167
|
+
* transport-death handler. */
|
|
168
|
+
function rejectAllPending(error: Error): void {
|
|
169
|
+
for (const [id, entry] of pending) {
|
|
170
|
+
clearTimeout(entry.timer);
|
|
171
|
+
pending.delete(id);
|
|
172
|
+
entry.reject(error);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
158
176
|
// -------------------------------------------------------------------------
|
|
159
177
|
// Incoming message dispatch
|
|
160
178
|
// -------------------------------------------------------------------------
|
|
@@ -209,6 +227,15 @@ export function createCesRpcClient(
|
|
|
209
227
|
}
|
|
210
228
|
});
|
|
211
229
|
|
|
230
|
+
// Fail-fast on transport death: when the transport's read side ends (e.g. a
|
|
231
|
+
// spurious stdout EOF on a CES bounce) or the connection closes, reject every
|
|
232
|
+
// in-flight request immediately. The response can never arrive on a dead
|
|
233
|
+
// transport, so without this a pending call hangs until `requestTimeoutMs`
|
|
234
|
+
// (observed: 30s stalls on credential reads that raced a CES restart).
|
|
235
|
+
transport.onClose?.(() => {
|
|
236
|
+
rejectAllPending(new CesTransportError("CES transport closed"));
|
|
237
|
+
});
|
|
238
|
+
|
|
212
239
|
// -------------------------------------------------------------------------
|
|
213
240
|
// Send helpers
|
|
214
241
|
// -------------------------------------------------------------------------
|
|
@@ -384,11 +411,7 @@ export function createCesRpcClient(
|
|
|
384
411
|
},
|
|
385
412
|
|
|
386
413
|
close(): void {
|
|
387
|
-
|
|
388
|
-
clearTimeout(entry.timer);
|
|
389
|
-
entry.reject(new CesTransportError("CES client closed"));
|
|
390
|
-
pending.delete(id);
|
|
391
|
-
}
|
|
414
|
+
rejectAllPending(new CesTransportError("CES client closed"));
|
|
392
415
|
ready = false;
|
|
393
416
|
transport.close();
|
|
394
417
|
},
|
|
@@ -25,11 +25,8 @@ function portBlock(base: number): PortMap {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
* Built-in environment definitions and the
|
|
29
|
-
* set of known environment names.
|
|
30
|
-
* `clients/macos/vellum-assistant/App/VellumEnvironment.swift`; since Swift
|
|
31
|
-
* can't import TypeScript, drift between the two is caught at test time by
|
|
32
|
-
* `cli/src/__tests__/env-drift.test.ts`.
|
|
28
|
+
* Built-in environment definitions and the source of truth for the
|
|
29
|
+
* set of known environment names.
|
|
33
30
|
*
|
|
34
31
|
* Custom environments via a user config file are a future phase — see the
|
|
35
32
|
* "Coexisting environments" design doc. Until then, a call site that needs a
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared admission policy vocabulary used on the gateway→runtime wire.
|
|
3
|
+
*
|
|
4
|
+
* Both the gateway (channel admission policy storage + kill switch) and the
|
|
5
|
+
* runtime (admission-policy stage) consume these values. Keeping the type
|
|
6
|
+
* here avoids the runtime importing from `gateway/src` and avoids the
|
|
7
|
+
* vocabulary drift the plan §2.1 flags for the verification-purpose
|
|
8
|
+
* `trustClass` enum.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Per-channel inbound admission policy — ordered from most-restrictive
|
|
15
|
+
* (`no_one`, hard kill switch) to most-permissive (`strangers`, admits any
|
|
16
|
+
* sender). See `unverified-contact-role-plan.md` §2.3.
|
|
17
|
+
*/
|
|
18
|
+
export const ADMISSION_POLICY_VALUES = [
|
|
19
|
+
"no_one",
|
|
20
|
+
"guardian_only",
|
|
21
|
+
"trusted_contacts",
|
|
22
|
+
"any_contact",
|
|
23
|
+
"strangers",
|
|
24
|
+
] as const;
|
|
25
|
+
|
|
26
|
+
export type AdmissionPolicy = (typeof ADMISSION_POLICY_VALUES)[number];
|
|
27
|
+
|
|
28
|
+
export const AdmissionPolicySchema = z.enum(ADMISSION_POLICY_VALUES);
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Read-side default applied when a channel has no row in the DB. Matches
|
|
32
|
+
* today's effective semantics: guardian + active contacts admitted,
|
|
33
|
+
* strangers denied. See plan §2.2.
|
|
34
|
+
*/
|
|
35
|
+
export const ADMISSION_POLICY_DEFAULT: AdmissionPolicy = "trusted_contacts";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Minimum trust rank required for each policy. Higher rank = more trusted.
|
|
39
|
+
* `no_one` is 5 — above the maximum guardian rank (4) — so no class is ever
|
|
40
|
+
* admitted. See plan §2.4 for the rank table.
|
|
41
|
+
*/
|
|
42
|
+
export const ADMISSION_FLOOR: Record<AdmissionPolicy, number> = {
|
|
43
|
+
no_one: 5,
|
|
44
|
+
guardian_only: 4,
|
|
45
|
+
trusted_contacts: 3,
|
|
46
|
+
any_contact: 2,
|
|
47
|
+
strangers: 1,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Hard-exempt internal channels — never subject to PUT policy, omitted from
|
|
52
|
+
* GET list, runtime admission stage short-circuits without floor check.
|
|
53
|
+
*
|
|
54
|
+
* `platform` / `a2a` are peer/internal channels with no human-trust model.
|
|
55
|
+
*
|
|
56
|
+
* `phone` is NOT exempt — voice ingress enforces the admission floor.
|
|
57
|
+
*
|
|
58
|
+
* `vellum` / `whatsapp` are NOT exempt — their floors are still enforced at
|
|
59
|
+
* runtime — but they are hidden from the configurable UI; see
|
|
60
|
+
* {@link ADMISSION_POLICY_HIDDEN_CHANNELS}.
|
|
61
|
+
*/
|
|
62
|
+
export const ADMISSION_POLICY_EXEMPT_CHANNELS: ReadonlySet<string> = new Set([
|
|
63
|
+
"platform",
|
|
64
|
+
"a2a",
|
|
65
|
+
]);
|
|
66
|
+
|
|
67
|
+
export function isAdmissionPolicyExemptChannel(channelType: string): boolean {
|
|
68
|
+
return ADMISSION_POLICY_EXEMPT_CHANNELS.has(channelType);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Channels omitted from the Channel Trust Floors list (GET) and rejected on
|
|
73
|
+
* PUT/DELETE — managed automatically at their seed default, not user
|
|
74
|
+
* configurable. Unlike {@link ADMISSION_POLICY_EXEMPT_CHANNELS} they are still
|
|
75
|
+
* enforced at runtime, so hiding a real inbound channel like `whatsapp` never
|
|
76
|
+
* silently disables its admission floor check. The startup seed re-pins any
|
|
77
|
+
* drifted row so a stale floor (e.g. a legacy `no_one`) can't strand a channel
|
|
78
|
+
* the user can no longer see.
|
|
79
|
+
*
|
|
80
|
+
* `vellum` is the local desktop/web client surface; the guardian is always
|
|
81
|
+
* max-rank there, so the seed default admits them regardless of the floor.
|
|
82
|
+
*/
|
|
83
|
+
export const ADMISSION_POLICY_HIDDEN_CHANNELS: ReadonlySet<string> = new Set([
|
|
84
|
+
"vellum",
|
|
85
|
+
"whatsapp",
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
export function isAdmissionPolicyHiddenChannel(channelType: string): boolean {
|
|
89
|
+
return ADMISSION_POLICY_HIDDEN_CHANNELS.has(channelType);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function isAdmissionPolicy(value: unknown): value is AdmissionPolicy {
|
|
93
|
+
return (
|
|
94
|
+
typeof value === "string" &&
|
|
95
|
+
(ADMISSION_POLICY_VALUES as readonly string[]).includes(value)
|
|
96
|
+
);
|
|
97
|
+
}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
|
|
15
|
+
import { AdmissionPolicySchema } from "./admission-policy-contract.js";
|
|
16
|
+
|
|
15
17
|
// ---------------------------------------------------------------------------
|
|
16
18
|
// Command intent (channel-initiated commands, e.g. Telegram /start)
|
|
17
19
|
// ---------------------------------------------------------------------------
|
|
@@ -67,6 +69,14 @@ export const SourceMetadataSchema = z
|
|
|
67
69
|
/** Slack workspace/team ID. */
|
|
68
70
|
account: z.string().optional(),
|
|
69
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Per-channel inbound admission policy attached by the gateway. The
|
|
74
|
+
* runtime admission-policy stage enforces the floor against the
|
|
75
|
+
* resolved trust class; when absent, the runtime falls back to
|
|
76
|
+
* `ADMISSION_POLICY_DEFAULT` (`trusted_contacts`).
|
|
77
|
+
*/
|
|
78
|
+
admissionPolicy: AdmissionPolicySchema.optional(),
|
|
79
|
+
|
|
70
80
|
// Email-specific fields
|
|
71
81
|
/** Email subject line. */
|
|
72
82
|
emailSubject: z.string().optional(),
|
|
@@ -19,20 +19,26 @@ export * from "./gateway-ipc-contracts.js";
|
|
|
19
19
|
|
|
20
20
|
export { ipcCall, IpcCallError, PersistentIpcClient } from "./ipc-client.js";
|
|
21
21
|
|
|
22
|
+
// Outbound delivery contract (daemon → gateway) — Zod schemas + derived types
|
|
23
|
+
export {
|
|
24
|
+
ApprovalActionOptionSchema,
|
|
25
|
+
ApprovalUIMetadataSchema,
|
|
26
|
+
AttachmentMetadataSchema,
|
|
27
|
+
ChannelDeliveryResultSchema,
|
|
28
|
+
ChannelReplyPayloadSchema,
|
|
29
|
+
PermissionRequestDetailsSchema,
|
|
30
|
+
} from "./outbound-contract.js";
|
|
31
|
+
|
|
22
32
|
export type {
|
|
23
33
|
ApprovalActionOption,
|
|
24
34
|
ApprovalUIMetadata,
|
|
25
35
|
AttachmentMetadata,
|
|
26
36
|
ChannelDeliveryResult,
|
|
27
37
|
ChannelReplyPayload,
|
|
28
|
-
IpcRequest,
|
|
29
|
-
IpcResponse,
|
|
30
|
-
Logger,
|
|
31
38
|
PermissionRequestDetails,
|
|
32
|
-
} from "./
|
|
33
|
-
|
|
34
|
-
export { noopLogger } from "./types.js";
|
|
39
|
+
} from "./outbound-contract.js";
|
|
35
40
|
|
|
41
|
+
// Inbound contract (gateway → daemon) — Zod schemas + derived types
|
|
36
42
|
export {
|
|
37
43
|
CommandIntentSchema,
|
|
38
44
|
RuntimeInboundPayloadSchema,
|
|
@@ -44,3 +50,23 @@ export type {
|
|
|
44
50
|
RuntimeInboundPayload,
|
|
45
51
|
SourceMetadata,
|
|
46
52
|
} from "./inbound-contract.js";
|
|
53
|
+
|
|
54
|
+
// IPC, logger, and utility types
|
|
55
|
+
export type { IpcRequest, IpcResponse, Logger } from "./types.js";
|
|
56
|
+
|
|
57
|
+
export { noopLogger } from "./types.js";
|
|
58
|
+
|
|
59
|
+
// Admission policy contract (gateway → daemon) — Zod schemas + derived types + channel sets
|
|
60
|
+
export {
|
|
61
|
+
ADMISSION_FLOOR,
|
|
62
|
+
ADMISSION_POLICY_DEFAULT,
|
|
63
|
+
ADMISSION_POLICY_EXEMPT_CHANNELS,
|
|
64
|
+
ADMISSION_POLICY_HIDDEN_CHANNELS,
|
|
65
|
+
ADMISSION_POLICY_VALUES,
|
|
66
|
+
AdmissionPolicySchema,
|
|
67
|
+
isAdmissionPolicy,
|
|
68
|
+
isAdmissionPolicyExemptChannel,
|
|
69
|
+
isAdmissionPolicyHiddenChannel,
|
|
70
|
+
} from "./admission-policy-contract.js";
|
|
71
|
+
|
|
72
|
+
export type { AdmissionPolicy } from "./admission-policy-contract.js";
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon → gateway outbound delivery contract.
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas defining the wire format for channel replies delivered from
|
|
5
|
+
* the daemon to the gateway via `POST /deliver/{channel}`. Both services
|
|
6
|
+
* import from here so the contract is enforced at compile time.
|
|
7
|
+
*
|
|
8
|
+
* The daemon constructs these payloads in `deliverChannelReply()` and
|
|
9
|
+
* `deliverApprovalPrompt()`; the gateway validates and dispatches them
|
|
10
|
+
* to the target channel provider.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Attachment metadata
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
export const AttachmentMetadataSchema = z.object({
|
|
20
|
+
id: z.string(),
|
|
21
|
+
filename: z.string(),
|
|
22
|
+
mimeType: z.string(),
|
|
23
|
+
sizeBytes: z.number(),
|
|
24
|
+
kind: z.string(),
|
|
25
|
+
data: z.string().optional(),
|
|
26
|
+
thumbnailData: z.string().optional(),
|
|
27
|
+
fileBacked: z.boolean().optional(),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export type AttachmentMetadata = z.infer<typeof AttachmentMetadataSchema>;
|
|
31
|
+
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Approval UI types
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
export const ApprovalActionOptionSchema = z.object({
|
|
37
|
+
id: z.string(),
|
|
38
|
+
label: z.string(),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export type ApprovalActionOption = z.infer<typeof ApprovalActionOptionSchema>;
|
|
42
|
+
|
|
43
|
+
export const PermissionRequestDetailsSchema = z.object({
|
|
44
|
+
toolName: z.string(),
|
|
45
|
+
riskLevel: z.string(),
|
|
46
|
+
toolInput: z.record(z.string(), z.unknown()),
|
|
47
|
+
requesterIdentifier: z.string().optional(),
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export type PermissionRequestDetails = z.infer<
|
|
51
|
+
typeof PermissionRequestDetailsSchema
|
|
52
|
+
>;
|
|
53
|
+
|
|
54
|
+
export const ApprovalUIMetadataSchema = z.object({
|
|
55
|
+
requestId: z.string(),
|
|
56
|
+
actions: z.array(ApprovalActionOptionSchema),
|
|
57
|
+
plainTextFallback: z.string(),
|
|
58
|
+
permissionDetails: PermissionRequestDetailsSchema.optional(),
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export type ApprovalUIMetadata = z.infer<typeof ApprovalUIMetadataSchema>;
|
|
62
|
+
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Channel reply payload — the full outbound wire format
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
|
|
67
|
+
export const ChannelReplyPayloadSchema = z.object({
|
|
68
|
+
chatId: z.string(),
|
|
69
|
+
text: z.string().optional(),
|
|
70
|
+
/** Pre-formatted Block Kit blocks for Slack delivery. */
|
|
71
|
+
blocks: z.array(z.unknown()).optional(),
|
|
72
|
+
assistantId: z.string().optional(),
|
|
73
|
+
attachments: z.array(AttachmentMetadataSchema).optional(),
|
|
74
|
+
approval: ApprovalUIMetadataSchema.optional(),
|
|
75
|
+
chatAction: z.literal("typing").optional(),
|
|
76
|
+
/**
|
|
77
|
+
* When true, deliver via `chat.postEphemeral` so only the target `user`
|
|
78
|
+
* sees the message.
|
|
79
|
+
*/
|
|
80
|
+
ephemeral: z.boolean().optional(),
|
|
81
|
+
/** Slack user ID — required when `ephemeral` is true. */
|
|
82
|
+
user: z.string().optional(),
|
|
83
|
+
/** When provided, update an existing message instead of posting a new one. */
|
|
84
|
+
messageTs: z.string().optional(),
|
|
85
|
+
/** When true, auto-generate Block Kit blocks from text via textToBlocks(). */
|
|
86
|
+
useBlocks: z.boolean().optional(),
|
|
87
|
+
/** When provided, add or remove an emoji reaction on a message. */
|
|
88
|
+
reaction: z
|
|
89
|
+
.object({
|
|
90
|
+
action: z.enum(["add", "remove"]),
|
|
91
|
+
name: z.string(),
|
|
92
|
+
messageTs: z.string(),
|
|
93
|
+
})
|
|
94
|
+
.optional(),
|
|
95
|
+
/** When provided, set or clear the Slack Assistants API thread status. */
|
|
96
|
+
assistantThreadStatus: z
|
|
97
|
+
.object({
|
|
98
|
+
channel: z.string(),
|
|
99
|
+
threadTs: z.string(),
|
|
100
|
+
status: z.string(),
|
|
101
|
+
/** Serialized to Slack as `loading_messages`. */
|
|
102
|
+
loadingMessages: z.array(z.string()).optional(),
|
|
103
|
+
})
|
|
104
|
+
.optional(),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
export type ChannelReplyPayload = z.infer<typeof ChannelReplyPayloadSchema>;
|
|
108
|
+
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Channel delivery result — gateway response
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
|
|
113
|
+
export const ChannelDeliveryResultSchema = z.object({
|
|
114
|
+
ok: z.boolean(),
|
|
115
|
+
/** The message timestamp returned by the delivery endpoint. */
|
|
116
|
+
ts: z.string().optional(),
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
export type ChannelDeliveryResult = z.infer<typeof ChannelDeliveryResultSchema>;
|
|
@@ -4,92 +4,23 @@
|
|
|
4
4
|
* Type definitions for assistant-to-gateway communication. These are
|
|
5
5
|
* intentionally decoupled from the assistant's internal types so the
|
|
6
6
|
* package can be consumed without importing assistant internals.
|
|
7
|
+
*
|
|
8
|
+
* HTTP delivery types (ChannelReplyPayload, ApprovalUIMetadata, etc.)
|
|
9
|
+
* are defined as Zod schemas in `outbound-contract.ts` and re-exported
|
|
10
|
+
* from the barrel `index.ts`. This file retains only IPC and utility
|
|
11
|
+
* types that don't cross an HTTP wire boundary.
|
|
7
12
|
*/
|
|
8
13
|
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
kind: string;
|
|
20
|
-
data?: string;
|
|
21
|
-
thumbnailData?: string;
|
|
22
|
-
fileBacked?: boolean;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** An action option presented to the user in an approval prompt. */
|
|
26
|
-
export interface ApprovalActionOption {
|
|
27
|
-
id: string;
|
|
28
|
-
label: string;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Tool-permission-specific details carried alongside the approval payload.
|
|
33
|
-
* Channels that support rich UI (e.g. Slack Block Kit) use these fields
|
|
34
|
-
* to render a detailed permission request card.
|
|
35
|
-
*/
|
|
36
|
-
export interface PermissionRequestDetails {
|
|
37
|
-
toolName: string;
|
|
38
|
-
riskLevel: string;
|
|
39
|
-
toolInput: Record<string, unknown>;
|
|
40
|
-
requesterIdentifier?: string;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Metadata attached to gateway callback payloads for rendering approval
|
|
45
|
-
* UI and routing decisions back to the correct pending interaction.
|
|
46
|
-
*/
|
|
47
|
-
export interface ApprovalUIMetadata {
|
|
48
|
-
requestId: string;
|
|
49
|
-
actions: ApprovalActionOption[];
|
|
50
|
-
plainTextFallback: string;
|
|
51
|
-
permissionDetails?: PermissionRequestDetails;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** Payload for a channel reply delivered via the gateway. */
|
|
55
|
-
export interface ChannelReplyPayload {
|
|
56
|
-
chatId: string;
|
|
57
|
-
text?: string;
|
|
58
|
-
/** Pre-formatted Block Kit blocks for Slack delivery. */
|
|
59
|
-
blocks?: unknown[];
|
|
60
|
-
assistantId?: string;
|
|
61
|
-
attachments?: AttachmentMetadata[];
|
|
62
|
-
approval?: ApprovalUIMetadata;
|
|
63
|
-
chatAction?: "typing";
|
|
64
|
-
/**
|
|
65
|
-
* When true, deliver via `chat.postEphemeral` so only the target `user`
|
|
66
|
-
* sees the message.
|
|
67
|
-
*/
|
|
68
|
-
ephemeral?: boolean;
|
|
69
|
-
/** Slack user ID — required when `ephemeral` is true. */
|
|
70
|
-
user?: string;
|
|
71
|
-
/** When provided, update an existing message instead of posting a new one. */
|
|
72
|
-
messageTs?: string;
|
|
73
|
-
/** When true, auto-generate Block Kit blocks from text via textToBlocks(). */
|
|
74
|
-
useBlocks?: boolean;
|
|
75
|
-
/** When provided, add or remove an emoji reaction on a message. */
|
|
76
|
-
reaction?: { action: "add" | "remove"; name: string; messageTs: string };
|
|
77
|
-
/** When provided, set or clear the Slack Assistants API thread status. */
|
|
78
|
-
assistantThreadStatus?: {
|
|
79
|
-
channel: string;
|
|
80
|
-
threadTs: string;
|
|
81
|
-
status: string;
|
|
82
|
-
/** Serialized to Slack as `loading_messages`. */
|
|
83
|
-
loadingMessages?: string[];
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** Result from a channel delivery attempt. */
|
|
88
|
-
export interface ChannelDeliveryResult {
|
|
89
|
-
ok: boolean;
|
|
90
|
-
/** The message timestamp returned by the delivery endpoint. */
|
|
91
|
-
ts?: string;
|
|
92
|
-
}
|
|
14
|
+
// Re-export outbound delivery types for backward compatibility — consumers
|
|
15
|
+
// that import from "./types.js" continue to work.
|
|
16
|
+
export type {
|
|
17
|
+
ApprovalActionOption,
|
|
18
|
+
ApprovalUIMetadata,
|
|
19
|
+
AttachmentMetadata,
|
|
20
|
+
ChannelDeliveryResult,
|
|
21
|
+
ChannelReplyPayload,
|
|
22
|
+
PermissionRequestDetails,
|
|
23
|
+
} from "./outbound-contract.js";
|
|
93
24
|
|
|
94
25
|
// ---------------------------------------------------------------------------
|
|
95
26
|
// IPC types
|