dominds 1.25.0 → 1.25.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 (230) hide show
  1. package/README.md +4 -3
  2. package/README.zh.md +4 -3
  3. package/dist/dialog-display-state.d.ts +3 -3
  4. package/dist/dialog-display-state.js +12 -8
  5. package/dist/dialog.d.ts +3 -3
  6. package/dist/dialog.js +42 -20
  7. package/dist/docs/design.md +4 -0
  8. package/dist/docs/design.zh.md +4 -0
  9. package/dist/docs/dlg-drive-algo.zh.md +5 -0
  10. package/dist/docs/roadmap.md +2 -0
  11. package/dist/docs/roadmap.zh.md +2 -0
  12. package/dist/llm/gen/mock.d.ts +2 -2
  13. package/dist/llm/gen/mock.js +2 -2
  14. package/dist/llm/kernel-driver/drive.js +41 -14
  15. package/dist/llm/kernel-driver/engine.d.ts +1 -1
  16. package/dist/llm/kernel-driver/idle-reminder-wake.js +1 -1
  17. package/dist/llm/kernel-driver/sideDialog.d.ts +1 -1
  18. package/dist/llm/kernel-driver/sideDialog.js +7 -3
  19. package/dist/llm/kernel-driver/tellask-special.js +1 -6
  20. package/dist/llm/kernel-driver/types.d.ts +1 -1
  21. package/dist/minds/system-prompt-parts.js +4 -4
  22. package/dist/persistence.d.ts +1 -7
  23. package/dist/persistence.js +186 -149
  24. package/dist/priming.js +116 -35
  25. package/dist/runtime/driver-messages.d.ts +1 -1
  26. package/dist/runtime/driver-messages.js +37 -19
  27. package/dist/server/api-routes.js +18 -0
  28. package/dist/server/server-core.d.ts +1 -0
  29. package/dist/server/server-core.js +11 -0
  30. package/dist/server/websocket-handler.js +2 -1
  31. package/dist/shared-reminders.d.ts +11 -3
  32. package/dist/shared-reminders.js +62 -34
  33. package/dist/team.js +4 -1
  34. package/dist/tool.d.ts +1 -1
  35. package/dist/tool.js +1 -1
  36. package/dist/tools/app-reminders.js +8 -2
  37. package/dist/tools/builtins.js +30 -0
  38. package/dist/tools/ctrl.js +34 -109
  39. package/dist/tools/fs.d.ts +2 -0
  40. package/dist/tools/fs.js +281 -2
  41. package/dist/tools/os.d.ts +11 -0
  42. package/dist/tools/os.js +26 -15
  43. package/dist/tools/picture.d.ts +1 -0
  44. package/dist/tools/picture.js +64 -1
  45. package/dist/tools/prompts/codex_inspect_and_patch_tools/en/tools.md +5 -0
  46. package/dist/tools/prompts/codex_inspect_and_patch_tools/zh/tools.md +5 -0
  47. package/dist/tools/prompts/control/en/errors.md +5 -19
  48. package/dist/tools/prompts/control/en/index.md +5 -4
  49. package/dist/tools/prompts/control/en/principles.md +23 -19
  50. package/dist/tools/prompts/control/en/scenarios.md +17 -11
  51. package/dist/tools/prompts/control/en/tools.md +4 -6
  52. package/dist/tools/prompts/control/zh/errors.md +5 -19
  53. package/dist/tools/prompts/control/zh/index.md +5 -4
  54. package/dist/tools/prompts/control/zh/principles.md +22 -19
  55. package/dist/tools/prompts/control/zh/scenarios.md +17 -11
  56. package/dist/tools/prompts/control/zh/tools.md +4 -6
  57. package/dist/tools/prompts/fs_read/en/errors.md +6 -0
  58. package/dist/tools/prompts/fs_read/en/index.md +17 -0
  59. package/dist/tools/prompts/fs_read/en/principles.md +5 -0
  60. package/dist/tools/prompts/fs_read/en/scenarios.md +3 -0
  61. package/dist/tools/prompts/fs_read/en/tools.md +11 -0
  62. package/dist/tools/prompts/fs_read/zh/errors.md +6 -0
  63. package/dist/tools/prompts/fs_read/zh/index.md +17 -0
  64. package/dist/tools/prompts/fs_read/zh/principles.md +5 -0
  65. package/dist/tools/prompts/fs_read/zh/scenarios.md +3 -0
  66. package/dist/tools/prompts/fs_read/zh/tools.md +11 -0
  67. package/dist/tools/prompts/os/en/index.md +1 -1
  68. package/dist/tools/prompts/os/en/principles.md +1 -1
  69. package/dist/tools/prompts/os/en/scenarios.md +21 -0
  70. package/dist/tools/prompts/os/en/tools.md +6 -0
  71. package/dist/tools/prompts/os/zh/index.md +1 -1
  72. package/dist/tools/prompts/os/zh/principles.md +1 -1
  73. package/dist/tools/prompts/os/zh/scenarios.md +21 -0
  74. package/dist/tools/prompts/os/zh/tools.md +6 -0
  75. package/dist/tools/prompts/personal_memory/en/index.md +1 -1
  76. package/dist/tools/prompts/personal_memory/en/principles.md +2 -2
  77. package/dist/tools/prompts/personal_memory/zh/index.md +1 -1
  78. package/dist/tools/prompts/personal_memory/zh/principles.md +2 -2
  79. package/dist/tools/registry.d.ts +6 -0
  80. package/dist/tools/ripgrep.d.ts +5 -0
  81. package/dist/tools/ripgrep.js +482 -1
  82. package/dist/tools/team_mgmt.js +8 -8
  83. package/dist/tools/txt.d.ts +34 -0
  84. package/dist/tools/txt.js +221 -1
  85. package/package.json +3 -3
  86. package/webapp/dist/assets/{_basePickBy-ZLV93S3E.js → _basePickBy-CbWZ8qnS.js} +3 -3
  87. package/webapp/dist/assets/_basePickBy-CbWZ8qnS.js.map +1 -0
  88. package/webapp/dist/assets/{_baseUniq-D0wSOJ06.js → _baseUniq-IY-Vfzx1.js} +2 -2
  89. package/webapp/dist/assets/_baseUniq-IY-Vfzx1.js.map +1 -0
  90. package/webapp/dist/assets/{arc-BHclbMTS.js → arc--U2Vks6y.js} +2 -2
  91. package/webapp/dist/assets/arc--U2Vks6y.js.map +1 -0
  92. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CK99gE_D.js → architectureDiagram-VXUJARFQ-DpryGqjy.js} +8 -26
  93. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DpryGqjy.js.map +1 -0
  94. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-fE5MBTEU.js → blockDiagram-VD42YOAC-TTufCfiE.js} +170 -187
  95. package/webapp/dist/assets/blockDiagram-VD42YOAC-TTufCfiE.js.map +1 -0
  96. package/webapp/dist/assets/{c4Diagram-IC4MRINW-BSLyPyoU.js → c4Diagram-YG6GDRKO-B4RPsw5H.js} +4 -4
  97. package/webapp/dist/assets/c4Diagram-YG6GDRKO-B4RPsw5H.js.map +1 -0
  98. package/webapp/dist/assets/{channel-DSvMpp-a.js → channel-DAtGYJHZ.js} +2 -2
  99. package/webapp/dist/assets/channel-DAtGYJHZ.js.map +1 -0
  100. package/webapp/dist/assets/{chunk-4BX2VUAB-OXEX170k.js → chunk-4BX2VUAB-JtO__vAF.js} +2 -2
  101. package/webapp/dist/assets/chunk-4BX2VUAB-JtO__vAF.js.map +1 -0
  102. package/webapp/dist/assets/{chunk-55IACEB6-BFQ_spQD.js → chunk-55IACEB6-JMRC8yG1.js} +2 -2
  103. package/webapp/dist/assets/chunk-55IACEB6-JMRC8yG1.js.map +1 -0
  104. package/webapp/dist/assets/{chunk-WL4C6EOR-PtH-blkK.js → chunk-B4BG7PRW-BDIpf8Iz.js} +121 -171
  105. package/webapp/dist/assets/chunk-B4BG7PRW-BDIpf8Iz.js.map +1 -0
  106. package/webapp/dist/assets/{chunk-NQ4KR5QH-B_ZhWMXR.js → chunk-DI55MBZ5-j9B4rifK.js} +7 -9
  107. package/webapp/dist/assets/chunk-DI55MBZ5-j9B4rifK.js.map +1 -0
  108. package/webapp/dist/assets/{chunk-FMBD7UC4-CbQ2BBPs.js → chunk-FMBD7UC4-DFXKLjHC.js} +2 -2
  109. package/webapp/dist/assets/chunk-FMBD7UC4-DFXKLjHC.js.map +1 -0
  110. package/webapp/dist/assets/{chunk-KX2RTZJC-BMd-daMY.js → chunk-QN33PNHL-BKzkeJ-b.js} +2 -2
  111. package/webapp/dist/assets/chunk-QN33PNHL-BKzkeJ-b.js.map +1 -0
  112. package/webapp/dist/assets/{chunk-QZHKN3VN-Cbf92xIw.js → chunk-QZHKN3VN-DiZd3UNl.js} +2 -2
  113. package/webapp/dist/assets/chunk-QZHKN3VN-DiZd3UNl.js.map +1 -0
  114. package/webapp/dist/assets/{chunk-JSJVCQXG-C4P1mjCL.js → chunk-TZMSLE5B-BaE4C244.js} +6 -14
  115. package/webapp/dist/assets/chunk-TZMSLE5B-BaE4C244.js.map +1 -0
  116. package/webapp/dist/assets/{classDiagram-VBA2DB6C-Dc3ncaD0.js → classDiagram-2ON5EDUG-CNF8ZohD.js} +6 -7
  117. package/webapp/dist/assets/classDiagram-2ON5EDUG-CNF8ZohD.js.map +1 -0
  118. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Dc3ncaD0.js → classDiagram-v2-WZHVMYZB-CNF8ZohD.js} +6 -7
  119. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-CNF8ZohD.js.map +1 -0
  120. package/webapp/dist/assets/{clone-E9Ad85BC.js → clone-Nq0Ko0Gv.js} +2 -2
  121. package/webapp/dist/assets/clone-Nq0Ko0Gv.js.map +1 -0
  122. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-nj0o74.js → cose-bilkent-S5V4N54A-uHPLSeKv.js} +2 -2
  123. package/webapp/dist/assets/cose-bilkent-S5V4N54A-uHPLSeKv.js.map +1 -0
  124. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  125. package/webapp/dist/assets/{dagre-KLK3FWXG-CyJYNIbm.js → dagre-6UL2VRFP-C1awWpU3.js} +7 -7
  126. package/webapp/dist/assets/dagre-6UL2VRFP-C1awWpU3.js.map +1 -0
  127. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  128. package/webapp/dist/assets/{diagram-E7M64L7V-C8eweQ7b.js → diagram-PSM6KHXK-Bf69p76M.js} +10 -10
  129. package/webapp/dist/assets/diagram-PSM6KHXK-Bf69p76M.js.map +1 -0
  130. package/webapp/dist/assets/{diagram-IFDJBPK2-DMdygRl0.js → diagram-QEK2KX5R-Bvlbx8Jp.js} +8 -9
  131. package/webapp/dist/assets/diagram-QEK2KX5R-Bvlbx8Jp.js.map +1 -0
  132. package/webapp/dist/assets/{diagram-P4PSJMXO-BQDZHb0a.js → diagram-S2PKOQOG-CGjGalBu.js} +8 -8
  133. package/webapp/dist/assets/diagram-S2PKOQOG-CGjGalBu.js.map +1 -0
  134. package/webapp/dist/assets/{erDiagram-INFDFZHY-C1HaXN6E.js → erDiagram-Q2GNP2WA-Ds3qhwkG.js} +75 -96
  135. package/webapp/dist/assets/erDiagram-Q2GNP2WA-Ds3qhwkG.js.map +1 -0
  136. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-24nNqQyo.js → flowDiagram-NV44I4VS-B1wDG_l5.js} +81 -98
  137. package/webapp/dist/assets/flowDiagram-NV44I4VS-B1wDG_l5.js.map +1 -0
  138. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BWPOFaLV.js → ganttDiagram-JELNMOA3-BwuYt2bO.js} +3 -28
  139. package/webapp/dist/assets/ganttDiagram-JELNMOA3-BwuYt2bO.js.map +1 -0
  140. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D7_L-p_Y.js → gitGraphDiagram-V2S2FVAM-B2Tw773z.js} +46 -38
  141. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-B2Tw773z.js.map +1 -0
  142. package/webapp/dist/assets/graph-CS_H7jBi.js +425 -0
  143. package/webapp/dist/assets/graph-CS_H7jBi.js.map +1 -0
  144. package/webapp/dist/assets/{index-CDCDAfqP.js → index-arD81Nnh.js} +1086 -1044
  145. package/webapp/dist/assets/{index-CDCDAfqP.js.map → index-arD81Nnh.js.map} +1 -1
  146. package/webapp/dist/assets/{index-BQoNJEGT.css → index-yycTJNYb.css} +1 -1
  147. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CvaBM5j6.js → infoDiagram-HS3SLOUP-C9_JKYhm.js} +7 -7
  148. package/webapp/dist/assets/infoDiagram-HS3SLOUP-C9_JKYhm.js.map +1 -0
  149. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  150. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-TQR6_teO.js → journeyDiagram-XKPGCS4Q-BhZggYOL.js} +5 -5
  151. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BhZggYOL.js.map +1 -0
  152. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-B-BOuC-U.js → kanban-definition-3W4ZIXB7-B-R2Xm4Y.js} +3 -5
  153. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-B-R2Xm4Y.js.map +1 -0
  154. package/webapp/dist/assets/{layout-B8yqIqbx.js → layout-BzMatxDa.js} +5 -5
  155. package/webapp/dist/assets/layout-BzMatxDa.js.map +1 -0
  156. package/webapp/dist/assets/{linear-CoLfiZKK.js → linear-BuuJkw_U.js} +2 -2
  157. package/webapp/dist/assets/linear-BuuJkw_U.js.map +1 -0
  158. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-P70BMIHI.js → mindmap-definition-VGOIOE7T-BR7oDKBR.js} +5 -7
  159. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BR7oDKBR.js.map +1 -0
  160. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  161. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DsS_4dTB.js → pieDiagram-ADFJNKIX--QWeT2vZ.js} +8 -8
  162. package/webapp/dist/assets/pieDiagram-ADFJNKIX--QWeT2vZ.js.map +1 -0
  163. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DoM9PEq-.js → quadrantDiagram-AYHSOK5B-BpqtmN3r.js} +3 -3
  164. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-BpqtmN3r.js.map +1 -0
  165. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bn3lYMMI.js → requirementDiagram-UZGBJVZJ-CIXjIi4F.js} +6 -16
  166. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-CIXjIi4F.js.map +1 -0
  167. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-97kCegRT.js → sankeyDiagram-TZEHDZUN-DJIt7SRz.js} +2 -2
  168. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-DJIt7SRz.js.map +1 -0
  169. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DXqjQjf6.js → sequenceDiagram-WL72ISMW-BpDK1ROT.js} +201 -601
  170. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BpDK1ROT.js.map +1 -0
  171. package/webapp/dist/assets/{stateDiagram-RAJIS63D-DQcTPKWP.js → stateDiagram-FKZM4ZOC-BoKGfmHf.js} +9 -9
  172. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BoKGfmHf.js.map +1 -0
  173. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DHmxRVJn.js → stateDiagram-v2-4FDKWEC3--haXC2JK.js} +5 -5
  174. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3--haXC2JK.js.map +1 -0
  175. package/webapp/dist/assets/{timeline-definition-YZTLITO2-BlovQQ4B.js → timeline-definition-IT6M3QCI-BmSg3Hjf.js} +3 -3
  176. package/webapp/dist/assets/timeline-definition-IT6M3QCI-BmSg3Hjf.js.map +1 -0
  177. package/webapp/dist/assets/{treemap-KZPCXAKY-CGu93c9S.js → treemap-GDKQZRPO-D9OuyDVA.js} +24 -37
  178. package/webapp/dist/assets/treemap-GDKQZRPO-D9OuyDVA.js.map +1 -0
  179. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BKa1DxVq.js → xychartDiagram-PRI3JC2R-CVqSvO_S.js} +4 -4
  180. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CVqSvO_S.js.map +1 -0
  181. package/webapp/dist/index.html +2 -2
  182. package/webapp/dist/assets/_basePickBy-ZLV93S3E.js.map +0 -1
  183. package/webapp/dist/assets/_baseUniq-D0wSOJ06.js.map +0 -1
  184. package/webapp/dist/assets/arc-BHclbMTS.js.map +0 -1
  185. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CK99gE_D.js.map +0 -1
  186. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-fE5MBTEU.js.map +0 -1
  187. package/webapp/dist/assets/c4Diagram-IC4MRINW-BSLyPyoU.js.map +0 -1
  188. package/webapp/dist/assets/channel-DSvMpp-a.js.map +0 -1
  189. package/webapp/dist/assets/chunk-4BX2VUAB-OXEX170k.js.map +0 -1
  190. package/webapp/dist/assets/chunk-55IACEB6-BFQ_spQD.js.map +0 -1
  191. package/webapp/dist/assets/chunk-FMBD7UC4-CbQ2BBPs.js.map +0 -1
  192. package/webapp/dist/assets/chunk-JSJVCQXG-C4P1mjCL.js.map +0 -1
  193. package/webapp/dist/assets/chunk-KX2RTZJC-BMd-daMY.js.map +0 -1
  194. package/webapp/dist/assets/chunk-NQ4KR5QH-B_ZhWMXR.js.map +0 -1
  195. package/webapp/dist/assets/chunk-QZHKN3VN-Cbf92xIw.js.map +0 -1
  196. package/webapp/dist/assets/chunk-WL4C6EOR-PtH-blkK.js.map +0 -1
  197. package/webapp/dist/assets/classDiagram-VBA2DB6C-Dc3ncaD0.js.map +0 -1
  198. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-Dc3ncaD0.js.map +0 -1
  199. package/webapp/dist/assets/clone-E9Ad85BC.js.map +0 -1
  200. package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-nj0o74.js.map +0 -1
  201. package/webapp/dist/assets/dagre-KLK3FWXG-CyJYNIbm.js.map +0 -1
  202. package/webapp/dist/assets/diagram-E7M64L7V-C8eweQ7b.js.map +0 -1
  203. package/webapp/dist/assets/diagram-IFDJBPK2-DMdygRl0.js.map +0 -1
  204. package/webapp/dist/assets/diagram-P4PSJMXO-BQDZHb0a.js.map +0 -1
  205. package/webapp/dist/assets/erDiagram-INFDFZHY-C1HaXN6E.js.map +0 -1
  206. package/webapp/dist/assets/flowDiagram-PKNHOUZH-24nNqQyo.js.map +0 -1
  207. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-BWPOFaLV.js.map +0 -1
  208. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D7_L-p_Y.js.map +0 -1
  209. package/webapp/dist/assets/graph-OHu4dL2n.js +0 -782
  210. package/webapp/dist/assets/graph-OHu4dL2n.js.map +0 -1
  211. package/webapp/dist/assets/infoDiagram-LFFYTUFH-CvaBM5j6.js.map +0 -1
  212. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DB1l2Uue.js +0 -966
  213. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DB1l2Uue.js.map +0 -1
  214. package/webapp/dist/assets/journeyDiagram-4ABVD52K-TQR6_teO.js.map +0 -1
  215. package/webapp/dist/assets/kanban-definition-K7BYSVSG-B-BOuC-U.js.map +0 -1
  216. package/webapp/dist/assets/layout-B8yqIqbx.js.map +0 -1
  217. package/webapp/dist/assets/linear-CoLfiZKK.js.map +0 -1
  218. package/webapp/dist/assets/mindmap-definition-YRQLILUH-P70BMIHI.js.map +0 -1
  219. package/webapp/dist/assets/pieDiagram-SKSYHLDU-DsS_4dTB.js.map +0 -1
  220. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DoM9PEq-.js.map +0 -1
  221. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-Bn3lYMMI.js.map +0 -1
  222. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-97kCegRT.js.map +0 -1
  223. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DXqjQjf6.js.map +0 -1
  224. package/webapp/dist/assets/stateDiagram-RAJIS63D-DQcTPKWP.js.map +0 -1
  225. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DHmxRVJn.js.map +0 -1
  226. package/webapp/dist/assets/timeline-definition-YZTLITO2-BlovQQ4B.js.map +0 -1
  227. package/webapp/dist/assets/treemap-KZPCXAKY-CGu93c9S.js.map +0 -1
  228. package/webapp/dist/assets/vennDiagram-LZ73GAT5-Do1jprrz.js +0 -2487
  229. package/webapp/dist/assets/vennDiagram-LZ73GAT5-Do1jprrz.js.map +0 -1
  230. package/webapp/dist/assets/xychartDiagram-JWTSCODW-BKa1DxVq.js.map +0 -1
