@lapis-notes/api 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 (400) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE.md +4 -0
  3. package/README.md +43 -0
  4. package/dist/__tests__/data-adapter-conformance.js +205 -0
  5. package/dist/__tests__/lapis-runtime-manifest.js +32 -0
  6. package/dist/__tests__/svelte-internal-client.d.ts +3 -0
  7. package/dist/agent-result-views.d.ts +52 -0
  8. package/dist/agent-result-views.js +89 -0
  9. package/dist/agent-skills.d.ts +99 -0
  10. package/dist/agent-skills.js +182 -0
  11. package/dist/agent-tools.d.ts +92 -0
  12. package/dist/agent-tools.js +139 -0
  13. package/dist/app-database-host.d.ts +4 -0
  14. package/dist/app-database-host.js +4 -0
  15. package/dist/app-shell-plugin-persistence.d.ts +15 -0
  16. package/dist/app-shell-plugin-persistence.js +34 -0
  17. package/dist/app-url.d.ts +54 -0
  18. package/dist/app-url.js +269 -0
  19. package/dist/application-compatibility.d.ts +31 -0
  20. package/dist/application-compatibility.js +64 -0
  21. package/dist/application-state.svelte.d.ts +14 -0
  22. package/dist/application-state.svelte.js +30 -0
  23. package/dist/assets/lapis-logo.svg +471 -0
  24. package/dist/bases.d.ts +281 -0
  25. package/dist/bases.js +475 -0
  26. package/dist/cache.svelte.d.ts +569 -0
  27. package/dist/cache.svelte.js +1433 -0
  28. package/dist/command.svelte.d.ts +337 -0
  29. package/dist/command.svelte.js +571 -0
  30. package/dist/compat.d.ts +29 -0
  31. package/dist/compat.js +30 -0
  32. package/dist/components/configuration/configuration.css +199 -0
  33. package/dist/components/configuration/date-setting.svelte +71 -0
  34. package/dist/components/configuration/date-setting.svelte.d.ts +8 -0
  35. package/dist/components/configuration/list-setting.svelte +128 -0
  36. package/dist/components/configuration/list-setting.svelte.d.ts +13 -0
  37. package/dist/components/configuration/object-array-row-grip.svelte +78 -0
  38. package/dist/components/configuration/object-array-row-grip.svelte.d.ts +9 -0
  39. package/dist/components/configuration/object-array-row.svelte +163 -0
  40. package/dist/components/configuration/object-array-row.svelte.d.ts +19 -0
  41. package/dist/components/configuration/object-array-setting.svelte +196 -0
  42. package/dist/components/configuration/object-array-setting.svelte.d.ts +15 -0
  43. package/dist/components/configuration/object-array-table-dnd.d.ts +8 -0
  44. package/dist/components/configuration/object-array-table-dnd.js +10 -0
  45. package/dist/components/configuration/object-array-utils.d.ts +11 -0
  46. package/dist/components/configuration/object-array-utils.js +103 -0
  47. package/dist/components/configuration/object-grid-setting.svelte +79 -0
  48. package/dist/components/configuration/object-grid-setting.svelte.d.ts +10 -0
  49. package/dist/components/configuration/object-map-row.svelte +147 -0
  50. package/dist/components/configuration/object-map-row.svelte.d.ts +15 -0
  51. package/dist/components/configuration/object-map-setting.svelte +137 -0
  52. package/dist/components/configuration/object-map-setting.svelte.d.ts +14 -0
  53. package/dist/components/configuration/object-map-types.d.ts +5 -0
  54. package/dist/components/configuration/object-map-types.js +1 -0
  55. package/dist/components/configuration/options-combobox-setting.svelte +129 -0
  56. package/dist/components/configuration/options-combobox-setting.svelte.d.ts +12 -0
  57. package/dist/components/copy-button/button.svelte +93 -0
  58. package/dist/components/copy-button/button.svelte.d.ts +13 -0
  59. package/dist/components/copy-button/index.d.ts +2 -0
  60. package/dist/components/copy-button/index.js +2 -0
  61. package/dist/components/editor/editor.css +565 -0
  62. package/dist/components/editor/editor.d.ts +33 -0
  63. package/dist/components/editor/editor.js +132 -0
  64. package/dist/components/editor/editor.svelte +176 -0
  65. package/dist/components/editor/editor.svelte.d.ts +15 -0
  66. package/dist/components/editor/embedded-editor-surface.d.ts +12 -0
  67. package/dist/components/editor/embedded-editor-surface.js +22 -0
  68. package/dist/components/editor/embedded-editor-surface.svelte +115 -0
  69. package/dist/components/editor/embedded-editor-surface.svelte.d.ts +17 -0
  70. package/dist/components/editor/extensions/autocomplete/index.d.ts +2 -0
  71. package/dist/components/editor/extensions/autocomplete/index.js +2 -0
  72. package/dist/components/editor/extensions/autocomplete/lapis-code-mirror-autocomplete.d.ts +16 -0
  73. package/dist/components/editor/extensions/autocomplete/lapis-code-mirror-autocomplete.js +34 -0
  74. package/dist/components/editor/extensions/autocomplete/vault-completion-sources.d.ts +27 -0
  75. package/dist/components/editor/extensions/autocomplete/vault-completion-sources.js +55 -0
  76. package/dist/components/editor/extensions/class-highlighter/index.d.ts +1 -0
  77. package/dist/components/editor/extensions/class-highlighter/index.js +47 -0
  78. package/dist/components/editor/extensions/fold-gutter/index.d.ts +8 -0
  79. package/dist/components/editor/extensions/fold-gutter/index.js +40 -0
  80. package/dist/components/editor/extensions/gutter-line-style-sync/index.d.ts +2 -0
  81. package/dist/components/editor/extensions/gutter-line-style-sync/index.js +118 -0
  82. package/dist/components/editor/extensions/lint/index.d.ts +4 -0
  83. package/dist/components/editor/extensions/lint/index.js +4 -0
  84. package/dist/components/editor/extensions/lint/lapis-code-mirror-lint.d.ts +26 -0
  85. package/dist/components/editor/extensions/lint/lapis-code-mirror-lint.js +101 -0
  86. package/dist/components/editor/extensions/lint/lapis-lint-diagnostic-helpers.d.ts +8 -0
  87. package/dist/components/editor/extensions/lint/lapis-lint-diagnostic-helpers.js +7 -0
  88. package/dist/components/editor/extensions/lint/lapis-lint-diagnostic.d.ts +20 -0
  89. package/dist/components/editor/extensions/lint/lapis-lint-diagnostic.js +47 -0
  90. package/dist/components/editor/extensions/lint/lapis-lint-hover-tooltip.d.ts +9 -0
  91. package/dist/components/editor/extensions/lint/lapis-lint-hover-tooltip.js +373 -0
  92. package/dist/components/editor/extensions/lint/lapis-lint-inline-widget.d.ts +31 -0
  93. package/dist/components/editor/extensions/lint/lapis-lint-inline-widget.js +191 -0
  94. package/dist/components/editor/extensions/lint/lapis-lint-tooltip.svelte +176 -0
  95. package/dist/components/editor/extensions/lint/lapis-lint-tooltip.svelte.d.ts +15 -0
  96. package/dist/components/editor/extensions/lint/lint-tooltip-actions.d.ts +11 -0
  97. package/dist/components/editor/extensions/lint/lint-tooltip-actions.js +21 -0
  98. package/dist/components/editor/extensions/lint/mount-lint-tooltip.d.ts +16 -0
  99. package/dist/components/editor/extensions/lint/mount-lint-tooltip.js +60 -0
  100. package/dist/components/editor/extensions/search/dom.d.ts +2 -0
  101. package/dist/components/editor/extensions/search/dom.js +6 -0
  102. package/dist/components/editor/extensions/search/index.d.ts +35 -0
  103. package/dist/components/editor/extensions/search/index.js +44 -0
  104. package/dist/components/editor/extensions/search/search.svelte +335 -0
  105. package/dist/components/editor/extensions/search/search.svelte.d.ts +8 -0
  106. package/dist/components/editor/index.d.ts +9 -0
  107. package/dist/components/editor/index.js +9 -0
  108. package/dist/components/editor/language-service/dom.d.ts +1 -0
  109. package/dist/components/editor/language-service/dom.js +6 -0
  110. package/dist/components/editor/language-service/index.d.ts +28 -0
  111. package/dist/components/editor/language-service/index.js +342 -0
  112. package/dist/components/empty-view/empty-view.css +39 -0
  113. package/dist/components/empty-view/empty-view.svelte +26 -0
  114. package/dist/components/empty-view/empty-view.svelte.d.ts +9 -0
  115. package/dist/components/empty-view/index.d.ts +2 -0
  116. package/dist/components/empty-view/index.js +2 -0
  117. package/dist/components/icon/icon-list.css +74 -0
  118. package/dist/components/icon/icon-list.svelte +213 -0
  119. package/dist/components/icon/icon-list.svelte.d.ts +11 -0
  120. package/dist/components/icon/icon.svelte +15 -0
  121. package/dist/components/icon/icon.svelte.d.ts +7 -0
  122. package/dist/components/icon/index.d.ts +3 -0
  123. package/dist/components/icon/index.js +3 -0
  124. package/dist/components/menu/context-menu.svelte +89 -0
  125. package/dist/components/menu/context-menu.svelte.d.ts +11 -0
  126. package/dist/components/menu/drawer-menu.svelte +83 -0
  127. package/dist/components/menu/drawer-menu.svelte.d.ts +8 -0
  128. package/dist/components/menu/dropdown-menu.svelte +89 -0
  129. package/dist/components/menu/dropdown-menu.svelte.d.ts +11 -0
  130. package/dist/components/menu/index.d.ts +6 -0
  131. package/dist/components/menu/index.js +6 -0
  132. package/dist/components/menu/menu.css +139 -0
  133. package/dist/components/menu/menu.svelte +37 -0
  134. package/dist/components/menu/menu.svelte.d.ts +11 -0
  135. package/dist/components/menu/mobile-menu-query.svelte.d.ts +3 -0
  136. package/dist/components/menu/mobile-menu-query.svelte.js +21 -0
  137. package/dist/components/menu/popover-menu.svelte +90 -0
  138. package/dist/components/menu/popover-menu.svelte.d.ts +10 -0
  139. package/dist/components/select/index.d.ts +2 -0
  140. package/dist/components/select/index.js +2 -0
  141. package/dist/components/select/select.svelte +72 -0
  142. package/dist/components/select/select.svelte.d.ts +25 -0
  143. package/dist/configuration-option-source-providers.d.ts +17 -0
  144. package/dist/configuration-option-source-providers.js +59 -0
  145. package/dist/configuration-option-source-registry.d.ts +59 -0
  146. package/dist/configuration-option-source-registry.js +123 -0
  147. package/dist/configuration.svelte.d.ts +258 -0
  148. package/dist/configuration.svelte.js +887 -0
  149. package/dist/context-keys.svelte.d.ts +42 -0
  150. package/dist/context-keys.svelte.js +278 -0
  151. package/dist/context.svelte.d.ts +247 -0
  152. package/dist/context.svelte.js +540 -0
  153. package/dist/daily-document-provider.d.ts +38 -0
  154. package/dist/daily-document-provider.js +176 -0
  155. package/dist/design-core-button-types.d.ts +7 -0
  156. package/dist/design-core-button-types.js +1 -0
  157. package/dist/diagnostics.d.ts +93 -0
  158. package/dist/diagnostics.js +84 -0
  159. package/dist/dialog-portal.d.ts +3 -0
  160. package/dist/dialog-portal.js +3 -0
  161. package/dist/docs-api.d.ts +44 -0
  162. package/dist/docs-api.js +29 -0
  163. package/dist/editor-view-registry.d.ts +35 -0
  164. package/dist/editor-view-registry.js +112 -0
  165. package/dist/editor.svelte.d.ts +126 -0
  166. package/dist/editor.svelte.js +454 -0
  167. package/dist/embed-registry.d.ts +15 -0
  168. package/dist/embed-registry.js +16 -0
  169. package/dist/enhance.d.ts +111 -0
  170. package/dist/enhance.js +309 -0
  171. package/dist/events.d.ts +28 -0
  172. package/dist/events.js +49 -0
  173. package/dist/file-manager.d.ts +90 -0
  174. package/dist/file-manager.js +289 -0
  175. package/dist/file-tools/app-tools.d.ts +3 -0
  176. package/dist/file-tools/app-tools.js +242 -0
  177. package/dist/file-tools/index.d.ts +3 -0
  178. package/dist/file-tools/index.js +3 -0
  179. package/dist/file-tools/paths.d.ts +14 -0
  180. package/dist/file-tools/paths.js +33 -0
  181. package/dist/file-tools/vault-operations.d.ts +3 -0
  182. package/dist/file-tools/vault-operations.js +60 -0
  183. package/dist/generated/plugin-host-modules.schema.generated.d.ts +371 -0
  184. package/dist/generated/plugin-host-modules.schema.generated.js +374 -0
  185. package/dist/glob.d.ts +15 -0
  186. package/dist/glob.js +68 -0
  187. package/dist/history.svelte.d.ts +24 -0
  188. package/dist/history.svelte.js +74 -0
  189. package/dist/hooks/createVirtualizer.svelte.d.ts +7 -0
  190. package/dist/hooks/createVirtualizer.svelte.js +70 -0
  191. package/dist/hooks/index.d.ts +5 -0
  192. package/dist/hooks/index.js +5 -0
  193. package/dist/hooks/is-mobile.svelte.d.ts +5 -0
  194. package/dist/hooks/is-mobile.svelte.js +23 -0
  195. package/dist/hooks/mountComponent.svelte.d.ts +7 -0
  196. package/dist/hooks/mountComponent.svelte.js +16 -0
  197. package/dist/hooks/use-text-highlight.d.ts +17 -0
  198. package/dist/hooks/use-text-highlight.js +82 -0
  199. package/dist/hooks/useBoundingRect.svelte.d.ts +11 -0
  200. package/dist/hooks/useBoundingRect.svelte.js +46 -0
  201. package/dist/icons/index.d.ts +57 -0
  202. package/dist/icons/index.js +288 -0
  203. package/dist/index.d.ts +87 -0
  204. package/dist/index.js +87 -0
  205. package/dist/language-service/index.d.ts +9 -0
  206. package/dist/language-service/index.js +7 -0
  207. package/dist/language-service/manager.d.ts +47 -0
  208. package/dist/language-service/manager.js +404 -0
  209. package/dist/language-service/types.d.ts +92 -0
  210. package/dist/language-service/types.js +1 -0
  211. package/dist/language-service/virtual-document.d.ts +11 -0
  212. package/dist/language-service/virtual-document.js +45 -0
  213. package/dist/language-service/worker-protocol.d.ts +63 -0
  214. package/dist/language-service/worker-protocol.js +1 -0
  215. package/dist/language-service/worker-provider.d.ts +9 -0
  216. package/dist/language-service/worker-provider.js +38 -0
  217. package/dist/lapis-extension.d.ts +244 -0
  218. package/dist/lapis-extension.js +591 -0
  219. package/dist/links.d.ts +34 -0
  220. package/dist/links.js +191 -0
  221. package/dist/loaders.d.ts +9 -0
  222. package/dist/loaders.js +59 -0
  223. package/dist/localization-manager.svelte.d.ts +56 -0
  224. package/dist/localization-manager.svelte.js +157 -0
  225. package/dist/logging.d.ts +172 -0
  226. package/dist/logging.js +352 -0
  227. package/dist/markdown-extension-registry.d.ts +31 -0
  228. package/dist/markdown-extension-registry.js +31 -0
  229. package/dist/markdown-file-surface-registry.d.ts +25 -0
  230. package/dist/markdown-file-surface-registry.js +23 -0
  231. package/dist/markdown.d.ts +205 -0
  232. package/dist/markdown.js +147 -0
  233. package/dist/menu-utils.d.ts +1 -0
  234. package/dist/menu-utils.js +47 -0
  235. package/dist/menu.svelte.d.ts +121 -0
  236. package/dist/menu.svelte.js +295 -0
  237. package/dist/metadata-value.d.ts +10 -0
  238. package/dist/metadata-value.js +173 -0
  239. package/dist/metadata.svelte.d.ts +106 -0
  240. package/dist/metadata.svelte.js +608 -0
  241. package/dist/notifications.d.ts +209 -0
  242. package/dist/notifications.js +338 -0
  243. package/dist/open-file.d.ts +23 -0
  244. package/dist/open-file.js +102 -0
  245. package/dist/platform.d.ts +86 -0
  246. package/dist/platform.js +86 -0
  247. package/dist/plugin-asset-server.d.ts +60 -0
  248. package/dist/plugin-asset-server.js +222 -0
  249. package/dist/plugin-assets.d.ts +4 -0
  250. package/dist/plugin-assets.js +3 -0
  251. package/dist/plugin-capability-facade.d.ts +104 -0
  252. package/dist/plugin-capability-facade.js +61 -0
  253. package/dist/plugin-dependency-resolver.d.ts +36 -0
  254. package/dist/plugin-dependency-resolver.js +54 -0
  255. package/dist/plugin-dependency-scanner.d.ts +9 -0
  256. package/dist/plugin-dependency-scanner.js +274 -0
  257. package/dist/plugin-distribution/canonical-json.d.ts +1 -0
  258. package/dist/plugin-distribution/canonical-json.js +40 -0
  259. package/dist/plugin-distribution/compatibility.d.ts +5 -0
  260. package/dist/plugin-distribution/compatibility.js +38 -0
  261. package/dist/plugin-distribution/errors.d.ts +11 -0
  262. package/dist/plugin-distribution/errors.js +13 -0
  263. package/dist/plugin-distribution/hashes.d.ts +2 -0
  264. package/dist/plugin-distribution/hashes.js +17 -0
  265. package/dist/plugin-distribution/index.d.ts +18 -0
  266. package/dist/plugin-distribution/index.js +18 -0
  267. package/dist/plugin-distribution/installed-plugin-state.d.ts +20 -0
  268. package/dist/plugin-distribution/installed-plugin-state.js +73 -0
  269. package/dist/plugin-distribution/installer.d.ts +89 -0
  270. package/dist/plugin-distribution/installer.js +395 -0
  271. package/dist/plugin-distribution/manager.d.ts +128 -0
  272. package/dist/plugin-distribution/manager.js +358 -0
  273. package/dist/plugin-distribution/path-safety.d.ts +2 -0
  274. package/dist/plugin-distribution/path-safety.js +20 -0
  275. package/dist/plugin-distribution/plugin-bundle-verifier.d.ts +28 -0
  276. package/dist/plugin-distribution/plugin-bundle-verifier.js +96 -0
  277. package/dist/plugin-distribution/plugin-bundle-worker.d.ts +34 -0
  278. package/dist/plugin-distribution/plugin-bundle-worker.js +99 -0
  279. package/dist/plugin-distribution/plugin-bundle.d.ts +16 -0
  280. package/dist/plugin-distribution/plugin-bundle.js +244 -0
  281. package/dist/plugin-distribution/plugin-bundle.worker.d.ts +1 -0
  282. package/dist/plugin-distribution/plugin-bundle.worker.js +38 -0
  283. package/dist/plugin-distribution/registry-cache.d.ts +26 -0
  284. package/dist/plugin-distribution/registry-cache.js +85 -0
  285. package/dist/plugin-distribution/registry-client.d.ts +36 -0
  286. package/dist/plugin-distribution/registry-client.js +115 -0
  287. package/dist/plugin-distribution/reserved-ids.d.ts +4 -0
  288. package/dist/plugin-distribution/reserved-ids.js +10 -0
  289. package/dist/plugin-distribution/runtime-validation.d.ts +14 -0
  290. package/dist/plugin-distribution/runtime-validation.js +388 -0
  291. package/dist/plugin-distribution/schemas.d.ts +4895 -0
  292. package/dist/plugin-distribution/schemas.js +299 -0
  293. package/dist/plugin-distribution/signing.d.ts +5 -0
  294. package/dist/plugin-distribution/signing.js +38 -0
  295. package/dist/plugin-distribution/types.d.ts +217 -0
  296. package/dist/plugin-distribution/types.js +1 -0
  297. package/dist/plugin-install-progress.d.ts +15 -0
  298. package/dist/plugin-install-progress.js +86 -0
  299. package/dist/plugin-manager.d.ts +306 -0
  300. package/dist/plugin-manager.js +2848 -0
  301. package/dist/plugin-runtime-entry.d.ts +19 -0
  302. package/dist/plugin-runtime-entry.js +135 -0
  303. package/dist/plugin.d.ts +350 -0
  304. package/dist/plugin.js +754 -0
  305. package/dist/popover.d.ts +20 -0
  306. package/dist/popover.js +32 -0
  307. package/dist/promise-worker.d.ts +22 -0
  308. package/dist/promise-worker.js +65 -0
  309. package/dist/prompt-confirm.d.ts +9 -0
  310. package/dist/prompt-confirm.js +33 -0
  311. package/dist/search-document-provider.d.ts +45 -0
  312. package/dist/search-document-provider.js +54 -0
  313. package/dist/search-query/index.d.ts +78 -0
  314. package/dist/search-query/index.js +426 -0
  315. package/dist/search-query/parser.d.ts +3 -0
  316. package/dist/search-query/parser.js +16 -0
  317. package/dist/search-query/parser.terms.js +26 -0
  318. package/dist/search-query/search-query.grammar +128 -0
  319. package/dist/search.d.ts +19 -0
  320. package/dist/search.js +104 -0
  321. package/dist/setting-section-layout.d.ts +19 -0
  322. package/dist/setting-section-layout.js +194 -0
  323. package/dist/settings.svelte.d.ts +474 -0
  324. package/dist/settings.svelte.js +1421 -0
  325. package/dist/source-text-file-view.d.ts +25 -0
  326. package/dist/source-text-file-view.js +78 -0
  327. package/dist/status-bar.svelte.d.ts +29 -0
  328. package/dist/status-bar.svelte.js +72 -0
  329. package/dist/storage/app-database.d.ts +860 -0
  330. package/dist/storage/app-database.js +2372 -0
  331. package/dist/storage/blob-store.d.ts +12 -0
  332. package/dist/storage/blob-store.js +1 -0
  333. package/dist/storage/browser-app-database-coordination.d.ts +35 -0
  334. package/dist/storage/browser-app-database-coordination.js +207 -0
  335. package/dist/storage/browser-coordinated-app-database.d.ts +109 -0
  336. package/dist/storage/browser-coordinated-app-database.js +704 -0
  337. package/dist/storage/browser.d.ts +153 -0
  338. package/dist/storage/browser.js +794 -0
  339. package/dist/storage/desktop-native.d.ts +184 -0
  340. package/dist/storage/desktop-native.js +415 -0
  341. package/dist/storage/fs.d.ts +188 -0
  342. package/dist/storage/fs.js +307 -0
  343. package/dist/storage/index-projection.d.ts +236 -0
  344. package/dist/storage/index-projection.js +402 -0
  345. package/dist/storage/index.d.ts +17 -0
  346. package/dist/storage/index.js +17 -0
  347. package/dist/storage/keyval.d.ts +94 -0
  348. package/dist/storage/keyval.js +199 -0
  349. package/dist/storage/memory-vault-adapter.d.ts +44 -0
  350. package/dist/storage/memory-vault-adapter.js +351 -0
  351. package/dist/storage/native-vault-bootstrap-kv.d.ts +22 -0
  352. package/dist/storage/native-vault-bootstrap-kv.js +96 -0
  353. package/dist/storage/path.d.ts +22 -0
  354. package/dist/storage/path.js +110 -0
  355. package/dist/storage/search-embedding-provider.d.ts +75 -0
  356. package/dist/storage/search-embedding-provider.js +446 -0
  357. package/dist/storage/search-embedding-worker.d.ts +1 -0
  358. package/dist/storage/search-embedding-worker.js +63 -0
  359. package/dist/storage/search-query-evaluator.d.ts +14 -0
  360. package/dist/storage/search-query-evaluator.js +678 -0
  361. package/dist/storage/task-projection.d.ts +152 -0
  362. package/dist/storage/task-projection.js +154 -0
  363. package/dist/storage/turso-app-database.d.ts +150 -0
  364. package/dist/storage/turso-app-database.js +2671 -0
  365. package/dist/storage/vault-session.d.ts +37 -0
  366. package/dist/storage/vault-session.js +196 -0
  367. package/dist/storage/vault-state.d.ts +74 -0
  368. package/dist/storage/vault-state.js +181 -0
  369. package/dist/storage/vault.svelte.d.ts +257 -0
  370. package/dist/storage/vault.svelte.js +661 -0
  371. package/dist/suggest.d.ts +193 -0
  372. package/dist/suggest.js +391 -0
  373. package/dist/tasks.d.ts +7 -0
  374. package/dist/tasks.js +18 -0
  375. package/dist/telemetry.d.ts +116 -0
  376. package/dist/telemetry.js +103 -0
  377. package/dist/utils.d.ts +55 -0
  378. package/dist/utils.js +314 -0
  379. package/dist/vault-api.d.ts +5 -0
  380. package/dist/vault-api.js +3 -0
  381. package/dist/vault-maintenance-commands.d.ts +5 -0
  382. package/dist/vault-maintenance-commands.js +32 -0
  383. package/dist/view.svelte.d.ts +215 -0
  384. package/dist/view.svelte.js +381 -0
  385. package/dist/vite-env.d.ts +2 -0
  386. package/dist/workspace-host-internal.d.ts +7 -0
  387. package/dist/workspace-host-internal.js +7 -0
  388. package/dist/workspace-host.d.ts +10 -0
  389. package/dist/workspace-host.js +14 -0
  390. package/dist/workspace-layout-commands.d.ts +3 -0
  391. package/dist/workspace-layout-commands.js +72 -0
  392. package/dist/workspace-layout-normalizer.d.ts +92 -0
  393. package/dist/workspace-layout-normalizer.js +301 -0
  394. package/dist/workspace-layouts.d.ts +7 -0
  395. package/dist/workspace-layouts.js +23 -0
  396. package/dist/workspace-trust.d.ts +32 -0
  397. package/dist/workspace-trust.js +72 -0
  398. package/dist/workspace.svelte.d.ts +796 -0
  399. package/dist/workspace.svelte.js +4380 -0
  400. package/package.json +240 -0
