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
@@ -63,10 +63,19 @@ const promises_1 = __importDefault(require("fs/promises"));
63
63
  const path_1 = __importDefault(require("path"));
64
64
  const yaml_1 = __importDefault(require("yaml"));
65
65
  const log_1 = require("../../log");
66
+ const reply_prompt_copy_1 = require("../../runtime/reply-prompt-copy");
66
67
  const REPLY_TOOL_REMINDER_PREFIXES = [
67
68
  '[Dominds replyTellask required]',
68
69
  '[Dominds 必须调用回复工具]',
69
70
  ];
71
+ const RUNTIME_PROMPT_WRAPPER_PREFIXES = [
72
+ reply_prompt_copy_1.ACTIVE_REPLY_TOOL_PREFIX_EN,
73
+ reply_prompt_copy_1.ACTIVE_REPLY_TOOL_PREFIX_ZH,
74
+ reply_prompt_copy_1.REPLY_REASSERTION_PREFIX_EN,
75
+ reply_prompt_copy_1.REPLY_REASSERTION_PREFIX_ZH,
76
+ reply_prompt_copy_1.REPLY_SUPPRESSION_PREFIX_EN,
77
+ reply_prompt_copy_1.REPLY_SUPPRESSION_PREFIX_ZH,
78
+ ];
70
79
  function normalizeDelayMs(value) {
71
80
  if (typeof value !== 'number' || !Number.isFinite(value))
72
81
  return 0;
@@ -116,12 +125,11 @@ class MockGen {
116
125
  case 'prompting_msg':
117
126
  case 'func_result_msg':
118
127
  case 'tellask_result_msg':
119
- case 'tellask_carryover_result_msg':
128
+ case 'tellask_carryover_msg':
120
129
  return { content: msg.content, role: msg.role };
121
130
  case 'environment_msg':
122
131
  case 'transient_guide_msg':
123
132
  case 'saying_msg':
124
- case 'ui_only_markdown_msg':
125
133
  case 'thinking_msg':
126
134
  case 'func_call_msg':
127
135
  break;
@@ -141,11 +149,10 @@ class MockGen {
141
149
  case 'transient_guide_msg':
142
150
  case 'prompting_msg':
143
151
  case 'saying_msg':
144
- case 'ui_only_markdown_msg':
145
152
  case 'thinking_msg':
146
153
  case 'func_result_msg':
147
154
  case 'tellask_result_msg':
148
- case 'tellask_carryover_result_msg':
155
+ case 'tellask_carryover_msg':
149
156
  return lastMsg.content;
150
157
  case 'func_call_msg':
151
158
  return '';
@@ -229,11 +236,10 @@ class MockGen {
229
236
  case 'transient_guide_msg':
230
237
  case 'prompting_msg':
231
238
  case 'saying_msg':
232
- case 'ui_only_markdown_msg':
233
239
  case 'thinking_msg':
234
240
  case 'func_result_msg':
235
241
  case 'tellask_result_msg':
236
- case 'tellask_carryover_result_msg':
242
+ case 'tellask_carryover_msg':
237
243
  availableContents.push(msg.content);
238
244
  break;
239
245
  case 'func_call_msg':
@@ -301,17 +307,37 @@ class MockGen {
301
307
  if (!role) {
302
308
  throw new Error('role is required for mock response matching');
303
309
  }
304
- const normalizedInput = input.trim().toLowerCase();
305
- // Exact match only: "role:message"
306
- const exactKey = `${role}:${normalizedInput}`;
307
- const candidates = database.lookupMap.get(exactKey);
308
- if (!candidates || candidates.length === 0) {
309
- return null;
310
- }
311
- for (let i = candidates.length - 1; i >= 0; i--) {
312
- const candidate = candidates[i];
313
- if (candidate && this.responseMatchesContext(candidate, context)) {
314
- return candidate;
310
+ const normalizedInputs = (() => {
311
+ const variants = new Set();
312
+ const trimmed = input.trim();
313
+ if (trimmed !== '') {
314
+ variants.add(trimmed.toLowerCase());
315
+ }
316
+ const hasRuntimeWrapper = RUNTIME_PROMPT_WRAPPER_PREFIXES.some((prefix) => trimmed.startsWith(prefix));
317
+ if (!hasRuntimeWrapper) {
318
+ return [...variants];
319
+ }
320
+ const separatorIndex = trimmed.indexOf('\n\n');
321
+ if (separatorIndex < 0) {
322
+ return [...variants];
323
+ }
324
+ const stripped = trimmed.slice(separatorIndex + 2).trim();
325
+ if (stripped !== '') {
326
+ variants.add(stripped.toLowerCase());
327
+ }
328
+ return [...variants];
329
+ })();
330
+ for (const normalizedInput of normalizedInputs) {
331
+ const exactKey = `${role}:${normalizedInput}`;
332
+ const candidates = database.lookupMap.get(exactKey);
333
+ if (!candidates || candidates.length === 0) {
334
+ continue;
335
+ }
336
+ for (let i = candidates.length - 1; i >= 0; i--) {
337
+ const candidate = candidates[i];
338
+ if (candidate && this.responseMatchesContext(candidate, context)) {
339
+ return candidate;
340
+ }
315
341
  }
316
342
  }
317
343
  return null;
@@ -378,11 +404,10 @@ responses:
378
404
  case 'transient_guide_msg':
379
405
  case 'prompting_msg':
380
406
  case 'saying_msg':
381
- case 'ui_only_markdown_msg':
382
407
  case 'thinking_msg':
383
408
  case 'func_result_msg':
384
409
  case 'tellask_result_msg':
385
- case 'tellask_carryover_result_msg':
410
+ case 'tellask_carryover_msg':
386
411
  return acc + msg.content.length;
387
412
  case 'func_call_msg':
388
413
  return acc + msg.name.length + msg.arguments.length;
@@ -486,11 +511,10 @@ responses:
486
511
  case 'transient_guide_msg':
487
512
  case 'prompting_msg':
488
513
  case 'saying_msg':
489
- case 'ui_only_markdown_msg':
490
514
  case 'thinking_msg':
491
515
  case 'func_result_msg':
492
516
  case 'tellask_result_msg':
493
- case 'tellask_carryover_result_msg':
517
+ case 'tellask_carryover_msg':
494
518
  return acc + msg.content.length;
495
519
  case 'func_call_msg':
496
520
  return acc + msg.name.length + msg.arguments.length;
@@ -7,6 +7,8 @@
7
7
  * - Many "OpenAI-compatible" providers implement the Chat Completions API but not the newer
8
8
  * Responses API. Dominds' `apiType: openai` uses the Responses API; this generator targets
9
9
  * chat-completions-only providers (e.g. Volcano Engine Ark `.../api/v3`).
10
+ * - Isolation principle: this wrapper may reuse the `model_params.openai.*` namespace, but it
11
+ * still owns Chat Completions semantics and must not inherit Codex-specific request meanings.
10
12
  */
11
13
  import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';
12
14
  import type { Team } from '../../team';
@@ -8,6 +8,8 @@
8
8
  * - Many "OpenAI-compatible" providers implement the Chat Completions API but not the newer
9
9
  * Responses API. Dominds' `apiType: openai` uses the Responses API; this generator targets
10
10
  * chat-completions-only providers (e.g. Volcano Engine Ark `.../api/v3`).
11
+ * - Isolation principle: this wrapper may reuse the `model_params.openai.*` namespace, but it
12
+ * still owns Chat Completions semantics and must not inherit Codex-specific request meanings.
11
13
  */
12
14
  var __importDefault = (this && this.__importDefault) || function (mod) {
13
15
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -55,15 +57,39 @@ function tryExtractChatUsage(usage) {
55
57
  totalTokens: typeof total === 'number' ? total : prompt + completion,
56
58
  };
57
59
  }
58
- function buildChatCompletionResponseFormat(openAiParams, jsonResponseEnabled) {
59
- if (!jsonResponseEnabled)
60
+ function buildChatCompletionResponseFormat(openAiParams) {
61
+ const textFormat = openAiParams.text_format;
62
+ if (textFormat === 'text' || textFormat === 'json_object') {
63
+ return { type: textFormat };
64
+ }
65
+ if (textFormat !== 'json_schema')
60
66
  return undefined;
61
- return { type: 'json_object' };
62
- }
63
- function resolveOpenAiCompatibleJsonResponseEnabled(agent, openAiParams) {
64
- if (openAiParams.json_response !== undefined)
65
- return openAiParams.json_response;
66
- return agent.model_params?.json_response === true;
67
+ const schemaName = openAiParams.text_format_json_schema_name?.trim();
68
+ const rawSchema = openAiParams.text_format_json_schema?.trim();
69
+ if (!schemaName || !rawSchema) {
70
+ throw new Error('Invalid openai text_format=json_schema: text_format_json_schema_name and text_format_json_schema are required.');
71
+ }
72
+ let parsedSchema;
73
+ try {
74
+ parsedSchema = JSON.parse(rawSchema);
75
+ }
76
+ catch (error) {
77
+ const message = error instanceof Error ? error.message : String(error);
78
+ throw new Error(`Invalid openai text_format_json_schema: ${message}`);
79
+ }
80
+ if (!isRecord(parsedSchema)) {
81
+ throw new Error('Invalid openai text_format_json_schema: expected a JSON object at the top level.');
82
+ }
83
+ return {
84
+ type: 'json_schema',
85
+ json_schema: {
86
+ name: schemaName,
87
+ schema: parsedSchema,
88
+ ...(openAiParams.text_format_json_schema_strict !== undefined
89
+ ? { strict: openAiParams.text_format_json_schema_strict }
90
+ : {}),
91
+ },
92
+ };
67
93
  }
68
94
  function buildReasoningPayloadFromText(text) {
69
95
  if (text.trim().length === 0)
@@ -123,11 +149,10 @@ function chatMessageToChatCompletionMessage(msg) {
123
149
  case 'environment_msg':
124
150
  case 'prompting_msg':
125
151
  case 'tellask_result_msg':
126
- case 'tellask_carryover_result_msg':
152
+ case 'tellask_carryover_msg':
127
153
  return { role: 'user', content: msg.content };
128
154
  case 'transient_guide_msg':
129
155
  case 'saying_msg':
130
- case 'ui_only_markdown_msg':
131
156
  case 'thinking_msg':
132
157
  return { role: 'assistant', content: msg.content };
133
158
  case 'func_call_msg':
@@ -495,32 +520,22 @@ class OpenAiCompatibleGen {
495
520
  });
496
521
  const openAiParams = agent.model_params?.openai || {};
497
522
  const maxTokens = agent.model_params?.max_tokens;
498
- const jsonResponseEnabled = resolveOpenAiCompatibleJsonResponseEnabled(agent, openAiParams);
499
523
  const modelInfo = providerConfig.models[agent.model];
500
524
  const outputLength = modelInfo?.output_length;
501
525
  const maxOutputTokens = maxTokens ?? openAiParams.max_tokens ?? outputLength ?? 1024;
502
526
  const parallelToolCalls = openAiParams.parallel_tool_calls ?? true;
503
- const responseFormat = buildChatCompletionResponseFormat(openAiParams, jsonResponseEnabled);
527
+ const responseFormat = buildChatCompletionResponseFormat(openAiParams);
504
528
  const payload = {
505
529
  model: agent.model,
506
530
  messages,
507
531
  stream: true,
508
532
  stream_options: { include_usage: true },
509
533
  ...(openAiParams.service_tier !== undefined && { service_tier: openAiParams.service_tier }),
534
+ ...(openAiParams.safety_identifier !== undefined && {
535
+ safety_identifier: openAiParams.safety_identifier,
536
+ }),
510
537
  ...(openAiParams.temperature !== undefined && { temperature: openAiParams.temperature }),
511
538
  ...(openAiParams.top_p !== undefined && { top_p: openAiParams.top_p }),
512
- ...(openAiParams.stop !== undefined && { stop: openAiParams.stop }),
513
- ...(openAiParams.presence_penalty !== undefined && {
514
- presence_penalty: openAiParams.presence_penalty,
515
- }),
516
- ...(openAiParams.frequency_penalty !== undefined && {
517
- frequency_penalty: openAiParams.frequency_penalty,
518
- }),
519
- ...(openAiParams.seed !== undefined && { seed: openAiParams.seed }),
520
- ...(openAiParams.logprobs !== undefined && { logprobs: openAiParams.logprobs }),
521
- ...(openAiParams.top_logprobs !== undefined && { top_logprobs: openAiParams.top_logprobs }),
522
- ...(openAiParams.logit_bias !== undefined && { logit_bias: openAiParams.logit_bias }),
523
- ...(openAiParams.user !== undefined && { user: openAiParams.user }),
524
539
  ...(responseFormat !== undefined && { response_format: responseFormat }),
525
540
  ...(funcTools.length > 0
526
541
  ? { tools: funcTools.map(funcToolToChatCompletionTool), tool_choice: 'auto' }
@@ -699,29 +714,19 @@ class OpenAiCompatibleGen {
699
714
  });
700
715
  const openAiParams = agent.model_params?.openai || {};
701
716
  const maxTokens = agent.model_params?.max_tokens;
702
- const jsonResponseEnabled = resolveOpenAiCompatibleJsonResponseEnabled(agent, openAiParams);
703
717
  const modelInfo = providerConfig.models[agent.model];
704
718
  const outputLength = modelInfo?.output_length;
705
719
  const maxOutputTokens = maxTokens ?? openAiParams.max_tokens ?? outputLength ?? 1024;
706
720
  const parallelToolCalls = openAiParams.parallel_tool_calls ?? true;
707
- const responseFormat = buildChatCompletionResponseFormat(openAiParams, jsonResponseEnabled);
721
+ const responseFormat = buildChatCompletionResponseFormat(openAiParams);
708
722
  const payload = {
709
723
  model: agent.model,
710
724
  messages,
725
+ ...(openAiParams.safety_identifier !== undefined && {
726
+ safety_identifier: openAiParams.safety_identifier,
727
+ }),
711
728
  ...(openAiParams.temperature !== undefined && { temperature: openAiParams.temperature }),
712
729
  ...(openAiParams.top_p !== undefined && { top_p: openAiParams.top_p }),
713
- ...(openAiParams.stop !== undefined && { stop: openAiParams.stop }),
714
- ...(openAiParams.presence_penalty !== undefined && {
715
- presence_penalty: openAiParams.presence_penalty,
716
- }),
717
- ...(openAiParams.frequency_penalty !== undefined && {
718
- frequency_penalty: openAiParams.frequency_penalty,
719
- }),
720
- ...(openAiParams.seed !== undefined && { seed: openAiParams.seed }),
721
- ...(openAiParams.logprobs !== undefined && { logprobs: openAiParams.logprobs }),
722
- ...(openAiParams.top_logprobs !== undefined && { top_logprobs: openAiParams.top_logprobs }),
723
- ...(openAiParams.logit_bias !== undefined && { logit_bias: openAiParams.logit_bias }),
724
- ...(openAiParams.user !== undefined && { user: openAiParams.user }),
725
730
  ...(responseFormat !== undefined && { response_format: responseFormat }),
726
731
  ...(funcTools.length > 0 && { tools: funcTools.map(funcToolToChatCompletionTool) }),
727
732
  tool_choice: 'auto',
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * Module: llm/gen/openai
3
3
  *
4
- * OpenAI-compatible Responses API integration implementing streaming and batch generation.
4
+ * OpenAI Responses API integration implementing streaming and batch generation.
5
+ * Isolation principle: this wrapper owns OpenAI Responses request/stream semantics and must not
6
+ * inherit Codex-specific abstractions or parameter aliases.
5
7
  */
6
8
  import type { ResponseInputItem } from 'openai/resources/responses/responses';
7
9
  import type { Team } from '../../team';