@agent-native/core 0.99.3 → 0.100.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 (382) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +21 -0
  3. package/corpus/core/docs/content/agent-surfaces.mdx +43 -0
  4. package/corpus/core/docs/content/external-agents.mdx +11 -0
  5. package/corpus/core/docs/content/locales/ar-SA/agent-surfaces.mdx +30 -0
  6. package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +9 -0
  7. package/corpus/core/docs/content/locales/de-DE/agent-surfaces.mdx +34 -0
  8. package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +10 -0
  9. package/corpus/core/docs/content/locales/es-ES/agent-surfaces.mdx +34 -0
  10. package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +10 -0
  11. package/corpus/core/docs/content/locales/fr-FR/agent-surfaces.mdx +34 -0
  12. package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +11 -0
  13. package/corpus/core/docs/content/locales/hi-IN/agent-surfaces.mdx +31 -0
  14. package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +9 -0
  15. package/corpus/core/docs/content/locales/ja-JP/agent-surfaces.mdx +32 -0
  16. package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +10 -0
  17. package/corpus/core/docs/content/locales/ko-KR/agent-surfaces.mdx +32 -0
  18. package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +9 -0
  19. package/corpus/core/docs/content/locales/pt-BR/agent-surfaces.mdx +33 -0
  20. package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +10 -0
  21. package/corpus/core/docs/content/locales/zh-CN/agent-surfaces.mdx +29 -0
  22. package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -0
  23. package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.mdx +29 -0
  24. package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -0
  25. package/corpus/core/package.json +1 -1
  26. package/corpus/core/src/agent/context-xray/actions/context-evict.ts +11 -0
  27. package/corpus/core/src/agent/context-xray/actions/context-pin.ts +11 -0
  28. package/corpus/core/src/agent/context-xray/actions/context-preview-get.ts +134 -0
  29. package/corpus/core/src/agent/context-xray/actions/context-restore.ts +11 -0
  30. package/corpus/core/src/agent/context-xray/actions/errors.ts +20 -0
  31. package/corpus/core/src/agent/context-xray/manifest.ts +106 -7
  32. package/corpus/core/src/agent/engine/context-directives-transform.ts +5 -1
  33. package/corpus/core/src/agent/production-agent.ts +100 -38
  34. package/corpus/core/src/agent/run-loop-with-resume.ts +7 -2
  35. package/corpus/core/src/client/AgentPanel.tsx +35 -8
  36. package/corpus/core/src/client/agent-page/AgentContextTab.tsx +501 -0
  37. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +370 -0
  38. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +1084 -0
  39. package/corpus/core/src/client/agent-page/types.ts +18 -0
  40. package/corpus/core/src/client/agent-page/use-jobs.ts +150 -0
  41. package/corpus/core/src/client/context-xray/ContextMeter.tsx +22 -5
  42. package/corpus/core/src/client/context-xray/ContextTreemap.tsx +16 -1
  43. package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +168 -3
  44. package/corpus/core/src/client/context-xray/format.ts +6 -0
  45. package/corpus/core/src/client/index.ts +6 -0
  46. package/corpus/core/src/client/resources/ResourcesPanel.tsx +51 -23
  47. package/corpus/core/src/client/settings/AutomationsSection.tsx +407 -387
  48. package/corpus/core/src/jobs/actions/list-recurring-jobs.ts +105 -0
  49. package/corpus/core/src/jobs/actions/manage-recurring-job.ts +85 -0
  50. package/corpus/core/src/jobs/tools.ts +1 -1
  51. package/corpus/core/src/localization/default-messages.ts +110 -0
  52. package/corpus/core/src/mcp/build-server.ts +1 -0
  53. package/corpus/core/src/mcp/connect-route.ts +62 -65
  54. package/corpus/core/src/server/action-discovery.ts +23 -0
  55. package/corpus/core/src/server/agent-chat/prompt-resources.ts +174 -2
  56. package/corpus/core/src/server/agent-chat-plugin.ts +175 -2
  57. package/corpus/core/src/server/auth.ts +1 -7
  58. package/corpus/core/src/server/google-oauth.ts +1 -7
  59. package/corpus/core/src/server/workspace-oauth.ts +31 -0
  60. package/corpus/core/src/shared/context-xray.ts +84 -1
  61. package/corpus/core/src/shared/mcp-connect-content.ts +130 -0
  62. package/corpus/core/src/templates/default/app/routes/_index.tsx +11 -0
  63. package/corpus/core/src/templates/default/app/routes/agent.tsx +33 -0
  64. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  65. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +59 -0
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +25 -0
  67. package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -0
  68. package/corpus/core/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +9 -0
  69. package/corpus/core/src/triggers/actions/list-automations.ts +99 -0
  70. package/corpus/core/src/triggers/actions/manage-automation.ts +78 -0
  71. package/corpus/templates/analytics/actions/data-source-status.ts +33 -15
  72. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
  73. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +149 -24
  74. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +17 -0
  75. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
  76. package/corpus/templates/analytics/app/components/layout/Layout.tsx +1 -0
  77. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +8 -0
  78. package/corpus/templates/analytics/app/i18n/zh-TW.ts +1 -0
  79. package/corpus/templates/analytics/app/i18n-data.ts +1 -0
  80. package/corpus/templates/analytics/app/routes/agent.tsx +5 -0
  81. package/corpus/templates/analytics/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  82. package/corpus/templates/analytics/changelog/2026-07-13-analytics-answers-can-use-built-in-first-party-event-data.md +6 -0
  83. package/corpus/templates/analytics/changelog/2026-07-13-chart-legends-can-filter-to-one-series-or-hide-a-series-on-h.md +6 -0
  84. package/corpus/templates/analytics/changelog/2026-07-13-gpt-5-6-luna-answers-now-recover-normally-instead-of-showing.md +6 -0
  85. package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -2
  86. package/corpus/templates/assets/app/components/layout/Header.tsx +1 -0
  87. package/corpus/templates/assets/app/components/layout/Layout.tsx +1 -0
  88. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -0
  89. package/corpus/templates/assets/app/routes/agent.tsx +5 -0
  90. package/corpus/templates/assets/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  91. package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -0
  92. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +4 -1
  93. package/corpus/templates/brain/app/lib/brain.ts +11 -0
  94. package/corpus/templates/brain/app/root.tsx +15 -1
  95. package/corpus/templates/brain/app/routes/agent.tsx +11 -0
  96. package/corpus/templates/brain/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  97. package/corpus/templates/calendar/AGENTS.md +9 -0
  98. package/corpus/templates/calendar/actions/list-events.ts +659 -44
  99. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -0
  100. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +2 -0
  101. package/corpus/templates/calendar/app/root.tsx +17 -1
  102. package/corpus/templates/calendar/app/routes/_app.agent.tsx +25 -0
  103. package/corpus/templates/calendar/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  104. package/corpus/templates/calendar/changelog/2026-07-13-calendar-inventory-reads-report-source-coverage.md +6 -0
  105. package/corpus/templates/calendar/server/lib/calendar-connector-catalog.ts +8 -0
  106. package/corpus/templates/calendar/server/lib/google-calendar.ts +173 -51
  107. package/corpus/templates/calendar/server/lib/ical-fetcher.ts +13 -2
  108. package/corpus/templates/calendar/server/plugins/agent-chat.ts +5 -3
  109. package/corpus/templates/calendar/shared/api.ts +2 -0
  110. package/corpus/templates/chat/app/components/layout/Header.tsx +1 -0
  111. package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -0
  112. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +7 -0
  113. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +3 -0
  114. package/corpus/templates/chat/app/root.tsx +24 -2
  115. package/corpus/templates/chat/app/routes/agent.tsx +15 -0
  116. package/corpus/templates/chat/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  117. package/corpus/templates/clips/app/components/library/library-layout.tsx +8 -0
  118. package/corpus/templates/clips/app/i18n/ar-SA.ts +2 -0
  119. package/corpus/templates/clips/app/i18n/de-DE.ts +2 -0
  120. package/corpus/templates/clips/app/i18n/en-US.ts +2 -0
  121. package/corpus/templates/clips/app/i18n/es-ES.ts +2 -0
  122. package/corpus/templates/clips/app/i18n/fr-FR.ts +2 -0
  123. package/corpus/templates/clips/app/i18n/hi-IN.ts +2 -0
  124. package/corpus/templates/clips/app/i18n/ja-JP.ts +2 -0
  125. package/corpus/templates/clips/app/i18n/ko-KR.ts +2 -0
  126. package/corpus/templates/clips/app/i18n/pt-BR.ts +2 -0
  127. package/corpus/templates/clips/app/i18n/zh-CN.ts +2 -0
  128. package/corpus/templates/clips/app/i18n/zh-TW.ts +2 -0
  129. package/corpus/templates/clips/app/root.tsx +7 -1
  130. package/corpus/templates/clips/app/routes/_app.agent.tsx +15 -0
  131. package/corpus/templates/clips/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  132. package/corpus/templates/content/app/components/layout/Layout.tsx +1 -0
  133. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +36 -0
  134. package/corpus/templates/content/app/i18n/zh-TW.ts +2 -0
  135. package/corpus/templates/content/app/i18n-data.ts +44 -6
  136. package/corpus/templates/content/app/root.tsx +8 -0
  137. package/corpus/templates/content/app/routes/_app.agent.tsx +15 -0
  138. package/corpus/templates/content/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  139. package/corpus/templates/design/app/components/layout/Layout.tsx +1 -0
  140. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -0
  141. package/corpus/templates/design/app/i18n/zh-TW.ts +2 -0
  142. package/corpus/templates/design/app/i18n-data.ts +20 -0
  143. package/corpus/templates/design/app/root.tsx +7 -1
  144. package/corpus/templates/design/app/routes/agent.tsx +15 -0
  145. package/corpus/templates/design/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  146. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +10 -1
  147. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +2 -0
  148. package/corpus/templates/dispatch/app/i18n-data.ts +20 -0
  149. package/corpus/templates/dispatch/app/root.tsx +7 -2
  150. package/corpus/templates/dispatch/app/routes/agent.tsx +18 -0
  151. package/corpus/templates/dispatch/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  152. package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -0
  153. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -0
  154. package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
  155. package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
  156. package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
  157. package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
  158. package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
  159. package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
  160. package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
  161. package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
  162. package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
  163. package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
  164. package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
  165. package/corpus/templates/forms/app/root.tsx +6 -1
  166. package/corpus/templates/forms/app/routes/_app.agent.tsx +15 -0
  167. package/corpus/templates/forms/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  168. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +14 -2
  169. package/corpus/templates/macros/app/components/layout/Header.tsx +1 -0
  170. package/corpus/templates/macros/app/root.tsx +17 -2
  171. package/corpus/templates/macros/app/routes/agent.tsx +15 -0
  172. package/corpus/templates/macros/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  173. package/corpus/templates/mail/AGENTS.md +12 -0
  174. package/corpus/templates/mail/actions/list-emails.ts +486 -4
  175. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +42 -0
  176. package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +6 -0
  177. package/corpus/templates/mail/app/routes/agent.tsx +15 -0
  178. package/corpus/templates/mail/changelog/2026-07-13-coverage-aware-connected-inbox-inventory.md +6 -0
  179. package/corpus/templates/mail/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  180. package/corpus/templates/mail/server/db/schema.ts +17 -0
  181. package/corpus/templates/mail/server/lib/google-auth.ts +33 -5
  182. package/corpus/templates/mail/server/lib/inventory-cursor.ts +406 -0
  183. package/corpus/templates/mail/server/lib/list-inbox-emails.ts +21 -2
  184. package/corpus/templates/mail/server/lib/mail-connector-catalog.ts +8 -0
  185. package/corpus/templates/mail/server/plugins/agent-chat.ts +4 -9
  186. package/corpus/templates/mail/server/plugins/db.ts +20 -0
  187. package/corpus/templates/plan/app/components/layout/Header.tsx +1 -0
  188. package/corpus/templates/plan/app/components/layout/Layout.tsx +1 -0
  189. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -0
  190. package/corpus/templates/plan/app/root.tsx +8 -0
  191. package/corpus/templates/plan/app/routes/agent.tsx +15 -0
  192. package/corpus/templates/plan/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  193. package/corpus/templates/slides/app/components/layout/Header.tsx +1 -0
  194. package/corpus/templates/slides/app/components/layout/Layout.tsx +1 -0
  195. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +2 -0
  196. package/corpus/templates/slides/app/root.tsx +10 -1
  197. package/corpus/templates/slides/app/routes/agent.tsx +15 -0
  198. package/corpus/templates/slides/changelog/2026-07-13-new-agent-page-see-and-manage-your-agent-s-context-files-con.md +6 -0
  199. package/dist/agent/context-xray/actions/context-evict.js +5 -2
  200. package/dist/agent/context-xray/actions/context-evict.js.map +1 -1
  201. package/dist/agent/context-xray/actions/context-pin.js +5 -2
  202. package/dist/agent/context-xray/actions/context-pin.js.map +1 -1
  203. package/dist/agent/context-xray/actions/context-preview-get.d.ts +17 -0
  204. package/dist/agent/context-xray/actions/context-preview-get.d.ts.map +1 -0
  205. package/dist/agent/context-xray/actions/context-preview-get.js +94 -0
  206. package/dist/agent/context-xray/actions/context-preview-get.js.map +1 -0
  207. package/dist/agent/context-xray/actions/context-restore.js +5 -2
  208. package/dist/agent/context-xray/actions/context-restore.js.map +1 -1
  209. package/dist/agent/context-xray/actions/errors.d.ts +3 -0
  210. package/dist/agent/context-xray/actions/errors.d.ts.map +1 -1
  211. package/dist/agent/context-xray/actions/errors.js +6 -0
  212. package/dist/agent/context-xray/actions/errors.js.map +1 -1
  213. package/dist/agent/context-xray/manifest.d.ts +18 -1
  214. package/dist/agent/context-xray/manifest.d.ts.map +1 -1
  215. package/dist/agent/context-xray/manifest.js +68 -6
  216. package/dist/agent/context-xray/manifest.js.map +1 -1
  217. package/dist/agent/engine/context-directives-transform.d.ts +2 -0
  218. package/dist/agent/engine/context-directives-transform.d.ts.map +1 -1
  219. package/dist/agent/engine/context-directives-transform.js +2 -1
  220. package/dist/agent/engine/context-directives-transform.js.map +1 -1
  221. package/dist/agent/production-agent.d.ts +15 -0
  222. package/dist/agent/production-agent.d.ts.map +1 -1
  223. package/dist/agent/production-agent.js +74 -36
  224. package/dist/agent/production-agent.js.map +1 -1
  225. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  226. package/dist/agent/run-loop-with-resume.js +6 -3
  227. package/dist/agent/run-loop-with-resume.js.map +1 -1
  228. package/dist/client/AgentPanel.d.ts +5 -1
  229. package/dist/client/AgentPanel.d.ts.map +1 -1
  230. package/dist/client/AgentPanel.js +9 -11
  231. package/dist/client/AgentPanel.js.map +1 -1
  232. package/dist/client/agent-page/AgentContextTab.d.ts +5 -0
  233. package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -0
  234. package/dist/client/agent-page/AgentContextTab.js +202 -0
  235. package/dist/client/agent-page/AgentContextTab.js.map +1 -0
  236. package/dist/client/agent-page/AgentJobsTab.d.ts +3 -0
  237. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -0
  238. package/dist/client/agent-page/AgentJobsTab.js +98 -0
  239. package/dist/client/agent-page/AgentJobsTab.js.map +1 -0
  240. package/dist/client/agent-page/AgentTabsPage.d.ts +20 -0
  241. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -0
  242. package/dist/client/agent-page/AgentTabsPage.js +420 -0
  243. package/dist/client/agent-page/AgentTabsPage.js.map +1 -0
  244. package/dist/client/agent-page/types.d.ts +17 -0
  245. package/dist/client/agent-page/types.d.ts.map +1 -0
  246. package/dist/client/agent-page/types.js +9 -0
  247. package/dist/client/agent-page/types.js.map +1 -0
  248. package/dist/client/agent-page/use-jobs.d.ts +61 -0
  249. package/dist/client/agent-page/use-jobs.d.ts.map +1 -0
  250. package/dist/client/agent-page/use-jobs.js +71 -0
  251. package/dist/client/agent-page/use-jobs.js.map +1 -0
  252. package/dist/client/context-xray/ContextMeter.d.ts +3 -1
  253. package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
  254. package/dist/client/context-xray/ContextMeter.js +14 -5
  255. package/dist/client/context-xray/ContextMeter.js.map +1 -1
  256. package/dist/client/context-xray/ContextTreemap.d.ts +3 -2
  257. package/dist/client/context-xray/ContextTreemap.d.ts.map +1 -1
  258. package/dist/client/context-xray/ContextTreemap.js +9 -1
  259. package/dist/client/context-xray/ContextTreemap.js.map +1 -1
  260. package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
  261. package/dist/client/context-xray/ContextXRayPanel.js +95 -20
  262. package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
  263. package/dist/client/context-xray/format.d.ts.map +1 -1
  264. package/dist/client/context-xray/format.js +12 -0
  265. package/dist/client/context-xray/format.js.map +1 -1
  266. package/dist/client/index.d.ts +3 -0
  267. package/dist/client/index.d.ts.map +1 -1
  268. package/dist/client/index.js +1 -0
  269. package/dist/client/index.js.map +1 -1
  270. package/dist/client/resources/ResourcesPanel.d.ts +9 -1
  271. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  272. package/dist/client/resources/ResourcesPanel.js +26 -10
  273. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  274. package/dist/client/settings/AutomationsSection.d.ts +9 -0
  275. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  276. package/dist/client/settings/AutomationsSection.js +128 -147
  277. package/dist/client/settings/AutomationsSection.js.map +1 -1
  278. package/dist/collab/routes.d.ts +1 -1
  279. package/dist/collab/struct-routes.d.ts +1 -1
  280. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  281. package/dist/jobs/actions/list-recurring-jobs.d.ts +21 -0
  282. package/dist/jobs/actions/list-recurring-jobs.d.ts.map +1 -0
  283. package/dist/jobs/actions/list-recurring-jobs.js +74 -0
  284. package/dist/jobs/actions/list-recurring-jobs.js.map +1 -0
  285. package/dist/jobs/actions/manage-recurring-job.d.ts +18 -0
  286. package/dist/jobs/actions/manage-recurring-job.d.ts.map +1 -0
  287. package/dist/jobs/actions/manage-recurring-job.js +68 -0
  288. package/dist/jobs/actions/manage-recurring-job.js.map +1 -0
  289. package/dist/jobs/tools.d.ts +13 -0
  290. package/dist/jobs/tools.d.ts.map +1 -1
  291. package/dist/jobs/tools.js +1 -1
  292. package/dist/jobs/tools.js.map +1 -1
  293. package/dist/localization/default-messages.d.ts +96 -0
  294. package/dist/localization/default-messages.d.ts.map +1 -1
  295. package/dist/localization/default-messages.js +96 -0
  296. package/dist/localization/default-messages.js.map +1 -1
  297. package/dist/mcp/build-server.d.ts.map +1 -1
  298. package/dist/mcp/build-server.js +1 -0
  299. package/dist/mcp/build-server.js.map +1 -1
  300. package/dist/mcp/connect-route.d.ts.map +1 -1
  301. package/dist/mcp/connect-route.js +44 -59
  302. package/dist/mcp/connect-route.js.map +1 -1
  303. package/dist/notifications/routes.d.ts +1 -1
  304. package/dist/observability/routes.d.ts +5 -5
  305. package/dist/progress/routes.d.ts +1 -1
  306. package/dist/resources/handlers.d.ts +3 -3
  307. package/dist/secrets/routes.d.ts +9 -9
  308. package/dist/server/action-discovery.d.ts.map +1 -1
  309. package/dist/server/action-discovery.js +23 -0
  310. package/dist/server/action-discovery.js.map +1 -1
  311. package/dist/server/agent-chat/prompt-resources.d.ts +14 -0
  312. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  313. package/dist/server/agent-chat/prompt-resources.js +139 -2
  314. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  315. package/dist/server/agent-chat-plugin.d.ts +1 -0
  316. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  317. package/dist/server/agent-chat-plugin.js +136 -3
  318. package/dist/server/agent-chat-plugin.js.map +1 -1
  319. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  320. package/dist/server/auth.d.ts.map +1 -1
  321. package/dist/server/auth.js +1 -4
  322. package/dist/server/auth.js.map +1 -1
  323. package/dist/server/google-oauth.d.ts.map +1 -1
  324. package/dist/server/google-oauth.js +1 -4
  325. package/dist/server/google-oauth.js.map +1 -1
  326. package/dist/server/workspace-oauth.d.ts +11 -0
  327. package/dist/server/workspace-oauth.d.ts.map +1 -0
  328. package/dist/server/workspace-oauth.js +25 -0
  329. package/dist/server/workspace-oauth.js.map +1 -0
  330. package/dist/shared/context-xray.d.ts +45 -1
  331. package/dist/shared/context-xray.d.ts.map +1 -1
  332. package/dist/shared/context-xray.js +12 -0
  333. package/dist/shared/context-xray.js.map +1 -1
  334. package/dist/shared/mcp-connect-content.d.ts +37 -0
  335. package/dist/shared/mcp-connect-content.d.ts.map +1 -0
  336. package/dist/shared/mcp-connect-content.js +92 -0
  337. package/dist/shared/mcp-connect-content.js.map +1 -0
  338. package/dist/templates/default/app/routes/_index.tsx +11 -0
  339. package/dist/templates/default/app/routes/agent.tsx +33 -0
  340. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  341. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +59 -0
  342. package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +25 -0
  343. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -0
  344. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +9 -0
  345. package/dist/triggers/actions/list-automations.d.ts +24 -0
  346. package/dist/triggers/actions/list-automations.d.ts.map +1 -0
  347. package/dist/triggers/actions/list-automations.js +72 -0
  348. package/dist/triggers/actions/list-automations.js.map +1 -0
  349. package/dist/triggers/actions/manage-automation.d.ts +18 -0
  350. package/dist/triggers/actions/manage-automation.d.ts.map +1 -0
  351. package/dist/triggers/actions/manage-automation.js +60 -0
  352. package/dist/triggers/actions/manage-automation.js.map +1 -0
  353. package/docs/content/agent-surfaces.mdx +43 -0
  354. package/docs/content/external-agents.mdx +11 -0
  355. package/docs/content/locales/ar-SA/agent-surfaces.mdx +30 -0
  356. package/docs/content/locales/ar-SA/external-agents.mdx +9 -0
  357. package/docs/content/locales/de-DE/agent-surfaces.mdx +34 -0
  358. package/docs/content/locales/de-DE/external-agents.mdx +10 -0
  359. package/docs/content/locales/es-ES/agent-surfaces.mdx +34 -0
  360. package/docs/content/locales/es-ES/external-agents.mdx +10 -0
  361. package/docs/content/locales/fr-FR/agent-surfaces.mdx +34 -0
  362. package/docs/content/locales/fr-FR/external-agents.mdx +11 -0
  363. package/docs/content/locales/hi-IN/agent-surfaces.mdx +31 -0
  364. package/docs/content/locales/hi-IN/external-agents.mdx +9 -0
  365. package/docs/content/locales/ja-JP/agent-surfaces.mdx +32 -0
  366. package/docs/content/locales/ja-JP/external-agents.mdx +10 -0
  367. package/docs/content/locales/ko-KR/agent-surfaces.mdx +32 -0
  368. package/docs/content/locales/ko-KR/external-agents.mdx +9 -0
  369. package/docs/content/locales/pt-BR/agent-surfaces.mdx +33 -0
  370. package/docs/content/locales/pt-BR/external-agents.mdx +10 -0
  371. package/docs/content/locales/zh-CN/agent-surfaces.mdx +29 -0
  372. package/docs/content/locales/zh-CN/external-agents.mdx +8 -0
  373. package/docs/content/locales/zh-TW/agent-surfaces.mdx +29 -0
  374. package/docs/content/locales/zh-TW/external-agents.mdx +8 -0
  375. package/package.json +1 -1
  376. package/src/templates/default/app/routes/_index.tsx +11 -0
  377. package/src/templates/default/app/routes/agent.tsx +33 -0
  378. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  379. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +59 -0
  380. package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +25 -0
  381. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -0
  382. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +9 -0
