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
@@ -55,8 +55,8 @@ async function dialogNeedsReplyRecovery(dialogId) {
55
55
  const events = await persistence_1.DialogPersistence.loadCourseEvents(dialogId, currentCourse, 'running');
56
56
  const funcResultIds = new Set();
57
57
  for (const event of events) {
58
- if (event.type === 'func_result_record') {
59
- const callId = event.id.trim();
58
+ if (event.type === 'func_result_record' || event.type === 'tellask_result_record') {
59
+ const callId = event.type === 'func_result_record' ? event.id.trim() : event.callId.trim();
60
60
  if (callId !== '') {
61
61
  funcResultIds.add(callId);
62
62
  }
@@ -64,7 +64,7 @@ async function dialogNeedsReplyRecovery(dialogId) {
64
64
  }
65
65
  }
66
66
  return events.some((event) => {
67
- if (event.type !== 'tellask_special_call_record') {
67
+ if (event.type !== 'tellask_call_record') {
68
68
  return false;
69
69
  }
70
70
  if (event.name !== 'replyTellask' &&
@@ -60,7 +60,7 @@ export type TellaskReplacementNoticeFormatInput = {
60
60
  };
61
61
  export type TellaskCarryoverResultFormatInput = {
62
62
  originCourse: number;
63
- callName: 'tellask' | 'tellaskSessionless' | 'freshBootsReasoning';
63
+ callName: 'tellask' | 'tellaskSessionless' | 'askHuman' | 'freshBootsReasoning';
64
64
  responderId: string;
65
65
  mentionList?: string[];
66
66
  sessionSlug?: string;
@@ -367,7 +367,7 @@ function formatTellaskCarryoverResultContent(input) {
367
367
  '',
368
368
  (0, markdown_format_1.markdownQuote)(responseBody),
369
369
  '',
370
- 'Note: this is not a new user request or a newly initiated function call in the current course; it is the asynchronous completion of an older pending tellask.',
370
+ 'Note: this is not a new user request or a newly initiated function call in the current course; it is the canonical current-course carryover of an older pending tellask completion.',
371
371
  '',
372
372
  ];
373
373
  return lines.join('\n');
@@ -68,8 +68,8 @@ function buildSubdialogRoleHeaderCopy(args) {
68
68
  const requester = `@${args.requesterId}`;
69
69
  if (args.expectedReplyTool === undefined) {
70
70
  return args.language === 'zh'
71
- ? `${requester} 的诉请已交给你处理。只有需要回问时,才调用 \`tellaskBack\`。`
72
- : `You are handling ${requester}'s request. Call \`tellaskBack\` only when you truly need to ask back.`;
71
+ ? `${requester} 已通过诉请安排你处理下述诉请内容。只有需要回问时,才调用 \`tellaskBack\`。`
72
+ : `${requester} has assigned you to handle the request content below. Call \`tellaskBack\` only when you truly need to ask back.`;
73
73
  }
74
74
  const kindLabel = (0, tellask_labels_1.getTellaskKindLabel)({
75
75
  language: args.language,
@@ -77,8 +77,8 @@ function buildSubdialogRoleHeaderCopy(args) {
77
77
  bracketed: true,
78
78
  });
79
79
  return args.language === 'zh'
80
- ? `${requester} 的${kindLabel}已交给你处理。等你准备好回复内容后,调用 \`${args.expectedReplyTool}\` 完成回复。只有需要回问时,才调用 \`tellaskBack\`。`
81
- : `${requester}'s ${kindLabel} is now assigned to you. Once your reply content is ready, call \`${args.expectedReplyTool}\` to deliver it. Call \`tellaskBack\` only when you truly need to ask back.`;
80
+ ? `${requester} 已通过${kindLabel}安排你处理下述诉请内容。等你准备好回复内容后,调用 \`${args.expectedReplyTool}\` 完成回复。只有需要回问时,才调用 \`tellaskBack\`。`
81
+ : `${requester} has assigned you, via this ${kindLabel}, to handle the request content below. Once your reply content is ready, call \`${args.expectedReplyTool}\` to deliver it. Call \`tellaskBack\` only when you truly need to ask back.`;
82
82
  }
83
83
  function buildReplyObligationSuppressionGuideText(language) {
84
84
  if (language === 'zh') {
@@ -61,7 +61,8 @@ async function buildSetupStatusResponse() {
61
61
  error: builtin.errorText,
62
62
  };
63
63
  }
64
- const providers = await buildProviderSummaries(builtin.providers, builtin.providerKeysInOrder, {
64
+ const providerKeysInOrder = mergeProviderKeysInOrder(rtwsLlmYaml.providerKeys ?? [], builtin.providerKeysInOrder, merged.providers);
65
+ const providers = await buildProviderSummaries(merged.providers, providerKeysInOrder, {
65
66
  envLocalPath: RTWS_ENV_LOCAL_PATH,
66
67
  bashrcPath,
67
68
  zshrcPath,
@@ -265,7 +266,7 @@ async function loadBuiltinProviders() {
265
266
  if (!isRecord(parsed) || !isRecord(parsed.providers)) {
266
267
  return { kind: 'error', errorText: 'Invalid defaults.yaml: expected providers object' };
267
268
  }
268
- const providerKeysInOrder = extractProvidersKeysFromDefaultsYamlDoc(doc);
269
+ const providerKeysInOrder = extractProvidersKeysFromYamlDoc(doc);
269
270
  return {
270
271
  kind: 'ok',
271
272
  providers: parsed.providers,
@@ -415,6 +416,25 @@ function orderedProviderEntries(providers, providerKeysInOrder) {
415
416
  }
416
417
  return out;
417
418
  }
419
+ function mergeProviderKeysInOrder(preferredProviderKeysInOrder, secondaryProviderKeysInOrder, providers) {
420
+ const out = [];
421
+ const seen = new Set();
422
+ const appendKey = (providerKey) => {
423
+ if (providerKey === '' || seen.has(providerKey))
424
+ return;
425
+ if (!Object.prototype.hasOwnProperty.call(providers, providerKey))
426
+ return;
427
+ out.push(providerKey);
428
+ seen.add(providerKey);
429
+ };
430
+ for (const providerKey of preferredProviderKeysInOrder)
431
+ appendKey(providerKey);
432
+ for (const providerKey of secondaryProviderKeysInOrder)
433
+ appendKey(providerKey);
434
+ for (const providerKey of Object.keys(providers))
435
+ appendKey(providerKey);
436
+ return out;
437
+ }
418
438
  function extractYamlMapStringKeys(value) {
419
439
  if (!yaml_1.default.isMap(value))
420
440
  return [];
@@ -432,7 +452,7 @@ function extractYamlMapStringKeys(value) {
432
452
  }
433
453
  return out;
434
454
  }
435
- function extractProvidersKeysFromDefaultsYamlDoc(doc) {
455
+ function extractProvidersKeysFromYamlDoc(doc) {
436
456
  const root = doc.contents;
437
457
  if (!yaml_1.default.isMap(root))
438
458
  return [];
@@ -494,7 +514,8 @@ async function readRtwsLlmYamlProviderKeys() {
494
514
  return { path: RTWS_LLM_YAML_PATH, exists: false };
495
515
  try {
496
516
  const raw = await promises_1.default.readFile(RTWS_LLM_YAML_PATH, 'utf-8');
497
- const parsed = yaml_1.default.parse(raw);
517
+ const doc = yaml_1.default.parseDocument(raw);
518
+ const parsed = doc.toJS();
498
519
  if (!isRecord(parsed)) {
499
520
  return {
500
521
  path: RTWS_LLM_YAML_PATH,
@@ -513,7 +534,7 @@ async function readRtwsLlmYamlProviderKeys() {
513
534
  return {
514
535
  path: RTWS_LLM_YAML_PATH,
515
536
  exists: true,
516
- providerKeys: Object.keys(providersUnknown).sort(),
537
+ providerKeys: extractProvidersKeysFromYamlDoc(doc),
517
538
  };
518
539
  }
519
540
  catch (error) {
@@ -1,4 +1,5 @@
1
1
  import type { LanguageCode } from '@longrun-ai/kernel/types/language';
2
+ import '../tools/builtins';
2
3
  type SnippetTemplateSource = 'builtin' | 'rtws';
3
4
  type SnippetTemplate = {
4
5
  id: string;
@@ -46,6 +46,7 @@ const promises_1 = __importDefault(require("fs/promises"));
46
46
  const path_1 = __importDefault(require("path"));
47
47
  const yaml_1 = __importDefault(require("yaml"));
48
48
  const log_1 = require("../log");
49
+ require("../tools/builtins");
49
50
  const log = (0, log_1.createLogger)('snippets-routes');
50
51
  function isRecord(value) {
51
52
  return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -643,14 +644,7 @@ async function handleToolsetManual(rawBody) {
643
644
  if (!req)
644
645
  return { success: false, error: 'Invalid request body' };
645
646
  try {
646
- const { getTool } = await Promise.resolve().then(() => __importStar(require('../tools/registry')));
647
- const tool = getTool('man');
648
- if (!tool || tool.type !== 'func') {
649
- return { success: false, error: 'man tool not available' };
650
- }
651
- const fakeDlg = {
652
- getLastUserLanguageCode: () => req.uiLanguage,
653
- };
647
+ const { renderToolsetManualContent } = await Promise.resolve().then(() => __importStar(require('../tools/toolset-manual')));
654
648
  const { Team } = await Promise.resolve().then(() => __importStar(require('../team')));
655
649
  const caller = new Team.Member({
656
650
  id: 'webui',
@@ -659,10 +653,27 @@ async function handleToolsetManual(rawBody) {
659
653
  write_dirs: ['.minds/**'],
660
654
  toolsets: [req.toolsetId],
661
655
  });
662
- const markdown = await tool.call(fakeDlg, caller, {
656
+ const dynamicToolsetNames = await Team.listDynamicToolsetNamesForMember({
657
+ member: caller,
658
+ });
659
+ const declaredMcpToolsets = await Team.readMcpDeclaredToolsets();
660
+ const declaredMcpToolsetNames = declaredMcpToolsets.kind === 'loaded' ? declaredMcpToolsets.declaredServerIds : undefined;
661
+ const invalidMcpToolsetNames = declaredMcpToolsets.kind === 'loaded' ? declaredMcpToolsets.invalidServerIds : undefined;
662
+ const availableToolNames = new Set(caller
663
+ .listTools({
664
+ onMissingToolset: 'silent',
665
+ onMissingTool: 'silent',
666
+ dynamicToolsetNames,
667
+ declaredMcpToolsetNames,
668
+ invalidMcpToolsetNames,
669
+ })
670
+ .map((tool) => tool.name));
671
+ const markdown = await renderToolsetManualContent({
663
672
  toolsetId: req.toolsetId,
673
+ language: req.uiLanguage,
664
674
  ...(req.topic ? { topic: req.topic } : {}),
665
675
  ...(req.topics ? { topics: req.topics } : {}),
676
+ availableToolNames,
666
677
  });
667
678
  return { success: true, markdown: String(markdown) };
668
679
  }
@@ -11,9 +11,11 @@ exports.cleanupEventSystems = cleanupEventSystems;
11
11
  const diligence_1 = require("@longrun-ai/kernel/diligence");
12
12
  const evt_1 = require("@longrun-ai/kernel/evt");
13
13
  const language_1 = require("@longrun-ai/kernel/types/language");
14
+ const storage_1 = require("@longrun-ai/kernel/types/storage");
14
15
  const time_1 = require("@longrun-ai/kernel/utils/time");
15
16
  const ws_1 = require("ws");
16
17
  const runtime_1 = require("../apps/runtime");
18
+ const global_dialog_event_broadcaster_1 = require("../bootstrap/global-dialog-event-broadcaster");
17
19
  const dialog_1 = require("../dialog");
18
20
  const dialog_display_state_1 = require("../dialog-display-state");
19
21
  const dialog_global_registry_1 = require("../dialog-global-registry");
@@ -27,6 +29,7 @@ const priming_1 = require("../priming");
27
29
  const problems_1 = require("../problems");
28
30
  const reply_special_1 = require("../recovery/reply-special");
29
31
  const driver_messages_1 = require("../runtime/driver-messages");
32
+ const inter_dialog_format_1 = require("../runtime/inter-dialog-format");
30
33
  const work_language_1 = require("../runtime/work-language");
31
34
  const team_1 = require("../team");
32
35
  const team_config_updates_1 = require("../team-config-updates");
@@ -261,7 +264,7 @@ async function handleWebSocketMessage(ws, packet) {
261
264
  await handleUserMsg2Dlg(ws, packet);
262
265
  break;
263
266
  case 'drive_dialog_by_user_answer':
264
- await handleUserAnswer2Q4H(ws, packet);
267
+ await handleReceiveHumanReply(ws, packet);
265
268
  break;
266
269
  case 'interrupt_dialog':
267
270
  await handleInterruptDialog(ws, packet);
@@ -861,7 +864,6 @@ async function handleDisplayDialog(ws, packet) {
861
864
  tellaskContent: q.tellaskContent,
862
865
  askedAt: q.askedAt,
863
866
  callId: q.callId,
864
- remainingCallIds: q.remainingCallIds,
865
867
  callSiteRef: q.callSiteRef,
866
868
  })),
867
869
  };
@@ -903,7 +905,6 @@ async function handleGetQ4HState(ws, _packet) {
903
905
  tellaskContent: q.tellaskContent,
904
906
  askedAt: q.askedAt,
905
907
  callId: q.callId,
906
- remainingCallIds: q.remainingCallIds,
907
908
  callSiteRef: q.callSiteRef,
908
909
  }));
909
910
  // Send single response packet with all questions (not PubChan events)
@@ -1213,10 +1214,17 @@ async function handleResumeAll(ws, packet) {
1213
1214
  emitRunControlRefresh('resume_all');
1214
1215
  }
1215
1216
  /**
1216
- * Handle user answer to a Q4H (Questions for Human) question
1217
- * Validates questionId, clears q4h.yaml entry, and resumes dialog with user's answer
1217
+ * Receive a human reply for a Q4H question.
1218
+ * Validates questionId, clears q4h.yaml entry, records askHuman result/carryover,
1219
+ * and optionally queues a continuation drive input carrying the answered callId.
1220
+ *
1221
+ * Important: the human answer itself is canonicalized as askHuman tellask result/carryover first.
1222
+ * For cross-course Q4H answers, the carryover is the canonical latest-course context; it is not a
1223
+ * tool-result pair for the older-course askHuman call.
1224
+ * The follow-up drive input here is only control-flow glue for the resumed round, not a separate
1225
+ * persisted "user prompt" business fact.
1218
1226
  */
1219
- async function handleUserAnswer2Q4H(ws, packet) {
1227
+ async function handleReceiveHumanReply(ws, packet) {
1220
1228
  try {
1221
1229
  const { dialog: dialogIdent, content, msgId, questionId, continuationType } = packet;
1222
1230
  const userLanguageCode = resolveUserLanguageCode(ws, packet.userLanguageCode);
@@ -1235,7 +1243,7 @@ async function handleUserAnswer2Q4H(ws, packet) {
1235
1243
  if (typeof dialogId !== 'string' || typeof rootDialogId !== 'string') {
1236
1244
  ws.send(JSON.stringify({
1237
1245
  type: 'error',
1238
- message: 'Invalid dialog identifiers for drive_dialog_by_user_answer: selfId/rootId must be strings',
1246
+ message: 'Invalid dialog identifiers for receiveHumanReply: selfId/rootId must be strings',
1239
1247
  }));
1240
1248
  return;
1241
1249
  }
@@ -1282,12 +1290,30 @@ async function handleUserAnswer2Q4H(ws, packet) {
1282
1290
  if (!removedQuestion) {
1283
1291
  throw new Error(`Q4H remove invariant violation: found=true but removedQuestion missing (rootId=${dialog.id.rootId} selfId=${dialog.id.selfId} questionId=${questionId})`);
1284
1292
  }
1285
- const askHumanCallIds = Array.from(new Set([removedQuestion.callId, ...(removedQuestion.remainingCallIds ?? [])]
1286
- .map((value) => (typeof value === 'string' ? value.trim() : ''))
1287
- .filter((value) => value !== '')));
1288
- for (const callId of askHumanCallIds) {
1289
- await dialog.receiveTellaskCallResult('human', 'askHuman', undefined, removedQuestion.tellaskContent, effectivePrompt.content, 'completed', callId);
1290
- }
1293
+ const askHumanCallId = removedQuestion.callId.trim();
1294
+ if (askHumanCallId === '') {
1295
+ throw new Error(`Q4H remove invariant violation: missing callId on answered question ` +
1296
+ `(rootId=${dialog.id.rootId} selfId=${dialog.id.selfId} questionId=${questionId})`);
1297
+ }
1298
+ const askHumanOriginCourse = removedQuestion.callSiteRef.course;
1299
+ const askHumanCarryoverContent = (0, inter_dialog_format_1.formatTellaskCarryoverResultContent)({
1300
+ originCourse: askHumanOriginCourse,
1301
+ callName: 'askHuman',
1302
+ responderId: 'human',
1303
+ tellaskContent: removedQuestion.tellaskContent,
1304
+ responseBody: effectivePrompt.content,
1305
+ status: 'completed',
1306
+ language: (0, work_language_1.getWorkLanguage)(),
1307
+ });
1308
+ const askHumanResultMirror = await dialog.receiveTellaskResponse('human', 'askHuman', undefined, removedQuestion.tellaskContent, 'completed', undefined, {
1309
+ response: effectivePrompt.content,
1310
+ agentId: 'human',
1311
+ callId: askHumanCallId,
1312
+ originMemberId: dialog.agentId,
1313
+ originCourse: (0, storage_1.toCallingCourseNumber)(askHumanOriginCourse),
1314
+ carryoverContent: askHumanCarryoverContent,
1315
+ });
1316
+ await dialog.addChatMessages(askHumanResultMirror);
1291
1317
  // Emit q4h_answered event for answered question
1292
1318
  const answeredEvent = {
1293
1319
  type: 'q4h_answered',
@@ -1297,14 +1323,17 @@ async function handleUserAnswer2Q4H(ws, packet) {
1297
1323
  (0, evt_registry_1.postDialogEvent)(dialog, answeredEvent);
1298
1324
  const hasPendingSubdialogs = await dialog.hasPendingSubdialogs();
1299
1325
  if (hasPendingSubdialogs) {
1326
+ // This queued item is only the post-answer continuation input that resumes the suspended
1327
+ // round after subdialogs settle. The human answer fact has already been persisted above as
1328
+ // askHuman tellask result/carryover and must not be reinterpreted as a new user prompt.
1300
1329
  dialog.queueDeferredQ4HAnswerPrompt({
1301
1330
  prompt: effectivePrompt.content,
1302
1331
  msgId: effectivePrompt.msgId,
1303
1332
  grammar: effectivePrompt.grammar,
1304
1333
  userLanguageCode: effectivePrompt.userLanguageCode,
1305
- q4hAnswerCallIds: askHumanCallIds,
1334
+ q4hAnswerCallId: askHumanCallId,
1306
1335
  });
1307
- log.debug('Deferred Q4H answer until pending subdialogs resolve', undefined, {
1336
+ log.debug('Deferred post-Q4H continuation input until pending subdialogs resolve', undefined, {
1308
1337
  rootId: dialog.id.rootId,
1309
1338
  selfId: dialog.id.selfId,
1310
1339
  questionId,
@@ -1312,13 +1341,14 @@ async function handleUserAnswer2Q4H(ws, packet) {
1312
1341
  });
1313
1342
  return;
1314
1343
  }
1315
- // Resume the dialog with the user's answer.
1344
+ // Resume the dialog after the answer has been materialized as askHuman tellask result/carryover.
1345
+ // The continuation input carries correlation only; it does not persist another user prompt fact.
1316
1346
  await (0, kernel_driver_1.driveDialogStream)(dialog, {
1317
1347
  content: effectivePrompt.content,
1318
1348
  msgId: effectivePrompt.msgId,
1319
1349
  grammar: effectivePrompt.grammar,
1320
1350
  userLanguageCode: effectivePrompt.userLanguageCode,
1321
- q4hAnswerCallIds: askHumanCallIds,
1351
+ q4hAnswerCallId: askHumanCallId,
1322
1352
  origin: 'user',
1323
1353
  }, true, {
1324
1354
  source: 'ws_user_answer',
@@ -1326,10 +1356,10 @@ async function handleUserAnswer2Q4H(ws, packet) {
1326
1356
  });
1327
1357
  }
1328
1358
  catch (error) {
1329
- log.error('Error processing Q4H user answer:', error);
1359
+ log.error('Error processing receiveHumanReply:', error);
1330
1360
  ws.send(JSON.stringify({
1331
1361
  type: 'error',
1332
- message: `Failed to process Q4H answer: ${error instanceof Error ? error.message : 'Unknown error'}`,
1362
+ message: `Failed to process human reply: ${error instanceof Error ? error.message : 'Unknown error'}`,
1333
1363
  }));
1334
1364
  }
1335
1365
  }
@@ -1351,13 +1381,16 @@ function setupWebSocketServer(httpServer, clients, auth, serverWorkLanguage) {
1351
1381
  // - Q4H updates are rtws-global state in WebUI
1352
1382
  // - subdialog creation must refresh hierarchy/list even when current subscription is elsewhere
1353
1383
  // - dlg_touched_evt keeps dialog list timestamps/reordering in sync across clients
1354
- (0, evt_registry_1.setGlobalDialogEventBroadcaster)((evt) => {
1355
- const data = JSON.stringify(evt);
1356
- for (const ws of clients) {
1357
- if (ws.readyState === 1) {
1358
- ws.send(data);
1384
+ (0, global_dialog_event_broadcaster_1.installGlobalDialogEventBroadcaster)({
1385
+ label: 'websocket-server',
1386
+ publish: (evt) => {
1387
+ const data = JSON.stringify(evt);
1388
+ for (const ws of clients) {
1389
+ if (ws.readyState === 1) {
1390
+ ws.send(data);
1391
+ }
1359
1392
  }
1360
- }
1393
+ },
1361
1394
  });
1362
1395
  // Broadcast dialog index changes (create/move/delete) so other tabs refresh their lists.
1363
1396
  // This ensures multi-tab/multi-browser updates stay consistent without polling.
@@ -15,20 +15,24 @@ function appendDistinctPerspectiveFbrBody(input) {
15
15
  if (input.language === 'zh') {
16
16
  return [
17
17
  iteration === 1
18
- ? `【第 ${iteration}/${total} 轮 FBR】请开启首轮独立推理角度。`
19
- : `【第 ${iteration}/${total} 轮 FBR】请切换到与前 ${iteration - 1} 轮不同的推理角度。`,
18
+ ? `【第 ${iteration}/${total} 轮 FBR 发散】请开启首轮独立推理角度。`
19
+ : `【第 ${iteration}/${total} 轮 FBR 发散】请切换到与前 ${iteration - 1} 轮不同的推理角度。`,
20
+ '这一阶段要对反直觉、离谱、少数派、最后可能被淘汰的想法保持开放,把它们先当作待检验候选,而不是急着压成共识。',
20
21
  isFinalRound
21
- ? '最后一轮也不能复述前文结论,必须补充新的切入点与新增证据。'
22
- : '要求:不复述上一轮已结论文本,补充本轮独立切入点与未覆盖证据。',
22
+ ? '最后一轮发散也不能复述前文结论;必须继续补充新的切入点、额外证据或新的解释路径。'
23
+ : '要求:不复述前几轮已结论文本;补充本轮独立切入点、未覆盖证据或新的解释路径。',
24
+ '此时不要急于收敛或下最终结论。',
23
25
  ].join('\n');
24
26
  }
25
27
  return [
26
28
  iteration === 1
27
- ? `[FBR round ${iteration}/${total}] start with a first independent reasoning angle.`
28
- : `[FBR round ${iteration}/${total}] switch to an angle different from the previous ${iteration - 1} rounds.`,
29
+ ? `[FBR divergence round ${iteration}/${total}] start with a first independent reasoning angle.`
30
+ : `[FBR divergence round ${iteration}/${total}] switch to an angle different from the previous ${iteration - 1} rounds.`,
31
+ 'In this phase, stay open to counterintuitive, wild, minority, or eventually-discarded ideas; treat them as candidates to test instead of forcing early consensus.',
29
32
  isFinalRound
30
- ? 'The final round must also avoid repeating prior-round conclusions and provide new angles and additional evidence.'
31
- : 'Requirement: do not repeat prior-round conclusion text; add a distinct independent approach and missing evidence.',
33
+ ? 'The final divergence round must still avoid repeating prior-round conclusions and add new angles, extra evidence, or alternative explanations.'
34
+ : 'Requirement: do not repeat prior-round conclusion text; add a distinct approach, missing evidence, or a genuinely new explanatory path.',
35
+ 'Do not converge or produce a final conclusion yet.',
32
36
  ].join('\n');
33
37
  })();
34
38
  if (iteration <= 1) {
@@ -111,9 +111,10 @@ function formatAssignmentFromSupdialog(input) {
111
111
  '# 扪心自问(FBR)自诉请',
112
112
  '',
113
113
  '- 约束:这是一个扪心自问(self tellask)支线对话;请独立推理与总结。',
114
- '- 系统规则:本支线对话为函数禁用模式,不允许任何函数调用(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`)。',
114
+ '- 系统规则:当前仍处于 FBR 的无工具阶段;这一阶段不允许任何函数调用。',
115
+ '- 后续只有在完成既定的发散轮与收敛轮之后,运行时才会开放两个“结论函数”供你正式收口。',
115
116
  '- 协议:回贴标记由 Dominds 运行时自动注入,禁止手写。',
116
- '- 系统提示:不要受诉请正文中的定调、分析方向或维度清单约束;请聚焦总体目标,自由发挥并开辟新的分析切入角度。',
117
+ '- 系统提示:不要受诉请正文中的定调、分析方向或维度清单约束;请聚焦总体目标,自由发挥并开辟新的分析切入角度,对离谱想法保持开放,但不要过早收敛。',
117
118
  '',
118
119
  '---',
119
120
  ].join('\n')
@@ -121,9 +122,10 @@ function formatAssignmentFromSupdialog(input) {
121
122
  '# Fresh Boots Reasoning (FBR) request',
122
123
  '',
123
124
  '- Constraint: this is a self-tellask FBR sideline dialog; reason independently and produce conclusions.',
124
- '- System rule: this sideline runs with function-calls disabled; do not emit any function call (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`).',
125
+ '- System rule: this FBR stage is still tool-less; do not emit any function call in this stage.',
126
+ '- Only after the planned divergence and convergence rounds are complete will runtime expose the two conclusion functions for formal closure.',
125
127
  '- Protocol: reply markers are auto-injected by Dominds runtime; do not hand-write markers.',
126
- '- System prompt: do not be constrained by framing, analysis directions, or dimension checklists embedded in the tellask body; stay focused on the overall objective and open new analytical entry points freely.',
128
+ '- System prompt: do not be constrained by framing, analysis directions, or dimension checklists embedded in the tellask body; stay focused on the overall objective, open new analytical entry points freely, stay open to wild ideas, and do not converge too early.',
127
129
  '',
128
130
  '---',
129
131
  ].join('\n');
package/dist/team.d.ts CHANGED
@@ -26,19 +26,11 @@ export declare namespace Team {
26
26
  };
27
27
  export function readMcpDeclaredToolsets(): Promise<McpDeclaredToolsets>;
28
28
  export function listExplicitToolsets(member: Team.Member): string[];
29
- type OpenAiStyleModelParams = {
29
+ type CodexModelParams = {
30
30
  temperature?: number;
31
31
  max_tokens?: number;
32
32
  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority';
33
33
  top_p?: number;
34
- frequency_penalty?: number;
35
- presence_penalty?: number;
36
- seed?: number;
37
- logprobs?: boolean;
38
- top_logprobs?: number;
39
- stop?: string | string[];
40
- logit_bias?: Record<string, number>;
41
- user?: string;
42
34
  reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
43
35
  reasoning_summary?: 'auto' | 'concise' | 'detailed' | 'none';
44
36
  verbosity?: 'low' | 'medium' | 'high';
@@ -46,11 +38,30 @@ export declare namespace Team {
46
38
  web_search?: 'disabled' | 'cached' | 'live';
47
39
  json_response?: boolean;
48
40
  };
41
+ type OpenAiModelParams = {
42
+ temperature?: number;
43
+ max_tokens?: number;
44
+ service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority';
45
+ top_p?: number;
46
+ reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
47
+ reasoning_summary?: 'auto' | 'concise' | 'detailed' | 'none';
48
+ verbosity?: 'low' | 'medium' | 'high';
49
+ parallel_tool_calls?: boolean;
50
+ safety_identifier?: string;
51
+ text_format?: 'text' | 'json_object' | 'json_schema';
52
+ text_format_json_schema_name?: string;
53
+ text_format_json_schema?: string;
54
+ text_format_json_schema_strict?: boolean;
55
+ web_search_tool?: boolean;
56
+ web_search_context_size?: 'low' | 'medium' | 'high';
57
+ web_search_allowed_domains?: string[];
58
+ web_search_include_sources?: boolean;
59
+ };
49
60
  export interface ModelParams {
50
61
  max_tokens?: number;
51
62
  json_response?: boolean;
52
- codex?: OpenAiStyleModelParams;
53
- openai?: OpenAiStyleModelParams;
63
+ codex?: CodexModelParams;
64
+ openai?: OpenAiModelParams;
54
65
  anthropic?: {
55
66
  temperature?: number;
56
67
  max_tokens?: number;
@@ -169,8 +180,8 @@ export declare namespace Team {
169
180
  export const TEAM_YAML_MEMBER_KEYS: readonly ["name", "from", "use", "import", "provider", "model", "gofor", "nogo", "toolsets", "tools", "model_params", "fbr-effort", "fbr_effort", "fbr_model_params", "diligence-push-max", "diligence_push_max", "read_dirs", "write_dirs", "no_read_dirs", "no_write_dirs", "read_file_ext_names", "write_file_ext_names", "no_read_file_ext_names", "no_write_file_ext_names", "icon", "streaming", "hidden"];
170
181
  export const TEAM_YAML_MODEL_PARAMS_ROOT_KEYS: readonly ["max_tokens", "json_response", "general", "codex", "openai", "anthropic"];
171
182
  export const TEAM_YAML_MODEL_PARAMS_GENERAL_KEYS: readonly ["max_tokens"];
172
- export const TEAM_YAML_MODEL_PARAMS_OPENAI_KEYS: readonly ["temperature", "max_tokens", "service_tier", "top_p", "frequency_penalty", "presence_penalty", "seed", "logprobs", "top_logprobs", "stop", "logit_bias", "user", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "web_search", "json_response"];
173
- export const TEAM_YAML_MODEL_PARAMS_CODEX_KEYS: readonly ["temperature", "max_tokens", "service_tier", "top_p", "frequency_penalty", "presence_penalty", "seed", "logprobs", "top_logprobs", "stop", "logit_bias", "user", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "web_search", "json_response"];
183
+ export const TEAM_YAML_MODEL_PARAMS_OPENAI_KEYS: readonly ["temperature", "max_tokens", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "safety_identifier", "text_format", "text_format_json_schema_name", "text_format_json_schema", "text_format_json_schema_strict", "web_search_tool", "web_search_context_size", "web_search_allowed_domains", "web_search_include_sources"];
184
+ export const TEAM_YAML_MODEL_PARAMS_CODEX_KEYS: readonly ["temperature", "max_tokens", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "web_search", "json_response"];
174
185
  export const TEAM_YAML_MODEL_PARAMS_ANTHROPIC_KEYS: readonly ["temperature", "max_tokens", "top_p", "top_k", "stop_sequences", "reasoning_split", "json_response"];
175
186
  export {};
176
187
  }