@agent-native/core 0.128.1 → 0.128.2

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 (80) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +6 -0
  3. package/corpus/core/package.json +2 -1
  4. package/corpus/core/src/server/email-template.ts +33 -0
  5. package/corpus/templates/chat/_gitignore +2 -0
  6. package/corpus/templates/clips/AGENTS.md +6 -1
  7. package/corpus/templates/clips/actions/complete-transactional-email-summary.ts +56 -0
  8. package/corpus/templates/clips/actions/import-loom-recording.ts +258 -76
  9. package/corpus/templates/clips/actions/lib/direct-video.ts +96 -0
  10. package/corpus/templates/clips/actions/lib/loom-import-job.ts +53 -2
  11. package/corpus/templates/clips/actions/lib/loom-video.ts +2 -62
  12. package/corpus/templates/clips/actions/lib/video-download-limits.ts +62 -0
  13. package/corpus/templates/clips/actions/list-transactional-email-ai-requests.ts +249 -0
  14. package/corpus/templates/clips/app/components/library/library-grid.tsx +65 -0
  15. package/corpus/templates/clips/app/components/library/library-layout.tsx +55 -0
  16. package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +28 -126
  17. package/corpus/templates/clips/app/global.css +23 -0
  18. package/corpus/templates/clips/app/hooks/use-transactional-email-bridge.ts +98 -0
  19. package/corpus/templates/clips/app/i18n/en-US.ts +20 -0
  20. package/corpus/templates/clips/app/routes/_app.tsx +2 -0
  21. package/corpus/templates/clips/app/routes/import.tsx +396 -0
  22. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +8 -6
  23. package/corpus/templates/clips/app/routes/record.tsx +13 -71
  24. package/corpus/templates/clips/changelog/2026-07-25-two-clip-emails-now-include-a-concise-summary-generated-secu.md +6 -0
  25. package/corpus/templates/clips/data/clips-transactional-emails/config.json +3 -0
  26. package/corpus/templates/clips/server/jobs/transactional-emails.ts +1034 -0
  27. package/corpus/templates/clips/server/lib/transactional-email-store.ts +865 -0
  28. package/corpus/templates/clips/server/lib/transactional-email-templates.ts +270 -0
  29. package/corpus/templates/clips/server/plugins/calendar-jobs.ts +2 -0
  30. package/corpus/templates/clips/server/routes/api/view-event.post.ts +59 -2
  31. package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +8 -2
  32. package/corpus/templates/content/AGENTS.md +8 -0
  33. package/corpus/templates/content/actions/_content-database-personal-view.ts +28 -3
  34. package/corpus/templates/content/actions/_property-utils.ts +32 -2
  35. package/corpus/templates/content/actions/configure-document-property.ts +12 -2
  36. package/corpus/templates/content/actions/delete-document-property.ts +13 -3
  37. package/corpus/templates/content/actions/duplicate-document-property.ts +13 -3
  38. package/corpus/templates/content/actions/list-content-spaces.ts +5 -2
  39. package/corpus/templates/content/actions/list-document-properties.ts +12 -3
  40. package/corpus/templates/content/actions/move-database-item.ts +74 -55
  41. package/corpus/templates/content/actions/reorder-document-property.ts +20 -4
  42. package/corpus/templates/content/actions/set-document-property.ts +10 -1
  43. package/corpus/templates/content/actions/update-content-database-personal-view.ts +7 -0
  44. package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +31 -21
  45. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +30 -3
  46. package/corpus/templates/content/app/components/editor/DocumentInfoPanel.tsx +8 -1
  47. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +72 -20
  48. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +79 -10
  49. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +8 -1
  50. package/corpus/templates/content/app/components/editor/database/settings.tsx +6 -0
  51. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +246 -26
  52. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +491 -197
  53. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +3 -3
  54. package/corpus/templates/content/app/components/sidebar/sidebar-reorder.tsx +409 -0
  55. package/corpus/templates/content/app/hooks/use-content-database.ts +117 -3
  56. package/corpus/templates/content/app/hooks/use-content-spaces.ts +1 -0
  57. package/corpus/templates/content/app/hooks/use-document-properties.ts +62 -18
  58. package/corpus/templates/content/app/hooks/use-documents.ts +13 -5
  59. package/corpus/templates/content/app/i18n-data.ts +261 -3
  60. package/corpus/templates/content/app/routes/_app.page.$id.tsx +9 -2
  61. package/corpus/templates/content/changelog/2026-07-24-database-page-properties-keep-their-context.md +6 -0
  62. package/corpus/templates/content/changelog/2026-07-26-sidebar-references-can-now-be-personally-reordered.md +6 -0
  63. package/corpus/templates/content/docs/solutions/2026-07-24-database-property-context-switch-diagnosis.md +249 -0
  64. package/corpus/templates/content/docs/solutions/content-sidebar-order-shape.md +389 -0
  65. package/corpus/templates/content/shared/api.ts +28 -0
  66. package/corpus/toolkit/CHANGELOG.md +6 -0
  67. package/corpus/toolkit/package.json +1 -1
  68. package/corpus/toolkit/src/editor/DragHandle.ts +63 -9
  69. package/dist/collab/struct-routes.d.ts +1 -1
  70. package/dist/observability/routes.d.ts +3 -3
  71. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  72. package/dist/server/email-template.d.ts +7 -0
  73. package/dist/server/email-template.d.ts.map +1 -1
  74. package/dist/server/email-template.js +24 -0
  75. package/dist/server/email-template.js.map +1 -1
  76. package/dist/server/transcribe-voice.d.ts +1 -1
  77. package/dist/templates/chat/_gitignore +2 -0
  78. package/package.json +4 -3
  79. package/src/server/email-template.ts +33 -0
  80. package/src/templates/chat/_gitignore +2 -0
