dominds 1.1.2 → 1.1.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 (161) hide show
  1. package/dist/access-control.js +4 -0
  2. package/dist/apps-host/ipc-types.js +3 -1
  3. package/dist/cli/read.js +284 -102
  4. package/dist/dialog.js +3 -3
  5. package/dist/docs/memory-system.md +10 -4
  6. package/dist/docs/memory-system.zh.md +10 -4
  7. package/dist/docs/team_mgmt-toolset.md +2 -2
  8. package/dist/docs/team_mgmt-toolset.zh.md +2 -2
  9. package/dist/llm/gen/codex.js +32 -4
  10. package/dist/llm/kernel-driver/drive.js +2 -1
  11. package/dist/llm/kernel-driver/tellask-special.js +6 -0
  12. package/dist/minds/load.js +6 -6
  13. package/dist/minds/system-prompt-parts.js +7 -4
  14. package/dist/minds/system-prompt.js +2 -2
  15. package/dist/persistence.js +17 -4
  16. package/dist/server/websocket-handler.js +1 -0
  17. package/dist/shared/diligence.js +8 -4
  18. package/dist/static/assets/{_basePickBy-Bttctndk.js → _basePickBy-D4H_CIr2.js} +3 -3
  19. package/dist/static/assets/{_basePickBy-Bttctndk.js.map → _basePickBy-D4H_CIr2.js.map} +1 -1
  20. package/dist/static/assets/{_baseUniq-B2NEpiQ7.js → _baseUniq-Cam_qUTC.js} +2 -2
  21. package/dist/static/assets/{_baseUniq-B2NEpiQ7.js.map → _baseUniq-Cam_qUTC.js.map} +1 -1
  22. package/dist/static/assets/{arc-CEQU6vYk.js → arc-Cp03tble.js} +2 -2
  23. package/dist/static/assets/{arc-CEQU6vYk.js.map → arc-Cp03tble.js.map} +1 -1
  24. package/dist/static/assets/{architectureDiagram-VXUJARFQ-BjLOSaFi.js → architectureDiagram-VXUJARFQ-CqzFAYuR.js} +7 -7
  25. package/dist/static/assets/{architectureDiagram-VXUJARFQ-BjLOSaFi.js.map → architectureDiagram-VXUJARFQ-CqzFAYuR.js.map} +1 -1
  26. package/dist/static/assets/{blockDiagram-VD42YOAC-RR_rUIcv.js → blockDiagram-VD42YOAC-BJzUefd3.js} +7 -7
  27. package/dist/static/assets/{blockDiagram-VD42YOAC-RR_rUIcv.js.map → blockDiagram-VD42YOAC-BJzUefd3.js.map} +1 -1
  28. package/dist/static/assets/{c4Diagram-YG6GDRKO-DkV2OQbA.js → c4Diagram-YG6GDRKO-DVeJDi8g.js} +3 -3
  29. package/dist/static/assets/{c4Diagram-YG6GDRKO-DkV2OQbA.js.map → c4Diagram-YG6GDRKO-DVeJDi8g.js.map} +1 -1
  30. package/dist/static/assets/{channel-DSPsR3pD.js → channel-BP8WCdPp.js} +2 -2
  31. package/dist/static/assets/{channel-DSPsR3pD.js.map → channel-BP8WCdPp.js.map} +1 -1
  32. package/dist/static/assets/{chunk-4BX2VUAB-kGwuvRxg.js → chunk-4BX2VUAB-6gGHbPPy.js} +2 -2
  33. package/dist/static/assets/{chunk-4BX2VUAB-kGwuvRxg.js.map → chunk-4BX2VUAB-6gGHbPPy.js.map} +1 -1
  34. package/dist/static/assets/{chunk-55IACEB6-BnfvAzrv.js → chunk-55IACEB6-DavH-eLA.js} +2 -2
  35. package/dist/static/assets/{chunk-55IACEB6-BnfvAzrv.js.map → chunk-55IACEB6-DavH-eLA.js.map} +1 -1
  36. package/dist/static/assets/{chunk-B4BG7PRW-CBz6W1EM.js → chunk-B4BG7PRW-BIEHGik-.js} +5 -5
  37. package/dist/static/assets/{chunk-B4BG7PRW-CBz6W1EM.js.map → chunk-B4BG7PRW-BIEHGik-.js.map} +1 -1
  38. package/dist/static/assets/{chunk-DI55MBZ5-DOae3t-R.js → chunk-DI55MBZ5-Clu1GQTF.js} +4 -4
  39. package/dist/static/assets/{chunk-DI55MBZ5-DOae3t-R.js.map → chunk-DI55MBZ5-Clu1GQTF.js.map} +1 -1
  40. package/dist/static/assets/{chunk-FMBD7UC4-DL_4d3Tl.js → chunk-FMBD7UC4-BrQ6SHlP.js} +2 -2
  41. package/dist/static/assets/{chunk-FMBD7UC4-DL_4d3Tl.js.map → chunk-FMBD7UC4-BrQ6SHlP.js.map} +1 -1
  42. package/dist/static/assets/{chunk-QN33PNHL-DHLCPSRp.js → chunk-QN33PNHL-BTHZ40VN.js} +2 -2
  43. package/dist/static/assets/{chunk-QN33PNHL-DHLCPSRp.js.map → chunk-QN33PNHL-BTHZ40VN.js.map} +1 -1
  44. package/dist/static/assets/{chunk-QZHKN3VN-CEzwRO0t.js → chunk-QZHKN3VN-hag0dT3B.js} +2 -2
  45. package/dist/static/assets/{chunk-QZHKN3VN-CEzwRO0t.js.map → chunk-QZHKN3VN-hag0dT3B.js.map} +1 -1
  46. package/dist/static/assets/{chunk-TZMSLE5B-BD45RXiN.js → chunk-TZMSLE5B-D0AYZy0F.js} +2 -2
  47. package/dist/static/assets/{chunk-TZMSLE5B-BD45RXiN.js.map → chunk-TZMSLE5B-D0AYZy0F.js.map} +1 -1
  48. package/dist/static/assets/{classDiagram-2ON5EDUG-CZ499R8P.js → classDiagram-2ON5EDUG-TV5Ns2XR.js} +6 -6
  49. package/dist/static/assets/{classDiagram-2ON5EDUG-CZ499R8P.js.map → classDiagram-2ON5EDUG-TV5Ns2XR.js.map} +1 -1
  50. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-CZ499R8P.js → classDiagram-v2-WZHVMYZB-TV5Ns2XR.js} +6 -6
  51. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-CZ499R8P.js.map → classDiagram-v2-WZHVMYZB-TV5Ns2XR.js.map} +1 -1
  52. package/dist/static/assets/{clone-eiMKEdCy.js → clone-C27DK4mX.js} +2 -2
  53. package/dist/static/assets/{clone-eiMKEdCy.js.map → clone-C27DK4mX.js.map} +1 -1
  54. package/dist/static/assets/{cose-bilkent-S5V4N54A-BQP3Nr36.js → cose-bilkent-S5V4N54A-D1WKk9KM.js} +2 -2
  55. package/dist/static/assets/{cose-bilkent-S5V4N54A-BQP3Nr36.js.map → cose-bilkent-S5V4N54A-D1WKk9KM.js.map} +1 -1
  56. package/dist/static/assets/{dagre-6UL2VRFP-DimuYb2v.js → dagre-6UL2VRFP-BHV9AbhM.js} +7 -7
  57. package/dist/static/assets/{dagre-6UL2VRFP-DimuYb2v.js.map → dagre-6UL2VRFP-BHV9AbhM.js.map} +1 -1
  58. package/dist/static/assets/{diagram-PSM6KHXK-CSR0QXIj.js → diagram-PSM6KHXK-Bc-sx7s7.js} +8 -8
  59. package/dist/static/assets/{diagram-PSM6KHXK-CSR0QXIj.js.map → diagram-PSM6KHXK-Bc-sx7s7.js.map} +1 -1
  60. package/dist/static/assets/{diagram-QEK2KX5R-DSaANB_P.js → diagram-QEK2KX5R-DEMTGbLs.js} +7 -7
  61. package/dist/static/assets/{diagram-QEK2KX5R-DSaANB_P.js.map → diagram-QEK2KX5R-DEMTGbLs.js.map} +1 -1
  62. package/dist/static/assets/{diagram-S2PKOQOG-PURtnT9D.js → diagram-S2PKOQOG-Z0e4bRPr.js} +7 -7
  63. package/dist/static/assets/{diagram-S2PKOQOG-PURtnT9D.js.map → diagram-S2PKOQOG-Z0e4bRPr.js.map} +1 -1
  64. package/dist/static/assets/{erDiagram-Q2GNP2WA-Ci9kgQK3.js → erDiagram-Q2GNP2WA-CVrz2zW-.js} +5 -5
  65. package/dist/static/assets/{erDiagram-Q2GNP2WA-Ci9kgQK3.js.map → erDiagram-Q2GNP2WA-CVrz2zW-.js.map} +1 -1
  66. package/dist/static/assets/{flowDiagram-NV44I4VS-DwvqylOt.js → flowDiagram-NV44I4VS-D0G87s2C.js} +6 -6
  67. package/dist/static/assets/{flowDiagram-NV44I4VS-DwvqylOt.js.map → flowDiagram-NV44I4VS-D0G87s2C.js.map} +1 -1
  68. package/dist/static/assets/{ganttDiagram-JELNMOA3--P2Nvq8F.js → ganttDiagram-JELNMOA3-C6oOkrt2.js} +3 -3
  69. package/dist/static/assets/{ganttDiagram-JELNMOA3--P2Nvq8F.js.map → ganttDiagram-JELNMOA3-C6oOkrt2.js.map} +1 -1
  70. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-yRIYWgBQ.js → gitGraphDiagram-V2S2FVAM-CRky7qmU.js} +8 -8
  71. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-yRIYWgBQ.js.map → gitGraphDiagram-V2S2FVAM-CRky7qmU.js.map} +1 -1
  72. package/dist/static/assets/{graph-D6un1diw.js → graph-BA9_VK_c.js} +3 -3
  73. package/dist/static/assets/{graph-D6un1diw.js.map → graph-BA9_VK_c.js.map} +1 -1
  74. package/dist/static/assets/{index-DTGnX2Yo.js → index-C2LCoXUh.js} +120 -70
  75. package/dist/static/assets/index-C2LCoXUh.js.map +1 -0
  76. package/dist/static/assets/{infoDiagram-HS3SLOUP-RhbVYoNX.js → infoDiagram-HS3SLOUP-h2v1r5U4.js} +6 -6
  77. package/dist/static/assets/{infoDiagram-HS3SLOUP-RhbVYoNX.js.map → infoDiagram-HS3SLOUP-h2v1r5U4.js.map} +1 -1
  78. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-F2vJleeo.js → journeyDiagram-XKPGCS4Q-DsdOz9je.js} +5 -5
  79. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-F2vJleeo.js.map → journeyDiagram-XKPGCS4Q-DsdOz9je.js.map} +1 -1
  80. package/dist/static/assets/{kanban-definition-3W4ZIXB7-BeE8XgGf.js → kanban-definition-3W4ZIXB7-BtgqtUWK.js} +3 -3
  81. package/dist/static/assets/{kanban-definition-3W4ZIXB7-BeE8XgGf.js.map → kanban-definition-3W4ZIXB7-BtgqtUWK.js.map} +1 -1
  82. package/dist/static/assets/{layout-Bug31suA.js → layout-CaqskGvk.js} +5 -5
  83. package/dist/static/assets/{layout-Bug31suA.js.map → layout-CaqskGvk.js.map} +1 -1
  84. package/dist/static/assets/{linear-CuJCpDUr.js → linear-GIia-X9J.js} +2 -2
  85. package/dist/static/assets/{linear-CuJCpDUr.js.map → linear-GIia-X9J.js.map} +1 -1
  86. package/dist/static/assets/{mindmap-definition-VGOIOE7T-C0YAx_IS.js → mindmap-definition-VGOIOE7T-BV8RaD59.js} +4 -4
  87. package/dist/static/assets/{mindmap-definition-VGOIOE7T-C0YAx_IS.js.map → mindmap-definition-VGOIOE7T-BV8RaD59.js.map} +1 -1
  88. package/dist/static/assets/{pieDiagram-ADFJNKIX-D0h1jSxK.js → pieDiagram-ADFJNKIX-CWVKMbU0.js} +8 -8
  89. package/dist/static/assets/{pieDiagram-ADFJNKIX-D0h1jSxK.js.map → pieDiagram-ADFJNKIX-CWVKMbU0.js.map} +1 -1
  90. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-Dg99wOsX.js → quadrantDiagram-AYHSOK5B-Bq0kwFa2.js} +3 -3
  91. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-Dg99wOsX.js.map → quadrantDiagram-AYHSOK5B-Bq0kwFa2.js.map} +1 -1
  92. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CTRNNa4W.js → requirementDiagram-UZGBJVZJ-BPrfIKvO.js} +4 -4
  93. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CTRNNa4W.js.map → requirementDiagram-UZGBJVZJ-BPrfIKvO.js.map} +1 -1
  94. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Uufn9uya.js → sankeyDiagram-TZEHDZUN-CM2zak8H.js} +2 -2
  95. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Uufn9uya.js.map → sankeyDiagram-TZEHDZUN-CM2zak8H.js.map} +1 -1
  96. package/dist/static/assets/{sequenceDiagram-WL72ISMW-D4K7S77u.js → sequenceDiagram-WL72ISMW-De4dbz48.js} +4 -4
  97. package/dist/static/assets/{sequenceDiagram-WL72ISMW-D4K7S77u.js.map → sequenceDiagram-WL72ISMW-De4dbz48.js.map} +1 -1
  98. package/dist/static/assets/{stateDiagram-FKZM4ZOC-DaLoAi2t.js → stateDiagram-FKZM4ZOC-BmpggztQ.js} +9 -9
  99. package/dist/static/assets/{stateDiagram-FKZM4ZOC-DaLoAi2t.js.map → stateDiagram-FKZM4ZOC-BmpggztQ.js.map} +1 -1
  100. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Du_h1Khi.js → stateDiagram-v2-4FDKWEC3-bDNB8r1W.js} +5 -5
  101. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Du_h1Khi.js.map → stateDiagram-v2-4FDKWEC3-bDNB8r1W.js.map} +1 -1
  102. package/dist/static/assets/{timeline-definition-IT6M3QCI-Bz4v_4QK.js → timeline-definition-IT6M3QCI-CeYsZOwA.js} +3 -3
  103. package/dist/static/assets/{timeline-definition-IT6M3QCI-Bz4v_4QK.js.map → timeline-definition-IT6M3QCI-CeYsZOwA.js.map} +1 -1
  104. package/dist/static/assets/{treemap-GDKQZRPO-BZtkCQ9S.js → treemap-GDKQZRPO-_U4bMBrl.js} +5 -5
  105. package/dist/static/assets/{treemap-GDKQZRPO-BZtkCQ9S.js.map → treemap-GDKQZRPO-_U4bMBrl.js.map} +1 -1
  106. package/dist/static/assets/{xychartDiagram-PRI3JC2R-NbxzSk8y.js → xychartDiagram-PRI3JC2R-CC2Utdsb.js} +3 -3
  107. package/dist/static/assets/{xychartDiagram-PRI3JC2R-NbxzSk8y.js.map → xychartDiagram-PRI3JC2R-CC2Utdsb.js.map} +1 -1
  108. package/dist/static/index.html +1 -1
  109. package/dist/tools/builtins.js +13 -8
  110. package/dist/tools/mem.js +36 -25
  111. package/dist/tools/pending-tellask-reminder.js +14 -12
  112. package/dist/tools/prompts/control/en/scenarios.md +3 -3
  113. package/dist/tools/prompts/control/en/tools.md +1 -1
  114. package/dist/tools/prompts/control/zh/scenarios.md +3 -3
  115. package/dist/tools/prompts/control/zh/tools.md +1 -1
  116. package/dist/tools/prompts/personal_memory/en/errors.md +155 -0
  117. package/dist/tools/prompts/personal_memory/en/index.md +57 -0
  118. package/dist/tools/prompts/personal_memory/en/principles.md +94 -0
  119. package/dist/tools/prompts/personal_memory/en/scenarios.md +174 -0
  120. package/dist/tools/prompts/personal_memory/en/tools.md +129 -0
  121. package/dist/tools/prompts/personal_memory/zh/errors.md +155 -0
  122. package/dist/tools/prompts/personal_memory/zh/index.md +53 -0
  123. package/dist/tools/prompts/personal_memory/zh/principles.md +96 -0
  124. package/dist/tools/prompts/personal_memory/zh/scenarios.md +174 -0
  125. package/dist/tools/prompts/personal_memory/zh/tools.md +129 -0
  126. package/dist/tools/prompts/team_memory/en/errors.md +5 -5
  127. package/dist/tools/prompts/team_memory/en/principles.md +15 -15
  128. package/dist/tools/prompts/team_memory/en/scenarios.md +7 -7
  129. package/dist/tools/prompts/team_memory/en/tools.md +12 -23
  130. package/dist/tools/prompts/team_memory/zh/errors.md +5 -5
  131. package/dist/tools/prompts/team_memory/zh/principles.md +16 -16
  132. package/dist/tools/prompts/team_memory/zh/scenarios.md +7 -7
  133. package/dist/tools/prompts/team_memory/zh/tools.md +12 -23
  134. package/dist/tools/prompts/team_mgmt/en/tools.md +1 -1
  135. package/dist/tools/prompts/team_mgmt/zh/tools.md +1 -1
  136. package/package.json +1 -1
  137. package/dist/agent-priming.js +0 -2051
  138. package/dist/docs/dominds-agent-priming.md +0 -218
  139. package/dist/docs/dominds-agent-priming.zh.md +0 -196
  140. package/dist/docs/drive-logic-context-refactor-plan.zh.md +0 -338
  141. package/dist/docs/keep-going.md +0 -176
  142. package/dist/docs/keep-going.zh.md +0 -162
  143. package/dist/docs/showing-by-doing.md +0 -208
  144. package/dist/docs/showing-by-doing.zh.md +0 -177
  145. package/dist/docs/team-mgmt-toolset.md +0 -482
  146. package/dist/docs/team-mgmt-toolset.zh.md +0 -426
  147. package/dist/llm/driver.js +0 -4093
  148. package/dist/minds/promptdocs.js +0 -263
  149. package/dist/server/prompts-routes.js +0 -545
  150. package/dist/shared/team-mgmt-manual.js +0 -120
  151. package/dist/shared/types/prompts.js +0 -2
  152. package/dist/shared/types/tellask.js +0 -8
  153. package/dist/showing-by-doing.js +0 -1091
  154. package/dist/snippets/README.en.md +0 -3
  155. package/dist/snippets/README.md +0 -4
  156. package/dist/static/assets/index-DTGnX2Yo.js.map +0 -1
  157. package/dist/tellask.js +0 -439
  158. package/dist/tools/context-health.js +0 -177
  159. package/dist/tools/diag.js +0 -583
  160. package/dist/tools/team-mgmt.js +0 -3487
  161. package/dist/utils/task-doc.js +0 -236