@@ -48,6 +48,10 @@ import {
48
48
  type ReasoningEffort,
49
49
  } from "../shared/reasoning-effort.js";
50
50
  import { actionPreparationContinuationNote } from "./action-continuation-guidance.js";
51
+ import {
52
+ buildSystemManifestSections,
53
+ readContextXraySystemSections,
54
+ } from "./context-xray/manifest.js";
51
55
  import {
52
56
  AGENT_CHAT_BACKGROUND_RUN_FIELD,
53
57
  AGENT_CHAT_PROCESS_RUN_PATH,
@@ -1799,6 +1803,12 @@ export interface AgentLoopToolResultSummary {
1799
1803
 
1800
1804
  export interface AgentLoopFinalResponseGuardContext {
1801
1805
  messages: EngineMessage[];
1806
+ /**
1807
+ * Stable text from the real user request that started this turn. Unlike the
1808
+ * trailing entry in `messages`, this never points at an internal continuation
1809
+ * or a final-guard corrective retry.
1810
+ */
1811
+ requestText?: string;
1802
1812
  assistantContent: EngineContentPart[];
1803
1813
  text: string;
1804
1814
  toolCalls: AgentLoopToolCallSummary[];
@@ -2049,6 +2059,17 @@ function findCurrentTurnStartForContinuation(
2049
2059
  return 0;
2050
2060
  }
2051
2061
 
2062
+ /** Resolve the real user request behind any internal continuation messages. */
2063
+ export function resolveFinalResponseGuardRequestText(
2064
+ messages: EngineMessage[],
2065
+ ): string | undefined {
2066
+ const message = messages[findCurrentTurnStartForContinuation(messages)];
2067
+ if (!message || message.role !== "user") return undefined;
2068
+ const text = textFromEngineMessage(message).trim();
2069
+ if (text.startsWith(AGENT_INTERNAL_CONTINUE_PROMPT)) return undefined;
2070
+ return text || undefined;
2071
+ }
2072
+
2052
2073
  /**
2053
2074
  * First message index that is safe to start a trimmed window on. A window must
2054
2075
  * not begin with a tool-result-only user message — that would orphan it from
@@ -2913,6 +2934,7 @@ export async function runAgentLoop(opts: {
2913
2934
  tools: EngineTool[];
2914
2935
  availableTools?: EngineTool[];
2915
2936
  messages: EngineMessage[];
2937
+ systemSections?: import("../shared/context-xray.js").ContextManifestSystemSection[];
2916
2938
  actions: Record<string, ActionEntry>;
2917
2939
  send: (event: AgentChatEvent) => void;
2918
2940
  signal: AbortSignal;
@@ -2932,6 +2954,12 @@ export async function runAgentLoop(opts: {
2932
2954
  executionMode?: AgentExecutionMode;
2933
2955
  maxIterations?: number;
2934
2956
  finalResponseGuard?: AgentLoopFinalResponseGuard;
2957
+ /**
2958
+ * Stable real-user request text preserved across internal continuation
2959
+ * attempts. Callers normally omit this; continuation wrappers freeze it
2960
+ * before appending their synthetic user messages.
2961
+ */
2962
+ finalResponseGuardRequestText?: string;
2935
2963
  threadId?: string;
2936
2964
  turnId?: string;
2937
2965
  /**
@@ -2967,6 +2995,9 @@ export async function runAgentLoop(opts: {
2967
2995
  send,
2968
2996
  signal,
2969
2997
  } = opts;
2998
+ const finalResponseGuardRequestText =
2999
+ opts.finalResponseGuardRequestText ??
3000
+ resolveFinalResponseGuardRequestText(messages);
2970
3001
  const availableToolMap = new Map(
2971
3002
  (availableTools ?? tools).map((tool) => [tool.name, tool]),
2972
3003
  );
@@ -3106,6 +3137,7 @@ export async function runAgentLoop(opts: {
3106
3137
  turnId: opts.turnId,
3107
3138
  model,
3108
3139
  messages,
3140
+ systemSections: opts.systemSections,
3109
3141
  });
3110
3142
 
3111
3143
  // Observational Memory (consumer): for long threads that have already been
@@ -3680,11 +3712,41 @@ export async function runAgentLoop(opts: {
3680
3712
  appendAgentLoopContinuation(messages, "max_tokens");
3681
3713
  continue;
3682
3714
  }
3715
+
3716
+ // Some providers (notably OpenAI Responses for gpt-5+) can complete a
3717
+ // successful turn with reasoning content but no text or tool call. App
3718
+ // final-answer guards validate an actual draft; letting them see this
3719
+ // contentless turn can misclassify our synthetic recovery message and
3720
+ // replace the shared retry with an unrelated app fallback.
3721
+ const hasEmptyFinalResponse =
3722
+ collectTextParts(assistantContentForHistory).trim().length === 0 &&
3723
+ streamedAssistantText.trim().length === 0;
3724
+ if (hasEmptyFinalResponse) {
3725
+ if (emptyFinalResponseRetries < EMPTY_FINAL_RESPONSE_RETRY_LIMIT) {
3726
+ emptyFinalResponseRetries += 1;
3727
+ effectiveMaxOutputTokens =
3728
+ resolveEmptyResponseRetryMaxOutputTokens(model);
3729
+ effectiveReasoningEffort = stepDownReasoningEffort(
3730
+ effectiveReasoningEffort,
3731
+ );
3732
+ send({ type: "clear" });
3733
+ appendAgentLoopContinuation(messages, "max_tokens");
3734
+ continue;
3735
+ }
3736
+ send({ type: "clear" });
3737
+ send({
3738
+ type: "text",
3739
+ text: "The model returned an empty response. This usually means reasoning used the full output-token budget. Try again, or pick a different model from the model menu.",
3740
+ });
3741
+ break;
3742
+ }
3743
+
3683
3744
  let guard: Awaited<ReturnType<AgentLoopFinalResponseGuard>> | null = null;
3684
3745
  if (opts.finalResponseGuard) {
3685
3746
  try {
3686
3747
  guard = await opts.finalResponseGuard({
3687
3748
  messages,
3749
+ requestText: finalResponseGuardRequestText,
3688
3750
  assistantContent: assistantContentForHistory,
3689
3751
  text: collectTextParts(assistantContentForHistory),
3690
3752
  toolCalls: [...toolCallHistory],
@@ -3697,7 +3759,6 @@ export async function runAgentLoop(opts: {
3697
3759
  throw err;
3698
3760
  }
3699
3761
  }
3700
- let guardEmittedFallback = false;
3701
3762
  if (guard) {
3702
3763
  const retryMessage =
3703
3764
  typeof guard === "string" ? guard : guard.retryMessage;
@@ -3730,45 +3791,12 @@ export async function runAgentLoop(opts: {
3730
3791
  }
3731
3792
  send({ type: "clear" });
3732
3793
  send({ type: "text", text: fallbackMessage ?? retryMessage });
3733
- guardEmittedFallback = true;
3734
3794
  } else {
3735
3795
  flushUnstreamedAssistantText();
3736
3796
  }
3737
- // Some providers (notably OpenAI Responses for gpt-5+) can stream a
3738
- // successful turn that contains only reasoning content and zero output
3739
- // text — typically when reasoning consumes the entire output-token
3740
- // budget. Without a final text part the SSE stream still ends with a
3741
- // clean `done`, which renders as a totally empty assistant bubble.
3742
- // Retry so a reasoning-budget miss can still finish; each retry raises
3743
- // the token ceiling and steps reasoning effort down a tier so it's not
3744
- // just re-issuing the identical doomed request. If retries also come
3745
- // back empty, surface a plain-language error.
3746
- const hasEmptyFinalResponse =
3747
- !guardEmittedFallback &&
3748
- collectTextParts(assistantContentForHistory).trim().length === 0 &&
3749
- streamedAssistantText.trim().length === 0;
3750
- if (hasEmptyFinalResponse) {
3751
- if (emptyFinalResponseRetries < EMPTY_FINAL_RESPONSE_RETRY_LIMIT) {
3752
- emptyFinalResponseRetries += 1;
3753
- effectiveMaxOutputTokens =
3754
- resolveEmptyResponseRetryMaxOutputTokens(model);
3755
- effectiveReasoningEffort = stepDownReasoningEffort(
3756
- effectiveReasoningEffort,
3757
- );
3758
- send({ type: "clear" });
3759
- appendAgentLoopContinuation(messages, "max_tokens");
3760
- continue;
3761
- }
3762
- send({ type: "clear" });
3763
- send({
3764
- type: "text",
3765
- text: "The model returned an empty response. This usually means reasoning used the full output-token budget. Try again, or pick a different model from the model menu.",
3766
- });
3767
- } else {
3768
- emptyFinalResponseRetries = 0;
3769
- effectiveMaxOutputTokens = opts.maxOutputTokens;
3770
- effectiveReasoningEffort = opts.reasoningEffort;
3771
- }
3797
+ emptyFinalResponseRetries = 0;
3798
+ effectiveMaxOutputTokens = opts.maxOutputTokens;
3799
+ effectiveReasoningEffort = opts.reasoningEffort;
3772
3800
  break;
3773
3801
  }
3774
3802
 
@@ -4965,6 +4993,9 @@ export async function runAgentLoopWithMainChatInternalContinuations(
4965
4993
  maxContinuations?: number;
4966
4994
  },
4967
4995
  ): Promise<Awaited<ReturnType<typeof runAgentLoop>>> {
4996
+ const finalResponseGuardRequestText =
4997
+ opts.finalResponseGuardRequestText ??
4998
+ resolveFinalResponseGuardRequestText(opts.messages);
4968
4999
  const usage: Awaited<ReturnType<typeof runAgentLoop>> = {
4969
5000
  inputTokens: 0,
4970
5001
  outputTokens: 0,
@@ -5010,7 +5041,11 @@ export async function runAgentLoopWithMainChatInternalContinuations(
5010
5041
  };
5011
5042
 
5012
5043
  try {
5013
- const nextUsage = await runAgentLoop({ ...opts, send });
5044
+ const nextUsage = await runAgentLoop({
5045
+ ...opts,
5046
+ send,
5047
+ finalResponseGuardRequestText,
5048
+ });
5014
5049
  addUsage(nextUsage);
5015
5050
  } catch (err) {
5016
5051
  // Preserve exact prior behavior unless explicitly opted in: an aborted
@@ -6669,6 +6704,31 @@ export function createProductionAgentHandler(
6669
6704
  availableRequestTools,
6670
6705
  options.initialToolNames,
6671
6706
  );
6707
+ // System sections are emitted by the prompt builder once per request. Tool
6708
+ // schemas become known just after prompt setup, so append their measured
6709
+ // contribution here and reuse the immutable result for every loop pass.
6710
+ const contextXraySystemSections = [
6711
+ ...readContextXraySystemSections(event),
6712
+ ...(requestTools.length > 0
6713
+ ? await buildSystemManifestSections([
6714
+ {
6715
+ label: "Action and MCP tool schemas",
6716
+ provenance: "tools",
6717
+ governance: "required",
6718
+ content: requestTools
6719
+ .map((tool) =>
6720
+ JSON.stringify({
6721
+ name: tool.name,
6722
+ description: tool.description,
6723
+ parameters: tool.inputSchema,
6724
+ }),
6725
+ )
6726
+ .join("\n"),
6727
+ sourceRef: { scope: "tools" },
6728
+ },
6729
+ ])
6730
+ : []),
6731
+ ];
6672
6732
  setupMark("actions");
6673
6733
  // DIAGNOSTIC-ONLY: action/tool resolution + engine-tool filtering finished.
6674
6734
  workerStep("action_tool_setup");
@@ -7648,6 +7708,7 @@ export function createProductionAgentHandler(
7648
7708
  tools: requestTools,
7649
7709
  availableTools: availableRequestTools,
7650
7710
  messages,
7711
+ systemSections: contextXraySystemSections,
7651
7712
  actions: requestActions,
7652
7713
  send,
7653
7714
  signal,
@@ -7664,6 +7725,7 @@ export function createProductionAgentHandler(
7664
7725
  executionMode: requestMode,
7665
7726
  maxIterations: loopSettings.maxIterations,
7666
7727
  finalResponseGuard: options.finalResponseGuard,
7728
+ finalResponseGuardRequestText: messageToPersist,
7667
7729
  ...(options.toolLimits ? { toolLimits: options.toolLimits } : {}),
7668
7730
  ...(threadId
7669
7731
  ? { threadId: effectiveThreadId, turnId: effectiveTurnId }
@@ -28,6 +28,7 @@ import {
28
28
  isResumableEngineError,
29
29
  continuationReasonForResumableError,
30
30
  lastUnfinishedPreparingActionToolFromEvents,
31
+ resolveFinalResponseGuardRequestText,
31
32
  type AgentLoopContinuationReason,
32
33
  } from "./production-agent.js";
33
34
  import { resolveRunSoftTimeoutMs } from "./run-manager.js";
@@ -203,8 +204,12 @@ export async function runAgentLoopDirectWithSoftTimeout(
203
204
  softTimeoutMs?: number,
204
205
  timeoutOptions?: ResolveRunSoftTimeoutOptions,
205
206
  ): Promise<Awaited<ReturnType<typeof runAgentLoop>>> {
207
+ const finalResponseGuardRequestText =
208
+ opts.finalResponseGuardRequestText ??
209
+ resolveFinalResponseGuardRequestText(opts.messages);
210
+ const stableOpts = { ...opts, finalResponseGuardRequestText };
206
211
  const timeoutMs = resolveRunSoftTimeoutMs(softTimeoutMs, timeoutOptions);
207
- if (timeoutMs <= 0) return runAgentLoop(opts);
212
+ if (timeoutMs <= 0) return runAgentLoop(stableOpts);
208
213
 
209
214
  const upstreamSignal = opts.signal;
210
215
  const usage: Awaited<ReturnType<typeof runAgentLoop>> = {
@@ -260,7 +265,7 @@ export async function runAgentLoopDirectWithSoftTimeout(
260
265
 
261
266
  try {
262
267
  const nextUsage = await runAgentLoop({
263
- ...opts,
268
+ ...stableOpts,
264
269
  send,
265
270
  signal: controller.signal,
266
271
  });
@@ -79,7 +79,7 @@ const MultiTabAssistantChatLazy = lazy(() =>
79
79
  })),
80
80
  );
81
81
  import { useQuery, useQueryClient } from "@tanstack/react-query";
82
- import { useLocation, useNavigate } from "react-router";
82
+ import { Link, useLocation, useNavigate } from "react-router";
83
83
 
84
84
  import type { AgentChatSurfaceKind } from "./agent-chat-adapter.js";
85
85
  import {
@@ -595,6 +595,8 @@ export interface AgentPanelProps extends Omit<
595
595
  showPageNewChatButton?: boolean;
596
596
  /** Allow the sidebar settings view to render inside this panel. Default: true. */
597
597
  allowSettingsMode?: boolean;
598
+ /** Optional link shown in Resources and Settings modes for the full Agent page. */
599
+ agentPageHref?: string;
598
600
  /** Capability gate for source edits and CLI access. */
599
601
  codeAccess?: AgentPanelCodeAccess;
600
602
  }
@@ -745,6 +747,7 @@ function AgentPanelInner({
745
747
  showTabBar = true,
746
748
  showPageNewChatButton = false,
747
749
  allowSettingsMode = true,
750
+ agentPageHref,
748
751
  codeAccess,
749
752
  ...assistantChatProps
750
753
  }: AgentPanelProps) {
@@ -1807,11 +1810,11 @@ function AgentPanelInner({
1807
1810
  ".agent-tabs-scroll::-webkit-scrollbar{display:none;}" +
1808
1811
  `[data-agent-fullscreen='true'] .agent-thread-content,` +
1809
1812
  `[data-agent-fullscreen='true'] .agent-running-activity{` +
1810
- `max-width:${FULLSCREEN_CONTENT_MAX_PX}px;` +
1813
+ `max-width:${FULLSCREEN_CHAT_COLUMN_MAX_PX}px;` +
1811
1814
  `margin-left:auto;margin-right:auto;width:100%;}` +
1812
1815
  `[data-agent-fullscreen='true'] .agent-composer-area,` +
1813
1816
  `[data-agent-fullscreen='true'] .agent-plan-mode-callout{` +
1814
- `max-width:${FULLSCREEN_COMPOSER_MAX_PX}px;` +
1817
+ `max-width:${FULLSCREEN_CHAT_COLUMN_MAX_PX}px;` +
1815
1818
  `margin-left:auto;margin-right:auto;width:100%;}`,
1816
1819
  }}
1817
1820
  />
@@ -1933,7 +1936,18 @@ function AgentPanelInner({
1933
1936
 
1934
1937
  {/* Resources view */}
1935
1938
  {mode === "resources" && (
1936
- <div className="flex-1 min-h-0">
1939
+ <div className="flex flex-1 flex-col min-h-0">
1940
+ {agentPageHref && (
1941
+ <div className="flex shrink-0 justify-end border-b border-border px-3 py-1.5">
1942
+ <Link
1943
+ to={agentPageHref}
1944
+ className="inline-flex cursor-pointer items-center gap-1 text-[11px] font-medium text-muted-foreground hover:text-foreground"
1945
+ >
1946
+ {t("agentPanel.openFullView")}
1947
+ <IconExternalLink className="h-3 w-3" />
1948
+ </Link>
1949
+ </div>
1950
+ )}
1937
1951
  <Suspense
1938
1952
  fallback={
1939
1953
  <div className="flex h-full flex-col min-h-0">
@@ -1954,6 +1968,17 @@ function AgentPanelInner({
1954
1968
  {/* Settings / Setup view */}
1955
1969
  {mode === "settings" && (
1956
1970
  <div className="flex flex-col flex-1 min-h-0">
1971
+ {agentPageHref && (
1972
+ <div className="flex shrink-0 justify-end border-b border-border px-3 py-1.5">
1973
+ <Link
1974
+ to={agentPageHref}
1975
+ className="inline-flex cursor-pointer items-center gap-1 text-[11px] font-medium text-muted-foreground hover:text-foreground"
1976
+ >
1977
+ {t("agentPanel.openFullView")}
1978
+ <IconExternalLink className="h-3 w-3" />
1979
+ </Link>
1980
+ </div>
1981
+ )}
1957
1982
  <Suspense
1958
1983
  fallback={
1959
1984
  <div className="p-3 space-y-2">
@@ -1987,10 +2012,8 @@ const SIDEBAR_MAX = 700;
1987
2012
  const SIDEBAR_ANIMATION_MS = 260;
1988
2013
  const SIDEBAR_OVERLAY_Z_INDEX = 70;
1989
2014
  const SIDEBAR_FULLSCREEN_Z_INDEX = 90;
1990
- /** Max width of the centered chat column in fullscreen mode (Claude-style). */
1991
- const FULLSCREEN_CONTENT_MAX_PX = 570;
1992
- /** Max width of the centered composer in fullscreen mode. */
1993
- const FULLSCREEN_COMPOSER_MAX_PX = 684;
2015
+ /** Shared max width of the centered fullscreen chat column and composer. */
2016
+ const FULLSCREEN_CHAT_COLUMN_MAX_PX = 684;
1994
2017
 
1995
2018
  function ResizeHandle({
1996
2019
  position,
@@ -2594,6 +2617,8 @@ export interface AgentSidebarProps {
2594
2617
  browserTabId?: string;
2595
2618
  /** Keep chat thread selection in URL state. */
2596
2619
  threadUrlSync?: MultiTabAssistantChatProps["threadUrlSync"];
2620
+ /** Optional link shown in Resources and Settings modes for the full Agent page. */
2621
+ agentPageHref?: string;
2597
2622
  }
2598
2623
 
2599
2624
  /**
@@ -2624,6 +2649,7 @@ export function AgentSidebar({
2624
2649
  showScopeBadge,
2625
2650
  browserTabId,
2626
2651
  threadUrlSync,
2652
+ agentPageHref,
2627
2653
  }: AgentSidebarProps) {
2628
2654
  const initialWidth = defaultSidebarWidth ?? sidebarWidth ?? 380;
2629
2655
  const [open, setOpen] = useState(
@@ -3160,6 +3186,7 @@ export function AgentSidebar({
3160
3186
  showScopeBadge={showScopeBadge}
3161
3187
  browserTabId={browserTabId}
3162
3188
  threadUrlSync={threadUrlSync}
3189
+ agentPageHref={agentPageHref}
3163
3190
  allowSettingsMode={false}
3164
3191
  />
3165
3192
  </div>