@agent-native/core 0.79.12 → 0.79.15

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 (285) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +19 -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 +27 -3
  89. package/corpus/core/src/deploy/build.ts +417 -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 +93 -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 +14 -4
  181. package/dist/client/AgentPanel.js.map +1 -1
  182. package/dist/collab/routes.d.ts +1 -1
  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 +361 -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/resources/handlers.d.ts +2 -2
  191. package/dist/server/edge.d.ts +11 -0
  192. package/dist/server/edge.d.ts.map +1 -0
  193. package/dist/server/edge.js +11 -0
  194. package/dist/server/edge.js.map +1 -0
  195. package/dist/styles/agent-native.css +93 -0
  196. package/dist/templates/default/app/i18n/zh-TW.ts +44 -44
  197. package/dist/vite/client.d.ts.map +1 -1
  198. package/dist/vite/client.js +1 -0
  199. package/dist/vite/client.js.map +1 -1
  200. package/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
  201. package/docs/content/locales/zh-TW/actions.md +82 -82
  202. package/docs/content/locales/zh-TW/agent-mentions.md +22 -22
  203. package/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
  204. package/docs/content/locales/zh-TW/agent-teams.md +29 -29
  205. package/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
  206. package/docs/content/locales/zh-TW/audit-log.md +16 -16
  207. package/docs/content/locales/zh-TW/authentication.md +32 -32
  208. package/docs/content/locales/zh-TW/automations.md +32 -32
  209. package/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
  210. package/docs/content/locales/zh-TW/cli-adapters.md +17 -17
  211. package/docs/content/locales/zh-TW/client.md +62 -62
  212. package/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
  213. package/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
  214. package/docs/content/locales/zh-TW/components.md +51 -51
  215. package/docs/content/locales/zh-TW/context-awareness.md +66 -66
  216. package/docs/content/locales/zh-TW/creating-templates.md +39 -39
  217. package/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
  218. package/docs/content/locales/zh-TW/database.md +21 -21
  219. package/docs/content/locales/zh-TW/deployment.md +37 -37
  220. package/docs/content/locales/zh-TW/dispatch.md +43 -43
  221. package/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
  222. package/docs/content/locales/zh-TW/durable-resume.md +18 -18
  223. package/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
  224. package/docs/content/locales/zh-TW/evals.md +16 -16
  225. package/docs/content/locales/zh-TW/extensions.md +81 -81
  226. package/docs/content/locales/zh-TW/external-agents.md +146 -146
  227. package/docs/content/locales/zh-TW/faq.md +43 -43
  228. package/docs/content/locales/zh-TW/file-uploads.md +11 -11
  229. package/docs/content/locales/zh-TW/frames.md +33 -33
  230. package/docs/content/locales/zh-TW/getting-started.md +28 -28
  231. package/docs/content/locales/zh-TW/harness-agents.md +78 -78
  232. package/docs/content/locales/zh-TW/human-approval.md +27 -27
  233. package/docs/content/locales/zh-TW/internationalization.md +19 -19
  234. package/docs/content/locales/zh-TW/key-concepts.md +68 -68
  235. package/docs/content/locales/zh-TW/local-file-mode.md +50 -50
  236. package/docs/content/locales/zh-TW/mcp-apps.md +38 -38
  237. package/docs/content/locales/zh-TW/mcp-clients.md +67 -67
  238. package/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
  239. package/docs/content/locales/zh-TW/messaging.md +99 -99
  240. package/docs/content/locales/zh-TW/migration-workbench.md +6 -6
  241. package/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
  242. package/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
  243. package/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
  244. package/docs/content/locales/zh-TW/notifications.md +23 -23
  245. package/docs/content/locales/zh-TW/observability.md +49 -49
  246. package/docs/content/locales/zh-TW/observational-memory.md +23 -23
  247. package/docs/content/locales/zh-TW/onboarding.md +40 -40
  248. package/docs/content/locales/zh-TW/plan-plugin.md +37 -37
  249. package/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
  250. package/docs/content/locales/zh-TW/processors.md +17 -17
  251. package/docs/content/locales/zh-TW/progress.md +15 -15
  252. package/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
  253. package/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
  254. package/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
  255. package/docs/content/locales/zh-TW/routing.md +9 -9
  256. package/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
  257. package/docs/content/locales/zh-TW/security.md +49 -49
  258. package/docs/content/locales/zh-TW/server.md +47 -47
  259. package/docs/content/locales/zh-TW/sharing.md +22 -22
  260. package/docs/content/locales/zh-TW/skills-guide.md +46 -46
  261. package/docs/content/locales/zh-TW/template-analytics.md +40 -40
  262. package/docs/content/locales/zh-TW/template-assets.md +69 -69
  263. package/docs/content/locales/zh-TW/template-brain.md +81 -81
  264. package/docs/content/locales/zh-TW/template-calendar.md +40 -40
  265. package/docs/content/locales/zh-TW/template-chat.md +27 -27
  266. package/docs/content/locales/zh-TW/template-clips.md +85 -85
  267. package/docs/content/locales/zh-TW/template-content.md +65 -66
  268. package/docs/content/locales/zh-TW/template-design.md +29 -29
  269. package/docs/content/locales/zh-TW/template-dispatch.md +51 -51
  270. package/docs/content/locales/zh-TW/template-forms.md +25 -25
  271. package/docs/content/locales/zh-TW/template-mail.md +71 -71
  272. package/docs/content/locales/zh-TW/template-plan.md +92 -92
  273. package/docs/content/locales/zh-TW/template-slides.md +52 -52
  274. package/docs/content/locales/zh-TW/template-videos.md +30 -30
  275. package/docs/content/locales/zh-TW/tracking.md +29 -29
  276. package/docs/content/locales/zh-TW/using-your-agent.md +18 -18
  277. package/docs/content/locales/zh-TW/voice-input.md +19 -19
  278. package/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
  279. package/docs/content/locales/zh-TW/workspace-connections.md +41 -41
  280. package/docs/content/locales/zh-TW/workspace-management.md +27 -27
  281. package/docs/content/locales/zh-TW/workspace.md +58 -58
  282. package/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
  283. package/docs/content/template-clips.md +48 -2
  284. package/package.json +2 -1
  285. package/src/templates/default/app/i18n/zh-TW.ts +44 -44
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Attach product bug-report metadata to a recording.
3
+ *
4
+ * The recording itself remains the shareable/access-controlled resource. This
5
+ * action stores only redacted context that helps support and agents reproduce
6
+ * the issue alongside the captured video, transcript, and browser diagnostics.
7
+ */
8
+
9
+ import { defineAction } from "@agent-native/core";
10
+ import { writeAppState } from "@agent-native/core/application-state";
11
+ import { assertAccess } from "@agent-native/core/sharing";
12
+ import { eq } from "drizzle-orm";
13
+ import { z } from "zod";
14
+
15
+ import { getDb, schema } from "../server/db/index.js";
16
+ import { redactBrowserDiagnosticString } from "../shared/browser-diagnostics.js";
17
+ import { BUG_REPORT_SEVERITIES } from "../shared/bug-report.js";
18
+
19
+ const REDACTION_VERSION = 1;
20
+ const MAX_METADATA_JSON_LENGTH = 12_000;
21
+
22
+ function truncate(value: string, maxLength: number): string {
23
+ return value.length > maxLength ? `${value.slice(0, maxLength)}...` : value;
24
+ }
25
+
26
+ function redactString(value: string, maxLength: number): string {
27
+ return truncate(
28
+ redactBrowserDiagnosticString(value, { redactQueryValues: true }),
29
+ maxLength,
30
+ );
31
+ }
32
+
33
+ function sanitizeOptional(
34
+ value: string | null | undefined,
35
+ maxLength: number,
36
+ ): string | null {
37
+ const trimmed = value?.trim() ?? "";
38
+ if (!trimmed) return null;
39
+ return redactString(trimmed, maxLength);
40
+ }
41
+
42
+ function sanitizeUrl(value: string | null | undefined): string | null {
43
+ const redacted = sanitizeOptional(value, 8_000);
44
+ if (!redacted) return null;
45
+ try {
46
+ const parsed = new URL(redacted);
47
+ parsed.username = "";
48
+ parsed.password = "";
49
+ parsed.hash = "";
50
+ for (const key of Array.from(parsed.searchParams.keys())) {
51
+ parsed.searchParams.set(key, "<redacted>");
52
+ }
53
+ return truncate(parsed.toString(), 1_000);
54
+ } catch {
55
+ return truncate(redacted, 1_000);
56
+ }
57
+ }
58
+
59
+ function sanitizeMetadata(value: Record<string, unknown> | undefined): string {
60
+ if (!value) return "{}";
61
+ const json = JSON.stringify(value);
62
+ const redacted = redactBrowserDiagnosticString(json, {
63
+ redactQueryValues: true,
64
+ });
65
+ return truncate(redacted, MAX_METADATA_JSON_LENGTH);
66
+ }
67
+
68
+ const metadataSchema = z
69
+ .record(z.string(), z.unknown())
70
+ .optional()
71
+ .describe("Host-app metadata such as route name, feature flags, or build id");
72
+
73
+ export default defineAction({
74
+ description:
75
+ "Attach redacted host-app bug-report metadata to a Clips recording. UI/internal use for the embedded bug-report flow.",
76
+ agentTool: false,
77
+ schema: z.object({
78
+ recordingId: z.string().describe("Recording ID"),
79
+ projectId: z.string().max(120).nullish(),
80
+ title: z.string().max(500).nullish(),
81
+ description: z.string().max(5_000).nullish(),
82
+ severity: z.enum(BUG_REPORT_SEVERITIES).default("normal"),
83
+ sourceUrl: z.string().max(8_000).nullish(),
84
+ pageTitle: z.string().max(500).nullish(),
85
+ appVersion: z.string().max(120).nullish(),
86
+ environment: z.string().max(120).nullish(),
87
+ reporterEmail: z.string().max(320).nullish(),
88
+ reporterName: z.string().max(200).nullish(),
89
+ reporterId: z.string().max(200).nullish(),
90
+ metadata: metadataSchema,
91
+ }),
92
+ run: async (args) => {
93
+ const access = await assertAccess("recording", args.recordingId, "editor");
94
+ const rec = access.resource as any;
95
+ const db = getDb();
96
+ const now = new Date().toISOString();
97
+ const description = sanitizeOptional(args.description, 5_000) ?? "";
98
+ const title = sanitizeOptional(args.title, 500);
99
+ const metadataJson = sanitizeMetadata(args.metadata);
100
+
101
+ const values = {
102
+ recordingId: args.recordingId,
103
+ ownerEmail: rec.ownerEmail,
104
+ organizationId: rec.organizationId,
105
+ orgId: rec.orgId,
106
+ projectId: sanitizeOptional(args.projectId, 120),
107
+ title,
108
+ description,
109
+ severity: args.severity,
110
+ sourceUrl: sanitizeUrl(args.sourceUrl),
111
+ pageTitle: sanitizeOptional(args.pageTitle, 500),
112
+ appVersion: sanitizeOptional(args.appVersion, 120),
113
+ environment: sanitizeOptional(args.environment, 120),
114
+ reporterEmail: sanitizeOptional(args.reporterEmail, 320),
115
+ reporterName: sanitizeOptional(args.reporterName, 200),
116
+ reporterId: sanitizeOptional(args.reporterId, 200),
117
+ metadataJson,
118
+ submittedAt: now,
119
+ updatedAt: now,
120
+ };
121
+
122
+ const [existing] = await db
123
+ .select({ recordingId: schema.recordingBugReports.recordingId })
124
+ .from(schema.recordingBugReports)
125
+ .where(eq(schema.recordingBugReports.recordingId, args.recordingId))
126
+ .limit(1);
127
+
128
+ if (existing) {
129
+ await db
130
+ .update(schema.recordingBugReports)
131
+ .set(values)
132
+ .where(eq(schema.recordingBugReports.recordingId, args.recordingId));
133
+ } else {
134
+ await db.insert(schema.recordingBugReports).values({
135
+ ...values,
136
+ createdAt: now,
137
+ });
138
+ }
139
+
140
+ const recordingPatch: Record<string, string> = { updatedAt: now };
141
+ if (title) {
142
+ recordingPatch.title = title;
143
+ recordingPatch.titleSource = "context";
144
+ }
145
+ if (description) {
146
+ recordingPatch.description = description;
147
+ }
148
+ if (Object.keys(recordingPatch).length > 1) {
149
+ await db
150
+ .update(schema.recordings)
151
+ .set(recordingPatch)
152
+ .where(eq(schema.recordings.id, args.recordingId));
153
+ }
154
+
155
+ await writeAppState("refresh-signal", { ts: Date.now() });
156
+
157
+ return {
158
+ recordingId: args.recordingId,
159
+ status: "saved" as const,
160
+ redactionVersion: REDACTION_VERSION,
161
+ bugReport: {
162
+ projectId: values.projectId,
163
+ title,
164
+ severity: args.severity,
165
+ sourceUrl: values.sourceUrl,
166
+ pageTitle: values.pageTitle,
167
+ appVersion: values.appVersion,
168
+ environment: values.environment,
169
+ submittedAt: now,
170
+ },
171
+ };
172
+ },
173
+ });
@@ -16,7 +16,7 @@ import {
16
16
  readAppStateForCurrentTab,
17
17
  } from "@agent-native/core/application-state";
