@agent-native/core 0.90.4 → 0.90.7

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 (189) hide show
  1. package/README.md +34 -7
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +21 -0
  4. package/corpus/core/docs/content/agent-native-toolkit.mdx +1 -1
  5. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +1 -1
  6. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +1 -1
  7. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +1 -1
  8. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +1 -1
  9. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +1 -1
  10. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +1 -1
  11. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +1 -1
  12. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +1 -1
  13. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +1 -1
  14. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +1 -1
  15. package/corpus/core/docs/content/toolkit-agent-ux.mdx +1 -1
  16. package/corpus/core/docs/content/toolkit-app-adapters.mdx +1 -1
  17. package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +1 -1
  18. package/corpus/core/docs/content/toolkit-collaboration.mdx +1 -1
  19. package/corpus/core/docs/content/toolkit-command-navigation.mdx +2 -2
  20. package/corpus/core/docs/content/toolkit-comments-review.mdx +1 -1
  21. package/corpus/core/docs/content/toolkit-history.mdx +1 -1
  22. package/corpus/core/docs/content/toolkit-observability.mdx +1 -1
  23. package/corpus/core/docs/content/toolkit-org-team.mdx +1 -1
  24. package/corpus/core/docs/content/toolkit-resources.mdx +1 -1
  25. package/corpus/core/docs/content/toolkit-settings.mdx +1 -1
  26. package/corpus/core/docs/content/toolkit-setup-connections.mdx +1 -1
  27. package/corpus/core/docs/content/toolkit-sharing-ui.mdx +1 -1
  28. package/corpus/core/docs/content/toolkit-sharing.mdx +1 -1
  29. package/corpus/core/docs/content/toolkit-shell-hooks.mdx +1 -1
  30. package/corpus/core/docs/content/toolkit-ui.mdx +1 -1
  31. package/corpus/core/package.json +1 -1
  32. package/corpus/core/src/agent/durable-background.ts +18 -18
  33. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +8 -2
  34. package/corpus/core/src/agent/engine/anthropic-engine.ts +11 -1
  35. package/corpus/core/src/agent/production-agent.ts +22 -11
  36. package/corpus/core/src/agent/run-manager.ts +17 -6
  37. package/corpus/core/src/agent/run-store.ts +16 -11
  38. package/corpus/core/src/cli/design-connect.ts +16 -2
  39. package/corpus/core/src/client/KeepTabOpenNotice.tsx +20 -15
  40. package/corpus/core/src/client/RunStuckBanner.tsx +14 -13
  41. package/corpus/core/src/client/agent-chat-adapter.ts +28 -17
  42. package/corpus/core/src/client/use-db-sync.ts +99 -1
  43. package/corpus/core/src/client/use-run-stuck-detection.ts +8 -5
  44. package/corpus/core/src/collab/client.ts +49 -4
  45. package/corpus/core/src/deploy/build.ts +103 -0
  46. package/corpus/core/src/server/core-routes-plugin.ts +137 -8
  47. package/corpus/templates/clips/changelog/2026-07-07-faster-local-whisper-dictation-start.md +6 -0
  48. package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +311 -31
  49. package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +2 -0
  50. package/corpus/templates/content/AGENTS.md +1 -0
  51. package/corpus/templates/content/actions/_database-source-utils.ts +73 -8
  52. package/corpus/templates/content/actions/_database-utils.ts +2 -1
  53. package/corpus/templates/content/actions/prepare-builder-source-review.ts +20 -1
  54. package/corpus/templates/content/actions/stage-builder-source-bulk-update.ts +663 -0
  55. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +33 -7
  56. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +53 -4
  57. package/corpus/templates/content/app/components/editor/database/settings.tsx +24 -0
  58. package/corpus/templates/content/app/hooks/use-content-database.ts +70 -1
  59. package/corpus/templates/content/app/hooks/use-document-properties.ts +63 -5
  60. package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
  61. package/corpus/templates/content/app/i18n-data.ts +31 -0
  62. package/corpus/templates/content/changelog/2026-07-01-builder-source-rows-can-be-staged-in-bulk-with-a-reviewable.md +6 -0
  63. package/corpus/templates/content/changelog/2026-07-07-builder-backed-database-fields-now-edit-like-normal-content-fields.md +6 -0
  64. package/corpus/templates/content/parity/matrix.md +24 -24
  65. package/corpus/templates/content/parity/matrix.ts +2 -0
  66. package/corpus/templates/content/shared/api.ts +59 -4
  67. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +9 -0
  68. package/corpus/templates/design/actions/connect-localhost.ts +26 -3
  69. package/corpus/templates/design/actions/open-visual-edit.ts +4 -37
  70. package/corpus/templates/design/actions/read-source-file.ts +28 -0
  71. package/corpus/templates/design/actions/update-file.ts +76 -7
  72. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +207 -11
  73. package/corpus/templates/design/app/components/design/EditPanel.tsx +4 -0
  74. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +387 -25
  75. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1110 -88
  76. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +368 -16
  77. package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +24 -0
  78. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +27 -6
  79. package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +18 -0
  80. package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +5 -4
  81. package/corpus/templates/design/app/components/design/multi-screen/handle-hit-zones.ts +124 -0
  82. package/corpus/templates/design/app/components/design/multi-screen/types.ts +23 -0
  83. package/corpus/templates/design/app/i18n/zh-TW.ts +1 -0
  84. package/corpus/templates/design/app/i18n-data.ts +19 -0
  85. package/corpus/templates/design/changelog/2026-07-07-dragging-a-free-floating-element-into-a-layout-column-or-row.md +6 -0
  86. package/corpus/templates/design/changelog/2026-07-07-dragging-a-repeated-list-item-like-a-to-do-card-generated-fr.md +6 -0
  87. package/corpus/templates/design/changelog/2026-07-07-dragging-an-element-onto-a-button-or-chip-s-middle-no-longer.md +6 -0
  88. package/corpus/templates/design/changelog/2026-07-07-elements-dropped-into-another-board-shape-now-stay-exactly-w.md +6 -0
  89. package/corpus/templates/design/changelog/2026-07-07-fixed-drag-reordering-elements-within-a-screen-no-longer-sil.md +6 -0
  90. package/corpus/templates/design/changelog/2026-07-07-fixed-dragging-an-element-from-a-screen-onto-the-canvas-now-.md +6 -0
  91. package/corpus/templates/design/changelog/2026-07-07-fixed-dragging-elements-between-screens-into-ai-generated-co.md +6 -0
  92. package/corpus/templates/design/changelog/2026-07-07-fixed-moving-elements-between-screens-no-longer-bakes-intern.md +6 -0
  93. package/corpus/templates/design/changelog/2026-07-07-fixed-the-cross-screen-drop-indicator-now-points-at-the-corr.md +6 -0
  94. package/corpus/templates/design/changelog/2026-07-07-fixed-the-zoom-menu-no-longer-leaves-the-canvas-unresponsive.md +6 -0
  95. package/corpus/templates/design/changelog/2026-07-07-local-visual-edit-keeps-bridge-access-when-opening-previousl.md +6 -0
  96. package/corpus/templates/design/changelog/2026-07-07-local-visual-edit-now-keeps-the-live-app-connection-authenti.md +6 -0
  97. package/corpus/templates/design/changelog/2026-07-07-text-drawn-on-the-canvas-is-now-readable-white-instead-of-in.md +6 -0
  98. package/corpus/templates/design/server/source-workspace.ts +27 -3
  99. package/corpus/templates/design/shared/board-file.ts +359 -0
  100. package/corpus/templates/design/shared/breakpoint-media.ts +21 -3
  101. package/corpus/templates/design/shared/code-layer.ts +145 -10
  102. package/dist/agent/durable-background.d.ts +12 -12
  103. package/dist/agent/durable-background.js +18 -18
  104. package/dist/agent/durable-background.js.map +1 -1
  105. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  106. package/dist/agent/engine/ai-sdk-engine.js +8 -2
  107. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  108. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  109. package/dist/agent/engine/anthropic-engine.js +11 -1
  110. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  111. package/dist/agent/production-agent.d.ts +2 -2
  112. package/dist/agent/production-agent.d.ts.map +1 -1
  113. package/dist/agent/production-agent.js +18 -11
  114. package/dist/agent/production-agent.js.map +1 -1
  115. package/dist/agent/run-manager.d.ts +7 -1
  116. package/dist/agent/run-manager.d.ts.map +1 -1
  117. package/dist/agent/run-manager.js +6 -1
  118. package/dist/agent/run-manager.js.map +1 -1
  119. package/dist/agent/run-store.d.ts +1 -1
  120. package/dist/agent/run-store.d.ts.map +1 -1
  121. package/dist/agent/run-store.js +15 -10
  122. package/dist/agent/run-store.js.map +1 -1
  123. package/dist/cli/design-connect.d.ts.map +1 -1
  124. package/dist/cli/design-connect.js +12 -2
  125. package/dist/cli/design-connect.js.map +1 -1
  126. package/dist/client/KeepTabOpenNotice.d.ts +9 -10
  127. package/dist/client/KeepTabOpenNotice.d.ts.map +1 -1
  128. package/dist/client/KeepTabOpenNotice.js +8 -4
  129. package/dist/client/KeepTabOpenNotice.js.map +1 -1
  130. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  131. package/dist/client/RunStuckBanner.js +14 -13
  132. package/dist/client/RunStuckBanner.js.map +1 -1
  133. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  134. package/dist/client/agent-chat-adapter.js +25 -17
  135. package/dist/client/agent-chat-adapter.js.map +1 -1
  136. package/dist/client/use-db-sync.d.ts +18 -0
  137. package/dist/client/use-db-sync.d.ts.map +1 -1
  138. package/dist/client/use-db-sync.js +88 -1
  139. package/dist/client/use-db-sync.js.map +1 -1
  140. package/dist/client/use-run-stuck-detection.d.ts +1 -1
  141. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  142. package/dist/client/use-run-stuck-detection.js +6 -4
  143. package/dist/client/use-run-stuck-detection.js.map +1 -1
  144. package/dist/collab/client.d.ts.map +1 -1
  145. package/dist/collab/client.js +43 -4
  146. package/dist/collab/client.js.map +1 -1
  147. package/dist/collab/routes.d.ts +1 -1
  148. package/dist/collab/struct-routes.d.ts +1 -1
  149. package/dist/deploy/build.d.ts +1 -0
  150. package/dist/deploy/build.d.ts.map +1 -1
  151. package/dist/deploy/build.js +57 -0
  152. package/dist/deploy/build.js.map +1 -1
  153. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  154. package/dist/notifications/routes.d.ts +2 -2
  155. package/dist/resources/handlers.d.ts +3 -3
  156. package/dist/secrets/routes.d.ts +9 -9
  157. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  158. package/dist/server/core-routes-plugin.d.ts +10 -0
  159. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  160. package/dist/server/core-routes-plugin.js +103 -9
  161. package/dist/server/core-routes-plugin.js.map +1 -1
  162. package/docs/content/agent-native-toolkit.mdx +1 -1
  163. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +1 -1
  164. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +1 -1
  165. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +1 -1
  166. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +1 -1
  167. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +1 -1
  168. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +1 -1
  169. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +1 -1
  170. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +1 -1
  171. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +1 -1
  172. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +1 -1
  173. package/docs/content/toolkit-agent-ux.mdx +1 -1
  174. package/docs/content/toolkit-app-adapters.mdx +1 -1
  175. package/docs/content/toolkit-collaboration-ui.mdx +1 -1
  176. package/docs/content/toolkit-collaboration.mdx +1 -1
  177. package/docs/content/toolkit-command-navigation.mdx +2 -2
  178. package/docs/content/toolkit-comments-review.mdx +1 -1
  179. package/docs/content/toolkit-history.mdx +1 -1
  180. package/docs/content/toolkit-observability.mdx +1 -1
  181. package/docs/content/toolkit-org-team.mdx +1 -1
  182. package/docs/content/toolkit-resources.mdx +1 -1
  183. package/docs/content/toolkit-settings.mdx +1 -1
  184. package/docs/content/toolkit-setup-connections.mdx +1 -1
  185. package/docs/content/toolkit-sharing-ui.mdx +1 -1
  186. package/docs/content/toolkit-sharing.mdx +1 -1
  187. package/docs/content/toolkit-shell-hooks.mdx +1 -1
  188. package/docs/content/toolkit-ui.mdx +1 -1
  189. package/package.json +1 -1
