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
@@ -7,18 +7,42 @@ import { chatWithClaude } from './claude.js';
7
7
  const ANTHROPIC_MODEL = 'claude-sonnet-4-6';
8
8
  import { publishLiveEvent } from './live-events.js';
9
9
  import { WORKSPACE, DATA_DIR, ensureDirs } from './paths.js';
10
+ import { getStreamVerbosity, verbosityStreamsThinking, thinkingBudgetTokens } from './engine-verbosity.js';
10
11
 
11
12
  const PROJECT_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
12
13
 
14
+ // Extract a short, human-readable preview from a tool_result block's content.
15
+ // Content can be a string or an array of {type:'text', text} / image parts.
16
+ function previewToolResultContent(block) {
17
+ const c = block?.content;
18
+ let text = '';
19
+ if (typeof c === 'string') text = c;
20
+ else if (Array.isArray(c)) {
21
+ text = c.map(p => (typeof p === 'string' ? p : (p?.type === 'text' && typeof p.text === 'string' ? p.text : ''))).join('');
22
+ }
23
+ text = String(text || '');
24
+ return {
25
+ preview: text.slice(0, 200),
26
+ chars: text.length,
27
+ lines: text ? text.split('\n').length : 0,
28
+ };
29
+ }
30
+
13
31
  // Parses Claude Code's `--output-format stream-json` stdout. Each line is a JSON
14
32
  // envelope. We care about:
15
33
  // - assistant.message.content[].type === 'text' → accumulate response text
34
+ // - assistant.message.content[].type === 'thinking' → surface reasoning (onThinkingDelta)
16
35
  // - assistant.message.content[].type === 'tool_use' → emit agent_tool_start
17
36
  // - user.message.content[].type === 'tool_result' → emit agent_tool_result
