@agent-native/core 0.108.0 → 0.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +25 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +162 -17
  5. package/corpus/core/src/a2a/correlation.ts +50 -0
  6. package/corpus/core/src/a2a/handlers.ts +200 -14
  7. package/corpus/core/src/a2a/index.ts +7 -1
  8. package/corpus/core/src/a2a/invoke.ts +77 -1
  9. package/corpus/core/src/a2a/server.ts +13 -1
  10. package/corpus/core/src/a2a/task-store.ts +146 -6
  11. package/corpus/core/src/a2a/types.ts +32 -0
  12. package/corpus/core/src/action.ts +5 -2
  13. package/corpus/core/src/agent/production-agent.ts +33 -4
  14. package/corpus/core/src/client/AssistantChat.tsx +648 -603
  15. package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
  16. package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
  17. package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
  18. package/corpus/core/src/client/analytics.ts +84 -0
  19. package/corpus/core/src/client/chat/message-components.tsx +94 -22
  20. package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
  21. package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  22. package/corpus/core/src/client/chat-thread-url.ts +11 -0
  23. package/corpus/core/src/client/error-capture.ts +12 -0
  24. package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
  25. package/corpus/core/src/client/index.ts +2 -0
  26. package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
  27. package/corpus/core/src/client/session-replay.ts +31 -0
  28. package/corpus/core/src/client/use-run-stuck-detection.ts +27 -1
  29. package/corpus/core/src/db/client.ts +55 -0
  30. package/corpus/core/src/extensions/actions.ts +2 -14
  31. package/corpus/core/src/extensions/store.ts +1 -1
  32. package/corpus/core/src/localization/default-messages.ts +3 -0
  33. package/corpus/core/src/mcp/build-server.ts +2 -2
  34. package/corpus/core/src/observability/traces.ts +172 -19
  35. package/corpus/core/src/progress/actions.ts +4 -2
  36. package/corpus/core/src/provider-api/index.ts +205 -105
  37. package/corpus/core/src/scripts/call-agent.ts +190 -19
  38. package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +112 -25
  39. package/corpus/core/src/server/agent-chat-plugin.ts +136 -4
  40. package/corpus/core/src/styles/agent-conversation.css +7 -0
  41. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
  42. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
  43. package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
  44. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
  45. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
  46. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
  47. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
  48. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
  49. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
  50. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
  51. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
  52. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
  53. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  54. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
  55. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  56. package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
  57. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
  58. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
  59. package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
  60. package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
  61. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
  62. package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
  63. package/corpus/templates/analytics/AGENTS.md +22 -13
  64. package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
  65. package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
  66. package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
  67. package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
  68. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
  69. package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
  70. package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
  71. package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
  72. package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
  73. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
  74. package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
  75. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
  76. package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
  77. package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
  78. package/corpus/templates/analytics/app/i18n/zh-TW.ts +13 -0
  79. package/corpus/templates/analytics/app/i18n-data.ts +134 -0
  80. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
  81. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
  82. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
  83. package/corpus/templates/analytics/changelog/2026-07-17-analytics-now-includes-a-default-alert-for-spikes-in-stuck-agent-chats.md +6 -0
  84. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
  85. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
  86. package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
  87. package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
  88. package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
  89. package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
  90. package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
  91. package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
  92. package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +23 -14
  93. package/corpus/templates/analytics/docs/schemas/tracked-events.md +5 -1
  94. package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
  95. package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
  96. package/corpus/templates/analytics/server/jobs/analytics-alerts.ts +3 -3
  97. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
  98. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +209 -87
  99. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
  100. package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
  101. package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
  102. package/corpus/templates/analytics/server/lib/gong.ts +54 -66
  103. package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
  104. package/corpus/templates/analytics/server/lib/notion.ts +83 -8
  105. package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
  106. package/corpus/templates/analytics/server/lib/slack.ts +242 -90
  107. package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
  108. package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
  109. package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
  110. package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
  111. package/corpus/templates/clips/actions/finalize-recording.ts +541 -62
  112. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
  113. package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
  114. package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
  115. package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
  116. package/corpus/templates/clips/app/components/player/playback-comment-overlay.tsx +17 -2
  117. package/corpus/templates/clips/app/components/player/video-player.tsx +14 -2
  118. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +2 -2
  119. package/corpus/templates/clips/app/entry.client.tsx +6 -1
  120. package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
  121. package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
  122. package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
  123. package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
  124. package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
  125. package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
  126. package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
  127. package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
  128. package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
  129. package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
  130. package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
  131. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
  132. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -1
  133. package/corpus/templates/clips/app/routes/record.tsx +3 -3
  134. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -3
  135. package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
  136. package/corpus/templates/clips/changelog/2026-07-17-clips-now-retries-storage-verification-in-the-background-ins.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
  138. package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
  139. package/corpus/templates/clips/changelog/2026-07-17-fixed-broken-thumbnail-icons-appearing-over-playable-clip-em.md +6 -0
  140. package/corpus/templates/clips/changelog/2026-07-17-playback-comments-stay-readable-at-faster-playback-speeds.md +6 -0
  141. package/corpus/templates/clips/chrome-extension/src/finalize-recovery.ts +3 -0
  142. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +3 -3
  143. package/corpus/templates/clips/desktop/src/app.tsx +19 -7
  144. package/corpus/templates/clips/desktop/src/lib/recorder.ts +111 -13
  145. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +16 -7
  146. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -4
  147. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +32 -15
  148. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +45 -18
  149. package/corpus/templates/clips/server/jobs/media-verification.ts +130 -0
  150. package/corpus/templates/clips/server/lib/builder-media-compression.ts +15 -0
  151. package/corpus/templates/clips/server/lib/media-verification-state.ts +38 -0
  152. package/corpus/templates/clips/server/lib/player-thumbnail-url.ts +31 -0
  153. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +10 -3
  154. package/corpus/templates/clips/server/plugins/auth.ts +5 -5
  155. package/corpus/templates/clips/server/plugins/calendar-jobs.ts +2 -0
  156. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +12 -2
  157. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +6 -1
  158. package/corpus/templates/clips/server/routes/api/thumbnail/[recordingId].get.ts +340 -0
  159. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +24 -7
  160. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +91 -7
  161. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/status.get.ts +14 -0
  162. package/corpus/templates/clips/shared/finalize-recovery.ts +61 -2
  163. package/corpus/templates/clips/shared/share-meta.ts +1 -1
  164. package/corpus/templates/content/app/entry.client.tsx +6 -1
  165. package/corpus/templates/dispatch/AGENTS.md +5 -0
  166. package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
  167. package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
  168. package/corpus/templates/mail/app/entry.client.tsx +6 -1
  169. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
  170. package/corpus/templates/slides/.env.example +0 -1
  171. package/corpus/templates/slides/AGENTS.md +4 -0
  172. package/corpus/templates/slides/DEVELOPING.md +2 -2
  173. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
  174. package/corpus/templates/slides/actions/logo-config.ts +6 -7
  175. package/corpus/templates/slides/actions/search-images.ts +11 -39
  176. package/corpus/templates/slides/actions/search-logos.ts +5 -52
  177. package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
  178. package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
  179. package/corpus/templates/slides/app/entry.client.tsx +6 -1
  180. package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
  181. package/corpus/templates/slides/server/register-secrets.ts +30 -0
  182. package/dist/a2a/client.d.ts +47 -1
  183. package/dist/a2a/client.d.ts.map +1 -1
  184. package/dist/a2a/client.js +94 -12
  185. package/dist/a2a/client.js.map +1 -1
  186. package/dist/a2a/correlation.d.ts +10 -0
  187. package/dist/a2a/correlation.d.ts.map +1 -0
  188. package/dist/a2a/correlation.js +40 -0
  189. package/dist/a2a/correlation.js.map +1 -0
  190. package/dist/a2a/handlers.d.ts.map +1 -1
  191. package/dist/a2a/handlers.js +147 -15
  192. package/dist/a2a/handlers.js.map +1 -1
  193. package/dist/a2a/index.d.ts +4 -4
  194. package/dist/a2a/index.d.ts.map +1 -1
  195. package/dist/a2a/index.js +2 -2
  196. package/dist/a2a/index.js.map +1 -1
  197. package/dist/a2a/invoke.d.ts +29 -2
  198. package/dist/a2a/invoke.d.ts.map +1 -1
  199. package/dist/a2a/invoke.js +33 -1
  200. package/dist/a2a/invoke.js.map +1 -1
  201. package/dist/a2a/server.d.ts.map +1 -1
  202. package/dist/a2a/server.js +14 -1
  203. package/dist/a2a/server.js.map +1 -1
  204. package/dist/a2a/task-store.d.ts +12 -1
  205. package/dist/a2a/task-store.d.ts.map +1 -1
  206. package/dist/a2a/task-store.js +96 -6
  207. package/dist/a2a/task-store.js.map +1 -1
  208. package/dist/a2a/types.d.ts +27 -0
  209. package/dist/a2a/types.d.ts.map +1 -1
  210. package/dist/a2a/types.js.map +1 -1
  211. package/dist/action.d.ts +5 -2
  212. package/dist/action.d.ts.map +1 -1
  213. package/dist/action.js.map +1 -1
  214. package/dist/agent/production-agent.d.ts +14 -0
  215. package/dist/agent/production-agent.d.ts.map +1 -1
  216. package/dist/agent/production-agent.js +19 -3
  217. package/dist/agent/production-agent.js.map +1 -1
  218. package/dist/client/AssistantChat.d.ts +14 -1
  219. package/dist/client/AssistantChat.d.ts.map +1 -1
  220. package/dist/client/AssistantChat.js +158 -136
  221. package/dist/client/AssistantChat.js.map +1 -1
  222. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  223. package/dist/client/MultiTabAssistantChat.js +27 -4
  224. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  225. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  226. package/dist/client/agent-chat-adapter.js +21 -39
  227. package/dist/client/agent-chat-adapter.js.map +1 -1
  228. package/dist/client/agent-sidebar-state.d.ts +1 -0
  229. package/dist/client/agent-sidebar-state.d.ts.map +1 -1
  230. package/dist/client/agent-sidebar-state.js +4 -0
  231. package/dist/client/agent-sidebar-state.js.map +1 -1
  232. package/dist/client/analytics.d.ts +14 -0
  233. package/dist/client/analytics.d.ts.map +1 -1
  234. package/dist/client/analytics.js +67 -0
  235. package/dist/client/analytics.js.map +1 -1
  236. package/dist/client/chat/message-components.d.ts +8 -0
  237. package/dist/client/chat/message-components.d.ts.map +1 -1
  238. package/dist/client/chat/message-components.js +62 -19
  239. package/dist/client/chat/message-components.js.map +1 -1
  240. package/dist/client/chat/tool-call-display.d.ts +6 -0
  241. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  242. package/dist/client/chat/tool-call-display.js +83 -14
  243. package/dist/client/chat/tool-call-display.js.map +1 -1
  244. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
  245. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
  246. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
  247. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
  248. package/dist/client/chat-thread-url.d.ts +2 -0
  249. package/dist/client/chat-thread-url.d.ts.map +1 -0
  250. package/dist/client/chat-thread-url.js +12 -0
  251. package/dist/client/chat-thread-url.js.map +1 -0
  252. package/dist/client/error-capture.d.ts.map +1 -1
  253. package/dist/client/error-capture.js +7 -0
  254. package/dist/client/error-capture.js.map +1 -1
  255. package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
  256. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  257. package/dist/client/extensions/ExtensionSlot.js +28 -3
  258. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  259. package/dist/client/index.d.ts +1 -1
  260. package/dist/client/index.d.ts.map +1 -1
  261. package/dist/client/index.js +1 -1
  262. package/dist/client/index.js.map +1 -1
  263. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  264. package/dist/client/route-chunk-recovery.js +14 -9
  265. package/dist/client/route-chunk-recovery.js.map +1 -1
  266. package/dist/client/session-replay.d.ts +15 -0
  267. package/dist/client/session-replay.d.ts.map +1 -1
  268. package/dist/client/session-replay.js +20 -0
  269. package/dist/client/session-replay.js.map +1 -1
  270. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  271. package/dist/client/use-run-stuck-detection.js +25 -1
  272. package/dist/client/use-run-stuck-detection.js.map +1 -1
  273. package/dist/db/client.d.ts +7 -0
  274. package/dist/db/client.d.ts.map +1 -1
  275. package/dist/db/client.js +33 -0
  276. package/dist/db/client.js.map +1 -1
  277. package/dist/extensions/actions.d.ts.map +1 -1
  278. package/dist/extensions/actions.js +2 -10
  279. package/dist/extensions/actions.js.map +1 -1
  280. package/dist/extensions/store.js +1 -1
  281. package/dist/extensions/store.js.map +1 -1
  282. package/dist/localization/default-messages.d.ts +3 -0
  283. package/dist/localization/default-messages.d.ts.map +1 -1
  284. package/dist/localization/default-messages.js +3 -0
  285. package/dist/localization/default-messages.js.map +1 -1
  286. package/dist/mcp/build-server.d.ts +2 -0
  287. package/dist/mcp/build-server.d.ts.map +1 -1
  288. package/dist/mcp/build-server.js +2 -2
  289. package/dist/mcp/build-server.js.map +1 -1
  290. package/dist/notifications/routes.d.ts +2 -2
  291. package/dist/observability/routes.d.ts +5 -5
  292. package/dist/observability/traces.d.ts +9 -0
  293. package/dist/observability/traces.d.ts.map +1 -1
  294. package/dist/observability/traces.js +137 -19
  295. package/dist/observability/traces.js.map +1 -1
  296. package/dist/progress/actions.d.ts.map +1 -1
  297. package/dist/progress/actions.js +3 -2
  298. package/dist/progress/actions.js.map +1 -1
  299. package/dist/progress/routes.d.ts +1 -1
  300. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  301. package/dist/provider-api/index.d.ts.map +1 -1
  302. package/dist/provider-api/index.js +91 -8
  303. package/dist/provider-api/index.js.map +1 -1
  304. package/dist/scripts/call-agent.d.ts.map +1 -1
  305. package/dist/scripts/call-agent.js +140 -17
  306. package/dist/scripts/call-agent.js.map +1 -1
  307. package/dist/secrets/routes.d.ts +9 -9
  308. package/dist/server/agent-chat/action-filters-a2a.d.ts +24 -2
  309. package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
  310. package/dist/server/agent-chat/action-filters-a2a.js +62 -7
  311. package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
  312. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  313. package/dist/server/agent-chat-plugin.js +118 -5
  314. package/dist/server/agent-chat-plugin.js.map +1 -1
  315. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  316. package/dist/server/transcribe-voice.d.ts +1 -1
  317. package/dist/styles/agent-conversation.css +7 -0
  318. package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
  319. package/dist/templates/default/app/i18n/de-DE.ts +20 -0
  320. package/dist/templates/default/app/i18n/en-US.ts +20 -0
  321. package/dist/templates/default/app/i18n/es-ES.ts +20 -0
  322. package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
  323. package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
  324. package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
  325. package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
  326. package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
  327. package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
  328. package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
  329. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
  330. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  331. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
  332. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  333. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
  334. package/package.json +1 -1
  335. package/src/templates/default/app/i18n/ar-SA.ts +20 -0
  336. package/src/templates/default/app/i18n/de-DE.ts +20 -0
  337. package/src/templates/default/app/i18n/en-US.ts +20 -0
  338. package/src/templates/default/app/i18n/es-ES.ts +20 -0
  339. package/src/templates/default/app/i18n/fr-FR.ts +21 -0
  340. package/src/templates/default/app/i18n/hi-IN.ts +19 -0
  341. package/src/templates/default/app/i18n/ja-JP.ts +20 -0
  342. package/src/templates/default/app/i18n/ko-KR.ts +19 -0
  343. package/src/templates/default/app/i18n/pt-BR.ts +20 -0
  344. package/src/templates/default/app/i18n/zh-CN.ts +19 -0
  345. package/src/templates/default/app/i18n/zh-TW.ts +19 -0
  346. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
  347. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  348. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
  349. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  350. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
  351. package/corpus/templates/analytics/server/handlers/github.ts +0 -200
  352. package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
  353. package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
  354. package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
  355. package/corpus/templates/analytics/server/lib/github.ts +0 -660
  356. package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
  357. package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
  358. package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
  359. package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
  360. package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
  361. package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
  362. package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
  363. package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
  364. package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
  365. package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
  366. package/corpus/templates/slides/actions/image-search.ts +0 -64
  367. package/corpus/templates/slides/actions/import-github.ts +0 -182
  368. package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
