@geminilight/mindos 0.6.57 → 0.6.59

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 (293) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +24 -24
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +1 -1
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -1
  42. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/agents/custom/route.js +1 -1
  44. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/ask/route.js +5 -5
  46. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  47. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  55. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  64. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  68. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  77. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  97. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  98. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  100. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  106. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/skills/route.js +1 -1
  108. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  111. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  117. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/changes/page.js +2 -2
  119. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  120. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  122. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/echo/page.js +1 -1
  125. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/explore/page.js +3 -3
  128. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/help/page.js +2 -2
  131. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  134. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  135. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app/login/page.js +2 -2
  137. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  138. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/page.js +2 -8
  140. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  141. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/setup/page.js +2 -2
  143. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  144. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  145. package/_standalone/.next/server/app/trash/page.js +3 -3
  146. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  147. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  149. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  150. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  151. package/_standalone/.next/server/app/wiki/page.js +2 -2
  152. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  153. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  154. package/_standalone/.next/server/app-paths-manifest.json +24 -24
  155. package/_standalone/.next/server/chunks/1550.js +1 -1
  156. package/_standalone/.next/server/chunks/1750.js +1 -1
  157. package/_standalone/.next/server/chunks/3484.js +1 -1
  158. package/_standalone/.next/server/chunks/530.js +61 -62
  159. package/_standalone/.next/server/chunks/6539.js +1 -1
  160. package/_standalone/.next/server/chunks/{2159.js → 8343.js} +2 -2
  161. package/_standalone/.next/server/chunks/9787.js +2 -0
  162. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  163. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  164. package/_standalone/.next/server/pages/500.html +2 -2
  165. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  166. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  167. package/_standalone/.next/static/chunks/{1814.a7c127b2c73d1f70.js → 1814.a79b84d37df75c43.js} +1 -1
  168. package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +1 -0
  169. package/_standalone/.next/static/chunks/5581-dac72e9f16e5ea29.js +29 -0
  170. package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +1 -0
  171. package/_standalone/.next/static/chunks/7249-6cf8f2b78718c59e.js +11 -0
  172. package/_standalone/.next/static/chunks/8520-56ec9ff087c15204.js +22 -0
  173. package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +1 -0
  174. package/_standalone/.next/static/chunks/app/agents/[agentKey]/{page-7bdeab5af8e4f5f2.js → page-35ea6de1af2be3b5.js} +1 -1
  175. package/_standalone/.next/static/chunks/app/agents/page-b172ea3743adb047.js +1 -0
  176. package/_standalone/.next/static/chunks/app/changes/{page-5a72144d1080a699.js → page-6d2f49651c0061f7.js} +1 -1
  177. package/_standalone/.next/static/chunks/app/echo/[segment]/page-84b95256f6e38aae.js +11 -0
  178. package/_standalone/.next/static/chunks/app/explore/{page-d3d99308146c2240.js → page-d9f58000bc445360.js} +2 -2
  179. package/_standalone/.next/static/chunks/app/help/{page-222df603080b5fab.js → page-f8cb806371b3175f.js} +1 -1
  180. package/_standalone/.next/static/chunks/app/inbox/history/{page-07819cf95cb0805f.js → page-26e71fb6f716a4c4.js} +1 -1
  181. package/_standalone/.next/static/chunks/app/layout-b89b0d955f39a753.js +164 -0
  182. package/_standalone/.next/static/chunks/app/login/{page-0eeef685052869a6.js → page-18fb00d568cd1f0e.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/page-a8e6f085f38388bf.js +1 -0
  184. package/_standalone/.next/static/chunks/app/setup/{page-99fcfc460fa29733.js → page-821714e7477be46c.js} +1 -1
  185. package/_standalone/.next/static/chunks/app/trash/page-f92b728b78ac0f7e.js +1 -0
  186. package/_standalone/.next/static/chunks/app/view/[...path]/{not-found-fc04c2bd4f35bc6f.js → not-found-6e0c75ad26ce8572.js} +1 -1
  187. package/_standalone/.next/static/chunks/app/view/[...path]/page-f87f4901b5e1a88f.js +12 -0
  188. package/_standalone/.next/static/chunks/app/wiki/page-641edb1f3cff2f93.js +1 -0
  189. package/_standalone/.next/static/chunks/{webpack-2c19436659aa657b.js → webpack-72e8d9e9073fd1f9.js} +1 -1
  190. package/_standalone/.next/static/css/6c104b118d3bc9b7.css +1 -0
  191. package/_standalone/.next/trace +64 -64
  192. package/_standalone/__tests__/api/mcp-install.test.ts +3 -2
  193. package/_standalone/__tests__/ask/non-streaming-api.test.ts +281 -0
  194. package/_standalone/__tests__/core/skill-install-logic.test.ts +1 -0
  195. package/_standalone/app/globals.css +2 -1
  196. package/_standalone/components/AskFab.tsx +4 -4
  197. package/_standalone/components/AskModal.tsx +1 -1
  198. package/_standalone/components/GuideCard.tsx +101 -152
  199. package/_standalone/components/RightAskPanel.tsx +2 -2
  200. package/_standalone/components/agents/CustomAgentModal.tsx +32 -8
  201. package/_standalone/components/ask/AskContent.tsx +90 -51
  202. package/_standalone/components/ask/AskHeader.tsx +218 -18
  203. package/_standalone/components/ask/MessageList.tsx +66 -47
  204. package/_standalone/components/ask/SessionHistory.tsx +86 -60
  205. package/_standalone/components/ask/SessionTabBar.tsx +29 -21
  206. package/_standalone/components/ask/ThinkingBlock.tsx +6 -5
  207. package/_standalone/components/ask/ToolCallBlock.tsx +10 -9
  208. package/_standalone/components/settings/SettingsContent.tsx +1 -1
  209. package/_standalone/data/skills/mindos/SKILL.md +72 -15
  210. package/_standalone/data/skills/mindos-zh/SKILL.md +73 -8
  211. package/_standalone/hooks/useAskSession.ts +23 -1
  212. package/_standalone/lib/stores/locale-store.ts +20 -6
  213. package/_standalone/tsconfig.tsbuildinfo +1 -1
  214. package/app/app/api/agents/custom/route.ts +8 -0
  215. package/app/app/api/ask/route.ts +171 -10
  216. package/app/app/api/mcp/agents/route.ts +5 -3
  217. package/app/app/api/settings/route.ts +9 -0
  218. package/app/app/api/settings/test-key/route.ts +13 -1
  219. package/app/app/globals.css +2 -1
  220. package/app/app/layout.tsx +16 -4
  221. package/app/components/AskFab.tsx +4 -4
  222. package/app/components/AskModal.tsx +1 -1
  223. package/app/components/GuideCard.tsx +101 -152
  224. package/app/components/HomeContent.tsx +116 -575
  225. package/app/components/RightAskPanel.tsx +2 -2
  226. package/app/components/WikiHomeContent.tsx +151 -3
  227. package/app/components/agents/CustomAgentModal.tsx +32 -8
  228. package/app/components/ask/AskContent.tsx +90 -51
  229. package/app/components/ask/AskHeader.tsx +218 -18
  230. package/app/components/ask/MessageList.tsx +66 -47
  231. package/app/components/ask/SessionHistory.tsx +86 -60
  232. package/app/components/ask/SessionTabBar.tsx +29 -21
  233. package/app/components/ask/ThinkingBlock.tsx +6 -5
  234. package/app/components/ask/ToolCallBlock.tsx +10 -9
  235. package/app/components/settings/SettingsContent.tsx +1 -1
  236. package/app/data/skills/mindos/SKILL.md +72 -15
  237. package/app/data/skills/mindos-zh/SKILL.md +73 -8
  238. package/app/hooks/useAskSession.ts +23 -1
  239. package/app/lib/custom-agents.ts +45 -2
  240. package/app/lib/i18n/modules/ai-chat.ts +97 -10
  241. package/app/lib/i18n/modules/onboarding.ts +12 -12
  242. package/app/lib/i18n/modules/panels.ts +10 -2
  243. package/app/lib/mcp-agents.ts +10 -0
  244. package/app/lib/stores/LocaleStoreInit.tsx +24 -1
  245. package/app/lib/stores/locale-store.ts +20 -6
  246. package/app/lib/types.ts +1 -0
  247. package/bin/lib/mcp-agents.js +10 -0
  248. package/package.json +1 -1
  249. package/skills/mindos/SKILL.md +69 -11
  250. package/skills/mindos/references/knowledge-health.md +120 -0
  251. package/skills/mindos-max/SKILL.md +238 -0
  252. package/skills/mindos-max-workspace/evals/evals.json +23 -0
  253. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/eval_metadata.json +11 -0
  254. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/grading.json +28 -0
  255. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/outputs/transcript.md +203 -0
  256. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/grading.json +28 -0
  257. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/outputs/transcript.md +271 -0
  258. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/eval_metadata.json +11 -0
  259. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/grading.json +28 -0
  260. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/outputs/transcript.md +121 -0
  261. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/grading.json +28 -0
  262. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/outputs/transcript.md +168 -0
  263. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/eval_metadata.json +11 -0
  264. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/grading.json +28 -0
  265. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/outputs/transcript.md +143 -0
  266. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/grading.json +28 -0
  267. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/outputs/transcript.md +233 -0
  268. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/SKILL.md +165 -0
  269. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/README.md +12 -0
  270. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/post-task-hooks.md +27 -0
  271. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/preference-capture.md +41 -0
  272. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/sop-template.md +74 -0
  273. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/write-supplement.md +119 -0
  274. package/skills/mindos-max-zh/SKILL.md +241 -0
  275. package/skills/mindos-zh/SKILL.md +72 -8
  276. package/_standalone/.next/server/chunks/2364.js +0 -2
  277. package/_standalone/.next/server/chunks/357.js +0 -1
  278. package/_standalone/.next/static/chunks/1053-5cb008a24930e271.js +0 -29
  279. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +0 -1
  280. package/_standalone/.next/static/chunks/2218-d54538000574ffef.js +0 -1
  281. package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +0 -1
  282. package/_standalone/.next/static/chunks/7249-8cd568ad23656622.js +0 -11
  283. package/_standalone/.next/static/chunks/9274-296ab35f9f09e42e.js +0 -1
  284. package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +0 -1
  285. package/_standalone/.next/static/chunks/app/echo/[segment]/page-b0103509ce34444b.js +0 -11
  286. package/_standalone/.next/static/chunks/app/layout-b3919384ec2eb979.js +0 -186
  287. package/_standalone/.next/static/chunks/app/page-6436a99cda35132b.js +0 -7
  288. package/_standalone/.next/static/chunks/app/trash/page-8dc388695344fdd4.js +0 -1
  289. package/_standalone/.next/static/chunks/app/view/[...path]/page-b292b55305ecc021.js +0 -12
  290. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +0 -1
  291. package/_standalone/.next/static/css/fd84c8316ead16eb.css +0 -1
  292. /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → u8p6oIRTcr_ns-ElNZ9rl}/_buildManifest.js +0 -0
  293. /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → u8p6oIRTcr_ns-ElNZ9rl}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { useState, useRef, useEffect, useCallback } from 'react';
