@agent-native/core 0.79.12 → 0.79.16

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 (289) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +25 -0
  3. package/corpus/core/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
  4. package/corpus/core/docs/content/locales/zh-TW/actions.md +82 -82
  5. package/corpus/core/docs/content/locales/zh-TW/agent-mentions.md +22 -22
  6. package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
  7. package/corpus/core/docs/content/locales/zh-TW/agent-teams.md +29 -29
  8. package/corpus/core/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
  9. package/corpus/core/docs/content/locales/zh-TW/audit-log.md +16 -16
  10. package/corpus/core/docs/content/locales/zh-TW/authentication.md +32 -32
  11. package/corpus/core/docs/content/locales/zh-TW/automations.md +32 -32
  12. package/corpus/core/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
  13. package/corpus/core/docs/content/locales/zh-TW/cli-adapters.md +17 -17
  14. package/corpus/core/docs/content/locales/zh-TW/client.md +62 -62
  15. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
  16. package/corpus/core/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
  17. package/corpus/core/docs/content/locales/zh-TW/components.md +51 -51
  18. package/corpus/core/docs/content/locales/zh-TW/context-awareness.md +66 -66
  19. package/corpus/core/docs/content/locales/zh-TW/creating-templates.md +39 -39
  20. package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
  21. package/corpus/core/docs/content/locales/zh-TW/database.md +21 -21
  22. package/corpus/core/docs/content/locales/zh-TW/deployment.md +37 -37
  23. package/corpus/core/docs/content/locales/zh-TW/dispatch.md +43 -43
  24. package/corpus/core/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
  25. package/corpus/core/docs/content/locales/zh-TW/durable-resume.md +18 -18
  26. package/corpus/core/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
  27. package/corpus/core/docs/content/locales/zh-TW/evals.md +16 -16
  28. package/corpus/core/docs/content/locales/zh-TW/extensions.md +81 -81
  29. package/corpus/core/docs/content/locales/zh-TW/external-agents.md +146 -146
  30. package/corpus/core/docs/content/locales/zh-TW/faq.md +43 -43
  31. package/corpus/core/docs/content/locales/zh-TW/file-uploads.md +11 -11
  32. package/corpus/core/docs/content/locales/zh-TW/frames.md +33 -33
  33. package/corpus/core/docs/content/locales/zh-TW/getting-started.md +28 -28
  34. package/corpus/core/docs/content/locales/zh-TW/harness-agents.md +78 -78
  35. package/corpus/core/docs/content/locales/zh-TW/human-approval.md +27 -27
  36. package/corpus/core/docs/content/locales/zh-TW/internationalization.md +19 -19
  37. package/corpus/core/docs/content/locales/zh-TW/key-concepts.md +68 -68
  38. package/corpus/core/docs/content/locales/zh-TW/local-file-mode.md +50 -50
  39. package/corpus/core/docs/content/locales/zh-TW/mcp-apps.md +38 -38
  40. package/corpus/core/docs/content/locales/zh-TW/mcp-clients.md +67 -67
  41. package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
  42. package/corpus/core/docs/content/locales/zh-TW/messaging.md +99 -99
  43. package/corpus/core/docs/content/locales/zh-TW/migration-workbench.md +6 -6
  44. package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
  45. package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
  46. package/corpus/core/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
  47. package/corpus/core/docs/content/locales/zh-TW/notifications.md +23 -23
  48. package/corpus/core/docs/content/locales/zh-TW/observability.md +49 -49
  49. package/corpus/core/docs/content/locales/zh-TW/observational-memory.md +23 -23
  50. package/corpus/core/docs/content/locales/zh-TW/onboarding.md +40 -40
  51. package/corpus/core/docs/content/locales/zh-TW/plan-plugin.md +37 -37
  52. package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
  53. package/corpus/core/docs/content/locales/zh-TW/processors.md +17 -17
  54. package/corpus/core/docs/content/locales/zh-TW/progress.md +15 -15
  55. package/corpus/core/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
  56. package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
  57. package/corpus/core/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
  58. package/corpus/core/docs/content/locales/zh-TW/routing.md +9 -9
  59. package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
  60. package/corpus/core/docs/content/locales/zh-TW/security.md +49 -49
  61. package/corpus/core/docs/content/locales/zh-TW/server.md +47 -47
  62. package/corpus/core/docs/content/locales/zh-TW/sharing.md +22 -22
  63. package/corpus/core/docs/content/locales/zh-TW/skills-guide.md +46 -46
  64. package/corpus/core/docs/content/locales/zh-TW/template-analytics.md +40 -40
  65. package/corpus/core/docs/content/locales/zh-TW/template-assets.md +69 -69
  66. package/corpus/core/docs/content/locales/zh-TW/template-brain.md +81 -81
  67. package/corpus/core/docs/content/locales/zh-TW/template-calendar.md +40 -40
  68. package/corpus/core/docs/content/locales/zh-TW/template-chat.md +27 -27
  69. package/corpus/core/docs/content/locales/zh-TW/template-clips.md +85 -85
  70. package/corpus/core/docs/content/locales/zh-TW/template-content.md +65 -66
  71. package/corpus/core/docs/content/locales/zh-TW/template-design.md +29 -29
  72. package/corpus/core/docs/content/locales/zh-TW/template-dispatch.md +51 -51
  73. package/corpus/core/docs/content/locales/zh-TW/template-forms.md +25 -25
  74. package/corpus/core/docs/content/locales/zh-TW/template-mail.md +71 -71
  75. package/corpus/core/docs/content/locales/zh-TW/template-plan.md +92 -92
  76. package/corpus/core/docs/content/locales/zh-TW/template-slides.md +52 -52
  77. package/corpus/core/docs/content/locales/zh-TW/template-videos.md +30 -30
  78. package/corpus/core/docs/content/locales/zh-TW/tracking.md +29 -29
  79. package/corpus/core/docs/content/locales/zh-TW/using-your-agent.md +18 -18
  80. package/corpus/core/docs/content/locales/zh-TW/voice-input.md +19 -19
  81. package/corpus/core/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
  82. package/corpus/core/docs/content/locales/zh-TW/workspace-connections.md +41 -41
  83. package/corpus/core/docs/content/locales/zh-TW/workspace-management.md +27 -27
  84. package/corpus/core/docs/content/locales/zh-TW/workspace.md +58 -58
  85. package/corpus/core/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
  86. package/corpus/core/docs/content/template-clips.md +48 -2
  87. package/corpus/core/package.json +2 -1
  88. package/corpus/core/src/client/AgentPanel.tsx +29 -6
  89. package/corpus/core/src/deploy/build.ts +432 -42
  90. package/corpus/core/src/deploy/route-discovery.ts +1 -1
  91. package/corpus/core/src/server/edge.ts +50 -0
  92. package/corpus/core/src/styles/agent-native.css +123 -0
  93. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +44 -44
  94. package/corpus/core/src/vite/client.ts +1 -0
  95. package/corpus/templates/analytics/app/components/layout/Layout.tsx +5 -3
  96. package/corpus/templates/analytics/app/i18n/zh-TW.ts +69 -70
  97. package/corpus/templates/analytics/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  98. package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -3
  99. package/corpus/templates/assets/app/i18n/zh-TW.ts +82 -82
  100. package/corpus/templates/assets/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  101. package/corpus/templates/brain/app/components/layout/Layout.tsx +6 -4
  102. package/corpus/templates/brain/app/i18n/zh-TW.ts +90 -90
  103. package/corpus/templates/brain/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  104. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
  105. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -1
  106. package/corpus/templates/calendar/app/i18n/zh-TW.ts +57 -57
  107. package/corpus/templates/calendar/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  108. package/corpus/templates/calendar/server/lib/booking-og-fonts.ts +20 -6
  109. package/corpus/templates/calendar/server/lib/booking-og-image.ts +17 -9
  110. package/corpus/templates/chat/app/components/layout/Layout.tsx +5 -3
  111. package/corpus/templates/chat/app/i18n/zh-TW.ts +3 -3
  112. package/corpus/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  113. package/corpus/templates/clips/AGENTS.md +6 -0
  114. package/corpus/templates/clips/actions/delete-recording-permanent.ts +7 -1
  115. package/corpus/templates/clips/actions/get-recording-player-data.ts +44 -2
  116. package/corpus/templates/clips/actions/navigate.ts +2 -0
  117. package/corpus/templates/clips/actions/save-bug-report-context.ts +173 -0
  118. package/corpus/templates/clips/actions/view-screen.ts +58 -7
  119. package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +9 -3
  120. package/corpus/templates/clips/app/hooks/use-navigation-state.ts +17 -0
  121. package/corpus/templates/clips/app/i18n/ar-SA.ts +31 -0
  122. package/corpus/templates/clips/app/i18n/de-DE.ts +32 -0
  123. package/corpus/templates/clips/app/i18n/en-US.ts +32 -0
  124. package/corpus/templates/clips/app/i18n/es-ES.ts +32 -0
  125. package/corpus/templates/clips/app/i18n/fr-FR.ts +32 -0
  126. package/corpus/templates/clips/app/i18n/hi-IN.ts +32 -0
  127. package/corpus/templates/clips/app/i18n/ja-JP.ts +31 -0
  128. package/corpus/templates/clips/app/i18n/ko-KR.ts +32 -0
  129. package/corpus/templates/clips/app/i18n/pt-BR.ts +32 -0
  130. package/corpus/templates/clips/app/i18n/zh-CN.ts +30 -0
  131. package/corpus/templates/clips/app/i18n/zh-TW.ts +461 -451
  132. package/corpus/templates/clips/app/routes/bug-report.done.tsx +126 -0
  133. package/corpus/templates/clips/app/routes/bug-report.tsx +222 -0
  134. package/corpus/templates/clips/app/routes/record.tsx +104 -12
  135. package/corpus/templates/clips/changelog/2026-06-26-brief-network-blips-no-longer-block-recording-or-wrongly-pro.md +6 -0
  136. package/corpus/templates/clips/changelog/2026-06-26-bug-report-recordings-can-keep-redacted-host-app-context-wit.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-06-26-bug-report-widgets-can-launch-clips-recordings-from-embedded.md +6 -0
  138. package/corpus/templates/clips/changelog/2026-06-26-desktop-recording-keeps-connected-users-out-of-the-storage-s.md +6 -0
  139. package/corpus/templates/clips/changelog/2026-06-26-if-a-recording-can-t-be-uploaded-the-chrome-extension-now-sa.md +6 -0
  140. package/corpus/templates/clips/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  141. package/corpus/templates/clips/chrome-extension/public/manifest.json +9 -2
  142. package/corpus/templates/clips/chrome-extension/src/background.ts +43 -0
  143. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +111 -6
  144. package/corpus/templates/clips/chrome-extension/src/popup.ts +18 -7
  145. package/corpus/templates/clips/desktop/src/app.tsx +53 -19
  146. package/corpus/templates/clips/server/db/schema.ts +26 -0
  147. package/corpus/templates/clips/server/lib/public-agent-context.ts +51 -0
  148. package/corpus/templates/clips/server/plugins/auth.ts +1 -0
  149. package/corpus/templates/clips/server/plugins/db.ts +28 -0
  150. package/corpus/templates/clips/server/routes/api/agent-context.json.get.ts +4 -1
  151. package/corpus/templates/clips/shared/bug-report.ts +161 -0
  152. package/corpus/templates/content/app/components/layout/Layout.tsx +10 -8
  153. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -1
  154. package/corpus/templates/content/app/i18n/zh-TW.ts +67 -66
  155. package/corpus/templates/content/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  156. package/corpus/templates/design/app/components/layout/Layout.tsx +3 -3
  157. package/corpus/templates/design/app/i18n/zh-TW.ts +44 -44
  158. package/corpus/templates/design/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  159. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +5 -4
  160. package/corpus/templates/dispatch/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  161. package/corpus/templates/forms/app/components/layout/Layout.tsx +4 -2
  162. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -1
  163. package/corpus/templates/forms/app/i18n/zh-TW.ts +48 -48
  164. package/corpus/templates/forms/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  165. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +3 -3
  166. package/corpus/templates/macros/app/i18n/zh-TW.ts +5 -5
  167. package/corpus/templates/macros/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  168. package/corpus/templates/mail/app/i18n/zh-TW.ts +83 -83
  169. package/corpus/templates/mail/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  170. package/corpus/templates/plan/app/components/layout/Layout.tsx +5 -3
  171. package/corpus/templates/plan/app/i18n/zh-TW.ts +69 -69
  172. package/corpus/templates/plan/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  173. package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -3
  174. package/corpus/templates/slides/app/i18n/zh-TW.ts +64 -64
  175. package/corpus/templates/slides/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  176. package/corpus/templates/videos/app/components/layout/Layout.tsx +2 -2
  177. package/corpus/templates/videos/app/i18n/zh-TW.ts +54 -54
  178. package/corpus/templates/videos/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  179. package/dist/client/AgentPanel.d.ts.map +1 -1
  180. package/dist/client/AgentPanel.js +16 -6
  181. package/dist/client/AgentPanel.js.map +1 -1
  182. package/dist/collab/routes.d.ts +2 -2
  183. package/dist/deploy/build.d.ts +3 -1
  184. package/dist/deploy/build.d.ts.map +1 -1
  185. package/dist/deploy/build.js +372 -37
  186. package/dist/deploy/build.js.map +1 -1
  187. package/dist/deploy/route-discovery.d.ts +1 -1
  188. package/dist/deploy/route-discovery.js +1 -1
  189. package/dist/deploy/route-discovery.js.map +1 -1
  190. package/dist/notifications/routes.d.ts +1 -1
  191. package/dist/observability/routes.d.ts +5 -5
  192. package/dist/resources/handlers.d.ts +3 -3
  193. package/dist/server/agent-engine-api-key-route.d.ts +2 -2
  194. package/dist/server/edge.d.ts +11 -0
  195. package/dist/server/edge.d.ts.map +1 -0
  196. package/dist/server/edge.js +11 -0
  197. package/dist/server/edge.js.map +1 -0
  198. package/dist/server/transcribe-voice.d.ts +1 -1
  199. package/dist/styles/agent-native.css +123 -0
  200. package/dist/templates/default/app/i18n/zh-TW.ts +44 -44
  201. package/dist/vite/client.d.ts.map +1 -1
  202. package/dist/vite/client.js +1 -0
  203. package/dist/vite/client.js.map +1 -1
  204. package/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
  205. package/docs/content/locales/zh-TW/actions.md +82 -82
  206. package/docs/content/locales/zh-TW/agent-mentions.md +22 -22
  207. package/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
  208. package/docs/content/locales/zh-TW/agent-teams.md +29 -29
  209. package/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
  210. package/docs/content/locales/zh-TW/audit-log.md +16 -16
  211. package/docs/content/locales/zh-TW/authentication.md +32 -32
  212. package/docs/content/locales/zh-TW/automations.md +32 -32
  213. package/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
  214. package/docs/content/locales/zh-TW/cli-adapters.md +17 -17
  215. package/docs/content/locales/zh-TW/client.md +62 -62
  216. package/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
  217. package/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
  218. package/docs/content/locales/zh-TW/components.md +51 -51
  219. package/docs/content/locales/zh-TW/context-awareness.md +66 -66
  220. package/docs/content/locales/zh-TW/creating-templates.md +39 -39
  221. package/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
  222. package/docs/content/locales/zh-TW/database.md +21 -21
  223. package/docs/content/locales/zh-TW/deployment.md +37 -37
  224. package/docs/content/locales/zh-TW/dispatch.md +43 -43
  225. package/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
  226. package/docs/content/locales/zh-TW/durable-resume.md +18 -18
  227. package/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
  228. package/docs/content/locales/zh-TW/evals.md +16 -16
  229. package/docs/content/locales/zh-TW/extensions.md +81 -81
  230. package/docs/content/locales/zh-TW/external-agents.md +146 -146
  231. package/docs/content/locales/zh-TW/faq.md +43 -43
  232. package/docs/content/locales/zh-TW/file-uploads.md +11 -11
  233. package/docs/content/locales/zh-TW/frames.md +33 -33
  234. package/docs/content/locales/zh-TW/getting-started.md +28 -28
  235. package/docs/content/locales/zh-TW/harness-agents.md +78 -78
  236. package/docs/content/locales/zh-TW/human-approval.md +27 -27
  237. package/docs/content/locales/zh-TW/internationalization.md +19 -19
  238. package/docs/content/locales/zh-TW/key-concepts.md +68 -68
  239. package/docs/content/locales/zh-TW/local-file-mode.md +50 -50
  240. package/docs/content/locales/zh-TW/mcp-apps.md +38 -38
  241. package/docs/content/locales/zh-TW/mcp-clients.md +67 -67
  242. package/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
  243. package/docs/content/locales/zh-TW/messaging.md +99 -99
  244. package/docs/content/locales/zh-TW/migration-workbench.md +6 -6
  245. package/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
  246. package/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
  247. package/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
  248. package/docs/content/locales/zh-TW/notifications.md +23 -23
  249. package/docs/content/locales/zh-TW/observability.md +49 -49
  250. package/docs/content/locales/zh-TW/observational-memory.md +23 -23
  251. package/docs/content/locales/zh-TW/onboarding.md +40 -40
  252. package/docs/content/locales/zh-TW/plan-plugin.md +37 -37
  253. package/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
  254. package/docs/content/locales/zh-TW/processors.md +17 -17
  255. package/docs/content/locales/zh-TW/progress.md +15 -15
  256. package/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
  257. package/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
  258. package/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
  259. package/docs/content/locales/zh-TW/routing.md +9 -9
  260. package/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
  261. package/docs/content/locales/zh-TW/security.md +49 -49
  262. package/docs/content/locales/zh-TW/server.md +47 -47
  263. package/docs/content/locales/zh-TW/sharing.md +22 -22
  264. package/docs/content/locales/zh-TW/skills-guide.md +46 -46
  265. package/docs/content/locales/zh-TW/template-analytics.md +40 -40
  266. package/docs/content/locales/zh-TW/template-assets.md +69 -69
  267. package/docs/content/locales/zh-TW/template-brain.md +81 -81
  268. package/docs/content/locales/zh-TW/template-calendar.md +40 -40
  269. package/docs/content/locales/zh-TW/template-chat.md +27 -27
  270. package/docs/content/locales/zh-TW/template-clips.md +85 -85
  271. package/docs/content/locales/zh-TW/template-content.md +65 -66
  272. package/docs/content/locales/zh-TW/template-design.md +29 -29
  273. package/docs/content/locales/zh-TW/template-dispatch.md +51 -51
  274. package/docs/content/locales/zh-TW/template-forms.md +25 -25
  275. package/docs/content/locales/zh-TW/template-mail.md +71 -71
  276. package/docs/content/locales/zh-TW/template-plan.md +92 -92
  277. package/docs/content/locales/zh-TW/template-slides.md +52 -52
  278. package/docs/content/locales/zh-TW/template-videos.md +30 -30
  279. package/docs/content/locales/zh-TW/tracking.md +29 -29
  280. package/docs/content/locales/zh-TW/using-your-agent.md +18 -18
  281. package/docs/content/locales/zh-TW/voice-input.md +19 -19
  282. package/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
  283. package/docs/content/locales/zh-TW/workspace-connections.md +41 -41
  284. package/docs/content/locales/zh-TW/workspace-management.md +27 -27
  285. package/docs/content/locales/zh-TW/workspace.md +58 -58
  286. package/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
  287. package/docs/content/template-clips.md +48 -2
  288. package/package.json +2 -1
  289. package/src/templates/default/app/i18n/zh-TW.ts +44 -44
