@geminilight/mindos 0.1.0

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 (282) hide show
  1. package/.env.local.example +38 -0
  2. package/LICENSE +21 -0
  3. package/README.md +423 -0
  4. package/README_zh.md +423 -0
  5. package/app/README.md +152 -0
  6. package/app/app/api/ask/route.ts +170 -0
  7. package/app/app/api/ask-sessions/route.ts +90 -0
  8. package/app/app/api/auth/route.ts +37 -0
  9. package/app/app/api/backlinks/route.ts +22 -0
  10. package/app/app/api/bootstrap/route.ts +37 -0
  11. package/app/app/api/extract-pdf/route.ts +82 -0
  12. package/app/app/api/file/route.ts +138 -0
  13. package/app/app/api/files/route.ts +12 -0
  14. package/app/app/api/git/route.ts +42 -0
  15. package/app/app/api/graph/route.ts +113 -0
  16. package/app/app/api/recent-files/route.ts +10 -0
  17. package/app/app/api/search/route.ts +17 -0
  18. package/app/app/api/settings/reset-token/route.ts +21 -0
  19. package/app/app/api/settings/route.ts +123 -0
  20. package/app/app/error.tsx +33 -0
  21. package/app/app/globals.css +368 -0
  22. package/app/app/icon.svg +35 -0
  23. package/app/app/layout.tsx +103 -0
  24. package/app/app/login/page.tsx +120 -0
  25. package/app/app/page.tsx +12 -0
  26. package/app/app/view/[...path]/ViewPageClient.tsx +343 -0
  27. package/app/app/view/[...path]/error.tsx +33 -0
  28. package/app/app/view/[...path]/loading.tsx +15 -0
  29. package/app/app/view/[...path]/page.tsx +93 -0
  30. package/app/components/AskFab.tsx +59 -0
  31. package/app/components/AskModal.tsx +398 -0
  32. package/app/components/Backlinks.tsx +75 -0
  33. package/app/components/Breadcrumb.tsx +31 -0
  34. package/app/components/CsvView.tsx +325 -0
  35. package/app/components/DirView.tsx +138 -0
  36. package/app/components/Editor.tsx +124 -0
  37. package/app/components/EditorWrapper.tsx +17 -0
  38. package/app/components/ErrorBoundary.tsx +53 -0
  39. package/app/components/FileTree.tsx +369 -0
  40. package/app/components/HomeContent.tsx +262 -0
  41. package/app/components/JsonView.tsx +27 -0
  42. package/app/components/MarkdownEditor.tsx +95 -0
  43. package/app/components/MarkdownView.tsx +118 -0
  44. package/app/components/SearchModal.tsx +193 -0
  45. package/app/components/SettingsModal.tsx +237 -0
  46. package/app/components/Sidebar.tsx +136 -0
  47. package/app/components/SidebarLayout.tsx +36 -0
  48. package/app/components/TableOfContents.tsx +150 -0
  49. package/app/components/ThemeToggle.tsx +34 -0
  50. package/app/components/WysiwygEditor.tsx +75 -0
  51. package/app/components/ask/FileChip.tsx +30 -0
  52. package/app/components/ask/MentionPopover.tsx +52 -0
  53. package/app/components/ask/MessageList.tsx +126 -0
  54. package/app/components/ask/SessionHistory.tsx +49 -0
  55. package/app/components/renderers/AgentInspectorRenderer.tsx +277 -0
  56. package/app/components/renderers/BacklinksRenderer.tsx +147 -0
  57. package/app/components/renderers/ConfigRenderer.tsx +236 -0
  58. package/app/components/renderers/CsvRenderer.tsx +77 -0
  59. package/app/components/renderers/DiffRenderer.tsx +310 -0
  60. package/app/components/renderers/GraphRenderer.tsx +428 -0
  61. package/app/components/renderers/SummaryRenderer.tsx +251 -0
  62. package/app/components/renderers/TimelineRenderer.tsx +213 -0
  63. package/app/components/renderers/TodoRenderer.tsx +474 -0
  64. package/app/components/renderers/WorkflowRenderer.tsx +404 -0
  65. package/app/components/renderers/csv/BoardView.tsx +146 -0
  66. package/app/components/renderers/csv/ConfigPanel.tsx +117 -0
  67. package/app/components/renderers/csv/EditableCell.tsx +43 -0
  68. package/app/components/renderers/csv/GalleryView.tsx +40 -0
  69. package/app/components/renderers/csv/TableView.tsx +164 -0
  70. package/app/components/renderers/csv/types.ts +87 -0
  71. package/app/components/settings/AiTab.tsx +111 -0
  72. package/app/components/settings/AppearanceTab.tsx +101 -0
  73. package/app/components/settings/KnowledgeTab.tsx +157 -0
  74. package/app/components/settings/PluginsTab.tsx +82 -0
  75. package/app/components/settings/Primitives.tsx +60 -0
  76. package/app/components/settings/ShortcutsTab.tsx +22 -0
  77. package/app/components/settings/types.ts +41 -0
  78. package/app/components/ui/button.tsx +60 -0
  79. package/app/components/ui/dialog.tsx +157 -0
  80. package/app/components/ui/input.tsx +20 -0
  81. package/app/components/ui/scroll-area.tsx +55 -0
  82. package/app/components/ui/toggle.tsx +44 -0
  83. package/app/components/ui/tooltip.tsx +66 -0
  84. package/app/components.json +25 -0
  85. package/app/data/pages/home-dark.png +0 -0
  86. package/app/data/pages/home-mobile-crop.png +0 -0
  87. package/app/data/pages/home-mobile.png +0 -0
  88. package/app/data/pages/home.png +0 -0
  89. package/app/data/pages/view-dir.png +0 -0
  90. package/app/data/pages/view-file-bot.png +0 -0
  91. package/app/data/pages/view-file-dark-crop.png +0 -0
  92. package/app/data/pages/view-file-dark.png +0 -0
  93. package/app/data/pages/view-file-mobile.png +0 -0
  94. package/app/data/pages/view-file-sm.png +0 -0
  95. package/app/data/pages/view-file-top.png +0 -0
  96. package/app/data/pages/view-file.png +0 -0
  97. package/app/eslint.config.mjs +18 -0
  98. package/app/hooks/useAskSession.ts +181 -0
  99. package/app/hooks/useFileUpload.ts +126 -0
  100. package/app/hooks/useMention.ts +65 -0
  101. package/app/lib/LocaleContext.tsx +40 -0
  102. package/app/lib/actions.ts +40 -0
  103. package/app/lib/agent/index.ts +3 -0
  104. package/app/lib/agent/model.ts +18 -0
  105. package/app/lib/agent/prompt.ts +32 -0
  106. package/app/lib/agent/tools.ts +151 -0
  107. package/app/lib/api.ts +55 -0
  108. package/app/lib/core/backlinks.ts +40 -0
  109. package/app/lib/core/csv.ts +28 -0
  110. package/app/lib/core/fs-ops.ts +118 -0
  111. package/app/lib/core/git.ts +50 -0
  112. package/app/lib/core/index.ts +58 -0
  113. package/app/lib/core/lines.ts +89 -0
  114. package/app/lib/core/search.ts +79 -0
  115. package/app/lib/core/security.ts +43 -0
  116. package/app/lib/core/tree.ts +113 -0
  117. package/app/lib/core/types.ts +40 -0
  118. package/app/lib/fs.ts +467 -0
  119. package/app/lib/i18n.ts +300 -0
  120. package/app/lib/jwt.ts +58 -0
  121. package/app/lib/renderers/index.ts +79 -0
  122. package/app/lib/renderers/registry.ts +70 -0
  123. package/app/lib/settings.ts +150 -0
  124. package/app/lib/types.ts +32 -0
  125. package/app/lib/utils.ts +34 -0
  126. package/app/next-env.d.ts +6 -0
  127. package/app/next.config.ts +10 -0
  128. package/app/package-lock.json +15306 -0
  129. package/app/package.json +71 -0
  130. package/app/postcss.config.mjs +7 -0
  131. package/app/proxy.ts +64 -0
  132. package/app/public/file.svg +1 -0
  133. package/app/public/globe.svg +1 -0
  134. package/app/public/landing/index.html +353 -0
  135. package/app/public/landing/style.css +216 -0
  136. package/app/public/logo-square.svg +37 -0
  137. package/app/public/logo.svg +37 -0
  138. package/app/public/next.svg +1 -0
  139. package/app/public/vercel.svg +1 -0
  140. package/app/public/window.svg +1 -0
  141. package/app/scripts/extract-pdf.cjs +56 -0
  142. package/app/tsconfig.json +34 -0
  143. package/app/vitest.config.ts +14 -0
  144. package/assets/demo-flow-zh.html +622 -0
  145. package/assets/images/demo-flow-dark.png +0 -0
  146. package/assets/images/demo-flow-light.png +0 -0
  147. package/assets/images/demo-flow-zh-dark.png +0 -0
  148. package/assets/images/demo-flow-zh-light.png +0 -0
  149. package/assets/images/gui-sync-cv.png +0 -0
  150. package/assets/logo-square.svg +37 -0
  151. package/bin/cli.js +894 -0
  152. package/mcp/README.md +113 -0
  153. package/mcp/package-lock.json +1717 -0
  154. package/mcp/package.json +18 -0
  155. package/mcp/src/index.ts +494 -0
  156. package/mcp/tsconfig.json +13 -0
  157. package/package.json +49 -0
  158. package/scripts/setup.js +675 -0
  159. package/scripts/upgrade-prompt.md +147 -0
  160. package/skills/mindos/SKILL.md +319 -0
  161. package/skills/mindos-zh/SKILL.md +318 -0
  162. package/templates/README.md +31 -0
  163. package/templates/empty/CHANGELOG.md +9 -0
  164. package/templates/empty/CONFIG.json +197 -0
  165. package/templates/empty/CONFIG.md +73 -0
  166. package/templates/empty/INSTRUCTION.md +177 -0
  167. package/templates/empty/README.md +27 -0
  168. package/templates/en/CHANGELOG.md +9 -0
  169. package/templates/en/CONFIG.json +197 -0
  170. package/templates/en/CONFIG.md +73 -0
  171. package/templates/en/INSTRUCTION.md +177 -0
  172. package/templates/en/README.md +27 -0
  173. package/templates/en/TODO.md +13 -0
  174. package/templates/en//360/237/221/244 Profile/INSTRUCTION.md" +21 -0
  175. package/templates/en//360/237/221/244 Profile/README.md" +15 -0
  176. package/templates/en//360/237/221/244 Profile//342/232/231/357/270/217 Preferences.md" +21 -0
  177. package/templates/en//360/237/221/244 Profile//360/237/216/257 Focus.md" +31 -0
  178. package/templates/en//360/237/221/244 Profile//360/237/221/244 Identity.md" +22 -0
  179. package/templates/en//360/237/223/232 Resources/INSTRUCTION.md" +29 -0
  180. package/templates/en//360/237/223/232 Resources/README.md" +21 -0
  181. package/templates/en//360/237/223/232 Resources//360/237/247/276 AI Influencers.csv" +1 -0
  182. package/templates/en//360/237/223/232 Resources//360/237/247/276 AI Products.csv" +1 -0
  183. package/templates/en//360/237/223/232 Resources//360/237/247/276 AI Scholars.csv" +1 -0
  184. package/templates/en//360/237/223/232 Resources//360/237/247/276 AI Tools.csv" +1 -0
  185. package/templates/en//360/237/223/235 Notes/INSTRUCTION.md" +31 -0
  186. package/templates/en//360/237/223/235 Notes/Ideas/README.md" +8 -0
  187. package/templates/en//360/237/223/235 Notes/Ideas//360/237/247/252_example_product_idea.md" +16 -0
  188. package/templates/en//360/237/223/235 Notes/Inbox/README.md" +8 -0
  189. package/templates/en//360/237/223/235 Notes/Inbox//360/237/247/252_example_quick_capture.md" +14 -0
  190. package/templates/en//360/237/223/235 Notes/Meetings/README.md" +8 -0
  191. package/templates/en//360/237/223/235 Notes/Meetings//360/237/247/252_example_meeting_note.md" +17 -0
  192. package/templates/en//360/237/223/235 Notes/README.md" +24 -0
  193. package/templates/en//360/237/223/235 Notes/Waiting/README.md" +8 -0
  194. package/templates/en//360/237/223/235 Notes/Waiting//360/237/247/252_example_blocked_item.md" +16 -0
  195. package/templates/en//360/237/224/204 Workflows/Configurations/README.md" +3 -0
  196. package/templates/en//360/237/224/204 Workflows/Configurations//360/237/247/252_example_config_update_sop.md" +14 -0
  197. package/templates/en//360/237/224/204 Workflows/INSTRUCTION.md" +21 -0
  198. package/templates/en//360/237/224/204 Workflows/Information/README.md" +16 -0
  199. package/templates/en//360/237/224/204 Workflows/Information//360/237/247/252_example_info_capture_sop.md" +13 -0
  200. package/templates/en//360/237/224/204 Workflows/Media/README.md" +16 -0
  201. package/templates/en//360/237/224/204 Workflows/Media//360/237/247/252_example_content_publish_sop.md" +13 -0
  202. package/templates/en//360/237/224/204 Workflows/README.md" +22 -0
  203. package/templates/en//360/237/224/204 Workflows/Research/README.md" +16 -0
  204. package/templates/en//360/237/224/204 Workflows/Research//360/237/247/252_example_lit_review_sop.md" +16 -0
  205. package/templates/en//360/237/224/204 Workflows/Startup/README.md" +3 -0
  206. package/templates/en//360/237/224/204 Workflows/Startup//360/237/247/252_example_weekly_founder_ops.md" +22 -0
  207. package/templates/en//360/237/224/227 Connections/Classmates/README.md" +11 -0
  208. package/templates/en//360/237/224/227 Connections/Classmates//360/237/247/252_example_leo_chen.md" +16 -0
  209. package/templates/en//360/237/224/227 Connections/Colleagues/README.md" +11 -0
  210. package/templates/en//360/237/224/227 Connections/Colleagues//360/237/247/252_example_ethan_zhao.md" +16 -0
  211. package/templates/en//360/237/224/227 Connections/Connections Overview.csv" +5 -0
  212. package/templates/en//360/237/224/227 Connections/Family/README.md" +11 -0
  213. package/templates/en//360/237/224/227 Connections/Family//360/237/247/252_example_james_wang.md" +16 -0
  214. package/templates/en//360/237/224/227 Connections/Friends/README.md" +11 -0
  215. package/templates/en//360/237/224/227 Connections/Friends//360/237/247/252_example_lily_lin.md" +16 -0
  216. package/templates/en//360/237/224/227 Connections/INSTRUCTION.md" +56 -0
  217. package/templates/en//360/237/224/227 Connections/README.md" +20 -0
  218. package/templates/en//360/237/232/200 Projects/Archived/README.md" +9 -0
  219. package/templates/en//360/237/232/200 Projects/Archived//360/237/247/252_example_archived_project_note.md" +14 -0
  220. package/templates/en//360/237/232/200 Projects/INSTRUCTION.md" +29 -0
  221. package/templates/en//360/237/232/200 Projects/Products/README.md" +16 -0
  222. package/templates/en//360/237/232/200 Projects/Products//360/237/247/252_example_product_project_brief.md" +20 -0
  223. package/templates/en//360/237/232/200 Projects/README.md" +21 -0
  224. package/templates/en//360/237/232/200 Projects/Research/README.md" +16 -0
  225. package/templates/en//360/237/232/200 Projects/Research//360/237/247/252_example_research_project_brief.md" +16 -0
  226. package/templates/template-generation-skill.md +79 -0
  227. package/templates/zh/CHANGELOG.md +9 -0
  228. package/templates/zh/CONFIG.json +197 -0
  229. package/templates/zh/CONFIG.md +66 -0
  230. package/templates/zh/INSTRUCTION.md +177 -0
  231. package/templates/zh/README.md +27 -0
  232. package/templates/zh/TODO.md +13 -0
  233. package/templates/zh//360/237/221/244 /347/224/273/345/203/217/INSTRUCTION.md" +28 -0
  234. package/templates/zh//360/237/221/244 /347/224/273/345/203/217/README.md" +20 -0
  235. package/templates/zh//360/237/221/244 /347/224/273/345/203/217//342/232/231/357/270/217 Preferences.md" +21 -0
  236. package/templates/zh//360/237/221/244 /347/224/273/345/203/217//360/237/216/257 Focus.md" +31 -0
  237. package/templates/zh//360/237/221/244 /347/224/273/345/203/217//360/237/221/244 Identity.md" +22 -0
  238. package/templates/zh//360/237/223/232 /350/265/204/346/272/220/INSTRUCTION.md" +29 -0
  239. package/templates/zh//360/237/223/232 /350/265/204/346/272/220/README.md" +21 -0
  240. package/templates/zh//360/237/223/232 /350/265/204/346/272/220//360/237/247/276 AI Inferencers.csv" +1 -0
  241. package/templates/zh//360/237/223/232 /350/265/204/346/272/220//360/237/247/276 AI /344/272/247/345/223/201.csv" +1 -0
  242. package/templates/zh//360/237/223/232 /350/265/204/346/272/220//360/237/247/276 AI /345/255/246/350/200/205/346/270/205/345/215/225.csv" +1 -0
  243. package/templates/zh//360/237/223/232 /350/265/204/346/272/220//360/237/247/276 AI /345/267/245/345/205/267/346/270/205/345/215/225.csv" +1 -0
  244. package/templates/zh//360/237/223/235 /347/254/224/350/256/260/INSTRUCTION.md" +31 -0
  245. package/templates/zh//360/237/223/235 /347/254/224/350/256/260/README.md" +24 -0
  246. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//344/274/232/350/256/256/README.md" +8 -0
  247. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//344/274/232/350/256/256//360/237/247/252_example_/344/274/232/350/256/256/347/272/252/350/246/201.md" +17 -0
  248. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//345/276/205/345/217/215/351/246/210/README.md" +8 -0
  249. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//345/276/205/345/217/215/351/246/210//360/237/247/252_example_/345/276/205/345/217/215/351/246/210/344/272/213/351/241/271.md" +16 -0
  250. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//346/203/263/346/263/225/README.md" +8 -0
  251. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//346/203/263/346/263/225//360/237/247/252_example_/344/272/247/345/223/201/346/203/263/346/263/225.md" +16 -0
  252. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//346/224/266/344/273/266/347/256/261/README.md" +8 -0
  253. package/templates/zh//360/237/223/235 /347/254/224/350/256/260//346/224/266/344/273/266/347/256/261//360/237/247/252_example_/344/270/264/346/227/266/351/200/237/350/256/260.md" +13 -0
  254. package/templates/zh//360/237/224/204 /346/265/201/347/250/213/INSTRUCTION.md" +29 -0
  255. package/templates/zh//360/237/224/204 /346/265/201/347/250/213/README.md" +21 -0
  256. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//344/277/241/346/201/257/README.md" +16 -0
  257. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//344/277/241/346/201/257//360/237/247/252_example_/344/277/241/346/201/257/351/207/207/351/233/206/346/265/201/347/250/213.md" +13 -0
  258. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//345/252/222/344/275/223/README.md" +16 -0
  259. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//345/252/222/344/275/223//360/237/247/252_example_/345/206/205/345/256/271/345/217/221/345/270/203/346/265/201/347/250/213.md" +13 -0
  260. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//347/247/221/347/240/224/README.md" +16 -0
  261. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//347/247/221/347/240/224//360/237/247/252_example_/346/226/207/347/214/256/347/273/274/350/277/260/346/265/201/347/250/213.md" +16 -0
  262. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//351/205/215/347/275/256/README.md" +3 -0
  263. package/templates/zh//360/237/224/204 /346/265/201/347/250/213//351/205/215/347/275/256//360/237/247/252_example_/351/205/215/347/275/256/346/233/264/346/226/260/346/265/201/347/250/213.md" +26 -0
  264. package/templates/zh//360/237/224/227 /345/205/263/347/263/273/INSTRUCTION.md" +62 -0
  265. package/templates/zh//360/237/224/227 /345/205/263/347/263/273/README.md" +20 -0
  266. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/205/263/347/263/273/346/200/273/350/247/210.csv" +5 -0
  267. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/220/214/344/272/213/README.md" +11 -0
  268. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/220/214/344/272/213//360/237/247/252_example_/345/220/214/344/272/213/350/265/265/344/270/200/350/276/260.md" +16 -0
  269. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/220/214/345/255/246/README.md" +11 -0
  270. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/220/214/345/255/246//360/237/247/252_example_/345/220/214/345/255/246/351/231/210/347/253/213/346/254/247.md" +16 -0
  271. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/256/266/344/272/272/README.md" +11 -0
  272. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//345/256/266/344/272/272//360/237/247/252_example_/345/256/266/344/272/272/347/216/213/345/273/272/345/233/275.md" +16 -0
  273. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//346/234/213/345/217/213/README.md" +11 -0
  274. package/templates/zh//360/237/224/227 /345/205/263/347/263/273//346/234/213/345/217/213//360/237/247/252_example_/346/234/213/345/217/213/346/236/227/345/260/217/344/270/275.md" +16 -0
  275. package/templates/zh//360/237/232/200 /351/241/271/347/233/256/INSTRUCTION.md" +31 -0
  276. package/templates/zh//360/237/232/200 /351/241/271/347/233/256/README.md" +21 -0
  277. package/templates/zh//360/237/232/200 /351/241/271/347/233/256//344/272/247/345/223/201/README.md" +16 -0
  278. package/templates/zh//360/237/232/200 /351/241/271/347/233/256//344/272/247/345/223/201//360/237/247/252_example_/344/272/247/345/223/201/351/241/271/347/233/256/347/256/200/346/212/245.md" +20 -0
  279. package/templates/zh//360/237/232/200 /351/241/271/347/233/256//345/267/262/345/275/222/346/241/243/README.md" +9 -0
  280. package/templates/zh//360/237/232/200 /351/241/271/347/233/256//345/267/262/345/275/222/346/241/243//360/237/247/252_example_/345/275/222/346/241/243/351/241/271/347/233/256/350/256/260/345/275/225.md" +15 -0
  281. package/templates/zh//360/237/232/200 /351/241/271/347/233/256//347/247/221/347/240/224/README.md" +16 -0
  282. package/templates/zh//360/237/232/200 /351/241/271/347/233/256//347/247/221/347/240/224//360/237/247/252_example_/347/247/221/347/240/224/351/241/271/347/233/256/347/256/200/346/212/245.md" +16 -0
