dominds 1.13.2 → 1.15.2

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 (200) hide show
  1. package/dist/bootstrap/global-dialog-event-broadcaster.d.ts +18 -0
  2. package/dist/bootstrap/global-dialog-event-broadcaster.js +81 -0
  3. package/dist/dialog-fork.js +13 -12
  4. package/dist/dialog.d.ts +61 -50
  5. package/dist/dialog.js +284 -78
  6. package/dist/docs/dialog-system.md +12 -0
  7. package/dist/docs/dialog-system.zh.md +12 -0
  8. package/dist/docs/dominds-terminology.md +17 -0
  9. package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +128 -0
  10. package/dist/docs/llm-provider-isolation.md +35 -0
  11. package/dist/docs/llm-provider-isolation.zh.md +35 -0
  12. package/dist/llm/client.d.ts +2 -1
  13. package/dist/llm/defaults.yaml +118 -4
  14. package/dist/llm/gen/anthropic.js +2 -4
  15. package/dist/llm/gen/codex.d.ts +11 -0
  16. package/dist/llm/gen/codex.js +41 -31
  17. package/dist/llm/gen/failure-classifier.js +17 -0
  18. package/dist/llm/gen/mock.js +45 -21
  19. package/dist/llm/gen/openai-compatible.d.ts +2 -0
  20. package/dist/llm/gen/openai-compatible.js +43 -38
  21. package/dist/llm/gen/openai.d.ts +3 -1
  22. package/dist/llm/gen/openai.js +888 -71
  23. package/dist/llm/gen/tool-call-context.d.ts +7 -2
  24. package/dist/llm/gen/tool-call-context.js +55 -13
  25. package/dist/llm/gen.d.ts +60 -3
  26. package/dist/llm/kernel-driver/context.js +1 -1
  27. package/dist/llm/kernel-driver/drive.js +374 -348
  28. package/dist/llm/kernel-driver/flow.js +3 -3
  29. package/dist/llm/kernel-driver/guardrails.d.ts +1 -1
  30. package/dist/llm/kernel-driver/guardrails.js +4 -4
  31. package/dist/llm/kernel-driver/runtime.js +11 -29
  32. package/dist/llm/kernel-driver/subdialog.js +56 -5
  33. package/dist/llm/kernel-driver/tellask-special.d.ts +38 -12
  34. package/dist/llm/kernel-driver/tellask-special.js +489 -180
  35. package/dist/llm/kernel-driver/types.d.ts +1 -1
  36. package/dist/persistence.d.ts +30 -62
  37. package/dist/persistence.js +978 -986
  38. package/dist/priming.js +398 -365
  39. package/dist/recovery/reply-special.js +3 -3
  40. package/dist/runtime/inter-dialog-format.d.ts +1 -1
  41. package/dist/runtime/inter-dialog-format.js +1 -1
  42. package/dist/runtime/reply-prompt-copy.js +4 -4
  43. package/dist/server/setup-routes.js +26 -5
  44. package/dist/server/snippets-routes.d.ts +1 -0
  45. package/dist/server/snippets-routes.js +20 -9
  46. package/dist/server/websocket-handler.js +58 -25
  47. package/dist/shared/utils/fbr.js +12 -8
  48. package/dist/shared/utils/inter-dialog-format.js +6 -4
  49. package/dist/team.d.ts +24 -13
  50. package/dist/team.js +123 -32
  51. package/dist/tool.d.ts +26 -0
  52. package/dist/tool.js +97 -0
  53. package/dist/tools/team_mgmt.js +18 -0
  54. package/package.json +2 -2
  55. package/webapp/dist/assets/{_basePickBy-CBOtd63g.js → _basePickBy-DsirmCgI.js} +3 -3
  56. package/webapp/dist/assets/_basePickBy-DsirmCgI.js.map +1 -0
  57. package/webapp/dist/assets/{_baseUniq-mfoKz4Wm.js → _baseUniq-tR6G8loB.js} +2 -2
  58. package/webapp/dist/assets/_baseUniq-tR6G8loB.js.map +1 -0
  59. package/webapp/dist/assets/{arc-Dq0WZLyu.js → arc-CzxpASkZ.js} +2 -2
  60. package/webapp/dist/assets/arc-CzxpASkZ.js.map +1 -0
  61. package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-CNmygmp3.js → architectureDiagram-2XIMDMQ5-BSH7H5oI.js} +26 -8
  62. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BSH7H5oI.js.map +1 -0
  63. package/webapp/dist/assets/{blockDiagram-VD42YOAC-DvE0lybt.js → blockDiagram-WCTKOSBZ-DpLIr7yO.js} +187 -170
  64. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DpLIr7yO.js.map +1 -0
  65. package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CR7zJ2_u.js → c4Diagram-IC4MRINW-WuYKgWfY.js} +4 -4
  66. package/webapp/dist/assets/c4Diagram-IC4MRINW-WuYKgWfY.js.map +1 -0
  67. package/webapp/dist/assets/{channel-DrTrnYx4.js → channel-B-v9dqLN.js} +2 -2
  68. package/webapp/dist/assets/channel-B-v9dqLN.js.map +1 -0
  69. package/webapp/dist/assets/{chunk-4BX2VUAB-CVuJEIeN.js → chunk-4BX2VUAB-MtFUfKZy.js} +2 -2
  70. package/webapp/dist/assets/chunk-4BX2VUAB-MtFUfKZy.js.map +1 -0
  71. package/webapp/dist/assets/{chunk-55IACEB6-BxUoXApB.js → chunk-55IACEB6-rY9AJdzj.js} +2 -2
  72. package/webapp/dist/assets/chunk-55IACEB6-rY9AJdzj.js.map +1 -0
  73. package/webapp/dist/assets/{chunk-FMBD7UC4-TX-LVAaV.js → chunk-FMBD7UC4-B-RtOs7e.js} +2 -2
  74. package/webapp/dist/assets/chunk-FMBD7UC4-B-RtOs7e.js.map +1 -0
  75. package/webapp/dist/assets/{chunk-TZMSLE5B-Cw689yRl.js → chunk-JSJVCQXG-Da1d3uS4.js} +14 -6
  76. package/webapp/dist/assets/chunk-JSJVCQXG-Da1d3uS4.js.map +1 -0
  77. package/webapp/dist/assets/{chunk-QN33PNHL-D1uiKlOO.js → chunk-KX2RTZJC-DH9UrpuG.js} +2 -2
  78. package/webapp/dist/assets/chunk-KX2RTZJC-DH9UrpuG.js.map +1 -0
  79. package/webapp/dist/assets/{chunk-DI55MBZ5-SAhxUTqQ.js → chunk-NQ4KR5QH-CK365lrr.js} +9 -7
  80. package/webapp/dist/assets/chunk-NQ4KR5QH-CK365lrr.js.map +1 -0
  81. package/webapp/dist/assets/{chunk-QZHKN3VN-BxuV0Oba.js → chunk-QZHKN3VN-BCaWPGDm.js} +2 -2
  82. package/webapp/dist/assets/chunk-QZHKN3VN-BCaWPGDm.js.map +1 -0
  83. package/webapp/dist/assets/{chunk-B4BG7PRW-DpMa3-9L.js → chunk-WL4C6EOR-DDCnEwft.js} +171 -121
  84. package/webapp/dist/assets/chunk-WL4C6EOR-DDCnEwft.js.map +1 -0
  85. package/webapp/dist/assets/{classDiagram-2ON5EDUG-BTTGianr.js → classDiagram-VBA2DB6C-CvMBU4WA.js} +7 -6
  86. package/webapp/dist/assets/classDiagram-VBA2DB6C-CvMBU4WA.js.map +1 -0
  87. package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-BTTGianr.js → classDiagram-v2-RAHNMMFH-CvMBU4WA.js} +7 -6
  88. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CvMBU4WA.js.map +1 -0
  89. package/webapp/dist/assets/{clone-Dk8cAI3I.js → clone-r98jR0MC.js} +2 -2
  90. package/webapp/dist/assets/clone-r98jR0MC.js.map +1 -0
  91. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BjJnzB2N.js → cose-bilkent-S5V4N54A-t6J60Ogk.js} +2 -2
  92. package/webapp/dist/assets/cose-bilkent-S5V4N54A-t6J60Ogk.js.map +1 -0
  93. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  94. package/webapp/dist/assets/{dagre-6UL2VRFP-VF-xGhAf.js → dagre-KLK3FWXG-BlqmY2DV.js} +7 -7
  95. package/webapp/dist/assets/dagre-KLK3FWXG-BlqmY2DV.js.map +1 -0
  96. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  97. package/webapp/dist/assets/{diagram-PSM6KHXK-Ba5U0oRY.js → diagram-E7M64L7V-FwCHeIUD.js} +10 -10
  98. package/webapp/dist/assets/diagram-E7M64L7V-FwCHeIUD.js.map +1 -0
  99. package/webapp/dist/assets/{diagram-QEK2KX5R-DoYCnEw_.js → diagram-IFDJBPK2-NhtmkuZG.js} +9 -8
  100. package/webapp/dist/assets/diagram-IFDJBPK2-NhtmkuZG.js.map +1 -0
  101. package/webapp/dist/assets/{diagram-S2PKOQOG-CkK4SRyE.js → diagram-P4PSJMXO-B9FcmokX.js} +8 -8
  102. package/webapp/dist/assets/diagram-P4PSJMXO-B9FcmokX.js.map +1 -0
  103. package/webapp/dist/assets/{erDiagram-Q2GNP2WA-DkI5eYww.js → erDiagram-INFDFZHY-DHKmWvtB.js} +96 -75
  104. package/webapp/dist/assets/erDiagram-INFDFZHY-DHKmWvtB.js.map +1 -0
  105. package/webapp/dist/assets/{flowDiagram-NV44I4VS-wOdPUQ7Y.js → flowDiagram-PKNHOUZH-C7Zi8I7T.js} +98 -81
  106. package/webapp/dist/assets/flowDiagram-PKNHOUZH-C7Zi8I7T.js.map +1 -0
  107. package/webapp/dist/assets/{ganttDiagram-JELNMOA3-BtRWgkUH.js → ganttDiagram-A5KZAMGK-Cv2T8tz_.js} +28 -3
  108. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-Cv2T8tz_.js.map +1 -0
  109. package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js → gitGraphDiagram-K3NZZRJ6-DztaipJU.js} +38 -46
  110. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DztaipJU.js.map +1 -0
  111. package/webapp/dist/assets/graph-C5yf62Vs.js +782 -0
  112. package/webapp/dist/assets/graph-C5yf62Vs.js.map +1 -0
  113. package/webapp/dist/assets/{index-xvYYeHuy.css → index-YaxF76or.css} +1 -1
  114. package/webapp/dist/assets/{index-rYmIohM_.js → index-hve5MWPs.js} +1603 -1415
  115. package/webapp/dist/assets/index-hve5MWPs.js.map +1 -0
  116. package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BMaxCvH5.js → infoDiagram-LFFYTUFH-VgsbBPZP.js} +7 -7
  117. package/webapp/dist/assets/infoDiagram-LFFYTUFH-VgsbBPZP.js.map +1 -0
  118. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  119. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js +966 -0
  120. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js.map +1 -0
  121. package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-ejyerzmG.js → journeyDiagram-4ABVD52K-OO8sev-Y.js} +5 -5
  122. package/webapp/dist/assets/journeyDiagram-4ABVD52K-OO8sev-Y.js.map +1 -0
  123. package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CYj35TEs.js → kanban-definition-K7BYSVSG-DiYCC1Ig.js} +5 -3
  124. package/webapp/dist/assets/kanban-definition-K7BYSVSG-DiYCC1Ig.js.map +1 -0
  125. package/webapp/dist/assets/{layout-7Ql4zmuL.js → layout-DdZSgGdu.js} +5 -5
  126. package/webapp/dist/assets/layout-DdZSgGdu.js.map +1 -0
  127. package/webapp/dist/assets/{linear-CVmgVPuZ.js → linear-7-aHtaFi.js} +2 -2
  128. package/webapp/dist/assets/linear-7-aHtaFi.js.map +1 -0
  129. package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-DOpxjGVo.js → mindmap-definition-YRQLILUH-IG3I-RdD.js} +7 -5
  130. package/webapp/dist/assets/mindmap-definition-YRQLILUH-IG3I-RdD.js.map +1 -0
  131. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  132. package/webapp/dist/assets/{pieDiagram-ADFJNKIX-CLQjpmAG.js → pieDiagram-SKSYHLDU-z68KJT5r.js} +8 -8
  133. package/webapp/dist/assets/pieDiagram-SKSYHLDU-z68KJT5r.js.map +1 -0
  134. package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-ClD_bz7z.js → quadrantDiagram-337W2JSQ-DaENWdO6.js} +3 -3
  135. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DaENWdO6.js.map +1 -0
  136. package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DOpb-TWH.js → requirementDiagram-Z7DCOOCP-ROTFv4sa.js} +16 -6
  137. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-ROTFv4sa.js.map +1 -0
  138. package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-D8Hsj3yx.js → sankeyDiagram-WA2Y5GQK-CK7qtpzw.js} +2 -2
  139. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CK7qtpzw.js.map +1 -0
  140. package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-CFMNjBER.js → sequenceDiagram-2WXFIKYE-R5lDySeI.js} +601 -201
  141. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-R5lDySeI.js.map +1 -0
  142. package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-BQeDlw0P.js → stateDiagram-RAJIS63D-sr7msF5U.js} +9 -9
  143. package/webapp/dist/assets/stateDiagram-RAJIS63D-sr7msF5U.js.map +1 -0
  144. package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-DscX61Rs.js → stateDiagram-v2-FVOUBMTO-X663liwS.js} +5 -5
  145. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-X663liwS.js.map +1 -0
  146. package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BcXPSTiw.js → timeline-definition-YZTLITO2-Bw0TdG26.js} +3 -3
  147. package/webapp/dist/assets/timeline-definition-YZTLITO2-Bw0TdG26.js.map +1 -0
  148. package/webapp/dist/assets/{treemap-GDKQZRPO-BBr4UV0Z.js → treemap-KZPCXAKY-D_sjKwI7.js} +37 -24
  149. package/webapp/dist/assets/treemap-KZPCXAKY-D_sjKwI7.js.map +1 -0
  150. package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js +2487 -0
  151. package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js.map +1 -0
  152. package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-CS5RAtQE.js → xychartDiagram-JWTSCODW-C65ESjTc.js} +4 -4
  153. package/webapp/dist/assets/xychartDiagram-JWTSCODW-C65ESjTc.js.map +1 -0
  154. package/webapp/dist/index.html +2 -2
  155. package/webapp/dist/assets/_basePickBy-CBOtd63g.js.map +0 -1
  156. package/webapp/dist/assets/_baseUniq-mfoKz4Wm.js.map +0 -1
  157. package/webapp/dist/assets/arc-Dq0WZLyu.js.map +0 -1
  158. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-CNmygmp3.js.map +0 -1
  159. package/webapp/dist/assets/blockDiagram-VD42YOAC-DvE0lybt.js.map +0 -1
  160. package/webapp/dist/assets/c4Diagram-YG6GDRKO-CR7zJ2_u.js.map +0 -1
  161. package/webapp/dist/assets/channel-DrTrnYx4.js.map +0 -1
  162. package/webapp/dist/assets/chunk-4BX2VUAB-CVuJEIeN.js.map +0 -1
  163. package/webapp/dist/assets/chunk-55IACEB6-BxUoXApB.js.map +0 -1
  164. package/webapp/dist/assets/chunk-B4BG7PRW-DpMa3-9L.js.map +0 -1
  165. package/webapp/dist/assets/chunk-DI55MBZ5-SAhxUTqQ.js.map +0 -1
  166. package/webapp/dist/assets/chunk-FMBD7UC4-TX-LVAaV.js.map +0 -1
  167. package/webapp/dist/assets/chunk-QN33PNHL-D1uiKlOO.js.map +0 -1
  168. package/webapp/dist/assets/chunk-QZHKN3VN-BxuV0Oba.js.map +0 -1
  169. package/webapp/dist/assets/chunk-TZMSLE5B-Cw689yRl.js.map +0 -1
  170. package/webapp/dist/assets/classDiagram-2ON5EDUG-BTTGianr.js.map +0 -1
  171. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BTTGianr.js.map +0 -1
  172. package/webapp/dist/assets/clone-Dk8cAI3I.js.map +0 -1
  173. package/webapp/dist/assets/cose-bilkent-S5V4N54A-BjJnzB2N.js.map +0 -1
  174. package/webapp/dist/assets/dagre-6UL2VRFP-VF-xGhAf.js.map +0 -1
  175. package/webapp/dist/assets/diagram-PSM6KHXK-Ba5U0oRY.js.map +0 -1
  176. package/webapp/dist/assets/diagram-QEK2KX5R-DoYCnEw_.js.map +0 -1
  177. package/webapp/dist/assets/diagram-S2PKOQOG-CkK4SRyE.js.map +0 -1
  178. package/webapp/dist/assets/erDiagram-Q2GNP2WA-DkI5eYww.js.map +0 -1
  179. package/webapp/dist/assets/flowDiagram-NV44I4VS-wOdPUQ7Y.js.map +0 -1
  180. package/webapp/dist/assets/ganttDiagram-JELNMOA3-BtRWgkUH.js.map +0 -1
  181. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js.map +0 -1
  182. package/webapp/dist/assets/graph-DAMkuTbn.js +0 -425
  183. package/webapp/dist/assets/graph-DAMkuTbn.js.map +0 -1
  184. package/webapp/dist/assets/index-rYmIohM_.js.map +0 -1
  185. package/webapp/dist/assets/infoDiagram-HS3SLOUP-BMaxCvH5.js.map +0 -1
  186. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-ejyerzmG.js.map +0 -1
  187. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CYj35TEs.js.map +0 -1
  188. package/webapp/dist/assets/layout-7Ql4zmuL.js.map +0 -1
  189. package/webapp/dist/assets/linear-CVmgVPuZ.js.map +0 -1
  190. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-DOpxjGVo.js.map +0 -1
  191. package/webapp/dist/assets/pieDiagram-ADFJNKIX-CLQjpmAG.js.map +0 -1
  192. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClD_bz7z.js.map +0 -1
  193. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DOpb-TWH.js.map +0 -1
  194. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-D8Hsj3yx.js.map +0 -1
  195. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-CFMNjBER.js.map +0 -1
  196. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BQeDlw0P.js.map +0 -1
  197. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-DscX61Rs.js.map +0 -1
  198. package/webapp/dist/assets/timeline-definition-IT6M3QCI-BcXPSTiw.js.map +0 -1
  199. package/webapp/dist/assets/treemap-GDKQZRPO-BBr4UV0Z.js.map +0 -1
  200. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CS5RAtQE.js.map +0 -1