@@ -23,6 +23,10 @@ import {
23
23
  isLoopbackAddress,
24
24
  isTrustedLocalRuntime,
25
25
  } from "../a2a/auth-policy.js";
26
+ import {
27
+ sanitizeA2ACorrelationId,
28
+ sanitizeA2ACorrelationMetadata,
29
+ } from "../a2a/correlation.js";
26
30
  import { applyAgentTextEventToBuffer } from "../a2a/response-text.js";
27
31
  import {
28
32
  createA2AApproval,
@@ -115,6 +119,7 @@ import {
115
119
  type ForkThreadSourceSnapshot,
116
120
  } from "../chat-threads/store.js";
117
121
  import { createDbAdminAgentTools } from "../db-admin/agent-tools.js";
122
+ import { isTransientDatabaseError } from "../db/client.js";
118
123
  import {
119
124
  verifyInternalToken,
120
125
  extractBearerToken,
@@ -185,6 +190,55 @@ import {
185
190
  export { handleSharedThreadRequest };
186
191
  export type { SharedThreadRouteDependencies };
187
192
 
193
+ function withTransientDatabaseFallback(
194
+ route: string,
195
+ handler: (event: H3Event) => unknown,
196
+ ) {
197
+ return defineEventHandler(async (event) => {
198
+ try {
199
+ return await handler(event);
200
+ } catch (error) {
201
+ if (!isTransientDatabaseError(error)) throw error;
202
+
203
+ const method = getMethod(event);
204
+ const retrySafe = method === "GET" || method === "HEAD";
205
+
206
+ const databaseError = error as {
207
+ code?: unknown;
208
+ cause?: { code?: unknown };
209
+ };
210
+ captureError(new Error("Transient database failure in agent chat"), {
211
+ route,
212
+ method,
213
+ tags: {
214
+ source: "agent-chat",
215
+ failureClass: "transient-database",
216
+ },
217
+ extra: {
218
+ databaseErrorName: error instanceof Error ? error.name : typeof error,
219
+ databaseErrorCode:
220
+ typeof databaseError.code === "string"
221
+ ? databaseError.code
222
+ : undefined,
223
+ databaseCauseCode:
224
+ typeof databaseError.cause?.code === "string"
225
+ ? databaseError.cause.code
226
+ : undefined,
227
+ },
228
+ });
229
+ setResponseStatus(event, 503);
230
+ if (retrySafe) setResponseHeader(event, "Retry-After", "2");
231
+ return {
232
+ error: retrySafe
233
+ ? "The database is temporarily unavailable. Please retry."
234
+ : "The database became unavailable while processing this request. Refresh before deciding whether to retry.",
235
+ code: "database_unavailable",
236
+ retryable: retrySafe,
237
+ };
238
+ }
239
+ });
240
+ }
241
+
188
242
  // Lazy fs — loaded via dynamic import() on first use.
189
243
  // This avoids require() which bundlers convert to createRequire(import.meta.url)
190
244
  // that crashes on CF Workers where import.meta.url is undefined.
@@ -210,6 +264,7 @@ import {
210
264
  createA2AEngineToolSurface,
211
265
  filterAgentTools,
212
266
  filterPublicAgentActions,
267
+ filterDirectA2AActions,
213
268
  filterReadOnlyActions,
214
269
  resolveInitialToolNames,
215
270
  runA2AAgentLoop,
@@ -1208,6 +1263,7 @@ export function createAgentChatPlugin(
1208
1263
 
1209
1264
  const { mountA2A } = await import("../a2a/server.js");
1210
1265
  mountA2A(nitroApp, {
1266
+ appId: options?.appId,
1211
1267
  name: options?.appId
1212
1268
  ? options.appId.charAt(0).toUpperCase() + options.appId.slice(1)
1213
1269
  : "Agent",
@@ -1216,6 +1272,38 @@ export function createAgentChatPlugin(
1216
1272
  publicSkillsOnly: true,
1217
1273
  streaming: true,
1218
1274
  durableBackgroundRuns: options?.durableBackgroundRuns,
1275
+ executeReadOnlyAction: async ({ action, input, invocationId }) => {
1276
+ const actions = filterDirectA2AActions(
1277
+ mcpFullActions ?? allScripts,
1278
+ options ?? {},
1279
+ );
1280
+ const entry = actions[action];
1281
+ if (!entry) {
1282
+ return {
1283
+ status: "failed" as const,
1284
+ output: "Unknown or unavailable read-only action",
1285
+ };
1286
+ }
1287
+
1288
+ const result = await executeAgentToolCall({
1289
+ actions: { [action]: entry },
1290
+ name: action,
1291
+ input,
1292
+ callId: `a2a-action-${invocationId}`,
1293
+ ownerEmail: getRequestUserEmail(),
1294
+ orgId: getRequestOrgId() ?? null,
1295
+ caller: "a2a",
1296
+ networkProtocol: "a2a",
1297
+ networkId: invocationId,
1298
+ });
1299
+ if (result.status === "approval_required") {
1300
+ return {
1301
+ status: "failed" as const,
1302
+ output: "Read-only action unexpectedly requires approval",
1303
+ };
1304
+ }
1305
+ return { status: result.status, output: result.output };
1306
+ },
1219
1307
  executeApproval: async (approval) => {
1220
1308
  const result = await executeAgentToolCall({
1221
1309
  actions: mcpFullActions ?? allScripts,
@@ -1543,6 +1631,11 @@ export function createAgentChatPlugin(
1543
1631
  const recoverableArtifactStatusWriter =
1544
1632
  createSerializedA2ATaskStatusWriter(context.taskId);
1545
1633
  const controller = new AbortController();
1634
+ const correlation = sanitizeA2ACorrelationMetadata(context.metadata);
1635
+ const telemetryThreadId =
1636
+ sanitizeA2ACorrelationId(context.contextId) ??
1637
+ correlation.callerThreadId ??
1638
+ context.taskId;
1546
1639
 
1547
1640
  console.log(
1548
1641
  `[A2A] Starting agent loop: ${a2aToolSurface.tools.length}/${a2aToolSurface.availableTools.length} initial tools, prompt ${systemPrompt.length} chars`,
@@ -1567,6 +1660,11 @@ export function createAgentChatPlugin(
1567
1660
  toolCallCacheKey(approved.tool, approved.input),
1568
1661
  ),
1569
1662
  executionMode: "act",
1663
+ runId: context.taskId,
1664
+ networkProtocol: "a2a",
1665
+ networkId: context.taskId,
1666
+ threadId: context.taskId,
1667
+ turnId: context.taskId,
1570
1668
  send: (event) => {
1571
1669
  a2aEvents.push(event);
1572
1670
  if (event.type === "tool_start") {
@@ -1627,6 +1725,26 @@ export function createAgentChatPlugin(
1627
1725
  options?.durableBackgroundRuns === true &&
1628
1726
  isInBackgroundFunctionRuntime(),
1629
1727
  },
1728
+ {
1729
+ telemetry: {
1730
+ runId: context.taskId,
1731
+ threadId: telemetryThreadId,
1732
+ userId: userEmail,
1733
+ delegation: {
1734
+ protocol: "a2a",
1735
+ taskId: context.taskId,
1736
+ ...(correlation.callerApp
1737
+ ? { callerApp: correlation.callerApp }
1738
+ : {}),
1739
+ ...(correlation.parentRunId
1740
+ ? { parentRunId: correlation.parentRunId }
1741
+ : {}),
1742
+ ...(correlation.parentTurnId
1743
+ ? { parentTurnId: correlation.parentTurnId }
1744
+ : {}),
1745
+ },
1746
+ },
1747
+ },
1630
1748
  );
1631
1749
 
1632
1750
  // The continuation can observe terminal output immediately, so make
@@ -1783,6 +1901,7 @@ export function createAgentChatPlugin(
1783
1901
  : {}),
1784
1902
  askAgent: async (message: string) => {
1785
1903
  const ownerEmail = getRequestUserEmail();
1904
+ const mcpRunId = crypto.randomUUID();
1786
1905
  const { getOwnerActiveApiKey } =
1787
1906
  await import("../agent/production-agent.js");
1788
1907
  const ownerApiKey = ownerEmail
@@ -1911,9 +2030,14 @@ export function createAgentChatPlugin(
1911
2030
  },
1912
2031
  ],
1913
2032
  actions: mcpActions,
1914
- ownerEmail: getRequestUserEmail(),
2033
+ ownerEmail,
1915
2034
  orgId: getRequestOrgId() ?? null,
1916
2035
  executionMode: "act",
2036
+ runId: mcpRunId,
2037
+ networkProtocol: "mcp",
2038
+ networkId: mcpRunId,
2039
+ threadId: mcpRunId,
2040
+ turnId: mcpRunId,
1917
2041
  send: (event) => {
1918
2042
  accumulatedText = applyAgentTextEventToBuffer(
1919
2043
  accumulatedText,
@@ -1931,6 +2055,14 @@ export function createAgentChatPlugin(
1931
2055
  options?.durableBackgroundRuns === true &&
1932
2056
  isInBackgroundFunctionRuntime(),
1933
2057
  },
2058
+ {
2059
+ telemetry: {
2060
+ runId: mcpRunId,
2061
+ threadId: mcpRunId,
2062
+ userId: ownerEmail ?? null,
2063
+ delegation: { protocol: "mcp" },
2064
+ },
2065
+ },
1934
2066
  );
1935
2067
 
1936
2068
  return accumulatedText || "(no response)";
@@ -4203,7 +4335,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
4203
4335
  // GET /runs/active?threadId=X — check if there's an active run for a thread
4204
4336
  getH3App(nitroApp).use(
4205
4337
  `${routePath}/runs`,
4206
- defineEventHandler(async (event) => {
4338
+ withTransientDatabaseFallback(`${routePath}/runs`, async (event) => {
4207
4339
  // Auth check — ensure the user is authenticated
4208
4340
  const owner = await getOwnerFromEvent(event);
4209
4341
 
@@ -4722,7 +4854,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
4722
4854
  `${getOrigin(event)}${routePath}/shared/${encodeURIComponent(token)}`;
4723
4855
  getH3App(nitroApp).use(
4724
4856
  `${routePath}/threads`,
4725
- defineEventHandler(async (event) => {
4857
+ withTransientDatabaseFallback(`${routePath}/threads`, async (event) => {
4726
4858
  const owner = await getOwnerFromEvent(event);
4727
4859
  const orgId = await getOrgIdFromEvent(event);
4728
4860
  const method = getMethod(event);
@@ -5352,7 +5484,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
5352
5484
  // earlier-mounted handlers (mode, save-key, files, skills, mentions, threads) handle them.
5353
5485
  getH3App(nitroApp).use(
5354
5486
  routePath,
5355
- defineEventHandler(async (event) => {
5487
+ withTransientDatabaseFallback(routePath, async (event) => {
5356
5488
  // Skip sub-path requests — they're handled by earlier-mounted handlers
5357
5489
  const url = event.node?.req?.url || event.path || "";
5358
5490
  const afterBase = url.slice(
@@ -502,6 +502,13 @@
502
502
  opacity 150ms ease-out;
503
503
  }
504
504
 
505
+ @starting-style {
506
+ .agent-chat-collapse[data-state="open"] {
507
+ grid-template-rows: 0fr;
508
+ opacity: 0;
509
+ }
510
+ }
511
+
505
512
  .agent-chat-collapse[data-state="closed"] {
506
513
  grid-template-rows: 0fr;
507
514
  opacity: 0;
@@ -80,12 +80,32 @@ const messages = {
80
80
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
81
81
  appsInWorkspace: "Apps in {{workspace}}",
82
82
  workspaceApps: "تطبيقات مساحة العمل",
83
+ otherApps: "تطبيقات أخرى",
84
+ otherAppsDescription: "افتح التطبيقات الأخرى المتاحة لك.",
85
+ availableCount: "{{count}} متاح",
83
86
  activeCount: "{{count}} active",
84
87
  hiddenCount: "{{count}} hidden",
85
88
  createApp: "إنشاء التطبيق",
86
89
  templates: "القوالب",
87
90
  checkingTemplates: "التحقق من القوالب المتاحة",
88
91
  templatesAvailable: "{{count}} available to scaffold",
92
+ curatedTemplates: "قوالب منسقة",
93
+ curatedTemplatesDescription:
94
+ "ابدأ من شكل تطبيق تمت مراجعته، ثم اجعله خاصًا بك.",
95
+ remix: "إعادة المزج",
96
+ remixTemplate: "إعادة مزج {{name}}",
97
+ remixAppIdLabel: "معرّف التطبيق الجديد",
98
+ remixStarted: "بدأت إعادة مزج {{name}}",
99
+ viewLiveApp: "عرض التطبيق المباشر",
100
+ alreadyInWorkspace: "موجود بالفعل في مساحة العمل",
101
+ remixAppIdDescription:
102
+ "اختر معرّفًا آمنًا لعنوان URL لتطبيق مساحة العمل الجديد.",
103
+ integrationSetup: "إعداد التكامل",
104
+ source: "المصدر",
105
+ remixing: "جارٍ إعادة المزج…",
106
+ remixSuccess: "بدأت إعادة مزج القالب.",
107
+ remixError: "تعذرت إعادة مزج هذا القالب",
108
+ appIdRequired: "معرّف التطبيق مطلوب.",
89
109
  hide: "إخفاء",
90
110
  show: "Show",
91
111
  hiddenApps: "التطبيقات المخفية",
@@ -79,12 +79,32 @@ const messages = {
79
79
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
80
80
  appsInWorkspace: "Apps in {{workspace}}",
81
81
  workspaceApps: "Workspace-Apps",
82
+ otherApps: "Andere Apps",
83
+ otherAppsDescription: "Andere für dich verfügbare Apps öffnen.",
84
+ availableCount: "{{count}} verfügbar",
82
85
  activeCount: "{{count}} active",
83
86
  hiddenCount: "{{count}} hidden",
84
87
  createApp: "App erstellen",
85
88
  templates: "Vorlagen",
86
89
  checkingTemplates: "Überprüfen verfügbarer Vorlagen",
87
90
  templatesAvailable: "{{count}} available to scaffold",
91
+ curatedTemplates: "Kuratierte Vorlagen",
92
+ curatedTemplatesDescription:
93
+ "Starte mit einer geprüften App-Struktur und passe sie an.",
94
+ remix: "Remix",
95
+ remixTemplate: "{{name}} remixen",
96
+ remixAppIdLabel: "Neue App-ID",
97
+ remixStarted: "Remix für {{name}} gestartet",
98
+ viewLiveApp: "Live-App öffnen",
99
+ alreadyInWorkspace: "Bereits im Workspace",
100
+ remixAppIdDescription:
101
+ "Wähle eine URL-sichere ID für die neue Workspace-App.",
102
+ integrationSetup: "Integration einrichten",
103
+ source: "Quelle",
104
+ remixing: "Remix wird erstellt…",
105
+ remixSuccess: "Template-Remix gestartet.",
106
+ remixError: "Dieses Template konnte nicht geremixt werden",
107
+ appIdRequired: "App-ID ist erforderlich.",
88
108
  hide: "Ausblenden",
89
109
  show: "Show",
90
110
  hiddenApps: "Versteckte Apps",
@@ -77,12 +77,32 @@ const messages = {
77
77
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
78
78
  appsInWorkspace: "Apps in {{workspace}}",
79
79
  workspaceApps: "Workspace apps",
80
+ otherApps: "Other apps",
81
+ otherAppsDescription: "Open other apps available to you.",
82
+ availableCount: "{{count}} available",
80
83
  activeCount: "{{count}} active",
81
84
  hiddenCount: "{{count}} hidden",
82
85
  createApp: "Create app",
83
86
  templates: "Templates",
84
87
  checkingTemplates: "Checking available templates",
85
88
  templatesAvailable: "{{count}} available to scaffold",
89
+ curatedTemplates: "Curated templates",
90
+ curatedTemplatesDescription:
91
+ "Start from a reviewed app shape, then make it your own.",
92
+ remix: "Remix",
93
+ remixTemplate: "Remix {{name}}",
94
+ remixAppIdLabel: "New app id",
95
+ remixStarted: "Started {{name}} remix",
96
+ viewLiveApp: "View live app",
97
+ alreadyInWorkspace: "Already in workspace",
98
+ remixAppIdDescription:
99
+ "Choose the URL-safe id for the new workspace app.",
100
+ integrationSetup: "Integration setup",
101
+ source: "Source",
102
+ remixing: "Remixing…",
103
+ remixSuccess: "Template remix started.",
104
+ remixError: "Could not remix this template",
105
+ appIdRequired: "App ID is required.",
86
106
  hide: "Hide",
87
107
  show: "Show",
88
108
  hiddenApps: "Hidden apps",
@@ -79,12 +79,32 @@ const messages = {
79
79
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
80
80
  appsInWorkspace: "Apps in {{workspace}}",
81
81
  workspaceApps: "Aplicaciones de espacio de trabajo",
82
+ otherApps: "Otras aplicaciones",
83
+ otherAppsDescription: "Abre otras aplicaciones disponibles para ti.",
84
+ availableCount: "{{count}} disponibles",
82
85
  activeCount: "{{count}} active",
83
86
  hiddenCount: "{{count}} hidden",
84
87
  createApp: "Crear aplicación",
85
88
  templates: "Plantillas",
86
89
  checkingTemplates: "Comprobando plantillas disponibles",
87
90
  templatesAvailable: "{{count}} available to scaffold",
91
+ curatedTemplates: "Plantillas seleccionadas",
92
+ curatedTemplatesDescription:
93
+ "Empieza con una estructura de aplicación revisada y hazla tuya.",
94
+ remix: "Reutilizar",
95
+ remixTemplate: "Reutilizar {{name}}",
96
+ remixAppIdLabel: "Nuevo ID de aplicación",
97
+ remixStarted: "Se inició la reutilización de {{name}}",
98
+ viewLiveApp: "Ver aplicación en vivo",
99
+ alreadyInWorkspace: "Ya está en el espacio de trabajo",
100
+ remixAppIdDescription:
101
+ "Elige un ID seguro para URL para la nueva aplicación.",
102
+ integrationSetup: "Configuración de integración",
103
+ source: "Origen",
104
+ remixing: "Reutilizando…",
105
+ remixSuccess: "Se inició la reutilización de la plantilla.",
106
+ remixError: "No se pudo reutilizar esta plantilla",
107
+ appIdRequired: "El ID de aplicación es obligatorio.",
88
108
  hide: "Ocultar",
89
109
  show: "Show",
90
110
  hiddenApps: "Aplicaciones ocultas",
@@ -80,12 +80,33 @@ const messages = {
80
80
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
81
81
  appsInWorkspace: "Apps in {{workspace}}",
82
82
  workspaceApps: "Applications d'espace de travail",
83
+ otherApps: "Autres applications",
84
+ otherAppsDescription:
85
+ "Ouvrez les autres applications qui vous sont accessibles.",
86
+ availableCount: "{{count}} disponibles",
83
87
  activeCount: "{{count}} active",
84
88
  hiddenCount: "{{count}} hidden",
85
89
  createApp: "Créer une application",
86
90
  templates: "Modèles",
87
91
  checkingTemplates: "Vérification des modèles disponibles",
88
92
  templatesAvailable: "{{count}} available to scaffold",
93
+ curatedTemplates: "Modèles sélectionnés",
94
+ curatedTemplatesDescription:
95
+ "Partez d’une structure d’application vérifiée et personnalisez-la.",
96
+ remix: "Remixer",
97
+ remixTemplate: "Remixer {{name}}",
98
+ remixAppIdLabel: "Nouvel identifiant d’application",
99
+ remixStarted: "Remix de {{name}} lancé",
100
+ viewLiveApp: "Voir l’application en direct",
101
+ alreadyInWorkspace: "Déjà dans l’espace de travail",
102
+ remixAppIdDescription:
103
+ "Choisissez un identifiant compatible avec l’URL pour la nouvelle application.",
104
+ integrationSetup: "Configuration de l’intégration",
105
+ source: "Source",
106
+ remixing: "Remix en cours…",
107
+ remixSuccess: "Le remix du modèle a démarré.",
108
+ remixError: "Impossible de remixer ce modèle",
109
+ appIdRequired: "L’identifiant de l’application est requis.",
89
110
  hide: "Masquer",
90
111
  show: "Show",
91
112
  hiddenApps: "Applications cachées",
@@ -75,12 +75,31 @@ const messages = {
75
75
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
76
76
  appsInWorkspace: "Apps in {{workspace}}",
77
77
  workspaceApps: "कार्यक्षेत्र ऐप्स",
78
+ otherApps: "अन्य ऐप्स",
79
+ otherAppsDescription: "आपके लिए उपलब्ध अन्य ऐप्स खोलें।",
80
+ availableCount: "{{count}} उपलब्ध",
78
81
  activeCount: "{{count}} active",
79
82
  hiddenCount: "{{count}} hidden",
80
83
  createApp: "ऐप बनाएं",
81
84
  templates: "टेम्पलेट",
82
85
  checkingTemplates: "उपलब्ध टेम्प्लेट की जाँच करना",
83
86
  templatesAvailable: "{{count}} available to scaffold",
87
+ curatedTemplates: "चयनित टेम्पलेट",
88
+ curatedTemplatesDescription:
89
+ "समीक्षित ऐप संरचना से शुरू करें और इसे अपने अनुसार बनाएं।",
90
+ remix: "रीमिक्स",
91
+ remixTemplate: "{{name}} रीमिक्स करें",
92
+ remixAppIdLabel: "नया ऐप आईडी",
93
+ remixStarted: "{{name}} रीमिक्स शुरू हुआ",
94
+ viewLiveApp: "लाइव ऐप देखें",
95
+ alreadyInWorkspace: "वर्कस्पेस में पहले से मौजूद",
96
+ remixAppIdDescription: "नए वर्कस्पेस ऐप के लिए URL-सुरक्षित आईडी चुनें।",
97
+ integrationSetup: "इंटीग्रेशन सेटअप",
98
+ source: "स्रोत",
99
+ remixing: "रीमिक्स हो रहा है…",
100
+ remixSuccess: "टेम्पलेट रीमिक्स शुरू हुआ।",
101
+ remixError: "यह टेम्पलेट रीमिक्स नहीं हो सका",
102
+ appIdRequired: "ऐप आईडी आवश्यक है।",
84
103
  hide: "छिपाएं",
85
104
  show: "Show",
86
105
  hiddenApps: "छुपे हुए ऐप्स",
@@ -77,12 +77,32 @@ const messages = {
77
77
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
78
78
  appsInWorkspace: "Apps in {{workspace}}",
79
79
  workspaceApps: "ワークスペースアプリ",
80
+ otherApps: "その他のアプリ",
81
+ otherAppsDescription: "利用できるその他のアプリを開きます。",
82
+ availableCount: "{{count}}件利用可能",
80
83
  activeCount: "{{count}} active",
81
84
  hiddenCount: "{{count}} hidden",
82
85
  createApp: "アプリの作成",
83
86
  templates: "テンプレート",
84
87
  checkingTemplates: "利用可能なテンプレートを確認する",
85
88
  templatesAvailable: "{{count}} available to scaffold",
89
+ curatedTemplates: "厳選テンプレート",
90
+ curatedTemplatesDescription:
91
+ "レビュー済みのアプリ構成をベースに、自分用にカスタマイズできます。",
92
+ remix: "リミックス",
93
+ remixTemplate: "{{name}} をリミックス",
94
+ remixAppIdLabel: "新しいアプリ ID",
95
+ remixStarted: "{{name}} のリミックスを開始しました",
96
+ viewLiveApp: "ライブアプリを見る",
97
+ alreadyInWorkspace: "ワークスペースに追加済み",
98
+ remixAppIdDescription:
99
+ "新しいワークスペースアプリの URL セーフな ID を選択してください。",
100
+ integrationSetup: "連携の設定",
101
+ source: "提供元",
102
+ remixing: "リミックス中…",
103
+ remixSuccess: "テンプレートのリミックスを開始しました。",
104
+ remixError: "このテンプレートをリミックスできませんでした",
105
+ appIdRequired: "アプリ ID は必須です。",
86
106
  hide: "非表示",
87
107
  show: "Show",
88
108
  hiddenApps: "隠しアプリ",
@@ -76,12 +76,31 @@ const messages = {
76
76
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
77
77
  appsInWorkspace: "Apps in {{workspace}}",
78
78
  workspaceApps: "작업 공간 앱",
79
+ otherApps: "기타 앱",
80
+ otherAppsDescription: "사용할 수 있는 다른 앱을 엽니다.",
81
+ availableCount: "{{count}}개 사용 가능",
79
82
  activeCount: "{{count}} active",
80
83
  hiddenCount: "{{count}} hidden",
81
84
  createApp: "앱 만들기",
82
85
  templates: "템플릿",
83
86
  checkingTemplates: "사용 가능한 템플릿 확인 중",
84
87
  templatesAvailable: "{{count}} available to scaffold",
88
+ curatedTemplates: "엄선된 템플릿",
89
+ curatedTemplatesDescription:
90
+ "검토된 앱 구조에서 시작해 나만의 앱으로 만들어 보세요.",
91
+ remix: "리믹스",
92
+ remixTemplate: "{{name}} 리믹스",
93
+ remixAppIdLabel: "새 앱 ID",
94
+ remixStarted: "{{name}} 리믹스를 시작했습니다",
95
+ viewLiveApp: "라이브 앱 보기",
96
+ alreadyInWorkspace: "워크스페이스에 이미 있음",
97
+ remixAppIdDescription: "새 워크스페이스 앱의 URL 안전 ID를 선택하세요.",
98
+ integrationSetup: "연동 설정",
99
+ source: "소스",
100
+ remixing: "리믹스 중…",
101
+ remixSuccess: "템플릿 리믹스를 시작했습니다.",
102
+ remixError: "이 템플릿을 리믹스할 수 없습니다",
103
+ appIdRequired: "앱 ID가 필요합니다.",
85
104
  hide: "숨기기",
86
105
  show: "Show",
87
106
  hiddenApps: "숨겨진 앱",
@@ -80,12 +80,32 @@ const messages = {
80
80
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
81
81
  appsInWorkspace: "Apps in {{workspace}}",
82
82
  workspaceApps: "Aplicativos de espaço de trabalho",
83
+ otherApps: "Outros aplicativos",
84
+ otherAppsDescription: "Abra outros aplicativos disponíveis para você.",
85
+ availableCount: "{{count}} disponíveis",
83
86
  activeCount: "{{count}} active",
84
87
  hiddenCount: "{{count}} hidden",
85
88
  createApp: "Criar aplicativo",
86
89
  templates: "Modelos",
87
90
  checkingTemplates: "Verificando modelos disponíveis",
88
91
  templatesAvailable: "{{count}} available to scaffold",
92
+ curatedTemplates: "Modelos selecionados",
93
+ curatedTemplatesDescription:
94
+ "Comece com uma estrutura de app revisada e personalize-a.",
95
+ remix: "Remixar",
96
+ remixTemplate: "Remixar {{name}}",
97
+ remixAppIdLabel: "Novo ID do app",
98
+ remixStarted: "Remix de {{name}} iniciado",
99
+ viewLiveApp: "Ver app ao vivo",
100
+ alreadyInWorkspace: "Já está no workspace",
101
+ remixAppIdDescription:
102
+ "Escolha um ID seguro para URL para o novo app do workspace.",
103
+ integrationSetup: "Configuração da integração",
104
+ source: "Origem",
105
+ remixing: "Remixando…",
106
+ remixSuccess: "Remix do modelo iniciado.",
107
+ remixError: "Não foi possível remixar este modelo",
108
+ appIdRequired: "O ID do app é obrigatório.",
89
109
  hide: "Ocultar",
90
110
  show: "Show",
91
111
  hiddenApps: "Aplicativos ocultos",
@@ -73,12 +73,31 @@ const messages = {
73
73
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
74
74
  appsInWorkspace: "Apps in {{workspace}}",
75
75
  workspaceApps: "工作区应用程序",
76
+ otherApps: "其他应用",
77
+ otherAppsDescription: "打开你可以使用的其他应用。",
78
+ availableCount: "可用 {{count}} 个",
76
79
  activeCount: "{{count}} active",
77
80
  hiddenCount: "{{count}} hidden",
78
81
  createApp: "创建应用程序",
79
82
  templates: "模板",
80
83
  checkingTemplates: "检查可用模板",
81
84
  templatesAvailable: "{{count}} available to scaffold",
85
+ curatedTemplates: "精选模板",
86
+ curatedTemplatesDescription:
87
+ "从经过审核的应用结构开始,然后打造属于你的应用。",
88
+ remix: "再创作",
89
+ remixTemplate: "再创作 {{name}}",
90
+ remixAppIdLabel: "新应用 ID",
91
+ remixStarted: "已开始再创作 {{name}}",
92
+ viewLiveApp: "查看在线应用",
93
+ alreadyInWorkspace: "已在工作区中",
94
+ remixAppIdDescription: "为新的工作区应用选择一个 URL 安全的 ID。",
95
+ integrationSetup: "集成设置",
96
+ source: "来源",
97
+ remixing: "正在再创作…",
98
+ remixSuccess: "已开始再创作模板。",
99
+ remixError: "无法再创作此模板",
100
+ appIdRequired: "应用 ID 是必填项。",
82
101
  hide: "隐藏",
83
102
  show: "Show",
84
103
  hiddenApps: "隐藏的应用程序",
@@ -73,12 +73,31 @@ const messages = {
73
73
  "「{{workspace}}」工作區中的應用程式。每個應用程式都會在此工作區下取得自己的路由,並共用資料庫、驗證與代理聊天。",
74
74
  appsInWorkspace: "{{workspace}} 中的應用程式",
75
75
  workspaceApps: "工作區應用程式",
76
+ otherApps: "其他應用程式",
77
+ otherAppsDescription: "開啟你可以使用的其他應用程式。",
78
+ availableCount: "可用 {{count}} 個",
76
79
  activeCount: "{{count}} 個作用中",
77
80
  hiddenCount: "{{count}} 個已隱藏",
78
81
  createApp: "建立應用程式",
79
82
  templates: "範本",
80
83
  checkingTemplates: "檢查可用範本",
81
84
  templatesAvailable: "{{count}} 個可用於產生架構",
85
+ curatedTemplates: "精選範本",
86
+ curatedTemplatesDescription:
87
+ "從經過審核的應用程式結構開始,打造屬於你的應用程式。",
88
+ remix: "重新混搭",
89
+ remixTemplate: "重新混搭 {{name}}",
90
+ remixAppIdLabel: "新應用程式 ID",
91
+ remixStarted: "已開始重新混搭 {{name}}",
92
+ viewLiveApp: "查看線上應用程式",
93
+ alreadyInWorkspace: "已在工作區中",
94
+ remixAppIdDescription: "為新的工作區應用程式選擇 URL 安全的 ID。",
95
+ integrationSetup: "整合設定",
96
+ source: "來源",
97
+ remixing: "正在重新混搭…",
98
+ remixSuccess: "已開始重新混搭範本。",
99
+ remixError: "無法重新混搭此範本",
100
+ appIdRequired: "應用程式 ID 為必填項目。",
82
101
  hide: "隱藏",
83
102
  show: "Show",
84
103
  hiddenApps: "隱藏的應用程式",