@vellumai/assistant 0.4.48 → 0.4.49
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 +2 -2
- package/README.md +2 -23
- package/docs/architecture/integrations.md +45 -41
- package/docs/architecture/keychain-broker.md +3 -3
- package/docs/runbook-trusted-contacts.md +3 -8
- package/hook-templates/debug-prompt-logger/hook.json +1 -1
- package/hook-templates/debug-prompt-logger/run.sh +1 -3
- package/package.json +1 -1
- package/src/__tests__/actor-token-service.test.ts +0 -1
- package/src/__tests__/anthropic-provider.test.ts +156 -0
- package/src/__tests__/approval-cascade.test.ts +810 -0
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +2 -0
- package/src/__tests__/assistant-attachments.test.ts +12 -34
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +76 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -1
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +2 -2
- package/src/__tests__/channel-guardian.test.ts +0 -2
- package/src/__tests__/channel-readiness-routes.test.ts +15 -6
- package/src/__tests__/channel-readiness-service.test.ts +10 -9
- package/src/__tests__/checker.test.ts +9 -29
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +1 -1
- package/src/__tests__/computer-use-tools.test.ts +2 -19
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-image-dimensions.test.ts +332 -0
- package/src/__tests__/context-token-estimator.test.ts +196 -13
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +0 -1
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +144 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/credential-metadata-store.test.ts +64 -73
- package/src/__tests__/credential-security-invariants.test.ts +13 -7
- package/src/__tests__/credential-vault-unit.test.ts +280 -49
- package/src/__tests__/credential-vault.test.ts +138 -16
- package/src/__tests__/credentials-cli.test.ts +71 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +3 -3
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -39
- package/src/__tests__/heartbeat-service.test.ts +0 -1
- package/src/__tests__/host-cu-proxy.test.ts +629 -0
- package/src/__tests__/host-shell-tool.test.ts +27 -15
- package/src/__tests__/http-user-message-parity.test.ts +1 -0
- package/src/__tests__/ingress-url-consistency.test.ts +14 -21
- package/src/__tests__/integration-status.test.ts +32 -51
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/invite-routes-http.test.ts +10 -9
- package/src/__tests__/keychain-broker-client.test.ts +11 -43
- package/src/__tests__/notification-routing-intent.test.ts +0 -1
- package/src/__tests__/oauth-cli.test.ts +373 -14
- package/src/__tests__/oauth-provider-profiles.test.ts +9 -9
- package/src/__tests__/oauth-scope-policy.test.ts +4 -6
- package/src/__tests__/oauth-store.test.ts +756 -0
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/provider-error-scenarios.test.ts +0 -1
- package/src/__tests__/provider-streaming.benchmark.test.ts +0 -1
- package/src/__tests__/public-ingress-urls.test.ts +15 -21
- package/src/__tests__/recording-handler.test.ts +3 -4
- package/src/__tests__/registry.test.ts +2 -2
- package/src/__tests__/runtime-events-sse.test.ts +55 -7
- package/src/__tests__/schedule-store.test.ts +0 -1
- package/src/__tests__/scheduler-recurrence.test.ts +0 -1
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/secret-ingress-handler.test.ts +0 -1
- package/src/__tests__/send-endpoint-busy.test.ts +21 -6
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/session-init.benchmark.test.ts +4 -5
- package/src/__tests__/skill-include-graph.test.ts +66 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +0 -1
- package/src/__tests__/skill-load-tool.test.ts +149 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -1
- package/src/__tests__/skills-uninstall.test.ts +1 -1
- package/src/__tests__/skills.test.ts +3 -3
- package/src/__tests__/slack-channel-config.test.ts +67 -3
- package/src/__tests__/slack-share-routes.test.ts +17 -19
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-invite-adapter.test.ts +18 -22
- package/src/__tests__/terminal-tools.test.ts +4 -3
- package/src/__tests__/test-support/computer-use-skill-harness.ts +3 -2
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor-shell-integration.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/trust-store-pattern-matches.test.ts +29 -0
- package/src/__tests__/trust-store.test.ts +1 -22
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -16
- package/src/__tests__/verification-control-plane-policy.test.ts +0 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/agent/ax-tree-compaction.test.ts +235 -0
- package/src/agent/loop.ts +76 -130
- package/src/calls/call-domain.ts +1 -6
- package/src/calls/relay-server.ts +9 -13
- package/src/calls/twilio-config.ts +2 -7
- package/src/calls/twilio-routes.ts +1 -2
- package/src/calls/voice-ingress-preflight.ts +1 -1
- package/src/cli/commands/browser-relay.ts +18 -12
- package/src/cli/commands/completions.ts +0 -3
- package/src/cli/commands/credentials.ts +101 -15
- package/src/cli/commands/oauth/apps.ts +255 -0
- package/src/cli/commands/oauth/connections.ts +299 -0
- package/src/cli/commands/oauth/index.ts +52 -0
- package/src/cli/commands/oauth/providers.ts +242 -0
- package/src/cli/commands/skills.ts +4 -338
- package/src/cli/program.ts +1 -5
- package/src/cli/reference.ts +1 -3
- package/src/config/assistant-feature-flags.ts +0 -3
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +1 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +3 -6
- package/src/config/bundled-skills/computer-use/TOOLS.json +22 -4
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +21 -16
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -4
- package/src/config/bundled-skills/settings/SKILL.md +1 -1
- package/src/config/bundled-skills/settings/TOOLS.json +2 -8
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +5 -33
- package/src/config/env-registry.ts +14 -83
- package/src/config/env.ts +11 -50
- package/src/config/feature-flag-registry.json +16 -16
- package/src/config/loader.ts +0 -6
- package/src/config/schema.ts +3 -1
- package/src/config/skills.ts +21 -2
- package/src/context/image-dimensions.ts +229 -0
- package/src/context/token-estimator.ts +75 -12
- package/src/context/window-manager.ts +49 -10
- package/src/daemon/assistant-attachments.ts +1 -13
- package/src/daemon/handlers/config-ingress.ts +8 -33
- package/src/daemon/handlers/config-slack-channel.ts +49 -46
- package/src/daemon/handlers/config-telegram.ts +32 -16
- package/src/daemon/handlers/sessions.ts +10 -24
- package/src/daemon/handlers/shared.ts +0 -130
- package/src/daemon/host-cu-proxy.ts +401 -0
- package/src/daemon/lifecycle.ts +36 -68
- package/src/daemon/message-protocol.ts +3 -0
- package/src/daemon/message-types/computer-use.ts +2 -119
- package/src/daemon/message-types/host-cu.ts +19 -0
- package/src/daemon/message-types/messages.ts +3 -0
- package/src/daemon/server.ts +14 -21
- package/src/daemon/session-agent-loop-handlers.ts +2 -0
- package/src/daemon/session-attachments.ts +1 -2
- package/src/daemon/session-slash.ts +1 -1
- package/src/daemon/session-surfaces.ts +40 -28
- package/src/daemon/session-tool-setup.ts +2 -9
- package/src/daemon/session.ts +138 -15
- package/src/daemon/tool-side-effects.ts +2 -8
- package/src/daemon/watch-handler.ts +2 -2
- package/src/events/tool-metrics-listener.ts +2 -2
- package/src/hooks/manager.ts +1 -4
- package/src/inbound/public-ingress-urls.ts +7 -7
- package/src/logfire.ts +16 -5
- package/src/memory/conversation-key-store.ts +21 -0
- package/src/memory/db-init.ts +4 -0
- package/src/memory/migrations/149-oauth-tables.ts +60 -0
- package/src/memory/migrations/index.ts +1 -0
- package/src/memory/schema/index.ts +1 -0
- package/src/memory/schema/oauth.ts +65 -0
- package/src/messaging/provider.ts +4 -4
- package/src/messaging/providers/gmail/client.ts +82 -2
- package/src/messaging/providers/gmail/people-client.ts +10 -10
- package/src/messaging/providers/telegram-bot/adapter.ts +17 -17
- package/src/messaging/providers/whatsapp/adapter.ts +11 -8
- package/src/messaging/registry.ts +2 -32
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/signal.ts +4 -5
- package/src/oauth/byo-connection.test.ts +126 -25
- package/src/oauth/byo-connection.ts +22 -6
- package/src/oauth/connect-orchestrator.ts +113 -57
- package/src/oauth/connect-types.ts +17 -23
- package/src/oauth/connection-resolver.ts +35 -11
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/manual-token-connection.ts +104 -0
- package/src/oauth/oauth-store.ts +496 -0
- package/src/oauth/platform-connection.test.ts +29 -0
- package/src/oauth/platform-connection.ts +6 -5
- package/src/oauth/provider-behaviors.ts +124 -0
- package/src/oauth/scope-policy.ts +9 -2
- package/src/oauth/seed-providers.ts +161 -0
- package/src/oauth/token-persistence.ts +74 -78
- package/src/permissions/checker.ts +3 -3
- package/src/permissions/defaults.ts +0 -1
- package/src/permissions/prompter.ts +10 -1
- package/src/permissions/trust-store.ts +13 -0
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +3 -1
- package/src/prompts/system-prompt.ts +28 -40
- package/src/providers/anthropic/client.ts +133 -24
- package/src/providers/retry.ts +1 -27
- package/src/runtime/auth/route-policy.ts +0 -3
- package/src/runtime/channel-reply-delivery.ts +0 -40
- package/src/runtime/gateway-client.ts +0 -7
- package/src/runtime/http-server.ts +8 -6
- package/src/runtime/http-types.ts +2 -2
- package/src/runtime/middleware/twilio-validation.ts +1 -11
- package/src/runtime/pending-interactions.ts +14 -12
- package/src/runtime/routes/channel-delivery-routes.ts +0 -1
- package/src/runtime/routes/conversation-routes.ts +73 -19
- package/src/runtime/routes/events-routes.ts +21 -11
- package/src/runtime/routes/host-cu-routes.ts +97 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +12 -111
- package/src/runtime/routes/integrations/slack/share.ts +6 -7
- package/src/runtime/routes/log-export-routes.ts +126 -8
- package/src/runtime/routes/settings-routes.ts +55 -48
- package/src/runtime/routes/surface-action-routes.ts +1 -1
- package/src/runtime/routes/watch-routes.ts +128 -0
- package/src/schedule/integration-status.ts +10 -9
- package/src/security/credential-key.ts +0 -156
- package/src/security/keychain-broker-client.ts +5 -6
- package/src/security/oauth2.ts +1 -1
- package/src/security/token-manager.ts +119 -46
- package/src/skills/catalog-install.ts +358 -0
- package/src/skills/include-graph.ts +32 -0
- package/src/telegram/bot-username.ts +2 -3
- package/src/tools/browser/network-recorder.ts +1 -1
- package/src/tools/browser/network-recording-types.ts +1 -1
- package/src/tools/computer-use/definitions.ts +46 -11
- package/src/tools/computer-use/registry.ts +4 -5
- package/src/tools/credentials/broker.ts +1 -2
- package/src/tools/credentials/metadata-store.ts +17 -121
- package/src/tools/credentials/vault.ts +94 -167
- package/src/tools/registry.ts +2 -7
- package/src/tools/skills/load.ts +62 -3
- package/src/tools/watch/watch-state.ts +0 -12
- package/src/util/logger.ts +7 -41
- package/src/util/platform.ts +9 -28
- package/src/watcher/providers/google-calendar.ts +2 -1
- package/src/__tests__/computer-use-session-compaction.test.ts +0 -143
- package/src/__tests__/computer-use-session-lifecycle.test.ts +0 -322
- package/src/__tests__/computer-use-session-working-dir.test.ts +0 -166
- package/src/__tests__/computer-use-skill-baseline.test.ts +0 -78
- package/src/__tests__/computer-use-skill-endstate.test.ts +0 -105
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +0 -249
- package/src/__tests__/ride-shotgun-handler.test.ts +0 -452
- package/src/cli/commands/dev.ts +0 -129
- package/src/cli/commands/map.ts +0 -391
- package/src/cli/commands/oauth.ts +0 -77
- package/src/config/bundled-skills/computer-use/tools/computer-use-request-control.ts +0 -16
- package/src/daemon/computer-use-session.ts +0 -1026
- package/src/daemon/ride-shotgun-handler.ts +0 -569
- package/src/oauth/provider-base-urls.ts +0 -21
- package/src/oauth/provider-profiles.ts +0 -192
- package/src/prompts/computer-use-prompt.ts +0 -98
- package/src/runtime/routes/computer-use-routes.ts +0 -641
- package/src/runtime/telegram-streaming-delivery.test.ts +0 -729
- package/src/runtime/telegram-streaming-delivery.ts +0 -393
- package/src/tools/computer-use/request-computer-control.ts +0 -56
|
@@ -164,6 +164,26 @@ mock.module("../tools/credentials/metadata-store.js", () => ({
|
|
|
164
164
|
},
|
|
165
165
|
}));
|
|
166
166
|
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
// Mock oauth-store
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
|
|
171
|
+
let disconnectOAuthProviderCalls: string[] = [];
|
|
172
|
+
let disconnectOAuthProviderResult: "disconnected" | "not-found" | "error" =
|
|
173
|
+
"not-found";
|
|
174
|
+
|
|
175
|
+
mock.module("../oauth/oauth-store.js", () => ({
|
|
176
|
+
disconnectOAuthProvider: async (
|
|
177
|
+
providerKey: string,
|
|
178
|
+
): Promise<"disconnected" | "not-found" | "error"> => {
|
|
179
|
+
disconnectOAuthProviderCalls.push(providerKey);
|
|
180
|
+
return disconnectOAuthProviderResult;
|
|
181
|
+
},
|
|
182
|
+
getConnectionByProvider: (): undefined => undefined,
|
|
183
|
+
listConnections: (): never[] => [],
|
|
184
|
+
deleteConnection: (): boolean => false,
|
|
185
|
+
}));
|
|
186
|
+
|
|
167
187
|
// ---------------------------------------------------------------------------
|
|
168
188
|
// Import the module under test (after mocks are registered)
|
|
169
189
|
// ---------------------------------------------------------------------------
|
|
@@ -281,6 +301,8 @@ describe("assistant credentials CLI", () => {
|
|
|
281
301
|
_listMetadataCalls = 0;
|
|
282
302
|
_getMetadataCalls = 0;
|
|
283
303
|
_getMetadataByIdCalls = 0;
|
|
304
|
+
disconnectOAuthProviderCalls = [];
|
|
305
|
+
disconnectOAuthProviderResult = "not-found";
|
|
284
306
|
process.exitCode = 0;
|
|
285
307
|
});
|
|
286
308
|
|
|
@@ -611,6 +633,55 @@ describe("assistant credentials CLI", () => {
|
|
|
611
633
|
),
|
|
612
634
|
).toBeUndefined();
|
|
613
635
|
});
|
|
636
|
+
|
|
637
|
+
test("calls disconnectOAuthProvider for OAuth cleanup", async () => {
|
|
638
|
+
seedCredential("gmail", "access_token", "ya29.token_value");
|
|
639
|
+
|
|
640
|
+
const result = await runCli(["delete", "gmail:access_token", "--json"]);
|
|
641
|
+
expect(result.exitCode).toBe(0);
|
|
642
|
+
const parsed = JSON.parse(result.stdout);
|
|
643
|
+
expect(parsed.ok).toBe(true);
|
|
644
|
+
|
|
645
|
+
// disconnectOAuthProvider should have been called with the service name
|
|
646
|
+
expect(disconnectOAuthProviderCalls).toEqual(["gmail"]);
|
|
647
|
+
});
|
|
648
|
+
|
|
649
|
+
test("succeeds when only OAuth connection exists (no legacy credential)", async () => {
|
|
650
|
+
// No legacy credential seeded — only the OAuth disconnect finds something
|
|
651
|
+
disconnectOAuthProviderResult = "disconnected";
|
|
652
|
+
|
|
653
|
+
const result = await runCli(["delete", "gmail:access_token", "--json"]);
|
|
654
|
+
expect(result.exitCode).toBe(0);
|
|
655
|
+
const parsed = JSON.parse(result.stdout);
|
|
656
|
+
expect(parsed.ok).toBe(true);
|
|
657
|
+
expect(parsed.service).toBe("gmail");
|
|
658
|
+
expect(parsed.field).toBe("access_token");
|
|
659
|
+
|
|
660
|
+
expect(disconnectOAuthProviderCalls).toEqual(["gmail"]);
|
|
661
|
+
});
|
|
662
|
+
|
|
663
|
+
test("demonstrates colon-in-service-name parsing limitation with integration:gmail", async () => {
|
|
664
|
+
// parseCredentialName("integration:gmail:access_token") splits on the
|
|
665
|
+
// first colon, yielding service="integration" and field="gmail:access_token".
|
|
666
|
+
// This is incorrect for the intended service "integration:gmail". The fix
|
|
667
|
+
// for this limitation is addressed by introducing a dedicated `disconnect`
|
|
668
|
+
// subcommand (PR 5).
|
|
669
|
+
const result = await runCli([
|
|
670
|
+
"delete",
|
|
671
|
+
"integration:gmail:access_token",
|
|
672
|
+
"--json",
|
|
673
|
+
]);
|
|
674
|
+
// The command parses as service="integration", field="gmail:access_token"
|
|
675
|
+
// which finds nothing and reports not-found.
|
|
676
|
+
expect(result.exitCode).toBe(1);
|
|
677
|
+
const parsed = JSON.parse(result.stdout);
|
|
678
|
+
expect(parsed.ok).toBe(false);
|
|
679
|
+
expect(parsed.error).toContain("not found");
|
|
680
|
+
|
|
681
|
+
// disconnectOAuthProvider was called with "integration" (wrong) instead
|
|
682
|
+
// of "integration:gmail" (intended).
|
|
683
|
+
expect(disconnectOAuthProviderCalls).toEqual(["integration"]);
|
|
684
|
+
});
|
|
614
685
|
});
|
|
615
686
|
|
|
616
687
|
// =========================================================================
|
|
@@ -328,11 +328,11 @@ describe("ephemeral-permissions", () => {
|
|
|
328
328
|
testConfig.permissions.mode = "workspace";
|
|
329
329
|
});
|
|
330
330
|
|
|
331
|
-
test("workspace mode
|
|
331
|
+
test("workspace mode prompts for workspace-scoped file_write (medium risk)", async () => {
|
|
332
332
|
const filePath = join(testDir, "workspace-test-file.txt");
|
|
333
333
|
const result = await check("file_write", { path: filePath }, testDir);
|
|
334
|
-
expect(result.decision).toBe("
|
|
335
|
-
expect(result.reason).toContain("
|
|
334
|
+
expect(result.decision).toBe("prompt");
|
|
335
|
+
expect(result.reason).toContain("medium risk");
|
|
336
336
|
});
|
|
337
337
|
|
|
338
338
|
test("workspace mode still prompts for file_write outside workspace", async () => {
|
|
@@ -37,7 +37,6 @@ const ALLOWLIST = new Set([
|
|
|
37
37
|
// --- Documentation and comments that mention the port for explanatory purposes ---
|
|
38
38
|
"AGENTS.md", // documents the gateway-only rule itself
|
|
39
39
|
"ARCHITECTURE.md", // architecture overview with port references
|
|
40
|
-
"assistant/docs/runbook-trusted-contacts.md", // operator runbook targeting runtime-only /v1/contacts endpoints
|
|
41
40
|
"assistant/src/runtime/middleware/twilio-validation.ts", // comment explaining proxy URL rewriting
|
|
42
41
|
]);
|
|
43
42
|
|
|
@@ -147,7 +147,6 @@ import { handleConfirmationResponse } from "../daemon/handlers/sessions.js";
|
|
|
147
147
|
|
|
148
148
|
interface TestSession {
|
|
149
149
|
messages: Array<{ role: string; content: unknown[] }>;
|
|
150
|
-
hasEscalationHandler: () => boolean;
|
|
151
150
|
setChannelCapabilities: (caps: unknown) => void;
|
|
152
151
|
isProcessing: () => boolean;
|
|
153
152
|
hasPendingConfirmation: (requestId: string) => boolean;
|
|
@@ -181,8 +180,6 @@ function createContext(session: TestSession): {
|
|
|
181
180
|
const sent: ServerMessage[] = [];
|
|
182
181
|
const ctx: HandlerContext = {
|
|
183
182
|
sessions: new Map(),
|
|
184
|
-
cuSessions: new Map(),
|
|
185
|
-
cuObservationParseSequence: new Map(),
|
|
186
183
|
sharedRequestTimestamps: [],
|
|
187
184
|
debounceTimers: new DebouncerMap({ defaultDelayMs: 100 }),
|
|
188
185
|
suppressConfigReload: false,
|
|
@@ -202,7 +199,6 @@ function createContext(session: TestSession): {
|
|
|
202
199
|
function makeSession(overrides: Partial<TestSession> = {}): TestSession {
|
|
203
200
|
return {
|
|
204
201
|
messages: [],
|
|
205
|
-
hasEscalationHandler: () => true,
|
|
206
202
|
setChannelCapabilities: () => {},
|
|
207
203
|
isProcessing: () => false,
|
|
208
204
|
hasPendingConfirmation: () => true,
|
|
@@ -277,39 +273,4 @@ describe("handleConfirmationResponse canonical status sync", () => {
|
|
|
277
273
|
);
|
|
278
274
|
expect(resolveMock).toHaveBeenCalledWith("req-confirm-allow");
|
|
279
275
|
});
|
|
280
|
-
|
|
281
|
-
test("syncs canonical status to denied for deny decisions in CU sessions", () => {
|
|
282
|
-
const cuSession = {
|
|
283
|
-
hasPendingConfirmation: (requestId: string) =>
|
|
284
|
-
requestId === "req-confirm-deny",
|
|
285
|
-
handleConfirmationResponse: mock(() => {}),
|
|
286
|
-
};
|
|
287
|
-
const { ctx } = createContext(
|
|
288
|
-
makeSession({
|
|
289
|
-
hasPendingConfirmation: () => false,
|
|
290
|
-
}),
|
|
291
|
-
);
|
|
292
|
-
ctx.cuSessions.set("cu-1", cuSession as any);
|
|
293
|
-
|
|
294
|
-
const msg: ConfirmationResponse = {
|
|
295
|
-
type: "confirmation_response",
|
|
296
|
-
requestId: "req-confirm-deny",
|
|
297
|
-
decision: "always_deny",
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
handleConfirmationResponse(msg, ctx);
|
|
301
|
-
|
|
302
|
-
expect(
|
|
303
|
-
(cuSession.handleConfirmationResponse as any).mock.calls.length,
|
|
304
|
-
).toBe(1);
|
|
305
|
-
expect((cuSession.handleConfirmationResponse as any).mock.calls[0]).toEqual(
|
|
306
|
-
["req-confirm-deny", "always_deny", undefined, undefined],
|
|
307
|
-
);
|
|
308
|
-
expect(resolveCanonicalGuardianRequestMock).toHaveBeenCalledWith(
|
|
309
|
-
"req-confirm-deny",
|
|
310
|
-
"pending",
|
|
311
|
-
{ status: "denied" },
|
|
312
|
-
);
|
|
313
|
-
expect(resolveMock).toHaveBeenCalledWith("req-confirm-deny");
|
|
314
|
-
});
|
|
315
276
|
});
|