@@ -0,0 +1,38 @@
1
+ # MindOS Environment Variables Reference
2
+ #
3
+ # These variables are normally managed automatically via `mindos init`,
4
+ # which writes them to ~/.mindos/config.json and injects them at startup.
5
+ #
6
+ # You can override any variable by setting it in your shell environment
7
+ # before running `mindos dev` / `mindos start`. Shell env vars take precedence
8
+ # over ~/.mindos/config.json.
9
+ #
10
+ # Manual setup (advanced): copy this file to .env.local and fill in the values.
11
+ # This is only needed if you run `next dev` directly instead of `mindos dev`.
12
+
13
+ # Knowledge base root directory (absolute path)
14
+ MIND_ROOT=/path/to/my-mind
15
+
16
+ # Web app port (default: 3000)
17
+ MINDOS_WEB_PORT=3000
18
+
19
+ # AI Provider: "anthropic" (default) or "openai"
20
+ AI_PROVIDER=anthropic
21
+
22
+ # Anthropic
23
+ ANTHROPIC_API_KEY=sk-ant-...
24
+ ANTHROPIC_MODEL=claude-sonnet-4-6
25
+
26
+ # OpenAI (if AI_PROVIDER=openai)
27
+ # OPENAI_API_KEY=sk-...
28
+ # OPENAI_MODEL=gpt-5.4
29
+ # OPENAI_BASE_URL= # only needed for proxies or OpenAI-compatible endpoints
30
+
31
+ # Optional: protect /api/* and MCP HTTP /mcp with bearer token auth.
32
+ # When set, all requests must include "Authorization: Bearer <token>".
33
+ # Strongly recommended when the app is exposed to a network.
34
+ # AUTH_TOKEN=your-secret-token
35
+
36
+ # Optional: protect the web UI with a password (separate from AUTH_TOKEN).
37
+ # When set, visiting the app in a browser requires entering this password first.
38
+ # WEB_PASSWORD=your-ui-password
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 GeminiLight
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,423 @@
1
+ <p align="center">
2
+ <img src="assets/logo-square.svg" alt="MindOS" width="100" />
3
+ </p>
4
+
5
+ <h1 align="center">MindOS</h1>
6
+
7
+ <p align="center">
8
+ <strong>Human Thinks Here, Agent Acts There.</strong>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="README.md">English</a> | <a href="README_zh.md">ไธญๆ–‡</a>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="https://tianfuwang.tech/MindOS"><img src="https://img.shields.io/badge/Website-MindOS-0ea5e9.svg?style=for-the-badge" alt="Website"></a>
17
+ <a href="https://deepwiki.com/GeminiLight/MindOS"><img src="https://img.shields.io/badge/DeepWiki-MindOS-blue.svg?style=for-the-badge" alt="DeepWiki"></a>
18
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="MIT License"></a>
19
+ </p>
20
+
21
+ MindOS is a **Human-AI Collaborative Mind System**โ€”a local-first knowledge base that ensures your notes, workflows, and personal context are both human-readable and directly executable by AI Agents. **Globally sync your mind for all agents: transparent, controllable, and evolving symbiotically.**
22
+
23
+ ---
24
+
25
+ <p align="center">
26
+ <picture>
27
+ <source media="(prefers-color-scheme: dark)" srcset="assets/images/demo-flow-dark.png" />
28
+ <source media="(prefers-color-scheme: light)" srcset="assets/images/demo-flow-light.png" />
29
+ <img src="assets/images/demo-flow-light.png" alt="MindOS: From Idea to Execution to Review" width="960" />
30
+ </picture>
31
+ </p>
32
+
33
+ > [!IMPORTANT]
34
+ > **โญ One-click install:** Send this to your Agent (Claude Code, Cursor, etc.) to set up everything automatically:
35
+ > ```
36
+ > Help me install MindOS from https://github.com/GeminiLight/MindOS with MCP and Skills. Use English template.
37
+ > ```
38
+ >
39
+ > **โœจ Try it now:** After installation, give these a try:
40
+ > ```
41
+ > Read my MindOS knowledge base, see what's inside, then help me write my self-introduction into Profile.
42
+ > ```
43
+ > ```
44
+ > Help me distill the experience from this conversation into MindOS as a reusable SOP.
45
+ > ```
46
+ > ```
47
+ > Help me execute the XXX SOP from MindOS.
48
+ > ```
49
+
50
+ ## ๐Ÿง  Core Value: Human-AI Shared Mind
51
+
52
+ **1. Global Sync โ€” Break Mind Silos**
53
+
54
+ Traditional notes are scattered across tools and APIs, so agents miss your real context when it matters. MindOS turns your local knowledge into one MCP-ready source, so every agent can sync your Profile, SOPs, and live working memory.
55
+
56
+ **2. Transparent and Controllable โ€” Eliminate Memory Black Boxes**
57
+
58
+ Most assistant memory lives in black boxes, leaving humans unable to inspect or correct how decisions are made. MindOS writes retrieval and execution traces into local plain text, so you can audit, intervene, and improve continuously.
59
+
60
+ **3. Symbiotic Evolution โ€” Dynamic Instruction Flow**
61
+
62
+ Static documents are hard to synchronize and weak as execution systems in real human-agent collaboration. MindOS makes notes prompt-native and reference-linked, so daily writing naturally becomes executable workflows that evolve with you.
63
+
64
+ > **Foundation:** Local-first by default - all data stays in local plain text for privacy, ownership, and speed.
65
+
66
+ ## โœจ Features
67
+
68
+ ### For Humans
69
+
70
+ - **GUI Collaboration Workbench**: use one command entry to browse, edit, and search efficiently (`โŒ˜K` / `โŒ˜/`).
71
+ - **Built-in Agent Assistant**: converse in context while edits are captured into managed knowledge.
72
+ - **Plugin Views**: use scenario-focused views like TODO, Kanban, and Timeline.
73
+
74
+ ### For Agents
75
+
76
+ - **MCP Server + Skills**: connect any compatible agent to read, write, search, and run workflows.
77
+ - **Structured Templates**: start quickly with Profile, Workflows, and Configurations scaffolds.
78
+ - **Experience Auto-Distillation**: automatically distill daily work into reusable, executable SOP experience.
79
+
80
+ ### Infrastructure
81
+
82
+ - **Reference Sync**: keep cross-file status and context aligned via links/backlinks.
83
+ - **Knowledge Graph**: visualize relationships and dependencies across notes.
84
+ - **Git Time Machine**: track every edit, audit history, and roll back safely.
85
+
86
+ **Coming Soon:**
87
+
88
+ - [ ] ACP (Agent Communication Protocol): connect external Agents (e.g., Claude Code, Cursor) and turn the knowledge base into a multi-Agent collaboration hub
89
+ - [ ] Deep RAG integration: retrieval-augmented generation grounded in your knowledge base for more accurate, context-aware AI responses
90
+ - [ ] Backlinks View: display all files that reference the current file, helping you understand how a note fits into the knowledge network
91
+ - [ ] Agent Inspector: render Agent operation logs as a filterable timeline to audit every tool call in detail
92
+
93
+ ---
94
+
95
+ ## ๐Ÿš€ Getting Started
96
+
97
+ > [!IMPORTANT]
98
+ > **Quick Start with Agent:** Paste this prompt into any MCP-capable Agent (Claude Code, Cursor, etc.) to install automatically, then skip to [Step 4](#4-inject-your-personal-mind-with-mindos-agent):
99
+ > ```
100
+ > Help me install MindOS from https://github.com/GeminiLight/MindOS with MCP and Skills. Use English template.
101
+ > ```
102
+
103
+ > Already have a knowledge base? Skip to [Step 5](#5-make-any-agent-ready-mcp--skills) to configure MCP + Skills.
104
+
105
+ ### 1. Install
106
+
107
+ **Option A: npm (recommended)**
108
+
109
+ ```bash
110
+ npm install -g @geminilight/mindos@latest
111
+ ```
112
+
113
+ **Option B: Clone from source**
114
+
115
+ ```bash
116
+ git clone https://github.com/GeminiLight/MindOS
117
+ cd MindOS
118
+ npm install
119
+ npm link # registers the `mindos` command globally
120
+ ```
121
+
122
+ ### 2. Interactive Setup
123
+
124
+ ```bash
125
+ mindos onboard --install-daemon # setup + install & start as background OS service
126
+ ```
127
+
128
+ The setup wizard will guide you through:
129
+ 1. Knowledge base path โ†’ default `~/.mindos/my-mind`
130
+ 2. Choose template language (en / zh)
131
+ 3. Optional Auth token to protect your API
132
+ 4. Configure AI Provider (Anthropic / OpenAI) + API Key โ€” or choose **skip** to configure later via `mindos config set`
133
+ 5. Config saved to `~/.mindos/config.json` automatically
134
+
135
+ > [!TIP]
136
+ > **For Agents:** Before running setup, if the user has not provided LLM configuration, ask them:
137
+ > 1. AI Provider โ€” `anthropic` or `openai` (compatible)?
138
+ > 2. API Key โ€” the key for the chosen provider
139
+ > 3. Custom Base URL? โ€” only needed for proxies or OpenAI-compatible endpoints; skip if using official API
140
+ > 4. Model ID โ€” or use the default
141
+ >
142
+ > Or skip the wizard and edit `~/.mindos/config.json` manually (see Config Reference below).
143
+
144
+ <details>
145
+ <summary>Config Reference (~/.mindos/config.json)</summary>
146
+
147
+ ```json
148
+ {
149
+ "mindRoot": "~/.mindos/my-mind",
150
+ "port": 3000,
151
+ "mcpPort": 8787,
152
+ "authToken": "",
153
+ "webPassword": "",
154
+ "ai": {
155
+ "provider": "anthropic",
156
+ "providers": {
157
+ "anthropic": { "apiKey": "sk-ant-...", "model": "claude-sonnet-4-6" },
158
+ "openai": { "apiKey": "sk-...", "model": "gpt-5.4", "baseUrl": "" }
159
+ }
160
+ }
161
+ }
162
+ ```
163
+
164
+ | Field | Default | Description |
165
+ | :--- | :--- | :--- |
166
+ | `mindRoot` | `~/.mindos/my-mind` | **Required**. Absolute path to the knowledge base root. |
167
+ | `port` | `3000` | Optional. Web app port. |
168
+ | `mcpPort` | `8787` | Optional. MCP server port. |
169
+ | `authToken` | โ€” | Optional. Protects App `/api/*` and MCP `/mcp` with bearer token auth. For Agent / MCP clients. Recommended when exposed to a network. |
170
+ | `webPassword` | โ€” | Optional. Protects the web UI with a login page. For browser access. Independent from `authToken`. |
171
+ | `ai.provider` | `anthropic` | Active provider: `anthropic` or `openai`. |
172
+ | `ai.providers.anthropic.apiKey` | โ€” | Anthropic API key. |
173
+ | `ai.providers.anthropic.model` | `claude-sonnet-4-6` | Anthropic model ID. |
174
+ | `ai.providers.openai.apiKey` | โ€” | OpenAI API key. |
175
+ | `ai.providers.openai.model` | `gpt-5.4` | OpenAI model ID. |
176
+ | `ai.providers.openai.baseUrl` | โ€” | Optional. Custom endpoint for proxy or OpenAI-compatible APIs. |
177
+
178
+ Multiple providers can be configured simultaneously โ€” switch between them by changing `ai.provider`. Shell env vars (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc.) take precedence over config file values.
179
+
180
+ </details>
181
+
182
+ > [!NOTE]
183
+ > If you want the MindOS GUI to be reachable from other devices, make sure the port is open in firewall/security-group settings and bound to an accessible host/network interface.
184
+
185
+ ### 3. Run
186
+
187
+ ```bash
188
+ mindos start # start app + MCP server (production, auto-rebuilds when a new version is detected)
189
+ ```
190
+
191
+ On startup, MindOS prints your Web UI URL, MCP config snippet, and auth token โ€” ready to copy into your Agent.
192
+
193
+ > [!TIP]
194
+ > **Upgrading?** Run `mindos update` โ€” it installs the latest version and triggers a rebuild automatically on next start.
195
+
196
+ > [!TIP]
197
+ > If the port is already in use, set a different port during `mindos onboard` or update `~/.mindos/config.json`:
198
+ > ```bash
199
+ > MINDOS_WEB_PORT=3002 mindos
200
+ > ```
201
+
202
+ ### 4. Inject Your Personal Mind with MindOS Agent
203
+
204
+ 1. Open the built-in MindOS Agent chat panel in the GUI.
205
+ 2. Upload your resume or any personal/project material.
206
+ 3. Send this prompt: `Help me sync this information into my MindOS knowledge base.`
207
+
208
+ <p align="center">
209
+ <img src="assets/images/gui-sync-cv.png" alt="Sync CV Example" width="800" />
210
+ </p>
211
+
212
+ ### 5. Make Any Agent Ready (MCP + Skills)
213
+
214
+ #### 5.1 Configure MindOS MCP
215
+
216
+ > [!TIP]
217
+ > **For Agents:** Register MindOS MCP as global (user-level) config by default, so all projects share the same knowledge base.
218
+ > Each Agent stores MCP config in a different file โ€” see the **MCP Config Path** column in the [Supported Agents](#-supported-agents) table below for exact paths.
219
+
220
+ Register the MindOS MCP Server in your Agent client:
221
+
222
+ The MCP server starts automatically when you run `mindos start` or `mindos dev`. The MCP URL, auth token, and a ready-to-paste config snippet are printed on every startup.
223
+
224
+ > The MCP port defaults to `8787`. To use a different port, set `mcpPort` in `~/.mindos/config.json` via `mindos onboard`.
225
+
226
+ **Option A: Local (same machine)**
227
+
228
+ Via stdio โ€” no server process needed:
229
+
230
+ ```json
231
+ {
232
+ "mcpServers": {
233
+ "mindos": {
234
+ "type": "stdio",
235
+ "command": "mindos",
236
+ "args": ["mcp"],
237
+ "env": { "MCP_TRANSPORT": "stdio" }
238
+ }
239
+ }
240
+ }
241
+ ```
242
+
243
+ Or via URL:
244
+
245
+ ```json
246
+ {
247
+ "mcpServers": {
248
+ "mindos": {
249
+ "url": "http://localhost:8787/mcp",
250
+ "headers": { "Authorization": "Bearer your-token" }
251
+ }
252
+ }
253
+ }
254
+ ```
255
+
256
+ **Option B: Remote URL (another device)**
257
+
258
+ > [!NOTE]
259
+ > Ensure port `8787` is open in your firewall/security-group so remote clients can reach the server.
260
+
261
+ ```json
262
+ {
263
+ "mcpServers": {
264
+ "mindos": {
265
+ "url": "http://<server-ip>:8787/mcp",
266
+ "headers": { "Authorization": "Bearer your-token" }
267
+ }
268
+ }
269
+ }
270
+ ```
271
+
272
+ #### 5.2 Install MindOS Skills
273
+
274
+ | Skill | Description |
275
+ |-------|-------------|
276
+ | `mindos` | Knowledge base operation guide (English) โ€” read/write notes, search, manage SOPs, maintain Profiles |
277
+ | `mindos-zh` | Knowledge base operation guide (Chinese) โ€” same capabilities, Chinese interface |
278
+
279
+ Install one skill only (choose based on your preferred language):
280
+
281
+ ```bash
282
+ # English
283
+ npx skills add https://github.com/GeminiLight/MindOS --skill mindos -g -y
284
+
285
+ # Chinese (optional)
286
+ npx skills add https://github.com/GeminiLight/MindOS --skill mindos-zh -g -y
287
+ ```
288
+
289
+ MCP = connection capability, Skills = workflow capability. Enabling both gives the complete MindOS agent experience.
290
+
291
+ #### 5.3 Common Pitfalls
292
+
293
+ - Only MCP, no Skills: tools are callable, but best-practice workflows are missing.
294
+ - Only Skills, no MCP: workflow guidance exists, but the Agent cannot operate your local knowledge base.
295
+ - `MIND_ROOT` is not an absolute path: MCP tool calls will fail.
296
+ - No `authToken` set: your API and MCP server are exposed on the network without protection.
297
+ - No `webPassword` set: anyone who can reach your server can access the web UI.
298
+
299
+ ## โš™๏ธ How It Works
300
+
301
+ A fleeting idea becomes shared intelligence through three interlocking loops:
302
+
303
+ ```mermaid
304
+ graph LR
305
+ H["๐Ÿ‘ค Human<br/><sub>thinks ยท reviews ยท evolves</sub>"]
306
+ M[("๐Ÿ“š MindOS")]
307
+ A["๐Ÿค– Agent<br/><sub>executes ยท retrospects ยท extracts SOPs</sub>"]
308
+ EXT["๐ŸŒ All Agents"]
309
+
310
+ H -- "ideas & feedback" --> M
311
+ M -- "context & insights" --> H
312
+ M -- "instructions & context" --> A
313
+ A -- "results & SOPs" --> M
314
+ M -. "via MCP" .-> EXT
315
+
316
+ style H fill:#f59e0b,stroke:#d97706,color:#fff,stroke-width:2px
317
+ style M fill:#10b981,stroke:#059669,color:#fff,stroke-width:2px
318
+ style A fill:#6366f1,stroke:#4f46e5,color:#fff,stroke-width:2px
319
+ style EXT fill:#64748b,stroke:#475569,color:#fff,stroke-dasharray:5 5
320
+ ```
321
+
322
+ > **Both sides evolve.** Humans gain new insights from accumulated knowledge; Agents extract SOPs and get smarter. MindOS sits at the center โ€” the shared second brain that grows with every interaction.
323
+
324
+ **Collaboration Loop (Human + Multi-Agent)**
325
+
326
+ 1. Human reviews and updates notes/SOPs in the MindOS GUI (single source of truth).
327
+ 2. Other Agent clients (OpenClaw, Claude Code, Cursor, etc.) connect through MCP and read the same memory/context.
328
+ 3. With Skills enabled, those Agents execute workflows and SOP tasks in a guided way.
329
+ 4. Execution results are written back to MindOS so humans can audit and refine continuously.
330
+
331
+ **Who is this for?**
332
+
333
+ - **AI Independent Developer** โ€” Store personal SOPs, tech stack preferences, and project context in MindOS. Any Agent instantly inherits your work habits.
334
+ - **Knowledge Worker** โ€” Manage research materials with bi-directional links. Your AI assistant answers questions grounded in your full context, not generic knowledge.
335
+ - **Team Collaboration** โ€” Share a MindOS knowledge base across team members as a single source of truth. Humans and Agents read from the same playbook, keeping everyone aligned.
336
+ - **Automated Agent Operations** โ€” Write standard workflows as Prompt-Driven documents. Agents execute directly, humans audit the results.
337
+
338
+ ---
339
+
340
+ ## ๐Ÿค Supported Agents
341
+
342
+ | Agent | MCP | Skills | MCP Config Path |
343
+ |:------|:---:|:------:|:----------------|
344
+ | MindOS Agent | โœ… | โœ… | Built-in (no config needed) |
345
+ | OpenClaw | โœ… | โœ… | `~/.openclaw/openclaw.json` or `~/.openclaw/mcp.json` |
346
+ | Claude Desktop | โœ… | โœ… | macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` |
347
+ | Claude Code | โœ… | โœ… | `~/.claude.json` (global) or `.mcp.json` (project) |
348
+ | CodeBuddy | โœ… | โœ… | `~/.claude-internal/.claude.json` (global) |
349
+ | Cursor | โœ… | โœ… | `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project) |
350
+ | Windsurf | โœ… | โœ… | `~/.codeium/windsurf/mcp_config.json` |
351
+ | Cline | โœ… | โœ… | macOS: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Linux: `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` |
352
+ | Trae | โœ… | โœ… | `~/.trae/mcp.json` (global) or `.trae/mcp.json` (project) |
353
+ | Gemini CLI | โœ… | โœ… | `~/.gemini/settings.json` (global) or `.gemini/settings.json` (project) |
354
+ | GitHub Copilot | โœ… | โœ… | `.vscode/mcp.json` (project) or VS Code User `settings.json` (global) |
355
+ | iFlow | โœ… | โœ… | iFlow platform MCP configuration panel |
356
+
357
+ ---
358
+
359
+ ## ๐Ÿ“ Project Structure
360
+
361
+ ```bash
362
+ MindOS/
363
+ โ”œโ”€โ”€ app/ # Next.js 16 Frontend โ€” Browse, edit, and interact with AI
364
+ โ”œโ”€โ”€ mcp/ # MCP Server โ€” HTTP adapter that maps tools to App API
365
+ โ”œโ”€โ”€ skills/ # MindOS Skills (`mindos`, `mindos-zh`) โ€” Workflow guides for Agents
366
+ โ”œโ”€โ”€ templates/ # Preset templates (`en/`, `zh/`, `empty/`) โ€” copied to knowledge base on onboard
367
+ โ”œโ”€โ”€ bin/ # CLI entry point (`mindos onboard`, `mindos start`, `mindos dev`, `mindos token`)
368
+ โ”œโ”€โ”€ scripts/ # Setup wizard and helper scripts
369
+ โ””โ”€โ”€ README.md
370
+
371
+ ~/.mindos/ # User data directory (outside project, never committed)
372
+ โ”œโ”€โ”€ config.json # All configuration (AI keys, port, auth token, knowledge base path)
373
+ โ””โ”€โ”€ my-mind/ # Your private knowledge base (default path, customizable on onboard)
374
+ ```
375
+
376
+ ---
377
+
378
+ ## โŒจ๏ธ CLI Commands
379
+
380
+ | Command | Description |
381
+ | :--- | :--- |
382
+ | `mindos onboard` | Interactive setup (config, template selection) |
383
+ | `mindos onboard --install-daemon` | Setup + install & start as background OS service |
384
+ | `mindos start` | Start app + MCP server (foreground, production mode) |
385
+ | `mindos start --daemon` | Install + start as a background OS service (survives terminal close, auto-restarts on crash) |
386
+ | `mindos dev` | Start app + MCP server (dev mode, hot reload) |
387
+ | `mindos dev --turbopack` | Dev mode with Turbopack (faster HMR) |
388
+ | `mindos stop` | Stop running MindOS processes |
389
+ | `mindos restart` | Stop then start again |
390
+ | `mindos build` | Manually build for production |
391
+ | `mindos mcp` | Start MCP server only |
392
+ | `mindos token` | Show current auth token and MCP config snippet |
393
+ | `mindos gateway install` | Install background service (systemd on Linux, LaunchAgent on macOS) |
394
+ | `mindos gateway uninstall` | Remove background service |
395
+ | `mindos gateway start` | Start the background service |
396
+ | `mindos gateway stop` | Stop the background service |
397
+ | `mindos gateway status` | Show background service status |
398
+ | `mindos gateway logs` | Tail background service logs |
399
+ | `mindos doctor` | Health check (config, ports, build, daemon status) |
400
+ | `mindos update` | Update MindOS to the latest version |
401
+ | `mindos logs` | Tail service logs (`~/.mindos/mindos.log`) |
402
+ | `mindos config show` | Print current config (API keys masked) |
403
+ | `mindos config validate` | Validate config file |
404
+ | `mindos config set <key> <val>` | Update a single config field |
405
+ | `mindos` | Start using the mode saved in `~/.mindos/config.json` |
406
+
407
+ ---
408
+
409
+ ## โŒจ๏ธ Keyboard Shortcuts
410
+
411
+ | Shortcut | Function |
412
+ | :--- | :--- |
413
+ | `โŒ˜ + K` | Global Search |
414
+ | `โŒ˜ + /` | Call AI Assistant / Sidebar |
415
+ | `E` | Press `E` in View mode to quickly enter Edit mode |
416
+ | `โŒ˜ + S` | Save current edit |
417
+ | `Esc` | Cancel edit / Close dialog |
418
+
419
+ ---
420
+
421
+ ## ๐Ÿ“„ License
422
+
423
+ MIT ยฉ GeminiLight