dominds 1.26.2 → 1.26.4

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 (140) hide show
  1. package/README.md +2 -0
  2. package/README.zh.md +2 -0
  3. package/dist/cli.js +10 -8
  4. package/dist/docs/cli-usage.md +1 -1
  5. package/dist/docs/cli-usage.zh.md +1 -1
  6. package/dist/llm/gen/mock.js +11 -3
  7. package/dist/llm/kernel-driver/context-health.d.ts +1 -0
  8. package/dist/llm/kernel-driver/context-health.js +7 -0
  9. package/dist/llm/kernel-driver/drive.js +25 -30
  10. package/dist/llm/kernel-driver/idle-reminder-wake.js +6 -2
  11. package/dist/llm/kernel-driver/reminder-context.d.ts +26 -0
  12. package/dist/llm/kernel-driver/reminder-context.js +82 -0
  13. package/dist/llm/kernel-driver/reply-guidance.js +10 -4
  14. package/dist/llm/kernel-driver/tellask-special.js +50 -35
  15. package/dist/mcp/supervisor.js +2 -2
  16. package/dist/minds/system-prompt-parts.js +30 -30
  17. package/dist/minds/system-prompt.js +63 -40
  18. package/dist/persistence.js +15 -1
  19. package/dist/runtime/driver-messages.d.ts +38 -7
  20. package/dist/runtime/driver-messages.js +320 -119
  21. package/dist/runtime/inter-dialog-format.js +24 -12
  22. package/dist/runtime/reply-prompt-copy.d.ts +8 -8
  23. package/dist/runtime/reply-prompt-copy.js +69 -38
  24. package/dist/server/api-routes.js +7 -2
  25. package/dist/server/certificates.js +65 -25
  26. package/dist/server/dominds-self-update.d.ts +1 -0
  27. package/dist/server/dominds-self-update.js +113 -56
  28. package/dist/supervisor-protocol.d.ts +2 -3
  29. package/dist/tools/mcp.js +12 -12
  30. package/dist/tools/prompts/control/en/index.md +2 -2
  31. package/dist/tools/prompts/control/en/principles.md +12 -12
  32. package/dist/tools/prompts/control/en/scenarios.md +5 -5
  33. package/dist/tools/prompts/control/en/tools.md +10 -10
  34. package/dist/tools/prompts/control/zh/index.md +3 -3
  35. package/dist/tools/prompts/control/zh/principles.md +12 -12
  36. package/dist/tools/prompts/control/zh/scenarios.md +7 -7
  37. package/dist/tools/prompts/control/zh/tools.md +11 -11
  38. package/dist/tools/prompts/mcp_admin/en/principles.md +4 -4
  39. package/dist/tools/prompts/mcp_admin/en/scenarios.md +1 -1
  40. package/dist/tools/prompts/mcp_admin/en/tools.md +3 -3
  41. package/dist/tools/prompts/mcp_admin/zh/principles.md +4 -4
  42. package/dist/tools/prompts/mcp_admin/zh/scenarios.md +1 -1
  43. package/dist/tools/prompts/mcp_admin/zh/tools.md +3 -3
  44. package/dist/tools/team_mgmt-mcp-manual.js +12 -12
  45. package/package.json +2 -1
  46. package/webapp/dist/assets/{_basePickBy-DUivPKf7.js → _basePickBy-mFK6EVZU.js} +3 -3
  47. package/webapp/dist/assets/{_basePickBy-DUivPKf7.js.map → _basePickBy-mFK6EVZU.js.map} +1 -1
  48. package/webapp/dist/assets/{_baseUniq-hcs024vD.js → _baseUniq-C8zyOqn7.js} +2 -2
  49. package/webapp/dist/assets/{_baseUniq-hcs024vD.js.map → _baseUniq-C8zyOqn7.js.map} +1 -1
  50. package/webapp/dist/assets/{arc-Dr6-FXp5.js → arc-Vdl3uhV8.js} +2 -2
  51. package/webapp/dist/assets/{arc-Dr6-FXp5.js.map → arc-Vdl3uhV8.js.map} +1 -1
  52. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js} +7 -7
  53. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js.map → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js.map} +1 -1
  54. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js → blockDiagram-WCTKOSBZ-Bozcnodw.js} +7 -7
  55. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js.map → blockDiagram-WCTKOSBZ-Bozcnodw.js.map} +1 -1
  56. package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js → c4Diagram-IC4MRINW-CLkxlY6N.js} +3 -3
  57. package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js.map → c4Diagram-IC4MRINW-CLkxlY6N.js.map} +1 -1
  58. package/webapp/dist/assets/{channel-CWWjsXtU.js → channel-CqGyLCM_.js} +2 -2
  59. package/webapp/dist/assets/{channel-CWWjsXtU.js.map → channel-CqGyLCM_.js.map} +1 -1
  60. package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js → chunk-4BX2VUAB-BNsJpMh4.js} +2 -2
  61. package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js.map → chunk-4BX2VUAB-BNsJpMh4.js.map} +1 -1
  62. package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js → chunk-55IACEB6-B59p6vzX.js} +2 -2
  63. package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js.map → chunk-55IACEB6-B59p6vzX.js.map} +1 -1
  64. package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js → chunk-FMBD7UC4-CB17a_Ki.js} +2 -2
  65. package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js.map → chunk-FMBD7UC4-CB17a_Ki.js.map} +1 -1
  66. package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js → chunk-JSJVCQXG-DVnVflN-.js} +2 -2
  67. package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js.map → chunk-JSJVCQXG-DVnVflN-.js.map} +1 -1
  68. package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js → chunk-KX2RTZJC-D9_5LvIO.js} +2 -2
  69. package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js.map → chunk-KX2RTZJC-D9_5LvIO.js.map} +1 -1
  70. package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js → chunk-NQ4KR5QH-CZWI2G2c.js} +4 -4
  71. package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js.map → chunk-NQ4KR5QH-CZWI2G2c.js.map} +1 -1
  72. package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js → chunk-QZHKN3VN-WCLg8cNX.js} +2 -2
  73. package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js.map → chunk-QZHKN3VN-WCLg8cNX.js.map} +1 -1
  74. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js → chunk-WL4C6EOR-BFkz_P__.js} +6 -6
  75. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js.map → chunk-WL4C6EOR-BFkz_P__.js.map} +1 -1
  76. package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js → classDiagram-VBA2DB6C-DWQ1VnaI.js} +7 -7
  77. package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js.map → classDiagram-VBA2DB6C-DWQ1VnaI.js.map} +1 -1
  78. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js} +7 -7
  79. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js.map → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js.map} +1 -1
  80. package/webapp/dist/assets/{clone-Drtik9pk.js → clone-D3QHqx6z.js} +2 -2
  81. package/webapp/dist/assets/{clone-Drtik9pk.js.map → clone-D3QHqx6z.js.map} +1 -1
  82. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js → cose-bilkent-S5V4N54A-D2dZHRG3.js} +2 -2
  83. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js.map → cose-bilkent-S5V4N54A-D2dZHRG3.js.map} +1 -1
  84. package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js → dagre-KLK3FWXG-Cwz7pFDo.js} +7 -7
  85. package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js.map → dagre-KLK3FWXG-Cwz7pFDo.js.map} +1 -1
  86. package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js → diagram-E7M64L7V-C6z0VVoW.js} +8 -8
  87. package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js.map → diagram-E7M64L7V-C6z0VVoW.js.map} +1 -1
  88. package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js → diagram-IFDJBPK2-CZ1KR1hO.js} +7 -7
  89. package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js.map → diagram-IFDJBPK2-CZ1KR1hO.js.map} +1 -1
  90. package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js → diagram-P4PSJMXO-ChwZDZYa.js} +7 -7
  91. package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js.map → diagram-P4PSJMXO-ChwZDZYa.js.map} +1 -1
  92. package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js → erDiagram-INFDFZHY-DCnHsk_Z.js} +5 -5
  93. package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js.map → erDiagram-INFDFZHY-DCnHsk_Z.js.map} +1 -1
  94. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js → flowDiagram-PKNHOUZH-C5Hi85ST.js} +7 -7
  95. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js.map → flowDiagram-PKNHOUZH-C5Hi85ST.js.map} +1 -1
  96. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js → ganttDiagram-A5KZAMGK-vT15RP6A.js} +3 -3
  97. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js.map → ganttDiagram-A5KZAMGK-vT15RP6A.js.map} +1 -1
  98. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js} +8 -8
  99. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js.map → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js.map} +1 -1
  100. package/webapp/dist/assets/{graph-CvhwAY6w.js → graph-CqFTrHii.js} +3 -3
  101. package/webapp/dist/assets/{graph-CvhwAY6w.js.map → graph-CqFTrHii.js.map} +1 -1
  102. package/webapp/dist/assets/{index-BOO_zFrI.js → index-C_PzQ5W5.js} +600 -400
  103. package/webapp/dist/assets/{index-BOO_zFrI.js.map → index-C_PzQ5W5.js.map} +1 -1
  104. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js → infoDiagram-LFFYTUFH-DlyOw8IT.js} +6 -6
  105. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js.map → infoDiagram-LFFYTUFH-DlyOw8IT.js.map} +1 -1
  106. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js → ishikawaDiagram-PHBUUO56-iZCVn19K.js} +2 -2
  107. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js.map → ishikawaDiagram-PHBUUO56-iZCVn19K.js.map} +1 -1
  108. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js → journeyDiagram-4ABVD52K-B95gnBKj.js} +5 -5
  109. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js.map → journeyDiagram-4ABVD52K-B95gnBKj.js.map} +1 -1
  110. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js → kanban-definition-K7BYSVSG-DQ2gfPUK.js} +3 -3
  111. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js.map → kanban-definition-K7BYSVSG-DQ2gfPUK.js.map} +1 -1
  112. package/webapp/dist/assets/{layout-BttZf7fQ.js → layout-VOBFudHV.js} +5 -5
  113. package/webapp/dist/assets/{layout-BttZf7fQ.js.map → layout-VOBFudHV.js.map} +1 -1
  114. package/webapp/dist/assets/{linear-B75vD4Ho.js → linear-BtBp93s2.js} +2 -2
  115. package/webapp/dist/assets/{linear-B75vD4Ho.js.map → linear-BtBp93s2.js.map} +1 -1
  116. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js → mindmap-definition-YRQLILUH-m2w1nBbY.js} +4 -4
  117. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js.map → mindmap-definition-YRQLILUH-m2w1nBbY.js.map} +1 -1
  118. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js → pieDiagram-SKSYHLDU-ByoyS2as.js} +8 -8
  119. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js.map → pieDiagram-SKSYHLDU-ByoyS2as.js.map} +1 -1
  120. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js → quadrantDiagram-337W2JSQ-BnKSsLfA.js} +3 -3
  121. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js.map → quadrantDiagram-337W2JSQ-BnKSsLfA.js.map} +1 -1
  122. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js → requirementDiagram-Z7DCOOCP-jU2C7qJN.js} +4 -4
  123. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js.map → requirementDiagram-Z7DCOOCP-jU2C7qJN.js.map} +1 -1
  124. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js → sankeyDiagram-WA2Y5GQK-R175tX8b.js} +2 -2
  125. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js.map → sankeyDiagram-WA2Y5GQK-R175tX8b.js.map} +1 -1
  126. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js} +4 -4
  127. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js.map → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js.map} +1 -1
  128. package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js → stateDiagram-RAJIS63D-DZSAyRfJ.js} +9 -9
  129. package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js.map → stateDiagram-RAJIS63D-DZSAyRfJ.js.map} +1 -1
  130. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js → stateDiagram-v2-FVOUBMTO-x29lKJpl.js} +5 -5
  131. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js.map → stateDiagram-v2-FVOUBMTO-x29lKJpl.js.map} +1 -1
  132. package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js → timeline-definition-YZTLITO2-BQR2qEXt.js} +3 -3
  133. package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js.map → timeline-definition-YZTLITO2-BQR2qEXt.js.map} +1 -1
  134. package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js → treemap-KZPCXAKY-b823qTE1.js} +5 -5
  135. package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js.map → treemap-KZPCXAKY-b823qTE1.js.map} +1 -1
  136. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js → vennDiagram-LZ73GAT5-BrxPNUYz.js} +2 -2
  137. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js.map → vennDiagram-LZ73GAT5-BrxPNUYz.js.map} +1 -1
  138. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js → xychartDiagram-JWTSCODW-BgOzlz6Z.js} +3 -3
  139. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js.map → xychartDiagram-JWTSCODW-BgOzlz6Z.js.map} +1 -1
  140. package/webapp/dist/index.html +1 -1
