@geminilight/mindos 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) 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 +19 -19
  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 +4 -4
  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 +1 -1
  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 +1 -1
  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_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/ask/route.js +4 -4
  43. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/embedding/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/extract-docx/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/im/activity/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/im/feishu/long-connection/event/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/im/feishu/long-connection/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/im/webhook/feishu/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/im/webhook-status/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/obsidian/compat-report/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/obsidian/import/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/search/prewarm/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/capture/history/page.js +1 -1
  108. package/_standalone/.next/server/app/capture/history/page.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/capture/history/page_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/capture/page.js +1 -1
  111. package/_standalone/.next/server/app/capture/page.js.nft.json +1 -1
  112. package/_standalone/.next/server/app/capture/page_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/changelog/page.js +1 -1
  114. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/changes/page.js +1 -1
  117. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  120. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/echo/page.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/explore/page.js +1 -1
  126. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/help/page.js +1 -1
  129. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  132. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  133. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  134. package/_standalone/.next/server/app/login/page.js +1 -1
  135. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  136. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  137. package/_standalone/.next/server/app/page.js +1 -1
  138. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/setup/page.js +1 -1
  141. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/todo/page.js +1 -1
  144. package/_standalone/.next/server/app/todo/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/todo/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/trash/page.js +2 -2
  147. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
  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 -0
  152. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
  153. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
  154. package/_standalone/.next/server/app-paths-manifest.json +19 -19
  155. package/_standalone/.next/server/chunks/2250.js +1 -1
  156. package/_standalone/.next/server/chunks/{1057.js → 3861.js} +2 -2
  157. package/_standalone/.next/server/chunks/4802.js +30 -30
  158. package/_standalone/.next/server/chunks/8388.js +1 -1
  159. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  160. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  161. package/_standalone/.next/server/pages/500.html +2 -2
  162. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  163. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  164. package/_standalone/.next/static/chunks/{5581-bae715e40d227b5f.js → 5581-beecbc4ca5625aa9.js} +2 -2
  165. package/_standalone/.next/static/chunks/6762.c871d0bf3f45ba87.js +1 -0
  166. package/_standalone/.next/static/chunks/{8064-e65acd2762132099.js → 8064-acac37daf946082b.js} +1 -1
  167. package/_standalone/.next/static/chunks/{3985.695651f6b5cd768c.js → 8984.91fb8cde1983c564.js} +2 -2
  168. package/_standalone/.next/static/chunks/app/{layout-0cf6f2a65f605a0d.js → layout-20faba3bc0af7cd2.js} +19 -19
  169. package/_standalone/.next/static/chunks/app/trash/page-0c2c67929b71ef71.js +1 -0
  170. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fd06cc989103ebe7.js +1 -0
  171. package/_standalone/.next/static/chunks/app/view/[...path]/page-dba70888697ba910.js +12 -0
  172. package/_standalone/.next/static/chunks/app/wiki/page-9bc1fec84d343290.js +14 -0
  173. package/_standalone/.next/static/chunks/webpack-3c1d0331f1da64b8.js +1 -0
  174. package/_standalone/.next/trace +97 -97
  175. package/_standalone/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
  176. package/_standalone/MINDOS_EXPLORATION_SUMMARY.md +229 -0
  177. package/_standalone/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
  178. package/_standalone/__tests__/api/mcp-install.test.ts +8 -2
  179. package/_standalone/__tests__/core/embedding-provider.test.ts +78 -0
  180. package/_standalone/__tests__/skills/mindos-skill-copy-alignment.test.ts +10 -4
  181. package/_standalone/components/ask/AskHeader.tsx +25 -18
  182. package/_standalone/components/ask/SessionHistoryPanel.tsx +21 -12
  183. package/_standalone/components/settings/AiTab.tsx +3 -0
  184. package/_standalone/data/skills/mindos/SKILL.md +269 -0
  185. package/_standalone/data/skills/mindos/references/write-supplement.md +119 -0
  186. package/_standalone/data/skills/mindos-zh/SKILL.md +227 -0
  187. package/_standalone/data/skills/mindos-zh/references/write-supplement.md +119 -0
  188. package/app/__tests__/api/mcp-install.test.ts +8 -2
  189. package/app/__tests__/core/embedding-provider.test.ts +78 -0
  190. package/app/__tests__/skills/mindos-skill-copy-alignment.test.ts +10 -4
  191. package/app/app/api/ask/route.ts +14 -9
  192. package/app/app/view/[...path]/ViewPageClient.tsx +15 -12
  193. package/app/app/view/[...path]/not-found.tsx +9 -5
  194. package/app/components/ask/AskHeader.tsx +25 -18
  195. package/app/components/ask/SessionHistoryPanel.tsx +21 -12
  196. package/app/components/settings/AiTab.tsx +3 -0
  197. package/app/eslint.config.mjs +18 -0
  198. package/app/lib/core/embedding-provider.ts +12 -4
  199. package/app/lib/i18n/modules/settings.ts +2 -0
  200. package/app/package-lock.json +20214 -0
  201. package/app/tsconfig.tsbuildinfo +1 -0
  202. package/app/vitest.config.ts +14 -0
  203. package/assets/demo-flow-zh.html +622 -0
  204. package/assets/images/demo-flow-dark.png +0 -0
  205. package/assets/images/demo-flow-dark.webp +0 -0
  206. package/assets/images/demo-flow-light.png +0 -0
  207. package/assets/images/demo-flow-light.webp +0 -0
  208. package/assets/images/demo-flow-zh-dark.png +0 -0
  209. package/assets/images/demo-flow-zh-dark.webp +0 -0
  210. package/assets/images/demo-flow-zh-light.png +0 -0
  211. package/assets/images/demo-flow-zh-light.webp +0 -0
  212. package/assets/images/gui-sync-cv.png +0 -0
  213. package/assets/images/gui-sync-cv.webp +0 -0
  214. package/assets/images/mindos-chat.png +0 -0
  215. package/assets/images/mindos-chat.webp +0 -0
  216. package/assets/images/mindos-dashboard.png +0 -0
  217. package/assets/images/mindos-dashboard.webp +0 -0
  218. package/assets/images/mindos-echo.png +0 -0
  219. package/assets/images/mindos-echo.webp +0 -0
  220. package/assets/images/mindos-home.png +0 -0
  221. package/assets/images/mindos-home.webp +0 -0
  222. package/assets/images/wechat-qr.png +0 -0
  223. package/bin/lib/mcp-build.js +8 -0
  224. package/mcp/package-lock.json +2202 -0
  225. package/mcp/src/index.ts +783 -0
  226. package/package.json +13 -1
  227. package/.env.local.example +0 -38
  228. package/.playwright-cli/page-2026-04-12T12-26-53-393Z.yml +0 -6
  229. package/.playwright-cli/page-2026-04-12T12-27-20-256Z.yml +0 -120
  230. package/.syncinclude +0 -105
  231. package/MINDOS_SEARCH_DIAGRAM.txt +0 -243
  232. package/_standalone/.next/static/chunks/576.3cae31209383ddbd.js +0 -1
  233. package/_standalone/.next/static/chunks/app/trash/page-085f121c0815d542.js +0 -1
  234. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-2a6eec67e91eaaf9.js +0 -1
  235. package/_standalone/.next/static/chunks/app/view/[...path]/page-faeaf8c09c1c6d7c.js +0 -12
  236. package/_standalone/.next/static/chunks/webpack-a1bb35f2d540e463.js +0 -1
  237. package/scripts/build-runtime-archive.sh +0 -151
  238. package/scripts/fix-postcss-deps.cjs +0 -75
  239. package/scripts/gen-renderer-index.js +0 -64
  240. package/scripts/hooks/block-public-merge.sh +0 -42
  241. package/scripts/hooks/pre-merge-commit +0 -4
  242. package/scripts/hooks/pre-push +0 -37
  243. package/scripts/hooks/prepare-commit-msg +0 -12
  244. package/scripts/migrate-agent-audit-log.js +0 -170
  245. package/scripts/migrate-agent-diff.js +0 -146
  246. package/scripts/parse-syncinclude.sh +0 -92
  247. package/scripts/prepare-standalone.mjs +0 -83
  248. package/scripts/release.sh +0 -145
  249. package/scripts/setup.js +0 -1427
  250. package/scripts/test-oss-upload.sh +0 -100
  251. package/scripts/verify-standalone.mjs +0 -129
  252. package/scripts/write-build-stamp.js +0 -40
  253. /package/_standalone/.next/static/{q5RP_Mx8BrCfvVDnLpRRc → 0UlbV2rA2i4B-8YYg41wQ}/_buildManifest.js +0 -0
  254. /package/_standalone/.next/static/{q5RP_Mx8BrCfvVDnLpRRc → 0UlbV2rA2i4B-8YYg41wQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,229 @@
1
+ # MindOS Exploration Summary
2
+
3
+ ## Overview
4
+ This document provides a high-level summary of the MindOS codebase exploration conducted on 2026-04-10. The full detailed analysis is in `MINDOS_INFRASTRUCTURE_ANALYSIS.md`.
5
+
6
+ ## Key Findings
7
+
8
+ ### 1. Settings System
9
+ - **Location**: `~/.mindos/config.json` (single JSON file per user)
10
+ - **I/O**: `lib/settings.ts` (readSettings/writeSettings)
11
+ - **Pattern**: Atomic writes via temp file + rename (crash-safe)
12
+ - **Extension**: Add new field to `ServerSettings` interface, parse safely, add UI tab
13
+ - **Current size**: Real config observed ~2KB with ~5 providers
14
+
15
+ ### 2. LLM API Key Management
16
+ - **Architecture**: Unified `Provider` interface - all LLM providers use same model
17
+ - **Structure**: Each provider has ID (p_*), name, protocol, apiKey, model, baseUrl
18
+ - **Provider Types**: 20+ supported (Anthropic, OpenAI, Google, Groq, DeepSeek, Ollama, etc.)
19
+ - **Resolution Chain**: Config file → Environment variables → Preset defaults
20
+ - **File**: `lib/agent/providers.ts` (PROVIDER_PRESETS registry)
21
+ - **Migration**: Auto-detects old format, transparently migrates to new unified model
22
+
23
+ ### 3. Search Infrastructure
24
+ - **Dual System**:
25
+ 1. **Core Search (BM25)**: `lib/core/search.ts` - Backend, MCP-friendly, full-text
26
+ 2. **App Search (Fuse.js)**: `lib/fs.ts` - Frontend, fuzzy matching, UI overlay
27
+ - **Index**: Inverted index in `lib/core/search-index.ts`, persists to `~/.mindos/search-index.json`
28
+ - **Updates**: Incremental on file changes (O(tokens) not O(all-files))
29
+ - **Features**: CJK support, PDF text extraction, multi-term BM25 scoring
30
+ - **API Route**: `GET /api/search?q=query`
31
+
32
+ ### 4. Package Ecosystem
33
+ - **Relevant deps**: fuse.js, pdfjs-dist, @mariozechner/pi-ai, zod, zustand
34
+ - **NO existing**: OpenAI SDK, transformers, vector databases
35
+ - **For RAG**: Would need to add embedding client + lightweight vector store
36
+
37
+ ### 5. Feature Organization
38
+ - **Pattern**: Optional features are modular (e.g., web-search in lib/agent/)
39
+ - **Settings Features**: Get UI tab + API route wiring
40
+ - **Example**: KnowledgeTab (git sync settings)
41
+
42
+ ---
43
+
44
+ ## File Locations Reference
45
+
46
+ ### Core Settings
47
+ - `lib/settings.ts` - Main settings I/O
48
+ - `lib/custom-endpoints.ts` - Provider unified interface
49
+ - `app/api/settings/route.ts` - Settings API endpoint
50
+
51
+ ### Provider Management
52
+ - `lib/agent/providers.ts` - Provider presets & metadata
53
+ - `lib/settings-ai-client.ts` - Client-side settings mirror
54
+
55
+ ### Search
56
+ - `lib/core/search.ts` - BM25 algorithm + core search
57
+ - `lib/core/search-index.ts` - Inverted index class
58
+ - `lib/core/types.ts` - SearchResult interface
59
+ - `lib/fs.ts` - App-level search wrapper, cache management
60
+ - `app/api/search/route.ts` - Search API endpoint
61
+
62
+ ### UI
63
+ - `components/settings/AiTab.tsx` - LLM provider UI
64
+ - `components/settings/` - Other setting tabs
65
+
66
+ ### Configuration Files
67
+ - `~/.mindos/config.json` - User settings
68
+ - `~/.mindos/search-index.json` - Persisted search index
69
+ - `~/.mindos/sync-state.json` - Git sync state
70
+
71
+ ---
72
+
73
+ ## Design Patterns Worth Following
74
+
75
+ 1. **Atomic Persistence**: Temp file + rename (prevents corruption)
76
+ 2. **Lazy Building**: Index built on first use, not at startup
77
+ 3. **Incremental Updates**: Mutations update index O(tokens) not O(all-files)
78
+ 4. **Safe Type Coercion**: All parsing includes fallbacks to sensible defaults
79
+ 5. **Environment Variable Override**: Settings can be overridden by env vars
80
+ 6. **Auto-Migration**: Old formats detected and transparently upgraded
81
+ 7. **Config Merging**: New writes merge with existing to preserve unknown fields
82
+
83
+ ---
84
+
85
+ ## For Adding Embedding-Based RAG
86
+
87
+ ### Recommended Structure
88
+ ```
89
+ lib/
90
+ ├── rag/ (NEW)
91
+ │ ├── config.ts - RAG configuration helpers
92
+ │ ├── search.ts - Unified BM25 + semantic search interface
93
+ │ └── index.ts - Exports
94
+ ├── core/
95
+ │ ├── embedding-index.ts (NEW) - Vector storage
96
+ │ ├── embedding-client.ts (NEW) - Embedding API calls
97
+ │ └── ...existing...
98
+
99
+ app/api/
100
+ ├── rag/ (NEW)
101
+ │ ├── rebuild/route.ts
102
+ │ ├── search/route.ts
103
+ │ └── status/route.ts
104
+
105
+ components/settings/
106
+ ├── RagTab.tsx (NEW) - UI for RAG configuration
107
+ ```
108
+
109
+ ### Configuration Pattern
110
+ ```typescript
111
+ interface RagConfig {
112
+ enabled: boolean;
113
+ embeddingModel: string; // e.g., "text-embedding-3-small"
114
+ embeddingProvider: ProviderId; // Reuse existing provider system
115
+ embeddingApiKey?: string; // Optional if using env var
116
+ indexType: 'bm25' | 'hybrid' | 'semantic';
117
+ chunkSize: number;
118
+ chunkOverlap: number;
119
+ }
120
+
121
+ // Add to ServerSettings in lib/settings.ts:
122
+ rag?: RagConfig;
123
+ ```
124
+
125
+ ### API Paths
126
+ - `POST /api/rag/rebuild` - Rebuild embedding index
127
+ - `GET /api/rag/status` - Index statistics
128
+ - `GET /api/search?q=...&type=hybrid` - Hybrid search (BM25 + semantic)
129
+ - `POST /api/settings/embedding-models` - List available models
130
+
131
+ ---
132
+
133
+ ## Quick Reference: How MindOS Extends
134
+
135
+ ### Adding a New LLM Provider
136
+ 1. Add to `ProviderId` type in `lib/agent/providers.ts`
137
+ 2. Add to `PROVIDER_PRESETS` with metadata
138
+ 3. Add env var mapping in `getApiKeyEnvVar()`
139
+ 4. UI automatically updates (uses PROVIDER_PRESETS registry)
140
+
141
+ ### Adding a New Settings Field
142
+ 1. Add to `ServerSettings` interface in `lib/settings.ts`
143
+ 2. Add parsing function with safe defaults
144
+ 3. Add to `DEFAULTS` constant
145
+ 4. Create UI tab in `components/settings/NewTab.tsx`
146
+ 5. API route handles automatically (it's generic)
147
+
148
+ ### Adding a New Search Feature
149
+ 1. Create module in `lib/` or `lib/core/`
150
+ 2. Implement similar index/query patterns
151
+ 3. Add API route in `app/api/`
152
+ 4. Wire into main search orchestrator
153
+
154
+ ---
155
+
156
+ ## Testing Notes
157
+
158
+ - Settings tests: `__tests__/api/settings.test.ts`
159
+ - Search tests: `__tests__/api/search.test.ts`
160
+ - Core search tests: `__tests__/lib/` directory
161
+ - Mock pattern: Use vitest with module mocking
162
+
163
+ ---
164
+
165
+ ## Environment Variables Supported
166
+
167
+ - `MIND_ROOT` - Override knowledge base location
168
+ - `MINDOS_WEB_PORT` - Web server port
169
+ - `AI_PROVIDER` - Default provider ID
170
+ - `ANTHROPIC_API_KEY` - Anthropic API key
171
+ - `OPENAI_API_KEY` - OpenAI API key
172
+ - (And similar for all supported providers)
173
+
174
+ ---
175
+
176
+ ## Caching & Invalidation Strategy
177
+
178
+ **Search Index Lifecycle:**
179
+ 1. Lazy build on first search
180
+ 2. Persisted to `~/.mindos/search-index.json`
181
+ 3. TTL: 5 minutes (file watcher invalidates immediately)
182
+ 4. On file change: Incremental update (not full rebuild)
183
+ 5. On process exit: Flush pending updates (SIGTERM, SIGINT hooks)
184
+
185
+ **File Tree Cache:**
186
+ 1. TTL: 30 seconds
187
+ 2. File watcher invalidates immediately
188
+ 3. Rebuilds on invalidation
189
+
190
+ ---
191
+
192
+ ## Critical Files for Planning RAG
193
+
194
+ 1. **MUST READ**:
195
+ - `lib/settings.ts` - Settings system
196
+ - `lib/agent/providers.ts` - Provider model
197
+ - `lib/core/search.ts` - BM25 implementation
198
+ - `lib/core/search-index.ts` - Index pattern
199
+
200
+ 2. **GOOD REFERENCE**:
201
+ - `components/settings/AiTab.tsx` - How to build settings UI
202
+ - `app/api/settings/route.ts` - API pattern
203
+ - `__tests__/api/settings.test.ts` - Testing pattern
204
+
205
+ 3. **OPTIONAL**:
206
+ - `lib/agent/web-search.ts` - Example optional feature
207
+ - `lib/sync-config.ts` - Persistence utilities
208
+
209
+ ---
210
+
211
+ ## Next Steps for Implementation
212
+
213
+ 1. ✅ Understand settings system architecture
214
+ 2. ✅ Understand provider model and API key resolution
215
+ 3. ✅ Understand search infrastructure (BM25 + index)
216
+ 4. ⏭️ Plan embedding provider integration
217
+ 5. ⏭️ Design RAG configuration schema
218
+ 6. ⏭️ Implement EmbeddingClient abstraction
219
+ 7. ⏭️ Implement EmbeddingIndex class
220
+ 8. ⏭️ Wire up settings UI (RagTab.tsx)
221
+ 9. ⏭️ Add API routes for RAG operations
222
+ 10. ⏭️ Implement hybrid search combining BM25 + semantic
223
+
224
+ ---
225
+
226
+ **Generated**: 2026-04-10
227
+ **Repository**: MindOS (sop_note/app)
228
+ **Analysis Scope**: Settings system, LLM API management, search infrastructure
229
+ **Goal**: Planning for embedding-based RAG search integration