@@ -12,7 +12,7 @@ import type {
12
12
  ReorderDocumentPropertyRequest,
13
13
  SetDocumentPropertyRequest,
14
14
  } from "@shared/api";
15
- import { useQueryClient } from "@tanstack/react-query";
15
+ import { useQueryClient, type UseMutationResult } from "@tanstack/react-query";
16
16
 
17
17
  import {
18
18
  applyDocumentPropertiesToDatabaseResponse,
@@ -21,13 +21,51 @@ import {
21
21
  contentDatabaseQueryKey,
22
22
  removeDocumentPropertyFromDatabaseResponse,
23
23
  } from "./use-content-database";
24
+ import { documentPropertiesQueryKey } from "./use-documents";
24
25
 
25
- export function useDocumentProperties(documentId: string | null) {
26
+ type DatabaseScopedRequest = { databaseId: string };
27
+
28
+ export function documentPropertiesResponseMatchesScope(
29
+ documentId: string,
30
+ databaseId: string,
31
+ data: DocumentPropertiesResponse | undefined,
32
+ ): data is DocumentPropertiesResponse {
33
+ return data?.documentId === documentId && data.databaseId === databaseId;
34
+ }
35
+
36
+ function withDatabaseScope<
37
+ TData,
38
+ TVariables extends DatabaseScopedRequest,
39
+ TContext,
40
+ >(
41
+ mutation: UseMutationResult<TData, Error, TVariables, TContext>,
42
+ databaseId: string,
43
+ ) {
44
+ type ScopedVariables = Omit<TVariables, "databaseId">;
45
+ return {
46
+ ...mutation,
47
+ mutate: (variables: ScopedVariables, options?: unknown) =>
48
+ mutation.mutate(
49
+ { ...variables, databaseId } as TVariables,
50
+ options as never,
51
+ ),
52
+ mutateAsync: (variables: ScopedVariables, options?: unknown) =>
53
+ mutation.mutateAsync(
54
+ { ...variables, databaseId } as TVariables,
55
+ options as never,
56
+ ),
57
+ } as UseMutationResult<TData, Error, ScopedVariables, TContext>;
58
+ }
59
+
60
+ export function useDocumentProperties(
61
+ documentId: string | null,
62
+ databaseId: string | null,
63
+ ) {
26
64
  return useActionQuery<DocumentPropertiesResponse>(
27
65
  "list-document-properties",
28
- documentId ? { documentId } : undefined,
66
+ documentId && databaseId ? { documentId, databaseId } : undefined,
29
67
  {
30
- enabled: !!documentId,
68
+ enabled: !!documentId && !!databaseId,
31
69
  placeholderData: (prev) => prev,
32
70
  },
33
71
  );
@@ -35,10 +73,11 @@ export function useDocumentProperties(documentId: string | null) {
35
73
 
36
74
  export function useConfigureDocumentProperty(
37
75
  documentId: string,
76
+ databaseId: string,
38
77
  databaseDocumentId = documentId,
39
78
  ) {
40
79
  const queryClient = useQueryClient();
41
- return useActionMutation<
80
+ const mutation = useActionMutation<
42
81
  DocumentPropertiesResponse,
43
82
  ConfigureDocumentPropertyRequest
44
83
  >("configure-document-property", {
@@ -49,7 +88,7 @@ export function useConfigureDocumentProperty(
49
88
  (current) => applyDocumentPropertiesToDatabaseResponse(current, data),
50
89
  );
51
90
  queryClient.invalidateQueries({
52
- queryKey: ["action", "list-document-properties", { documentId }],
91
+ queryKey: documentPropertiesQueryKey(documentId, databaseId),
53
92
  });
54
93
  queryClient.invalidateQueries({
55
94
  queryKey: ["action", "get-document", { id: documentId }],
@@ -59,14 +98,16 @@ export function useConfigureDocumentProperty(
59
98
  });
60
99
  },
61
100
  });
101
+ return withDatabaseScope(mutation, databaseId);
62
102
  }
63
103
 
64
104
  export function useSetDocumentProperty(
65
105
  documentId: string,
106
+ databaseId: string,
66
107
  databaseDocumentId = documentId,
67
108
  ) {
68
109
  const queryClient = useQueryClient();
69
- return useActionMutation<
110
+ const mutation = useActionMutation<
70
111
  DocumentPropertiesResponse,
71
112
  SetDocumentPropertyRequest
72
113
  >("set-document-property", {
@@ -114,11 +155,7 @@ export function useSetDocumentProperty(
114
155
  }),
115
156
  );
116
157
  queryClient.invalidateQueries({
117
- queryKey: [
118
- "action",
119
- "list-document-properties",
120
- { documentId: variables.documentId },
121
- ],
158
+ queryKey: documentPropertiesQueryKey(variables.documentId, databaseId),
122
159
  });
123
160
  queryClient.invalidateQueries({
124
161
  queryKey: ["action", "get-document", { id: variables.documentId }],
@@ -135,14 +172,16 @@ export function useSetDocumentProperty(
135
172
  });
136
173
  },
137
174
  });
175
+ return withDatabaseScope(mutation, databaseId);
138
176
  }
139
177
 
140
178
  export function useDuplicateDocumentProperty(
141
179
  documentId: string,
180
+ databaseId: string,
142
181
  databaseDocumentId = documentId,
143
182
  ) {
144
183
  const queryClient = useQueryClient();
145
- return useActionMutation<
184
+ const mutation = useActionMutation<
146
185
  DocumentPropertiesResponse,
147
186
  DuplicateDocumentPropertyRequest
148
187
  >("duplicate-document-property", {
@@ -153,7 +192,7 @@ export function useDuplicateDocumentProperty(
153
192
  (current) => applyDocumentPropertiesToDatabaseResponse(current, data),
154
193
  );
155
194
  queryClient.invalidateQueries({
156
- queryKey: ["action", "list-document-properties", { documentId }],
195
+ queryKey: documentPropertiesQueryKey(documentId, databaseId),
157
196
  });
158
197
  queryClient.invalidateQueries({
159
198
  queryKey: ["action", "get-document", { id: documentId }],
@@ -163,20 +202,22 @@ export function useDuplicateDocumentProperty(
163
202
  });
164
203
  },
165
204
  });
205
+ return withDatabaseScope(mutation, databaseId);
166
206
  }
167
207
 
168
208
  export function useReorderDocumentProperty(
169
209
  documentId: string,
210
+ databaseId: string,
170
211
  databaseDocumentId = documentId,
171
212
  ) {
172
213
  const queryClient = useQueryClient();
173
- return useActionMutation<
214
+ const mutation = useActionMutation<
174
215
  DocumentPropertiesResponse,
175
216
  ReorderDocumentPropertyRequest
176
217
  >("reorder-document-property", {
177
218
  onSuccess: () => {
178
219
  queryClient.invalidateQueries({
179
- queryKey: ["action", "list-document-properties", { documentId }],
220
+ queryKey: documentPropertiesQueryKey(documentId, databaseId),
180
221
  });
181
222
  queryClient.invalidateQueries({
182
223
  queryKey: ["action", "get-document", { id: documentId }],
@@ -186,14 +227,16 @@ export function useReorderDocumentProperty(
186
227
  });
187
228
  },
188
229
  });
230
+ return withDatabaseScope(mutation, databaseId);
189
231
  }
190
232
 
191
233
  export function useDeleteDocumentProperty(
192
234
  documentId: string,
235
+ databaseId: string,
193
236
  databaseDocumentId = documentId,
194
237
  ) {
195
238
  const queryClient = useQueryClient();
196
- return useActionMutation<
239
+ const mutation = useActionMutation<
197
240
  DocumentPropertiesResponse,
198
241
  DeleteDocumentPropertyRequest
199
242
  >("delete-document-property", {
@@ -231,7 +274,7 @@ export function useDeleteDocumentProperty(
231
274
  (current) => applyDocumentPropertiesToDatabaseResponse(current, data),
232
275
  );
233
276
  queryClient.invalidateQueries({
234
- queryKey: ["action", "list-document-properties", { documentId }],
277
+ queryKey: documentPropertiesQueryKey(documentId, databaseId),
235
278
  });
236
279
  queryClient.invalidateQueries({
237
280
  queryKey: ["action", "get-document", { id: documentId }],
@@ -241,4 +284,5 @@ export function useDeleteDocumentProperty(
241
284
  });
242
285
  },
243
286
  });
287
+ return withDatabaseScope(mutation, databaseId);
244
288
  }
@@ -36,8 +36,15 @@ export function documentQueryKey(documentId: string) {
36
36
  return ["action", "get-document", { id: documentId }] as const;
37
37
  }
38
38
 
39
- export function documentPropertiesQueryKey(documentId: string) {
40
- return ["action", "list-document-properties", { documentId }] as const;
39
+ export function documentPropertiesQueryKey(
40
+ documentId: string,
41
+ databaseId: string,
42
+ ) {
43
+ return [
44
+ "action",
45
+ "list-document-properties",
46
+ { documentId, databaseId },
47
+ ] as const;
41
48
  }
42
49
 
43
50
  // Extends the shared request/response shapes with the optional
@@ -247,11 +254,12 @@ export function seedDatabaseItemDocumentCaches(
247
254
  // owned by get-document; the table may still warm the separately scoped
248
255
  // property cache below.
249
256
  if (
250
- queryClient.getQueryData(documentPropertiesQueryKey(item.document.id)) ===
251
- undefined
257
+ queryClient.getQueryData(
258
+ documentPropertiesQueryKey(item.document.id, item.databaseId),
259
+ ) === undefined
252
260
  ) {
253
261
  queryClient.setQueryData<DocumentPropertiesResponse>(
254
- documentPropertiesQueryKey(item.document.id),
262
+ documentPropertiesQueryKey(item.document.id, item.databaseId),
255
263
  {
256
264
  documentId: item.document.id,
257
265
  databaseId: item.databaseId,
@@ -3103,6 +3103,24 @@ const enUS = {
3103
3103
  localFiles: localFilesMessages,
3104
3104
  sidebar: {
3105
3105
  cannotReorderPages: "Cannot reorder pages",
3106
+ pinned: "Pinned",
3107
+ loadingPinned: "Loading pinned items…",
3108
+ dragToReorder: "Drag to reorder {{label}}",
3109
+ moveUp: "Move up",
3110
+ moveDown: "Move down",
3111
+ moveToPosition: "Move to position",
3112
+ positionNumber: "Position {{position}}",
3113
+ failedSaveOrder: "Could not save order",
3114
+ moreActionsFor: "More actions for {{label}}",
3115
+ orderButton: "Order: {{order}}",
3116
+ orderMode: {
3117
+ custom: "Custom",
3118
+ last_edited: "Last edited",
3119
+ name: "Name",
3120
+ created: "Created",
3121
+ },
3122
+ pinToSidebar: "Pin to sidebar",
3123
+ unpinFromSidebar: "Unpin from sidebar",
3106
3124
  addWorkspace: "Add workspace",
3107
3125
  addChild: "Add child",
3108
3126
  addChildTo: "Add child to {{title}}",
@@ -3137,8 +3155,8 @@ const enUS = {
3137
3155
  failedPermanentDeleteDatabase: "Failed to permanently delete database",
3138
3156
  failedPermanentDeletePage: "Failed to permanently delete page",
3139
3157
  failedMovePage: "Failed to move page",
3140
- failedUpdateFavorite: "Could not update favorite",
3141
- removeFromFavorites: "Remove from favorites",
3158
+ failedUpdateFavorite: "Could not update pinned items",
3159
+ removeFromFavorites: "Unpin from sidebar",
3142
3160
  failedRemoveLocalFiles: "Failed to remove local files",
3143
3161
  failedRestoreDatabase: "Failed to restore database",
3144
3162
  failedRestorePage: "Failed to restore page",
@@ -3219,7 +3237,7 @@ const enUS = {
3219
3237
  synced: "Synced",
3220
3238
  trash: "Trash",
3221
3239
  trashEmpty: "Trash is empty",
3222
- favorites: "Favorites",
3240
+ favorites: "Pinned",
3223
3241
  untitled: "Untitled",
3224
3242
  workspaces: "Workspaces",
3225
3243
  },
@@ -10622,6 +10640,242 @@ export const messagesByLocale = {
10622
10640
  }),
10623
10641
  } satisfies Record<LocaleCode, Messages>;
10624
10642
 
10643
+ const sidebarPinnedMessagesByLocale: Partial<
10644
+ Record<LocaleCode, Partial<Messages["sidebar"]>>
10645
+ > = {
10646
+ "zh-TW": {
10647
+ pinned: "已釘選",
10648
+ loadingPinned: "正在載入已釘選項目…",
10649
+ dragToReorder: "拖曳以重新排序 {{label}}",
10650
+ moveUp: "上移",
10651
+ moveDown: "下移",
10652
+ moveToPosition: "移至位置",
10653
+ positionNumber: "第 {{position}} 個位置",
10654
+ failedSaveOrder: "無法儲存排序",
10655
+ moreActionsFor: "{{label}} 的更多操作",
10656
+ orderButton: "排序:{{order}}",
10657
+ orderMode: {
10658
+ custom: "自訂",
10659
+ last_edited: "最近編輯",
10660
+ name: "名稱",
10661
+ created: "建立時間",
10662
+ },
10663
+ pinToSidebar: "釘選到側邊欄",
10664
+ unpinFromSidebar: "從側邊欄取消釘選",
10665
+ failedUpdateFavorite: "無法更新已釘選項目",
10666
+ removeFromFavorites: "從側邊欄取消釘選",
10667
+ favorites: "已釘選",
10668
+ },
10669
+ "zh-CN": {
10670
+ pinned: "已固定",
10671
+ loadingPinned: "正在加载已固定项目…",
10672
+ dragToReorder: "拖动以重新排序 {{label}}",
10673
+ moveUp: "上移",
10674
+ moveDown: "下移",
10675
+ moveToPosition: "移至位置",
10676
+ positionNumber: "位置 {{position}}",
10677
+ failedSaveOrder: "无法保存排序",
10678
+ moreActionsFor: "{{label}} 的更多操作",
10679
+ orderButton: "排序:{{order}}",
10680
+ orderMode: {
10681
+ custom: "自定义",
10682
+ last_edited: "最近编辑",
10683
+ name: "名称",
10684
+ created: "创建时间",
10685
+ },
10686
+ pinToSidebar: "固定到侧边栏",
10687
+ unpinFromSidebar: "从侧边栏取消固定",
10688
+ failedUpdateFavorite: "无法更新已固定项目",
10689
+ removeFromFavorites: "从侧边栏取消固定",
10690
+ favorites: "已固定",
10691
+ },
10692
+ "es-ES": {
10693
+ pinned: "Fijados",
10694
+ loadingPinned: "Cargando elementos fijados…",
10695
+ dragToReorder: "Arrastra para reordenar {{label}}",
10696
+ moveUp: "Mover hacia arriba",
10697
+ moveDown: "Mover hacia abajo",
10698
+ moveToPosition: "Mover a la posición",
10699
+ positionNumber: "Posición {{position}}",
10700
+ failedSaveOrder: "No se pudo guardar el orden",
10701
+ moreActionsFor: "Más acciones para {{label}}",
10702
+ orderButton: "Orden: {{order}}",
10703
+ orderMode: {
10704
+ custom: "Personalizado",
10705
+ last_edited: "Última edición",
10706
+ name: "Nombre",
10707
+ created: "Creado",
10708
+ },
10709
+ pinToSidebar: "Fijar a la barra lateral",
10710
+ unpinFromSidebar: "Desfijar de la barra lateral",
10711
+ failedUpdateFavorite: "No se pudieron actualizar los elementos fijados",
10712
+ removeFromFavorites: "Desfijar de la barra lateral",
10713
+ favorites: "Fijados",
10714
+ },
10715
+ "fr-FR": {
10716
+ pinned: "Épinglés",
10717
+ loadingPinned: "Chargement des éléments épinglés…",
10718
+ dragToReorder: "Faites glisser {{label}} pour le réorganiser",
10719
+ moveUp: "Monter",
10720
+ moveDown: "Descendre",
10721
+ moveToPosition: "Déplacer à la position",
10722
+ positionNumber: "Position {{position}}",
10723
+ failedSaveOrder: "Impossible d’enregistrer l’ordre",
10724
+ moreActionsFor: "Autres actions pour {{label}}",
10725
+ orderButton: "Ordre : {{order}}",
10726
+ orderMode: {
10727
+ custom: "Personnalisé",
10728
+ last_edited: "Dernière modification",
10729
+ name: "Nom",
10730
+ created: "Créé",
10731
+ },
10732
+ pinToSidebar: "Épingler à la barre latérale",
10733
+ unpinFromSidebar: "Désépingler de la barre latérale",
10734
+ failedUpdateFavorite: "Impossible de mettre à jour les éléments épinglés",
10735
+ removeFromFavorites: "Désépingler de la barre latérale",
10736
+ favorites: "Épinglés",
10737
+ },
10738
+ "de-DE": {
10739
+ pinned: "Angeheftet",
10740
+ loadingPinned: "Angeheftete Elemente werden geladen…",
10741
+ dragToReorder: "{{label}} zum Neuordnen ziehen",
10742
+ moveUp: "Nach oben verschieben",
10743
+ moveDown: "Nach unten verschieben",
10744
+ moveToPosition: "An Position verschieben",
10745
+ positionNumber: "Position {{position}}",
10746
+ failedSaveOrder: "Reihenfolge konnte nicht gespeichert werden",
10747
+ moreActionsFor: "Weitere Aktionen für {{label}}",
10748
+ orderButton: "Reihenfolge: {{order}}",
10749
+ orderMode: {
10750
+ custom: "Benutzerdefiniert",
10751
+ last_edited: "Zuletzt bearbeitet",
10752
+ name: "Name",
10753
+ created: "Erstellt",
10754
+ },
10755
+ pinToSidebar: "In Seitenleiste anheften",
10756
+ unpinFromSidebar: "Aus Seitenleiste lösen",
10757
+ failedUpdateFavorite:
10758
+ "Angeheftete Elemente konnten nicht aktualisiert werden",
10759
+ removeFromFavorites: "Aus Seitenleiste lösen",
10760
+ favorites: "Angeheftet",
10761
+ },
10762
+ "ja-JP": {
10763
+ pinned: "固定済み",
10764
+ loadingPinned: "固定済みの項目を読み込み中…",
10765
+ dragToReorder: "{{label}} をドラッグして並べ替え",
10766
+ moveUp: "上に移動",
10767
+ moveDown: "下に移動",
10768
+ moveToPosition: "指定位置に移動",
10769
+ positionNumber: "位置 {{position}}",
10770
+ failedSaveOrder: "並び順を保存できませんでした",
10771
+ moreActionsFor: "{{label}} のその他の操作",
10772
+ orderButton: "並び順: {{order}}",
10773
+ orderMode: {
10774
+ custom: "カスタム",
10775
+ last_edited: "最終編集",
10776
+ name: "名前",
10777
+ created: "作成日",
10778
+ },
10779
+ pinToSidebar: "サイドバーに固定",
10780
+ unpinFromSidebar: "サイドバーから固定解除",
10781
+ failedUpdateFavorite: "固定済みの項目を更新できませんでした",
10782
+ removeFromFavorites: "サイドバーから固定解除",
10783
+ favorites: "固定済み",
10784
+ },
10785
+ "ko-KR": {
10786
+ pinned: "고정됨",
10787
+ loadingPinned: "고정된 항목 불러오는 중…",
10788
+ dragToReorder: "{{label}} 드래그하여 순서 변경",
10789
+ moveUp: "위로 이동",
10790
+ moveDown: "아래로 이동",
10791
+ moveToPosition: "위치로 이동",
10792
+ positionNumber: "{{position}}번째 위치",
10793
+ failedSaveOrder: "순서를 저장하지 못했습니다",
10794
+ moreActionsFor: "{{label}}의 추가 작업",
10795
+ orderButton: "정렬: {{order}}",
10796
+ orderMode: {
10797
+ custom: "사용자 지정",
10798
+ last_edited: "최근 수정",
10799
+ name: "이름",
10800
+ created: "생성일",
10801
+ },
10802
+ pinToSidebar: "사이드바에 고정",
10803
+ unpinFromSidebar: "사이드바에서 고정 해제",
10804
+ failedUpdateFavorite: "고정된 항목을 업데이트하지 못했습니다",
10805
+ removeFromFavorites: "사이드바에서 고정 해제",
10806
+ favorites: "고정됨",
10807
+ },
10808
+ "pt-BR": {
10809
+ pinned: "Fixados",
10810
+ loadingPinned: "Carregando itens fixados…",
10811
+ dragToReorder: "Arraste para reordenar {{label}}",
10812
+ moveUp: "Mover para cima",
10813
+ moveDown: "Mover para baixo",
10814
+ moveToPosition: "Mover para a posição",
10815
+ positionNumber: "Posição {{position}}",
10816
+ failedSaveOrder: "Não foi possível salvar a ordem",
10817
+ moreActionsFor: "Mais ações para {{label}}",
10818
+ orderButton: "Ordem: {{order}}",
10819
+ orderMode: {
10820
+ custom: "Personalizado",
10821
+ last_edited: "Última edição",
10822
+ name: "Nome",
10823
+ created: "Criado",
10824
+ },
10825
+ pinToSidebar: "Fixar na barra lateral",
10826
+ unpinFromSidebar: "Desafixar da barra lateral",
10827
+ failedUpdateFavorite: "Não foi possível atualizar os itens fixados",
10828
+ removeFromFavorites: "Desafixar da barra lateral",
10829
+ favorites: "Fixados",
10830
+ },
10831
+ "hi-IN": {
10832
+ pinned: "पिन किए गए",
10833
+ loadingPinned: "पिन किए गए आइटम लोड हो रहे हैं…",
10834
+ dragToReorder: "{{label}} को फिर से क्रमबद्ध करने के लिए खींचें",
10835
+ moveUp: "ऊपर ले जाएँ",
10836
+ moveDown: "नीचे ले जाएँ",
10837
+ moveToPosition: "स्थान पर ले जाएँ",
10838
+ positionNumber: "स्थान {{position}}",
10839
+ failedSaveOrder: "क्रम सहेजा नहीं जा सका",
10840
+ moreActionsFor: "{{label}} के लिए और कार्रवाइयाँ",
10841
+ orderButton: "क्रम: {{order}}",
10842
+ orderMode: {
10843
+ custom: "कस्टम",
10844
+ last_edited: "अंतिम संपादन",
10845
+ name: "नाम",
10846
+ created: "बनाया गया",
10847
+ },
10848
+ pinToSidebar: "साइडबार में पिन करें",
10849
+ unpinFromSidebar: "साइडबार से अनपिन करें",
10850
+ failedUpdateFavorite: "पिन किए गए आइटम अपडेट नहीं किए जा सके",
10851
+ removeFromFavorites: "साइडबार से अनपिन करें",
10852
+ favorites: "पिन किए गए",
10853
+ },
10854
+ "ar-SA": {
10855
+ pinned: "مثبتة",
10856
+ loadingPinned: "جارٍ تحميل العناصر المثبتة…",
10857
+ dragToReorder: "اسحب لإعادة ترتيب {{label}}",
10858
+ moveUp: "نقل لأعلى",
10859
+ moveDown: "نقل لأسفل",
10860
+ moveToPosition: "نقل إلى موضع",
10861
+ positionNumber: "الموضع {{position}}",
10862
+ failedSaveOrder: "تعذر حفظ الترتيب",
10863
+ moreActionsFor: "مزيد من الإجراءات لـ {{label}}",
10864
+ orderButton: "الترتيب: {{order}}",
10865
+ orderMode: {
10866
+ custom: "مخصص",
10867
+ last_edited: "آخر تعديل",
10868
+ name: "الاسم",
10869
+ created: "تاريخ الإنشاء",
10870
+ },
10871
+ pinToSidebar: "تثبيت في الشريط الجانبي",
10872
+ unpinFromSidebar: "إلغاء التثبيت من الشريط الجانبي",
10873
+ failedUpdateFavorite: "تعذر تحديث العناصر المثبتة",
10874
+ removeFromFavorites: "إلغاء التثبيت من الشريط الجانبي",
10875
+ favorites: "مثبتة",
10876
+ },
10877
+ };
10878
+
10625
10879
  const contentExactEnglishTranslations = {
10626
10880
  "zh-TW": {
10627
10881
  editor: {
@@ -11106,4 +11360,8 @@ for (const [locale, overrides] of Object.entries(
11106
11360
  }
11107
11361
  }
11108
11362
  }
11363
+ const sidebarPinnedMessages = sidebarPinnedMessagesByLocale[locale];
11364
+ if (sidebarPinnedMessages) {
11365
+ Object.assign(messages.sidebar, sidebarPinnedMessages);
11366
+ }
11109
11367
  }
@@ -1,5 +1,5 @@
1
1
  import { useT } from "@agent-native/core/client/i18n";
2
- import { useParams } from "react-router";
2
+ import { useParams, useSearchParams } from "react-router";
3
3
 
4
4
  import { DocumentEditor } from "@/components/editor/DocumentEditor";
5
5
  import { messagesByLocale } from "@/i18n-data";
@@ -19,9 +19,16 @@ export function meta() {
19
19
  export default function DocumentPage() {
20
20
  const t = useT();
21
21
  const { id } = useParams<{ id: string }>();
22
+ const [searchParams] = useSearchParams();
23
+ const databaseId = searchParams.get("databaseId");
24
+ const databaseDocumentId = searchParams.get("databaseDocumentId");
22
25
 
23
26
  return id ? (
24
- <DocumentEditor documentId={id} />
27
+ <DocumentEditor
28
+ documentId={id}
29
+ databaseId={databaseId}
30
+ databaseDocumentId={databaseDocumentId}
31
+ />
25
32
  ) : (
26
33
  <div className="flex-1 flex items-center justify-center text-muted-foreground">
27
34
  {t("empty.documentNotFound")}
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-24
4
+ ---
5
+
6
+ Database pages now keep the correct properties when opened from a database or moved to the full-page editor.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-26
4
+ ---
5
+
6
+ Sidebar references can now be personally reordered, with Custom, Name, Last edited, and Created options for workspace Files.