@vellumai/assistant 0.4.33 → 0.4.35

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.
Files changed (149) hide show
  1. package/package.json +1 -1
  2. package/src/__tests__/access-request-decision.test.ts +2 -3
  3. package/src/__tests__/actor-token-service.test.ts +4 -11
  4. package/src/__tests__/approval-primitive.test.ts +0 -45
  5. package/src/__tests__/assistant-id-boundary-guard.test.ts +169 -0
  6. package/src/__tests__/callback-handoff-copy.test.ts +0 -1
  7. package/src/__tests__/channel-approval-routes.test.ts +5 -45
  8. package/src/__tests__/channel-guardian.test.ts +122 -345
  9. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +4 -3
  10. package/src/__tests__/contacts-tools.test.ts +4 -5
  11. package/src/__tests__/conversation-attention-store.test.ts +2 -65
  12. package/src/__tests__/conversation-attention-telegram.test.ts +0 -2
  13. package/src/__tests__/conversation-pairing.test.ts +0 -1
  14. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  15. package/src/__tests__/guardian-action-conversation-turn.test.ts +1 -7
  16. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -74
  17. package/src/__tests__/guardian-action-late-reply.test.ts +1 -8
  18. package/src/__tests__/guardian-grant-minting.test.ts +0 -1
  19. package/src/__tests__/guardian-routing-state.test.ts +0 -3
  20. package/src/__tests__/inbound-invite-redemption.test.ts +0 -3
  21. package/src/__tests__/non-member-access-request.test.ts +0 -7
  22. package/src/__tests__/notification-broadcaster.test.ts +1 -2
  23. package/src/__tests__/notification-decision-fallback.test.ts +0 -2
  24. package/src/__tests__/notification-decision-strategy.test.ts +0 -1
  25. package/src/__tests__/relay-server.test.ts +11 -83
  26. package/src/__tests__/scoped-approval-grants.test.ts +9 -40
  27. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -36
  28. package/src/__tests__/send-endpoint-busy.test.ts +0 -1
  29. package/src/__tests__/send-notification-tool.test.ts +0 -1
  30. package/src/__tests__/slack-inbound-verification.test.ts +2 -4
  31. package/src/__tests__/thread-seed-composer.test.ts +0 -1
  32. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  33. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -4
  34. package/src/__tests__/trusted-contact-approval-notifier.test.ts +1 -5
  35. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +1 -17
  36. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -13
  37. package/src/__tests__/trusted-contact-verification.test.ts +3 -15
  38. package/src/__tests__/twilio-routes.test.ts +2 -2
  39. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  40. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -37
  41. package/src/approvals/approval-primitive.ts +0 -15
  42. package/src/approvals/guardian-decision-primitive.ts +0 -3
  43. package/src/approvals/guardian-request-resolvers.ts +0 -5
  44. package/src/calls/call-domain.ts +0 -3
  45. package/src/calls/call-store.ts +0 -3
  46. package/src/calls/guardian-action-sweep.ts +2 -1
  47. package/src/calls/guardian-dispatch.ts +1 -2
  48. package/src/calls/relay-access-wait.ts +0 -4
  49. package/src/calls/relay-server.ts +3 -11
  50. package/src/calls/relay-setup-router.ts +1 -2
  51. package/src/calls/relay-verification.ts +0 -1
  52. package/src/calls/twilio-routes.ts +0 -3
  53. package/src/calls/types.ts +0 -1
  54. package/src/calls/voice-session-bridge.ts +0 -1
  55. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +100 -171
  56. package/src/config/bundled-skills/notifications/tools/send-notification.ts +0 -1
  57. package/src/contacts/contact-store.ts +13 -88
  58. package/src/contacts/contacts-write.ts +3 -11
  59. package/src/contacts/types.ts +0 -1
  60. package/src/daemon/handlers/config-channels.ts +16 -42
  61. package/src/daemon/handlers/config-inbox.ts +6 -6
  62. package/src/daemon/handlers/contacts.ts +3 -11
  63. package/src/daemon/handlers/index.ts +0 -2
  64. package/src/daemon/session-process.ts +0 -4
  65. package/src/memory/conversation-attention-store.ts +4 -19
  66. package/src/memory/conversation-crud.ts +0 -2
  67. package/src/memory/db-init.ts +4 -0
  68. package/src/memory/guardian-action-store.ts +0 -12
  69. package/src/memory/guardian-approvals.ts +35 -80
  70. package/src/memory/guardian-rate-limits.ts +1 -14
  71. package/src/memory/guardian-verification.ts +6 -34
  72. package/src/memory/invite-store.ts +5 -14
  73. package/src/memory/migrations/026-guardian-verification-sessions.ts +28 -9
  74. package/src/memory/migrations/027a-guardian-bootstrap-token.ts +16 -3
  75. package/src/memory/migrations/038-actor-token-records.ts +8 -1
  76. package/src/memory/migrations/039-actor-refresh-token-records.ts +11 -2
  77. package/src/memory/migrations/110-channel-guardian.ts +27 -6
  78. package/src/memory/migrations/112-assistant-inbox.ts +39 -15
  79. package/src/memory/migrations/114-notifications.ts +37 -15
  80. package/src/memory/migrations/117-conversation-attention.ts +33 -9
  81. package/src/memory/migrations/134-contacts-notes-column.ts +64 -45
  82. package/src/memory/migrations/136-drop-assistant-id-columns.ts +263 -0
  83. package/src/memory/migrations/index.ts +1 -0
  84. package/src/memory/migrations/registry.ts +14 -1
  85. package/src/memory/migrations/schema-introspection.ts +18 -0
  86. package/src/memory/schema/calls.ts +0 -7
  87. package/src/memory/schema/contacts.ts +0 -8
  88. package/src/memory/schema/guardian.ts +0 -5
  89. package/src/memory/schema/infrastructure.ts +0 -2
  90. package/src/memory/schema/notifications.ts +3 -17
  91. package/src/memory/scoped-approval-grants.ts +2 -24
  92. package/src/notifications/adapters/sms.ts +2 -1
  93. package/src/notifications/broadcaster.ts +1 -6
  94. package/src/notifications/decision-engine.ts +3 -4
  95. package/src/notifications/deliveries-store.ts +0 -4
  96. package/src/notifications/destination-resolver.ts +4 -6
  97. package/src/notifications/deterministic-checks.ts +1 -6
  98. package/src/notifications/emit-signal.ts +4 -11
  99. package/src/notifications/events-store.ts +7 -17
  100. package/src/notifications/preference-summary.ts +2 -2
  101. package/src/notifications/preferences-store.ts +2 -9
  102. package/src/notifications/signal.ts +0 -1
  103. package/src/notifications/thread-candidates.ts +1 -11
  104. package/src/notifications/types.ts +0 -3
  105. package/src/runtime/access-request-helper.ts +3 -10
  106. package/src/runtime/actor-refresh-token-store.ts +0 -6
  107. package/src/runtime/actor-token-store.ts +3 -16
  108. package/src/runtime/actor-trust-resolver.ts +1 -4
  109. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -9
  110. package/src/runtime/auth/credential-service.ts +1 -15
  111. package/src/runtime/auth/require-bound-guardian.ts +1 -4
  112. package/src/runtime/channel-guardian-service.ts +15 -46
  113. package/src/runtime/channel-invite-transport.ts +8 -0
  114. package/src/runtime/channel-invite-transports/email.ts +4 -0
  115. package/src/runtime/channel-invite-transports/slack.ts +6 -0
  116. package/src/runtime/channel-invite-transports/sms.ts +4 -0
  117. package/src/runtime/channel-invite-transports/telegram.ts +6 -0
  118. package/src/runtime/confirmation-request-guardian-bridge.ts +0 -1
  119. package/src/runtime/guardian-action-followup-executor.ts +3 -2
  120. package/src/runtime/guardian-action-grant-minter.ts +0 -1
  121. package/src/runtime/guardian-outbound-actions.ts +2 -12
  122. package/src/runtime/guardian-vellum-migration.ts +2 -3
  123. package/src/runtime/http-server.ts +3 -10
  124. package/src/runtime/http-types.ts +13 -1
  125. package/src/runtime/invite-redemption-service.ts +1 -14
  126. package/src/runtime/local-actor-identity.ts +2 -5
  127. package/src/runtime/routes/access-request-decision.ts +0 -1
  128. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +0 -9
  129. package/src/runtime/routes/channel-readiness-routes.ts +29 -18
  130. package/src/runtime/routes/contact-routes.ts +15 -40
  131. package/src/runtime/routes/conversation-attention-routes.ts +0 -2
  132. package/src/runtime/routes/global-search-routes.ts +0 -2
  133. package/src/runtime/routes/guardian-bootstrap-routes.ts +6 -7
  134. package/src/runtime/routes/guardian-expiry-sweep.ts +3 -2
  135. package/src/runtime/routes/inbound-message-handler.ts +0 -3
  136. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +7 -43
  137. package/src/runtime/routes/inbound-stages/background-dispatch.ts +1 -4
  138. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +1 -6
  139. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +0 -1
  140. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +0 -1
  141. package/src/runtime/routes/inbound-stages/verification-intercept.ts +3 -7
  142. package/src/runtime/routes/pairing-routes.ts +4 -4
  143. package/src/runtime/routes/surface-content-routes.ts +104 -0
  144. package/src/runtime/tool-grant-request-helper.ts +0 -1
  145. package/src/tools/browser/browser-manager.ts +22 -21
  146. package/src/tools/browser/runtime-check.ts +111 -6
  147. package/src/tools/calls/call-start.ts +1 -3
  148. package/src/tools/followups/followup_create.ts +1 -2
  149. package/src/tools/tool-approval-handler.ts +0 -2
