@geminilight/mindos 0.6.39 → 0.6.40

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 (714) hide show
  1. package/README.md +31 -15
  2. package/README_zh.md +31 -15
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +18 -17
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +68 -6
  12. package/_standalone/.next/routes-manifest.json +6 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  15. package/_standalone/.next/server/app/_global-error.html +2 -2
  16. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_not-found/page.js +2 -2
  24. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/agents/page.js +3 -3
  30. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  31. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route.js.nft.json +1 -1
  38. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/detect/route.js.nft.json +1 -1
  41. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
  45. package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +1 -1
  46. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/agent-activity/route.js +1 -1
  48. package/_standalone/.next/server/app/api/agent-activity/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/ask/route.js +137 -99
  51. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  52. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/backlinks/route.js +1 -1
  56. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/bootstrap/route.js +1 -1
  59. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/changes/route.js +1 -1
  62. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/export/route.js +3 -3
  65. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/file/import/route.js +2 -19
  69. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/file/route.js +1 -18
  72. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/files/route.js +1 -1
  75. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/git/route.js +1 -1
  78. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/graph/route.js +1 -1
  81. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/inbox/route.js +1 -0
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -0
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
  87. package/_standalone/.next/server/app/api/init/route.js +1 -1
  88. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route.js.nft.json +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  100. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route.js +1 -1
  102. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/recent-files/route.js +1 -1
  105. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/search/route.js +1 -1
  109. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  110. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  112. package/_standalone/.next/server/app/api/settings/list-models/route.js.nft.json +1 -1
  113. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  115. package/_standalone/.next/server/app/api/settings/reset-token/route.js.nft.json +1 -1
  116. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  118. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  119. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  121. package/_standalone/.next/server/app/api/settings/test-key/route.js.nft.json +1 -1
  122. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  123. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  128. package/_standalone/.next/server/app/api/setup/route.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/skills/route.js +2 -2
  131. package/_standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  134. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app/api/tree-version/route.js +1 -1
  136. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  137. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  138. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/api/update-check/route.js +1 -1
  141. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/api/workflows/route.js +2 -2
  144. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/changes/page.js +2 -2
  147. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/echo/[segment]/page.js +6 -6
  150. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  151. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  152. package/_standalone/.next/server/app/echo/page.js +2 -2
  153. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  154. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  155. package/_standalone/.next/server/app/explore/page.js +3 -3
  156. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  157. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  158. package/_standalone/.next/server/app/help/page.js +2 -2
  159. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  160. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  161. package/_standalone/.next/server/app/login/page.js +2 -2
  162. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  163. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  164. package/_standalone/.next/server/app/page.js +3 -3
  165. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  166. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/app/setup/page.js +2 -2
  168. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  169. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  170. package/_standalone/.next/server/app/trash/page.js +3 -3
  171. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  172. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  173. package/_standalone/.next/server/app/view/[...path]/page.js +4 -4
  174. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  175. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  176. package/_standalone/.next/server/app-paths-manifest.json +18 -17
  177. package/_standalone/.next/server/chunks/1550.js +1 -1
  178. package/_standalone/.next/server/chunks/1750.js +1 -0
  179. package/_standalone/.next/server/chunks/1955.js +11 -0
  180. package/_standalone/.next/server/chunks/3680.js +1 -0
  181. package/_standalone/.next/server/chunks/4497.js +219 -0
  182. package/_standalone/.next/server/chunks/5560.js +2 -0
  183. package/_standalone/.next/server/chunks/6365.js +52 -0
  184. package/_standalone/.next/server/chunks/6539.js +1 -1
  185. package/_standalone/.next/server/chunks/8388.js +15 -0
  186. package/_standalone/.next/server/chunks/953.js +42 -2
  187. package/_standalone/.next/server/functions-config-manifest.json +2 -1
  188. package/_standalone/.next/server/instrumentation.js +1 -1
  189. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  190. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  191. package/_standalone/.next/server/next-font-manifest.js +1 -1
  192. package/_standalone/.next/server/next-font-manifest.json +1 -1
  193. package/_standalone/.next/server/pages/500.html +2 -2
  194. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  195. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  196. package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.js +29 -0
  197. package/_standalone/.next/static/chunks/1239.10a0710c2772ab34.js +1 -0
  198. package/_standalone/.next/static/chunks/{1814.e2da5460ded71d71.js → 1814.2ee1d03297c0bccd.js} +1 -1
  199. package/_standalone/.next/static/chunks/{1a258343-030e4d6735874dd4.js → 1a258343-9803591e4aaee1f6.js} +1 -1
  200. package/_standalone/.next/static/chunks/2631.dc56e83472bde281.js +1 -0
  201. package/_standalone/.next/static/chunks/2872.045858d00bd8307f.js +8 -0
  202. package/_standalone/.next/static/chunks/2968.f10ccee9e7e2324d.js +2 -0
  203. package/_standalone/.next/static/chunks/3160-83a7e0b94414b3ac.js +1 -0
  204. package/_standalone/.next/static/chunks/{3637.4bcd01a4db78b894.js → 3637.f9a42cca59fd5bb5.js} +1 -1
  205. package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
  206. package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.js +6 -0
  207. package/_standalone/.next/static/chunks/516.24ee058b1d4b1fed.js +8 -0
  208. package/_standalone/.next/static/chunks/5627.c4337d7289acb31f.js +1 -0
  209. package/_standalone/.next/static/chunks/5956.b445072b35915129.js +1 -0
  210. package/_standalone/.next/static/chunks/6090-c98268ca726a68d3.js +1 -0
  211. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +1 -0
  212. package/_standalone/.next/static/chunks/6826.7b7d94dd0fd83812.js +1 -0
  213. package/_standalone/.next/static/chunks/{8409-de5726a4a278d28f.js → 6926-4af497b83952fa87.js} +1 -1
  214. package/_standalone/.next/static/chunks/7266-bb7be1128eccd48e.js +13 -0
  215. package/_standalone/.next/static/chunks/7753.63831cfc54a55fbb.js +1 -0
  216. package/_standalone/.next/static/chunks/862.9f526e964489e2e5.js +1 -0
  217. package/_standalone/.next/static/chunks/{1384-55276d40a9da4e88.js → 8663-de911d2d395622be.js} +2 -2
  218. package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
  219. package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +1 -0
  220. package/_standalone/.next/static/chunks/95247769.3b5caae1c1a76ce1.js +4 -0
  221. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +1 -0
  222. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-400c3c09b1540c14.js +1 -0
  223. package/_standalone/.next/static/chunks/app/_global-error/page-400c3c09b1540c14.js +1 -0
  224. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-3e08abb495ecd5fd.js +1 -0
  225. package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.js +5 -0
  226. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-400c3c09b1540c14.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-400c3c09b1540c14.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-400c3c09b1540c14.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/a2a/route-400c3c09b1540c14.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/acp/config/route-400c3c09b1540c14.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/acp/detect/route-400c3c09b1540c14.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/acp/install/route-400c3c09b1540c14.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/acp/registry/route-400c3c09b1540c14.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/acp/session/route-400c3c09b1540c14.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/agent-activity/route-400c3c09b1540c14.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/ask/route-400c3c09b1540c14.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-400c3c09b1540c14.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/auth/route-400c3c09b1540c14.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/backlinks/route-400c3c09b1540c14.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/bootstrap/route-400c3c09b1540c14.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/changes/route-400c3c09b1540c14.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/export/route-400c3c09b1540c14.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-400c3c09b1540c14.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/file/import/route-400c3c09b1540c14.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/file/route-400c3c09b1540c14.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/files/route-400c3c09b1540c14.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/git/route-400c3c09b1540c14.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/graph/route-400c3c09b1540c14.js +1 -0
  249. package/_standalone/.next/static/chunks/app/api/health/route-400c3c09b1540c14.js +1 -0
  250. package/_standalone/.next/static/chunks/app/api/inbox/route-400c3c09b1540c14.js +1 -0
  251. package/_standalone/.next/static/chunks/app/api/init/route-400c3c09b1540c14.js +1 -0
  252. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-400c3c09b1540c14.js +1 -0
  253. package/_standalone/.next/static/chunks/app/api/mcp/install/route-400c3c09b1540c14.js +1 -0
  254. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-400c3c09b1540c14.js +1 -0
  255. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-400c3c09b1540c14.js +1 -0
  256. package/_standalone/.next/static/chunks/app/api/mcp/status/route-400c3c09b1540c14.js +1 -0
  257. package/_standalone/.next/static/chunks/app/api/monitoring/route-400c3c09b1540c14.js +1 -0
  258. package/_standalone/.next/static/chunks/app/api/recent-files/route-400c3c09b1540c14.js +1 -0
  259. package/_standalone/.next/static/chunks/app/api/restart/route-400c3c09b1540c14.js +1 -0
  260. package/_standalone/.next/static/chunks/app/api/search/route-400c3c09b1540c14.js +1 -0
  261. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-400c3c09b1540c14.js +1 -0
  262. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-400c3c09b1540c14.js +1 -0
  263. package/_standalone/.next/static/chunks/app/api/settings/route-400c3c09b1540c14.js +1 -0
  264. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-400c3c09b1540c14.js +1 -0
  265. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-400c3c09b1540c14.js +1 -0
  266. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-400c3c09b1540c14.js +1 -0
  267. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-400c3c09b1540c14.js +1 -0
  268. package/_standalone/.next/static/chunks/app/api/setup/ls/route-400c3c09b1540c14.js +1 -0
  269. package/_standalone/.next/static/chunks/app/api/setup/route-400c3c09b1540c14.js +1 -0
  270. package/_standalone/.next/static/chunks/app/api/skills/route-400c3c09b1540c14.js +1 -0
  271. package/_standalone/.next/static/chunks/app/api/sync/route-400c3c09b1540c14.js +1 -0
  272. package/_standalone/.next/static/chunks/app/api/tree-version/route-400c3c09b1540c14.js +1 -0
  273. package/_standalone/.next/static/chunks/app/api/uninstall/route-400c3c09b1540c14.js +1 -0
  274. package/_standalone/.next/static/chunks/app/api/update/route-400c3c09b1540c14.js +1 -0
  275. package/_standalone/.next/static/chunks/app/api/update-check/route-400c3c09b1540c14.js +1 -0
  276. package/_standalone/.next/static/chunks/app/api/update-status/route-400c3c09b1540c14.js +1 -0
  277. package/_standalone/.next/static/chunks/app/api/workflows/route-400c3c09b1540c14.js +1 -0
  278. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +1 -0
  279. package/_standalone/.next/static/chunks/app/echo/[segment]/page-addf014fcf23fad5.js +11 -0
  280. package/_standalone/.next/static/chunks/app/echo/page-400c3c09b1540c14.js +1 -0
  281. package/_standalone/.next/static/chunks/app/explore/page-5eb2835e9e3ab4bb.js +4 -0
  282. package/_standalone/.next/static/chunks/app/help/page-3d0e1ceaa4abc243.js +1 -0
  283. package/_standalone/.next/static/chunks/app/layout-9378c1c8d3e5761b.js +186 -0
  284. package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
  285. package/_standalone/.next/static/chunks/app/page-9bae420fbbdc5fff.js +7 -0
  286. package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +1 -0
  287. package/_standalone/.next/static/chunks/app/trash/page-b61ef2d5cd4f8d73.js +1 -0
  288. package/_standalone/.next/static/chunks/app/view/[...path]/loading-400c3c09b1540c14.js +1 -0
  289. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +1 -0
  290. package/_standalone/.next/static/chunks/app/view/[...path]/page-44fa78cbea613a78.js +12 -0
  291. package/_standalone/.next/static/chunks/e71f6c19-4df85185bf989b49.js +1 -0
  292. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-400c3c09b1540c14.js +1 -0
  293. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-400c3c09b1540c14.js +1 -0
  294. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-400c3c09b1540c14.js +1 -0
  295. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-400c3c09b1540c14.js +1 -0
  296. package/_standalone/.next/static/chunks/webpack-c28c55d0a6021a6b.js +1 -0
  297. package/_standalone/.next/static/css/d300701f384db50d.css +1 -0
  298. package/_standalone/.next/static/rZLs1krFuduixvcVNe6q3/_buildManifest.js +1 -0
  299. package/_standalone/.next/trace +63 -53
  300. package/_standalone/.next/types/routes.d.ts +2 -1
  301. package/_standalone/.next/types/validator.ts +9 -0
  302. package/_standalone/__tests__/agent/chat-mode.test.ts +103 -0
  303. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +4 -3
  304. package/_standalone/__tests__/api/bootstrap.test.ts +0 -2
  305. package/_standalone/__tests__/api/file.test.ts +22 -1
  306. package/_standalone/__tests__/api/install-skill.test.ts +2 -2
  307. package/_standalone/__tests__/api/mcp-install.test.ts +9 -10
  308. package/_standalone/__tests__/api/setup.test.ts +2 -2
  309. package/_standalone/__tests__/api/test-key.test.ts +73 -147
  310. package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  311. package/_standalone/__tests__/ask/mode-capsule.test.ts +95 -0
  312. package/_standalone/__tests__/core/inbox.test.ts +250 -0
  313. package/_standalone/__tests__/core/skill-install-logic.test.ts +3 -3
  314. package/_standalone/__tests__/core/sync-status.test.ts +1 -1
  315. package/_standalone/__tests__/core/tools.test.ts +11 -6
  316. package/_standalone/__tests__/lib/echo-pages-visual-i18n.test.ts +2 -2
  317. package/_standalone/__tests__/lib/i18n-new-keys.test.ts +2 -2
  318. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +2 -2
  319. package/_standalone/__tests__/settings/activity-bar-update-badge.test.tsx +1 -1
  320. package/_standalone/__tests__/settings/settings-update-badge.test.tsx +1 -1
  321. package/_standalone/__tests__/settings/update-tab-availability-sync.test.tsx +1 -1
  322. package/_standalone/__tests__/settings/update-tab-browser.test.tsx +1 -1
  323. package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +1 -1
  324. package/_standalone/__tests__/setup.ts +3 -5
  325. package/_standalone/app/globals.css +11 -1
  326. package/_standalone/components/ActivityBar.tsx +26 -10
  327. package/_standalone/components/AskFab.tsx +1 -1
  328. package/_standalone/components/AskModal.tsx +1 -1
  329. package/_standalone/components/Backlinks.tsx +1 -1
  330. package/_standalone/components/CreateSpaceModal.tsx +7 -55
  331. package/_standalone/components/EchoSpotlight.tsx +1 -1
  332. package/_standalone/components/ExportModal.tsx +1 -1
  333. package/_standalone/components/FileTree.tsx +64 -79
  334. package/_standalone/components/FindInPage.tsx +1 -1
  335. package/_standalone/components/GuideCard.tsx +1 -1
  336. package/_standalone/components/ImportModal.tsx +1 -1
  337. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  338. package/_standalone/components/MarkdownView.tsx +11 -1
  339. package/_standalone/components/OnboardingView.tsx +1 -1
  340. package/_standalone/components/OrganizeToast.tsx +1 -1
  341. package/_standalone/components/Panel.tsx +82 -4
  342. package/_standalone/components/QuickSuggestion.tsx +1 -1
  343. package/_standalone/components/RightAgentDetailPanel.tsx +2 -2
  344. package/_standalone/components/RightAskPanel.tsx +58 -22
  345. package/_standalone/components/SearchModal.tsx +1 -1
  346. package/_standalone/components/Sidebar.tsx +1 -1
  347. package/_standalone/components/SidebarLayout.tsx +52 -16
  348. package/_standalone/components/SpaceInitToast.tsx +1 -1
  349. package/_standalone/components/SyncStatusBar.tsx +2 -2
  350. package/_standalone/components/SystemPulse.tsx +12 -6
  351. package/_standalone/components/TableOfContents.tsx +86 -39
  352. package/_standalone/components/agents/AgentActivitySection.tsx +225 -0
  353. package/_standalone/components/agents/AgentsMcpSection.tsx +7 -16
  354. package/_standalone/components/agents/AgentsOverviewSection.tsx +28 -27
  355. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +1 -1
  356. package/_standalone/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  357. package/_standalone/components/agents/AgentsSkillsSection.tsx +1 -1
  358. package/_standalone/components/agents/DiscoverAgentModal.tsx +1 -1
  359. package/_standalone/components/agents/RecentActivityFeed.tsx +49 -88
  360. package/_standalone/components/agents/agent-activity-shared.tsx +110 -0
  361. package/_standalone/components/ask/AgentSelectorCapsule.tsx +1 -1
  362. package/_standalone/components/ask/AskContent.tsx +332 -486
  363. package/_standalone/components/ask/AskHeader.tsx +61 -0
  364. package/_standalone/components/ask/FileChip.tsx +9 -5
  365. package/_standalone/components/ask/MessageList.tsx +88 -21
  366. package/_standalone/components/ask/ModeCapsule.tsx +180 -0
  367. package/_standalone/components/ask/ProviderModelCapsule.tsx +284 -0
  368. package/_standalone/components/ask/SessionHistory.tsx +63 -10
  369. package/_standalone/components/ask/SessionTabBar.tsx +1 -1
  370. package/_standalone/components/ask/ThinkingBlock.tsx +1 -1
  371. package/_standalone/components/ask/ToolCallBlock.tsx +28 -24
  372. package/_standalone/components/changes/ChangesBanner.tsx +1 -1
  373. package/_standalone/components/echo/EchoInsightCollapsible.tsx +1 -1
  374. package/_standalone/components/echo/EchoSegmentNav.tsx +1 -1
  375. package/_standalone/components/home/InboxSection.tsx +268 -0
  376. package/_standalone/components/panels/AgentsPanel.tsx +3 -2
  377. package/_standalone/components/panels/AgentsPanelHubNav.tsx +2 -6
  378. package/_standalone/components/panels/DiscoverPanel.tsx +1 -1
  379. package/_standalone/components/panels/EchoPanel.tsx +1 -1
  380. package/_standalone/components/panels/EchoSidebarStats.tsx +1 -1
  381. package/_standalone/components/panels/ImportHistoryPanel.tsx +1 -1
  382. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  383. package/_standalone/components/panels/PluginsPanel.tsx +1 -1
  384. package/_standalone/components/panels/SearchPanel.tsx +5 -2
  385. package/_standalone/components/panels/SyncPopover.tsx +1 -1
  386. package/_standalone/components/panels/WorkflowsPanel.tsx +1 -1
  387. package/_standalone/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  388. package/_standalone/components/renderers/agent-inspector/manifest.ts +16 -0
  389. package/_standalone/components/renderers/todo/TodoRenderer.tsx +489 -75
  390. package/_standalone/components/settings/AiTab.tsx +198 -127
  391. package/_standalone/components/settings/AppearanceTab.tsx +48 -50
  392. package/_standalone/components/settings/KnowledgeTab.tsx +92 -27
  393. package/_standalone/components/settings/McpAgentInstall.tsx +1 -1
  394. package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
  395. package/_standalone/components/settings/McpTab.tsx +145 -7
  396. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  397. package/_standalone/components/settings/SettingsContent.tsx +5 -2
  398. package/_standalone/components/settings/SyncTab.tsx +615 -230
  399. package/_standalone/components/settings/UninstallTab.tsx +1 -1
  400. package/_standalone/components/settings/UpdateTab.tsx +2 -2
  401. package/_standalone/components/settings/types.ts +4 -5
  402. package/_standalone/components/setup/StepAI.tsx +70 -49
  403. package/_standalone/components/setup/StepDots.tsx +1 -1
  404. package/_standalone/components/setup/StepReview.tsx +176 -8
  405. package/_standalone/components/setup/types.ts +11 -8
  406. package/_standalone/components/shared/ProviderSelect.tsx +134 -0
  407. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  408. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  409. package/_standalone/components/walkthrough/index.ts +1 -1
  410. package/_standalone/data/skills/mindos/SKILL.md +3 -3
  411. package/_standalone/data/skills/mindos-zh/SKILL.md +3 -3
  412. package/_standalone/hooks/useAcpDetection.ts +1 -1
  413. package/_standalone/hooks/useAskChat.ts +248 -0
  414. package/_standalone/hooks/useAskPanel.ts +24 -4
  415. package/_standalone/hooks/useAskSession.ts +15 -0
  416. package/_standalone/lib/acp/types.ts +1 -1
  417. package/_standalone/lib/api.ts +3 -1
  418. package/_standalone/lib/core/types.ts +2 -0
  419. package/_standalone/lib/i18n/modules/ai-chat.ts +35 -13
  420. package/_standalone/lib/i18n/modules/features.ts +2 -2
  421. package/_standalone/lib/i18n/modules/knowledge.ts +82 -2
  422. package/_standalone/lib/i18n/modules/navigation.ts +6 -2
  423. package/_standalone/lib/i18n/modules/onboarding.ts +39 -9
  424. package/_standalone/lib/i18n/modules/panels.ts +78 -29
  425. package/_standalone/lib/i18n/modules/settings.ts +207 -23
  426. package/_standalone/lib/inbox-upload.ts +93 -0
  427. package/_standalone/lib/settings-ai-client.ts +13 -12
  428. package/_standalone/lib/space-ai-init.ts +66 -0
  429. package/_standalone/lib/stores/McpStoreInit.tsx +18 -0
  430. package/_standalone/lib/stores/WalkthroughInit.tsx +20 -0
  431. package/_standalone/lib/stores/locale-store.ts +55 -0
  432. package/_standalone/lib/stores/mcp-store.ts +156 -0
  433. package/_standalone/lib/stores/walkthrough-store.ts +118 -0
  434. package/_standalone/package-lock.json +40 -8
  435. package/_standalone/package.json +3 -1
  436. package/_standalone/tsconfig.json +1 -1
  437. package/_standalone/tsconfig.tsbuildinfo +1 -1
  438. package/app/app/api/acp/detect/route.ts +29 -20
  439. package/app/app/api/agent-activity/route.ts +1 -1
  440. package/app/app/api/ask/route.ts +103 -29
  441. package/app/app/api/ask-sessions/route.ts +1 -0
  442. package/app/app/api/bootstrap/route.ts +1 -3
  443. package/app/app/api/file/route.ts +34 -4
  444. package/app/app/api/inbox/route.ts +61 -0
  445. package/app/app/api/settings/list-models/route.ts +73 -53
  446. package/app/app/api/settings/route.ts +46 -55
  447. package/app/app/api/settings/test-key/route.ts +57 -114
  448. package/app/app/api/setup/route.ts +31 -21
  449. package/app/app/api/sync/route.ts +122 -12
  450. package/app/app/api/update-check/route.ts +2 -2
  451. package/app/app/globals.css +11 -1
  452. package/app/app/layout.tsx +2 -3
  453. package/app/app/login/page.tsx +1 -1
  454. package/app/app/view/[...path]/ViewPageClient.tsx +10 -10
  455. package/app/app/view/[...path]/not-found.tsx +1 -1
  456. package/app/components/ActivityBar.tsx +26 -10
  457. package/app/components/AskFab.tsx +1 -1
  458. package/app/components/AskModal.tsx +1 -1
  459. package/app/components/Backlinks.tsx +1 -1
  460. package/app/components/CreateSpaceModal.tsx +7 -55
  461. package/app/components/DirView.tsx +93 -11
  462. package/app/components/EchoSpotlight.tsx +1 -1
  463. package/app/components/ExportModal.tsx +1 -1
  464. package/app/components/FileTree.tsx +64 -79
  465. package/app/components/FindInPage.tsx +1 -1
  466. package/app/components/GuideCard.tsx +1 -1
  467. package/app/components/HomeContent.tsx +21 -14
  468. package/app/components/ImportModal.tsx +1 -1
  469. package/app/components/KeyboardShortcuts.tsx +1 -1
  470. package/app/components/MarkdownView.tsx +11 -1
  471. package/app/components/OnboardingView.tsx +1 -1
  472. package/app/components/OrganizeToast.tsx +1 -1
  473. package/app/components/Panel.tsx +82 -4
  474. package/app/components/QuickSuggestion.tsx +1 -1
  475. package/app/components/RightAgentDetailPanel.tsx +2 -2
  476. package/app/components/RightAskPanel.tsx +58 -22
  477. package/app/components/SearchModal.tsx +1 -1
  478. package/app/components/Sidebar.tsx +1 -1
  479. package/app/components/SidebarLayout.tsx +52 -16
  480. package/app/components/SpaceInitToast.tsx +1 -1
  481. package/app/components/SyncStatusBar.tsx +2 -2
  482. package/app/components/SystemPulse.tsx +12 -6
  483. package/app/components/TableOfContents.tsx +86 -39
  484. package/app/components/TrashPageClient.tsx +1 -1
  485. package/app/components/UpdateOverlay.tsx +2 -2
  486. package/app/components/agents/AgentActivitySection.tsx +225 -0
  487. package/app/components/agents/AgentDetailContent.tsx +234 -3
  488. package/app/components/agents/AgentsContentPage.tsx +13 -2
  489. package/app/components/agents/AgentsMcpSection.tsx +7 -16
  490. package/app/components/agents/AgentsOverviewSection.tsx +28 -27
  491. package/app/components/agents/AgentsPanelA2aTab.tsx +1 -1
  492. package/app/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  493. package/app/components/agents/AgentsSkillsSection.tsx +1 -1
  494. package/app/components/agents/DiscoverAgentModal.tsx +1 -1
  495. package/app/components/agents/RecentActivityFeed.tsx +49 -88
  496. package/app/components/agents/agent-activity-shared.tsx +110 -0
  497. package/app/components/agents/agents-content-model.ts +2 -2
  498. package/app/components/ask/AgentSelectorCapsule.tsx +1 -1
  499. package/app/components/ask/AskContent.tsx +332 -486
  500. package/app/components/ask/AskHeader.tsx +61 -0
  501. package/app/components/ask/FileChip.tsx +9 -5
  502. package/app/components/ask/MessageList.tsx +88 -21
  503. package/app/components/ask/ModeCapsule.tsx +180 -0
  504. package/app/components/ask/ProviderModelCapsule.tsx +284 -0
  505. package/app/components/ask/SessionHistory.tsx +63 -10
  506. package/app/components/ask/SessionTabBar.tsx +1 -1
  507. package/app/components/ask/ThinkingBlock.tsx +1 -1
  508. package/app/components/ask/ToolCallBlock.tsx +28 -24
  509. package/app/components/changes/ChangesBanner.tsx +1 -1
  510. package/app/components/changes/ChangesContentPage.tsx +1 -1
  511. package/app/components/echo/EchoInsightCollapsible.tsx +1 -1
  512. package/app/components/echo/EchoSegmentNav.tsx +1 -1
  513. package/app/components/echo/EchoSegmentPageClient.tsx +1 -1
  514. package/app/components/explore/ExploreContent.tsx +1 -1
  515. package/app/components/help/HelpContent.tsx +1 -1
  516. package/app/components/home/InboxSection.tsx +268 -0
  517. package/app/components/panels/AgentsPanel.tsx +3 -2
  518. package/app/components/panels/AgentsPanelHubNav.tsx +2 -6
  519. package/app/components/panels/DiscoverPanel.tsx +1 -1
  520. package/app/components/panels/EchoPanel.tsx +1 -1
  521. package/app/components/panels/EchoSidebarStats.tsx +1 -1
  522. package/app/components/panels/ImportHistoryPanel.tsx +1 -1
  523. package/app/components/panels/PanelHeader.tsx +1 -1
  524. package/app/components/panels/PluginsPanel.tsx +1 -1
  525. package/app/components/panels/SearchPanel.tsx +5 -2
  526. package/app/components/panels/SyncPopover.tsx +1 -1
  527. package/app/components/panels/WorkflowsPanel.tsx +1 -1
  528. package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  529. package/app/components/renderers/todo/TodoRenderer.tsx +489 -75
  530. package/app/components/settings/AiTab.tsx +198 -127
  531. package/app/components/settings/AppearanceTab.tsx +48 -50
  532. package/app/components/settings/KnowledgeTab.tsx +92 -27
  533. package/app/components/settings/McpAgentInstall.tsx +1 -1
  534. package/app/components/settings/McpSkillsSection.tsx +1 -1
  535. package/app/components/settings/McpTab.tsx +145 -7
  536. package/app/components/settings/PluginsTab.tsx +1 -1
  537. package/app/components/settings/SettingsContent.tsx +5 -2
  538. package/app/components/settings/SyncTab.tsx +615 -230
  539. package/app/components/settings/UninstallTab.tsx +1 -1
  540. package/app/components/settings/UpdateTab.tsx +2 -2
  541. package/app/components/settings/types.ts +4 -5
  542. package/app/components/setup/StepAI.tsx +70 -49
  543. package/app/components/setup/StepDots.tsx +1 -1
  544. package/app/components/setup/StepReview.tsx +176 -8
  545. package/app/components/setup/index.tsx +73 -39
  546. package/app/components/setup/types.ts +11 -8
  547. package/app/components/shared/ProviderSelect.tsx +134 -0
  548. package/app/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  549. package/app/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  550. package/app/components/walkthrough/index.ts +1 -1
  551. package/app/data/skills/mindos/SKILL.md +3 -3
  552. package/app/data/skills/mindos-zh/SKILL.md +3 -3
  553. package/app/hooks/useAcpDetection.ts +1 -1
  554. package/app/hooks/useAskChat.ts +248 -0
  555. package/app/hooks/useAskPanel.ts +24 -4
  556. package/app/hooks/useAskSession.ts +15 -0
  557. package/app/lib/acp/types.ts +1 -1
  558. package/app/lib/actions.ts +13 -0
  559. package/app/lib/agent/log.ts +2 -0
  560. package/app/lib/agent/model.ts +69 -81
  561. package/app/lib/agent/prompt.ts +27 -0
  562. package/app/lib/agent/providers.ts +299 -0
  563. package/app/lib/agent/tools.ts +26 -4
  564. package/app/lib/api.ts +3 -1
  565. package/app/lib/core/agent-audit-log.ts +7 -0
  566. package/app/lib/core/fs-ops.ts +9 -4
  567. package/app/lib/core/inbox.ts +181 -0
  568. package/app/lib/core/index.ts +4 -0
  569. package/app/lib/core/tree.ts +3 -0
  570. package/app/lib/core/types.ts +2 -0
  571. package/app/lib/fs.ts +26 -2
  572. package/app/lib/i18n/modules/ai-chat.ts +35 -13
  573. package/app/lib/i18n/modules/features.ts +2 -2
  574. package/app/lib/i18n/modules/knowledge.ts +82 -2
  575. package/app/lib/i18n/modules/navigation.ts +6 -2
  576. package/app/lib/i18n/modules/onboarding.ts +39 -9
  577. package/app/lib/i18n/modules/panels.ts +78 -29
  578. package/app/lib/i18n/modules/settings.ts +207 -23
  579. package/app/lib/inbox-upload.ts +93 -0
  580. package/app/lib/mcp-agents.ts +6 -7
  581. package/app/lib/renderers/index.ts +1 -2
  582. package/app/lib/settings-ai-client.ts +13 -12
  583. package/app/lib/settings.ts +48 -33
  584. package/app/lib/space-ai-init.ts +66 -0
  585. package/app/lib/stores/LocaleStoreInit.tsx +18 -0
  586. package/app/lib/stores/McpStoreInit.tsx +18 -0
  587. package/app/lib/stores/WalkthroughInit.tsx +20 -0
  588. package/app/lib/stores/locale-store.ts +55 -0
  589. package/app/lib/stores/mcp-store.ts +156 -0
  590. package/app/lib/stores/walkthrough-store.ts +118 -0
  591. package/app/lib/types.ts +20 -0
  592. package/app/package.json +3 -1
  593. package/app/tsconfig.json +1 -1
  594. package/bin/cli.js +46 -27
  595. package/bin/commands/file.js +7 -4
  596. package/bin/commands/space.js +4 -0
  597. package/bin/lib/mcp-agents.js +26 -2
  598. package/bin/lib/mcp-install.js +11 -3
  599. package/bin/lib/sync.js +140 -34
  600. package/mcp/README.md +2 -2
  601. package/mcp/dist/index.cjs +43 -43
  602. package/mcp/package.json +1 -1
  603. package/mcp/src/index.ts +77 -61
  604. package/package.json +1 -1
  605. package/scripts/setup.js +1 -1
  606. package/skills/mindos/SKILL.md +3 -3
  607. package/skills/mindos/references/preference-capture.md +4 -4
  608. package/skills/mindos/references/write-supplement.md +2 -2
  609. package/skills/mindos-zh/SKILL.md +3 -3
  610. package/skills/mindos-zh/references/preference-capture.md +4 -4
  611. package/skills/mindos-zh/references/write-supplement.md +2 -2
  612. package/templates/empty/INSTRUCTION.md +0 -1
  613. package/templates/en/INSTRUCTION.md +0 -1
  614. package/templates/template-generation-skill.md +0 -1
  615. package/templates/zh/INSTRUCTION.md +0 -1
  616. package/_standalone/.next/server/chunks/1473.js +0 -52
  617. package/_standalone/.next/server/chunks/248.js +0 -15
  618. package/_standalone/.next/server/chunks/359.js +0 -2
  619. package/_standalone/.next/server/chunks/4931.js +0 -202
  620. package/_standalone/.next/server/chunks/7670.js +0 -1
  621. package/_standalone/.next/server/chunks/9414.js +0 -11
  622. package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
  623. package/_standalone/.next/static/chunks/1263-6df1734e4273adb1.js +0 -25
  624. package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
  625. package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
  626. package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
  627. package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
  628. package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
  629. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
  630. package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
  631. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
  632. package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
  633. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
  634. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
  635. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
  636. package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
  637. package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
  638. package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
  639. package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
  640. package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
  641. package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
  642. package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
  643. package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
  644. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
  645. package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
  646. package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
  647. package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
  648. package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
  649. package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
  650. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
  651. package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
  652. package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
  653. package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
  654. package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
  655. package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
  656. package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
  657. package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
  658. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
  659. package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
  660. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
  661. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
  662. package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
  663. package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
  664. package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
  665. package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
  666. package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
  667. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
  668. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
  669. package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
  670. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
  671. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
  672. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
  673. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
  674. package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
  675. package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
  676. package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
  677. package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
  678. package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
  679. package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
  680. package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
  681. package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
  682. package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
  683. package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
  684. package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
  685. package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
  686. package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
  687. package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
  688. package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
  689. package/_standalone/.next/static/chunks/app/layout-d91cdbe2ecf135e1.js +0 -173
  690. package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
  691. package/_standalone/.next/static/chunks/app/page-718fdf170428b43c.js +0 -7
  692. package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
  693. package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +0 -1
  694. package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
  695. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
  696. package/_standalone/.next/static/chunks/app/view/[...path]/page-6e3dc47699a01de1.js +0 -12
  697. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
  698. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
  699. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
  700. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
  701. package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
  702. package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
  703. package/_standalone/.next/static/ushZ_NJ8rE3rG5hZfaYOX/_buildManifest.js +0 -1
  704. package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
  705. package/_standalone/hooks/useMcpData.tsx +0 -169
  706. package/_standalone/lib/i18n-en.ts +0 -2
  707. package/_standalone/lib/i18n-zh.ts +0 -2
  708. package/_standalone/lib/types.ts +0 -70
  709. package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
  710. package/app/hooks/useMcpData.tsx +0 -169
  711. package/app/lib/LocaleContext.tsx +0 -60
  712. package/app/lib/i18n-en.ts +0 -2
  713. package/app/lib/i18n-zh.ts +0 -2
  714. /package/_standalone/.next/static/{ushZ_NJ8rE3rG5hZfaYOX → rZLs1krFuduixvcVNe6q3}/_ssgManifest.js +0 -0