@@ -47,32 +47,32 @@ function buildFbrContextHealthScopeRule(scope, language, contextHealthPromptMode
47
47
  if (contextHealthPromptMode === 'critical') {
48
48
  return pickLocalized(language, {
49
49
  zh: scope === 'mainDialog'
50
- ? '- 当前上下文处于系统告急处置态:本程禁止发起 FBR。先按处置要求把尚未落实到差遣牒、且下一程需要知会的讨论细节写入合适章节,再维护接续包提醒项,并立即 `clear_mind`;系统真正开启新一程并完成接续包复核后,再恢复 FBR。'
51
- : '- 当前上下文处于系统告急处置态:本程禁止发起 FBR。你当前处于支线对话:不要维护差遣牒,也不要整理差遣牒更新提案;先按处置要求维护足够详尽的接续包提醒项,并立即 `clear_mind`;系统真正开启新一程并完成接续包复核后,再恢复 FBR。',
50
+ ? '- Dominds 已提醒上下文告急:本程禁止发起 FBR。先按上下文保全要求把尚未落实到差遣牒、且下一程需要知会的讨论细节写入合适章节,再维护接续包提醒项,并立即 `clear_mind`;Dominds 真正开启新一程并完成接续包复核后,再恢复 FBR。'
51
+ : '- Dominds 已提醒上下文告急:本程禁止发起 FBR。你当前处于支线对话:不要维护差遣牒,也不要整理差遣牒更新提案;先按上下文保全要求维护足够详尽的接续包提醒项,并立即 `clear_mind`;Dominds 真正开启新一程并完成接续包复核后,再恢复 FBR。',
52
52
  en: scope === 'mainDialog'
53
- ? '- Current context is under system critical remediation: do not start FBR in this course. First write discussion details not yet in Taskdoc but needed by the next course into the appropriate sections, then maintain continuation-package reminders and clear immediately; resume FBR only after the system starts the new course and the continuation package has been reviewed.'
54
- : '- Current context is under system critical remediation: do not start FBR in this course. You are in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; first maintain sufficiently detailed continuation-package reminders, then clear immediately. Resume FBR only after the system starts the new course and the continuation package has been reviewed.',
53
+ ? '- Dominds has warned that context is critical: do not start FBR in this course. First write discussion details not yet in Taskdoc but needed by the next course into the appropriate sections, then maintain continuation-package reminders and clear immediately; resume FBR only after Dominds starts the new course and the continuation package has been reviewed.'
54
+ : '- Dominds has warned that context is critical: do not start FBR in this course. You are in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; first maintain sufficiently detailed continuation-package reminders, then clear immediately. Resume FBR only after Dominds starts the new course and the continuation package has been reviewed.',
55
55
  });
56
56
  }
57
57
  if (contextHealthPromptMode === 'caution') {
58
58
  return pickLocalized(language, {
59
59
  zh: scope === 'mainDialog'
60
- ? '- 当前上下文处于系统吃紧处置态:本程不要发起 FBR。先按处置要求把尚未落实到差遣牒、且下一程需要知会的讨论细节写入合适章节,再提炼提醒项并尽快 `clear_mind`;系统真正开启新一程并完成接续包复核后,再恢复 FBR。'
61
- : '- 当前上下文处于系统吃紧处置态:本程不要发起 FBR。你当前处于支线对话:不要维护差遣牒,也不要整理差遣牒更新提案;先按处置要求维护足够详尽的接续包提醒项并尽快 `clear_mind`;系统真正开启新一程并完成接续包复核后,再恢复 FBR。',
60
+ ? '- Dominds 已提醒上下文吃紧:本程不要发起 FBR。先按上下文保全要求把尚未落实到差遣牒、且下一程需要知会的讨论细节写入合适章节,再提炼提醒项并尽快 `clear_mind`;Dominds 真正开启新一程并完成接续包复核后,再恢复 FBR。'
61
+ : '- Dominds 已提醒上下文吃紧:本程不要发起 FBR。你当前处于支线对话:不要维护差遣牒,也不要整理差遣牒更新提案;先按上下文保全要求维护足够详尽的接续包提醒项并尽快 `clear_mind`;Dominds 真正开启新一程并完成接续包复核后,再恢复 FBR。',
62
62
  en: scope === 'mainDialog'
63
- ? '- Current context is under system caution remediation: do not start FBR in this course. First write discussion details not yet in Taskdoc but needed by the next course into the appropriate sections, then distill reminders and clear soon; resume FBR only after the system starts the new course and the continuation package has been reviewed.'
64
- : '- Current context is under system caution remediation: do not start FBR in this course. You are in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; first maintain sufficiently detailed continuation-package reminders, then clear soon. Resume FBR only after the system starts the new course and the continuation package has been reviewed.',
63
+ ? '- Dominds has warned that context is tight: do not start FBR in this course. First write discussion details not yet in Taskdoc but needed by the next course into the appropriate sections, then distill reminders and clear soon; resume FBR only after Dominds starts the new course and the continuation package has been reviewed.'
64
+ : '- Dominds has warned that context is tight: do not start FBR in this course. You are in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; first maintain sufficiently detailed continuation-package reminders, then clear soon. Resume FBR only after Dominds starts the new course and the continuation package has been reviewed.',
65
65
  });
66
66
  }
67
67
  if (scope === 'mainDialog') {
68
68
  return pickLocalized(language, {
69
- zh: '- 当前没有生效中的上下文健康处置指令,可以按正常流程进行 FBR。完成 FBR 后,基于当前可观测事实调用 `mind_more` 或 `change_mind` 更新差遣牒,体现任务最新进展情况。FBR 自诉请正文不要冗余包含差遣牒已有信息。',
70
- en: '- There is no active context-health remediation instruction in effect, so FBR may proceed normally. After FBR, call `mind_more` or `change_mind` based on currently observable facts to update the Taskdoc with the latest progress; do not redundantly include information already present in the Taskdoc in the FBR body.',
69
+ zh: '- 当前没有生效中的上下文保全提示,可以按正常流程进行 FBR。完成 FBR 后,基于当前可观测事实调用 `mind_more` 或 `change_mind` 更新差遣牒,体现任务最新进展情况。FBR 自诉请正文不要冗余包含差遣牒已有信息。',
70
+ en: '- There is no active context-preservation notice in effect, so FBR may proceed normally. After FBR, call `mind_more` or `change_mind` based on currently observable facts to update the Taskdoc with the latest progress; do not redundantly include information already present in the Taskdoc in the FBR body.',
71
71
  });
72
72
  }
73
73
  return pickLocalized(language, {
74
- zh: '- 当前没有生效中的上下文健康处置指令,可以按正常流程进行 FBR。随后基于当前可观测事实分析是否与差遣牒内容存在差异,并将发现的情况包含在 FBR 自诉请正文中。',
75
- en: '- There is no active context-health remediation instruction in effect, so FBR may proceed normally. Then analyze whether currently observable facts differ from the Taskdoc, and include the findings in the FBR body.',
74
+ zh: '- 当前没有生效中的上下文保全提示,可以按正常流程进行 FBR。随后基于当前可观测事实分析是否与差遣牒内容存在差异,并将发现的情况包含在 FBR 自诉请正文中。',
75
+ en: '- There is no active context-preservation notice in effect, so FBR may proceed normally. Then analyze whether currently observable facts differ from the Taskdoc, and include the findings in the FBR body.',
76
76
  });
77
77
  }