@@ -33,32 +33,60 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.loadAgentSharedReminders = loadAgentSharedReminders;
37
- exports.replaceAgentSharedReminders = replaceAgentSharedReminders;
38
- exports.mutateAgentSharedReminders = mutateAgentSharedReminders;
36
+ exports.loadSharedReminders = loadSharedReminders;
37
+ exports.replaceSharedReminders = replaceSharedReminders;
38
+ exports.mutateSharedReminders = mutateSharedReminders;
39
39
  const time_1 = require("@longrun-ai/kernel/utils/time");
40
40
  const node_crypto_1 = require("node:crypto");
41
41
  const fs = __importStar(require("node:fs/promises"));
42
42
  const path = __importStar(require("node:path"));
43
+ const zlib_1 = require("zlib");
43
44
  const async_fifo_mutex_1 = require("./runtime/async-fifo-mutex");
44
45
  const tool_1 = require("./tool");
45
46
  const registry_1 = require("./tools/registry");
46
47
  const sharedReminderLocks = new Map();
47
- function getSharedReminderLock(agentId) {
48
- const existing = sharedReminderLocks.get(agentId);
48
+ function getSharedReminderTargetKey(target) {
49
+ switch (target.kind) {
50
+ case 'agent':
51
+ return `agent:${target.agentId}`;
52
+ case 'task':
53
+ return `task:${target.agentId}:${target.taskDocPath}`;
54
+ }
55
+ const _exhaustive = target;
56
+ return _exhaustive;
57
+ }
58
+ function getSharedReminderLock(target) {
59
+ const key = getSharedReminderTargetKey(target);
60
+ const existing = sharedReminderLocks.get(key);
49
61
  if (existing)
50
62
  return existing;
51
63
  const created = new async_fifo_mutex_1.AsyncFifoMutex();
52
- sharedReminderLocks.set(agentId, created);
64
+ sharedReminderLocks.set(key, created);
53
65
  return created;
54
66
  }
55
- function clearSharedReminderLockIfIdle(agentId, lock) {
56
- if (sharedReminderLocks.get(agentId) === lock && !lock.isLocked()) {
57
- sharedReminderLocks.delete(agentId);
67
+ function clearSharedReminderLockIfIdle(target, lock) {
68
+ const key = getSharedReminderTargetKey(target);
69
+ if (sharedReminderLocks.get(key) === lock && !lock.isLocked()) {
70
+ sharedReminderLocks.delete(key);
58
71
  }
59
72
  }
60
- function getSharedReminderDirPath(agentId) {
61
- return path.resolve(process.cwd(), '.dialogs', 'reminders', agentId);
73
+ function getTaskDocPathStorageKey(taskDocPath) {
74
+ const normalized = taskDocPath.trim().replace(/\\/g, '/').replace(/\/+$/g, '');
75
+ if (normalized === '') {
76
+ throw new Error('task-scoped reminders require a non-empty taskDocPath');
77
+ }
78
+ const checksum = (0, zlib_1.crc32)(normalized) >>> 0;
79
+ return `crc32-${checksum.toString(16).padStart(8, '0')}`;
80
+ }
81
+ function getSharedReminderDirPath(target) {
82
+ switch (target.kind) {
83
+ case 'agent':
84
+ return path.resolve(process.cwd(), '.dialogs', 'reminders', 'agents', target.agentId);
85
+ case 'task':
86
+ return path.resolve(process.cwd(), '.dialogs', 'reminders', 'agent_tasks', target.agentId, getTaskDocPathStorageKey(target.taskDocPath));
87
+ }
88
+ const _exhaustive = target;
89
+ return _exhaustive;
62
90
  }
63
91
  function ensureReminderIdPathSegment(reminderId) {
64
92
  if (!/^[A-Za-z0-9_-]+$/.test(reminderId)) {
@@ -66,8 +94,8 @@ function ensureReminderIdPathSegment(reminderId) {
66
94
  }
67
95
  return reminderId;
68
96
  }
69
- function getSharedReminderFilePath(agentId, reminderId) {
70
- return path.join(getSharedReminderDirPath(agentId), `${ensureReminderIdPathSegment(reminderId)}.json`);
97
+ function getSharedReminderFilePath(target, reminderId) {
98
+ return path.join(getSharedReminderDirPath(target), `${ensureReminderIdPathSegment(reminderId)}.json`);
71
99
  }
72
100
  function serializeReminder(reminder) {
73
101
  return {
@@ -78,7 +106,7 @@ function serializeReminder(reminder) {
78
106
  ownerName: reminder.owner?.name,
79
107
  meta: reminder.meta,
80
108
  echoback: reminder.echoback,
81
- scope: reminder.scope ?? 'agent_shared',
109
+ scope: reminder.scope ?? 'agent',
82
110
  renderMode: reminder.renderMode ?? 'markdown',
83
111
  createdAt: reminder.createdAt ?? (0, time_1.formatUnifiedTimestamp)(new Date()),
84
112
  priority: reminder.priority ?? 'medium',
@@ -94,7 +122,7 @@ function materializeStoredReminder(snapshot) {
94
122
  owner,
95
123
  meta: snapshot.meta,
96
124
  echoback: snapshot.echoback,
97
- scope: snapshot.scope ?? 'agent_shared',
125
+ scope: snapshot.scope ?? 'agent',
98
126
  renderMode: snapshot.renderMode ?? 'markdown',
99
127
  createdAt: snapshot.createdAt,
100
128
  priority: snapshot.priority,
@@ -115,8 +143,8 @@ async function listPerReminderJsonFiles(dirPath) {
115
143
  .filter((entry) => entry.isFile() && entry.name.endsWith('.json'))
116
144
  .map((entry) => entry.name);
117
145
  }
118
- async function readSharedRemindersUnlocked(agentId) {
119
- const dirPath = getSharedReminderDirPath(agentId);
146
+ async function readSharedRemindersUnlocked(target) {
147
+ const dirPath = getSharedReminderDirPath(target);
120
148
  let fileNames;
121
149
  try {
122
150
  fileNames = await listPerReminderJsonFiles(dirPath);
@@ -135,55 +163,55 @@ async function readSharedRemindersUnlocked(agentId) {
135
163
  reminders.sort(tool_1.compareReminderDisplayOrder);
136
164
  return reminders;
137
165
  }
138
- async function writeSharedRemindersUnlocked(agentId, reminders) {
139
- const dirPath = getSharedReminderDirPath(agentId);
166
+ async function writeSharedRemindersUnlocked(target, reminders) {
167
+ const dirPath = getSharedReminderDirPath(target);
140
168
  await fs.mkdir(dirPath, { recursive: true });
141
169
  const existingFileNames = await listPerReminderJsonFiles(dirPath);
142
170
  const desiredIds = new Set();
143
171
  for (const reminder of reminders) {
144
172
  if (desiredIds.has(reminder.id)) {
145
- throw new Error(`Duplicate shared reminder_id detected while persisting agent ${agentId}: ${reminder.id}`);
173
+ throw new Error(`Duplicate shared reminder_id detected while persisting ${getSharedReminderTargetKey(target)}: ${reminder.id}`);
146
174
  }
147
175
  desiredIds.add(reminder.id);
148
176
  }
149
177
  await Promise.all(existingFileNames
150
178
  .filter((fileName) => !desiredIds.has(fileName.slice(0, -'.json'.length)))
151
179
  .map((fileName) => fs.unlink(path.join(dirPath, fileName))));
152
- await Promise.all(reminders.map((reminder) => writeReminderSnapshotFile(getSharedReminderFilePath(agentId, reminder.id), serializeReminder(reminder))));
180
+ await Promise.all(reminders.map((reminder) => writeReminderSnapshotFile(getSharedReminderFilePath(target, reminder.id), serializeReminder(reminder))));
153
181
  }
154
- async function loadAgentSharedReminders(agentId) {
155
- const lock = getSharedReminderLock(agentId);
182
+ async function loadSharedReminders(target) {
183
+ const lock = getSharedReminderLock(target);
156
184
  const release = await lock.acquire();
157
185
  try {
158
- return cloneReminderList(await readSharedRemindersUnlocked(agentId));
186
+ return cloneReminderList(await readSharedRemindersUnlocked(target));
159
187
  }
160
188
  finally {
161
189
  release();
162
- clearSharedReminderLockIfIdle(agentId, lock);
190
+ clearSharedReminderLockIfIdle(target, lock);
163
191
  }
164
192
  }
165
- async function replaceAgentSharedReminders(agentId, reminders) {
166
- const lock = getSharedReminderLock(agentId);
193
+ async function replaceSharedReminders(target, reminders) {
194
+ const lock = getSharedReminderLock(target);
167
195
  const release = await lock.acquire();
168
196
  try {
169
- await writeSharedRemindersUnlocked(agentId, reminders);
197
+ await writeSharedRemindersUnlocked(target, reminders);
170
198
  }
171
199
  finally {
172
200
  release();
173
- clearSharedReminderLockIfIdle(agentId, lock);
201
+ clearSharedReminderLockIfIdle(target, lock);
174
202
  }
175
203
  }
176
- async function mutateAgentSharedReminders(agentId, mutate) {
177
- const lock = getSharedReminderLock(agentId);
204
+ async function mutateSharedReminders(target, mutate) {
205
+ const lock = getSharedReminderLock(target);
178
206
  const release = await lock.acquire();
179
207
  try {
180
- const reminders = await readSharedRemindersUnlocked(agentId);
208
+ const reminders = await readSharedRemindersUnlocked(target);
181
209
  const result = await mutate(reminders);
182
- await writeSharedRemindersUnlocked(agentId, reminders);
210
+ await writeSharedRemindersUnlocked(target, reminders);
183
211
  return result;
184
212
  }
185
213
  finally {
186
214
  release();
187
- clearSharedReminderLockIfIdle(agentId, lock);
215
+ clearSharedReminderLockIfIdle(target, lock);
188
216
  }
189
217
  }
package/dist/team.js CHANGED
@@ -586,11 +586,14 @@ exports.Team = Team;
586
586
  const resolved = [];
587
587
  const seen = new Set();
588
588
  const isAssignableToolset = (name) => (0, registry_1.getToolsetMeta)(name)?.assignable !== false;
589
+ const isWildcardAssignableToolset = (name) => (0, registry_1.getToolsetMeta)(name)?.wildcardAssignable !== false;
589
590
  for (const toolsetName of [...staticToolsets, ...dynamicToolsetNames]) {
590
591
  if (toolsetName.startsWith('!'))
591
592
  continue;
592
593
  const toolsetNames = toolsetName === '*'
593
- ? Object.keys((0, registry_1.listToolsets)()).filter((n) => !excludedToolsets.has(n) && isAssignableToolset(n))
594
+ ? Object.keys((0, registry_1.listToolsets)()).filter((n) => !excludedToolsets.has(n) &&
595
+ isAssignableToolset(n) &&
596
+ isWildcardAssignableToolset(n))
594
597
  : excludedToolsets.has(toolsetName)
595
598
  ? []
596
599
  : [toolsetName];
package/dist/tool.d.ts CHANGED
@@ -53,7 +53,7 @@ export interface ReminderOptions {
53
53
  readonly scope?: ReminderScope;
54
54
  readonly renderMode?: ReminderRenderMode;
55
55
  }
56
- export type ReminderScope = 'dialog' | 'personal' | 'agent_shared';
56
+ export type ReminderScope = 'dialog' | 'task' | 'agent' | 'runtime';
57
57
  export type ReminderRenderMode = 'plain' | 'markdown';
58
58
  export type ReminderPriority = 'high' | 'medium' | 'low';
59
59
  export interface Reminder extends ReminderOptions {
package/dist/tool.js CHANGED
@@ -128,7 +128,7 @@ function parseReminderSortTimestamp(value) {
128
128
  return (0, time_1.parseUnifiedTimestampMs)(value);
129
129
  }
130
130
  // Reminder presentation order is a framework-level concern distinct from owner semantics.
131
- // Keep it centralized so dialog-local reminders and agent-shared reminders stay in the same
131
+ // Keep it centralized so dialog-local reminders and runtime reminders stay in the same
132
132
  // newest-first order everywhere they are merged, rendered, or injected.
133
133
  function compareReminderDisplayOrder(a, b) {
134
134
  const aDisplayTs = extractReminderDisplayTimestamp(a);
@@ -182,10 +182,16 @@ function wrapAppRenderedReminder(message, language) {
182
182
  }
183
183
  async function persistAndPublishReminders(dlg) {
184
184
  await dlg.dlgStore.persistReminders(dlg, dlg.reminders);
185
- const sharedReminders = await (0, shared_reminders_1.loadAgentSharedReminders)(dlg.agentId);
185
+ const taskSharedReminders = await (0, shared_reminders_1.loadSharedReminders)({
186
+ kind: 'task',
187
+ agentId: dlg.agentId,
188
+ taskDocPath: dlg.taskDocPath,
189
+ });
190
+ const runtimeReminders = await (0, shared_reminders_1.loadSharedReminders)({ kind: 'agent', agentId: dlg.agentId });
186
191
  const visibleReminders = [
187
192
  ...dlg.reminders.map((reminder) => (0, tool_1.cloneReminder)(reminder)),
188
- ...sharedReminders,
193
+ ...taskSharedReminders,
194
+ ...runtimeReminders,
189
195
  ];
190
196
  visibleReminders.sort(tool_1.compareReminderDisplayOrder);
191
197
  const reminders = visibleReminders.map((reminder) => ({
@@ -54,8 +54,12 @@ function manualSpecFor(toolsetId) {
54
54
  (0, registry_1.registerTool)(fs_1.moveDirTool);
55
55
  (0, registry_1.registerTool)(fs_1.readSymlinkTool);
56
56
  (0, registry_1.registerTool)(fs_1.createSymlinkTool);
57
+ (0, registry_1.registerTool)(fs_1.fsListDirTool);
58
+ (0, registry_1.registerTool)(fs_1.fsReadSymlinkTool);
57
59
  (0, registry_1.registerTool)(txt_1.readFileTool);
60
+ (0, registry_1.registerTool)(txt_1.fsReadFileTool);
58
61
  (0, registry_1.registerTool)(picture_1.readPictureTool);
62
+ (0, registry_1.registerTool)(picture_1.fsReadPictureTool);
59
63
  (0, registry_1.registerTool)(picture_1.writePictureTool);
60
64
  (0, registry_1.registerTool)(txt_1.createNewFileTool);
61
65
  (0, registry_1.registerTool)(txt_1.overwriteEntireFileTool);
@@ -71,6 +75,11 @@ function manualSpecFor(toolsetId) {
71
75
  (0, registry_1.registerTool)(ripgrep_1.ripgrepCountTool);
72
76
  (0, registry_1.registerTool)(ripgrep_1.ripgrepFixedTool);
73
77
  (0, registry_1.registerTool)(ripgrep_1.ripgrepSearchTool);
78
+ (0, registry_1.registerTool)(ripgrep_1.fsRipgrepFilesTool);
79
+ (0, registry_1.registerTool)(ripgrep_1.fsRipgrepSnippetsTool);
80
+ (0, registry_1.registerTool)(ripgrep_1.fsRipgrepCountTool);
81
+ (0, registry_1.registerTool)(ripgrep_1.fsRipgrepFixedTool);
82
+ (0, registry_1.registerTool)(ripgrep_1.fsRipgrepSearchTool);
74
83
  // OS tools
75
84
  (0, registry_1.registerTool)(os_1.shellCmdTool);
76
85
  (0, registry_1.registerTool)(os_1.readonlyShellTool);
@@ -252,6 +261,27 @@ for (const tool of team_mgmt_1.teamMgmtTools) {
252
261
  promptFilesI18n: promptFilesFor('ws_read'),
253
262
  manualSpec: manualSpecFor('ws_read'),
254
263
  });
264
+ (0, registry_1.registerToolset)('fs_read', [
265
+ fs_1.fsListDirTool,
266
+ fs_1.fsReadSymlinkTool,
267
+ txt_1.fsReadFileTool,
268
+ picture_1.fsReadPictureTool,
269
+ ripgrep_1.fsRipgrepFilesTool,
270
+ ripgrep_1.fsRipgrepSnippetsTool,
271
+ ripgrep_1.fsRipgrepCountTool,
272
+ ripgrep_1.fsRipgrepFixedTool,
273
+ ripgrep_1.fsRipgrepSearchTool,
274
+ ]);
275
+ (0, registry_1.setToolsetMeta)('fs_read', {
276
+ source: 'dominds',
277
+ wildcardAssignable: false,
278
+ descriptionI18n: {
279
+ en: 'Local filesystem read-only access without rtws path restriction: list directories, read text/images, and search files.',
280
+ zh: '本机文件系统只读访问,不限制路径必须位于 rtws 内:列目录、读文本/图片、检索文件。',
281
+ },
282
+ promptFilesI18n: promptFilesFor('fs_read'),
283
+ manualSpec: manualSpecFor('fs_read'),
284
+ });
255
285
  (0, registry_1.registerToolset)('ws_mod', [
256
286
  fs_1.listDirTool,
257
287
  fs_1.rmDirTool,
@@ -73,13 +73,6 @@ const work_language_1 = require("../runtime/work-language");
73
73
  const shared_reminders_1 = require("../shared-reminders");
74
74
  const tool_1 = require("../tool");
75
75
  const task_package_1 = require("../utils/task-package");
76
- class InvalidReminderPositionError extends Error {
77
- constructor(positionHuman, totalPlusOne) {
78
- super(`Invalid reminder position ${positionHuman} (max ${String(totalPlusOne)})`);
79
- this.positionHuman = positionHuman;
80
- this.totalPlusOne = totalPlusOne;
81
- }
82
- }
83
76
  function isRecord(value) {
84
77
  return typeof value === 'object' && value !== null && !Array.isArray(value);
85
78
  }
@@ -152,42 +145,6 @@ function formatManualUpdateBlockedError(language, altInstruction) {
152
145
  ? `错误:该提醒项不能用 update_reminder 修改;请改按此处理:${altInstruction}`
153
146
  : `Error: This reminder cannot be edited via update_reminder. Follow instead: ${altInstruction}`;
154
147
  }
155
- function listListedReminderIndices(reminders) {
156
- return listListedReminderIndicesBy(reminders, () => true);
157
- }
158
- function listListedReminderIndicesBy(reminders, predicate) {
159
- const indices = [];
160
- for (let index = 0; index < reminders.length; index += 1) {
161
- const reminder = reminders[index];
162
- if (!reminder || !(0, tool_1.reminderIsListed)(reminder) || !predicate(reminder)) {
163
- continue;
164
- }
165
- indices.push(index);
166
- }
167
- return indices;
168
- }
169
- function computeReminderInsertIndex(reminders, positionValue, predicate) {
170
- const listedIndices = listListedReminderIndicesBy(reminders, predicate);
171
- let insertIndex = reminders.length;
172
- if (positionValue === undefined) {
173
- return insertIndex;
174
- }
175
- if (typeof positionValue !== 'number' || !Number.isInteger(positionValue)) {
176
- throw new Error('invalid_add_position_format');
177
- }
178
- const position = positionValue - 1;
179
- if (position < 0 || position > listedIndices.length) {
180
- throw new InvalidReminderPositionError(String(positionValue), listedIndices.length + 1);
181
- }
182
- if (position < listedIndices.length) {
183
- const targetIndex = listedIndices[position];
184
- if (targetIndex === undefined) {
185
- throw new InvalidReminderPositionError(String(positionValue), listedIndices.length + 1);
186
- }
187
- insertIndex = targetIndex;
188
- }
189
- return insertIndex;
190
- }
191
148
  function parseReminderRenderMode(value) {
192
149
  if (value === undefined)
193
150
  return 'markdown';
@@ -283,8 +240,8 @@ function findReminderIndexById(sourceLabel, reminders, reminderId) {
283
240
  }
284
241
  return foundIndex;
285
242
  }
286
- async function deleteSharedReminderById(agentId, reminderId) {
287
- return (0, shared_reminders_1.mutateAgentSharedReminders)(agentId, (reminders) => {
243
+ async function deleteSharedReminderById(target, reminderId) {
244
+ return (0, shared_reminders_1.mutateSharedReminders)(target, (reminders) => {
288
245
  const index = findReminderIndexById('shared', reminders, reminderId);
289
246
  if (index === null)
290
247
  return false;
@@ -292,8 +249,8 @@ async function deleteSharedReminderById(agentId, reminderId) {
292
249
  return true;
293
250
  });
294
251
  }
295
- async function updateSharedReminderById(agentId, reminderId, updateReminder) {
296
- return (0, shared_reminders_1.mutateAgentSharedReminders)(agentId, (reminders) => {
252
+ async function updateSharedReminderById(target, reminderId, updateReminder) {
253
+ return (0, shared_reminders_1.mutateSharedReminders)(target, (reminders) => {
297
254
  const index = findReminderIndexById('shared', reminders, reminderId);
298
255
  if (index === null)
299
256
  return false;
@@ -328,8 +285,8 @@ async function deleteResolvedReminderTarget(dlg, target) {
328
285
  dlg.deleteReminder(index);
329
286
  });
330
287
  }
331
- case 'agent_shared': {
332
- const deleted = await deleteSharedReminderById(target.agentId, target.reminder.id);
288
+ case 'runtime': {
289
+ const deleted = await deleteSharedReminderById(target.target, target.reminder.id);
333
290
  if (deleted)
334
291
  dlg.touchReminders();
335
292
  return deleted;
@@ -348,8 +305,8 @@ async function updateResolvedReminderTarget(dlg, target, content, meta, renderMo
348
305
  dlg.updateReminder(index, content, meta, { renderMode });
349
306
  });
350
307
  }
351
- case 'agent_shared': {
352
- const updated = await updateSharedReminderById(target.agentId, target.reminder.id, (current) => replaceReminderContent(current, content, meta, renderMode));
308
+ case 'runtime': {
309
+ const updated = await updateSharedReminderById(target.target, target.reminder.id, (current) => replaceReminderContent(current, content, meta, renderMode));
353
310
  if (updated)
354
311
  dlg.touchReminders();
355
312
  return updated;
@@ -364,10 +321,8 @@ function getCtrlMessages(language) {
364
321
  invalidFormatDelete: '参数格式不对。用法:delete_reminder({ reminder_id: string })',
365
322
  reminderDoesNotExist: (reminderId) => `提醒项 '${reminderId}' 不存在。`,
366
323
  reminderTargetChanged: '错误:提醒项列表已变化,这条提醒项当前不在可见列表中。请重新查看提醒项列表后,用当前的 reminder_id 重试。',
367
- invalidFormatAdd: '参数格式不对。用法:add_reminder({ content: string, position?: number, scope?: "dialog" | "personal" })(省略 position 表示追加)',
368
- personalPositionUnsupported: 'personal 范围提醒当前只支持追加,不能指定 position。',
324
+ invalidFormatAdd: '参数格式不对。用法:add_reminder({ content: string, scope?: "dialog" | "task" | "agent" })(省略 scope 表示 task)',
369
325
  reminderContentEmpty: '提醒内容不能为空',
370
- invalidReminderPosition: (positionHuman, totalPlusOne) => `位置 ${positionHuman} 无效。有效范围:1-${totalPlusOne}`,
371
326
  invalidFormatUpdate: '参数格式不对。用法:update_reminder({ reminder_id: string, content: string })',
372
327
  invalidFormatDoMind: '参数格式不对。用法:do_mind({ selector: string, category?: string, content: string })',
373
328
  invalidFormatChangeMind: '参数格式不对。用法:change_mind({ selector: string, category?: string, content: string, previous_content_hash: string })',
@@ -413,10 +368,8 @@ function getCtrlMessages(language) {
413
368
  invalidFormatDelete: 'Error: Invalid args. Use: delete_reminder({ reminder_id: string })',
414
369
  reminderDoesNotExist: (reminderId) => `Error: Reminder '${reminderId}' does not exist.`,
415
370
  reminderTargetChanged: 'Error: The reminder list changed, and this reminder is no longer visible. Refresh the reminders and retry with the current reminder_id.',
416
- invalidFormatAdd: 'Error: Invalid args. Use: add_reminder({ content: string, position?: number, scope?: "dialog" | "personal" }) (omit position to append).',
417
- personalPositionUnsupported: 'Error: personal-scope reminders currently support append only; do not pass position.',
371
+ invalidFormatAdd: 'Error: Invalid args. Use: add_reminder({ content: string, scope?: "dialog" | "task" | "agent" }) (omitting scope means task).',
418
372
  reminderContentEmpty: 'Error: Reminder content cannot be empty',
419
- invalidReminderPosition: (positionHuman, totalPlusOne) => `Error: Invalid reminder position ${positionHuman}. Valid range: 1-${totalPlusOne}`,
420
373
  invalidFormatUpdate: 'Error: Invalid args. Use: update_reminder({ reminder_id: string, content: string })',
421
374
  invalidFormatDoMind: 'Error: Invalid args. Use: do_mind({ selector: string, category?: string, content: string })',
422
375
  invalidFormatChangeMind: 'Error: Invalid args. Use: change_mind({ selector: string, category?: string, content: string, previous_content_hash: string })',
@@ -499,10 +452,10 @@ exports.deleteReminderTool = {
499
452
  exports.addReminderTool = {
500
453
  type: 'func',
501
454
  name: 'add_reminder',
502
- description: 'Add a manually maintained working-set reminder, optionally inserting at a 1-based position and choosing dialog or personal scope. Do not manually record runtime-maintained environment state such as background process status or in-flight background asks.',
455
+ description: 'Add a manually maintained reminder for current work. Scope defaults to task so the reminder survives continuing the same Taskdoc in another dialog; dialog is only for truly dialog-local notes; agent is visible to this agent across dialogs and should be reserved for urgent short-lived global cues. Do not manually record runtime-maintained environment state such as background process status or in-flight background asks.',
503
456
  descriptionI18n: {
504
- en: 'Add a manually maintained working-set reminder, optionally inserting at a 1-based position and choosing dialog or personal scope. Do not manually record runtime-maintained environment state such as background process status or in-flight background asks.',
505
- zh: '添加手工维护的工作集提醒,可选指定 1-based 插入位置,并可选择对话或个人范围。不要手工记录后台进程状态、后台进行中诉请等 runtime 会自动维护的环境状态。',
457
+ en: 'Add a manually maintained reminder for current work. Scope defaults to task so the reminder survives continuing the same Taskdoc in another dialog; dialog is only for truly dialog-local notes; agent is visible to this agent across dialogs and should be reserved for urgent short-lived global cues. Do not manually record runtime-maintained environment state such as background process status or in-flight background asks.',
458
+ zh: '添加手工维护的手头工作提醒。scope 默认 task,以便同一差遣牒任务换新对话继续时仍可见;dialog 只用于真正对话局部的事项;agent 会在本智能体所有对话中可见,仅用于紧急、短期、全局刺眼提醒。不要手工记录后台进程状态、后台进行中诉请等 runtime 会自动维护的环境状态。',
506
459
  },
507
460
  parameters: {
508
461
  type: 'object',
@@ -510,11 +463,10 @@ exports.addReminderTool = {
510
463
  required: ['content'],
511
464
  properties: {
512
465
  content: { type: 'string', description: 'Reminder content.' },
513
- position: { type: 'integer', description: 'Insert position (1-based). Defaults to append.' },
514
466
  scope: {
515
467
  type: 'string',
516
- enum: ['dialog', 'personal'],
517
- description: 'Reminder visibility scope. Defaults to dialog.',
468
+ enum: ['dialog', 'task', 'agent'],
469
+ description: 'Reminder visibility scope. Defaults to task.',
518
470
  },
519
471
  render_mode: {
520
472
  type: 'string',
@@ -533,8 +485,8 @@ exports.addReminderTool = {
533
485
  return (0, tool_1.toolFailure)(t.reminderContentEmpty);
534
486
  const scopeValue = args['scope'];
535
487
  const reminderScope = scopeValue === undefined
536
- ? 'dialog'
537
- : scopeValue === 'dialog' || scopeValue === 'personal'
488
+ ? 'task'
489
+ : scopeValue === 'dialog' || scopeValue === 'task' || scopeValue === 'agent'
538
490
  ? scopeValue
539
491
  : null;
540
492
  if (reminderScope === null) {
@@ -544,7 +496,6 @@ exports.addReminderTool = {
544
496
  if (reminderRenderMode === null) {
545
497
  return (0, tool_1.toolFailure)(t.invalidFormatAdd);
546
498
  }
547
- const positionValue = args['position'];
548
499
  const contextHealthLevel = getContinuationPackageContextHealthLevel(dlg.getLastContextHealth());
549
500
  const reminderMeta = contextHealthLevel === undefined
550
501
  ? undefined
@@ -553,52 +504,26 @@ exports.addReminderTool = {
553
504
  contextHealthLevel,
554
505
  });
555
506
  if (reminderScope === 'dialog') {
556
- try {
557
- const insertIndex = computeReminderInsertIndex(dlg.reminders, positionValue, () => true);
558
- dlg.addReminder(reminderContent, undefined, reminderMeta, insertIndex, {
559
- scope: 'dialog',
560
- renderMode: reminderRenderMode,
561
- });
562
- return (0, tool_result_messages_1.formatToolActionResult)(language, 'added');
563
- }
564
- catch (error) {
565
- if (error instanceof InvalidReminderPositionError) {
566
- return (0, tool_1.toolFailure)(t.invalidReminderPosition(error.positionHuman, error.totalPlusOne));
567
- }
568
- if (error instanceof Error && error.message === 'invalid_add_position_format') {
569
- return (0, tool_1.toolFailure)(t.invalidFormatAdd);
570
- }
571
- throw error;
572
- }
573
- }
574
- try {
575
- await (0, shared_reminders_1.mutateAgentSharedReminders)(dlg.agentId, (reminders) => {
576
- if (positionValue !== undefined) {
577
- throw new Error('personal_add_position_unsupported');
578
- }
579
- const reminder = (0, tool_1.materializeReminder)({
580
- content: reminderContent,
581
- meta: reminderMeta,
582
- scope: 'personal',
583
- renderMode: reminderRenderMode,
584
- });
585
- reminders.push(reminder);
507
+ dlg.addReminder(reminderContent, undefined, reminderMeta, undefined, {
508
+ scope: 'dialog',
509
+ renderMode: reminderRenderMode,
586
510
  });
587
- dlg.touchReminders();
588
511
  return (0, tool_result_messages_1.formatToolActionResult)(language, 'added');
589
512
  }
590
- catch (error) {
591
- if (error instanceof InvalidReminderPositionError) {
592
- return (0, tool_1.toolFailure)(t.invalidReminderPosition(error.positionHuman, error.totalPlusOne));
593
- }
594
- if (error instanceof Error && error.message === 'invalid_add_position_format') {
595
- return (0, tool_1.toolFailure)(t.invalidFormatAdd);
596
- }
597
- if (error instanceof Error && error.message === 'personal_add_position_unsupported') {
598
- return (0, tool_1.toolFailure)(t.personalPositionUnsupported);
599
- }
600
- throw error;
601
- }
513
+ const sharedTarget = reminderScope === 'task'
514
+ ? { kind: 'task', agentId: dlg.agentId, taskDocPath: dlg.taskDocPath }
515
+ : { kind: 'agent', agentId: dlg.agentId };
516
+ await (0, shared_reminders_1.mutateSharedReminders)(sharedTarget, (reminders) => {
517
+ const reminder = (0, tool_1.materializeReminder)({
518
+ content: reminderContent,
519
+ meta: reminderMeta,
520
+ scope: reminderScope,
521
+ renderMode: reminderRenderMode,
522
+ });
523
+ reminders.push(reminder);
524
+ });
525
+ dlg.touchReminders();
526
+ return (0, tool_result_messages_1.formatToolActionResult)(language, 'added');
602
527
  },
603
528
  };
604
529
  exports.updateReminderTool = {
@@ -1,10 +1,12 @@
1
1
  import type { FuncTool } from '../tool';
2
2
  export declare const listDirTool: FuncTool;
3
+ export declare const fsListDirTool: FuncTool;
3
4
  export declare const rmDirTool: FuncTool;
4
5
  export declare const rmFileTool: FuncTool;
5
6
  export declare const mkDirTool: FuncTool;
6
7
  export declare const moveFileTool: FuncTool;
7
8
  export declare const moveDirTool: FuncTool;
8
9
  export declare const readSymlinkTool: FuncTool;
10
+ export declare const fsReadSymlinkTool: FuncTool;
9
11
  export declare const createSymlinkTool: FuncTool;
10
12
  export declare const rmSymlinkTool: FuncTool;