dominds 1.17.3 → 1.17.5

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 (182) hide show
  1. package/dist/apps-host/host.js +13 -2
  2. package/dist/apps-host/ipc-types.js +18 -1
  3. package/dist/dialog-fork.js +1 -0
  4. package/dist/dialog.d.ts +1 -0
  5. package/dist/dialog.js +8 -0
  6. package/dist/docs/dialog-system.md +6 -5
  7. package/dist/docs/dialog-system.zh.md +2 -1
  8. package/dist/docs/fbr.md +1 -1
  9. package/dist/docs/fbr.zh.md +1 -1
  10. package/dist/docs/mcp-support.md +4 -1
  11. package/dist/docs/team_mgmt-toolset.md +8 -7
  12. package/dist/docs/team_mgmt-toolset.zh.md +6 -5
  13. package/dist/docs/tellask-collab.md +6 -6
  14. package/dist/docs/tellask-collab.zh.md +2 -2
  15. package/dist/mcp/manual-problems.d.ts +33 -0
  16. package/dist/mcp/manual-problems.js +323 -0
  17. package/dist/mcp/supervisor.js +23 -1
  18. package/dist/minds/system-prompt.js +6 -6
  19. package/dist/persistence.js +227 -16
  20. package/dist/priming.js +7 -0
  21. package/dist/shared-reminders.js +2 -0
  22. package/dist/tool.d.ts +5 -0
  23. package/dist/tool.js +15 -0
  24. package/dist/tools/app-reminders.js +20 -3
  25. package/dist/tools/ctrl.js +43 -4
  26. package/dist/tools/manual/output-limit.d.ts +9 -0
  27. package/dist/tools/manual/output-limit.js +12 -0
  28. package/dist/tools/os.js +17 -16
  29. package/dist/tools/pending-tellask-reminder.js +4 -2
  30. package/dist/tools/team_mgmt-manual.d.ts +2 -0
  31. package/dist/tools/team_mgmt-manual.js +160 -0
  32. package/dist/tools/team_mgmt-mcp-manual.d.ts +27 -0
  33. package/dist/tools/team_mgmt-mcp-manual.js +643 -0
  34. package/dist/tools/team_mgmt.d.ts +11 -1
  35. package/dist/tools/team_mgmt.js +22 -867
  36. package/dist/tools/toolset-manual.js +5 -5
  37. package/package.json +5 -5
  38. package/webapp/dist/assets/{_basePickBy-LNaSxjvr.js → _basePickBy-CpHP1wBo.js} +3 -3
  39. package/webapp/dist/assets/_basePickBy-CpHP1wBo.js.map +1 -0
  40. package/webapp/dist/assets/{_baseUniq-Bj1hx6jk.js → _baseUniq-CvZnDuif.js} +2 -2
  41. package/webapp/dist/assets/_baseUniq-CvZnDuif.js.map +1 -0
  42. package/webapp/dist/assets/{arc-Bpj1nPA2.js → arc-BHFujbnL.js} +2 -2
  43. package/webapp/dist/assets/arc-BHFujbnL.js.map +1 -0
  44. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CoXbtvnz.js → architectureDiagram-VXUJARFQ-Di1oQVRu.js} +8 -26
  45. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-Di1oQVRu.js.map +1 -0
  46. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CIN9vlJ6.js → blockDiagram-VD42YOAC-DQvfo_FK.js} +170 -187
  47. package/webapp/dist/assets/blockDiagram-VD42YOAC-DQvfo_FK.js.map +1 -0
  48. package/webapp/dist/assets/{c4Diagram-IC4MRINW-C5JZR-oM.js → c4Diagram-YG6GDRKO-ZhmyLfpa.js} +4 -4
  49. package/webapp/dist/assets/c4Diagram-YG6GDRKO-ZhmyLfpa.js.map +1 -0
  50. package/webapp/dist/assets/{channel-D5Xdg9yM.js → channel-BzUmZVV0.js} +2 -2
  51. package/webapp/dist/assets/channel-BzUmZVV0.js.map +1 -0
  52. package/webapp/dist/assets/{chunk-4BX2VUAB-D4Rve4FO.js → chunk-4BX2VUAB-btqBd7Au.js} +2 -2
  53. package/webapp/dist/assets/chunk-4BX2VUAB-btqBd7Au.js.map +1 -0
  54. package/webapp/dist/assets/{chunk-55IACEB6-DpabCDXg.js → chunk-55IACEB6-Dd88jUsB.js} +2 -2
  55. package/webapp/dist/assets/chunk-55IACEB6-Dd88jUsB.js.map +1 -0
  56. package/webapp/dist/assets/{chunk-WL4C6EOR-C13IEcmo.js → chunk-B4BG7PRW-CF0szfFw.js} +121 -171
  57. package/webapp/dist/assets/chunk-B4BG7PRW-CF0szfFw.js.map +1 -0
  58. package/webapp/dist/assets/{chunk-NQ4KR5QH-_1ihDJTW.js → chunk-DI55MBZ5-CuueZ5mR.js} +7 -9
  59. package/webapp/dist/assets/chunk-DI55MBZ5-CuueZ5mR.js.map +1 -0
  60. package/webapp/dist/assets/{chunk-FMBD7UC4-BoBj8MAm.js → chunk-FMBD7UC4-BWirvwW5.js} +2 -2
  61. package/webapp/dist/assets/chunk-FMBD7UC4-BWirvwW5.js.map +1 -0
  62. package/webapp/dist/assets/{chunk-KX2RTZJC-CDdtREQb.js → chunk-QN33PNHL-C8y0hbMe.js} +2 -2
  63. package/webapp/dist/assets/chunk-QN33PNHL-C8y0hbMe.js.map +1 -0
  64. package/webapp/dist/assets/{chunk-QZHKN3VN-B4dXlOb4.js → chunk-QZHKN3VN-CYBh9MjS.js} +2 -2
  65. package/webapp/dist/assets/chunk-QZHKN3VN-CYBh9MjS.js.map +1 -0
  66. package/webapp/dist/assets/{chunk-JSJVCQXG-CEy0qXdN.js → chunk-TZMSLE5B-Dp3nxkVa.js} +6 -14
  67. package/webapp/dist/assets/chunk-TZMSLE5B-Dp3nxkVa.js.map +1 -0
  68. package/webapp/dist/assets/{classDiagram-VBA2DB6C-CFBgFxCH.js → classDiagram-2ON5EDUG-DqWZ8QKp.js} +6 -7
  69. package/webapp/dist/assets/classDiagram-2ON5EDUG-DqWZ8QKp.js.map +1 -0
  70. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CFBgFxCH.js → classDiagram-v2-WZHVMYZB-DqWZ8QKp.js} +6 -7
  71. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-DqWZ8QKp.js.map +1 -0
  72. package/webapp/dist/assets/{clone-TK1nHACc.js → clone-CUPRkFmQ.js} +2 -2
  73. package/webapp/dist/assets/clone-CUPRkFmQ.js.map +1 -0
  74. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BKcU9sie.js → cose-bilkent-S5V4N54A-DMy7cbOH.js} +2 -2
  75. package/webapp/dist/assets/cose-bilkent-S5V4N54A-DMy7cbOH.js.map +1 -0
  76. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  77. package/webapp/dist/assets/{dagre-KLK3FWXG-h-3iGD6Y.js → dagre-6UL2VRFP-oKcmfGzQ.js} +7 -7
  78. package/webapp/dist/assets/dagre-6UL2VRFP-oKcmfGzQ.js.map +1 -0
  79. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  80. package/webapp/dist/assets/{diagram-E7M64L7V-ekBLF-yk.js → diagram-PSM6KHXK-DaqJJraw.js} +10 -10
  81. package/webapp/dist/assets/diagram-PSM6KHXK-DaqJJraw.js.map +1 -0
  82. package/webapp/dist/assets/{diagram-IFDJBPK2-D_G2oKiI.js → diagram-QEK2KX5R-CYJxrEIt.js} +8 -9
  83. package/webapp/dist/assets/diagram-QEK2KX5R-CYJxrEIt.js.map +1 -0
  84. package/webapp/dist/assets/{diagram-P4PSJMXO-27xx1y5D.js → diagram-S2PKOQOG-CLU09icu.js} +8 -8
  85. package/webapp/dist/assets/diagram-S2PKOQOG-CLU09icu.js.map +1 -0
  86. package/webapp/dist/assets/{erDiagram-INFDFZHY-CZSSh9wl.js → erDiagram-Q2GNP2WA-DSZdQ4Um.js} +75 -96
  87. package/webapp/dist/assets/erDiagram-Q2GNP2WA-DSZdQ4Um.js.map +1 -0
  88. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-Bm92lWNi.js → flowDiagram-NV44I4VS-BMQN6R95.js} +81 -98
  89. package/webapp/dist/assets/flowDiagram-NV44I4VS-BMQN6R95.js.map +1 -0
  90. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C5VpKam7.js → ganttDiagram-JELNMOA3-Bsx24uHi.js} +3 -28
  91. package/webapp/dist/assets/ganttDiagram-JELNMOA3-Bsx24uHi.js.map +1 -0
  92. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-DzPVChwE.js → gitGraphDiagram-V2S2FVAM-zwxKKypo.js} +46 -38
  93. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-zwxKKypo.js.map +1 -0
  94. package/webapp/dist/assets/graph-E0vpJDes.js +425 -0
  95. package/webapp/dist/assets/graph-E0vpJDes.js.map +1 -0
  96. package/webapp/dist/assets/{index-Btsmlz6h.js → index-DN9U1zRL.js} +1711 -1137
  97. package/webapp/dist/assets/{index-Btsmlz6h.js.map → index-DN9U1zRL.js.map} +1 -1
  98. package/webapp/dist/assets/{index-YaxF76or.css → index-xvYYeHuy.css} +1 -1
  99. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-yRov6uGE.js → infoDiagram-HS3SLOUP-DTsziUlk.js} +7 -7
  100. package/webapp/dist/assets/infoDiagram-HS3SLOUP-DTsziUlk.js.map +1 -0
  101. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  102. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-DFHL6Mn9.js → journeyDiagram-XKPGCS4Q-BRCxHm94.js} +5 -5
  103. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BRCxHm94.js.map +1 -0
  104. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Dn8AcHXb.js → kanban-definition-3W4ZIXB7-CpQyoAYJ.js} +3 -5
  105. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CpQyoAYJ.js.map +1 -0
  106. package/webapp/dist/assets/{layout-BdLHhC4z.js → layout-CbfoT0O3.js} +5 -5
  107. package/webapp/dist/assets/layout-CbfoT0O3.js.map +1 -0
  108. package/webapp/dist/assets/{linear-Czx4z_fP.js → linear-D1HwcPmT.js} +2 -2
  109. package/webapp/dist/assets/linear-D1HwcPmT.js.map +1 -0
  110. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-CXqQMYCg.js → mindmap-definition-VGOIOE7T-C9bCAYD2.js} +5 -7
  111. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-C9bCAYD2.js.map +1 -0
  112. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  113. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CqDocKnB.js → pieDiagram-ADFJNKIX-CkWs3EqH.js} +8 -8
  114. package/webapp/dist/assets/pieDiagram-ADFJNKIX-CkWs3EqH.js.map +1 -0
  115. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CiWVSFIH.js → quadrantDiagram-AYHSOK5B-lePBdGYd.js} +3 -3
  116. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-lePBdGYd.js.map +1 -0
  117. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CZJEyik8.js → requirementDiagram-UZGBJVZJ-BM_GNlHQ.js} +6 -16
  118. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-BM_GNlHQ.js.map +1 -0
  119. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-Dw75ByKP.js → sankeyDiagram-TZEHDZUN-Z3UUlzwo.js} +2 -2
  120. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-Z3UUlzwo.js.map +1 -0
  121. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-Bb-cjLgg.js → sequenceDiagram-WL72ISMW-BmcsPWXz.js} +201 -601
  122. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BmcsPWXz.js.map +1 -0
  123. package/webapp/dist/assets/{stateDiagram-RAJIS63D-BvpG0ZSP.js → stateDiagram-FKZM4ZOC-THsxiqRA.js} +9 -9
  124. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-THsxiqRA.js.map +1 -0
  125. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-7bxKEt97.js → stateDiagram-v2-4FDKWEC3-B2oIvgOa.js} +5 -5
  126. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-B2oIvgOa.js.map +1 -0
  127. package/webapp/dist/assets/{timeline-definition-YZTLITO2-CRqRYWEl.js → timeline-definition-IT6M3QCI-DRB7VKTt.js} +3 -3
  128. package/webapp/dist/assets/timeline-definition-IT6M3QCI-DRB7VKTt.js.map +1 -0
  129. package/webapp/dist/assets/{treemap-KZPCXAKY-Bu5JpxPM.js → treemap-GDKQZRPO-h6k2E_-V.js} +24 -37
  130. package/webapp/dist/assets/treemap-GDKQZRPO-h6k2E_-V.js.map +1 -0
  131. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-D0U7VqPG.js → xychartDiagram-PRI3JC2R-CeoSM0y_.js} +4 -4
  132. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CeoSM0y_.js.map +1 -0
  133. package/webapp/dist/index.html +2 -2
  134. package/webapp/dist/assets/_basePickBy-LNaSxjvr.js.map +0 -1
  135. package/webapp/dist/assets/_baseUniq-Bj1hx6jk.js.map +0 -1
  136. package/webapp/dist/assets/arc-Bpj1nPA2.js.map +0 -1
  137. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CoXbtvnz.js.map +0 -1
  138. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CIN9vlJ6.js.map +0 -1
  139. package/webapp/dist/assets/c4Diagram-IC4MRINW-C5JZR-oM.js.map +0 -1
  140. package/webapp/dist/assets/channel-D5Xdg9yM.js.map +0 -1
  141. package/webapp/dist/assets/chunk-4BX2VUAB-D4Rve4FO.js.map +0 -1
  142. package/webapp/dist/assets/chunk-55IACEB6-DpabCDXg.js.map +0 -1
  143. package/webapp/dist/assets/chunk-FMBD7UC4-BoBj8MAm.js.map +0 -1
  144. package/webapp/dist/assets/chunk-JSJVCQXG-CEy0qXdN.js.map +0 -1
  145. package/webapp/dist/assets/chunk-KX2RTZJC-CDdtREQb.js.map +0 -1
  146. package/webapp/dist/assets/chunk-NQ4KR5QH-_1ihDJTW.js.map +0 -1
  147. package/webapp/dist/assets/chunk-QZHKN3VN-B4dXlOb4.js.map +0 -1
  148. package/webapp/dist/assets/chunk-WL4C6EOR-C13IEcmo.js.map +0 -1
  149. package/webapp/dist/assets/classDiagram-VBA2DB6C-CFBgFxCH.js.map +0 -1
  150. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CFBgFxCH.js.map +0 -1
  151. package/webapp/dist/assets/clone-TK1nHACc.js.map +0 -1
  152. package/webapp/dist/assets/cose-bilkent-S5V4N54A-BKcU9sie.js.map +0 -1
  153. package/webapp/dist/assets/dagre-KLK3FWXG-h-3iGD6Y.js.map +0 -1
  154. package/webapp/dist/assets/diagram-E7M64L7V-ekBLF-yk.js.map +0 -1
  155. package/webapp/dist/assets/diagram-IFDJBPK2-D_G2oKiI.js.map +0 -1
  156. package/webapp/dist/assets/diagram-P4PSJMXO-27xx1y5D.js.map +0 -1
  157. package/webapp/dist/assets/erDiagram-INFDFZHY-CZSSh9wl.js.map +0 -1
  158. package/webapp/dist/assets/flowDiagram-PKNHOUZH-Bm92lWNi.js.map +0 -1
  159. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-C5VpKam7.js.map +0 -1
  160. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DzPVChwE.js.map +0 -1
  161. package/webapp/dist/assets/graph-DZP1hBZG.js +0 -782
  162. package/webapp/dist/assets/graph-DZP1hBZG.js.map +0 -1
  163. package/webapp/dist/assets/infoDiagram-LFFYTUFH-yRov6uGE.js.map +0 -1
  164. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DFo_y5-j.js +0 -966
  165. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DFo_y5-j.js.map +0 -1
  166. package/webapp/dist/assets/journeyDiagram-4ABVD52K-DFHL6Mn9.js.map +0 -1
  167. package/webapp/dist/assets/kanban-definition-K7BYSVSG-Dn8AcHXb.js.map +0 -1
  168. package/webapp/dist/assets/layout-BdLHhC4z.js.map +0 -1
  169. package/webapp/dist/assets/linear-Czx4z_fP.js.map +0 -1
  170. package/webapp/dist/assets/mindmap-definition-YRQLILUH-CXqQMYCg.js.map +0 -1
  171. package/webapp/dist/assets/pieDiagram-SKSYHLDU-CqDocKnB.js.map +0 -1
  172. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-CiWVSFIH.js.map +0 -1
  173. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-CZJEyik8.js.map +0 -1
  174. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-Dw75ByKP.js.map +0 -1
  175. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-Bb-cjLgg.js.map +0 -1
  176. package/webapp/dist/assets/stateDiagram-RAJIS63D-BvpG0ZSP.js.map +0 -1
  177. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-7bxKEt97.js.map +0 -1
  178. package/webapp/dist/assets/timeline-definition-YZTLITO2-CRqRYWEl.js.map +0 -1
  179. package/webapp/dist/assets/treemap-KZPCXAKY-Bu5JpxPM.js.map +0 -1
  180. package/webapp/dist/assets/vennDiagram-LZ73GAT5-DAB652Qx.js +0 -2487
  181. package/webapp/dist/assets/vennDiagram-LZ73GAT5-DAB652Qx.js.map +0 -1
  182. package/webapp/dist/assets/xychartDiagram-JWTSCODW-D0U7VqPG.js.map +0 -1