18
18
  import { getRequestUserEmail } from "@agent-native/core/server/request-context";
19
- import { accessFilter } from "@agent-native/core/sharing";
19
+ import { accessFilter, resolveAccess } from "@agent-native/core/sharing";
20
20
  import { and, asc, desc, eq, gte, isNotNull, isNull, lte } from "drizzle-orm";
21
21
  import { z } from "zod";
22
22
 
@@ -133,6 +133,31 @@ async function fetchBrowserDiagnosticsSummary(recordingId: string) {
133
133
  return parseBrowserDiagnosticsRow(row)?.summary ?? null;
134
134
  }
135
135
 
136
+ async function fetchBugReportSummary(recordingId: string) {
137
+ const access = await resolveAccess("recording", recordingId);
138
+ if (!access || !["owner", "admin", "editor"].includes(String(access.role))) {
139
+ return null;
140
+ }
141
+ const db = getDb();
142
+ const [row] = await db
143
+ .select()
144
+ .from(schema.recordingBugReports)
145
+ .where(eq(schema.recordingBugReports.recordingId, recordingId))
146
+ .limit(1);
147
+ if (!row) return null;
148
+ return {
149
+ projectId: row.projectId,
150
+ title: row.title,
151
+ severity: row.severity,
152
+ sourceUrl: row.sourceUrl,
153
+ pageTitle: row.pageTitle,
154
+ appVersion: row.appVersion,
155
+ environment: row.environment,
156
+ submittedAt: row.submittedAt,
157
+ note: "Bug report metadata only. Call get-recording-player-data for reporter fields and host metadata when you have editor access.",
158
+ };
159
+ }
160
+
136
161
  async function fetchLibrary(folderId?: string) {
137
162
  const db = getDb();
138
163
  const conditions = [
@@ -458,12 +483,17 @@ export default defineAction({
458
483
  if (nav.recordingId) {
459
484
  const recording = await fetchRecording(nav.recordingId);
460
485
  if (recording) {
461
- const [transcript, comments, browserDiagnosticsSummary] =
462
- await Promise.all([
463
- fetchTranscript(nav.recordingId),
464
- fetchComments(nav.recordingId),
465
- fetchBrowserDiagnosticsSummary(nav.recordingId),
466
- ]);
486
+ const [
487
+ transcript,
488
+ comments,
489
+ browserDiagnosticsSummary,
490
+ bugReportSummary,
491
+ ] = await Promise.all([
492
+ fetchTranscript(nav.recordingId),
493
+ fetchComments(nav.recordingId),
494
+ fetchBrowserDiagnosticsSummary(nav.recordingId),
495
+ fetchBugReportSummary(nav.recordingId),
496
+ ]);
467
497
  screen.recording = recording;
468
498
  if (transcript) {
469
499
  // Ambient snapshot only — embed a short fullText snippet and the
@@ -492,6 +522,9 @@ export default defineAction({
492
522
  note: "Summary only. Call get-recording-player-data for full redacted diagnostics when you have editor access.",
493
523
  };
494
524
  }
525
+ if (bugReportSummary) {
526
+ screen.bugReport = bugReportSummary;
527
+ }
495
528
  }
496
529
  }
497
530
  break;
@@ -562,6 +595,24 @@ export default defineAction({
562
595
  if (recordingSetup) screen.recordingSetup = recordingSetup;
563
596
  break;
564
597
  }
598
+ case "bug-report": {
599
+ screen.bugReportLauncher = {
600
+ active: true,
601
+ note: "Embedded launcher for starting a Clips bug-report recording.",
602
+ };
603
+ break;
604
+ }
605
+ case "bug-report-done": {
606
+ if (nav.recordingId) {
607
+ const [recording, bugReportSummary] = await Promise.all([
608
+ fetchRecording(nav.recordingId),
609
+ fetchBugReportSummary(nav.recordingId),
610
+ ]);
611
+ if (recording) screen.recording = recording;
612
+ if (bugReportSummary) screen.bugReport = bugReportSummary;
613
+ }
614
+ break;
615
+ }
565
616
  case "archive":
566
617
  case "trash":
567
618
  case "notifications":
@@ -43,6 +43,10 @@ export interface StorageSetupCardProps {
43
43
  description?: string;
44
44
  connectDescription?: string;
45
45
  connectedDescription?: string;
46
+ /** Analytics source for the Builder connect popup. */
47
+ connectSource?: string;
48
+ /** Analytics flow for the Builder connect popup. */
49
+ connectFlow?: string;
46
50
  }
47
51
 
48
52
  export function StorageSetupCard({
@@ -51,6 +55,8 @@ export function StorageSetupCard({
51
55
  description = "Store recorded videos with Builder.io or S3-compatible storage.",
52
56
  connectDescription = "Builder.io's free tier includes video storage and AI credits.",
53
57
  connectedDescription = "You're all set. Starting recorder...",
58
+ connectSource = "clips_file_upload_storage_setup_card",
59
+ connectFlow = "file_upload",
54
60
  }: StorageSetupCardProps) {
55
61
  const t = useT();
56
62
  const [connecting, setConnecting] = useState(false);
@@ -79,8 +85,8 @@ export function StorageSetupCard({
79
85
  setErr(null);
80
86
 
81
87
  openBuilderConnectPopup({
82
- source: "clips_file_upload_storage_setup_card",
83
- flow: "file_upload",
88
+ source: connectSource,
89
+ flow: connectFlow,
84
90
  });
85
91
 
86
92
  const start = Date.now();
@@ -119,7 +125,7 @@ export function StorageSetupCard({
119
125
  // transient poll error
120
126
  }
121
127
  }, 2000);
122
- }, [onConfigured]);
128
+ }, [onConfigured, connectSource, connectFlow]);
123
129
 
124
130
  return (
125
131
  <div className="mx-auto flex w-full max-w-md flex-col gap-5 rounded-2xl border border-border bg-card p-6 shadow-lg">
@@ -7,6 +7,8 @@ export type ClipsView =
7
7
  | "archive"
8
8
  | "trash"
9
9
  | "record"
10
+ | "bug-report"
11
+ | "bug-report-done"
10
12
  | "recording"
11
13
  | "share"
12
14
  | "embed"
@@ -47,6 +49,8 @@ interface NavigateCommand extends Partial<NavigationState> {
47
49
  * /archive -> archive
48
50
  * /trash -> trash
49
51
  * /record -> record
52
+ * /bug-report -> bug-report
53
+ * /bug-report/done -> bug-report-done
50
54
  * /r/:recordingId -> recording
51
55
  * /r/:recordingId/insights -> insights
52
56
  * /share/:shareId -> share
@@ -116,6 +120,13 @@ function stateFromLocation(pathname: string, search: string): NavigationState {
116
120
  if (p === "/archive") return { view: "archive" };
117
121
  if (p === "/trash") return { view: "trash" };
118
122
  if (p === "/record") return { view: "record" };
123
+ if (p === "/bug-report") return { view: "bug-report" };
124
+ if (p === "/bug-report/done") {
125
+ return {
126
+ view: "bug-report-done",
127
+ recordingId: params.get("recordingId") || undefined,
128
+ };
129
+ }
119
130
  if (p === "/notifications") return { view: "notifications" };
120
131
  if (p.startsWith("/settings")) return { view: "settings" };
121
132
  if (p === "/library" || p === "/" || p === "") {
@@ -154,6 +165,12 @@ function pathFromCommand(cmd: NavigateCommand): string {
154
165
  return "/trash";
155
166
  case "record":
156
167
  return "/record";
168
+ case "bug-report":
169
+ return "/bug-report";
170
+ case "bug-report-done":
171
+ return cmd.recordingId
172
+ ? `/bug-report/done?recordingId=${encodeURIComponent(cmd.recordingId)}`
173
+ : "/bug-report/done";
157
174
  case "notifications":
158
175
  return "/notifications";
159
176
  case "settings":
@@ -1291,6 +1291,37 @@ const messages = {
1291
1291
  spacesPageTitle: "المساحات · Clips",
1292
1292
  trashPageTitle: "المهملات · Clips",
1293
1293
  },
1294
+ bugReportRoute: {
1295
+ pageTitle: "تقرير خطأ · Clips",
1296
+ donePageTitle: "تم إرسال تقرير الخطأ · Clips",
1297
+ eyebrow: "تقرير خطأ",
1298
+ title: "تسجيل تقرير خطأ",
1299
+ description:
1300
+ "سجّل إعادة إنتاج قصيرة تتضمن الشاشة والصوت وسياق المتصفح بعد تنقيحه لفريقك.",
1301
+ issueTitleLabel: "عنوان المشكلة",
1302
+ issueTitlePlaceholder: "ما الذي حدث بشكل خاطئ؟",
1303
+ detailsLabel: "التفاصيل",
1304
+ detailsPlaceholder: "ماذا كنت تتوقع أن يحدث؟",
1305
+ emailLabel: "بريدك الإلكتروني",
1306
+ emailPlaceholder: "you@example.com",
1307
+ severityLabel: "الخطورة",
1308
+ severityLow: "منخفضة",
1309
+ severityNormal: "عادية",
1310
+ severityHigh: "عالية",
1311
+ severityUrgent: "عاجلة",
1312
+ sourceLabel: "المصدر",
1313
+ sourceUnknown: "صفحة المنتج الحالية",
1314
+ startRecording: "تسجيل تقرير الشاشة",
1315
+ privacyNote:
1316
+ "يحفظ Clips التسجيل بإمكانية وصول مساحة العمل افتراضيًا. تتم تنقيح عناوين URL والبيانات الوصفية قبل حفظها.",
1317
+ doneTitle: "تم إرسال تقرير الخطأ",
1318
+ doneDescription: "تم حفظ التسجيل في Clips وإبلاغ المنتج المضيف.",
1319
+ openRecording: "فتح التسجيل",
1320
+ copyLink: "نسخ الرابط",
1321
+ copied: "تم النسخ",
1322
+ returnToProduct: "العودة إلى المنتج",
1323
+ missingRecording: "لم يتم العثور على التسجيل",
1324
+ },
1294
1325
  meetingsRoute: {
1295
1326
  pageTitle: "Meetings · Clips (مترجم)",
1296
1327
  transcriptPending: "Transcript pending (مترجم)",
@@ -1323,6 +1323,38 @@ Alle sichtbaren Änderungen für Clips-Nutzer werden hier dokumentiert. Du kanns
1323
1323
  spacesPageTitle: "Bereiche · Clips",
1324
1324
  trashPageTitle: "Papierkorb · Clips",
1325
1325
  },
1326
+ bugReportRoute: {
1327
+ pageTitle: "Fehlerbericht · Clips",
1328
+ donePageTitle: "Fehlerbericht gesendet · Clips",
1329
+ eyebrow: "Fehlerbericht",
1330
+ title: "Fehlerbericht aufnehmen",
1331
+ description:
1332
+ "Nimm eine kurze Reproduktion mit Bildschirm, Stimme und redigiertem Browserkontext für dein Team auf.",
1333
+ issueTitleLabel: "Titel des Problems",
1334
+ issueTitlePlaceholder: "Was ist schiefgelaufen?",
1335
+ detailsLabel: "Details",
1336
+ detailsPlaceholder: "Was hättest du erwartet?",
1337
+ emailLabel: "Deine E-Mail",
1338
+ emailPlaceholder: "du@example.com",
1339
+ severityLabel: "Schweregrad",
1340
+ severityLow: "Niedrig",
1341
+ severityNormal: "Normal",
1342
+ severityHigh: "Hoch",
1343
+ severityUrgent: "Dringend",
1344
+ sourceLabel: "Quelle",
1345
+ sourceUnknown: "Aktuelle Produktseite",
1346
+ startRecording: "Bildschirmbericht aufnehmen",
1347
+ privacyNote:
1348
+ "Clips speichert die Aufnahme standardmäßig mit Workspace-Zugriff. URLs und Metadaten werden vor dem Speichern redigiert.",
1349
+ doneTitle: "Fehlerbericht gesendet",
1350
+ doneDescription:
1351
+ "Die Aufnahme wurde in Clips gespeichert und das Host-Produkt wurde benachrichtigt.",
1352
+ openRecording: "Aufnahme öffnen",
1353
+ copyLink: "Link kopieren",
1354
+ copied: "Kopiert",
1355
+ returnToProduct: "Zum Produkt zurück",
1356
+ missingRecording: "Aufnahme nicht gefunden",
1357
+ },
1326
1358
  meetingsRoute: {
1327
1359
  pageTitle: "Meetings · Clips (Lokalisiert)",
1328
1360
  transcriptPending: "Transcript pending (Lokalisiert)",
@@ -1284,6 +1284,38 @@ All notable user-facing changes to Clips are documented here. Open it any time f
1284
1284
  spacesPageTitle: "Spaces · Clips",
1285
1285
  trashPageTitle: "Trash · Clips",
1286
1286
  },
1287
+ bugReportRoute: {
1288
+ pageTitle: "Bug report · Clips",
1289
+ donePageTitle: "Bug report submitted · Clips",
1290
+ eyebrow: "Bug report",
1291
+ title: "Record a bug report",
1292
+ description:
1293
+ "Capture a short repro with screen, voice, and redacted browser context for your team.",
1294
+ issueTitleLabel: "Issue title",
1295
+ issueTitlePlaceholder: "What went wrong?",
1296
+ detailsLabel: "Details",
1297
+ detailsPlaceholder: "What did you expect to happen?",
1298
+ emailLabel: "Your email",
1299
+ emailPlaceholder: "you@example.com",
1300
+ severityLabel: "Severity",
1301
+ severityLow: "Low",
1302
+ severityNormal: "Normal",
1303
+ severityHigh: "High",
1304
+ severityUrgent: "Urgent",
1305
+ sourceLabel: "Source",
1306
+ sourceUnknown: "Current product page",
1307
+ startRecording: "Record screen report",
1308
+ privacyNote:
1309
+ "Clips stores the recording with workspace access by default. URLs and metadata are redacted before they are saved.",
1310
+ doneTitle: "Bug report submitted",
1311
+ doneDescription:
1312
+ "The recording is saved in Clips and the host product has been notified.",
1313
+ openRecording: "Open recording",
1314
+ copyLink: "Copy link",
1315
+ copied: "Copied",
1316
+ returnToProduct: "Return to product",
1317
+ missingRecording: "Recording not found",
1318
+ },
1287
1319
  meetingsRoute: {
1288
1320
  pageTitle: "Meetings · Clips",
1289
1321
  transcriptPending: "Transcript pending",
@@ -1315,6 +1315,38 @@ Todos los cambios visibles para los usuarios de Clips se documentan aquí. Puede
1315
1315
  spacesPageTitle: "Espacios · Clips",
1316
1316
  trashPageTitle: "Papelera · Clips",
1317
1317
  },
1318
+ bugReportRoute: {
1319
+ pageTitle: "Informe de error · Clips",
1320
+ donePageTitle: "Informe de error enviado · Clips",
1321
+ eyebrow: "Informe de error",
1322
+ title: "Grabar un informe de error",
1323
+ description:
1324
+ "Captura una reproducción breve con pantalla, voz y contexto del navegador redactado para tu equipo.",
1325
+ issueTitleLabel: "Título del problema",
1326
+ issueTitlePlaceholder: "¿Qué salió mal?",
1327
+ detailsLabel: "Detalles",
1328
+ detailsPlaceholder: "¿Qué esperabas que ocurriera?",
1329
+ emailLabel: "Tu correo electrónico",
1330
+ emailPlaceholder: "tu@example.com",
1331
+ severityLabel: "Severidad",
1332
+ severityLow: "Baja",
1333
+ severityNormal: "Normal",
1334
+ severityHigh: "Alta",
1335
+ severityUrgent: "Urgente",
1336
+ sourceLabel: "Origen",
1337
+ sourceUnknown: "Página actual del producto",
1338
+ startRecording: "Grabar informe de pantalla",
1339
+ privacyNote:
1340
+ "Clips guarda la grabación con acceso de espacio de trabajo de forma predeterminada. Las URL y los metadatos se redactan antes de guardarse.",
1341
+ doneTitle: "Informe de error enviado",
1342
+ doneDescription:
1343
+ "La grabación se guardó en Clips y se notificó al producto anfitrión.",
1344
+ openRecording: "Abrir grabación",
1345
+ copyLink: "Copiar enlace",
1346
+ copied: "Copiado",
1347
+ returnToProduct: "Volver al producto",
1348
+ missingRecording: "No se encontró la grabación",
1349
+ },
1318
1350
  meetingsRoute: {
1319
1351
  pageTitle: "Meetings · Clips (Localizado)",
1320
1352
  transcriptPending: "Transcript pending (Localizado)",
@@ -1317,6 +1317,38 @@ Tous les changements visibles par les utilisateurs de Clips sont documentés ici
1317
1317
  spacesPageTitle: "Espaces · Clips",
1318
1318
  trashPageTitle: "Corbeille · Clips",
1319
1319
  },
1320
+ bugReportRoute: {
1321
+ pageTitle: "Rapport de bug · Clips",
1322
+ donePageTitle: "Rapport de bug envoyé · Clips",
1323
+ eyebrow: "Rapport de bug",
1324
+ title: "Enregistrer un rapport de bug",
1325
+ description:
1326
+ "Capturez une courte reproduction avec écran, voix et contexte navigateur expurgé pour votre équipe.",
1327
+ issueTitleLabel: "Titre du problème",
1328
+ issueTitlePlaceholder: "Qu'est-ce qui n'a pas fonctionné ?",
1329
+ detailsLabel: "Détails",
1330
+ detailsPlaceholder: "Que deviez-vous voir se produire ?",
1331
+ emailLabel: "Votre e-mail",
1332
+ emailPlaceholder: "vous@example.com",
1333
+ severityLabel: "Gravité",
1334
+ severityLow: "Faible",
1335
+ severityNormal: "Normale",
1336
+ severityHigh: "Élevée",
1337
+ severityUrgent: "Urgente",
1338
+ sourceLabel: "Source",
1339
+ sourceUnknown: "Page produit actuelle",
1340
+ startRecording: "Enregistrer l'écran",
1341
+ privacyNote:
1342
+ "Clips enregistre la capture avec l'accès espace de travail par défaut. Les URL et métadonnées sont expurgées avant l'enregistrement.",
1343
+ doneTitle: "Rapport de bug envoyé",
1344
+ doneDescription:
1345
+ "L'enregistrement est sauvegardé dans Clips et le produit hôte a été notifié.",
1346
+ openRecording: "Ouvrir l'enregistrement",
1347
+ copyLink: "Copier le lien",
1348
+ copied: "Copié",
1349
+ returnToProduct: "Retour au produit",
1350
+ missingRecording: "Enregistrement introuvable",
1351
+ },
1320
1352
  meetingsRoute: {
1321
1353
  pageTitle: "Meetings · Clips (Localisé)",
1322
1354
  transcriptPending: "Transcript pending (Localisé)",
@@ -1286,6 +1286,38 @@ Clips में उपयोगकर्ताओं को दिखने व
1286
1286
  spacesPageTitle: "स्पेसेज़ · Clips",
1287
1287
  trashPageTitle: "ट्रैश · Clips",
1288
1288
  },
1289
+ bugReportRoute: {
1290
+ pageTitle: "बग रिपोर्ट · Clips",
1291
+ donePageTitle: "बग रिपोर्ट सबमिट हुई · Clips",
1292
+ eyebrow: "बग रिपोर्ट",
1293
+ title: "बग रिपोर्ट रिकॉर्ड करें",
1294
+ description:
1295
+ "अपनी टीम के लिए स्क्रीन, आवाज़ और संशोधित ब्राउज़र संदर्भ के साथ छोटा रेप्रो कैप्चर करें।",
1296
+ issueTitleLabel: "समस्या का शीर्षक",
1297
+ issueTitlePlaceholder: "क्या गलत हुआ?",
1298
+ detailsLabel: "विवरण",
1299
+ detailsPlaceholder: "आपको क्या होने की उम्मीद थी?",
1300
+ emailLabel: "आपका ईमेल",
1301
+ emailPlaceholder: "you@example.com",
1302
+ severityLabel: "गंभीरता",
1303
+ severityLow: "कम",
1304
+ severityNormal: "सामान्य",
1305
+ severityHigh: "उच्च",
1306
+ severityUrgent: "तत्काल",
1307
+ sourceLabel: "स्रोत",
1308
+ sourceUnknown: "मौजूदा उत्पाद पेज",
1309
+ startRecording: "स्क्रीन रिपोर्ट रिकॉर्ड करें",
1310
+ privacyNote:
1311
+ "Clips रिकॉर्डिंग को डिफ़ॉल्ट रूप से वर्कस्पेस एक्सेस के साथ सेव करता है। URL और मेटाडेटा सेव होने से पहले संशोधित किए जाते हैं।",
1312
+ doneTitle: "बग रिपोर्ट सबमिट हुई",
1313
+ doneDescription:
1314
+ "रिकॉर्डिंग Clips में सेव हो गई है और होस्ट उत्पाद को सूचित कर दिया गया है।",
1315
+ openRecording: "रिकॉर्डिंग खोलें",
1316
+ copyLink: "लिंक कॉपी करें",
1317
+ copied: "कॉपी हो गया",
1318
+ returnToProduct: "उत्पाद पर लौटें",
1319
+ missingRecording: "रिकॉर्डिंग नहीं मिली",
1320
+ },
1289
1321
  meetingsRoute: {
1290
1322
  pageTitle: "Meetings · Clips (स्थानीयकृत)",
1291
1323
  transcriptPending: "Transcript pending (स्थानीयकृत)",
@@ -1307,6 +1307,37 @@ Clips のユーザー向けの主な変更はここに記録されます。コ
1307
1307
  spacesPageTitle: "スペース · Clips",
1308
1308
  trashPageTitle: "ゴミ箱 · Clips",
1309
1309
  },
1310
+ bugReportRoute: {
1311
+ pageTitle: "バグレポート · Clips",
1312
+ donePageTitle: "バグレポートを送信しました · Clips",
1313
+ eyebrow: "バグレポート",
1314
+ title: "バグレポートを録画",
1315
+ description:
1316
+ "画面、音声、編集済みのブラウザーコンテキストで短い再現手順をチーム向けに記録します。",
1317
+ issueTitleLabel: "問題のタイトル",
1318
+ issueTitlePlaceholder: "何が問題でしたか?",
1319
+ detailsLabel: "詳細",
1320
+ detailsPlaceholder: "本来はどうなるはずでしたか?",
1321
+ emailLabel: "メールアドレス",
1322
+ emailPlaceholder: "you@example.com",
1323
+ severityLabel: "重大度",
1324
+ severityLow: "低",
1325
+ severityNormal: "通常",
1326
+ severityHigh: "高",
1327
+ severityUrgent: "緊急",
1328
+ sourceLabel: "ソース",
1329
+ sourceUnknown: "現在のプロダクトページ",
1330
+ startRecording: "画面レポートを録画",
1331
+ privacyNote:
1332
+ "Clips は既定でワークスペースアクセスとして録画を保存します。URL とメタデータは保存前に編集されます。",
1333
+ doneTitle: "バグレポートを送信しました",
1334
+ doneDescription: "録画は Clips に保存され、ホスト製品へ通知されました。",
1335
+ openRecording: "録画を開く",
1336
+ copyLink: "リンクをコピー",
1337
+ copied: "コピーしました",
1338
+ returnToProduct: "プロダクトに戻る",
1339
+ missingRecording: "録画が見つかりません",
1340
+ },
1310
1341
  meetingsRoute: {
1311
1342
  pageTitle: "Meetings · Clips (ローカライズ済み)",
1312
1343
  transcriptPending: "Transcript pending (ローカライズ済み)",
@@ -1294,6 +1294,38 @@ Clips의 모든 사용자 대상 변경 사항은 여기에 기록됩니다. 명
1294
1294
  spacesPageTitle: "스페이스 · Clips",
1295
1295
  trashPageTitle: "휴지통 · Clips",
1296
1296
  },
1297
+ bugReportRoute: {
1298
+ pageTitle: "버그 리포트 · Clips",
1299
+ donePageTitle: "버그 리포트 제출됨 · Clips",
1300
+ eyebrow: "버그 리포트",
1301
+ title: "버그 리포트 녹화",
1302
+ description:
1303
+ "팀을 위해 화면, 음성, 정리된 브라우저 컨텍스트로 짧은 재현 영상을 캡처합니다.",
1304
+ issueTitleLabel: "문제 제목",
1305
+ issueTitlePlaceholder: "무엇이 잘못되었나요?",
1306
+ detailsLabel: "세부 정보",
1307
+ detailsPlaceholder: "무엇이 일어나길 기대했나요?",
1308
+ emailLabel: "이메일",
1309
+ emailPlaceholder: "you@example.com",
1310
+ severityLabel: "심각도",
1311
+ severityLow: "낮음",
1312
+ severityNormal: "보통",
1313
+ severityHigh: "높음",
1314
+ severityUrgent: "긴급",
1315
+ sourceLabel: "출처",
1316
+ sourceUnknown: "현재 제품 페이지",
1317
+ startRecording: "화면 리포트 녹화",
1318
+ privacyNote:
1319
+ "Clips는 기본적으로 워크스페이스 접근 권한으로 녹화를 저장합니다. URL과 메타데이터는 저장 전에 수정됩니다.",
1320
+ doneTitle: "버그 리포트가 제출되었습니다",
1321
+ doneDescription:
1322
+ "녹화가 Clips에 저장되었고 호스트 제품에 알림을 보냈습니다.",
1323
+ openRecording: "녹화 열기",
1324
+ copyLink: "링크 복사",
1325
+ copied: "복사됨",
1326
+ returnToProduct: "제품으로 돌아가기",
1327
+ missingRecording: "녹화를 찾을 수 없습니다",
1328
+ },
1297
1329
  meetingsRoute: {
1298
1330
  pageTitle: "Meetings · Clips (현지화됨)",
1299
1331
  transcriptPending: "Transcript pending (현지화됨)",