78
78
  function buildFbrPhaseContract(language) {
@@ -104,9 +104,9 @@ function buildTeammateTellaskPhaseContract(language) {
104
104
  '- 只有长线诉请(`tellask` + `sessionSlug`)能接着同一件事说、更新同一件正在做的事;一次性诉请(`tellaskSessionless`)做不到。再次发起 `tellaskSessionless` 只是另一件独立任务,不会更新、更不会要求旧任务停止;若你后来发现可能需要改要求/提前收口,一开始就不该选择 `tellaskSessionless`。',
105
105
  '- 不要把智能体队友当成真人同事:祂不会因为你又发一条诉请而被打扰。同一个队友可以同时做多件独立任务,系统会分开处理。记住这个简单规则:同一个队友 + 同一个 `sessionSlug` = 接着同一件事说,并更新那件正在做的事;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务。只要任务独立、目标清楚,就直接并行诉请。',
106
106
  '- 能由队友诉请完成的执行性工作,禁止转交 `askHuman` 做“转发员”;当你写“让 @X 执行 Y”时,必须在同一回复内直接发出 `tellask` 或 `tellaskSessionless`。',
107
- `- 当你在诉请正文里定义“回贴格式/交付格式”时,只写业务交付结构即可;不要要求被诉请者手写 \`${runtimeMarkers.finalCompleted}\` / \`${runtimeMarkers.tellaskBack}\` / FBR 标记(\`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`),这些标记由 Dominds 运行时自动注入。`,
107
+ `- 当你在诉请正文里定义“回贴格式/交付格式”时,只写业务交付结构即可;不要要求被诉请者手写 \`${runtimeMarkers.finalCompleted}\` / \`${runtimeMarkers.tellaskBack}\` / FBR 标记(\`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`),这些标记由 Dominds 自动注入。`,
108
108
  '- 当你处于队友诉请触发的支线时,不要把“阻塞/不确定”默认等同于 `tellaskBack`:若按当前团队规程/SOP/职责卡已能明确判定执行负责人,直接用 `tellask` / `tellaskSessionless` 诉请对应负责人;只有确实需要诉请者补充需求、做裁决、澄清验收口径、提供缺失输入,或现有规程无法明确判责时,才使用 `tellaskBack`。`tellaskBack` 不携带 `sessionSlug`。',
109
- `- 回贴文本标记由运行时在跨对话传递正文中按语义自动添加(例如 \`${runtimeMarkers.tellaskBack}\` / \`${runtimeMarkers.finalCompleted}\` / FBR 标记 \`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`);该传递正文会进入目标智能体上下文,且 UI 与其一致。你不应手写这些标记。`,
109
+ `- 回贴文本标记由 Dominds 在跨对话传递正文中按语义自动添加(例如 \`${runtimeMarkers.tellaskBack}\` / \`${runtimeMarkers.finalCompleted}\` / FBR 标记 \`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`);该传递正文会进入目标智能体上下文,且 UI 与其一致。你不应手写这些标记。`,
110
110
  ],
111
111
  en: [
112
112
  '- Teammate Tellasks MUST follow four phases: “initiate -> wait -> judge -> continue”. If the objective is not met, immediately send the next Tellask round.',
@@ -117,44 +117,50 @@ function buildTeammateTellaskPhaseContract(language) {
117
117
  '- Only a sessioned Tellask (`tellask` + `sessionSlug`) can continue the same task and update that task. A one-shot Tellask (`tellaskSessionless`) cannot: another `tellaskSessionless` is a separate task and does not update, stop, or instruct the earlier task to stop. If you may need later correction or earlier wrap-up, do not choose `tellaskSessionless` in the first place.',
118
118
  '- Do not treat an agent teammate like a human coworker who can only handle one conversation at a time. The same teammate can work on several independent tasks at once, and the system keeps them separate. Simple rule: same teammate + same `sessionSlug` = continue the same task and update that task; `tellaskSessionless` or a different `sessionSlug` = another independent task. When tasks are independent and clear, tellask in parallel.',
119
119
  '- Do not use `askHuman` as a relay for executable teammate work. If you write “ask @X to do Y”, emit `tellask` or `tellaskSessionless` in the same response.',
120
- `- When you define a “reply/delivery format” inside tellask body, keep it to the business delivery structure; do not require the tellaskee to hand-write \`${runtimeMarkers.finalCompleted}\` / \`${runtimeMarkers.tellaskBack}\` / FBR markers (\`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`), because Dominds runtime injects those markers automatically.`,
120
+ `- When you define a “reply/delivery format” inside tellask body, keep it to the business delivery structure; do not require the tellaskee to hand-write \`${runtimeMarkers.finalCompleted}\` / \`${runtimeMarkers.tellaskBack}\` / FBR markers (\`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`), because Dominds injects those markers automatically.`,
121
121
  '- In a teammate-triggered Side Dialog, do not treat “blocked / uncertain” as an automatic `tellaskBack`: if current team SOP / role ownership already identifies the responsible executor, directly use `tellask` / `tellaskSessionless` for that owner; use `tellaskBack` only when you truly need the tellasker to clarify, decide, confirm acceptance criteria, provide missing input, or when existing SOP cannot determine ownership. `tellaskBack` must not carry `sessionSlug`.',
122
- `- Reply markers are auto-added by runtime in the inter-dialog transfer payload (for example \`${runtimeMarkers.tellaskBack}\` / \`${runtimeMarkers.finalCompleted}\` / FBR markers \`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`); that same transfer payload is what the target agent receives in context and what UI shows. Do not hand-write markers.`,
122
+ `- Reply markers are auto-added by Dominds in the inter-dialog transfer payload (for example \`${runtimeMarkers.tellaskBack}\` / \`${runtimeMarkers.finalCompleted}\` / FBR markers \`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`); that same transfer payload is what the target agent receives in context and what UI shows. Do not hand-write markers.`,
123
123
  ],
124
124
  });
125
125
  return lines.join('\n');
126
126
  }
127
127
  function buildSideDialogTellaskerReplyMarkerRules(language) {
128
128
  const runtimeMarkers = (0, inter_dialog_format_1.getRuntimeTransferMarkers)(language);
129
+ // Business scenario: Side Dialogs use the same visible conversation surface for three very
130
+ // different acts: asking another teammate (`tellask*`), asking the requester a question
131
+ // (`tellaskBack`), and sending the final answer back through a runtime-selected reply tool.
132
+ // Models often blur those acts when the prompt names all tools at once. These rules deliberately
133
+ // make runtime the authority for "is somebody waiting for my final reply" and "which reply tool
134
+ // sends it", while leaving business ownership/SOP decisions to the model.
129
135
  const lines = pickLocalized(language, {
130
136
  zh: [
131
137
  '- 本规则仅用于当前支线向诉请者回复;`tellask` 用于**发起新的下游诉请对话**(委托队友做事),不用于向诉请者汇报。',
132
138
  '- 当前支线未完成时,不要默认直接 `tellaskBack`。先判断当前团队规程/SOP/职责卡能否明确负责人:若能明确且属于执行性处理,直接 `tellask` / `tellaskSessionless` 对应负责人;只有当必须向诉请者补充需求、做业务裁决、澄清验收口径、提供缺失输入,或现有规程无法明确判责时,才发起 `tellaskBack({ tellaskContent: "..." })`,并在 `tellaskContent` 中给出具体问题。',
133
- '- 是否存在“待你收口的跨对话回复义务”、以及精确该调用哪个 reply 函数,均由运行时程序化判断;运行时会在 assignment 或最新 runtime/user 提示里直接点名。',
134
- '- 若运行时点名了精确 reply 函数名,你只需调用那个被点名的函数;不要自己判断 `reply*` 变体。禁止调用 `tellaskBack` 发送最终结果,也禁止用 `tellask` 向诉请者发送最终结果。',
135
- `- 正式完成路径:只有在运行时当前明确点名了某个精确 reply 函数,且你通过那个函数回复时,运行时才会把该回复作为完成结果投递给诉请者,并在传递正文中添加 ${runtimeMarkers.finalCompleted}。不要依赖 direct-reply fallback;它只是运行时临时过渡兜底,不是正式回复机制。`,
136
- '- 若运行时当前明确提示“没有待完成的跨对话回复义务”,就直接继续当前本地对话;不要凭记忆再次调用 `reply*`。',
137
- '- "不得发普通文本中间汇报"只针对未完成态;若你已经完成任务并能给出最终交付,就应使用运行时当前点名的精确 reply 函数,不要使用 `tellaskBack` 或 `tellask`。',
139
+ '- 是否有别的对话正在等你发送最终回贴、以及发送时该用哪个精确回复工具,均由 Dominds 根据当前对话状态判断;Dominds 会在任务开头或最新 Dominds/user 提示里直接点名。',
140
+ '- Dominds 点名了精确回复工具,你只需调用那个被点名的工具;不要自己从历史上下文猜工具变体。禁止调用 `tellaskBack` 发送最终结果,也禁止用 `tellask` 向诉请者发送最终结果。',
141
+ `- 正式完成路径:只有在 Dominds 当前明确点名了某个精确回复工具,且你通过那个工具回复时,Dominds 才会把该回复作为完成结果投递给诉请者,并在传递正文中添加 ${runtimeMarkers.finalCompleted}。不要只发普通文本;对方可能收不到正式回贴。`,
142
+ '- Dominds 当前明确提示“无需回贴”,说明这就是当前对话里的普通回合;按当前用户/Dominds 消息正常交流和处理即可。',
143
+ '- "不得发普通文本中间汇报"只针对未完成态;若你已经完成任务并能给出最终交付,就应使用 Dominds 当前点名的精确回复工具,不要使用 `tellaskBack` 或 `tellask`。',
138
144
  '- 例外:FBR 支线为工具禁用模式(不得调用 `tellaskBack`);其回贴标记(`' +