@@ -82,7 +82,16 @@ function parseReminderRequest(value) {
82
82
  if (echoback === null) {
83
83
  throw new Error('Invalid app tool reminder request: upsert.echoback must be boolean');
84
84
  }
85
- return { kind: 'upsert', ownerRef, content, meta, position, echoback };
85
+ const renderModeRaw = value['renderMode'];
86
+ const renderMode = renderModeRaw === undefined
87
+ ? undefined
88
+ : renderModeRaw === 'plain' || renderModeRaw === 'markdown'
89
+ ? renderModeRaw
90
+ : null;
91
+ if (renderMode === null) {
92
+ throw new Error('Invalid app tool reminder request: upsert.renderMode must be plain|markdown');
93
+ }
94
+ return { kind: 'upsert', ownerRef, content, meta, position, echoback, renderMode };
86
95
  }
87
96
  throw new Error(`Invalid app tool reminder request kind: ${String(kind)}`);
88
97
  }
@@ -138,7 +147,9 @@ function isReminderState(value) {
138
147
  if (meta !== undefined && !isJsonValue(meta))
139
148
  return false;
140
149
  const echoback = value['echoback'];
141
- return echoback === undefined || typeof echoback === 'boolean';
150
+ const renderMode = value['renderMode'];
151
+ return ((echoback === undefined || typeof echoback === 'boolean') &&
152
+ (renderMode === undefined || renderMode === 'plain' || renderMode === 'markdown'));
142
153
  }