@@ -26,6 +26,8 @@ const databaseMessages = {
26
26
  bestWhenSameKindAdditionalRows:
27
27
  "Best when this collection has the same kind of records and should appear as additional rows.",
28
28
  builderSpace: "Builder space",
29
+ builderBulkUpdateNotStaged: "Builder bulk update not staged",
30
+ builderBulkUpdateStaged: "Builder bulk update staged",
29
31
  builderUpdateFailed: "Builder update failed",
30
32
  builderWriteModeWasNotChanged: "Builder write mode was not changed",
31
33
  builderBodiesReadyLocally: "Builder article bodies are ready locally.",
@@ -111,6 +113,7 @@ const databaseMessages = {
111
113
  nextMonth: "Next month",
112
114
  nextTimelineRange: "Next timeline range",
113
115
  noRowsMatchThisView: "No rows match this view",
116
+ editFilesForSelectedRows: "Edit files for selected rows",
114
117
  oneFileOrMediaLinkPerLine: "One file or media link per line",
115
118
  previewPageTitle: "Preview page title",
116
119
  pickDetailsBecomeColumns:
@@ -470,6 +473,8 @@ const databaseMessagesByLocale = {
470
473
  addProperty: "添加属性",
471
474
  back: "返回",
472
475
  builderSpace: "Builder 空间",
476
+ builderBulkUpdateNotStaged: "Builder 批量更新未暂存",
477
+ builderBulkUpdateStaged: "Builder 批量更新已暂存",
473
478
  builderUpdateFailed: "Builder 更新失败",
474
479
  builderWriteModeWasNotChanged: "Builder 写入模式未更改",
475
480
  closeDatabaseSettings: "关闭数据库设置",
@@ -505,6 +510,7 @@ const databaseMessagesByLocale = {
505
510
  nextMonth: "下个月",
506
511
  nextTimelineRange: "下一个时间线范围",
507
512
  noRowsMatchThisView: "没有行匹配此视图",
513
+ editFilesForSelectedRows: "编辑所选行的文件",
508
514
  oneFileOrMediaLinkPerLine: "每行一个文件或媒体链接",
509
515
  previewPageTitle: "预览页面标题",
510
516
  previousDatabasePage: "上一页数据库页面",
@@ -621,6 +627,8 @@ const databaseMessagesByLocale = {
621
627
  addProperty: "Añadir propiedad",
622
628
  back: "Atrás",
623
629
  builderSpace: "Espacio de Builder",
630
+ builderBulkUpdateNotStaged: "Actualización masiva de Builder no preparada",
631
+ builderBulkUpdateStaged: "Actualización masiva de Builder preparada",
624
632
  builderUpdateFailed: "Falló la actualización de Builder",
625
633
  builderWriteModeWasNotChanged:
626
634
  "No se cambió el modo de escritura de Builder",
@@ -661,6 +669,7 @@ const databaseMessagesByLocale = {
661
669
  nextMonth: "Mes siguiente",
662
670
  nextTimelineRange: "Rango de cronología siguiente",
663
671
  noRowsMatchThisView: "Ninguna fila coincide con esta vista",
672
+ editFilesForSelectedRows: "Editar archivos de las filas seleccionadas",
664
673
  oneFileOrMediaLinkPerLine: "Un archivo o enlace multimedia por línea",
665
674
  previewPageTitle: "Título de página de vista previa",
666
675
  previousDatabasePage: "Página de base de datos anterior",
@@ -779,6 +788,8 @@ const databaseMessagesByLocale = {
779
788
  addProperty: "Ajouter une propriété",
780
789
  back: "Retour",
781
790
  builderSpace: "Espace Builder",
791
+ builderBulkUpdateNotStaged: "Mise à jour groupée Builder non préparée",
792
+ builderBulkUpdateStaged: "Mise à jour groupée Builder préparée",
782
793
  builderUpdateFailed: "Échec de la mise à jour Builder",
783
794
  builderWriteModeWasNotChanged: "Le mode d’écriture Builder n’a pas changé",
784
795
  closeDatabaseSettings: "Fermer les paramètres de base de données",
@@ -818,6 +829,7 @@ const databaseMessagesByLocale = {
818
829
  nextMonth: "Mois suivant",
819
830
  nextTimelineRange: "Plage chronologique suivante",
820
831
  noRowsMatchThisView: "Aucune ligne ne correspond à cette vue",
832
+ editFilesForSelectedRows: "Modifier les fichiers des lignes sélectionnées",
821
833
  oneFileOrMediaLinkPerLine: "Un fichier ou lien média par ligne",
822
834
  previewPageTitle: "Titre de la page d’aperçu",
823
835
  previousDatabasePage: "Page de base de données précédente",
@@ -936,6 +948,9 @@ const databaseMessagesByLocale = {
936
948
  addProperty: "Eigenschaft hinzufügen",
937
949
  back: "Zurück",
938
950
  builderSpace: "Builder-Bereich",
951
+ builderBulkUpdateNotStaged:
952
+ "Builder-Massenaktualisierung nicht bereitgestellt",
953
+ builderBulkUpdateStaged: "Builder-Massenaktualisierung bereitgestellt",
939
954
  builderUpdateFailed: "Builder-Aktualisierung fehlgeschlagen",
940
955
  builderWriteModeWasNotChanged: "Builder-Schreibmodus wurde nicht geändert",
941
956
  closeDatabaseSettings: "Datenbankeinstellungen schließen",
@@ -975,6 +990,7 @@ const databaseMessagesByLocale = {
975
990
  nextMonth: "Nächster Monat",
976
991
  nextTimelineRange: "Nächster Zeitachsenbereich",
977
992
  noRowsMatchThisView: "Keine Zeilen entsprechen dieser Ansicht",
993
+ editFilesForSelectedRows: "Dateien für ausgewählte Zeilen bearbeiten",
978
994
  oneFileOrMediaLinkPerLine: "Eine Datei oder ein Medienlink pro Zeile",
979
995
  previewPageTitle: "Titel der Seitenvorschau",
980
996
  previousDatabasePage: "Vorherige Datenbankseite",
@@ -1090,6 +1106,8 @@ const databaseMessagesByLocale = {
1090
1106
  addProperty: "プロパティを追加",
1091
1107
  back: "戻る",
1092
1108
  builderSpace: "Builder スペース",
1109
+ builderBulkUpdateNotStaged: "Builder 一括更新はステージングされていません",
1110
+ builderBulkUpdateStaged: "Builder 一括更新をステージングしました",
1093
1111
  builderUpdateFailed: "Builder の更新に失敗しました",
1094
1112
  builderWriteModeWasNotChanged:
1095
1113
  "Builder の書き込みモードは変更されませんでした",
@@ -1128,6 +1146,7 @@ const databaseMessagesByLocale = {
1128
1146
  nextMonth: "次の月",
1129
1147
  nextTimelineRange: "次のタイムライン範囲",
1130
1148
  noRowsMatchThisView: "このビューに一致する行はありません",
1149
+ editFilesForSelectedRows: "選択した行のファイルを編集",
1131
1150
  oneFileOrMediaLinkPerLine: "1 行に 1 つのファイルまたはメディアリンク",
1132
1151
  previewPageTitle: "プレビューページタイトル",
1133
1152
  previousDatabasePage: "前のデータベースページ",
@@ -1243,6 +1262,8 @@ const databaseMessagesByLocale = {
1243
1262
  addProperty: "속성 추가",
1244
1263
  back: "뒤로",
1245
1264
  builderSpace: "Builder 공간",
1265
+ builderBulkUpdateNotStaged: "Builder 대량 업데이트가 스테이징되지 않음",
1266
+ builderBulkUpdateStaged: "Builder 대량 업데이트가 스테이징됨",
1246
1267
  builderUpdateFailed: "Builder 업데이트 실패",
1247
1268
  builderWriteModeWasNotChanged: "Builder 쓰기 모드가 변경되지 않았습니다",
1248
1269
  closeDatabaseSettings: "데이터베이스 설정 닫기",
@@ -1279,6 +1300,7 @@ const databaseMessagesByLocale = {
1279
1300
  nextMonth: "다음 달",
1280
1301
  nextTimelineRange: "다음 타임라인 범위",
1281
1302
  noRowsMatchThisView: "이 보기에 일치하는 행이 없습니다",
1303
+ editFilesForSelectedRows: "선택한 행의 파일 편집",
1282
1304
  oneFileOrMediaLinkPerLine: "한 줄에 파일 또는 미디어 링크 하나",
1283
1305
  previewPageTitle: "미리보기 페이지 제목",
1284
1306
  previousDatabasePage: "이전 데이터베이스 페이지",
@@ -1396,6 +1418,8 @@ const databaseMessagesByLocale = {
1396
1418
  addProperty: "Adicionar propriedade",
1397
1419
  back: "Voltar",
1398
1420
  builderSpace: "Espaço do Builder",
1421
+ builderBulkUpdateNotStaged: "Atualização em massa do Builder não preparada",
1422
+ builderBulkUpdateStaged: "Atualização em massa do Builder preparada",
1399
1423
  builderUpdateFailed: "Falha na atualização do Builder",
1400
1424
  builderWriteModeWasNotChanged: "O modo de escrita do Builder não mudou",
1401
1425
  closeDatabaseSettings: "Fechar configurações do banco de dados",
@@ -1435,6 +1459,7 @@ const databaseMessagesByLocale = {
1435
1459
  nextMonth: "Próximo mês",
1436
1460
  nextTimelineRange: "Próximo intervalo da linha do tempo",
1437
1461
  noRowsMatchThisView: "Nenhuma linha corresponde a esta visualização",
1462
+ editFilesForSelectedRows: "Editar arquivos das linhas selecionadas",
1438
1463
  oneFileOrMediaLinkPerLine: "Um arquivo ou link de mídia por linha",
1439
1464
  previewPageTitle: "Título da página de prévia",
1440
1465
  previousDatabasePage: "Página anterior do banco de dados",
@@ -1547,6 +1572,8 @@ const databaseMessagesByLocale = {
1547
1572
  addProperty: "प्रॉपर्टी जोड़ें",
1548
1573
  back: "वापस",
1549
1574
  builderSpace: "Builder स्पेस",
1575
+ builderBulkUpdateNotStaged: "Builder बल्क अपडेट स्टेज नहीं हुआ",
1576
+ builderBulkUpdateStaged: "Builder बल्क अपडेट स्टेज हुआ",
1550
1577
  builderUpdateFailed: "Builder अपडेट विफल रहा",
1551
1578
  builderWriteModeWasNotChanged: "Builder लेखन मोड नहीं बदला गया",
1552
1579
  closeDatabaseSettings: "डेटाबेस सेटिंग्स बंद करें",
@@ -1583,6 +1610,7 @@ const databaseMessagesByLocale = {
1583
1610
  nextMonth: "अगला महीना",
1584
1611
  nextTimelineRange: "अगला टाइमलाइन रेंज",
1585
1612
  noRowsMatchThisView: "इस दृश्य से कोई पंक्ति मेल नहीं खाती",
1613
+ editFilesForSelectedRows: "चयनित पंक्तियों की फ़ाइलें संपादित करें",
1586
1614
  oneFileOrMediaLinkPerLine: "हर पंक्ति में एक फ़ाइल या मीडिया लिंक",
1587
1615
  previewPageTitle: "प्रीव्यू पेज शीर्षक",
1588
1616
  previousDatabasePage: "पिछला डेटाबेस पेज",
@@ -1694,6 +1722,8 @@ const databaseMessagesByLocale = {
1694
1722
  addProperty: "إضافة خاصية",
1695
1723
  back: "رجوع",
1696
1724
  builderSpace: "مساحة Builder",
1725
+ builderBulkUpdateNotStaged: "لم يتم تجهيز تحديث Builder المجمع",
1726
+ builderBulkUpdateStaged: "تم تجهيز تحديث Builder المجمع",
1697
1727
  builderUpdateFailed: "فشل تحديث Builder",
1698
1728
  builderWriteModeWasNotChanged: "لم يتغير وضع كتابة Builder",
1699
1729
  closeDatabaseSettings: "إغلاق إعدادات قاعدة البيانات",
@@ -1730,6 +1760,7 @@ const databaseMessagesByLocale = {
1730
1760
  nextMonth: "الشهر التالي",
1731
1761
  nextTimelineRange: "نطاق المخطط الزمني التالي",
1732
1762
  noRowsMatchThisView: "لا توجد صفوف تطابق هذا العرض",
1763
+ editFilesForSelectedRows: "تحرير ملفات الصفوف المحددة",
1733
1764
  oneFileOrMediaLinkPerLine: "ملف أو رابط وسائط واحد في كل سطر",
1734
1765
  previewPageTitle: "عنوان صفحة المعاينة",
1735
1766
  previousDatabasePage: "صفحة قاعدة البيانات السابقة",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-01
4
+ ---
5
+
6
+ Builder source rows can be staged in bulk with a reviewable diff before writeback.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-07
4
+ ---
5
+
6
+ Builder-backed database fields now edit like normal Content fields while still creating reviewable Builder diffs.
@@ -2,27 +2,27 @@
2
2
 
3
3
  This generated matrix tracks whether high-value Content UI operations use the same action surface agents can call, or have an explicit exception. Edit `matrix.ts`, then regenerate this file.
4
4
 
5
- | ID | Surface | User-visible action | Status | Actions | UI entrypoints | Durable effect | Exception / gap | Reliability risk | Spine priority | Test coverage | Coverage refs | Eval scenarios | Follow-up |
6
- | ---------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | -------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------ |
7
- | comments.threads | comments | List, add, reply, resolve, reopen, and delete comment threads | action-backed | `add-comment`, `delete-comment`, `list-comments`, `update-comment` | `app/components/editor/CommentsSidebar.tsx`, `app/hooks/use-comments.ts` | Comment threads, replies, anchors, mentions, resolution state, and deletion are stored through comment actions. | - | - | P0 | seeded | - | - | - |
8
- | database.lifecycle-and-trash | database | Create, soft-delete, restore, list, and inspect content databases | action-backed | `create-content-database`, `create-inline-content-database`, `delete-content-database`, `get-content-database`, `list-content-databases`, `list-trashed-content-databases`, `restore-content-database` | `app/components/editor/SlashCommandMenu.tsx`, `app/hooks/use-content-database.ts`, `app/hooks/use-documents.ts` | Database pages and database records are created, read, soft-deleted, restored, and listed. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts` | `database-source-scope` | - |
9
- | database.properties-and-view-config | database | Configure properties, values, ordering, and saved views | action-backed | `configure-document-property`, `delete-document-property`, `duplicate-document-property`, `list-document-properties`, `reorder-document-property`, `set-document-property`, `update-content-database-view` | `app/components/editor/DocumentProperties.tsx`, `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-document-properties.ts` | Property schemas, property values, property order, filters, sorts, grouping, hidden columns, view type, and view settings are stored. | - | - | P0 | covered | `actions/bind-content-database-source-field.db.test.ts`, `actions/content-database-source-actions.test.ts`, `actions/resync-content-database-source.db.test.ts` | `database-source-scope` | - |
10
- | database.rows | database | Add, duplicate, move, open, and delete database rows | action-backed | `add-database-item`, `delete-database-items`, `delete-document`, `duplicate-database-items`, `duplicate-database-item`, `move-database-item`, `set-document-property` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx` | Database row backing documents and row ordering are created, duplicated, moved, edited, and deleted. | - | - | P0 | covered | `actions/database-row-batch-actions.db.test.ts`, `parity/__tests__/database-row-batch-reliability.test.ts` | `database-bulk-row-reliability` | - |
11
- | editor.agent-assist-prompts | editor | Ask AI from slash generation or comment context | client-assist | - | `app/components/editor/SlashCommandMenu.tsx`, `app/components/editor/CommentsSidebar.tsx` | No direct durable mutation; the prompt asks the agent to use document actions when it decides to write. | - | - | P1 | none | - | - | - |
12
- | editor.client-formatting-and-insertions | editor | Rich text formatting, selection state, slash block insertion, and copy actions | client-only-ephemeral | - | `app/components/editor/BubbleToolbar.tsx`, `app/components/editor/SlashCommandMenu.tsx`, `app/components/editor/DocumentToolbar.tsx` | - | - | - | P1 | none | - | - | - |
13
- | editor.document-body-and-title | editor | Edit document title, body, icon, image alt text, and precise text | action-backed | `edit-document`, `pull-document`, `set-image-alt-text`, `transcribe-media`, `update-document` | `app/components/editor/DocumentEditor.tsx`, `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/extensions/ImageBlock.tsx`, `app/components/editor/SlashCommandMenu.tsx` | Document content, title, icon, image metadata, and text replacements are saved to the same document source. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts`, `actions/_local-file-documents.test.ts` | `document-search-edit` | - |
14
- | local-files.components-workspace | local-files | Register, list, and write local MDX component workspaces | host-only | `list-local-component-files`, `register-local-component-workspace`, `write-local-component-file` | `app/routes/_app.local-files.tsx`, `actions/register-local-component-workspace.ts`, `actions/list-local-component-files.ts`, `actions/write-local-component-file.ts` | Trusted local component workspace registration and component file reads/writes support local MDX previews. | Workspace registration depends on a trusted Desktop folder path and is intentionally hidden with agentTool: false. | - | P1 | seeded | - | - | Local folder exception/docs PR |
15
- | local-files.host-folder-handles | local-files | Choose, persist, remove, and write trusted local folder handles | host-only | - | `app/routes/_app.local-files.tsx` | Host directory handles and browser/Desktop write permissions are managed outside SQL action state. | Mounted local folders require browser/Desktop host handles that agents cannot safely or portably hold as normal tools. | - | P0 | none | - | - | Local folder exception/docs PR |
16
- | local-files.import-export-mounted-folder | local-files | Import, check, export, push, and remove local folder source files | action-backed | `export-content-source`, `import-content-source`, `remove-local-file-source` | `app/routes/_app.local-files.tsx`, `actions/import-content-source.ts`, `actions/export-content-source.ts` | Local Markdown/MDX source files are imported into Content documents, editable Content documents are exported back to source-friendly files, and imported source entries can be removed without deleting files on disk. | - | - | P0 | covered | `actions/_local-file-documents.test.ts` | `local-file-source-truth` | - |
17
- | notion.route-backed-document-sync | source-sync | Notion document sync status, link, unlink, pull, push, resolve, create, search, and disconnect | action-backed | `connect-notion-status`, `create-and-link-notion-page`, `disconnect-notion`, `link-notion-page`, `list-notion-links`, `pull-notion-page`, `push-notion-page`, `refresh-notion-sync-status`, `resolve-notion-sync-conflict`, `search-notion-pages`, `sync-notion-comments`, `unlink-notion-page` | `app/hooks/use-notion.ts`, `app/components/editor/DocumentToolbar.tsx`, `app/components/editor/NotionSyncBar.tsx`, `app/components/editor/DocumentEditor.tsx` | Notion connection state, page search, link metadata, and local/remote document body sync state are read or mutated through Content actions. | Notion OAuth auth-url and callback routes remain route-shaped because they initiate and receive browser redirects rather than normal app data mutations. | - | P0 | covered | `parity/__tests__/matrix-route-gap-classify.test.ts` | - | - |
18
- | sharing.document-discoverability-and-export | sharing | Share, hide from search, export, and reveal documents | action-backed | `export-document`, `reveal-local-source-file`, `set-document-discoverability`, `share-local-file-document` | `app/components/editor/DocumentToolbar.tsx`, `app/hooks/use-documents.ts` | Search discoverability, shareable copies, exports, and OS reveal requests are managed through Content actions. | - | - | P0 | covered | `actions/_local-file-documents.test.ts` | `local-file-source-truth` | - |
19
- | sharing.os-reveal-local-source | sharing | Reveal a local source file in the system file manager | host-only | `reveal-local-source-file` | `app/components/editor/DocumentToolbar.tsx`, `actions/reveal-local-source-file.ts` | - | OS reveal depends on trusted local host capabilities and should not spend agent tool surface or imply portable hosted behavior. | - | P2 | seeded | - | - | Local folder exception/docs PR |
20
- | sidebar.chrome-state | sidebar | Collapse sections and resize the sidebar | client-only-ephemeral | - | `app/components/sidebar/DocumentSidebar.tsx`, `app/components/layout/Layout.tsx` | - | - | - | P2 | none | - | - | - |
21
- | sidebar.document-tree-crud | sidebar | Create, delete, move, favorite, list, search, and open pages | action-backed | `create-document`, `delete-document`, `get-document`, `list-documents`, `move-document`, `search-documents`, `update-document` | `app/components/sidebar/DocumentSidebar.tsx`, `app/components/sidebar/DocumentTreeItem.tsx`, `app/hooks/use-documents.ts` | Document tree rows and document metadata are created, updated, deleted, moved, searched, or read. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts`, `actions/_local-file-documents.test.ts` | `document-search-edit` | - |
22
- | sidebar.navigation-and-screen-context | sidebar | Navigate between documents and expose current screen context | action-equivalent | `navigate`, `view-screen` | `app/components/sidebar/DocumentSidebar.tsx`, `actions/navigate.ts`, `actions/view-screen.ts` | Application navigation state is updated or read so the agent can reason about the user's current page/view. | Human navigation is router-local, while agent navigation/screen inspection uses application-state actions to produce the same workspace orientation effect. | - | P1 | seeded | - | - | - |
23
- | source-sync.builder-body-hydration-worker | source-sync | Process queued Builder CMS body hydration work | action-backed | `process-builder-body-hydration` | `app/components/editor/DocumentEditor.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-content-database.ts` | Queued Builder body hydration entries are processed into readable Content document/database body state. | This action is intentionally hidden from the model with agentTool: false because it is an internal bounded queue worker; agents should use source refresh, review, and execution actions rather than manually driving hydration internals. | - | P0 | covered | `actions/_database-source-utils.test.ts` | - | - |
24
- | source-sync.builder-cms-review-and-write-gates | source-sync | Review, stage, validate, and execute Builder CMS source writes | action-backed | `execute-builder-source-batch`, `execute-builder-source-execution`, `prepare-builder-source-execution`, `prepare-builder-source-review`, `review-content-database-source-change-set`, `set-content-database-source-write-mode`, `stage-builder-revision`, `validate-builder-source-execution` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/components/editor/database-sources/BuilderSourceReviewDialog.tsx` | Builder source write mode, staged reviews, validation records, and bounded execution records are created through guarded actions. | - | - | P0 | covered | `actions/builder-source-review-gates.db.test.ts`, `actions/execute-builder-source-execution.test.ts` | `builder-source-review-readonly` | - |
25
- | source-sync.builder-documents | source-sync | List, pull, check, and push Builder docs/blog MDX documents | action-backed | `check-builder-doc`, `list-builder-docs`, `pull-builder-doc`, `push-builder-doc` | `actions/list-builder-docs.ts`, `actions/pull-builder-doc.ts`, `actions/check-builder-doc.ts`, `actions/push-builder-doc.ts` | Builder docs/blog entries can be read into Content, checked locally, and pushed through guarded Builder document actions. | - | - | P1 | seeded | - | - | - |
26
- | source-sync.database-source-bindings | source-sync | Attach, inspect, refresh, disconnect, join, and bind database sources | action-backed | `add-content-database-source-field-property`, `attach-content-database-source`, `bind-content-database-source-field`, `change-content-database-source-role`, `disconnect-content-database-source`, `get-content-database-source`, `list-builder-cms-models`, `refresh-content-database-source`, `suggest-source-join-key` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/DocumentProperties.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-content-database.ts` | Mounted database source metadata, fields, source role, join keys, and source-field/property bindings are stored and refreshed. | - | - | P0 | covered | `actions/bind-content-database-source-field.db.test.ts`, `actions/content-database-source-actions.test.ts`, `actions/resync-content-database-source.db.test.ts` | `database-source-scope` | - |
27
- | source-sync.provider-api-and-staged-datasets | source-sync | Inspect provider APIs and stage/query/delete large provider datasets | action-backed | `delete-staged-dataset`, `list-staged-datasets`, `provider-api-catalog`, `provider-api-docs`, `provider-api-request`, `query-staged-dataset` | `actions/provider-api-catalog.ts`, `actions/provider-api-docs.ts`, `actions/provider-api-request.ts`, `actions/query-staged-dataset.ts` | Provider API metadata and staged dataset scratch storage support scoped agent/source analysis. | - | - | P1 | seeded | - | - | - |
28
- | versions.history-and-restore | versions | Open version history and restore a previous document version | action-backed | `list-document-versions`, `restore-document-version` | `app/components/editor/VersionHistoryPanel.tsx`, `app/hooks/use-document-versions.ts` | Document versions are listed and selected versions can restore the document while snapshotting current state. | - | - | P0 | seeded | - | - | - |
5
+ | ID | Surface | User-visible action | Status | Actions | UI entrypoints | Durable effect | Exception / gap | Reliability risk | Spine priority | Test coverage | Coverage refs | Eval scenarios | Follow-up |
6
+ | ---------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | -------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------ |
7
+ | comments.threads | comments | List, add, reply, resolve, reopen, and delete comment threads | action-backed | `add-comment`, `delete-comment`, `list-comments`, `update-comment` | `app/components/editor/CommentsSidebar.tsx`, `app/hooks/use-comments.ts` | Comment threads, replies, anchors, mentions, resolution state, and deletion are stored through comment actions. | - | - | P0 | seeded | - | - | - |
8
+ | database.lifecycle-and-trash | database | Create, soft-delete, restore, list, and inspect content databases | action-backed | `create-content-database`, `create-inline-content-database`, `delete-content-database`, `get-content-database`, `list-content-databases`, `list-trashed-content-databases`, `restore-content-database` | `app/components/editor/SlashCommandMenu.tsx`, `app/hooks/use-content-database.ts`, `app/hooks/use-documents.ts` | Database pages and database records are created, read, soft-deleted, restored, and listed. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts` | `database-source-scope` | - |
9
+ | database.properties-and-view-config | database | Configure properties, values, ordering, and saved views | action-backed | `configure-document-property`, `delete-document-property`, `duplicate-document-property`, `list-document-properties`, `reorder-document-property`, `set-document-property`, `update-content-database-view` | `app/components/editor/DocumentProperties.tsx`, `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-document-properties.ts` | Property schemas, property values, property order, filters, sorts, grouping, hidden columns, view type, and view settings are stored. | - | - | P0 | covered | `actions/bind-content-database-source-field.db.test.ts`, `actions/content-database-source-actions.test.ts`, `actions/resync-content-database-source.db.test.ts` | `database-source-scope` | - |
10
+ | database.rows | database | Add, duplicate, move, open, and delete database rows | action-backed | `add-database-item`, `delete-database-items`, `delete-document`, `duplicate-database-items`, `duplicate-database-item`, `move-database-item`, `set-document-property` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx` | Database row backing documents and row ordering are created, duplicated, moved, edited, and deleted. | - | - | P0 | covered | `actions/database-row-batch-actions.db.test.ts`, `parity/__tests__/database-row-batch-reliability.test.ts` | `database-bulk-row-reliability` | - |
11
+ | editor.agent-assist-prompts | editor | Ask AI from slash generation or comment context | client-assist | - | `app/components/editor/SlashCommandMenu.tsx`, `app/components/editor/CommentsSidebar.tsx` | No direct durable mutation; the prompt asks the agent to use document actions when it decides to write. | - | - | P1 | none | - | - | - |
12
+ | editor.client-formatting-and-insertions | editor | Rich text formatting, selection state, slash block insertion, and copy actions | client-only-ephemeral | - | `app/components/editor/BubbleToolbar.tsx`, `app/components/editor/SlashCommandMenu.tsx`, `app/components/editor/DocumentToolbar.tsx` | - | - | - | P1 | none | - | - | - |
13
+ | editor.document-body-and-title | editor | Edit document title, body, icon, image alt text, and precise text | action-backed | `edit-document`, `pull-document`, `set-image-alt-text`, `transcribe-media`, `update-document` | `app/components/editor/DocumentEditor.tsx`, `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/extensions/ImageBlock.tsx`, `app/components/editor/SlashCommandMenu.tsx` | Document content, title, icon, image metadata, and text replacements are saved to the same document source. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts`, `actions/_local-file-documents.test.ts` | `document-search-edit` | - |
14
+ | local-files.components-workspace | local-files | Register, list, and write local MDX component workspaces | host-only | `list-local-component-files`, `register-local-component-workspace`, `write-local-component-file` | `app/routes/_app.local-files.tsx`, `actions/register-local-component-workspace.ts`, `actions/list-local-component-files.ts`, `actions/write-local-component-file.ts` | Trusted local component workspace registration and component file reads/writes support local MDX previews. | Workspace registration depends on a trusted Desktop folder path and is intentionally hidden with agentTool: false. | - | P1 | seeded | - | - | Local folder exception/docs PR |
15
+ | local-files.host-folder-handles | local-files | Choose, persist, remove, and write trusted local folder handles | host-only | - | `app/routes/_app.local-files.tsx` | Host directory handles and browser/Desktop write permissions are managed outside SQL action state. | Mounted local folders require browser/Desktop host handles that agents cannot safely or portably hold as normal tools. | - | P0 | none | - | - | Local folder exception/docs PR |
16
+ | local-files.import-export-mounted-folder | local-files | Import, check, export, push, and remove local folder source files | action-backed | `export-content-source`, `import-content-source`, `remove-local-file-source` | `app/routes/_app.local-files.tsx`, `actions/import-content-source.ts`, `actions/export-content-source.ts` | Local Markdown/MDX source files are imported into Content documents, editable Content documents are exported back to source-friendly files, and imported source entries can be removed without deleting files on disk. | - | - | P0 | covered | `actions/_local-file-documents.test.ts` | `local-file-source-truth` | - |
17
+ | notion.route-backed-document-sync | source-sync | Notion document sync status, link, unlink, pull, push, resolve, create, search, and disconnect | action-backed | `connect-notion-status`, `create-and-link-notion-page`, `disconnect-notion`, `link-notion-page`, `list-notion-links`, `pull-notion-page`, `push-notion-page`, `refresh-notion-sync-status`, `resolve-notion-sync-conflict`, `search-notion-pages`, `sync-notion-comments`, `unlink-notion-page` | `app/hooks/use-notion.ts`, `app/components/editor/DocumentToolbar.tsx`, `app/components/editor/NotionSyncBar.tsx`, `app/components/editor/DocumentEditor.tsx` | Notion connection state, page search, link metadata, and local/remote document body sync state are read or mutated through Content actions. | Notion OAuth auth-url and callback routes remain route-shaped because they initiate and receive browser redirects rather than normal app data mutations. | - | P0 | covered | `parity/__tests__/matrix-route-gap-classify.test.ts` | - | - |
18
+ | sharing.document-discoverability-and-export | sharing | Share, hide from search, export, and reveal documents | action-backed | `export-document`, `reveal-local-source-file`, `set-document-discoverability`, `share-local-file-document` | `app/components/editor/DocumentToolbar.tsx`, `app/hooks/use-documents.ts` | Search discoverability, shareable copies, exports, and OS reveal requests are managed through Content actions. | - | - | P0 | covered | `actions/_local-file-documents.test.ts` | `local-file-source-truth` | - |
19
+ | sharing.os-reveal-local-source | sharing | Reveal a local source file in the system file manager | host-only | `reveal-local-source-file` | `app/components/editor/DocumentToolbar.tsx`, `actions/reveal-local-source-file.ts` | - | OS reveal depends on trusted local host capabilities and should not spend agent tool surface or imply portable hosted behavior. | - | P2 | seeded | - | - | Local folder exception/docs PR |
20
+ | sidebar.chrome-state | sidebar | Collapse sections and resize the sidebar | client-only-ephemeral | - | `app/components/sidebar/DocumentSidebar.tsx`, `app/components/layout/Layout.tsx` | - | - | - | P2 | none | - | - | - |
21
+ | sidebar.document-tree-crud | sidebar | Create, delete, move, favorite, list, search, and open pages | action-backed | `create-document`, `delete-document`, `get-document`, `list-documents`, `move-document`, `search-documents`, `update-document` | `app/components/sidebar/DocumentSidebar.tsx`, `app/components/sidebar/DocumentTreeItem.tsx`, `app/hooks/use-documents.ts` | Document tree rows and document metadata are created, updated, deleted, moved, searched, or read. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts`, `actions/_local-file-documents.test.ts` | `document-search-edit` | - |
22
+ | sidebar.navigation-and-screen-context | sidebar | Navigate between documents and expose current screen context | action-equivalent | `navigate`, `view-screen` | `app/components/sidebar/DocumentSidebar.tsx`, `actions/navigate.ts`, `actions/view-screen.ts` | Application navigation state is updated or read so the agent can reason about the user's current page/view. | Human navigation is router-local, while agent navigation/screen inspection uses application-state actions to produce the same workspace orientation effect. | - | P1 | seeded | - | - | - |
23
+ | source-sync.builder-body-hydration-worker | source-sync | Process queued Builder CMS body hydration work | action-backed | `process-builder-body-hydration` | `app/components/editor/DocumentEditor.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-content-database.ts` | Queued Builder body hydration entries are processed into readable Content document/database body state. | This action is intentionally hidden from the model with agentTool: false because it is an internal bounded queue worker; agents should use source refresh, review, and execution actions rather than manually driving hydration internals. | - | P0 | covered | `actions/_database-source-utils.test.ts` | - | - |
24
+ | source-sync.builder-cms-review-and-write-gates | source-sync | Review, stage, validate, and execute Builder CMS source writes | action-backed | `execute-builder-source-batch`, `execute-builder-source-execution`, `prepare-builder-source-execution`, `prepare-builder-source-review`, `review-content-database-source-change-set`, `set-content-database-source-write-mode`, `stage-builder-source-bulk-update`, `stage-builder-revision`, `validate-builder-source-execution` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/components/editor/database-sources/BuilderSourceReviewDialog.tsx` | Builder source write mode, staged reviews, validation records, and bounded execution records are created through guarded actions. | - | - | P0 | covered | `actions/builder-source-review-gates.db.test.ts`, `actions/execute-builder-source-execution.test.ts`, `actions/stage-builder-source-bulk-update.db.test.ts` | `builder-source-review-readonly` | - |
25
+ | source-sync.builder-documents | source-sync | List, pull, check, and push Builder docs/blog MDX documents | action-backed | `check-builder-doc`, `list-builder-docs`, `pull-builder-doc`, `push-builder-doc` | `actions/list-builder-docs.ts`, `actions/pull-builder-doc.ts`, `actions/check-builder-doc.ts`, `actions/push-builder-doc.ts` | Builder docs/blog entries can be read into Content, checked locally, and pushed through guarded Builder document actions. | - | - | P1 | seeded | - | - | - |
26
+ | source-sync.database-source-bindings | source-sync | Attach, inspect, refresh, disconnect, join, and bind database sources | action-backed | `add-content-database-source-field-property`, `attach-content-database-source`, `bind-content-database-source-field`, `change-content-database-source-role`, `disconnect-content-database-source`, `get-content-database-source`, `list-builder-cms-models`, `refresh-content-database-source`, `suggest-source-join-key` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/DocumentProperties.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-content-database.ts` | Mounted database source metadata, fields, source role, join keys, and source-field/property bindings are stored and refreshed. | - | - | P0 | covered | `actions/bind-content-database-source-field.db.test.ts`, `actions/content-database-source-actions.test.ts`, `actions/resync-content-database-source.db.test.ts` | `database-source-scope` | - |
27
+ | source-sync.provider-api-and-staged-datasets | source-sync | Inspect provider APIs and stage/query/delete large provider datasets | action-backed | `delete-staged-dataset`, `list-staged-datasets`, `provider-api-catalog`, `provider-api-docs`, `provider-api-request`, `query-staged-dataset` | `actions/provider-api-catalog.ts`, `actions/provider-api-docs.ts`, `actions/provider-api-request.ts`, `actions/query-staged-dataset.ts` | Provider API metadata and staged dataset scratch storage support scoped agent/source analysis. | - | - | P1 | seeded | - | - | - |
28
+ | versions.history-and-restore | versions | Open version history and restore a previous document version | action-backed | `list-document-versions`, `restore-document-version` | `app/components/editor/VersionHistoryPanel.tsx`, `app/hooks/use-document-versions.ts` | Document versions are listed and selected versions can restore the document while snapshotting current state. | - | - | P0 | seeded | - | - | - |
@@ -357,6 +357,7 @@ export const parityMatrix: ParityRow[] = [
357
357
  "prepare-builder-source-review",
358
358
  "review-content-database-source-change-set",
359
359
  "set-content-database-source-write-mode",
360
+ "stage-builder-source-bulk-update",
360
361
  "stage-builder-revision",
361
362
  "validate-builder-source-execution",
362
363
  ],
@@ -368,6 +369,7 @@ export const parityMatrix: ParityRow[] = [
368
369
  coverageRefs: [
369
370
  "actions/builder-source-review-gates.db.test.ts",
370
371
  "actions/execute-builder-source-execution.test.ts",
372
+ "actions/stage-builder-source-bulk-update.db.test.ts",
371
373
  ],
372
374
  evalScenarioIds: ["builder-source-review-readonly"],
373
375
  },
@@ -894,6 +894,16 @@ export interface ExecuteBuilderSourceExecutionRequest {
894
894
  confirmUnpublish?: boolean;
895
895
  }
896
896
 
897
+ export interface PrepareBuilderSourceReviewRequest {
898
+ databaseId?: string;
899
+ documentId?: string;
900
+ sourceId?: string;
901
+ changeSetIds?: string[];
902
+ pushModeConfirmation?: ContentDatabaseSourcePushMode;
903
+ publicationTransition?: BuilderCmsPublicationTransitionIntent;
904
+ confirmUnpublish?: boolean;
905
+ }
906
+
897
907
  export interface ExecuteBuilderSourceBatchTransition {
898
908
  publicationTransition?: BuilderCmsPublicationTransitionIntent;
899
909
  confirmUnpublish?: boolean;
@@ -938,13 +948,58 @@ export interface SetContentDatabaseSourceWriteModeRequest {
938
948
  allowPublishWrites?: boolean;
939
949
  }
940
950
 
941
- export interface PrepareBuilderSourceReviewRequest {
951
+ export type StageBuilderSourceBulkUpdateRowStatus =
952
+ | "staged"
953
+ | "unchanged"
954
+ | "blocked";
955
+
956
+ export interface StageBuilderSourceBulkUpdateFieldRequest {
957
+ propertyId?: string;
958
+ localFieldKey?: string;
959
+ sourceFieldKey?: string;
960
+ value: DocumentPropertyValue;
961
+ }
962
+
963
+ export interface StageBuilderSourceBulkUpdateRequest {
942
964
  databaseId?: string;
943
965
  documentId?: string;
944
966
  sourceId?: string;
945
- pushModeConfirmation?: ContentDatabaseSourcePushMode;
946
- publicationTransition?: BuilderCmsPublicationTransitionIntent;
947
- confirmUnpublish?: boolean;
967
+ itemIds?: string[];
968
+ documentIds?: string[];
969
+ field: StageBuilderSourceBulkUpdateFieldRequest;
970
+ dryRun?: boolean;
971
+ }
972
+
973
+ export interface StageBuilderSourceBulkUpdateRowResult {
974
+ itemId: string;
975
+ documentId: string;
976
+ title: string;
977
+ status: StageBuilderSourceBulkUpdateRowStatus;
978
+ message?: string;
979
+ changeSetId?: string;
980
+ fieldChange?: ContentDatabaseSourceFieldChange;
981
+ }
982
+
983
+ export interface StageBuilderSourceBulkUpdateResponse {
984
+ dryRun: boolean;
985
+ databaseId: string;
986
+ documentId: string;
987
+ sourceId: string;
988
+ field: {
989
+ propertyId: string | null;
990
+ propertyName: string | null;
991
+ localFieldKey: string;
992
+ sourceFieldKey: string;
993
+ sourceFieldLabel: string;
994
+ };
995
+ summary: {
996
+ total: number;
997
+ staged: number;
998
+ unchanged: number;
999
+ blocked: number;
1000
+ };
1001
+ rows: StageBuilderSourceBulkUpdateRowResult[];
1002
+ review: ContentDatabaseSourceReviewPayload | null;
948
1003
  }
949
1004
 
950
1005
  export type BuilderCmsWriteEffect =
@@ -643,6 +643,15 @@ regeneration is slow, expensive, and regresses unrelated parts.
643
643
  `data-screen`, or `#` anchors (see Multi-screen prototypes & navigation).
644
644
  - Never hardcode colors — always reference CSS custom properties (no raw
645
645
  `text-white` / `bg-black` / hex literals in markup).
646
+ - Never define or rely on a CSS custom property starting with `--agent-native-`
647
+ in generated design content. That prefix (plus `--design-editor-`) is
648
+ reserved for editor-internal state (selection chrome, editor-chrome scale
649
+ compensation, clipboard/surface tokens) — the editor strips any property
650
+ under those prefixes before persisting a cross-screen style capture
651
+ (`isEditorInternalCssVar` in `app/pages/DesignEditor.tsx`), so a design that
652
+ defines its own theming under that namespace would silently lose those
653
+ values on a cross-screen move. Use `--color-*`, `--font-*`, or another
654
+ design-owned prefix for tokens/tweaks instead.
646
655
  - Never use the v3 `bg-gradient-to-*` classes — use v4 `bg-linear-to-*`.
647
656
  - Never use `<script>` blocks with raw DOM manipulation — use Alpine.js directives
648
657
  - Never inline `onclick="..."` handlers — use `@click`
@@ -1,10 +1,11 @@
1
+ import crypto from "node:crypto";
2
+
1
3
  import { defineAction } from "@agent-native/core";
2
4
  import {
3
5
  getRequestOrgId,
4
6
  getRequestUserEmail,
5
7
  } from "@agent-native/core/server/request-context";
6
8
  import { eq } from "drizzle-orm";
7
- import { nanoid } from "nanoid";
8
9
  import { z } from "zod";
9
10
 
10
11
  import { getDb, schema } from "../server/db/index.js";
@@ -76,6 +77,20 @@ function normalizeBridgeUrl(value: string): string {
76
77
  return parsed.toString().replace(/\/$/, "");
77
78
  }
78
79
 
80
+ function stableConnectionId(
81
+ devServerUrl: string,
82
+ rootPath: string | undefined,
83
+ ownerEmail: string,
84
+ orgId: string | null,
85
+ ) {
86
+ const hash = crypto
87
+ .createHash("sha256")
88
+ .update(`${ownerEmail}\n${orgId ?? ""}\n${devServerUrl}\n${rootPath ?? ""}`)
89
+ .digest("base64url")
90
+ .slice(0, 16);
91
+ return `localhost_${hash}`;
92
+ }
93
+
79
94
  export default defineAction({
80
95
  description:
81
96
  "Register or refresh a localhost Design source connection produced by `agent-native design connect`. Stores the dev server URL, bridge URL, route manifest, and operation capabilities so the UI can later list local-code artboards.",
@@ -126,9 +141,9 @@ export default defineAction({
126
141
  run: async (args) => {
127
142
  const ownerEmail = getRequestUserEmail();
128
143
  if (!ownerEmail) throw new Error("no authenticated user");
144
+ const orgId = getRequestOrgId() ?? null;
129
145
 
130
146
  const now = new Date().toISOString();
131
- const id = args.id ?? nanoid();
132
147
  const db = getDb();
133
148
  const devServerUrl = normalizeUrl(args.devServerUrl, "devServerUrl");
134
149
  const bridgeUrl = args.bridgeUrl
@@ -152,6 +167,14 @@ export default defineAction({
152
167
  routes,
153
168
  generatedAt: args.routeManifest?.generatedAt ?? now,
154
169
  };
170
+ const id =
171
+ args.id ??
172
+ stableConnectionId(
173
+ devServerUrl,
174
+ routeManifest.rootPath,
175
+ ownerEmail,
176
+ orgId,
177
+ );
155
178
  const capabilities =
156
179
  args.capabilities ??
157
180
  DESIGN_BRIDGE_OPERATIONS.map((operation) => ({
@@ -193,7 +216,7 @@ export default defineAction({
193
216
  status: args.status,
194
217
  lastSeenAt: now,
195
218
  ownerEmail,
196
- orgId: getRequestOrgId() ?? null,
219
+ orgId,
197
220
  updatedAt: now,
198
221
  };
199
222
 
@@ -1,9 +1,6 @@
1
- import crypto from "node:crypto";
2
-
3
1
  import { defineAction, embedApp } from "@agent-native/core";
4
2
  import { writeAppState } from "@agent-native/core/application-state";
5
3
  import { buildDeepLink } from "@agent-native/core/server";
6
- import { getRequestUserEmail } from "@agent-native/core/server/request-context";
7
4
  import { eq } from "drizzle-orm";
8
5
  import { z } from "zod";
9
6
 
@@ -89,28 +86,6 @@ function isLoopbackUrl(value: string): boolean {
89
86
  );
90
87
  }
91
88
 
92
- /**
93
- * Derive a stable per-user connection id for a devServerUrl + rootPath pair.
94
- *
95
- * The owner email is embedded in the hash so two users with an identical
96
- * devServerUrl + rootPath (common with devcontainers/codespaces images) derive
97
- * DIFFERENT ids and never collide on the shared primary key. Connections
98
- * created before user scoping keep their old ids; those users simply
99
- * reconnect fresh under the new per-user id.
100
- */
101
- function stableConnectionId(
102
- devServerUrl: string,
103
- rootPath: string | undefined,
104
- ownerEmail: string,
105
- ) {
106
- const hash = crypto
107
- .createHash("sha256")
108
- .update(`${ownerEmail}\n${devServerUrl}\n${rootPath ?? ""}`)
109
- .digest("base64url")
110
- .slice(0, 16);
111
- return `localhost_${hash}`;
112
- }
113
-
114
89
  function designOverviewDeepLink(designId: string): string {
115
90
  return buildDeepLink({
116
91
  app: "design",
@@ -254,19 +229,11 @@ export default defineAction({
254
229
  }) ?? [],
255
230
  generatedAt: new Date().toISOString(),
256
231
  };
257
- let connectionId = args.connectionId;
258
- if (!connectionId) {
259
- const ownerEmail = getRequestUserEmail();
260
- if (!ownerEmail) throw new Error("no authenticated user");
261
- connectionId = stableConnectionId(
262
- devServerUrl,
263
- args.rootPath,
264
- ownerEmail,
265
- );
266
- }
267
-
268
232
  const connection = await connectLocalhostAction.run({
269
- id: connectionId,
233
+ // Let connect-localhost be the single source of truth for stable
234
+ // per-user/per-org id derivation. Duplicating it here can create a second
235
+ // tokenless row after the CLI self-registers the bridge token.
236
+ id: args.connectionId,
270
237
  name: args.name,
271
238
  devServerUrl,
272
239
  bridgeUrl: args.bridgeUrl,