@agent-native/core 0.107.2 → 0.109.0

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 (502) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +24 -0
  3. package/corpus/core/docs/content/actions.mdx +48 -0
  4. package/corpus/core/docs/content/locales/ar-SA/actions.mdx +38 -0
  5. package/corpus/core/docs/content/locales/de-DE/actions.mdx +38 -0
  6. package/corpus/core/docs/content/locales/es-ES/actions.mdx +38 -0
  7. package/corpus/core/docs/content/locales/fr-FR/actions.mdx +38 -0
  8. package/corpus/core/docs/content/locales/hi-IN/actions.mdx +38 -0
  9. package/corpus/core/docs/content/locales/ja-JP/actions.mdx +38 -0
  10. package/corpus/core/docs/content/locales/ko-KR/actions.mdx +38 -0
  11. package/corpus/core/docs/content/locales/pt-BR/actions.mdx +38 -0
  12. package/corpus/core/docs/content/locales/zh-CN/actions.mdx +38 -0
  13. package/corpus/core/docs/content/locales/zh-TW/actions.mdx +38 -0
  14. package/corpus/core/package.json +5 -1
  15. package/corpus/core/src/a2a/client.ts +140 -17
  16. package/corpus/core/src/a2a/handlers.ts +60 -0
  17. package/corpus/core/src/a2a/index.ts +6 -1
  18. package/corpus/core/src/a2a/invoke.ts +68 -1
  19. package/corpus/core/src/a2a/server.ts +13 -1
  20. package/corpus/core/src/a2a/types.ts +16 -0
  21. package/corpus/core/src/a2a-claims.ts +52 -0
  22. package/corpus/core/src/action.ts +7 -2
  23. package/corpus/core/src/agent/production-agent.ts +10 -4
  24. package/corpus/core/src/audit/record.ts +6 -0
  25. package/corpus/core/src/client/AssistantChat.tsx +648 -603
  26. package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
  27. package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
  28. package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
  29. package/corpus/core/src/client/analytics.ts +84 -0
  30. package/corpus/core/src/client/chat/message-components.tsx +94 -22
  31. package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
  32. package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  33. package/corpus/core/src/client/chat-thread-url.ts +11 -0
  34. package/corpus/core/src/client/error-capture.ts +12 -0
  35. package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
  36. package/corpus/core/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
  37. package/corpus/core/src/client/feature-flags/helpers.ts +77 -0
  38. package/corpus/core/src/client/feature-flags/index.ts +13 -0
  39. package/corpus/core/src/client/feature-flags/types.ts +29 -0
  40. package/corpus/core/src/client/feature-flags/use-feature-flag.ts +26 -0
  41. package/corpus/core/src/client/index.ts +13 -0
  42. package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
  43. package/corpus/core/src/client/session-replay.ts +31 -0
  44. package/corpus/core/src/extensions/actions.ts +2 -14
  45. package/corpus/core/src/extensions/routes.ts +1 -1
  46. package/corpus/core/src/extensions/store.ts +1 -1
  47. package/corpus/core/src/feature-flags/a2a-action-route.ts +56 -0
  48. package/corpus/core/src/feature-flags/actions/get-feature-flags.ts +24 -0
  49. package/corpus/core/src/feature-flags/actions/list-feature-flags.ts +69 -0
  50. package/corpus/core/src/feature-flags/actions/set-feature-flag.ts +89 -0
  51. package/corpus/core/src/feature-flags/index.ts +21 -0
  52. package/corpus/core/src/feature-flags/permissions.ts +53 -0
  53. package/corpus/core/src/feature-flags/plugin.ts +44 -0
  54. package/corpus/core/src/feature-flags/registry.ts +96 -0
  55. package/corpus/core/src/feature-flags/store.ts +176 -0
  56. package/corpus/core/src/index.ts +15 -0
  57. package/corpus/core/src/localization/default-messages.ts +50 -0
  58. package/corpus/core/src/mcp/build-server.ts +2 -2
  59. package/corpus/core/src/progress/actions.ts +4 -2
  60. package/corpus/core/src/provider-api/index.ts +205 -105
  61. package/corpus/core/src/scripts/call-agent.ts +137 -17
  62. package/corpus/core/src/server/action-discovery.ts +12 -0
  63. package/corpus/core/src/server/action-routes.ts +47 -5
  64. package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +40 -0
  65. package/corpus/core/src/server/agent-chat-plugin.ts +31 -0
  66. package/corpus/core/src/server/index.ts +1 -0
  67. package/corpus/core/src/settings/org-settings.ts +13 -0
  68. package/corpus/core/src/settings/store.ts +57 -0
  69. package/corpus/core/src/styles/agent-conversation.css +7 -0
  70. package/corpus/core/src/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
  71. package/corpus/core/src/templates/default/AGENTS.md +1 -0
  72. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
  73. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
  74. package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
  75. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
  76. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
  77. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
  78. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
  79. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
  80. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
  81. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
  82. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
  83. package/corpus/core/src/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
  84. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
  85. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  86. package/corpus/core/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
  87. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  88. package/corpus/core/src/templates/workspace-core/AGENTS.md +1 -1
  89. package/corpus/core/src/templates/workspace-root/AGENTS.md +1 -1
  90. package/corpus/core/src/vite/action-types-plugin.ts +12 -0
  91. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
  92. package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +169 -0
  93. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
  94. package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
  95. package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
  96. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
  97. package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
  98. package/corpus/templates/analytics/AGENTS.md +37 -16
  99. package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
  100. package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
  101. package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
  102. package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
  103. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
  104. package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
  105. package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
  106. package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
  107. package/corpus/templates/analytics/actions/list-workspace-feature-flags.ts +15 -0
  108. package/corpus/templates/analytics/actions/navigate.ts +2 -2
  109. package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
  110. package/corpus/templates/analytics/actions/set-workspace-feature-flag.ts +45 -0
  111. package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
  112. package/corpus/templates/analytics/actions/view-screen.ts +13 -0
  113. package/corpus/templates/analytics/app/components/agents/FeatureFlagsFleetPanel.tsx +243 -0
  114. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
  115. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +11 -3
  116. package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
  117. package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
  118. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +3 -1
  119. package/corpus/templates/analytics/app/i18n/zh-TW.ts +30 -0
  120. package/corpus/templates/analytics/app/i18n-data.ts +385 -0
  121. package/corpus/templates/analytics/app/pages/Agents.tsx +22 -2
  122. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
  123. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
  124. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
  125. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
  126. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
  127. package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
  128. package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-17-manage-feature-flag-rollouts-across-your-organization-s-apps.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
  133. package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
  134. package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
  135. package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
  136. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
  137. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
  138. package/corpus/templates/analytics/server/lib/db-admin-connections.ts +13 -5
  139. package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
  140. package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
  141. package/corpus/templates/analytics/server/lib/gong.ts +54 -66
  142. package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
  143. package/corpus/templates/analytics/server/lib/notion.ts +83 -8
  144. package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
  145. package/corpus/templates/analytics/server/lib/slack.ts +242 -90
  146. package/corpus/templates/analytics/server/lib/workspace-feature-flags.ts +347 -0
  147. package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
  148. package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
  149. package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
  150. package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
  151. package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +169 -0
  152. package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +169 -0
  153. package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +169 -0
  154. package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
  155. package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +169 -0
  156. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
  157. package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
  158. package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
  159. package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
  160. package/corpus/templates/clips/app/entry.client.tsx +6 -1
  161. package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
  162. package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
  163. package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
  164. package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
  165. package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
  166. package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
  167. package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
  168. package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
  169. package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
  170. package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
  171. package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
  172. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
  173. package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
  174. package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
  175. package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
  176. package/corpus/templates/clips/desktop/src/app.tsx +1 -1
  177. package/corpus/templates/clips/server/plugins/feature-flags.ts +11 -0
  178. package/corpus/templates/clips/shared/feature-flags.ts +30 -37
  179. package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +169 -0
  180. package/corpus/templates/content/app/entry.client.tsx +6 -1
  181. package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +169 -0
  182. package/corpus/templates/design/AGENTS.md +5 -3
  183. package/corpus/templates/design/actions/add-fusion-screens.ts +4 -6
  184. package/corpus/templates/design/actions/apply-fusion-edits.ts +4 -6
  185. package/corpus/templates/design/actions/create-fusion-app.ts +5 -4
  186. package/corpus/templates/design/actions/deploy-fusion-app.ts +4 -3
  187. package/corpus/templates/design/actions/get-fusion-deploy-status.ts +4 -6
  188. package/corpus/templates/design/actions/list-fusion-edits.ts +4 -3
  189. package/corpus/templates/design/actions/push-fusion-app.ts +4 -6
  190. package/corpus/templates/design/actions/queue-fusion-edit.ts +4 -3
  191. package/corpus/templates/design/actions/send-fusion-message.ts +4 -6
  192. package/corpus/templates/design/actions/sync-fusion-app.ts +4 -3
  193. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +1 -1
  194. package/corpus/templates/design/app/pages/Index.tsx +8 -6
  195. package/corpus/templates/design/server/plugins/feature-flags.ts +5 -0
  196. package/corpus/templates/design/shared/full-app.ts +10 -7
  197. package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +169 -0
  198. package/corpus/templates/dispatch/AGENTS.md +5 -0
  199. package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
  200. package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
  201. package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +169 -0
  202. package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +169 -0
  203. package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +169 -0
  204. package/corpus/templates/mail/app/entry.client.tsx +6 -1
  205. package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +169 -0
  206. package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +169 -0
  207. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
  208. package/corpus/templates/slides/.env.example +0 -1
  209. package/corpus/templates/slides/AGENTS.md +4 -0
  210. package/corpus/templates/slides/DEVELOPING.md +2 -2
  211. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
  212. package/corpus/templates/slides/actions/logo-config.ts +6 -7
  213. package/corpus/templates/slides/actions/search-images.ts +11 -39
  214. package/corpus/templates/slides/actions/search-logos.ts +5 -52
  215. package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
  216. package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
  217. package/corpus/templates/slides/app/entry.client.tsx +6 -1
  218. package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
  219. package/corpus/templates/slides/server/register-secrets.ts +30 -0
  220. package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +169 -0
  221. package/dist/a2a/client.d.ts +38 -1
  222. package/dist/a2a/client.d.ts.map +1 -1
  223. package/dist/a2a/client.js +81 -12
  224. package/dist/a2a/client.js.map +1 -1
  225. package/dist/a2a/handlers.d.ts.map +1 -1
  226. package/dist/a2a/handlers.js +47 -0
  227. package/dist/a2a/handlers.js.map +1 -1
  228. package/dist/a2a/index.d.ts +4 -4
  229. package/dist/a2a/index.d.ts.map +1 -1
  230. package/dist/a2a/index.js +2 -2
  231. package/dist/a2a/index.js.map +1 -1
  232. package/dist/a2a/invoke.d.ts +26 -2
  233. package/dist/a2a/invoke.d.ts.map +1 -1
  234. package/dist/a2a/invoke.js +30 -1
  235. package/dist/a2a/invoke.js.map +1 -1
  236. package/dist/a2a/server.d.ts.map +1 -1
  237. package/dist/a2a/server.js +14 -1
  238. package/dist/a2a/server.js.map +1 -1
  239. package/dist/a2a/types.d.ts +12 -0
  240. package/dist/a2a/types.d.ts.map +1 -1
  241. package/dist/a2a/types.js.map +1 -1
  242. package/dist/a2a-claims.d.ts +10 -0
  243. package/dist/a2a-claims.d.ts.map +1 -0
  244. package/dist/a2a-claims.js +41 -0
  245. package/dist/a2a-claims.js.map +1 -0
  246. package/dist/action.d.ts +7 -2
  247. package/dist/action.d.ts.map +1 -1
  248. package/dist/action.js.map +1 -1
  249. package/dist/agent/production-agent.d.ts +5 -0
  250. package/dist/agent/production-agent.d.ts.map +1 -1
  251. package/dist/agent/production-agent.js +5 -3
  252. package/dist/agent/production-agent.js.map +1 -1
  253. package/dist/audit/record.d.ts +3 -0
  254. package/dist/audit/record.d.ts.map +1 -1
  255. package/dist/audit/record.js +3 -0
  256. package/dist/audit/record.js.map +1 -1
  257. package/dist/client/AssistantChat.d.ts +14 -1
  258. package/dist/client/AssistantChat.d.ts.map +1 -1
  259. package/dist/client/AssistantChat.js +158 -136
  260. package/dist/client/AssistantChat.js.map +1 -1
  261. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  262. package/dist/client/MultiTabAssistantChat.js +27 -4
  263. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  264. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  265. package/dist/client/agent-chat-adapter.js +21 -39
  266. package/dist/client/agent-chat-adapter.js.map +1 -1
  267. package/dist/client/agent-sidebar-state.d.ts +1 -0
  268. package/dist/client/agent-sidebar-state.d.ts.map +1 -1
  269. package/dist/client/agent-sidebar-state.js +4 -0
  270. package/dist/client/agent-sidebar-state.js.map +1 -1
  271. package/dist/client/analytics.d.ts +14 -0
  272. package/dist/client/analytics.d.ts.map +1 -1
  273. package/dist/client/analytics.js +67 -0
  274. package/dist/client/analytics.js.map +1 -1
  275. package/dist/client/chat/message-components.d.ts +8 -0
  276. package/dist/client/chat/message-components.d.ts.map +1 -1
  277. package/dist/client/chat/message-components.js +62 -19
  278. package/dist/client/chat/message-components.js.map +1 -1
  279. package/dist/client/chat/tool-call-display.d.ts +6 -0
  280. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  281. package/dist/client/chat/tool-call-display.js +83 -14
  282. package/dist/client/chat/tool-call-display.js.map +1 -1
  283. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
  284. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
  285. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
  286. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
  287. package/dist/client/chat-thread-url.d.ts +2 -0
  288. package/dist/client/chat-thread-url.d.ts.map +1 -0
  289. package/dist/client/chat-thread-url.js +12 -0
  290. package/dist/client/chat-thread-url.js.map +1 -0
  291. package/dist/client/error-capture.d.ts.map +1 -1
  292. package/dist/client/error-capture.js +7 -0
  293. package/dist/client/error-capture.js.map +1 -1
  294. package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
  295. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  296. package/dist/client/extensions/ExtensionSlot.js +28 -3
  297. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  298. package/dist/client/feature-flags/FeatureFlagsPanel.d.ts +10 -0
  299. package/dist/client/feature-flags/FeatureFlagsPanel.d.ts.map +1 -0
  300. package/dist/client/feature-flags/FeatureFlagsPanel.js +143 -0
  301. package/dist/client/feature-flags/FeatureFlagsPanel.js.map +1 -0
  302. package/dist/client/feature-flags/helpers.d.ts +16 -0
  303. package/dist/client/feature-flags/helpers.d.ts.map +1 -0
  304. package/dist/client/feature-flags/helpers.js +50 -0
  305. package/dist/client/feature-flags/helpers.js.map +1 -0
  306. package/dist/client/feature-flags/index.d.ts +5 -0
  307. package/dist/client/feature-flags/index.d.ts.map +1 -0
  308. package/dist/client/feature-flags/index.js +4 -0
  309. package/dist/client/feature-flags/index.js.map +1 -0
  310. package/dist/client/feature-flags/types.d.ts +27 -0
  311. package/dist/client/feature-flags/types.d.ts.map +1 -0
  312. package/dist/client/feature-flags/types.js +2 -0
  313. package/dist/client/feature-flags/types.js.map +1 -0
  314. package/dist/client/feature-flags/use-feature-flag.d.ts +8 -0
  315. package/dist/client/feature-flags/use-feature-flag.d.ts.map +1 -0
  316. package/dist/client/feature-flags/use-feature-flag.js +15 -0
  317. package/dist/client/feature-flags/use-feature-flag.js.map +1 -0
  318. package/dist/client/index.d.ts +2 -1
  319. package/dist/client/index.d.ts.map +1 -1
  320. package/dist/client/index.js +2 -1
  321. package/dist/client/index.js.map +1 -1
  322. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  323. package/dist/client/route-chunk-recovery.js +14 -9
  324. package/dist/client/route-chunk-recovery.js.map +1 -1
  325. package/dist/client/session-replay.d.ts +15 -0
  326. package/dist/client/session-replay.d.ts.map +1 -1
  327. package/dist/client/session-replay.js +20 -0
  328. package/dist/client/session-replay.js.map +1 -1
  329. package/dist/collab/struct-routes.d.ts +1 -1
  330. package/dist/extensions/actions.d.ts.map +1 -1
  331. package/dist/extensions/actions.js +2 -10
  332. package/dist/extensions/actions.js.map +1 -1
  333. package/dist/extensions/routes.d.ts.map +1 -1
  334. package/dist/extensions/routes.js +1 -1
  335. package/dist/extensions/routes.js.map +1 -1
  336. package/dist/extensions/store.js +1 -1
  337. package/dist/extensions/store.js.map +1 -1
  338. package/dist/feature-flags/a2a-action-route.d.ts +14 -0
  339. package/dist/feature-flags/a2a-action-route.d.ts.map +1 -0
  340. package/dist/feature-flags/a2a-action-route.js +50 -0
  341. package/dist/feature-flags/a2a-action-route.js.map +1 -0
  342. package/dist/feature-flags/actions/get-feature-flags.d.ts +3 -0
  343. package/dist/feature-flags/actions/get-feature-flags.d.ts.map +1 -0
  344. package/dist/feature-flags/actions/get-feature-flags.js +18 -0
  345. package/dist/feature-flags/actions/get-feature-flags.js.map +1 -0
  346. package/dist/feature-flags/actions/list-feature-flags.d.ts +28 -0
  347. package/dist/feature-flags/actions/list-feature-flags.d.ts.map +1 -0
  348. package/dist/feature-flags/actions/list-feature-flags.js +60 -0
  349. package/dist/feature-flags/actions/list-feature-flags.js.map +1 -0
  350. package/dist/feature-flags/actions/set-feature-flag.d.ts +26 -0
  351. package/dist/feature-flags/actions/set-feature-flag.d.ts.map +1 -0
  352. package/dist/feature-flags/actions/set-feature-flag.js +78 -0
  353. package/dist/feature-flags/actions/set-feature-flag.js.map +1 -0
  354. package/dist/feature-flags/index.d.ts +5 -0
  355. package/dist/feature-flags/index.d.ts.map +1 -0
  356. package/dist/feature-flags/index.js +5 -0
  357. package/dist/feature-flags/index.js.map +1 -0
  358. package/dist/feature-flags/permissions.d.ts +13 -0
  359. package/dist/feature-flags/permissions.d.ts.map +1 -0
  360. package/dist/feature-flags/permissions.js +37 -0
  361. package/dist/feature-flags/permissions.js.map +1 -0
  362. package/dist/feature-flags/plugin.d.ts +17 -0
  363. package/dist/feature-flags/plugin.d.ts.map +1 -0
  364. package/dist/feature-flags/plugin.js +29 -0
  365. package/dist/feature-flags/plugin.js.map +1 -0
  366. package/dist/feature-flags/registry.d.ts +23 -0
  367. package/dist/feature-flags/registry.d.ts.map +1 -0
  368. package/dist/feature-flags/registry.js +59 -0
  369. package/dist/feature-flags/registry.js.map +1 -0
  370. package/dist/feature-flags/store.d.ts +31 -0
  371. package/dist/feature-flags/store.d.ts.map +1 -0
  372. package/dist/feature-flags/store.js +124 -0
  373. package/dist/feature-flags/store.js.map +1 -0
  374. package/dist/index.d.ts +1 -0
  375. package/dist/index.d.ts.map +1 -1
  376. package/dist/index.js +1 -0
  377. package/dist/index.js.map +1 -1
  378. package/dist/localization/default-messages.d.ts +45 -0
  379. package/dist/localization/default-messages.d.ts.map +1 -1
  380. package/dist/localization/default-messages.js +45 -0
  381. package/dist/localization/default-messages.js.map +1 -1
  382. package/dist/mcp/build-server.d.ts +2 -0
  383. package/dist/mcp/build-server.d.ts.map +1 -1
  384. package/dist/mcp/build-server.js +2 -2
  385. package/dist/mcp/build-server.js.map +1 -1
  386. package/dist/notifications/routes.d.ts +2 -2
  387. package/dist/progress/actions.d.ts.map +1 -1
  388. package/dist/progress/actions.js +3 -2
  389. package/dist/progress/actions.js.map +1 -1
  390. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  391. package/dist/provider-api/index.d.ts.map +1 -1
  392. package/dist/provider-api/index.js +91 -8
  393. package/dist/provider-api/index.js.map +1 -1
  394. package/dist/resources/handlers.d.ts +3 -3
  395. package/dist/scripts/call-agent.d.ts.map +1 -1
  396. package/dist/scripts/call-agent.js +107 -16
  397. package/dist/scripts/call-agent.js.map +1 -1
  398. package/dist/server/action-discovery.d.ts.map +1 -1
  399. package/dist/server/action-discovery.js +12 -0
  400. package/dist/server/action-discovery.js.map +1 -1
  401. package/dist/server/action-routes.d.ts +3 -0
  402. package/dist/server/action-routes.d.ts.map +1 -1
  403. package/dist/server/action-routes.js +45 -5
  404. package/dist/server/action-routes.js.map +1 -1
  405. package/dist/server/agent-chat/action-filters-a2a.d.ts +6 -0
  406. package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
  407. package/dist/server/agent-chat/action-filters-a2a.js +27 -0
  408. package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
  409. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  410. package/dist/server/agent-chat-plugin.js +27 -1
  411. package/dist/server/agent-chat-plugin.js.map +1 -1
  412. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  413. package/dist/server/index.d.ts +1 -0
  414. package/dist/server/index.d.ts.map +1 -1
  415. package/dist/server/index.js +1 -0
  416. package/dist/server/index.js.map +1 -1
  417. package/dist/server/transcribe-voice.d.ts +1 -1
  418. package/dist/settings/org-settings.d.ts +2 -0
  419. package/dist/settings/org-settings.d.ts.map +1 -1
  420. package/dist/settings/org-settings.js +5 -1
  421. package/dist/settings/org-settings.js.map +1 -1
  422. package/dist/settings/store.d.ts +8 -0
  423. package/dist/settings/store.d.ts.map +1 -1
  424. package/dist/settings/store.js +48 -0
  425. package/dist/settings/store.js.map +1 -1
  426. package/dist/styles/agent-conversation.css +7 -0
  427. package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
  428. package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
  429. package/dist/templates/default/AGENTS.md +1 -0
  430. package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
  431. package/dist/templates/default/app/i18n/de-DE.ts +20 -0
  432. package/dist/templates/default/app/i18n/en-US.ts +20 -0
  433. package/dist/templates/default/app/i18n/es-ES.ts +20 -0
  434. package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
  435. package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
  436. package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
  437. package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
  438. package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
  439. package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
  440. package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
  441. package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
  442. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
  443. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  444. package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
  445. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  446. package/dist/templates/workspace-core/AGENTS.md +1 -1
  447. package/dist/templates/workspace-root/AGENTS.md +1 -1
  448. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  449. package/dist/vite/action-types-plugin.js +12 -0
  450. package/dist/vite/action-types-plugin.js.map +1 -1
  451. package/docs/content/actions.mdx +48 -0
  452. package/docs/content/locales/ar-SA/actions.mdx +38 -0
  453. package/docs/content/locales/de-DE/actions.mdx +38 -0
  454. package/docs/content/locales/es-ES/actions.mdx +38 -0
  455. package/docs/content/locales/fr-FR/actions.mdx +38 -0
  456. package/docs/content/locales/hi-IN/actions.mdx +38 -0
  457. package/docs/content/locales/ja-JP/actions.mdx +38 -0
  458. package/docs/content/locales/ko-KR/actions.mdx +38 -0
  459. package/docs/content/locales/pt-BR/actions.mdx +38 -0
  460. package/docs/content/locales/zh-CN/actions.mdx +38 -0
  461. package/docs/content/locales/zh-TW/actions.mdx +38 -0
  462. package/package.json +5 -1
  463. package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
  464. package/src/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
  465. package/src/templates/default/AGENTS.md +1 -0
  466. package/src/templates/default/app/i18n/ar-SA.ts +20 -0
  467. package/src/templates/default/app/i18n/de-DE.ts +20 -0
  468. package/src/templates/default/app/i18n/en-US.ts +20 -0
  469. package/src/templates/default/app/i18n/es-ES.ts +20 -0
  470. package/src/templates/default/app/i18n/fr-FR.ts +21 -0
  471. package/src/templates/default/app/i18n/hi-IN.ts +19 -0
  472. package/src/templates/default/app/i18n/ja-JP.ts +20 -0
  473. package/src/templates/default/app/i18n/ko-KR.ts +19 -0
  474. package/src/templates/default/app/i18n/pt-BR.ts +20 -0
  475. package/src/templates/default/app/i18n/zh-CN.ts +19 -0
  476. package/src/templates/default/app/i18n/zh-TW.ts +19 -0
  477. package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
  478. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
  479. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  480. package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
  481. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  482. package/src/templates/workspace-core/AGENTS.md +1 -1
  483. package/src/templates/workspace-root/AGENTS.md +1 -1
  484. package/corpus/templates/analytics/server/handlers/github.ts +0 -200
  485. package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
  486. package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
  487. package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
  488. package/corpus/templates/analytics/server/lib/github.ts +0 -660
  489. package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
  490. package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
  491. package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
  492. package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
  493. package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
  494. package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
  495. package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
  496. package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
  497. package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
  498. package/corpus/templates/clips/actions/get-feature-flags.ts +0 -30
  499. package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
  500. package/corpus/templates/slides/actions/image-search.ts +0 -64
  501. package/corpus/templates/slides/actions/import-github.ts +0 -182
  502. package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