@@ -282,12 +282,8 @@ function resetTables() {
282
282
  ensuredConvIds = new Set();
283
283
  }
284
284
 
285
- function addTrustedVoiceContact(
286
- phoneNumber: string,
287
- assistantId: string = "self",
288
- ): void {
285
+ function addTrustedVoiceContact(phoneNumber: string): void {
289
286
  upsertMember({
290
- assistantId,
291
287
  sourceChannel: "voice",
292
288
  externalUserId: phoneNumber,
293
289
  externalChatId: phoneNumber,
@@ -297,12 +293,10 @@ function addTrustedVoiceContact(
297
293
  }
298
294
 
299
295
  function createVoiceVerificationSession(
300
- assistantId: string,
301
296
  expectedPhoneE164: string,
302
297
  sessionId?: string,
303
298
  ): string {
304
299
  const { secret } = createOutboundSession({
305
- assistantId,
306
300
  channel: "voice",
307
301
  expectedExternalUserId: expectedPhoneE164,
308
302
  expectedChatId: expectedPhoneE164,
@@ -313,12 +307,10 @@ function createVoiceVerificationSession(
313
307
  }
314
308
 
315
309
  function createPendingVoiceGuardianChallenge(
316
- assistantId: string,
317
310
  secret: string = "123456",
318
311
  ): string {
319
312
  createChallenge({
320
313
  id: randomUUID(),
321
- assistantId,
322
314
  channel: "voice",
323
315
  challengeHash: createHash("sha256").update(secret).digest("hex"),
324
316
  expiresAt: Date.now() + 10 * 60 * 1000,
@@ -1333,12 +1325,11 @@ describe("relay-server", () => {
1333
1325
  provider: "twilio",
1334
1326
  fromNumber: "+15559999999",
1335
1327
  toNumber: "+15551111111",
1336
- assistantId: "self",
1337
1328
  // no task — inbound call
1338
1329
  });
1339
1330
 
1340
1331
  // Create a pending voice guardian challenge
1341
- const secret = createPendingVoiceGuardianChallenge("self");
1332
+ const secret = createPendingVoiceGuardianChallenge();
1342
1333
 
1343
1334
  mockSendMessage.mockImplementation(
1344
1335
  createMockProviderResponse(["Hello, how can I help you?"]),
@@ -1413,10 +1404,9 @@ describe("relay-server", () => {
1413
1404
  provider: "twilio",
1414
1405
  fromNumber: "+15559999999",
1415
1406
  toNumber: "+15551111111",
1416
- assistantId: "self",
1417
1407
  });
1418
1408
 
1419
- const secret = createPendingVoiceGuardianChallenge("self");
1409
+ const secret = createPendingVoiceGuardianChallenge();
1420
1410
 
1421
1411
  mockSendMessage.mockImplementation(
1422
1412
  createMockProviderResponse(["Hello, verified caller!"]),
@@ -1474,11 +1464,9 @@ describe("relay-server", () => {
1474
1464
  provider: "twilio",
1475
1465
  fromNumber: "+15550001111",
1476
1466
  toNumber: "+15551111111",
1477
- assistantId: "self",
1478
1467
  });
1479
1468
 
1480
1469
  createGuardianBinding({
1481
- assistantId: "self",
1482
1470
  channel: "voice",
1483
1471
  guardianExternalUserId: "+15550001111",
1484
1472
  guardianDeliveryChatId: "+15550001111",
@@ -1524,18 +1512,16 @@ describe("relay-server", () => {
1524
1512
  provider: "twilio",
1525
1513
  fromNumber: "+15550002222",
1526
1514
  toNumber: "+15551111111",
1527
- assistantId: "self",
1528
1515
  });
1529
1516
 
1530
1517
  createGuardianBinding({
1531
- assistantId: "self",
1532
1518
  channel: "voice",
1533
1519
  guardianExternalUserId: "+15550009999",
1534
1520
  guardianDeliveryChatId: "+15550009999",
1535
1521
  guardianPrincipalId: "+15550009999",
1536
1522
  verifiedVia: "test",
1537
1523
  });
1538
- addTrustedVoiceContact("+15550002222", "self");
1524
+ addTrustedVoiceContact("+15550002222");
1539
1525
 
1540
1526
  mockSendMessage.mockImplementation(
1541
1527
  createMockProviderResponse(["Hello there."]),
@@ -1578,12 +1564,10 @@ describe("relay-server", () => {
1578
1564
  provider: "twilio",
1579
1565
  fromNumber: "+15551111111",
1580
1566
  toNumber: "+15550001111",
1581
- assistantId: "self",
1582
1567
  initiatedFromConversationId: "conv-guardian-outbound-voice-origin",
1583
1568
  });
1584
1569
 
1585
1570
  createGuardianBinding({
1586
- assistantId: "self",
1587
1571
  channel: "voice",
1588
1572
  guardianExternalUserId: "+15550001111",
1589
1573
  guardianDeliveryChatId: "+15550001111",
@@ -1630,12 +1614,10 @@ describe("relay-server", () => {
1630
1614
  provider: "twilio",
1631
1615
  fromNumber: "+15551111111",
1632
1616
  toNumber: "+15550001111",
1633
- assistantId: "self",
1634
1617
  initiatedFromConversationId: "conv-guardian-outbound-strict-origin",
1635
1618
  });
1636
1619
 
1637
1620
  createGuardianBinding({
1638
- assistantId: "self",
1639
1621
  channel: "telegram",
1640
1622
  guardianExternalUserId: "tg-guardian-user",
1641
1623
  guardianDeliveryChatId: "tg-guardian-chat",
@@ -1682,10 +1664,9 @@ describe("relay-server", () => {
1682
1664
  provider: "twilio",
1683
1665
  fromNumber: "+15550003333",
1684
1666
  toNumber: "+15551111111",
1685
- assistantId: "self",
1686
1667
  });
1687
1668
 
1688
- const secret = createPendingVoiceGuardianChallenge("self");
1669
+ const secret = createPendingVoiceGuardianChallenge();
1689
1670
  const spokenCode = secret.split("").join(" ");
1690
1671
 
1691
1672
  const { relay } = createMockWs(session.id);
@@ -1740,10 +1721,9 @@ describe("relay-server", () => {
1740
1721
  provider: "twilio",
1741
1722
  fromNumber: "+15559999999",
1742
1723
  toNumber: "+15551111111",
1743
- assistantId: "self",
1744
1724
  });
1745
1725
 
1746
- createPendingVoiceGuardianChallenge("self");
1726
+ createPendingVoiceGuardianChallenge();
1747
1727
 
1748
1728
  const { ws, relay } = createMockWs(session.id);
1749
1729
 
@@ -1785,10 +1765,9 @@ describe("relay-server", () => {
1785
1765
  provider: "twilio",
1786
1766
  fromNumber: "+15559999999",
1787
1767
  toNumber: "+15551111111",
1788
- assistantId: "self",
1789
1768
  });
1790
1769
 
1791
- createPendingVoiceGuardianChallenge("self");
1770
+ createPendingVoiceGuardianChallenge();
1792
1771
 
1793
1772
  const { ws, relay } = createMockWs(session.id);
1794
1773
 
@@ -1851,7 +1830,6 @@ describe("relay-server", () => {
1851
1830
  provider: "twilio",
1852
1831
  fromNumber: "+15559999999",
1853
1832
  toNumber: "+15551111111",
1854
- assistantId: "self",
1855
1833
  // no task — inbound call
1856
1834
  });
1857
1835
 
@@ -1860,7 +1838,7 @@ describe("relay-server", () => {
1860
1838
  mockSendMessage.mockImplementation(
1861
1839
  createMockProviderResponse(["Welcome to the line."]),
1862
1840
  );
1863
- addTrustedVoiceContact("+15559999999", "self");
1841
+ addTrustedVoiceContact("+15559999999");
1864
1842
 
1865
1843
  const { ws, relay } = createMockWs(session.id);
1866
1844
 
@@ -1897,10 +1875,9 @@ describe("relay-server", () => {
1897
1875
  provider: "twilio",
1898
1876
  fromNumber: "+15559999999",
1899
1877
  toNumber: "+15551111111",
1900
- assistantId: "self",
1901
1878
  });
1902
1879
 
1903
- createPendingVoiceGuardianChallenge("self");
1880
+ createPendingVoiceGuardianChallenge();
1904
1881
 
1905
1882
  const { ws, relay } = createMockWs(session.id);
1906
1883
 
@@ -1952,14 +1929,12 @@ describe("relay-server", () => {
1952
1929
  provider: "twilio",
1953
1930
  fromNumber: "+15551111111",
1954
1931
  toNumber: "+15559999999",
1955
- assistantId: "self",
1956
1932
  callMode: "guardian_verification",
1957
1933
  guardianVerificationSessionId: "gv-session-ptr-success",
1958
1934
  initiatedFromConversationId: "conv-gv-pointer-success-origin",
1959
1935
  });
1960
1936
 
1961
1937
  const secret = createVoiceVerificationSession(
1962
- "self",
1963
1938
  "+15559999999",
1964
1939
  "gv-session-ptr-success",
1965
1940
  );
@@ -2009,17 +1984,12 @@ describe("relay-server", () => {
2009
1984
  provider: "twilio",
2010
1985
  fromNumber: "+15551111111",
2011
1986
  toNumber: "+15559999999",
2012
- assistantId: "self",
2013
1987
  callMode: "guardian_verification",
2014
1988
  guardianVerificationSessionId: "gv-session-ptr-fail",
2015
1989
  initiatedFromConversationId: "conv-gv-pointer-fail-origin",
2016
1990
  });
2017
1991
 
2018
- createVoiceVerificationSession(
2019
- "self",
2020
- "+15559999999",
2021
- "gv-session-ptr-fail",
2022
- );
1992
+ createVoiceVerificationSession("+15559999999", "gv-session-ptr-fail");
2023
1993
 
2024
1994
  const { relay } = createMockWs(session.id);
2025
1995
 
@@ -2071,14 +2041,12 @@ describe("relay-server", () => {
2071
2041
  provider: "twilio",
2072
2042
  fromNumber: "+15558887777",
2073
2043
  toNumber: "+15551111111",
2074
- assistantId: "self",
2075
2044
  });
2076
2045
 
2077
2046
  // Create a voice invite with friend/guardian names
2078
2047
  const code = generateVoiceCode(6);
2079
2048
  const codeHash = hashVoiceCode(code);
2080
2049
  createInvite({
2081
- assistantId: "self",
2082
2050
  sourceChannel: "voice",
2083
2051
  maxUses: 1,
2084
2052
  expectedExternalUserId: "+15558887777",
@@ -2146,14 +2114,12 @@ describe("relay-server", () => {
2146
2114
  provider: "twilio",
2147
2115
  fromNumber: "+15558886666",
2148
2116
  toNumber: "+15551111111",
2149
- assistantId: "self",
2150
2117
  });
2151
2118
 
2152
2119
  // Create a voice invite with friend/guardian names
2153
2120
  const code = generateVoiceCode(6);
2154
2121
  const codeHash = hashVoiceCode(code);
2155
2122
  createInvite({
2156
- assistantId: "self",
2157
2123
  sourceChannel: "voice",
2158
2124
  maxUses: 1,
2159
2125
  expectedExternalUserId: "+15558886666",
@@ -2228,7 +2194,6 @@ describe("relay-server", () => {
2228
2194
  provider: "twilio",
2229
2195
  fromNumber: "+15558885555",
2230
2196
  toNumber: "+15551111111",
2231
- assistantId: "self",
2232
2197
  });
2233
2198
 
2234
2199
  // No voice invite created for this caller
@@ -2282,7 +2247,6 @@ describe("relay-server", () => {
2282
2247
  provider: "twilio",
2283
2248
  fromNumber: "+15558885556",
2284
2249
  toNumber: "+15551111111",
2285
- assistantId: "self",
2286
2250
  });
2287
2251
 
2288
2252
  const { ws, relay } = createMockWs(session.id);
@@ -2323,7 +2287,6 @@ describe("relay-server", () => {
2323
2287
  provider: "twilio",
2324
2288
  fromNumber: "+15558884444",
2325
2289
  toNumber: "+15551111111",
2326
- assistantId: "self",
2327
2290
  });
2328
2291
 
2329
2292
  const { ws, relay } = createMockWs(session.id);
@@ -2388,7 +2351,6 @@ describe("relay-server", () => {
2388
2351
  provider: "twilio",
2389
2352
  fromNumber: "+15558883333",
2390
2353
  toNumber: "+15551111111",
2391
- assistantId: "self",
2392
2354
  });
2393
2355
 
2394
2356
  const { ws, relay } = createMockWs(session.id);
@@ -2422,7 +2384,6 @@ describe("relay-server", () => {
2422
2384
  provider: "twilio",
2423
2385
  fromNumber: "+15558882222",
2424
2386
  toNumber: "+15551111111",
2425
- assistantId: "self",
2426
2387
  });
2427
2388
 
2428
2389
  const { ws, relay } = createMockWs(session.id);
@@ -2480,12 +2441,10 @@ describe("relay-server", () => {
2480
2441
  provider: "twilio",
2481
2442
  fromNumber: "+15558881111",
2482
2443
  toNumber: "+15551111111",
2483
- assistantId: "self",
2484
2444
  });
2485
2445
 
2486
2446
  // Create a blocked member
2487
2447
  upsertMember({
2488
- assistantId: "self",
2489
2448
  sourceChannel: "voice",
2490
2449
  externalUserId: "+15558881111",
2491
2450
  externalChatId: "+15558881111",
@@ -2531,7 +2490,6 @@ describe("relay-server", () => {
2531
2490
  provider: "twilio",
2532
2491
  fromNumber: "+15557770001",
2533
2492
  toNumber: "+15551111111",
2534
- assistantId: "self",
2535
2493
  });
2536
2494
 
2537
2495
  const { relay } = createMockWs(session.id);
@@ -2579,7 +2537,6 @@ describe("relay-server", () => {
2579
2537
  provider: "twilio",
2580
2538
  fromNumber: "+15557770002",
2581
2539
  toNumber: "+15551111111",
2582
- assistantId: "self",
2583
2540
  });
2584
2541
 
2585
2542
  // Track provider calls to verify no LLM turn is triggered on approval
@@ -2670,7 +2627,6 @@ describe("relay-server", () => {
2670
2627
  provider: "twilio",
2671
2628
  fromNumber: "+15557770003",
2672
2629
  toNumber: "+15551111111",
2673
- assistantId: "self",
2674
2630
  });
2675
2631
 
2676
2632
  const { ws, relay } = createMockWs(session.id);
@@ -2754,7 +2710,6 @@ describe("relay-server", () => {
2754
2710
  provider: "twilio",
2755
2711
  fromNumber: "+15557770004",
2756
2712
  toNumber: "+15551111111",
2757
- assistantId: "self",
2758
2713
  });
2759
2714
 
2760
2715
  const { ws, relay } = createMockWs(session.id);
@@ -2831,7 +2786,6 @@ describe("relay-server", () => {
2831
2786
  provider: "twilio",
2832
2787
  fromNumber: "+15557770005",
2833
2788
  toNumber: "+15551111111",
2834
- assistantId: "self",
2835
2789
  });
2836
2790
 
2837
2791
  const { relay } = createMockWs(session.id);
@@ -2877,7 +2831,6 @@ describe("relay-server", () => {
2877
2831
  provider: "twilio",
2878
2832
  fromNumber: "+15557770010",
2879
2833
  toNumber: "+15551111111",
2880
- assistantId: "self",
2881
2834
  });
2882
2835
 
2883
2836
  const { ws, relay } = createMockWs(session.id);
@@ -2935,7 +2888,6 @@ describe("relay-server", () => {
2935
2888
  provider: "twilio",
2936
2889
  fromNumber: "+15557770011",
2937
2890
  toNumber: "+15551111111",
2938
- assistantId: "self",
2939
2891
  });
2940
2892
 
2941
2893
  mockSendMessage.mockImplementation(
@@ -3001,7 +2953,6 @@ describe("relay-server", () => {
3001
2953
  provider: "twilio",
3002
2954
  fromNumber: "+15557770012",
3003
2955
  toNumber: "+15551111111",
3004
- assistantId: "self",
3005
2956
  });
3006
2957
 
3007
2958
  const { relay } = createMockWs(session.id);
@@ -3037,7 +2988,6 @@ describe("relay-server", () => {
3037
2988
  provider: "twilio",
3038
2989
  fromNumber: "+15557770013",
3039
2990
  toNumber: "+15551111111",
3040
- assistantId: "self",
3041
2991
  });
3042
2992
 
3043
2993
  const { ws, relay } = createMockWs(session.id);
@@ -3108,7 +3058,6 @@ describe("relay-server", () => {
3108
3058
  provider: "twilio",
3109
3059
  fromNumber: "+15557770014",
3110
3060
  toNumber: "+15551111111",
3111
- assistantId: "self",
3112
3061
  });
3113
3062
 
3114
3063
  const { ws, relay } = createMockWs(session.id);
@@ -3194,7 +3143,6 @@ describe("relay-server", () => {
3194
3143
  provider: "twilio",
3195
3144
  fromNumber: "+15557770015",
3196
3145
  toNumber: "+15551111111",
3197
- assistantId: "self",
3198
3146
  });
3199
3147
 
3200
3148
  const { ws, relay } = createMockWs(session.id);
@@ -3252,7 +3200,6 @@ describe("relay-server", () => {
3252
3200
  provider: "twilio",
3253
3201
  fromNumber: "+15557770016",
3254
3202
  toNumber: "+15551111111",
3255
- assistantId: "self",
3256
3203
  });
3257
3204
 
3258
3205
  const { ws, relay } = createMockWs(session.id);
@@ -3301,7 +3248,6 @@ describe("relay-server", () => {
3301
3248
  provider: "twilio",
3302
3249
  fromNumber: "+15557770017",
3303
3250
  toNumber: "+15551111111",
3304
- assistantId: "self",
3305
3251
  });
3306
3252
 
3307
3253
  const { ws, relay } = createMockWs(session.id);
@@ -3365,7 +3311,6 @@ describe("relay-server", () => {
3365
3311
  provider: "twilio",
3366
3312
  fromNumber: "+15557770020",
3367
3313
  toNumber: "+15551111111",
3368
- assistantId: "self",
3369
3314
  });
3370
3315
 
3371
3316
  const { ws, relay } = createMockWs(session.id);
@@ -3468,7 +3413,6 @@ describe("relay-server", () => {
3468
3413
  provider: "twilio",
3469
3414
  fromNumber: "+15557770021",
3470
3415
  toNumber: "+15551111111",
3471
- assistantId: "self",
3472
3416
  });
3473
3417
 
3474
3418
  const { relay } = createMockWs(session.id);
@@ -3526,7 +3470,6 @@ describe("relay-server", () => {
3526
3470
  provider: "twilio",
3527
3471
  fromNumber: "+15557770022",
3528
3472
  toNumber: "+15551111111",
3529
- assistantId: "self",
3530
3473
  });
3531
3474
 
3532
3475
  const { relay } = createMockWs(session.id);
@@ -3595,7 +3538,6 @@ describe("relay-server", () => {
3595
3538
  provider: "twilio",
3596
3539
  fromNumber: "+15557770023",
3597
3540
  toNumber: "+15551111111",
3598
- assistantId: "self",
3599
3541
  });
3600
3542
 
3601
3543
  const { relay } = createMockWs(session.id);
@@ -3673,7 +3615,6 @@ describe("relay-server", () => {
3673
3615
  provider: "twilio",
3674
3616
  fromNumber: "+15557770024",
3675
3617
  toNumber: "+15551111111",
3676
- assistantId: "self",
3677
3618
  });
3678
3619
 
3679
3620
  const { relay } = createMockWs(session.id);
@@ -3764,7 +3705,6 @@ describe("relay-server", () => {
3764
3705
  provider: "twilio",
3765
3706
  fromNumber: "+15557770025",
3766
3707
  toNumber: "+15551111111",
3767
- assistantId: "self",
3768
3708
  });
3769
3709
 
3770
3710
  // Do NOT add caller as trusted contact
@@ -3851,7 +3791,6 @@ describe("relay-server", () => {
3851
3791
  provider: "twilio",
3852
3792
  fromNumber: "+15551111111",
3853
3793
  toNumber: "+15559876543",
3854
- assistantId: "self",
3855
3794
  initiatedFromConversationId: "conv-relay-ptr-complete-origin",
3856
3795
  });
3857
3796
  updateCallSession(session.id, {
@@ -3890,7 +3829,6 @@ describe("relay-server", () => {
3890
3829
  provider: "twilio",
3891
3830
  fromNumber: "+15551111111",
3892
3831
  toNumber: "+15559876543",
3893
- assistantId: "self",
3894
3832
  initiatedFromConversationId: "conv-relay-ptr-fail-origin",
3895
3833
  });
3896
3834
  updateCallSession(session.id, { status: "in_progress" });
@@ -3927,7 +3865,6 @@ describe("relay-server", () => {
3927
3865
  provider: "twilio",
3928
3866
  fromNumber: "+15553334444",
3929
3867
  toNumber: "+15551111111",
3930
- assistantId: "self",
3931
3868
  });
3932
3869
 
3933
3870
  // Create a trusted-contact verification challenge with status 'pending'
@@ -3937,7 +3874,6 @@ describe("relay-server", () => {
3937
3874
  const tcSecret = "654321";
3938
3875
  createVerificationSession({
3939
3876
  id: randomUUID(),
3940
- assistantId: "self",
3941
3877
  channel: "voice",
3942
3878
  challengeHash: createHash("sha256").update(tcSecret).digest("hex"),
3943
3879
  expiresAt: Date.now() + 10 * 60 * 1000,
@@ -4011,11 +3947,10 @@ describe("relay-server", () => {
4011
3947
  provider: "twilio",
4012
3948
  fromNumber: "+15552223333",
4013
3949
  toNumber: "+15551111111",
4014
- assistantId: "self",
4015
3950
  });
4016
3951
 
4017
3952
  // Create a guardian challenge (default verificationPurpose = 'guardian')
4018
- const secret = createPendingVoiceGuardianChallenge("self");
3953
+ const secret = createPendingVoiceGuardianChallenge();
4019
3954
 
4020
3955
  mockSendMessage.mockImplementation(
4021
3956
  createMockProviderResponse(["Hello, how can I help you?"]),
@@ -4067,13 +4002,11 @@ describe("relay-server", () => {
4067
4002
  provider: "twilio",
4068
4003
  fromNumber: "+15557776666",
4069
4004
  toNumber: "+15551111111",
4070
- assistantId: "self",
4071
4005
  });
4072
4006
 
4073
4007
  const code = generateVoiceCode(6);
4074
4008
  const codeHash = hashVoiceCode(code);
4075
4009
  createInvite({
4076
- assistantId: "self",
4077
4010
  sourceChannel: "voice",
4078
4011
  maxUses: 1,
4079
4012
  expectedExternalUserId: "+15557776666",
@@ -4148,7 +4081,6 @@ describe("relay-server", () => {
4148
4081
 
4149
4082
  // Create a guardian binding with a different displayName
4150
4083
  createGuardianBinding({
4151
- assistantId: "self",
4152
4084
  channel: "voice",
4153
4085
  guardianExternalUserId: "+15559990001",
4154
4086
  guardianDeliveryChatId: "+15559990001",
@@ -4163,7 +4095,6 @@ describe("relay-server", () => {
4163
4095
  provider: "twilio",
4164
4096
  fromNumber: "+15559990099",
4165
4097
  toNumber: "+15551111111",
4166
- assistantId: "self",
4167
4098
  });
4168
4099
 
4169
4100
  const { ws, relay } = createMockWs(session.id);
@@ -4195,7 +4126,6 @@ describe("relay-server", () => {
4195
4126
 
4196
4127
  // Create a guardian binding with a displayName
4197
4128
  createGuardianBinding({
4198
- assistantId: "self",
4199
4129
  channel: "voice",
4200
4130
  guardianExternalUserId: "+15559990002",
4201
4131
  guardianDeliveryChatId: "+15559990002",
@@ -4210,7 +4140,6 @@ describe("relay-server", () => {
4210
4140
  provider: "twilio",
4211
4141
  fromNumber: "+15559990098",
4212
4142
  toNumber: "+15551111111",
4213
- assistantId: "self",
4214
4143
  });
4215
4144
 
4216
4145
  const { ws, relay } = createMockWs(session.id);
@@ -4247,7 +4176,6 @@ describe("relay-server", () => {
4247
4176
  provider: "twilio",
4248
4177
  fromNumber: "+15559990097",
4249
4178
  toNumber: "+15551111111",
4250
- assistantId: "self",
4251
4179
  });
4252
4180
 
4253
4181
  const { ws, relay } = createMockWs(session.id);
@@ -72,7 +72,6 @@ function grantParams(
72
72
  ): CreateScopedApprovalGrantParams {
73
73
  const futureExpiry = new Date(Date.now() + 60_000).toISOString();
74
74
  return {
75
- assistantId: "self",
76
75
  scopeMode: "request_id",
77
76
  requestChannel: "telegram",
78
77
  decisionChannel: "telegram",
@@ -95,11 +94,7 @@ describe("scoped-approval-grants / request_id scope", () => {
95
94
  expect(grant.status).toBe("active");
96
95
  expect(grant.requestId).toBe("req-1");
97
96
 
98
- const result = consumeScopedApprovalGrantByRequestId(
99
- "req-1",
100
- "consumer-1",
101
- "self",
102
- );
97
+ const result = consumeScopedApprovalGrantByRequestId("req-1", "consumer-1");
103
98
  expect(result.ok).toBe(true);
104
99
  expect(result.grant).not.toBeNull();
105
100
  expect(result.grant!.status).toBe("consumed");
@@ -111,18 +106,10 @@ describe("scoped-approval-grants / request_id scope", () => {
111
106
  grantParams({ scopeMode: "request_id", requestId: "req-2" }),
112
107
  );
113
108
 
114
- const first = consumeScopedApprovalGrantByRequestId(
115
- "req-2",
116
- "consumer-a",
117
- "self",
118
- );
109
+ const first = consumeScopedApprovalGrantByRequestId("req-2", "consumer-a");
119
110
  expect(first.ok).toBe(true);
120
111
 
121
- const second = consumeScopedApprovalGrantByRequestId(
122
- "req-2",
123
- "consumer-b",
124
- "self",
125
- );
112
+ const second = consumeScopedApprovalGrantByRequestId("req-2", "consumer-b");
126
113
  expect(second.ok).toBe(false);
127
114
  expect(second.grant).toBeNull();
128
115
  });
@@ -131,7 +118,6 @@ describe("scoped-approval-grants / request_id scope", () => {
131
118
  const result = consumeScopedApprovalGrantByRequestId(
132
119
  "nonexistent",
133
120
  "consumer-x",
134
- "self",
135
121
  );
136
122
  expect(result.ok).toBe(false);
137
123
  });
@@ -149,7 +135,6 @@ describe("scoped-approval-grants / request_id scope", () => {
149
135
  const result = consumeScopedApprovalGrantByRequestId(
150
136
  "req-expired",
151
137
  "consumer-1",
152
- "self",
153
138
  );
154
139
  expect(result.ok).toBe(false);
155
140
  });
@@ -421,11 +406,7 @@ describe("scoped-approval-grants / expiry", () => {
421
406
  expect(count).toBe(2);
422
407
 
423
408
  // Verify the alive grant is still active
424
- const alive = consumeScopedApprovalGrantByRequestId(
425
- "req-alive",
426
- "c1",
427
- "self",
428
- );
409
+ const alive = consumeScopedApprovalGrantByRequestId("req-alive", "c1");
429
410
  expect(alive.ok).toBe(true);
430
411
  });
431
412
 
@@ -438,7 +419,7 @@ describe("scoped-approval-grants / expiry", () => {
438
419
  expiresAt: new Date(Date.now() + 60_000).toISOString(),
439
420
  }),
440
421
  );
441
- consumeScopedApprovalGrantByRequestId("req-consumed", "c1", "self");
422
+ consumeScopedApprovalGrantByRequestId("req-consumed", "c1");
442
423
 
443
424
  // Force the expiry time to the past for the consumed grant (simulating time passing)
444
425
  // The sweep should not touch consumed grants
@@ -483,15 +464,11 @@ describe("scoped-approval-grants / revoke", () => {
483
464
  expect(count).toBe(2);
484
465
 
485
466
  // Revoked grant cannot be consumed
486
- const revoked = consumeScopedApprovalGrantByRequestId(
487
- "req-r1",
488
- "c1",
489
- "self",
490
- );
467
+ const revoked = consumeScopedApprovalGrantByRequestId("req-r1", "c1");
491
468
  expect(revoked.ok).toBe(false);
492
469
 
493
470
  // Unaffected grant is still consumable
494
- const alive = consumeScopedApprovalGrantByRequestId("req-r3", "c1", "self");
471
+ const alive = consumeScopedApprovalGrantByRequestId("req-r3", "c1");
495
472
  expect(alive.ok).toBe(true);
496
473
  });
497
474
 
@@ -506,11 +483,7 @@ describe("scoped-approval-grants / revoke", () => {
506
483
 
507
484
  revokeScopedApprovalGrantsForContext({ conversationId: "conv-1" });
508
485
 
509
- const result = consumeScopedApprovalGrantByRequestId(
510
- "req-revoke",
511
- "c1",
512
- "self",
513
- );
486
+ const result = consumeScopedApprovalGrantByRequestId("req-revoke", "c1");
514
487
  expect(result.ok).toBe(false);
515
488
  });
516
489
 
@@ -530,11 +503,7 @@ describe("scoped-approval-grants / revoke", () => {
530
503
  );
531
504
 
532
505
  // The grant should still be active (not revoked)
533
- const result = consumeScopedApprovalGrantByRequestId(
534
- "req-guard",
535
- "c1",
536
- "self",
537
- );
506
+ const result = consumeScopedApprovalGrantByRequestId("req-guard", "c1");
538
507
  expect(result.ok).toBe(true);
539
508
  });
540
509
  });