143
154
  function isReminderApplyResult(value) {
144
155
  if (!isRecord(value))
@@ -46,7 +46,15 @@ function parseReminderState(v, at) {
46
46
  const echoback = echobackRaw === undefined ? undefined : typeof echobackRaw === 'boolean' ? echobackRaw : null;
47
47
  if (echoback === null)
48
48
  throw new Error(`Invalid ${at}.echoback: must be boolean`);
49
- return { content, meta: metaRaw, echoback };
49
+ const renderModeRaw = v['renderMode'];
50
+ const renderMode = renderModeRaw === undefined
51
+ ? undefined
52
+ : renderModeRaw === 'plain' || renderModeRaw === 'markdown'
53
+ ? renderModeRaw
54
+ : null;
55
+ if (renderMode === null)
56
+ throw new Error(`Invalid ${at}.renderMode: must be plain|markdown`);
57
+ return { content, meta: metaRaw, echoback, renderMode };
50
58
  }
51
59
  function parseReminderApplyRequest(v, at) {
52
60
  if (!isRecord(v))
@@ -75,6 +83,14 @@ function parseReminderApplyRequest(v, at) {
75
83
  const echoback = echobackRaw === undefined ? undefined : typeof echobackRaw === 'boolean' ? echobackRaw : null;
76
84
  if (echoback === null)
77
85
  throw new Error(`Invalid ${at}.echoback: must be boolean`);
86
+ const renderModeRaw = v['renderMode'];
87
+ const renderMode = renderModeRaw === undefined
88
+ ? undefined
89
+ : renderModeRaw === 'plain' || renderModeRaw === 'markdown'
90
+ ? renderModeRaw
91
+ : null;
92
+ if (renderMode === null)
93
+ throw new Error(`Invalid ${at}.renderMode: must be plain|markdown`);
78
94
  return {
79
95
  kind: 'upsert',
80
96
  ownerRef,
@@ -82,6 +98,7 @@ function parseReminderApplyRequest(v, at) {
82
98
  meta: metaRaw,
83
99
  position,
84
100
  echoback,
101
+ renderMode,
85
102
  };
86
103
  }
87
104
  if (kind === 'delete') {
@@ -38,6 +38,7 @@ function cloneReminderSnapshot(snapshot) {
38
38
  meta: snapshot.meta,
39
39
  echoback: snapshot.echoback,
40
40
  scope: snapshot.scope ?? 'dialog',
41
+ renderMode: snapshot.renderMode ?? 'markdown',
41
42
  createdAt: snapshot.createdAt,
42
43
  priority: snapshot.priority,
43
44
  });
package/dist/dialog.d.ts CHANGED
@@ -294,6 +294,7 @@ export declare abstract class Dialog {
294
294
  get activeGenSeq(): number;
295
295
  get activeGenSeqOrUndefined(): number | undefined;
296
296
  get activeGenCourseOrUndefined(): number | undefined;
297
+ get hasActiveGeneration(): boolean;
297
298
  /**
298
299
  * Check if generation has started for the current course.
299
300
  * Used to ensure subdialog_final_response_evt arrives after parent events.
package/dist/dialog.js CHANGED
@@ -374,6 +374,7 @@ class Dialog {
374
374
  meta,
375
375
  echoback: options?.echoback,
376
376
  scope: options?.scope ?? 'dialog',
377
+ renderMode: options?.renderMode,
377
378
  });
378
379
  const insertIndex = position !== undefined ? position : this.reminders.length;
379
380
  if (insertIndex < 0 || insertIndex > this.reminders.length) {
@@ -405,6 +406,7 @@ class Dialog {
405
406
  scope: oldReminder.scope,
406
407
  createdAt: oldReminder.createdAt,
407
408
  priority: oldReminder.priority,
409
+ renderMode: options?.renderMode ?? oldReminder.renderMode,
408
410
  });
409
411
  this.reminders[index] = updatedReminder;
410
412
  this.touchReminders();
@@ -479,6 +481,7 @@ class Dialog {
479
481
  scope: reminder.scope,
480
482
  createdAt: reminder.createdAt,
481
483
  priority: reminder.priority,
484
+ renderMode: reminder.renderMode,
482
485
  });
483
486
  const contentChanged = updatedReminder.content !== reminder.content;
484
487
  const metaChanged = updatedReminder.meta !== reminder.meta;
@@ -539,8 +542,10 @@ class Dialog {
539
542
  content: r.content,
540
543
  meta: r.meta,
541
544
  reminder_id: r.id,
545
+ renderRevision: (0, tool_1.computeReminderRenderRevision)(r),
542
546
  echoback: (0, tool_1.reminderEchoBackEnabled)(r),
543
547
  scope: r.scope,
548
+ renderMode: r.renderMode ?? 'markdown',
544
549
  }));
545
550
  // Emit full_reminders_update event with complete reminder list including metadata
546
551
  const fullRemindersEvt = {
@@ -581,6 +586,9 @@ class Dialog {
581
586
  get activeGenCourseOrUndefined() {
582
587
  return this._activeGenCourse;
583
588
  }
589
+ get hasActiveGeneration() {
590
+ return this._activeGenCourse !== undefined;
591
+ }
584
592
  /**
585
593
  * Check if generation has started for the current course.
586
594
  * Used to ensure subdialog_final_response_evt arrives after parent events.
@@ -246,9 +246,9 @@ flowchart TD
246
246
  **Sideline delivery rule (normative)**:
247
247
 
248
248
  - If a sideline dialog has completed all assigned goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
249
- - Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, and the localized Chinese completion marker in Chinese work language).
249
+ - Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, `【最终完成】` in Chinese work language).
250
250
  - If any goal is incomplete, the dialog is blocked, or critical context is missing, it MUST issue `tellaskBack({ tellaskContent: "..." })` to request clarification or next-step confirmation before proceeding.
251
- - **FBR exception**: FBR sideline dialogs are tellask-free (no `tellaskBack`); they must list missing context and return.
251
+ - **FBR exception**: FBR sideline dialogs forbid all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`); they must list missing context and return.
252
252
 
253
253
  **Inter-dialog transfer and markers (normative)**:
254
254
 
@@ -259,9 +259,10 @@ flowchart TD
259
259
  - Regular completed sideline reply: `【Completed】`
260
260
  - FBR sideline reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
261
261
  - Chinese work language:
262
- - Ask-back reply: `【TellaskBack】`
263
- - Regular completed sideline reply: `【Completed】`
264
- - FBR sideline reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
262
+ - Ask-back reply: `【回问诉请】`
263
+ - Regular completed sideline reply: `【最终完成】`
264
+ - FBR sideline reply: `【FBR-直接回复】` or `【FBR-仅推理】`
265
+ - If the requester defines a “reply/delivery format” inside the tellask body, keep it to the business delivery structure; do not require responder-side hand-written markers, because runtime injects those markers automatically.
265
266
  - Source-dialog model raw is naturally preserved in source-dialog persistence; inter-dialog transfer must not rewrite or overwrite that source raw.
266
267
  - Template-wrapped transfer is allowed: a model output from one dialog may be embedded into a runtime template and sent as the body to another dialog.
267
268
 
@@ -242,7 +242,7 @@ flowchart TD
242
242
 
243
243
  - 只有当所有目标完成时,支线对话才可直接正常回复诉请者对话。
244
244
  - 若任何目标未完成或关键信息缺失,必须先用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者对话再继续。
245
- - **FBR 例外**:FBR 支线对话禁止任何诉请(包括 `tellaskBack`),只能列出缺口与阻塞原因并直接回复。
245
+ - **FBR 例外**:FBR 支线对话禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`),只能列出缺口与阻塞原因并直接回复。
246
246
 
247
247
  **跨对话传递与标记(强制)**:
248
248
 
@@ -256,6 +256,7 @@ flowchart TD
256
256
  - 回问诉请回贴:`【TellaskBack】`
257
257
  - 常规支线完成回贴:`【Completed】`
258
258
  - FBR 回贴:`【FBR-Direct Reply】` 或 `【FBR-Reasoning Only】`
259
+ - 若诉请方在正文中定义“回贴格式/交付格式”,只写业务交付结构即可;不得要求被诉请者手写任何标记,因为这些标记由运行时自动注入。
259
260
  - 源对话的模型原始输出(raw)天然保留在源对话持久记录中;跨对话传递不得改写或覆盖该源 raw。
260
261
  - 允许将“某对话的模型原文”拼接进运行时模板后,作为传递到另一对话的正文(即模板化传递是规范路径)。
261
262
 
package/dist/docs/fbr.md CHANGED
@@ -126,7 +126,7 @@ If the model attempts any other tool/function call, runtime MUST hard-reject it
126
126
 
127
127
  ### 4.3 Tellask restriction: none allowed
128
128
 
129
- FBR sideline dialogs MUST NOT issue any teammate Tellasks (including `tellaskBack({ tellaskContent: "..." })` or `askHuman({ tellaskContent: "..." })`).
129
+ FBR sideline dialogs MUST NOT issue any tellask call (including `tellaskBack({ tellaskContent: "..." })`, `tellask({ ... })`, `tellaskSessionless({ ... })`, or `askHuman({ tellaskContent: "..." })`).
130
130
  If critical context is missing, the FBR sideline should **list the missing items** and why they block reasoning, then return.
131
131
 
132
132
  ### 4.4 Output contract (easy to distill)
@@ -122,7 +122,7 @@ FBR 支线对话的 system prompt 必须明确包含(措辞可不同,但语
122
122
 
123
123
  ### 4.3 诉请限制:一律禁止
124
124
 
125
- FBR 支线对话不得发起任何队友诉请(包括 `tellaskBack({ tellaskContent: "..." })` 或 `askHuman({ tellaskContent: "..." })`)。
125
+ FBR 支线对话不得发起任何 tellask 调用(包括 `tellaskBack({ tellaskContent: "..." })`、`tellask({ ... })`、`tellaskSessionless({ ... })` 或 `askHuman({ tellaskContent: "..." })`)。
126
126
  若关键上下文缺失,应**列出缺口与阻塞原因**,然后直接回复。
127
127
 
128
128
  ### 4.4 输出契约(在 FBR 内部完成去噪)
@@ -423,9 +423,12 @@ servers:
423
423
  # Tool name transforms (optional)
424
424
  transform: []
425
425
 
426
- # Optional per-toolset manual shown to agents
426
+ # Optional manual information
427
+ # - contentFile: formal runtime manual for man({ "toolsetId": "<serverId>" })
428
+ # - content/sections: extra inline team-management guidance
427
429
  # (missing manual does NOT make the toolset unavailable)
428
430
  manual:
431
+ contentFile: ".minds/manuals/<serverId>"
429
432
  content: "What this MCP toolset is for"
430
433
  sections:
431
434
  - title: "When To Use"
@@ -385,15 +385,15 @@ Notes:
385
385
  - MCP tool names are global across all toolsets (built-in + MCP). Collisions cause tools to be
386
386
  skipped and should surface via Problems + logs.
387
387
  - `mcp_admin` is a built-in toolset that contains `mcp_restart` (best-effort per-server restart).
388
- - Optional per-toolset manual can live in `.minds/mcp.yaml` at `servers.<serverId>.manual` using:
389
- - `content`: overview text
390
- - `sections`: chapterized guidance (`[{ title, content }]` or `{ "<title>": "<content>" }`)
388
+ - Optional manual information can live in `.minds/mcp.yaml` at `servers.<serverId>.manual`:
389
+ - `contentFile`: the topic-file directory prefix for the formal runtime manual; the final `man({ "toolsetId": "<serverId>" })` content shown to the LLM is loaded from here
390
+ - `content` / `sections`: inline team-management guidance shown in the `team_mgmt` MCP chapter (`sections` supports `[{ title, content }]` or `{ "<title>": "<content>" }`)
391
391
  - Missing manual does **not** mean the toolset is unavailable; it means team-manager documentation
392
392
  is incomplete. Agents should continue by reading each tool’s own description/arguments.
393
393
  - Team-manager recommendation: after MCP config validation passes, carefully read each exposed tool
394
- description, discuss intended rtws usage with the human user, then write
395
- `servers.<serverId>.manual` that captures typical usage patterns, primary intent directions, and
396
- unavailable-case business handling rules.
394
+ description, discuss intended rtws usage with the human user, then write the formal manual into
395
+ `manual.contentFile`; if extra team-management interpretation is still useful, add inline
396
+ `content + sections` alongside it.
397
397
  - Use a semi-structured chapter shape: high-value sections often include `When To Use`,
398
398
  `Guardrails`, and `Business Handling When Unavailable`, but do not force every toolset into one
399
399
  fixed template. Start from the real business goal, then decide which sections deserve depth,
@@ -431,8 +431,9 @@ servers:
431
431
  # Tool name transforms
432
432
  transform: [] # optional
433
433
 
434
- # Optional toolset manual for agents
434
+ # Optional manual information
435
435
  manual:
436
+ contentFile: ".minds/manuals/<serverId>" # formal runtime manual for man({ "toolsetId": "<serverId>" })
436
437
  content: "What this MCP toolset is for"
437
438
  sections:
438
439
  - title: "When To Use"
@@ -322,11 +322,11 @@ members:
322
322
 
323
323
  - MCP 工具名称在所有工具集(内置 + MCP)中是全局的。冲突导致工具被跳过,应通过问题 + 日志暴露
324
324
  - `mcp_admin` 是一个内置工具集,包含 `mcp_restart`(每个服务器最佳努力重启)
325
- - 可选手册:可在 `.minds/mcp.yaml` 的 `servers.<serverId>.manual` 为每个 MCP toolset 提供手册:
326
- - `content`:总说明
327
- - `sections`:章节化指导(`[{ title, content }]` 或 `{ "<title>": "<content>" }`)
325
+ - 可选手册:可在 `.minds/mcp.yaml` 的 `servers.<serverId>.manual` 提供手册相关信息:
326
+ - `contentFile`:正式 runtime 手册的 topic 文件目录前缀;`man({ "toolsetId": "<serverId>" })` 最终给 LLM 看的正文从这里加载
327
+ - `content` / `sections`:补充给 `team_mgmt` MCP 章节看的 inline 团队管理说明(`sections` 支持 `[{ title, content }]` 或 `{ "<title>": "<content>" }`)
328
328
  - 没有手册 **不代表** 该 toolset 不可用;这只表示团队管理文档覆盖不足。智能体应继续依据每个工具自身的 description/参数来使用。
329
- - 建议团队管理者在 MCP 配置验证通过后:先精读该 server 暴露的每个工具说明,再与人类用户讨论本 rtws 的使用意图,最后把“典型用法 + 主要意图方向 + 不可用时业务处置规约”沉淀为 `servers.<serverId>.manual`。
329
+ - 建议团队管理者在 MCP 配置验证通过后:先精读该 server 暴露的每个工具说明,再与人类用户讨论本 rtws 的使用意图,然后把正式手册沉淀到 `manual.contentFile`;如仍需额外写团队管理层解释,再补 inline `content + sections`。
330
330
  - 章节组织建议采用“半结构化”:可优先考虑 `何时使用`、`安全边界`、`不可用时业务处置` 这类高价值章节,但不要求所有 toolset 都照抄同一模板。应从真实业务目标出发,决定哪些章节需要展开、哪些只需一句话、哪些可以合并或改名成更贴切的标题。
331
331
  - 对每个 MCP toolset,建议刻意写明“不可用时业务处置规约”,至少回答:
332
332
  - 当前 toolset 暂不可达时,是否必须找协调者/专员接手
@@ -360,8 +360,9 @@ servers:
360
360
  # 工具名称转换
361
361
  transform: [] # 可选
362
362
 
363
- # 可选:给智能体看的 toolset 手册
363
+ # 可选:手册相关信息
364
364
  manual:
365
+ contentFile: ".minds/manuals/<serverId>" # 正式 runtime 手册(供 man({ "toolsetId": "<serverId>" }) 读取)
365
366
  content: "该 MCP toolset 的用途说明"
366
367
  sections:
367
368
  - title: "何时使用"
@@ -109,19 +109,19 @@ That is a workflow break. The model should send the Tellask directly.
109
109
  - Regular completed sideline reply: `【Completed】`
110
110
  - FBR reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
111
111
  - Chinese work language:
112
- - Ask-back reply: `【TellaskBack】`
113
- - Regular completed sideline reply: `【Completed】`
114
- - FBR reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
115
- - If the requester defines a “reply format” in tellask body, it must explicitly say “no hand-written markers; Dominds auto-injects markers”; do not require responder-side hand-written markers.
112
+ - Ask-back reply: `【回问诉请】`
113
+ - Regular completed sideline reply: `【最终完成】`
114
+ - FBR reply: `【FBR-直接回复】` or `【FBR-仅推理】`
115
+ - If the requester defines a “reply/delivery format” in tellask body, keep it to the business delivery structure; do not require responder-side hand-written markers, because Dominds runtime injects those markers automatically.
116
116
  - Source-dialog model raw is naturally preserved in source-dialog persistence; inter-dialog transfer must not rewrite or overwrite that source raw.
117
117
  - Template-wrapped transfer is allowed: model output from one dialog can be embedded into a runtime template and sent as another dialog body.
118
118
 
119
119
  **Sideline delivery rule**:
120
120
 
121
121
  - If a sideline dialog has completed all goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
122
- - Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, and the localized Chinese completion marker in Chinese work language).
122
+ - Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, `【最终完成】` in Chinese work language).
123
123
  - If any goal is incomplete, the dialog is blocked, or critical context is missing, it MUST issue `tellaskBack({ tellaskContent: "..." })` before proceeding; do not post plain-text intermediate status updates while unfinished.
124
- - **FBR exception**: FBR forbids all tellasks (including `tellaskBack` / `askHuman`); list missing context + reasoning and return.
124
+ - **FBR exception**: FBR forbids all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`); list missing context + reasoning and return.
125
125
  - If a human user inserts a message or asks a follow-up in the sideline: just reply normally; no need to report back to the upstream requester.
126
126
 
127
127
  Note: no extra "Status: ..." line is required; the first-line marker is the stage reminder.
@@ -109,7 +109,7 @@
109
109
  - 回问诉请回贴:`【TellaskBack】`
110
110
  - 常规支线完成回贴:`【Completed】`
111
111
  - FBR 回贴:`【FBR-Direct Reply】` 或 `【FBR-Reasoning Only】`
112
- - 若诉请方在正文中定义“回贴格式”,必须写明“禁止手写标记,由 Dominds 自动注入”;不得要求被诉请者手写任何标记。
112
+ - 若诉请方在正文中定义“回贴格式/交付格式”,只写业务交付结构即可;不得要求被诉请者手写任何标记,这些标记由 Dominds 运行时自动注入。
113
113
  - 源对话模型原始输出(raw)天然保留在源对话持久记录中;跨对话传递不得改写或覆盖该源 raw。
114
114
  - 允许将“某对话的模型原文”拼接进运行时模板后,作为传递到另一对话的正文(模板化传递是规范路径)。
115
115
 
@@ -117,7 +117,7 @@
117
117
 
118
118
  - 只有当所有目标完成时,支线对话才可直接正常回复诉请者对话(直接发正文即可,不需要调用 tellaskBack;运行时自动注入完成标记)。
119
119
  - 若任何目标未完成或关键信息缺失,必须先用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者对话再继续;不得发送普通文本中间汇报。
120
- - **FBR 例外**:FBR 禁止任何诉请(包括 `tellaskBack` / `askHuman`);只列缺口 + 推理与摘要并直接回复。
120
+ - **FBR 例外**:FBR 禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`);只列缺口 + 推理与摘要并直接回复。
121
121
  - 若人类用户在支线对话中插入消息或补问:直接正常回复,不需要向诉请者汇报。
122
122
 
123
123
  说明:不需要额外的 “Status: …” 行;首行标记即为阶段提醒。
@@ -0,0 +1,33 @@
1
+ export type McpToolsetManualSection = {
2
+ title: string;
3
+ content: string;
4
+ };
5
+ export type McpToolsetManual = {
6
+ content?: string;
7
+ contentFile?: string;
8
+ sections: ReadonlyArray<McpToolsetManualSection>;
9
+ };
10
+ export type McpToolsetManualState = {
11
+ kind: 'missing';
12
+ } | {
13
+ kind: 'invalid';
14
+ errorText: string;
15
+ } | {
16
+ kind: 'present';
17
+ manual: McpToolsetManual;
18
+ };
19
+ export type McpToolsetManualByServer = {
20
+ manualByServerId: ReadonlyMap<string, McpToolsetManual>;
21
+ invalidByServerId: ReadonlyMap<string, string>;
22
+ warningTextByServerId: ReadonlyMap<string, string>;
23
+ };
24
+ export declare function emptyMcpToolsetManualByServer(): McpToolsetManualByServer;
25
+ export declare function mcpToolsetManualProblemPrefix(serverId: string): string;
26
+ export declare function mcpWorkspaceManualProblemPrefix(): string;
27
+ export declare function parseMcpManualByServer(rawText: string): McpToolsetManualByServer;
28
+ export declare function reconcileMcpToolsetManualProblems(params: {
29
+ serverIds: ReadonlyArray<string>;
30
+ manualInfo: McpToolsetManualByServer;
31
+ measureRenderedWorkspaceMcpTopicRawChars: () => Promise<number>;
32
+ workspaceManualPath: string;
33
+ }): Promise<void>;