@@ -333,10 +333,14 @@ function getAccessDeniedMessage(operation, targetPath, language = 'en') {
333
333
  lines.push('');
334
334
  if (language === 'zh') {
335
335
  lines.push(`- 说明:\`.minds/\` 是 rtws(运行时工作区)的“团队配置/记忆/资产”目录,通用文件工具无法读写(硬编码无条件拒绝)。`);
336
+ lines.push(`- 提示:如果你是在管理“个人记忆”,请不要尝试直接读/写/列目录 \`.minds/memory/**\`(会被拒绝)。请使用个人记忆工具:\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`。首次创建时直接 \`add_personal_memory\` 即可,目录会自动创建;\`path\` 不应包含你的成员 id。`);
337
+ lines.push(`- 提示:如果你是在管理“团队共享记忆”,请使用团队共享记忆工具:\`add_team_memory\` / \`replace_team_memory\` / \`drop_team_memory\` / \`clear_team_memory\`。`);
336
338
  lines.push(`- 提示:若团队配置了 \`team_mgmt\` 工具集,请使用其中工具(\`team_mgmt_*\`)代管;若未配置或你不具备权限,请诉请具备 \`team_mgmt\` 权限的成员/团队管理员成员代管。`);
337
339
  }
338
340
  else {
339
341
  lines.push(`- Note: \`.minds/\` stores rtws (runtime workspace) team config/memory/assets and is hard-denied for general file tools.`);
342
+ lines.push(`- Hint: If you're trying to manage **personal memory**, do not read/write/list \`.minds/memory/**\` directly (it will be denied). Use personal-memory tools: \`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`. For first-time setup, just call \`add_personal_memory\`—the directory is created automatically; \`path\` must not include your member id.`);
343
+ lines.push(`- Hint: If you're trying to manage **team shared memory**, use: \`add_team_memory\` / \`replace_team_memory\` / \`drop_team_memory\` / \`clear_team_memory\`.`);
340
344
  lines.push(`- Hint: If your team configured the \`team_mgmt\` toolset, use its tools (\`team_mgmt_*\`); otherwise (or if you lack access), tellask a team-admin / a member with \`team_mgmt\` access to manage it for you.`);
341
345
  }
342
346
  }
