madarx 2.17.0 → 2.18.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 (511) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +536 -536
  3. package/.next/standalone/.next/app-path-routes-manifest.json +68 -68
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +15 -15
  6. package/.next/standalone/.next/react-loadable-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  8. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/_not-found.html +2 -1
  11. package/.next/standalone/.next/server/app/_not-found.rsc +4 -4
  12. package/.next/standalone/.next/server/app/activity/page.js +1 -1
  13. package/.next/standalone/.next/server/app/activity/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/admin/page.js +4 -4
  16. package/.next/standalone/.next/server/app/admin/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/agents/[id]/page.js +4 -4
  19. package/.next/standalone/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/agents/page.js +1 -1
  22. package/.next/standalone/.next/server/app/agents/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/agents/[id]/active-run/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/brand/share/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/config/env/route.js +1 -1
  61. package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route.js +1 -1
  65. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/fs/pick-folder/route.js +2 -2
  83. package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/orchestrator/stream/route.js +13 -13
  121. package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/orchestrator/upload/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/orgs/join-complete/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/api/voice/realtime/session/route.js +2 -2
  197. package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route.js +2 -2
  199. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route.js +1 -1
  201. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
  202. package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/whatsapp/disconnect/route_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/approvals/page.js +2 -2
  210. package/.next/standalone/.next/server/app/approvals/page.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/architecture/page.js +1 -1
  213. package/.next/standalone/.next/server/app/architecture/page.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/architecture.html +2 -2
  216. package/.next/standalone/.next/server/app/architecture.rsc +4 -4
  217. package/.next/standalone/.next/server/app/audit/live/page.js +1 -1
  218. package/.next/standalone/.next/server/app/audit/live/page.js.nft.json +1 -1
  219. package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
  220. package/.next/standalone/.next/server/app/audit/page.js +1 -1
  221. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  222. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/brand/page.js +1 -1
  224. package/.next/standalone/.next/server/app/brand/page.js.nft.json +1 -1
  225. package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/brand.html +2 -1
  227. package/.next/standalone/.next/server/app/brand.rsc +4 -4
  228. package/.next/standalone/.next/server/app/disk/page.js +1 -1
  229. package/.next/standalone/.next/server/app/disk/page.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/federated-ai/page.js +1 -1
  232. package/.next/standalone/.next/server/app/federated-ai/page.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/federated-ai.html +2 -2
  235. package/.next/standalone/.next/server/app/federated-ai.rsc +4 -4
  236. package/.next/standalone/.next/server/app/hail/[id]/governance/page.js +1 -1
  237. package/.next/standalone/.next/server/app/hail/[id]/governance/page.js.nft.json +1 -1
  238. package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +1 -1
  240. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js.nft.json +1 -1
  241. package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/hail/[id]/page.js +1 -1
  243. package/.next/standalone/.next/server/app/hail/[id]/page.js.nft.json +1 -1
  244. package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
  245. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +1 -1
  246. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js.nft.json +1 -1
  247. package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/hail/page.js +2 -2
  249. package/.next/standalone/.next/server/app/hail/page.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/help/[slug]/page.js +1 -1
  252. package/.next/standalone/.next/server/app/help/[slug]/page.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/help/page.js +1 -1
  255. package/.next/standalone/.next/server/app/help/page.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/index.html +2 -2
  258. package/.next/standalone/.next/server/app/index.rsc +5 -5
  259. package/.next/standalone/.next/server/app/join/page.js +1 -1
  260. package/.next/standalone/.next/server/app/join/page.js.nft.json +1 -1
  261. package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
  262. package/.next/standalone/.next/server/app/join.html +1 -1
  263. package/.next/standalone/.next/server/app/join.rsc +4 -4
  264. package/.next/standalone/.next/server/app/login/page.js +1 -1
  265. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/marketplace/page.js +4 -4
  268. package/.next/standalone/.next/server/app/marketplace/page.js.nft.json +1 -1
  269. package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/mines/[projectId]/page.js +1 -1
  271. package/.next/standalone/.next/server/app/mines/[projectId]/page.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/mines/[projectId]/results/page.js +1 -1
  274. package/.next/standalone/.next/server/app/mines/[projectId]/results/page.js.nft.json +1 -1
  275. package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/mines/page.js +1 -1
  277. package/.next/standalone/.next/server/app/mines/page.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/missions/page.js +2 -2
  280. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  281. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/onboarding/org/page.js +1 -1
  283. package/.next/standalone/.next/server/app/onboarding/org/page.js.nft.json +1 -1
  284. package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/onboarding/page.js +1 -1
  286. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  287. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  289. package/.next/standalone/.next/server/app/onboarding.rsc +4 -4
  290. package/.next/standalone/.next/server/app/org/page.js +1 -1
  291. package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
  292. package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
  293. package/.next/standalone/.next/server/app/page.js +5 -5
  294. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  295. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  296. package/.next/standalone/.next/server/app/projects/[slug]/log/page.js +1 -1
  297. package/.next/standalone/.next/server/app/projects/[slug]/log/page.js.nft.json +1 -1
  298. package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
  299. package/.next/standalone/.next/server/app/projects/[slug]/page.js +1 -1
  300. package/.next/standalone/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  301. package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  302. package/.next/standalone/.next/server/app/projects/new/page.js +3 -3
  303. package/.next/standalone/.next/server/app/projects/new/page.js.nft.json +1 -1
  304. package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
  305. package/.next/standalone/.next/server/app/projects/new.html +2 -2
  306. package/.next/standalone/.next/server/app/projects/new.rsc +5 -5
  307. package/.next/standalone/.next/server/app/projects/page.js +34 -24
  308. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  309. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  310. package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
  311. package/.next/standalone/.next/server/app/reports/page.js +1 -1
  312. package/.next/standalone/.next/server/app/reports/page.js.nft.json +1 -1
  313. package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  314. package/.next/standalone/.next/server/app/runtime/page.js +1 -1
  315. package/.next/standalone/.next/server/app/runtime/page.js.nft.json +1 -1
  316. package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
  317. package/.next/standalone/.next/server/app/schedules/page.js +2 -2
  318. package/.next/standalone/.next/server/app/schedules/page.js.nft.json +1 -1
  319. package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  320. package/.next/standalone/.next/server/app/settings/account/page.js +1 -1
  321. package/.next/standalone/.next/server/app/settings/account/page.js.nft.json +1 -1
  322. package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
  323. package/.next/standalone/.next/server/app/settings/advanced/page.js +1 -1
  324. package/.next/standalone/.next/server/app/settings/advanced/page.js.nft.json +1 -1
  325. package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  326. package/.next/standalone/.next/server/app/settings/appearance/page.js +1 -1
  327. package/.next/standalone/.next/server/app/settings/appearance/page.js.nft.json +1 -1
  328. package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
  329. package/.next/standalone/.next/server/app/settings/brand/page.js +1 -1
  330. package/.next/standalone/.next/server/app/settings/brand/page.js.nft.json +1 -1
  331. package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
  332. package/.next/standalone/.next/server/app/settings/brand.html +2 -2
  333. package/.next/standalone/.next/server/app/settings/brand.rsc +5 -5
  334. package/.next/standalone/.next/server/app/settings/connectors/page.js +1 -1
  335. package/.next/standalone/.next/server/app/settings/connectors/page.js.nft.json +1 -1
  336. package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
  337. package/.next/standalone/.next/server/app/settings/engines/page.js +1 -1
  338. package/.next/standalone/.next/server/app/settings/engines/page.js.nft.json +1 -1
  339. package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
  340. package/.next/standalone/.next/server/app/settings/onboarding/page.js +1 -1
  341. package/.next/standalone/.next/server/app/settings/onboarding/page.js.nft.json +1 -1
  342. package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
  343. package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
  344. package/.next/standalone/.next/server/app/settings/onboarding.rsc +5 -5
  345. package/.next/standalone/.next/server/app/settings/organization/page.js +2 -2
  346. package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
  347. package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
  348. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  349. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  350. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  351. package/.next/standalone/.next/server/app/settings/runtime/page.js +1 -1
  352. package/.next/standalone/.next/server/app/settings/runtime/page.js.nft.json +1 -1
  353. package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
  354. package/.next/standalone/.next/server/app/settings/team/page.js +1 -1
  355. package/.next/standalone/.next/server/app/settings/team/page.js.nft.json +1 -1
  356. package/.next/standalone/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
  357. package/.next/standalone/.next/server/app/settings/tools/page.js +1 -1
  358. package/.next/standalone/.next/server/app/settings/tools/page.js.nft.json +1 -1
  359. package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
  360. package/.next/standalone/.next/server/app/settings.html +2 -2
  361. package/.next/standalone/.next/server/app/settings.rsc +5 -5
  362. package/.next/standalone/.next/server/app/share/[token]/page.js +1 -1
  363. package/.next/standalone/.next/server/app/share/[token]/page.js.nft.json +1 -1
  364. package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  365. package/.next/standalone/.next/server/app/share/space/[token]/page.js +1 -1
  366. package/.next/standalone/.next/server/app/share/space/[token]/page.js.nft.json +1 -1
  367. package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
  368. package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
  369. package/.next/standalone/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  370. package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  371. package/.next/standalone/.next/server/app/tasks/page.js +2 -2
  372. package/.next/standalone/.next/server/app/tasks/page.js.nft.json +1 -1
  373. package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  374. package/.next/standalone/.next/server/app/team/[agentId]/page.js +1 -1
  375. package/.next/standalone/.next/server/app/team/[agentId]/page.js.nft.json +1 -1
  376. package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
  377. package/.next/standalone/.next/server/app/team/page.js +1 -1
  378. package/.next/standalone/.next/server/app/team/page.js.nft.json +1 -1
  379. package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
  380. package/.next/standalone/.next/server/app/tools/page.js +1 -1
  381. package/.next/standalone/.next/server/app/tools/page.js.nft.json +1 -1
  382. package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  383. package/.next/standalone/.next/server/app/whatsapp/page.js +1 -1
  384. package/.next/standalone/.next/server/app/whatsapp/page.js.nft.json +1 -1
  385. package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
  386. package/.next/standalone/.next/server/app/whatsapp.html +2 -2
  387. package/.next/standalone/.next/server/app/whatsapp.rsc +4 -4
  388. package/.next/standalone/.next/server/app/workflows/[caseId]/page.js +1 -1
  389. package/.next/standalone/.next/server/app/workflows/[caseId]/page.js.nft.json +1 -1
  390. package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
  391. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page.js +1 -1
  392. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page.js.nft.json +1 -1
  393. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
  394. package/.next/standalone/.next/server/app/workflows/new/definition/page.js +1 -1
  395. package/.next/standalone/.next/server/app/workflows/new/definition/page.js.nft.json +1 -1
  396. package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
  397. package/.next/standalone/.next/server/app/workflows/page.js +1 -1
  398. package/.next/standalone/.next/server/app/workflows/page.js.nft.json +1 -1
  399. package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  400. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page.js +1 -1
  401. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page.js.nft.json +1 -1
  402. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
  403. package/.next/standalone/.next/server/app-paths-manifest.json +68 -68
  404. package/.next/standalone/.next/server/chunks/1648.js +1 -1
  405. package/.next/standalone/.next/server/chunks/1699.js +35 -18
  406. package/.next/standalone/.next/server/chunks/{3806.js → 3379.js} +1 -1
  407. package/.next/standalone/.next/server/chunks/4804.js +1 -1
  408. package/.next/standalone/.next/server/chunks/6059.js +1 -1
  409. package/.next/standalone/.next/server/chunks/{9195.js → 9483.js} +1 -1
  410. package/.next/standalone/.next/server/functions-config-manifest.json +45 -45
  411. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  412. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  413. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  414. package/.next/standalone/.next/server/pages/404.html +2 -1
  415. package/.next/standalone/.next/server/pages/500.html +1 -1
  416. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  417. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  418. package/.next/standalone/.next/static/chunks/494-02cf75066d25e8ac.js +1 -0
  419. package/.next/standalone/.next/static/chunks/8217.9459315d921fdd61.js +1 -0
  420. package/.next/{static/chunks/app/agents/[id]/page-e4bcb0ace2900a11.js → standalone/.next/static/chunks/app/agents/[id]/page-fd263522f6c29653.js} +1 -1
  421. package/.next/{static/chunks/app/agents/page-47a00aa58327a35e.js → standalone/.next/static/chunks/app/agents/page-5860869c305cc54b.js} +1 -1
  422. package/.next/standalone/.next/static/chunks/app/layout-457acc50d33a5e0e.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/login/page-69e66f7316e3aaf2.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/marketplace/page-b21a9b2946742aa4.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/page-9a013fdb2983cbf4.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/projects/page-3d7140091264933a.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/settings/layout-fd443bfa8cac181e.js +1 -0
  428. package/.next/standalone/.next/static/chunks/webpack-e4f2cfb4ad98f256.js +1 -0
  429. package/.next/standalone/.next/static/css/31fb2fdadf8f1c6b.css +1 -0
  430. package/.next/standalone/CHANGELOG.md +25 -0
  431. package/.next/standalone/package.json +1 -1
  432. package/.next/static/chunks/494-02cf75066d25e8ac.js +1 -0
  433. package/.next/static/chunks/8217.9459315d921fdd61.js +1 -0
  434. package/.next/{standalone/.next/static/chunks/app/agents/[id]/page-e4bcb0ace2900a11.js → static/chunks/app/agents/[id]/page-fd263522f6c29653.js} +1 -1
  435. package/.next/{standalone/.next/static/chunks/app/agents/page-47a00aa58327a35e.js → static/chunks/app/agents/page-5860869c305cc54b.js} +1 -1
  436. package/.next/static/chunks/app/layout-457acc50d33a5e0e.js +1 -0
  437. package/.next/static/chunks/app/login/page-69e66f7316e3aaf2.js +1 -0
  438. package/.next/static/chunks/app/marketplace/page-b21a9b2946742aa4.js +1 -0
  439. package/.next/static/chunks/app/page-9a013fdb2983cbf4.js +1 -0
  440. package/.next/static/chunks/app/projects/page-3d7140091264933a.js +1 -0
  441. package/.next/static/chunks/app/settings/layout-fd443bfa8cac181e.js +1 -0
  442. package/.next/static/chunks/webpack-e4f2cfb4ad98f256.js +1 -0
  443. package/.next/static/css/31fb2fdadf8f1c6b.css +1 -0
  444. package/CHANGELOG.md +25 -0
  445. package/CLAUDE.md +1 -1
  446. package/README.md +1 -1
  447. package/ai-docs/key-constraints.md +9 -1
  448. package/app/agents/agent-events-bus.js +11 -1
  449. package/app/api/connections/[service]/verify/route.js +29 -1
  450. package/app/api/fs/pick-folder/route.js +13 -11
  451. package/app/api/orchestrator/stream/route.js +92 -9
  452. package/app/api/voice/realtime/session/route.js +4 -0
  453. package/app/components/app-topbar.jsx +265 -28
  454. package/app/components/dashboard/chat-panel.jsx +54 -5
  455. package/app/components/dashboard/thinking-disclosure.jsx +59 -0
  456. package/app/components/dashboard/tool-steps.js +9 -0
  457. package/app/components/dashboard/use-main-agent-stream.js +2 -0
  458. package/app/components/dashboard/use-realtime-voice.js +33 -5
  459. package/app/components/dashboard/use-stream-command.js +29 -2
  460. package/app/components/dashboard/voice-panel.jsx +148 -36
  461. package/app/components/ui/marketplace/install-toggle.jsx +44 -9
  462. package/app/globals.css +148 -8
  463. package/app/login/login-client.jsx +23 -5
  464. package/app/marketplace/connection-setup-modal.jsx +31 -1
  465. package/app/marketplace/connection-setup-steps/api-key-step.jsx +20 -3
  466. package/app/marketplace/install-toast.jsx +1 -1
  467. package/app/marketplace/marketplace-row.jsx +8 -1
  468. package/app/marketplace/marketplace-shell.jsx +78 -7
  469. package/app/marketplace/workflow-card.jsx +2 -1
  470. package/lib/agent-config.js +7 -0
  471. package/lib/agent-engines.js +182 -21
  472. package/lib/auth-config.js +24 -8
  473. package/lib/claude.js +19 -2
  474. package/lib/cli/doctor.js +25 -0
  475. package/lib/connection-seeds.js +1 -1
  476. package/lib/engine-verbosity.js +42 -0
  477. package/lib/env-file.js +3 -0
  478. package/lib/pick-folder-authz.js +15 -0
  479. package/lib/realtime-openai.js +49 -1
  480. package/lib/tools/adapters/browser-session.js +37 -8
  481. package/lib/tools/adapters/github.js +47 -5
  482. package/lib/tools/adapters/skill-bridge.js +146 -0
  483. package/lib/tools/registry.js +40 -4
  484. package/lib/voice/context.js +1 -1
  485. package/lib/voice/tools.js +34 -2
  486. package/package.json +1 -1
  487. package/scripts/migrate-auth-v1.mjs +92 -0
  488. package/.next/standalone/.next/static/chunks/3054-451abdd7b9afc2ac.js +0 -1
  489. package/.next/standalone/.next/static/chunks/8217.0beb0a316c7ad5d8.js +0 -1
  490. package/.next/standalone/.next/static/chunks/app/layout-b7e1918b9125641e.js +0 -1
  491. package/.next/standalone/.next/static/chunks/app/login/page-d2298bc1803944ae.js +0 -1
  492. package/.next/standalone/.next/static/chunks/app/marketplace/page-0b7d3a6309302de3.js +0 -1
  493. package/.next/standalone/.next/static/chunks/app/page-887ef6f96897f78a.js +0 -1
  494. package/.next/standalone/.next/static/chunks/app/projects/page-739d4cc74824d336.js +0 -1
  495. package/.next/standalone/.next/static/chunks/app/settings/layout-08f6b30132b26dd1.js +0 -1
  496. package/.next/standalone/.next/static/chunks/webpack-f916d679fe38a701.js +0 -1
  497. package/.next/standalone/.next/static/css/2587cd46c922a6d8.css +0 -1
  498. package/.next/static/chunks/3054-451abdd7b9afc2ac.js +0 -1
  499. package/.next/static/chunks/8217.0beb0a316c7ad5d8.js +0 -1
  500. package/.next/static/chunks/app/layout-b7e1918b9125641e.js +0 -1
  501. package/.next/static/chunks/app/login/page-d2298bc1803944ae.js +0 -1
  502. package/.next/static/chunks/app/marketplace/page-0b7d3a6309302de3.js +0 -1
  503. package/.next/static/chunks/app/page-887ef6f96897f78a.js +0 -1
  504. package/.next/static/chunks/app/projects/page-739d4cc74824d336.js +0 -1
  505. package/.next/static/chunks/app/settings/layout-08f6b30132b26dd1.js +0 -1
  506. package/.next/static/chunks/webpack-f916d679fe38a701.js +0 -1
  507. package/.next/static/css/2587cd46c922a6d8.css +0 -1
  508. /package/.next/standalone/.next/static/{ZxaTPKGC9lESQlvHfrHgp → -FRz43s1H_LZFhx24FvnL}/_buildManifest.js +0 -0
  509. /package/.next/standalone/.next/static/{ZxaTPKGC9lESQlvHfrHgp → -FRz43s1H_LZFhx24FvnL}/_ssgManifest.js +0 -0
  510. /package/.next/static/{ZxaTPKGC9lESQlvHfrHgp → -FRz43s1H_LZFhx24FvnL}/_buildManifest.js +0 -0
  511. /package/.next/static/{ZxaTPKGC9lESQlvHfrHgp → -FRz43s1H_LZFhx24FvnL}/_ssgManifest.js +0 -0
