ocean-brain 0.8.2 → 0.10.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 (232) hide show
  1. package/README.md +2 -0
  2. package/dist/mcp.js +47 -75
  3. package/package.json +3 -2
  4. package/server/client/dist/assets/{ArrowRight.es-g2YZTklZ.js → ArrowRight.es-Bm-ZXpEC.js} +1 -1
  5. package/server/client/dist/assets/Calendar-BsNs3NzO.js +25 -0
  6. package/server/client/dist/assets/{Callout-B_IPSF_5.js → Callout-CviyPHKO.js} +1 -1
  7. package/server/client/dist/assets/{Copy.es-CNxe4ujr.js → Copy.es-BPreRnP9.js} +1 -1
  8. package/server/client/dist/assets/{Graph-D9GeO71k.js → Graph-vXQQ0a-Q.js} +1 -1
  9. package/server/client/dist/assets/Graph-yPE3ljW0.js +46 -0
  10. package/server/client/dist/assets/{Image.es-DnON8cv2.js → Image.es-DnR3qc_c.js} +1 -1
  11. package/server/client/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  12. package/server/client/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  13. package/server/client/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  14. package/server/client/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  15. package/server/client/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  16. package/server/client/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  17. package/server/client/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  18. package/server/client/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  19. package/server/client/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  20. package/server/client/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  21. package/server/client/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  22. package/server/client/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  23. package/server/client/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  24. package/server/client/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  25. package/server/client/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  26. package/server/client/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  27. package/server/client/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  28. package/server/client/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  29. package/server/client/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  30. package/server/client/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  31. package/server/client/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  32. package/server/client/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  33. package/server/client/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  34. package/server/client/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  35. package/server/client/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  36. package/server/client/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  37. package/server/client/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  38. package/server/client/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  39. package/server/client/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  40. package/server/client/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  41. package/server/client/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  42. package/server/client/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  43. package/server/client/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  44. package/server/client/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  45. package/server/client/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  46. package/server/client/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  47. package/server/client/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  48. package/server/client/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  49. package/server/client/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  50. package/server/client/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  51. package/server/client/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  52. package/server/client/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  53. package/server/client/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  54. package/server/client/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  55. package/server/client/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  56. package/server/client/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  57. package/server/client/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  58. package/server/client/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  59. package/server/client/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  60. package/server/client/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  61. package/server/client/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  62. package/server/client/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  63. package/server/client/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  64. package/server/client/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  65. package/server/client/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  66. package/server/client/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  67. package/server/client/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  68. package/server/client/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  69. package/server/client/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  70. package/server/client/dist/assets/Note-CmreVzvQ.js +25 -0
  71. package/server/client/dist/assets/{NotePropertiesPanel-2DgXEM4B.js → NotePropertiesPanel-DXYgE8h2.js} +2 -2
  72. package/server/client/dist/assets/PencilLine.es-B9V6u64t.js +1 -0
  73. package/server/client/dist/assets/{Plus.es-CQ8wn2is.js → Plus.es-CRRp2u5J.js} +1 -1
  74. package/server/client/dist/assets/Reminders-BOtfNeYD.js +1 -0
  75. package/server/client/dist/assets/Search-C-FB3pKf.js +1 -0
  76. package/server/client/dist/assets/SurfaceCard-GMt5xM7v.js +1 -0
  77. package/server/client/dist/assets/Tag-lBxDRE77.js +1 -0
  78. package/server/client/dist/assets/TagNotes-Bgorp_rC.js +1 -0
  79. package/server/client/dist/assets/{Trash.es-0aPpA-3S.js → Trash.es-svHOb5LN.js} +1 -1
  80. package/server/client/dist/assets/ViewNotes-C7d10VFf.js +1 -0
  81. package/server/client/dist/assets/ViewSectionDialog-Bhw-ILop.js +102 -0
  82. package/server/client/dist/assets/Views-C7V3saUo.js +1 -0
  83. package/server/client/dist/assets/abnfDiagram-VRR7QNED-CWlV5dXw.js +1 -0
  84. package/server/client/dist/assets/app-DQBV36r_.js +50 -0
  85. package/server/client/dist/assets/app-ZgwR5t_I.css +1 -0
  86. package/server/client/dist/assets/arc-BV-n6RUX.js +1 -0
  87. package/server/client/dist/assets/architectureDiagram-ZJ3FMSHR-CekzMXdu.js +36 -0
  88. package/server/client/dist/assets/blockDiagram-677ZJIJ3-B49yHoxq.js +132 -0
  89. package/server/client/dist/assets/c4Diagram-LMCZKHZV-0AfB9NBC.js +10 -0
  90. package/server/client/dist/assets/channel-CigOulR-.js +1 -0
  91. package/server/client/dist/assets/chunk-2Q5K7J3B-DaPQAU1q.js +1 -0
  92. package/server/client/dist/assets/chunk-32BRIVSS-CfL3kZAg.js +1 -0
  93. package/server/client/dist/assets/chunk-5VM5RSS4-DeOwWPE_.js +15 -0
  94. package/server/client/dist/assets/chunk-EX3LRPZG-C3W1oc9y.js +231 -0
  95. package/server/client/dist/assets/chunk-JWPE2WC7-_Oqh79OY.js +1 -0
  96. package/server/client/dist/assets/chunk-MOJQB5TN-DDKNNzI6.js +88 -0
  97. package/server/client/dist/assets/chunk-RYQCIY6F-DCHah7CC.js +1 -0
  98. package/server/client/dist/assets/chunk-V7JOEXUC-uUOIzgxj.js +206 -0
  99. package/server/client/dist/assets/chunk-VR4S4FIN-DDVw2WPs.js +1 -0
  100. package/server/client/dist/assets/chunk-XXDRQBXY-Coo4UFm2.js +1 -0
  101. package/server/client/dist/assets/classDiagram-OUVF2IWQ-D13ISIOW.js +1 -0
  102. package/server/client/dist/assets/classDiagram-v2-EOCWNBFH-D13ISIOW.js +1 -0
  103. package/server/client/dist/assets/colors-Cc3OSVma.js +1 -0
  104. package/server/client/dist/assets/cose-bilkent-JH36ORCC-C3pHmHpD.js +1 -0
  105. package/server/client/dist/assets/cynefin-VYW2F7L2-DU_G4Atc.js +166 -0
  106. package/server/client/dist/assets/cynefinDiagram-TSTJHNR4-DZ6iiJFo.js +62 -0
  107. package/server/client/dist/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  108. package/server/client/dist/assets/dagre-VKFMJZFB-DNELbhwC.js +4 -0
  109. package/server/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  110. package/server/client/dist/assets/diagram-FQU43EPY-CMEvZJ61.js +3 -0
  111. package/server/client/dist/assets/diagram-G47NLZAW-BYDtf6j9.js +24 -0
  112. package/server/client/dist/assets/diagram-NH7WQ7WH-CmXfcCQA.js +24 -0
  113. package/server/client/dist/assets/diagram-OA4YK3LP-BflTKJxU.js +30 -0
  114. package/server/client/dist/assets/diagram-WEI45ONY-KW3fKqna.js +41 -0
  115. package/server/client/dist/assets/ebnfDiagram-CCIWWBDH-CbyhY5Nj.js +1 -0
  116. package/server/client/dist/assets/erDiagram-Q63AITRT-CC2eZV8g.js +85 -0
  117. package/server/client/dist/assets/{floating-ui.react-dom-wWLZ1CdM.js → floating-ui.react-dom-BWTnA00G.js} +1 -1
  118. package/server/client/dist/assets/flowDiagram-23GEKE2U-unplo7Qm.js +156 -0
  119. package/server/client/dist/assets/ganttDiagram-NO4QXBWP-BcBK5HcZ.js +292 -0
  120. package/server/client/dist/assets/gitGraphDiagram-IHSO6WYX-DgVbbb5k.js +106 -0
  121. package/server/client/dist/assets/graph-C5DFNLrC.js +1 -0
  122. package/server/client/dist/assets/image-delete-confirmation-D7xrODQV.js +1 -0
  123. package/server/client/dist/assets/image.api-QmHYjp3z.js +17 -0
  124. package/server/client/dist/assets/index-CaF9d-zG.js +1 -0
  125. package/server/client/dist/assets/infoDiagram-FWYZ7A6U-N_D9RdfG.js +2 -0
  126. package/server/client/dist/assets/init-Gi6I4Gst.js +1 -0
  127. package/server/client/dist/assets/isObject-U9U2HXiq.js +1 -0
  128. package/server/client/dist/assets/ishikawaDiagram-FXEZZL3T-BBKrzmB2.js +70 -0
  129. package/server/client/dist/assets/journeyDiagram-5HDEW3XC-NdCxLmQB.js +139 -0
  130. package/server/client/dist/assets/kanban-definition-HUTT4EX6-Ck7t4-tt.js +89 -0
  131. package/server/client/dist/assets/katex-DywYRkvg.css +1 -0
  132. package/server/client/dist/assets/katex-HP8lGamR.js +257 -0
  133. package/server/client/dist/assets/katex-x288kqHd.js +257 -0
  134. package/server/client/dist/assets/layout-Cz0MDlGi.js +1 -0
  135. package/server/client/dist/assets/linear-D6yRgDLq.js +1 -0
  136. package/server/client/dist/assets/manage-image-DCDF8AM9.js +1 -0
  137. package/server/client/dist/assets/manage-image-detail-e0ViRAj-.js +1 -0
  138. package/server/client/dist/assets/map-Mm1V-_Na.js +1 -0
  139. package/server/client/dist/assets/mcp-admin-adapter-D39G3udJ.js +1 -0
  140. package/server/client/dist/assets/{mcp-CT_9IV2c.js → mcp-uFZkdhCi.js} +4 -4
  141. package/server/client/dist/assets/mermaid.core-B14ZAmWA.js +308 -0
  142. package/server/client/dist/assets/min-tv6RD-6E.js +1 -0
  143. package/server/client/dist/assets/mindmap-definition-LN4V7U3C-BTUqSdcP.js +96 -0
  144. package/server/client/dist/assets/{note-core-Buwzyxi7.js → note-core-DUTqUh5N.js} +2 -2
  145. package/server/client/dist/assets/{note-runtime-CPDVOFEo.js → note-runtime-zN5ddTba.js} +1 -1
  146. package/server/client/dist/assets/{note-ui-CHI-tzj-.js → note-ui-CxK8ymUc.js} +1 -1
  147. package/server/client/dist/assets/{note.api-D_00ZzJC.js → note.api-BQovzEzd.js} +6 -6
  148. package/server/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  149. package/server/client/dist/assets/pegDiagram-2B236MQR-Cjcu3mVz.js +1 -0
  150. package/server/client/dist/assets/pieDiagram-ENE6RG2P-BxI_c22Z.js +39 -0
  151. package/server/client/dist/assets/{placeholder-DbdGiYGL.js → placeholder-D3b8lZGE.js} +4 -4
  152. package/server/client/dist/assets/properties-M-yWq1D7.js +1 -0
  153. package/server/client/dist/assets/quadrantDiagram-ABIIQ3AL-DGm0a-yR.js +7 -0
  154. package/server/client/dist/assets/railroadDiagram-RFXS5EU6-DmCDu89O.js +1 -0
  155. package/server/client/dist/assets/requirementDiagram-TGXJPOKE-CBpUt7Ig.js +84 -0
  156. package/server/client/dist/assets/route-preload.js +2 -2
  157. package/server/client/dist/assets/sankeyDiagram-HTMAVEWB-BjGnDZlp.js +40 -0
  158. package/server/client/dist/assets/search-DFnzZKLd.js +1 -0
  159. package/server/client/dist/assets/sequenceDiagram-DBY2YBRQ-B7rpCfS6.js +162 -0
  160. package/server/client/dist/assets/sizeCapture-X5ZJPWSS-CUJhD0uW.js +1 -0
  161. package/server/client/dist/assets/stateDiagram-2N3HPSRC-Y9-3XqRX.js +1 -0
  162. package/server/client/dist/assets/stateDiagram-v2-6OUMAXLB-DbHXhT02.js +1 -0
  163. package/server/client/dist/assets/swimlanes-5IMT3BWC-Cs1NO9ng.js +2 -0
  164. package/server/client/dist/assets/swimlanesDiagram-G3AALYLV-DQnrq2ZC.js +8 -0
  165. package/server/client/dist/assets/{tag.api-CX0SE06J.js → tag.api-DUfjr8bg.js} +3 -3
  166. package/server/client/dist/assets/time-CfAYZipR.js +9 -0
  167. package/server/client/dist/assets/timeline-definition-FHXFAJF6-8fqD4WNL.js +120 -0
  168. package/server/client/dist/assets/toNumber-DE3J3kMD.js +1 -0
  169. package/server/client/dist/assets/transform-BUB79_za.js +1 -0
  170. package/server/client/dist/assets/trash-CClKfP1x.js +1 -0
  171. package/server/client/dist/assets/url-9nrbQs7Z.js +1 -0
  172. package/server/client/dist/assets/{useReminderMutate-CLK1tHvT.js → useReminderMutate--omDLmBV.js} +4 -4
  173. package/server/client/dist/assets/vennDiagram-L72KCM5P-BPqKkd5a.js +34 -0
  174. package/server/client/dist/assets/wardleyDiagram-EHGQE667-Cq11kU2M.js +78 -0
  175. package/server/client/dist/assets/xychartDiagram-FW5EYKEG-DJ6UzFj-.js +7 -0
  176. package/server/client/dist/index.html +7 -7
  177. package/server/dist/features/image/services/delete.js +25 -1
  178. package/server/dist/features/note/graphql/note.mutation.resolver.js +38 -12
  179. package/server/dist/features/note/graphql/note.type-defs.js +1 -1
  180. package/server/dist/features/note/http/mcp.js +1 -60
  181. package/server/dist/features/note/services/authoring.js +2 -70
  182. package/server/dist/features/note/services/markdown-patch.js +80 -8
  183. package/server/dist/features/note/services/properties.js +21 -1
  184. package/server/dist/features/note/services/property-restore.js +26 -0
  185. package/server/dist/features/note/services/snapshot.js +79 -59
  186. package/server/dist/features/note/services/trash.js +16 -31
  187. package/server/dist/features/search/embedding-api-key-store.js +57 -0
  188. package/server/dist/features/search/embedding-client.js +179 -0
  189. package/server/dist/features/search/graphql/index.js +6 -0
  190. package/server/dist/features/search/graphql/resolver.js +20 -0
  191. package/server/dist/features/search/graphql/type-defs.js +30 -0
  192. package/server/dist/features/search/http/handlers.js +108 -0
  193. package/server/dist/features/search/hybrid-ranking.js +55 -0
  194. package/server/dist/features/search/hybrid-search.js +174 -0
  195. package/server/dist/features/search/note-change.js +16 -0
  196. package/server/dist/features/search/note-chunking.js +75 -0
  197. package/server/dist/features/search/search-config.js +150 -0
  198. package/server/dist/features/search/search-manager.js +431 -0
  199. package/server/dist/features/search/semantic-indexer.js +138 -0
  200. package/server/dist/features/search/sqlite-vector-index.js +636 -0
  201. package/server/dist/features/search/url-normalization.js +10 -0
  202. package/server/dist/features/tag/services/organization.js +3 -0
  203. package/server/dist/features/view/services/workspace.js +1 -1
  204. package/server/dist/main.js +2 -0
  205. package/server/dist/modules/blocknote.js +4 -5
  206. package/server/dist/paths.js +7 -2
  207. package/server/dist/routes/api.js +37 -0
  208. package/server/dist/routes/mcp.js +0 -5
  209. package/server/dist/schema/index.js +3 -0
  210. package/server/client/dist/assets/Calendar-BP6HTuSn.js +0 -25
  211. package/server/client/dist/assets/Graph-Xha3fwhp.js +0 -46
  212. package/server/client/dist/assets/Image-BLEjLUqd.js +0 -1
  213. package/server/client/dist/assets/Note-DjrCYtat.js +0 -24
  214. package/server/client/dist/assets/Reminders-B4l3KdlK.js +0 -1
  215. package/server/client/dist/assets/Search-BN5sf7bE.js +0 -1
  216. package/server/client/dist/assets/SurfaceCard-BZm73nyS.js +0 -1
  217. package/server/client/dist/assets/Tag-oSnmViVp.js +0 -1
  218. package/server/client/dist/assets/TagNotes-BDTCcJcL.js +0 -1
  219. package/server/client/dist/assets/ViewNotes-CiZtGJNE.js +0 -1
  220. package/server/client/dist/assets/ViewSectionDialog-Ctl_694Y.js +0 -102
  221. package/server/client/dist/assets/Views-D-zlatYD.js +0 -1
  222. package/server/client/dist/assets/app-DmqIOMWF.css +0 -1
  223. package/server/client/dist/assets/app-cTRcKMGc.js +0 -26
  224. package/server/client/dist/assets/image.api-CVuuvTBk.js +0 -17
  225. package/server/client/dist/assets/index-DKJChPr4.js +0 -1
  226. package/server/client/dist/assets/manage-image-BZjaxp-f.js +0 -1
  227. package/server/client/dist/assets/manage-image-detail-DPv0FQ2m.js +0 -1
  228. package/server/client/dist/assets/mcp-admin-adapter-xAuyZc_M.js +0 -1
  229. package/server/client/dist/assets/properties-D447wsWk.js +0 -1
  230. package/server/client/dist/assets/time-B3pt8vt4.js +0 -9
  231. package/server/client/dist/assets/trash-8sH7EZgc.js +0 -1
  232. package/server/client/dist/assets/url-BSnWpmJx.js +0 -1
