mn-docs-mcp 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 (529) hide show
  1. package/.env.example +4 -0
  2. package/.vscode/extensions.json +4 -0
  3. package/.vscode/launch.json +11 -0
  4. package/README.md +99 -0
  5. package/astro.config.mjs +126 -0
  6. package/package.json +30 -0
  7. package/pnpm-workspace.yaml +4 -0
  8. package/public/favicon.svg +1 -0
  9. package/scripts/mcp/build-index.mjs +9 -0
  10. package/scripts/mcp/cli.mjs +61 -0
  11. package/scripts/mcp/lib.mjs +303 -0
  12. package/scripts/mcp/server-http.mjs +74 -0
  13. package/scripts/mcp/server.mjs +91 -0
  14. package/src/assets/houston.webp +0 -0
  15. package/src/client/jsb-api-footer.ts +242 -0
  16. package/src/components/Footer.astro +57 -0
  17. package/src/components/Search.astro +330 -0
  18. package/src/content/docs/guides/contributing.md +82 -0
  19. package/src/content/docs/guides/cookbook/addon-settings.md +53 -0
  20. package/src/content/docs/guides/cookbook/append-selection-as-comment.md +46 -0
  21. package/src/content/docs/guides/cookbook/batch-rename-notes.md +53 -0
  22. package/src/content/docs/guides/cookbook/embed-webview-panel.md +158 -0
  23. package/src/content/docs/guides/cookbook/export-notebook.md +48 -0
  24. package/src/content/docs/guides/cookbook/focus-note-in-mindmap.md +34 -0
  25. package/src/content/docs/guides/cookbook/network-api-call.md +135 -0
  26. package/src/content/docs/guides/cookbook/webview-bidirectional-js.md +112 -0
  27. package/src/content/docs/guides/getting-started.md +88 -0
  28. package/src/content/docs/guides/lifecycle-and-window.md +76 -0
  29. package/src/content/docs/guides/mindmap-and-selection.md +76 -0
  30. package/src/content/docs/guides/native-ui.md +136 -0
  31. package/src/content/docs/guides/network-requests.md +309 -0
  32. package/src/content/docs/guides/notes-and-database.md +99 -0
  33. package/src/content/docs/guides/shortcut-keys.md +105 -0
  34. package/src/content/docs/guides/storage-and-files.md +91 -0
  35. package/src/content/docs/guides/toolbar-and-commands.md +64 -0
  36. package/src/content/docs/index.mdx +44 -0
  37. package/src/content/docs/reference/black-box.md +19 -0
  38. package/src/content/docs/reference/foundation/ns-array.md +699 -0
  39. package/src/content/docs/reference/foundation/ns-attributed-string.md +379 -0
  40. package/src/content/docs/reference/foundation/ns-character-set.md +436 -0
  41. package/src/content/docs/reference/foundation/ns-counted-set.md +78 -0
  42. package/src/content/docs/reference/foundation/ns-data.md +183 -0
  43. package/src/content/docs/reference/foundation/ns-date-components.md +24 -0
  44. package/src/content/docs/reference/foundation/ns-date-formatter.md +70 -0
  45. package/src/content/docs/reference/foundation/ns-date.md +236 -0
  46. package/src/content/docs/reference/foundation/ns-decimal-number.md +437 -0
  47. package/src/content/docs/reference/foundation/ns-dictionary.md +376 -0
  48. package/src/content/docs/reference/foundation/ns-enumerator.md +36 -0
  49. package/src/content/docs/reference/foundation/ns-error.md +75 -0
  50. package/src/content/docs/reference/foundation/ns-file-handle.md +445 -0
  51. package/src/content/docs/reference/foundation/ns-file-manager.md +275 -0
  52. package/src/content/docs/reference/foundation/ns-formatter.md +131 -0
  53. package/src/content/docs/reference/foundation/ns-hash-table.md +304 -0
  54. package/src/content/docs/reference/foundation/ns-http-url-response.md +73 -0
  55. package/src/content/docs/reference/foundation/ns-index-path.md +185 -0
  56. package/src/content/docs/reference/foundation/ns-index-set.md +527 -0
  57. package/src/content/docs/reference/foundation/ns-json-serialization.md +24 -0
  58. package/src/content/docs/reference/foundation/ns-keyed-archiver.md +364 -0
  59. package/src/content/docs/reference/foundation/ns-keyed-unarchiver.md +324 -0
  60. package/src/content/docs/reference/foundation/ns-locale.md +82 -0
  61. package/src/content/docs/reference/foundation/ns-map-table.md +216 -0
  62. package/src/content/docs/reference/foundation/ns-mutable-array.md +452 -0
  63. package/src/content/docs/reference/foundation/ns-mutable-attributed-string.md +336 -0
  64. package/src/content/docs/reference/foundation/ns-mutable-character-set.md +132 -0
  65. package/src/content/docs/reference/foundation/ns-mutable-data.md +206 -0
  66. package/src/content/docs/reference/foundation/ns-mutable-dictionary.md +176 -0
  67. package/src/content/docs/reference/foundation/ns-mutable-index-set.md +155 -0
  68. package/src/content/docs/reference/foundation/ns-mutable-ordered-set.md +465 -0
  69. package/src/content/docs/reference/foundation/ns-mutable-set.md +189 -0
  70. package/src/content/docs/reference/foundation/ns-mutable-string.md +190 -0
  71. package/src/content/docs/reference/foundation/ns-mutable-url-request.md +26 -0
  72. package/src/content/docs/reference/foundation/ns-notification-center.md +30 -0
  73. package/src/content/docs/reference/foundation/ns-notification.md +73 -0
  74. package/src/content/docs/reference/foundation/ns-null.md +24 -0
  75. package/src/content/docs/reference/foundation/ns-number-formatter.md +147 -0
  76. package/src/content/docs/reference/foundation/ns-number.md +393 -0
  77. package/src/content/docs/reference/foundation/ns-operation-queue.md +227 -0
  78. package/src/content/docs/reference/foundation/ns-operation.md +248 -0
  79. package/src/content/docs/reference/foundation/ns-ordered-set.md +706 -0
  80. package/src/content/docs/reference/foundation/ns-pointer-array.md +192 -0
  81. package/src/content/docs/reference/foundation/ns-predicate.md +199 -0
  82. package/src/content/docs/reference/foundation/ns-proxy.md +178 -0
  83. package/src/content/docs/reference/foundation/ns-scanner.md +448 -0
  84. package/src/content/docs/reference/foundation/ns-set.md +586 -0
  85. package/src/content/docs/reference/foundation/ns-simple-c-string.md +20 -0
  86. package/src/content/docs/reference/foundation/ns-time-zone.md +86 -0
  87. package/src/content/docs/reference/foundation/ns-timer.md +24 -0
  88. package/src/content/docs/reference/foundation/ns-url-components.md +80 -0
  89. package/src/content/docs/reference/foundation/ns-url-connection.md +169 -0
  90. package/src/content/docs/reference/foundation/ns-url-request.md +224 -0
  91. package/src/content/docs/reference/foundation/ns-url-response.md +97 -0
  92. package/src/content/docs/reference/foundation/ns-url.md +31 -0
  93. package/src/content/docs/reference/foundation/ns-user-defaults.md +302 -0
  94. package/src/content/docs/reference/foundation/ns-uuid.md +52 -0
  95. package/src/content/docs/reference/foundation/ns-value.md +194 -0
  96. package/src/content/docs/reference/global/application.md +301 -0
  97. package/src/content/docs/reference/global/builtin-commands.md +294 -0
  98. package/src/content/docs/reference/global/database.md +395 -0
  99. package/src/content/docs/reference/global/global-variables.md +32 -0
  100. package/src/content/docs/reference/global/jsb.md +89 -0
  101. package/src/content/docs/reference/global/note.md +64 -0
  102. package/src/content/docs/reference/global/popup-menu-item.md +18 -0
  103. package/src/content/docs/reference/global/popup-menu.md +38 -0
  104. package/src/content/docs/reference/global/search-manager.md +51 -0
  105. package/src/content/docs/reference/global/self.md +28 -0
  106. package/src/content/docs/reference/js-runtime.md +28 -0
  107. package/src/content/docs/reference/marginnote/document-controller.md +45 -0
  108. package/src/content/docs/reference/marginnote/jsextension.md +119 -0
  109. package/src/content/docs/reference/marginnote/mb-book-note.md +192 -0
  110. package/src/content/docs/reference/marginnote/mb-book.md +35 -0
  111. package/src/content/docs/reference/marginnote/mb-model-tool.md +66 -0
  112. package/src/content/docs/reference/marginnote/mb-topic.md +36 -0
  113. package/src/content/docs/reference/marginnote/mindmap-node.md +27 -0
  114. package/src/content/docs/reference/marginnote/mindmap-view.md +24 -0
  115. package/src/content/docs/reference/marginnote/note-comment.md +29 -0
  116. package/src/content/docs/reference/marginnote/notebook-controller.md +36 -0
  117. package/src/content/docs/reference/marginnote/outline-view.md +23 -0
  118. package/src/content/docs/reference/marginnote/reader-controller.md +26 -0
  119. package/src/content/docs/reference/marginnote/study-controller.md +100 -0
  120. package/src/content/docs/reference/quartzcore/caanimation-group.md +44 -0
  121. package/src/content/docs/reference/quartzcore/caanimation.md +23 -0
  122. package/src/content/docs/reference/quartzcore/cabasic-animation.md +19 -0
  123. package/src/content/docs/reference/quartzcore/cagradient-layer.md +27 -0
  124. package/src/content/docs/reference/quartzcore/cakeyframe-animation.md +19 -0
  125. package/src/content/docs/reference/quartzcore/calayer.md +135 -0
  126. package/src/content/docs/reference/quartzcore/camedia-timing-function.md +25 -0
  127. package/src/content/docs/reference/quartzcore/caproperty-animation.md +46 -0
  128. package/src/content/docs/reference/quartzcore/careplicator-layer.md +27 -0
  129. package/src/content/docs/reference/quartzcore/cascroll-layer.md +21 -0
  130. package/src/content/docs/reference/quartzcore/cashape-layer.md +34 -0
  131. package/src/content/docs/reference/quartzcore/catext-layer.md +28 -0
  132. package/src/content/docs/reference/quartzcore/catiled-layer.md +26 -0
  133. package/src/content/docs/reference/quartzcore/catransaction.md +46 -0
  134. package/src/content/docs/reference/quartzcore/catransform-layer.md +18 -0
  135. package/src/content/docs/reference/quartzcore/catransition.md +44 -0
  136. package/src/content/docs/reference/quartzcore/cavalue-function.md +22 -0
  137. package/src/content/docs/reference/uikit/ns-mutable-paragraph-style.md +20 -0
  138. package/src/content/docs/reference/uikit/ns-paragraph-style.md +20 -0
  139. package/src/content/docs/reference/uikit/ns-text-storage.md +20 -0
  140. package/src/content/docs/reference/uikit/uiactivity-indicator-view.md +20 -0
  141. package/src/content/docs/reference/uikit/uialertview.md +25 -0
  142. package/src/content/docs/reference/uikit/uiapplication.md +128 -0
  143. package/src/content/docs/reference/uikit/uibar-button-item.md +20 -0
  144. package/src/content/docs/reference/uikit/uibar-item.md +20 -0
  145. package/src/content/docs/reference/uikit/uibezier-path.md +143 -0
  146. package/src/content/docs/reference/uikit/uibutton.md +27 -0
  147. package/src/content/docs/reference/uikit/uicollection-view-cell.md +24 -0
  148. package/src/content/docs/reference/uikit/uicollection-view-controller.md +32 -0
  149. package/src/content/docs/reference/uikit/uicollection-view-layout-attributes.md +43 -0
  150. package/src/content/docs/reference/uikit/uicollection-view-layout.md +60 -0
  151. package/src/content/docs/reference/uikit/uicollection-view.md +83 -0
  152. package/src/content/docs/reference/uikit/uicolor.md +23 -0
  153. package/src/content/docs/reference/uikit/uicontrol.md +20 -0
  154. package/src/content/docs/reference/uikit/uidate-picker.md +37 -0
  155. package/src/content/docs/reference/uikit/uidevice.md +83 -0
  156. package/src/content/docs/reference/uikit/uievent.md +36 -0
  157. package/src/content/docs/reference/uikit/uifont.md +39 -0
  158. package/src/content/docs/reference/uikit/uigesture-recognizer.md +152 -0
  159. package/src/content/docs/reference/uikit/uiimage-picker-controller.md +41 -0
  160. package/src/content/docs/reference/uikit/uiimage-view.md +38 -0
  161. package/src/content/docs/reference/uikit/uiimage.md +58 -0
  162. package/src/content/docs/reference/uikit/uikey-command.md +31 -0
  163. package/src/content/docs/reference/uikit/uilabel.md +27 -0
  164. package/src/content/docs/reference/uikit/uilocal-notification.md +28 -0
  165. package/src/content/docs/reference/uikit/uilong-press-gesture-recognizer.md +25 -0
  166. package/src/content/docs/reference/uikit/uinavigation-bar.md +52 -0
  167. package/src/content/docs/reference/uikit/uinavigation-controller.md +46 -0
  168. package/src/content/docs/reference/uikit/uinavigation-item.md +42 -0
  169. package/src/content/docs/reference/uikit/uipage-control.md +35 -0
  170. package/src/content/docs/reference/uikit/uipage-view-controller.md +37 -0
  171. package/src/content/docs/reference/uikit/uipan-gesture-recognizer.md +32 -0
  172. package/src/content/docs/reference/uikit/uipasteboard.md +24 -0
  173. package/src/content/docs/reference/uikit/uipicker-view.md +37 -0
  174. package/src/content/docs/reference/uikit/uipinch-gesture-recognizer.md +23 -0
  175. package/src/content/docs/reference/uikit/uipopover-controller.md +39 -0
  176. package/src/content/docs/reference/uikit/uiresponder.md +20 -0
  177. package/src/content/docs/reference/uikit/uirotation-gesture-recognizer.md +23 -0
  178. package/src/content/docs/reference/uikit/uiscreen-mode.md +17 -0
  179. package/src/content/docs/reference/uikit/uiscreen.md +65 -0
  180. package/src/content/docs/reference/uikit/uiscrollview.md +134 -0
  181. package/src/content/docs/reference/uikit/uisearch-bar.md +58 -0
  182. package/src/content/docs/reference/uikit/uisegmented-control.md +64 -0
  183. package/src/content/docs/reference/uikit/uislider.md +50 -0
  184. package/src/content/docs/reference/uikit/uiswipe-gesture-recognizer.md +23 -0
  185. package/src/content/docs/reference/uikit/uiswitch.md +22 -0
  186. package/src/content/docs/reference/uikit/uitab-bar-controller.md +39 -0
  187. package/src/content/docs/reference/uikit/uitab-bar-item.md +34 -0
  188. package/src/content/docs/reference/uikit/uitab-bar.md +44 -0
  189. package/src/content/docs/reference/uikit/uitable-view-cell.md +57 -0
  190. package/src/content/docs/reference/uikit/uitable-view-controller.md +30 -0
  191. package/src/content/docs/reference/uikit/uitable-view.md +100 -0
  192. package/src/content/docs/reference/uikit/uitap-gesture-recognizer.md +20 -0
  193. package/src/content/docs/reference/uikit/uitext-input-mode.md +47 -0
  194. package/src/content/docs/reference/uikit/uitext-position.md +44 -0
  195. package/src/content/docs/reference/uikit/uitext-range.md +42 -0
  196. package/src/content/docs/reference/uikit/uitext-view.md +46 -0
  197. package/src/content/docs/reference/uikit/uitextfield.md +32 -0
  198. package/src/content/docs/reference/uikit/uitoolbar.md +35 -0
  199. package/src/content/docs/reference/uikit/uitouch.md +39 -0
  200. package/src/content/docs/reference/uikit/uiview-controller.md +36 -0
  201. package/src/content/docs/reference/uikit/uiview.md +47 -0
  202. package/src/content/docs/reference/uikit/uiwebview.md +229 -0
  203. package/src/content/docs/reference/uikit/uiwindow.md +47 -0
  204. package/src/content/docs/reference/utility/menu-controller.md +27 -0
  205. package/src/content/docs/reference/utility/speech-manager.md +118 -0
  206. package/src/content/docs/reference/utility/sqlite-database.md +201 -0
  207. package/src/content/docs/reference/utility/sqlite-result-set.md +266 -0
  208. package/src/content/docs/reference/utility/sqlite-statement.md +44 -0
  209. package/src/content/docs/reference/utility/undo-manager.md +89 -0
  210. package/src/content/docs/reference/utility/zip-archive.md +29 -0
  211. package/src/content.config.ts +7 -0
  212. package/src/definitions/Foundation/JSBFoundation.h +9 -0
  213. package/src/definitions/Foundation/JSBFoundation.m +530 -0
  214. package/src/definitions/Foundation/JSBNSArray.h +81 -0
  215. package/src/definitions/Foundation/JSBNSAssertionHandler.h +23 -0
  216. package/src/definitions/Foundation/JSBNSAttributedString.h +42 -0
  217. package/src/definitions/Foundation/JSBNSBlockOperation.h +20 -0
  218. package/src/definitions/Foundation/JSBNSBundle.h +80 -0
  219. package/src/definitions/Foundation/JSBNSByteCountFormatter.h +28 -0
  220. package/src/definitions/Foundation/JSBNSCache.h +31 -0
  221. package/src/definitions/Foundation/JSBNSCachedURLResponse.h +22 -0
  222. package/src/definitions/Foundation/JSBNSCalendar.h +88 -0
  223. package/src/definitions/Foundation/JSBNSCharacterSet.h +50 -0
  224. package/src/definitions/Foundation/JSBNSCoder.h +88 -0
  225. package/src/definitions/Foundation/JSBNSComparisonPredicate.h +27 -0
  226. package/src/definitions/Foundation/JSBNSCompoundPredicate.h +23 -0
  227. package/src/definitions/Foundation/JSBNSCondition.h +22 -0
  228. package/src/definitions/Foundation/JSBNSConditionLock.h +26 -0
  229. package/src/definitions/Foundation/JSBNSConstantString.h +18 -0
  230. package/src/definitions/Foundation/JSBNSCountedSet.h +21 -0
  231. package/src/definitions/Foundation/JSBNSData.h +44 -0
  232. package/src/definitions/Foundation/JSBNSDataDetector.h +20 -0
  233. package/src/definitions/Foundation/JSBNSDate.h +37 -0
  234. package/src/definitions/Foundation/JSBNSDateComponents.h +56 -0
  235. package/src/definitions/Foundation/JSBNSDateFormatter.h +91 -0
  236. package/src/definitions/Foundation/JSBNSDecimalNumber.h +47 -0
  237. package/src/definitions/Foundation/JSBNSDecimalNumberHandler.h +23 -0
  238. package/src/definitions/Foundation/JSBNSDictionary.h +79 -0
  239. package/src/definitions/Foundation/JSBNSDirectoryEnumerator.h +25 -0
  240. package/src/definitions/Foundation/JSBNSEnumerator.h +18 -0
  241. package/src/definitions/Foundation/JSBNSError.h +28 -0
  242. package/src/definitions/Foundation/JSBNSException.h +30 -0
  243. package/src/definitions/Foundation/JSBNSExpression.h +48 -0
  244. package/src/definitions/Foundation/JSBNSFileCoordinator.h +29 -0
  245. package/src/definitions/Foundation/JSBNSFileHandle.h +51 -0
  246. package/src/definitions/Foundation/JSBNSFileManager.h +82 -0
  247. package/src/definitions/Foundation/JSBNSFileSecurity.h +32 -0
  248. package/src/definitions/Foundation/JSBNSFileVersion.h +35 -0
  249. package/src/definitions/Foundation/JSBNSFileWrapper.h +41 -0
  250. package/src/definitions/Foundation/JSBNSFormatter.h +23 -0
  251. package/src/definitions/Foundation/JSBNSHTTPCookie.h +34 -0
  252. package/src/definitions/Foundation/JSBNSHTTPCookieStorage.h +26 -0
  253. package/src/definitions/Foundation/JSBNSHTTPURLResponse.h +21 -0
  254. package/src/definitions/Foundation/JSBNSHashTable.h +38 -0
  255. package/src/definitions/Foundation/JSBNSIndexPath.h +34 -0
  256. package/src/definitions/Foundation/JSBNSIndexSet.h +47 -0
  257. package/src/definitions/Foundation/JSBNSInputStream.h +28 -0
  258. package/src/definitions/Foundation/JSBNSInvocation.h +32 -0
  259. package/src/definitions/Foundation/JSBNSInvocationOperation.h +20 -0
  260. package/src/definitions/Foundation/JSBNSJSONSerialization.h +19 -0
  261. package/src/definitions/Foundation/JSBNSKeyedArchiver.h +40 -0
  262. package/src/definitions/Foundation/JSBNSKeyedUnarchiver.h +38 -0
  263. package/src/definitions/Foundation/JSBNSLinguisticTagger.h +31 -0
  264. package/src/definitions/Foundation/JSBNSLocale.h +39 -0
  265. package/src/definitions/Foundation/JSBNSLock.h +20 -0
  266. package/src/definitions/Foundation/JSBNSMachPort.h +26 -0
  267. package/src/definitions/Foundation/JSBNSMapTable.h +34 -0
  268. package/src/definitions/Foundation/JSBNSMessagePort.h +15 -0
  269. package/src/definitions/Foundation/JSBNSMetadataItem.h +22 -0
  270. package/src/definitions/Foundation/JSBNSMetadataQuery.h +53 -0
  271. package/src/definitions/Foundation/JSBNSMetadataQueryAttributeValueTuple.h +21 -0
  272. package/src/definitions/Foundation/JSBNSMetadataQueryResultGroup.h +24 -0
  273. package/src/definitions/Foundation/JSBNSMethodSignature.h +24 -0
  274. package/src/definitions/Foundation/JSBNSMutableArray.h +51 -0
  275. package/src/definitions/Foundation/JSBNSMutableAttributedString.h +39 -0
  276. package/src/definitions/Foundation/JSBNSMutableCharacterSet.h +26 -0
  277. package/src/definitions/Foundation/JSBNSMutableData.h +29 -0
  278. package/src/definitions/Foundation/JSBNSMutableDictionary.h +29 -0
  279. package/src/definitions/Foundation/JSBNSMutableIndexSet.h +25 -0
  280. package/src/definitions/Foundation/JSBNSMutableOrderedSet.h +50 -0
  281. package/src/definitions/Foundation/JSBNSMutableSet.h +28 -0
  282. package/src/definitions/Foundation/JSBNSMutableString.h +31 -0
  283. package/src/definitions/Foundation/JSBNSMutableURLRequest.h +38 -0
  284. package/src/definitions/Foundation/JSBNSNetService.h +43 -0
  285. package/src/definitions/Foundation/JSBNSNetServiceBrowser.h +33 -0
  286. package/src/definitions/Foundation/JSBNSNotification.h +23 -0
  287. package/src/definitions/Foundation/JSBNSNotificationCenter.h +27 -0
  288. package/src/definitions/Foundation/JSBNSNotificationQueue.h +22 -0
  289. package/src/definitions/Foundation/JSBNSNull.h +17 -0
  290. package/src/definitions/Foundation/JSBNSNumber.h +51 -0
  291. package/src/definitions/Foundation/JSBNSNumberFormatter.h +136 -0
  292. package/src/definitions/Foundation/JSBNSOperation.h +34 -0
  293. package/src/definitions/Foundation/JSBNSOperationQueue.h +32 -0
  294. package/src/definitions/Foundation/JSBNSOrderedSet.h +70 -0
  295. package/src/definitions/Foundation/JSBNSOrthography.h +27 -0
  296. package/src/definitions/Foundation/JSBNSOutputStream.h +33 -0
  297. package/src/definitions/Foundation/JSBNSPipe.h +26 -0
  298. package/src/definitions/Foundation/JSBNSPointerArray.h +33 -0
  299. package/src/definitions/Foundation/JSBNSPort.h +27 -0
  300. package/src/definitions/Foundation/JSBNSPredicate.h +31 -0
  301. package/src/definitions/Foundation/JSBNSProcessInfo.h +42 -0
  302. package/src/definitions/Foundation/JSBNSProgress.h +45 -0
  303. package/src/definitions/Foundation/JSBNSPropertyListSerialization.h +24 -0
  304. package/src/definitions/Foundation/JSBNSProxy.h +29 -0
  305. package/src/definitions/Foundation/JSBNSPurgeableData.h +16 -0
  306. package/src/definitions/Foundation/JSBNSRecursiveLock.h +20 -0
  307. package/src/definitions/Foundation/JSBNSRegularExpression.h +35 -0
  308. package/src/definitions/Foundation/JSBNSRunLoop.h +38 -0
  309. package/src/definitions/Foundation/JSBNSScanner.h +44 -0
  310. package/src/definitions/Foundation/JSBNSSet.h +52 -0
  311. package/src/definitions/Foundation/JSBNSSimpleCString.h +18 -0
  312. package/src/definitions/Foundation/JSBNSSortDescriptor.h +32 -0
  313. package/src/definitions/Foundation/JSBNSStream.h +26 -0
  314. package/src/definitions/Foundation/JSBNSString.h +178 -0
  315. package/src/definitions/Foundation/JSBNSTextCheckingResult.h +52 -0
  316. package/src/definitions/Foundation/JSBNSThread.h +46 -0
  317. package/src/definitions/Foundation/JSBNSTimeZone.h +46 -0
  318. package/src/definitions/Foundation/JSBNSTimer.h +29 -0
  319. package/src/definitions/Foundation/JSBNSURL.h +110 -0
  320. package/src/definitions/Foundation/JSBNSURLAuthenticationChallenge.h +24 -0
  321. package/src/definitions/Foundation/JSBNSURLCache.h +30 -0
  322. package/src/definitions/Foundation/JSBNSURLComponents.h +38 -0
  323. package/src/definitions/Foundation/JSBNSURLConnection.h +45 -0
  324. package/src/definitions/Foundation/JSBNSURLCredential.h +30 -0
  325. package/src/definitions/Foundation/JSBNSURLCredentialStorage.h +25 -0
  326. package/src/definitions/Foundation/JSBNSURLProtectionSpace.h +29 -0
  327. package/src/definitions/Foundation/JSBNSURLProtocol.h +32 -0
  328. package/src/definitions/Foundation/JSBNSURLRequest.h +40 -0
  329. package/src/definitions/Foundation/JSBNSURLResponse.h +22 -0
  330. package/src/definitions/Foundation/JSBNSURLSession.h +103 -0
  331. package/src/definitions/Foundation/JSBNSURLSessionConfiguration.h +58 -0
  332. package/src/definitions/Foundation/JSBNSURLSessionDataTask.h +18 -0
  333. package/src/definitions/Foundation/JSBNSURLSessionDownloadTask.h +20 -0
  334. package/src/definitions/Foundation/JSBNSURLSessionTask.h +58 -0
  335. package/src/definitions/Foundation/JSBNSURLSessionUploadTask.h +18 -0
  336. package/src/definitions/Foundation/JSBNSUUID.h +22 -0
  337. package/src/definitions/Foundation/JSBNSUbiquitousKeyValueStore.h +37 -0
  338. package/src/definitions/Foundation/JSBNSUndoManager.h +50 -0
  339. package/src/definitions/Foundation/JSBNSUserDefaults.h +52 -0
  340. package/src/definitions/Foundation/JSBNSValue.h +53 -0
  341. package/src/definitions/Foundation/JSBNSValueTransformer.h +24 -0
  342. package/src/definitions/Foundation/JSBNSXMLParser.h +34 -0
  343. package/src/definitions/JSBApplication.h +59 -0
  344. package/src/definitions/JSBDocumentController.h +32 -0
  345. package/src/definitions/JSBJSExtension.h +34 -0
  346. package/src/definitions/JSBMNFileSystem.h +50 -0
  347. package/src/definitions/JSBMNFileSystem.m +267 -0
  348. package/src/definitions/JSBMarginNote.h +9 -0
  349. package/src/definitions/JSBMarginNote.m +183 -0
  350. package/src/definitions/JSBMbBook.h +22 -0
  351. package/src/definitions/JSBMbBookNote.h +78 -0
  352. package/src/definitions/JSBMbModelTool.h +47 -0
  353. package/src/definitions/JSBMbTopic.h +28 -0
  354. package/src/definitions/JSBMenuController.h +21 -0
  355. package/src/definitions/JSBMindMapNode.h +20 -0
  356. package/src/definitions/JSBMindMapView.h +15 -0
  357. package/src/definitions/JSBNotebookController.h +22 -0
  358. package/src/definitions/JSBOutlineView.h +14 -0
  359. package/src/definitions/JSBPopupMenu.h +37 -0
  360. package/src/definitions/JSBPopupMenuItem.h +19 -0
  361. package/src/definitions/JSBReaderController.h +18 -0
  362. package/src/definitions/JSBSQLite.h +109 -0
  363. package/src/definitions/JSBSearchManager.h +55 -0
  364. package/src/definitions/JSBSearchManager.m +4 -0
  365. package/src/definitions/JSBSpeechManager.h +31 -0
  366. package/src/definitions/JSBStudyController.h +32 -0
  367. package/src/definitions/JSBUndoManager.h +23 -0
  368. package/src/definitions/JSBZipArchive.h +28 -0
  369. package/src/definitions/QuartzCore/JSBCAAnimation.h +21 -0
  370. package/src/definitions/QuartzCore/JSBCAAnimationGroup.h +37 -0
  371. package/src/definitions/QuartzCore/JSBCABasicAnimation.h +16 -0
  372. package/src/definitions/QuartzCore/JSBCADisplayLink.h +26 -0
  373. package/src/definitions/QuartzCore/JSBCAEAGLLayer.h +16 -0
  374. package/src/definitions/QuartzCore/JSBCAEmitterBehavior.h +24 -0
  375. package/src/definitions/QuartzCore/JSBCAEmitterCell.h +40 -0
  376. package/src/definitions/QuartzCore/JSBCAEmitterLayer.h +31 -0
  377. package/src/definitions/QuartzCore/JSBCAGradientLayer.h +20 -0
  378. package/src/definitions/QuartzCore/JSBCAKeyframeAnimation.h +16 -0
  379. package/src/definitions/QuartzCore/JSBCALayer.h +98 -0
  380. package/src/definitions/QuartzCore/JSBCAMediaTimingFunction.h +22 -0
  381. package/src/definitions/QuartzCore/JSBCAPropertyAnimation.h +39 -0
  382. package/src/definitions/QuartzCore/JSBCAReplicatorLayer.h +23 -0
  383. package/src/definitions/QuartzCore/JSBCAScrollLayer.h +18 -0
  384. package/src/definitions/QuartzCore/JSBCAShapeLayer.h +27 -0
  385. package/src/definitions/QuartzCore/JSBCATextLayer.h +23 -0
  386. package/src/definitions/QuartzCore/JSBCATiledLayer.h +21 -0
  387. package/src/definitions/QuartzCore/JSBCATransaction.h +32 -0
  388. package/src/definitions/QuartzCore/JSBCATransformLayer.h +15 -0
  389. package/src/definitions/QuartzCore/JSBCATransition.h +37 -0
  390. package/src/definitions/QuartzCore/JSBCAValueFunction.h +20 -0
  391. package/src/definitions/QuartzCore/JSBQuartzCore.h +9 -0
  392. package/src/definitions/QuartzCore/JSBQuartzCore.m +106 -0
  393. package/src/definitions/UIKit/JSBNSLayoutConstraint.h +30 -0
  394. package/src/definitions/UIKit/JSBNSLayoutManager.h +94 -0
  395. package/src/definitions/UIKit/JSBNSMutableParagraphStyle.h +16 -0
  396. package/src/definitions/UIKit/JSBNSParagraphStyle.h +37 -0
  397. package/src/definitions/UIKit/JSBNSShadow.h +20 -0
  398. package/src/definitions/UIKit/JSBNSStringDrawingContext.h +22 -0
  399. package/src/definitions/UIKit/JSBNSTextAttachment.h +24 -0
  400. package/src/definitions/UIKit/JSBNSTextContainer.h +27 -0
  401. package/src/definitions/UIKit/JSBNSTextStorage.h +31 -0
  402. package/src/definitions/UIKit/JSBNSTextTab.h +38 -0
  403. package/src/definitions/UIKit/JSBUIAcceleration.h +24 -0
  404. package/src/definitions/UIKit/JSBUIAccelerometer.h +28 -0
  405. package/src/definitions/UIKit/JSBUIAccessibilityElement.h +24 -0
  406. package/src/definitions/UIKit/JSBUIActionSheet.h +37 -0
  407. package/src/definitions/UIKit/JSBUIActivity.h +26 -0
  408. package/src/definitions/UIKit/JSBUIActivityIndicatorView.h +22 -0
  409. package/src/definitions/UIKit/JSBUIActivityItemProvider.h +22 -0
  410. package/src/definitions/UIKit/JSBUIActivityViewController.h +20 -0
  411. package/src/definitions/UIKit/JSBUIAlertView.h +39 -0
  412. package/src/definitions/UIKit/JSBUIApplication.h +37 -0
  413. package/src/definitions/UIKit/JSBUIAttachmentBehavior.h +26 -0
  414. package/src/definitions/UIKit/JSBUIBarButtonItem.h +48 -0
  415. package/src/definitions/UIKit/JSBUIBarItem.h +26 -0
  416. package/src/definitions/UIKit/JSBUIBezierPath.h +55 -0
  417. package/src/definitions/UIKit/JSBUIButton.h +51 -0
  418. package/src/definitions/UIKit/JSBUICollectionReusableView.h +26 -0
  419. package/src/definitions/UIKit/JSBUICollectionView.h +53 -0
  420. package/src/definitions/UIKit/JSBUICollectionViewCell.h +14 -0
  421. package/src/definitions/UIKit/JSBUICollectionViewController.h +21 -0
  422. package/src/definitions/UIKit/JSBUICollectionViewFlowLayout.h +29 -0
  423. package/src/definitions/UIKit/JSBUICollectionViewFlowLayoutInvalidationContext.h +25 -0
  424. package/src/definitions/UIKit/JSBUICollectionViewLayout.h +58 -0
  425. package/src/definitions/UIKit/JSBUICollectionViewLayoutAttributes.h +40 -0
  426. package/src/definitions/UIKit/JSBUICollectionViewLayoutInvalidationContext.h +36 -0
  427. package/src/definitions/UIKit/JSBUICollectionViewTransitionLayout.h +15 -0
  428. package/src/definitions/UIKit/JSBUICollectionViewUpdateItem.h +36 -0
  429. package/src/definitions/UIKit/JSBUICollisionBehavior.h +30 -0
  430. package/src/definitions/UIKit/JSBUIColor.h +67 -0
  431. package/src/definitions/UIKit/JSBUIControl.h +39 -0
  432. package/src/definitions/UIKit/JSBUIDatePicker.h +26 -0
  433. package/src/definitions/UIKit/JSBUIDevice.h +37 -0
  434. package/src/definitions/UIKit/JSBUIDictationPhrase.h +38 -0
  435. package/src/definitions/UIKit/JSBUIDocument.h +46 -0
  436. package/src/definitions/UIKit/JSBUIDocumentInteractionController.h +32 -0
  437. package/src/definitions/UIKit/JSBUIDynamicAnimator.h +27 -0
  438. package/src/definitions/UIKit/JSBUIDynamicBehavior.h +27 -0
  439. package/src/definitions/UIKit/JSBUIDynamicItemBehavior.h +30 -0
  440. package/src/definitions/UIKit/JSBUIEvent.h +24 -0
  441. package/src/definitions/UIKit/JSBUIFont.h +30 -0
  442. package/src/definitions/UIKit/JSBUIFontDescriptor.h +36 -0
  443. package/src/definitions/UIKit/JSBUIGestureRecognizer.h +44 -0
  444. package/src/definitions/UIKit/JSBUIGravityBehavior.h +24 -0
  445. package/src/definitions/UIKit/JSBUIImage.h +59 -0
  446. package/src/definitions/UIKit/JSBUIImagePickerController.h +30 -0
  447. package/src/definitions/UIKit/JSBUIImageView.h +28 -0
  448. package/src/definitions/UIKit/JSBUIInputView.h +15 -0
  449. package/src/definitions/UIKit/JSBUIInterpolatingMotionEffect.h +18 -0
  450. package/src/definitions/UIKit/JSBUIKeyCommand.h +25 -0
  451. package/src/definitions/UIKit/JSBUIKit.h +9 -0
  452. package/src/definitions/UIKit/JSBUIKit.m +614 -0
  453. package/src/definitions/UIKit/JSBUILabel.h +38 -0
  454. package/src/definitions/UIKit/JSBUILocalNotification.h +20 -0
  455. package/src/definitions/UIKit/JSBUILocalizedIndexedCollation.h +23 -0
  456. package/src/definitions/UIKit/JSBUILongPressGestureRecognizer.h +22 -0
  457. package/src/definitions/UIKit/JSBUIManagedDocument.h +26 -0
  458. package/src/definitions/UIKit/JSBUIMarkupTextPrintFormatter.h +17 -0
  459. package/src/definitions/UIKit/JSBUIMenuController.h +28 -0
  460. package/src/definitions/UIKit/JSBUIMenuItem.h +25 -0
  461. package/src/definitions/UIKit/JSBUIMotionEffect.h +24 -0
  462. package/src/definitions/UIKit/JSBUIMotionEffectGroup.h +16 -0
  463. package/src/definitions/UIKit/JSBUINavigationBar.h +47 -0
  464. package/src/definitions/UIKit/JSBUINavigationController.h +34 -0
  465. package/src/definitions/UIKit/JSBUINavigationItem.h +45 -0
  466. package/src/definitions/UIKit/JSBUINib.h +19 -0
  467. package/src/definitions/UIKit/JSBUIPageControl.h +24 -0
  468. package/src/definitions/UIKit/JSBUIPageViewController.h +27 -0
  469. package/src/definitions/UIKit/JSBUIPanGestureRecognizer.h +23 -0
  470. package/src/definitions/UIKit/JSBUIPasteboard.h +46 -0
  471. package/src/definitions/UIKit/JSBUIPercentDrivenInteractiveTransition.h +24 -0
  472. package/src/definitions/UIKit/JSBUIPickerView.h +28 -0
  473. package/src/definitions/UIKit/JSBUIPinchGestureRecognizer.h +19 -0
  474. package/src/definitions/UIKit/JSBUIPopoverBackgroundView.h +22 -0
  475. package/src/definitions/UIKit/JSBUIPopoverController.h +31 -0
  476. package/src/definitions/UIKit/JSBUIPrintFormatter.h +33 -0
  477. package/src/definitions/UIKit/JSBUIPrintInfo.h +26 -0
  478. package/src/definitions/UIKit/JSBUIPrintInteractionController.h +36 -0
  479. package/src/definitions/UIKit/JSBUIPrintPageRenderer.h +31 -0
  480. package/src/definitions/UIKit/JSBUIPrintPaper.h +22 -0
  481. package/src/definitions/UIKit/JSBUIProgressView.h +24 -0
  482. package/src/definitions/UIKit/JSBUIPushBehavior.h +28 -0
  483. package/src/definitions/UIKit/JSBUIReferenceLibraryViewController.h +19 -0
  484. package/src/definitions/UIKit/JSBUIRefreshControl.h +21 -0
  485. package/src/definitions/UIKit/JSBUIResponder.h +57 -0
  486. package/src/definitions/UIKit/JSBUIRotationGestureRecognizer.h +19 -0
  487. package/src/definitions/UIKit/JSBUIScreen.h +36 -0
  488. package/src/definitions/UIKit/JSBUIScreenEdgePanGestureRecognizer.h +18 -0
  489. package/src/definitions/UIKit/JSBUIScreenMode.h +19 -0
  490. package/src/definitions/UIKit/JSBUIScrollView.h +53 -0
  491. package/src/definitions/UIKit/JSBUISearchBar.h +55 -0
  492. package/src/definitions/UIKit/JSBUISearchDisplayController.h +28 -0
  493. package/src/definitions/UIKit/JSBUISegmentedControl.h +46 -0
  494. package/src/definitions/UIKit/JSBUISimpleTextPrintFormatter.h +18 -0
  495. package/src/definitions/UIKit/JSBUISlider.h +41 -0
  496. package/src/definitions/UIKit/JSBUISnapBehavior.h +18 -0
  497. package/src/definitions/UIKit/JSBUISplitViewController.h +26 -0
  498. package/src/definitions/UIKit/JSBUIStepper.h +31 -0
  499. package/src/definitions/UIKit/JSBUIStoryboard.h +19 -0
  500. package/src/definitions/UIKit/JSBUIStoryboardPopoverSegue.h +17 -0
  501. package/src/definitions/UIKit/JSBUIStoryboardSegue.h +23 -0
  502. package/src/definitions/UIKit/JSBUISwipeGestureRecognizer.h +19 -0
  503. package/src/definitions/UIKit/JSBUISwitch.h +20 -0
  504. package/src/definitions/UIKit/JSBUITabBar.h +33 -0
  505. package/src/definitions/UIKit/JSBUITabBarController.h +26 -0
  506. package/src/definitions/UIKit/JSBUITabBarItem.h +26 -0
  507. package/src/definitions/UIKit/JSBUITableView.h +70 -0
  508. package/src/definitions/UIKit/JSBUITableViewCell.h +48 -0
  509. package/src/definitions/UIKit/JSBUITableViewController.h +19 -0
  510. package/src/definitions/UIKit/JSBUITableViewHeaderFooterView.h +22 -0
  511. package/src/definitions/UIKit/JSBUITapGestureRecognizer.h +20 -0
  512. package/src/definitions/UIKit/JSBUITextChecker.h +27 -0
  513. package/src/definitions/UIKit/JSBUITextField.h +44 -0
  514. package/src/definitions/UIKit/JSBUITextInputMode.h +41 -0
  515. package/src/definitions/UIKit/JSBUITextInputStringTokenizer.h +40 -0
  516. package/src/definitions/UIKit/JSBUITextPosition.h +38 -0
  517. package/src/definitions/UIKit/JSBUITextRange.h +38 -0
  518. package/src/definitions/UIKit/JSBUITextSelectionRect.h +36 -0
  519. package/src/definitions/UIKit/JSBUITextView.h +34 -0
  520. package/src/definitions/UIKit/JSBUIToolbar.h +22 -0
  521. package/src/definitions/UIKit/JSBUITouch.h +49 -0
  522. package/src/definitions/UIKit/JSBUIVideoEditorController.h +19 -0
  523. package/src/definitions/UIKit/JSBUIView.h +140 -0
  524. package/src/definitions/UIKit/JSBUIViewController.h +127 -0
  525. package/src/definitions/UIKit/JSBUIViewPrintFormatter.h +15 -0
  526. package/src/definitions/UIKit/JSBUIWebView.h +38 -0
  527. package/src/definitions/UIKit/JSBUIWindow.h +32 -0
  528. package/src/styles/starlight-overrides.css +23 -0
  529. package/tsconfig.json +5 -0