package/dist/priming.js CHANGED
@@ -239,17 +239,15 @@ function isPrimingRecordType(raw) {
239
239
  raw === 'ui_only_markdown_record' ||
240
240
  raw === 'runtime_guide_record' ||
241
241
  raw === 'func_call_record' ||
242
- raw === 'tellask_special_call_record' ||
242
+ raw === 'tellask_call_record' ||
243
243
  raw === 'web_search_call_record' ||
244
244
  raw === 'human_text_record' ||
245
245
  raw === 'func_result_record' ||
246
+ raw === 'tellask_result_record' ||
246
247
  raw === 'quest_for_sup_record' ||
247
- raw === 'tellask_call_result_record' ||
248
248
  raw === 'tellask_reply_resolution_record' ||
249
- raw === 'tellask_call_carryover_record' ||
250
249
  raw === 'tellask_call_anchor_record' ||
251
- raw === 'tellask_response_record' ||
252
- raw === 'tellask_carryover_result_record' ||
250
+ raw === 'tellask_carryover_record' ||
253
251
  raw === 'gen_start_record' ||
254
252
  raw === 'gen_finish_record');
255
253
  }
@@ -261,21 +259,18 @@ function getRecordMarkdownTextField(type) {
261
259
  case 'runtime_guide_record':
262
260
  case 'human_text_record':
263
261
  case 'func_result_record':
264
- case 'tellask_special_call_record':
262
+ case 'tellask_result_record':
265
263
  return 'content';
266
264
  case 'quest_for_sup_record':
267
265
  return 'tellaskContent';
268
- case 'tellask_call_result_record':
269
- return 'result';
270
266
  case 'tellask_reply_resolution_record':
267
+ case 'tellask_call_record':
271
268
  return null;
272
- case 'tellask_call_carryover_record':
273
- return null;
274
- case 'tellask_response_record':
275
- case 'tellask_carryover_result_record':
269
+ case 'tellask_carryover_record':
276
270
  return 'response';
277
271
  case 'func_call_record':
278
272
  case 'web_search_call_record':
273
+ case 'native_tool_call_record':
279
274
  case 'tellask_call_anchor_record':
280
275
  case 'gen_start_record':
281
276
  case 'gen_finish_record':
@@ -352,6 +347,15 @@ function expectStringField(record, key, context, allowEmpty = false) {
352
347
  }
353
348
  return value;
354
349
  }