18
- // Everything else (system, init, hooks, partials, result) is ignored.
19
- function makeStreamJsonParser({ agentId, agentName, onText, onToolStart, onToolResult, onResult }) {
37
+ // - stream_event (only with --include-partial-messages) incremental text /
38
+ // thinking deltas for smooth token-by-token streaming.
39
+ // `partial` tells us deltas are active: when true the live preview is driven by
40
+ // stream_event deltas, and the complete assistant envelope is used ONLY to
41
+ // accumulate the authoritative final answer (avoids double-counting).
42
+ export function makeStreamJsonParser({ agentId, agentName, partial = false, onText, onTextDelta, onThinkingDelta, onToolStart, onToolResult, onResult, onStatus }) {
20
43
  let buffer = '';
21
44
  const toolNameById = new Map();
45
+ const toolStartedAt = new Map();
22
46
  return function handleChunk(chunk) {
23
47
  buffer += chunk;
24
48
  let nl;
@@ -29,6 +53,28 @@ function makeStreamJsonParser({ agentId, agentName, onText, onToolStart, onToolR
29
53
  let evt;
30
54
  try { evt = JSON.parse(raw); } catch { continue; }
31
55
  if (!evt || typeof evt !== 'object') continue;
56
+
57
+ // Partial-message deltas (present only with --include-partial-messages).
58
+ // These wrap the raw Anthropic SSE event under evt.event. They drive the
59
+ // live preview; the authoritative answer still comes from the complete
60
+ // `assistant` envelopes below.
61
+ if (evt.type === 'stream_event' && evt.event && typeof evt.event === 'object') {
62
+ const se = evt.event;
63
+ if (se.type === 'content_block_delta' && se.delta) {
64
+ const d = se.delta;
65
+ if (d.type === 'text_delta' && typeof d.text === 'string') {
66
+ onTextDelta?.(d.text);
67
+ } else if (d.type === 'thinking_delta' && typeof d.thinking === 'string') {
68
+ onThinkingDelta?.(d.thinking);
69
+ }
70
+ } else if (se.type === 'content_block_start' && se.content_block?.type === 'thinking') {
71
+ onStatus?.('thinking');
72
+ } else if (se.type === 'message_start') {
73
+ onStatus?.('generating');
74
+ }
75
+ continue;
76
+ }
77
+
32
78
  // Terminal result event carries the run's final text at top level
33
79
  // (`evt.result`), not inside message.content. Capture it as a last-resort
34
80
  // answer for turns that emitted only tool_use blocks and no clean text
@@ -52,6 +98,16 @@ function makeStreamJsonParser({ agentId, agentName, onText, onToolStart, onToolR
52
98
  // can keep it for the live chat preview but exclude it from the
53
99
  // final return value.
54
100
  const hasToolUse = content.some(b => b?.type === 'tool_use');
101
+ // Thinking blocks in a complete envelope: only surface here when partial
102
+ // streaming is OFF (otherwise the stream_event deltas already did, and
103
+ // re-emitting would duplicate the reasoning).
104
+ if (!partial) {
105
+ for (const b of content) {
106
+ if (b?.type === 'thinking' && typeof b.thinking === 'string' && b.thinking) {
107
+ onThinkingDelta?.(b.thinking);
108
+ }
109
+ }
110
+ }
55
111
  const messageText = content
56
112
  .filter(b => b?.type === 'text' && typeof b.text === 'string')
57
113
  .map(b => b.text)
@@ -59,7 +115,10 @@ function makeStreamJsonParser({ agentId, agentName, onText, onToolStart, onToolR
59
115
  if (messageText) onText?.(messageText, { isFinal: !hasToolUse });
60
116
  for (const block of content) {
61
117
  if (block?.type === 'tool_use') {
62
- if (block.id) toolNameById.set(block.id, block.name || 'tool');
118
+ if (block.id) {
119
+ toolNameById.set(block.id, block.name || 'tool');
120
+ toolStartedAt.set(block.id, Date.now());
121
+ }
63
122
  onToolStart?.({ id: block.id, name: block.name || 'tool', input: block.input });
64
123
  if (agentId) {
65
124
  publishLiveEvent({
@@ -76,7 +135,18 @@ function makeStreamJsonParser({ agentId, agentName, onText, onToolStart, onToolR
76
135
  for (const block of content) {
77
136
  if (block?.type === 'tool_result') {
78
137
  const toolName = toolNameById.get(block.tool_use_id) || 'tool';
79
- onToolResult?.({ tool_use_id: block.tool_use_id, name: toolName, isError: Boolean(block.is_error) });
138
+ const startedAt = toolStartedAt.get(block.tool_use_id);
139
+ const durationMs = startedAt ? Date.now() - startedAt : null;
140
+ const { preview, chars, lines } = previewToolResultContent(block);
141
+ onToolResult?.({
142
+ tool_use_id: block.tool_use_id,
143
+ name: toolName,
144
+ isError: Boolean(block.is_error),
145
+ durationMs,
146
+ preview,
147
+ chars,
148
+ lines,
149
+ });
80
150
  if (agentId) {
81
151
  publishLiveEvent({
82
152
  type: 'agent_tool_result',
@@ -85,9 +155,11 @@ function makeStreamJsonParser({ agentId, agentName, onText, onToolStart, onToolR
85
155
  tool: toolName,
86
156
  status: block.is_error ? 'error' : 'done',
87
157
  isError: Boolean(block.is_error),
158
+ duration_ms: durationMs,
88
159
  });
89
160
  }
90
161
  toolNameById.delete(block.tool_use_id);
162
+ toolStartedAt.delete(block.tool_use_id);
91
163
  }
92
164
  }
93
165
  }
@@ -292,6 +364,30 @@ export async function commandExists(command) {
292
364
  });
293
365
  }
294
366
 
367
+ // Whether the installed `claude` CLI understands --include-partial-messages
368
+ // (needed for token-by-token streaming + thinking deltas). Older CLIs reject
369
+ // unknown flags and fail the whole spawn, so we probe `claude --help` once and
370
+ // cache the result, degrading gracefully to chunked streaming when absent.
371
+ // Force with MADARX_CC_FORCE_PARTIAL=1, disable with =0.
372
+ let _ccPartialSupport;
373
+ async function claudeSupportsPartialMessages() {
374
+ if (process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE) return false;
375
+ if (process.env.MADARX_CC_FORCE_PARTIAL === '1') return true;
376
+ if (process.env.MADARX_CC_FORCE_PARTIAL === '0') return false;
377
+ if (_ccPartialSupport !== undefined) return _ccPartialSupport;
378
+ _ccPartialSupport = await new Promise(resolve => {
379
+ try {
380
+ const child = spawn(commandSpawnTarget('claude'), ['--help'], { shell: false });
381
+ let out = '';
382
+ child.stdout.on('data', c => { out += c.toString(); });
383
+ child.stderr.on('data', c => { out += c.toString(); });
384
+ child.on('error', () => resolve(false));
385
+ child.on('close', () => resolve(out.includes('include-partial-messages')));
386
+ } catch { resolve(false); }
387
+ });
388
+ return _ccPartialSupport;
389
+ }
390
+
295
391
  async function listOllamaModels() {
296
392
  try {
297
393
  const response = await fetch(`${OLLAMA_BASE_URL}/api/tags`, { signal: AbortSignal.timeout(1500) });
@@ -384,32 +480,73 @@ function cliOutput(command, args, { cwd = process.cwd(), timeoutMs = 120000, clo
384
480
  });
385
481
  }
386
482
 
387
- export async function runOllamaAgent({ model, systemPrompt, userMessage, maxTokens = 2048 }) {
483
+ export async function runOllamaAgent({ model, systemPrompt, userMessage, maxTokens = 2048, onChunk, onThinking } = {}) {
388
484
  if (process.env.MADARX_MOCK_OLLAMA_RESPONSE) return process.env.MADARX_MOCK_OLLAMA_RESPONSE;
485
+ // Stream only when a consumer wants live output. `think` surfaces reasoning on
486
+ // models that support it (deepseek-r1, qwen3, …) but errors on some Ollama
487
+ // versions/models, so it's opt-in via MADARX_OLLAMA_THINK=1.
488
+ const wantStream = Boolean(onChunk || onThinking);
489
+ const wantThink = wantStream && verbosityStreamsThinking() && process.env.MADARX_OLLAMA_THINK === '1';
490
+ const body = {
491
+ model: model || process.env.OLLAMA_MODEL,
492
+ stream: wantStream,
493
+ options: { num_predict: maxTokens },
494
+ messages: [
495
+ { role: 'system', content: systemPrompt },
496
+ { role: 'user', content: userMessage },
497
+ ],
498
+ };
499
+ if (wantThink) body.think = true;
389
500
  const response = await fetch(`${OLLAMA_BASE_URL}/api/chat`, {
390
501
  method: 'POST',
391
502
  headers: { 'Content-Type': 'application/json' },
392
- body: JSON.stringify({
393
- model: model || process.env.OLLAMA_MODEL,
394
- stream: false,
395
- options: { num_predict: maxTokens },
396
- messages: [
397
- { role: 'system', content: systemPrompt },
398
- { role: 'user', content: userMessage },
399
- ],
400
- }),
503
+ body: JSON.stringify(body),
401
504
  });
402
505
  if (!response.ok) throw new Error(`Ollama chat failed: HTTP ${response.status}`);
403
- const data = await response.json();
404
- const content = data.message?.content || data.response || '';
506
+ if (!wantStream) {
507
+ const data = await response.json();
508
+ const content = data.message?.content || data.response || '';
509
+ if (!content.trim()) throw new Error('Ollama returned no text');
510
+ return content.trim();
511
+ }
512
+ // Streaming: Ollama emits newline-delimited JSON. Accumulate content + thinking
513
+ // and forward incremental pieces to the callbacks for a live chat preview.
514
+ let content = '';
515
+ let thinking = '';
516
+ const reader = response.body.getReader();
517
+ const dec = new TextDecoder();
518
+ let buf = '';
519
+ while (true) {
520
+ const { done, value } = await reader.read();
521
+ if (done) break;
522
+ buf += dec.decode(value, { stream: true });
523
+ let nl;
524
+ while ((nl = buf.indexOf('\n')) >= 0) {
525
+ const line = buf.slice(0, nl).trim();
526
+ buf = buf.slice(nl + 1);
527
+ if (!line) continue;
528
+ let evt;
529
+ try { evt = JSON.parse(line); } catch { continue; }
530
+ const piece = evt.message?.content || evt.response || '';
531
+ const think = evt.message?.thinking || '';
532
+ if (piece) { content += piece; onChunk?.(piece, content); }
533
+ if (think) { thinking += think; onThinking?.(thinking, think); }
534
+ }
535
+ }
405
536
  if (!content.trim()) throw new Error('Ollama returned no text');
406
537
  return content.trim();
407
538
  }
408
539
 
409
- export async function runClaudeCodeAgent({ model, systemPrompt, userMessage, maxTurns, allowedTools = [], timeoutMs, onChunk, onAssistantText, onToolStart, onToolResult, cwd, addDirs = [], agentId, agentName } = {}) {
540
+ export async function runClaudeCodeAgent({ model, systemPrompt, userMessage, maxTurns, allowedTools = [], timeoutMs, onChunk, onAssistantText, onThinking, onStatus, onToolStart, onToolResult, cwd, addDirs = [], agentId, agentName, verbosity } = {}) {
410
541
  if (process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE) return process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE;
411
542
  const prompt = `${systemPrompt}\n\n${userMessage}`;
412
543
  const effectiveMaxTurns = Number(maxTurns || process.env.CLAUDE_CODE_MAX_TURNS || 30);
544
+ const v = verbosity || getStreamVerbosity();
545
+ const wantsThinking = verbosityStreamsThinking(v);
546
+ // Token-by-token streaming + reasoning need --include-partial-messages, which
547
+ // only newer CLIs support. Probe once; fall back to chunked complete-message
548
+ // streaming when unavailable so nothing breaks on older installs.
549
+ const partial = wantsThinking && await claudeSupportsPartialMessages();
413
550
  const args = [
414
551
  '-p', prompt,
415
552
  '--max-turns', String(effectiveMaxTurns),
@@ -418,12 +555,21 @@ export async function runClaudeCodeAgent({ model, systemPrompt, userMessage, max
418
555
  '--permission-mode', 'bypassPermissions',
419
556
  '--setting-sources', 'project,local,user',
420
557
  ];
558
+ if (partial) args.push('--include-partial-messages');
421
559
  for (const dir of addDirs) {
422
560
  if (dir) args.push('--add-dir', dir);
423
561
  }
424
562
  if (allowedTools.length) args.push('--allowedTools', allowedTools.join(','));
425
563
  if (model && model !== 'claude-code') args.splice(2, 0, '--model', model);
426
564
 
565
+ // Best-effort nudge for the spawned CLI to actually produce extended thinking.
566
+ // Harmless when unsupported (the env var is simply ignored).
567
+ const subEnv = claudeSubprocessEnv();
568
+ if (wantsThinking) {
569
+ const budget = thinkingBudgetTokens(v);
570
+ if (budget > 0) subEnv.MAX_THINKING_TOKENS = String(Math.max(1024, budget));
571
+ }
572
+
427
573
  // Two buffers: `narrationParts` keeps every assistant text block (used only
428
574
  // for the live chat preview), `finalParts` keeps text from messages that had
429
575
  // NO tool_use — i.e. the actual answer, not the "let me search next…" prose.
@@ -433,17 +579,32 @@ export async function runClaudeCodeAgent({ model, systemPrompt, userMessage, max
433
579
  const finalParts = [];
434
580
  let lastNarration = '';
435
581
  let resultText = '';
582
+ // Live preview accumulators for partial mode. `liveDelta` is the running
583
+ // answer text (token deltas); `liveThinking` is the running reasoning. They
584
+ // never feed the returned answer — only the live chat surface.
585
+ let liveDelta = '';
586
+ let liveThinking = '';
436
587
  const parse = makeStreamJsonParser({
437
588
  agentId,
438
589
  agentName,
590
+ partial,
439
591
  onText: (t, opts = {}) => {
440
592
  narrationParts.push(t);
441
593
  if (opts.isFinal) finalParts.push(t);
442
594
  else lastNarration = t;
443
- // Snapshot of running assistant prose so the route can stream a clean
444
- // preview to the chat without exposing raw stream-json envelopes.
445
- onAssistantText?.(narrationParts.join('').trim());
595
+ // When partial deltas are streaming the preview, the complete envelope is
596
+ // authoritative-only don't also drive the preview from it (would double).
597
+ if (!partial) onAssistantText?.(narrationParts.join('').trim());
598
+ },
599
+ onTextDelta: (delta) => {
600
+ liveDelta += delta;
601
+ onAssistantText?.(liveDelta.trim());
602
+ },
603
+ onThinkingDelta: (delta) => {
604
+ liveThinking += delta;
605
+ onThinking?.(liveThinking.trim(), delta);
446
606
  },
607
+ onStatus: (phase) => { onStatus?.(phase); },
447
608
  onResult: (t) => { resultText = t; },
448
609
  onToolStart,
449
610
  onToolResult,
@@ -461,7 +622,7 @@ export async function runClaudeCodeAgent({ model, systemPrompt, userMessage, max
461
622
  // local CLI engine. Strip them so CC uses the logged-in subscription.
462
623
  // Honor an explicit opt-out for users who genuinely want API-key billing
463
624
  // for the spawned CLI (MADARX_CLI_USE_API_KEY=1).
464
- env: claudeSubprocessEnv(),
625
+ env: subEnv,
465
626
  onChunk: (chunk) => {
466
627
  parse(chunk);
467
628
  onChunk?.(chunk);
@@ -74,26 +74,42 @@ export function verifyRecoveryToken(provided) {
74
74
 
75
75
  function envMode() {
76
76
  const raw = process.env.MADARX_AUTH_MODE;
77
- if (raw && String(raw).trim()) return String(raw).trim().toLowerCase();
77
+ if (raw && String(raw).trim()) {
78
+ const m = String(raw).trim().toLowerCase();
79
+ if (VALID_MODES.has(m)) return m;
80
+ }
78
81
  return null;
79
82
  }
80
83
 
81
- /** True when MADARX_AUTH_MODE is explicitly set — the UI cannot override it. */
84
+ /**
85
+ * True ONLY when the operator opts into a hard lock via MADARX_AUTH_MODE_LOCK=1
86
+ * (alongside a valid MADARX_AUTH_MODE). In that state the UI / recovery flow
87
+ * cannot change the mode — for multi-tenant deployments that must fail closed.
88
+ *
89
+ * A bare `MADARX_AUTH_MODE` is NOT a lock: it only seeds the initial default the
90
+ * UI can still override. This is deliberate — a stray `MADARX_AUTH_MODE=supabase`
91
+ * with no resolvable credentials must never strand the operator behind a login
92
+ * that can't initialise, because the config-table mode (written by the login
93
+ * screen and the recovery-token hatch) always wins over the env seed.
94
+ */
82
95
  export function isAuthModeEnvLocked() {
83
- const m = envMode();
84
- return Boolean(m && VALID_MODES.has(m));
96
+ const lock = String(process.env.MADARX_AUTH_MODE_LOCK || '').trim().toLowerCase();
97
+ return Boolean(envMode() && (lock === '1' || lock === 'true'));
85
98
  }
86
99
 
87
100
  export function getAuthMode() {
88
- const override = envMode();
89
- if (override && VALID_MODES.has(override)) return override;
101
+ // Hard lock (opt-in): env wins outright, UI cannot override.
102
+ if (isAuthModeEnvLocked()) return envMode();
103
+ // Normal precedence: the config table (UI/recovery-managed) wins, so the
104
+ // login screen and the recovery-token hatch can always change the mode.
90
105
  try {
91
106
  const stored = getConfig(AUTH_MODE_KEY, null);
92
107
  if (stored && VALID_MODES.has(stored)) return stored;
93
108
  } catch {
94
- // DB not ready (very early boot) — fall through to the safe default.
109
+ // DB not ready (very early boot) — fall through to the env seed / default.
95
110
  }
96
- return 'local';
111
+ // No stored mode yet → env acts as the initial default (seed), else local.
112
+ return envMode() || 'local';
97
113
  }
98
114
 
99
115
  export function getSupabaseAuthConfig() {
package/lib/claude.js CHANGED
@@ -76,15 +76,32 @@ export async function chatWithClaude(messages, systemPrompt, tools = [], options
76
76
  return withRetry(() => client.messages.create(params), `chat(${params.model})`);
77
77
  }
78
78
 
79
- export async function streamChatWithClaude(messages, systemPrompt, tools = [], model = MODEL) {
79
+ // Extended thinking is supported on Claude 3.7+ Sonnet and the Claude 4 family.
80
+ // Enabling it on an older model (e.g. 3.5 Haiku/Sonnet) is a 400 — so we
81
+ // allowlist and silently skip otherwise rather than break the turn.
82
+ export function modelSupportsThinking(model) {
83
+ return /(sonnet-4|opus-4|haiku-4|3-7-sonnet)/i.test(String(model || ''));
84
+ }
85
+
86
+ export async function streamChatWithClaude(messages, systemPrompt, tools = [], model = MODEL, options = {}) {
80
87
  const client = getClient();
81
88
  const params = {
82
89
  model,
83
- max_tokens: 8192,
90
+ max_tokens: options.max_tokens || 8192,
84
91
  system: systemPrompt,
85
92
  messages,
86
93
  };
87
94
  if (tools.length) params.tools = tools;
95
+ // Extended thinking: when a budget is requested AND the model supports it,
96
+ // enable interleaved reasoning so the route can stream `thinking` deltas.
97
+ // max_tokens must exceed the thinking budget — leave generous headroom for
98
+ // the actual answer (HTML artifacts can be large). temperature must be unset
99
+ // with thinking, so we never pass it here.
100
+ if (options.thinkingBudget > 0 && modelSupportsThinking(model)) {
101
+ const budget = Math.max(1024, Math.floor(options.thinkingBudget));
102
+ params.thinking = { type: 'enabled', budget_tokens: budget };
103
+ params.max_tokens = Math.max(params.max_tokens, budget + 8192);
104
+ }
88
105
  // Stream cannot be resumed mid-flight; outer retry only covers establishing
89
106
  // the stream (connection/429 before the first token), not a mid-stream drop.
90
107
  return withRetry(() => client.messages.stream(params), `stream(${model})`);
package/lib/cli/doctor.js CHANGED
@@ -60,6 +60,30 @@ function checkMasterKey(layout) {
60
60
  };
61
61
  }
62
62
 
63
+ // Catches the "team mode set but no credentials" lockout BEFORE boot. Soft +
64
+ // env-only (doctor never opens the DB), so it can't see vault-stored keys — the
65
+ // message is hedged accordingly. Precedence here mirrors getSupabaseAuthConfig:
66
+ // process.env → env file, with NEXT_PUBLIC_* aliases honored.
67
+ function checkAuthConfig(layout) {
68
+ const env = readEnvFile(layout.envFile);
69
+ const pick = (k) => process.env[k] || env[k] || '';
70
+ const mode = (pick('MADARX_AUTH_MODE') || '').trim().toLowerCase();
71
+ if (mode !== 'supabase') {
72
+ return { name: 'Auth config', ok: true, hard: false, detail: mode ? `mode=${mode}` : 'mode=local (default)' };
73
+ }
74
+ const url = pick('SUPABASE_URL') || pick('NEXT_PUBLIC_SUPABASE_URL');
75
+ const anon = pick('SUPABASE_ANON_KEY') || pick('NEXT_PUBLIC_SUPABASE_ANON_KEY');
76
+ if (url && anon) {
77
+ return { name: 'Auth config', ok: true, hard: false, detail: 'team mode + Supabase keys present' };
78
+ }
79
+ return {
80
+ name: 'Auth config',
81
+ ok: false,
82
+ hard: false,
83
+ detail: 'team mode set but no SUPABASE_URL/ANON_KEY in env — if they are not in the vault, login will fail. Configure on the login screen or run `madarx setup`.',
84
+ };
85
+ }
86
+
63
87
  function checkStandalone() {
64
88
  const p = path.join(PKG_ROOT, '.next', 'standalone', 'server.js');
65
89
  const ok = fs.existsSync(p);
@@ -100,6 +124,7 @@ export async function runDoctor() {
100
124
  await checkSqlite(),
101
125
  checkHomeWritable(layout),
102
126
  checkMasterKey(layout),
127
+ checkAuthConfig(layout),
103
128
  checkStandalone(),
104
129
  checkWhatsAppDeps(),
105
130
  await checkPort(),
@@ -207,7 +207,7 @@ const CONNECTION_SEEDS = [
207
207
  type: 'password',
208
208
  placeholder: 'ghp_…',
209
209
  help_url: 'https://github.com/settings/tokens',
210
- help_text: 'Use a fine-grained token. Grant only the scopes you need.',
210
+ help_text: 'To read repos beyond your own, the token must be granted access to them. Fine-grained PAT: under "Repository access" pick the orgs/repos (org owner may need to approve); classic PAT: enable the "repo" scope and, for SSO orgs, click "Authorize" / "Configure SSO" next to the token.',
211
211
  required: true,
212
212
  },
213
213
  ],
@@ -0,0 +1,42 @@
1
+ // Shared streaming-verbosity + extended-thinking config for sub-agent engines.
2
+ //
3
+ // One knob controls how much of an engine's work madarX surfaces live in the
4
+ // chat. It applies engine-agnostically: the Claude Code CLI, the Anthropic
5
+ // Messages API, and (best-effort) Ollama all read the same setting.
6
+ //
7
+ // MADARX_CC_STREAM_VERBOSITY = 'quiet' | 'thinking' | 'full' (default 'thinking')
8
+ // quiet — legacy behavior: only complete assistant text + tool start/stop.
9
+ // thinking — stream token-by-token text, the model's reasoning, and rich
10
+ // tool detail (full input + output preview + duration).
11
+ // full — everything in `thinking`, plus raw engine envelopes routed to
12
+ // the client's "engine log" disclosure for deep debugging.
13
+ //
14
+ // The name keeps the `CC_` prefix for backwards compatibility with the first
15
+ // Claude-Code-only iteration; it now governs every engine.
16
+
17
+ const VALID = new Set(['quiet', 'thinking', 'full']);
18
+
19
+ export function getStreamVerbosity() {
20
+ const v = String(process.env.MADARX_CC_STREAM_VERBOSITY || 'thinking').trim().toLowerCase();
21
+ return VALID.has(v) ? v : 'thinking';
22
+ }
23
+
24
+ export function verbosityStreamsThinking(v = getStreamVerbosity()) {
25
+ return v === 'thinking' || v === 'full';
26
+ }
27
+
28
+ export function verbosityIsFull(v = getStreamVerbosity()) {
29
+ return v === 'full';
30
+ }
31
+
32
+ // Extended-thinking budget in tokens for engines where we control the request
33
+ // (Anthropic Messages API directly; the spawned Claude Code CLI via the
34
+ // MAX_THINKING_TOKENS env var, best-effort). 0 disables thinking. Anthropic
35
+ // requires a floor of 1024 when enabled — callers clamp up to that. Default
36
+ // 4000; override with MADARX_THINKING_BUDGET_TOKENS.
37
+ export function thinkingBudgetTokens(v = getStreamVerbosity()) {
38
+ if (!verbosityStreamsThinking(v)) return 0;
39
+ const raw = Number(process.env.MADARX_THINKING_BUDGET_TOKENS);
40
+ if (Number.isFinite(raw) && raw >= 0) return Math.floor(raw);
41
+ return 4000;
42
+ }
package/lib/env-file.js CHANGED
@@ -20,6 +20,9 @@ export const ENV_DEFINITIONS = [
20
20
  // secrets vault, not here.
21
21
  { name: 'MADARX_WEB_PROVIDER', label: 'Web Provider Override', group: 'Web', description: 'Force a specific search provider: firecrawl, searxng, brave, or fetch.' },
22
22
 
23
+ // --- Browser tool config ---
24
+ { name: 'MADARX_BROWSER_HEADED', label: 'Visible Browser (headed)', group: 'Browser', description: 'Set to 1 to open a VISIBLE browser window you can watch the agent drive (click/type). Prefers your installed Chrome, falls back to bundled Chromium. Leave blank or 0 for headless. Applies on the next browser launch.' },
25
+
23
26
  // --- File tool config ---
24
27
  { name: 'MADARX_ALLOWED_ROOTS', label: 'Allowed File Roots', group: 'Local Tools', description: 'Colon-separated absolute paths the file adapter may read/write.' },
25
28
  { name: 'MADARX_FILE_READ_MAX_BYTES', label: 'Max File Read Bytes', group: 'Local Tools', description: 'Maximum bytes returned by a single file_read call (default: 1MB).' },
@@ -0,0 +1,15 @@
1
+ import { requireRole } from './authz.js';
2
+
3
+ // Authorization for the native folder picker (/api/fs/pick-folder).
4
+ //
5
+ // Plain folder selection is a benign local helper: it opens a native OS dialog
6
+ // and returns the chosen path string, which only fills a form field — it grants
7
+ // no access on its own (project creation and the disk layer enforce allowed
8
+ // roots). So ANY authenticated user may use it; gating it on the org `admin`
9
+ // role wrongly 403s a member/viewer with `insufficient_role`.
10
+ //
11
+ // Registering a Mines import root, by contrast, grants agents access to that
12
+ // root, so that branch stays admin-gated.
13
+ export function assertPickFolderRole(session, registerImportRoot) {
14
+ if (registerImportRoot) requireRole(session, 'admin', session?.org_id);
15
+ }
@@ -28,6 +28,17 @@ export function realtimeConfigured() {
28
28
  return Boolean(getSecret('OPENAI_API_KEY') || process.env.OPENAI_API_KEY);
29
29
  }
30
30
 
31
+ // Transport-only instruction block. In this mode the Realtime model is a
32
+ // dumb microphone+transcriber: it must NOT reason, answer, or call tools.
33
+ // All cognition runs through the main orchestrator stream (same brain as typed
34
+ // chat); the Realtime model only converts speech → text. Output is suppressed
35
+ // server-side via turn_detection.create_response:false, but we also instruct
36
+ // the model explicitly as a belt-and-suspenders guard.
37
+ const TRANSPORT_INSTRUCTIONS =
38
+ 'You are a transcription microphone only. Do NOT respond, answer, comment, '
39
+ + 'or call any tool. Never speak. Your sole job is to let the system capture '
40
+ + 'the user\'s spoken words as text. Stay silent at all times.';
41
+
31
42
  export async function mintOpenAIRealtimeSession(opts = {}) {
32
43
  const apiKey = getSecret('OPENAI_API_KEY') || process.env.OPENAI_API_KEY;
33
44
  if (!apiKey) throw new Error('OPENAI_API_KEY missing for OpenAI Realtime');
@@ -35,12 +46,24 @@ export async function mintOpenAIRealtimeSession(opts = {}) {
35
46
  const model = String(opts.model || getSecret('OPENAI_REALTIME_MODEL') || process.env.OPENAI_REALTIME_MODEL || DEFAULT_REALTIME_MODEL);
36
47
  const voice = safeVoice(opts.voice || getSecret('OPENAI_REALTIME_VOICE') || process.env.OPENAI_REALTIME_VOICE);
37
48
 
49
+ // Transport mode: Realtime is STT-only. The orchestrator (Claude) is the
50
+ // brain; the TTS lane is the mouth. Force no tools + transcribe-only
51
+ // instructions and suppress the model's auto-response. This is the default
52
+ // for the unified voice=main-agent path; pass mode:'realtime' to fall back
53
+ // to the legacy in-browser-brain behaviour.
54
+ const transport = opts.mode === 'transport';
55
+
38
56
  // Build the durable Madarx instruction block from project + memory + state
39
57
  // unless the caller passed an override. Tools default to the curated voice
40
58
  // catalog; callers can pass a custom list (e.g. [] to disable tool calling).
41
59
  let instructions = String(opts.instructions || '').trim();
42
60
  let tools = Array.isArray(opts.tools) ? opts.tools : null;
43
- if (!instructions || !tools) {
61
+ if (transport) {
62
+ // Transport mode never reasons or acts — ignore any caller-supplied tools
63
+ // and context, and pin the transcribe-only instruction block.
64
+ instructions = TRANSPORT_INSTRUCTIONS;
65
+ tools = [];
66
+ } else if (!instructions || !tools) {
44
67
  const ctx = buildVoiceContext({
45
68
  project_id: opts.project_id,
46
69
  agent_id: opts.agent_id,
@@ -66,6 +89,31 @@ export async function mintOpenAIRealtimeSession(opts = {}) {
66
89
  instructions,
67
90
  audio: { output: { voice } },
68
91
  };
92
+ if (transport) {
93
+ // Enable input transcription so we receive
94
+ // conversation.item.input_audio_transcription.completed events, and turn
95
+ // OFF automatic response generation so the Realtime model stays silent —
96
+ // the orchestrator produces the answer instead.
97
+ session.audio.input = {
98
+ transcription: { model: 'gpt-4o-mini-transcribe' },
99
+ turn_detection: { type: 'server_vad', create_response: false, interrupt_response: false },
100
+ };
101
+ session.output_modalities = ['text'];
102
+ }
103
+ // Reasoning effort is the biggest latency dial on gpt-realtime-2: lower =
104
+ // snappier first audio. session.reasoning.effort accepts minimal|low|medium|
105
+ // high; 'low' is OpenAI's recommended default for production voice agents.
106
+ // Guard on the model name so older realtime models (which reject the field)
107
+ // do not fail the mint.
108
+ if (/realtime-2/.test(model)) {
109
+ const effort = String(
110
+ opts.reasoning_effort
111
+ || getSecret('OPENAI_REALTIME_REASONING')
112
+ || process.env.OPENAI_REALTIME_REASONING
113
+ || 'low',
114
+ );
115
+ session.reasoning = { effort };
116
+ }
69
117
  if (Array.isArray(tools) && tools.length) session.tools = tools;
70
118
  const body = { session };
71
119