@@ -459,6 +459,27 @@ const enUS = {
459
459
  deleteConnectionTitle: "Delete database connection?",
460
460
  deleteConnectionDescription:
461
461
  "This removes {{name}} from Analytics and deletes its stored connection secrets. The target app database is not modified.",
462
+ featureFlags: "Feature flags",
463
+ featureFlagsDescription:
464
+ "Review registered app flags and make deliberate, reversible rollout changes.",
465
+ reloadFlags: "Reload flags",
466
+ loading: "Loading",
467
+ flagsUnavailable: "Feature flags are unavailable",
468
+ flagsUnreachable:
469
+ "The workspace directory could not be reached. Retry when its connection is available.",
470
+ flagsEmpty: "No workspace apps reported flags",
471
+ flagsEmptyDetail:
472
+ "Registered flags will appear here when connected apps are ready.",
473
+ flagsNotReady:
474
+ "This app is {{status}}. Its flag state is not assumed to be off.",
475
+ noFlagDefinitions: "This ready app has no registered flag definitions.",
476
+ noFlagDescription: "No description supplied.",
477
+ selected: "Selected",
478
+ openFlag: "Open feature flag",
479
+ confirm: "Confirm",
480
+ name: "Name",
481
+ appId: "App ID",
482
+ flagKey: "Feature flag",
462
483
  },