@@ -180,7 +180,7 @@ function restoreTagPlaceholdersInMarkdown(markdown, placeholderToTag) {
180
180
  function preprocessMarkdownExplicitTags(markdown) {
181
181
  const placeholderToTag = /* @__PURE__ */ new Map();
182
182
  let nextPlaceholderIndex = 0;
183
- const preprocessedMarkdown = markdown.replace(/\[([@#][^\s[\]]+)\]/g, (_match, tagToken) => {
183
+ const preprocessedMarkdown = markdown.replace(/\[(@[^\s[\]]+)\]/g, (_match, tagToken) => {
184
184
  const placeholder = createTagPlaceholder(nextPlaceholderIndex++);
185
185
  placeholderToTag.set(placeholder, tagToken);
186
186
  return placeholder;
@@ -872,14 +872,13 @@ async function restoreCustomInlineContent(blocks, deps, placeholderToTag, placeh
872
872
  const noteCache = /* @__PURE__ */ new Map();
873
873
  const noteByIdCache = /* @__PURE__ */ new Map();
874
874
  const getTag = (token) => {
875
- const normalizedToken = token.startsWith("#") ? `@${token.slice(1)}` : token;
876
- let existing = tagCache.get(normalizedToken);
875
+ let existing = tagCache.get(token);
877
876
  if (!existing) {
878
- existing = deps.ensureTag(normalizedToken.slice(1)).then((result) => ({
877
+ existing = deps.ensureTag(token.slice(1)).then((result) => ({
879
878
  id: "tag" in result ? result.tag.id : result.id,
880
879
  tag: "tag" in result ? result.tag.name : result.name
881
880
  }));
882
- tagCache.set(normalizedToken, existing);
881
+ tagCache.set(token, existing);
883
882
  }
884
883
  return existing;
885
884
  };
@@ -2,12 +2,17 @@ import path from "path";
2
2
  import { fileURLToPath } from "url";
3
3
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
4
4
  const PACKAGE_ROOT = process.env.OCEAN_BRAIN_PACKAGE_ROOT || path.resolve(__dirname, "..");
5
- const IMAGE_DIR = process.env.OCEAN_BRAIN_IMAGE_DIR || path.resolve(process.env.OCEAN_BRAIN_DATA_DIR || ".", "assets/images");
5
+ const DATA_DIR = process.env.OCEAN_BRAIN_DATA_DIR || ".";
6
+ const IMAGE_DIR = process.env.OCEAN_BRAIN_IMAGE_DIR || path.resolve(DATA_DIR, "assets/images");
7
+ const SEARCH_INDEX_PATH = process.env.OCEAN_BRAIN_SEARCH_INDEX_PATH || path.resolve(DATA_DIR, "search.sqlite3");
8
+ const EMBEDDING_API_KEY_PATH = path.resolve(DATA_DIR, "embedding-api-key");
6
9
  const paths = {
7
10
  packageRoot: path.resolve(PACKAGE_ROOT),
8
11
  clientDist: path.resolve(PACKAGE_ROOT, "client/dist"),
9
12
  clientIndex: path.resolve(PACKAGE_ROOT, "client/dist/index.html"),
10
- imageDir: path.resolve(IMAGE_DIR)
13
+ imageDir: path.resolve(IMAGE_DIR),
14
+ searchIndex: path.resolve(SEARCH_INDEX_PATH),
15
+ embeddingApiKey: path.resolve(EMBEDDING_API_KEY_PATH)
11
16
  };
12
17
  export {
13
18
  paths
@@ -7,6 +7,13 @@ import {
7
7
  createMcpAdminSetEnabledHandler,
8
8
  createMcpAdminStatusHandler
9
9
  } from "../features/mcp-admin/http/handlers.js";
10
+ import {
11
+ createSearchAdminListModelsHandler,
12
+ createSearchAdminReindexHandler,
13
+ createSearchAdminSaveConfigHandler,
14
+ createSearchAdminStatusHandler,
15
+ createSearchAdminTestConnectionHandler
16
+ } from "../features/search/http/handlers.js";
10
17
  import { createCsrfProtection, requireSessionForWrite } from "../modules/auth-guard.js";
11
18
  import { createAuthAttemptRateLimit, createSessionAccessRateLimit } from "../modules/rate-limit.js";
12
19
  import { createServerEventsHandler } from "../modules/server-events-handler.js";
@@ -46,6 +53,36 @@ const createApiRouter = (authConfig, mcpAdminService) => {
46
53
  requireSession,
47
54
  csrfProtection,
48
55
  useAsync(createMcpAdminRevokeTokenHandler(mcpAdminService))
56
+ ).get(
57
+ "/search-admin/status",
58
+ sessionAccessRateLimit,
59
+ requireSession,
60
+ csrfProtection,
61
+ useAsync(createSearchAdminStatusHandler())
62
+ ).post(
63
+ "/search-admin/config",
64
+ sessionAccessRateLimit,
65
+ requireSession,
66
+ csrfProtection,
67
+ useAsync(createSearchAdminSaveConfigHandler())
68
+ ).post(
69
+ "/search-admin/models",
70
+ sessionAccessRateLimit,
71
+ requireSession,
72
+ csrfProtection,
73
+ useAsync(createSearchAdminListModelsHandler())
74
+ ).post(
75
+ "/search-admin/test",
76
+ sessionAccessRateLimit,
77
+ requireSession,
78
+ csrfProtection,
79
+ useAsync(createSearchAdminTestConnectionHandler())
80
+ ).post(
81
+ "/search-admin/reindex",
82
+ sessionAccessRateLimit,
83
+ requireSession,
84
+ csrfProtection,
85
+ useAsync(createSearchAdminReindexHandler())
49
86
  ).post("/image", sessionAccessRateLimit, requireSession, csrfProtection, useAsync(createUploadImageHandler())).get("/events", sessionAccessRateLimit, requireSession, csrfProtection, createServerEventsHandler());
50
87
  };
51
88
  export {
@@ -6,7 +6,6 @@ import {
6
6
  createMcpNoteWriteBaselineHandler,
7
7
  createMcpPatchNoteMarkdownHandler,
8
8
  createMcpReplaceNoteMarkdownHandler,
9
- createMcpUpdateNoteHandler,
10
9
  createMcpUpdateNoteMetadataHandler
11
10
  } from "../features/note/http/mcp.js";
12
11
  import { createMcpCreateTagHandler } from "../features/tag/http/mcp.js";
@@ -16,10 +15,6 @@ const createMcpRouter = (authConfig, mcpAdminService) => Router().post(
16
15
  "/notes/create",
17
16
  createMcpAuthMiddleware(authConfig, mcpAdminService),
18
17
  useAsync(createMcpCreateNoteHandler())
19
- ).post(
20
- "/notes/update",
21
- createMcpAuthMiddleware(authConfig, mcpAdminService),
22
- useAsync(createMcpUpdateNoteHandler())
23
18
  ).post(
24
19
  "/notes/baseline",
25
20
  createMcpAuthMiddleware(authConfig, mcpAdminService),
@@ -4,6 +4,7 @@ import { imageResolvers, imageTypeDefs } from "../features/image/graphql/index.j
4
4
  import { noteResolvers, noteTypeDefs } from "../features/note/graphql/index.js";
5
5
  import { placeholderResolvers, placeholderTypeDefs } from "../features/placeholder/graphql/index.js";
6
6
  import { reminderResolvers, reminderTypeDefs } from "../features/reminder/graphql/index.js";
7
+ import { searchResolvers, searchTypeDefs } from "../features/search/graphql/index.js";
7
8
  import { tagResolvers, tagTypeDefs } from "../features/tag/graphql/index.js";
8
9
  import { viewResolvers, viewTypeDefs } from "../features/view/graphql/index.js";
9
10
  const schema = makeExecutableSchema({
@@ -14,6 +15,7 @@ const schema = makeExecutableSchema({
14
15
  tagTypeDefs,
15
16
  placeholderTypeDefs,
16
17
  reminderTypeDefs,
18
+ searchTypeDefs,
17
19
  viewTypeDefs
18
20
  ],
19
21
  resolvers: [
@@ -23,6 +25,7 @@ const schema = makeExecutableSchema({
23
25
  tagResolvers,
24
26
  placeholderResolvers,
25
27
  reminderResolvers,
28
+ searchResolvers,
26
29
  viewResolvers
27
30
  ]
28
31
  });
@@ -1,25 +0,0 @@
1
- import{j as e,r as d}from"./floating-ui.react-dom-wWLZ1CdM.js";import{Z as b,ad as te,a5 as F,at as S,_ as se,a0 as H,au as O,av as ae,af as re,T as q,a6 as V,aj as ne,ac as oe,ai as ie}from"./note.api-D_00ZzJC.js";import{i as f,g as le,d as z}from"./time-B3pt8vt4.js";import{N as ce,C as de}from"./url-BSnWpmJx.js";import{s as ue,a as me}from"./app-cTRcKMGc.js";import{C as he}from"./Callout-B_IPSF_5.js";import"./preload-helper-BXl3LOEh.js";import"./Graph-D9GeO71k.js";const ge=({day:a,cellClassName:t,dayNumberClassName:s,isCurrentMonth:i,items:o,overflowCount:l,onOpenOverflow:m})=>e.jsxs("div",{className:`min-h-[196px] rounded-[16px] border p-2.5 ${t}`.trim(),children:[e.jsx("div",{className:"mb-2.5 flex justify-end",children:e.jsx(b,{as:"span",variant:"label",className:`flex h-7 w-7 items-center justify-center rounded-[10px] ${s}`.trim(),children:a})}),i&&o.length>0?e.jsxs("div",{className:"flex flex-col gap-1.5",children:[o,l>0?e.jsxs("button",{type:"button",onClick:m,className:"focus-ring-soft w-full rounded-[10px] border border-dashed border-border-subtle/70 bg-subtle/70 py-1 text-center text-micro font-semibold text-fg-tertiary outline-none transition-colors hover:border-border-secondary/70 hover:bg-hover-subtle hover:text-fg-secondary",children:["+",l," more"]}):null]}):null]}),B=({params:a,toneClassName:t="",header:s,title:i,meta:o,titleClassName:l=""})=>e.jsx(te,{to:ce,params:a,className:"focus-ring-soft group block rounded-[8px] outline-none",children:e.jsxs("div",{className:F("flex items-start gap-1.5 rounded-[8px] px-1.5 py-1 transition-colors group-hover:bg-hover-subtle",t),children:[s?e.jsx("span",{className:"mt-[2px] flex h-4 w-4 shrink-0 items-center justify-center text-fg-tertiary",children:s}):e.jsx("span",{"aria-hidden":"true",className:"mt-[6px] h-1.5 w-1.5 shrink-0 rounded-full bg-fg-placeholder"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx(b,{as:"div",variant:"label",weight:"medium",tone:"secondary",className:F("line-clamp-1",l),children:i}),o?e.jsx(b,{as:"div",variant:"micro",weight:"medium",tone:"tertiary",className:"mt-0.5",children:o}):null]})]})}),pe=({note:a,type:t})=>e.jsx(B,{params:{id:a.id},header:e.jsx(ue,{size:12}),title:a.title,meta:f(Number(t==="create"?a.createdAt:a.updatedAt)).format("HH:mm")}),xe=({reminder:a})=>e.jsx(B,{params:{id:String(a.note?.id??a.noteId)},header:e.jsx(le,{size:12}),title:a.content||a.note?.title||"No title",titleClassName:a.completed?"line-through":"",meta:f(Number(a.reminderDate)).format("HH:mm")}),A=3,Q=(a,t)=>a.map(s=>s.type==="note"?e.jsx(pe,{note:s.item,type:t},`note-${s.item.id}`):e.jsx(xe,{reminder:s.item},`reminder-${s.item.id}`)),ye=({year:a,month:t,day:s,isCurrentMonth:i,isSunday:o,isToday:l,isPast:m,notes:h,reminders:g,type:N})=>{const[D,v]=d.useState(!1),x=d.useMemo(()=>{const r=h.map(u=>({type:"note",item:u})),c=g.map(u=>({type:"reminder",item:u}));return m?[...r,...c]:[...c,...r]},[m,h,g]),M=x.length>A,w=d.useMemo(()=>Q(x.slice(0,A),N),[x,N]),$=d.useMemo(()=>Q(x,N),[x,N]),k=d.useCallback(()=>v(!0),[]),C=d.useCallback(()=>v(!1),[]),E=()=>i?l?"border-border-secondary/70 bg-[color:color-mix(in_srgb,var(--surface)_88%,var(--accent-soft-primary)_12%)]":"bg-surface border-border-subtle":"bg-muted/18 border-border-subtle/70",I=()=>l?"bg-cta text-fg-on-filled font-semibold":i?o?"text-fg-weekend font-bold":"text-fg-secondary font-bold":"text-fg-disabled opacity-55";return e.jsxs(e.Fragment,{children:[e.jsx(ge,{day:s,cellClassName:E(),dayNumberClassName:I(),isCurrentMonth:i,items:w,overflowCount:M?x.length-A:0,onOpenOverflow:k}),M&&e.jsxs(S,{isOpen:D,onClose:C,variant:"inspect",children:[e.jsx(S.Header,{title:`${a}/${String(t).padStart(2,"0")}/${String(s).padStart(2,"0")}`,onClose:C}),e.jsxs(S.Body,{children:[e.jsxs(S.Description,{className:"sr-only",children:["View all notes and reminders scheduled for day ",s,"."]}),e.jsx("div",{className:"flex max-h-[60vh] flex-col gap-2 overflow-y-auto",children:$})]})]})]})},fe=d.memo(ye),be=["January","February","March","April","May","June","July","August","September","October","November","December"],je=({month:a,year:t,type:s,onPrevMonth:i,onNextMonth:o,onToday:l,onTypeChange:m})=>e.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex flex-wrap items-end gap-x-2.5 gap-y-1",children:[e.jsx(b,{as:"h1",variant:"display",weight:"bold",tracking:"tighter",className:"text-2xl leading-none sm:text-[2.15rem]",children:be[a-1]}),e.jsx(b,{as:"span",variant:"subheading",weight:"medium",tone:"secondary",tracking:"tight",className:"pb-0.5",children:t})]}),e.jsx(b,{as:"p",variant:"meta",weight:"medium",tone:"secondary",children:"Track note activity and reminders across the month"})]}),e.jsx("div",{className:"flex lg:justify-end",children:e.jsxs("div",{className:"surface-base inline-flex flex-wrap items-center gap-3 rounded-[16px] px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(me,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}),e.jsx(b,{id:"calendar-note-date-label",as:"span",variant:"label",weight:"medium",tone:"tertiary",children:"Note date"}),e.jsxs(se,{value:s,"aria-labelledby":"calendar-note-date-label",onValueChange:g=>m(g),variant:"ghost",size:"sm",children:[e.jsx(H,{value:"create",children:"Created"}),e.jsx(H,{value:"update",children:"Updated"})]})]}),e.jsx("div",{className:"h-5 w-px bg-divider"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(O,{variant:"ghost",size:"sm",onClick:l,children:"Today"}),e.jsx(O,{variant:"ghost",size:"icon-sm","aria-label":"Previous month",onClick:i,children:e.jsx(ae,{width:18,height:18})}),e.jsx(O,{variant:"ghost",size:"icon-sm","aria-label":"Next month",onClick:o,children:e.jsx(re,{width:18,height:18})})]})]})})]}),Ne=`
2
- query NotesInDateRange($dateRange: DateRangeInput) {
3
- notesInDateRange(dateRange: $dateRange) {
4
- id
5
- title
6
- createdAt
7
- updatedAt
8
- }
9
- }
10
- `,ve=`
11
- query RemindersInDateRange($dateRange: DateRangeInput) {
12
- remindersInDateRange(dateRange: $dateRange) {
13
- id
14
- noteId
15
- reminderDate
16
- completed
17
- priority
18
- content
19
- note {
20
- id
21
- title
22
- }
23
- }
24
- }
25
- `,De=async a=>{const t=await V(Ne,{dateRange:a});if(t.type==="error")throw t;return t.notesInDateRange},Me=async a=>{const t=await V(ve,{dateRange:a});if(t.type==="error")throw t;return t.remindersInDateRange},Ce=({year:a,month:t})=>{const s=`${a}-${String(t).padStart(2,"0")}-01`,i=t===12?1:t+1,l=`${t===12?a+1:a}-${String(i).padStart(2,"0")}-01`,m={start:s,end:l},h=z({queryKey:q.calendar.notesInDateRange(a,t),queryFn:()=>De(m)}),g=z({queryKey:q.reminders.inDateRange(a,t),queryFn:()=>Me(m)});return{notes:h.data??[],reminders:g.data??[],isLoading:h.isLoading||g.isLoading,isError:h.isError||g.isError}},Re=["SUN","MON","TUE","WED","THU","FRI","SAT"],Se=[],we=[],K=ie(de);function _e(){const a=K.useNavigate(),{year:t,month:s,type:i}=K.useSearch(),o=d.useRef(null),l=d.useRef(!1),m=d.useRef(0),h=d.useRef(0),g=d.useCallback(r=>{l.current=!0,m.current=r.pageX-(o.current?.offsetLeft??0),h.current=o.current?.scrollLeft??0,o.current&&(o.current.style.cursor="grabbing",o.current.style.userSelect="none")},[]),N=d.useCallback(r=>{if(!l.current||!o.current)return;r.preventDefault();const u=(r.pageX-o.current.offsetLeft-m.current)*1.2;o.current.scrollLeft=h.current-u},[]),D=d.useCallback(()=>{l.current=!1,o.current&&(o.current.style.cursor="grab",o.current.style.userSelect="")},[]),{notes:v,reminders:x,isLoading:M,isError:w}=Ce({year:t,month:s}),$=d.useMemo(()=>{const r=f(),c=`${r.year()}-${r.month()+1}-${r.date()}`,u=new Map;for(const n of v){const y=i==="create"?f(Number(n.createdAt)):f(Number(n.updatedAt)),p=`${y.year()}-${y.month()+1}-${y.date()}`,j=u.get(p)||[];j.push(n),u.set(p,j)}const T=new Map;for(const n of x){const y=f(Number(n.reminderDate)),p=`${y.year()}-${y.month()+1}-${y.date()}`,j=T.get(p)||[];j.push(n),T.set(p,j)}const W=new Date(t,s-1,1),X=new Date(t,s,0),L=W.getDay(),_=X.getDate(),R=[],Y=s===1?12:s-1,U=s===1?t-1:t,J=new Date(U,Y,0).getDate();for(let n=L-1;n>=0;n--)R.push({day:J-n,isCurrentMonth:!1,year:U,month:Y});for(let n=1;n<=_;n++)R.push({day:n,isCurrentMonth:!0,year:t,month:s});const P=(L+_)%7,Z=P===0?0:7-P,G=s===12?1:s+1,ee=s===12?t+1:t;for(let n=1;n<=Z;n++)R.push({day:n,isCurrentMonth:!1,year:ee,month:G});return R.map((n,y)=>{const p=`${n.year}-${n.month}-${n.day}`,j=f(`${n.year}-${String(n.month).padStart(2,"0")}-${String(n.day).padStart(2,"0")}`);return{key:p,year:n.year,month:n.month,day:n.day,isCurrentMonth:n.isCurrentMonth,isSunday:y%7===0,isToday:p===c,isPast:j.isBefore(r,"day"),notes:u.get(p)||Se,reminders:T.get(p)||we}})},[t,s,v,x,i]),k=()=>{const r=s===1?12:s-1,c=s===1?t-1:t;a({search:u=>({...u,month:r,year:c})})},C=()=>{const r=s===12?1:s+1,c=s===12?t+1:t;a({search:u=>({...u,month:r,year:c})})},E=()=>{a({search:r=>({...r,month:f().month()+1,year:f().year()})})},I=r=>{r&&a({search:c=>({...c,type:r})})};return e.jsx(ne,{title:"Calendar",variant:"none",children:w?e.jsx(he,{children:"Failed to load calendar data. Please try again later."}):e.jsxs("div",{className:"surface-base",children:[e.jsx("div",{className:"border-b border-border-subtle/80 px-4 py-4 sm:px-5",children:e.jsx(je,{month:s,year:t,type:i,onPrevMonth:k,onNextMonth:C,onToday:E,onTypeChange:I})}),e.jsx("div",{ref:o,className:"cursor-grab overflow-x-auto px-4 pb-4 pt-3 sm:px-5",onMouseDown:g,onMouseMove:N,onMouseUp:D,onMouseLeave:D,children:e.jsxs("div",{className:"min-w-[1260px]",children:[e.jsx("div",{className:"mb-2.5 grid grid-cols-7 gap-1.5",children:Re.map((r,c)=>e.jsx(b,{as:"div",variant:"label",weight:"semibold",tracking:"wider",transform:"uppercase",className:`py-2 text-center ${c===0?"text-fg-weekend":"text-fg-tertiary"}`,children:r},r))}),M?e.jsx("div",{className:"grid grid-cols-7 gap-1.5",children:Array.from({length:35}).map((r,c)=>e.jsx(oe,{height:180},c))}):e.jsx("div",{className:"grid grid-cols-7 gap-1.5",children:$.map(r=>e.jsx(fe,{year:r.year,month:r.month,day:r.day,isCurrentMonth:r.isCurrentMonth,isSunday:r.isSunday,isToday:r.isToday,isPast:r.isPast,notes:r.notes,reminders:r.reminders,type:i},r.key))})]})})]})})}export{_e as default};