@vellumai/assistant 0.10.1-dev.202606240206.7c2bca6 → 0.10.1-staging.1

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 (213) hide show
  1. package/eslint-rules/cli-no-daemon-internals.js +0 -6
  2. package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +0 -31
  3. package/node_modules/@vellumai/gateway-client/src/index.ts +0 -14
  4. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +0 -17
  5. package/openapi.yaml +0 -113
  6. package/package.json +1 -1
  7. package/scripts/test.sh +15 -36
  8. package/src/__tests__/actor-token-service.test.ts +14 -36
  9. package/src/__tests__/anthropic-provider.test.ts +0 -67
  10. package/src/__tests__/call-controller.test.ts +0 -19
  11. package/src/__tests__/channel-guardian.test.ts +0 -26
  12. package/src/__tests__/config-loader-backfill.test.ts +1 -5
  13. package/src/__tests__/config-schema.test.ts +0 -1
  14. package/src/__tests__/conversation-agent-loop.test.ts +0 -4
  15. package/src/__tests__/conversation-queue.test.ts +0 -89
  16. package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -12
  17. package/src/__tests__/conversation-routes-slash-commands.test.ts +0 -12
  18. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +3 -3
  19. package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -352
  20. package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -47
  21. package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -4
  22. package/src/__tests__/dynamic-page-surface.test.ts +94 -0
  23. package/src/__tests__/emit-signal-routing-intent.test.ts +5 -10
  24. package/src/__tests__/events-dev-bypass-actor.test.ts +1 -7
  25. package/src/__tests__/guardian-binding-drift-heal.test.ts +10 -75
  26. package/src/__tests__/guardian-dispatch.test.ts +1 -95
  27. package/src/__tests__/guardian-outbound-http.test.ts +0 -13
  28. package/src/__tests__/helpers/channel-test-adapter.ts +7 -1
  29. package/src/__tests__/host-app-control-routes.test.ts +30 -24
  30. package/src/__tests__/host-bash-routes.test.ts +41 -31
  31. package/src/__tests__/host-browser-routes.test.ts +32 -26
  32. package/src/__tests__/host-cu-routes-targeted.test.ts +33 -25
  33. package/src/__tests__/host-file-routes-targeted.test.ts +52 -40
  34. package/src/__tests__/host-transfer-routes-targeted.test.ts +43 -31
  35. package/src/__tests__/http-user-message-parity.test.ts +8 -165
  36. package/src/__tests__/llm-context-normalization.test.ts +0 -105
  37. package/src/__tests__/llm-resolver.test.ts +5 -205
  38. package/src/__tests__/llm-usage-store.test.ts +0 -25
  39. package/src/__tests__/media-stream-server-integration.test.ts +0 -127
  40. package/src/__tests__/non-member-access-request.test.ts +17 -189
  41. package/src/__tests__/notification-broadcaster.test.ts +0 -4
  42. package/src/__tests__/notification-decision-recipient-context.test.ts +32 -33
  43. package/src/__tests__/notification-deep-link.test.ts +0 -4
  44. package/src/__tests__/notification-guardian-path.test.ts +0 -19
  45. package/src/__tests__/pending-interactions-resolved-event.test.ts +4 -7
  46. package/src/__tests__/relay-server.test.ts +22 -674
  47. package/src/__tests__/runtime-attachment-metadata.test.ts +1 -0
  48. package/src/__tests__/secret-ingress-http.test.ts +0 -12
  49. package/src/__tests__/send-endpoint-busy.test.ts +8 -30
  50. package/src/__tests__/skills.test.ts +0 -44
  51. package/src/__tests__/slack-inbound-verification.test.ts +2 -47
  52. package/src/__tests__/stt-hints.test.ts +13 -44
  53. package/src/__tests__/subagent-detail.test.ts +0 -27
  54. package/src/__tests__/subagent-disposal.test.ts +0 -65
  55. package/src/__tests__/tool-executor.test.ts +11 -16
  56. package/src/__tests__/twilio-routes.test.ts +0 -96
  57. package/src/api/events/ui-surface-show.ts +3 -8
  58. package/src/api/index.ts +0 -7
  59. package/src/api/responses/conversation-message.ts +0 -4
  60. package/src/api/responses/llm-request-log-entry.ts +0 -25
  61. package/src/api/responses/subagent-detail.ts +0 -17
  62. package/src/calls/__tests__/relay-setup-router.test.ts +4 -262
  63. package/src/calls/guardian-dispatch.ts +8 -10
  64. package/src/calls/inbound-trust-reader.ts +1 -17
  65. package/src/calls/media-stream-server.ts +0 -21
  66. package/src/calls/relay-server.ts +49 -166
  67. package/src/calls/relay-setup-router.ts +7 -37
  68. package/src/calls/stt-hints.ts +12 -9
  69. package/src/calls/twilio-routes.ts +3 -13
  70. package/src/cli/commands/__tests__/cache.test.ts +1 -8
  71. package/src/cli/commands/cache.ts +181 -194
  72. package/src/cli/commands/mcp.ts +218 -252
  73. package/src/cli/commands/memory/index.ts +0 -2
  74. package/src/cli/commands/plugins.ts +3 -75
  75. package/src/cli/lib/__tests__/list-installed-plugins.test.ts +1 -160
  76. package/src/cli/lib/list-installed-plugins.ts +1 -179
  77. package/src/config/llm-resolver.ts +14 -151
  78. package/src/config/loader.ts +5 -36
  79. package/src/config/schemas/__tests__/memory-v3.test.ts +0 -1
  80. package/src/config/schemas/memory-lifecycle.ts +0 -12
  81. package/src/config/schemas/memory-v3.ts +0 -7
  82. package/src/config/schemas/memory.ts +0 -4
  83. package/src/config/schemas/timeouts.ts +0 -8
  84. package/src/config/seed-inference-profiles.ts +5 -14
  85. package/src/config/skills.ts +5 -27
  86. package/src/contacts/contacts-write.ts +0 -3
  87. package/src/daemon/conversation-agent-loop.ts +0 -9
  88. package/src/daemon/conversation-process.ts +16 -35
  89. package/src/daemon/conversation-surfaces.ts +18 -273
  90. package/src/daemon/conversation-tool-setup.ts +1 -4
  91. package/src/daemon/conversation.ts +0 -1
  92. package/src/daemon/handlers/config-channels.ts +9 -9
  93. package/src/daemon/handlers/conversations.ts +0 -77
  94. package/src/daemon/lifecycle.ts +2 -28
  95. package/src/daemon/memory-v2-startup.test.ts +0 -72
  96. package/src/daemon/memory-v2-startup.ts +19 -87
  97. package/src/daemon/message-types/surfaces.ts +20 -11
  98. package/src/daemon/shutdown-handlers.ts +0 -20
  99. package/src/daemon/tool-setup-types.ts +0 -9
  100. package/src/ipc/__tests__/clients-list-ipc.test.ts +1 -1
  101. package/src/ipc/assistant-server.ts +2 -2
  102. package/src/memory/embedding-gemini.test.ts +1 -3
  103. package/src/memory/embedding-gemini.ts +2 -18
  104. package/src/memory/llm-usage-store.ts +20 -48
  105. package/src/memory/migrations/014-backfill-inbox-thread-state.ts +3 -13
  106. package/src/memory/migrations/136-drop-assistant-id-columns.ts +27 -52
  107. package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +56 -130
  108. package/src/memory/migrations/schema-introspection.ts +0 -14
  109. package/src/memory/v2/__tests__/cli-command-store.test.ts +0 -25
  110. package/src/memory/v2/__tests__/skill-store.test.ts +0 -80
  111. package/src/memory/v2/cli-command-store.ts +38 -75
  112. package/src/memory/v2/prompts/consolidation.ts +82 -13
  113. package/src/memory/v2/prompts/router.ts +93 -21
  114. package/src/memory/v2/skill-store.ts +31 -68
  115. package/src/messaging/providers/gmail/client.ts +5 -4
  116. package/src/notifications/__tests__/broadcaster.test.ts +8 -16
  117. package/src/notifications/__tests__/decision-engine.test.ts +9 -78
  118. package/src/notifications/broadcaster.ts +1 -8
  119. package/src/notifications/decision-engine.ts +7 -15
  120. package/src/notifications/destination-resolver.ts +24 -68
  121. package/src/notifications/emit-signal.ts +14 -39
  122. package/src/oauth/connection-resolver.test.ts +0 -28
  123. package/src/oauth/scope-utils.ts +2 -20
  124. package/src/permissions/question-prompter.test.ts +1 -1
  125. package/src/permissions/question-prompter.ts +4 -7
  126. package/src/plugin-api/index.ts +6 -6
  127. package/src/plugin-api/vision-support.test.ts +4 -28
  128. package/src/plugin-api/vision-support.ts +31 -66
  129. package/src/plugins/defaults/advisor/__tests__/consult.test.ts +0 -46
  130. package/src/plugins/defaults/advisor/consult.ts +1 -18
  131. package/src/plugins/defaults/advisor/tools/advisor.ts +0 -4
  132. package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +33 -172
  133. package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +64 -22
  134. package/src/plugins/defaults/image-fallback/src/image-persist.ts +8 -5
  135. package/src/plugins/defaults/index.ts +6 -10
  136. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +5 -134
  137. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +2 -11
  138. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +19 -246
  139. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +1 -8
  140. package/src/providers/anthropic/client.ts +0 -31
  141. package/src/providers/model-catalog.ts +0 -16
  142. package/src/runtime/__tests__/trust-verdict-consumer.test.ts +3 -256
  143. package/src/runtime/access-request-helper.ts +39 -19
  144. package/src/runtime/actor-trust-resolver.ts +2 -2
  145. package/src/runtime/assistant-stream-state.ts +2 -9
  146. package/src/runtime/auth/require-bound-guardian.ts +11 -21
  147. package/src/runtime/channel-verification-service.ts +0 -24
  148. package/src/runtime/guardian-vellum-migration.ts +7 -66
  149. package/src/runtime/local-actor-identity.ts +11 -76
  150. package/src/runtime/pending-interactions.ts +1 -11
  151. package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
  152. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +0 -163
  153. package/src/runtime/routes/browser-routes.ts +1 -1
  154. package/src/runtime/routes/channel-verification-routes.ts +1 -1
  155. package/src/runtime/routes/conversation-routes.ts +81 -74
  156. package/src/runtime/routes/events-routes.ts +2 -2
  157. package/src/runtime/routes/host-app-control-routes.ts +4 -5
  158. package/src/runtime/routes/host-bash-routes.ts +4 -5
  159. package/src/runtime/routes/host-browser-routes.ts +11 -9
  160. package/src/runtime/routes/host-cu-routes.ts +4 -5
  161. package/src/runtime/routes/host-file-routes.ts +4 -5
  162. package/src/runtime/routes/host-transfer-routes.ts +6 -6
  163. package/src/runtime/routes/http-adapter.ts +1 -1
  164. package/src/runtime/routes/inbound-message-handler.ts +1 -1
  165. package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +2 -93
  166. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +31 -42
  167. package/src/runtime/routes/inbound-stages/background-dispatch.ts +4 -16
  168. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +8 -21
  169. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +3 -14
  170. package/src/runtime/routes/llm-context-normalization.ts +0 -71
  171. package/src/runtime/routes/mcp-auth-routes.ts +15 -38
  172. package/src/runtime/routes/subagents-routes.ts +0 -5
  173. package/src/runtime/routes/surface-action-routes.ts +51 -39
  174. package/src/runtime/trust-verdict-consumer.ts +9 -47
  175. package/src/signals/user-message.ts +0 -16
  176. package/src/subagent/manager.ts +0 -9
  177. package/src/tools/ask-question/ask-question-tool.test.ts +0 -29
  178. package/src/tools/ask-question/ask-question-tool.ts +0 -13
  179. package/src/tools/executor.ts +4 -4
  180. package/src/tools/ui-surface/definitions.ts +43 -0
  181. package/src/util/log-redact.ts +4 -2
  182. package/src/util/platform.ts +0 -5
  183. package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-delivery-contract.test.ts +0 -91
  184. package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +0 -48
  185. package/src/__tests__/card-surface-data.test.ts +0 -60
  186. package/src/__tests__/sse-actor-principal-guardian-source.test.ts +0 -102
  187. package/src/__tests__/steer-on-enqueue-question.test.ts +0 -181
  188. package/src/api/constants/sse-replay.ts +0 -41
  189. package/src/api/surfaces.ts +0 -33
  190. package/src/cli/commands/memory/__tests__/worker.test.ts +0 -302
  191. package/src/cli/commands/memory/worker.ts +0 -175
  192. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +0 -143
  193. package/src/contacts/__tests__/guardian-delivery-reader.test.ts +0 -312
  194. package/src/contacts/guardian-delivery-reader.ts +0 -223
  195. package/src/memory/__tests__/prompt-override.test.ts +0 -192
  196. package/src/memory/migrations/__tests__/014-backfill-inbox-thread-state.test.ts +0 -108
  197. package/src/memory/migrations/__tests__/136-drop-assistant-id-columns.test.ts +0 -82
  198. package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +0 -224
  199. package/src/memory/prompt-override.ts +0 -129
  200. package/src/memory/worker-control.ts +0 -118
  201. package/src/memory/worker-process.ts +0 -72
  202. package/src/notifications/__tests__/connected-channels.test.ts +0 -114
  203. package/src/notifications/__tests__/destination-resolver.test.ts +0 -256
  204. package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +0 -57
  205. package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +0 -108
  206. package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +0 -146
  207. package/src/runtime/__tests__/guardian-vellum-migration.test.ts +0 -181
  208. package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +0 -64
  209. package/src/runtime/__tests__/local-principal-trust.test.ts +0 -164
  210. package/src/runtime/anchored-guardian.test.ts +0 -156
  211. package/src/runtime/anchored-guardian.ts +0 -135
  212. package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +0 -99
  213. package/src/runtime/local-principal-trust.ts +0 -52