@@ -140,7 +140,9 @@ function parseAppsHostMessageFromKernel(v) {
140
140
  const grammar = asString(prompt['grammar']);
141
141
  const userLanguageCode = asLanguageCode(prompt['userLanguageCode']);
142
142
  const originRaw = asString(prompt['origin']);
143
- const origin = originRaw === 'user' || originRaw === 'diligence_push' ? originRaw : undefined;
143
+ const origin = originRaw === 'user' || originRaw === 'diligence_push' || originRaw === 'runtime'
144
+ ? originRaw
145
+ : undefined;
144
146
  if (!content)
145
147
  throw new Error('Invalid run_control_apply payload: prompt.content required');
146
148
  if (!msgId)
package/dist/cli/read.js CHANGED
@@ -10,11 +10,44 @@
10
10
  * --no-hints Don't show hints
11
11
  * --only-prompt Show only system prompt
12
12
  * --only-mem Show only memories
13
- * --audit Run built-in prompt audit checks
13
+ * --audit Run prompt audit via hidden teammate @fuxi (skip when default LLM unavailable)
14
14
  * --fail-on-audit-warning Exit non-zero when audit emits warnings
15
15
  * --find <pattern> Find case-insensitive text in rendered output
16
16
  * --help Show help
17
17
  */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
18
51
  Object.defineProperty(exports, "__esModule", { value: true });
19
52
  exports.main = main;
20
53
  const promises_1 = require("fs/promises");
@@ -26,7 +59,7 @@ function printUsage() {
26
59
  console.log('Usage: dominds read [<member-id>] [--no-hints] [--only-prompt|--only-mem] [--audit] [--find <pattern>]');
27
60
  console.log('');
28
61
  console.log('Print agent system prompt and memories with filtering flags.');
29
- console.log('`--audit` also includes static toolset checks (registry vs `.minds/mcp.yaml` declarations).');
62
+ console.log('`--audit` runs prompt audit via hidden teammate @fuxi using default LLM config (skips when unavailable), and also includes static toolset checks (registry vs `.minds/mcp.yaml` declarations).');
30
63
  console.log('When <member-id> is omitted, reads all visible team members.');
31
64
  console.log('');
32
65
  console.log("Note: rtws (runtime workspace) directory is `process.cwd()`. Use 'dominds -C <dir> read' to run in another rtws.");
@@ -40,118 +73,259 @@ function printUsage() {
40
73
  console.log(' dominds read ux --only-prompt --find "pending Tellask"');
41
74
  console.log(' dominds read --only-prompt --audit --fail-on-audit-warning');
42
75
  }
43
- function normalizeForDuplicateScan(line) {
44
- return line
45
- .trim()
46
- .replace(/^[-*]\s+/, '')
47
- .replace(/[`*_]/g, '')
48
- .replace(/\s+/g, ' ')
49
- .toLowerCase();
76
+ function isRecord(value) {
77
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
50
78
  }
51
- function buildPromptAudit(systemPrompt) {
52
- const checks = [
53
- {
54
- id: 'collaboration_protocol',
55
- label: 'Has collaboration protocol section',
56
- pass: /## (Collaboration Protocol|协作协议)/.test(systemPrompt),
57
- },
58
- {
59
- id: 'response_closes_round',
60
- label: 'Has "response closes call round" rule',
61
- pass: /response closes that call round/.test(systemPrompt) ||
62
- /收到回贴即表示该轮调用已结束/.test(systemPrompt),
63
- },
64
- {
65
- id: 'pending_wait_guard',
66
- label: 'Has pending tellask wait guard',
67
- pass: /pending Tellask|pending tellask/.test(systemPrompt) ||
68
- /存在明确 pending tellask/.test(systemPrompt),
69
- },
70
- {
71
- id: 'relay_ban',
72
- label: 'Has no-human-relay rule',
73
- pass: /relay for executable teammate work/.test(systemPrompt) || /转发员/.test(systemPrompt),
74
- },
75
- {
76
- id: 'tellask_function_boundary',
77
- label: 'Has tellask vs function-calling boundary',
78
- pass: /native function-calling/.test(systemPrompt) &&
79
- (/is only for tellasking teammates\/freshBootsReasoning\/askHuman/.test(systemPrompt) ||
80
- /仅用于诉请队友\/freshBootsReasoning\/askHuman/.test(systemPrompt)),
81
- },
82
- {
83
- id: 'fbr_phase_contract',
84
- label: 'Has FBR phase contract',
85
- pass: /FBR phase contract|FBR 阶段协议/.test(systemPrompt),
79
+ function truncateForAuditInput(text, maxChars) {
80
+ if (text.length <= maxChars)
81
+ return { text, truncated: false };
82
+ return { text: text.slice(0, maxChars), truncated: true };
83
+ }
84
+ async function runFuxiAuditCall(runtime, userContent) {
85
+ let output = '';
86
+ let sawFuncCall = false;
87
+ const receiver = {
88
+ thinkingStart: async () => { },
89
+ thinkingChunk: async () => { },
90
+ thinkingFinish: async () => { },
91
+ sayingStart: async () => { },
92
+ sayingChunk: async (chunk) => {
93
+ output += chunk;
86
94
  },
87
- {
88
- id: 'taskdoc_encapsulation',
89
- label: 'Has Taskdoc encapsulation section',
90
- pass: /Taskdoc encapsulation & access restrictions/.test(systemPrompt) ||
91
- /差遣牒.*封装/.test(systemPrompt),
95
+ sayingFinish: async () => { },
96
+ funcCall: async () => {
97
+ sawFuncCall = true;
92
98
  },
93
- ];
94
- const hasDomindsRuntime = /Dominds runtime|genuine Codex CLI/.test(systemPrompt);
95
- const hasCodexHostIdentity = /You are GPT-5\.2 running in the Codex CLI/.test(systemPrompt) ||
96
- /^You are Codex CLI\.$/m.test(systemPrompt);
97
- const toolSectionMarkers = ['\n## Intrinsic Tools\n', '\n## 内置工具\n'];
98
- let duplicateScope = systemPrompt;
99
- for (const marker of toolSectionMarkers) {
100
- const idx = duplicateScope.indexOf(marker);
101
- if (idx >= 0) {
102
- duplicateScope = duplicateScope.slice(0, idx);
103
- break;
99
+ };
100
+ const context = [{ type: 'environment_msg', role: 'user', content: userContent }];
101
+ await runtime.llmGen.genToReceiver(runtime.providerCfg, runtime.auditAgent, runtime.auditorSystemPrompt, [], context, receiver, 0);
102
+ const trimmed = output.trim();
103
+ if (trimmed.length > 0)
104
+ return trimmed;
105
+ if (sawFuncCall)
106
+ return '{"verdict":"WARN","warnings":["LLM emitted tool call during prompt audit"],"rewrite":""}';
107
+ return '';
108
+ }
109
+ function parseFuxiAuditJson(raw) {
110
+ const start = raw.indexOf('{');
111
+ const end = raw.lastIndexOf('}');
112
+ if (start < 0 || end < start)
113
+ return null;
114
+ const candidate = raw.slice(start, end + 1);
115
+ let parsed;
116
+ try {
117
+ parsed = JSON.parse(candidate);
118
+ }
119
+ catch {
120
+ return null;
121
+ }
122
+ if (!isRecord(parsed))
123
+ return null;
124
+ const verdictRaw = parsed['verdict'];
125
+ if (verdictRaw !== 'PASS' && verdictRaw !== 'WARN')
126
+ return null;
127
+ const warningsRaw = parsed['warnings'];
128
+ if (!Array.isArray(warningsRaw))
129
+ return null;
130
+ const warnings = [];
131
+ for (const item of warningsRaw) {
132
+ if (typeof item !== 'string')
133
+ return null;
134
+ const trimmed = item.trim();
135
+ if (trimmed.length === 0)
136
+ continue;
137
+ warnings.push(trimmed);
138
+ }
139
+ const rewriteRaw = parsed['rewrite'];
140
+ const rewriteSuggestion = typeof rewriteRaw === 'string' && rewriteRaw.trim().length > 0 ? rewriteRaw.trim() : undefined;
141
+ return { verdict: verdictRaw, warnings, rewriteSuggestion };
142
+ }
143
+ async function preparePromptAuditRuntime(team) {
144
+ const fuxi = team.getMember('fuxi');
145
+ if (!fuxi) {
146
+ return { kind: 'skip', reason: 'Hidden teammate @fuxi is not available in current team.' };
147
+ }
148
+ const providerKey = fuxi.provider ?? team.memberDefaults.provider;
149
+ const modelKey = fuxi.model ?? team.memberDefaults.model;
150
+ if (!providerKey || !modelKey) {
151
+ return {
152
+ kind: 'skip',
153
+ reason: 'Default LLM provider/model is not configured for @fuxi (resolved from member + member_defaults).',
154
+ };
155
+ }
156
+ let providerCfg;
157
+ try {
158
+ const { LlmConfig } = await Promise.resolve().then(() => __importStar(require('../llm/client')));
159
+ const llmCfg = await LlmConfig.load();
160
+ const resolved = llmCfg.getProvider(providerKey);
161
+ if (!resolved) {
162
+ return {
163
+ kind: 'skip',
164
+ reason: `Provider '${providerKey}' is missing in effective LLM config.`,
165
+ };
104
166
  }
167
+ if (!resolved.models || !Object.prototype.hasOwnProperty.call(resolved.models, modelKey)) {
168
+ return {
169
+ kind: 'skip',
170
+ reason: `Model '${modelKey}' is not configured under provider '${providerKey}'.`,
171
+ };
172
+ }
173
+ providerCfg = resolved;
105
174
  }
106
- const lineCounts = new Map();
107
- const representative = new Map();
108
- for (const rawLine of duplicateScope.split('\n')) {
109
- const line = rawLine.trim();
110
- if (line === '' || line.startsWith('#'))
111
- continue;
112
- const normalized = normalizeForDuplicateScan(line);
113
- if (normalized.length < 24)
114
- continue;
115
- lineCounts.set(normalized, (lineCounts.get(normalized) ?? 0) + 1);
116
- if (!representative.has(normalized))
117
- representative.set(normalized, line);
118
- }
119
- const duplicates = Array.from(lineCounts.entries())
120
- .filter(([, count]) => count > 1)
121
- .sort((a, b) => b[1] - a[1])
122
- .slice(0, 12)
123
- .map(([normalized, count]) => ({
124
- line: representative.get(normalized) ?? normalized,
125
- count,
126
- }));
127
- const warnings = [];
128
- for (const check of checks) {
129
- if (!check.pass)
130
- warnings.push(`Missing: ${check.label}`);
175
+ catch (err) {
176
+ return {
177
+ kind: 'skip',
178
+ reason: `Failed to load effective LLM config: ${err instanceof Error ? err.message : String(err)}`,
179
+ };
180
+ }
181
+ if (providerCfg.apiType !== 'codex') {
182
+ const envVar = providerCfg.apiKeyEnvVar;
183
+ const envValue = process.env[envVar];
184
+ const envConfigured = typeof envValue === 'string' && envValue.trim().length > 0;
185
+ if (!envConfigured) {
186
+ return {
187
+ kind: 'skip',
188
+ reason: `Provider env var '${envVar}' is not configured (required for non-codex providers).`,
189
+ };
190
+ }
191
+ }
192
+ const { getLlmGenerator } = await Promise.resolve().then(() => __importStar(require('../llm/gen/registry')));
193
+ const llmGen = getLlmGenerator(providerCfg.apiType);
194
+ if (!llmGen) {
195
+ return {
196
+ kind: 'skip',
197
+ reason: `LLM generator not found for apiType='${providerCfg.apiType}'.`,
198
+ };
131
199
  }
132
- if (hasDomindsRuntime && hasCodexHostIdentity) {
133
- warnings.push('Potential host identity conflict: both Dominds runtime and Codex host identity text found.');
200
+ let auditorSystemPrompt;
201
+ try {
202
+ const minds = await (0, load_1.loadAgentMinds)('fuxi', undefined, { missingToolsetPolicy: 'silent' });
203
+ auditorSystemPrompt = minds.systemPrompt;
134
204
  }
135
- if (duplicates.length > 0) {
136
- warnings.push(`Detected ${duplicates.length} repeated prompt lines (top duplicates shown).`);
205
+ catch (err) {
206
+ return {
207
+ kind: 'skip',
208
+ reason: `Failed to load @fuxi minds: ${err instanceof Error ? err.message : String(err)}`,
209
+ };
210
+ }
211
+ const auditAgent = new team_1.Team.Member({
212
+ id: fuxi.id,
213
+ name: fuxi.name,
214
+ provider: providerKey,
215
+ model: modelKey,
216
+ model_params: fuxi.model_params,
217
+ streaming: fuxi.streaming,
218
+ hidden: true,
219
+ internal_allow_minds: true,
220
+ });
221
+ try {
222
+ const probe = await runFuxiAuditCall({
223
+ kind: 'ready',
224
+ auditorId: 'fuxi',
225
+ providerKey,
226
+ modelKey,
227
+ providerCfg,
228
+ llmGen,
229
+ auditAgent,
230
+ auditorSystemPrompt,
231
+ }, 'Connectivity check for prompt audit. Reply with a short JSON: {"verdict":"PASS","warnings":[],"rewrite":""}');
232
+ if (probe.trim().length === 0) {
233
+ return { kind: 'skip', reason: 'Connectivity probe returned empty response.' };
234
+ }
235
+ }
236
+ catch (err) {
237
+ return {
238
+ kind: 'skip',
239
+ reason: `Connectivity probe failed: ${err instanceof Error ? err.message : String(err)}`,
240
+ };
241
+ }
242
+ return {
243
+ kind: 'ready',
244
+ auditorId: 'fuxi',
245
+ providerKey,
246
+ modelKey,
247
+ providerCfg,
248
+ llmGen,
249
+ auditAgent,
250
+ auditorSystemPrompt,
251
+ };
252
+ }
253
+ async function buildPromptAudit(targetMemberId, systemPrompt, runtime) {
254
+ if (runtime.kind === 'skip') {
255
+ return {
256
+ mode: 'skipped',
257
+ targetMemberId,
258
+ auditorId: 'fuxi',
259
+ warnings: [],
260
+ skipReason: runtime.reason,
261
+ };
262
+ }
263
+ const clipped = truncateForAuditInput(systemPrompt, 28000);
264
+ const userPrompt = [
265
+ '你是隐藏队友 @fuxi。请审计下面候选系统提示词,只关注会导致真实执行偏差/协作风险的问题,忽略纯措辞润色。',
266
+ '只输出 JSON,不要 markdown,不要额外解释。',
267
+ 'JSON schema: {"verdict":"PASS|WARN","warnings":["..."],"rewrite":"..."}',
268
+ '- 若没有实质问题:verdict=PASS 且 warnings=[]。',
269
+ '- 若有问题:verdict=WARN,warnings 只列实质问题(最多 5 条)。',
270
+ '- rewrite 提供一段可直接替换的合并改写建议(最多 8 行)。',
271
+ `target_member_id: ${targetMemberId}`,
272
+ `prompt_truncated: ${clipped.truncated ? 'true' : 'false'}`,
273
+ 'candidate_system_prompt:',
274
+ clipped.text,
275
+ ].join('\n\n');
276
+ let raw = '';
277
+ try {
278
+ raw = await runFuxiAuditCall(runtime, userPrompt);
137
279
  }
138
- return { checks, duplicates, warnings };
280
+ catch (err) {
281
+ return {
282
+ mode: 'skipped',
283
+ targetMemberId,
284
+ auditorId: 'fuxi',
285
+ warnings: [],
286
+ skipReason: `@fuxi audit call failed: ${err instanceof Error ? err.message : String(err)}`,
287
+ };
288
+ }
289
+ const parsed = parseFuxiAuditJson(raw);
290
+ if (!parsed) {
291
+ return {
292
+ mode: 'fuxi_llm',
293
+ targetMemberId,
294
+ auditorId: 'fuxi',
295
+ providerKey: runtime.providerKey,
296
+ modelKey: runtime.modelKey,
297
+ verdict: 'WARN',
298
+ warnings: ['@fuxi audit output is not valid JSON as requested'],
299
+ rewriteSuggestion: raw.trim().length > 0 ? raw.trim() : undefined,
300
+ };
301
+ }
302
+ const warnings = parsed.warnings;
303
+ const verdict = warnings.length === 0 ? 'PASS' : parsed.verdict;
304
+ return {
305
+ mode: 'fuxi_llm',
306
+ targetMemberId,
307
+ auditorId: 'fuxi',
308
+ providerKey: runtime.providerKey,
309
+ modelKey: runtime.modelKey,
310
+ verdict,
311
+ warnings,
312
+ rewriteSuggestion: parsed.rewriteSuggestion,
313
+ };
139
314
  }
140
315
  function printPromptAudit(report) {
141
316
  process.stdout.write('\n## Prompt Audit\n');
142
- for (const check of report.checks) {
143
- const tag = check.pass ? 'OK' : 'MISS';
144
- process.stdout.write(`- [${tag}] ${check.label}\n`);
145
- }
146
- if (report.duplicates.length > 0) {
147
- process.stdout.write('- Duplicate Lines (top):\n');
148
- for (const d of report.duplicates) {
149
- process.stdout.write(` - x${d.count}: ${d.line}\n`);
150
- }
317
+ process.stdout.write(`- Target: @${report.targetMemberId}\n`);
318
+ if (report.mode === 'skipped') {
319
+ process.stdout.write('- Mode: skipped (@fuxi audit disabled due to unavailable default LLM)\n');
320
+ process.stdout.write(`- Reason: ${report.skipReason ?? 'unknown'}\n`);
321
+ process.stdout.write('- Warnings: none (audit step skipped)\n');
322
+ return;
151
323
  }
152
- else {
153
- process.stdout.write('- Duplicate Lines: none\n');
324
+ process.stdout.write('- Mode: @fuxi (LLM)\n');
325
+ if (report.providerKey && report.modelKey) {
326
+ process.stdout.write(`- Runtime: provider='${report.providerKey}', model='${report.modelKey}'\n`);
154
327
  }
328
+ process.stdout.write(`- Verdict: ${report.verdict ?? 'WARN'}\n`);
155
329
  if (report.warnings.length > 0) {
156
330
  process.stdout.write('- Warnings:\n');
157
331
  for (const warning of report.warnings) {
@@ -161,6 +335,10 @@ function printPromptAudit(report) {
161
335
  else {
162
336
  process.stdout.write('- Warnings: none\n');
163
337
  }
338
+ if (report.rewriteSuggestion && report.rewriteSuggestion.trim().length > 0) {
339
+ process.stdout.write('- Suggested Rewrite:\n');
340
+ process.stdout.write(`${report.rewriteSuggestion.trim()}\n`);
341
+ }
164
342
  }
165
343
  function listExplicitToolsets(member) {
166
344
  if (!member.toolsets)
@@ -401,6 +579,7 @@ async function main() {
401
579
  const team = await team_1.Team.load();
402
580
  const targetMemberIds = resolveTargetMemberIds(team, parsed.memberId);
403
581
  const isMultiMemberRun = targetMemberIds.length > 1;
582
+ const promptAuditRuntime = parsed.audit ? await preparePromptAuditRuntime(team) : undefined;
404
583
  const toolsetAudit = parsed.audit
405
584
  ? buildToolsetAuditReport({
406
585
  team,
@@ -433,7 +612,10 @@ async function main() {
433
612
  }
434
613
  }
435
614
  if (parsed.audit) {
436
- const report = buildPromptAudit(systemPrompt);
615
+ const report = await buildPromptAudit(agent.id, systemPrompt, promptAuditRuntime ?? {
616
+ kind: 'skip',
617
+ reason: 'Prompt audit runtime was not initialized.',
618
+ });
437
619
  printPromptAudit(report);
438
620
  auditWarningCount += report.warnings.length;
439
621
  }
package/dist/dialog.js CHANGED
@@ -761,8 +761,8 @@ class Dialog {
761
761
  async updateQuestions4Human(questions) {
762
762
  return await this.dlgStore.updateQuestions4Human(this, questions);
763
763
  }
764
- async persistUserMessage(content, msgId, grammar, userLanguageCode, q4hAnswerCallIds) {
765
- return await this.dlgStore.persistUserMessage(this, content, msgId, grammar, userLanguageCode, q4hAnswerCallIds);
764
+ async persistUserMessage(content, msgId, grammar, origin, userLanguageCode, q4hAnswerCallIds) {
765
+ return await this.dlgStore.persistUserMessage(this, content, msgId, grammar, origin, userLanguageCode, q4hAnswerCallIds);
766
766
  }
767
767
  async persistAgentMessage(content, genseq, type, provider_data, reasoning) {
768
768
  return await this.dlgStore.persistAgentMessage(this, content, genseq, type, provider_data, reasoning);
@@ -1153,7 +1153,7 @@ class DialogStore {
1153
1153
  /**
1154
1154
  * Persist a user message to storage
1155
1155
  */
1156
- async persistUserMessage(_dialog, _content, _msgId, _grammar, _userLanguageCode, _q4hAnswerCallIds) { }
1156
+ async persistUserMessage(_dialog, _content, _msgId, _grammar, _origin, _userLanguageCode, _q4hAnswerCallIds) { }
1157
1157
  /**
1158
1158
  * Persist an assistant message to storage
1159
1159
  */
@@ -32,7 +32,7 @@ The same information can be categorized by “who needs to see it / who maintain
32
32
 
33
33
  - **Individual-scope (per-agent / per-dialog)**:
34
34
  - `persona` / `knowledge` / `lessons` (role definitions assigned per member)
35
- - individual memory (`memory`)
35
+ - individual memory (`personal_memory`)
36
36
  - dialog history (including tool calls and outputs)
37
37
  - reminders (working set / worklog)
38
38
  - **Collective-scope (shared by team/task)**:
@@ -102,11 +102,17 @@ Individual memory is your long-lived “how I work” asset, especially a compac
102
102
  - exact paths of key docs/code you own
103
103
  - minimal key facts (entrypoints, key symbols, local contracts)
104
104
 
105
- This lets you start work within your scope with “0 ripgrep”. The hard constraint is accuracy: if you change related files or detect staleness/conflicts, immediately `replace_memory` to keep it true.
105
+ This lets you start work within your scope with “0 ripgrep”. The hard constraint is accuracy: if you change related files or detect staleness/conflicts, immediately `replace_personal_memory` to keep it true.
106
106
 
107
107
  Tools:
108
108
 
109
- - `add_memory` / `replace_memory` / `drop_memory` / `clear_memory`
109
+ - `add_personal_memory` / `replace_personal_memory` / `drop_personal_memory` / `clear_personal_memory`
110
+
111
+ Key notes:
112
+
113
+ - Do not read/write/list `.minds/memory/**` via general file tools (it will be hard-denied). Manage personal memory via the tools above.
114
+ - Personal memory is automatically isolated on disk under `.minds/memory/individual/<member-id>/...`, so your `path` must NOT include your member id (do not write `<member-id>/...`).
115
+ - If you have zero personal memory entries, just call `add_personal_memory` — the directory will be created automatically.
110
116
 
111
117
  ### B) Task-term memory: Taskdoc is the single source of truth
112
118
 
@@ -202,7 +208,7 @@ The goal for agents’ day-to-day work is not “write more docs”. It’s a lo
202
208
  - **Taskdoc `constraints`**: hard rules/safety/compliance/style (must be visible to all mainlines)
203
209
  - **Team memory `team_memory`**: stable team conventions and invariants (worth reusing)
204
210
  - **Env notes `.minds/env*.md`**: rtws baseline facts, runtime constraints, gotchas (align humans + all agents to the same environment)
205
- - **Individual memory `memory`**: personal preferences + responsibility-area rtws index (keep accurate)
211
+ - **Individual memory `personal_memory`**: personal preferences + responsibility-area rtws index (keep accurate)
206
212
  - **Reminders**: short-term, high-frequency details (working set / worklog; delete freely)
207
213
  - **Dialog history / tool output**: disposable by default; only keep distilled excerpts, not raw dumps
208
214
 
@@ -32,7 +32,7 @@ TL;DR:
32
32
 
33
33
  - **个体记忆(个人/对话局部)**:
34
34
  - `persona` / `knowledge` / `lessons`(按成员分配的角色定义)
35
- - 个人记忆(`memory`)
35
+ - 个人记忆(`personal_memory`)
36
36
  - 对话历史(含工具调用与反馈)
37
37
  - 提醒项(工作集/工作日志)
38
38
  - **集体记忆(团队/任务共享)**:
@@ -101,11 +101,17 @@ TL;DR:
101
101
  - 你负责的关键文档/代码的**精确路径**
102
102
  - 对应的最小关键事实(入口点、关键符号、局部契约)
103
103
 
104
- 这样你在职责范围内可以尽量做到“0 次 ripgrep 就能开工”。同时有一个硬约束:**必须保持准确**——一旦你改了相关文件或发现记忆过期/冲突,立刻用 `replace_memory` 更新。
104
+ 这样你在职责范围内可以尽量做到“0 次 ripgrep 就能开工”。同时有一个硬约束:**必须保持准确**——一旦你改了相关文件或发现记忆过期/冲突,立刻用 `replace_personal_memory` 更新。
105
105
 
106
106
  工具:
107
107
 
108
- - `add_memory` / `replace_memory` / `drop_memory` / `clear_memory`
108
+ - `add_personal_memory` / `replace_personal_memory` / `drop_personal_memory` / `clear_personal_memory`
109
+
110
+ 关键提示:
111
+
112
+ - 不要用通用文件工具去读/写/列目录 `.minds/memory/**`(会被硬拒绝);个人记忆应通过上述个人记忆工具管理。
113
+ - 个人记忆会自动隔离到 `.minds/memory/individual/<member-id>/...`,因此 `path` 不应包含你的成员 id(不要写 `<member-id>/...`)。
114
+ - 若你当前没有任何个人记忆条目,直接 `add_personal_memory` 即可:目录会由系统自动创建。
109
115
 
110
116
  ### B) 中期(任务)记忆:差遣牒(Taskdoc)是单一真源
111
117
 
@@ -201,7 +207,7 @@ TL;DR:
201
207
  - **差遣牒 `constraints`**:硬规则/安全/合规/风格(必须被所有主线及时看到)
202
208
  - **团队记忆 `team_memory`**:稳定的团队约定与不变量(值得长期复用)
203
209
  - **环境提示 `.minds/env*.md`**:rtws 的基本事实、运行约束、注意事项(让人类与所有智能体对齐同一环境)
204
- - **个人记忆 `memory`**:个人偏好 + 职责域 rtws 索引(保持准确)
210
+ - **个人记忆 `personal_memory`**:个人偏好 + 职责域 rtws 索引(保持准确)
205
211
  - **提醒项**:短期高频细节(工作集/工作日志,随时可删)
206
212
  - **对话历史/工具输出**:默认可丢弃;需要留的只留“精炼摘录”,不要长期背着原始转储
207
213
 
@@ -129,7 +129,7 @@ Notes:
129
129
  - Prefer an explicit allowlist over “anything in the rtws”.
130
130
  - For `team_mgmt`, that explicit allowlist is `.minds/**` (including `.minds/memory/**`) so the
131
131
  team manager can repair accidental corruptions made by other tools (even though `.minds/memory/**`
132
- already has dedicated `memory` / `team_memory` tools for normal use).
132
+ already has dedicated `personal_memory` / `team_memory` tools for normal use).
133
133
  - Require explicit `.minds/...` paths and validate them; do not support “implicitly scoped” paths
134
134
  like `team.yaml`.
135
135
 
@@ -429,7 +429,7 @@ member_defaults:
429
429
  model: gpt-5.2
430
430
  toolsets:
431
431
  - ws_read
432
- - memory
432
+ - personal_memory
433
433
  # Default posture: deny `.minds/` edits for normal members.
434
434
  # (Team management should be done via `team_mgmt` tools, not general file tools.)
435
435
  no_read_dirs:
@@ -106,7 +106,7 @@
106
106
  - 拒绝包含 `..` 的路径
107
107
  - 拒绝规范化后解析到 `.minds/` 之外的任何路径
108
108
  - 优先使用显式白名单而非" rtws 中的任何内容"
109
- - 对于 `team_mgmt`,该显式白名单是 `.minds/**`(包括 `.minds/memory/**`),以便团队管理者可以修复其他工具造成的意外损坏(即使 `.minds/memory/**` 已有专用的 `memory` / `team_memory` 工具供正常使用)
109
+ - 对于 `team_mgmt`,该显式白名单是 `.minds/**`(包括 `.minds/memory/**`),以便团队管理者可以修复其他工具造成的意外损坏(即使 `.minds/memory/**` 已有专用的 `personal_memory` / `team_memory` 工具供正常使用)
110
110
  - 需要显式的 `.minds/...` 路径并验证它们;不支持像 `team.yaml` 这样的"隐式作用域"路径
111
111
 
112
112
  ### 为什么需要专用工具集(而不是仅 `read_dirs` / `write_dirs`)?
@@ -373,7 +373,7 @@ member_defaults:
373
373
  model: gpt-5.2
374
374
  toolsets:
375
375
  - ws_read
376
- - memory
376
+ - personal_memory
377
377
  # 默认姿态:拒绝普通成员的 `.minds/` 编辑
378
378
  #(团队管理应通过 `team_mgmt` 工具完成,而非通用文件工具)
379
379
  no_read_dirs: