@agent-native/core 0.114.0 → 0.114.1

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 (162) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +9 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/client/build-compatibility.ts +77 -0
  5. package/corpus/core/src/client/route-chunk-recovery/index.ts +1 -0
  6. package/corpus/core/src/client/use-action.ts +32 -1
  7. package/corpus/core/src/deploy/build.ts +4 -1
  8. package/corpus/core/src/org/context.ts +56 -30
  9. package/corpus/core/src/server/action-routes.ts +52 -2
  10. package/corpus/core/src/server/auth-plugin.ts +9 -4
  11. package/corpus/core/src/server/better-auth-instance.ts +5 -1
  12. package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
  13. package/corpus/core/src/vite/client.ts +17 -0
  14. package/corpus/templates/content/AGENTS.md +2 -0
  15. package/corpus/templates/content/actions/_content-database-personal-view.ts +49 -5
  16. package/corpus/templates/content/actions/_content-document-access.ts +21 -0
  17. package/corpus/templates/content/actions/_content-favorites.ts +91 -0
  18. package/corpus/templates/content/actions/_content-files.ts +79 -23
  19. package/corpus/templates/content/actions/_content-sidebar-state.ts +24 -0
  20. package/corpus/templates/content/actions/_content-space-access.ts +15 -17
  21. package/corpus/templates/content/actions/_content-space-catalog-guards.ts +20 -0
  22. package/corpus/templates/content/actions/_content-spaces.ts +364 -167
  23. package/corpus/templates/content/actions/_database-source-utils.ts +8 -0
  24. package/corpus/templates/content/actions/_database-utils.ts +249 -15
  25. package/corpus/templates/content/actions/_delete-content-space.ts +84 -0
  26. package/corpus/templates/content/actions/_files-system-properties.ts +499 -0
  27. package/corpus/templates/content/actions/_local-file-documents.ts +0 -1
  28. package/corpus/templates/content/actions/_property-utils.ts +18 -9
  29. package/corpus/templates/content/actions/bind-content-database-source-field.ts +3 -0
  30. package/corpus/templates/content/actions/configure-document-property.ts +3 -0
  31. package/corpus/templates/content/actions/create-content-database.ts +2 -2
  32. package/corpus/templates/content/actions/create-content-space.ts +34 -0
  33. package/corpus/templates/content/actions/create-document.ts +4 -1
  34. package/corpus/templates/content/actions/delete-content-space.ts +19 -0
  35. package/corpus/templates/content/actions/delete-database-items.ts +28 -1
  36. package/corpus/templates/content/actions/delete-document-property.ts +3 -0
  37. package/corpus/templates/content/actions/delete-document.ts +39 -2
  38. package/corpus/templates/content/actions/duplicate-database-item.ts +6 -0
  39. package/corpus/templates/content/actions/duplicate-database-items.ts +6 -0
  40. package/corpus/templates/content/actions/duplicate-document-property.ts +3 -0
  41. package/corpus/templates/content/actions/get-content-database.ts +11 -2
  42. package/corpus/templates/content/actions/get-content-sidebar-state.ts +23 -0
  43. package/corpus/templates/content/actions/get-document.ts +32 -7
  44. package/corpus/templates/content/actions/import-content-source.ts +33 -1
  45. package/corpus/templates/content/actions/list-content-spaces.ts +34 -2
  46. package/corpus/templates/content/actions/list-documents.ts +39 -7
  47. package/corpus/templates/content/actions/reorder-document-property.ts +9 -0
  48. package/corpus/templates/content/actions/set-document-property.ts +41 -23
  49. package/corpus/templates/content/actions/share-local-file-document.ts +15 -0
  50. package/corpus/templates/content/actions/submit-content-database-form.ts +7 -0
  51. package/corpus/templates/content/actions/sync-local-folder-source.ts +14 -0
  52. package/corpus/templates/content/actions/update-content-database-view.ts +1 -0
  53. package/corpus/templates/content/actions/update-content-sidebar-state.ts +27 -0
  54. package/corpus/templates/content/actions/update-document.ts +158 -66
  55. package/corpus/templates/content/app/components/EmptyState.tsx +4 -57
  56. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +8 -1
  57. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +519 -178
  58. package/corpus/templates/content/app/components/editor/DocumentInfoPanel.tsx +39 -0
  59. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +1 -1
  60. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +266 -7
  61. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +430 -152
  62. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +467 -66
  63. package/corpus/templates/content/app/components/editor/database/view-config.ts +9 -3
  64. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +720 -196
  65. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +173 -1
  66. package/corpus/templates/content/app/components/sidebar/document-sidebar-sections.ts +1 -1
  67. package/corpus/templates/content/app/components/sidebar/select-content-space.ts +91 -16
  68. package/corpus/templates/content/app/entry.client.tsx +5 -1
  69. package/corpus/templates/content/app/hooks/use-content-database.ts +84 -3
  70. package/corpus/templates/content/app/hooks/use-content-spaces.ts +60 -2
  71. package/corpus/templates/content/app/hooks/use-create-page.ts +30 -0
  72. package/corpus/templates/content/app/hooks/use-documents.ts +270 -19
  73. package/corpus/templates/content/app/i18n-data.ts +243 -20
  74. package/corpus/templates/content/app/lib/local-folder-picker-safety.ts +54 -0
  75. package/corpus/templates/content/app/lib/local-folder-picker-support.ts +18 -0
  76. package/corpus/templates/content/app/routes/_app.favorites.tsx +30 -0
  77. package/corpus/templates/content/app/routes/_app.local-files.tsx +18 -6
  78. package/corpus/templates/content/changelog/2026-07-17-workspace-files-now-stay-in-a-loading-state-until-automatic-.md +6 -0
  79. package/corpus/templates/content/changelog/2026-07-17-workspace-switching-now-opens-the-selected-files-database-pr.md +6 -0
  80. package/corpus/templates/content/changelog/2026-07-17-workspaces-now-expand-above-their-own-files-list-without-dup.md +6 -0
  81. package/corpus/templates/content/changelog/2026-07-18-create-named-workspaces-each-with-its-own-private-files-data.md +6 -0
  82. package/corpus/templates/content/changelog/2026-07-18-favorites-align-with-workspace-and-file-rows-in-the-sidebar.md +6 -0
  83. package/corpus/templates/content/changelog/2026-07-18-local-folder-selection-no-longer-invokes-the-unsafe-native-p.md +6 -0
  84. package/corpus/templates/content/changelog/2026-07-18-made-content-workspaces-independently-expandable-restored-or.md +6 -0
  85. package/corpus/templates/content/changelog/2026-07-18-page-details-now-live-in-a-shared-info-and-comments-rail-dat.md +6 -0
  86. package/corpus/templates/content/changelog/2026-07-18-workspace-database-views-now-control-sidebar-workspace-navig.md +6 -0
  87. package/corpus/templates/content/changelog/2026-07-18-workspace-navigation-now-aligns-favorites-with-workspace-pag.md +6 -0
  88. package/corpus/templates/content/changelog/2026-07-19-favorites-now-open-as-a-table-and-compact-breadcrumbs-make-w.md +6 -0
  89. package/corpus/templates/content/changelog/2026-07-19-files-databases-now-start-unfiltered-sidebar-rows-exactly-fo.md +6 -0
  90. package/corpus/templates/content/changelog/2026-07-19-sidebar-page-trees-now-open-only-when-expanded-remember-thei.md +6 -0
  91. package/corpus/templates/content/changelog/2026-07-19-workspace-file-databases-now-use-the-workspace-name-open-as-.md +6 -0
  92. package/corpus/templates/content/changelog/2026-07-19-workspace-navigation-now-stays-stable-on-hover-uses-folder-i.md +6 -0
  93. package/corpus/templates/content/changelog/2026-07-19-workspace-rows-now-use-folder-icons-and-deleting-a-user-crea.md +6 -0
  94. package/corpus/templates/content/changelog/2026-07-19-workspaces-can-be-created-without-leaving-the-workspaces-dat.md +6 -0
  95. package/corpus/templates/content/e2e/global-setup.ts +3 -2
  96. package/corpus/templates/content/parity/matrix.md +28 -28
  97. package/corpus/templates/content/parity/matrix.ts +8 -2
  98. package/corpus/templates/content/server/db/index.ts +1 -0
  99. package/corpus/templates/content/server/db/schema.ts +10 -0
  100. package/corpus/templates/content/server/lib/documents.ts +12 -7
  101. package/corpus/templates/content/server/plugins/db.ts +17 -0
  102. package/corpus/templates/content/shared/api.ts +9 -0
  103. package/corpus/templates/content/shared/database-form.ts +11 -2
  104. package/corpus/templates/content/vite.config.ts +1 -0
  105. package/dist/client/build-compatibility.d.ts +11 -0
  106. package/dist/client/build-compatibility.d.ts.map +1 -0
  107. package/dist/client/build-compatibility.js +56 -0
  108. package/dist/client/build-compatibility.js.map +1 -0
  109. package/dist/client/route-chunk-recovery/index.d.ts +1 -0
  110. package/dist/client/route-chunk-recovery/index.d.ts.map +1 -1
  111. package/dist/client/route-chunk-recovery/index.js +1 -0
  112. package/dist/client/route-chunk-recovery/index.js.map +1 -1
  113. package/dist/client/use-action.d.ts.map +1 -1
  114. package/dist/client/use-action.js +19 -1
  115. package/dist/client/use-action.js.map +1 -1
  116. package/dist/collab/routes.d.ts +1 -1
  117. package/dist/collab/struct-routes.d.ts +1 -1
  118. package/dist/deploy/build.js +2 -1
  119. package/dist/deploy/build.js.map +1 -1
  120. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  121. package/dist/notifications/routes.d.ts +1 -1
  122. package/dist/observability/routes.d.ts +5 -5
  123. package/dist/org/context.d.ts +4 -2
  124. package/dist/org/context.d.ts.map +1 -1
  125. package/dist/org/context.js +44 -22
  126. package/dist/org/context.js.map +1 -1
  127. package/dist/progress/routes.d.ts +1 -1
  128. package/dist/provider-api/actions/custom-provider-registration.d.ts +10 -10
  129. package/dist/provider-api/actions/provider-api.d.ts +12 -12
  130. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  131. package/dist/resources/handlers.d.ts +1 -1
  132. package/dist/secrets/routes.d.ts +9 -9
  133. package/dist/server/action-routes.d.ts.map +1 -1
  134. package/dist/server/action-routes.js +32 -2
  135. package/dist/server/action-routes.js.map +1 -1
  136. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  137. package/dist/server/auth-plugin.d.ts.map +1 -1
  138. package/dist/server/auth-plugin.js +9 -5
  139. package/dist/server/auth-plugin.js.map +1 -1
  140. package/dist/server/better-auth-instance.d.ts.map +1 -1
  141. package/dist/server/better-auth-instance.js +4 -1
  142. package/dist/server/better-auth-instance.js.map +1 -1
  143. package/dist/server/transcribe-voice.d.ts +1 -1
  144. package/dist/shared/mcp-embed-headers.d.ts +1 -1
  145. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  146. package/dist/shared/mcp-embed-headers.js +1 -1
  147. package/dist/shared/mcp-embed-headers.js.map +1 -1
  148. package/dist/vite/client.d.ts +6 -0
  149. package/dist/vite/client.d.ts.map +1 -1
  150. package/dist/vite/client.js +8 -0
  151. package/dist/vite/client.js.map +1 -1
  152. package/package.json +1 -1
  153. package/src/client/build-compatibility.ts +77 -0
  154. package/src/client/route-chunk-recovery/index.ts +1 -0
  155. package/src/client/use-action.ts +32 -1
  156. package/src/deploy/build.ts +4 -1
  157. package/src/org/context.ts +56 -30
  158. package/src/server/action-routes.ts +52 -2
  159. package/src/server/auth-plugin.ts +9 -4
  160. package/src/server/better-auth-instance.ts +5 -1
  161. package/src/shared/mcp-embed-headers.ts +1 -1
  162. package/src/vite/client.ts +17 -0
@@ -2668,6 +2668,8 @@ const editorToolbarMessages = {
2668
2668
  failedToDisconnect: "Failed to disconnect.",
2669
2669
  failedToUpdateSharing: "Failed to update sharing",
2670
2670
  hideInSearch: "Hide in search",
2671
+ info: "Info",
2672
+ closeUtilityPanel: "Close panel",
2671
2673
  hideInSearchDescription:
2672
2674
  "Hide from Organization and search. People with the link can still view.",
2673
2675
  importingFromNotion: "Importing from Notion...",
@@ -2789,9 +2791,12 @@ const editorSlashMessages = {
2789
2791
  };
2790
2792
 
2791
2793
  const localFilesMessages = {
2794
+ interruptedPicker:
2795
+ "The folder picker did not finish last time, so it has been disabled in this browser profile. Use Agent Native Desktop, Chrome, Edge, or another Chromium browser.",
2792
2796
  unsupportedElectron:
2793
- "Local folder sync is unavailable in this Electron browser. Use Agent Native Desktop or a browser with folder access.",
2794
- unsupportedBrowser: "Folder access is unavailable in this browser.",
2797
+ "Local folder sync is unavailable here. Use Agent Native Desktop, Chrome, Edge, or another Chromium browser.",
2798
+ unsupportedBrowser:
2799
+ "Local folder sync is unavailable here. Use Agent Native Desktop, Chrome, Edge, or another Chromium browser.",
2795
2800
  notSyncedYet: "Not synced yet",
2796
2801
  summaryCreated: "{{count}} created",
2797
2802
  summaryUpdated: "{{count}} updated",
@@ -3063,6 +3068,8 @@ const enUS = {
3063
3068
  },
3064
3069
  comments: {
3065
3070
  add: "Add a comment...",
3071
+ title: "Comments",
3072
+ empty: "No comments yet.",
3066
3073
  cancel: "Cancel",
3067
3074
  submit: "Comment",
3068
3075
  askAi: "Ask AI",
@@ -3085,6 +3092,7 @@ const enUS = {
3085
3092
  localFiles: localFilesMessages,
3086
3093
  sidebar: {
3087
3094
  cannotReorderPages: "Cannot reorder pages",
3095
+ addWorkspace: "Add workspace",
3088
3096
  addChild: "Add child",
3089
3097
  addChildTo: "Add child to {{title}}",
3090
3098
  addSubPage: "Add sub-page",
@@ -3107,15 +3115,19 @@ const enUS = {
3107
3115
  deletePermanently: "Delete permanently",
3108
3116
  failedCreateDatabase: "Failed to create database",
3109
3117
  failedCreatePage: "Failed to create page",
3118
+ failedCreateWorkspace: "Failed to create workspace",
3110
3119
  failedDeletePage: "Failed to delete page",
3111
3120
  failedPermanentDeleteDatabase: "Failed to permanently delete database",
3112
3121
  failedMovePage: "Failed to move page",
3122
+ failedUpdateFavorite: "Could not update favorite",
3123
+ removeFromFavorites: "Remove from favorites",
3113
3124
  failedRemoveLocalFiles: "Failed to remove local files",
3114
3125
  failedRestoreDatabase: "Failed to restore database",
3115
3126
  deletePageDescription:
3116
3127
  "“{{title}}” and all its sub-pages will be permanently deleted. This cannot be undone.",
3117
3128
  deletePageQuestion: "Delete page?",
3118
3129
  localFiles: "Local files",
3130
+ localFolder: "Local folder",
3119
3131
  files: "Files",
3120
3132
  loadingFiles: "Loading files…",
3121
3133
  localFilesActions: "Local files actions",
@@ -3125,6 +3137,11 @@ const enUS = {
3125
3137
  new: "New",
3126
3138
  newDatabase: "New database",
3127
3139
  newPage: "New page",
3140
+ newWorkspace: "New workspace",
3141
+ newWorkspaceDescription:
3142
+ "Create a private workspace with its own Files database.",
3143
+ workspaceName: "Workspace name",
3144
+ createWorkspace: "Create workspace",
3128
3145
  nextStep: "Next step",
3129
3146
  notionConfigureOAuthAuthorize:
3130
3147
  "Configure OAuth, then authorize your workspace.",
@@ -3920,9 +3937,12 @@ const rawLiteralLocaleMessages: Partial<Record<LocaleCode, PartialMessages>> = {
3920
3937
 
3921
3938
  const localFilesMessagesByLocale = {
3922
3939
  "zh-CN": {
3940
+ interruptedPicker:
3941
+ "上次文件夹选择器未能完成,因此已在此浏览器配置文件中停用。请使用 Agent Native Desktop、Chrome、Edge 或其他 Chromium 浏览器。",
3923
3942
  unsupportedElectron:
3924
- " Electron 浏览器不支持本地文件夹同步。请使用 Agent Native Desktop 或支持文件夹访问的浏览器。",
3925
- unsupportedBrowser: "此浏览器不支持文件夹访问。",
3943
+ "此处无法使用本地文件夹同步。请使用 Agent Native Desktop、Chrome、Edge 或其他 Chromium 浏览器。",
3944
+ unsupportedBrowser:
3945
+ "此处无法使用本地文件夹同步。请使用 Agent Native Desktop、Chrome、Edge 或其他 Chromium 浏览器。",
3926
3946
  notSyncedYet: "尚未同步",
3927
3947
  summaryCreated: "已创建 {{count}} 个",
3928
3948
  summaryUpdated: "已更新 {{count}} 个",
@@ -3965,10 +3985,12 @@ const localFilesMessagesByLocale = {
3965
3985
  removing: "正在移除...",
3966
3986
  },
3967
3987
  "es-ES": {
3988
+ interruptedPicker:
3989
+ "El selector de carpetas no terminó la última vez, por lo que se ha desactivado en este perfil del navegador. Usa Agent Native Desktop, Chrome, Edge u otro navegador Chromium.",
3968
3990
  unsupportedElectron:
3969
- "La sincronización de carpetas locales no está disponible en este navegador Electron. Usa Agent Native Desktop o un navegador con acceso a carpetas.",
3991
+ "La sincronización de carpetas locales no está disponible aquí. Usa Agent Native Desktop, Chrome, Edge u otro navegador Chromium.",
3970
3992
  unsupportedBrowser:
3971
- "El acceso a carpetas no está disponible en este navegador.",
3993
+ "La sincronización de carpetas locales no está disponible aquí. Usa Agent Native Desktop, Chrome, Edge u otro navegador Chromium.",
3972
3994
  notSyncedYet: "Aún no sincronizado",
3973
3995
  summaryCreated: "{{count}} creados",
3974
3996
  summaryUpdated: "{{count}} actualizados",
@@ -4013,10 +4035,12 @@ const localFilesMessagesByLocale = {
4013
4035
  removing: "Quitando...",
4014
4036
  },
4015
4037
  "fr-FR": {
4038
+ interruptedPicker:
4039
+ "Le sélecteur de dossiers ne s’est pas terminé la dernière fois. Il a donc été désactivé dans ce profil de navigateur. Utilisez Agent Native Desktop, Chrome, Edge ou un autre navigateur Chromium.",
4016
4040
  unsupportedElectron:
4017
- "La synchronisation des dossiers locaux n’est pas disponible dans ce navigateur Electron. Utilisez Agent Native Desktop ou un navigateur avec accès aux dossiers.",
4041
+ "La synchronisation des dossiers locaux n’est pas disponible ici. Utilisez Agent Native Desktop, Chrome, Edge ou un autre navigateur Chromium.",
4018
4042
  unsupportedBrowser:
4019
- "L’accès aux dossiers n’est pas disponible dans ce navigateur.",
4043
+ "La synchronisation des dossiers locaux n’est pas disponible ici. Utilisez Agent Native Desktop, Chrome, Edge ou un autre navigateur Chromium.",
4020
4044
  notSyncedYet: "Pas encore synchronisé",
4021
4045
  summaryCreated: "{{count}} créés",
4022
4046
  summaryUpdated: "{{count}} mis à jour",
@@ -4062,9 +4086,12 @@ const localFilesMessagesByLocale = {
4062
4086
  removing: "Suppression...",
4063
4087
  },
4064
4088
  "de-DE": {
4089
+ interruptedPicker:
4090
+ "Die Ordnerauswahl wurde beim letzten Mal nicht abgeschlossen und ist daher in diesem Browserprofil deaktiviert. Verwende Agent Native Desktop, Chrome, Edge oder einen anderen Chromium-Browser.",
4065
4091
  unsupportedElectron:
4066
- "Die lokale Ordnersynchronisierung ist in diesem Electron-Browser nicht verfügbar. Verwende Agent Native Desktop oder einen Browser mit Ordnerzugriff.",
4067
- unsupportedBrowser: "Ordnerzugriff ist in diesem Browser nicht verfügbar.",
4092
+ "Die lokale Ordnersynchronisierung ist hier nicht verfügbar. Verwende Agent Native Desktop, Chrome, Edge oder einen anderen Chromium-Browser.",
4093
+ unsupportedBrowser:
4094
+ "Die lokale Ordnersynchronisierung ist hier nicht verfügbar. Verwende Agent Native Desktop, Chrome, Edge oder einen anderen Chromium-Browser.",
4068
4095
  notSyncedYet: "Noch nicht synchronisiert",
4069
4096
  summaryCreated: "{{count}} erstellt",
4070
4097
  summaryUpdated: "{{count}} aktualisiert",
@@ -4108,10 +4135,12 @@ const localFilesMessagesByLocale = {
4108
4135
  removing: "Wird entfernt...",
4109
4136
  },
4110
4137
  "ja-JP": {
4138
+ interruptedPicker:
4139
+ "前回フォルダーピッカーが完了しなかったため、このブラウザプロフィールでは無効になっています。Agent Native Desktop、Chrome、Edge、または別の Chromium ブラウザを使用してください。",
4111
4140
  unsupportedElectron:
4112
- "この Electron ブラウザーではローカルフォルダー同期を利用できません。Agent Native Desktop またはフォルダーアクセス対応ブラウザーを使用してください。",
4141
+ "ここではローカルフォルダー同期を利用できません。Agent Native Desktop、Chrome、Edge、またはその他の Chromium ブラウザーを使用してください。",
4113
4142
  unsupportedBrowser:
4114
- "このブラウザーではフォルダーアクセスを利用できません。",
4143
+ "ここではローカルフォルダー同期を利用できません。Agent Native Desktop、Chrome、Edge、またはその他の Chromium ブラウザーを使用してください。",
4115
4144
  notSyncedYet: "まだ同期されていません",
4116
4145
  summaryCreated: "{{count}} 件作成",
4117
4146
  summaryUpdated: "{{count}} 件更新",
@@ -4156,9 +4185,12 @@ const localFilesMessagesByLocale = {
4156
4185
  removing: "削除中...",
4157
4186
  },
4158
4187
  "ko-KR": {
4188
+ interruptedPicker:
4189
+ "지난번에 폴더 선택기가 완료되지 않아 이 브라우저 프로필에서 비활성화되었습니다. Agent Native Desktop, Chrome, Edge 또는 다른 Chromium 브라우저를 사용하세요.",
4159
4190
  unsupportedElectron:
4160
- " Electron 브라우저에서는 로컬 폴더 동기화를 사용할 수 없습니다. Agent Native Desktop 또는 폴더 접근을 지원하는 브라우저를 사용하세요.",
4161
- unsupportedBrowser: "이 브라우저에서는 폴더 접근을 사용할 수 없습니다.",
4191
+ "여기서는 로컬 폴더 동기화를 사용할 수 없습니다. Agent Native Desktop, Chrome, Edge 또는 다른 Chromium 브라우저를 사용하세요.",
4192
+ unsupportedBrowser:
4193
+ "여기서는 로컬 폴더 동기화를 사용할 수 없습니다. Agent Native Desktop, Chrome, Edge 또는 다른 Chromium 브라우저를 사용하세요.",
4162
4194
  notSyncedYet: "아직 동기화되지 않음",
4163
4195
  summaryCreated: "{{count}}개 생성됨",
4164
4196
  summaryUpdated: "{{count}}개 업데이트됨",
@@ -4203,10 +4235,12 @@ const localFilesMessagesByLocale = {
4203
4235
  removing: "제거 중...",
4204
4236
  },
4205
4237
  "pt-BR": {
4238
+ interruptedPicker:
4239
+ "O seletor de pastas não foi concluído da última vez, por isso foi desativado neste perfil do navegador. Use o Agent Native Desktop, Chrome, Edge ou outro navegador Chromium.",
4206
4240
  unsupportedElectron:
4207
- "A sincronização de pastas locais não está disponível neste navegador Electron. Use o Agent Native Desktop ou um navegador com acesso a pastas.",
4241
+ "A sincronização de pastas locais não está disponível aqui. Use o Agent Native Desktop, Chrome, Edge ou outro navegador Chromium.",
4208
4242
  unsupportedBrowser:
4209
- "O acesso a pastas não está disponível neste navegador.",
4243
+ "A sincronização de pastas locais não está disponível aqui. Use o Agent Native Desktop, Chrome, Edge ou outro navegador Chromium.",
4210
4244
  notSyncedYet: "Ainda não sincronizado",
4211
4245
  summaryCreated: "{{count}} criados",
4212
4246
  summaryUpdated: "{{count}} atualizados",
@@ -4251,9 +4285,12 @@ const localFilesMessagesByLocale = {
4251
4285
  removing: "Removendo...",
4252
4286
  },
4253
4287
  "hi-IN": {
4288
+ interruptedPicker:
4289
+ "पिछली बार फ़ोल्डर पिकर पूरा नहीं हुआ था, इसलिए इसे इस ब्राउज़र प्रोफ़ाइल में बंद कर दिया गया है। Agent Native Desktop, Chrome, Edge या किसी अन्य Chromium ब्राउज़र का उपयोग करें।",
4254
4290
  unsupportedElectron:
4255
- "इस Electron ब्राउज़र में स्थानीय फ़ोल्डर सिंक उपलब्ध नहीं है। Agent Native Desktop या फ़ोल्डर एक्सेस वाले ब्राउज़र का उपयोग करें।",
4256
- unsupportedBrowser: "इस ब्राउज़र में फ़ोल्डर एक्सेस उपलब्ध नहीं है।",
4291
+ "यहाँ स्थानीय फ़ोल्डर सिंक उपलब्ध नहीं है। Agent Native Desktop, Chrome, Edge या किसी अन्य Chromium ब्राउज़र का उपयोग करें।",
4292
+ unsupportedBrowser:
4293
+ "यहाँ स्थानीय फ़ोल्डर सिंक उपलब्ध नहीं है। Agent Native Desktop, Chrome, Edge या किसी अन्य Chromium ब्राउज़र का उपयोग करें।",
4257
4294
  notSyncedYet: "अभी सिंक नहीं हुआ",
4258
4295
  summaryCreated: "{{count}} बनाए गए",
4259
4296
  summaryUpdated: "{{count}} अपडेट किए गए",
@@ -4297,9 +4334,12 @@ const localFilesMessagesByLocale = {
4297
4334
  removing: "हटाया जा रहा है...",
4298
4335
  },
4299
4336
  "ar-SA": {
4337
+ interruptedPicker:
4338
+ "لم يكتمل منتقي المجلدات في المرة السابقة، لذلك تم تعطيله في ملف تعريف المتصفح هذا. استخدم Agent Native Desktop أو Chrome أو Edge أو متصفح Chromium آخر.",
4300
4339
  unsupportedElectron:
4301
- "مزامنة المجلدات المحلية غير متاحة في متصفح Electron هذا. استخدم Agent Native Desktop أو متصفحا يدعم الوصول إلى المجلدات.",
4302
- unsupportedBrowser: "الوصول إلى المجلدات غير متاح في هذا المتصفح.",
4340
+ "مزامنة المجلدات المحلية غير متاحة هنا. استخدم Agent Native Desktop أو Chrome أو Edge أو متصفح Chromium آخر.",
4341
+ unsupportedBrowser:
4342
+ "مزامنة المجلدات المحلية غير متاحة هنا. استخدم Agent Native Desktop أو Chrome أو Edge أو متصفح Chromium آخر.",
4303
4343
  notSyncedYet: "لم تتم المزامنة بعد",
4304
4344
  summaryCreated: "تم إنشاء {{count}}",
4305
4345
  summaryUpdated: "تم تحديث {{count}}",
@@ -10387,6 +10427,29 @@ export const messagesByLocale = {
10387
10427
  } satisfies Record<LocaleCode, Messages>;
10388
10428
 
10389
10429
  const contentExactEnglishTranslations = {
10430
+ "zh-TW": {
10431
+ editor: {
10432
+ toolbar: {
10433
+ info: "資訊",
10434
+ closeUtilityPanel: "關閉面板",
10435
+ },
10436
+ },
10437
+ comments: {
10438
+ title: "評論",
10439
+ empty: "尚無評論。",
10440
+ },
10441
+ sidebar: {
10442
+ addWorkspace: "新增工作區",
10443
+ failedCreateWorkspace: "無法建立工作區",
10444
+ failedUpdateFavorite: "無法更新收藏",
10445
+ removeFromFavorites: "從收藏中移除",
10446
+ localFolder: "本機資料夾",
10447
+ newWorkspace: "新增工作區",
10448
+ newWorkspaceDescription: "建立一個擁有專屬 Files 資料庫的私人工作區。",
10449
+ workspaceName: "工作區名稱",
10450
+ createWorkspace: "建立工作區",
10451
+ },
10452
+ },
10390
10453
  "zh-CN": {
10391
10454
  editor: {
10392
10455
  failedToCreatePage: "创建页面失败",
@@ -10406,6 +10469,8 @@ const contentExactEnglishTranslations = {
10406
10469
  equationSubmitHint: "输入时会实时更新预览。按 Cmd/Ctrl+Enter 插入。",
10407
10470
  },
10408
10471
  toolbar: {
10472
+ info: "信息",
10473
+ closeUtilityPanel: "关闭面板",
10409
10474
  copiedPageLink: "已复制页面链接",
10410
10475
  copyPageLink: "复制页面链接",
10411
10476
  couldNotCopyLink: "无法复制链接",
@@ -10414,6 +10479,21 @@ const contentExactEnglishTranslations = {
10414
10479
  },
10415
10480
  versionRestoreQuestion: "恢复此版本?",
10416
10481
  },
10482
+ comments: {
10483
+ title: "评论",
10484
+ empty: "暂无评论。",
10485
+ },
10486
+ sidebar: {
10487
+ addWorkspace: "添加工作区",
10488
+ failedCreateWorkspace: "无法创建工作区",
10489
+ failedUpdateFavorite: "无法更新收藏",
10490
+ removeFromFavorites: "从收藏中移除",
10491
+ localFolder: "本地文件夹",
10492
+ newWorkspace: "新建工作区",
10493
+ newWorkspaceDescription: "创建一个拥有专属 Files 数据库的私有工作区。",
10494
+ workspaceName: "工作区名称",
10495
+ createWorkspace: "创建工作区",
10496
+ },
10417
10497
  },
10418
10498
  "es-ES": {
10419
10499
  editor: {
@@ -10436,6 +10516,8 @@ const contentExactEnglishTranslations = {
10436
10516
  "La vista previa se actualiza mientras escribes. Pulsa Cmd/Ctrl+Enter para insertar.",
10437
10517
  },
10438
10518
  toolbar: {
10519
+ info: "Información",
10520
+ closeUtilityPanel: "Cerrar panel",
10439
10521
  copiedPageLink: "Enlace de página copiado",
10440
10522
  copyPageLink: "Copiar enlace de página",
10441
10523
  couldNotCopyLink: "No se pudo copiar el enlace",
@@ -10445,6 +10527,22 @@ const contentExactEnglishTranslations = {
10445
10527
  },
10446
10528
  versionRestoreQuestion: "¿Restaurar esta versión?",
10447
10529
  },
10530
+ comments: {
10531
+ title: "Comentarios",
10532
+ empty: "Aún no hay comentarios.",
10533
+ },
10534
+ sidebar: {
10535
+ addWorkspace: "Añadir espacio de trabajo",
10536
+ failedCreateWorkspace: "No se pudo crear el espacio de trabajo",
10537
+ failedUpdateFavorite: "No se pudo actualizar el favorito",
10538
+ removeFromFavorites: "Quitar de favoritos",
10539
+ localFolder: "Carpeta local",
10540
+ newWorkspace: "Nuevo espacio de trabajo",
10541
+ newWorkspaceDescription:
10542
+ "Crea un espacio privado con su propia base de datos de Archivos.",
10543
+ workspaceName: "Nombre del espacio de trabajo",
10544
+ createWorkspace: "Crear espacio de trabajo",
10545
+ },
10448
10546
  },
10449
10547
  "fr-FR": {
10450
10548
  editor: {
@@ -10467,6 +10565,8 @@ const contentExactEnglishTranslations = {
10467
10565
  "L’aperçu se met à jour pendant la saisie. Appuyez sur Cmd/Ctrl+Entrée pour insérer.",
10468
10566
  },
10469
10567
  toolbar: {
10568
+ info: "Informations",
10569
+ closeUtilityPanel: "Fermer le panneau",
10470
10570
  copiedPageLink: "Lien de la page copié",
10471
10571
  copyPageLink: "Copier le lien de la page",
10472
10572
  couldNotCopyLink: "Impossible de copier le lien",
@@ -10476,6 +10576,22 @@ const contentExactEnglishTranslations = {
10476
10576
  },
10477
10577
  versionRestoreQuestion: "Restaurer cette version ?",
10478
10578
  },
10579
+ comments: {
10580
+ title: "Commentaires",
10581
+ empty: "Aucun commentaire pour le moment.",
10582
+ },
10583
+ sidebar: {
10584
+ addWorkspace: "Ajouter un espace de travail",
10585
+ failedCreateWorkspace: "Impossible de créer l’espace de travail",
10586
+ failedUpdateFavorite: "Impossible de mettre à jour le favori",
10587
+ removeFromFavorites: "Retirer des favoris",
10588
+ localFolder: "Dossier local",
10589
+ newWorkspace: "Nouvel espace de travail",
10590
+ newWorkspaceDescription:
10591
+ "Créez un espace privé avec sa propre base de données Fichiers.",
10592
+ workspaceName: "Nom de l’espace de travail",
10593
+ createWorkspace: "Créer l’espace de travail",
10594
+ },
10479
10595
  },
10480
10596
  "de-DE": {
10481
10597
  editor: {
@@ -10499,6 +10615,8 @@ const contentExactEnglishTranslations = {
10499
10615
  "Die Vorschau wird während der Eingabe aktualisiert. Mit Cmd/Ctrl+Enter einfügen.",
10500
10616
  },
10501
10617
  toolbar: {
10618
+ info: "Informationen",
10619
+ closeUtilityPanel: "Bereich schließen",
10502
10620
  copiedPageLink: "Seitenlink kopiert",
10503
10621
  copyPageLink: "Seitenlink kopieren",
10504
10622
  couldNotCopyLink: "Link konnte nicht kopiert werden",
@@ -10508,6 +10626,22 @@ const contentExactEnglishTranslations = {
10508
10626
  },
10509
10627
  versionRestoreQuestion: "Diese Version wiederherstellen?",
10510
10628
  },
10629
+ comments: {
10630
+ title: "Kommentare",
10631
+ empty: "Noch keine Kommentare.",
10632
+ },
10633
+ sidebar: {
10634
+ addWorkspace: "Arbeitsbereich hinzufügen",
10635
+ failedCreateWorkspace: "Arbeitsbereich konnte nicht erstellt werden",
10636
+ failedUpdateFavorite: "Favorit konnte nicht aktualisiert werden",
10637
+ removeFromFavorites: "Aus Favoriten entfernen",
10638
+ localFolder: "Lokaler Ordner",
10639
+ newWorkspace: "Neuer Arbeitsbereich",
10640
+ newWorkspaceDescription:
10641
+ "Erstellen Sie einen privaten Arbeitsbereich mit eigener Dateien-Datenbank.",
10642
+ workspaceName: "Name des Arbeitsbereichs",
10643
+ createWorkspace: "Arbeitsbereich erstellen",
10644
+ },
10511
10645
  },
10512
10646
  "ja-JP": {
10513
10647
  editor: {
@@ -10530,6 +10664,8 @@ const contentExactEnglishTranslations = {
10530
10664
  "入力中にプレビューが更新されます。Cmd/Ctrl+Enter で挿入します。",
10531
10665
  },
10532
10666
  toolbar: {
10667
+ info: "情報",
10668
+ closeUtilityPanel: "パネルを閉じる",
10533
10669
  copiedPageLink: "ページリンクをコピーしました",
10534
10670
  copyPageLink: "ページリンクをコピー",
10535
10671
  couldNotCopyLink: "リンクをコピーできませんでした",
@@ -10539,6 +10675,22 @@ const contentExactEnglishTranslations = {
10539
10675
  },
10540
10676
  versionRestoreQuestion: "このバージョンを復元しますか?",
10541
10677
  },
10678
+ comments: {
10679
+ title: "コメント",
10680
+ empty: "コメントはまだありません。",
10681
+ },
10682
+ sidebar: {
10683
+ addWorkspace: "ワークスペースを追加",
10684
+ failedCreateWorkspace: "ワークスペースを作成できませんでした",
10685
+ failedUpdateFavorite: "お気に入りを更新できませんでした",
10686
+ removeFromFavorites: "お気に入りから削除",
10687
+ localFolder: "ローカルフォルダー",
10688
+ newWorkspace: "新しいワークスペース",
10689
+ newWorkspaceDescription:
10690
+ "専用の Files データベースを持つプライベートワークスペースを作成します。",
10691
+ workspaceName: "ワークスペース名",
10692
+ createWorkspace: "ワークスペースを作成",
10693
+ },
10542
10694
  },
10543
10695
  "ko-KR": {
10544
10696
  editor: {
@@ -10560,6 +10712,8 @@ const contentExactEnglishTranslations = {
10560
10712
  "입력하는 동안 미리보기가 업데이트됩니다. Cmd/Ctrl+Enter로 삽입하세요.",
10561
10713
  },
10562
10714
  toolbar: {
10715
+ info: "정보",
10716
+ closeUtilityPanel: "패널 닫기",
10563
10717
  copiedPageLink: "페이지 링크를 복사했습니다",
10564
10718
  copyPageLink: "페이지 링크 복사",
10565
10719
  couldNotCopyLink: "링크를 복사하지 못했습니다",
@@ -10569,6 +10723,22 @@ const contentExactEnglishTranslations = {
10569
10723
  },
10570
10724
  versionRestoreQuestion: "이 버전을 복원할까요?",
10571
10725
  },
10726
+ comments: {
10727
+ title: "댓글",
10728
+ empty: "아직 댓글이 없습니다.",
10729
+ },
10730
+ sidebar: {
10731
+ addWorkspace: "워크스페이스 추가",
10732
+ failedCreateWorkspace: "워크스페이스를 만들지 못했습니다",
10733
+ failedUpdateFavorite: "즐겨찾기를 업데이트하지 못했습니다",
10734
+ removeFromFavorites: "즐겨찾기에서 제거",
10735
+ localFolder: "로컬 폴더",
10736
+ newWorkspace: "새 워크스페이스",
10737
+ newWorkspaceDescription:
10738
+ "자체 Files 데이터베이스가 있는 비공개 워크스페이스를 만듭니다.",
10739
+ workspaceName: "워크스페이스 이름",
10740
+ createWorkspace: "워크스페이스 만들기",
10741
+ },
10572
10742
  },
10573
10743
  "pt-BR": {
10574
10744
  editor: {
@@ -10591,6 +10761,8 @@ const contentExactEnglishTranslations = {
10591
10761
  "A prévia é atualizada enquanto você digita. Pressione Cmd/Ctrl+Enter para inserir.",
10592
10762
  },
10593
10763
  toolbar: {
10764
+ info: "Informações",
10765
+ closeUtilityPanel: "Fechar painel",
10594
10766
  copiedPageLink: "Link da página copiado",
10595
10767
  copyPageLink: "Copiar link da página",
10596
10768
  couldNotCopyLink: "Não foi possível copiar o link",
@@ -10600,6 +10772,22 @@ const contentExactEnglishTranslations = {
10600
10772
  },
10601
10773
  versionRestoreQuestion: "Restaurar esta versão?",
10602
10774
  },
10775
+ comments: {
10776
+ title: "Comentários",
10777
+ empty: "Ainda não há comentários.",
10778
+ },
10779
+ sidebar: {
10780
+ addWorkspace: "Adicionar espaço de trabalho",
10781
+ failedCreateWorkspace: "Não foi possível criar o espaço de trabalho",
10782
+ failedUpdateFavorite: "Não foi possível atualizar o favorito",
10783
+ removeFromFavorites: "Remover dos favoritos",
10784
+ localFolder: "Pasta local",
10785
+ newWorkspace: "Novo espaço de trabalho",
10786
+ newWorkspaceDescription:
10787
+ "Crie um espaço privado com seu próprio banco de dados de Arquivos.",
10788
+ workspaceName: "Nome do espaço de trabalho",
10789
+ createWorkspace: "Criar espaço de trabalho",
10790
+ },
10603
10791
  },
10604
10792
  "hi-IN": {
10605
10793
  editor: {
@@ -10621,6 +10809,8 @@ const contentExactEnglishTranslations = {
10621
10809
  "लिखते समय पूर्वावलोकन अपडेट होता है। सम्मिलित करने के लिए Cmd/Ctrl+Enter दबाएँ।",
10622
10810
  },
10623
10811
  toolbar: {
10812
+ info: "जानकारी",
10813
+ closeUtilityPanel: "पैनल बंद करें",
10624
10814
  copiedPageLink: "पेज लिंक कॉपी किया गया",
10625
10815
  copyPageLink: "पेज लिंक कॉपी करें",
10626
10816
  couldNotCopyLink: "लिंक कॉपी नहीं किया जा सका",
@@ -10629,6 +10819,21 @@ const contentExactEnglishTranslations = {
10629
10819
  },
10630
10820
  versionRestoreQuestion: "यह संस्करण पुनर्स्थापित करें?",
10631
10821
  },
10822
+ comments: {
10823
+ title: "टिप्पणियाँ",
10824
+ empty: "अभी तक कोई टिप्पणी नहीं है।",
10825
+ },
10826
+ sidebar: {
10827
+ addWorkspace: "वर्कस्पेस जोड़ें",
10828
+ failedCreateWorkspace: "वर्कस्पेस नहीं बनाया जा सका",
10829
+ failedUpdateFavorite: "पसंदीदा अपडेट नहीं किया जा सका",
10830
+ removeFromFavorites: "पसंदीदा से हटाएँ",
10831
+ localFolder: "स्थानीय फ़ोल्डर",
10832
+ newWorkspace: "नया वर्कस्पेस",
10833
+ newWorkspaceDescription: "अपने Files डेटाबेस के साथ एक निजी वर्कस्पेस बनाएँ।",
10834
+ workspaceName: "वर्कस्पेस का नाम",
10835
+ createWorkspace: "वर्कस्पेस बनाएँ",
10836
+ },
10632
10837
  },
10633
10838
  "ar-SA": {
10634
10839
  editor: {
@@ -10650,6 +10855,8 @@ const contentExactEnglishTranslations = {
10650
10855
  "تتحدث المعاينة أثناء الكتابة. اضغط Cmd/Ctrl+Enter للإدراج.",
10651
10856
  },
10652
10857
  toolbar: {
10858
+ info: "معلومات",
10859
+ closeUtilityPanel: "إغلاق اللوحة",
10653
10860
  copiedPageLink: "تم نسخ رابط الصفحة",
10654
10861
  copyPageLink: "نسخ رابط الصفحة",
10655
10862
  couldNotCopyLink: "تعذر نسخ الرابط",
@@ -10659,6 +10866,22 @@ const contentExactEnglishTranslations = {
10659
10866
  },
10660
10867
  versionRestoreQuestion: "استعادة هذا الإصدار؟",
10661
10868
  },
10869
+ comments: {
10870
+ title: "التعليقات",
10871
+ empty: "لا توجد تعليقات بعد.",
10872
+ },
10873
+ sidebar: {
10874
+ addWorkspace: "إضافة مساحة عمل",
10875
+ failedCreateWorkspace: "تعذر إنشاء مساحة العمل",
10876
+ failedUpdateFavorite: "تعذر تحديث المفضلة",
10877
+ removeFromFavorites: "إزالة من المفضلة",
10878
+ localFolder: "مجلد محلي",
10879
+ newWorkspace: "مساحة عمل جديدة",
10880
+ newWorkspaceDescription:
10881
+ "أنشئ مساحة عمل خاصة بقاعدة بيانات Files خاصة بها.",
10882
+ workspaceName: "اسم مساحة العمل",
10883
+ createWorkspace: "إنشاء مساحة عمل",
10884
+ },
10662
10885
  },
10663
10886
  } satisfies Partial<Record<LocaleCode, PartialMessages>>;
10664
10887
 
@@ -0,0 +1,54 @@
1
+ const NATIVE_FOLDER_PICKER_ATTEMPT_KEY =
2
+ "agent-native:content:native-folder-picker-attempt";
3
+
4
+ type PickerAttemptStorage = Pick<Storage, "getItem" | "setItem" | "removeItem">;
5
+
6
+ function browserStorage(): PickerAttemptStorage | null {
7
+ if (typeof window === "undefined") return null;
8
+ try {
9
+ return window.localStorage;
10
+ } catch {
11
+ return null;
12
+ }
13
+ }
14
+
15
+ export function hasInterruptedNativeFolderPickerAttempt(
16
+ storage: PickerAttemptStorage | null = browserStorage(),
17
+ ) {
18
+ try {
19
+ return Boolean(storage?.getItem(NATIVE_FOLDER_PICKER_ATTEMPT_KEY));
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ export async function runNativeFolderPickerWithCrashSentinel<T>(
26
+ operation: () => Promise<T>,
27
+ options: {
28
+ storage?: PickerAttemptStorage | null;
29
+ attemptId?: string;
30
+ } = {},
31
+ ) {
32
+ const storage = options.storage ?? browserStorage();
33
+ const attemptId =
34
+ options.attemptId ??
35
+ `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
36
+
37
+ try {
38
+ storage?.setItem(NATIVE_FOLDER_PICKER_ATTEMPT_KEY, attemptId);
39
+ } catch {
40
+ // The picker still works when storage is unavailable; only crash recovery is lost.
41
+ }
42
+
43
+ try {
44
+ return await operation();
45
+ } finally {
46
+ try {
47
+ if (storage?.getItem(NATIVE_FOLDER_PICKER_ATTEMPT_KEY) === attemptId) {
48
+ storage.removeItem(NATIVE_FOLDER_PICKER_ATTEMPT_KEY);
49
+ }
50
+ } catch {
51
+ // A storage failure must not mask the picker result.
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,18 @@
1
+ type FolderPickerWindow = {
2
+ codexWindowType?: unknown;
3
+ electronBridge?: unknown;
4
+ };
5
+
6
+ export function isUnsafeNativeFolderPickerHost(
7
+ hostWindow: FolderPickerWindow | undefined = typeof window === "undefined"
8
+ ? undefined
9
+ : (window as unknown as FolderPickerWindow),
10
+ userAgent = typeof navigator === "undefined" ? "" : navigator.userAgent,
11
+ ) {
12
+ if (!hostWindow) return false;
13
+ return (
14
+ hostWindow.codexWindowType === "electron" ||
15
+ Boolean(hostWindow.electronBridge) ||
16
+ /\b(?:Electron|Codex|ChatGPT)\//i.test(userAgent)
17
+ );
18
+ }
@@ -0,0 +1,30 @@
1
+ import { Navigate } from "react-router";
2
+
3
+ import { QueryErrorState } from "@/components/QueryErrorState";
4
+ import { Skeleton } from "@/components/ui/skeleton";
5
+ import { useContentSpaces } from "@/hooks/use-content-spaces";
6
+
7
+ export default function FavoritesRoute() {
8
+ const contentSpacesQuery = useContentSpaces();
9
+
10
+ if (contentSpacesQuery.isError) {
11
+ return (
12
+ <QueryErrorState
13
+ onRetry={() => void contentSpacesQuery.refetch()}
14
+ retrying={contentSpacesQuery.isFetching}
15
+ />
16
+ );
17
+ }
18
+
19
+ const documentId = contentSpacesQuery.data?.favoritesDocumentId;
20
+ if (!documentId) {
21
+ return (
22
+ <div className="min-h-0 flex-1 px-4 py-8 sm:px-8 lg:px-10">
23
+ <Skeleton className="h-10 w-48" />
24
+ <Skeleton className="mt-8 h-64 w-full" />
25
+ </div>
26
+ );
27
+ }
28
+
29
+ return <Navigate to={`/page/${documentId}`} replace />;
30
+ }