350
+ function parseOptionalStringField(record, key, context) {
351
+ const value = record[key];
352
+ if (value === undefined)
353
+ return undefined;
354
+ if (typeof value !== 'string') {
355
+ throw new Error(`${context}.${key} must be a string when provided`);
356
+ }
357
+ return value;
358
+ }
355
359
  function parseOptionalIntegerField(record, key, context) {
356
360
  const value = record[key];
357
361
  if (value === undefined)
@@ -649,9 +653,9 @@ function normalizePrimingRecordFromJson(raw) {
649
653
  return withoutTs;
650
654
  }
651
655
  case 'func_call_record': {
652
- const argumentsRaw = raw['arguments'];
653
- if (!isRecord(argumentsRaw)) {
654
- throw new Error(`${context}.arguments must be an object`);
656
+ const rawArgumentsText = raw['rawArgumentsText'];
657
+ if (typeof rawArgumentsText !== 'string') {
658
+ throw new Error(`${context}.rawArgumentsText must be a string`);
655
659
  }
656
660
  const record = {
657
661
  ts: '',
@@ -659,14 +663,14 @@ function normalizePrimingRecordFromJson(raw) {
659
663
  genseq: expectIntegerField(raw, 'genseq', context),
660
664
  id: expectStringField(raw, 'id', context),
661
665
  name: expectStringField(raw, 'name', context),
662
- arguments: argumentsRaw,
666
+ rawArgumentsText,
663
667
  };
664
668
  if (sourceTag)
665
669
  record.sourceTag = sourceTag;
666
670
  const { ts: _unusedTs, ...withoutTs } = record;
667
671
  return withoutTs;
668
672
  }
669
- case 'tellask_special_call_record': {
673
+ case 'tellask_call_record': {
670
674
  const base = {
671
675
  ts: '',
672
676
  type,
@@ -674,49 +678,29 @@ function normalizePrimingRecordFromJson(raw) {
674
678
  id: expectStringField(raw, 'id', context),
675
679
  };
676
680
  const name = expectStringField(raw, 'name', context);
677
- const content = expectStringField(raw, 'content', context, true);
681
+ const rawArgumentsText = raw['rawArgumentsText'];
682
+ if (typeof rawArgumentsText !== 'string') {
683
+ throw new Error(`${context}.rawArgumentsText must be a string`);
684
+ }
685
+ const deliveryMode = raw['deliveryMode'];
686
+ if (deliveryMode !== 'tellask_call_start' && deliveryMode !== 'func_call_requested') {
687
+ throw new Error(`${context}.deliveryMode must be 'tellask_call_start' | 'func_call_requested'`);
688
+ }
678
689
  let record;
679
690
  switch (name) {
680
691
  case 'tellaskBack':
681
- record = { ...base, name, tellaskContent: content };
682
- break;
683
692
  case 'tellask':
684
- record = {
685
- ...base,
686
- name,
687
- targetAgentId: expectStringField(raw, 'targetAgentId', context),
688
- sessionSlug: expectStringField(raw, 'sessionSlug', context),
689
- tellaskContent: content,
690
- };
691
- break;
692
693
  case 'tellaskSessionless':
693
- record = {
694
- ...base,
695
- name,
696
- targetAgentId: expectStringField(raw, 'targetAgentId', context),
697
- tellaskContent: content,
698
- };
699
- break;
700
694
  case 'replyTellask':
701
695
  case 'replyTellaskSessionless':
702
696
  case 'replyTellaskBack':
703
- record = { ...base, name, replyContent: content };
704
- break;
705
697
  case 'askHuman':
706
- record = { ...base, name, tellaskContent: content };
707
- break;
708
698
  case 'freshBootsReasoning': {
709
- const effort = parseOptionalIntegerField(raw, 'effort', context);
710
- record = {
711
- ...base,
712
- name,
713
- tellaskContent: content,
714
- ...(effort !== undefined ? { effort } : {}),
715
- };
699
+ record = { ...base, name, rawArgumentsText, deliveryMode };
716
700
  break;
717
701
  }
718
702
  default:
719
- throw new Error(`${context}.name must be a supported tellask special function`);
703
+ throw new Error(`${context}.name must be a supported tellask function`);
720
704
  }
721
705
  if (sourceTag)
722
706
  record.sourceTag = sourceTag;
@@ -725,13 +709,17 @@ function normalizePrimingRecordFromJson(raw) {
725
709
  }
726
710
  case 'web_search_call_record': {
727
711
  const phase = raw['phase'];
712
+ const source = raw['source'];
728
713
  if (phase !== 'added' && phase !== 'done') {
729
714
  throw new Error(`${context}.phase must be added | done`);
730
715
  }
716
+ if (source !== undefined && source !== 'codex' && source !== 'openai_responses') {
717
+ throw new Error(`${context}.source must be codex | openai_responses when provided`);
718
+ }
731
719
  const itemId = raw['itemId'];
732
720
  const status = raw['status'];
733
- if (itemId !== undefined && typeof itemId !== 'string') {
734
- throw new Error(`${context}.itemId must be a string when provided`);
721
+ if (typeof itemId !== 'string' || itemId.trim() === '') {
722
+ throw new Error(`${context}.itemId must be a non-empty string`);
735
723
  }
736
724
  if (status !== undefined && typeof status !== 'string') {
737
725
  throw new Error(`${context}.status must be a string when provided`);
@@ -743,8 +731,9 @@ function normalizePrimingRecordFromJson(raw) {
743
731
  genseq: expectIntegerField(raw, 'genseq', context),
744
732
  phase,
745
733
  };
746
- if (itemId !== undefined)
747
- record.itemId = itemId;
734
+ if (source !== undefined)
735
+ record.source = source;
736
+ record.itemId = itemId.trim();
748
737
  if (status !== undefined)
749
738
  record.status = status;
750
739
  if (action !== undefined)
@@ -754,13 +743,110 @@ function normalizePrimingRecordFromJson(raw) {
754
743
  const { ts: _unusedTs, ...withoutTs } = record;
755
744
  return withoutTs;
756
745
  }
746
+ case 'native_tool_call_record': {
747
+ const phase = raw['phase'];
748
+ const source = raw['source'];
749
+ const itemType = raw['itemType'];
750
+ if (phase !== 'added' && phase !== 'done') {
751
+ throw new Error(`${context}.phase must be added | done`);
752
+ }
753
+ if (source !== undefined && source !== 'openai_responses') {
754
+ throw new Error(`${context}.source must be openai_responses when provided`);
755
+ }
756
+ switch (itemType) {
757
+ case 'file_search_call':
758
+ case 'code_interpreter_call':
759
+ case 'image_generation_call':
760
+ case 'mcp_call':
761
+ case 'mcp_list_tools':
762
+ case 'mcp_approval_request':
763
+ case 'custom_tool_call':
764
+ break;
765
+ default:
766
+ throw new Error(`${context}.itemType must be a supported native tool call type`);
767
+ }
768
+ const itemId = raw['itemId'];
769
+ const callId = raw['callId'];
770
+ const status = raw['status'];
771
+ const title = raw['title'];
772
+ const summary = raw['summary'];
773
+ const detail = raw['detail'];
774
+ if (itemId !== undefined && typeof itemId !== 'string') {
775
+ throw new Error(`${context}.itemId must be a string when provided`);
776
+ }
777
+ if (callId !== undefined && typeof callId !== 'string') {
778
+ throw new Error(`${context}.callId must be a string when provided`);
779
+ }
780
+ if (status !== undefined && typeof status !== 'string') {
781
+ throw new Error(`${context}.status must be a string when provided`);
782
+ }
783
+ if (title !== undefined && typeof title !== 'string') {
784
+ throw new Error(`${context}.title must be a string when provided`);
785
+ }
786
+ if (summary !== undefined && typeof summary !== 'string') {
787
+ throw new Error(`${context}.summary must be a string when provided`);
788
+ }
789
+ if (detail !== undefined && typeof detail !== 'string') {
790
+ throw new Error(`${context}.detail must be a string when provided`);
791
+ }
792
+ let record;
793
+ const genseq = expectIntegerField(raw, 'genseq', context);
794
+ if (itemType === 'custom_tool_call') {
795
+ if (typeof callId !== 'string' || callId.trim() === '') {
796
+ throw new Error(`${context}.callId must be a non-empty string for custom_tool_call`);
797
+ }
798
+ if (typeof itemId === 'string' && itemId.trim() === '') {
799
+ throw new Error(`${context}.itemId must be non-empty when provided for custom_tool_call`);
800
+ }
801
+ record = {
802
+ ts: '',
803
+ type,
804
+ genseq,
805
+ itemType,
806
+ phase,
807
+ callId: callId.trim(),
808
+ };
809
+ if (typeof itemId === 'string' && itemId.trim() !== '')
810
+ record.itemId = itemId.trim();
811
+ }
812
+ else {
813
+ if (callId !== undefined) {
814
+ throw new Error(`${context}.callId is not allowed for non-custom native tool calls`);
815
+ }
816
+ if (typeof itemId !== 'string' || itemId.trim() === '') {
817
+ throw new Error(`${context}.itemId must be a non-empty string for ${String(itemType)}`);
818
+ }
819
+ record = {
820
+ ts: '',
821
+ type,
822
+ genseq,
823
+ itemType,
824
+ phase,
825
+ itemId: itemId.trim(),
826
+ };
827
+ }
828
+ if (source !== undefined)
829
+ record.source = source;
830
+ if (status !== undefined)
831
+ record.status = status;
832
+ if (title !== undefined)
833
+ record.title = title;
834
+ if (summary !== undefined)
835
+ record.summary = summary;
836
+ if (detail !== undefined)
837
+ record.detail = detail;
838
+ if (sourceTag)
839
+ record.sourceTag = sourceTag;
840
+ const { ts: _unusedTs, ...withoutTs } = record;
841
+ return withoutTs;
842
+ }
757
843
  case 'human_text_record': {
758
844
  const grammar = raw['grammar'];
759
845
  if (grammar !== 'markdown') {
760
846
  throw new Error(`${context}.grammar must be 'markdown'`);
761
847
  }
762
848
  const userLanguageCode = parseOptionalLanguageCodeField(raw, 'userLanguageCode', context);
763
- const q4hAnswerCallIds = parseOptionalStringArray(raw, 'q4hAnswerCallIds', context);
849
+ const q4hAnswerCallId = parseOptionalStringField(raw, 'q4hAnswerCallId', context);
764
850
  const tellaskReplyDirective = parseTellaskReplyDirective(raw, context);
765
851
  const record = {
766
852
  ts: '',
@@ -772,8 +858,8 @@ function normalizePrimingRecordFromJson(raw) {
772
858
  };
773
859
  if (userLanguageCode !== undefined)
774
860
  record.userLanguageCode = userLanguageCode;
775
- if (q4hAnswerCallIds)
776
- record.q4hAnswerCallIds = q4hAnswerCallIds;
861
+ if (q4hAnswerCallId !== undefined)
862
+ record.q4hAnswerCallId = q4hAnswerCallId;
777
863
  if (tellaskReplyDirective !== undefined)
778
864
  record.tellaskReplyDirective = tellaskReplyDirective;
779
865
  if (sourceTag)
@@ -798,22 +884,7 @@ function normalizePrimingRecordFromJson(raw) {
798
884
  const { ts: _unusedTs, ...withoutTs } = record;
799
885
  return withoutTs;
800
886
  }
801
- case 'quest_for_sup_record': {
802
- const mentionList = parseOptionalStringArray(raw, 'mentionList', context) ?? [];
803
- const record = {
804
- ts: '',
805
- type,
806
- genseq: expectIntegerField(raw, 'genseq', context),
807
- mentionList,
808
- tellaskContent: expectStringField(raw, 'tellaskContent', context, true),
809
- subDialogId: expectStringField(raw, 'subDialogId', context),
810
- };
811
- if (sourceTag)
812
- record.sourceTag = sourceTag;
813
- const { ts: _unusedTs, ...withoutTs } = record;
814
- return withoutTs;
815
- }
816
- case 'tellask_call_result_record': {
887
+ case 'tellask_result_record': {
817
888
  const callName = raw['callName'];
818
889
  if (callName !== 'tellaskBack' &&
819
890
  callName !== 'tellask' &&
@@ -823,63 +894,163 @@ function normalizePrimingRecordFromJson(raw) {
823
894
  throw new Error(`${context}.callName is invalid`);
824
895
  }
825
896
  const status = raw['status'];
826
- if (status !== 'completed' && status !== 'failed') {
827
- throw new Error(`${context}.status must be completed | failed`);
897
+ if (status !== 'pending' && status !== 'completed' && status !== 'failed') {
898
+ throw new Error(`${context}.status must be pending | completed | failed`);
828
899
  }
829
900
  const callingGenseq = parseOptionalIntegerField(raw, 'calling_genseq', context);
830
- const mentionList = parseOptionalStringArray(raw, 'mentionList', context);
831
- const record = {
901
+ const callRaw = raw['call'];
902
+ if (!isRecord(callRaw)) {
903
+ throw new Error(`${context}.call must be an object`);
904
+ }
905
+ const responderRaw = raw['responder'];
906
+ if (!isRecord(responderRaw)) {
907
+ throw new Error(`${context}.responder must be an object`);
908
+ }
909
+ const routeRaw = raw['route'];
910
+ if (routeRaw !== undefined && !isRecord(routeRaw)) {
911
+ throw new Error(`${context}.route must be an object when provided`);
912
+ }
913
+ const route = routeRaw === undefined
914
+ ? undefined
915
+ : {
916
+ ...(typeof routeRaw['calleeDialogId'] === 'string'
917
+ ? { calleeDialogId: routeRaw['calleeDialogId'] }
918
+ : routeRaw['calleeDialogId'] === undefined
919
+ ? {}
920
+ : (() => {
921
+ throw new Error(`${context}.route.calleeDialogId must be a string`);
922
+ })()),
923
+ ...(parseOptionalIntegerField(routeRaw, 'calleeCourse', `${context}.route`) !==
924
+ undefined
925
+ ? {
926
+ calleeCourse: (0, storage_1.toCalleeCourseNumber)(parseOptionalIntegerField(routeRaw, 'calleeCourse', `${context}.route`)),
927
+ }
928
+ : {}),
929
+ ...(parseOptionalIntegerField(routeRaw, 'calleeGenseq', `${context}.route`) !==
930
+ undefined
931
+ ? {
932
+ calleeGenseq: (0, storage_1.toCalleeGenerationSeqNumber)(parseOptionalIntegerField(routeRaw, 'calleeGenseq', `${context}.route`)),
933
+ }
934
+ : {}),
935
+ };
936
+ const responder = {
937
+ responderId: expectStringField(responderRaw, 'responderId', `${context}.responder`),
938
+ ...(typeof responderRaw['agentId'] === 'string'
939
+ ? { agentId: responderRaw['agentId'] }
940
+ : responderRaw['agentId'] === undefined
941
+ ? {}
942
+ : (() => {
943
+ throw new Error(`${context}.responder.agentId must be a string`);
944
+ })()),
945
+ ...(typeof responderRaw['originMemberId'] === 'string'
946
+ ? { originMemberId: responderRaw['originMemberId'] }
947
+ : responderRaw['originMemberId'] === undefined
948
+ ? {}
949
+ : (() => {
950
+ throw new Error(`${context}.responder.originMemberId must be a string`);
951
+ })()),
952
+ };
953
+ const base = {
832
954
  ts: '',
833
955
  type,
834
- responderId: expectStringField(raw, 'responderId', context),
835
- callName,
836
- tellaskContent: expectStringField(raw, 'tellaskContent', context, true),
837
- status,
838
- result: expectStringField(raw, 'result', context, true),
956
+ genseq: expectIntegerField(raw, 'genseq', context),
839
957
  callId: expectStringField(raw, 'callId', context),
958
+ status,
959
+ content: expectStringField(raw, 'content', context, true),
960
+ responder,
840
961
  };
962
+ const record = (() => {
963
+ switch (callName) {
964
+ case 'tellask': {
965
+ const mentionList = parseOptionalStringArray(callRaw, 'mentionList', `${context}.call`);
966
+ if (!mentionList) {
967
+ throw new Error(`${context}.call.mentionList is required for tellask`);
968
+ }
969
+ return {
970
+ ...base,
971
+ callName,
972
+ call: {
973
+ tellaskContent: expectStringField(callRaw, 'tellaskContent', `${context}.call`, true),
974
+ mentionList,
975
+ sessionSlug: expectStringField(callRaw, 'sessionSlug', `${context}.call`),
976
+ },
977
+ };
978
+ }
979
+ case 'tellaskSessionless': {
980
+ const mentionList = parseOptionalStringArray(callRaw, 'mentionList', `${context}.call`);
981
+ if (!mentionList) {
982
+ throw new Error(`${context}.call.mentionList is required for tellaskSessionless`);
983
+ }
984
+ if (callRaw['sessionSlug'] !== undefined) {
985
+ throw new Error(`${context}.call.sessionSlug must be undefined for tellaskSessionless`);
986
+ }
987
+ return {
988
+ ...base,
989
+ callName,
990
+ call: {
991
+ tellaskContent: expectStringField(callRaw, 'tellaskContent', `${context}.call`, true),
992
+ mentionList,
993
+ },
994
+ };
995
+ }
996
+ case 'tellaskBack':
997
+ case 'askHuman':
998
+ case 'freshBootsReasoning':
999
+ if (callRaw['mentionList'] !== undefined) {
1000
+ throw new Error(`${context}.call.mentionList must be undefined for ${callName}`);
1001
+ }
1002
+ if (callRaw['sessionSlug'] !== undefined) {
1003
+ throw new Error(`${context}.call.sessionSlug must be undefined for ${callName}`);
1004
+ }
1005
+ return {
1006
+ ...base,
1007
+ callName,
1008
+ call: {
1009
+ tellaskContent: expectStringField(callRaw, 'tellaskContent', `${context}.call`, true),
1010
+ },
1011
+ };
1012
+ }
1013
+ })();
841
1014
  if (callingGenseq !== undefined) {
842
1015
  record.calling_genseq = (0, storage_1.toCallingGenerationSeqNumber)(callingGenseq);
843
1016
  }
844
- if (mentionList)
845
- record.mentionList = mentionList;
1017
+ if (route !== undefined) {
1018
+ record.route = route;
1019
+ }
846
1020
  if (sourceTag)
847
1021
  record.sourceTag = sourceTag;
848
1022
  const { ts: _unusedTs, ...withoutTs } = record;
849
1023
  return withoutTs;
850
1024
  }
851
- case 'tellask_reply_resolution_record': {
852
- const replyCallName = raw['replyCallName'];
853
- if (replyCallName !== 'replyTellask' &&
854
- replyCallName !== 'replyTellaskSessionless' &&
855
- replyCallName !== 'replyTellaskBack') {
856
- throw new Error(`${context}.replyCallName must be a supported replyTellask* function`);
857
- }
1025
+ case 'quest_for_sup_record': {
1026
+ const mentionList = parseOptionalStringArray(raw, 'mentionList', context) ?? [];
858
1027
  const record = {
859
1028
  ts: '',
860
1029
  type,
861
1030
  genseq: expectIntegerField(raw, 'genseq', context),
862
- callId: expectStringField(raw, 'callId', context),
863
- replyCallName,
864
- targetCallId: expectStringField(raw, 'targetCallId', context),
1031
+ mentionList,
1032
+ tellaskContent: expectStringField(raw, 'tellaskContent', context, true),
1033
+ subDialogId: expectStringField(raw, 'subDialogId', context),
865
1034
  };
866
1035
  if (sourceTag)
867
1036
  record.sourceTag = sourceTag;
868
1037
  const { ts: _unusedTs, ...withoutTs } = record;
869
1038
  return withoutTs;
870
1039
  }
871
- case 'tellask_call_carryover_record': {
872
- const status = raw['status'];
873
- if (status !== 'completed' && status !== 'failed') {
874
- throw new Error(`${context}.status must be completed | failed`);
1040
+ case 'tellask_reply_resolution_record': {
1041
+ const replyCallName = raw['replyCallName'];
1042
+ if (replyCallName !== 'replyTellask' &&
1043
+ replyCallName !== 'replyTellaskSessionless' &&
1044
+ replyCallName !== 'replyTellaskBack') {
1045
+ throw new Error(`${context}.replyCallName must be a supported replyTellask* function`);
875
1046
  }
876
1047
  const record = {
877
1048
  ts: '',
878
1049
  type,
879
- responderId: expectStringField(raw, 'responderId', context),
880
- status,
1050
+ genseq: expectIntegerField(raw, 'genseq', context),
881
1051
  callId: expectStringField(raw, 'callId', context),
882
- carryoverCourse: (0, storage_1.toDialogCourseNumber)(expectIntegerField(raw, 'carryoverCourse', context)),
1052
+ replyCallName,
1053
+ targetCallId: expectStringField(raw, 'targetCallId', context),
883
1054
  };
884
1055
  if (sourceTag)
885
1056
  record.sourceTag = sourceTag;
@@ -945,102 +1116,11 @@ function normalizePrimingRecordFromJson(raw) {
945
1116
  const { ts: _unusedTs, ...withoutTs } = record;
946
1117
  return withoutTs;
947
1118
  }
948
- case 'tellask_response_record': {
949
- const callName = raw['callName'];
950
- if (callName !== 'tellaskBack' &&
951
- callName !== 'tellask' &&
952
- callName !== 'tellaskSessionless' &&
953
- callName !== 'freshBootsReasoning') {
954
- throw new Error(`${context}.callName is invalid`);
955
- }
956
- const status = raw['status'];
957
- if (status !== 'completed' && status !== 'failed') {
958
- throw new Error(`${context}.status must be completed | failed`);
959
- }
960
- const mentionList = parseOptionalStringArray(raw, 'mentionList', context);
961
- const sessionSlug = raw['sessionSlug'];
962
- const callingGenseq = parseOptionalIntegerField(raw, 'calling_genseq', context);
963
- const calleeCourse = parseOptionalIntegerField(raw, 'calleeCourse', context);
964
- const calleeGenseq = parseOptionalIntegerField(raw, 'calleeGenseq', context);
965
- const calleeDialogId = raw['calleeDialogId'];
966
- if (calleeDialogId !== undefined && typeof calleeDialogId !== 'string') {
967
- throw new Error(`${context}.calleeDialogId must be a string when provided`);
968
- }
969
- const base = {
970
- ts: '',
971
- type,
972
- responderId: expectStringField(raw, 'responderId', context),
973
- tellaskContent: expectStringField(raw, 'tellaskContent', context, true),
974
- status,
975
- response: expectStringField(raw, 'response', context, true),
976
- agentId: expectStringField(raw, 'agentId', context),
977
- callId: expectStringField(raw, 'callId', context),
978
- originMemberId: expectStringField(raw, 'originMemberId', context),
979
- };
980
- const record = (() => {
981
- switch (callName) {
982
- case 'tellask': {
983
- if (!Array.isArray(mentionList) || mentionList.length < 1) {
984
- throw new Error(`${context}.mentionList is required for tellask response`);
985
- }
986
- if (typeof sessionSlug !== 'string' || sessionSlug.trim() === '') {
987
- throw new Error(`${context}.sessionSlug is required for tellask response`);
988
- }
989
- return {
990
- ...base,
991
- callName,
992
- sessionSlug: sessionSlug.trim(),
993
- mentionList,
994
- };
995
- }
996
- case 'tellaskSessionless': {
997
- if (!Array.isArray(mentionList) || mentionList.length < 1) {
998
- throw new Error(`${context}.mentionList is required for tellaskSessionless response`);
999
- }
1000
- if (sessionSlug !== undefined) {
1001
- throw new Error(`${context}.sessionSlug must be undefined for tellaskSessionless response`);
1002
- }
1003
- return {
1004
- ...base,
1005
- callName,
1006
- mentionList,
1007
- };
1008
- }
1009
- case 'tellaskBack':
1010
- case 'freshBootsReasoning': {
1011
- if (mentionList !== undefined) {
1012
- throw new Error(`${context}.mentionList must be undefined for ${callName}`);
1013
- }
1014
- if (sessionSlug !== undefined) {
1015
- throw new Error(`${context}.sessionSlug must be undefined for ${callName}`);
1016
- }
1017
- return {
1018
- ...base,
1019
- callName,
1020
- };
1021
- }
1022
- }
1023
- })();
1024
- if (callingGenseq !== undefined) {
1025
- record.calling_genseq = (0, storage_1.toCallingGenerationSeqNumber)(callingGenseq);
1026
- }
1027
- if (calleeDialogId !== undefined)
1028
- record.calleeDialogId = calleeDialogId;
1029
- if (calleeCourse !== undefined) {
1030
- record.calleeCourse = (0, storage_1.toCalleeCourseNumber)(calleeCourse);
1031
- }
1032
- if (calleeGenseq !== undefined) {
1033
- record.calleeGenseq = (0, storage_1.toCalleeGenerationSeqNumber)(calleeGenseq);
1034
- }
1035
- if (sourceTag)
1036
- record.sourceTag = sourceTag;
1037
- const { ts: _unusedTs, ...withoutTs } = record;
1038
- return withoutTs;
1039
- }
1040
- case 'tellask_carryover_result_record': {
1119
+ case 'tellask_carryover_record': {
1041
1120
  const callName = raw['callName'];
1042
1121
  if (callName !== 'tellask' &&
1043
1122
  callName !== 'tellaskSessionless' &&
1123
+ callName !== 'askHuman' &&
1044
1124
  callName !== 'freshBootsReasoning') {
1045
1125
  throw new Error(`${context}.callName is invalid`);
1046
1126
  }
@@ -1048,7 +1128,9 @@ function normalizePrimingRecordFromJson(raw) {
1048
1128
  if (status !== 'completed' && status !== 'failed') {
1049
1129
  throw new Error(`${context}.status must be completed | failed`);
1050
1130
  }
1131
+ const genseq = expectIntegerField(raw, 'genseq', context);
1051
1132
  const originCourse = expectIntegerField(raw, 'originCourse', context);
1133
+ const carryoverCourse = expectIntegerField(raw, 'carryoverCourse', context);
1052
1134
  const mentionList = parseOptionalStringArray(raw, 'mentionList', context);
1053
1135
  const sessionSlug = raw['sessionSlug'];
1054
1136
  const calleeCourse = parseOptionalIntegerField(raw, 'calleeCourse', context);
@@ -1060,7 +1142,9 @@ function normalizePrimingRecordFromJson(raw) {
1060
1142
  const base = {
1061
1143
  ts: '',
1062
1144
  type,
1145
+ genseq,
1063
1146
  originCourse: (0, storage_1.toCallingCourseNumber)(originCourse),
1147
+ carryoverCourse: (0, storage_1.toDialogCourseNumber)(carryoverCourse),
1064
1148
  responderId: expectStringField(raw, 'responderId', context),
1065
1149
  tellaskContent: expectStringField(raw, 'tellaskContent', context, true),
1066
1150
  status,
@@ -1073,7 +1157,7 @@ function normalizePrimingRecordFromJson(raw) {
1073
1157
  const record = (() => {
1074
1158
  switch (callName) {
1075
1159
  case 'tellask': {
1076
- if (!Array.isArray(mentionList) || mentionList.length < 1) {
1160
+ if (!Array.isArray(mentionList)) {
1077
1161
  throw new Error(`${context}.mentionList is required for tellask carryover`);
1078
1162
  }
1079
1163
  if (typeof sessionSlug !== 'string' || sessionSlug.trim() === '') {
@@ -1087,7 +1171,7 @@ function normalizePrimingRecordFromJson(raw) {
1087
1171
  };
1088
1172
  }
1089
1173
  case 'tellaskSessionless': {
1090
- if (!Array.isArray(mentionList) || mentionList.length < 1) {
1174
+ if (!Array.isArray(mentionList)) {
1091
1175
  throw new Error(`${context}.mentionList is required for tellaskSessionless carryover`);
1092
1176
  }
1093
1177
  if (sessionSlug !== undefined) {
@@ -1099,6 +1183,17 @@ function normalizePrimingRecordFromJson(raw) {
1099
1183
  mentionList,
1100
1184
  };
1101
1185
  }
1186
+ case 'askHuman':
1187
+ if (mentionList !== undefined) {
1188
+ throw new Error(`${context}.mentionList must be undefined for askHuman carryover`);
1189
+ }
1190
+ if (sessionSlug !== undefined) {
1191
+ throw new Error(`${context}.sessionSlug must be undefined for askHuman carryover`);
1192
+ }
1193
+ return {
1194
+ ...base,
1195
+ callName,
1196
+ };
1102
1197
  case 'freshBootsReasoning':
1103
1198
  if (mentionList !== undefined) {
1104
1199
  throw new Error(`${context}.mentionList must be undefined for FBR carryover`);
@@ -1592,8 +1687,9 @@ function remapRecordGenseq(record, mapGenseq) {
1592
1687
  case 'ui_only_markdown_record':
1593
1688
  case 'runtime_guide_record':
1594
1689
  case 'func_call_record':
1595
- case 'tellask_special_call_record':
1690
+ case 'tellask_call_record':
1596
1691
  case 'web_search_call_record':
1692
+ case 'native_tool_call_record':
1597
1693
  case 'human_text_record':
1598
1694
  case 'func_result_record':
1599
1695
  case 'quest_for_sup_record':
@@ -1601,26 +1697,17 @@ function remapRecordGenseq(record, mapGenseq) {
1601
1697
  case 'gen_start_record':
1602
1698
  case 'gen_finish_record':
1603
1699
  return { ...record, genseq: mapGenseq(record.genseq) };
1604
- case 'tellask_call_result_record':
1700
+ case 'tellask_result_record':
1605
1701
  return {
1606
1702
  ...record,
1703
+ genseq: mapGenseq(record.genseq),
1607
1704
  calling_genseq: record.calling_genseq !== undefined
1608
1705
  ? (0, storage_1.toCallingGenerationSeqNumber)(remapOptionalGenseq(record.calling_genseq))
1609
1706
  : undefined,
1610
1707
  };
1611
1708
  case 'tellask_reply_resolution_record':
1709
+ case 'tellask_carryover_record':
1612
1710
  return { ...record, genseq: mapGenseq(record.genseq) };
1613
- case 'tellask_call_carryover_record':
1614
- return record;
1615
- case 'tellask_response_record':
1616
- return {
1617
- ...record,
1618
- calling_genseq: record.calling_genseq !== undefined
1619
- ? (0, storage_1.toCallingGenerationSeqNumber)(remapOptionalGenseq(record.calling_genseq))
1620
- : undefined,
1621
- };
1622
- case 'tellask_carryover_result_record':
1623
- return record;
1624
1711
  default: {
1625
1712
  const _exhaustive = record;
1626
1713
  throw new Error(`Unhandled priming record in remapRecordGenseq: ${String(_exhaustive)}`);
@@ -1660,17 +1747,16 @@ function addPrimingSourceTag(record) {
1660
1747
  case 'ui_only_markdown_record':
1661
1748
  case 'runtime_guide_record':
1662
1749
  case 'func_call_record':
1663
- case 'tellask_special_call_record':
1750
+ case 'tellask_call_record':
1664
1751
  case 'web_search_call_record':
1752
+ case 'native_tool_call_record':
1665
1753
  case 'human_text_record':
1666
1754
  case 'func_result_record':
1755
+ case 'tellask_result_record':
1667
1756
  case 'quest_for_sup_record':
1668
- case 'tellask_call_result_record':
1669
1757
  case 'tellask_reply_resolution_record':
1670
- case 'tellask_call_carryover_record':
1671
1758
  case 'tellask_call_anchor_record':
1672
- case 'tellask_response_record':
1673
- case 'tellask_carryover_result_record':
1759
+ case 'tellask_carryover_record':
1674
1760
  case 'gen_start_record':
1675
1761
  case 'gen_finish_record':
1676
1762
  return { ...record, sourceTag: 'priming_script' };
@@ -1687,17 +1773,16 @@ function withTimestamp(record, ts) {
1687
1773
  case 'ui_only_markdown_record':
1688
1774
  case 'runtime_guide_record':
1689
1775
  case 'func_call_record':
1690
- case 'tellask_special_call_record':
1776
+ case 'tellask_call_record':
1691
1777
  case 'web_search_call_record':
1692
1778
  case 'human_text_record':
1693
1779
  case 'func_result_record':
1780
+ case 'tellask_result_record':
1694
1781
  case 'quest_for_sup_record':
1695
- case 'tellask_call_result_record':
1696
1782
  case 'tellask_reply_resolution_record':
1697
- case 'tellask_call_carryover_record':
1698
1783
  case 'tellask_call_anchor_record':
1699
- case 'tellask_response_record':
1700
- case 'tellask_carryover_result_record':
1784
+ case 'tellask_carryover_record':
1785
+ case 'native_tool_call_record':
1701
1786
  case 'gen_start_record':
1702
1787
  case 'gen_finish_record':
1703
1788
  return { ts, ...record };
@@ -1726,12 +1811,7 @@ function primingRecordToChatMessage(record) {
1726
1811
  content: record.content,
1727
1812
  };
1728
1813
  case 'ui_only_markdown_record':
1729
- return {
1730
- type: 'ui_only_markdown_msg',
1731
- role: 'assistant',
1732
- genseq: record.genseq,
1733
- content: record.content,
1734
- };
1814
+ return null;
1735
1815
  case 'runtime_guide_record':
1736
1816
  return {
1737
1817
  type: 'transient_guide_msg',
@@ -1754,43 +1834,16 @@ function primingRecordToChatMessage(record) {
1754
1834
  genseq: record.genseq,
1755
1835
  id: record.id,
1756
1836
  name: record.name,
1757
- arguments: JSON.stringify(record.arguments),
1837
+ arguments: record.rawArgumentsText,
1758
1838
  };
1759
- case 'tellask_special_call_record':
1839
+ case 'tellask_call_record':
1760
1840
  return {
1761
1841
  type: 'func_call_msg',
1762
1842
  role: 'assistant',
1763
1843
  genseq: record.genseq,
1764
1844
  id: record.id,
1765
1845
  name: record.name,
1766
- arguments: (() => {
1767
- switch (record.name) {
1768
- case 'tellaskBack':
1769
- return JSON.stringify({ tellaskContent: record.tellaskContent });
1770
- case 'tellask':
1771
- return JSON.stringify({
1772
- targetAgentId: record.targetAgentId,
1773
- sessionSlug: record.sessionSlug,
1774
- tellaskContent: record.tellaskContent,
1775
- });
1776
- case 'tellaskSessionless':
1777
- return JSON.stringify({
1778
- targetAgentId: record.targetAgentId,
1779
- tellaskContent: record.tellaskContent,
1780
- });
1781
- case 'replyTellask':
1782
- case 'replyTellaskSessionless':
1783
- case 'replyTellaskBack':
1784
- return JSON.stringify({ replyContent: record.replyContent });
1785
- case 'askHuman':
1786
- return JSON.stringify({ tellaskContent: record.tellaskContent });
1787
- case 'freshBootsReasoning':
1788
- return JSON.stringify({
1789
- tellaskContent: record.tellaskContent,
1790
- ...(record.effort !== undefined ? { effort: record.effort } : {}),
1791
- });
1792
- }
1793
- })(),
1846
+ arguments: record.rawArgumentsText,
1794
1847
  };
1795
1848
  case 'func_result_record':
1796
1849
  return {
@@ -1802,51 +1855,69 @@ function primingRecordToChatMessage(record) {
1802
1855
  content: record.content,
1803
1856
  contentItems: record.contentItems,
1804
1857
  };
1805
- case 'tellask_call_result_record': {
1806
- const mentionList = record.callName === 'tellask' || record.callName === 'tellaskSessionless'
1807
- ? record.mentionList
1808
- : undefined;
1858
+ case 'tellask_result_record':
1809
1859
  return {
1810
1860
  type: 'tellask_result_msg',
1811
1861
  role: 'tool',
1812
- responderId: record.responderId,
1813
- mentionList,
1814
- tellaskContent: record.tellaskContent,
1815
- status: record.status,
1862
+ genseq: record.genseq,
1816
1863
  callId: record.callId,
1817
- content: record.result,
1818
- };
1819
- }
1820
- case 'tellask_call_carryover_record':
1821
- return null;
1822
- case 'tellask_response_record': {
1823
- const mentionList = record.callName === 'tellask' || record.callName === 'tellaskSessionless'
1824
- ? record.mentionList
1825
- : undefined;
1826
- return {
1827
- type: 'tellask_result_msg',
1828
- role: 'tool',
1829
- responderId: record.responderId,
1830
- mentionList,
1831
- tellaskContent: record.tellaskContent,
1864
+ callName: record.callName,
1832
1865
  status: record.status,
1833
- callId: record.callId,
1834
- content: record.response,
1866
+ content: record.content,
1867
+ ...(record.calling_genseq !== undefined ? { calling_genseq: record.calling_genseq } : {}),
1868
+ call: record.call,
1869
+ responder: record.responder,
1870
+ ...(record.route ? { route: record.route } : {}),
1871
+ responderId: record.responder.responderId,
1872
+ ...(record.callName === 'tellask' || record.callName === 'tellaskSessionless'
1873
+ ? { mentionList: record.call.mentionList }
1874
+ : {}),
1875
+ tellaskContent: record.call.tellaskContent,
1876
+ ...(record.callName === 'tellask' ? { sessionSlug: record.call.sessionSlug } : {}),
1877
+ ...(record.responder.agentId ? { agentId: record.responder.agentId } : {}),
1878
+ ...(record.responder.originMemberId
1879
+ ? { originMemberId: record.responder.originMemberId }
1880
+ : {}),
1881
+ ...(record.route?.calleeDialogId ? { calleeDialogId: record.route.calleeDialogId } : {}),
1882
+ ...(record.route?.calleeCourse !== undefined
1883
+ ? { calleeCourse: record.route.calleeCourse }
1884
+ : {}),
1885
+ ...(record.route?.calleeGenseq !== undefined
1886
+ ? { calleeGenseq: record.route.calleeGenseq }
1887
+ : {}),
1835
1888
  };
1836
- }
1837
- case 'tellask_carryover_result_record':
1889
+ case 'tellask_carryover_record':
1838
1890
  return {
1839
- type: 'tellask_carryover_result_msg',
1891
+ type: 'tellask_carryover_msg',
1840
1892
  role: 'user',
1893
+ genseq: record.genseq,
1841
1894
  content: record.content,
1842
1895
  originCourse: record.originCourse,
1896
+ carryoverCourse: record.carryoverCourse,
1843
1897
  responderId: record.responderId,
1844
1898
  callName: record.callName,
1845
1899
  tellaskContent: record.tellaskContent,
1846
1900
  status: record.status,
1901
+ response: record.response,
1902
+ agentId: record.agentId,
1847
1903
  callId: record.callId,
1904
+ originMemberId: record.originMemberId,
1905
+ ...(record.callName === 'tellask'
1906
+ ? {
1907
+ mentionList: record.mentionList,
1908
+ sessionSlug: record.sessionSlug,
1909
+ }
1910
+ : record.callName === 'tellaskSessionless'
1911
+ ? {
1912
+ mentionList: record.mentionList,
1913
+ }
1914
+ : {}),
1915
+ ...(record.calleeDialogId ? { calleeDialogId: record.calleeDialogId } : {}),
1916
+ ...(record.calleeCourse !== undefined ? { calleeCourse: record.calleeCourse } : {}),
1917
+ ...(record.calleeGenseq !== undefined ? { calleeGenseq: record.calleeGenseq } : {}),
1848
1918
  };
1849
1919
  case 'web_search_call_record':
1920
+ case 'native_tool_call_record':
1850
1921
  case 'quest_for_sup_record':
1851
1922
  case 'tellask_call_anchor_record':
1852
1923
  case 'tellask_reply_resolution_record':
@@ -1971,6 +2042,8 @@ function formatScriptMarkdown(args) {
1971
2042
  case 'web_search_call_record': {
1972
2043
  blockMeta['genseq'] = record.genseq;
1973
2044
  blockMeta['phase'] = record.phase;
2045
+ if (record.source !== undefined)
2046
+ blockMeta['source'] = record.source;
1974
2047
  if (record.itemId !== undefined)
1975
2048
  blockMeta['itemId'] = record.itemId;
1976
2049
  if (record.status !== undefined)
@@ -1987,8 +2060,9 @@ function formatScriptMarkdown(args) {
1987
2060
  blockMeta['grammar'] = record.grammar;
1988
2061
  if (record.userLanguageCode !== undefined)
1989
2062
  blockMeta['userLanguageCode'] = record.userLanguageCode;
1990
- if (record.q4hAnswerCallIds !== undefined)
1991
- blockMeta['q4hAnswerCallIds'] = record.q4hAnswerCallIds;
2063
+ // Preserve this technical continuation marker verbatim in priming dumps for debugging.
2064
+ if (record.q4hAnswerCallId !== undefined)
2065
+ blockMeta['q4hAnswerCallId'] = record.q4hAnswerCallId;
1992
2066
  if (record.tellaskReplyDirective !== undefined)
1993
2067
  blockMeta['tellaskReplyDirective'] = record.tellaskReplyDirective;
1994
2068
  if (record.sourceTag !== undefined)
@@ -2016,54 +2090,15 @@ function formatScriptMarkdown(args) {
2016
2090
  blockBody = record.tellaskContent;
2017
2091
  break;
2018
2092
  }
2019
- case 'tellask_special_call_record': {
2093
+ case 'tellask_call_record': {
2020
2094
  blockMeta['genseq'] = record.genseq;
2021
2095
  blockMeta['id'] = record.id;
2022
2096
  blockMeta['name'] = record.name;
2023
- switch (record.name) {
2024
- case 'tellaskBack':
2025
- blockBody = record.tellaskContent;
2026
- break;
2027
- case 'tellask':
2028
- blockMeta['targetAgentId'] = record.targetAgentId;
2029
- blockMeta['sessionSlug'] = record.sessionSlug;
2030
- blockBody = record.tellaskContent;
2031
- break;
2032
- case 'tellaskSessionless':
2033
- blockMeta['targetAgentId'] = record.targetAgentId;
2034
- blockBody = record.tellaskContent;
2035
- break;
2036
- case 'replyTellask':
2037
- case 'replyTellaskSessionless':
2038
- case 'replyTellaskBack':
2039
- blockBody = record.replyContent;
2040
- break;
2041
- case 'askHuman':
2042
- blockBody = record.tellaskContent;
2043
- break;
2044
- case 'freshBootsReasoning':
2045
- if (record.effort !== undefined)
2046
- blockMeta['effort'] = record.effort;
2047
- blockBody = record.tellaskContent;
2048
- break;
2049
- }
2050
- if (record.sourceTag !== undefined)
2051
- blockMeta['sourceTag'] = record.sourceTag;
2052
- break;
2053
- }
2054
- case 'tellask_call_result_record': {
2055
- blockMeta['responderId'] = record.responderId;
2056
- blockMeta['callName'] = record.callName;
2057
- if (record.mentionList !== undefined)
2058
- blockMeta['mentionList'] = record.mentionList;
2059
- blockMeta['tellaskContent'] = record.tellaskContent;
2060
- blockMeta['status'] = record.status;
2061
- blockMeta['callId'] = record.callId;
2062
- if (record.calling_genseq !== undefined)
2063
- blockMeta['calling_genseq'] = record.calling_genseq;
2097
+ blockMeta['deliveryMode'] = record.deliveryMode;
2098
+ blockMeta['rawArgumentsText'] = record.rawArgumentsText;
2064
2099
  if (record.sourceTag !== undefined)
2065
2100
  blockMeta['sourceTag'] = record.sourceTag;
2066
- blockBody = record.result;
2101
+ blockBody = '';
2067
2102
  break;
2068
2103
  }
2069
2104
  case 'tellask_reply_resolution_record': {
@@ -2075,15 +2110,6 @@ function formatScriptMarkdown(args) {
2075
2110
  blockMeta['sourceTag'] = record.sourceTag;
2076
2111
  break;
2077
2112
  }
2078
- case 'tellask_call_carryover_record': {
2079
- blockMeta['responderId'] = record.responderId;
2080
- blockMeta['status'] = record.status;
2081
- blockMeta['callId'] = record.callId;
2082
- blockMeta['carryoverCourse'] = record.carryoverCourse;
2083
- if (record.sourceTag !== undefined)
2084
- blockMeta['sourceTag'] = record.sourceTag;
2085
- break;
2086
- }
2087
2113
  case 'tellask_call_anchor_record': {
2088
2114
  blockMeta['anchorRole'] = record.anchorRole;
2089
2115
  blockMeta['callId'] = record.callId;
@@ -2100,41 +2126,26 @@ function formatScriptMarkdown(args) {
2100
2126
  blockMeta['sourceTag'] = record.sourceTag;
2101
2127
  break;
2102
2128
  }
2103
- case 'tellask_response_record': {
2104
- blockMeta['responderId'] = record.responderId;
2129
+ case 'tellask_result_record': {
2130
+ blockMeta['genseq'] = record.genseq;
2131
+ blockMeta['callId'] = record.callId;
2105
2132
  blockMeta['callName'] = record.callName;
2106
- switch (record.callName) {
2107
- case 'tellask':
2108
- blockMeta['sessionSlug'] = record.sessionSlug;
2109
- blockMeta['mentionList'] = record.mentionList;
2110
- break;
2111
- case 'tellaskSessionless':
2112
- blockMeta['mentionList'] = record.mentionList;
2113
- break;
2114
- case 'tellaskBack':
2115
- case 'freshBootsReasoning':
2116
- break;
2117
- }
2118
- blockMeta['tellaskContent'] = record.tellaskContent;
2119
2133
  blockMeta['status'] = record.status;
2120
- blockMeta['agentId'] = record.agentId;
2121
- blockMeta['callId'] = record.callId;
2122
- blockMeta['originMemberId'] = record.originMemberId;
2134
+ blockMeta['call'] = record.call;
2135
+ blockMeta['responder'] = record.responder;
2123
2136
  if (record.calling_genseq !== undefined)
2124
2137
  blockMeta['calling_genseq'] = record.calling_genseq;
2125
- if (record.calleeDialogId !== undefined)
2126
- blockMeta['calleeDialogId'] = record.calleeDialogId;
2127
- if (record.calleeCourse !== undefined)
2128
- blockMeta['calleeCourse'] = record.calleeCourse;
2129
- if (record.calleeGenseq !== undefined)
2130
- blockMeta['calleeGenseq'] = record.calleeGenseq;
2138
+ if (record.route !== undefined)
2139
+ blockMeta['route'] = record.route;
2131
2140
  if (record.sourceTag !== undefined)
2132
2141
  blockMeta['sourceTag'] = record.sourceTag;
2133
- blockBody = record.response;
2142
+ blockBody = record.content;
2134
2143
  break;
2135
2144
  }
2136
- case 'tellask_carryover_result_record': {
2145
+ case 'tellask_carryover_record': {
2146
+ blockMeta['genseq'] = record.genseq;
2137
2147
  blockMeta['originCourse'] = record.originCourse;
2148
+ blockMeta['carryoverCourse'] = record.carryoverCourse;
2138
2149
  blockMeta['responderId'] = record.responderId;
2139
2150
  blockMeta['callName'] = record.callName;
2140
2151
  switch (record.callName) {
@@ -2145,6 +2156,7 @@ function formatScriptMarkdown(args) {
2145
2156
  case 'tellaskSessionless':
2146
2157
  blockMeta['mentionList'] = record.mentionList;
2147
2158
  break;
2159
+ case 'askHuman':
2148
2160
  case 'freshBootsReasoning':
2149
2161
  break;
2150
2162
  }
@@ -2181,6 +2193,28 @@ function formatScriptMarkdown(args) {
2181
2193
  blockMeta['sourceTag'] = record.sourceTag;
2182
2194
  break;
2183
2195
  }
2196
+ case 'native_tool_call_record': {
2197
+ blockMeta['genseq'] = record.genseq;
2198
+ blockMeta['itemType'] = record.itemType;
2199
+ blockMeta['phase'] = record.phase;
2200
+ if (record.source !== undefined)
2201
+ blockMeta['source'] = record.source;
2202
+ if (record.itemId !== undefined)
2203
+ blockMeta['itemId'] = record.itemId;
2204
+ if (record.itemType === 'custom_tool_call')
2205
+ blockMeta['callId'] = record.callId;
2206
+ if (record.status !== undefined)
2207
+ blockMeta['status'] = record.status;
2208
+ if (record.title !== undefined)
2209
+ blockMeta['title'] = record.title;
2210
+ if (record.summary !== undefined)
2211
+ blockMeta['summary'] = record.summary;
2212
+ if (record.detail !== undefined)
2213
+ blockMeta['detail'] = record.detail;
2214
+ if (record.sourceTag !== undefined)
2215
+ blockMeta['sourceTag'] = record.sourceTag;
2216
+ break;
2217
+ }
2184
2218
  default: {
2185
2219
  const _exhaustive = record;
2186
2220
  throw new Error(`Unhandled priming record in formatScriptMarkdown: ${String(_exhaustive)}`);
@@ -2205,16 +2239,15 @@ function stripTimestampFromRecord(event) {
2205
2239
  case 'ui_only_markdown_record':
2206
2240
  case 'runtime_guide_record':
2207
2241
  case 'func_call_record':
2208
- case 'tellask_special_call_record':
2242
+ case 'tellask_call_record':
2209
2243
  case 'web_search_call_record':
2244
+ case 'native_tool_call_record':
2210
2245
  case 'human_text_record':
2211
2246
  case 'func_result_record':
2247
+ case 'tellask_result_record':
2212
2248
  case 'quest_for_sup_record':
2213
- case 'tellask_call_result_record':
2214
- case 'tellask_call_carryover_record':
2215
2249
  case 'tellask_call_anchor_record':
2216
- case 'tellask_response_record':
2217
- case 'tellask_carryover_result_record':
2250
+ case 'tellask_carryover_record':
2218
2251
  case 'gen_start_record':
2219
2252
  case 'gen_finish_record': {
2220
2253
  const { ts: _unusedTs, ...withoutTs } = event;