@hiai-gg/docsmint 0.5.1 → 0.5.3

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 (72) hide show
  1. package/dist/backend/index.js +47 -8
  2. package/dist/backend-account-runtime-cleanup.js +20 -3
  3. package/dist/backend-api-key-facade.js +20 -3
  4. package/dist/backend-pipeline-cancellation.js +20 -3
  5. package/dist/frontend/{CategoryDialog-DmlX0Z97.js → CategoryDialog-BYAFjX7E.js} +152 -138
  6. package/dist/frontend/{FolderNode-D3rN3yLV.js → FolderNode-DAAn_T8_.js} +1 -1
  7. package/dist/frontend/{HiaiDocsExtensionProvider-CMiTXi2J.js → HiaiDocsExtensionProvider-OSn96BBw.js} +1 -1
  8. package/dist/frontend/SettingsDialog-CyZSOjLE.js +1024 -0
  9. package/dist/frontend/ShareDialog-BC-Jl6v1.js +257 -0
  10. package/dist/frontend/{Sidebar-BthP-jOS.js → Sidebar-B-zCJT9i.js} +348 -332
  11. package/dist/frontend/api/attachments.js +1 -1
  12. package/dist/frontend/app-shell.js +160 -126
  13. package/dist/frontend/{attachments-C2DBzU-r.js → attachments-B8AuDjno.js} +8 -5
  14. package/dist/frontend/components/category-dialog.js +1 -1
  15. package/dist/frontend/components/editor/document-editor.js +1 -1
  16. package/dist/frontend/components/folder-node.js +1 -1
  17. package/dist/frontend/components/save-as-dialog.js +1 -1
  18. package/dist/frontend/components/settings.js +1 -1
  19. package/dist/frontend/components/share-dialog.js +1 -1
  20. package/dist/frontend/components/sidebar.js +1 -1
  21. package/dist/frontend/{context-KLiM3QQ0.js → context-D0zPFXZ4.js} +2 -0
  22. package/dist/frontend/dashboard.js +11 -5
  23. package/dist/frontend/extension.d.ts +3 -2
  24. package/dist/frontend/extension.js +1 -1
  25. package/dist/frontend/folder-refresh.js +1 -1
  26. package/dist/frontend/frontend.css +1 -1
  27. package/dist/frontend/search.js +593 -575
  28. package/dist/frontend/shared-document.js +1 -1
  29. package/dist/frontend/{subfolders-refresh-store.svelte-B2dKVmgz.js → subfolders-refresh-store.svelte-DxP21a1c.js} +1 -0
  30. package/dist/frontend-ssr/api/attachments.js +1 -1
  31. package/dist/frontend-ssr/app-shell.js +59 -5
  32. package/dist/frontend-ssr/assets/{CategoryDialog-DDu37Oub.js → CategoryDialog-BLxVoynx.js} +27 -10
  33. package/dist/frontend-ssr/assets/{CreateSnapshotDialog-DNAjd4eD.js → CreateSnapshotDialog-b6O0nUVp.js} +1 -1
  34. package/dist/frontend-ssr/assets/{DatePicker-Cp6Qmgdb.js → DatePicker-D84cJ-Eq.js} +1 -1
  35. package/dist/frontend-ssr/assets/{FolderNode-CrLWqHJH.js → FolderNode-kmilhDjO.js} +2 -2
  36. package/dist/frontend-ssr/assets/{HiaiDocsExtensionProvider-B_MrN08c.js → HiaiDocsExtensionProvider-BRKWmcDd.js} +1 -1
  37. package/dist/frontend-ssr/assets/{SettingsDialog-BymUxBgg.js → SettingsDialog-DVp0OxPO.js} +23 -9
  38. package/dist/frontend-ssr/assets/ShareDialog-BZd28sg-.js +45 -0
  39. package/dist/frontend-ssr/assets/{Sidebar-CI8YKbrY.js → Sidebar-CO9LZRPa.js} +39 -12
  40. package/dist/frontend-ssr/assets/{TagCreateDialog-B7wDbVqG.js → TagCreateDialog-DUPMitlL.js} +1 -1
  41. package/dist/frontend-ssr/assets/{attachments-CXgatN0B.js → attachments-Cj3fQyUp.js} +11 -4
  42. package/dist/frontend-ssr/assets/{confirm-dialog-B3C0WeMn.js → confirm-dialog-XuyaL8sr.js} +1 -1
  43. package/dist/frontend-ssr/assets/{context-BtCMqdVe.js → context-Bi_mO-NS.js} +2 -0
  44. package/dist/frontend-ssr/assets/{messages-D-auzk9H.js → messages-BAQzILs4.js} +1 -1
  45. package/dist/frontend-ssr/assets/{subfolders-refresh-store.svelte-DAh4gT16.js → subfolders-refresh-store.svelte-CXHxQWKh.js} +1 -0
  46. package/dist/frontend-ssr/components/category-dialog.js +1 -1
  47. package/dist/frontend-ssr/components/create-snapshot-dialog.js +1 -1
  48. package/dist/frontend-ssr/components/editor/document-editor.js +2 -2
  49. package/dist/frontend-ssr/components/editor/document-title.js +1 -1
  50. package/dist/frontend-ssr/components/editor/markdown-toggle.js +1 -1
  51. package/dist/frontend-ssr/components/folder-node.js +1 -1
  52. package/dist/frontend-ssr/components/save-as-dialog.js +2 -2
  53. package/dist/frontend-ssr/components/settings.js +1 -1
  54. package/dist/frontend-ssr/components/share-dialog.js +1 -1
  55. package/dist/frontend-ssr/components/sidebar.js +1 -1
  56. package/dist/frontend-ssr/components/tag-create-dialog.js +1 -1
  57. package/dist/frontend-ssr/components/version-history.js +2 -2
  58. package/dist/frontend-ssr/dashboard.js +13 -8
  59. package/dist/frontend-ssr/extension.js +1 -1
  60. package/dist/frontend-ssr/folder-refresh.js +1 -1
  61. package/dist/frontend-ssr/i18n.js +1 -1
  62. package/dist/frontend-ssr/search.js +55 -36
  63. package/dist/frontend-ssr/shared-document.js +1 -1
  64. package/dist/lifecycle-runtime.js +18 -3
  65. package/dist/types.d.ts +5 -0
  66. package/package.json +1 -1
  67. package/packages/cli/src/index.ts +1 -1
  68. package/packages/db/src/schema.ts +17 -2
  69. package/packages/mcp-server/src/index.ts +1 -1
  70. package/dist/frontend/SettingsDialog-DEx1eEZm.js +0 -1016
  71. package/dist/frontend/ShareDialog-uEf8Ks02.js +0 -166
  72. package/dist/frontend-ssr/assets/ShareDialog-B82t8oJi.js +0 -56