package/mcp/package.json CHANGED
@@ -10,12 +10,12 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@modelcontextprotocol/sdk": "^1.25.0",
13
- "tsx": "^4.19.0",
14
13
  "zod": "^3.23.8"
15
14
  },
16
15
  "devDependencies": {
17
16
  "@types/node": "^22",
18
17
  "esbuild": "^0.25.0",
18
+ "tsx": "^4.19.0",
19
19
  "typescript": "^5"
20
20
  }
21
21
  }
package/mcp/src/index.ts CHANGED
@@ -30,31 +30,33 @@ const MCP_PORT = parseInt(process.env.MCP_PORT ?? "8781", 10);
30
30
  const MCP_ENDPOINT = process.env.MCP_ENDPOINT ?? "/mcp";
31
31
  const CHARACTER_LIMIT = 25_000;
32
32
 
33
- function headers(): Record<string, string> {
33
+ function headers(agentName?: string): Record<string, string> {
34
34
  const h: Record<string, string> = { "Content-Type": "application/json" };
35
35
  if (AUTH_TOKEN) h["Authorization"] = `Bearer ${AUTH_TOKEN}`;
36
+ // Sanitize: strip control chars, limit to 100 chars
37
+ if (agentName) h["x-mindos-agent"] = agentName.replace(/[\x00-\x1f]/g, '').slice(0, 100);
36
38
  return h;
37
39
  }
38
40
 
39
41
  // ─── HTTP helpers ────────────────────────────────────────────────────────────
40
42
 
41
- async function get(path: string, params?: Record<string, string>): Promise<Record<string, unknown>> {
43
+ async function get(path: string, params?: Record<string, string>, agentName?: string): Promise<Record<string, unknown>> {
42
44
  const url = new URL(path, BASE_URL);
43
45
  if (params) {
44
46
  for (const [k, v] of Object.entries(params)) {
45
47
  if (v !== undefined && v !== null) url.searchParams.set(k, v);
46
48
  }
47
49
  }
48
- const res = await fetch(url.toString(), { headers: headers() });
50
+ const res = await fetch(url.toString(), { headers: headers(agentName) });
49
51
  const json = await res.json() as Record<string, unknown>;
50
52
  if (!res.ok) throw new Error((json.error as string) ?? `HTTP ${res.status}`);
51
53
  return json;
52
54
  }
53
55
 
54
- async function post(path: string, body: Record<string, unknown>): Promise<Record<string, unknown>> {
56
+ async function post(path: string, body: Record<string, unknown>, agentName?: string): Promise<Record<string, unknown>> {
55
57
  const res = await fetch(new URL(path, BASE_URL).toString(), {
56
58
  method: "POST",
57
- headers: headers(),
59
+ headers: headers(agentName),
58
60
  body: JSON.stringify(body),
59
61
  });
60
62
  const json = await res.json() as Record<string, unknown>;
@@ -77,14 +79,14 @@ function truncate(text: string, limit = CHARACTER_LIMIT): string {
77
79
 
78
80
  // ─── Agent operation logging ────────────────────────────────────────────────
79
81
 
80
- async function logOp(tool: string, params: Record<string, unknown>, result: 'ok' | 'error', message: string) {
82
+ async function logOp(tool: string, params: Record<string, unknown>, result: 'ok' | 'error', message: string, agentName?: string) {
81
83
  try {
82
- const entry = { ts: new Date().toISOString(), tool, params, result, message: message.slice(0, 200) };
84
+ const entry = { ts: new Date().toISOString(), tool, params, result, message: message.slice(0, 200), agentName: agentName || undefined };
83
85
  const line = JSON.stringify(entry) + '\n';
84
86
  // Append to .agent-log.json via the app API
85
87
  await fetch(new URL("/api/file", BASE_URL).toString(), {
86
88
  method: "POST",
87
- headers: headers(),
89
+ headers: headers(agentName),
88
90
  body: JSON.stringify({ op: "append_to_file", path: ".agent-log.json", content: line }),
89
91
  }).catch(() => {});
90
92
  } catch {
@@ -96,6 +98,17 @@ async function logOp(tool: string, params: Record<string, unknown>, result: 'ok'
96
98
 
97
99
  function registerTools(server: McpServer) {
98
100
 
101
+ /** Get the MCP client name for this server session (e.g. "claude-code", "cursor"). */
102
+ function clientName(): string | undefined {
103
+ return server.server.getClientVersion()?.name || undefined;
104
+ }
105
+
106
+ // Session-aware wrappers that auto-inject client identity into every API call
107
+ const _get = (path: string, params?: Record<string, string>) => get(path, params, clientName());
108
+ const _post = (path: string, body: Record<string, unknown>) => post(path, body, clientName());
109
+ const _logOp = (tool: string, params: Record<string, unknown>, result: 'ok' | 'error', msg: string) =>
110
+ logOp(tool, params, result, msg, clientName());
111
+
99
112
  // ── mindos_list_files ───────────────────────────────────────────────────────
100
113
 
101
114
  server.registerTool("mindos_list_files", {
@@ -107,11 +120,11 @@ server.registerTool("mindos_list_files", {
107
120
  annotations: { readOnlyHint: true },
108
121
  }, async ({ response_format }) => {
109
122
  try {
110
- const json = await get("/api/files", { format: response_format });
123
+ const json = await _get("/api/files", { format: response_format });
111
124
  const result = typeof json.tree === "string" ? json.tree : JSON.stringify(json.tree ?? json, null, 2);
112
- logOp("mindos_list_files", { response_format }, "ok", `${result.length} chars`);
125
+ _logOp("mindos_list_files", { response_format }, "ok", `${result.length} chars`);
113
126
  return ok(result);
114
- } catch (e) { logOp("mindos_list_files", { response_format }, "error", String(e)); return error(String(e)); }
127
+ } catch (e) { _logOp("mindos_list_files", { response_format }, "error", String(e)); return error(String(e)); }
115
128
  });
116
129
 
117
130
  // ── mindos_list_spaces ──────────────────────────────────────────────────────
@@ -126,20 +139,20 @@ server.registerTool("mindos_list_spaces", {
126
139
  annotations: { readOnlyHint: true },
127
140
  }, async ({ response_format }) => {
128
141
  try {
129
- const json = await get("/api/file", { op: "list_spaces" });
142
+ const json = await _get("/api/file", { op: "list_spaces" });
130
143
  const spaces = json.spaces as Array<{ name: string; path: string; fileCount: number; description: string }>;
131
144
  if (response_format === "json") {
132
- logOp("mindos_list_spaces", { response_format }, "ok", `${spaces?.length ?? 0} spaces`);
145
+ _logOp("mindos_list_spaces", { response_format }, "ok", `${spaces?.length ?? 0} spaces`);
133
146
  return ok(JSON.stringify({ spaces: spaces ?? [] }, null, 2));
134
147
  }
135
148
  const lines = (spaces ?? []).map(
136
149
  (s) => `- **${s.name}** (\`${s.path}/\`) — ${s.fileCount} file(s)${s.description ? ` — ${s.description}` : ""}`,
137
150
  );
138
151
  const text = lines.length ? lines.join("\n") : "(no top-level spaces in tree)";
139
- logOp("mindos_list_spaces", { response_format }, "ok", `${spaces?.length ?? 0} spaces`);
152
+ _logOp("mindos_list_spaces", { response_format }, "ok", `${spaces?.length ?? 0} spaces`);
140
153
  return ok(text);
141
154
  } catch (e) {
142
- logOp("mindos_list_spaces", { response_format }, "error", String(e));
155
+ _logOp("mindos_list_spaces", { response_format }, "error", String(e));
143
156
  return error(String(e));
144
157
  }
145
158
  });
@@ -157,16 +170,16 @@ server.registerTool("mindos_read_file", {
157
170
  annotations: { readOnlyHint: true },
158
171
  }, async ({ path, offset, limit }) => {
159
172
  try {
160
- const json = await get("/api/file", { path, op: "read_file" });
173
+ const json = await _get("/api/file", { path, op: "read_file" });
161
174
  const content = json.content as string;
162
175
  const slice = content.slice(offset, offset + limit);
163
176
  const hasMore = offset + limit < content.length;
164
177
  const header = hasMore
165
178
  ? `[Showing characters ${offset}–${offset + slice.length} of ${content.length}. Use offset=${offset + limit} for next page.]\n\n`
166
179
  : offset > 0 ? `[Showing characters ${offset}–${offset + slice.length} of ${content.length}]\n\n` : "";
167
- logOp("mindos_read_file", { path }, "ok", `${content.length} chars`);
180
+ _logOp("mindos_read_file", { path }, "ok", `${content.length} chars`);
168
181
  return ok(header + slice);
169
- } catch (e) { logOp("mindos_read_file", { path }, "error", String(e)); return error(String(e)); }
182
+ } catch (e) { _logOp("mindos_read_file", { path }, "error", String(e)); return error(String(e)); }
170
183
  });
171
184
 
172
185
  // ── mindos_write_file ───────────────────────────────────────────────────────
@@ -180,10 +193,10 @@ server.registerTool("mindos_write_file", {
180
193
  }),
181
194
  }, async ({ path, content }) => {
182
195
  try {
183
- await post("/api/file", { op: "save_file", path, content });
184
- logOp("mindos_write_file", { path }, "ok", `Wrote ${content.length} chars`);
196
+ await _post("/api/file", { op: "save_file", path, content });
197
+ _logOp("mindos_write_file", { path }, "ok", `Wrote ${content.length} chars`);
185
198
  return ok(`Successfully wrote ${content.length} characters to "${path}"`);
186
- } catch (e) { logOp("mindos_write_file", { path }, "error", String(e)); return error(String(e)); }
199
+ } catch (e) { _logOp("mindos_write_file", { path }, "error", String(e)); return error(String(e)); }
187
200
  });
188
201
 
189
202
  // ── mindos_create_file ──────────────────────────────────────────────────────
@@ -197,10 +210,10 @@ server.registerTool("mindos_create_file", {
197
210
  }),
198
211
  }, async ({ path, content }) => {
199
212
  try {
200
- await post("/api/file", { op: "create_file", path, content });
201
- logOp("mindos_create_file", { path }, "ok", `Created ${content.length} chars`);
213
+ await _post("/api/file", { op: "create_file", path, content });
214
+ _logOp("mindos_create_file", { path }, "ok", `Created ${content.length} chars`);
202
215
  return ok(`Created "${path}" (${content.length} characters)`);
203
- } catch (e) { logOp("mindos_create_file", { path }, "error", String(e)); return error(String(e)); }
216
+ } catch (e) { _logOp("mindos_create_file", { path }, "error", String(e)); return error(String(e)); }
204
217
  });
205
218
 
206
219
  // ── mindos_batch_create_files ────────────────────────────────────────────────
@@ -220,7 +233,7 @@ server.registerTool("mindos_batch_create_files", {
220
233
  const errors: string[] = [];
221
234
  for (const file of files) {
222
235
  try {
223
- await post("/api/file", { op: "create_file", path: file.path, content: file.content });
236
+ await _post("/api/file", { op: "create_file", path: file.path, content: file.content });
224
237
  created.push(file.path);
225
238
  } catch (e) {
226
239
  errors.push(`${file.path}: ${String(e)}`);
@@ -228,7 +241,7 @@ server.registerTool("mindos_batch_create_files", {
228
241
  }
229
242
  let msg = `Batch creation complete.\nCreated ${created.length} file(s): ${created.join(", ")}`;
230
243
  if (errors.length > 0) msg += `\n\nFailed to create ${errors.length} file(s):\n${errors.join("\n")}`;
231
- logOp("mindos_batch_create_files", { count: files.length }, created.length === files.length ? "ok" : "error", msg.slice(0, 200));
244
+ _logOp("mindos_batch_create_files", { count: files.length }, created.length === files.length ? "ok" : "error", msg.slice(0, 200));
232
245
  return created.length === files.length ? ok(msg) : error(msg);
233
246
  });
234
247
 
@@ -245,7 +258,7 @@ server.registerTool("mindos_create_space", {
245
258
  }),
246
259
  }, async ({ name, description, parent_path }) => {
247
260
  try {
248
- const json = await post("/api/file", {
261
+ const json = await _post("/api/file", {
249
262
  op: "create_space",
250
263
  path: "_",
251
264
  name,
@@ -253,10 +266,10 @@ server.registerTool("mindos_create_space", {
253
266
  parent_path,
254
267
  });
255
268
  const p = json.path as string;
256
- logOp("mindos_create_space", { name, parent_path }, "ok", p);
269
+ _logOp("mindos_create_space", { name, parent_path }, "ok", p);
257
270
  return ok(`Created Mind Space at "${p}"`);
258
271
  } catch (e) {
259
- logOp("mindos_create_space", { name, parent_path }, "error", String(e));
272
+ _logOp("mindos_create_space", { name, parent_path }, "error", String(e));
260
273
  return error(String(e));
261
274
  }
262
275
  });
@@ -273,11 +286,11 @@ server.registerTool("mindos_rename_space", {
273
286
  }),
274
287
  }, async ({ path: spacePath, new_name }) => {
275
288
  try {
276
- const json = await post("/api/file", { op: "rename_space", path: spacePath, new_name });
277
- logOp("mindos_rename_space", { path: spacePath, new_name }, "ok", String(json.newPath));
289
+ const json = await _post("/api/file", { op: "rename_space", path: spacePath, new_name });
290
+ _logOp("mindos_rename_space", { path: spacePath, new_name }, "ok", String(json.newPath));
278
291
  return ok(`Renamed space "${spacePath}" → "${json.newPath}"`);
279
292
  } catch (e) {
280
- logOp("mindos_rename_space", { path: spacePath, new_name }, "error", String(e));
293
+ _logOp("mindos_rename_space", { path: spacePath, new_name }, "error", String(e));
281
294
  return error(String(e));
282
295
  }
283
296
  });
@@ -286,17 +299,18 @@ server.registerTool("mindos_rename_space", {
286
299
 
287
300
  server.registerTool("mindos_delete_file", {
288
301
  title: "Delete File",
289
- description: "Permanently delete a file from the knowledge base.",
302
+ description: "Delete a file from the knowledge base. The file is moved to trash and can be recovered within 30 days.",
290
303
  inputSchema: z.object({
291
304
  path: z.string().min(1),
292
305
  }),
293
306
  annotations: { destructiveHint: true },
294
307
  }, async ({ path }) => {
295
308
  try {
296
- await post("/api/file", { op: "delete_file", path });
297
- logOp("mindos_delete_file", { path }, "ok", `Deleted "${path}"`);
298
- return ok(`Deleted "${path}"`);
299
- } catch (e) { logOp("mindos_delete_file", { path }, "error", String(e)); return error(String(e)); }
309
+ const res = await _post("/api/file", { op: "delete_file", path });
310
+ const trashId = res?.trashId ? ` (trashId: ${res.trashId})` : '';
311
+ _logOp("mindos_delete_file", { path }, "ok", `Moved to trash: "${path}"${trashId}`);
312
+ return ok(`Moved to trash: "${path}"${trashId}`);
313
+ } catch (e) { _logOp("mindos_delete_file", { path }, "error", String(e)); return error(String(e)); }
300
314
  });
301
315
 
302
316
  // ── mindos_rename_file ──────────────────────────────────────────────────────
@@ -310,7 +324,7 @@ server.registerTool("mindos_rename_file", {
310
324
  }),
311
325
  }, async ({ path, new_name }) => {
312
326
  try {
313
- const json = await post("/api/file", { op: "rename_file", path, new_name });
327
+ const json = await _post("/api/file", { op: "rename_file", path, new_name });
314
328
  return ok(`Renamed "${path}" → "${json.newPath}"`);
315
329
  } catch (e) { return error(String(e)); }
316
330
  });
@@ -326,7 +340,7 @@ server.registerTool("mindos_move_file", {
326
340
  }),
327
341
  }, async ({ from_path, to_path }) => {
328
342
  try {
329
- const json = await post("/api/file", { op: "move_file", path: from_path, to_path });
343
+ const json = await _post("/api/file", { op: "move_file", path: from_path, to_path });
330
344
  const affected = json.affectedFiles as string[] ?? [];
331
345
  const lines = [`Moved "${from_path}" → "${json.newPath}"`];
332
346
  if (affected.length > 0) {
@@ -358,10 +372,10 @@ server.registerTool("mindos_search_notes", {
358
372
  if (file_type !== "all") params.file_type = file_type;
359
373
  if (modified_after) params.modified_after = modified_after;
360
374
  if (response_format) params.format = response_format;
361
- const json = await get("/api/search", params);
362
- logOp("mindos_search_notes", { query, limit }, "ok", `Search completed`);
375
+ const json = await _get("/api/search", params);
376
+ _logOp("mindos_search_notes", { query, limit }, "ok", `Search completed`);
363
377
  return ok(truncate(JSON.stringify(json, null, 2)));
364
- } catch (e) { logOp("mindos_search_notes", { query }, "error", String(e)); return error(String(e)); }
378
+ } catch (e) { _logOp("mindos_search_notes", { query }, "error", String(e)); return error(String(e)); }
365
379
  });
366
380
 
367
381
  // ── mindos_get_recent ───────────────────────────────────────────────────────
@@ -376,7 +390,7 @@ server.registerTool("mindos_get_recent", {
376
390
  annotations: { readOnlyHint: true },
377
391
  }, async ({ limit, response_format }) => {
378
392
  try {
379
- const json = await get("/api/recent-files", { limit: String(limit), format: response_format });
393
+ const json = await _get("/api/recent-files", { limit: String(limit), format: response_format });
380
394
  return ok(JSON.stringify(json, null, 2));
381
395
  } catch (e) { return error(String(e)); }
382
396
  });
@@ -392,7 +406,7 @@ server.registerTool("mindos_read_lines", {
392
406
  annotations: { readOnlyHint: true },
393
407
  }, async ({ path }) => {
394
408
  try {
395
- const json = await get("/api/file", { path, op: "read_lines" });
409
+ const json = await _get("/api/file", { path, op: "read_lines" });
396
410
  const lines = json.lines as string[];
397
411
  const numbered = lines.map((l, i) => `${i}: ${l}`).join("\n");
398
412
  return ok(`${lines.length} lines total:\n\n${numbered}`);
@@ -411,7 +425,7 @@ server.registerTool("mindos_insert_lines", {
411
425
  }),
412
426
  }, async ({ path, after_index, lines }) => {
413
427
  try {
414
- await post("/api/file", { op: "insert_lines", path, after_index, lines });
428
+ await _post("/api/file", { op: "insert_lines", path, after_index, lines });
415
429
  return ok(`Inserted ${lines.length} line(s) after index ${after_index} in "${path}"`);
416
430
  } catch (e) { return error(String(e)); }
417
431
  });
@@ -429,7 +443,7 @@ server.registerTool("mindos_update_lines", {
429
443
  }),
430
444
  }, async ({ path, start, end, lines }) => {
431
445
  try {
432
- await post("/api/file", { op: "update_lines", path, start, end, lines });
446
+ await _post("/api/file", { op: "update_lines", path, start, end, lines });
433
447
  return ok(`Replaced lines ${start}–${end} in "${path}" with ${lines.length} new line(s)`);
434
448
  } catch (e) { return error(String(e)); }
435
449
  });
@@ -445,10 +459,10 @@ server.registerTool("mindos_append_to_file", {
445
459
  }),
446
460
  }, async ({ path, content }) => {
447
461
  try {
448
- await post("/api/file", { op: "append_to_file", path, content });
449
- logOp("mindos_append_to_file", { path }, "ok", `Appended ${content.length} chars`);
462
+ await _post("/api/file", { op: "append_to_file", path, content });
463
+ _logOp("mindos_append_to_file", { path }, "ok", `Appended ${content.length} chars`);
450
464
  return ok(`Appended ${content.length} character(s) to "${path}"`);
451
- } catch (e) { logOp("mindos_append_to_file", { path }, "error", String(e)); return error(String(e)); }
465
+ } catch (e) { _logOp("mindos_append_to_file", { path }, "error", String(e)); return error(String(e)); }
452
466
  });
453
467
 
454
468
  // ── mindos_insert_after_heading ─────────────────────────────────────────────
@@ -463,10 +477,10 @@ server.registerTool("mindos_insert_after_heading", {
463
477
  }),
464
478
  }, async ({ path, heading, content }) => {
465
479
  try {
466
- await post("/api/file", { op: "insert_after_heading", path, heading, content });
467
- logOp("mindos_insert_after_heading", { path, heading }, "ok", `Inserted after "${heading}"`);
480
+ await _post("/api/file", { op: "insert_after_heading", path, heading, content });
481
+ _logOp("mindos_insert_after_heading", { path, heading }, "ok", `Inserted after "${heading}"`);
468
482
  return ok(`Inserted content after heading "${heading}" in "${path}"`);
469
- } catch (e) { logOp("mindos_insert_after_heading", { path, heading }, "error", String(e)); return error(String(e)); }
483
+ } catch (e) { _logOp("mindos_insert_after_heading", { path, heading }, "error", String(e)); return error(String(e)); }
470
484
  });
