@vellumai/assistant 0.10.1-dev.202606240917.ea25efe → 0.10.1-dev.202606241257.d4f0dcf

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 (97) hide show
  1. package/package.json +1 -1
  2. package/src/__tests__/agent-loop-override-profile.test.ts +1 -0
  3. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +2 -0
  4. package/src/__tests__/agent-wake-override-profile.test.ts +2 -0
  5. package/src/__tests__/annotate-activity-metadata.test.ts +2 -0
  6. package/src/__tests__/annotate-risk-options.test.ts +2 -0
  7. package/src/__tests__/approval-cascade.test.ts +2 -0
  8. package/src/__tests__/background-workers-disk-pressure.test.ts +2 -0
  9. package/src/__tests__/btw-routes.test.ts +2 -0
  10. package/src/__tests__/build-persisted-content.test.ts +2 -0
  11. package/src/__tests__/channel-reply-delivery.test.ts +2 -0
  12. package/src/__tests__/compaction-events.test.ts +2 -0
  13. package/src/__tests__/compaction.benchmark.test.ts +2 -0
  14. package/src/__tests__/compactor-call-site-logging.test.ts +2 -0
  15. package/src/__tests__/compactor-low-watermark-cut.test.ts +2 -0
  16. package/src/__tests__/compactor-preserved-tail-count.test.ts +2 -0
  17. package/src/__tests__/compactor-summary-call-truncation.test.ts +2 -0
  18. package/src/__tests__/compactor-web-search-strip.test.ts +2 -0
  19. package/src/__tests__/conversation-abort-tool-results.test.ts +2 -0
  20. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -0
  21. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
  22. package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -0
  23. package/src/__tests__/conversation-agent-loop.test.ts +3 -0
  24. package/src/__tests__/conversation-analysis-routes.test.ts +2 -0
  25. package/src/__tests__/conversation-app-control-lifecycle.test.ts +2 -0
  26. package/src/__tests__/conversation-confirmation-signals.test.ts +2 -0
  27. package/src/__tests__/conversation-history-web-search.test.ts +2 -0
  28. package/src/__tests__/conversation-load-history-repair.test.ts +2 -0
  29. package/src/__tests__/conversation-load-history-stripped.test.ts +2 -0
  30. package/src/__tests__/conversation-pairing.test.ts +2 -0
  31. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +2 -0
  32. package/src/__tests__/conversation-process-callsite.test.ts +2 -0
  33. package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -0
  34. package/src/__tests__/conversation-queue.test.ts +2 -0
  35. package/src/__tests__/conversation-routes-guardian-reply.test.ts +2 -0
  36. package/src/__tests__/conversation-routes-slash-commands.test.ts +2 -0
  37. package/src/__tests__/conversation-slash-queue.test.ts +2 -0
  38. package/src/__tests__/conversation-slash-unknown.test.ts +2 -0
  39. package/src/__tests__/conversation-speed-override.test.ts +2 -0
  40. package/src/__tests__/conversation-title-service.test.ts +2 -0
  41. package/src/__tests__/conversation-usage.test.ts +2 -0
  42. package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
  43. package/src/__tests__/conversation-workspace-injection.test.ts +2 -0
  44. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +2 -0
  45. package/src/__tests__/db-migration-rollback.test.ts +205 -171
  46. package/src/__tests__/dm-persistence.test.ts +2 -0
  47. package/src/__tests__/filing-service.test.ts +2 -0
  48. package/src/__tests__/heartbeat-disk-pressure.test.ts +2 -0
  49. package/src/__tests__/heartbeat-service.test.ts +2 -0
  50. package/src/__tests__/http-user-message-parity.test.ts +2 -0
  51. package/src/__tests__/inbound-slack-persistence.test.ts +2 -0
  52. package/src/__tests__/memory-retrieval-hook.test.ts +2 -0
  53. package/src/__tests__/messaging-send-tool.test.ts +2 -0
  54. package/src/__tests__/migration-import-from-url.test.ts +2 -2
  55. package/src/__tests__/native-web-search.test.ts +2 -0
  56. package/src/__tests__/notification-deep-link.test.ts +2 -0
  57. package/src/__tests__/outbound-slack-persistence.test.ts +2 -0
  58. package/src/__tests__/persistence-secret-redaction.test.ts +2 -0
  59. package/src/__tests__/process-message-background-slack.test.ts +2 -0
  60. package/src/__tests__/process-message-display-content.test.ts +2 -0
  61. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +2 -0
  62. package/src/__tests__/secret-ingress-http.test.ts +2 -0
  63. package/src/__tests__/subagent-notify-parent.test.ts +2 -0
  64. package/src/__tests__/subagent-spawn-tool-fork.test.ts +2 -0
  65. package/src/__tests__/subagent-tools.test.ts +2 -0
  66. package/src/__tests__/suggestion-routes.test.ts +2 -0
  67. package/src/__tests__/title-generate-hook.test.ts +2 -0
  68. package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -0
  69. package/src/__tests__/tool-preview-lifecycle.test.ts +2 -0
  70. package/src/__tests__/tool-result-metadata-plumbing.test.ts +2 -0
  71. package/src/__tests__/tool-start-timestamp.test.ts +2 -0
  72. package/src/__tests__/verification-control-plane-policy.test.ts +2 -0
  73. package/src/__tests__/web-search-backend-failure.test.ts +2 -0
  74. package/src/cli/lib/__tests__/install-from-github.test.ts +102 -0
  75. package/src/config/schemas/memory-lifecycle.ts +1 -1
  76. package/src/daemon/conversation.ts +8 -0
  77. package/src/daemon/lifecycle.ts +6 -28
  78. package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
  79. package/src/memory/conversation-crud.ts +38 -0
  80. package/src/memory/db-init.ts +8 -493
  81. package/src/memory/jobs-worker.ts +58 -0
  82. package/src/memory/memory-retrospective-job.ts +9 -8
  83. package/src/memory/migrations/300-add-processing-started-at.ts +30 -0
  84. package/src/memory/migrations/__tests__/run-migrations.test.ts +2 -2
  85. package/src/memory/migrations/run-migrations.ts +90 -6
  86. package/src/memory/migrations/validate-migration-state.ts +101 -66
  87. package/src/memory/schema/conversations.ts +9 -0
  88. package/src/memory/steps.ts +571 -0
  89. package/src/memory/worker-process.ts +2 -2
  90. package/src/runtime/routes/conversation-cli-routes.ts +4 -5
  91. package/src/runtime/routes/conversation-list-routes.ts +4 -7
  92. package/src/runtime/routes/identity-routes.ts +3 -2
  93. package/src/runtime/routes/migration-rollback-routes.ts +4 -3
  94. package/src/runtime/routes/migration-routes.ts +2 -1
  95. package/src/runtime/services/__tests__/conversation-serializer.test.ts +1 -0
  96. package/src/runtime/services/conversation-serializer.ts +7 -9
  97. package/src/memory/migrations/registry.ts +0 -573
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.10.1-dev.202606240917.ea25efe",
3
+ "version": "0.10.1-dev.202606241257.d4f0dcf",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -384,6 +384,7 @@ describe("SubagentManager.spawn — overrideProfile inheritance", () => {
384
384
  // inheritance chain breaks at the second nesting level.
385
385
 
386
386
  mock.module("../memory/conversation-crud.js", () => ({
387
+ setConversationProcessingStartedAt: () => {},
387
388
  // Always return undefined for the row read so the test fails fast unless
388
389
  // executeSubagentSpawn reads from context.overrideProfile first.
389
390
  getConversationOverrideProfile: () => undefined,
@@ -21,6 +21,8 @@ import type {
21
21
  import type { Message } from "../providers/types.js";
22
22
 
23
23
  mock.module("../memory/conversation-crud.js", () => ({
24
+ setConversationProcessingStartedAt: () => {},
25
+ isConversationProcessing: () => false,
24
26
  getConversationOverrideProfile: () => undefined,
25
27
  }));
26
28
 
@@ -31,6 +31,8 @@ import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
31
31
  let mockOverrideProfile: string | undefined = undefined;
32
32
 
33
33
  mock.module("../memory/conversation-crud.js", () => ({
34
+ setConversationProcessingStartedAt: () => {},
35
+ isConversationProcessing: () => false,
34
36
  getConversationOverrideProfile: (_id: string) => mockOverrideProfile,
35
37
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
36
38
  }));
@@ -55,6 +55,8 @@ let mockedRowContent = "";
55
55
  const updates: Array<{ id: string; content: string }> = [];
56
56
 
57
57
  mock.module("../memory/conversation-crud.js", () => ({
58
+ setConversationProcessingStartedAt: () => {},
59
+ isConversationProcessing: () => false,
58
60
  addMessage: () => ({ id: "mock-msg-id" }),
59
61
  getMessageById: (id: string) =>
60
62
  mockedRowContent ? { id, content: mockedRowContent } : null,
@@ -50,6 +50,8 @@ let mockedRowContent = "";
50
50
  const updates: Array<{ id: string; content: string }> = [];
51
51
 
52
52
  mock.module("../memory/conversation-crud.js", () => ({
53
+ setConversationProcessingStartedAt: () => {},
54
+ isConversationProcessing: () => false,
53
55
  addMessage: () => ({ id: "mock-msg-id" }),
54
56
  getMessageById: (id: string) =>
55
57
  mockedRowContent ? { id, content: mockedRowContent } : null,
@@ -121,6 +121,8 @@ mock.module("../security/secret-allowlist.js", () => ({
121
121
  }));
122
122
 
123
123
  mock.module("../memory/conversation-crud.js", () => ({
124
+ setConversationProcessingStartedAt: () => {},
125
+ isConversationProcessing: () => false,
124
126
  setConversationOriginChannelIfUnset: () => {},
125
127
  updateConversationContextWindow: () => {},
126
128
  deleteMessageById: () => {},
@@ -100,6 +100,8 @@ mock.module("../daemon/process-message.js", () => ({
100
100
 
101
101
  const createdConversations: Array<{ conversationType: string }> = [];
102
102
  mock.module("../memory/conversation-crud.js", () => ({
103
+ setConversationProcessingStartedAt: () => {},
104
+ isConversationProcessing: () => false,
103
105
  addMessage: mock(() => ({ id: "msg-1" })),
104
106
  archiveConversation: mock(() => true),
105
107
  batchSetDisplayOrders: mock(() => {}),
@@ -43,6 +43,8 @@ mock.module("../memory/conversation-key-store.js", () => ({
43
43
  const mockAddMessage = mock(() => {});
44
44
 
45
45
  mock.module("../memory/conversation-crud.js", () => ({
46
+ setConversationProcessingStartedAt: () => {},
47
+ isConversationProcessing: () => false,
46
48
  addMessage: mockAddMessage,
47
49
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
48
50
  }));
@@ -41,6 +41,8 @@ mock.module("../config/loader.js", () => ({
41
41
  }));
42
42
 
43
43
  mock.module("../memory/conversation-crud.js", () => ({
44
+ setConversationProcessingStartedAt: () => {},
45
+ isConversationProcessing: () => false,
44
46
  addMessage: () => ({ id: "mock-msg-id" }),
45
47
  getMessageById: () => null,
46
48
  updateMessageContent: () => {},
@@ -81,6 +81,8 @@ mock.module("../runtime/gateway-client.js", () => ({
81
81
  }));
82
82
 
83
83
  mock.module("../memory/conversation-crud.js", () => ({
84
+ setConversationProcessingStartedAt: () => {},
85
+ isConversationProcessing: () => false,
84
86
  setConversationOriginChannelIfUnset: () => {},
85
87
  updateConversationContextWindow: () => {},
86
88
  deleteMessageById: () => {},
@@ -125,6 +125,8 @@ mock.module("../security/secret-allowlist.js", () => ({
125
125
  }));
126
126
 
127
127
  mock.module("../memory/conversation-crud.js", () => ({
128
+ setConversationProcessingStartedAt: () => {},
129
+ isConversationProcessing: () => false,
128
130
  setConversationOriginChannelIfUnset: () => {},
129
131
  updateConversationContextWindow: () => {},
130
132
  setConversationHistoryStrippedAt: () => {},
@@ -17,6 +17,8 @@ mock.module("../util/logger.js", () => ({
17
17
  // The compactor reads the conversation's image attachments from the DB to
18
18
  // build its manifest; with no images these return empty.
19
19
  mock.module("../memory/conversation-crud.js", () => ({
20
+ setConversationProcessingStartedAt: () => {},
21
+ isConversationProcessing: () => false,
20
22
  getMessages: () => [],
21
23
  }));
22
24
  mock.module("../memory/attachments-store.js", () => ({
@@ -30,6 +30,8 @@ mock.module("../util/logger.js", () => ({
30
30
  }));
31
31
 
32
32
  mock.module("../memory/conversation-crud.js", () => ({
33
+ setConversationProcessingStartedAt: () => {},
34
+ isConversationProcessing: () => false,
33
35
  getMessages: () => [],
34
36
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
35
37
  }));
@@ -32,6 +32,8 @@ mock.module("../util/logger.js", () => ({
32
32
  }));
33
33
 
34
34
  mock.module("../memory/conversation-crud.js", () => ({
35
+ setConversationProcessingStartedAt: () => {},
36
+ isConversationProcessing: () => false,
35
37
  getMessages: () => [],
36
38
  }));
37
39
 
@@ -22,6 +22,8 @@ mock.module("../util/logger.js", () => ({
22
22
  }));
23
23
 
24
24
  mock.module("../memory/conversation-crud.js", () => ({
25
+ setConversationProcessingStartedAt: () => {},
26
+ isConversationProcessing: () => false,
25
27
  getMessages: () => [],
26
28
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
27
29
  }));
@@ -32,6 +32,8 @@ mock.module("../util/logger.js", () => ({
32
32
  }));
33
33
 
34
34
  mock.module("../memory/conversation-crud.js", () => ({
35
+ setConversationProcessingStartedAt: () => {},
36
+ isConversationProcessing: () => false,
35
37
  getMessages: () => [],
36
38
  }));
37
39
 
@@ -22,6 +22,8 @@ mock.module("../util/logger.js", () => ({
22
22
  }));
23
23
 
24
24
  mock.module("../memory/conversation-crud.js", () => ({
25
+ setConversationProcessingStartedAt: () => {},
26
+ isConversationProcessing: () => false,
25
27
  getMessages: () => [],
26
28
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
27
29
  }));
@@ -112,6 +112,8 @@ let reservedRowContent: Map<string, string> = new Map();
112
112
  let reserveCounter = 0;
113
113
 
114
114
  mock.module("../memory/conversation-crud.js", () => ({
115
+ setConversationProcessingStartedAt: () => {},
116
+ isConversationProcessing: () => false,
115
117
  setConversationOriginChannelIfUnset: () => {},
116
118
  updateConversationContextWindow: () => {},
117
119
  deleteMessageById: () => {},
@@ -87,6 +87,8 @@ mock.module("../daemon/disk-pressure-guard.js", () => ({
87
87
  }));
88
88
 
89
89
  mock.module("../memory/conversation-crud.js", () => ({
90
+ setConversationProcessingStartedAt: () => {},
91
+ isConversationProcessing: () => false,
90
92
  getConversation: () => ({
91
93
  id: "conv-123",
92
94
  conversationType: "background",
@@ -147,6 +147,8 @@ let mockConversationRow: {
147
147
  };
148
148
 
149
149
  mock.module("../memory/conversation-crud.js", () => ({
150
+ setConversationProcessingStartedAt: () => {},
151
+ isConversationProcessing: () => false,
150
152
  setConversationOriginChannelIfUnset: () => {},
151
153
  setConversationHistoryStrippedAt: () => {},
152
154
  updateConversationUsage: () => {},
@@ -257,6 +257,8 @@ mock.module("../plugins/defaults/compaction/overflow-policy.js", () => ({
257
257
  }));
258
258
 
259
259
  mock.module("../memory/conversation-crud.js", () => ({
260
+ setConversationProcessingStartedAt: () => {},
261
+ isConversationProcessing: () => false,
260
262
  setConversationOriginChannelIfUnset: () => {},
261
263
  setConversationHistoryStrippedAt: () => {},
262
264
  updateConversationUsage: () => {},
@@ -273,6 +273,8 @@ const deleteMessageByIdMock = mock(() => ({
273
273
  const reserveMessageMock = mock(async () => ({ id: "msg-reserve" }));
274
274
  const updateMessageContentMock = mock(() => {});
275
275
  mock.module("../memory/conversation-crud.js", () => ({
276
+ setConversationProcessingStartedAt: () => {},
277
+ isConversationProcessing: () => false,
276
278
  setConversationOriginChannelIfUnset: () => {},
277
279
  updateConversationUsage: () => {},
278
280
  updateMessageMetadata: updateMessageMetadataMock,
@@ -700,6 +702,7 @@ function makeCtx(
700
702
  mockConversationRow?.slackContextCompactionWatermarkTs ?? null,
701
703
  lastNotifiedInferenceProfile:
702
704
  mockConversationRow?.lastNotifiedInferenceProfile ?? null,
705
+ processingStartedAt: mockConversationRow?.processingStartedAt ?? null,
703
706
 
704
707
  memoryPolicy: { scopeId: "default", includeDefaultFallback: true },
705
708
 
@@ -22,6 +22,8 @@ mock.module("../memory/conversation-key-store.js", () => ({
22
22
  }));
23
23
 
24
24
  mock.module("../memory/conversation-crud.js", () => ({
25
+ setConversationProcessingStartedAt: () => {},
26
+ isConversationProcessing: () => false,
25
27
  getConversation: mockGetConversation,
26
28
  getMessages: mockGetMessages,
27
29
  createConversation: mockCreateConversation,
@@ -76,6 +76,8 @@ mock.module("../security/secret-allowlist.js", () => ({
76
76
  }));
77
77
 
78
78
  mock.module("../memory/conversation-crud.js", () => ({
79
+ setConversationProcessingStartedAt: () => {},
80
+ isConversationProcessing: () => false,
79
81
  updateConversationContextWindow: () => {},
80
82
  deleteMessageById: () => {},
81
83
  updateConversationTitle: () => {},
@@ -112,6 +112,8 @@ mock.module("../security/secret-allowlist.js", () => ({
112
112
  }));
113
113
 
114
114
  mock.module("../memory/conversation-crud.js", () => ({
115
+ setConversationProcessingStartedAt: () => {},
116
+ isConversationProcessing: () => false,
115
117
  setConversationOriginChannelIfUnset: () => {},
116
118
  updateConversationContextWindow: () => {},
117
119
  deleteMessageById: () => {},
@@ -36,6 +36,8 @@ let deletedMessageIds: string[] = [];
36
36
  let updatedMessages: Array<{ id: string; content: string }> = [];
37
37
 
38
38
  mock.module("../memory/conversation-crud.js", () => ({
39
+ setConversationProcessingStartedAt: () => {},
40
+ isConversationProcessing: () => false,
39
41
  getMessages: (conversationId: string) =>
40
42
  dbMessages.filter((m) => m.conversationId === conversationId),
41
43
  deleteMessageById: (messageId: string) => {
@@ -74,6 +74,8 @@ let mockConversation: Record<string, unknown> | null = null;
74
74
  let nextMockMessageId = 1;
75
75
 
76
76
  mock.module("../memory/conversation-crud.js", () => ({
77
+ setConversationProcessingStartedAt: () => {},
78
+ isConversationProcessing: () => false,
77
79
  updateConversationContextWindow: () => {},
78
80
  deleteMessageById: () => {},
79
81
  updateConversationTitle: () => {},
@@ -70,6 +70,8 @@ let mockDbMessages: Array<{
70
70
  let mockConversation: Record<string, unknown> | null = null;
71
71
 
72
72
  mock.module("../memory/conversation-crud.js", () => ({
73
+ setConversationProcessingStartedAt: () => {},
74
+ isConversationProcessing: () => false,
73
75
  updateConversationContextWindow: () => {},
74
76
  deleteMessageById: () => {},
75
77
  updateConversationTitle: () => {},
@@ -51,6 +51,8 @@ const getConversationMock = mock((id: string) => {
51
51
  });
52
52
 
53
53
  mock.module("../memory/conversation-crud.js", () => ({
54
+ setConversationProcessingStartedAt: () => {},
55
+ isConversationProcessing: () => false,
54
56
  setConversationOriginChannelIfUnset: () => {},
55
57
  updateConversationContextWindow: () => {},
56
58
  deleteMessageById: () => {},
@@ -46,6 +46,8 @@ mock.module("../runtime/assistant-event-hub.js", () => ({
46
46
  }));
47
47
 
48
48
  mock.module("../memory/conversation-crud.js", () => ({
49
+ setConversationProcessingStartedAt: () => {},
50
+ isConversationProcessing: () => false,
49
51
  setConversationOriginChannelIfUnset: () => {},
50
52
  setConversationOriginInterfaceIfUnset: () => {},
51
53
  provenanceFromTrustContext: () => ({
@@ -157,6 +157,8 @@ let mockDbMessages: Array<{ id: string; role: string; content: string }> = [];
157
157
  let mockConversation: Record<string, unknown> | null = null;
158
158
 
159
159
  mock.module("../memory/conversation-crud.js", () => ({
160
+ setConversationProcessingStartedAt: () => {},
161
+ isConversationProcessing: () => false,
160
162
  setConversationOriginChannelIfUnset: () => {},
161
163
  setConversationOriginInterfaceIfUnset: () => {},
162
164
  updateConversationContextWindow: () => {},
@@ -98,6 +98,8 @@ mock.module("../security/secret-allowlist.js", () => ({
98
98
  }));
99
99
 
100
100
  mock.module("../memory/conversation-crud.js", () => ({
101
+ setConversationProcessingStartedAt: () => {},
102
+ isConversationProcessing: () => false,
101
103
  setConversationOriginChannelIfUnset: () => {},
102
104
  deleteMessageById: () => {},
103
105
  getMessages: () => [],
@@ -149,6 +149,8 @@ mock.module("../security/secret-allowlist.js", () => ({
149
149
  }));
150
150
 
151
151
  mock.module("../memory/conversation-crud.js", () => ({
152
+ setConversationProcessingStartedAt: () => {},
153
+ isConversationProcessing: () => false,
152
154
  setConversationOriginChannelIfUnset: () => {},
153
155
  setConversationOriginInterfaceIfUnset: () => {},
154
156
  updateConversationContextWindow: () => {},
@@ -77,6 +77,8 @@ mock.module("../runtime/confirmation-request-guardian-bridge.js", () => ({
77
77
  }));
78
78
 
79
79
  mock.module("../memory/conversation-crud.js", () => ({
80
+ setConversationProcessingStartedAt: () => {},
81
+ isConversationProcessing: () => false,
80
82
  addMessage: (
81
83
  conversationId: string,
82
84
  role: string,
@@ -126,6 +126,8 @@ mock.module("../runtime/confirmation-request-guardian-bridge.js", () => ({
126
126
  }));
127
127
 
128
128
  mock.module("../memory/conversation-crud.js", () => ({
129
+ setConversationProcessingStartedAt: () => {},
130
+ isConversationProcessing: () => false,
129
131
  addMessage: (
130
132
  conversationId: string,
131
133
  role: string,
@@ -100,6 +100,8 @@ mock.module("../security/secret-allowlist.js", () => ({
100
100
  }));
101
101
 
102
102
  mock.module("../memory/conversation-crud.js", () => ({
103
+ setConversationProcessingStartedAt: () => {},
104
+ isConversationProcessing: () => false,
103
105
  setConversationOriginChannelIfUnset: () => {},
104
106
  setConversationOriginInterfaceIfUnset: () => {},
105
107
  updateConversationContextWindow: () => {},
@@ -101,6 +101,8 @@ const addMessageCalls: Array<{
101
101
  }> = [];
102
102
 
103
103
  mock.module("../memory/conversation-crud.js", () => ({
104
+ setConversationProcessingStartedAt: () => {},
105
+ isConversationProcessing: () => false,
104
106
  setConversationOriginChannelIfUnset: () => {},
105
107
  updateConversationContextWindow: () => {},
106
108
  deleteMessageById: () => {},
@@ -119,6 +119,8 @@ mock.module("../security/secret-allowlist.js", () => ({
119
119
  }));
120
120
 
121
121
  mock.module("../memory/conversation-crud.js", () => ({
122
+ setConversationProcessingStartedAt: () => {},
123
+ isConversationProcessing: () => false,
122
124
  setConversationOriginChannelIfUnset: () => {},
123
125
  updateConversationContextWindow: () => {},
124
126
  deleteMessageById: () => {},
@@ -34,6 +34,8 @@ mock.module("../runtime/btw-sidechain.js", () => ({
34
34
  }));
35
35
 
36
36
  mock.module("../memory/conversation-crud.js", () => ({
37
+ setConversationProcessingStartedAt: () => {},
38
+ isConversationProcessing: () => false,
37
39
  getConversation: mockGetConversation,
38
40
  getMessages: mockGetMessages,
39
41
  updateConversationTitle: mockUpdateConversationTitle,
@@ -23,6 +23,8 @@ mock.module("../config/loader.js", () => ({
23
23
  }));
24
24
 
25
25
  mock.module("../memory/conversation-crud.js", () => ({
26
+ setConversationProcessingStartedAt: () => {},
27
+ isConversationProcessing: () => false,
26
28
  updateConversationUsage: (
27
29
  conversationId: string,
28
30
  inputTokens: number,
@@ -87,6 +87,8 @@ mock.module("../security/secret-allowlist.js", () => ({
87
87
  }));
88
88
 
89
89
  mock.module("../memory/conversation-crud.js", () => ({
90
+ setConversationProcessingStartedAt: () => {},
91
+ isConversationProcessing: () => false,
90
92
  setConversationOriginChannelIfUnset: () => {},
91
93
  setConversationHistoryStrippedAt: () => {},
92
94
  provenanceFromTrustContext: () => ({
@@ -111,6 +111,8 @@ mock.module("../security/secret-allowlist.js", () => ({
111
111
  }));
112
112
 
113
113
  mock.module("../memory/conversation-crud.js", () => ({
114
+ setConversationProcessingStartedAt: () => {},
115
+ isConversationProcessing: () => false,
114
116
  setConversationOriginChannelIfUnset: () => {},
115
117
  setConversationHistoryStrippedAt: () => {},
116
118
  provenanceFromTrustContext: () => ({
@@ -109,6 +109,8 @@ mock.module("../security/secret-allowlist.js", () => ({
109
109
  }));
110
110
 
111
111
  mock.module("../memory/conversation-crud.js", () => ({
112
+ setConversationProcessingStartedAt: () => {},
113
+ isConversationProcessing: () => false,
112
114
  setConversationOriginChannelIfUnset: () => {},
113
115
  setConversationHistoryStrippedAt: () => {},
114
116
  provenanceFromTrustContext: () => ({