@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.
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +19 -19
- package/_standalone/.next/build-manifest.json +3 -3
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/react-loadable-manifest.json +4 -4
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +4 -4
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/embedding/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-docx/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/feishu/long-connection/event/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/feishu/long-connection/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/webhook/feishu/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/webhook-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/obsidian/compat-report/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/obsidian/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/prewarm/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/capture/history/page.js +1 -1
- package/_standalone/.next/server/app/capture/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/capture/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/capture/page.js +1 -1
- package/_standalone/.next/server/app/capture/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/capture/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changelog/page.js +1 -1
- package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +1 -1
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +1 -1
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +1 -1
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/todo/page.js +1 -1
- package/_standalone/.next/server/app/todo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/todo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +2 -2
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +2 -0
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app-paths-manifest.json +19 -19
- package/_standalone/.next/server/chunks/2250.js +1 -1
- package/_standalone/.next/server/chunks/{1057.js → 3861.js} +2 -2
- package/_standalone/.next/server/chunks/4802.js +30 -30
- package/_standalone/.next/server/chunks/8388.js +1 -1
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/{5581-bae715e40d227b5f.js → 5581-beecbc4ca5625aa9.js} +2 -2
- package/_standalone/.next/static/chunks/6762.c871d0bf3f45ba87.js +1 -0
- package/_standalone/.next/static/chunks/{8064-e65acd2762132099.js → 8064-acac37daf946082b.js} +1 -1
- package/_standalone/.next/static/chunks/{3985.695651f6b5cd768c.js → 8984.91fb8cde1983c564.js} +2 -2
- package/_standalone/.next/static/chunks/app/{layout-0cf6f2a65f605a0d.js → layout-20faba3bc0af7cd2.js} +19 -19
- package/_standalone/.next/static/chunks/app/trash/page-0c2c67929b71ef71.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fd06cc989103ebe7.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-dba70888697ba910.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-9bc1fec84d343290.js +14 -0
- package/_standalone/.next/static/chunks/webpack-3c1d0331f1da64b8.js +1 -0
- package/_standalone/.next/trace +97 -97
- package/_standalone/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
- package/_standalone/MINDOS_EXPLORATION_SUMMARY.md +229 -0
- package/_standalone/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
- package/_standalone/__tests__/api/mcp-install.test.ts +8 -2
- package/_standalone/__tests__/core/embedding-provider.test.ts +78 -0
- package/_standalone/__tests__/skills/mindos-skill-copy-alignment.test.ts +10 -4
- package/_standalone/components/ask/AskHeader.tsx +25 -18
- package/_standalone/components/ask/SessionHistoryPanel.tsx +21 -12
- package/_standalone/components/settings/AiTab.tsx +3 -0
- package/_standalone/data/skills/mindos/SKILL.md +269 -0
- package/_standalone/data/skills/mindos/references/write-supplement.md +119 -0
- package/_standalone/data/skills/mindos-zh/SKILL.md +227 -0
- package/_standalone/data/skills/mindos-zh/references/write-supplement.md +119 -0
- package/app/__tests__/api/mcp-install.test.ts +8 -2
- package/app/__tests__/core/embedding-provider.test.ts +78 -0
- package/app/__tests__/skills/mindos-skill-copy-alignment.test.ts +10 -4
- package/app/app/api/ask/route.ts +14 -9
- package/app/app/view/[...path]/ViewPageClient.tsx +15 -12
- package/app/app/view/[...path]/not-found.tsx +9 -5
- package/app/components/ask/AskHeader.tsx +25 -18
- package/app/components/ask/SessionHistoryPanel.tsx +21 -12
- package/app/components/settings/AiTab.tsx +3 -0
- package/app/eslint.config.mjs +18 -0
- package/app/lib/core/embedding-provider.ts +12 -4
- package/app/lib/i18n/modules/settings.ts +2 -0
- package/app/package-lock.json +20214 -0
- package/app/tsconfig.tsbuildinfo +1 -0
- package/app/vitest.config.ts +14 -0
- package/assets/demo-flow-zh.html +622 -0
- package/assets/images/demo-flow-dark.png +0 -0
- package/assets/images/demo-flow-dark.webp +0 -0
- package/assets/images/demo-flow-light.png +0 -0
- package/assets/images/demo-flow-light.webp +0 -0
- package/assets/images/demo-flow-zh-dark.png +0 -0
- package/assets/images/demo-flow-zh-dark.webp +0 -0
- package/assets/images/demo-flow-zh-light.png +0 -0
- package/assets/images/demo-flow-zh-light.webp +0 -0
- package/assets/images/gui-sync-cv.png +0 -0
- package/assets/images/gui-sync-cv.webp +0 -0
- package/assets/images/mindos-chat.png +0 -0
- package/assets/images/mindos-chat.webp +0 -0
- package/assets/images/mindos-dashboard.png +0 -0
- package/assets/images/mindos-dashboard.webp +0 -0
- package/assets/images/mindos-echo.png +0 -0
- package/assets/images/mindos-echo.webp +0 -0
- package/assets/images/mindos-home.png +0 -0
- package/assets/images/mindos-home.webp +0 -0
- package/assets/images/wechat-qr.png +0 -0
- package/bin/lib/mcp-build.js +8 -0
- package/mcp/package-lock.json +2202 -0
- package/mcp/src/index.ts +783 -0
- package/package.json +13 -1
- package/.env.local.example +0 -38
- package/.playwright-cli/page-2026-04-12T12-26-53-393Z.yml +0 -6
- package/.playwright-cli/page-2026-04-12T12-27-20-256Z.yml +0 -120
- package/.syncinclude +0 -105
- package/MINDOS_SEARCH_DIAGRAM.txt +0 -243
- package/_standalone/.next/static/chunks/576.3cae31209383ddbd.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-085f121c0815d542.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-2a6eec67e91eaaf9.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-faeaf8c09c1c6d7c.js +0 -12
- package/_standalone/.next/static/chunks/webpack-a1bb35f2d540e463.js +0 -1
- package/scripts/build-runtime-archive.sh +0 -151
- package/scripts/fix-postcss-deps.cjs +0 -75
- package/scripts/gen-renderer-index.js +0 -64
- package/scripts/hooks/block-public-merge.sh +0 -42
- package/scripts/hooks/pre-merge-commit +0 -4
- package/scripts/hooks/pre-push +0 -37
- package/scripts/hooks/prepare-commit-msg +0 -12
- package/scripts/migrate-agent-audit-log.js +0 -170
- package/scripts/migrate-agent-diff.js +0 -146
- package/scripts/parse-syncinclude.sh +0 -92
- package/scripts/prepare-standalone.mjs +0 -83
- package/scripts/release.sh +0 -145
- package/scripts/setup.js +0 -1427
- package/scripts/test-oss-upload.sh +0 -100
- package/scripts/verify-standalone.mjs +0 -129
- package/scripts/write-build-stamp.js +0 -40
- /package/_standalone/.next/static/{q5RP_Mx8BrCfvVDnLpRRc → 0UlbV2rA2i4B-8YYg41wQ}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{q5RP_Mx8BrCfvVDnLpRRc → 0UlbV2rA2i4B-8YYg41wQ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
# MindOS Architecture Diagram
|
|
2
|
+
|
|
3
|
+
## System Overview
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
7
|
+
│ MindOS Platform │
|
|
8
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
9
|
+
│ │
|
|
10
|
+
│ FRONTEND (React) BACKEND (Next.js) │
|
|
11
|
+
│ ┌────────────────┐ ┌──────────────────────────┐ │
|
|
12
|
+
│ │ Settings UI │ │ API Routes │ │
|
|
13
|
+
│ │ ⌘K Search │◄──────────►│ /api/settings │ │
|
|
14
|
+
│ │ File Browser │ │ /api/search │ │
|
|
15
|
+
│ └────────────────┘ │ /api/rag/* (NEW) │ │
|
|
16
|
+
│ └──────────────────────────┘ │
|
|
17
|
+
│ │
|
|
18
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
19
|
+
│
|
|
20
|
+
│ Reads/Writes
|
|
21
|
+
▼
|
|
22
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
23
|
+
│ ~/.mindos/config.json (Persistent) │
|
|
24
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
25
|
+
│ │
|
|
26
|
+
│ { │
|
|
27
|
+
│ "mindRoot": "/path/to/mind", │
|
|
28
|
+
│ "ai": { │
|
|
29
|
+
│ "activeProvider": "p_esc9eiuh", │
|
|
30
|
+
│ "providers": [ │
|
|
31
|
+
│ {"id":"p_*","name":"...","protocol":"openai",...} │
|
|
32
|
+
│ ] │
|
|
33
|
+
│ }, │
|
|
34
|
+
│ "rag": { "enabled":true, "embeddingModel":"..." } (NEW) │
|
|
35
|
+
│ } │
|
|
36
|
+
│ │
|
|
37
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
38
|
+
│
|
|
39
|
+
│ Contains provider references
|
|
40
|
+
▼
|
|
41
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
42
|
+
│ Settings System (lib/settings.ts) │
|
|
43
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
44
|
+
│ │
|
|
45
|
+
│ readSettings() ┌─────────────────────────────────┐ │
|
|
46
|
+
│ writeSettings() │ ServerSettings { │ │
|
|
47
|
+
│ effectiveAiConfig() │ ai: AiConfig; │ │
|
|
48
|
+
│ │ agent?: AgentConfig; │ │
|
|
49
|
+
│ Parsing functions: │ rag?: RagConfig; (NEW) │ │
|
|
50
|
+
│ - parseAgent() │ mindRoot: string; │ │
|
|
51
|
+
│ - parseGuideState() │ port?: number; │ │
|
|
52
|
+
│ - parseNewField() │ ... │ │
|
|
53
|
+
│ │ } │ │
|
|
54
|
+
│ └─────────────────────────────────┘ │
|
|
55
|
+
│ │
|
|
56
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
57
|
+
│
|
|
58
|
+
│ Manages LLM credentials
|
|
59
|
+
▼
|
|
60
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
61
|
+
│ Provider System (lib/agent/providers.ts) │
|
|
62
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
63
|
+
│ │
|
|
64
|
+
│ interface Provider { │
|
|
65
|
+
│ id: string; // "p_" prefix (unique per entry) │
|
|
66
|
+
│ name: string; // User-visible name │
|
|
67
|
+
│ protocol: ProviderId; // "openai" | "anthropic" | ... │
|
|
68
|
+
│ apiKey: string; │
|
|
69
|
+
│ model: string; │
|
|
70
|
+
│ baseUrl: string; // Custom endpoint URL │
|
|
71
|
+
│ } │
|
|
72
|
+
│ │
|
|
73
|
+
│ PROVIDER_PRESETS = { │
|
|
74
|
+
│ anthropic: {...preset metadata...}, │
|
|
75
|
+
│ openai: {...}, │
|
|
76
|
+
│ ollama: {...}, │
|
|
77
|
+
│ ... │
|
|
78
|
+
│ } │
|
|
79
|
+
│ │
|
|
80
|
+
│ Resolution Chain: │
|
|
81
|
+
│ Config file → Environment variables → Preset defaults │
|
|
82
|
+
│ │
|
|
83
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
84
|
+
│
|
|
85
|
+
│ Calls AI APIs for embeddings (NEW)
|
|
86
|
+
▼
|
|
87
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
88
|
+
│ RAG System (lib/rag/* NEW) │
|
|
89
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
90
|
+
│ │
|
|
91
|
+
│ ┌────────────────────────────┐ │
|
|
92
|
+
│ │ EmbeddingClient │ │
|
|
93
|
+
│ │ (lib/rag/embedding-client) │ │
|
|
94
|
+
│ │ │ │
|
|
95
|
+
│ │ embed(text) → number[] │ │
|
|
96
|
+
│ │ Uses provider from config │ │
|
|
97
|
+
│ └────────────────────────────┘ │
|
|
98
|
+
│ │ │
|
|
99
|
+
│ │ Calls external embedding API │
|
|
100
|
+
│ ▼ │
|
|
101
|
+
│ ┌────────────────────────────┐ │
|
|
102
|
+
│ │ EmbeddingIndex │ │
|
|
103
|
+
│ │ (lib/core/embedding-index) │ │
|
|
104
|
+
│ │ │ │
|
|
105
|
+
│ │ rebuild(mindRoot) │ │
|
|
106
|
+
│ │ search(query) → results │ │
|
|
107
|
+
│ │ persist/load │ │
|
|
108
|
+
│ └────────────────────────────┘ │
|
|
109
|
+
│ │
|
|
110
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
111
|
+
│
|
|
112
|
+
│ Coordinates searches
|
|
113
|
+
▼
|
|
114
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
115
|
+
│ Search System │
|
|
116
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
117
|
+
│ │
|
|
118
|
+
│ ┌──────────────────────┐ ┌──────────────────────┐ │
|
|
119
|
+
│ │ BM25 Search │ │ EmbeddingIndex │ │
|
|
120
|
+
│ │ (lib/core/search.ts) │ │ (lib/core/*.ts) │ │
|
|
121
|
+
│ │ │ │ │ │
|
|
122
|
+
│ │ searchFiles(query) │ │ search(query) │ │
|
|
123
|
+
│ │ → BM25 ranking │ │ → Semantic ranking │ │
|
|
124
|
+
│ │ │ │ │ │
|
|
125
|
+
│ └──────────────────────┘ └──────────────────────┘ │
|
|
126
|
+
│ │ │ │
|
|
127
|
+
│ │ │ │
|
|
128
|
+
│ └────────────┬───────────────┘ │
|
|
129
|
+
│ │ │
|
|
130
|
+
│ ┌─────▼──────┐ │
|
|
131
|
+
│ │ Hybrid │ │
|
|
132
|
+
│ │ Search │ │
|
|
133
|
+
│ │ Combines │ │
|
|
134
|
+
│ │ results │ │
|
|
135
|
+
│ └─────┬──────┘ │
|
|
136
|
+
│ │ │
|
|
137
|
+
│ ┌─────▼──────────────┐ │
|
|
138
|
+
│ │ API Response │ │
|
|
139
|
+
│ │ {path, snippet, │ │
|
|
140
|
+
│ │ score, ...} │ │
|
|
141
|
+
│ └────────────────────┘ │
|
|
142
|
+
│ │
|
|
143
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
144
|
+
│
|
|
145
|
+
│ Returns
|
|
146
|
+
▼
|
|
147
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
148
|
+
│ Frontend Search UI (React) │
|
|
149
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
150
|
+
│ ⌘K Search → Results displayed with snippets & relevance scores │
|
|
151
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Settings & Configuration Flow
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
┌─────────────────┐
|
|
160
|
+
│ User Updates │
|
|
161
|
+
│ Settings UI │
|
|
162
|
+
└────────┬────────┘
|
|
163
|
+
│
|
|
164
|
+
│ POST /api/settings
|
|
165
|
+
▼
|
|
166
|
+
┌──────────────────────────────┐
|
|
167
|
+
│ API Handler │
|
|
168
|
+
│ (app/api/settings/route.ts) │
|
|
169
|
+
├──────────────────────────────┤
|
|
170
|
+
│ • Validate input │
|
|
171
|
+
│ • Parse providers[] │
|
|
172
|
+
│ • Merge with existing config │
|
|
173
|
+
│ • Clear proxy compat cache │
|
|
174
|
+
└────────┬─────────────────────┘
|
|
175
|
+
│
|
|
176
|
+
│ writeSettings()
|
|
177
|
+
▼
|
|
178
|
+
┌──────────────────────────────┐
|
|
179
|
+
│ lib/settings.ts │
|
|
180
|
+
├──────────────────────────────┤
|
|
181
|
+
│ • Temp file write │
|
|
182
|
+
│ • Atomic rename │
|
|
183
|
+
│ • Merge to preserve fields │
|
|
184
|
+
└────────┬─────────────────────┘
|
|
185
|
+
│
|
|
186
|
+
▼
|
|
187
|
+
┌──────────────────────────────┐
|
|
188
|
+
│ ~/.mindos/config.json │
|
|
189
|
+
│ (persistent storage) │
|
|
190
|
+
└──────────────────────────────┘
|
|
191
|
+
│
|
|
192
|
+
├─────────► invalidateCache()
|
|
193
|
+
│
|
|
194
|
+
└─────────► File watchers invalidate
|
|
195
|
+
search & tree index
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Search Index Lifecycle
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
┌──────────────────────────────────────────────────────┐
|
|
204
|
+
│ User performs search query │
|
|
205
|
+
│ GET /api/search?q=query │
|
|
206
|
+
└────────────────────┬─────────────────────────────────┘
|
|
207
|
+
│
|
|
208
|
+
▼
|
|
209
|
+
┌────────────────────────┐
|
|
210
|
+
│ Is index built? │
|
|
211
|
+
└────────────┬───────────┘
|
|
212
|
+
│
|
|
213
|
+
┌───────────┴────────────┐
|
|
214
|
+
│ No Yes │
|
|
215
|
+
▼ ▼
|
|
216
|
+
┌────────────┐ ┌──────────────────┐
|
|
217
|
+
│ Try load │ │ Use existing │
|
|
218
|
+
│ from disk │ │ index │
|
|
219
|
+
└────┬───────┘ └────────┬─────────┘
|
|
220
|
+
│ │
|
|
221
|
+
┌────▼──────────┐ │
|
|
222
|
+
│ Stale? │ │
|
|
223
|
+
└──┬───────┬────┘ │
|
|
224
|
+
Yes │ │ No │
|
|
225
|
+
▼ │ │
|
|
226
|
+
┌───┐ │ │
|
|
227
|
+
│ │ Rebuild │
|
|
228
|
+
│ │ │ │
|
|
229
|
+
└───┘ └────┬───────────┘
|
|
230
|
+
│ │
|
|
231
|
+
│ ┌──────▼────────────┐
|
|
232
|
+
│ │ SearchIndex │
|
|
233
|
+
│ │ (in memory) │
|
|
234
|
+
│ └──────┬────────────┘
|
|
235
|
+
│ │
|
|
236
|
+
│ │ query
|
|
237
|
+
│ ▼
|
|
238
|
+
│ ┌──────────────────┐
|
|
239
|
+
│ │ BM25 Scoring │
|
|
240
|
+
│ │ (O(candidates)) │
|
|
241
|
+
│ └──────┬───────────┘
|
|
242
|
+
│ │
|
|
243
|
+
│ ┌──────▼────────────┐
|
|
244
|
+
│ │ Return Results │
|
|
245
|
+
│ └──────┬────────────┘
|
|
246
|
+
│ │
|
|
247
|
+
└──────┬────┘
|
|
248
|
+
│
|
|
249
|
+
┌─────▼─────────┐
|
|
250
|
+
│ Lazy Persist │
|
|
251
|
+
│ (5s debounce) │
|
|
252
|
+
└─────┬─────────┘
|
|
253
|
+
│
|
|
254
|
+
┌─────▼──────────────────┐
|
|
255
|
+
│ ~/.mindos/ │
|
|
256
|
+
│ search-index.json │
|
|
257
|
+
└───────────────────────┘
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Provider Resolution Chain
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
REQUEST: effectiveAiConfig(providerOverride)
|
|
266
|
+
│
|
|
267
|
+
├─► providerOverride specified?
|
|
268
|
+
│ │
|
|
269
|
+
│ ├─► Yes: Use that provider ID
|
|
270
|
+
│ │ Find in providers[]
|
|
271
|
+
│ │
|
|
272
|
+
│ └─► No: Use activeProvider
|
|
273
|
+
│
|
|
274
|
+
▼
|
|
275
|
+
┌─────────────────────────────────┐
|
|
276
|
+
│ Provider found in config.json? │
|
|
277
|
+
└────────┬────────────────────────┘
|
|
278
|
+
│
|
|
279
|
+
┌────┴────┐
|
|
280
|
+
│ Yes │ No
|
|
281
|
+
▼ ▼
|
|
282
|
+
┌────────┐ ┌──────────────────┐
|
|
283
|
+
│ Use │ │ Try env var: │
|
|
284
|
+
│ config │ │ e.g., OPENAI_ │
|
|
285
|
+
│ value │ │ API_KEY │
|
|
286
|
+
└────┬───┘ └────────┬─────────┘
|
|
287
|
+
│ │
|
|
288
|
+
│ ┌────┴────────┐
|
|
289
|
+
│ │ Set? │
|
|
290
|
+
│ │ │
|
|
291
|
+
│ ├─► Yes: Use env var
|
|
292
|
+
│ │
|
|
293
|
+
│ └─► No: Check preset default
|
|
294
|
+
│ (e.g., Ollama has fallback)
|
|
295
|
+
│
|
|
296
|
+
└──────────┬──────────────────┘
|
|
297
|
+
│
|
|
298
|
+
┌──────▼──────────┐
|
|
299
|
+
│ Return: │
|
|
300
|
+
│ {provider, key, │
|
|
301
|
+
│ model, url} │
|
|
302
|
+
└─────────────────┘
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## File Organization for RAG Extension
|
|
308
|
+
|
|
309
|
+
```
|
|
310
|
+
Current Structure:
|
|
311
|
+
lib/
|
|
312
|
+
├── core/
|
|
313
|
+
│ ├── search.ts ← BM25 algorithm
|
|
314
|
+
│ ├── search-index.ts ← Inverted index
|
|
315
|
+
│ └── types.ts ← SearchResult interface
|
|
316
|
+
│
|
|
317
|
+
├── settings.ts
|
|
318
|
+
├── agent/
|
|
319
|
+
│ └── providers.ts
|
|
320
|
+
|
|
321
|
+
app/api/
|
|
322
|
+
└── search/
|
|
323
|
+
└── route.ts
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
Proposed RAG Extension:
|
|
327
|
+
lib/
|
|
328
|
+
├── core/
|
|
329
|
+
│ ├── search.ts (unchanged)
|
|
330
|
+
│ ├── search-index.ts (unchanged)
|
|
331
|
+
│ ├── embedding-index.ts ← NEW: Vector storage
|
|
332
|
+
│ ├── embedding-client.ts ← NEW: Embedding API
|
|
333
|
+
│ └── types.ts (add RagResult type)
|
|
334
|
+
│
|
|
335
|
+
├── rag/ ← NEW module
|
|
336
|
+
│ ├── config.ts ← Config helpers
|
|
337
|
+
│ ├── search.ts ← Unified search API
|
|
338
|
+
│ ├── index.ts ← Exports
|
|
339
|
+
│ └── types.ts ← RagConfig interface
|
|
340
|
+
│
|
|
341
|
+
├── settings.ts (add rag field)
|
|
342
|
+
└── agent/
|
|
343
|
+
├── providers.ts (optional: embedding providers)
|
|
344
|
+
└── embedding-provider.ts ← NEW: Abstraction
|
|
345
|
+
|
|
346
|
+
app/api/
|
|
347
|
+
├── search/
|
|
348
|
+
│ └── route.ts (add ?type=hybrid param)
|
|
349
|
+
│
|
|
350
|
+
├── rag/ ← NEW routes
|
|
351
|
+
│ ├── rebuild/route.ts
|
|
352
|
+
│ ├── search/route.ts
|
|
353
|
+
│ └── status/route.ts
|
|
354
|
+
|
|
355
|
+
components/settings/
|
|
356
|
+
├── RagTab.tsx ← NEW: RAG settings UI
|
|
357
|
+
└── AiTab.tsx (possibly reuse for embedding provider selection)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Settings Tab Wiring Pattern
|
|
363
|
+
|
|
364
|
+
```
|
|
365
|
+
RagTab.tsx (Component)
|
|
366
|
+
│
|
|
367
|
+
├─► GET /api/settings
|
|
368
|
+
│ │
|
|
369
|
+
│ └─► Returns: SettingsData
|
|
370
|
+
│ {
|
|
371
|
+
│ ai: {...current LLM providers...},
|
|
372
|
+
│ rag: {...RAG config...},
|
|
373
|
+
│ envOverrides: {RAG_EMBEDDING_API_KEY: boolean, ...}
|
|
374
|
+
│ }
|
|
375
|
+
│
|
|
376
|
+
├─► User changes setting
|
|
377
|
+
│ │
|
|
378
|
+
│ └─► POST /api/settings
|
|
379
|
+
│ {
|
|
380
|
+
│ rag: {
|
|
381
|
+
│ enabled: true,
|
|
382
|
+
│ embeddingProvider: "p_abc123",
|
|
383
|
+
│ ...
|
|
384
|
+
│ }
|
|
385
|
+
│ }
|
|
386
|
+
│
|
|
387
|
+
└─► API validates + persists
|
|
388
|
+
│
|
|
389
|
+
├─► parseRagConfig() safe parsing
|
|
390
|
+
│
|
|
391
|
+
└─► writeSettings() atomic write
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Key Interfaces (TypeScript)
|
|
397
|
+
|
|
398
|
+
```typescript
|
|
399
|
+
// Settings
|
|
400
|
+
interface ServerSettings {
|
|
401
|
+
ai: AiConfig;
|
|
402
|
+
agent?: AgentConfig;
|
|
403
|
+
rag?: RagConfig; // NEW
|
|
404
|
+
mindRoot: string;
|
|
405
|
+
// ... others
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Provider
|
|
409
|
+
interface Provider {
|
|
410
|
+
id: string; // p_*
|
|
411
|
+
name: string;
|
|
412
|
+
protocol: ProviderId; // "openai" | "anthropic" | ...
|
|
413
|
+
apiKey: string;
|
|
414
|
+
model: string;
|
|
415
|
+
baseUrl: string;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// Search Results (existing)
|
|
419
|
+
interface SearchResult {
|
|
420
|
+
path: string;
|
|
421
|
+
snippet: string;
|
|
422
|
+
score: number;
|
|
423
|
+
occurrences: number;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// RAG Config (NEW)
|
|
427
|
+
interface RagConfig {
|
|
428
|
+
enabled: boolean;
|
|
429
|
+
embeddingProvider: string; // provider ID from ai.providers
|
|
430
|
+
embeddingModel: string; // e.g., "text-embedding-3-small"
|
|
431
|
+
embeddingApiKey?: string; // optional if using env var
|
|
432
|
+
indexType: 'bm25' | 'hybrid' | 'semantic';
|
|
433
|
+
chunkSize: number; // chars per chunk
|
|
434
|
+
chunkOverlap: number; // overlap between chunks
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Hybrid Search Result (NEW)
|
|
438
|
+
interface HybridSearchResult extends SearchResult {
|
|
439
|
+
type: 'bm25' | 'semantic';
|
|
440
|
+
semanticScore?: number;
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## Summary: Data Flow for RAG Query
|
|
447
|
+
|
|
448
|
+
```
|
|
449
|
+
User Query
|
|
450
|
+
│
|
|
451
|
+
▼
|
|
452
|
+
⌘K Search or /api/search?q=...
|
|
453
|
+
│
|
|
454
|
+
├─► BM25 Search
|
|
455
|
+
│ ├─► Tokenize query
|
|
456
|
+
│ ├─► Index lookup → candidates
|
|
457
|
+
│ ├─► BM25 scoring → results
|
|
458
|
+
│ └─► Top 10
|
|
459
|
+
│
|
|
460
|
+
├─► EmbeddingIndex Search (if enabled)
|
|
461
|
+
│ ├─► Get embedding config from settings
|
|
462
|
+
│ ├─► EmbeddingClient.embed(query)
|
|
463
|
+
│ │ └─► Call external API (OpenAI, etc.)
|
|
464
|
+
│ ├─► Vector similarity search
|
|
465
|
+
│ └─► Top 10
|
|
466
|
+
│
|
|
467
|
+
└─► Combine Results (if hybrid)
|
|
468
|
+
├─► Merge scores (normalize + weight)
|
|
469
|
+
├─► Deduplicate
|
|
470
|
+
├─► Sort by combined score
|
|
471
|
+
└─► Return Top N results
|
|
472
|
+
│
|
|
473
|
+
├─► path: string
|
|
474
|
+
├─► snippet: string
|
|
475
|
+
├─► score: number
|
|
476
|
+
├─► type: 'bm25' | 'semantic'
|
|
477
|
+
└─► semanticScore?: number
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
This architecture diagram shows:
|
|
483
|
+
1. How settings flow through the system
|
|
484
|
+
2. How providers are managed and resolved
|
|
485
|
+
3. How search indices are built, cached, and invalidated
|
|
486
|
+
4. How RAG would integrate alongside existing search
|
|
487
|
+
5. The modular, extensible design patterns used throughout
|
|
488
|
+
|