139
145
  runtimeMarkers.fbrDirectReply +
140
146
  '` / `' +
141
147
  runtimeMarkers.fbrReasoningOnly +
142
- '`)也由运行时在传递正文中注入。',
148
+ '`)也由 Dominds 在传递正文中注入。',
143
149
  '- 若人类用户在支线对话中插入消息或补问:直接正常回复即可,不需要向诉请者汇报(支线不需要主动汇报诉请者,默认行为就是直接回复)。',
144
150
  ],
145
151
  en: [
146
152
  '- This rule applies only when replying to the tellasker from the current Side Dialog; tellask is for initiating a new downstream tellask dialog (delegating work to a teammate), not for reporting back to the tellasker.',
147
153
  '- If the current Side Dialog is unfinished, do not default to `tellaskBack`. First judge whether current team SOP / role ownership already identifies the responsible executor: if yes and the issue is execution work, directly use `tellask` / `tellaskSessionless` for that owner; use `tellaskBack({ tellaskContent: "..." })` only when the tellasker must provide clarification, business decision, acceptance-criteria confirmation, missing input, or when existing SOP cannot determine ownership. Put concrete questions in `tellaskContent`.',
148
- '- Runtime programmatically decides whether there is an active inter-dialog reply obligation for you, and which exact reply function name applies; runtime will state that directly in the assignment or the latest runtime/user prompt.',
149
- '- If runtime names an exact reply function, call that named function and do not choose a `reply*` variant by yourself. Do not use `tellaskBack` or `tellask` to send final delivery.',
150
- `- Formal completion path: only replies sent through the exact reply function currently named by runtime are delivered to the tellasker as completion results and marked with ${runtimeMarkers.finalCompleted}. Do not rely on direct-reply fallback; it is only a temporary runtime transition safeguard, not the formal reply mechanism.`,
151
- '- If runtime explicitly tells you there is no active inter-dialog reply obligation right now, just continue the current local conversation; do not call `reply*` again from memory.',
152
- '- "Do not post a plain-text progress update" only applies to unfinished states; if the task is done and you can deliver the final result, use the exact reply function currently named by runtime instead of `tellaskBack` or `tellask`.',
154
+ '- Dominds decides from the current dialog state whether another dialog is waiting for your final reply, and which exact reply tool sends it; Dominds will state that directly in the task header or the latest Dominds/user prompt.',
155
+ '- If Dominds names an exact reply tool, call that named tool and do not choose a variant by yourself. Do not use `tellaskBack` or `tellask` to send final delivery.',
156
+ `- Formal completion path: only replies sent through the exact reply tool currently named by Dominds are delivered to the tellasker as completion results and marked with ${runtimeMarkers.finalCompleted}. Do not rely on plain text; the other dialog may not receive a formal reply that way.`,
157
+ '- If Dominds explicitly says no reply is needed right now, this is just a normal turn in the current conversation; handle the current user/Dominds message normally.',
158
+ '- "Do not post a plain-text progress update" only applies to unfinished states; if the task is done and you can deliver the final result, use the exact reply tool currently named by Dominds instead of `tellaskBack` or `tellask`.',
153
159
  '- Exception: FBR Side Dialog is tool-less (no \`tellaskBack\`); its reply markers (`' +
154
160
  runtimeMarkers.fbrDirectReply +
155
161
  '` / `' +
156
162
  runtimeMarkers.fbrReasoningOnly +
157
- '`) are also injected by runtime into the transfer payload.',
163
+ '`) are also injected by Dominds into the transfer payload.',
158
164
  '- If a human user inserts a message or asks a follow-up in the Side Dialog: just reply normally; no need to report back to the tellasker (Side Dialog has no standing obligation to report to the tellasker).',
159
165
  ],