@@ -0,0 +1,161 @@
1
+ export const BUG_REPORT_QUERY_FLAG = "bugReport";
2
+
3
+ export const BUG_REPORT_SEVERITIES = [
4
+ "low",
5
+ "normal",
6
+ "high",
7
+ "urgent",
8
+ ] as const;
9
+
10
+ export type BugReportSeverity = (typeof BUG_REPORT_SEVERITIES)[number];
11
+
12
+ export interface BugReportContext {
13
+ projectId: string | null;
14
+ title: string | null;
15
+ description: string | null;
16
+ severity: BugReportSeverity;
17
+ sourceUrl: string | null;
18
+ pageTitle: string | null;
19
+ appVersion: string | null;
20
+ environment: string | null;
21
+ reporterEmail: string | null;
22
+ reporterName: string | null;
23
+ reporterId: string | null;
24
+ metadata: Record<string, unknown> | null;
25
+ returnUrl: string | null;
26
+ }
27
+
28
+ const PARAMS = {
29
+ projectId: "projectId",
30
+ title: "title",
31
+ description: "description",
32
+ severity: "severity",
33
+ sourceUrl: "sourceUrl",
34
+ pageTitle: "pageTitle",
35
+ appVersion: "appVersion",
36
+ environment: "environment",
37
+ reporterEmail: "reporterEmail",
38
+ reporterName: "reporterName",
39
+ reporterId: "reporterId",
40
+ metadata: "metadata",
41
+ returnUrl: "returnUrl",
42
+ } as const;
43
+
44
+ function prefixed(key: string): string {
45
+ return `bugReport${key[0]?.toUpperCase() ?? ""}${key.slice(1)}`;
46
+ }
47
+
48
+ function clean(value: string | null, max = 1000): string | null {
49
+ const trimmed = value?.trim() ?? "";
50
+ if (!trimmed) return null;
51
+ return trimmed.length > max ? trimmed.slice(0, max) : trimmed;
52
+ }
53
+
54
+ function param(
55
+ params: URLSearchParams,
56
+ key: keyof typeof PARAMS,
57
+ allowLoose: boolean,
58
+ ): string | null {
59
+ const raw = params.get(prefixed(PARAMS[key]));
60
+ if (raw !== null) return raw;
61
+ return allowLoose ? params.get(PARAMS[key]) : null;
62
+ }
63
+
64
+ function parseSeverity(value: string | null): BugReportSeverity {
65
+ return BUG_REPORT_SEVERITIES.includes(value as BugReportSeverity)
66
+ ? (value as BugReportSeverity)
67
+ : "normal";
68
+ }
69
+
70
+ function parseMetadata(raw: string | null): Record<string, unknown> | null {
71
+ const value = clean(raw, 12_000);
72
+ if (!value) return null;
73
+ try {
74
+ const parsed = JSON.parse(value);
75
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
76
+ return parsed as Record<string, unknown>;
77
+ }
78
+ } catch {
79
+ return { note: value };
80
+ }
81
+ return null;
82
+ }
83
+
84
+ export function hasBugReportQuery(
85
+ params: URLSearchParams,
86
+ options: { allowLoose?: boolean } = {},
87
+ ): boolean {
88
+ if (params.get(BUG_REPORT_QUERY_FLAG) === "1") return true;
89
+ if (params.get("intent") === "bug-report") return true;
90
+ for (const key of params.keys()) {
91
+ if (key.startsWith("bugReport") && key !== BUG_REPORT_QUERY_FLAG) {
92
+ return true;
93
+ }
94
+ if (
95
+ options.allowLoose &&
96
+ Object.values(PARAMS).includes(
97
+ key as (typeof PARAMS)[keyof typeof PARAMS],
98
+ )
99
+ ) {
100
+ return true;
101
+ }
102
+ }
103
+ return false;
104
+ }
105
+
106
+ export function parseBugReportContext(
107
+ params: URLSearchParams,
108
+ options: { allowLoose?: boolean } = {},
109
+ ): BugReportContext | null {
110
+ const allowLoose = options.allowLoose ?? false;
111
+ if (!hasBugReportQuery(params, { allowLoose })) return null;
112
+
113
+ return {
114
+ projectId: clean(param(params, "projectId", allowLoose), 120),
115
+ title: clean(param(params, "title", allowLoose), 500),
116
+ description: clean(param(params, "description", allowLoose), 5000),
117
+ severity: parseSeverity(param(params, "severity", allowLoose)),
118
+ sourceUrl: clean(param(params, "sourceUrl", allowLoose), 8000),
119
+ pageTitle: clean(param(params, "pageTitle", allowLoose), 500),
120
+ appVersion: clean(param(params, "appVersion", allowLoose), 120),
121
+ environment: clean(param(params, "environment", allowLoose), 120),
122
+ reporterEmail: clean(param(params, "reporterEmail", allowLoose), 320),
123
+ reporterName: clean(param(params, "reporterName", allowLoose), 200),
124
+ reporterId: clean(param(params, "reporterId", allowLoose), 200),
125
+ metadata: parseMetadata(param(params, "metadata", allowLoose)),
126
+ returnUrl: clean(param(params, "returnUrl", allowLoose), 8000),
127
+ };
128
+ }
129
+
130
+ export function bugReportContextToSearchParams(
131
+ context: BugReportContext,
132
+ ): URLSearchParams {
133
+ const params = new URLSearchParams();
134
+ params.set(BUG_REPORT_QUERY_FLAG, "1");
135
+ const append = (key: keyof typeof PARAMS, value: string | null) => {
136
+ if (value) params.set(prefixed(PARAMS[key]), value);
137
+ };
138
+
139
+ append("projectId", context.projectId);
140
+ append("title", context.title);
141
+ append("description", context.description);
142
+ append("severity", context.severity);
143
+ append("sourceUrl", context.sourceUrl);
144
+ append("pageTitle", context.pageTitle);
145
+ append("appVersion", context.appVersion);
146
+ append("environment", context.environment);
147
+ append("reporterEmail", context.reporterEmail);
148
+ append("reporterName", context.reporterName);
149
+ append("reporterId", context.reporterId);
150
+ append("returnUrl", context.returnUrl);
151
+ if (context.metadata) {
152
+ params.set(prefixed(PARAMS.metadata), JSON.stringify(context.metadata));
153
+ }
154
+ return params;
155
+ }
156
+
157
+ export function bugReportTitle(context: BugReportContext | null): string {
158
+ return (
159
+ context?.title || context?.pageTitle || context?.sourceUrl || "Bug report"
160
+ );
161
+ }
@@ -110,7 +110,7 @@ export function Layout({ children }: LayoutProps) {
110
110
 
111
111
  return (
112
112
  <HeaderActionsProvider>
113
- <div className="flex h-screen overflow-hidden bg-background">
113
+ <div className="agent-layout-shell flex h-screen overflow-hidden bg-background">
114
114
  {isMobile ? (
115
115
  <>
116
116
  <Sheet open={mobileSidebarOpen} onOpenChange={setMobileSidebarOpen}>
@@ -139,13 +139,15 @@ export function Layout({ children }: LayoutProps) {
139
139
  )}
140
140
  </>
141
141
  ) : (
142
- <DocumentSidebar
143
- activeDocumentId={activeDocumentId}
144
- collapsed={sidebarCollapsed}
145
- onToggleCollapsed={() => setSidebarCollapsed((c) => !c)}
146
- width={sidebarWidth}
147
- onResize={handleSidebarResize}
148
- />
142
+ <div className="agent-layout-left-drawer flex shrink-0">
143
+ <DocumentSidebar
144
+ activeDocumentId={activeDocumentId}
145
+ collapsed={sidebarCollapsed}
146
+ onToggleCollapsed={() => setSidebarCollapsed((c) => !c)}
147
+ width={sidebarWidth}
148
+ onResize={handleSidebarResize}
149
+ />
150
+ </div>
149
151
  )}
150
152
  <AgentSidebar
151
153
  position="right"
@@ -763,7 +763,7 @@ export function DocumentSidebar({
763
763
  return (
764
764
  <div
765
765
  className={cn(
766
- "relative flex h-full min-h-0 flex-col border-e border-border bg-muted/30",
766
+ "agent-layout-left-drawer relative flex h-full min-h-0 flex-col border-e border-border bg-muted/30",
767
767
  width === undefined && "w-full",
768
768
  )}
769
769
  style={width === undefined ? undefined : { width, flexShrink: 0 }}
@@ -4,9 +4,10 @@ const messages = {
4
4
  commandSearchDocuments: "搜尋檔案",
5
5
  commandAppearance: "外觀",
6
6
  toggleTheme: "切換主題",
7
- metaTitle: "Agent-Native Content - 開源且代理友善的 Obsidian 替代方案",
7
+ metaTitle:
8
+ "Agent-Native Content - 開放原始碼且代理友善的 Obsidian 替代方案",
8
9
  metaDescription:
9
- "開源 MDX 編輯器,適用於本機文件、知識庫和內容系統,具備自訂區塊和代理輔助編輯。",
10
+ "開放原始碼 MDX 編輯器,適用於本機文件、知識庫和內容系統,具備自訂區塊和代理輔助編輯。",
10
11
  },
11
12
  theme: {
12
13
  system: "系統主題",
@@ -76,7 +77,7 @@ const messages = {
76
77
  comment: "評論",
77
78
  pasteLink: "貼上連結...",
78
79
  apply: "應用",
79
- plainText: "純文本",
80
+ plainText: "純文字",
80
81
  searchLanguages: "搜尋語言...",
81
82
  noBlocksFields: "沒有 Blocks 欄位。請從屬性選單新增一個。",
82
83
  noDocumentSelected: "未選取檔案",
@@ -93,7 +94,7 @@ const messages = {
93
94
  enterToSubmit: "輸入提交",
94
95
  failedToCreateDatabase: "建立資料庫失敗",
95
96
  failedToCreatePage: "建立頁面失敗",
96
- generateWithAi: "用人工智能生成",
97
+ generateWithAi: "用人工智慧生成",
97
98
  dropMedia: "拖放媒體",
98
99
  editLink: "編輯連結",
99
100
  emojiAddIcon: "新增圖示",
@@ -142,24 +143,24 @@ const messages = {
142
143
  versionRestored: "版本已還原。",
143
144
  versionSavedAutomatically: "編輯時會自動儲存版本。",
144
145
  media: {
145
- addAltTextDescription: "新增替代文本來描述該圖片。",
146
+ addAltTextDescription: "新增替代文字來描述該圖片。",
146
147
  addAudio: "新增音訊",
147
148
  addImage: "新增圖片",
148
149
  addVideo: "新增影片",
149
- altText: "替代文本",
150
- altTextGenerationFailed: "無法啟動替代文本生成。",
150
+ altText: "替代文字",
151
+ altTextGenerationFailed: "無法啟動替代文字生成。",
151
152
  assets: "資產",
152
153
  assetsImagePicker: "資產圖片選取器",
153
- assetsMissingImageUrl: "資產未返回圖片 URL。",
154
+ assetsMissingImageUrl: "資產未傳回圖片 URL。",
154
155
  audio: "音訊",
155
156
  audioAdded: "新增了音訊",
156
157
  audioDownloadStarted: "音訊下載開始。",
157
158
  audioLinkHint: "適用於網路上的直接音訊連結",
158
159
  audioPreview: "音訊預覽",
159
- audioView: "音訊視圖",
160
+ audioView: "音訊檢視",
160
161
  chooseFromAssets: "從資產中選取",
161
- clickToEditAltText: "點選可檢視和編輯替代文本",
162
- closeAltTextEditor: "關閉替代文本編輯器",
162
+ clickToEditAltText: "點選可檢視和編輯替代文字",
163
+ closeAltTextEditor: "關閉替代文字編輯器",
163
164
  closeAudioPreview: "關閉音訊預覽",
164
165
  closeImagePreview: "關閉圖片預覽",
165
166
  closeVideoPreview: "關閉影片預覽",
@@ -189,8 +190,8 @@ const messages = {
189
190
  expandAudio: "展開音訊",
190
191
  expandImage: "展開圖片",
191
192
  expandVideo: "展開影片",
192
- generateAltText: "生成替代文本",
193
- generatingAltText: "正在生成替代文本...",
193
+ generateAltText: "生成替代文字",
194
+ generatingAltText: "正在生成替代文字...",
194
195
  image: "圖片",
195
196
  imageAdded: "圖片已新增",
196
197
  imageCommentWithAlt: "圖片:{{alt}}",
@@ -227,7 +228,7 @@ const messages = {
227
228
  transcribe: "轉錄",
228
229
  transcribingAudio: "正在轉錄音訊...",
229
230
  transcribingVideo: "正在轉錄影片...",
230
- transcript: "成績單",
231
+ transcript: "逐字稿",
231
232
  transcriptBlockFailed: "無法新增轉錄塊。",
232
233
  transcriptionStarted: "轉錄開始了。",
233
234
  upload: "上傳",
@@ -241,12 +242,12 @@ const messages = {
241
242
  videoLinkHint: "適用於網路上的直接影片連結",
242
243
  videoPreview: "影片預覽",
243
244
  videoView: "影片觀看",
244
- viewAndEditAltText: "檢視和編輯替代文本",
245
+ viewAndEditAltText: "檢視和編輯替代文字",
245
246
  zoomImageIn: "放大圖片",
246
247
  zoomImageOut: "縮小圖片",
247
248
  zoomIn: "放大",
248
249
  zoomOut: "縮小",
249
- generateAltTextPrompt: "為這張圖片生成替代文本,並將其新增到圖片中。",
250
+ generateAltTextPrompt: "為這張圖片生成替代文字,並將其新增到圖片中。",
250
251
  transcribeAudioPrompt: "轉錄這段音訊,並將轉錄內容新增到下方。",
251
252
  transcribeVideoPrompt: "轉錄這段影片,並將轉錄內容新增到下方。",
252
253
  },
@@ -321,7 +322,7 @@ const messages = {
321
322
  removeFileOrMedia: "刪除 {{name}}",
322
323
  removeOption: "刪除選項 {{name}}",
323
324
  removePerson: "刪除 {{name}}",
324
- renameOption: "重命名選項 {{name}}",
325
+ renameOption: "重新命名選項 {{name}}",
325
326
  save: "儲存",
326
327
  searchOrAddPerson: "搜尋或新增人員",
327
328
  searchOrCreateOption: "搜尋或建立選項",
@@ -337,8 +338,8 @@ const messages = {
337
338
  today: "今天",
338
339
  tomorrow: "明天",
339
340
  type: "型別",
340
- uncheck: "取消選中",
341
- unchecked: "未選中",
341
+ uncheck: "取消選取",
342
+ unchecked: "未選取",
342
343
  upload: "上傳",
343
344
  visibility: "能見度",
344
345
  },
@@ -347,8 +348,8 @@ const messages = {
347
348
  audioDescription: "上傳或嵌入音訊",
348
349
  basicBlocks: "基本塊",
349
350
  blocks: "積木",
350
- bulletedList: "專案符號列表",
351
- bulletedListDescription: "無序列表",
351
+ bulletedList: "專案符號清單",
352
+ bulletedListDescription: "無序清單",
352
353
  callout: "標注",
353
354
  calloutDescription: "突出顯示的資訊塊",
354
355
  codeBlock: "程式碼塊",
@@ -359,7 +360,7 @@ const messages = {
359
360
  divider: "分頻器",
360
361
  dividerDescription: "水平尺",
361
362
  generate: "生成",
362
- generateDescription: "利用 AI 生成內容",
363
+ generateDescription: "利用 AI 產生內容",
363
364
  heading1Description: "大標題",
364
365
  heading2Description: "中標題",
365
366
  heading3Description: "小標題",
@@ -368,8 +369,8 @@ const messages = {
368
369
  imageDescription: "上傳或嵌入圖片",
369
370
  localComponents: "本機元件",
370
371
  media: "媒體",
371
- numberedList: "編號列表",
372
- numberedListDescription: "有序列表",
372
+ numberedList: "編號清單",
373
+ numberedListDescription: "有序清單",
373
374
  page: "頁面",
374
375
  pageDescription: "建立子頁面",
375
376
  pages: "頁面數",
@@ -378,7 +379,7 @@ const messages = {
378
379
  table: "表",
379
380
  tableDescription: "新增表格",
380
381
  text: "文字",
381
- textDescription: "純文本塊",
382
+ textDescription: "純文字塊",
382
383
  todoList: "待辦事項清單",
383
384
  todoListDescription: "檢查清單專案",
384
385
  toggle: "切換",
@@ -444,7 +445,7 @@ const messages = {
444
445
  notionPageUrlOrId: "Notion 頁面 URL 或頁面 ID",
445
446
  open: "開啟",
446
447
  openInNotion: "在概念中開啟",
447
- orgCanFindAndView: "您組織中的任何人都可以查找和檢視",
448
+ orgCanFindAndView: "您組織中的任何人都可以尋找和檢視",
448
449
  orgLinkCanView: "您組織中知道該連結的任何人都可以檢視",
449
450
  pageBreadcrumb: "頁面面包屑",
450
451
  printDialogOpened: "列印對話框開啟",
@@ -462,14 +463,14 @@ const messages = {
462
463
  revealedLocalFile: "顯示本機檔案",
463
464
  searchNotionPages: "搜尋概念頁面...",
464
465
  setUpNotion: "樹立觀念",
465
- setUpNotionFirst: "首先在側邊欄中設定 Notion - 點選 Notion 圖標。",
466
+ setUpNotionFirst: "首先在側邊欄中設定 Notion - 點選 Notion 圖示。",
466
467
  setUpNotionToSync: "設定 Notion 來同步此檔案。",
467
468
  pasteNotionPageUrlOrId: "貼上 Notion 頁面 URL 或頁面 ID。",
468
469
  pasteNotionPageUrlOrIdToLink:
469
470
  "貼上 Notion 頁面 URL 或頁面 ID 以連結此檔案。",
470
471
  share: "分享",
471
472
  shareableCopyReady: "可共用副本已準備就緒",
472
- shareableCopyReadyDescription: "該副本存儲在資料庫中以供共用。",
473
+ shareableCopyReadyDescription: "該副本儲存在資料庫中以供共用。",
473
474
  shareableCopyWasNotCreated: "未建立可共用副本。",
474
475
  unlink: "取消連結",
475
476
  disconnect: "斷開連線",
@@ -487,10 +488,10 @@ const messages = {
487
488
  askAi: "詢問 AI",
488
489
  resolve: "解決",
489
490
  resolved: "已解決({{count}})",
490
- reply: "回複...",
491
+ reply: "回覆...",
491
492
  reopen: "重新開啟",
492
493
  agentRegardingText: "關於這段文字:“{{text}}”",
493
- agentThreadHeader: "評論線程:",
494
+ agentThreadHeader: "評論對話串:",
494
495
  agentHelp: "請幫忙處理這個。",
495
496
  },
496
497
  publicDocument: {
@@ -503,7 +504,7 @@ const messages = {
503
504
  database: {
504
505
  addAnotherSource: "新增另一個來源",
505
506
  agentNativeApps: "Agent-Native 應用",
506
- addDatabaseView: "新增資料庫視圖",
507
+ addDatabaseView: "新增資料庫檢視",
507
508
  addProperty: "新增屬性",
508
509
  back: "返回",
509
510
  builderSpace: "Builder 空間",
@@ -514,17 +515,17 @@ const messages = {
514
515
  databaseRowsAndLocalPropertiesWereKeptIntact: "資料庫行和本機屬性已保留。",
515
516
  failedToDeleteRow: "刪除行失敗",
516
517
  failedToDeleteSelectedRows: "刪除所選行失敗",
517
- failedToDuplicateEverySelectedRow: "未能複製所有選中行",
518
+ failedToDuplicateEverySelectedRow: "未能複製所有選取行",
518
519
  failedToDuplicateRow: "複製行失敗",
519
520
  failedToMoveCard: "行動卡片失敗",
520
521
  failedToMoveRow: "行動行失敗",
521
- failedToSavePageIcon: "儲存頁面圖標失敗",
522
+ failedToSavePageIcon: "儲存頁面圖示失敗",
522
523
  failedToSavePagePreview: "儲存頁面預覽失敗",
523
524
  failedToUpdateCheckbox: "更新核取方塊失敗",
524
- failedToUpdateEverySelectedRow: "未能更新所有選中行",
525
- filter: "筛選",
525
+ failedToUpdateEverySelectedRow: "未能更新所有選取行",
526
+ filter: "篩選",
526
527
  group: "分組",
527
- click: "點擊",
528
+ click: "點選",
528
529
  column: "列",
529
530
  columnOptions: "列選項",
530
531
  clearColumn: "清空列",
@@ -543,16 +544,16 @@ const messages = {
543
544
  nameColumnMenu: "名稱列選單",
544
545
  newBoardGroupName: "新看板分組名稱",
545
546
  newDatabaseGalleryCardTitle: "新資料庫畫廊卡片標題",
546
- newDatabaseListItemTitle: "新資料庫列表項標題",
547
+ newDatabaseListItemTitle: "新資料庫清單項標題",
547
548
  newDatabaseRow: "新資料庫行",
548
549
  newGroup: "新分組",
549
550
  newPage: "新頁面",
550
551
  newProperty: "新屬性",
551
- newViewName: "新視圖名稱",
552
+ newViewName: "新檢視名稱",
552
553
  nextDatabasePage: "下一頁面資料庫頁面",
553
554
  nextMonth: "下個月",
554
555
  nextTimelineRange: "下一個時間線範圍",
555
- noRowsMatchThisView: "沒有行匹配此視圖",
556
+ noRowsMatchThisView: "沒有行匹配此檢視",
556
557
  oneFileOrMediaLinkPerLine: "每行一個檔案或媒體連結",
557
558
  previewPageTitle: "預覽頁面標題",
558
559
  previousDatabasePage: "上一頁面資料庫頁面",
@@ -574,8 +575,8 @@ const messages = {
574
575
  sourceWasNotDisconnected: "來源未斷開連線",
575
576
  sources: "來源",
576
577
  table: "表格",
577
- tableColumnHandle: "點擊或拖動表格列手柄",
578
- tableRowHandle: "點擊或拖動表格行手柄",
578
+ tableColumnHandle: "點選或拖動表格列手柄",
579
+ tableRowHandle: "點選或拖動表格行手柄",
579
580
  toAddAColumn: "以新增列。",
580
581
  toAddARow: "以新增行。",
581
582
  toAddOrRemoveColumns: "以新增或移除列。",
@@ -583,13 +584,13 @@ const messages = {
583
584
  tryAgain: "請重試。",
584
585
  untitled: "無標題",
585
586
  value: "值",
586
- viewName: "視圖名稱",
587
+ viewName: "檢視名稱",
587
588
  wrapAllContent: "換行顯示所有內容",
588
- addADatePropertyToUseCalendarView: "新增日期屬性以使用行事曆視圖。",
589
- addADatePropertyToUseTimelineView: "新增日期屬性以使用時間線視圖。",
589
+ addADatePropertyToUseCalendarView: "新增日期屬性以使用行事曆檢視。",
590
+ addADatePropertyToUseTimelineView: "新增日期屬性以使用時間線檢視。",
590
591
  addAStatusSelectMultiSelectOrCheckbox2:
591
592
  "新增狀態、選取、多選或核取方塊屬性來為此看板分組。",
592
- addFilter: "新增筛選器",
593
+ addFilter: "新增篩選器",
593
594
  addSort: "新增排序",
594
595
  allModels: "所有模型",
595
596
  alreadyAttached: "已附加",
@@ -606,8 +607,8 @@ const messages = {
606
607
  checkingBuilderConnection: "正在檢查 Builder 連線",
607
608
  clear: "清除",
608
609
  clearAll: "全部清除",
609
- clearFilters: "清除筛選器",
610
- clearSearchAndFilters: "清除搜尋和筛選器",
610
+ clearFilters: "清除篩選器",
611
+ clearSearchAndFilters: "清除搜尋和篩選器",
611
612
  clearSort: "清除排序",
612
613
  clearSorts: "清除排序",
613
614
  clearValue: "清除值",
@@ -624,11 +625,11 @@ const messages = {
624
625
  deleteRow: "刪除行",
625
626
  deleteRow2: "刪除行?",
626
627
  deleteSelectedRows: "刪除所選行?",
627
- deleteView: "刪除視圖",
628
- disconnectSource: "斷開來源",
628
+ deleteView: "刪除檢視",
629
+ disconnectSource: "斷開放原始碼",
629
630
  duplicate: "Duplicate",
630
631
  duplicateRow: "複製行",
631
- duplicateView: "複製視圖",
632
+ duplicateView: "複製檢視",
632
633
  empty: "空",
633
634
  endDate: "結束日期",
634
635
  enterAValidNumber: "請輸入有效數字。",
@@ -636,27 +637,27 @@ const messages = {
636
637
  existingSourceNormalize: "現有來源 · 規範化",
637
638
  expandAll: "全部展開",
638
639
  expandAllGroups: "展開所有分組",
639
- filterRowsWhere: "筛選滿足條件的行",
640
+ filterRowsWhere: "篩選滿足條件的行",
640
641
  gallery: "Gallery",
641
642
  groupBy: "分組依據",
642
643
  groupName: "分組名稱",
643
644
  hideAll: "全部隱藏",
644
- hideInView: "在視圖中隱藏",
645
+ hideInView: "在檢視中隱藏",
645
646
  integrations: "Integrations",
646
647
  list: "List",
647
- liveWritesOn: "實時寫入已開啟",
648
+ liveWritesOn: "即時寫入已開啟",
648
649
  loadingBoard: "正在載入看板",
649
650
  loadingBuilderModels: "正在載入 Builder 模型",
650
651
  loadingCalendar: "正在載入行事曆",
651
652
  loadingDatabase: "正在載入資料庫",
652
653
  loadingGallery: "正在載入畫廊",
653
- loadingList: "正在載入列表",
654
+ loadingList: "正在載入清單",
654
655
  loadingTables: "正在載入表格",
655
656
  loadingTimeline: "正在載入時間線",
656
657
  localTables: "本機表格",
657
658
  matchFormula: "匹配公式",
658
659
  newSourceNormalize: "新來源 · 規範化",
659
- newView: "新視圖",
660
+ newView: "新檢視",
660
661
  noBuilderModelsWereFoundInThisSpace: "此空間中未找到 Builder 模型。",
661
662
  noDatabasePageSelected: "未選取資料庫頁面。",
662
663
  noDate: "無日期",
@@ -676,9 +677,9 @@ const messages = {
676
677
  properties: "Properties",
677
678
  readOnly: "唯讀",
678
679
  removeThisSource: "移除此來源",
679
- renameView: "重命名視圖",
680
+ renameView: "重新命名檢視",
680
681
  retry: "Retry",
681
- reviewBeforeTheyReachBuilder: "在發送到 Builder 前審核。",
682
+ reviewBeforeTheyReachBuilder: "在傳送到 Builder 前審核。",
682
683
  reviewDiff: "審核差異",
683
684
  sampleMatches: "範例匹配",
684
685
  showAll: "顯示全部",
@@ -700,12 +701,12 @@ const messages = {
700
701
  countValues: "值計數",
701
702
  dateRange: "日期範圍",
702
703
  earliest: "Earliest",
703
- filterChecked: "筛選已選中",
704
- filterEmpty: "筛選為空",
705
- filterNotEmpty: "筛選非空",
706
- filterUnchecked: "筛選未選中",
704
+ filterChecked: "篩選已選取",
705
+ filterEmpty: "篩選為空",
706
+ filterNotEmpty: "篩選非空",
707
+ filterUnchecked: "篩選未選取",
707
708
  keepTheDatabaseRowsAndLocalPropertiesButRemoveSource:
708
- "保留資料庫行和本機屬性,但移除來源對應、行標識和待處理來源更改。",
709
+ "保留資料庫行和本機屬性,但移除來源對應、行識別和待處理來源更改。",
709
710
  latest: "Latest",
710
711
  max: "Max",
711
712
  median: "Median",
@@ -843,7 +844,7 @@ const messages = {
843
844
  completeStepsAboveFirst: "請先完成上面的步驟",
844
845
  connectWorkspace: "連線工作區",
845
846
  connected: "已連線",
846
- connectedViaOAuth: "已通過 OAuth 連線",
847
+ connectedViaOAuth: "已透過 OAuth 連線",
847
848
  copied: "已複製!",
848
849
  copy: "複製",
849
850
  disconnectWorkspace: "斷開工作區連線",
@@ -865,13 +866,13 @@ const messages = {
865
866
  notionConnectedTooltip: "Notion:{{name}}",
866
867
  notionConnectWorkspace: "連線你的工作區",
867
868
  notionConnectWorkspaceDescription:
868
- "點擊下面的按鈕授權存取你的 Notion 工作區。你將被重新導向到 Notion 以授予權限。",
869
+ "點選下面的按鈕授權存取你的 Notion 工作區。你將被重新導向到 Notion 以授予權限。",
869
870
  notionCopyOAuthCredentials: "複製 OAuth 憑證",
870
871
  notionCopyOAuthCredentialsDescription:
871
872
  '在 "OAuth Domain & URIs" 下複製 OAuth client ID 和 client secret。然後上傳 JSON 檔案或貼上到下方。',
872
873
  notionCreateIntegration: "建立 Notion 整合",
873
874
  notionCreateIntegrationDescription:
874
- '前往 Notion 開發者門戶,點擊 "New integration",為其命名(例如 "My Docs Sync"),並選取你的工作區。',
875
+ '前往 Notion 開發者門戶,點選 "New integration",為其命名(例如 "My Docs Sync"),並選取你的工作區。',
875
876
  notionCredentialsNotFound: "在 JSON 中找不到 client_id 和 client_secret",
876
877
  notionCredentialsSavedReloading: "憑證已儲存。正在重新載入...",
877
878
  notionCredentialsSaveFailed: "儲存憑證失敗",
@@ -894,7 +895,7 @@ const messages = {
894
895
  results: "結果",
895
896
  search: "搜尋",
896
897
  searchPages: "搜尋頁面...",
897
- refreshConnection: "刷新連線",
898
+ refreshConnection: "重新整理連線",
898
899
  saving: "正在儲存...",
899
900
  sharedCopies: "共用副本",
900
901
  synced: "已同步",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-27
4
+ ---
5
+
6
+ Traditional Chinese copy now uses Taiwan terminology and clearer technical wording.
@@ -111,7 +111,7 @@ export function Layout({ children }: LayoutProps) {
111
111
  scope={designScope}
112
112
  browserTabId={getBrowserTabId()}
113
113
  >
114
- <div className="flex h-screen w-full overflow-hidden bg-background text-foreground">
114
+ <div className="agent-layout-shell flex h-screen w-full overflow-hidden bg-background text-foreground">
115
115
  {mobileSidebarOpen && (
116
116
  <div
117
117
  className="fixed inset-0 z-40 bg-black/50 md:hidden"
@@ -120,7 +120,7 @@ export function Layout({ children }: LayoutProps) {
120
120
  )}
121
121
  <div
122
122
  className={cn(
123
- "fixed inset-y-0 start-0 z-50 md:static md:z-auto",
123
+ "agent-layout-left-drawer fixed inset-y-0 start-0 z-50 md:static md:z-auto",
124
124
  mobileSidebarOpen
125
125
  ? "translate-x-0"
126
126
  : "-translate-x-full rtl:translate-x-full md:translate-x-0 md:rtl:translate-x-0",
@@ -128,7 +128,7 @@ export function Layout({ children }: LayoutProps) {
128
128
  >
129
129
  <Sidebar />
130
130
  </div>
131
- <div className="flex h-full flex-1 flex-col overflow-hidden">
131
+ <div className="agent-layout-main-surface flex h-full flex-1 flex-col overflow-hidden">
132
132
  {/* Mobile-only top bar with hamburger */}
133
133
  {showMobileTopBar && (
134
134
  <div className="flex h-12 shrink-0 items-center border-b border-border bg-sidebar px-4 md:hidden">