Repository navigation
Expand file tree
/
Copy pathharness-compat.json
More file actions
645 lines (645 loc) · 53.3 KB
/
Copy pathharness-compat.json
File metadata and controls
645 lines (645 loc) · 53.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
{
"total": 1225,
"passed": 427,
"needThink": 991,
"needThinkPassed": 193,
"files": {
"action-pause-recovery.test.ts": {
"total": 3,
"passed": 0
},
"actions-attach-reply.test.ts": {
"total": 12,
"passed": 0
},
"actions-durable-pause.test.ts": {
"total": 40,
"passed": 2
},
"agent-tool-reattach-recovery.test.ts": {
"total": 2,
"passed": 0
},
"agent-tool-rebind-noop.test.ts": {
"total": 6,
"passed": 0
},
"agent-tools.test.ts": {
"total": 47,
"passed": 12
},
"assistant-agent-loop.test.ts": {
"total": 26,
"passed": 8
},
"assistant-agent.test.ts": {
"total": 5,
"passed": 5
},
"assistant-message-metadata.test.ts": {
"total": 9,
"passed": 1
},
"assistant-tools.test.ts": {
"total": 34,
"passed": 34
},
"attachment-consumption.test.ts": {
"total": 4,
"passed": 0
},
"browser-tools.test.ts": {
"total": 6,
"passed": 6
},
"channel-policy.test.ts": {
"total": 3,
"passed": 2
},
"channel-recovery.test.ts": {
"total": 5,
"passed": 0
},
"channel-threading.test.ts": {
"total": 4,
"passed": 1
},
"channels.test.ts": {
"total": 8,
"passed": 8
},
"client-tools.test.ts": {
"total": 100,
"passed": 31
},
"cold-rpc-initialization.test.ts": {
"total": 4,
"passed": 3
},
"connection-state.test.ts": {
"total": 2,
"passed": 2
},
"deliver-notice.test.ts": {
"total": 7,
"passed": 0
},
"errored-stream-replay.test.ts": {
"total": 1,
"passed": 0
},
"eviction-recovery.test.ts": {
"total": 1,
"passed": 0
},
"execute-hitl.test.ts": {
"total": 12,
"passed": 0
},
"execute-tool.test.ts": {
"total": 6,
"passed": 3
},
"extension-manager.test.ts": {
"total": 34,
"passed": 34
},
"fetch-tools.test.ts": {
"total": 51,
"passed": 50
},
"fiber.test.ts": {
"total": 7,
"passed": 7
},
"hooks.test.ts": {
"total": 140,
"passed": 28
},
"hydration-budget.test.ts": {
"total": 9,
"passed": 1
},
"max-concurrent-agent-tools.test.ts": {
"total": 5,
"passed": 1
},
"mcp-tool-materialization.test.ts": {
"total": 2,
"passed": 0
},
"media-eviction.test.ts": {
"total": 16,
"passed": 3
},
"message-reconciliation.test.ts": {
"total": 11,
"passed": 4
},
"messengers.test.ts": {
"total": 103,
"passed": 79
},
"nested-agent-tools.test.ts": {
"total": 3,
"passed": 0
},
"onconnect-broadcast.test.ts": {
"total": 13,
"passed": 1
},
"onstart-degraded.test.ts": {
"total": 5,
"passed": 1
},
"origin-message-ids.test.ts": {
"total": 8,
"passed": 0
},
"prompt-cache.test.ts": {
"total": 10,
"passed": 3
},
"run-turn-recovery.test.ts": {
"total": 10,
"passed": 1
},
"run-turn.test.ts": {
"total": 34,
"passed": 13
},
"scheduled-tasks.test.ts": {
"total": 17,
"passed": 1
},
"stream-cleanup.test.ts": {
"total": 5,
"passed": 0
},
"streaming-message-id.test.ts": {
"total": 1,
"passed": 1
},
"submissions.test.ts": {
"total": 92,
"passed": 8
},
"telegram-messenger.test.ts": {
"total": 2,
"passed": 2
},
"terminal-frame-order.test.ts": {
"total": 3,
"passed": 0
},
"think-eviction.test.ts": {
"total": 4,
"passed": 1
},
"think-session.test.ts": {
"total": 276,
"passed": 65
},
"turn-metadata.test.ts": {
"total": 4,
"passed": 1
},
"workflows.test.ts": {
"total": 3,
"passed": 3
},
"ws-web-channel.test.ts": {
"total": 10,
"passed": 1
}
},
"passing": [
"actions-durable-pause.test.ts > action() durable-pause validation > allows kind durable-pause without an approval policy",
"actions-durable-pause.test.ts > action() durable-pause validation > rejects kind durable-pause with approval: false",
"agent-tools.test.ts > Think agent tools > an Infinity no-progress budget never seals on silence — only the hard ceiling ends the wait (#1630/#1672)",
"agent-tools.test.ts > Think agent tools > bounds Think recovery when child facet startup never completes",
"agent-tools.test.ts > Think agent tools > defaults the re-attach hard ceiling to uncapped (Infinity) when unset (#1630/#1672)",
"agent-tools.test.ts > Think agent tools > does not re-arm after a full no-progress window even if the child progressed earlier (#1630)",
"agent-tools.test.ts > Think agent tools > eventDelivery: \"terminal\" (#2298) > rejects terminal delivery for a detached run",
"agent-tools.test.ts > Think agent tools > honors the public AgentStaticOptions re-attach budgets (#1630)",
"agent-tools.test.ts > Think agent tools > keeps scheduled Think startup recovery single-flight",
"agent-tools.test.ts > Think agent tools > lets Think startup return before stale child recovery finalizes",
"agent-tools.test.ts > Think agent tools > only recovers rows that were stale before Think startup began",
"agent-tools.test.ts > Think agent tools > re-arms across a clean mid-flight stream-close and follows an advancing child to completed (#1630)",
"agent-tools.test.ts > Think agent tools > re-attach returns not-tailable for an adapter without a live-tail (#1630)",
"agent-tools.test.ts > Think agent tools > runs scheduled Think startup recovery and finalizes stale rows",
"assistant-agent-loop.test.ts > Think — agentic loop > context assembly > converts messages to model format",
"assistant-agent-loop.test.ts > Think — agentic loop > default loop — text only > persists assistant message after streaming",
"assistant-agent-loop.test.ts > Think — agentic loop > default loop — text only > streams a response using the mock model",
"assistant-agent-loop.test.ts > Think — agentic loop > default loop — with tools > custom maxSteps property is respected",
"assistant-agent-loop.test.ts > Think — agentic loop > default loop — with tools > executes a tool and returns text after",
"assistant-agent-loop.test.ts > Think — agentic loop > defaultContextOverflowClassifier > classifies common provider context-overflow errors",
"assistant-agent-loop.test.ts > Think — agentic loop > defaultContextOverflowClassifier > returns undefined for unrelated errors",
"assistant-agent-loop.test.ts > Think — agentic loop > getModel() error > returns an error when getModel is not overridden",
"assistant-agent.test.ts > Think — cancel > cancel message does not crash the agent",
"assistant-agent.test.ts > Think — clear > clears all messages",
"assistant-agent.test.ts > Think — message persistence > messages survive across agent instances",
"assistant-agent.test.ts > Think — streaming flow > persists assistant message after streaming",
"assistant-agent.test.ts > Think — streaming flow > sends a chat request and receives streamed response",
"assistant-message-metadata.test.ts > Think — server-authored assistant-message metadata > stamps no metadata keys when no writer is configured (opt-in)",
"assistant-tools.test.ts > assistant tools — bash > does not overwrite workspace files skipped during mounting",
"assistant-tools.test.ts > assistant tools — bash > does not persist synthetic shell paths (/bin, /usr, …) to the workspace",
"assistant-tools.test.ts > assistant tools — bash > mounts workspace directories beyond the first readDir page",
"assistant-tools.test.ts > assistant tools — bash > persists empty directory creates and deletes",
"assistant-tools.test.ts > assistant tools — bash > returns non-zero bash exits with output",
"assistant-tools.test.ts > assistant tools — bash > returns structured output for bash timeouts",
"assistant-tools.test.ts > assistant tools — bash > runs bash against workspace files and persists changes",
"assistant-tools.test.ts > assistant tools — edit > creates new file with empty old_string",
"assistant-tools.test.ts > assistant tools — edit > fuzzy matches on whitespace differences",
"assistant-tools.test.ts > assistant tools — edit > replaces exact match",
"assistant-tools.test.ts > assistant tools — edit > returns error for ambiguous fuzzy match",
"assistant-tools.test.ts > assistant tools — edit > returns error for missing file",
"assistant-tools.test.ts > assistant tools — edit > returns error when old_string has multiple matches",
"assistant-tools.test.ts > assistant tools — edit > returns error when old_string not found",
"assistant-tools.test.ts > assistant tools — find > finds files by glob pattern",
"assistant-tools.test.ts > assistant tools — grep > returns context lines when requested",
"assistant-tools.test.ts > assistant tools — grep > searches file contents with regex",
"assistant-tools.test.ts > assistant tools — grep > searches with fixed string",
"assistant-tools.test.ts > assistant tools — grep > skips files larger than 1 MB",
"assistant-tools.test.ts > assistant tools — grep > supports case-sensitive search",
"assistant-tools.test.ts > assistant tools — list > lists files and directories",
"assistant-tools.test.ts > assistant tools — read > does not line-number unknown binary files",
"assistant-tools.test.ts > assistant tools — read > reads a file with line numbers",
"assistant-tools.test.ts > assistant tools — read > returns compact image metadata and image-data model content",
"assistant-tools.test.ts > assistant tools — read > returns error for directory",
"assistant-tools.test.ts > assistant tools — read > returns error for missing file",
"assistant-tools.test.ts > assistant tools — read > returns file-data model output for PDFs",
"assistant-tools.test.ts > assistant tools — read > sniffs gif image bytes when MIME is generic",
"assistant-tools.test.ts > assistant tools — read > sniffs jpeg image bytes when MIME is generic",
"assistant-tools.test.ts > assistant tools — read > sniffs png image bytes when MIME is generic",
"assistant-tools.test.ts > assistant tools — read > sniffs webp image bytes when MIME is generic",
"assistant-tools.test.ts > assistant tools — read > supports offset and limit",
"assistant-tools.test.ts > assistant tools — write > creates parent directories",
"assistant-tools.test.ts > assistant tools — write > writes a file and reports stats",
"browser-tools.test.ts > createBrowserTools > accepts cdpUrl instead of browser binding (Quick Actions skipped without a binding)",
"browser-tools.test.ts > createBrowserTools > accepts optional timeout and session mode",
"browser-tools.test.ts > createBrowserTools > exposes the runtime handle and connector via createBrowserRuntime",
"browser-tools.test.ts > createBrowserTools > omits Quick Action tools when quickActions is false",
"browser-tools.test.ts > createBrowserTools > requires a browser binding or cdpUrl",
"browser-tools.test.ts > createBrowserTools > returns browser_execute plus the default Quick Action tools when a binding is present",
"channel-policy.test.ts > per-channel policy (Phase 4b) > does not apply channel policy for turns on other channels",
"channel-policy.test.ts > per-channel policy (Phase 4b) > narrows the tool set via the channel policy (removes, not just adds)",
"channel-threading.test.ts > channel threading (Phase 4a) > has no channel context when none is supplied",
"channels.test.ts > resolveChannels > absorbs getMessengers() entries as messenger channels and feeds the runtime",
"channels.test.ts > resolveChannels > allows overriding the web channel's policy with a kind: web entry",
"channels.test.ts > resolveChannels > always includes an implicit web channel",
"channels.test.ts > resolveChannels > feeds messenger-kind configureChannels entries into the runtime",
"channels.test.ts > resolveChannels > registers configureChannels web/voice entries without feeding the runtime",
"channels.test.ts > resolveChannels > throws on a duplicate id across configureChannels() and getMessengers()",
"channels.test.ts > resolveChannels > throws when configureChannels() replaces web with a non-web kind",
"channels.test.ts > resolveChannels > throws when getMessengers() declares a messenger named web",
"client-tools.test.ts > Think — auto-continuation > autoContinue: true triggers continuation",
"client-tools.test.ts > Think — auto-continuation > continues after approving a tool that shares its message with a settled tool (#2185)",
"client-tools.test.ts > Think — auto-continuation > does not continue a standalone errored tool (autoContinue:false, no opted-in sibling) (#1650)",
"client-tools.test.ts > Think — auto-continuation > does not execute a rejected server approval tool and retains denial",
"client-tools.test.ts > Think — auto-continuation > persists an approved server tool execution error as terminal output",
"client-tools.test.ts > Think — auto-continuation > sends a failed continuation's error frame before onChatResponse returns (#2381)",
"client-tools.test.ts > Think — auto-continuation > treats a pending approved tool as complete — no spurious transcript-repair backstop (#1627)",
"client-tools.test.ts > Think — auto-continuation > without autoContinue, no continuation",
"client-tools.test.ts > Think — custom body via WebSocket > body fields persist and are available after turn",
"client-tools.test.ts > Think — custom body via WebSocket > body is cleared when request has no custom fields",
"client-tools.test.ts > Think — messageConcurrency > only applies to submit-message, not regenerate-message",
"client-tools.test.ts > Think — messageConcurrency > post-clear submits are not treated as overlapping",
"client-tools.test.ts > Think — messageConcurrency > queue: processes all overlapping submits in order",
"client-tools.test.ts > Think — onChatResponse via WebSocket > fires onChatResponse after WebSocket chat request",
"client-tools.test.ts > Think — regeneration > multiple regenerations create multiple branches",
"client-tools.test.ts > Think — regeneration > regenerate-message creates a sibling branch, not a replacement",
"client-tools.test.ts > Think — regeneration > regenerating an earlier response leaves later stored answers untouched (#2028)",
"client-tools.test.ts > Think — regeneration > regeneration fires onChatResponse",
"client-tools.test.ts > Think — regeneration > regeneration preserves conversation history before the branch point",
"client-tools.test.ts > Think — tool approval > does NOT update tool in output-available state",
"client-tools.test.ts > Think — tool approval > non-existent toolCallId is a no-op",
"client-tools.test.ts > Think — tool approval > preserves approval data",
"client-tools.test.ts > Think — tool broadcast and persistence > other tabs receive continuation stream chunks",
"client-tools.test.ts > Think — tool broadcast and persistence > tool state survives across agent instances",
"client-tools.test.ts > Think — tool result application > applies to tool in approval-responded state",
"client-tools.test.ts > Think — tool result application > does NOT update tool in output-available state",
"client-tools.test.ts > Think — tool result application > does NOT update tool in output-denied state",
"client-tools.test.ts > Think — tool result application > sets output-error state with errorText",
"client-tools.test.ts > Think — tool result application > updates tool part to output-available",
"client-tools.test.ts > resume coordination during pending continuation > correlates idle STREAM_RESUME_NONE after a continuation completes",
"client-tools.test.ts > resume coordination during pending continuation > does not send STREAM_RESUME_NONE for an immediate resume request after tool output",
"cold-rpc-initialization.test.ts > native RPC initialization > hydrates persisted Think history when native RPC is first after eviction",
"cold-rpc-initialization.test.ts > native RPC initialization > initializes Think before the first inherited RPC method executes",
"cold-rpc-initialization.test.ts > native RPC initialization > initializes Think before the first subclass RPC method executes",
"connection-state.test.ts > preserves onConnect state for the first Think root client message",
"connection-state.test.ts > preserves onConnect state for the first Think sub-agent client message",
"execute-tool.test.ts > execute tool on the codemode runtime > maps needsApproval AI SDK tools to requiresApproval — the call pauses durably",
"execute-tool.test.ts > execute tool on the codemode runtime > runs sandbox code against tools.* (ToolSetConnector)",
"execute-tool.test.ts > execute tool on the codemode runtime > surfaces sandbox errors as error outcomes with an executionId",
"extension-manager.test.ts > ExtensionManager > getTools > should merge tools from multiple extensions",
"extension-manager.test.ts > ExtensionManager > getTools > should prefix tool names with extension name",
"extension-manager.test.ts > ExtensionManager > getTools > should return AI SDK tools from loaded extensions",
"extension-manager.test.ts > ExtensionManager > getTools > should return empty object when no extensions loaded",
"extension-manager.test.ts > ExtensionManager > lifecycle after unload > should allow reloading after unload",
"extension-manager.test.ts > ExtensionManager > lifecycle after unload > should not include tools from unloaded extensions",
"extension-manager.test.ts > ExtensionManager > lifecycle after unload > should throw when executing a tool from an unloaded extension",
"extension-manager.test.ts > ExtensionManager > list > should list all loaded extensions",
"extension-manager.test.ts > ExtensionManager > list > should return empty array when no extensions loaded",
"extension-manager.test.ts > ExtensionManager > load and discover > should load a multi-tool extension",
"extension-manager.test.ts > ExtensionManager > load and discover > should load an extension and discover its tools",
"extension-manager.test.ts > ExtensionManager > load and discover > should reject duplicate extension names",
"extension-manager.test.ts > ExtensionManager > name sanitization > sanitizeName should replace non-alphanumeric chars",
"extension-manager.test.ts > ExtensionManager > name sanitization > sanitizeName should strip leading and trailing underscores",
"extension-manager.test.ts > ExtensionManager > name sanitization > sanitizeName should throw for empty or whitespace-only names",
"extension-manager.test.ts > ExtensionManager > name sanitization > should sanitize hyphens in extension names for tool names",
"extension-manager.test.ts > ExtensionManager > network isolation > should block network by default (no network permission)",
"extension-manager.test.ts > ExtensionManager > persistence and restore > restore should be idempotent",
"extension-manager.test.ts > ExtensionManager > persistence and restore > should remove from storage on unload",
"extension-manager.test.ts > ExtensionManager > persistence and restore > should restore extensions from storage after re-creation",
"extension-manager.test.ts > ExtensionManager > structured source format > hook receives snapshot data",
"extension-manager.test.ts > ExtensionManager > structured source format > rejects flat-format source with clear error",
"extension-manager.test.ts > ExtensionManager > structured source format > should catch and report hook errors",
"extension-manager.test.ts > ExtensionManager > structured source format > should discover hooks via manifest() RPC",
"extension-manager.test.ts > ExtensionManager > structured source format > should execute tools from structured format",
"extension-manager.test.ts > ExtensionManager > structured source format > should invoke hooks via entrypoint.hook()",
"extension-manager.test.ts > ExtensionManager > structured source format > should load extensions with { tools, hooks } format",
"extension-manager.test.ts > ExtensionManager > structured source format > should return skipped for unsubscribed hooks",
"extension-manager.test.ts > ExtensionManager > structured source format > tools-only extension has no hooks",
"extension-manager.test.ts > ExtensionManager > tool execution > should execute a simple tool",
"extension-manager.test.ts > ExtensionManager > tool execution > should execute math tools correctly",
"extension-manager.test.ts > ExtensionManager > tool execution > should propagate tool execution errors",
"extension-manager.test.ts > ExtensionManager > unload > should return false for unknown extension",
"extension-manager.test.ts > ExtensionManager > unload > should unload an extension",
"fetch-tools.test.ts > Think — fetchTools integration > does not register fetch tools by default",
"fetch-tools.test.ts > createFetchTools — config > generates one fetch_<name> tool per binding with a sanitized name",
"fetch-tools.test.ts > createFetchTools — config > registers fetch_url only when a public allowlist is set",
"fetch-tools.test.ts > createFetchTools — config > throws when neither allowlist nor bindings are configured",
"fetch-tools.test.ts > fetch — abort and timeout > reports aborted when the turn signal aborts",
"fetch-tools.test.ts > fetch — abort and timeout > times out a slow request",
"fetch-tools.test.ts > fetch — header allowlist > forwards allowlisted model headers and fixed headers, drops the rest",
"fetch-tools.test.ts > fetch — header allowlist > lets fixed binding headers take precedence over model headers",
"fetch-tools.test.ts > fetch — header allowlist > lets the model override the default Accept header",
"fetch-tools.test.ts > fetch — header allowlist > sends a markdown-first default Accept header when none is set",
"fetch-tools.test.ts > fetch — header allowlist > sends no default Accept header when disabled",
"fetch-tools.test.ts > fetch — observability > emits an event on success and on block",
"fetch-tools.test.ts > fetch — redirects > blocks cross-origin redirects for bindings",
"fetch-tools.test.ts > fetch — redirects > does not follow redirects when policy is none",
"fetch-tools.test.ts > fetch — redirects > follows same-origin redirects through the binding",
"fetch-tools.test.ts > fetch — size limits > returns too_large for JSON that exceeds the byte cap",
"fetch-tools.test.ts > fetch — size limits > truncates oversized text and flags truncated",
"fetch-tools.test.ts > fetch — workspace spill > writes binary bodies via writeFileBytes when spill is enabled in auto",
"fetch-tools.test.ts > fetch — workspace spill > writes text bodies to the workspace in workspace mode",
"fetch-tools.test.ts > fetch_<binding> — responses > parses JSON bodies",
"fetch-tools.test.ts > fetch_<binding> — responses > rejects binary content in auto mode without spill",
"fetch-tools.test.ts > fetch_<binding> — responses > rejects paths outside the binding allowlist",
"fetch-tools.test.ts > fetch_<binding> — responses > reports invalid JSON",
"fetch-tools.test.ts > fetch_<binding> — responses > returns HTML as text in auto mode",
"fetch-tools.test.ts > fetch_<binding> — responses > returns empty text for an empty (204) response",
"fetch-tools.test.ts > fetch_<binding> — responses > returns text bodies",
"fetch-tools.test.ts > fetch_<binding> — responses > surfaces non-2xx responses",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://0.0.0.0/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://0177.0.0.1/ even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://0x7f.0.0.1/ even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://10.0.0.1/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://100.64.0.1/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://127.0.0.1/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://127.1/ even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://169.254.169.254/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://172.16.0.1/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://192.168.1.1/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target http://2130706433/ even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://[::1]/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://[::ffff:127.0.0.1]/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://[::ffff:192.168.0.1]/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://[fc00::1]/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://[fe80::1]/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://app.localhost/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://foo.internal/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > blocks private/local target https://localhost/x even when allowlisted",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > normalizes a bare-origin allowlist entry to match the origin and subpaths",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > rejects URLs that are not on the allowlist",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > rejects URLs with embedded credentials",
"fetch-tools.test.ts > fetch_url — allowlist + SSRF > rejects invalid URLs",
"fiber.test.ts > Think — fiber recovery > should clean up the fiber row after recovery",
"fiber.test.ts > Think — fiber recovery > should detect and recover an interrupted fiber",
"fiber.test.ts > Think — runFiber > should clean up the fiber row on completion",
"fiber.test.ts > Think — runFiber > should propagate errors from fiber execution",
"fiber.test.ts > Think — runFiber > should run a fiber to completion and return the result",
"fiber.test.ts > Think — runFiber > should support checkpointing via ctx.stash()",
"fiber.test.ts > Think — runFiber > should support fire-and-forget fibers",
"hooks.test.ts > Think — ToolCallDecision honored by wrapped execute > 'substitute' short-circuits execute and returns the substituted output",
"hooks.test.ts > Think — ToolCallDecision honored by wrapped execute > async beforeToolCall (Promise<ToolCallDecision>) is awaited correctly",
"hooks.test.ts > Think — ToolCallDecision honored by wrapped execute > collapses Promise<AsyncIterable> returns to the last yielded value",
"hooks.test.ts > Think — ToolCallDecision honored by wrapped execute > collapses sync AsyncIterable returns to the last yielded value",
"hooks.test.ts > Think — ToolCallDecision honored by wrapped execute > void decision runs the original execute with original input",
"hooks.test.ts > Think — beforeToolCall gates whether execute runs > never runs execute when the result is substituted",
"hooks.test.ts > Think — beforeToolCall gates whether execute runs > runs execute exactly once on a void decision",
"hooks.test.ts > Think — beforeToolCall gates whether execute runs > runs execute exactly once when 'allow' substitutes the input",
"hooks.test.ts > Think — beforeTurn config overrides > allows TurnConfig to send reasoning when the instance default is false",
"hooks.test.ts > Think — beforeTurn config overrides > errors a wait-mode continuation whose structured output does not parse",
"hooks.test.ts > Think — beforeTurn config overrides > errors a wait-mode turn whose structured output does not parse (#2263)",
"hooks.test.ts > Think — beforeTurn config overrides > sends reasoning chunks by default on the chat() path",
"hooks.test.ts > Think — beforeTurn hook > captures continuation flag from programmatic path",
"hooks.test.ts > Think — beforeTurn hook > fires from chat() sub-agent path",
"hooks.test.ts > Think — beforeTurn hook > fires on every turn",
"hooks.test.ts > Think — beforeTurn hook > keeps the default gateway when getGateway returns undefined",
"hooks.test.ts > Think — beforeTurn hook > returns a LanguageModel object unchanged",
"hooks.test.ts > Think — beforeTurn hook > routes @hf/ ids to Workers AI like @cf/ ids",
"hooks.test.ts > Think — dynamic context > dynamic block visible in chat turn tools",
"hooks.test.ts > Think — hook convergence > beforeTurn fires from chat() RPC path",
"hooks.test.ts > Think — hook convergence > beforeTurn fires from saveMessages path",
"hooks.test.ts > Think — maxSteps property > respects maxSteps override on class",
"hooks.test.ts > Think — maxSteps property > works with tool-calling loop agent",
"hooks.test.ts > Think — onChunk hook > fires for streaming chunks",
"hooks.test.ts > Think — raw needsApproval tool + beforeToolCall ordering > runs execute exactly once when both gates allow",
"hooks.test.ts > Think — streaming tool preservation > collapses a Promise<AsyncIterable> (non-canonical) execute",
"hooks.test.ts > Think — tool-call hooks expose typed input/output > beforeToolCall and tool execute see the turn's request id",
"hooks.test.ts > Think — tool-call hooks expose typed input/output > beforeToolCall receives toolName and typed input",
"hydration-budget.test.ts > hydrationByteBudget — windowed hydration (#1710) > chat works on a windowed-boot agent and persists past the window",
"max-concurrent-agent-tools.test.ts > maxConcurrentAgentTools > DOES count an in-flight `running` run toward the cap",
"media-eviction.test.ts > hasEvictableMedia — the in-memory gate for scheduling a pass > ignores text, markers, remote urls and small payloads",
"media-eviction.test.ts > hasEvictableMedia — the in-memory gate for scheduling a pass > sees a payload nested inside a tool output",
"media-eviction.test.ts > hasEvictableMedia — the in-memory gate for scheduling a pass > sees an inline file payload at or above the threshold",
"message-reconciliation.test.ts > Think — message reconciliation on incoming submits > collapses an optimistic copy of a provider-executed tool with a large input",
"message-reconciliation.test.ts > Think — message reconciliation on incoming submits > does not re-repair an already-errored tool call or clobber its errorText",
"message-reconciliation.test.ts > Think — message reconciliation on incoming submits > merges server tool outputs into a stale client snapshot when IDs match",
"message-reconciliation.test.ts > Think — message reconciliation on incoming submits > preserves a denied tool approval (output-denied) instead of flipping it to errored",
"messengers.test.ts > telegram messenger provider > classifies Telegram no-op edit errors",
"messengers.test.ts > telegram messenger provider > requires explicit webhook verification posture",
"messengers.test.ts > telegram messenger provider > splits long Telegram follow-up text without dropping content",
"messengers.test.ts > telegram messenger provider > supports distinct Telegram adapter names and rejects duplicate defaults",
"messengers.test.ts > telegram messenger provider > verifies Telegram secret token headers",
"messengers.test.ts > think messengers core > accepts a custom channelSpeakerLabel formatter",
"messengers.test.ts > think messengers core > attachment fetch > copies a view backed by a SharedArrayBuffer instead of dropping it",
"messengers.test.ts > think messengers core > attachment fetch > copies only a Buffer view's own bytes out of its backing store",
"messengers.test.ts > think messengers core > attachment fetch > returns a view's own buffer without copying when the view spans all of it",
"messengers.test.ts > think messengers core > attachment fetch > returns an ArrayBuffer from the adapter unchanged",
"messengers.test.ts > think messengers core > attachment fetch > returns an empty ArrayBuffer when the adapter resolves nothing",
"messengers.test.ts > think messengers core > burst replies end to end (#2312) > finds the private Chat SDK queue methods the recovery drain relies on",
"messengers.test.ts > think messengers core > carries an additive delivery tag without changing recovery classification",
"messengers.test.ts > think messengers core > checkpoints completed before posting the terminal reply when failed after text (#1842)",
"messengers.test.ts > think messengers core > checkpoints completed before posting the terminal reply when failed before text (#1842)",
"messengers.test.ts > think messengers core > checkpoints completed before posting the terminal reply when interrupted (#1842)",
"messengers.test.ts > think messengers core > classifies messenger delivery failures",
"messengers.test.ts > think messengers core > converts messenger actions to Think user messages",
"messengers.test.ts > think messengers core > converts messenger events to Think user messages with attachments",
"messengers.test.ts > think messengers core > creates serializable recovery snapshots without live raw data",
"messengers.test.ts > think messengers core > delivers successful replies with active messenger context and overflow chunks",
"messengers.test.ts > think messengers core > derives stable conversation and idempotency keys",
"messengers.test.ts > think messengers core > detects mentions on messages the adapter did not flag",
"messengers.test.ts > think messengers core > does not leak internal error details into messenger replies",
"messengers.test.ts > think messengers core > falls back through fullName || userName || userId for the default label",
"messengers.test.ts > think messengers core > gives queued messages a TTL that outlasts a slow turn",
"messengers.test.ts > think messengers core > honors custom webhook verifier responses before Chat SDK handling",
"messengers.test.ts > think messengers core > inline attachment data > fetches Blob data through arrayBuffer()",
"messengers.test.ts > think messengers core > inline attachment data > maps ArrayBuffer and Uint8Array data",
"messengers.test.ts > think messengers core > inline attachment data > maps Buffer data and fetches it when the adapter has no fetchData",
"messengers.test.ts > think messengers core > inline attachment data > prefers the adapter's fetchData over inline data",
"messengers.test.ts > think messengers core > is a no-op when the adapter exposes no botUserId",
"messengers.test.ts > think messengers core > keeps raw payloads and attachment bytes out of persisted message metadata",
"messengers.test.ts > think messengers core > leaves attachment id undefined when fetchMetadata has no known id key",
"messengers.test.ts > think messengers core > leaves other users' resolved mentions untouched",
"messengers.test.ts > think messengers core > lets custom webhook verification read the body without consuming adapter input",
"messengers.test.ts > think messengers core > marks messenger reply fibers as streaming only when visible text starts",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > carries skipped messages on the event, oldest first, resolving self-mentions in each",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > drops an attachment-only run's empty speaker line",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > keeps each speaker's own label when a burst mixes senders",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > keeps the answered message's id so idempotency is unchanged",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > leaves `skipped` off the event when nothing was folded",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > lists attachments from skipped messages before the answered message's own",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > renders a direct-message burst without speaker labels",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > renders one sender's burst under a single speaker label",
"messengers.test.ts > think messengers core > messages folded by the concurrency strategy (#2312) > serializes skipped messages without live-only fields",
"messengers.test.ts > think messengers core > never prefixes direct message actions",
"messengers.test.ts > think messengers core > never prefixes direct messages regardless of channelSpeakerLabel",
"messengers.test.ts > think messengers core > normalizes inferred defaults",
"messengers.test.ts > think messengers core > parses and classifies messenger recovery snapshots",
"messengers.test.ts > think messengers core > posts only the apology, never an empty stream, when an interrupted turn has no text",
"messengers.test.ts > think messengers core > posts text past the visible limit before the target delivers the rest (#2106)",
"messengers.test.ts > think messengers core > prefixes channel actions with the resolved speaker label",
"messengers.test.ts > think messengers core > prefixes channel messages with the default fullName cascade",
"messengers.test.ts > think messengers core > preserves attachment fetchMetadata and backfills id when converting",
"messengers.test.ts > think messengers core > preserves delivery errors when cancelling local self targets",
"messengers.test.ts > think messengers core > recovers interrupted messenger reply fibers through the shared Chat runtime",
"messengers.test.ts > think messengers core > rejects duplicate adapter names before creating a shared Chat runtime",
"messengers.test.ts > think messengers core > rejects invalid and duplicate paths",
"messengers.test.ts > think messengers core > rejects webhook requests when custom verification returns false",
"messengers.test.ts > think messengers core > reposts the partial when the stream post rejected before the target delivers the rest (#2106)",
"messengers.test.ts > think messengers core > requires an explicit webhook verification posture",
"messengers.test.ts > think messengers core > resolves the self-mention in default events using the bot handle",
"messengers.test.ts > think messengers core > rewrites the bot's own self-mention to the bot handle",
"messengers.test.ts > think messengers core > separates text segments across tool-call boundaries (#1841)",
"messengers.test.ts > think messengers core > skips the apology when the target delivers the recovered reply itself (#2106)",
"messengers.test.ts > think messengers core > streamed replies on adapters without native streaming > keeps its own adapter when another runtime registers its Chat mid-recovery",
"messengers.test.ts > think messengers core > streamed replies on adapters without native streaming > leaves native streaming untouched",
"messengers.test.ts > think messengers core > streamed replies on adapters without native streaming > posts real reply text first instead of a `...` placeholder (#2310)",
"messengers.test.ts > think messengers core > streamed replies on adapters without native streaming > posts the empty-response text, not a blank message, when a turn produces no text",
"messengers.test.ts > think messengers core > streamed replies on adapters without native streaming > recovers a reply through its own adapter after another runtime registered its Chat",
"messengers.test.ts > think messengers core > streams visible text while retaining overflow",
"messengers.test.ts > think messengers core > surfaces the interrupted apology, not a truncated final reply, when the model turn is interrupted by recovery (#1644)",
"messengers.test.ts > think messengers core > typing indicator (#2324) > never overlaps slow typing requests or lets one land after the first post",
"messengers.test.ts > think messengers core > typing indicator (#2324) > refreshes until the first text, then stops",
"messengers.test.ts > think messengers core > typing indicator (#2324) > still posts the reply when the first typing request never settles",
"messengers.test.ts > think messengers core > typing indicator (#2324) > still posts the reply when the refresh typing request never settles",
"messengers.test.ts > think messengers core > typing indicator (#2324) > still runs the turn when the typing indicator fails",
"messengers.test.ts > think messengers core > typing indicator (#2324) > stops refreshing when the turn fails",
"onconnect-broadcast.test.ts > Think — onConnect broadcast policy > broadcasts CHAT_MESSAGES on connect when no stream is active",
"onstart-degraded.test.ts > Think onStart degradation (#1710) > scheduled-task reconcile failure > chat still works on the degraded agent",
"prompt-cache.test.ts > prompt-cache prefix stability (#2200) > extends the previous request every turn with no reduction",
"prompt-cache.test.ts > prompt-cache prefix stability (#2200) > never rewrites the prefix when truncationStep is Infinity",
"prompt-cache.test.ts > prompt-cache prefix stability (#2200) > rewrites the prefix once per compaction",
"run-turn-recovery.test.ts > recovery × runTurn > wraps a runTurn turn in a recovery fiber and cleans it up",
"run-turn.test.ts > Think — runTurn > concurrent non-nested wait enqueues behind an active turn",
"run-turn.test.ts > Think — runTurn > emits no chat:turn metadata for skipped empty wait input",
"run-turn.test.ts > Think — runTurn > omits a persisted partial message from an aborted turn result",
"run-turn.test.ts > Think — runTurn > returns each queued wait turn's own assistant message",
"run-turn.test.ts > Think — runTurn > returns persisted content when the response hook mutates history",
"run-turn.test.ts > Think — runTurn > returns stored tool output with toJSON without suppressing the response hook",
"run-turn.test.ts > Think — runTurn > stream mode drives callback and resolves void like chat",
"run-turn.test.ts > Think — runTurn > stream mode supports array input",
"run-turn.test.ts > Think — runTurn > stream mode supports function input evaluated inside the turn",
"run-turn.test.ts > Think — runTurn > validates submit and stream require input",
"run-turn.test.ts > Think — runTurn > wait mode returns TurnResult equivalent to saveMessages",
"run-turn.test.ts > Think — runTurn > wait mode supports array input",
"run-turn.test.ts > Think — runTurn > wait mode supports function input",
"scheduled-tasks.test.ts > Think scheduled tasks > does not arm a keepAlive heartbeat on alarm() when no workflow notifications are pending (#1703)",
"streaming-message-id.test.ts > Think — streaming assistant message-id alignment > stamps the persisted assistant id onto a new turn's start chunk",
"submissions.test.ts > Think durable submissions > completes multiple submissions in FIFO order",
"submissions.test.ts > Think durable submissions > deduplicates by submission id",
"submissions.test.ts > Think durable submissions > deduplicates concurrent first submissions with the same idempotency key",
"submissions.test.ts > Think durable submissions > deduplicates retries by idempotency key without appending duplicate messages",
"submissions.test.ts > Think durable submissions > does not treat client body workflow-shaped data as workflow configuration",
"submissions.test.ts > Think durable submissions > does not treat public workflow-shaped metadata as workflow configuration",
"submissions.test.ts > Think durable submissions > stores error status and message when an in-band stream error occurs",
"submissions.test.ts > Think durable submissions > stores error status and message when turn setup throws",
"telegram-messenger.test.ts > telegram messenger adapter config (#2397) > allows unverified adapter webhooks only when Think verifies them",
"telegram-messenger.test.ts > telegram messenger adapter config (#2397) > forwards nativeStreaming to the adapter",
"think-eviction.test.ts > Think recovery after forced Durable Object eviction > rebuilds the in-memory transcript cache without running a turn",
"think-session.test.ts > Think — Session integration > does not append missing messages to cache on direct session updateMessage calls",
"think-session.test.ts > Think — Session integration > keeps cache aligned for direct session appendMessage calls",
"think-session.test.ts > Think — Session integration > provides a cache-aware append helper for subclasses",
"think-session.test.ts > Think — Session integration > returns a copy from getMessages",
"think-session.test.ts > Think — Session integration > should use tree-structured messages via Session",
"think-session.test.ts > Think — abort > should expose chat request ids for cross-RPC cancellation",
"think-session.test.ts > Think — abort > should stop streaming on abort and not call onDone",
"think-session.test.ts > Think — addMessages > appends without starting a model turn",
"think-session.test.ts > Think — addMessages > chains an array linearly into one path",
"think-session.test.ts > Think — addMessages > does not re-parent on upsert",
"think-session.test.ts > Think — addMessages > is a no-op for empty input",
"think-session.test.ts > Think — addMessages > is idempotent by message id in append mode",
"think-session.test.ts > Think — addMessages > keeps the live cache coherent",
"think-session.test.ts > Think — addMessages > keeps the live view correct when an explicit parentId branches",
"think-session.test.ts > Think — addMessages > persists durably and coherently when called mid-turn",
"think-session.test.ts > Think — addMessages > updates in place in upsert mode",
"think-session.test.ts > Think — async configureSession > should initialize and chat with async configureSession",
"think-session.test.ts > Think — async configureSession > should support multiple turns after async init",
"think-session.test.ts > Think — body persistence > should default to undefined when no body set",
"think-session.test.ts > Think — chatRecovery > chat turn with recovery=true works normally and cleans up fibers",
"think-session.test.ts > Think — chatRecovery > multiple sequential turns don't leak fibers",
"think-session.test.ts > Think — chatRecovery > saveMessages with recovery wraps in fiber and cleans up",
"think-session.test.ts > Think — context blocks > does not warn when classifyChatError is overridden",
"think-session.test.ts > Think — context blocks > should configure session with context blocks",
"think-session.test.ts > Think — continueLastTurn > should set continuation: true on continueLastTurn",
"think-session.test.ts > Think — core > should accumulate messages across multiple turns",
"think-session.test.ts > Think — core > should broadcast RPC chat message updates to connected clients",
"think-session.test.ts > Think — core > should broadcast programmatic clearMessages to connected clients",
"think-session.test.ts > Think — core > should build assistant message with text parts",
"think-session.test.ts > Think — core > should clear all messages",
"think-session.test.ts > Think — core > should forward routed props to onStart",
"think-session.test.ts > Think — core > should return empty messages before first chat",
"think-session.test.ts > Think — error handling > bounds a turn that streams a chunk and stalls on every attempt",
"think-session.test.ts > Think — error handling > does not retry an aborted turn under a transient classifier (inStream: false)",
"think-session.test.ts > Think — error handling > does not retry an aborted turn under a transient classifier (inStream: true)",
"think-session.test.ts > Think — error handling > never schedules live recovery for a Durable Object 'code-update-reset' (inStream: false)",
"think-session.test.ts > Think — error handling > never schedules live recovery for a Durable Object 'code-update-reset' (inStream: true)",
"think-session.test.ts > Think — error handling > never schedules live recovery for a Durable Object 'storage-reset' (inStream: false)",
"think-session.test.ts > Think — error handling > should persist partial assistant message on error",
"think-session.test.ts > Think — error handling > surfaces the stall as a terminal error when onChatRecovery throws",
"think-session.test.ts > Think — getConfig inside configureSession > should not throw when getConfig() is called in configureSession on first start",
"think-session.test.ts > Think — onChatRecovery > does not duplicate an already-persisted completed stream on recovery",
"think-session.test.ts > Think — onChatRecovery > { continue: false } persists but does not schedule continuation",
"think-session.test.ts > Think — onChatRecovery > { persist: false, continue: false } skips both",
"think-session.test.ts > Think — pre-Sessions session API keeps working > accepts the positional appendMessage / getHistory / getRecentHistory forms",
"think-session.test.ts > Think — pre-Sessions session API keeps working > routes a failing compaction function through onCompactionError()",
"think-session.test.ts > Think — row size enforcement > should compact large tool outputs",
"think-session.test.ts > Think — row size enforcement > should pass through small messages unchanged",
"think-session.test.ts > Think — row size enforcement > should truncate large text parts for non-assistant messages",
"think-session.test.ts > Think — sanitization > should filter empty reasoning parts without providerMetadata",
"think-session.test.ts > Think — sanitization > should pass through messages without OpenAI metadata unchanged",
"think-session.test.ts > Think — sanitization > should preserve reasoning parts with providerMetadata",
"think-session.test.ts > Think — sanitization > should strip OpenAI ephemeral itemId from providerMetadata",
"think-session.test.ts > Think — sanitization > should strip reasoningEncryptedContent from OpenAI metadata",
"think-session.test.ts > Think — saveMessages > should broadcast to connected clients",
"think-session.test.ts > Think — saveMessages > should fire onChatResponse",
"think-session.test.ts > Think — saveMessages > should inject messages and run a turn",
"think-session.test.ts > Think — saveMessages > should support function form",
"think-session.test.ts > Think — saveMessages with external AbortSignal > runs to completion when the signal is never aborted",
"think-session.test.ts > Think — tool call preservation > preserves earlier client-side tool results across turns",
"think-session.test.ts > Think — waitUntilStable > detects a pending CLIENT-tool interaction (the SPA can still replay the tool-result)",
"think-session.test.ts > Think — waitUntilStable > detects pending approval",
"think-session.test.ts > Think — waitUntilStable > does NOT report pending for a dead SERVER-tool input-available in the accumulator",
"think-session.test.ts > Think — waitUntilStable > returns false when no pending after tool result applied",
"think-session.test.ts > Think — waitUntilStable > stops reporting pending once the accumulator's client-tool part resolves",
"turn-metadata.test.ts > turn metadata > returns undefined when the latest user message carries none",
"workflows.test.ts > ThinkWorkflow > prompt step RPC disposal > disposes submitMessages and waitForEvent results after copying serializable data",
"workflows.test.ts > ThinkWorkflow > prompt step RPC disposal > disposes the submitMessages result before cancelling a timed-out prompt",
"workflows.test.ts > ThinkWorkflow > prompt step RPC disposal > keeps the waitForEvent result alive while validating nested output",
"ws-web-channel.test.ts > Think — WebSocket chat runs on the web channel (#2255) > still runs server-driven turns without a channel by default"
]
}