471
485
 
472
486
  // ── mindos_update_section ───────────────────────────────────────────────────
@@ -481,10 +495,10 @@ server.registerTool("mindos_update_section", {
481
495
  }),
482
496
  }, async ({ path, heading, content }) => {
483
497
  try {
484
- await post("/api/file", { op: "update_section", path, heading, content });
485
- logOp("mindos_update_section", { path, heading }, "ok", `Updated section "${heading}"`);
498
+ await _post("/api/file", { op: "update_section", path, heading, content });
499
+ _logOp("mindos_update_section", { path, heading }, "ok", `Updated section "${heading}"`);
486
500
  return ok(`Updated section "${heading}" in "${path}"`);
487
- } catch (e) { logOp("mindos_update_section", { path, heading }, "error", String(e)); return error(String(e)); }
501
+ } catch (e) { _logOp("mindos_update_section", { path, heading }, "error", String(e)); return error(String(e)); }
488
502
  });
489
503
 
490
504
  // ── mindos_append_csv ───────────────────────────────────────────────────────
@@ -498,7 +512,7 @@ server.registerTool("mindos_append_csv", {
498
512
  }),
499
513
  }, async ({ path, row }) => {
500
514
  try {
501
- const json = await post("/api/file", { op: "append_csv", path, row });
515
+ const json = await _post("/api/file", { op: "append_csv", path, row });
502
516
  return ok(`Appended row to "${path}". File now has ${json.newRowCount} rows.`);
503
517
  } catch (e) { return error(String(e)); }
504
518
  });