@@ -1,9 +1,12 @@
1
1
  'use client';
2
2
 
3
- import { useEffect, useMemo, useState } from 'react';
3
+ import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
4
+ import { createPortal } from 'react-dom';
4
5
  import { usePathname } from 'next/navigation';
5
- import { Search, Command } from 'lucide-react';
6
+ import { Search, Command, Activity } from 'lucide-react';
6
7
  import { subscribeAgentEvents } from '../agents/agent-events-bus.js';
8
+ import { SpinnerIcon, CheckIcon, StepXIcon } from './dashboard/icons';
9
+ import { toolStepDisplayName, toolStepSublabel } from './dashboard/tool-steps.js';
7
10
 
8
11
  // Pathname prefix → human section label. Longest-prefix wins via order: list
9
12
  // more specific paths before their parents.
@@ -31,35 +34,193 @@ function sectionFor(pathname) {
31
34
  return hit ? hit[1] : 'madarX';
32
35
  }
33
36
 
37
+ const STEP_CAP = 8; // most recent tool steps kept per agent
38
+ const LINGER_MS = 6000; // keep a finished agent in the list briefly
39
+ const ORPHAN_TTL_MS = 120000; // drop a "running" agent with no activity for 2m
40
+
41
+ // Fold a single live event into the keyed-by-agent activity map. Mirrors the
42
+ // dashboard's use-bg-agents reducer, kept inline here so the global topbar can
43
+ // show background-agent detail on every page from the shared SSE bus.
44
+ function reduceEvent(prev, event) {
45
+ const id = event.agent_id;
46
+ if (!id) return prev;
47
+ const existing = prev[id];
48
+
49
+ switch (event.type) {
50
+ case 'agent_run_start':
51
+ return {
52
+ ...prev,
53
+ [id]: {
54
+ agent_id: id,
55
+ agent_name: event.agent_name || id,
56
+ triggered_by: event.triggered_by || null,
57
+ status: 'running',
58
+ started_at: event.ts || Date.now(),
59
+ current_tool: null,
60
+ current_input: null,
61
+ last_activity: event.ts || Date.now(),
62
+ steps: existing?.steps?.slice(-4) ?? [],
63
+ },
64
+ };
65
+
66
+ case 'agent_tool_start': {
67
+ const base = existing || {
68
+ agent_id: id,
69
+ agent_name: event.agent_name || id,
70
+ triggered_by: null,
71
+ status: 'running',
72
+ started_at: Date.now(),
73
+ steps: [],
74
+ };
75
+ const ts = event.ts || Date.now();
76
+ return {
77
+ ...prev,
78
+ [id]: {
79
+ ...base,
80
+ agent_name: event.agent_name || base.agent_name,
81
+ status: 'running',
82
+ current_tool: event.tool,
83
+ current_input: event.input_summary ?? null,
84
+ last_activity: ts,
85
+ steps: [
86
+ ...base.steps,
87
+ { tool: event.tool, input: event.input_summary ?? null, status: 'running', ts },
88
+ ].slice(-STEP_CAP),
89
+ },
90
+ };
91
+ }
92
+
93
+ case 'agent_tool_result': {
94
+ if (!existing) return prev;
95
+ const steps = [...existing.steps];
96
+ for (let i = steps.length - 1; i >= 0; i--) {
97
+ if (steps[i].tool === event.tool && steps[i].status === 'running') {
98
+ steps[i] = { ...steps[i], status: event.isError ? 'error' : 'done' };
99
+ break;
100
+ }
101
+ }
102
+ return {
103
+ ...prev,
104
+ [id]: { ...existing, current_tool: null, last_activity: event.ts || Date.now(), steps },
105
+ };
106
+ }
107
+
108
+ case 'agent_run_complete':
109
+ if (!existing) return prev;
110
+ return {
111
+ ...prev,
112
+ [id]: {
113
+ ...existing,
114
+ status: event.isError ? 'failed' : 'complete',
115
+ finished_at: event.ts || Date.now(),
116
+ current_tool: null,
117
+ },
118
+ };
119
+
120
+ default:
121
+ return prev;
122
+ }
123
+ }
124
+
34
125
  export default function AppTopbar() {
35
126
  const pathname = usePathname();
36
127
  const section = useMemo(() => sectionFor(pathname), [pathname]);
37
128
 
38
- // Global "is anything running" indicator. Tracks the set of agent ids with a
39
- // live run via the shared SSE bus the same source the Run buttons use.
40
- const [runningIds, setRunningIds] = useState(() => new Set());
129
+ // Per-agent background activity, keyed by agent id. Fed by the shared SSE bus
130
+ // (same connection the Run buttons use) so the topbar reflects every
131
+ // sub-agent the Main Agent spawns, plus scheduled/heartbeat ticks.
132
+ const [agents, setAgents] = useState({});
133
+ const [open, setOpen] = useState(false);
134
+ const wrapRef = useRef(null);
41
135
 
42
136
  useEffect(() => {
43
137
  return subscribeAgentEvents((event) => {
44
- if (!event?.agent_id) return;
45
- if (event.type === 'agent_run_start') {
46
- setRunningIds((cur) => {
47
- const next = new Set(cur);
48
- next.add(event.agent_id);
49
- return next;
50
- });
51
- } else if (event.type === 'agent_run_complete') {
52
- setRunningIds((cur) => {
53
- if (!cur.has(event.agent_id)) return cur;
54
- const next = new Set(cur);
55
- next.delete(event.agent_id);
56
- return next;
57
- });
58
- }
138
+ setAgents((cur) => reduceEvent(cur, event));
59
139
  });
60
140
  }, []);
61
141
 
62
- const runningCount = runningIds.size;
142
+ // Sweep: evict finished agents after a short linger, and orphaned "running"
143
+ // agents whose run-complete event we never received.
144
+ useEffect(() => {
145
+ const timer = setInterval(() => {
146
+ const now = Date.now();
147
+ setAgents((cur) => {
148
+ let changed = false;
149
+ const next = {};
150
+ for (const [id, a] of Object.entries(cur)) {
151
+ if (a.status !== 'running') {
152
+ if (a.finished_at && now - a.finished_at > LINGER_MS) { changed = true; continue; }
153
+ } else if ((a.last_activity || a.started_at || 0) < now - ORPHAN_TTL_MS) {
154
+ changed = true; continue;
155
+ }
156
+ next[id] = a;
157
+ }
158
+ return changed ? next : cur;
159
+ });
160
+ }, 4000);
161
+ return () => clearInterval(timer);
162
+ }, []);
163
+
164
+ // The popover renders in a body portal (so it escapes the topbar's
165
+ // backdrop-filter stacking context and paints above canvas artifacts).
166
+ // It's anchored to the button via the button's viewport rect.
167
+ const popRef = useRef(null);
168
+ const [coords, setCoords] = useState(null);
169
+
170
+ useLayoutEffect(() => {
171
+ if (!open) return;
172
+ function reposition() {
173
+ const el = wrapRef.current;
174
+ if (!el) return;
175
+ const r = el.getBoundingClientRect();
176
+ setCoords({ top: Math.round(r.bottom + 8), right: Math.round(window.innerWidth - r.right) });
177
+ }
178
+ reposition();
179
+ window.addEventListener('resize', reposition);
180
+ window.addEventListener('scroll', reposition, true);
181
+ return () => {
182
+ window.removeEventListener('resize', reposition);
183
+ window.removeEventListener('scroll', reposition, true);
184
+ };
185
+ }, [open]);
186
+
187
+ // Close the popover on navigation and on Escape.
188
+ useEffect(() => { setOpen(false); }, [pathname]);
189
+ useEffect(() => {
190
+ if (!open) return;
191
+ function onKey(e) { if (e.key === 'Escape') setOpen(false); }
192
+ function onClick(e) {
193
+ // Outside-click must account for the portaled popover, which lives
194
+ // outside wrapRef in the DOM tree.
195
+ const inTrigger = wrapRef.current && wrapRef.current.contains(e.target);
196
+ const inPop = popRef.current && popRef.current.contains(e.target);
197
+ if (!inTrigger && !inPop) setOpen(false);
198
+ }
199
+ document.addEventListener('keydown', onKey);
200
+ document.addEventListener('mousedown', onClick);
201
+ return () => {
202
+ document.removeEventListener('keydown', onKey);
203
+ document.removeEventListener('mousedown', onClick);
204
+ };
205
+ }, [open]);
206
+
207
+ const list = useMemo(
208
+ () => Object.values(agents).sort((a, b) => (b.started_at || 0) - (a.started_at || 0)),
209
+ [agents],
210
+ );
211
+ const running = list.filter((a) => a.status === 'running');
212
+ const runningCount = running.length;
213
+
214
+ // Pill summary: one agent → name · current tool; many → a count; idle → label
215
+ // that reads as a feature ("Activity") so the control is discoverable even
216
+ // when nothing is running.
217
+ let label = 'Activity';
218
+ if (runningCount === 1) {
219
+ const a = running[0];
220
+ label = a.current_tool ? `${a.agent_name} · ${toolStepDisplayName(a.current_tool)}` : a.agent_name;
221
+ } else if (runningCount > 1) {
222
+ label = `${runningCount} agents running`;
223
+ }
63
224
 
64
225
  function openSearch() {
65
226
  if (typeof window !== 'undefined') {
@@ -81,13 +242,89 @@ export default function AppTopbar() {
81
242
  there is ONE toolbar instead of two. Empty on every other page. */}
82
243
  <div id="app-topbar-slot" className="app-topbar-slot" />
83
244
 
84
- <span
85
- className={`app-topbar-activity ${runningCount ? 'is-running' : ''}`}
86
- title={runningCount ? `${runningCount} agent${runningCount === 1 ? '' : 's'} running` : 'No agents running'}
87
- >
88
- <span className="app-topbar-dot" aria-hidden />
89
- {runningCount ? `${runningCount} running` : 'Idle'}
90
- </span>
245
+ <div className="app-topbar-activity-wrap" ref={wrapRef}>
246
+ <button
247
+ type="button"
248
+ className={`app-topbar-activity is-clickable ${runningCount ? 'is-running' : ''}`}
249
+ title={runningCount ? `${runningCount} agent${runningCount === 1 ? '' : 's'} running — click for details` : 'Background agent activity'}
250
+ onClick={() => setOpen((v) => !v)}
251
+ aria-expanded={open}
252
+ aria-haspopup="dialog"
253
+ >
254
+ <Activity size={12} className="app-topbar-activity-glyph" aria-hidden />
255
+ <span className="app-topbar-dot" aria-hidden />
256
+ <span className="app-topbar-activity-label">{label}</span>
257
+ </button>
258
+
259
+ {open && typeof document !== 'undefined' && createPortal(
260
+ <div
261
+ className="bg-activity-pop"
262
+ role="dialog"
263
+ aria-label="Background agent activity"
264
+ ref={popRef}
265
+ style={coords ? { top: coords.top, right: coords.right } : { visibility: 'hidden' }}
266
+ >
267
+ <div className="bg-activity-head">
268
+ <b>Background agents</b>
269
+ <small>
270
+ {runningCount
271
+ ? `${runningCount} working now`
272
+ : list.length
273
+ ? 'Recently finished'
274
+ : 'Live view of agents the Main Agent spawns'}
275
+ </small>
276
+ </div>
277
+ {list.length === 0 && (
278
+ <div className="bg-activity-empty">
279
+ <Activity size={18} aria-hidden />
280
+ <span>No background agents active right now.</span>
281
+ <small>When the Main Agent calls a sub-agent, it shows here live.</small>
282
+ </div>
283
+ )}
284
+ <div className="bg-activity-list">
285
+ {list.map((a) => (
286
+ <div key={a.agent_id} className={`bg-activity-agent bg-activity-agent--${a.status}`}>
287
+ <div className="bg-activity-agent-head">
288
+ <span className="bg-activity-agent-icon" aria-hidden>
289
+ {a.status === 'running' && <SpinnerIcon />}
290
+ {a.status === 'complete' && <CheckIcon />}
291
+ {a.status === 'failed' && <StepXIcon />}
292
+ </span>
293
+ <span className="bg-activity-agent-name">{a.agent_name}</span>
294
+ {a.triggered_by && (
295
+ <span className="bg-activity-agent-by">via {a.triggered_by}</span>
296
+ )}
297
+ <span className="bg-activity-agent-status">
298
+ {a.status === 'running'
299
+ ? (a.current_tool ? toolStepDisplayName(a.current_tool) : 'working…')
300
+ : a.status === 'complete' ? 'done' : 'failed'}
301
+ </span>
302
+ </div>
303
+ {a.steps.length > 0 && (
304
+ <div className="bg-activity-steps">
305
+ {a.steps.slice(-5).map((s, i) => (
306
+ <div key={i} className={`bg-activity-step bg-activity-step--${s.status}`}>
307
+ <span className="bg-activity-step-icon" aria-hidden>
308
+ {s.status === 'running' && <SpinnerIcon />}
309
+ {s.status === 'done' && <CheckIcon />}
310
+ {s.status === 'error' && <StepXIcon />}
311
+ </span>
312
+ <code className="bg-activity-step-name">{toolStepDisplayName(s.tool)}</code>
313
+ {toolStepSublabel(s.tool, s.input) && (
314
+ <span className="bg-activity-step-sub">{toolStepSublabel(s.tool, s.input)}</span>
315
+ )}
316
+ </div>
317
+ ))}
318
+ </div>
319
+ )}
320
+ </div>
321
+ ))}
322
+ </div>
323
+ <a className="bg-activity-foot" href="/activity">Open activity log →</a>
324
+ </div>,
325
+ document.body,
326
+ )}
327
+ </div>
91
328
 
92
329
  <button type="button" className="app-topbar-search" onClick={openSearch} aria-label="Open search (Command K)">
93
330
  <Search size={13} aria-hidden />
@@ -3,7 +3,8 @@ import { memo, useCallback, useEffect, useRef, useState } from 'react';
3
3
  import Markdown from 'react-markdown';
4
4
  import remarkGfm from 'remark-gfm';
5
5
  import { SpinnerIcon, CheckIcon, StepXIcon, ElapsedTime } from './icons';
6
- import { toolStepSublabel, toolStepDisplayName } from './tool-steps';
6
+ import { toolStepSublabel, toolStepDisplayName, formatToolDuration } from './tool-steps';
7
+ import { ThinkingDisclosure } from './thinking-disclosure';
7
8
  import { useDashboard } from './dashboard-context';
8
9
  import { useDraftPersist } from './use-draft-persist';
9
10
 
@@ -27,6 +28,29 @@ function formatBytes(n) {
27
28
  return `${(n / 1024 / 1024).toFixed(1)} MB`;
28
29
  }
29
30
 
31
+ // Whether a streamed agent turn contains HTML artifact markup (a ```html fence,
32
+ // or a raw document the model started emitting). Such content renders on the
33
+ // canvas — it should never type out as raw markup in the chat bubble.
34
+ function hasArtifactMarkup(text) {
35
+ return /```html|<!doctype html|<html[\s>]/i.test(text || '');
36
+ }
37
+
38
+ // Strip artifact markup (and any half-streamed action block) from a streaming
39
+ // preview so the chat shows only the conversational prose. Engine-agnostic
40
+ // safety net — the CLI path already strips server-side, but Anthropic/Ollama
41
+ // deltas pass through here.
42
+ function cleanStreamingPreview(text) {
43
+ if (!text) return '';
44
+ return text
45
+ .replace(/```madarx-action[\s\S]*?```/gi, '')
46
+ .replace(/```madarx-action[\s\S]*$/i, '')
47
+ .replace(/```html[\s\S]*?```/gi, '')
48
+ .replace(/```html[\s\S]*$/i, '')
49
+ .replace(/<!doctype html[\s\S]*$/i, '')
50
+ .replace(/<html[\s>][\s\S]*$/i, '')
51
+ .trim();
52
+ }
53
+
30
54
  function ChatPanel() {
31
55
  const {
32
56
  initializing,
@@ -63,6 +87,8 @@ function ChatPanel() {
63
87
  const liveSteps = mainAgent.liveSteps;
64
88
  const busyStartTime = mainAgent.busyStartTime;
65
89
  const agentPhase = mainAgent.agentPhase;
90
+ const liveThinking = mainAgent.liveThinking;
91
+ const liveStatus = mainAgent.liveStatus;
66
92
  const busy = mainAgent.busy;
67
93
  const command = mainAgent.command;
68
94
  const stop = mainAgent.stop;
@@ -375,11 +401,25 @@ function ChatPanel() {
375
401
  </div>
376
402
  </div>
377
403
  ) : chat.map((m, i) => {
404
+ const isAgent = m.role === 'agent';
405
+ // While an agent turn streams, the model may be emitting a full HTML
406
+ // artifact — that belongs on the canvas, not as raw markup typing into the
407
+ // chat bubble. Strip it from the preview; if the turn is artifact-only,
408
+ // show a tasteful "designing" placeholder instead.
409
+ const cleaned = isAgent && m.streaming ? cleanStreamingPreview(m.text) : m.text;
410
+ const building = isAgent && (m.building || (m.streaming && !cleaned && hasArtifactMarkup(m.text)));
378
411
  // Empty agent placeholder — never shown. Live activity below covers it.
379
- if (m.role === 'agent' && !m.text) return null;
412
+ if (isAgent && !cleaned && !building) return null;
380
413
  return (
381
- <div className={'msg ' + m.role + (m.streaming ? ' msg--streaming' : '')} key={i}>
382
- <Markdown remarkPlugins={[remarkGfm]}>{m.text}</Markdown>
414
+ <div className={'msg ' + m.role + (m.streaming ? ' msg--streaming' : '') + (building ? ' msg--building' : '')} key={i}>
415
+ {building ? (
416
+ <div className="artifact-building" aria-live="polite">
417
+ <span className="artifact-building-orb" aria-hidden="true" />
418
+ <span className="artifact-building-label">Designing the page<span className="artifact-building-dots"><i>.</i><i>.</i><i>.</i></span></span>
419
+ </div>
420
+ ) : (
421
+ <Markdown remarkPlugins={[remarkGfm]}>{cleaned}</Markdown>
422
+ )}
383
423
  {Array.isArray(m.attachments) && m.attachments.length > 0 && (
384
424
  <div className="msg-attachments">
385
425
  {m.attachments.map(a => (
@@ -396,12 +436,17 @@ function ChatPanel() {
396
436
  </div>
397
437
  );
398
438
  })}
439
+ {(busy || (liveThinking && liveThinking.trim())) && (
440
+ <ThinkingDisclosure thinking={liveThinking} status={liveStatus} busy={busy} />
441
+ )}
399
442
  {liveSteps.length > 0 && (
400
443
  <div className="tool-steps">
401
444
  {liveSteps.map(step => {
402
445
  const isCli = step.name === 'claude_code_cli' || step.name === 'codex_cli';
403
446
  const sub = toolStepSublabel(step.name, step.input);
404
447
  const awaiting = step.status === 'awaiting_approval';
448
+ const dur = typeof step.durationMs === 'number' && step.durationMs > 0 ? formatToolDuration(step.durationMs) : null;
449
+ const previewLine = step.preview ? String(step.preview).split('\n').find(l => l.trim()) : null;
405
450
  return (
406
451
  <div key={step.id} className={`tool-step tool-step--${step.status}` + (isCli ? ' tool-step--cli' : '')}>
407
452
  <span className="tool-step-icon" aria-hidden="true">
@@ -413,6 +458,10 @@ function ChatPanel() {
413
458
  </span>
414
459
  {!isCli && <code className="tool-step-name">{toolStepDisplayName(step.name)}</code>}
415
460
  {sub && <span className="tool-step-sub">{sub}</span>}
461
+ {previewLine && step.status === 'done' && (
462
+ <span className="tool-step-preview" title={step.preview}>{previewLine.slice(0, 64)}</span>
463
+ )}
464
+ {dur && !awaiting && <span className="tool-step-dur">{dur}</span>}
416
465
  {awaiting && step.approval_id ? (
417
466
  <span className="tool-step-approve" style={{ marginLeft: 'auto', display: 'inline-flex', gap: 6 }}>
418
467
  <button
@@ -441,7 +490,7 @@ function ChatPanel() {
441
490
  )}
442
491
  </div>
443
492
  )}
444
- {busy && liveSteps.length === 0 && <div className="typing-indicator"><span /><span /><span /></div>}
493
+ {busy && liveSteps.length === 0 && !liveStatus && !(liveThinking && liveThinking.trim()) && <div className="typing-indicator"><span /><span /><span /></div>}
445
494
  </div>
446
495
  </section>
447
496
  <div
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ import { useEffect, useRef, useState } from 'react';
3
+
4
+ // Engine-agnostic live reasoning + status surface. Streams the model's extended
5
+ // "thinking" into a collapsible panel (Claude-Code-TUI style) and shows a status
6
+ // line with elapsed time so cold-start and long tools never look frozen. Fed by
7
+ // the cli_thinking / cli_status events, which every engine that supports them
8
+ // emits in the same shape.
9
+
10
+ const PHASE_LABELS = {
11
+ starting: 'Starting engine…',
12
+ working: 'Working…',
13
+ generating: 'Composing…',
14
+ thinking: 'Thinking…',
15
+ done: 'Finishing…',
16
+ };
17
+
18
+ export function ThinkingDisclosure({ thinking, status, busy }) {
19
+ const [open, setOpen] = useState(false);
20
+ const bodyRef = useRef(null);
21
+
22
+ const hasThinking = Boolean(thinking && thinking.trim());
23
+
24
+ // Keep the streaming reasoning pinned to the latest token while open.
25
+ useEffect(() => {
26
+ if (open && bodyRef.current) bodyRef.current.scrollTop = bodyRef.current.scrollHeight;
27
+ }, [thinking, open]);
28
+
29
+ if (!hasThinking && !busy) return null;
30
+
31
+ const phase = status?.phase;
32
+ const label = PHASE_LABELS[phase] || (hasThinking ? 'Thinking' : 'Working…');
33
+ const elapsed = status?.elapsedMs ? `${Math.round(status.elapsedMs / 1000)}s` : null;
34
+
35
+ return (
36
+ <div className={'thinking-disclosure' + (open ? ' open' : '')}>
37
+ <button
38
+ type="button"
39
+ className="thinking-toggle"
40
+ onClick={() => hasThinking && setOpen(o => !o)}
41
+ aria-expanded={open}
42
+ disabled={!hasThinking}
43
+ title={hasThinking ? 'Show reasoning' : undefined}
44
+ >
45
+ <span className={'thinking-dot' + (busy ? ' pulsing' : '')} aria-hidden="true" />
46
+ <span className="thinking-label">{label}</span>
47
+ {elapsed && <span className="thinking-elapsed">{elapsed}</span>}
48
+ {hasThinking && (
49
+ <svg className={'thinking-caret' + (open ? ' open' : '')} width="10" height="10" viewBox="0 0 10 10" fill="none" aria-hidden="true">
50
+ <path d="M2 3.5L5 6.5L8 3.5" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
51
+ </svg>
52
+ )}
53
+ </button>
54
+ {open && hasThinking && (
55
+ <div className="thinking-body" ref={bodyRef}>{thinking}</div>
56
+ )}
57
+ </div>
58
+ );
59
+ }
@@ -28,6 +28,15 @@ function hostname(u) {
28
28
  try { return new URL(String(u)).hostname; } catch { return String(u).slice(0, 52); }
29
29
  }
30
30
 
31
+ // Compact elapsed-time label for a finished tool step (e.g. "820ms", "3.4s", "1m 5s").
32
+ export function formatToolDuration(ms) {
33
+ if (!ms || ms < 0) return null;
34
+ if (ms < 1000) return `${Math.round(ms)}ms`;
35
+ if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;
36
+ const s = Math.round(ms / 1000);
37
+ return `${Math.floor(s / 60)}m ${s % 60}s`;
38
+ }
39
+
31
40
  export function toolStepDisplayName(name) {
32
41
  if (!name) return '';
33
42
  if (CC_DISPLAY_NAMES[name]) return CC_DISPLAY_NAMES[name];
@@ -16,6 +16,8 @@ export function useMainAgentStream(opts) {
16
16
  liveSteps: stream.liveSteps,
17
17
  busyStartTime: stream.busyStartTime,
18
18
  agentPhase: stream.agentPhase,
19
+ liveThinking: stream.liveThinking,
20
+ liveStatus: stream.liveStatus,
19
21
  bgAgentList,
20
22
  hasBgActivity,
21
23
  feedRef: stream.feedRef,
@@ -24,7 +24,12 @@ function safeJson(text) {
24
24
  try { return JSON.parse(text); } catch { return null; }
25
25
  }
26
26
 
27
- export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpace = null, allSpaces = null, onTranscript } = {}) {
27
+ // `transport` (default true): Realtime is STT-only. Final user transcripts are
28
+ // handed to `onUserUtterance(text)` and the answer is produced by the main
29
+ // orchestrator (same brain as typed chat), then spoken via the TTS lane. When
30
+ // false, the legacy in-browser-brain path runs (Realtime reasons + calls tools
31
+ // + speaks) for rollback.
32
+ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpace = null, allSpaces = null, transport = true, greetingText = '', onUserUtterance, onTranscript } = {}) {
28
33
  const [state, setState] = useState(STATE_IDLE);
29
34
  const [error, setError] = useState(null);
30
35
  const [transcript, setTranscript] = useState([]);
@@ -186,6 +191,12 @@ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpa
186
191
  case 'conversation.item.input_audio_transcription.completed':
187
192
  if (event.transcript) {
188
193
  appendTranscript({ role: 'user', text: event.transcript, at: Date.now() });
194
+ // Transport mode: the Realtime model does not answer. Forward the
195
+ // final user utterance to the main orchestrator brain.
196
+ if (transport) {
197
+ const said = String(event.transcript || '').trim();
198
+ if (said) onUserUtterance?.(said);
199
+ }
189
200
  }
190
201
  break;
191
202
  case 'response.created':
@@ -202,7 +213,9 @@ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpa
202
213
  }
203
214
  break;
204
215
  case 'response.function_call_arguments.done':
205
- handleToolCall(event);
216
+ // Transport mode has no tools on the Realtime session; ignore any stray
217
+ // function-call event so the brain stays solely with the orchestrator.
218
+ if (!transport) handleToolCall(event);
206
219
  break;
207
220
  case 'error': {
208
221
  const code = event.error?.code || '';
@@ -220,7 +233,7 @@ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpa
220
233
  default:
221
234
  break;
222
235
  }
223
- }, [handleToolCall, onTranscript, sendEvent]);
236
+ }, [handleToolCall, onTranscript, onUserUtterance, sendEvent, transport]);
224
237
 
225
238
  const startAudioLevelMeter = useCallback((stream) => {
226
239
  try {
@@ -278,6 +291,7 @@ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpa
278
291
  speaking_style: speakingStyle,
279
292
  active_space: activeSpace,
280
293
  all_spaces: allSpaces,
294
+ mode: transport ? 'transport' : 'realtime',
281
295
  }),
282
296
  });
283
297
  if (!mintRes.ok) {
@@ -318,7 +332,21 @@ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpa
318
332
  const dc = pc.createDataChannel('oai-events');
319
333
  dcRef.current = dc;
320
334
  dc.onmessage = (event) => handleMessage(event.data);
321
- dc.onopen = () => setState(STATE_LIVE);
335
+ dc.onopen = () => {
336
+ setState(STATE_LIVE);
337
+ // Greet on connect. In the legacy (brain) mode the Realtime model can
338
+ // speak it directly via a one-off response.create. In transport mode the
339
+ // model is silent, so the panel handles the greeting via the TTS lane.
340
+ const greet = String(greetingText || '').trim();
341
+ if (greet && !transport) {
342
+ try {
343
+ dc.send(JSON.stringify({
344
+ type: 'response.create',
345
+ response: { instructions: `Greet the operator now, once, briefly and warmly. Say exactly: "${greet}" and nothing else.` },
346
+ }));
347
+ } catch {}
348
+ }
349
+ };
322
350
  dc.onclose = () => {
323
351
  cleanup();
324
352
  setState(STATE_IDLE);
@@ -349,7 +377,7 @@ export function useRealtimeVoice({ projectId = null, agentId = 'main', activeSpa
349
377
  setState(STATE_ERROR);
350
378
  setError(String(err?.message || err));
351
379
  }
352
- }, [activeSpace, agentId, allSpaces, cleanup, handleMessage, projectId, startAudioLevelMeter, state]);
380
+ }, [activeSpace, agentId, allSpaces, cleanup, greetingText, handleMessage, projectId, startAudioLevelMeter, state, transport]);
353
381
 
354
382
  // Toggle the local mic track without dropping the WebRTC connection. The
355
383
  // model still streams audio out (so the user can listen), but their voice