4
- import { Trash2, Pencil } from 'lucide-react';
4
+ import { Trash2, Pencil, Pin, PinOff } from 'lucide-react';
5
5
  import type { ChatSession } from '@/lib/types';
6
6
  import { sessionTitle } from '@/hooks/useAskSession';
7
7
 
@@ -11,11 +11,25 @@ interface SessionHistoryProps {
11
11
  onLoad: (id: string) => void;
12
12
  onDelete: (id: string) => void;
13
13
  onRename: (id: string, title: string) => void;
14
+ onTogglePin: (id: string) => void;
14
15
  onClearAll: () => void;
15
16
  labels: { title: string; clearAll: string; confirmClear: string; noSessions: string; rename: string };
16
17
  }
17
18
 
18
- export default function SessionHistory({ sessions, activeSessionId, onLoad, onDelete, onRename, onClearAll, labels }: SessionHistoryProps) {
19
+ function formatRelativeTime(date: Date): string {
20
+ const now = Date.now();
21
+ const diff = now - date.getTime();
22
+ const mins = Math.floor(diff / 60000);
23
+ if (mins < 1) return 'just now';
24
+ if (mins < 60) return `${mins}m ago`;
25
+ const hours = Math.floor(mins / 60);
26
+ if (hours < 24) return `${hours}h ago`;
27
+ const days = Math.floor(hours / 24);
28
+ if (days < 7) return `${days}d ago`;
29
+ return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });
30
+ }
31
+
32
+ export default function SessionHistory({ sessions, activeSessionId, onLoad, onDelete, onRename, onTogglePin, onClearAll, labels }: SessionHistoryProps) {
19
33
  const [confirmClearAll, setConfirmClearAll] = useState(false);
20
34
  const clearTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);
