@hiai-gg/docsmint 0.6.7 → 0.7.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 (129) hide show
  1. package/README.md +27 -4
  2. package/backend/src/lib/api-keys.ts +14 -6
  3. package/backend/src/lib/lifecycle-service.ts +397 -73
  4. package/dist/backend/index.js +13066 -10878
  5. package/dist/backend-account-runtime-cleanup.js +152 -42
  6. package/dist/backend-api-key-facade.js +207 -61
  7. package/dist/backend-pipeline-cancellation.js +144 -42
  8. package/dist/client.d.ts +12 -2
  9. package/dist/client.js +83 -30
  10. package/dist/frontend/{CategoryDialog-CbXBMBZB.js → CategoryDialog-C67_TXf0.js} +4 -4
  11. package/dist/frontend/{ConfirmDialog-DgMTQBq4.js → ConfirmDialog-_LlrA--f.js} +3 -3
  12. package/dist/frontend/{CreateSnapshotDialog-FUq-ZfBH.js → CreateSnapshotDialog-BmCRpOMv.js} +3 -3
  13. package/dist/frontend/{DatePicker-D6E-EEtZ.js → DatePicker-DsoepNdb.js} +8 -8
  14. package/dist/frontend/{DeleteDialog-8k6JYWCx.js → DeleteDialog-L1A3FhMM.js} +1 -1
  15. package/dist/frontend/{FolderNode-DAAn_T8_.js → FolderNode-CNwi0ySr.js} +1 -1
  16. package/dist/frontend/{HiAiEditor-DSVG3GNd.js → HiAiEditor-B1EDGsnA.js} +6 -6
  17. package/dist/frontend/{SettingsDialog-BDNgf5rv.js → SettingsDialog-AP42xOGg.js} +12 -12
  18. package/dist/frontend/ShareDialog-wGTXuXFE.js +281 -0
  19. package/dist/frontend/{Sidebar-DX08utdV.js → Sidebar-lKQT3dEf.js} +17 -16
  20. package/dist/frontend/{TagCreateDialog-Bb0-Vtzh.js → TagCreateDialog-su8BhLzS.js} +3 -3
  21. package/dist/frontend/api/attachments.js +1 -1
  22. package/dist/frontend/api/settings.js +1 -1
  23. package/dist/frontend/app-shell.js +2 -2
  24. package/dist/frontend/{attachments-B8AuDjno.js → attachments-B2aH3hXF.js} +10 -9
  25. package/dist/frontend/{auth-client-Cygmp1I2.js → auth-client-CnDZwPfp.js} +11 -11
  26. package/dist/frontend/components/category-dialog.js +1 -1
  27. package/dist/frontend/components/create-snapshot-dialog.js +1 -1
  28. package/dist/frontend/components/delete-dialog.js +1 -1
  29. package/dist/frontend/components/editor/compact-editor.js +1 -1
  30. package/dist/frontend/components/editor/document-editor.js +1 -1
  31. package/dist/frontend/components/folder-node.js +1 -1
  32. package/dist/frontend/components/save-as-dialog.js +3 -3
  33. package/dist/frontend/components/settings.js +1 -1
  34. package/dist/frontend/components/share-dialog.d.ts +2 -1
  35. package/dist/frontend/components/share-dialog.js +1 -1
  36. package/dist/frontend/components/sidebar.js +1 -1
  37. package/dist/frontend/components/tag-create-dialog.js +1 -1
  38. package/dist/frontend/components/version-history.js +2 -2
  39. package/dist/frontend/{confirm-dialog-CzmoZw3a.js → confirm-dialog-BG8y2Pum.js} +4 -4
  40. package/dist/frontend/dashboard.js +1008 -998
  41. package/dist/frontend/{db-ByrlYfaI.js → db-Bo1t_76T.js} +1 -1
  42. package/dist/frontend/{dialog-Ce79C9fd.js → dialog-C2iKObEu.js} +7 -7
  43. package/dist/frontend/{dropdown-menu-CJ_7V3N0.js → dropdown-menu-BXIl2E26.js} +12 -12
  44. package/dist/frontend/{floating-layer-anchor-S5RSefGN.js → floating-layer-anchor-BGIndLY-.js} +63 -63
  45. package/dist/frontend/{identity-DyWeNzu_.js → identity-Ynrglr5i.js} +1 -1
  46. package/dist/frontend/{input-BWlOML_m.js → input-eHFb2qiL.js} +2 -2
  47. package/dist/frontend/{label-C2HfJNQ2.js → label-_I1iiaNU.js} +2 -2
  48. package/dist/frontend/offline/identity.js +1 -1
  49. package/dist/frontend/search.js +2 -2
  50. package/dist/frontend/{select-value-JCAp2PmU.js → select-value-CtMyrvDJ.js} +18 -18
  51. package/dist/frontend/{settings-DSrUl4hW.js → settings-BR48ihB4.js} +6 -23
  52. package/dist/frontend/{textarea-DOAE-h42.js → textarea-2eslfANY.js} +2 -2
  53. package/dist/frontend/{utils-BPDRytUU.js → utils-CDBqTgoV.js} +1 -1
  54. package/dist/frontend-ssr/api/attachments.js +1 -1
  55. package/dist/frontend-ssr/api/settings.js +1 -1
  56. package/dist/frontend-ssr/app-shell.js +2 -2
  57. package/dist/frontend-ssr/assets/{CategoryDialog-QHEv_9N4.js → CategoryDialog-BGuHTb3K.js} +4 -4
  58. package/dist/frontend-ssr/assets/{ConfirmDialog-BhAelejz.js → ConfirmDialog-D1BDXXll.js} +3 -3
  59. package/dist/frontend-ssr/assets/{CreateSnapshotDialog-CI8vXXcN.js → CreateSnapshotDialog-BZ45odvJ.js} +3 -3
  60. package/dist/frontend-ssr/assets/{DatePicker-D84cJ-Eq.js → DatePicker-CPtl6W5E.js} +3 -3
  61. package/dist/frontend-ssr/assets/{DeleteDialog-DG9Lm38J.js → DeleteDialog-oHT_p_vG.js} +1 -1
  62. package/dist/frontend-ssr/assets/{FolderNode-kmilhDjO.js → FolderNode-D9kgJG9d.js} +1 -1
  63. package/dist/frontend-ssr/assets/{HiAiEditor-CUOJmKzT.js → HiAiEditor-DOd2MXjD.js} +5 -5
  64. package/dist/frontend-ssr/assets/{SettingsDialog-BjJIiVLc.js → SettingsDialog-CIVbMKmf.js} +12 -12
  65. package/dist/frontend-ssr/assets/{ShareDialog-C9C-XTm4.js → ShareDialog-D2UNUbF7.js} +19 -6
  66. package/dist/frontend-ssr/assets/{Sidebar-C2sUfGNk.js → Sidebar-Bb-k2R-Z.js} +13 -12
  67. package/dist/frontend-ssr/assets/{TagCreateDialog-DUPMitlL.js → TagCreateDialog-6Gk7L3D-.js} +3 -3
  68. package/dist/frontend-ssr/assets/{attachments-Cj3fQyUp.js → attachments-BdkOp8ha.js} +5 -4
  69. package/dist/frontend-ssr/assets/{auth-client-x26kqY8Z.js → auth-client-CojKIzqy.js} +13 -13
  70. package/dist/frontend-ssr/assets/{confirm-dialog-XuyaL8sr.js → confirm-dialog-B9MVS_bF.js} +4 -4
  71. package/dist/frontend-ssr/assets/{db-CnxeO66n.js → db-BhwJPEkn.js} +1 -1
  72. package/dist/frontend-ssr/assets/{dialog-BOV1u6zP.js → dialog-1SB5neow.js} +8 -8
  73. package/dist/frontend-ssr/assets/{dropdown-menu-Dn_vQq9b.js → dropdown-menu-DqoOkdqB.js} +12 -12
  74. package/dist/frontend-ssr/assets/{floating-layer-anchor-BIAu-252.js → floating-layer-anchor-BoiiIEiK.js} +71 -71
  75. package/dist/frontend-ssr/assets/{identity-B3uHoDtf.js → identity-DcMMBKWg.js} +1 -1
  76. package/dist/frontend-ssr/assets/{input-DezGsU3y.js → input-Df-QP3Km.js} +2 -2
  77. package/dist/frontend-ssr/assets/{label-Bj8-TfFN.js → label-CbUOUz6L.js} +2 -2
  78. package/dist/frontend-ssr/assets/{select-value-DBhbkNcc.js → select-value-CXEDWrZg.js} +18 -18
  79. package/dist/frontend-ssr/assets/{settings-Bk5Hk9Vq.js → settings-Mp8EuFSn.js} +3 -21
  80. package/dist/frontend-ssr/assets/{textarea-Dev-qSEc.js → textarea-CHh8NuSS.js} +2 -2
  81. package/dist/frontend-ssr/assets/{utils-DtlPPXpJ.js → utils-DtX0ta7y.js} +1 -1
  82. package/dist/frontend-ssr/components/category-dialog.js +1 -1
  83. package/dist/frontend-ssr/components/create-snapshot-dialog.js +1 -1
  84. package/dist/frontend-ssr/components/delete-dialog.js +1 -1
  85. package/dist/frontend-ssr/components/editor/compact-editor.js +1 -1
  86. package/dist/frontend-ssr/components/editor/document-editor.js +1 -1
  87. package/dist/frontend-ssr/components/folder-node.js +1 -1
  88. package/dist/frontend-ssr/components/save-as-dialog.js +3 -3
  89. package/dist/frontend-ssr/components/settings.js +1 -1
  90. package/dist/frontend-ssr/components/share-dialog.js +1 -1
  91. package/dist/frontend-ssr/components/sidebar.js +1 -1
  92. package/dist/frontend-ssr/components/tag-create-dialog.js +1 -1
  93. package/dist/frontend-ssr/components/version-history.js +2 -2
  94. package/dist/frontend-ssr/dashboard.js +31 -29
  95. package/dist/frontend-ssr/offline/identity.js +1 -1
  96. package/dist/frontend-ssr/search.js +2 -2
  97. package/dist/index.d.ts +5 -5
  98. package/dist/index.js +2 -2
  99. package/dist/lifecycle-persistent.d.ts +1 -1
  100. package/dist/lifecycle-runtime.js +52659 -338
  101. package/dist/mcp-cli.js +1056 -0
  102. package/dist/mcp-server.d.ts +39 -0
  103. package/dist/mcp-server.js +1053 -0
  104. package/dist/storage-quota.d.ts +5 -1
  105. package/dist/types.d.ts +7 -0
  106. package/dist/workspace.d.ts +11 -2
  107. package/dist/workspace.js +82 -10
  108. package/package.json +7 -13
  109. package/packages/cli/src/index.ts +1 -1
  110. package/packages/db/src/client.ts +56 -5
  111. package/packages/db/src/schema.ts +192 -1
  112. package/packages/db/src/with-tenant.ts +20 -2
  113. package/server.json +2 -2
  114. package/dist/frontend/ShareDialog-2Mty7hm4.js +0 -258
  115. package/packages/mcp-server/src/capabilities.ts +0 -189
  116. package/packages/mcp-server/src/client.ts +0 -225
  117. package/packages/mcp-server/src/index.ts +0 -8
  118. package/packages/mcp-server/src/server.ts +0 -87
  119. package/packages/mcp-server/src/tools/create-document.ts +0 -34
  120. package/packages/mcp-server/src/tools/create-folder.ts +0 -31
  121. package/packages/mcp-server/src/tools/create-snapshot.ts +0 -27
  122. package/packages/mcp-server/src/tools/export-document.ts +0 -22
  123. package/packages/mcp-server/src/tools/get-document.ts +0 -22
  124. package/packages/mcp-server/src/tools/list-documents.ts +0 -34
  125. package/packages/mcp-server/src/tools/list-folders.ts +0 -26
  126. package/packages/mcp-server/src/tools/search.ts +0 -39
  127. package/packages/mcp-server/src/tools/update-document.ts +0 -38
  128. package/packages/mcp-server/src/tools/version-history.ts +0 -27
  129. package/packages/mcp-server/src/types.ts +0 -126