@@ -514,7 +528,7 @@ server.registerTool("mindos_get_backlinks", {
514
528
  annotations: { readOnlyHint: true },
515
529
  }, async ({ path }) => {
516
530
  try {
517
- const json = await get("/api/backlinks", { path });
531
+ const json = await _get("/api/backlinks", { path });
518
532
  return ok(JSON.stringify(json, null, 2));
519
533
  } catch (e) { return error(String(e)); }
520
534
  });
@@ -532,7 +546,7 @@ server.registerTool("mindos_bootstrap", {
532
546
  try {
533
547
  const params: Record<string, string> = {};
534
548
  if (target_dir) params.target_dir = target_dir;
535
- const json = await get("/api/bootstrap", params);
549
+ const json = await _get("/api/bootstrap", params);
536
550
  const sections = Object.entries(json)
537
551
  .filter(([, v]) => v !== undefined && v !== null)
538
552
  .map(([key, val]) => `--- ${key} ---\n\n${val}`)
@@ -553,7 +567,7 @@ server.registerTool("mindos_get_history", {
553
567
  annotations: { readOnlyHint: true },
554
568
  }, async ({ path, limit }) => {
555
569
  try {
556
- const json = await get("/api/git", { op: "history", path, limit: String(limit) });
570
+ const json = await _get("/api/git", { op: "history", path, limit: String(limit) });
557
571
  const entries = json.entries as Array<{ hash: string; date: string; message: string; author: string }>;
558
572
  if (entries.length === 0) return ok(`No git history found for "${path}"`);
559
573
  const lines = [`# Git History: ${path}`, "", `${entries.length} commit(s):`, ""];
@@ -576,7 +590,7 @@ server.registerTool("mindos_get_file_at_version", {
576
590
  annotations: { readOnlyHint: true },
577
591
  }, async ({ path, commit }) => {
578
592
  try {
579
- const json = await get("/api/git", { op: "show", path, commit });
593
+ const json = await _get("/api/git", { op: "show", path, commit });
580
594
  const content = json.content as string;
581
595
  return ok(truncate(`# ${path} @ ${commit.slice(0, 8)}\n\n${content}`));
582
596
  } catch (e) { return error(String(e)); }
@@ -648,7 +662,9 @@ async function main() {
648
662
  const sid = transport.sessionId;
649
663
  if (sid) {
650
664
  sessions.set(sid, { transport, server });
651
- console.error(`[MCP] New session ${sid.slice(0, 8)} (${sessions.size} active)`);
665
+ const client = server.server.getClientVersion();
666
+ const clientLabel = client?.name ? ` (${client.name})` : '';
667
+ console.error(`[MCP] New session ${sid.slice(0, 8)}${clientLabel} (${sessions.size} active)`);
652
668
  }
653
669
  });
654
670
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.6.39",
3
+ "version": "0.6.40",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",
package/scripts/setup.js CHANGED
@@ -1228,7 +1228,7 @@ async function main() {
1228
1228
  console.log(`\n${c.green(t('cfgSaved'))}: ${c.dim(CONFIG_PATH)}`);
1229
1229
 
1230
1230
  // ── Skill rules are now built into SKILL.md — no install needed ──────────
1231
- // user-skill-rules.md will be created on first preference capture or via `mindos init-skills`.
1231
+ // .mindos/user-preferences.md will be created on first preference capture or via `mindos init-skills`.
1232
1232
 
1233
1233
  // ── Step 7: MCP Agent Install ──────────────────────────────────────────────
1234
1234
  write('\n');
@@ -21,7 +21,7 @@ description: >
21
21
 
22
22
  1. The **bootstrap directory tree is the primary index** — reason from names and hierarchy before calling search. Most questions can be answered by reading what's already in context.
23
23
  2. **Default to read-only.** Only invoke write tools when the user explicitly asks to save, record, organize, or edit. Lookup / summarize / quote = no writes.
24
- 3. **Rule precedence** (highest wins): user's current-turn instruction → `user-skill-rules.md` → nearest directory `INSTRUCTION.md` → root `INSTRUCTION.md` → this SKILL's defaults.
24
+ 3. **Rule precedence** (highest wins): user's current-turn instruction → `.mindos/user-preferences.md` → nearest directory `INSTRUCTION.md` → root `INSTRUCTION.md` → this SKILL's defaults.
25
25
  4. **Multi-file edits require a plan first.** Present the full change list; execute only after approval.
26
26
  5. After create/delete/move/rename → **sync affected READMEs** automatically.
27
27
 
@@ -141,7 +141,7 @@ For write, SOP, structural, and handoff patterns → see Write & Workflow Supple
141
141
 
142
142
  ## Post-task hooks
143
143
 
144
- After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check `user-skill-rules.md` suppression section first. Skip all if user asked for quiet mode.
144
+ After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check `.mindos/user-preferences.md` suppression section first. Skip all if user asked for quiet mode.
145
145
 
146
146
  | Hook | Priority | Condition |
147
147
  |------|----------|-----------|
@@ -157,7 +157,7 @@ If a hook triggers → read [references/post-task-hooks.md](./references/post-ta
157
157
 
158
158
  ## Preference capture
159
159
 
160
- When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to `user-skill-rules.md`.
160
+ When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to `.mindos/user-preferences.md`.
161
161
  **Do NOT read** preference-capture unless the user actually expressed a preference to persist.
162
162
 
163
163
  ## SOP authoring
@@ -1,4 +1,4 @@
1
- # Preference capture (`user-skill-rules.md`)
1
+ # Preference capture (`user-preferences.md`)
2
2
 
3
3
  ## When to capture
4
4
 
@@ -7,14 +7,14 @@ The user expresses a preference correction (e.g. "don't do X", "next time rememb
7
7
  ## Confirm-then-write flow
8
8
 
9
9
  1. **First occurrence of a new preference**: propose the rule and target file before writing.
10
- - "Record this preference to `user-skill-rules.md`? Rule: _{summary}_"
10
+ - "Record this preference to `user-preferences.md`? Rule: _{summary}_"
11
11
  - Write only after user confirms.
12
- 2. **Repeated confirmation on similar category**: after the user confirms the same category of preference 3+ times, auto-write future rules in that category without asking. Add an `auto-confirm: true` flag to the category header in `user-skill-rules.md`.
12
+ 2. **Repeated confirmation on similar category**: after the user confirms the same category of preference 3+ times, auto-write future rules in that category without asking. Add an `auto-confirm: true` flag to the category header in `user-preferences.md`.
13
13
  3. **User explicitly grants blanket permission** (e.g. "just record preferences directly"): set a top-level `auto-confirm-all: true` flag and skip confirmation for all future captures.
14
14
 
15
15
  ## File location
16
16
 
17
- - Target: `user-skill-rules.md` in the knowledge base root (read by `mindos_bootstrap` when present).
17
+ - Target: `.mindos/user-preferences.md` in the knowledge base (read by `mindos_bootstrap` when present).
18
18
  - If the file does not exist, create it with the template below on first confirmed write.
19
19
 
20
20
  ## File template
@@ -94,7 +94,7 @@ Read the handoff document or last agent's progress notes → identify: current s
94
94
 
95
95
  ## Post-task hooks
96
96
 
97
- After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check `user-skill-rules.md` suppression section first. Skip all if user asked for quiet mode.
97
+ After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check `.mindos/user-preferences.md` suppression section first. Skip all if user asked for quiet mode.
98
98
 
99
99
  | Hook | Priority | Condition |
100
100
  |------|----------|-----------|
@@ -110,7 +110,7 @@ If a hook triggers → read [references/post-task-hooks.md](./references/post-ta
110
110
 
111
111
  ## Preference capture
112
112
 
113
- When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to `user-skill-rules.md`.
113
+ When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to `.mindos/user-preferences.md`.
114
114
  **Do NOT read** preference-capture unless the user actually expressed a preference to persist.
115
115
 
116
116
  ## SOP authoring
@@ -20,7 +20,7 @@ description: >
20
20
 
21
21
  1. **bootstrap 目录树是首要索引** — 先从目录名和层级推断,再搜索。大多数定位不需要工具调用。
22
22
  2. **默认只读。** 只有用户明确要求保存、记录、整理、修改时才调写入工具。查阅/总结/引用 = 不写。
23
- 3. **规则优先级**(越上越优先):用户当轮指令 → `user-skill-rules.md` → 就近目录 `INSTRUCTION.md` → 根 `INSTRUCTION.md` → 本 SKILL 默认。
23
+ 3. **规则优先级**(越上越优先):用户当轮指令 → `.mindos/user-preferences.md` → 就近目录 `INSTRUCTION.md` → 根 `INSTRUCTION.md` → 本 SKILL 默认。
24
24
  4. **多文件编辑必须先出计划。** 展示完整变更清单,确认后再执行。
25
25
  5. 增删/移动/重命名后 → **自动同步受影响 README**。
26
26
 
@@ -140,7 +140,7 @@ description: >
140
140
 
141
141
  ## 任务后 Hooks
142
142
 
143
- **写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `user-skill-rules.md` 的抑制区;用户要求安静模式时全部跳过。
143
+ **写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `.mindos/user-preferences.md` 的抑制区;用户要求安静模式时全部跳过。
144
144
 
145
145
  | Hook | 优先级 | 触发条件 |
146
146
  |------|--------|---------|
@@ -156,7 +156,7 @@ description: >
156
156
 
157
157
  ## 偏好捕获
158
158
 
159
- 用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `user-skill-rules.md`。
159
+ 用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `.mindos/user-preferences.md`。
160
160
  **不要读** preference-capture 除非用户真的表达了要持久化的偏好。
161
161
 
162
162
  ## SOP 编写
@@ -1,4 +1,4 @@
1
- # 偏好捕获(`user-skill-rules.md`)
1
+ # 偏好捕获(`user-preferences.md`)
2
2
 
3
3
  ## 何时捕获
4
4
 
@@ -7,14 +7,14 @@
7
7
  ## 确认后写入流程
8
8
 
9
9
  1. **某类偏好首次出现**:先提议,用户确认后再写入。
10
- - 「记录此偏好到 `user-skill-rules.md`?规则:_{摘要}_」
10
+ - 「记录此偏好到 `user-preferences.md`?规则:_{摘要}_」
11
11
  - 仅在用户确认后写入。
12
- 2. **同类偏好确认 3 次以上**:该类别在 `user-skill-rules.md` 中标记 `auto-confirm: true`,后续同类偏好自动写入,不再询问。
12
+ 2. **同类偏好确认 3 次以上**:该类别在 `user-preferences.md` 中标记 `auto-confirm: true`,后续同类偏好自动写入,不再询问。
13
13
  3. **用户明确授权**(如「偏好直接记就行」):设置顶层 `auto-confirm-all: true`,之后所有偏好跳过确认直接写入。
14
14
 
15
15
  ## 文件位置
16
16
 
17
- - 目标:知识库根目录的 `user-skill-rules.md`(存在时由 `mindos_bootstrap` 读取)。
17
+ - 目标:知识库 `.mindos/user-preferences.md`(存在时由 `mindos_bootstrap` 读取)。
18
18
  - 若文件不存在,在首次确认写入时按下方模板创建。
19
19
 
20
20
  ## 文件模板
@@ -94,7 +94,7 @@
94
94
 
95
95
  ## 任务后 Hooks
96
96
 
97
- **写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `user-skill-rules.md` 的抑制区;用户要求安静模式时全部跳过。
97
+ **写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `.mindos/user-preferences.md` 的抑制区;用户要求安静模式时全部跳过。
98
98
 
99
99
  | Hook | 优先级 | 触发条件 |
100
100
  |------|--------|---------|
@@ -110,7 +110,7 @@
110
110
 
111
111
  ## 偏好捕获
112
112
 
113
- 用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `user-skill-rules.md`。
113
+ 用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `.mindos/user-preferences.md`。
114
114
  **不要读** preference-capture 除非用户真的表达了要持久化的偏好。
115
115
 
116
116
  ## SOP 编写
@@ -174,4 +174,3 @@ Create it only when local rules are reusable and meaningful. Avoid creating them
174
174
 
175
175
  - `CONFIG.json` is the single source of truth for all configuration.
176
176
  - Field semantics are embedded in `keySpecs`; directory naming rules in `naming`.
177
- - No separate `CONFIG.md` is needed.
@@ -174,4 +174,3 @@ Create it only when local rules are reusable and meaningful. Avoid creating them
174
174
 
175
175
  - `CONFIG.json` is the single source of truth for all configuration.
176
176
  - Field semantics are embedded in `keySpecs`; directory naming rules in `naming`.
177
- - No separate `CONFIG.md` is needed.
@@ -55,7 +55,6 @@
55
55
 
56
56
  - `CONFIG.json` 是配置的唯一权威源。
57
57
  - 字段语义内嵌于 `keySpecs`;目录命名规则内嵌于 `naming`。
58
- - 无需额外的 `CONFIG.md`。
59
58
 
60
59
  ## 7. 配置设计约束
61
60
 
@@ -174,4 +174,3 @@ Agent 进入知识库时,按以下顺序加载上下文:
174
174
 
175
175
  - `CONFIG.json` 是配置的唯一权威源。
176
176
  - 字段语义内嵌于 `keySpecs`;目录命名规则内嵌于 `naming`。
177
- - 无需额外的 `CONFIG.md`。