160
166
  });
@@ -163,25 +169,34 @@ function buildSideDialogTellaskerReplyMarkerRules(language) {
163
169
  function buildTellaskReplyMarkerScopePolicy(language, dialogScope) {
164
170
  const runtimeMarkers = (0, inter_dialog_format_1.getRuntimeTransferMarkers)(language);
165
171
  if (dialogScope === 'sideDialog') {
172
+ // Business scenario: this policy is embedded in the standing Side Dialog system prompt, so
173
+ // it must teach the stable rule without forcing the model to infer the live state. The live
174
+ // state comes from runtime prompts such as "[Dominds 回复路径]" or "[Dominds 无需回贴]"; this
175
+ // standing text only says how to obey those runtime facts when they appear.
176
+ //
177
+ // The "no reply needed" wording is deliberately phrased as "normal current turn" instead of
178
+ // as a broad tool/reminder prohibition. A completed Sideline Dialog follow-up may still need
179
+ // tools, reminder cleanup, or ordinary explanation if the user asks for them; the key business
180
+ // fact is only that no requester is waiting for formal final delivery anymore.
166
181
  return [
167
182
  ...pickLocalized(language, {
168
183
  zh: [
169
- `- 回贴文本标记由运行时在跨对话传递正文中自动添加(常规完成=${runtimeMarkers.finalCompleted};FBR=${runtimeMarkers.fbrDirectReply} 或 ${runtimeMarkers.fbrReasoningOnly});该正文直接进入诉请者上下文,且 UI 展示与其一致。你无需、也不应手写标记。`,
170
- '- 若你在正文中给下游写“回贴格式”,只写业务交付结构;不得要求下游手写任何标记,运行时会自动注入。',
184
+ `- 回贴文本标记由 Dominds 在跨对话传递正文中自动添加(常规完成=${runtimeMarkers.finalCompleted};FBR=${runtimeMarkers.fbrDirectReply} 或 ${runtimeMarkers.fbrReasoningOnly});该正文直接进入诉请者上下文,且 UI 展示与其一致。你无需、也不应手写标记。`,
185
+ '- 若你在正文中给下游写“回贴格式”,只写业务交付结构;不得要求下游手写任何标记,Dominds 会自动注入。',
171
186
  '- `tellaskBack` 只允许用于回问诉请者;仅当必须向诉请者补需求/澄清/裁决/缺失输入,或现有团队规程无法明确判责时才使用。禁止用 `tellaskBack` 发送最终结果。',
172
187
  '- 当前支线未完成时,不得把“阻塞/不确定”机械等同于 `tellaskBack`;若团队规程/SOP/职责卡已明确负责人,应直接 `tellask` / `tellaskSessionless` 对应负责人,不得发普通文本中间汇报。',
173
188
  `- ${(0, reply_prompt_copy_1.buildSideDialogCompletionRule)('zh')}`,
174
- `- 正式完成路径中,仅当运行时当前明确点名了某个精确 reply 函数,且你通过那个函数回复时,运行时才会把该回复投递给诉请者并标注 ${runtimeMarkers.finalCompleted};不要依赖 direct-reply fallback,它只是运行时临时过渡兜底,不是正式回复机制。`,
175
- '- 若运行时当前明确提示“没有待完成的跨对话回复义务”,说明这轮不是待你收口的跨对话回复义务;不要重复调用 `reply*`。',
189
+ `- 正式完成路径中,仅当 Dominds 当前明确点名了某个精确回复工具,且你通过那个工具回复时,Dominds 才会把该回复投递给诉请者并标注 ${runtimeMarkers.finalCompleted};不要只发普通文本,对方可能收不到正式回贴。`,
190
+ '- Dominds 当前明确提示“无需回贴”,说明这轮没有别的对话在等你发送最终回贴;这是当前对话里的普通回合,按当前消息正常交流和处理即可。',
176
191
  ],
177
192
  en: [
178
- `- Reply markers are runtime-added in the inter-dialog transfer payload (regular completed reply = ${runtimeMarkers.finalCompleted}; FBR = ${runtimeMarkers.fbrDirectReply} or ${runtimeMarkers.fbrReasoningOnly}); this payload is delivered to tellasker context and shown identically in UI. Do not hand-write markers.`,
179
- '- If you define a reply format for downstream, keep it to the business delivery structure; do not require downstream to hand-write any marker, because runtime injects markers automatically.',
193
+ `- Reply markers are added by Dominds in the inter-dialog transfer payload (regular completed reply = ${runtimeMarkers.finalCompleted}; FBR = ${runtimeMarkers.fbrDirectReply} or ${runtimeMarkers.fbrReasoningOnly}); this payload is delivered to tellasker context and shown identically in UI. Do not hand-write markers.`,
194
+ '- If you define a reply format for downstream, keep it to the business delivery structure; do not require downstream to hand-write any marker, because Dominds injects markers automatically.',
180
195
  '- `tellaskBack` is only for asking the tellasker back; use it only when tellasker clarification / decision / missing input is required, or current team SOP cannot determine ownership. Do not use `tellaskBack` to send final results.',
181
196
  '- If the current Side Dialog is unfinished, do not mechanically map “blocked / uncertain” to `tellaskBack`; when team SOP / role ownership already identifies the responsible owner, directly use `tellask` / `tellaskSessionless` for that owner instead of posting a plain-text progress update.',
182
197
  `- ${(0, reply_prompt_copy_1.buildSideDialogCompletionRule)('en')}`,
183
- `- In the formal completion path, runtime marks ${runtimeMarkers.finalCompleted} and delivers to the tellasker only when runtime currently names an exact reply function and you reply through that named function; do not rely on direct-reply fallback, which is only a temporary runtime transition safeguard, not the formal reply mechanism.`,
184
- '- If runtime currently tells you there is no active inter-dialog reply obligation, then this turn is not awaiting another inter-dialog closure from you; do not call `reply*` again.',
198
+ `- In the formal completion path, Dominds marks ${runtimeMarkers.finalCompleted} and delivers to the tellasker only when Dominds currently names an exact reply tool and you reply through that named tool; do not rely on plain text, because the other dialog may not receive a formal reply that way.`,
199
+ '- If Dominds currently tells you no reply is needed, then no other dialog is waiting for your final reply in this turn; this is a normal turn in the current conversation, so handle the current message normally.',
185
200
  ],
186
201
  }),
187
202
  ];
@@ -230,7 +245,7 @@ function buildFbrGuidelines(language, dialogScope, contextHealthPromptMode) {
230
245
  const lines = pickLocalized(language, {
231
246
  zh: [
232
247
  '- FBR 由 `freshBootsReasoning` 触发,不属于普通队友诉请分类;请按本节规则执行。',
233
- '- FBR 不可调用 `tellaskBack`;其回贴标记由运行时在跨对话传递正文中自动注入。',
248
+ '- FBR 不可调用 `tellaskBack`;其回贴标记由 Dominds 在跨对话传递正文中自动注入。',
234
249
  '- FBR 禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`)。',
235
250
  '- 当用户明确要求“做一次 FBR/扪心自问”,对话主理人必须发起 `freshBootsReasoning`。',
236
251
  fbrContextHealthRule,
@@ -247,7 +262,7 @@ function buildFbrGuidelines(language, dialogScope, contextHealthPromptMode) {
247
262
  ],
248
263
  en: [
249
264
  '- FBR is triggered by `freshBootsReasoning`, not by normal teammate tellasks; follow this section’s rules.',
250
- '- FBR cannot call `tellaskBack`; its reply marker is injected by runtime into the inter-dialog transfer payload.',
265
+ '- FBR cannot call `tellaskBack`; its reply marker is injected by Dominds into the inter-dialog transfer payload.',
251
266
  '- FBR forbids all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`).',
252
267
  '- When the user explicitly requests “do an FBR / fresh boots reasoning”, the Dialog Responder must call `freshBootsReasoning`.',
253
268
  fbrContextHealthRule,
@@ -316,7 +331,7 @@ function formatMcpToolsetRuntimeNote(language, notices) {
316
331
  return '';
317
332
  const lines = language === 'zh'
318
333
  ? [
319
- '以下 MCP toolset 已配置给你,且在 `.minds/mcp.yaml` 中有声明,但当前不提供可调用的运行时 MCP 工具。',
334
+ '以下 MCP toolset 已配置给你,且在 `.minds/mcp.yaml` 中有声明,但当前没有可调用的 MCP 工具。',
320
335
  '其中有些可能是暂时不可达(例如 stdio transport 进程启动失败,或 streamable HTTP transport 当前无法连接),有些可能是被明确禁用;这不代表你的权限被撤销,也不应视为系统级功能降级。',
321
336
  ...notices.map((notice) => {
322
337
  if (notice.status === 'disabled') {
@@ -331,7 +346,7 @@ function formatMcpToolsetRuntimeNote(language, notices) {
331
346
  '若当前任务依赖这些能力,应明确说明对应 MCP toolset 眼下不可用,并优先继续使用其余可用工具/路径推进。',
332
347
  ]
333
348
  : [
334
- 'The following MCP toolsets are assigned to you and declared in `.minds/mcp.yaml`, but they do not currently provide callable runtime MCP tools.',
349
+ 'The following MCP toolsets are assigned to you and declared in `.minds/mcp.yaml`, but they do not currently provide callable MCP tools.',
335
350
  'Some may be temporarily unavailable (for example a stdio transport process failing to start right now, or a streamable HTTP transport being unreachable right now), and some may be explicitly disabled. This does not mean your permission was revoked, and it should not be treated as a system-level capability downgrade.',
336
351
  ...notices.map((notice) => {
337
352
  if (notice.status === 'disabled') {
@@ -352,6 +367,12 @@ function buildSystemPrompt(input) {
352
367
  const fbrGuidelines = buildFbrGuidelines(input.language, input.dialogScope, input.contextHealthPromptMode);
353
368
  const tellaskInteractionRules = buildTellaskInteractionRules(input.language);
354
369
  const functionToolRules = buildFunctionToolRules(input.language, input.funcToolRulesText);
370
+ // Business scenario: many runtime notices say "Dominds has reminded / decided / injected ..."
371
+ // because Dominds, not the human user, maintains dialog state, reminder projection, course
372
+ // transitions, and inter-dialog routing. Without a plain glossary definition, models may treat
373
+ // "Dominds" as a user request source, a third-party product name, or an abstract platform.
374
+ // Define it once near the top of the system prompt so later Dominds notices read as state and
375
+ // guidance from the current autonomous runtime.
355
376
  if (input.language === 'zh') {
356
377
  return `
357
378
  # Agent 系统提示
@@ -375,6 +396,7 @@ function buildSystemPrompt(input) {
375
396
 
376
397
  ## 术语表
377
398
 
399
+ - Dominds:你当前所在的智能体自主运行环境;它负责维护对话、提醒项、换程、队友诉请和系统提示。看到“Dominds 提示”时,把它当作当前运行环境给你的状态说明或行动引导,不是用户的新诉求。
378
400
  - 诉请:对智能体的结构化请求。
379
401
  - 诉请内容(tellaskContent):tellask 系列函数的正文参数,用于承载上下文/约束/验收。
380
402
  - 提及列表(mentionList):仅用于 \`tellask\` / \`tellaskSessionless\` 的队友目标列表(\`@<agentId>\`)。
@@ -473,6 +495,7 @@ System notices convey important state changes (e.g., context caution/critical, D
473
495
 
474
496
  ## Glossary
475
497
 
498
+ - Dominds: your current autonomous agent runtime. It maintains dialogs, reminders, course transitions, teammate tellasks, and system notices. When you see a "Dominds notice", treat it as state or action guidance from the current runtime, not as a new user request.
476
499
  - Tellask: a structured request addressed to an agent.
477
500
  - Mention list (\`mentionList\`): teammate targets for \`tellask\` / \`tellaskSessionless\` only (\`@<agentId>\`).
478
501
  - Tellask content (\`tellaskContent\`): main call payload carrying context/constraints/acceptance.
@@ -388,8 +388,14 @@ function isSuppressedTellaskPlaceholderFuncResult(args) {
388
388
  if (raw === '') {
389
389
  return false;
390
390
  }
391
+ // Business scenario: these generated tool results are only waiting/status placeholders. They
392
+ // must be suppressed when reconstructing the conversation so the model does not confuse them
393
+ // with a real teammate/human answer. Keep the old prefixes for persisted records, and include
394
+ // the newer plain-language prefixes so the suppression logic matches the current copy.
391
395
  if (raw === 'Q4H 已结束等待状态,请参考 askHuman 结果气泡。' ||
392
- raw === 'Q4H wait is resolved; refer to the askHuman result bubble.') {
396
+ raw === 'Q4H wait is resolved; refer to the askHuman result bubble.' ||
397
+ raw === '人类已经回答;请参考 askHuman 结果气泡。' ||
398
+ raw === 'The human has answered; refer to the askHuman result bubble.') {
393
399
  return true;
394
400
  }
395
401
  if (raw.startsWith('Q4H 仍在等待人类回复,已持续 ') ||
@@ -404,6 +410,14 @@ function isSuppressedTellaskPlaceholderFuncResult(args) {
404
410
  (raw.includes('当前仍在等待') || raw.includes('is still waiting'))) {
405
411
  return true;
406
412
  }
413
+ if (raw.startsWith('[Dominds 等待人类回复]') ||
414
+ raw.startsWith('[Dominds waiting for human answer]') ||
415
+ raw.startsWith('[Dominds 等待队友回贴]') ||
416
+ raw.startsWith('[Dominds waiting for teammate reply]') ||
417
+ raw.startsWith('[Dominds 队友回贴状态]') ||
418
+ raw.startsWith('[Dominds teammate reply status]')) {
419
+ return true;
420
+ }
407
421
  return false;
408
422
  }
409
423
  function isYamlUnexpectedEofLikeError(error) {
@@ -12,14 +12,45 @@ export declare function formatNewCourseStartPrompt(language: LanguageCode, args:
12
12
  }): string;
13
13
  export declare function formatDiligenceAutoContinuePrompt(language: LanguageCode, diligenceText: string): string;
14
14
  export declare function formatReminderContextGuide(language: LanguageCode): string;
15
- export type ReminderContextFollowingDialogState = 'user_message' | 'runtime_notice' | 'none';
16
- export type ReminderContextReplyObligationState = 'none' | 'active' | 'parked_by_user_interjection';
17
- export type ReminderContextHealthState = 'normal' | 'caution' | 'critical';
15
+ export type ReminderContextFollowingMessage = Readonly<{
16
+ kind: 'user_message';
17
+ }> | Readonly<{
18
+ kind: 'human_answer';
19
+ }> | Readonly<{
20
+ kind: 'runtime_notice';
21
+ }> | Readonly<{
22
+ kind: 'none';
23
+ }>;
24
+ export type ReminderContextHealth = Readonly<{
25
+ kind: 'normal';
26
+ }> | Readonly<{
27
+ kind: 'caution';
28
+ }> | Readonly<{
29
+ kind: 'critical';
30
+ }>;
31
+ export type ReminderContextDialogScope = Readonly<{
32
+ kind: 'main_dialog';
33
+ }> | Readonly<{
34
+ kind: 'side_dialog';
35
+ }>;
36
+ export type ReminderContextBusiness = Readonly<{
37
+ kind: 'none';
38
+ }> | Readonly<{
39
+ kind: 'active_reply_obligation';
40
+ }> | Readonly<{
41
+ kind: 'pending_user_interjection';
42
+ }> | Readonly<{
43
+ kind: 'pending_user_interjection_with_active_reply';
44
+ }> | Readonly<{
45
+ kind: 'pending_user_interjection_with_parked_reply';
46
+ }> | Readonly<{
47
+ kind: 'user_followup_after_completed_handoff';
48
+ }>;
18
49
  export type ReminderContextFooterState = Readonly<{
19
- followingDialogState: ReminderContextFollowingDialogState;
20
- pendingUserInterjectionReply: boolean;
21
- interDialogReplyObligation: ReminderContextReplyObligationState;
22
- contextHealthState: ReminderContextHealthState;
50
+ followingMessage: ReminderContextFollowingMessage;
51
+ contextHealth: ReminderContextHealth;
52
+ dialogScope: ReminderContextDialogScope;
53
+ business: ReminderContextBusiness;
23
54
  }>;
24
55
  export declare function formatReminderContextFooter(language: LanguageCode, state: ReminderContextFooterState): string;
25
56
  export type ReminderMaintenanceReferenceItem = Readonly<{