@@ -1,4 +1,4 @@
1
- import { Bt as editor_markdown_placeholder, zt as editor_markdown_label } from "../../assets/messages-D-auzk9H.js";
1
+ import { Bt as editor_markdown_placeholder, zt as editor_markdown_label } from "../../assets/messages-BAQzILs4.js";
2
2
  import { t as Copy } from "../../assets/copy-DkkCPkBL.js";
3
3
  import "../../assets/markdown-CjqvGi5W.js";
4
4
  import * as $ from "svelte/internal/server";
@@ -1,2 +1,2 @@
1
- import { t as FolderNode } from "../assets/FolderNode-CrLWqHJH.js";
1
+ import { t as FolderNode } from "../assets/FolderNode-kmilhDjO.js";
2
2
  export { FolderNode };
@@ -1,4 +1,4 @@
1
- import { _n as action_cancel, vn as action_save } from "../assets/messages-D-auzk9H.js";
1
+ import { _n as action_cancel, vn as action_save } from "../assets/messages-BAQzILs4.js";
2
2
  import { t as Chevron_down } from "../assets/chevron-down-CvqKATjM.js";
3
3
  import { t as FolderTreeSelector } from "../assets/FolderTreeSelector-Bxi8EqMm.js";
4
4
  import { t as Loader_circle } from "../assets/loader-circle-CIEWGyfP.js";