@@ -0,0 +1,89 @@
1
+ import type { DataAdapter } from "../storage/fs";
2
+ import { InstalledPluginStateStore } from "./installed-plugin-state";
3
+ import { type PluginBundleVerificationMode } from "./plugin-bundle-worker";
4
+ import type { InstalledPluginRecord, PluginCatalogDetail, PluginCatalogEntry, PluginCompatibilityInput, PluginProvenance, TrustedSigningKey } from "./types";
5
+ export type PluginBinaryFetch = (url: string, init?: RequestInit) => Promise<PluginBinaryResponse>;
6
+ export type PluginBinaryResponse = Pick<Response, "ok" | "status" | "statusText" | "arrayBuffer" | "text"> & {
7
+ body?: ReadableStream<Uint8Array> | null;
8
+ };
9
+ export type PluginInstallerProgressPhase = "downloading-bundle" | "verifying-bundle" | "extracting-files" | "verifying-files" | "staging" | "installing" | "loading" | "enabling";
10
+ export interface PluginInstallerProgressEvent {
11
+ phase: PluginInstallerProgressPhase;
12
+ message?: string;
13
+ downloadedBytes?: number;
14
+ processedBytes?: number;
15
+ totalBytes?: number;
16
+ filePath?: string;
17
+ fileIndex?: number;
18
+ fileCount?: number;
19
+ }
20
+ export interface PluginInstallerManager {
21
+ loadPlugin?(pluginPath: string, options?: {
22
+ provenance?: PluginProvenance;
23
+ }): Promise<unknown>;
24
+ enablePlugin?(pluginId: string): Promise<boolean>;
25
+ disablePlugin?(pluginId: string): Promise<boolean>;
26
+ isPluginEnabled?(pluginId: string): boolean;
27
+ getCommunityPluginDiagnostics?(pluginId: string): {
28
+ state?: string;
29
+ lastFailureMessage?: string | null;
30
+ } | null;
31
+ }
32
+ export interface InstallVerifiedPluginOptions {
33
+ entry: PluginCatalogEntry;
34
+ detail: PluginCatalogDetail;
35
+ version?: string;
36
+ enable?: boolean;
37
+ registryId?: string;
38
+ registryUrl?: string;
39
+ provenance?: PluginProvenance;
40
+ compatibility?: PluginCompatibilityInput;
41
+ signal?: AbortSignal;
42
+ onProgress?: (event: PluginInstallerProgressEvent) => void;
43
+ }
44
+ export interface InstallVerifiedPluginBundleOptions {
45
+ bundle: ArrayBuffer | Uint8Array;
46
+ enable?: boolean;
47
+ registryId?: string;
48
+ registryUrl?: string;
49
+ provenance?: PluginProvenance;
50
+ compatibility?: PluginCompatibilityInput;
51
+ signal?: AbortSignal;
52
+ onProgress?: (event: PluginInstallerProgressEvent) => void;
53
+ }
54
+ export interface UninstallVerifiedPluginOptions {
55
+ removeData?: boolean;
56
+ }
57
+ export declare class VerifiedPluginInstaller {
58
+ private readonly options;
59
+ private readonly fetchImpl;
60
+ private readonly stateStore;
61
+ constructor(options: {
62
+ adapter: DataAdapter;
63
+ trustedKeys: TrustedSigningKey[];
64
+ pluginsPath?: string;
65
+ stateStore?: InstalledPluginStateStore;
66
+ fetch?: PluginBinaryFetch;
67
+ pluginManager?: PluginInstallerManager;
68
+ now?: () => Date;
69
+ bundleVerification?: PluginBundleVerificationMode;
70
+ });
71
+ install(options: InstallVerifiedPluginOptions): Promise<InstalledPluginRecord>;
72
+ installBundle(options: InstallVerifiedPluginBundleOptions): Promise<InstalledPluginRecord>;
73
+ uninstall(pluginId: string, options?: UninstallVerifiedPluginOptions): Promise<void>;
74
+ private resolveRelease;
75
+ private assertReleaseMatchesCatalog;
76
+ private fetchBundle;
77
+ private verifyPluginBundle;
78
+ private installVerifiedBundlePayload;
79
+ private readBundleResponseBytes;
80
+ private emitBundleDownloadProgress;
81
+ private parsePluginManifest;
82
+ private writeStagingFiles;
83
+ private swapIntoPlace;
84
+ private removePluginCodeButKeepData;
85
+ private removeCommunityPluginEnabledState;
86
+ private removeIfExists;
87
+ private get pluginsPath();
88
+ private now;
89
+ }
@@ -0,0 +1,395 @@
1
+ import { basename, dirname, joinPath } from "../storage/path";
2
+ import { checkReleaseManifestCompatibility } from "./compatibility";
3
+ import { PluginDistributionError } from "./errors";
4
+ import { InstalledPluginStateStore, ensureFolder, } from "./installed-plugin-state";
5
+ import { canUsePluginBundleWorker, verifyPluginBundlePayloadInWorker, } from "./plugin-bundle-worker";
6
+ import { exactArrayBuffer, throwIfAborted, verifyPluginBundlePayload, } from "./plugin-bundle-verifier";
7
+ import { assertPluginIdAllowedForProvenance } from "./reserved-ids";
8
+ import { validatePluginReleaseRuntime } from "./runtime-validation";
9
+ export class VerifiedPluginInstaller {
10
+ options;
11
+ fetchImpl;
12
+ stateStore;
13
+ constructor(options) {
14
+ this.options = options;
15
+ this.fetchImpl =
16
+ options.fetch ??
17
+ ((url, init) => globalThis.fetch(url, init));
18
+ this.stateStore =
19
+ options.stateStore ??
20
+ new InstalledPluginStateStore(options.adapter, { now: options.now });
21
+ }
22
+ async install(options) {
23
+ throwIfAborted(options.signal);
24
+ const release = this.resolveRelease(options.detail, options.version);
25
+ const bundleUrl = new URL(release.bundle.url, options.entry.detail).toString();
26
+ const bundle = await this.fetchBundle(bundleUrl, release.bundle, options);
27
+ const payload = await this.verifyPluginBundle(bundle, {
28
+ ...options,
29
+ expectedBundle: release.bundle,
30
+ });
31
+ this.assertReleaseMatchesCatalog(options.entry, options.detail, release, payload.releaseManifest);
32
+ return this.installVerifiedBundlePayload(payload, {
33
+ enable: options.enable,
34
+ registryId: options.registryId,
35
+ registryUrl: options.registryUrl,
36
+ provenance: options.provenance ?? options.entry.channel,
37
+ compatibility: options.compatibility,
38
+ signal: options.signal,
39
+ onProgress: options.onProgress,
40
+ });
41
+ }
42
+ async installBundle(options) {
43
+ throwIfAborted(options.signal);
44
+ const payload = await this.verifyPluginBundle(options.bundle, options);
45
+ return this.installVerifiedBundlePayload(payload, {
46
+ ...options,
47
+ provenance: options.provenance ?? "official",
48
+ });
49
+ }
50
+ async uninstall(pluginId, options = {}) {
51
+ await this.options.pluginManager?.disablePlugin?.(pluginId);
52
+ const pluginPath = joinPath(this.pluginsPath, pluginId);
53
+ if (options.removeData) {
54
+ await this.removeIfExists(pluginPath);
55
+ }
56
+ else {
57
+ await this.removePluginCodeButKeepData(pluginPath);
58
+ }
59
+ await this.removeCommunityPluginEnabledState(pluginId);
60
+ await this.stateStore.remove(pluginId);
61
+ }
62
+ resolveRelease(detail, version) {
63
+ const release = detail.versions[version ?? detail.latestVersion];
64
+ if (!release) {
65
+ throw new PluginDistributionError("metadata-invalid", `No release metadata found for ${detail.id}@${version ?? detail.latestVersion}.`);
66
+ }
67
+ return release;
68
+ }
69
+ assertReleaseMatchesCatalog(entry, detail, release, manifest) {
70
+ if (entry.id !== detail.id ||
71
+ entry.id !== manifest.pluginId ||
72
+ release.version !== manifest.version ||
73
+ entry.channel !== manifest.channel) {
74
+ throw new PluginDistributionError("metadata-invalid", "Release manifest does not match catalog metadata.", {
75
+ details: {
76
+ entryId: entry.id,
77
+ detailId: detail.id,
78
+ releaseVersion: release.version,
79
+ manifestPluginId: manifest.pluginId,
80
+ manifestVersion: manifest.version,
81
+ },
82
+ });
83
+ }
84
+ }
85
+ async fetchBundle(url, expectedBundle, options) {
86
+ throwIfAborted(options.signal);
87
+ const response = await this.fetchImpl(url, { signal: options.signal });
88
+ if (!response.ok) {
89
+ throw new PluginDistributionError("metadata-invalid", `Plugin bundle fetch failed for ${url}: ${response.status} ${response.statusText}`, { details: { url, status: response.status } });
90
+ }
91
+ const bytes = await this.readBundleResponseBytes(response, {
92
+ signal: options.signal,
93
+ onProgress: options.onProgress,
94
+ totalBytes: expectedBundle.size,
95
+ });
96
+ return bytes;
97
+ }
98
+ async verifyPluginBundle(bundle, options) {
99
+ throwIfAborted(options.signal);
100
+ const verifierOptions = {
101
+ bundle,
102
+ trustedKeys: this.options.trustedKeys,
103
+ expectedBundle: options.expectedBundle,
104
+ signal: options.signal,
105
+ onProgress: options.onProgress,
106
+ };
107
+ const mode = this.options.bundleVerification ?? "auto";
108
+ if (mode !== "main-thread" &&
109
+ (mode === "worker" || canUsePluginBundleWorker())) {
110
+ try {
111
+ return await verifyPluginBundlePayloadInWorker(verifierOptions);
112
+ }
113
+ catch (error) {
114
+ if (mode === "worker" || isAbortError(error)) {
115
+ throw error;
116
+ }
117
+ }
118
+ }
119
+ return verifyPluginBundlePayload(verifierOptions);
120
+ }
121
+ async installVerifiedBundlePayload(payload, options) {
122
+ const { releaseEnvelope, releaseManifest, releaseManifestSha256, files } = payload;
123
+ if (options.compatibility) {
124
+ const compatibility = checkReleaseManifestCompatibility(releaseManifest, options.compatibility);
125
+ if (!compatibility.compatible) {
126
+ throw new PluginDistributionError("compatibility-failed", `Plugin ${releaseManifest.pluginId} is not compatible: ${compatibility.reasons.join(", ")}`, { details: { reasons: compatibility.reasons } });
127
+ }
128
+ }
129
+ const provenance = options.provenance ?? "official";
130
+ assertPluginIdAllowedForProvenance(releaseManifest.pluginId, provenance);
131
+ if (provenance === "official" && releaseManifest.channel !== "official") {
132
+ throw new PluginDistributionError("metadata-invalid", "Official plugin bundle channel does not match installer provenance.");
133
+ }
134
+ throwIfAborted(options.signal);
135
+ options.onProgress?.({
136
+ phase: "verifying-files",
137
+ message: "Validating plugin runtime metadata",
138
+ });
139
+ const pluginManifest = this.parsePluginManifest(files.get("manifest.json"), releaseManifest);
140
+ const runtimeValidation = validatePluginReleaseRuntime({
141
+ releaseManifest,
142
+ pluginManifest,
143
+ files,
144
+ provenance,
145
+ });
146
+ if (runtimeValidation.errors.length) {
147
+ throw new PluginDistributionError("metadata-invalid", `Plugin ${releaseManifest.pluginId} release runtime metadata is invalid: ${runtimeValidation.errors
148
+ .map((item) => item.message)
149
+ .join("; ")}`, { details: { diagnostics: runtimeValidation.errors } });
150
+ }
151
+ const stagingPath = joinPath(this.pluginsPath, ".installing", `${releaseManifest.pluginId}-${Date.now()}`);
152
+ const finalPath = joinPath(this.pluginsPath, releaseManifest.pluginId);
153
+ try {
154
+ throwIfAborted(options.signal);
155
+ options.onProgress?.({
156
+ phase: "staging",
157
+ message: "Staging plugin files",
158
+ processedBytes: 0,
159
+ totalBytes: totalFileBytes(files),
160
+ });
161
+ await this.writeStagingFiles(stagingPath, files, {
162
+ signal: options.signal,
163
+ onProgress: options.onProgress,
164
+ });
165
+ options.onProgress?.({
166
+ phase: "installing",
167
+ message: "Installing plugin files",
168
+ });
169
+ await this.swapIntoPlace(stagingPath, finalPath);
170
+ }
171
+ catch (error) {
172
+ await this.removeIfExists(stagingPath);
173
+ if (!(await this.options.adapter.exists(finalPath))) {
174
+ await this.removeIfExists(finalPath);
175
+ }
176
+ throw error;
177
+ }
178
+ const now = this.now();
179
+ const record = {
180
+ pluginId: releaseManifest.pluginId,
181
+ installedVersion: releaseManifest.version,
182
+ installedAt: now,
183
+ updatedAt: now,
184
+ provenance,
185
+ registryId: options.registryId,
186
+ registryUrl: options.registryUrl,
187
+ releaseManifestSha256,
188
+ files: releaseManifest.files.map((file) => ({
189
+ path: file.path,
190
+ sha256: file.sha256,
191
+ size: file.size,
192
+ })),
193
+ ...(runtimeValidation.warnings.length
194
+ ? { runtimeWarnings: runtimeValidation.warnings }
195
+ : {}),
196
+ signature: releaseEnvelope.signatures[0],
197
+ restartRequired: Boolean(this.options.pluginManager),
198
+ };
199
+ await this.stateStore.upsert(record);
200
+ if (this.options.pluginManager?.loadPlugin) {
201
+ options.onProgress?.({
202
+ phase: "loading",
203
+ message: "Loading installed plugin",
204
+ });
205
+ }
206
+ const loaded = await this.options.pluginManager?.loadPlugin?.(finalPath, {
207
+ provenance,
208
+ });
209
+ const shouldEnable = options.enable ?? true;
210
+ const diagnostics = this.options.pluginManager?.getCommunityPluginDiagnostics?.(releaseManifest.pluginId) ?? null;
211
+ const cleanDormantExtension = diagnostics?.state === "dormant" &&
212
+ (diagnostics.lastFailureMessage ?? null) === null;
213
+ let enabled = false;
214
+ if (shouldEnable &&
215
+ (loaded || cleanDormantExtension) &&
216
+ this.options.pluginManager?.enablePlugin) {
217
+ options.onProgress?.({
218
+ phase: "enabling",
219
+ message: "Enabling installed plugin",
220
+ });
221
+ enabled = await this.options.pluginManager.enablePlugin(releaseManifest.pluginId);
222
+ }
223
+ record.restartRequired = Boolean(this.options.pluginManager && !loaded && !enabled);
224
+ await this.stateStore.upsert(record);
225
+ return record;
226
+ }
227
+ async readBundleResponseBytes(response, options) {
228
+ const progress = {
229
+ downloadedBytes: 0,
230
+ totalBytes: options.totalBytes,
231
+ };
232
+ if (response.body) {
233
+ const reader = response.body.getReader();
234
+ const chunks = [];
235
+ let byteLength = 0;
236
+ try {
237
+ while (true) {
238
+ throwIfAborted(options.signal);
239
+ const { done, value } = await reader.read();
240
+ if (done)
241
+ break;
242
+ if (!value)
243
+ continue;
244
+ chunks.push(value);
245
+ byteLength += value.byteLength;
246
+ progress.downloadedBytes += value.byteLength;
247
+ this.emitBundleDownloadProgress(progress, options);
248
+ }
249
+ }
250
+ finally {
251
+ reader.releaseLock();
252
+ }
253
+ return concatChunks(chunks, byteLength);
254
+ }
255
+ throwIfAborted(options.signal);
256
+ const bytes = new Uint8Array(await response.arrayBuffer());
257
+ throwIfAborted(options.signal);
258
+ progress.downloadedBytes += bytes.byteLength;
259
+ this.emitBundleDownloadProgress(progress, options);
260
+ return bytes;
261
+ }
262
+ emitBundleDownloadProgress(progress, options) {
263
+ options.onProgress?.({
264
+ phase: "downloading-bundle",
265
+ message: "Downloading plugin bundle",
266
+ downloadedBytes: progress.downloadedBytes,
267
+ totalBytes: progress.totalBytes,
268
+ });
269
+ }
270
+ parsePluginManifest(data, releaseManifest) {
271
+ if (!data) {
272
+ throw new PluginDistributionError("metadata-invalid", "Plugin release did not include manifest.json.");
273
+ }
274
+ const manifest = JSON.parse(new TextDecoder().decode(data));
275
+ if (manifest.id !== releaseManifest.pluginId ||
276
+ manifest.version !== releaseManifest.version) {
277
+ throw new PluginDistributionError("metadata-invalid", "Plugin manifest id/version does not match the signed release manifest.", {
278
+ details: {
279
+ manifestId: manifest.id,
280
+ manifestVersion: manifest.version,
281
+ releasePluginId: releaseManifest.pluginId,
282
+ releaseVersion: releaseManifest.version,
283
+ },
284
+ });
285
+ }
286
+ return manifest;
287
+ }
288
+ async writeStagingFiles(stagingPath, files, options) {
289
+ await ensureFolder(this.options.adapter, stagingPath);
290
+ const entries = [...files.entries()];
291
+ const fileCount = entries.length;
292
+ const totalBytes = entries.reduce((sum, [, bytes]) => sum + bytes.byteLength, 0);
293
+ let processedBytes = 0;
294
+ for (const [index, [path, bytes]] of entries.entries()) {
295
+ throwIfAborted(options.signal);
296
+ const target = joinPath(stagingPath, path);
297
+ await ensureFolder(this.options.adapter, dirname(target));
298
+ throwIfAborted(options.signal);
299
+ await this.options.adapter.writeBinary(target, exactArrayBuffer(bytes));
300
+ processedBytes += bytes.byteLength;
301
+ options.onProgress?.({
302
+ phase: "staging",
303
+ message: `Staging ${path}`,
304
+ filePath: path,
305
+ fileIndex: index + 1,
306
+ fileCount,
307
+ processedBytes,
308
+ totalBytes,
309
+ });
310
+ }
311
+ }
312
+ async swapIntoPlace(stagingPath, finalPath) {
313
+ await ensureFolder(this.options.adapter, this.pluginsPath);
314
+ const backupPath = joinPath(this.pluginsPath, ".installing", `${basename(finalPath)}-backup-${Date.now()}`);
315
+ const hadExisting = await this.options.adapter.exists(finalPath);
316
+ if (hadExisting) {
317
+ await this.options.adapter.rename(finalPath, backupPath);
318
+ }
319
+ try {
320
+ await this.options.adapter.rename(stagingPath, finalPath);
321
+ if (hadExisting)
322
+ await this.removeIfExists(backupPath);
323
+ }
324
+ catch (error) {
325
+ if (hadExisting && !(await this.options.adapter.exists(finalPath))) {
326
+ await this.options.adapter.rename(backupPath, finalPath);
327
+ }
328
+ throw error;
329
+ }
330
+ }
331
+ async removePluginCodeButKeepData(pluginPath) {
332
+ if (!(await this.options.adapter.exists(pluginPath)))
333
+ return;
334
+ const listing = await this.options.adapter.list(pluginPath);
335
+ for (const file of listing.files) {
336
+ if (file !== "data.json") {
337
+ await this.options.adapter.remove(joinPath(pluginPath, file));
338
+ }
339
+ }
340
+ for (const folder of listing.folders) {
341
+ await this.options.adapter.rmdir(joinPath(pluginPath, folder), true);
342
+ }
343
+ }
344
+ async removeCommunityPluginEnabledState(pluginId) {
345
+ const enabledPath = ".obsidian/community-plugins.json";
346
+ try {
347
+ const enabled = JSON.parse(await this.options.adapter.read(enabledPath));
348
+ if (!Array.isArray(enabled))
349
+ return;
350
+ await this.options.adapter.write(enabledPath, JSON.stringify(enabled.filter((id) => id !== pluginId), null, 2));
351
+ }
352
+ catch {
353
+ // Missing or malformed enabled-state files should not block uninstall.
354
+ }
355
+ }
356
+ async removeIfExists(path) {
357
+ const stat = await this.options.adapter.stat(path);
358
+ if (!stat)
359
+ return;
360
+ if (stat.type === "folder") {
361
+ await this.options.adapter.rmdir(path, true);
362
+ }
363
+ else {
364
+ await this.options.adapter.remove(path);
365
+ }
366
+ }
367
+ get pluginsPath() {
368
+ return this.options.pluginsPath ?? ".obsidian/plugins";
369
+ }
370
+ now() {
371
+ return (this.options.now?.() ?? new Date()).toISOString();
372
+ }
373
+ }
374
+ function concatChunks(chunks, byteLength) {
375
+ const bytes = new Uint8Array(byteLength);
376
+ let offset = 0;
377
+ for (const chunk of chunks) {
378
+ bytes.set(chunk, offset);
379
+ offset += chunk.byteLength;
380
+ }
381
+ return bytes;
382
+ }
383
+ function totalFileBytes(files) {
384
+ let total = 0;
385
+ for (const bytes of files.values()) {
386
+ total += bytes.byteLength;
387
+ }
388
+ return total;
389
+ }
390
+ function isAbortError(error) {
391
+ return (typeof error === "object" &&
392
+ error !== null &&
393
+ "name" in error &&
394
+ error.name === "AbortError");
395
+ }
@@ -0,0 +1,128 @@
1
+ import { EventDispatcher } from "../events";
2
+ import type { DataAdapter } from "../storage/fs";
3
+ import { type PluginBinaryFetch, type PluginInstallerManager } from "./installer";
4
+ import type { PluginBundleVerificationMode } from "./plugin-bundle-worker";
5
+ import type { InstalledPluginRecord, PluginCatalogDetail, PluginCatalogEntry, PluginCatalogIndex, PluginCompatibilityResult, PluginPlatform, PluginProvenance, PluginRegistryChannel, PluginRevocationRecord, PluginRegistrySource, TrustedSigningKey } from "./types";
6
+ export type PluginInstallPhase = "resolving" | "fetching-catalog" | "fetching-release" | "verifying-signature" | "downloading-bundle" | "verifying-bundle" | "extracting-files" | "verifying-files" | "staging" | "installing" | "loading" | "enabling" | "complete" | "failed";
7
+ export interface PluginInstallProgressEvent {
8
+ pluginId: string;
9
+ phase: PluginInstallPhase;
10
+ message?: string;
11
+ downloadedBytes?: number;
12
+ processedBytes?: number;
13
+ totalBytes?: number;
14
+ filePath?: string;
15
+ fileIndex?: number;
16
+ fileCount?: number;
17
+ }
18
+ export type PluginInstallProgressListener = (event: PluginInstallProgressEvent) => void;
19
+ export interface PluginSearchQuery {
20
+ text?: string;
21
+ category?: string;
22
+ channel?: PluginRegistryChannel | "all";
23
+ installed?: boolean;
24
+ compatibleOnly?: boolean;
25
+ }
26
+ export interface InstallPluginOptions {
27
+ version?: string;
28
+ /**
29
+ * Defaults to true for direct installs. Updates pass the previous enabled
30
+ * state explicitly so disabled plugins stay disabled.
31
+ */
32
+ enable?: boolean;
33
+ registryId?: string;
34
+ requireOfficial?: boolean;
35
+ signal?: AbortSignal;
36
+ }
37
+ export interface InstallPluginBundleOptions {
38
+ /** Defaults to true for manually selected official bundles. */
39
+ enable?: boolean;
40
+ signal?: AbortSignal;
41
+ }
42
+ export interface UpdatePluginOptions {
43
+ signal?: AbortSignal;
44
+ }
45
+ export interface UninstallPluginOptions {
46
+ removeData?: boolean;
47
+ }
48
+ export interface PluginUpdateInfo {
49
+ id: string;
50
+ name: string;
51
+ currentVersion: string;
52
+ latestVersion: string;
53
+ targetVersion: string;
54
+ provenance: PluginProvenance;
55
+ registryId?: string;
56
+ compatible: boolean;
57
+ canUpdate: boolean;
58
+ bundleSize?: number;
59
+ status: "update-available" | "incompatible" | "revoked";
60
+ reasons: PluginCompatibilityResult["reasons"];
61
+ revoked?: PluginRevocationRecord;
62
+ }
63
+ export interface PluginDistributionManager {
64
+ refreshCatalog(options?: {
65
+ force?: boolean;
66
+ }): Promise<PluginCatalogIndex>;
67
+ search(query?: PluginSearchQuery): PluginCatalogEntry[];
68
+ getCatalogEntry(pluginId: string): PluginCatalogEntry | undefined;
69
+ getPluginDetail(pluginId: string): Promise<PluginCatalogDetail | null>;
70
+ install(pluginId: string, options?: InstallPluginOptions): Promise<InstalledPluginRecord>;
71
+ installBundle(bundle: ArrayBuffer | Uint8Array, options?: InstallPluginBundleOptions): Promise<InstalledPluginRecord>;
72
+ update(pluginId: string, version?: string, options?: UpdatePluginOptions): Promise<InstalledPluginRecord | null>;
73
+ uninstall(pluginId: string, options?: UninstallPluginOptions): Promise<void>;
74
+ listInstalled(): Promise<InstalledPluginRecord[]>;
75
+ getInstalled(pluginId: string): Promise<InstalledPluginRecord | null>;
76
+ listUpdates(): Promise<PluginUpdateInfo[]>;
77
+ addProgressListener(listener: PluginInstallProgressListener): () => void;
78
+ }
79
+ export interface DefaultPluginDistributionManagerOptions {
80
+ adapter: DataAdapter;
81
+ appVersion: string;
82
+ platform?: PluginPlatform;
83
+ workspaceTrusted?: () => Promise<boolean> | boolean;
84
+ registries?: PluginRegistrySource[];
85
+ trustedKeys?: TrustedSigningKey[];
86
+ fetch?: PluginBinaryFetch;
87
+ pluginManager?: PluginInstallerManager;
88
+ bundleVerification?: PluginBundleVerificationMode;
89
+ }
90
+ export declare const DEFAULT_OFFICIAL_PLUGIN_REGISTRY_SOURCE: PluginRegistrySource;
91
+ export declare const DEFAULT_PLUGIN_REGISTRY_SOURCES: PluginRegistrySource[];
92
+ export declare const EMBEDDED_PLUGIN_REGISTRY_KEYS: TrustedSigningKey[];
93
+ export declare class DefaultPluginDistributionManager extends EventDispatcher<{
94
+ progress: [PluginInstallProgressEvent];
95
+ }> implements PluginDistributionManager {
96
+ private readonly options;
97
+ private catalog;
98
+ private readonly registryClient;
99
+ private readonly stateStore;
100
+ private readonly installer;
101
+ private readonly registries;
102
+ private readonly trustedKeys;
103
+ private installedIds;
104
+ private revocations;
105
+ constructor(options: DefaultPluginDistributionManagerOptions);
106
+ refreshCatalog(_options?: {
107
+ force?: boolean;
108
+ }): Promise<PluginCatalogIndex>;
109
+ search(query?: PluginSearchQuery): PluginCatalogEntry[];
110
+ getCatalogEntry(pluginId: string): PluginCatalogEntry | undefined;
111
+ getPluginDetail(pluginId: string): Promise<PluginCatalogDetail | null>;
112
+ install(pluginId: string, options?: InstallPluginOptions): Promise<InstalledPluginRecord>;
113
+ installBundle(bundle: ArrayBuffer | Uint8Array, options?: InstallPluginBundleOptions): Promise<InstalledPluginRecord>;
114
+ update(pluginId: string, version?: string, options?: UpdatePluginOptions): Promise<InstalledPluginRecord | null>;
115
+ uninstall(pluginId: string, options?: UninstallPluginOptions): Promise<void>;
116
+ listInstalled(): Promise<InstalledPluginRecord[]>;
117
+ getInstalled(pluginId: string): Promise<InstalledPluginRecord | null>;
118
+ listUpdates(): Promise<PluginUpdateInfo[]>;
119
+ addProgressListener(listener: PluginInstallProgressListener): () => void;
120
+ private requireEntry;
121
+ private sourceForEntry;
122
+ private compatibilityInput;
123
+ private get platform();
124
+ private isWorkspaceTrusted;
125
+ private applyRevocationsToInstalled;
126
+ private revocationFor;
127
+ private emitProgress;
128
+ }