@@ -51,17 +51,11 @@ const ALLOWED_PREFIXES = {
51
51
  "../../config/schema",
52
52
  "../../config/env",
53
53
  "../../util/platform",
54
- "../../../util/platform",
55
54
  // Memory retrospective — the retrospective CLI runs the fork-based
56
55
  // retrospective in-process (no daemon, no IPC), so it imports the
57
56
  // job handler directly. Depth-2 for commands/memory/ nesting.
58
57
  "../../memory/memory-retrospective-job",
59
58
  "../../../memory/memory-retrospective-job",
60
- // Memory worker control — the `memory worker` CLI spawns/probes/stops
61
- // the worker OS process directly (no daemon, no IPC), so it imports the
62
- // shared PID-file control helpers. Depth-2 for commands/memory/ nesting.
63
- "../../memory/worker-control",
64
- "../../../memory/worker-control",
65
59
  "../logger",
66
60
  "../output",
67
61
  "../../logger",
@@ -7,7 +7,6 @@ import { describe, expect, test } from "bun:test";
7
7
 
8
8
  import { SourceMetadataSchema } from "../inbound-contract.js";
9
9
  import {
10
- makeResolutionFailedVerdict,
11
10
  TrustVerdictSchema,
12
11
  type TrustVerdict,
13
12
  } from "../trust-verdict-contract.js";
@@ -44,36 +43,6 @@ describe("TrustVerdictSchema", () => {
44
43
  expect(TrustVerdictSchema.parse(minimal)).toEqual(minimal);
45
44
  });
46
45
 
47
- test("parses a verdict carrying resolutionFailed", () => {
48
- const verdict = {
49
- trustClass: "unknown",
50
- canonicalSenderId: null,
51
- resolutionFailed: true,
52
- } satisfies TrustVerdict;
53
- expect(TrustVerdictSchema.parse(verdict)).toEqual(verdict);
54
- });
55
-
56
- test("leaves resolutionFailed undefined when absent", () => {
57
- const parsed = TrustVerdictSchema.parse({
58
- trustClass: "unknown",
59
- canonicalSenderId: null,
60
- });
61
- expect(parsed.resolutionFailed).toBeUndefined();
62
- });
63
-
64
- test("makeResolutionFailedVerdict builds an unknown sentinel", () => {
65
- expect(makeResolutionFailedVerdict("+15555550100")).toEqual({
66
- trustClass: "unknown",
67
- canonicalSenderId: "+15555550100",
68
- resolutionFailed: true,
69
- });
70
- expect(makeResolutionFailedVerdict(null)).toEqual({
71
- trustClass: "unknown",
72
- canonicalSenderId: null,
73
- resolutionFailed: true,
74
- });
75
- });
76
-
77
46
  test("rejects an invalid trustClass", () => {
78
47
  expect(() =>
79
48
  TrustVerdictSchema.parse({
@@ -73,7 +73,6 @@ export type { AdmissionPolicy } from "./admission-policy-contract.js";
73
73
 
74
74
  // Trust verdict contract (gateway → daemon) — Zod schemas + derived types
75
75
  export {
76
- makeResolutionFailedVerdict,
77
76
  ResolveInboundTrustRequestSchema,
78
77
  TRUST_CLASS_VALUES,
79
78
  TrustClassSchema,
@@ -85,16 +84,3 @@ export type {
85
84
  TrustClass,
86
85
  TrustVerdict,
87
86
  } from "./trust-verdict-contract.js";
88
-
89
- // Guardian delivery contract (daemon → gateway pull) — Zod schemas + derived types
90
- export {
91
- GuardianDeliverySchema,
92
- ResolveGuardianDeliveryRequestSchema,
93
- ResolveGuardianDeliveryResponseSchema,
94
- } from "./guardian-delivery-contract.js";
95
-
96
- export type {
97
- GuardianDelivery,
98
- ResolveGuardianDeliveryRequest,
99
- ResolveGuardianDeliveryResponse,
100
- } from "./guardian-delivery-contract.js";
@@ -42,11 +42,6 @@ export const TrustVerdictSchema = z.object({
42
42
  trustClass: TrustClassSchema,
43
43
  canonicalSenderId: z.string().nullable(),
44
44
 
45
- // Present+true ⇒ gateway attempted resolution but failed (DB error);
46
- // consumer treats it as "could not vouch", distinct from a real `unknown`
47
- // stranger.
48
- resolutionFailed: z.boolean().optional(),
49
-
50
45
  // Guardian binding — present only when a guardian binding matches.
51
46
  guardianExternalUserId: z.string().optional(),
52
47
  guardianDeliveryChatId: z.string().nullable().optional(),
@@ -68,18 +63,6 @@ export const TrustVerdictSchema = z.object({
68
63
 
69
64
  export type TrustVerdict = z.infer<typeof TrustVerdictSchema>;
70
65
 
71
- /**
72
- * Sentinel for a gateway resolver failure; consumers treat it as
73
- * could-not-vouch (distinct from a real `unknown` stranger). Takes the
74
- * already-canonicalized sender id so this module stays free of the gateway's
75
- * canonicalization util.
76
- */
77
- export function makeResolutionFailedVerdict(
78
- canonicalSenderId: string | null,
79
- ): TrustVerdict {
80
- return { trustClass: "unknown", canonicalSenderId, resolutionFailed: true };
81
- }
82
-
83
66
  /**
84
67
  * IPC request for `resolve_inbound_trust`. Per-actor identity keys the
85
68
  * gateway resolver needs to classify the inbound sender. The response reuses
package/openapi.yaml CHANGED
@@ -3973,8 +3973,6 @@ paths:
3973
3973
  anyOf:
3974
3974
  - type: string
3975
3975
  - type: "null"
3976
- resolutionFailed:
3977
- type: boolean
3978
3976
  guardianExternalUserId:
3979
3977
  type: string
3980
3978
  guardianDeliveryChatId:
@@ -8380,36 +8378,6 @@ paths:
8380
8378
  anyOf:
8381
8379
  - type: string
8382
8380
  - type: "null"
8383
- error:
8384
- anyOf:
8385
- - type: object
8386
- properties:
8387
- name:
8388
- anyOf:
8389
- - type: string
8390
- - type: "null"
8391
- message:
8392
- anyOf:
8393
- - type: string
8394
- - type: "null"
8395
- code:
8396
- anyOf:
8397
- - type: string
8398
- - type: "null"
8399
- provider:
8400
- anyOf:
8401
- - type: string
8402
- - type: "null"
8403
- statusCode:
8404
- anyOf:
8405
- - type: number
8406
- - type: "null"
8407
- retryAfterMs:
8408
- anyOf:
8409
- - type: number
8410
- - type: "null"
8411
- additionalProperties: false
8412
- - type: "null"
8413
8381
  required:
8414
8382
  - id
8415
8383
  - createdAt
@@ -14711,12 +14679,6 @@ paths:
14711
14679
  type: string
14712
14680
  disabled:
14713
14681
  type: boolean
14714
- headers:
14715
- type: object
14716
- propertyNames:
14717
- type: string
14718
- additionalProperties:
14719
- type: string
14720
14682
  required:
14721
14683
  - name
14722
14684
  - transportType
@@ -14944,14 +14906,6 @@ paths:
14944
14906
  items:
14945
14907
  type: string
14946
14908
  - type: "null"
14947
- headers:
14948
- anyOf:
14949
- - type: object
14950
- propertyNames:
14951
- type: string
14952
- additionalProperties:
14953
- type: string
14954
- - type: "null"
14955
14909
  required:
14956
14910
  - name
14957
14911
  responses:
@@ -15324,36 +15278,6 @@ paths:
15324
15278
  anyOf:
15325
15279
  - type: string
15326
15280
  - type: "null"
15327
- error:
15328
- anyOf:
15329
- - type: object
15330
- properties:
15331
- name:
15332
- anyOf:
15333
- - type: string
15334
- - type: "null"
15335
- message:
15336
- anyOf:
15337
- - type: string
15338
- - type: "null"
15339
- code:
15340
- anyOf:
15341
- - type: string
15342
- - type: "null"
15343
- provider:
15344
- anyOf:
15345
- - type: string
15346
- - type: "null"
15347
- statusCode:
15348
- anyOf:
15349
- - type: number
15350
- - type: "null"
15351
- retryAfterMs:
15352
- anyOf:
15353
- - type: number
15354
- - type: "null"
15355
- additionalProperties: false
15356
- - type: "null"
15357
15281
  required:
15358
15282
  - id
15359
15283
  - createdAt
@@ -17781,36 +17705,6 @@ paths:
17781
17705
  anyOf:
17782
17706
  - type: string
17783
17707
  - type: "null"
17784
- error:
17785
- anyOf:
17786
- - type: object
17787
- properties:
17788
- name:
17789
- anyOf:
17790
- - type: string
17791
- - type: "null"
17792
- message:
17793
- anyOf:
17794
- - type: string
17795
- - type: "null"
17796
- code:
17797
- anyOf:
17798
- - type: string
17799
- - type: "null"
17800
- provider:
17801
- anyOf:
17802
- - type: string
17803
- - type: "null"
17804
- statusCode:
17805
- anyOf:
17806
- - type: number
17807
- - type: "null"
17808
- retryAfterMs:
17809
- anyOf:
17810
- - type: number
17811
- - type: "null"
17812
- additionalProperties: false
17813
- - type: "null"
17814
17708
  required:
17815
17709
  - id
17816
17710
  - createdAt
@@ -25994,13 +25888,6 @@ paths:
25994
25888
  type: boolean
25995
25889
  messageId:
25996
25890
  type: string
25997
- toolUseId:
25998
- type: string
25999
- input:
26000
- type: object
26001
- propertyNames:
26002
- type: string
26003
- additionalProperties: {}
26004
25891
  required:
26005
25892
  - type
26006
25893
  - content
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.10.1-dev.202606240206.7c2bca6",
3
+ "version": "0.10.1-staging.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
package/scripts/test.sh CHANGED
@@ -169,7 +169,6 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
169
169
 
170
170
  safe_name="$(echo "${test_file}" | tr "/" "_")"
171
171
  out_file="${results_dir}/${safe_name}.out"
172
- base="$(basename "${test_file}")"
173
172
 
174
173
  coverage_args=""
175
174
  if [[ "${coverage_enabled}" == "true" ]]; then
@@ -186,48 +185,28 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
186
185
  timeout_cmd="gtimeout"
187
186
  fi
188
187
 
189
- # Run the test file in its own bun process. Wrapped in a function so a
190
- # transient infrastructure crash can be retried without duplicating the
191
- # four-way (timeout × experimental-filter) invocation.
192
- run_bun_test() {
193
- if [[ -n "${timeout_cmd}" ]]; then
194
- if [[ "${exclude_exp}" == "true" ]]; then
195
- "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
196
- else
197
- "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
198
- fi
199
- else
200
- if [[ "${exclude_exp}" == "true" ]]; then
201
- bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
202
- else
203
- bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
204
- fi
205
- fi
206
- }
207
-
208
188
  start_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
209
189
 
210
- run_bun_test
211
- exit_code=$?
212
-
213
- # Retry once on a transient bun loader/runtime crash. Bun occasionally aborts
214
- # a worker before its tests run — e.g. "# Unhandled error between tests" with
215
- # "error: ENOENT reading <corrupted path>" — failing the whole job even though
216
- # the file is green on a clean process. Such a crash truncates the run before
217
- # any assertion executes, so it prints no "(fail)" line; genuine assertion
218
- # failures do, and are reported immediately without a retry (fast feedback, no
219
- # masking of intermittent real failures). Timeouts (124/137) are handled by the
220
- # hang branch below, not here.
221
- if [[ ${exit_code} -ne 0 && ${exit_code} -ne 124 && ${exit_code} -ne 137 ]] \
222
- && ! grep -q "^(fail)" "${out_file}" 2>/dev/null; then
223
- echo " ↻ ${base} (transient crash, exit ${exit_code} — retrying once)"
224
- run_bun_test
225
- exit_code=$?
190
+ if [[ -n "${timeout_cmd}" ]]; then
191
+ if [[ "${exclude_exp}" == "true" ]]; then
192
+ "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
193
+ else
194
+ "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
195
+ fi
196
+ else
197
+ if [[ "${exclude_exp}" == "true" ]]; then
198
+ bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
199
+ else
200
+ bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
201
+ fi
226
202
  fi
203
+ exit_code=$?
227
204
 
228
205
  end_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
229
206
  elapsed=$(( end_ms - start_ms ))
230
207
 
208
+ base="$(basename "${test_file}")"
209
+
231
210
  # Record duration for longest-first scheduling in future runs.
232
211
  # Write the repo-relative path (not the basename) so the lookup in future
233
212
  # runs disambiguates files that share a basename across directories.
@@ -29,17 +29,6 @@ mock.module("../config/env.js", () => ({
29
29
  checkUnrecognizedEnvVars: () => {},
30
30
  }));
31
31
 
32
- // No gateway in tests: force the reader to miss so resolution exercises the
33
- // local-store bootstrap fallback deterministically.
34
- let fakeGuardianDelivery: { principalId?: string | null } | null = null;
35
- mock.module("../contacts/guardian-delivery-reader.js", () => ({
36
- getGuardianDelivery: async () =>
37
- fakeGuardianDelivery ? [fakeGuardianDelivery] : null,
38
- guardianForChannel: (list: { principalId?: string | null }[]) => list[0],
39
- invalidateGuardianDeliveryCache: () => {},
40
- onContactChange: () => {},
41
- }));
42
-
43
32
  import { getDb } from "../memory/db-connection.js";
44
33
  import { initializeDb } from "../memory/db-init.js";
45
34
  import { resetExternalAssistantIdCache } from "../runtime/auth/external-assistant-id.js";
@@ -62,7 +51,6 @@ await initializeDb();
62
51
  beforeEach(async () => {
63
52
  initAuthSigningKey(TEST_KEY);
64
53
  resetExternalAssistantIdCache();
65
- fakeGuardianDelivery = null;
66
54
  resetDbForTesting();
67
55
  await initializeDb();
68
56
  });
@@ -72,8 +60,8 @@ beforeEach(async () => {
72
60
  // ---------------------------------------------------------------------------
73
61
 
74
62
  describe("resolveLocalTrustContext", () => {
75
- test("falls back to minimal trust context when no vellum binding exists", async () => {
76
- const ctx = await resolveLocalTrustContext();
63
+ test("falls back to minimal trust context when no vellum binding exists", () => {
64
+ const ctx = resolveLocalTrustContext();
77
65
  expect(ctx.sourceChannel).toBe("vellum");
78
66
  });
79
67
  });
@@ -83,48 +71,38 @@ describe("resolveLocalTrustContext", () => {
83
71
  // ---------------------------------------------------------------------------
84
72
 
85
73
  describe("resolveLocalAuthContext", () => {
86
- test("returns AuthContext with local principal type", async () => {
87
- const ctx = await resolveLocalAuthContext("session-123");
74
+ test("returns AuthContext with local principal type", () => {
75
+ const ctx = resolveLocalAuthContext("session-123");
88
76
  expect(ctx.principalType).toBe("local");
89
77
  });
90
78
 
91
- test("subject follows local:self:<conversationId> pattern", async () => {
92
- const ctx = await resolveLocalAuthContext("session-abc");
79
+ test("subject follows local:self:<conversationId> pattern", () => {
80
+ const ctx = resolveLocalAuthContext("session-abc");
93
81
  expect(ctx.subject).toBe("local:self:session-abc");
94
82
  });
95
83
 
96
- test("assistantId is always self", async () => {
97
- const ctx = await resolveLocalAuthContext("session-123");
84
+ test("assistantId is always self", () => {
85
+ const ctx = resolveLocalAuthContext("session-123");
98
86
  expect(ctx.assistantId).toBe("self");
99
87
  });
100
88
 
101
- test("uses local_v1 scope profile with local.all scope", async () => {
102
- const ctx = await resolveLocalAuthContext("session-123");
89
+ test("uses local_v1 scope profile with local.all scope", () => {
90
+ const ctx = resolveLocalAuthContext("session-123");
103
91
  expect(ctx.scopeProfile).toBe("local_v1");
104
92
  expect(ctx.scopes.has("local.all")).toBe(true);
105
93
  });
106
94
 
107
- test("actorPrincipalId is undefined when no vellum binding exists", async () => {
95
+ test("actorPrincipalId is undefined when no vellum binding exists", () => {
108
96
  const db = getDb();
109
97
  db.run("DELETE FROM contact_channels");
110
98
  db.run("DELETE FROM contacts");
111
99
 
112
- const ctx = await resolveLocalAuthContext("session-123");
100
+ const ctx = resolveLocalAuthContext("session-123");
113
101
  expect(ctx.actorPrincipalId).toBeUndefined();
114
102
  });
115
103
 
116
- test("resolves the guardian principal from the gateway when available", async () => {
117
- const db = getDb();
118
- db.run("DELETE FROM contact_channels");
119
- db.run("DELETE FROM contacts");
120
- fakeGuardianDelivery = { principalId: "gateway-guardian-id" };
121
-
122
- const ctx = await resolveLocalAuthContext("session-123");
123
- expect(ctx.actorPrincipalId).toBe("gateway-guardian-id");
124
- });
125
-
126
- test("conversationId matches the provided argument", async () => {
127
- const ctx = await resolveLocalAuthContext("my-session");
104
+ test("conversationId matches the provided argument", () => {
105
+ const ctx = resolveLocalAuthContext("my-session");
128
106
  expect(ctx.conversationId).toBe("my-session");
129
107
  });
130
108
  });
@@ -3191,70 +3191,3 @@ describe("AnthropicProvider — thinking block send-time filtering", () => {
3191
3191
  expect(signatures).toContain("sig-step2");
3192
3192
  });
3193
3193
  });
3194
-
3195
- describe("AnthropicProvider — deprecated sampling params (temperature / top_p / top_k)", () => {
3196
- beforeEach(() => {
3197
- lastStreamParams = null;
3198
- });
3199
-
3200
- // opus-4-7 / opus-4-8 (and, conservatively, fable) reject `temperature`,
3201
- // `top_p`, and `top_k` with a 400; the provider must strip all three.
3202
- for (const model of [
3203
- "claude-opus-4-8",
3204
- "claude-opus-4-7",
3205
- "claude-fable-5",
3206
- ]) {
3207
- test(`strips temperature, top_p, and top_k for ${model}`, async () => {
3208
- const provider = new AnthropicProvider("sk-ant-test", model);
3209
- await provider.sendMessage([userMsg("Hi")], {
3210
- systemPrompt: "You are helpful.",
3211
- config: { temperature: 0, top_p: 0.95, top_k: 40 },
3212
- });
3213
- expect(lastStreamParams!).not.toHaveProperty("temperature");
3214
- expect(lastStreamParams!).not.toHaveProperty("top_p");
3215
- expect(lastStreamParams!).not.toHaveProperty("top_k");
3216
- });
3217
- }
3218
-
3219
- // opus-4-6 / sonnet-4-6 still accept the params — they must pass through,
3220
- // including `temperature: 0` (a value check, not truthiness).
3221
- test("forwards temperature (including 0), top_p, and top_k for opus-4-6", async () => {
3222
- const provider = new AnthropicProvider("sk-ant-test", "claude-opus-4-6");
3223
- await provider.sendMessage([userMsg("Hi")], {
3224
- systemPrompt: "You are helpful.",
3225
- config: { temperature: 0, top_p: 0.95, top_k: 40 },
3226
- });
3227
- expect(lastStreamParams!.temperature).toBe(0);
3228
- expect(lastStreamParams!.top_p).toBe(0.95);
3229
- expect(lastStreamParams!.top_k).toBe(40);
3230
- });
3231
-
3232
- test("forwards temperature, top_p, and top_k for sonnet-4-6", async () => {
3233
- const provider = new AnthropicProvider("sk-ant-test", "claude-sonnet-4-6");
3234
- await provider.sendMessage([userMsg("Hi")], {
3235
- systemPrompt: "You are helpful.",
3236
- config: { temperature: 0.7, top_p: 0.9, top_k: 20 },
3237
- });
3238
- expect(lastStreamParams!.temperature).toBe(0.7);
3239
- expect(lastStreamParams!.top_p).toBe(0.9);
3240
- expect(lastStreamParams!.top_k).toBe(20);
3241
- });
3242
-
3243
- // A per-call model override targeting a deprecating model must win over the
3244
- // provider's default (accepting) model.
3245
- test("strips params when a per-call model override deprecates them", async () => {
3246
- const provider = new AnthropicProvider("sk-ant-test", "claude-sonnet-4-6");
3247
- await provider.sendMessage([userMsg("Hi")], {
3248
- systemPrompt: "You are helpful.",
3249
- config: {
3250
- temperature: 0,
3251
- top_p: 0.95,
3252
- top_k: 40,
3253
- model: "claude-opus-4-8",
3254
- },
3255
- });
3256
- expect(lastStreamParams!).not.toHaveProperty("temperature");
3257
- expect(lastStreamParams!).not.toHaveProperty("top_p");
3258
- expect(lastStreamParams!).not.toHaveProperty("top_k");
3259
- });
3260
- });
@@ -168,25 +168,6 @@ mock.module("../notifications/emit-signal.js", () => ({
168
168
  }),
169
169
  }));
170
170
 
171
- // Guardian principalId is resolved from the gateway binding reader. Mirror the
172
- // vellum binding seeded by resetTables so guardian dispatch can resolve it.
173
- mock.module("../contacts/guardian-delivery-reader.js", () => ({
174
- getGuardianDelivery: async () => [
175
- {
176
- channelType: "vellum",
177
- contactId: "guardian-vellum",
178
- principalId: "test-principal-id",
179
- address: "local",
180
- status: "active",
181
- },
182
- ],
183
- guardianForChannel: (
184
- list: Array<{ channelType: string; status: string }>,
185
- channelType: string,
186
- ) => list.find((g) => g.channelType === channelType && g.status === "active"),
187
- anyGuardian: (list: unknown[]) => list[0],
188
- }));
189
-
190
171
  mock.module("../calls/voice-session-bridge.js", () => {
191
172
  mockStartVoiceTurn = mock(createMockVoiceTurn(["Hello", " there"]));
192
173
  return {
@@ -83,32 +83,6 @@ mock.module("../ipc/gateway-client.js", () => ({
83
83
  }),
84
84
  }));
85
85
 
86
- // Guardian-delivery reader mock — the inbound challenge guard reads guardian
87
- // existence from the gateway. Derive the list from the local binding state so
88
- // the gateway-backed presence guard mirrors the DB the rest of the test sets up.
89
- const resolveGuardianList = async (input?: { channelTypes?: string[] }) => {
90
- const { findGuardianForChannel } = await import(
91
- "../contacts/contact-store.js"
92
- );
93
- const channels = input?.channelTypes ?? [];
94
- return channels
95
- .map((channelType) => {
96
- const found = findGuardianForChannel(channelType);
97
- return found ? { channelType, status: "active" } : null;
98
- })
99
- .filter((g): g is { channelType: string; status: string } => g !== null);
100
- };
101
-
102
- mock.module("../contacts/guardian-delivery-reader.js", () => ({
103
- getGuardianDelivery: resolveGuardianList,
104
- getGuardianDeliveryFresh: resolveGuardianList,
105
- guardianForChannel: (
106
- list: Array<{ channelType: string; status: string }>,
107
- channelType: string,
108
- ) =>
109
- list.find((g) => g.channelType === channelType && g.status === "active"),
110
- }));
111
-
112
86
  import { handleChannelVerificationSession } from "../daemon/handlers/config-channels.js";
113
87
  import type {
114
88
  ChannelVerificationSessionRequest,
@@ -745,11 +745,7 @@ describe("loadConfig startup behavior", () => {
745
745
  );
746
746
  expect(raw.llm.profiles.frontier.provider).toBe("anthropic");
747
747
  expect(raw.llm.profiles.frontier.model).toBe("claude-opus-4-8");
748
- // Speed is served by DeepSeek V4 Flash on Fireworks.
749
- expect(raw.llm.profiles["cost-optimized"].provider).toBe("fireworks");
750
- expect(raw.llm.profiles["cost-optimized"].model).toBe(
751
- "accounts/fireworks/models/deepseek-v4-flash",
752
- );
748
+ expect(raw.llm.profiles["cost-optimized"].provider).toBe("anthropic");
753
749
  });
754
750
 
755
751
  test("off-platform managed profiles are overwritten on every boot", () => {
@@ -120,7 +120,6 @@ describe("AssistantConfigSchema", () => {
120
120
  shellDefaultTimeoutSec: 120,
121
121
  shellMaxTimeoutSec: 600,
122
122
  permissionTimeoutSec: 300,
123
- questionResponseTimeoutSec: 1800,
124
123
  toolExecutionTimeoutSec: 120,
125
124
  providerStreamTimeoutSec: 1800,
126
125
  backgroundTurnTimeoutSec: 1800,
@@ -1705,10 +1705,6 @@ describe("session-agent-loop", () => {
1705
1705
  expect(ctx.abortController).toBeNull();
1706
1706
  expect(ctx.currentRequestId).toBeUndefined();
1707
1707
  expect(ctx.commandIntent).toBeUndefined();
1708
- // Turn-scoped interactivity is stamped during the run and must be cleared
1709
- // so paths that bypass this loop (e.g. opportunity wakes) don't inherit a
1710
- // stale value instead of falling back to live client state.
1711
- expect(ctx.currentTurnIsNonInteractive).toBeUndefined();
1712
1708
  });
1713
1709
 
1714
1710
  test("clears state and surfaces a processing error when the provider call fails", async () => {