@@ -7,7 +7,7 @@ import { a as Dialog, i as Dialog_description, n as Dialog_header, o as Button,
7
7
  import { t as Label } from "../assets/label-Bj8-TfFN.js";
8
8
  import "../assets/categories-av9xjeg5.js";
9
9
  import { a as Select, i as Select_content, n as Select_trigger, r as Select_item, t as Select_value } from "../assets/select-value-DBhbkNcc.js";
10
- import { d as refreshFolders } from "../assets/subfolders-refresh-store.svelte-DAh4gT16.js";
10
+ import { d as refreshFolders } from "../assets/subfolders-refresh-store.svelte-CXHxQWKh.js";
11
11
  import * as $ from "svelte/internal/server";
12
12
  //#region src/lib/components/SaveAsDialog.svelte
13
13
  function SaveAsDialog($$renderer, $$props) {
@@ -1,2 +1,2 @@
1
- import { t as SettingsDialog } from "../assets/SettingsDialog-BymUxBgg.js";
1
+ import { t as SettingsDialog } from "../assets/SettingsDialog-DVp0OxPO.js";
2
2
  export { SettingsDialog };
@@ -1,2 +1,2 @@
1
- import { t as ShareDialog } from "../assets/ShareDialog-B82t8oJi.js";
1
+ import { t as ShareDialog } from "../assets/ShareDialog-BZd28sg-.js";
2
2
  export { ShareDialog };
@@ -1,2 +1,2 @@
1
- import { t as Sidebar } from "../assets/Sidebar-CI8YKbrY.js";
1
+ import { t as Sidebar } from "../assets/Sidebar-CO9LZRPa.js";
2
2
  export { Sidebar };
@@ -1,2 +1,2 @@
1
- import { t as TagCreateDialog } from "../assets/TagCreateDialog-B7wDbVqG.js";
1
+ import { t as TagCreateDialog } from "../assets/TagCreateDialog-DUPMitlL.js";
2
2
  export { TagCreateDialog };
@@ -1,4 +1,4 @@
1
- import { Ct as version_badge_snapshot, Ft as version_restore_confirm, It as version_restore_short, Lt as version_restore, Pt as version_create_snapshot, Rt as version_history_title, St as version_restored_from, T as version_history_empty, Tt as version_filter_all, _n as action_cancel, bn as error_generic, cn as time_hours_ago, ln as time_minutes_ago, sn as time_days_ago, un as action_loading, wt as version_filter_snapshots, xt as version_restore_failed } from "../assets/messages-D-auzk9H.js";
1
+ import { Ct as version_badge_snapshot, Ft as version_restore_confirm, It as version_restore_short, Lt as version_restore, Pt as version_create_snapshot, Rt as version_history_title, St as version_restored_from, T as version_history_empty, Tt as version_filter_all, _n as action_cancel, bn as error_generic, cn as time_hours_ago, ln as time_minutes_ago, sn as time_days_ago, un as action_loading, wt as version_filter_snapshots, xt as version_restore_failed } from "../assets/messages-BAQzILs4.js";
2
2
  import { t as Icon } from "../assets/Icon-QwirKi9Y.js";
3
3
  import { t as Camera } from "../assets/camera-D6s20LDi.js";
4
4
  import { t as Clock } from "../assets/clock-CzsE58TH.js";
@@ -7,7 +7,7 @@ import { t as Circle_check } from "../assets/circle-check-CPS9dKEo.js";
7
7
  import { t as Loader_circle } from "../assets/loader-circle-CIEWGyfP.js";
8
8
  import { n as apiFetch, t as ApiError } from "../assets/client-DZMkDkDn.js";
9
9
  import { t as ConfirmDialog } from "../assets/ConfirmDialog-BhAelejz.js";
10
- import { t as CreateSnapshotDialog } from "../assets/CreateSnapshotDialog-DNAjd4eD.js";
10
+ import { t as CreateSnapshotDialog } from "../assets/CreateSnapshotDialog-b6O0nUVp.js";
11
11
  import * as $ from "svelte/internal/server";
12
12
  //#region ../node_modules/.bun/lucide-svelte@0.577.0+ff5f301bb2db9a0d/node_modules/lucide-svelte/dist/icons/history.svelte
13
13
  function History($$renderer, $$props) {
@@ -1,7 +1,7 @@
1
- import { Br as dashboard_title, Cr as doc_move_to_folder, Dr as doc_updated, Er as doc_open_menu, Lr as dashboard_page_title, Rr as dashboard_new_document, Tr as doc_open, Vr as nav_documents, _n as action_cancel, _r as folders_delete_title, _t as folder_page_title, a as import_progress_error, br as folders_empty_description, bt as editor_more_options, c as import_progress_queued, cr as folders_move, d as import_progress_title, dr as folders_document, f as sidebar_uncategorized, fn as action_back, fr as folders_documents, gn as action_delete, gr as folders_delete_description, gt as share_copied, i as import_progress_summary, k as dashboard_import, kr as doc_share, l as import_progress_uploading, lr as folders_subfolder, n as import_progress_empty, o as import_progress_done, pn as action_close, r as import_progress_close, s as import_progress_processing, u as import_progress_total, un as action_loading, ur as folders_subfolders, vn as action_save, vr as folders_delete, wr as doc_duplicate, xr as folders_empty, yr as folders_rename, yt as action_copy_content, zr as dashboard_subtitle } from "./assets/messages-D-auzk9H.js";
1
+ import { Cr as doc_open, Dr as doc_share, Fr as dashboard_page_title, Ir as dashboard_new_document, Lr as dashboard_subtitle, Rr as dashboard_title, Sr as doc_duplicate, Tr as doc_updated, _n as action_cancel, _r as folders_rename, _t as folder_page_title, a as import_progress_error, bt as editor_more_options, c as import_progress_queued, cr as folders_subfolders, d as import_progress_title, f as sidebar_uncategorized, fn as action_back, gn as action_delete, gr as folders_delete, gt as share_copied, hr as folders_delete_title, i as import_progress_summary, k as dashboard_import, l as import_progress_uploading, lr as folders_document, mr as folders_delete_description, n as import_progress_empty, o as import_progress_done, or as folders_move, pn as action_close, r as import_progress_close, s as import_progress_processing, sr as folders_subfolder, u as import_progress_total, un as action_loading, ur as folders_documents, vn as action_save, vr as folders_empty_description, wr as doc_open_menu, xr as doc_move_to_folder, yr as folders_empty, yt as action_copy_content, zr as nav_documents } from "./assets/messages-BAQzILs4.js";
2
2
  import { t as Icon } from "./assets/Icon-QwirKi9Y.js";
3
- import { i as Folder_kanban, n as Badge, r as X, t as DatePicker } from "./assets/DatePicker-Cp6Qmgdb.js";
4
- import { i as Check, n as Plus, r as File_text, t as FolderDialog } from "./assets/confirm-dialog-B3C0WeMn.js";
3
+ import { i as Folder_kanban, n as Badge, r as X, t as DatePicker } from "./assets/DatePicker-D84cJ-Eq.js";
4
+ import { i as Check, n as Plus, r as File_text, t as FolderDialog } from "./assets/confirm-dialog-XuyaL8sr.js";
5
5
  import { t as Chevron_down } from "./assets/chevron-down-CvqKATjM.js";
6
6
  import { t as Chevron_right } from "./assets/chevron-right-DKD7WXjz.js";
7
7
  import { t as Copy } from "./assets/copy-DkkCPkBL.js";
@@ -17,15 +17,15 @@ import { a as Dialog, i as Dialog_description, n as Dialog_header, o as Button,
17
17
  import { t as Label } from "./assets/label-Bj8-TfFN.js";
18
18
  import { n as apiFetch } from "./assets/client-DZMkDkDn.js";
19
19
  import "./assets/categories-av9xjeg5.js";
20
- import { t as getFrontendExtensions } from "./assets/context-BtCMqdVe.js";
20
+ import { t as getFrontendExtensions } from "./assets/context-Bi_mO-NS.js";
21
21
  import { t as resolveExtensions } from "./assets/resolve-BqHozBXl.js";
22
22
  import { A as isBrowser, K as watch, et as boxWith, q as Context } from "./assets/floating-layer-anchor-BIAu-252.js";
23
23
  import { a as Select, i as Select_content, n as Select_trigger, r as Select_item, t as Select_value } from "./assets/select-value-DBhbkNcc.js";
24
24
  import { c as updateDocument, i as getDocument } from "./assets/documents-CZ-wQohy.js";
25
25
  import { c as updateFolder, i as duplicateDocument } from "./assets/folders-BX30gHv6.js";
26
26
  import { t as copyToClipboard } from "./assets/clipboard-CXOaoz2W.js";
27
- import { t as ShareDialog } from "./assets/ShareDialog-B82t8oJi.js";
28
- import { d as refreshFolders, n as bumpSubfoldersRefresh } from "./assets/subfolders-refresh-store.svelte-DAh4gT16.js";
27
+ import { t as ShareDialog } from "./assets/ShareDialog-BZd28sg-.js";
28
+ import { d as refreshFolders, n as bumpSubfoldersRefresh } from "./assets/subfolders-refresh-store.svelte-CXHxQWKh.js";
29
29
  import { n as refreshDocs } from "./assets/tag-store.svelte-BM1lUI_P.js";
30
30
  import { t as ConfirmDialog } from "./assets/ConfirmDialog-BhAelejz.js";
31
31
  import * as $ from "svelte/internal/server";
@@ -1900,7 +1900,12 @@ function HiaiDocsDashboardHost($$renderer, $$props) {
1900
1900
  duplicatingDocumentId = null;
1901
1901
  }
1902
1902
  }
1903
- function triggerImport() {}
1903
+ function triggerImport() {
1904
+ if (extensionContext.capabilities?.["docsmint.import.manager"]) {
1905
+ navigateDocsmintRoute(route, "/organize");
1906
+ return;
1907
+ }
1908
+ }
1904
1909
  function closeImport() {
1905
1910
  importOpen = false;
1906
1911
  setTimeout(() => {
@@ -2115,7 +2120,7 @@ function HiaiDocsDashboardHost($$renderer, $$props) {
2115
2120
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2116
2121
  let widget = each_array[$$index];
2117
2122
  const Widget = widget.component;
2118
- $$renderer.push(`<div class="rounded-xl border border-border bg-card p-4"${$.attr("data-hiai-docs-extension-id", widget.id)}>`);
2123
+ $$renderer.push(`<div${$.attr_class($.clsx([widget.chrome === false ? "contents" : "rounded-xl border border-border bg-card p-4", widget.colSpan === 12 && "md:col-span-2"]))}${$.attr("data-hiai-docs-extension-id", widget.id)}>`);
2119
2124
  if (widget.title) {
2120
2125
  $$renderer.push("<!--[0-->");
2121
2126
  $$renderer.push(`<h2 class="mb-3 text-sm font-semibold">${$.escape(widget.title)}</h2>`);
@@ -1,2 +1,2 @@
1
- import { t as HiaiDocsExtensionProvider } from "./assets/HiaiDocsExtensionProvider-B_MrN08c.js";
1
+ import { t as HiaiDocsExtensionProvider } from "./assets/HiaiDocsExtensionProvider-BRKWmcDd.js";
2
2
  export { HiaiDocsExtensionProvider as DocsmintExtensionProvider };
@@ -1,2 +1,2 @@
1
- import { a as getFolderFromRegistry, c as getPendingDocumentPlacement, d as refreshFolders, f as registerDocument, i as getDocumentPlacementNonce, l as getSubfoldersRefresh, m as supersedePendingDocumentPlacement, n as bumpSubfoldersRefresh, o as getGlobalFolderRefreshNonce, p as registerFolder, r as getDocumentFromRegistry, s as getLatestDocumentPlacement, t as acknowledgeDocumentPlacement, u as publishDocumentPlacement } from "./assets/subfolders-refresh-store.svelte-DAh4gT16.js";
1
+ import { a as getFolderFromRegistry, c as getPendingDocumentPlacement, d as refreshFolders, f as registerDocument, i as getDocumentPlacementNonce, l as getSubfoldersRefresh, m as supersedePendingDocumentPlacement, n as bumpSubfoldersRefresh, o as getGlobalFolderRefreshNonce, p as registerFolder, r as getDocumentFromRegistry, s as getLatestDocumentPlacement, t as acknowledgeDocumentPlacement, u as publishDocumentPlacement } from "./assets/subfolders-refresh-store.svelte-CXHxQWKh.js";
2
2
  export { acknowledgeDocumentPlacement, bumpSubfoldersRefresh, getDocumentFromRegistry, getDocumentPlacementNonce, getFolderFromRegistry, getGlobalFolderRefreshNonce, getLatestDocumentPlacement, getPendingDocumentPlacement, getSubfoldersRefresh, publishDocumentPlacement, refreshFolders, registerDocument, registerFolder, supersedePendingDocumentPlacement };
@@ -1,4 +1,4 @@
1
- import { Ur as locales, Wr as setLocale$1, t as messages_exports } from "./assets/messages-D-auzk9H.js";
1
+ import { Hr as setLocale$1, Vr as locales, t as messages_exports } from "./assets/messages-BAQzILs4.js";
2
2
  //#region ../packages/sdk/frontend-entries/i18n.ts
3
3
  var messages = messages_exports;
4
4
  var supportedLocales = locales;
@@ -1,13 +1,13 @@
1
- import { $n as search_tags, Hr as app_name, Qn as search_date_from, Zn as search_date_to, ct as search_empty_description, dt as search_folders, ft as search_clear_all_filters, ht as search_title_with_query, lt as search_empty_title, mt as search_input_placeholder, pt as search_toggle_filters, st as search_popular, tr as search_title, ut as search_date_range, w as categories_title } from "./assets/messages-D-auzk9H.js";
1
+ import { $n as search_title, Br as app_name, Xn as search_date_from, Yn as search_date_to, Zn as search_tags, ct as search_empty_description, dt as search_folders, ft as search_clear_all_filters, ht as search_title_with_query, lt as search_empty_title, mt as search_input_placeholder, pt as search_toggle_filters, st as search_popular, ut as search_date_range, w as categories_title } from "./assets/messages-BAQzILs4.js";
2
2
  import { t as Icon } from "./assets/Icon-QwirKi9Y.js";
3
- import { a as Calendar, i as Folder_kanban, r as X, t as DatePicker } from "./assets/DatePicker-Cp6Qmgdb.js";
3
+ import { a as Calendar, i as Folder_kanban, r as X, t as DatePicker } from "./assets/DatePicker-D84cJ-Eq.js";
4
4
  import { t as Chevron_down } from "./assets/chevron-down-CvqKATjM.js";
5
5
  import { t as Folder } from "./assets/folder-DYIE-XPP.js";
6
6
  import { t as Rotate_ccw } from "./assets/rotate-ccw-dJSqPyTd.js";
7
7
  import { n as Search, t as Tag } from "./assets/tag-BmiVU_Ej.js";
8
8
  import { a as getDocsmintRequestAdapter, n as navigateDocsmintRoute, t as getDocsmintRouteAdapter } from "./assets/route-context-BPRerEtZ.js";
9
9
  import "./assets/categories-av9xjeg5.js";
10
- import { t as getFrontendExtensions } from "./assets/context-BtCMqdVe.js";
10
+ import { t as getFrontendExtensions } from "./assets/context-Bi_mO-NS.js";
11
11
  import { t as resolveExtensions } from "./assets/resolve-BqHozBXl.js";
12
12
  import "./assets/select-value-DBhbkNcc.js";
13
13
  import "./assets/tag-store.svelte-BM1lUI_P.js";
@@ -95,6 +95,24 @@ function Sliders_horizontal($$renderer, $$props) {
95
95
  ]));
96
96
  }
97
97
  //#endregion
98
+ //#region src/lib/hosts/search-folder-options.ts
99
+ function effectiveCategoryId(folder, byId) {
100
+ const seen = /* @__PURE__ */ new Set();
101
+ let current = folder;
102
+ while (current && !seen.has(current.id)) {
103
+ seen.add(current.id);
104
+ if (current.categoryId) return current.categoryId;
105
+ current = current.parentId ? byId.get(current.parentId) : void 0;
106
+ }
107
+ return null;
108
+ }
109
+ /** Folder names visible under the currently selected search category. */
110
+ function folderNamesForSearchCategory(fallbackNames, folders, categoryId) {
111
+ if (!categoryId) return [...fallbackNames];
112
+ const byId = new Map(folders.map((folder) => [folder.id, folder]));
113
+ return [...new Set(folders.filter((folder) => effectiveCategoryId(folder, byId) === categoryId).map((folder) => folder.name))];
114
+ }
115
+ //#endregion
98
116
  //#region src/lib/hosts/HiaiDocsSearchHost.svelte
99
117
  function HiaiDocsSearchHost($$renderer, $$props) {
100
118
  $$renderer.component(($$renderer) => {
@@ -132,6 +150,7 @@ function HiaiDocsSearchHost($$renderer, $$props) {
132
150
  if (!queryLower()) return [];
133
151
  return allCategories.filter((c) => c.name.toLowerCase().includes(queryLower()));
134
152
  });
153
+ const visibleFolderNames = $.derived(() => folderNamesForSearchCategory(folders, allFolders, activeCategoryId));
135
154
  $.derived(() => matchingDocs().length > 0 || matchingFolders().length > 0 || matchingCategories().length > 0);
136
155
  function buildUrl(overrides) {
137
156
  const params = new URLSearchParams();
@@ -170,22 +189,22 @@ function HiaiDocsSearchHost($$renderer, $$props) {
170
189
  $$renderer.push(`<!----> ${$.escape(search_clear_all_filters())}</button>`);
171
190
  } else $$renderer.push("<!--[-1-->");
172
191
  $$renderer.push(`<!--]--> `);
173
- if (folders.length > 0) {
192
+ if (categories.length > 0) {
174
193
  $$renderer.push("<!--[0-->");
175
194
  $$renderer.push(`<div><button type="button" class="mb-2 flex w-full items-center justify-between text-xs font-semibold uppercase tracking-wider text-muted-foreground transition-colors hover:text-foreground"><span class="flex items-center gap-1.5">`);
176
- Folder($$renderer, { class: "size-3.5" });
177
- $$renderer.push(`<!----> ${$.escape(search_folders())}</span> `);
195
+ Folder_kanban($$renderer, { class: "size-3.5" });
196
+ $$renderer.push(`<!----> ${$.escape(categories_title())}</span> `);
178
197
  $$renderer.push("<!--[0-->");
179
198
  Chevron_down($$renderer, { class: "size-3" });
180
199
  $$renderer.push(`<!--]--></button> `);
181
200
  {
182
201
  $$renderer.push("<!--[0-->");
183
202
  $$renderer.push(`<div class="space-y-0.5"><!--[-->`);
184
- const each_array = $.ensure_array_like(folders);
203
+ const each_array = $.ensure_array_like(categories);
185
204
  for (let $$index_4 = 0, $$length = each_array.length; $$index_4 < $$length; $$index_4++) {
186
- let folder = each_array[$$index_4];
187
- $$renderer.push(`<button${$.attr_class(`flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-sm transition-colors ${activeFolder === folder ? "bg-primary/10 font-medium text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"}`)}><span class="truncate">${$.escape(folder)}</span> `);
188
- if (activeFolder === folder) {
205
+ let category = each_array[$$index_4];
206
+ $$renderer.push(`<button${$.attr_class(`flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-sm transition-colors ${activeCategoryId === category.id ? "bg-primary/10 font-medium text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"}`)}><span class="truncate">${$.escape(category.name)}</span> `);
207
+ if (activeCategoryId === category.id) {
189
208
  $$renderer.push("<!--[0-->");
190
209
  X($$renderer, { class: "size-3 shrink-0" });
191
210
  } else $$renderer.push("<!--[-1-->");
@@ -196,40 +215,22 @@ function HiaiDocsSearchHost($$renderer, $$props) {
196
215
  $$renderer.push(`<!--]--></div>`);
197
216
  } else $$renderer.push("<!--[-1-->");
198
217
  $$renderer.push(`<!--]--> `);
199
- if (tags.length > 0) {
200
- $$renderer.push("<!--[0-->");
201
- $$renderer.push(`<div><h4 class="mb-2 flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground">`);
202
- Tag($$renderer, { class: "size-3.5" });
203
- $$renderer.push(`<!----> ${$.escape(search_tags())}</h4> <div class="flex flex-wrap gap-1.5"><!--[-->`);
204
- const each_array_1 = $.ensure_array_like(tags);
205
- for (let $$index_5 = 0, $$length = each_array_1.length; $$index_5 < $$length; $$index_5++) {
206
- let tag = each_array_1[$$index_5];
207
- $$renderer.push(`<button${$.attr_class(`inline-flex items-center rounded-full px-2.5 py-1 text-xs font-medium transition-colors ${activeTags.includes(tag.name) ? "bg-primary text-primary-foreground" : "bg-secondary text-secondary-foreground hover:bg-secondary/80"}`)}>`);
208
- if (tag.color) {
209
- $$renderer.push("<!--[0-->");
210
- $$renderer.push(`<span class="mr-1.5 inline-block size-2 rounded-full"${$.attr_style(`background-color: ${$.stringify(tag.color)}`)}></span>`);
211
- } else $$renderer.push("<!--[-1-->");
212
- $$renderer.push(`<!--]--> ${$.escape(tag.name)}</button>`);
213
- }
214
- $$renderer.push(`<!--]--></div></div>`);
215
- } else $$renderer.push("<!--[-1-->");
216
- $$renderer.push(`<!--]--> `);
217
- if (categories.length > 0) {
218
+ if (visibleFolderNames().length > 0) {
218
219
  $$renderer.push("<!--[0-->");
219
220
  $$renderer.push(`<div><button type="button" class="mb-2 flex w-full items-center justify-between text-xs font-semibold uppercase tracking-wider text-muted-foreground transition-colors hover:text-foreground"><span class="flex items-center gap-1.5">`);
220
- Folder_kanban($$renderer, { class: "size-3.5" });
221
- $$renderer.push(`<!----> ${$.escape(categories_title())}</span> `);
221
+ Folder($$renderer, { class: "size-3.5" });
222
+ $$renderer.push(`<!----> ${$.escape(search_folders())}</span> `);
222
223
  $$renderer.push("<!--[0-->");
223
224
  Chevron_down($$renderer, { class: "size-3" });
224
225
  $$renderer.push(`<!--]--></button> `);
225
226
  {
226
227
  $$renderer.push("<!--[0-->");
227
228
  $$renderer.push(`<div class="space-y-0.5"><!--[-->`);
228
- const each_array_2 = $.ensure_array_like(categories);
229
- for (let $$index_6 = 0, $$length = each_array_2.length; $$index_6 < $$length; $$index_6++) {
230
- let category = each_array_2[$$index_6];
231
- $$renderer.push(`<button${$.attr_class(`flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-sm transition-colors ${activeCategoryId === category.id ? "bg-primary/10 font-medium text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"}`)}><span class="truncate">${$.escape(category.name)}</span> `);
232
- if (activeCategoryId === category.id) {
229
+ const each_array_1 = $.ensure_array_like(visibleFolderNames());
230
+ for (let $$index_5 = 0, $$length = each_array_1.length; $$index_5 < $$length; $$index_5++) {
231
+ let folder = each_array_1[$$index_5];
232
+ $$renderer.push(`<button${$.attr_class(`flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-sm transition-colors ${activeFolder === folder ? "bg-primary/10 font-medium text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"}`)}><span class="truncate">${$.escape(folder)}</span> `);
233
+ if (activeFolder === folder) {
233
234
  $$renderer.push("<!--[0-->");
234
235
  X($$renderer, { class: "size-3 shrink-0" });
235
236
  } else $$renderer.push("<!--[-1-->");
@@ -239,6 +240,24 @@ function HiaiDocsSearchHost($$renderer, $$props) {
239
240
  }
240
241
  $$renderer.push(`<!--]--></div>`);
241
242
  } else $$renderer.push("<!--[-1-->");
243
+ $$renderer.push(`<!--]--> `);
244
+ if (tags.length > 0) {
245
+ $$renderer.push("<!--[0-->");
246
+ $$renderer.push(`<div><h4 class="mb-2 flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground">`);
247
+ Tag($$renderer, { class: "size-3.5" });
248
+ $$renderer.push(`<!----> ${$.escape(search_tags())}</h4> <div class="flex flex-wrap gap-1.5"><!--[-->`);
249
+ const each_array_2 = $.ensure_array_like(tags);
250
+ for (let $$index_6 = 0, $$length = each_array_2.length; $$index_6 < $$length; $$index_6++) {
251
+ let tag = each_array_2[$$index_6];
252
+ $$renderer.push(`<button${$.attr_class(`inline-flex items-center rounded-full px-2.5 py-1 text-xs font-medium transition-colors ${activeTags.includes(tag.name) ? "bg-primary text-primary-foreground" : "bg-secondary text-secondary-foreground hover:bg-secondary/80"}`)}>`);
253
+ if (tag.color) {
254
+ $$renderer.push("<!--[0-->");
255
+ $$renderer.push(`<span class="mr-1.5 inline-block size-2 rounded-full"${$.attr_style(`background-color: ${$.stringify(tag.color)}`)}></span>`);
256
+ } else $$renderer.push("<!--[-1-->");
257
+ $$renderer.push(`<!--]--> ${$.escape(tag.name)}</button>`);
258
+ }
259
+ $$renderer.push(`<!--]--></div></div>`);
260
+ } else $$renderer.push("<!--[-1-->");
242
261
  $$renderer.push(`<!--]--> <div><h4 class="mb-2 flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground">`);
243
262
  Calendar($$renderer, { class: "size-3.5" });
244
263
  $$renderer.push(`<!----> ${$.escape(search_date_range())}</h4> <div class="space-y-2"><div><label for="dateFrom" class="text-xs text-muted-foreground">${$.escape(search_date_from())}</label> <div class="mt-0.5">`);
@@ -1,4 +1,4 @@
1
- import { t as getFrontendExtensions } from "./assets/context-BtCMqdVe.js";
1
+ import { t as getFrontendExtensions } from "./assets/context-Bi_mO-NS.js";
2
2
  import * as $ from "svelte/internal/server";
3
3
  //#region src/lib/components/editor/shared-document.ts
4
4
  var ATTACHMENT_PATH = /^\/api\/attachments\/[0-9a-f-]+\/raw$/i;
@@ -22,6 +22,8 @@ var tsvector = customType({
22
22
  });
23
23
  var documentVisibilityEnum = pgEnum("document_visibility", ["private", "shared", "public"]);
24
24
  var shareRoleEnum = pgEnum("share_role", ["viewer", "commenter", "editor"]);
25
+ var shareAccessModeEnum = pgEnum("share_access_mode", ["public", "restricted"]);
26
+ var shareGrantStatusEnum = pgEnum("share_grant_status", ["pending", "accepted", "revoked"]);
25
27
  var embeddingStatusEnum = pgEnum("embedding_status", [
26
28
  "pending",
27
29
  "processing",
@@ -313,6 +315,9 @@ var shareLinks = pgTable("share_links", {
313
315
  token: text("token").notNull().unique(),
314
316
  passwordHash: text("password_hash"),
315
317
  role: shareRoleEnum("role").notNull().default("viewer"),
318
+ accessMode: shareAccessModeEnum("access_mode").notNull().default("public"),
319
+ allowPasswordFallback: boolean("allow_password_fallback").notNull().default(false),
320
+ policyVersion: integer("policy_version").notNull().default(1),
316
321
  expiresAt: timestamp("expires_at"),
317
322
  createdBy: uuid("created_by").notNull().references(() => users.id, { onDelete: "cascade" }),
318
323
  workspaceId: text("workspace_id"),
@@ -348,8 +353,15 @@ var guestAccess = pgTable("guest_access", {
348
353
  shareLinkId: uuid("share_link_id").notNull().references(() => shareLinks.id, { onDelete: "cascade" }),
349
354
  workspaceId: text("workspace_id"),
350
355
  guestEmail: text("guest_email").notNull(),
351
- grantedAt: timestamp("granted_at").defaultNow().notNull()
352
- }, (table) => [index("guest_access_share_link_idx").on(table.shareLinkId)]);
356
+ role: shareRoleEnum("role").notNull().default("viewer"),
357
+ status: shareGrantStatusEnum("status").notNull().default("pending"),
358
+ grantedAt: timestamp("granted_at").defaultNow().notNull(),
359
+ acceptedAt: timestamp("accepted_at"),
360
+ revokedAt: timestamp("revoked_at")
361
+ }, (table) => [
362
+ index("guest_access_share_link_idx").on(table.shareLinkId),
363
+ uniqueIndex("guest_access_share_link_email_unique_idx").on(table.shareLinkId, table.guestEmail)
364
+ ]);
353
365
  var guestAccessRelations = relations(guestAccess, ({ one }) => ({
354
366
  shareLink: one(shareLinks, {
355
367
  fields: [guestAccess.shareLinkId],
@@ -365,7 +377,10 @@ var attachments = pgTable("attachments", {
365
377
  size: bigint("size", { mode: "number" }).notNull(),
366
378
  storageKey: text("storage_key").notNull(),
367
379
  createdAt: timestamp("created_at").defaultNow().notNull()
368
- }, (table) => [index("attachments_document_id_idx").on(table.documentId)]);
380
+ }, (table) => [
381
+ index("attachments_document_id_idx").on(table.documentId),
382
+ uniqueIndex("attachments_storage_key_unique").on(table.storageKey)
383
+ ]);
369
384
  var attachmentRelations = relations(attachments, ({ one }) => ({
370
385
  document: one(documents, {
371
386
  fields: [attachments.documentId],
package/dist/types.d.ts CHANGED
@@ -161,6 +161,11 @@ export interface DocsSearchResponse {
161
161
  total: number;
162
162
  page: number;
163
163
  limit: number;
164
+ diagnostics?: {
165
+ graphAttempted: boolean;
166
+ graphFailed: boolean;
167
+ graphContribution: boolean;
168
+ };
164
169
  }
165
170
  export interface DocsSearchOptions {
166
171
  folder?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hiai-gg/docsmint",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "type": "module",
5
5
  "browser": {
6
6
  "./dist/backend-launcher.js": false,
@@ -24,7 +24,7 @@ import { registerSearch } from "./commands/search.js";
24
24
  import { registerSnapshot } from "./commands/snapshot.js";
25
25
  import { registerUpdate } from "./commands/update.js";
26
26
 
27
- const VERSION = "0.5.1";
27
+ const VERSION = "0.5.3";
28
28
 
29
29
  const program = new Command();
30
30
  program
@@ -32,6 +32,8 @@ import { relations, sql } from "drizzle-orm";
32
32
  // ============================================
33
33
  export const documentVisibilityEnum = pgEnum("document_visibility", ["private", "shared", "public"]);
34
34
  export const shareRoleEnum = pgEnum("share_role", ["viewer", "commenter", "editor"]);
35
+ export const shareAccessModeEnum = pgEnum("share_access_mode", ["public", "restricted"]);
36
+ export const shareGrantStatusEnum = pgEnum("share_grant_status", ["pending", "accepted", "revoked"]);
35
37
  export const embeddingStatusEnum = pgEnum("embedding_status", [
36
38
  "pending",
37
39
  "processing",
@@ -455,6 +457,9 @@ export const shareLinks = pgTable(
455
457
  token: text("token").notNull().unique(),
456
458
  passwordHash: text("password_hash"),
457
459
  role: shareRoleEnum("role").notNull().default("viewer"),
460
+ accessMode: shareAccessModeEnum("access_mode").notNull().default("public"),
461
+ allowPasswordFallback: boolean("allow_password_fallback").notNull().default(false),
462
+ policyVersion: integer("policy_version").notNull().default(1),
458
463
  expiresAt: timestamp("expires_at"),
459
464
  createdBy: uuid("created_by")
460
465
  .notNull()
@@ -506,9 +511,16 @@ export const guestAccess = pgTable(
506
511
  .references(() => shareLinks.id, { onDelete: "cascade" }),
507
512
  workspaceId: text("workspace_id"),
508
513
  guestEmail: text("guest_email").notNull(),
514
+ role: shareRoleEnum("role").notNull().default("viewer"),
515
+ status: shareGrantStatusEnum("status").notNull().default("pending"),
509
516
  grantedAt: timestamp("granted_at").defaultNow().notNull(),
517
+ acceptedAt: timestamp("accepted_at"),
518
+ revokedAt: timestamp("revoked_at"),
510
519
  },
511
- (table) => [index("guest_access_share_link_idx").on(table.shareLinkId)]
520
+ (table) => [
521
+ index("guest_access_share_link_idx").on(table.shareLinkId),
522
+ uniqueIndex("guest_access_share_link_email_unique_idx").on(table.shareLinkId, table.guestEmail),
523
+ ]
512
524
  );
513
525
 
514
526
  export const guestAccessRelations = relations(guestAccess, ({ one }) => ({
@@ -535,7 +547,10 @@ export const attachments = pgTable(
535
547
  storageKey: text("storage_key").notNull(),
536
548
  createdAt: timestamp("created_at").defaultNow().notNull(),
537
549
  },
538
- (table) => [index("attachments_document_id_idx").on(table.documentId)]
550
+ (table) => [
551
+ index("attachments_document_id_idx").on(table.documentId),
552
+ uniqueIndex("attachments_storage_key_unique").on(table.storageKey),
553
+ ]
539
554
  );
540
555
 
541
556
  export const attachmentRelations = relations(attachments, ({ one }) => ({
@@ -35,7 +35,7 @@ interface McpToolResult {
35
35
 
36
36
  const server = new McpServer({
37
37
  name: "hiai-docs",
38
- version: "0.5.1",
38
+ version: "0.5.3",
39
39
  });
40
40
 
41
41
  /**