package/.env.example ADDED
@@ -0,0 +1,4 @@
1
+ # HuggingFace mirror for model download
2
+ HF_ENDPOINT=https://hf-mirror.com
3
+ # Optional
4
+ # MCP_HTTP_PORT=8788
@@ -0,0 +1,4 @@
1
+ {
2
+ "recommendations": ["astro-build.astro-vscode"],
3
+ "unwantedRecommendations": []
4
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "command": "./node_modules/.bin/astro dev",
6
+ "name": "Development server",
7
+ "request": "launch",
8
+ "type": "node-terminal"
9
+ }
10
+ ]
11
+ }
package/README.md ADDED
@@ -0,0 +1,99 @@
1
+ # MarginNote 插件开发文档
2
+
3
+ **本仓库为 MarginNote 官方插件接口文档与教程站点。**
4
+
5
+ - **在线文档**:[https://mn-docs.museday.top](https://mn-docs.museday.top)
6
+ - **仓库**:[https://github.com/Temsys-Shen/marginnote-addon-docs](https://github.com/Temsys-Shen/marginnote-addon-docs)
7
+
8
+ 基于 [Starlight](https://starlight.astro.build) 构建,提供完整的 API 参考、渐进式教程与 Cookbook 配方,供开发者为 MarginNote 编写插件时查阅与学习。
9
+
10
+ ## 文档内容
11
+
12
+ - **API 参考**:全局与入口(JSB、Application、Database)、MarginNote 核心(JSExtension、控制器、脑图、笔记/笔记本/文档模型)、Foundation / UIKit / Utility 等接口说明。
13
+ - **教程**:从快速开始到生命周期、笔记与数据库、脑图与选区、工具栏与命令、原生 UI、存储与文件。
14
+ - **Cookbook 配方**:按任务组织的可运行示例(如批量改标题、导出笔记本、高亮笔记、选区追加为评论、插件设置页等)。
15
+
16
+ ## 本地开发与构建
17
+
18
+ ```bash
19
+ pnpm install
20
+ pnpm dev # 本地开发,默认 http://localhost:4321
21
+ pnpm build # 构建静态站点到 ./dist/
22
+ pnpm preview # 预览构建结果
23
+ ```
24
+
25
+ ## 本地MCP搜索
26
+
27
+ 本项目内置一个本地MCPServer,支持stdio与HTTP两种方式,返回纯文本片段,适合AI直接调用。
28
+
29
+ embedding模型使用本地BGE-small-zh-v1.5(ONNX),首次启动会自动下载到 `.mcp/models`。模型文件约95.8MB,向量维度为512。
30
+
31
+ 可选配置:
32
+
33
+ ```
34
+ MCP_HTTP_PORT=8788
35
+ ```
36
+
37
+ 如果你需要代理或镜像下载模型:
38
+
39
+ ```
40
+ export HTTPS_PROXY=http://127.0.0.1:7890
41
+ export HF_ENDPOINT=https://hf-mirror.com
42
+ ```
43
+
44
+ ### 启动stdio版MCP
45
+
46
+ ```bash
47
+ pnpm mcp
48
+ ```
49
+
50
+ ### 启动HTTP版MCP
51
+
52
+ ```bash
53
+ pnpm mcp-http
54
+ ```
55
+
56
+ 以上两种启动方式会在检测到文档更新时自动重建索引。
57
+
58
+ ### 强制重建索引
59
+
60
+ ```bash
61
+ pnpm mcp:force-build
62
+ ```
63
+
64
+ ### MCP配置
65
+
66
+ ```json
67
+ {
68
+ "mcpServers": {
69
+ "mn-docs": {
70
+ "command": "pnpm",
71
+ "args": [
72
+ "mcp"
73
+ ],
74
+ "cwd": "path/to/this/repository"
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ ## 项目结构
81
+
82
+ ```
83
+ .
84
+ ├── public/
85
+ ├── src/
86
+ │ ├── assets/
87
+ │ ├── content/
88
+ │ │ └── docs/ # 文档正文(入门、教程、Cookbook、API 参考)
89
+ │ └── content.config.ts
90
+ ├── astro.config.mjs
91
+ ├── package.json
92
+ └── tsconfig.json
93
+ ```
94
+
95
+ 文档页面为 `src/content/docs/` 下的 `.md` / `.mdx` 文件,侧栏在 `astro.config.mjs` 中配置。
96
+
97
+ ## 声明
98
+
99
+ **本仓库中的插件接口说明与示例基于 MarginNote 官方提供的 Objective-C 头文件与插件能力整理,作为 MarginNote 官方插件开发文档使用。**
@@ -0,0 +1,126 @@
1
+ // @ts-check
2
+ import { defineConfig } from 'astro/config';
3
+ import starlight from '@astrojs/starlight';
4
+
5
+ // https://astro.build/config
6
+ export default defineConfig({
7
+ site: 'https://mn-docs.museday.top',
8
+ integrations: [
9
+ starlight({
10
+ title: 'MarginNote 插件开发文档',
11
+ customCss: ['/src/styles/starlight-overrides.css'],
12
+ components: {
13
+ Search: './src/components/Search.astro',
14
+ Footer: './src/components/Footer.astro',
15
+ },
16
+ social: [{ icon: 'github', label: 'GitHub', href: 'https://github.com/Temsys-Shen/marginnote-addon-docs' }],
17
+ sidebar: [
18
+ {
19
+ label: '入门',
20
+ items: [
21
+ { label: '快速开始', slug: 'guides/getting-started' },
22
+ ],
23
+ },
24
+ {
25
+ label: '教程与 Cookbook',
26
+ items: [
27
+ { label: '生命周期与窗口', slug: 'guides/lifecycle-and-window' },
28
+ { label: '笔记与数据库', slug: 'guides/notes-and-database' },
29
+ { label: '脑图与选区', slug: 'guides/mindmap-and-selection' },
30
+ { label: '工具栏与命令', slug: 'guides/toolbar-and-commands' },
31
+ { label: '快捷键', slug: 'guides/shortcut-keys' },
32
+ { label: '原生 UI', slug: 'guides/native-ui' },
33
+ { label: '存储与文件', slug: 'guides/storage-and-files' },
34
+ { label: '网络请求', slug: 'guides/network-requests' },
35
+ {
36
+ label: 'Cookbook 配方',
37
+ items: [
38
+ { label: '批量修改笔记标题', slug: 'guides/cookbook/batch-rename-notes' },
39
+ { label: '调用远程 API', slug: 'guides/cookbook/network-api-call' },
40
+ { label: '导出当前笔记本', slug: 'guides/cookbook/export-notebook' },
41
+ { label: '在脑图中高亮指定笔记', slug: 'guides/cookbook/focus-note-in-mindmap' },
42
+ { label: '将选区追加为评论', slug: 'guides/cookbook/append-selection-as-comment' },
43
+ { label: '插件设置页', slug: 'guides/cookbook/addon-settings' },
44
+ { label: '在插件中嵌入 WebView 面板', slug: 'guides/cookbook/embed-webview-panel' },
45
+ { label: 'WebView 内 JS 与插件 JS 双向通信', slug: 'guides/cookbook/webview-bidirectional-js' },
46
+ ],
47
+ },
48
+ ],
49
+ },
50
+ {
51
+ label: 'API 参考',
52
+ items: [
53
+ {
54
+ label: '全局与入口',
55
+ items: [
56
+ { label: '全局入口对象', slug: 'reference/global/global-variables' },
57
+ { label: 'JSB', slug: 'reference/global/jsb' },
58
+ { label: 'Application', slug: 'reference/global/application' },
59
+ { label: 'SearchManager', slug: 'reference/global/search-manager' },
60
+ { label: 'Database', slug: 'reference/global/database' },
61
+ { label: 'Note', slug: 'reference/global/note' },
62
+ { label: 'PopupMenu', slug: 'reference/global/popup-menu' },
63
+ { label: 'PopupMenuItem', slug: 'reference/global/popup-menu-item' },
64
+ { label: 'self', slug: 'reference/global/self' },
65
+ ],
66
+ },
67
+ {
68
+ label: 'MarginNote 核心',
69
+ items: [
70
+ { label: 'JSExtension', slug: 'reference/marginnote/jsextension' },
71
+ { label: 'StudyController', slug: 'reference/marginnote/study-controller' },
72
+ { label: 'NotebookController', slug: 'reference/marginnote/notebook-controller' },
73
+ { label: 'ReaderController', slug: 'reference/marginnote/reader-controller' },
74
+ { label: 'DocumentController', slug: 'reference/marginnote/document-controller' },
75
+ { label: 'MindMapView', slug: 'reference/marginnote/mindmap-view' },
76
+ { label: 'OutlineView', slug: 'reference/marginnote/outline-view' },
77
+ { label: 'MindMapNode', slug: 'reference/marginnote/mindmap-node' },
78
+ { label: 'MbBookNote', slug: 'reference/marginnote/mb-book-note' },
79
+ { label: 'NoteComment', slug: 'reference/marginnote/note-comment' },
80
+ { label: 'MbTopic', slug: 'reference/marginnote/mb-topic' },
81
+ { label: 'MbBook', slug: 'reference/marginnote/mb-book' },
82
+ { label: 'MbModelTool', slug: 'reference/marginnote/mb-model-tool' },
83
+ ],
84
+ },
85
+ {
86
+ label: 'Foundation',
87
+ autogenerate: { directory: 'reference/foundation' },
88
+ },
89
+ {
90
+ label: 'UIKit',
91
+ autogenerate: { directory: 'reference/uikit' },
92
+ },
93
+ {
94
+ label: 'QuartzCore',
95
+ autogenerate: { directory: 'reference/quartzcore' },
96
+ },
97
+ {
98
+ label: 'Utility',
99
+ autogenerate: { directory: 'reference/utility' },
100
+ },
101
+ {
102
+ label: '运行时边界',
103
+ items: [
104
+ { label: 'JavaScript 原生环境', slug: 'reference/js-runtime' },
105
+ { label: '隐藏的边界(The Black Box)', slug: 'reference/black-box' },
106
+ ],
107
+ },
108
+ {
109
+ label: '附录',
110
+ items: [
111
+ { label: '内建command清单', slug: 'reference/global/builtin-commands' },
112
+ ],
113
+ },
114
+ ],
115
+ },
116
+ {
117
+ label: '关于',
118
+ items: [
119
+ { label: '贡献指南', slug: 'guides/contributing' },
120
+ ],
121
+ },
122
+ ],
123
+
124
+ }),
125
+ ],
126
+ });
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "mn-docs-mcp",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "bin": {
6
+ "mn-docs-mcp": "scripts/mcp/cli.mjs"
7
+ },
8
+ "scripts": {
9
+ "dev": "astro dev",
10
+ "start": "astro dev",
11
+ "build": "astro build",
12
+ "preview": "astro preview",
13
+ "astro": "astro",
14
+ "mcp": "MCP_STDIO=1 MCP_SILENT=1 node scripts/mcp/server.mjs",
15
+ "mcp-http": "node scripts/mcp/server-http.mjs",
16
+ "mcp:force-build": "node scripts/mcp/build-index.mjs"
17
+ },
18
+ "dependencies": {
19
+ "@astrojs/starlight": "^0.37.4",
20
+ "@huggingface/transformers": "^3.7.3",
21
+ "@pagefind/default-ui": "^1.4.0",
22
+ "astro": "^5.6.1",
23
+ "dotenv": "^16.4.5",
24
+ "fastmcp": "^3.34.0",
25
+ "gray-matter": "^4.0.3",
26
+ "sharp": "^0.34.2",
27
+ "undici": "^6.19.8",
28
+ "zod": "^3.25.76"
29
+ }
30
+ }
@@ -0,0 +1,4 @@
1
+ ignoredBuiltDependencies:
2
+ - onnxruntime-node
3
+ - protobufjs
4
+ - tldjs
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill-rule="evenodd" d="M81 36 64 0 47 36l-1 2-9-10a6 6 0 0 0-9 9l10 10h-2L0 64l36 17h2L28 91a6 6 0 1 0 9 9l9-10 1 2 17 36 17-36v-2l9 10a6 6 0 1 0 9-9l-9-9 2-1 36-17-36-17-2-1 9-9a6 6 0 1 0-9-9l-9 10v-2Zm-17 2-2 5c-4 8-11 15-19 19l-5 2 5 2c8 4 15 11 19 19l2 5 2-5c4-8 11-15 19-19l5-2-5-2c-8-4-15-11-19-19l-2-5Z" clip-rule="evenodd"/><path d="M118 19a6 6 0 0 0-9-9l-3 3a6 6 0 1 0 9 9l3-3Zm-96 4c-2 2-6 2-9 0l-3-3a6 6 0 1 1 9-9l3 3c3 2 3 6 0 9Zm0 82c-2-2-6-2-9 0l-3 3a6 6 0 1 0 9 9l3-3c3-2 3-6 0-9Zm96 4a6 6 0 0 1-9 9l-3-3a6 6 0 1 1 9-9l3 3Z"/><style>path{fill:#000}@media (prefers-color-scheme:dark){path{fill:#fff}}</style></svg>
@@ -0,0 +1,9 @@
1
+ import { buildIndex } from './lib.mjs';
2
+
3
+ try {
4
+ const result = await buildIndex();
5
+ console.log(`索引构建完成,共${result.count}个片段。文件:${result.path}`);
6
+ } catch (error) {
7
+ console.error('索引构建失败:', error?.message || error);
8
+ process.exit(1);
9
+ }
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+
3
+ const args = process.argv.slice(2);
4
+
5
+ let mode = 'stdio';
6
+ let port;
7
+ let prebuild = false;
8
+ let silent = true;
9
+
10
+ for (let i = 0; i < args.length; i += 1) {
11
+ const arg = args[i];
12
+ if (arg === '--http') {
13
+ mode = 'http';
14
+ continue;
15
+ }
16
+ if (arg === '--stdio') {
17
+ mode = 'stdio';
18
+ continue;
19
+ }
20
+ if (arg === '--prebuild') {
21
+ prebuild = true;
22
+ continue;
23
+ }
24
+ if (arg === '--verbose') {
25
+ silent = false;
26
+ continue;
27
+ }
28
+ if (arg === '--port' && args[i + 1]) {
29
+ port = args[i + 1];
30
+ i += 1;
31
+ continue;
32
+ }
33
+ if (arg?.startsWith('--port=')) {
34
+ port = arg.split('=')[1];
35
+ continue;
36
+ }
37
+ if (arg === '--help' || arg === '-h') {
38
+ process.stderr.write(
39
+ [
40
+ 'mn-docs-mcp 使用说明:',
41
+ ' --http 启动HTTPStream模式(默认stdio)',
42
+ ' --port <port> HTTP端口(默认8788)',
43
+ ' --prebuild 启动后后台预构建索引',
44
+ ' --verbose 输出日志(默认静默)',
45
+ ' --stdio 显式使用stdio模式',
46
+ ].join('\n') + '\n'
47
+ );
48
+ process.exit(0);
49
+ }
50
+ }
51
+
52
+ if (mode === 'stdio') {
53
+ process.env.MCP_STDIO = '1';
54
+ process.env.MCP_SILENT = silent ? '1' : '0';
55
+ if (prebuild) process.env.MCP_PREBUILD = '1';
56
+ await import('./server.mjs');
57
+ } else {
58
+ if (port) process.env.MCP_HTTP_PORT = String(port);
59
+ if (prebuild) process.env.MCP_PREBUILD = '1';
60
+ await import('./server-http.mjs');
61
+ }
@@ -0,0 +1,303 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import matter from 'gray-matter';
5
+ import { env, pipeline } from '@huggingface/transformers';
6
+ import { Agent, ProxyAgent, setGlobalDispatcher } from 'undici';
7
+ import dotenv from 'dotenv';
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+
12
+ const ROOT_DIR = path.resolve(__dirname, '../..');
13
+ const DOCS_DIR = path.join(ROOT_DIR, 'src', 'content', 'docs');
14
+ const MCP_DIR = path.join(ROOT_DIR, '.mcp');
15
+ const INDEX_PATH = path.join(MCP_DIR, 'index.json');
16
+
17
+ const MODEL_ID = 'Xenova/bge-small-zh-v1.5';
18
+ const MODEL_DIM = 512;
19
+ let extractorPromise;
20
+ let proxyInitialized = false;
21
+ const MAX_EXTRACTOR_RETRIES = 3;
22
+ const IS_STDIO = process.env.MCP_STDIO === '1';
23
+ const IS_SILENT = process.env.MCP_SILENT === '1';
24
+
25
+ function logInfo(message) {
26
+ if (IS_SILENT) return;
27
+ if (IS_STDIO) {
28
+ process.stderr.write(`${message}\n`);
29
+ } else {
30
+ console.log(message);
31
+ }
32
+ }
33
+
34
+ function loadEnv() {
35
+ dotenv.config({ path: path.join(ROOT_DIR, '.env') });
36
+ }
37
+
38
+ function setupProxy() {
39
+ if (proxyInitialized) return;
40
+ proxyInitialized = true;
41
+ const proxyUrl = (process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.ALL_PROXY || '').trim();
42
+ if (!proxyUrl) return;
43
+ try {
44
+ const dispatcher = new ProxyAgent(proxyUrl);
45
+ setGlobalDispatcher(dispatcher);
46
+ } catch {
47
+ setGlobalDispatcher(new Agent());
48
+ }
49
+ }
50
+
51
+ async function getExtractor() {
52
+ if (extractorPromise) return extractorPromise;
53
+ loadEnv();
54
+ setupProxy();
55
+ env.cacheDir = path.join(MCP_DIR, 'models');
56
+ env.allowRemoteModels = true;
57
+ if (process.env.HF_ENDPOINT) {
58
+ env.HF_ENDPOINT = process.env.HF_ENDPOINT;
59
+ }
60
+
61
+ const modelDir = path.join(env.cacheDir, 'Xenova', 'bge-small-zh-v1.5');
62
+ const create = async () => pipeline('feature-extraction', MODEL_ID);
63
+
64
+ extractorPromise = (async () => {
65
+ for (let attempt = 1; attempt <= MAX_EXTRACTOR_RETRIES; attempt += 1) {
66
+ try {
67
+ return await create();
68
+ } catch (error) {
69
+ const message = error?.message || String(error);
70
+ const shouldRetry =
71
+ message.includes('Protobuf parsing failed') ||
72
+ message.includes('Load model') ||
73
+ message.includes('fetch failed') ||
74
+ message.includes('ConnectTimeoutError');
75
+
76
+ if (!shouldRetry || attempt === MAX_EXTRACTOR_RETRIES) {
77
+ throw error;
78
+ }
79
+
80
+ logInfo(`模型下载失败,准备重试(${attempt}/${MAX_EXTRACTOR_RETRIES})...`);
81
+ await fs.rm(modelDir, { recursive: true, force: true });
82
+ }
83
+ }
84
+ throw new Error('模型加载失败');
85
+ })();
86
+
87
+ return extractorPromise;
88
+ }
89
+
90
+ export function getPaths() {
91
+ return { ROOT_DIR, DOCS_DIR, MCP_DIR, INDEX_PATH };
92
+ }
93
+
94
+ export function normalizeWhitespace(text) {
95
+ return text.replace(/\s+/g, ' ').trim();
96
+ }
97
+
98
+ export function stripMarkdown(raw) {
99
+ let text = raw;
100
+ text = text.replace(/```[\s\S]*?```/g, ' ');
101
+ text = text.replace(/`[^`]*`/g, ' ');
102
+ text = text.replace(/!\[[^\]]*\]\([^)]*\)/g, ' ');
103
+ text = text.replace(/\[([^\]]+)\]\([^)]*\)/g, '$1');
104
+ text = text.replace(/<[^>]+>/g, ' ');
105
+ text = text.replace(/[*_~]+/g, ' ');
106
+ return normalizeWhitespace(text);
107
+ }
108
+
109
+ function slugToUrl(slug) {
110
+ let cleaned = slug.replace(/\\/g, '/');
111
+ if (cleaned.endsWith('/index')) cleaned = cleaned.slice(0, -'/index'.length);
112
+ if (cleaned === 'index') cleaned = '';
113
+ return '/' + cleaned;
114
+ }
115
+
116
+ function splitByHeadingAndParagraph(content) {
117
+ const lines = content.split(/\r?\n/);
118
+ let currentHeading = '';
119
+ let currentParagraph = [];
120
+ const chunks = [];
121
+ const flush = () => {
122
+ const text = normalizeWhitespace(currentParagraph.join(' '));
123
+ if (text) {
124
+ chunks.push({ heading: currentHeading, text });
125
+ }
126
+ currentParagraph = [];
127
+ };
128
+
129
+ for (const line of lines) {
130
+ const headingMatch = line.match(/^(#{1,6})\s+(.*)$/);
131
+ if (headingMatch) {
132
+ flush();
133
+ currentHeading = headingMatch[2].trim();
134
+ continue;
135
+ }
136
+ if (line.trim() === '') {
137
+ flush();
138
+ continue;
139
+ }
140
+ currentParagraph.push(line.trim());
141
+ }
142
+ flush();
143
+ return chunks;
144
+ }
145
+
146
+ async function walkFiles(dir) {
147
+ const entries = await fs.readdir(dir, { withFileTypes: true });
148
+ const results = [];
149
+ for (const entry of entries) {
150
+ const full = path.join(dir, entry.name);
151
+ if (entry.isDirectory()) {
152
+ results.push(...(await walkFiles(full)));
153
+ } else if (entry.isFile() && /\.(md|mdx)$/i.test(entry.name)) {
154
+ results.push(full);
155
+ }
156
+ }
157
+ return results;
158
+ }
159
+
160
+ function makeId(slug, index) {
161
+ return `${slug}::${index}`;
162
+ }
163
+
164
+ async function embedText(text) {
165
+ const extractor = await getExtractor();
166
+ const output = await extractor(text, { pooling: 'mean', normalize: true });
167
+ const list = typeof output.tolist === 'function' ? output.tolist() : output;
168
+ if (Array.isArray(list) && Array.isArray(list[0])) return list[0];
169
+ if (Array.isArray(list)) return list;
170
+ throw new Error('向量生成失败,输出格式不正确');
171
+ }
172
+
173
+ export async function buildIndex() {
174
+ const { DOCS_DIR, MCP_DIR, INDEX_PATH } = getPaths();
175
+ await fs.mkdir(MCP_DIR, { recursive: true });
176
+
177
+ const files = await walkFiles(DOCS_DIR);
178
+ const docs = [];
179
+ const tasks = [];
180
+ let counter = 0;
181
+
182
+ for (const file of files) {
183
+ const rel = path.relative(DOCS_DIR, file).replace(/\\/g, '/');
184
+ const slug = rel.replace(/\.(md|mdx)$/i, '');
185
+ const raw = await fs.readFile(file, 'utf-8');
186
+ const parsed = matter(raw);
187
+ const frontmatterTitle = typeof parsed.data?.title === 'string' ? parsed.data.title.trim() : '';
188
+ const frontmatterSlug = typeof parsed.data?.slug === 'string' ? parsed.data.slug.trim() : '';
189
+ const content = stripMarkdown(parsed.content);
190
+ const chunks = splitByHeadingAndParagraph(content);
191
+ const pageTitle = frontmatterTitle || (chunks[0]?.heading || slug.split('/').pop() || slug);
192
+ const url = slugToUrl(frontmatterSlug || slug);
193
+
194
+ for (const chunk of chunks) {
195
+ tasks.push({
196
+ id: makeId(slug, counter++),
197
+ url,
198
+ title: pageTitle,
199
+ section: chunk.heading,
200
+ text: chunk.text,
201
+ });
202
+ }
203
+ }
204
+
205
+ const total = tasks.length;
206
+ let done = 0;
207
+ let lastRender = 0;
208
+ const renderProgress = (force = false) => {
209
+ if (IS_SILENT) return;
210
+ const stream = IS_STDIO ? process.stderr : process.stdout;
211
+ if (!stream.isTTY) return;
212
+ const now = Date.now();
213
+ if (!force && now - lastRender < 120) return;
214
+ lastRender = now;
215
+ stream.write(`\r索引构建中:${done}/${total}`);
216
+ };
217
+ renderProgress(true);
218
+
219
+ for (const task of tasks) {
220
+ const embedding = await embedText(task.text);
221
+ docs.push({ ...task, embedding });
222
+ done += 1;
223
+ renderProgress(false);
224
+ // 让出事件循环,避免长时间阻塞MCP握手/请求处理
225
+ if (done % 10 === 0) {
226
+ await new Promise((resolve) => setImmediate(resolve));
227
+ }
228
+ }
229
+ if (IS_STDIO ? process.stderr.isTTY : process.stdout.isTTY) {
230
+ const stream = IS_STDIO ? process.stderr : process.stdout;
231
+ stream.write(`\r索引构建完成:${done}/${total}\n`);
232
+ } else {
233
+ logInfo(`索引构建完成:${done}/${total}`);
234
+ }
235
+
236
+ const payload = {
237
+ version: 1,
238
+ generatedAt: new Date().toISOString(),
239
+ source: {
240
+ root: 'src/content/docs',
241
+ split: 'heading+paragraph',
242
+ model: MODEL_ID,
243
+ dim: MODEL_DIM,
244
+ },
245
+ docs,
246
+ };
247
+ await fs.writeFile(INDEX_PATH, JSON.stringify(payload, null, 2));
248
+ return { count: docs.length, path: INDEX_PATH };
249
+ }
250
+
251
+ export async function loadIndex() {
252
+ const { INDEX_PATH } = getPaths();
253
+ const raw = await fs.readFile(INDEX_PATH, 'utf-8');
254
+ const data = JSON.parse(raw);
255
+ if (!Array.isArray(data?.docs)) {
256
+ throw new Error('索引文件格式错误,未找到docs数组');
257
+ }
258
+ return data;
259
+ }
260
+
261
+ async function getDocsLatestMtime() {
262
+ const { DOCS_DIR } = getPaths();
263
+ const files = await walkFiles(DOCS_DIR);
264
+ let latest = 0;
265
+ for (const file of files) {
266
+ const stat = await fs.stat(file);
267
+ if (stat.mtimeMs > latest) latest = stat.mtimeMs;
268
+ }
269
+ return latest;
270
+ }
271
+
272
+ export async function isIndexStale() {
273
+ const index = await loadIndex();
274
+ const generatedAt = Date.parse(index?.generatedAt || '');
275
+ if (!Number.isFinite(generatedAt)) return true;
276
+ const latestDocMtime = await getDocsLatestMtime();
277
+ return latestDocMtime > generatedAt;
278
+ }
279
+
280
+ function cosineSimilarity(a, b) {
281
+ let dot = 0;
282
+ let normA = 0;
283
+ let normB = 0;
284
+ for (let i = 0; i < a.length; i++) {
285
+ dot += a[i] * b[i];
286
+ normA += a[i] * a[i];
287
+ normB += b[i] * b[i];
288
+ }
289
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB) || 1);
290
+ }
291
+
292
+ export async function searchDocs(query, topK = 5) {
293
+ const index = await loadIndex();
294
+ const queryEmbedding = await embedText(query);
295
+
296
+ const scored = index.docs.map((doc) => ({
297
+ text: doc.text,
298
+ score: cosineSimilarity(queryEmbedding, doc.embedding),
299
+ }));
300
+
301
+ scored.sort((a, b) => b.score - a.score);
302
+ return scored.slice(0, topK).map((item) => item.text);
303
+ }