@@ -17,49 +17,53 @@ var __export = (target, all) => {
17
17
  // ../db/src/schema.ts
18
18
  var exports_schema = {};
19
19
  __export(exports_schema, {
20
- versions: () => versions,
21
- versionRelations: () => versionRelations,
22
- verifications: () => verifications,
23
- users: () => users,
24
- tags: () => tags,
25
- tagRelations: () => tagRelations,
26
- shareRoleEnum: () => shareRoleEnum,
27
- shareLinks: () => shareLinks,
28
- shareLinkRelations: () => shareLinkRelations,
29
- shareGrantStatusEnum: () => shareGrantStatusEnum,
30
- shareAccessModeEnum: () => shareAccessModeEnum,
31
- sessions: () => sessions,
32
- pipelineStatusEnum: () => pipelineStatusEnum,
33
- pipelineStageEnum: () => pipelineStageEnum,
34
- lifecycleOperations: () => lifecycleOperations,
35
- lifecycleOperationStatusEnum: () => lifecycleOperationStatusEnum,
36
- lifecycleOperationKindEnum: () => lifecycleOperationKindEnum,
37
- guestAccessRelations: () => guestAccessRelations,
38
- guestAccess: () => guestAccess,
39
- folders: () => folders,
40
- folderRelations: () => folderRelations,
41
- embeddingStatusEnum: () => embeddingStatusEnum,
42
- documents: () => documents,
43
- documentVisibilityEnum: () => documentVisibilityEnum,
44
- documentTags: () => documentTags,
45
- documentTagRelations: () => documentTagRelations,
46
- documentRelations: () => documentRelations,
47
- documentPipelineRuns: () => documentPipelineRuns,
48
- documentPipelineBatches: () => documentPipelineBatches,
49
- documentKnowledgeSummaries: () => documentKnowledgeSummaries,
50
- documentEmbeddings: () => documentEmbeddings,
51
- documentEmbeddingRelations: () => documentEmbeddingRelations,
52
- documentCreateOperations: () => documentCreateOperations,
53
- categoryRelations: () => categoryRelations,
54
- categories: () => categories,
55
- auditLog: () => auditLog,
56
- attachments: () => attachments,
57
- attachmentRelations: () => attachmentRelations,
58
- apiKeys: () => apiKeys,
20
+ accounts: () => accounts,
59
21
  apiKeyRelations: () => apiKeyRelations,
60
- accounts: () => accounts
22
+ apiKeys: () => apiKeys,
23
+ attachmentRelations: () => attachmentRelations,
24
+ attachmentStorageCleanupOutbox: () => attachmentStorageCleanupOutbox,
25
+ attachments: () => attachments,
26
+ auditLog: () => auditLog,
27
+ categories: () => categories,
28
+ categoryRelations: () => categoryRelations,
29
+ documentCreateOperations: () => documentCreateOperations,
30
+ documentEmbeddingRelations: () => documentEmbeddingRelations,
31
+ documentEmbeddings: () => documentEmbeddings,
32
+ documentKnowledgeSummaries: () => documentKnowledgeSummaries,
33
+ documentPipelineBatches: () => documentPipelineBatches,
34
+ documentPipelineRuns: () => documentPipelineRuns,
35
+ documentRelations: () => documentRelations,
36
+ documentTagRelations: () => documentTagRelations,
37
+ documentTags: () => documentTags,
38
+ documentVisibilityEnum: () => documentVisibilityEnum,
39
+ documents: () => documents,
40
+ embeddingStatusEnum: () => embeddingStatusEnum,
41
+ folderRelations: () => folderRelations,
42
+ folders: () => folders,
43
+ guestAccess: () => guestAccess,
44
+ guestAccessRelations: () => guestAccessRelations,
45
+ lifecycleOperationKindEnum: () => lifecycleOperationKindEnum,
46
+ lifecycleOperationStatusEnum: () => lifecycleOperationStatusEnum,
47
+ lifecycleOperations: () => lifecycleOperations,
48
+ metadataReembedOutbox: () => metadataReembedOutbox,
49
+ pendingAttachmentCleanupAuthorizations: () => pendingAttachmentCleanupAuthorizations,
50
+ pendingAttachmentUploads: () => pendingAttachmentUploads,
51
+ pipelineStageEnum: () => pipelineStageEnum,
52
+ pipelineStatusEnum: () => pipelineStatusEnum,
53
+ sessions: () => sessions,
54
+ shareAccessModeEnum: () => shareAccessModeEnum,
55
+ shareGrantStatusEnum: () => shareGrantStatusEnum,
56
+ shareLinkRelations: () => shareLinkRelations,
57
+ shareLinks: () => shareLinks,
58
+ shareRoleEnum: () => shareRoleEnum,
59
+ tagRelations: () => tagRelations,
60
+ tags: () => tags,
61
+ users: () => users,
62
+ verifications: () => verifications,
63
+ versionRelations: () => versionRelations,
64
+ versions: () => versions
61
65
  });
62
- import { pgTable, uuid, text, timestamp, bigint, jsonb, index, uniqueIndex, customType, boolean, check, integer, pgEnum } from "drizzle-orm/pg-core";
66
+ import { pgTable, uuid, text, timestamp, bigint, jsonb, index, uniqueIndex, customType, boolean, check, integer, pgEnum, primaryKey } from "drizzle-orm/pg-core";
63
67
  import { relations, sql } from "drizzle-orm";
64
68
  var vector = customType({
65
69
  dataType(config) {
@@ -227,6 +231,7 @@ var documents = pgTable("documents", {
227
231
  activeEmbeddingGeneration: uuid("active_embedding_generation"),
228
232
  pendingEmbeddingGeneration: uuid("pending_embedding_generation"),
229
233
  embeddingProfile: text("embedding_profile"),
234
+ embeddingContextHash: text("embedding_context_hash"),
230
235
  embeddingErrorCode: text("embedding_error_code"),
231
236
  embeddingUpdatedAt: timestamp("embedding_updated_at"),
232
237
  deletedAt: timestamp("deleted_at"),
@@ -265,6 +270,8 @@ var documentPipelineRuns = pgTable("document_pipeline_runs", {
265
270
  generationId: uuid("generation_id").notNull(),
266
271
  revision: text("revision").notNull(),
267
272
  source: text("source").notNull(),
273
+ embeddingContextHash: text("embedding_context_hash"),
274
+ refreshMode: text("refresh_mode").notNull().default("full"),
268
275
  status: pipelineStatusEnum("status").notNull().default("pending"),
269
276
  prepareStatus: pipelineStatusEnum("prepare_status").notNull().default("pending"),
270
277
  embedStatus: pipelineStatusEnum("embed_status").notNull().default("pending"),
@@ -285,7 +292,8 @@ var documentPipelineRuns = pgTable("document_pipeline_runs", {
285
292
  updatedAt: timestamp("updated_at").defaultNow().notNull()
286
293
  }, (table) => [
287
294
  uniqueIndex("document_pipeline_runs_document_generation_idx").on(table.documentId, table.generationId),
288
- index("document_pipeline_runs_owner_status_updated_idx").on(table.ownerId, table.status, table.updatedAt)
295
+ index("document_pipeline_runs_owner_status_updated_idx").on(table.ownerId, table.status, table.updatedAt),
296
+ check("document_pipeline_runs_refresh_mode_check", sql`${table.refreshMode} in ('incremental', 'full')`)
289
297
  ]);
290
298
  var documentPipelineBatches = pgTable("document_pipeline_batches", {
291
299
  id: uuid("id").primaryKey().defaultRandom(),
@@ -311,6 +319,19 @@ var documentPipelineBatches = pgTable("document_pipeline_batches", {
311
319
  index("document_pipeline_batches_stage_status_available_idx").on(table.stage, table.status, table.availableAt),
312
320
  index("document_pipeline_batches_document_id_idx").on(table.documentId)
313
321
  ]);
322
+ var metadataReembedOutbox = pgTable("metadata_reembed_outbox", {
323
+ id: uuid("id").primaryKey(),
324
+ operationId: uuid("operation_id").notNull(),
325
+ documentId: uuid("document_id").notNull().references(() => documents.id, { onDelete: "cascade" }),
326
+ ownerId: uuid("owner_id").notNull().references(() => users.id, { onDelete: "cascade" }),
327
+ workspaceId: text("workspace_id"),
328
+ revision: text("revision").notNull(),
329
+ createdAt: timestamp("created_at").defaultNow().notNull()
330
+ }, (table) => [
331
+ uniqueIndex("metadata_reembed_outbox_operation_document_idx").on(table.operationId, table.documentId),
332
+ index("metadata_reembed_outbox_operation_id_idx").on(table.operationId, table.id),
333
+ index("metadata_reembed_outbox_created_id_idx").on(table.createdAt, table.id)
334
+ ]);
314
335
  var documentKnowledgeSummaries = pgTable("document_knowledge_summaries", {
315
336
  id: uuid().primaryKey().defaultRandom(),
316
337
  document_id: uuid().notNull().references(() => documents.id, { onDelete: "cascade" }),
@@ -447,6 +468,7 @@ var attachments = pgTable("attachments", {
447
468
  id: uuid("id").primaryKey().defaultRandom(),
448
469
  documentId: uuid("document_id").notNull().references(() => documents.id, { onDelete: "cascade" }),
449
470
  workspaceId: text("workspace_id"),
471
+ uploadedBy: uuid("uploaded_by").notNull().references(() => users.id, { onDelete: "restrict" }),
450
472
  filename: text("filename").notNull(),
451
473
  mimeType: text("mime_type").notNull(),
452
474
  size: bigint("size", { mode: "number" }).notNull(),
@@ -454,8 +476,88 @@ var attachments = pgTable("attachments", {
454
476
  createdAt: timestamp("created_at").defaultNow().notNull()
455
477
  }, (table) => [
456
478
  index("attachments_document_id_idx").on(table.documentId),
479
+ index("attachments_uploaded_by_idx").on(table.uploadedBy),
457
480
  uniqueIndex("attachments_storage_key_unique").on(table.storageKey)
458
481
  ]);
482
+ var pendingAttachmentUploads = pgTable("pending_attachment_uploads", {
483
+ id: uuid("id").primaryKey().defaultRandom(),
484
+ documentId: uuid("document_id").notNull().references(() => documents.id, { onDelete: "restrict" }),
485
+ actorUserId: uuid("actor_user_id").notNull().references(() => users.id, { onDelete: "restrict" }),
486
+ workspaceId: text("workspace_id"),
487
+ storageKey: text("storage_key").notNull(),
488
+ tokenHash: text("token_hash").notNull(),
489
+ filename: text("filename").notNull(),
490
+ mimeType: text("mime_type").notNull(),
491
+ declaredSize: bigint("declared_size", { mode: "number" }).notNull(),
492
+ quotaReservationId: text("quota_reservation_id"),
493
+ quotaOperationKey: text("quota_operation_key").notNull(),
494
+ quotaState: text("quota_state").notNull(),
495
+ actualSize: bigint("actual_size", { mode: "number" }),
496
+ urlIssuedAt: timestamp("url_issued_at"),
497
+ confirmingAt: timestamp("confirming_at"),
498
+ leaseOwner: text("lease_owner"),
499
+ leaseExpiresAt: timestamp("lease_expires_at"),
500
+ attemptCount: integer("attempt_count").default(0).notNull(),
501
+ lastError: text("last_error"),
502
+ expiresAt: timestamp("expires_at").notNull(),
503
+ createdAt: timestamp("created_at").defaultNow().notNull()
504
+ }, (table) => [
505
+ uniqueIndex("pending_attachment_uploads_storage_key_unique").on(table.storageKey),
506
+ uniqueIndex("pending_attachment_uploads_token_hash_unique").on(table.tokenHash),
507
+ index("pending_attachment_uploads_actor_expiry_idx").on(table.actorUserId, table.expiresAt),
508
+ index("pending_attachment_uploads_document_idx").on(table.documentId),
509
+ index("pending_attachment_uploads_cleanup_lease_idx").on(table.expiresAt, table.leaseExpiresAt, table.id),
510
+ check("pending_attachment_uploads_quota_state_check", sql`${table.quotaState} IN ('not_required', 'reserve_pending', 'reserved', 'finalize_pending', 'committed')`)
511
+ ]);
512
+ var attachmentStorageCleanupOutbox = pgTable("attachment_storage_cleanup_outbox", {
513
+ id: uuid("id").primaryKey().defaultRandom(),
514
+ sourceKind: text("source_kind").notNull(),
515
+ sourceId: uuid("source_id").notNull(),
516
+ storageKey: text("storage_key").notNull(),
517
+ documentId: uuid("document_id").notNull(),
518
+ actorUserId: uuid("actor_user_id").notNull(),
519
+ ownerUserId: uuid("owner_user_id").notNull(),
520
+ requestedByUserId: uuid("requested_by_user_id").notNull(),
521
+ workspaceId: text("workspace_id"),
522
+ size: bigint("size", { mode: "number" }).notNull(),
523
+ quotaOperationKey: text("quota_operation_key").notNull(),
524
+ quotaReleaseKind: text("quota_release_kind").default("none").notNull(),
525
+ quotaReservationId: text("quota_reservation_id"),
526
+ notBefore: timestamp("not_before").defaultNow().notNull(),
527
+ retainUntil: timestamp("retain_until"),
528
+ objectDeletedAt: timestamp("object_deleted_at"),
529
+ leaseOwner: text("lease_owner"),
530
+ leaseExpiresAt: timestamp("lease_expires_at"),
531
+ attemptCount: integer("attempt_count").default(0).notNull(),
532
+ lastError: text("last_error"),
533
+ createdAt: timestamp("created_at").defaultNow().notNull()
534
+ }, (table) => [
535
+ uniqueIndex("attachment_storage_cleanup_outbox_source_unique").on(table.sourceKind, table.sourceId),
536
+ uniqueIndex("attachment_storage_cleanup_outbox_storage_key_unique").on(table.storageKey),
537
+ index("attachment_storage_cleanup_outbox_ready_idx").on(table.notBefore, table.leaseExpiresAt, table.createdAt, table.id),
538
+ index("attachment_storage_cleanup_outbox_actor_idx").on(table.actorUserId, table.id),
539
+ index("attachment_storage_cleanup_outbox_owner_idx").on(table.ownerUserId, table.id),
540
+ index("attachment_storage_cleanup_outbox_requester_idx").on(table.requestedByUserId, table.id),
541
+ check("attachment_storage_cleanup_outbox_source_kind_check", sql`${table.sourceKind} IN ('attachment', 'pending_upload', 'uncommitted_upload')`),
542
+ check("attachment_storage_cleanup_outbox_quota_kind_check", sql`${table.quotaReleaseKind} IN ('none', 'reserve_pending', 'reservation', 'finalize_pending', 'committed')`),
543
+ check("attachment_storage_cleanup_outbox_size_check", sql`${table.size} >= 0`),
544
+ check("attachment_storage_cleanup_outbox_reservation_check", sql`${table.quotaReleaseKind} NOT IN ('reservation', 'finalize_pending') OR ${table.quotaReservationId} IS NOT NULL`)
545
+ ]);
546
+ var pendingAttachmentCleanupAuthorizations = pgTable("pending_attachment_cleanup_authorizations", {
547
+ backendPid: integer("backend_pid").notNull(),
548
+ transactionId: bigint("transaction_id", { mode: "bigint" }).notNull(),
549
+ admissionId: uuid("admission_id").notNull(),
550
+ documentId: uuid("document_id").notNull(),
551
+ actorUserId: uuid("actor_user_id").notNull(),
552
+ ownerUserId: uuid("owner_user_id").notNull(),
553
+ workspaceId: text("workspace_id"),
554
+ storageKey: text("storage_key").notNull(),
555
+ tokenHash: text("token_hash").notNull()
556
+ }, (table) => [
557
+ primaryKey({
558
+ columns: [table.backendPid, table.transactionId, table.admissionId]
559
+ })
560
+ ]);
459
561
  var attachmentRelations = relations(attachments, ({ one }) => ({
460
562
  document: one(documents, {
461
563
  fields: [attachments.documentId],
package/dist/client.d.ts CHANGED
@@ -26,14 +26,22 @@ export interface DocsClientConfig {
26
26
  }
27
27
  export declare class DocsApiError extends Error {
28
28
  readonly status: number;
29
+ readonly code: string;
29
30
  readonly body: unknown;
30
31
  readonly url?: string;
31
32
  readonly requestId?: string;
32
33
  constructor(status: number, body: unknown, message?: string, metadata?: {
33
34
  url?: string;
34
35
  requestId?: string;
35
- });
36
+ }, code?: string);
37
+ private static codeFromBody;
36
38
  }
39
+ /**
40
+ * Identify public API errors across independently bundled DocsMint entrypoints.
41
+ * The global symbol is stable across bundles while the invariant checks avoid
42
+ * treating an arbitrary field-shaped Error as an API response.
43
+ */
44
+ export declare function isDocsApiError(error: unknown): error is DocsApiError;
37
45
  export declare class DocsNetworkError extends Error {
38
46
  readonly requestId?: string;
39
47
  constructor(message: string, options?: {
@@ -147,7 +155,9 @@ export declare class DocsClient {
147
155
  getGraphEntities(docId: string, context?: DocsRequestContext): Promise<DocsGraphEntitiesResponse>;
148
156
  listGraphEntities(docId: string, context?: DocsRequestContext): Promise<DocsGraphEntitiesResponse>;
149
157
  /** Return graph-related documents and their relation metadata. */
150
- getRelatedDocuments(docId: string, context?: DocsRequestContext): Promise<DocsGraphRelatedResponse>;
158
+ getRelatedDocuments(docId: string, context?: DocsRequestContext, options?: {
159
+ limit?: number;
160
+ }): Promise<DocsGraphRelatedResponse>;
151
161
  listRelatedDocuments(docId: string, context?: DocsRequestContext): Promise<DocsGraphRelatedResponse>;
152
162
  /** Bulk graph lookup for agent and product integrations. */
153
163
  graphSearch(input: {
package/dist/client.js CHANGED
@@ -10,20 +10,50 @@
10
10
  // ---------------------------------------------------------------------------
11
11
  // Errors
12
12
  // ---------------------------------------------------------------------------
13
+ const docsApiErrorBrand = Symbol.for("io.github.hiai-gg.docsmint.DocsApiError");
13
14
  export class DocsApiError extends Error {
14
15
  status;
16
+ code;
15
17
  body;
16
18
  url;
17
19
  requestId;
18
- constructor(status, body, message, metadata) {
20
+ constructor(status, body, message, metadata, code) {
19
21
  super(message ?? `hiai-docs API error ${status}`);
20
22
  this.name = "DocsApiError";
21
23
  this.status = status;
24
+ this.code = code ?? DocsApiError.codeFromBody(status, body);
22
25
  this.body = body;
23
26
  this.url = metadata?.url;
24
27
  this.requestId = metadata?.requestId;
28
+ Object.defineProperty(this, docsApiErrorBrand, { value: true });
29
+ }
30
+ static codeFromBody(status, body) {
31
+ return body &&
32
+ typeof body === "object" &&
33
+ "code" in body &&
34
+ typeof body.code === "string"
35
+ ? body.code
36
+ : `http_${status}`;
25
37
  }
26
38
  }
39
+ /**
40
+ * Identify public API errors across independently bundled DocsMint entrypoints.
41
+ * The global symbol is stable across bundles while the invariant checks avoid
42
+ * treating an arbitrary field-shaped Error as an API response.
43
+ */
44
+ export function isDocsApiError(error) {
45
+ if (!(error instanceof Error))
46
+ return false;
47
+ const candidate = error;
48
+ return (candidate[docsApiErrorBrand] === true &&
49
+ candidate.name === "DocsApiError" &&
50
+ Number.isInteger(candidate.status) &&
51
+ candidate.status >= 300 &&
52
+ candidate.status <= 599 &&
53
+ typeof candidate.code === "string" &&
54
+ candidate.code.length > 0 &&
55
+ Object.hasOwn(candidate, "body"));
56
+ }
27
57
  export class DocsNetworkError extends Error {
28
58
  requestId;
29
59
  constructor(message, options) {
@@ -270,8 +300,8 @@ export class DocsClient {
270
300
  return this.getGraphEntities(docId, context);
271
301
  }
272
302
  /** Return graph-related documents and their relation metadata. */
273
- async getRelatedDocuments(docId, context) {
274
- return this.request("GET", `/api/graph/related/${encodeURIComponent(docId)}`, undefined, context);
303
+ async getRelatedDocuments(docId, context, options) {
304
+ return this.request("GET", `/api/graph/related/${encodeURIComponent(docId)}`, { query: this.cleanQuery({ limit: options?.limit }) }, context);
275
305
  }
276
306
  async listRelatedDocuments(docId, context) {
277
307
  return this.getRelatedDocuments(docId, context);
@@ -380,15 +410,22 @@ export class DocsClient {
380
410
  const url = this.buildUrl(path, options?.query);
381
411
  const requestContext = this.mergeContext(this.config.requestContext, context);
382
412
  const headers = new Headers(requestContext?.headers);
383
- if (!headers.has("Authorization") && this.config.apiKey) {
413
+ const hasWorkspaceAssertion = Boolean(requestContext?.workspaceAssertion);
414
+ if (hasWorkspaceAssertion) {
415
+ headers.delete("Authorization");
416
+ headers.delete("Cookie");
417
+ }
418
+ if (this.config.apiKey && (hasWorkspaceAssertion || !headers.has("Authorization"))) {
384
419
  headers.set("Authorization", `Bearer ${this.config.apiKey}`);
385
420
  }
386
- if (requestContext?.authorization)
421
+ if (!hasWorkspaceAssertion && requestContext?.authorization)
387
422
  headers.set("Authorization", requestContext.authorization);
388
- if (requestContext?.cookie)
423
+ if (!hasWorkspaceAssertion && requestContext?.cookie)
389
424
  headers.set("Cookie", requestContext.cookie);
390
425
  if (requestContext?.requestId)
391
426
  headers.set("X-Request-Id", requestContext.requestId);
427
+ if (requestContext?.idempotencyKey)
428
+ headers.set("Idempotency-Key", requestContext.idempotencyKey);
392
429
  if (requestContext?.workspaceAssertion) {
393
430
  headers.set("X-Docsmint-Workspace-Context", requestContext.workspaceAssertion);
394
431
  }
@@ -406,39 +443,55 @@ export class DocsClient {
406
443
  init.body = body;
407
444
  let lastError = null;
408
445
  const maxAttempts = Math.max(1, this.config.retries);
446
+ const timeoutMs = requestContext?.timeoutMs ?? this.config.timeout;
409
447
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
410
- const timeoutSignal = AbortSignal.timeout(this.config.timeout);
448
+ const timeoutController = new AbortController();
449
+ const timeoutTimer = setTimeout(() => {
450
+ timeoutController.abort(new DOMException("timed out", "TimeoutError"));
451
+ }, timeoutMs);
411
452
  const signal = requestContext?.signal
412
- ? AbortSignal.any([requestContext.signal, timeoutSignal])
413
- : timeoutSignal;
453
+ ? AbortSignal.any([requestContext.signal, timeoutController.signal])
454
+ : timeoutController.signal;
455
+ let response;
456
+ let requestError;
414
457
  try {
415
- const res = await this.config.fetch(url, { ...init, signal });
416
- if (this.shouldRetryStatus(res.status) && attempt < maxAttempts - 1) {
458
+ response = await this.config.fetch(url, { ...init, signal });
459
+ }
460
+ catch (err) {
461
+ requestError = err;
462
+ }
463
+ finally {
464
+ clearTimeout(timeoutTimer);
465
+ }
466
+ // A per-attempt deadline only governs fetch. Release it before any
467
+ // retry backoff so dormant timers cannot accumulate between attempts.
468
+ if (response) {
469
+ if (this.shouldRetryStatus(response.status) &&
470
+ attempt < maxAttempts - 1) {
417
471
  await this.sleep(this.backoffDelay(attempt), requestContext?.signal);
418
472
  continue;
419
473
  }
420
- return res;
474
+ return response;
421
475
  }
422
- catch (err) {
423
- lastError = err;
424
- // A caller cancellation is authoritative. Do not retry it and do
425
- // not turn it into a timeout merely because the internal timeout
426
- // signal is also part of AbortSignal.any(). Preserving the original
427
- // error keeps standard AbortController semantics for hosts.
428
- if (requestContext?.signal?.aborted) {
429
- throw requestContext.signal.reason ?? err;
430
- }
431
- if (!this.isRetryableError(err) || attempt === maxAttempts - 1) {
432
- if (this.isTimeoutError(err)) {
433
- throw new DocsTimeoutError(this.config.timeout, {
434
- cause: err,
435
- requestId: requestContext?.requestId,
436
- });
437
- }
438
- throw this.wrapNetworkError(err, requestContext?.requestId);
476
+ lastError = requestError;
477
+ // A caller cancellation is authoritative. Do not retry it and do
478
+ // not turn it into a timeout merely because the internal timeout
479
+ // signal is also part of AbortSignal.any(). Preserving the original
480
+ // error keeps standard AbortController semantics for hosts.
481
+ if (requestContext?.signal?.aborted) {
482
+ throw requestContext.signal.reason ?? requestError;
483
+ }
484
+ if (!this.isRetryableError(requestError) ||
485
+ attempt === maxAttempts - 1) {
486
+ if (this.isTimeoutError(requestError)) {
487
+ throw new DocsTimeoutError(timeoutMs, {
488
+ cause: requestError,
489
+ requestId: requestContext?.requestId,
490
+ });
439
491
  }
440
- await this.sleep(this.backoffDelay(attempt), requestContext?.signal);
492
+ throw this.wrapNetworkError(requestError, requestContext?.requestId);
441
493
  }
494
+ await this.sleep(this.backoffDelay(attempt), requestContext?.signal);
442
495
  }
443
496
  // Should be unreachable — the loop above either returns or throws.
444
497
  throw this.wrapNetworkError(lastError, requestContext?.requestId);
@@ -3,11 +3,11 @@ import { t } from "./circle-check-BrqfiQH1.js";
3
3
  import { n } from "./dist-DQa_OHOa.js";
4
4
  import { C as r, S as i, _ as a, b as o, er as s, g as c, h as l, ir as u, m as d, nr as f, rr as p, v as m, x as h, y as g } from "./messages-DIovIZrK.js";
5
5
  import { a as ee } from "./route-context-DYQlUfzL.js";
6
- import { a as te, i as _, n as ne, o as v, r as re, t as ie } from "./dialog-Ce79C9fd.js";
7
- import { t as ae } from "./input-BWlOML_m.js";
8
- import { t as y } from "./label-C2HfJNQ2.js";
6
+ import { a as te, i as _, n as ne, o as v, r as re, t as ie } from "./dialog-C2iKObEu.js";
7
+ import { t as ae } from "./input-eHFb2qiL.js";
8
+ import { t as y } from "./label-_I1iiaNU.js";
9
9
  import { a as oe, n as se, o as ce, r as b, s as le, t as ue } from "./api-keys-DIwAdYkg.js";
10
- import { a as de, i as fe, n as pe, r as me, t as he } from "./select-value-JCAp2PmU.js";
10
+ import { a as de, i as fe, n as pe, r as me, t as he } from "./select-value-CtMyrvDJ.js";
11
11
  import "svelte/internal/disclose-version";
12
12
  import * as x from "svelte/internal/client";
13
13
  //#region src/lib/components/sidebar/category-api-key-flow.ts
@@ -1,9 +1,9 @@
1
1
  import { n as e } from "./dist-DQa_OHOa.js";
2
- import { a as t, i as n, n as r, o as i, r as a, t as o } from "./dialog-Ce79C9fd.js";
3
- import { t as s } from "./textarea-DOAE-h42.js";
2
+ import { a as t, i as n, n as r, o as i, r as a, t as o } from "./dialog-C2iKObEu.js";
3
+ import { t as s } from "./textarea-2eslfANY.js";
4
4
  import "svelte/internal/disclose-version";
5
5
  import * as c from "svelte/internal/client";
6
- //#region ../node_modules/.bun/@hiai-gg+hiai-ui@0.0.8+3149ccaa93f654b8/node_modules/@hiai-gg/hiai-ui/dist/components/ui/confirm-dialog/ConfirmDialog.svelte
6
+ //#region ../node_modules/.bun/@hiai-gg+hiai-ui@0.0.8+8f2b9fada26e5f3b/node_modules/@hiai-gg/hiai-ui/dist/components/ui/confirm-dialog/ConfirmDialog.svelte
7
7
  var l = c.from_html("<!> <!>", 1), u = c.from_html("<div class=\"grid gap-2 py-2\"><label for=\"confirm-dialog-reason\" class=\"text-sm font-medium\"> </label> <!></div>"), d = c.from_html("<!> ", 1), f = c.from_html("<!> <!> <!>", 1);
8
8
  function p(p, m) {
9
9
  c.push(m, !0);
@@ -1,10 +1,10 @@
1
1
  import { n as e } from "./dist-DQa_OHOa.js";
2
2
  import { V as t, Yt as n, an as r, ar as i, en as a, in as o, nn as s, on as c, rn as l, rr as u, sn as d, tn as f } from "./messages-DIovIZrK.js";
3
3
  import { a as p } from "./route-context-DYQlUfzL.js";
4
- import { a as m, i as h, n as g, o as _, r as v, t as y } from "./dialog-Ce79C9fd.js";
5
- import { t as b } from "./input-BWlOML_m.js";
4
+ import { a as m, i as h, n as g, o as _, r as v, t as y } from "./dialog-C2iKObEu.js";
5
+ import { t as b } from "./input-eHFb2qiL.js";
6
6
  import { n as x, t as S } from "./client-GbtOH90i.js";
7
- import { t as C } from "./textarea-DOAE-h42.js";
7
+ import { t as C } from "./textarea-2eslfANY.js";
8
8
  import "svelte/internal/disclose-version";
9
9
  import * as w from "svelte/internal/client";
10
10
  //#region src/lib/components/CreateSnapshotDialog.svelte
@@ -2,8 +2,8 @@ import { t as e } from "./Icon-Db-o32_E.js";
2
2
  import { n as t } from "./folder-Cx60MRpi.js";
3
3
  import { t as n } from "./dist-DQa_OHOa.js";
4
4
  import { $ as r, G as i, H as a, J as o, K as s, Q as c, U as l, W as u, X as d, Y as f, Z as p, at as m, ct as h, dt as g, et as _, it as v, lt as ee, nt as te, ot as y, q as ne, rt as b, st as x, tt as S, ut as C } from "./messages-DIovIZrK.js";
5
- import { t as w } from "./utils-BPDRytUU.js";
6
- import { A as T, K as E, et as D, q as O } from "./floating-layer-anchor-S5RSefGN.js";
5
+ import { t as w } from "./utils-CDBqTgoV.js";
6
+ import { A as T, K as E, et as D, q as O } from "./floating-layer-anchor-BGIndLY-.js";
7
7
  import "svelte/internal/disclose-version";
8
8
  import * as k from "svelte/internal/client";
9
9
  import { getAllContexts as A, mount as j, unmount as M } from "svelte";
@@ -84,7 +84,7 @@ function F(t, n) {
84
84
  }));
85
85
  }
86
86
  //#endregion
87
- //#region ../node_modules/.bun/bits-ui@2.18.1+203cd734255b50e4/node_modules/bits-ui/dist/bits/utilities/portal/portal-consumer.svelte
87
+ //#region ../node_modules/.bun/bits-ui@2.18.1+cc847a85639d1c68/node_modules/bits-ui/dist/bits/utilities/portal/portal-consumer.svelte
88
88
  function I(e, t) {
89
89
  var n = k.comment(), r = k.first_child(n);
90
90
  k.key(r, () => t.children, (e) => {
@@ -93,7 +93,7 @@ function I(e, t) {
93
93
  }), k.append(e, n);
94
94
  }
95
95
  //#endregion
96
- //#region ../node_modules/.bun/bits-ui@2.18.1+203cd734255b50e4/node_modules/bits-ui/dist/bits/utilities/config/bits-config.js
96
+ //#region ../node_modules/.bun/bits-ui@2.18.1+cc847a85639d1c68/node_modules/bits-ui/dist/bits/utilities/config/bits-config.js
97
97
  var L = new O("BitsConfig");
98
98
  function R() {
99
99
  let e = new z(null, {});
@@ -117,7 +117,7 @@ function B(e, t) {
117
117
  });
118
118
  }
119
119
  //#endregion
120
- //#region ../node_modules/.bun/bits-ui@2.18.1+203cd734255b50e4/node_modules/bits-ui/dist/bits/utilities/config/prop-resolvers.js
120
+ //#region ../node_modules/.bun/bits-ui@2.18.1+cc847a85639d1c68/node_modules/bits-ui/dist/bits/utilities/config/prop-resolvers.js
121
121
  function V(e, t) {
122
122
  return (n) => {
123
123
  let r = R();
@@ -131,7 +131,7 @@ function V(e, t) {
131
131
  }
132
132
  var H = V((e) => e.defaultPortalTo, "body");
133
133
  //#endregion
134
- //#region ../node_modules/.bun/bits-ui@2.18.1+203cd734255b50e4/node_modules/bits-ui/dist/bits/utilities/portal/portal.svelte
134
+ //#region ../node_modules/.bun/bits-ui@2.18.1+cc847a85639d1c68/node_modules/bits-ui/dist/bits/utilities/portal/portal.svelte
135
135
  function U(e, t) {
136
136
  k.push(t, !0);
137
137
  let n = H(() => t.to), r = A(), i = k.derived(a);
@@ -166,7 +166,7 @@ function U(e, t) {
166
166
  }), k.append(e, c), k.pop();
167
167
  }
168
168
  //#endregion
169
- //#region ../node_modules/.bun/@hiai-gg+hiai-ui@0.0.8+3149ccaa93f654b8/node_modules/@hiai-gg/hiai-ui/dist/components/ui/badge/badge.svelte
169
+ //#region ../node_modules/.bun/@hiai-gg+hiai-ui@0.0.8+8f2b9fada26e5f3b/node_modules/@hiai-gg/hiai-ui/dist/components/ui/badge/badge.svelte
170
170
  var W = /* @__PURE__ */ new Set([
171
171
  "$$slots",
172
172
  "$$events",
@@ -193,7 +193,7 @@ function K(e, t) {
193
193
  }), k.reset(a), k.bind_this(a, (e) => n(e), () => n()), k.append(e, a), k.pop();
194
194
  }
195
195
  //#endregion
196
- //#region ../node_modules/.bun/@hiai-gg+hiai-ui@0.0.8+3149ccaa93f654b8/node_modules/@hiai-gg/hiai-ui/dist/components/ui/badge/index.js
196
+ //#region ../node_modules/.bun/@hiai-gg+hiai-ui@0.0.8+8f2b9fada26e5f3b/node_modules/@hiai-gg/hiai-ui/dist/components/ui/badge/index.js
197
197
  var q = n({
198
198
  base: "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
199
199
  variants: { variant: {
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./circle-check-BrqfiQH1.js";
2
2
  import { n as t } from "./dist-DQa_OHOa.js";
3
- import { a as n, i as r, n as i, o as a, r as o, t as s } from "./dialog-Ce79C9fd.js";
3
+ import { a as n, i as r, n as i, o as a, r as o, t as s } from "./dialog-C2iKObEu.js";
4
4
  import "svelte/internal/disclose-version";
5
5
  import * as c from "svelte/internal/client";
6
6
  //#region src/lib/components/DeleteDialog.svelte
@@ -1,5 +1,5 @@
1
1
  import { n as e, t } from "./folder-Cx60MRpi.js";
2
- import { a as n, i as r, o as i, r as a, t as o } from "./dropdown-menu-CJ_7V3N0.js";
2
+ import { a as n, i as r, o as i, r as a, t as o } from "./dropdown-menu-BXIl2E26.js";
3
3
  import { Kt as s, Pi as c, Ti as l, Xn as u, hi as ee, mi as te, vi as d } from "./messages-DIovIZrK.js";
4
4
  import { a as f, n as p, t as m } from "./route-context-DYQlUfzL.js";
5
5
  import { t as h } from "./utils-DrfHTcei.js";
@@ -7,15 +7,15 @@ import { t as a } from "./x-cfdlccjs.js";
7
7
  import { n as o } from "./dist-DQa_OHOa.js";
8
8
  import { Ai as s, An as c, Bn as l, Cn as u, Dn as d, En as f, F as p, Fn as m, Hn as h, I as g, In as _, Jt as v, L as y, Ln as ee, M as b, Mn as te, N as x, Nn as ne, On as re, P as ie, Pn as ae, R as oe, Rn as se, Sn as ce, Tn as le, Un as ue, Vn as de, Wt as fe, _n as pe, ar as me, bn as he, cn as ge, gn as _e, hn as ve, ir as ye, j as be, jn as xe, kn as Se, or as Ce, qt as we, rr as Te, vn as Ee, wn as De, xn as Oe, yn as ke, z as Ae, zn as je } from "./messages-DIovIZrK.js";
9
9
  import { a as Me } from "./route-context-DYQlUfzL.js";
10
- import { a as Ne, n as Pe, o as Fe, r as Ie, t as Le } from "./dialog-Ce79C9fd.js";
11
- import { t as Re } from "./input-BWlOML_m.js";
12
- import { n as ze } from "./db-ByrlYfaI.js";
13
- import { a as Be } from "./identity-DyWeNzu_.js";
10
+ import { a as Ne, n as Pe, o as Fe, r as Ie, t as Le } from "./dialog-C2iKObEu.js";
11
+ import { t as Re } from "./input-eHFb2qiL.js";
12
+ import { n as ze } from "./db-Bo1t_76T.js";
13
+ import { a as Be } from "./identity-Ynrglr5i.js";
14
14
  import { h as Ve, u as He } from "./keyboard.svelte-CApmX0vl.js";
15
15
  import { t as Ue } from "./clipboard-Cgzxc0_R.js";
16
- import { n as We, o as Ge, r as Ke } from "./attachments-B8AuDjno.js";
16
+ import { n as We, o as Ge, r as Ke } from "./attachments-B2aH3hXF.js";
17
17
  import { A as S, B as qe, C, D as Je, F as Ye, H as Xe, L as Ze, M as Qe, N as $e, O as w, P as et, S as T, U as E, Y as tt, _ as D, a as nt, b as O, c as rt, ct as k, d as A, et as j, f as it, ft as M, h as N, j as P, k as at, l as ot, lt as F, m as I, mt as st, o as ct, p as lt, pt as ut, s as dt, st as ft, tt as pt, u as L, v as mt, w as ht, x as gt, y as R, z } from "./awareness-snQ3RD9f.js";
18
- import { t as _t } from "./CreateSnapshotDialog-FUq-ZfBH.js";
18
+ import { t as _t } from "./CreateSnapshotDialog-BmCRpOMv.js";
19
19
  import { _ as vt, a as yt, b as B, c as V, d as H, f as U, g as W, h as G, l as bt, m as xt, o as St, p as Ct, r as wt, s as Tt, u as Et, v as Dt, y as K } from "./editorExtensions-BmINh76i.js";
20
20
  import { t as Ot } from "./markdown-A5xji16P.js";
21
21
  import "svelte/internal/disclose-version";