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,10 +1,15 @@
1
1
  /**
2
2
  * browser-session.js — native Playwright browser-interaction adapter.
3
3
  *
4
- * Drives a real headless Chromium so the main agent can navigate, click, type,
5
- * read, and screenshot pages that need JavaScript (unlike browser_navigate,
6
- * which is fetch + regex only). One managed persistent context is shared across
7
- * calls and auto-closed after an idle window so we never leak browser processes.
4
+ * Drives a real Chromium so the main agent can navigate, click, type, read, and
5
+ * screenshot pages that need JavaScript (unlike browser_navigate, which is
6
+ * fetch + regex only). One managed persistent context is shared across calls and
7
+ * auto-closed after an idle window so we never leak browser processes.
8
+ *
9
+ * Headless by default. Set MADARX_BROWSER_HEADED=1 (or true/yes/on) to open a
10
+ * VISIBLE window the operator can watch — it prefers the installed Chrome
11
+ * (channel:'chrome'), falling back to bundled Chromium. The idle auto-close
12
+ * (90s) still applies, so a visible window left untouched closes on its own.
8
13
  *
9
14
  * Safety posture:
10
15
  * - Dedicated profile under DATA_DIR/browser-profile — NOT the user's personal
@@ -45,6 +50,33 @@ function cap(text) {
45
50
  return redactToolOutput(String(text ?? '').slice(0, MAX_TEXT_CHARS));
46
51
  }
47
52
 
53
+ // Headed mode lets the operator watch the agent drive a real, visible browser.
54
+ // Off by default so headless servers and CI stay unattended. When on, prefer the
55
+ // operator's installed Chrome (channel:'chrome') so it looks/behaves like a real
56
+ // browser; we transparently fall back to bundled Chromium if that channel is
57
+ // unavailable. The persistent profile (PROFILE_DIR) is still the dedicated
58
+ // madarX profile, never the user's personal Chrome data.
59
+ function isHeaded() {
60
+ const v = String(process.env.MADARX_BROWSER_HEADED || '').trim().toLowerCase();
61
+ return v === '1' || v === 'true' || v === 'yes' || v === 'on';
62
+ }
63
+
64
+ async function launchContext(chromium) {
65
+ const headed = isHeaded();
66
+ const base = {
67
+ headless: !headed,
68
+ args: ['--no-sandbox', '--disable-dev-shm-usage'],
69
+ };
70
+ if (headed) {
71
+ try {
72
+ return await chromium.launchPersistentContext(PROFILE_DIR, { ...base, channel: 'chrome' });
73
+ } catch {
74
+ // Installed Chrome not found — fall back to bundled Chromium, still headed.
75
+ }
76
+ }
77
+ return await chromium.launchPersistentContext(PROFILE_DIR, base);
78
+ }
79
+
48
80
  function touchIdleTimer() {
49
81
  if (_idleTimer) clearTimeout(_idleTimer);
50
82
  _idleTimer = setTimeout(() => { closeBrowser().catch(() => {}); }, IDLE_CLOSE_MS);
@@ -75,10 +107,7 @@ async function ensurePage() {
75
107
  }
76
108
  fs.mkdirSync(PROFILE_DIR, { recursive: true });
77
109
  try {
78
- _context = await chromium.launchPersistentContext(PROFILE_DIR, {
79
- headless: true,
80
- args: ['--no-sandbox', '--disable-dev-shm-usage'],
81
- });
110
+ _context = await launchContext(chromium);
82
111
  } catch (err) {
83
112
  _context = null;
84
113
  throw new Error(
@@ -65,12 +65,30 @@ function parseOwnerRepo(repo_full_name) {
65
65
  // ── Error extraction ──────────────────────────────────────────────────────────
66
66
 
67
67
  async function extractGitHubError(res) {
68
+ let message = `GitHub API error: ${res.status}`;
68
69
  try {
69
70
  const data = await res.json();
70
- return data?.message || `GitHub API error: ${res.status}`;
71
+ if (data?.message) message = data.message;
71
72
  } catch {
72
- return `GitHub API error: ${res.status}`;
73
+ // non-JSON body keep the status-based message
73
74
  }
75
+
76
+ // Actionable guidance for the two access failures users actually hit.
77
+ // SAML SSO: the org requires the token to be explicitly authorized. GitHub
78
+ // signals this via the x-github-sso response header.
79
+ const sso = res.headers?.get?.('x-github-sso');
80
+ if (res.status === 403 && sso) {
81
+ const urlMatch = /url=([^;,\s]+)/i.exec(sso);
82
+ const where = urlMatch ? ` Authorize it here: ${urlMatch[1]}` : '';
83
+ return `${message} — this org requires SAML SSO authorization for your token.${where}`;
84
+ }
85
+ if (res.status === 403) {
86
+ return `${message} — the token is valid but lacks permission for this resource (check the fine-grained PAT's repository access / scopes, and authorize SSO if the org uses it).`;
87
+ }
88
+ if (res.status === 404) {
89
+ return `${message} — not found, OR your token cannot see it. A fine-grained PAT only sees repos it was explicitly granted; a classic PAT needs the 'repo' scope. Grant access to this repo/org and retry.`;
90
+ }
91
+ return message;
74
92
  }
75
93
 
76
94
  // ── Response shapers ──────────────────────────────────────────────────────────
@@ -146,12 +164,36 @@ export async function ghRepoList(input = {}, options = {}) {
146
164
  const token = requireCredential('GITHUB_TOKEN', options);
147
165
  const agentId = options.agent_id ?? null;
148
166
 
149
- const url = new URL(`${GH_API}/user/repos`);
150
- if (input.visibility) url.searchParams.set('visibility', String(input.visibility));
151
- if (input.type) url.searchParams.set('type', String(input.type));
167
+ // Two listing modes:
168
+ // - `org` set → GET /orgs/{org}/repos (repos owned by that org the token can
169
+ // see). This is how you reach org repos you were granted access to.
170
+ // - otherwise → GET /user/repos across every affiliation the token has, so
171
+ // collaborator + organization_member repos show up, not just owned ones.
172
+ const org = input.org ? String(input.org).trim() : '';
173
+ let url;
174
+ if (org) {
175
+ if (!/^[A-Za-z0-9_.-]+$/.test(org)) {
176
+ throw new Error(`org must be a valid GitHub org/owner name, got: ${org}`);
177
+ }
178
+ url = new URL(`${GH_API}/orgs/${org}/repos`);
179
+ if (input.type) url.searchParams.set('type', String(input.type)); // all|public|private|forks|sources|member
180
+ } else {
181
+ url = new URL(`${GH_API}/user/repos`);
182
+ // Default to the full affiliation set so org/collaborator repos are listed.
183
+ url.searchParams.set('affiliation', String(input.affiliation || 'owner,collaborator,organization_member'));
184
+ if (input.visibility) url.searchParams.set('visibility', String(input.visibility));
185
+ // `type` and `affiliation` are mutually exclusive on /user/repos — only send
186
+ // `type` when the caller did not narrow by affiliation themselves.
187
+ if (input.type && !input.affiliation) {
188
+ url.searchParams.delete('affiliation');
189
+ url.searchParams.set('type', String(input.type));
190
+ }
191
+ }
152
192
  if (input.sort) url.searchParams.set('sort', String(input.sort));
153
193
  const perPage = Math.min(Math.max(Number(input.per_page || 30), 1), 100);
154
194
  url.searchParams.set('per_page', String(perPage));
195
+ const page = Math.max(Number(input.page || 1), 1);
196
+ if (page > 1) url.searchParams.set('page', String(page));
155
197
 
156
198
  const res = await wrapFetch('gh_repo_list', agentId)(url, {
157
199
  headers: githubHeaders(token),
@@ -0,0 +1,146 @@
1
+ // Skill bridge — Phase 4 of voice/main-agent unification.
2
+ //
3
+ // Exposes a tightly-allowlisted set of first-party gstack CLI skills (the
4
+ // visible-browser flows: /connect-chrome, /browse, /qa-only) as ONE in-app
5
+ // tool. The main agent (and, by extension, voice — which now shares the full
6
+ // catalog) can drive the same real browser the operator watches live.
7
+ //
8
+ // SECURITY — this crosses the Claude Code CLI trust boundary, so it is the most
9
+ // sharply gated tool in the registry:
10
+ // • risk_level 'irreversible_external' → the main-agent path ALWAYS creates an
11
+ // approval request, even in trust-mode 'auto' (never bypassable).
12
+ // • registry.js force-gates it on the AGENT path too (added alongside
13
+ // browser_harness_run), so a sub-agent on auto can never self-run it.
14
+ // • enabled_default:false → the owner must explicitly install it first.
15
+ // • Hard env kill-switch MADARX_SKILL_BRIDGE_DISABLED=1.
16
+ // • Only skills on SKILL_BRIDGE_ALLOWLIST may be invoked — the LLM cannot
17
+ // name an arbitrary skill or shell command. The instruction is passed as
18
+ // data, never interpolated into a shell line.
19
+ // • The spawned CLI still runs under bypassPermissions bounded by the
20
+ // load-bearing deny list in .claude/settings.json (no rm/sudo/secret reads/
21
+ // network-from-shell/etc.).
22
+ //
23
+ // These are FIRST-PARTY skills (gstack, shipped with the repo), NOT
24
+ // agent-authored code — so this does not violate the "never load/execute
25
+ // LLM-authored code" invariant. The agent only chooses WHICH allowlisted skill
26
+ // and WHAT instruction; it never supplies the skill body.
27
+
28
+ import { runClaudeCodeAgent } from '../../agent-engines.js';
29
+ import { DATA_DIR, WORKSPACE } from '../../paths.js';
30
+ import { redactToolOutput } from '../safety.js';
31
+
32
+ const DEFAULT_TIMEOUT_MS = 180000;
33
+ const MAX_TIMEOUT_MS = 600000;
34
+ const MAX_INSTRUCTION_CHARS = 4000;
35
+ const MAX_SUMMARY_CHARS = 12000;
36
+ const DEFAULT_MAX_TURNS = 25;
37
+
38
+ // Allowlisted skills the bridge may invoke, keyed by the slug the agent passes.
39
+ // Each entry: how to phrase the invocation + a one-line purpose. Keep this list
40
+ // SHORT and visible-browser-focused; adding an entry widens the trust surface.
41
+ const SKILL_BRIDGE_ALLOWLIST = {
42
+ 'connect-chrome': {
43
+ purpose: 'Launch the visible GStack Chromium browser the operator can watch live.',
44
+ invoke: 'connect-chrome',
45
+ },
46
+ browse: {
47
+ purpose: 'Drive a browser to navigate, click, type, read pages, and capture screenshots.',
48
+ invoke: 'browse',
49
+ },
50
+ 'qa-only': {
51
+ purpose: 'Run a QA pass against a running site and report findings (no fixes).',
52
+ invoke: 'qa-only',
53
+ },
54
+ };
55
+
56
+ export function listBridgeableSkills() {
57
+ return Object.entries(SKILL_BRIDGE_ALLOWLIST).map(([slug, meta]) => ({ slug, purpose: meta.purpose }));
58
+ }
59
+
60
+ function maxSummaryChars() {
61
+ const v = Number(process.env.MADARX_TOOL_OUTPUT_MAX_BYTES || MAX_SUMMARY_CHARS);
62
+ if (!Number.isFinite(v) || v <= 0) return MAX_SUMMARY_CHARS;
63
+ return Math.min(MAX_SUMMARY_CHARS, Math.floor(v));
64
+ }
65
+
66
+ function capSummary(text) {
67
+ return redactToolOutput(String(text || '').slice(0, maxSummaryChars()));
68
+ }
69
+
70
+ // Sync validation — runs BEFORE the approval/trust gates (PREFLIGHTS map). Throw
71
+ // to reject outright; never reach the model with an off-allowlist skill.
72
+ export function skillBridgeRunPreflight(input = {}) {
73
+ if (process.env.MADARX_SKILL_BRIDGE_DISABLED === '1') {
74
+ throw new Error('skill bridge is disabled (MADARX_SKILL_BRIDGE_DISABLED=1)');
75
+ }
76
+ const skill = String(input.skill || '').trim().toLowerCase();
77
+ if (!skill) throw new Error('skill is required');
78
+ const entry = SKILL_BRIDGE_ALLOWLIST[skill];
79
+ if (!entry) {
80
+ throw new Error(`skill "${skill}" is not bridgeable. Allowed: ${Object.keys(SKILL_BRIDGE_ALLOWLIST).join(', ')}`);
81
+ }
82
+ const instruction = String(input.instruction || '').trim();
83
+ if (!instruction) throw new Error('instruction is required');
84
+ if (instruction.length > MAX_INSTRUCTION_CHARS) {
85
+ throw new Error(`instruction is too long: ${instruction.length} chars; max ${MAX_INSTRUCTION_CHARS}`);
86
+ }
87
+ const timeoutMs = Math.max(
88
+ 5000,
89
+ Math.min(MAX_TIMEOUT_MS, Number(input.timeout_ms || DEFAULT_TIMEOUT_MS) || DEFAULT_TIMEOUT_MS),
90
+ );
91
+ return { skill, entry, instruction, timeoutMs };
92
+ }
93
+
94
+ function buildSystemPrompt(skill, entry) {
95
+ return [
96
+ 'You are a single-purpose runner spawned by the madarX main agent.',
97
+ `Your ONLY job: invoke the /${entry.invoke} skill and carry out the operator instruction with it.`,
98
+ `Purpose of this skill: ${entry.purpose}`,
99
+ 'Rules:',
100
+ `- Use ONLY the /${entry.invoke} skill. Do not invoke other skills, write files outside workspace, or run unrelated commands.`,
101
+ '- Do not read secrets, .env files, or anything the deny list blocks.',
102
+ '- When done, reply with a concise plain-text summary of what happened and what you observed (URLs visited, key results). No markdown tables.',
103
+ ].join('\n');
104
+ }
105
+
106
+ export async function skillBridgeRun(input = {}, options = {}) {
107
+ const { skill, entry, instruction, timeoutMs } = skillBridgeRunPreflight(input);
108
+ const started = Date.now();
109
+
110
+ const systemPrompt = buildSystemPrompt(skill, entry);
111
+ const userMessage = `Use the /${entry.invoke} skill to do the following:\n\n${instruction}`;
112
+
113
+ try {
114
+ const text = await runClaudeCodeAgent({
115
+ systemPrompt,
116
+ userMessage,
117
+ maxTurns: DEFAULT_MAX_TURNS,
118
+ timeoutMs,
119
+ // Bounded toolset the gstack skills need (browser daemon runs via Bash).
120
+ // bypassPermissions + the .claude deny list remain the hard boundary.
121
+ allowedTools: ['Skill', 'Bash', 'Read', 'Write', 'Glob', 'Grep', 'WebFetch', 'WebSearch'],
122
+ addDirs: [WORKSPACE, DATA_DIR],
123
+ agentId: options.agent_id || 'main',
124
+ agentName: 'skill-bridge',
125
+ });
126
+
127
+ const summary = capSummary(text);
128
+ return {
129
+ ok: true,
130
+ tool: 'skill_bridge_run',
131
+ status: 'complete',
132
+ skill,
133
+ summary,
134
+ duration_ms: Date.now() - started,
135
+ };
136
+ } catch (err) {
137
+ return {
138
+ ok: false,
139
+ tool: 'skill_bridge_run',
140
+ status: 'failed',
141
+ skill,
142
+ error: String(err?.message || err).slice(0, 1000),
143
+ duration_ms: Date.now() - started,
144
+ };
145
+ }
146
+ }
@@ -61,6 +61,7 @@ import { gmail_messages_list, gmail_message_read, gmail_thread_read } from './ad
61
61
  import { calendar_events_list, calendar_event_read } from './adapters/google-calendar.js';
62
62
  import { transcribe_audio } from './adapters/transcribe.js';
63
63
  import { browserHarnessRun, browserHarnessRunPreflight } from './adapters/browser-harness.js';
64
+ import { skillBridgeRun, skillBridgeRunPreflight } from './adapters/skill-bridge.js';
64
65
  import { browserNavigate, browserExtractStructured } from './adapters/browser-fetch.js';
65
66
  import { browserOpen, browserAct, browserExtract, browserScreenshot } from './adapters/browser-session.js';
66
67
  import { voice_speak } from './adapters/tts.js';
@@ -348,6 +349,36 @@ const MARKETPLACE_TOOLS = [
348
349
  required: ['script'],
349
350
  },
350
351
  },
352
+ {
353
+ name: 'skill_bridge_run',
354
+ title: 'Skill Bridge',
355
+ description: 'Run one allowlisted first-party gstack CLI skill (connect-chrome, browse, qa-only) to drive the real visible browser the operator can watch live. Crosses the Claude Code CLI trust boundary, so it is ALWAYS approval-gated for every run (even in trust-mode auto) and disabled by default. Pass the skill slug and a plain-language instruction; the bridge invokes only that skill, bounded by the .claude deny list.',
356
+ category: 'browser',
357
+ risk_level: 'irreversible_external',
358
+ approval_required: true,
359
+ approval_mode: 'approval_required',
360
+ required_env: [],
361
+ enabled_default: false,
362
+ allowlist_required: false,
363
+ rate_limit: { window_seconds: 300, max: 10 },
364
+ input_schema: {
365
+ type: 'object',
366
+ properties: {
367
+ skill: {
368
+ type: 'string',
369
+ description: 'Skill slug to invoke. One of: connect-chrome, browse, qa-only.',
370
+ enum: ['connect-chrome', 'browse', 'qa-only'],
371
+ },
372
+ instruction: {
373
+ type: 'string',
374
+ description: 'Plain-language instruction for the skill (e.g. "open Google News and search US Iran war, read the top 3 headlines"). Max 4000 chars.',
375
+ },
376
+ timeout_ms: { type: 'number', description: 'Timeout in milliseconds, capped at 600000. Default 180000.' },
377
+ approval_id: { type: 'string', description: 'Approval request ID for one-shot execution.' },
378
+ },
379
+ required: ['skill', 'instruction'],
380
+ },
381
+ },
351
382
  {
352
383
  name: 'browser_open',
353
384
  title: 'Browser Open (Playwright)',
@@ -773,7 +804,7 @@ const MARKETPLACE_TOOLS = [
773
804
  {
774
805
  name: 'gh_repo_list',
775
806
  title: 'List GitHub repos',
776
- description: 'List GitHub repositories accessible to the configured token.',
807
+ description: 'List GitHub repositories the token can access. Without `org`, lists across all affiliations (owned + collaborator + organization_member). Pass `org` to list a specific organization\'s repos you were granted access to.',
777
808
  category: 'github',
778
809
  risk_level: 'low',
779
810
  required_env: ['GITHUB_TOKEN'],
@@ -784,10 +815,13 @@ const MARKETPLACE_TOOLS = [
784
815
  input_schema: {
785
816
  type: 'object',
786
817
  properties: {
787
- visibility: { type: 'string', description: 'Filter by visibility: all, public, private.' },
788
- type: { type: 'string', description: 'Filter by type: all, owner, member.' },
818
+ org: { type: 'string', description: 'List repos for this organization/owner (GET /orgs/{org}/repos). Use this to reach org repos you were granted access to.' },
819
+ affiliation: { type: 'string', description: 'Comma-separated: owner, collaborator, organization_member. Default lists all three. Ignored when `org` is set.' },
820
+ visibility: { type: 'string', description: 'Filter by visibility: all, public, private. Ignored when `org` is set.' },
821
+ type: { type: 'string', description: 'Without org: all|owner|member (mutually exclusive with affiliation). With org: all|public|private|forks|sources|member.' },
789
822
  sort: { type: 'string', description: 'Sort by: created, updated, pushed, full_name.' },
790
823
  per_page: { type: 'number', description: 'Results per page, 1-100. Default 30.' },
824
+ page: { type: 'number', description: 'Page number for pagination. Default 1.' },
791
825
  },
792
826
  },
793
827
  },
@@ -1737,6 +1771,7 @@ const ADAPTERS = {
1737
1771
  calendar_event_read,
1738
1772
  transcribe_audio,
1739
1773
  browser_harness_run: browserHarnessRun,
1774
+ skill_bridge_run: skillBridgeRun,
1740
1775
  browser_open: browserOpen,
1741
1776
  browser_act: browserAct,
1742
1777
  browser_extract: browserExtract,
@@ -1786,6 +1821,7 @@ const PREFLIGHTS = {
1786
1821
  process_start: processStartPreflight,
1787
1822
  process_kill: processKillPreflight,
1788
1823
  browser_harness_run: browserHarnessRunPreflight,
1824
+ skill_bridge_run: skillBridgeRunPreflight,
1789
1825
  };
1790
1826
 
1791
1827
  function requiredEnvNames(required = []) {
@@ -2461,7 +2497,7 @@ export async function executeRegistryTool(toolName, input = {}, options = {}) {
2461
2497
  // existing contract — the owner's explicit per-agent permission mode governs
2462
2498
  // them — except browser_harness_run, which has always force-gated here.
2463
2499
  const agentIrreversibleGate = isIrreversibleExternal(tool, input)
2464
- && (toolName === 'browser_harness_run' || Boolean(tool.source));
2500
+ && (toolName === 'browser_harness_run' || toolName === 'skill_bridge_run' || Boolean(tool.source));
2465
2501
  if (options.agent_id && agentIrreversibleGate && !consumeApprovalRequest(input.approval_id, { action_type: `agent_tool_irreversible:${toolName}` })) {
2466
2502
  const req = createApprovalRequest({
2467
2503
  action_type: `agent_tool_irreversible:${toolName}`,
@@ -210,7 +210,7 @@ export function buildVoiceContext(opts = {}) {
210
210
  'Cross-scope access: find_artifacts searches every project, not just the active one. Call list_projects to enumerate projects on demand. Call get_state with project_id="<slug or id>" to read a specific project, or with project_id=null to read across all projects. Spaces are client-side UI tabs that group artifacts — they do not gate your reach; any artifact in any space is reachable via find_artifacts.',
211
211
  );
212
212
  sections.push(
213
- 'Rules: never speak API keys, ephemeral tokens, or secret values aloud. If a tool returns approval_required, tell the operator one short sentence and stop. Prefer artifact creation for anything longer than ~30 spoken seconds. Never invent artifact IDs — call find_artifacts or get_state first. To read an artifact\'s body, call read_artifact with the id from find_artifacts; do NOT claim you have read it until that call returns content. ARTIFACT CREATION — choose the right tool: (1) For any VISUAL result the operator expects to look designed — a list page, snapshot, brief, report, dashboard, presentation, landing page, "make a page for X", "show me X" — call generate_ui with a specific description that includes the actual content/data to render. generate_ui produces a full styled HTML document using the madarX brand system (typography, color, layout). (2) For plain written notes, scratch summaries, or pure markdown exports the operator asked for explicitly, use create_artifact with kind="markdown". Never use create_artifact for visual outputs — it stores raw text and the dashboard renders it as a basic document, not a designed page. Whenever the operator asks for a summary, brief, page, doc, or report, create the artifact unprompted as the result of the turn — do not ask for permission first.',
213
+ 'Rules: never speak API keys, ephemeral tokens, or secret values aloud. If a tool returns approval_required, tell the operator one short sentence and stop. Prefer artifact creation for anything longer than ~30 spoken seconds. Never invent artifact IDs — call find_artifacts or get_state first. To read an artifact\'s body, call read_artifact with the id from find_artifacts; do NOT claim you have read it until that call returns content. ARTIFACT CREATION — choose the right tool: (1) For any VISUAL result the operator expects to look designed — a list page, snapshot, brief, report, dashboard, presentation, landing page, "make a page for X", "show me X" — call generate_ui with a specific description that includes the actual content/data to render. generate_ui produces a full styled HTML document using the madarX brand system (typography, color, layout). (2) For plain written notes, scratch summaries, or pure markdown exports the operator asked for explicitly, use create_artifact with kind="markdown". Never use create_artifact for visual outputs — it stores raw text and the dashboard renders it as a basic document, not a designed page. Whenever the operator asks for a summary, brief, page, doc, or report, create the artifact unprompted as the result of the turn — do not ask for permission first. BRAND IS MANDATORY: every visual artifact MUST follow the madarX brand guidelines above (palette, typography, layout) — generate_ui applies them automatically, so always route designed output through generate_ui. Never emit an off-brand layout, default-looking page, or any emoji in an artifact.',
214
214
  );
215
215
 
216
216
  const instructions = sections.join('\n\n').slice(0, 7800);
@@ -64,8 +64,40 @@ function mainAgentToolList() {
64
64
  return getTools();
65
65
  }
66
66
 
67
+ // Voice gets the SAME full tool catalog as the typed main agent — that is the
68
+ // product contract (voice IS the main agent) and it must match what the voice
69
+ // instruction block advertises (lib/voice/context.js lists every tool by name).
70
+ // Latency is controlled the right way instead: session.reasoning.effort='low'
71
+ // on gpt-realtime-2 (lib/realtime-openai.js) keeps first-audio snappy while the
72
+ // model still has the whole toolset. The model's improved tool-selection avoids
73
+ // over-calling on chit-chat. For deployments that prefer a tiny conversational
74
+ // toolset over capability, set MADARX_VOICE_FAST_TOOLS=1 to trim to this set.
75
+ const FAST_VOICE_TOOL_NAMES = new Set([
76
+ 'web_search',
77
+ 'web_fetch',
78
+ 'find_artifacts',
79
+ 'get_state',
80
+ 'create_artifact',
81
+ 'update_artifact',
82
+ 'generate_ui',
83
+ 'voice_speak',
84
+ 'create_agent',
85
+ 'upsert_schedule',
86
+ ]);
87
+
88
+ function voiceToolList() {
89
+ const all = mainAgentToolList();
90
+ if (process.env.MADARX_VOICE_FAST_TOOLS === '1') {
91
+ const trimmed = all.filter(t => FAST_VOICE_TOOL_NAMES.has(t.name));
92
+ if (trimmed.length) return trimmed;
93
+ }
94
+ return all;
95
+ }
96
+
67
97
  export function getVoiceToolCatalog() {
68
- return mainAgentToolList().map(tool => ({
98
+ // Same source as getVoiceToolsForRealtime so the advertised tool list in the
99
+ // instruction block always matches what is actually attached to the session.
100
+ return voiceToolList().map(tool => ({
69
101
  name: tool.name,
70
102
  title: humanTitle(tool.name),
71
103
  description: tool.description || '',
@@ -74,7 +106,7 @@ export function getVoiceToolCatalog() {
74
106
  }
75
107
 
76
108
  export function getVoiceToolsForRealtime() {
77
- return mainAgentToolList().map(toRealtimeShape);
109
+ return voiceToolList().map(toRealtimeShape);
78
110
  }
79
111
 
80
112
  export function isVoiceTool(name) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "madarx",
3
- "version": "2.17.0",
3
+ "version": "2.18.0",
4
4
  "type": "module",
5
5
  "description": "Madarx OS — Next.js product with SQLite-backed runtime, scheduled cron daemon, and approval-gated local runners.",
6
6
  "license": "MIT",
@@ -83,6 +83,15 @@ export function runAuthV1Migration(db) {
83
83
  VALUES ('mem-local-owner', 'personal-org', 'local-user-1', 'owner', ?)`
84
84
  ).run(now);
85
85
 
86
+ // ── Step 4b: Self-heal default-org ownership ──────────────────────────────
87
+ // The synthetic `local-user-1` owns personal-org (step 4). When the operator
88
+ // flips to Supabase mode and signs in, they get a `member` row — and because a
89
+ // membership now exists, the first-login owner-bootstrap is skipped, so they
90
+ // are permanently stuck below admin (every owner/admin gate 403s). Promote the
91
+ // real operator to owner of their own default org. Idempotent + conservative:
92
+ // only acts when there is NO real owner yet and the operator is unambiguous.
93
+ const heal = healDefaultOrgOwnership(db);
94
+
86
95
  // ── Step 5: Bind orphaned projects to personal-org ────────────────────────
87
96
  const projectsResult = db
88
97
  .prepare("UPDATE projects SET org_id = 'personal-org' WHERE org_id IS NULL")
@@ -97,9 +106,91 @@ export function runAuthV1Migration(db) {
97
106
  return {
98
107
  projectsUpdated: projectsResult.changes,
99
108
  artifactsUpdated: artifactsResult.changes,
109
+ ownershipHeal: heal,
100
110
  };
101
111
  }
102
112
 
113
+ const SYNTHETIC_LOCAL_USER = 'local-user-1';
114
+ const DEFAULT_ORG = 'personal-org';
115
+
116
+ /**
117
+ * Ensure the real operator owns the default org (`personal-org`).
118
+ *
119
+ * Why: the seed makes the synthetic `local-user-1` the owner. In Supabase mode a
120
+ * real user is added as a `member`, and the owner-bootstrap is then skipped (a
121
+ * membership already exists), leaving the operator permanently below admin.
122
+ *
123
+ * Rule (idempotent, conservative — never downgrades, never guesses):
124
+ * • If a real (non-synthetic) owner already exists → no-op.
125
+ * • Else, among real members of the default org:
126
+ * - exactly one → promote them to owner (they are the operator).
127
+ * - two or more → ambiguous; promote only the one matching
128
+ * MADARX_OWNER_EMAIL if set, else leave for a human.
129
+ * - zero → no-op (pure local install, no real user yet).
130
+ *
131
+ * @param {DatabaseSync} db
132
+ * @returns {{ status: string, user_id?: string, basis?: string, count?: number }}
133
+ */
134
+ export function healDefaultOrgOwnership(db) {
135
+ const org = db.prepare('SELECT id FROM organizations WHERE id = ?').get(DEFAULT_ORG);
136
+ if (!org) return { status: 'no_default_org' };
137
+
138
+ const realOwner = db
139
+ .prepare("SELECT user_id FROM org_memberships WHERE org_id = ? AND role = 'owner' AND user_id != ?")
140
+ .get(DEFAULT_ORG, SYNTHETIC_LOCAL_USER);
141
+ if (realOwner) return { status: 'already_owned', user_id: realOwner.user_id };
142
+
143
+ const realMembers = db
144
+ .prepare("SELECT user_id FROM org_memberships WHERE org_id = ? AND user_id != ?")
145
+ .all(DEFAULT_ORG, SYNTHETIC_LOCAL_USER);
146
+ if (realMembers.length === 0) return { status: 'no_real_user' };
147
+
148
+ let targetUserId;
149
+ let basis;
150
+ if (realMembers.length === 1) {
151
+ targetUserId = realMembers[0].user_id;
152
+ basis = 'sole_member';
153
+ } else {
154
+ // Ambiguous default org — only act on an explicit operator-of-record.
155
+ const ownerEmail = process.env.MADARX_OWNER_EMAIL;
156
+ if (!ownerEmail || ownerEmail === 'owner@local.dev') return { status: 'ambiguous', count: realMembers.length };
157
+ const match = db
158
+ .prepare(
159
+ `SELECT m.user_id FROM org_memberships m JOIN users u ON u.id = m.user_id
160
+ WHERE m.org_id = ? AND m.user_id != ? AND lower(u.email) = lower(?)`
161
+ )
162
+ .all(DEFAULT_ORG, SYNTHETIC_LOCAL_USER, ownerEmail);
163
+ if (match.length !== 1) return { status: 'ambiguous', count: realMembers.length };
164
+ targetUserId = match[0].user_id;
165
+ basis = 'owner_email';
166
+ }
167
+
168
+ const res = db
169
+ .prepare("UPDATE org_memberships SET role = 'owner' WHERE org_id = ? AND user_id = ? AND role != 'owner'")
170
+ .run(DEFAULT_ORG, targetUserId);
171
+ if (!res.changes) return { status: 'already_owned', user_id: targetUserId };
172
+
173
+ // Best-effort audit — never block boot on it.
174
+ try {
175
+ db.prepare(
176
+ `INSERT INTO audit_logs (id, at, type, summary, status, meta, user_id, org_id, action_target_id, action_target_type)
177
+ VALUES (?, ?, 'auth.default_org.owner_healed', ?, 'success', ?, ?, ?, ?, 'org_membership')`
178
+ ).run(
179
+ `audit-orgheal-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
180
+ nowIso(),
181
+ `Promoted real operator to owner of ${DEFAULT_ORG} (was member; default org was owned only by synthetic ${SYNTHETIC_LOCAL_USER})`,
182
+ JSON.stringify({ org_id: DEFAULT_ORG, user_id: targetUserId, basis }),
183
+ targetUserId,
184
+ DEFAULT_ORG,
185
+ targetUserId,
186
+ );
187
+ } catch {
188
+ // audit table not ready / schema drift — promotion still stands.
189
+ }
190
+
191
+ return { status: 'promoted', user_id: targetUserId, basis };
192
+ }
193
+
103
194
  // ── CLI entry point ───────────────────────────────────────────────────────────
104
195
  // ESM direct-run guard: only execute main() when this file is the entry point,
105
196
  // not when imported as a module (e.g. by lib/seeds.js).
@@ -133,6 +224,7 @@ async function main() {
133
224
  console.log(' personal-org: ensured');
134
225
  console.log(' local-user-1: ensured (email: ' + ownerEmail + ')');
135
226
  console.log(' owner membership: ensured');
227
+ console.log(' ownership heal: ' + result.ownershipHeal.status + (result.ownershipHeal.user_id ? ' (' + result.ownershipHeal.user_id + ')' : ''));
136
228
  console.log(' projects bound: ' + result.projectsUpdated);
137
229
  console.log(' artifacts defaulted: ' + result.artifactsUpdated);
138
230
  console.log(' marker: ' + MARKER);