463
484
  providerCorpusNotifier: {
464
485
  completed: "Provider corpus job completed",
@@ -887,12 +908,25 @@ const enUS = {
887
908
  chartTypePie: "Pie",
888
909
  chartTypeMetric: "Metric",
889
910
  chartTypeTable: "Table",
911
+ chartTypeExtension: "Extension",
890
912
  failedToSavePanel: "Failed to save panel",
891
913
  failedToFormatSql: "Failed to format SQL",
892
914
  title: "Title",
893
915
  titlePlaceholder: "e.g. Weekly signups",
894
916
  chartType: "Chart type",
895
917
  source: "Source",
918
+ extensionDisplay: "Extension display",
919
+ sharedExtension: "Shared extension",
920
+ perViewerSlot: "Per-viewer slot",
921
+ extension: "Extension",
922
+ loadingExtensions: "Loading extensions...",
923
+ selectExtension: "Select an extension",
924
+ noExtensions: "No visible extensions. Create or share one first.",
925
+ sharedExtensionHelp:
926
+ "The selected extension is shared with this dashboard and appears in scheduled reports. Viewers still need access to the extension.",
927
+ slotIdOptional: "Slot ID (optional)",
928
+ perViewerSlotHelp:
929
+ "Each viewer installs their own extension. Scheduled reports may show an empty slot. Leave blank to generate a stable ID.",
896
930
  sectionColumns: "Section columns",
897
931
  format: "Format",
898
932
  filterInterpolation: "Use {{example}} to interpolate filter values.",
@@ -1331,12 +1365,25 @@ const analyticsSliceTranslations: {
1331
1365
  chartTypePie: "馅饼",
1332
1366
  chartTypeMetric: "公制",
1333
1367
  chartTypeTable: "桌子",
1368
+ chartTypeExtension: "扩展",
1334
1369
  failedToSavePanel: "保存面板失败",
1335
1370
  failedToFormatSql: "格式化SQL失败",
1336
1371
  title: "标题",
1337
1372
  titlePlaceholder: "例如每周注册人数",
1338
1373
  chartType: "图表类型",
1339
1374
  source: "来源",
1375
+ extensionDisplay: "扩展显示方式",
1376
+ sharedExtension: "共享扩展",
1377
+ perViewerSlot: "每位查看者的插槽",
1378
+ extension: "扩展",
1379
+ loadingExtensions: "正在加载扩展...",
1380
+ selectExtension: "选择扩展",
1381
+ noExtensions: "没有可见的扩展。请先创建或共享一个。",
1382
+ sharedExtensionHelp:
1383
+ "所选扩展会与此仪表板共享并显示在计划报告中。查看者仍需拥有该扩展的访问权限。",
1384
+ slotIdOptional: "插槽 ID(可选)",
1385
+ perViewerSlotHelp:
1386
+ "每位查看者各自安装扩展。计划报告可能显示空插槽。留空即可生成稳定 ID。",
1340
1387
  sectionColumns: "剖面列",
1341
1388
  format: "格式",
1342
1389
  filterInterpolation: "使用 {{example}} 插值滤波器值。",
@@ -1606,12 +1653,25 @@ const analyticsSliceTranslations: {
1606
1653
  chartTypePie: "Pastel",
1607
1654
  chartTypeMetric: "Métrico",
1608
1655
  chartTypeTable: "Mesa",
1656
+ chartTypeExtension: "Extensión",
1609
1657
  failedToSavePanel: "No se pudo guardar el panel",
1610
1658
  failedToFormatSql: "No se pudo formatear SQL",
1611
1659
  title: "Título",
1612
1660
  titlePlaceholder: "p.ej. Inscripciones semanales",
1613
1661
  chartType: "Tipo de gráfico",
1614
1662
  source: "Fuente",
1663
+ extensionDisplay: "Visualización de extensión",
1664
+ sharedExtension: "Extensión compartida",
1665
+ perViewerSlot: "Espacio por usuario",
1666
+ extension: "Extensión",
1667
+ loadingExtensions: "Cargando extensiones...",
1668
+ selectExtension: "Selecciona una extensión",
1669
+ noExtensions: "No hay extensiones visibles. Crea o comparte una primero.",
1670
+ sharedExtensionHelp:
1671
+ "La extensión seleccionada se comparte con este panel y aparece en los informes programados. Los usuarios aún necesitan acceso a ella.",
1672
+ slotIdOptional: "ID del espacio (opcional)",
1673
+ perViewerSlotHelp:
1674
+ "Cada usuario instala su propia extensión. Los informes programados pueden mostrar un espacio vacío. Déjalo en blanco para generar un ID estable.",
1615
1675
  sectionColumns: "Columnas de sección",
1616
1676
  format: "Formato",
1617
1677
  filterInterpolation:
@@ -1897,12 +1957,25 @@ const analyticsSliceTranslations: {
1897
1957
  chartTypePie: "Tarte",
1898
1958
  chartTypeMetric: "Métrique",
1899
1959
  chartTypeTable: "Tableau",
1960
+ chartTypeExtension: "Extension",
1900
1961
  failedToSavePanel: "Échec de l'enregistrement du panneau",
1901
1962
  failedToFormatSql: "Échec du formatage du SQL",
1902
1963
  title: "Titre",
1903
1964
  titlePlaceholder: "par ex. Inscriptions hebdomadaires",
1904
1965
  chartType: "Type de graphique",
1905
1966
  source: "Source de données",
1967
+ extensionDisplay: "Affichage de l'extension",
1968
+ sharedExtension: "Extension partagée",
1969
+ perViewerSlot: "Emplacement par utilisateur",
1970
+ extension: "Extension",
1971
+ loadingExtensions: "Chargement des extensions...",
1972
+ selectExtension: "Sélectionner une extension",
1973
+ noExtensions: "Aucune extension visible. Créez-en ou partagez-en une.",
1974
+ sharedExtensionHelp:
1975
+ "L'extension sélectionnée est partagée avec ce tableau de bord et apparaît dans les rapports planifiés. Les utilisateurs doivent toujours y avoir accès.",
1976
+ slotIdOptional: "ID de l'emplacement (facultatif)",
1977
+ perViewerSlotHelp:
1978
+ "Chaque utilisateur installe sa propre extension. Les rapports planifiés peuvent afficher un emplacement vide. Laissez ce champ vide pour générer un ID stable.",
1906
1979
  sectionColumns: "Colonnes de section",
1907
1980
  format: "Mettre en forme",
1908
1981
  filterInterpolation:
@@ -2186,12 +2259,26 @@ const analyticsSliceTranslations: {
2186
2259
  chartTypePie: "Torte",
2187
2260
  chartTypeMetric: "Metrisch",
2188
2261
  chartTypeTable: "Tisch",
2262
+ chartTypeExtension: "Erweiterung",
2189
2263
  failedToSavePanel: "Das Panel konnte nicht gespeichert werden",
2190
2264
  failedToFormatSql: "SQL konnte nicht formatiert werden",
2191
2265
  title: "Titel",
2192
2266
  titlePlaceholder: "z.B. Wöchentliche Anmeldungen",
2193
2267
  chartType: "Diagrammtyp",
2194
2268
  source: "Datenquelle",
2269
+ extensionDisplay: "Erweiterungsanzeige",
2270
+ sharedExtension: "Geteilte Erweiterung",
2271
+ perViewerSlot: "Slot pro Betrachter",
2272
+ extension: "Erweiterung",
2273
+ loadingExtensions: "Erweiterungen werden geladen...",
2274
+ selectExtension: "Erweiterung auswählen",
2275
+ noExtensions:
2276
+ "Keine sichtbaren Erweiterungen. Erstellen oder teilen Sie zuerst eine.",
2277
+ sharedExtensionHelp:
2278
+ "Die ausgewählte Erweiterung wird mit diesem Dashboard geteilt und erscheint in geplanten Berichten. Betrachter benötigen weiterhin Zugriff darauf.",
2279
+ slotIdOptional: "Slot-ID (optional)",
2280
+ perViewerSlotHelp:
2281
+ "Jeder Betrachter installiert eine eigene Erweiterung. Geplante Berichte können einen leeren Slot zeigen. Leer lassen, um eine stabile ID zu erzeugen.",
2195
2282
  sectionColumns: "Abschnittsspalten",
2196
2283
  format: "Formatieren",
2197
2284
  filterInterpolation:
@@ -2471,12 +2558,26 @@ const analyticsSliceTranslations: {
2471
2558
  chartTypePie: "パイ",
2472
2559
  chartTypeMetric: "メトリック",
2473
2560
  chartTypeTable: "テーブル",
2561
+ chartTypeExtension: "拡張機能",
2474
2562
  failedToSavePanel: "パネルの保存に失敗しました",
2475
2563
  failedToFormatSql: "SQLのフォーマットに失敗しました",
2476
2564
  title: "タイトル",
2477
2565
  titlePlaceholder: "例えば毎週のサインアップ",
2478
2566
  chartType: "グラフの種類",
2479
2567
  source: "ソース",
2568
+ extensionDisplay: "拡張機能の表示",
2569
+ sharedExtension: "共有拡張機能",
2570
+ perViewerSlot: "閲覧者ごとのスロット",
2571
+ extension: "拡張機能",
2572
+ loadingExtensions: "拡張機能を読み込んでいます...",
2573
+ selectExtension: "拡張機能を選択",
2574
+ noExtensions:
2575
+ "表示できる拡張機能がありません。先に作成または共有してください。",
2576
+ sharedExtensionHelp:
2577
+ "選択した拡張機能はこのダッシュボードと共有され、スケジュール済みレポートにも表示されます。閲覧者には拡張機能へのアクセス権が必要です。",
2578
+ slotIdOptional: "スロット ID(任意)",
2579
+ perViewerSlotHelp:
2580
+ "各閲覧者が自分の拡張機能をインストールします。スケジュール済みレポートでは空のスロットが表示される場合があります。空欄にすると安定した ID が生成されます。",
2480
2581
  sectionColumns: "セクション列",
2481
2582
  format: "形式",
2482
2583
  filterInterpolation:
@@ -2750,12 +2851,26 @@ const analyticsSliceTranslations: {
2750
2851
  chartTypePie: "파이",
2751
2852
  chartTypeMetric: "미터법",
2752
2853
  chartTypeTable: "테이블",
2854
+ chartTypeExtension: "확장 프로그램",
2753
2855
  failedToSavePanel: "패널을 저장하지 못했습니다.",
2754
2856
  failedToFormatSql: "SQL 포맷 실패",
2755
2857
  title: "제목",
2756
2858
  titlePlaceholder: "예를 들어 주간 가입",
2757
2859
  chartType: "차트 종류",
2758
2860
  source: "소스",
2861
+ extensionDisplay: "확장 프로그램 표시",
2862
+ sharedExtension: "공유 확장 프로그램",
2863
+ perViewerSlot: "사용자별 슬롯",
2864
+ extension: "확장 프로그램",
2865
+ loadingExtensions: "확장 프로그램을 불러오는 중...",
2866
+ selectExtension: "확장 프로그램 선택",
2867
+ noExtensions:
2868
+ "표시할 확장 프로그램이 없습니다. 먼저 만들거나 공유하세요.",
2869
+ sharedExtensionHelp:
2870
+ "선택한 확장 프로그램은 이 대시보드와 공유되며 예약 보고서에 표시됩니다. 사용자는 해당 확장 프로그램에 대한 액세스 권한이 필요합니다.",
2871
+ slotIdOptional: "슬롯 ID(선택 사항)",
2872
+ perViewerSlotHelp:
2873
+ "각 사용자가 자신의 확장 프로그램을 설치합니다. 예약 보고서에는 빈 슬롯이 표시될 수 있습니다. 비워 두면 안정적인 ID가 생성됩니다.",
2759
2874
  sectionColumns: "섹션 열",
2760
2875
  format: "체재",
2761
2876
  filterInterpolation: "{{example}}를 사용하여 필터 값을 보간합니다.",
@@ -3028,12 +3143,26 @@ const analyticsSliceTranslations: {
3028
3143
  chartTypePie: "Torta",
3029
3144
  chartTypeMetric: "Métrica",
3030
3145
  chartTypeTable: "Mesa",
3146
+ chartTypeExtension: "Extensão",
3031
3147
  failedToSavePanel: "Falha ao salvar painel",
3032
3148
  failedToFormatSql: "Falha ao formatar SQL",
3033
3149
  title: "Título",
3034
3150
  titlePlaceholder: "por exemplo Inscrições semanais",
3035
3151
  chartType: "Tipo de gráfico",
3036
3152
  source: "Fonte",
3153
+ extensionDisplay: "Exibição da extensão",
3154
+ sharedExtension: "Extensão compartilhada",
3155
+ perViewerSlot: "Slot por usuário",
3156
+ extension: "Extensão",
3157
+ loadingExtensions: "Carregando extensões...",
3158
+ selectExtension: "Selecione uma extensão",
3159
+ noExtensions:
3160
+ "Nenhuma extensão visível. Crie ou compartilhe uma primeiro.",
3161
+ sharedExtensionHelp:
3162
+ "A extensão selecionada é compartilhada com este painel e aparece nos relatórios agendados. Os usuários ainda precisam de acesso à extensão.",
3163
+ slotIdOptional: "ID do slot (opcional)",
3164
+ perViewerSlotHelp:
3165
+ "Cada usuário instala sua própria extensão. Relatórios agendados podem mostrar um slot vazio. Deixe em branco para gerar um ID estável.",
3037
3166
  sectionColumns: "Colunas de seção",
3038
3167
  format: "Formatar",
3039
3168
  filterInterpolation: "Use {{example}} para interpolar valores de filtro.",
@@ -3309,12 +3438,25 @@ const analyticsSliceTranslations: {
3309
3438
  chartTypePie: "पाई",
3310
3439
  chartTypeMetric: "मीट्रिक",
3311
3440
  chartTypeTable: "मेज़",
3441
+ chartTypeExtension: "एक्सटेंशन",
3312
3442
  failedToSavePanel: "पैनल सहेजने में विफल",
3313
3443
  failedToFormatSql: "SQL को फ़ॉर्मेट करने में विफल",
3314
3444
  title: "शीर्षक",
3315
3445
  titlePlaceholder: "जैसे साप्ताहिक साइनअप",
3316
3446
  chartType: "चार्ट प्रकार",
3317
3447
  source: "स्रोत",
3448
+ extensionDisplay: "एक्सटेंशन प्रदर्शन",
3449
+ sharedExtension: "साझा एक्सटेंशन",
3450
+ perViewerSlot: "प्रति-दर्शक स्लॉट",
3451
+ extension: "एक्सटेंशन",
3452
+ loadingExtensions: "एक्सटेंशन लोड हो रहे हैं...",
3453
+ selectExtension: "एक एक्सटेंशन चुनें",
3454
+ noExtensions: "कोई दृश्यमान एक्सटेंशन नहीं है। पहले एक बनाएं या साझा करें।",
3455
+ sharedExtensionHelp:
3456
+ "चुना गया एक्सटेंशन इस डैशबोर्ड के साथ साझा होता है और निर्धारित रिपोर्ट में दिखाई देता है। दर्शकों को फिर भी एक्सटेंशन की पहुंच चाहिए।",
3457
+ slotIdOptional: "स्लॉट ID (वैकल्पिक)",
3458
+ perViewerSlotHelp:
3459
+ "हर दर्शक अपना एक्सटेंशन इंस्टॉल करता है। निर्धारित रिपोर्ट में खाली स्लॉट दिख सकता है। स्थिर ID बनाने के लिए खाली छोड़ें।",
3318
3460
  sectionColumns: "अनुभाग स्तंभ",
3319
3461
  format: "प्रारूप",
3320
3462
  filterInterpolation:
@@ -3584,12 +3726,25 @@ const analyticsSliceTranslations: {
3584
3726
  chartTypePie: "فطيرة",
3585
3727
  chartTypeMetric: "متري",
3586
3728
  chartTypeTable: "طاولة",
3729
+ chartTypeExtension: "إضافة",
3587
3730
  failedToSavePanel: "فشل حفظ اللوحة",
3588
3731
  failedToFormatSql: "فشل تهيئة SQL",
3589
3732
  title: "عنوان",
3590
3733
  titlePlaceholder: "على سبيل المثال الاشتراكات الأسبوعية",
3591
3734
  chartType: "نوع الرسم البياني",
3592
3735
  source: "المصدر",
3736
+ extensionDisplay: "عرض الإضافة",
3737
+ sharedExtension: "إضافة مشتركة",
3738
+ perViewerSlot: "فتحة لكل مشاهد",
3739
+ extension: "إضافة",
3740
+ loadingExtensions: "جارٍ تحميل الإضافات...",
3741
+ selectExtension: "اختر إضافة",
3742
+ noExtensions: "لا توجد إضافات ظاهرة. أنشئ إضافة أو شاركها أولاً.",
3743
+ sharedExtensionHelp:
3744
+ "تتم مشاركة الإضافة المحددة مع لوحة المعلومات هذه وتظهر في التقارير المجدولة. لا يزال المشاهدون بحاجة إلى صلاحية الوصول إليها.",
3745
+ slotIdOptional: "معرّف الفتحة (اختياري)",
3746
+ perViewerSlotHelp:
3747
+ "يثبّت كل مشاهد إضافته الخاصة. قد تعرض التقارير المجدولة فتحة فارغة. اتركه فارغاً لإنشاء معرّف ثابت.",
3593
3748
  sectionColumns: "أعمدة القسم",
3594
3749
  format: "شكل",
3595
3750
  filterInterpolation: "استخدم {{example}} لاستكمال قيم التصفية.",
@@ -10801,6 +10956,224 @@ for (const [locale, overrides] of Object.entries(
10801
10956
  }
10802
10957
  }
10803
10958
 
10959
+ const translatedFeatureFlagAdminTranslations = {
10960
+ "zh-CN": {
10961
+ agents: {
10962
+ featureFlags: "功能开关",
10963
+ featureFlagsDescription: "查看已注册应用开关,并进行可逆的发布调整。",
10964
+ reloadFlags: "重新加载开关",
10965
+ flagsUnavailable: "功能开关不可用",
10966
+ flagsUnreachable: "无法连接工作区目录。连接恢复后重试。",
10967
+ flagsEmpty: "没有应用报告功能开关",
10968
+ flagsEmptyDetail: "连接的应用准备就绪后,已注册开关会显示在这里。",
10969
+ flagsNotReady: "此应用状态为 {{status}},不会将其开关状态假定为关闭。",
10970
+ noFlagDefinitions: "此应用没有注册功能开关定义。",
10971
+ noFlagDescription: "未提供说明。",
10972
+ selected: "已选择",
10973
+ openFlag: "打开功能开关",
10974
+ confirm: "确认",
10975
+ name: "名称",
10976
+ appId: "应用 ID",
10977
+ flagKey: "功能开关",
10978
+ },
10979
+ },
10980
+ "es-ES": {
10981
+ agents: {
10982
+ featureFlags: "Indicadores de funciones",
10983
+ featureFlagsDescription:
10984
+ "Revisa los indicadores de las aplicaciones registradas y aplica cambios de lanzamiento reversibles.",
10985
+ reloadFlags: "Volver a cargar indicadores",
10986
+ flagsUnavailable: "Los indicadores de funciones no están disponibles",
10987
+ flagsUnreachable:
10988
+ "No se pudo acceder al directorio del espacio de trabajo. Inténtalo de nuevo cuando esté disponible.",
10989
+ flagsEmpty: "Ninguna aplicación informó indicadores",
10990
+ flagsEmptyDetail:
10991
+ "Los indicadores registrados aparecerán aquí cuando las aplicaciones conectadas estén listas.",
10992
+ flagsNotReady:
10993
+ "Esta aplicación está {{status}}; su estado no se supone desactivado.",
10994
+ noFlagDefinitions:
10995
+ "Esta aplicación lista no tiene definiciones de indicadores.",
10996
+ noFlagDescription: "No se proporcionó descripción.",
10997
+ selected: "Seleccionado",
10998
+ openFlag: "Abrir indicador",
10999
+ confirm: "Confirmar",
11000
+ name: "Nombre",
11001
+ appId: "ID de aplicación",
11002
+ flagKey: "Indicador de función",
11003
+ },
11004
+ },
11005
+ "fr-FR": {
11006
+ agents: {
11007
+ featureFlags: "Indicateurs de fonctionnalités",
11008
+ featureFlagsDescription:
11009
+ "Examinez les indicateurs d'applications enregistrées et appliquez des changements de déploiement réversibles.",
11010
+ reloadFlags: "Recharger les indicateurs",
11011
+ flagsUnavailable: "Les indicateurs de fonctionnalités sont indisponibles",
11012
+ flagsUnreachable:
11013
+ "Le répertoire de l'espace de travail est inaccessible. Réessayez lorsqu'il sera disponible.",
11014
+ flagsEmpty: "Aucune application n'a signalé d'indicateur",
11015
+ flagsEmptyDetail:
11016
+ "Les indicateurs enregistrés apparaîtront ici lorsque les applications connectées seront prêtes.",
11017
+ flagsNotReady:
11018
+ "Cette application est {{status}} ; son état n'est pas supposé désactivé.",
11019
+ noFlagDefinitions:
11020
+ "Cette application prête n'a aucune définition d'indicateur.",
11021
+ noFlagDescription: "Aucune description fournie.",
11022
+ selected: "Sélectionné",
11023
+ openFlag: "Ouvrir l'indicateur",
11024
+ confirm: "Confirmer",
11025
+ name: "Nom",
11026
+ appId: "ID d'application",
11027
+ flagKey: "Indicateur de fonctionnalité",
11028
+ },
11029
+ },
11030
+ "de-DE": {
11031
+ agents: {
11032
+ featureFlags: "Funktionsschalter",
11033
+ featureFlagsDescription:
11034
+ "Prüfe registrierte App-Schalter und nimm bewusste, rückgängig machbare Rollout-Änderungen vor.",
11035
+ reloadFlags: "Funktionsschalter neu laden",
11036
+ flagsUnavailable: "Funktionsschalter sind nicht verfügbar",
11037
+ flagsUnreachable:
11038
+ "Das Arbeitsbereichsverzeichnis konnte nicht erreicht werden. Versuche es erneut, wenn die Verbindung verfügbar ist.",
11039
+ flagsEmpty: "Keine Arbeitsbereichs-App meldet Funktionsschalter",
11040
+ flagsEmptyDetail:
11041
+ "Registrierte Schalter erscheinen hier, sobald verbundene Apps bereit sind.",
11042
+ flagsNotReady:
11043
+ "Diese App ist {{status}}; ihr Schalterzustand wird nicht als aus angenommen.",
11044
+ noFlagDefinitions:
11045
+ "Diese bereite App hat keine registrierten Schalterdefinitionen.",
11046
+ noFlagDescription: "Keine Beschreibung vorhanden.",
11047
+ selected: "Ausgewählt",
11048
+ openFlag: "Funktionsschalter öffnen",
11049
+ confirm: "Bestätigen",
11050
+ name: "Name",
11051
+ appId: "App-ID",
11052
+ flagKey: "Funktionsschalter",
11053
+ },
11054
+ },
11055
+ "pt-BR": {
11056
+ agents: {
11057
+ featureFlags: "Sinalizadores de recursos",
11058
+ featureFlagsDescription:
11059
+ "Revise sinalizadores de apps registrados e faça mudanças de lançamento reversíveis.",
11060
+ reloadFlags: "Recarregar sinalizadores",
11061
+ flagsUnavailable: "Sinalizadores de recursos indisponíveis",
11062
+ flagsUnreachable:
11063
+ "Não foi possível acessar o diretório do espaço de trabalho. Tente novamente quando estiver disponível.",
11064
+ flagsEmpty: "Nenhum app informou sinalizadores",
11065
+ flagsEmptyDetail:
11066
+ "Sinalizadores registrados aparecerão aqui quando os apps conectados estiverem prontos.",
11067
+ flagsNotReady:
11068
+ "Este app está {{status}}; seu estado não é considerado desligado.",
11069
+ noFlagDefinitions:
11070
+ "Este app pronto não tem definições de sinalizador registradas.",
11071
+ noFlagDescription: "Nenhuma descrição fornecida.",
11072
+ selected: "Selecionado",
11073
+ openFlag: "Abrir sinalizador",
11074
+ confirm: "Confirmar",
11075
+ name: "Nome",
11076
+ appId: "ID do app",
11077
+ flagKey: "Sinalizador de recurso",
11078
+ },
11079
+ },
11080
+ "ja-JP": {
11081
+ agents: {
11082
+ featureFlags: "機能フラグ",
11083
+ featureFlagsDescription:
11084
+ "登録済みアプリのフラグを確認し、元に戻せるロールアウト変更を行います。",
11085
+ reloadFlags: "機能フラグを再読み込み",
11086
+ flagsUnavailable: "機能フラグを利用できません",
11087
+ flagsUnreachable:
11088
+ "ワークスペースディレクトリに接続できません。接続可能になったら再試行してください。",
11089
+ flagsEmpty: "フラグを報告したワークスペースアプリはありません",
11090
+ flagsEmptyDetail:
11091
+ "接続済みアプリの準備ができると、登録済みフラグがここに表示されます。",
11092
+ flagsNotReady:
11093
+ "このアプリは {{status}} です。フラグ状態をオフとは見なしません。",
11094
+ noFlagDefinitions:
11095
+ "この準備済みアプリには登録済みフラグ定義がありません。",
11096
+ noFlagDescription: "説明はありません。",
11097
+ selected: "選択済み",
11098
+ openFlag: "機能フラグを開く",
11099
+ confirm: "確認",
11100
+ name: "名前",
11101
+ appId: "アプリ ID",
11102
+ flagKey: "機能フラグ",
11103
+ },
11104
+ },
11105
+ "ko-KR": {
11106
+ agents: {
11107
+ featureFlags: "기능 플래그",
11108
+ featureFlagsDescription:
11109
+ "등록된 앱 플래그를 검토하고 되돌릴 수 있는 출시 변경을 적용합니다.",
11110
+ reloadFlags: "기능 플래그 다시 불러오기",
11111
+ flagsUnavailable: "기능 플래그를 사용할 수 없습니다",
11112
+ flagsUnreachable:
11113
+ "작업 공간 디렉터리에 연결할 수 없습니다. 연결되면 다시 시도하세요.",
11114
+ flagsEmpty: "플래그를 보고한 작업 공간 앱이 없습니다",
11115
+ flagsEmptyDetail:
11116
+ "연결된 앱이 준비되면 등록된 플래그가 여기에 표시됩니다.",
11117
+ flagsNotReady:
11118
+ "이 앱은 {{status}} 상태이며 플래그가 꺼진 것으로 가정하지 않습니다.",
11119
+ noFlagDefinitions: "준비된 이 앱에는 등록된 플래그 정의가 없습니다.",
11120
+ noFlagDescription: "설명이 제공되지 않았습니다.",
11121
+ selected: "선택됨",
11122
+ openFlag: "기능 플래그 열기",
11123
+ confirm: "확인",
11124
+ name: "이름",
11125
+ appId: "앱 ID",
11126
+ flagKey: "기능 플래그",
11127
+ },
11128
+ },
11129
+ "hi-IN": {
11130
+ agents: {
11131
+ featureFlags: "फ़ीचर फ़्लैग",
11132
+ featureFlagsDescription:
11133
+ "पंजीकृत ऐप फ़्लैग देखें और वापस किए जा सकने वाले रोलआउट बदलाव करें।",
11134
+ reloadFlags: "फ़ीचर फ़्लैग फिर से लोड करें",
11135
+ flagsUnavailable: "फ़ीचर फ़्लैग उपलब्ध नहीं हैं",
11136
+ flagsUnreachable:
11137
+ "वर्कस्पेस डायरेक्टरी तक नहीं पहुँचा जा सका। कनेक्शन उपलब्ध होने पर फिर कोशिश करें।",
11138
+ flagsEmpty: "किसी वर्कस्पेस ऐप ने फ़्लैग की सूचना नहीं दी",
11139
+ flagsEmptyDetail: "कनेक्टेड ऐप तैयार होने पर पंजीकृत फ़्लैग यहाँ दिखाई देंगे।",
11140
+ flagsNotReady: "यह ऐप {{status}} है; इसकी फ़्लैग स्थिति को बंद नहीं माना जाता।",
11141
+ noFlagDefinitions: "इस तैयार ऐप में पंजीकृत फ़्लैग परिभाषाएँ नहीं हैं।",
11142
+ noFlagDescription: "कोई विवरण नहीं दिया गया।",
11143
+ selected: "चयनित",
11144
+ openFlag: "फ़ीचर फ़्लैग खोलें",
11145
+ confirm: "पुष्टि करें",
11146
+ name: "नाम",
11147
+ appId: "ऐप ID",
11148
+ flagKey: "फ़ीचर फ़्लैग",
11149
+ },
11150
+ },
11151
+ "ar-SA": {
11152
+ agents: {
11153
+ featureFlags: "علامات الميزات",
11154
+ featureFlagsDescription:
11155
+ "راجع علامات التطبيقات المسجلة ونفّذ تغييرات طرح قابلة للعكس.",
11156
+ reloadFlags: "إعادة تحميل علامات الميزات",
11157
+ flagsUnavailable: "علامات الميزات غير متاحة",
11158
+ flagsUnreachable:
11159
+ "تعذر الوصول إلى دليل مساحة العمل. أعد المحاولة عند توفر الاتصال.",
11160
+ flagsEmpty: "لم يبلغ أي تطبيق في مساحة العمل عن علامات",
11161
+ flagsEmptyDetail:
11162
+ "ستظهر العلامات المسجلة هنا عندما تصبح التطبيقات المتصلة جاهزة.",
11163
+ flagsNotReady:
11164
+ "حالة هذا التطبيق هي {{status}}؛ ولا يُفترض أن علاماته متوقفة.",
11165
+ noFlagDefinitions: "لا يحتوي هذا التطبيق الجاهز على تعريفات علامات مسجلة.",
11166
+ noFlagDescription: "لم يُقدَّم وصف.",
11167
+ selected: "محدد",
11168
+ openFlag: "فتح علامة الميزة",
11169
+ confirm: "تأكيد",
11170
+ name: "الاسم",
11171
+ appId: "معرّف التطبيق",
11172
+ flagKey: "علامة ميزة",
11173
+ },
11174
+ },
11175
+ } satisfies Partial<Record<LocaleCode, AnalyticsPartialMessages>>;
11176
+
10804
11177
  const translatedDashboardAdminTranslations = {
10805
11178
  "zh-CN": {
10806
11179
  navigation: {
@@ -11161,6 +11534,18 @@ const translatedDashboardAdminTranslations = {
11161
11534
  },
11162
11535
  } satisfies Partial<Record<LocaleCode, AnalyticsPartialMessages>>;
11163
11536
 
11537
+ for (const [locale, overrides] of Object.entries(
11538
+ translatedFeatureFlagAdminTranslations,
11539
+ ) as Array<[LocaleCode, AnalyticsPartialMessages]>) {
11540
+ const messages = messagesByLocale[locale];
11541
+ if (!messages) continue;
11542
+ for (const [section, sectionOverrides] of Object.entries(overrides) as Array<
11543
+ [Section, Partial<Messages[Section]>]
11544
+ >) {
11545
+ Object.assign(messages[section], sectionOverrides);
11546
+ }
11547
+ }
11548
+
11164
11549
  for (const [locale, overrides] of Object.entries(
11165
11550
  translatedDashboardAdminTranslations,
11166
11551
  ) as Array<[LocaleCode, AnalyticsPartialMessages]>) {
@@ -18,11 +18,13 @@ import {
18
18
  IconLoader2,
19
19
  IconMouse,
20
20
  IconPlus,
21
+ IconToggleRight,
21
22
  IconTrash,
22
23
  } from "@tabler/icons-react";
23
24
  import { useEffect, useMemo, useState, type FormEvent } from "react";
24
25
  import { Link, useSearchParams } from "react-router";
25
26
 
27
+ import { FeatureFlagsFleetPanel } from "@/components/agents/FeatureFlagsFleetPanel";
26
28
  import {
27
29
  AlertDialog,
28
30
  AlertDialogAction,
@@ -70,7 +72,7 @@ import {
70
72
  } from "@/components/ui/table";
71
73
  import { cn } from "@/lib/utils";
72
74
 
73
- type AgentAdminView = "monitoring" | "dashboards" | "database";
75
+ type AgentAdminView = "monitoring" | "dashboards" | "database" | "flags";
74
76
 
75
77
  interface DbAdminConnection {
76
78
  id: string;
@@ -117,6 +119,7 @@ const AGENT_ADMIN_VIEWS: AgentAdminView[] = [
117
119
  "monitoring",
118
120
  "dashboards",
119
121
  "database",
122
+ "flags",
120
123
  ];
121
124
 
122
125
  function parseView(value: string | null): AgentAdminView {
@@ -383,7 +386,7 @@ export default function AgentsPage() {
383
386
  const [searchParams, setSearchParams] = useSearchParams();
384
387
  const view = parseView(searchParams.get("view"));
385
388
  const selectedConnectionId = searchParams.get("db");
386
- const isAdminView = view === "dashboards" || view === "database";
389
+ const isAdminView = view !== "monitoring";
387
390
 
388
391
  function setView(next: AgentAdminView) {
389
392
  const params = new URLSearchParams(searchParams);
@@ -493,6 +496,21 @@ export default function AgentsPage() {
493
496
  {t("agents.dashboardUsage")}
494
497
  </button>
495
498
  ) : null}
499
+ {canManageOrg ? (
500
+ <button
501
+ type="button"
502
+ onClick={() => setView("flags")}
503
+ className={cn(
504
+ "inline-flex h-8 items-center gap-2 rounded-md px-3 text-sm font-medium transition-colors",
505
+ view === "flags"
506
+ ? "bg-foreground text-background"
507
+ : "text-muted-foreground hover:bg-muted hover:text-foreground",
508
+ )}
509
+ >
510
+ <IconToggleRight className="size-4" />
511
+ {t("agents.featureFlags")}
512
+ </button>
513
+ ) : null}
496
514
  {canManageOrg && view === "database" && (
497
515
  <button
498
516
  type="button"
@@ -512,6 +530,8 @@ export default function AgentsPage() {
512
530
  />
513
531
  ) : view === "dashboards" ? (
514
532
  <DashboardUsageAdminPanel />
533
+ ) : view === "flags" ? (
534
+ <FeatureFlagsFleetPanel />
515
535
  ) : (
516
536
  <div className="min-w-0">
517
537
  <div className="mb-4 max-w-3xl text-sm leading-6 text-muted-foreground">