21
35
  const [editingId, setEditingId] = useState<string | null>(null);
@@ -60,78 +74,90 @@ export default function SessionHistory({ sessions, activeSessionId, onLoad, onDe
60
74
  }, []);
61
75
 
62
76
  return (
63
- <div className="border-b border-border px-4 py-2.5 max-h-[190px] overflow-y-auto">
64
- <div className="flex items-center justify-between mb-2">
65
- <span className="text-xs text-muted-foreground">{labels.title}</span>
77
+ <div className="border-b border-border/40 px-4 py-3 max-h-[220px] overflow-y-auto">
78
+ <div className="flex items-center justify-between mb-2.5">
79
+ <span className="text-xs font-medium text-muted-foreground">{labels.title}</span>
66
80
  {sessions.length > 1 && (
67
81
  <button
68
82
  type="button"
69
83
  onClick={handleClearAll}
70
- className={`text-2xs px-1.5 py-0.5 rounded transition-colors ${
84
+ className={`text-2xs px-2 py-0.5 rounded-md transition-colors ${
71
85
  confirmClearAll
72
86
  ? 'bg-error/10 text-error font-medium'
73
- : 'text-muted-foreground hover:text-error hover:bg-muted'
87
+ : 'text-muted-foreground/60 hover:text-error hover:bg-muted'
74
88
  }`}
75
89
  >
76
90
  {confirmClearAll ? labels.confirmClear : labels.clearAll}
77
91
  </button>
78
92
  )}
79
93
  </div>
80
- <div className="flex flex-col gap-1.5">
94
+ <div className="flex flex-col gap-1">
81
95
  {sessions.length === 0 && (
82
- <div className="text-xs text-muted-foreground/70">{labels.noSessions}</div>
96
+ <div className="text-xs text-muted-foreground/50 py-2 text-center">{labels.noSessions}</div>
83
97
  )}
84
- {sessions.map((s) => (
85
- <div key={s.id} className="group flex items-center gap-1">
86
- <button
87
- type="button"
88
- onClick={() => onLoad(s.id)}
89
- onDoubleClick={() => startRename(s)}
90
- className={`flex-1 text-left px-2 py-1.5 rounded text-xs transition-colors min-w-0 ${
91
- activeSessionId === s.id
92
- ? 'bg-accent text-foreground'
93
- : 'text-muted-foreground hover:bg-muted hover:text-foreground'
94
- }`}
95
- >
96
- {editingId === s.id ? (
97
- <input
98
- ref={inputRef}
99
- type="text"
100
- value={editValue}
101
- onChange={(e) => setEditValue(e.target.value)}
102
- onBlur={commitRename}
103
- onKeyDown={(e) => {
104
- if (e.key === 'Enter') { e.preventDefault(); commitRename(); }
105
- if (e.key === 'Escape') { e.preventDefault(); cancelRename(); }
106
- }}
107
- onClick={(e) => e.stopPropagation()}
108
- className="w-full bg-transparent border-b border-[var(--amber)] outline-none text-xs text-foreground"
109
- />
110
- ) : (
111
- <div className="truncate">{sessionTitle(s)}</div>
112
- )}
113
- {editingId !== s.id && (
114
- <div className="text-2xs opacity-60">{new Date(s.updatedAt).toLocaleString()}</div>
115
- )}
116
- </button>
117
- <button
118
- type="button"
119
- onClick={() => startRename(s)}
120
- className="p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted opacity-0 group-hover:opacity-100 transition-opacity"
121
- title={labels.rename}
122
- >
123
- <Pencil size={11} />
124
- </button>
125
- <button
126
- type="button"
127
- onClick={() => onDelete(s.id)}
128
- className="p-1 rounded text-muted-foreground hover:text-error hover:bg-muted opacity-0 group-hover:opacity-100 transition-opacity"
129
- title="Delete session"
130
- >
131
- <Trash2 size={12} />
132
- </button>
133
- </div>
134
- ))}
98
+ {sessions.map((s) => {
99
+ const isActive = activeSessionId === s.id;
100
+ return (
101
+ <div key={s.id} className="group flex items-center gap-0.5">
102
+ {s.pinned && <Pin size={10} className="shrink-0 text-[var(--amber)]/50 -rotate-45 ml-1" />}
103
+ <button
104
+ type="button"
105
+ onClick={() => onLoad(s.id)}
106
+ onDoubleClick={() => startRename(s)}
107
+ className={`flex-1 text-left px-2.5 py-2 rounded-lg text-xs transition-colors min-w-0 ${
108
+ isActive
109
+ ? 'bg-[var(--amber)]/8 text-foreground border border-[var(--amber)]/15'
110
+ : 'text-muted-foreground hover:bg-muted hover:text-foreground border border-transparent'
111
+ }`}
112
+ >
113
+ {editingId === s.id ? (
114
+ <input
115
+ ref={inputRef}
116
+ type="text"
117
+ value={editValue}
118
+ onChange={(e) => setEditValue(e.target.value)}
119
+ onBlur={commitRename}
120
+ onKeyDown={(e) => {
121
+ if (e.key === 'Enter') { e.preventDefault(); commitRename(); }
122
+ if (e.key === 'Escape') { e.preventDefault(); cancelRename(); }
123
+ }}
124
+ onClick={(e) => e.stopPropagation()}
125
+ className="w-full bg-transparent border-b border-[var(--amber)] outline-none text-xs text-foreground"
126
+ />
127
+ ) : (
128
+ <div className="truncate font-medium">{sessionTitle(s)}</div>
129
+ )}
130
+ {editingId !== s.id && (
131
+ <div className="text-2xs text-muted-foreground/50 mt-0.5">{formatRelativeTime(new Date(s.updatedAt))}</div>
132
+ )}
133
+ </button>
134
+ <button
135
+ type="button"
136
+ onClick={() => onTogglePin(s.id)}
137
+ className={`p-1.5 rounded-lg transition-opacity opacity-0 group-hover:opacity-100 ${s.pinned ? 'text-[var(--amber)] hover:text-muted-foreground' : 'text-muted-foreground hover:text-[var(--amber)]'}`}
138
+ title={s.pinned ? 'Unpin' : 'Pin'}
139
+ >
140
+ {s.pinned ? <PinOff size={11} /> : <Pin size={11} />}
141
+ </button>
142
+ <button
143
+ type="button"
144
+ onClick={() => startRename(s)}
145
+ className="p-1.5 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted opacity-0 group-hover:opacity-100 transition-opacity"
146
+ title={labels.rename}
147
+ >
148
+ <Pencil size={11} />
149
+ </button>
150
+ <button
151
+ type="button"
152
+ onClick={() => onDelete(s.id)}
153
+ className="p-1.5 rounded-lg text-muted-foreground hover:text-error hover:bg-error/5 opacity-0 group-hover:opacity-100 transition-opacity"
154
+ title="Delete session"
155
+ >
156
+ <Trash2 size={11} />
157
+ </button>
158
+ </div>
159
+ );
160
+ })}
135
161
  </div>
136
162
  </div>
137
163
  );
@@ -19,48 +19,56 @@ export default function SessionTabBar({
19
19
  }: SessionTabBarProps) {
20
20
  const { t } = useLocale();
21
21
  const visibleSessions = sessions.slice(0, maxTabs);
22
+ const hasMore = sessions.length > maxTabs;
22
23
 
23
24
  if (visibleSessions.length === 0) return null;
24
25
 
25
26
  return (
26
- <div className="flex items-center border-b border-border shrink-0 bg-background/50">
27
+ <div className="flex items-center border-b border-border/60 shrink-0 bg-background/50" role="tablist">
27
28
  <div className="flex flex-1 min-w-0">
28
29
  {visibleSessions.map((s) => {
29
30
  const isActive = s.id === activeSessionId;
30
31
  const title = sessionTitle(s);
31
32
  return (
32
- <button
33
- key={s.id}
34
- type="button"
35
- onClick={() => onLoad(s.id)}
36
- className={`group relative flex items-center gap-1 min-w-0 max-w-[160px] px-3 py-2 text-xs transition-colors
37
- ${isActive
38
- ? 'text-foreground border-b-2 border-[var(--amber)] bg-card'
39
- : 'text-muted-foreground hover:text-foreground hover:bg-muted/50 border-b-2 border-transparent'
40
- }`}
41
- title={title}
42
- >
43
- <span className="truncate">{title === '(empty session)' ? t.hints.newChat : title}</span>
33
+ <div key={s.id} className="group relative flex items-center min-w-0 max-w-[160px]">
34
+ <button
35
+ type="button"
36
+ role="tab"
37
+ aria-selected={isActive}
38
+ onClick={() => onLoad(s.id)}
39
+ className={`flex-1 min-w-0 px-3 py-2.5 text-xs transition-colors truncate
40
+ ${isActive
41
+ ? 'text-foreground border-b-2 border-[var(--amber)] bg-card font-medium'
42
+ : 'text-muted-foreground hover:text-foreground hover:bg-muted/50 border-b-2 border-transparent'
43
+ }`}
44
+ title={title}
45
+ >
46
+ {title === '(empty session)' ? t.hints.newChat : title}
47
+ </button>
44
48
  {visibleSessions.length > 1 && (
45
- <span
46
- role="button"
47
- tabIndex={0}
49
+ <button
50
+ type="button"
48
51
  onClick={(e) => { e.stopPropagation(); onDelete(s.id); }}
49
- onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onDelete(s.id); } }}
50
- className="shrink-0 p-0.5 rounded opacity-0 group-hover:opacity-100 hover:bg-muted hover:text-error transition-opacity"
52
+ className="absolute right-0.5 top-1/2 -translate-y-1/2 shrink-0 p-0.5 rounded opacity-100 md:opacity-0 md:group-hover:opacity-100 hover:bg-muted hover:text-error transition-opacity"
51
53
  title={t.hints.closeSession}
54
+ aria-label={`${t.hints.closeSession}: ${title}`}
52
55
  >
53
56
  <X size={10} />
54
- </span>
57
+ </button>
55
58
  )}
56
- </button>
59
+ </div>
57
60
  );
58
61
  })}
62
+ {hasMore && (
63
+ <span className="flex items-center px-2 text-2xs text-muted-foreground/60">
64
+ +{sessions.length - maxTabs}
65
+ </span>
66
+ )}
59
67
  </div>
60
68
  <button
61
69
  type="button"
62
70
  onClick={onNew}
63
- className="shrink-0 p-2 text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors"
71
+ className="shrink-0 p-2 text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors rounded-lg"
64
72
  title={t.hints.newChat}
65
73
  >
66
74
  <Plus size={13} />
@@ -16,11 +16,12 @@ export default function ThinkingBlock({ text, isStreaming }: ThinkingBlockProps)
16
16
  if (!text && !isStreaming) return null;
17
17
 
18
18
  return (
19
- <div className="my-1 rounded-md border border-border/40 bg-muted/20 text-xs">
19
+ <div className="my-1.5 rounded-lg border border-border/30 bg-muted/15 text-xs">
20
20
  <button
21
21
  type="button"
22
22
  onClick={() => setExpanded(v => !v)}
23
- className="w-full flex items-center gap-1.5 px-2 py-1.5 text-left hover:bg-muted/30 transition-colors rounded-md"
23
+ aria-expanded={expanded}
24
+ className="w-full flex items-center gap-1.5 px-2.5 py-2 text-left hover:bg-muted/30 transition-colors rounded-lg"
24
25
  >
25
26
  {expanded ? (
26
27
  <ChevronDown size={12} className="shrink-0 text-muted-foreground" />
@@ -35,17 +36,17 @@ export default function ThinkingBlock({ text, isStreaming }: ThinkingBlockProps)
35
36
  )}
36
37
  </span>
37
38
  {!expanded && text && (
38
- <span className="text-muted-foreground/60 truncate flex-1 ml-1">
39
+ <span className="text-muted-foreground/50 truncate flex-1 ml-1">
39
40
  {text.slice(0, 80)}{text.length > 80 ? '...' : ''}
40
41
  </span>
41
42
  )}
42
43
  </button>
43
44
  {expanded && (
44
- <div className="px-2 pb-2 pt-0.5 border-t border-border/30">
45
+ <div className="px-2.5 pb-2.5 pt-1 border-t border-border/20">
45
46
  <div className="text-muted-foreground whitespace-pre-wrap leading-relaxed">
46
47
  {text}
47
48
  {isStreaming && (
48
- <span className="inline-block w-1 h-3 bg-muted-foreground/40 ml-0.5 align-middle animate-pulse rounded-sm" />
49
+ <span className="inline-block w-1 h-3 bg-muted-foreground/40 ml-0.5 align-middle animate-pulse rounded-full" />
49
50
  )}
50
51
  </div>
51
52
  </div>
@@ -101,15 +101,16 @@ export default function ToolCallBlock({ part }: { part: ToolCallPart }) {
101
101
  : formatInput(part.input);
102
102
 
103
103
  return (
104
- <div className={`my-1 rounded-md border text-xs font-mono ${
104
+ <div className={`my-1.5 rounded-lg border text-xs font-mono ${
105
105
  isDestructive
106
106
  ? 'border-[var(--amber)]/30 bg-background/60'
107
- : 'border-border/50 bg-background/60'
107
+ : 'border-border/40 bg-background/50'
108
108
  }`}>
109
109
  <button
110
110
  type="button"
111
111
  onClick={() => setManualToggle(v => v === null ? !expanded : !v)}
112
- className="w-full flex items-center gap-1.5 px-2 py-1.5 text-left hover:bg-muted/30 transition-colors rounded-md"
112
+ aria-expanded={expanded}
113
+ className="w-full flex items-center gap-1.5 px-2.5 py-2 text-left hover:bg-muted/30 transition-colors rounded-lg"
113
114
  >
114
115
  {expanded ? <ChevronDown size={12} className="shrink-0 text-muted-foreground" /> : <ChevronRight size={12} className="shrink-0 text-muted-foreground" />}
115
116
  {isDestructive && <AlertTriangle size={11} className="shrink-0 text-[var(--amber)]" />}
@@ -161,19 +162,19 @@ export default function ToolCallBlock({ part }: { part: ToolCallPart }) {
161
162
  </div>
162
163
  ) : (
163
164
  /* Fallback: show input (always), output when available */
164
- <div className="px-2 pb-2 pt-1 space-y-1">
165
+ <div className="px-2.5 pb-2.5 pt-1.5 space-y-1.5">
165
166
  {part.state === 'running' && (
166
- <div className="text-muted-foreground/60 text-2xs flex items-center gap-1">
167
+ <div className="text-muted-foreground/60 text-2xs flex items-center gap-1.5">
167
168
  <Loader2 size={10} className="animate-spin" /> Running...
168
169
  </div>
169
170
  )}
170
- <div className="text-muted-foreground">
171
- <span className="font-semibold">Input: </span>
171
+ <div className="text-muted-foreground leading-relaxed">
172
+ <span className="font-semibold text-foreground/70">Input: </span>
172
173
  <span className="break-all whitespace-pre-wrap">{JSON.stringify(part.input, null, 2)}</span>
173
174
  </div>
174
175
  {part.output !== undefined && part.output !== '' && (
175
- <div className="text-muted-foreground">
176
- <span className="font-semibold">Output: </span>
176
+ <div className="text-muted-foreground leading-relaxed">
177
+ <span className="font-semibold text-foreground/70">Output: </span>
177
178
  <span className="break-all whitespace-pre-wrap">{part.output.length > 500 ? part.output.slice(0, 500) + '…' : part.output}</span>
178
179
  </div>
179
180
  )}
@@ -66,7 +66,7 @@ export default function SettingsContent({ visible, initialTab, variant, onClose
66
66
 
67
67
  if (justOpened) {
68
68
  apiFetch<SettingsData>('/api/settings').then(d => { setData(d); dataLoaded.current = true; }).catch(() => setStatus('load-error'));
69
- setFont(localStorage.getItem('prose-font') === 'geist' ? 'inter' : localStorage.getItem('prose-font') ?? 'lora');
69
+ setFont(localStorage.getItem('prose-font') === 'geist' ? 'inter' : localStorage.getItem('prose-font') ?? 'ibm-plex-sans');
70
70
  setFontSize(localStorage.getItem('prose-font-size') ?? '15px');
71
71
  setContentWidth(localStorage.getItem('content-width') ?? '780px');
72
72
  const stored = localStorage.getItem('theme');
@@ -1,21 +1,33 @@
1
1
  ---
2
2
  name: mindos
3
3
  description: >
4
- Operate a MindOS knowledge base: update notes, search, organize files, execute SOPs/workflows,
5
- retrospective, append CSV, cross-agent handoff, route unstructured input to the right files,
6
- distill experience, sync related docs. 更新笔记, 搜索知识库, 整理, 执行SOP, 复盘, 追加CSV, 交接, 路由到文件, 提炼经验.
7
- Use when the task targets files inside the user's MindOS KB (mindRoot).
4
+ The user's shared knowledge base persistent across sessions and agents. MindOS stores decisions,
5
+ meeting notes, SOPs, debugging lessons, architecture choices, research findings, and preferences.
6
+ 更新笔记, 搜索知识库, 整理文件, 执行SOP/工作流, 复盘, 追加CSV, 跨Agent交接,
7
+ 路由非结构化输入到对应文件, 提炼经验, 同步关联文档.
8
8
  NOT for editing app source, project docs, or paths outside the KB.
9
9
  Core concepts: Space, Instruction (INSTRUCTION.md), Skill (SKILL.md); notes can embody both.
10
- Trigger when user asks to: save or record a note, search their knowledge base, update or edit
11
- a file, organize notes, run a workflow or SOP, capture decisions from a session, append rows
12
- to a table or CSV, hand off context to another agent or says "帮我记下来" / "搜一下我的笔记" /
13
- "更新知识库" / "整理文件" / "执行工作流".
10
+
11
+ Trigger on: save or record anything, search for prior notes or context, update or edit a file,
12
+ organize notes, run a workflow or SOP, capture decisions, append rows to a table or CSV,
13
+ hand off context to another agent, check if something was discussed before, look up a past
14
+ decision, distill lessons learned, prepare context for a meeting, quick-capture to staging area,
15
+ organize inbox, check knowledge health, detect conflicts or contradictions, find stale content.
16
+ Chinese triggers: 帮我记下来, 搜一下笔记, 更新知识库, 整理文件, 复盘, 提炼经验,
17
+ 保存, 记录, 交接, 查一下之前的, 有没有相关笔记, 把这个存起来, 放到暂存台,
18
+ 整理暂存台, 知识健康检查, 检测知识冲突.
19
+
20
+ Proactive behavior — do not wait for the user to mention MindOS:
21
+ (1) When user's question implies stored context may exist (past decisions, previous discussions,
22
+ meeting records) → search MindOS first, even if they don't explicitly mention it.
23
+ (2) After completing valuable work (bug fixed, decision made, lesson learned, architecture chosen,
24
+ meeting summarized) → offer to save it to MindOS for future reference.
25
+ (3) After a long or multi-topic conversation → suggest persisting key decisions and context.
14
26
  ---
15
27
 
16
28
  # MindOS Skill
17
29
 
18
- <!-- version: 3.0.0 — CLI-first, MCP optional -->
30
+ <!-- version: 3.2.0 — CLI-first, MCP optional -->
19
31
 
20
32
  ## CLI commands
21
33
 
@@ -80,6 +92,7 @@ npm install -g @geminilight/mindos
80
92
  - **Space** — Knowledge partitions organized the way you think. Agents follow the same structure.
81
93
  - **Instruction** — A rules file (`INSTRUCTION.md`) all connected agents obey.
82
94
  - **Skill** — Teaches agents how to read, write, and organize the KB.
95
+ - **Inbox** — The `Inbox/` directory is a staging area for quick capture. Files land here when there's no obvious home yet. They get organized later — by the user manually or via AI-assisted batch organization.
83
96
 
84
97
  Notes can embody both Instruction and Skill — they're just Markdown files in the tree.
85
98
 
@@ -94,9 +107,13 @@ User request
94
107
  │ └─ [Read-only]: search → read → answer with citations. No writes.
95
108
 
96
109
  ├─ Save / record / update / organize specific content?
97
- │ ├─ Single file → [Single-file edit]
110
+ │ ├─ Know where it goes → [Single-file edit]
111
+ │ ├─ Don't know where it goes → [Inbox path] — save to Inbox/, classify later
98
112
  │ └─ Multiple files or unclear → [Multi-file routing] — plan first
99
113
 
114
+ ├─ Organize inbox / classify staged files?
115
+ │ └─ [Inbox organize] — read Inbox/ files, propose destinations, move after approval
116
+
100
117
  ├─ Structural change (rename / move / delete / reorganize)?
101
118
  │ └─ [Structural path] — check backlinks before and after
102
119
 
@@ -106,6 +123,9 @@ User request
106
123
  ├─ Retrospective / distill / handoff?
107
124
  │ └─ [Retrospective path]
108
125
 
126
+ ├─ Knowledge health check / detect conflicts?
127
+ │ └─ [Health check path] — read references/knowledge-health.md
128
+
109
129
  └─ Ambiguous?
110
130
  └─ ASK. Propose 2-3 specific options based on KB state.
111
131
  ```
@@ -115,13 +135,14 @@ User request
115
135
  ## Judgment heuristics
116
136
 
117
137
  **Save intent boundary:**
118
- - "帮我记下来" / "保存" = write
119
- - "搜一下" / "总结" = read-only
120
- - "整理一下" → ask: display only, or write back?
138
+ - "save this" / "record" / "write down" = write
139
+ - "search" / "summarize" / "look up" = read-only
140
+ - "organize" → ask: display only, or write back?
121
141
 
122
142
  **File location uncertainty:**
123
- - Can't decide in 5 seconds → use nearest existing directory, inform user
124
- - "Just put it somewhere" → inbox, propose classification after
143
+ - Can't decide in 5 seconds → save to `Inbox/`, inform user, propose classification later
144
+ - "Just put it somewhere" / "先放着" save to `Inbox/`
145
+ - User drags files or pastes unstructured content without specifying location → `Inbox/`
125
146
 
126
147
  **Scope creep:**
127
148
  - Input routes to >5 files → pause, confirm scope
@@ -154,6 +175,42 @@ When user expresses a standing preference → read [references/preference-captur
154
175
 
155
176
  When creating/rewriting an SOP → read [references/sop-template.md](./references/sop-template.md).
156
177
 
178
+ ## Inbox (staging area)
179
+
180
+ The `Inbox/` directory is the KB's quick-capture zone. It has its own `INSTRUCTION.md` that governs behavior.
181
+
182
+ **When to use Inbox:**
183
+ - User says "just save it" / "先放着" / "放到暂存台" without specifying a location
184
+ - Content doesn't clearly fit any existing Space or directory
185
+ - Batch import of multiple files that need individual classification
186
+
187
+ **How to save to Inbox:**
188
+ ```bash
189
+ mindos file create "Inbox/<filename>.md" --content "..."
190
+ ```
191
+
192
+ **How to organize Inbox:**
193
+ 1. List Inbox files: `mindos file list Inbox/`
194
+ 2. Read each file to understand its content
195
+ 3. For each file, propose the best destination directory based on KB structure
196
+ 4. Present the full routing plan to user for approval
197
+ 5. Move files: `mindos file rename "Inbox/<file>" "<target-dir>/<file>"`
198
+ 6. After moving, check if the target directory's README needs updating
199
+
200
+ **Aging reminder:** Files in Inbox older than 7 days are considered "aging". If you notice aging files during bootstrap, mention it: "You have N files in Inbox that have been sitting there for over a week. Want me to help organize them?"
201
+
202
+ ## Knowledge health check
203
+
204
+ When user asks to check knowledge health, detect conflicts, audit quality, or says "知识健康检查" / "检测冲突" → read [references/knowledge-health.md](./references/knowledge-health.md) for the full procedure.
205
+
206
+ Quick summary of what gets checked:
207
+ - **Contradictions**: conflicting facts across files on the same topic
208
+ - **Broken links**: references to files that no longer exist
209
+ - **Stale content**: files with outdated date markers or untouched for >6 months
210
+ - **Duplicates**: two files covering the same ground without cross-referencing
211
+ - **Orphan files**: files with zero backlinks, hard to discover
212
+ - **Structural issues**: wrong directory, missing READMEs, aging Inbox files
213
+
157
214
  ---
158
215
 
159
216
  ## Error handling (CLI)
@@ -1,16 +1,34 @@
1
1
  ---
2
2
  name: mindos-zh
3
3
  description: >
4
- 操作 MindOS 知识库:更新笔记, 搜索知识库, 整理文件, 执行SOP/工作流, 复盘, 追加CSV, 跨Agent交接,
5
- 路由非结构化输入到对应文件, 提炼经验, 同步关联文档. update notes, search knowledge base, organize,
6
- SOP, retrospective, CSV, handoff, route notes, distill experience.
7
- 仅 mindRoot 知识库内任务。不用于:改代码仓库/项目文档/KB 外路径。
4
+ 用户的共享知识库——跨会话、跨 Agent 持久存在。MindOS 存储决策记录、会议纪要、SOP
5
+ 排错经验、架构选型、调研结论和偏好设置。
6
+ mindRoot 知识库内任务。不用于:改代码仓库、项目源码、KB 外路径。
8
7
  核心概念:空间、指令(INSTRUCTION.md)、技能(SKILL.md);笔记可承载指令与技能。
8
+
9
+ 触发场景:保存或记录任何内容、搜索历史笔记或上下文、更新或编辑文件、整理或重组文件结构、
10
+ 执行SOP或工作流、捕获对话中的决策、复盘或总结经验、追加表格或CSV数据、跨Agent交接上下文、
11
+ 提炼经验教训、同步关联文档、查找之前是否讨论过某事、查询历史决策、查找模板或SOP、
12
+ 为会议准备上下文、快速暂存到暂存台、整理暂存台、知识健康检查、检测知识冲突或矛盾、
13
+ 查找过期内容。
14
+ 触发词:帮我记下来、搜一下我的笔记、更新知识库、整理文件、执行工作流、保存到知识库、
15
+ 记录一下、整理笔记、复盘、提炼经验、同步文档、查一下之前的记录、有没有相关的笔记、
16
+ 我之前写过什么、把这个存起来、总结一下保存、交接给其他Agent、追加到表格、
17
+ 放到暂存台、整理暂存台、知识健康检查、检测知识冲突。
18
+ English triggers: save, record, search notes, organize, retrospective, handoff, lessons learned,
19
+ inbox, staging, knowledge health, detect conflicts.
20
+
21
+ 主动行为——不要等用户提到 MindOS:
22
+ (1) 用户的问题暗示可能存在历史记录(过去的决策、之前的讨论、会议纪要)→ 先搜 MindOS,
23
+ 即使没有明确提到知识库。
24
+ (2) 完成有价值的工作后(修了 bug、做了决策、总结了经验、选定了架构、开完了会)→
25
+ 主动提议保存到 MindOS,方便以后查阅。
26
+ (3) 经历了较长或多主题的对话后 → 建议把关键决策和上下文持久化。
9
27
  ---
10
28
 
11
29
  # MindOS 技能
12
30
 
13
- <!-- version: 3.0.0 — CLI 优先,MCP 可选 -->
31
+ <!-- version: 3.2.0 — CLI 优先,MCP 可选 -->
14
32
 
15
33
  ## CLI 命令
16
34
 
@@ -75,6 +93,7 @@ npm install -g @geminilight/mindos
75
93
  - **空间 (Space)** — 按你的思维方式组织的知识分区。Agent 遵循相同结构。
76
94
  - **指令 (Instruction)** — `INSTRUCTION.md`,所有连接的 Agent 都遵守的规则文件。
77
95
  - **技能 (Skill)** — 教 Agent 如何读写和整理知识库。
96
+ - **暂存台 (Inbox)** — `Inbox/` 目录是快速捕获区。内容暂时找不到归属时先放这里,之后再统一整理——用户手动或 AI 辅助批量归类。
78
97
 
79
98
  笔记可以同时承载指令和技能——它们只是目录树中的 Markdown 文件。
80
99
 
@@ -89,9 +108,13 @@ npm install -g @geminilight/mindos
89
108
  │ └─ [只读路径]:搜索 → 读取 → 带引用回答。不写入。
90
109
 
91
110
  ├─ 保存 / 记录 / 更新 / 整理具体内容?
92
- │ ├─ 单文件 → [单文件编辑]
111
+ │ ├─ 知道放哪 → [单文件编辑]
112
+ │ ├─ 不知道放哪 → [暂存台路径] — 存到 Inbox/,之后再归类
93
113
  │ └─ 多文件或不确定 → [多文件路由] — 先出方案
94
114
 
115
+ ├─ 整理暂存台 / 归类暂存文件?
116
+ │ └─ [暂存台整理] — 读 Inbox/ 文件,提议目标位置,获批后移动
117
+
95
118
  ├─ 结构变更(重命名 / 移动 / 删除 / 重组)?
96
119
  │ └─ [结构路径] — 变更前后检查反向链接
97
120
 
@@ -101,6 +124,9 @@ npm install -g @geminilight/mindos
101
124
  ├─ 复盘 / 提炼 / 交接?
102
125
  │ └─ [复盘路径]
103
126
 
127
+ ├─ 知识健康检查 / 检测冲突?
128
+ │ └─ [健康检查路径] — 读取 references/knowledge-health.md
129
+
104
130
  └─ 模糊?
105
131
  └─ 提问。基于知识库状态提出 2-3 个具体选项。
106
132
  ```
@@ -115,8 +141,9 @@ npm install -g @geminilight/mindos
115
141
  - "整理一下" → 先问:仅展示,还是写回知识库?
116
142
 
117
143
  **文件位置不确定:**
118
- - 5 秒内定不了 → 用最近的现有目录,告知用户
119
- - "随便放哪" → 收件箱,之后提议分类
144
+ - 5 秒内定不了 → 存到 `Inbox/`,告知用户,之后提议归类
145
+ - "随便放哪" / "先放着" 存到 `Inbox/`
146
+ - 用户拖拽文件或粘贴非结构化内容但没指定位置 → `Inbox/`
120
147
 
121
148
  **范围蔓延:**
122
149
  - 输入路由到 >5 个文件 → 暂停确认
@@ -149,6 +176,44 @@ npm install -g @geminilight/mindos
149
176
 
150
177
  创建/重写工作流 SOP 时 → 读取 [references/sop-template.md](./references/sop-template.md)。
151
178
 
179
+ ## 暂存台 (Inbox)
180
+
181
+ `Inbox/` 目录是知识库的快速捕获区,有自己的 `INSTRUCTION.md` 约束行为。
182
+
183
+ **何时使用暂存台:**
184
+ - 用户说"先存着" / "放到暂存台" / "随便放哪",没指定具体位置
185
+ - 内容明显不属于任何现有空间或目录
186
+ - 批量导入多个文件,需要逐个归类
187
+
188
+ **如何存到暂存台:**
189
+ ```bash
190
+ mindos file create "Inbox/<文件名>.md" --content "..."
191
+ ```
192
+
193
+ **如何整理暂存台:**
194
+ 1. 列出暂存文件:`mindos file list Inbox/`
195
+ 2. 读取每个文件,理解其内容
196
+ 3. 根据知识库结构,为每个文件提议最佳目标目录
197
+ 4. 向用户展示完整路由方案,获批后执行
198
+ 5. 移动文件:`mindos file rename "Inbox/<文件>" "<目标目录>/<文件>"`
199
+ 6. 移动后检查目标目录的 README 是否需要更新
200
+
201
+ **老化提醒:** Inbox 中超过 7 天的文件视为"老化"。如果在 bootstrap 时发现老化文件,主动提醒:
202
+ "暂存台有 N 个文件已经放了一周以上了,要我帮你整理一下吗?"
203
+
204
+ ## 知识健康检查
205
+
206
+ 用户要求检查知识库健康度、检测冲突、审计质量,或说"知识健康检查" / "检测冲突" / "check knowledge health" 时
207
+ → 读取 [references/knowledge-health.md](./references/knowledge-health.md) 获取完整流程。
208
+
209
+ 检查维度速览:
210
+ - **矛盾/冲突**:同一主题的不同文件说法互相矛盾
211
+ - **断裂链接**:引用了不存在的文件
212
+ - **过期内容**:带有过期日期标记的文件,或超过 6 个月未更新的活跃主题
213
+ - **重复内容**:两个文件覆盖同一主题且没有互相引用
214
+ - **孤立文件**:零反向链接,难以被发现
215
+ - **结构问题**:文件放错目录、缺少 README、暂存台老化文件
216
+
152
217
  ---
153
218
 
154
219
  ## 错误处理(CLI)