madarx 2.9.11 → 2.9.13

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 (331) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +606 -606
  3. package/.next/standalone/.next/app-path-routes-manifest.json +92 -92
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  8. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  9. package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/admin/page.js +3 -3
  11. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/agents/[id]/page.js +3 -3
  13. package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/agents/page.js +1 -1
  15. package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route.js +1 -1
  90. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/hermes/jobs/route.js +1 -1
  92. package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/marketplace/open-design/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/state/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/approvals/page.js +2 -2
  195. package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/architecture.html +2 -2
  198. package/.next/standalone/.next/server/app/architecture.rsc +3 -3
  199. package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
  202. package/.next/standalone/.next/server/app/brand.html +1 -1
  203. package/.next/standalone/.next/server/app/brand.rsc +3 -3
  204. package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/federated-ai.html +2 -2
  207. package/.next/standalone/.next/server/app/federated-ai.rsc +3 -3
  208. package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
  210. package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
  211. package/.next/standalone/.next/server/app/hail/[id]/page.js +2 -2
  212. package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +2 -2
  214. package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/hail/page.js +2 -2
  216. package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
  217. package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  219. package/.next/standalone/.next/server/app/index.html +2 -2
  220. package/.next/standalone/.next/server/app/index.rsc +3 -3
  221. package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/join.html +1 -1
  223. package/.next/standalone/.next/server/app/join.rsc +3 -3
  224. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/marketplace/page.js +1 -1
  226. package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
  230. package/.next/standalone/.next/server/app/missions/page.js +2 -2
  231. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  235. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  236. package/.next/standalone/.next/server/app/org/page.js +1 -1
  237. package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
  238. package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
  243. package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/projects/new.html +1 -1
  245. package/.next/standalone/.next/server/app/projects/new.rsc +4 -4
  246. package/.next/standalone/.next/server/app/projects/page.js +8 -8
  247. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/reports/[file]/route.js +1 -1
  249. package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
  250. package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/schedules/page.js +1 -1
  253. package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  256. package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
  258. package/.next/standalone/.next/server/app/settings/brand.html +2 -2
  259. package/.next/standalone/.next/server/app/settings/brand.rsc +3 -3
  260. package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
  262. package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
  264. package/.next/standalone/.next/server/app/settings/onboarding.rsc +3 -3
  265. package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
  266. package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
  267. package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
  271. package/.next/standalone/.next/server/app/settings.html +2 -2
  272. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  273. package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
  275. package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
  276. package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  277. package/.next/standalone/.next/server/app/tasks/page.js +1 -1
  278. package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
  283. package/.next/standalone/.next/server/app/whatsapp.html +1 -1
  284. package/.next/standalone/.next/server/app/whatsapp.rsc +3 -3
  285. package/.next/standalone/.next/server/app/workflows/[caseId]/page.js +1 -1
  286. package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
  289. package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  291. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
  292. package/.next/standalone/.next/server/app-paths-manifest.json +92 -92
  293. package/.next/standalone/.next/server/chunks/1699.js +8 -8
  294. package/.next/standalone/.next/server/chunks/1997.js +2 -2
  295. package/.next/standalone/.next/server/chunks/4740.js +1 -1
  296. package/.next/standalone/.next/server/chunks/511.js +1 -1
  297. package/.next/standalone/.next/server/chunks/6700.js +3 -3
  298. package/.next/standalone/.next/server/chunks/9430.js +1 -0
  299. package/.next/standalone/.next/server/functions-config-manifest.json +49 -49
  300. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  301. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  302. package/.next/standalone/.next/server/pages/404.html +1 -1
  303. package/.next/standalone/.next/server/pages/500.html +1 -1
  304. package/.next/standalone/.next/server/pages-manifest.json +1 -1
  305. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  306. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  307. package/.next/{static/chunks/app/layout-3c5a2ec0922a44da.js → standalone/.next/static/chunks/app/layout-01269582605f37ea.js} +1 -1
  308. package/.next/standalone/.next/static/chunks/app/projects/{page-d79be5eee8055790.js → page-99d221c5fd54c0e3.js} +1 -1
  309. package/.next/standalone/.next/static/chunks/{webpack-9b86a02e210b78df.js → webpack-ce537f60727acb61.js} +1 -1
  310. package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
  311. package/.next/standalone/data/.default-project-seeded +1 -1
  312. package/.next/standalone/data/madarx.sqlite +0 -0
  313. package/.next/standalone/data/madarx.sqlite-shm +0 -0
  314. package/.next/standalone/data/madarx.sqlite-wal +0 -0
  315. package/.next/standalone/package.json +1 -1
  316. package/.next/{standalone/.next/static/chunks/app/layout-3c5a2ec0922a44da.js → static/chunks/app/layout-01269582605f37ea.js} +1 -1
  317. package/.next/static/chunks/app/projects/{page-d79be5eee8055790.js → page-99d221c5fd54c0e3.js} +1 -1
  318. package/.next/static/chunks/{webpack-9b86a02e210b78df.js → webpack-ce537f60727acb61.js} +1 -1
  319. package/app/components/smart-search.jsx +1 -1
  320. package/lib/auth.js +62 -0
  321. package/lib/cli/run.js +5 -0
  322. package/lib/hermes-jobs.js +8 -3
  323. package/lib/paths.js +21 -0
  324. package/lib/shared-cloud.js +88 -0
  325. package/lib/tools/adapters/browser-harness.js +6 -2
  326. package/package.json +1 -1
  327. package/.next/standalone/.next/server/chunks/9838.js +0 -1
  328. /package/.next/standalone/.next/static/{BUIr7wYicmHyHGx6KK3SN → 7W4PAGIBak7apEhh8Fa5C}/_buildManifest.js +0 -0
  329. /package/.next/standalone/.next/static/{BUIr7wYicmHyHGx6KK3SN → 7W4PAGIBak7apEhh8Fa5C}/_ssgManifest.js +0 -0
  330. /package/.next/static/{BUIr7wYicmHyHGx6KK3SN → 7W4PAGIBak7apEhh8Fa5C}/_buildManifest.js +0 -0
  331. /package/.next/static/{BUIr7wYicmHyHGx6KK3SN → 7W4PAGIBak7apEhh8Fa5C}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1290:()=>{},2455:(e,t,a)=>{Promise.resolve().then(a.bind(a,3455)),Promise.resolve().then(a.bind(a,7438)),Promise.resolve().then(a.t.bind(a,2295,23)),Promise.resolve().then(a.t.bind(a,1290,23))},3455:(e,t,a)=>{"use strict";a.d(t,{default:()=>g});var s=a(5155),r=a(2115),n=a(63);let l=[{id:"set-anthropic-key",title:"Set Anthropic API key",category:"Credentials",keywords:["anthropic","api key","claude","apikey","llm","token","cloud engine"],kind:"secret",secretName:"ANTHROPIC_API_KEY",field:{label:"ANTHROPIC_API_KEY",type:"password",placeholder:"sk-ant-…",help:"Used by the Anthropic cloud engine. Stored encrypted in the secrets vault."},settingsHref:"/settings/tools",docSlug:"set-anthropic-key"},{id:"set-resend-key",title:"Set Resend API key (email)",category:"Credentials",keywords:["resend","email","api key","smtp","send mail"],kind:"secret",secretName:"RESEND_API_KEY",field:{label:"RESEND_API_KEY",type:"password",placeholder:"re_…",help:"Enables the email tool. Encrypted at rest."},settingsHref:"/settings/connectors",docSlug:"set-resend-key"},{id:"set-github-token",title:"Set GitHub token",category:"Credentials",keywords:["github","token","pat","api key","git","repo"],kind:"secret",secretName:"GITHUB_TOKEN",field:{label:"GITHUB_TOKEN",type:"password",placeholder:"ghp_… / github_pat_…",help:"Personal access token for the GitHub tool adapter."},settingsHref:"/settings/connectors",docSlug:"set-github-token"},{id:"set-supabase-url",title:"Set Supabase URL",category:"Credentials",keywords:["supabase","url","database","project url","connect"],kind:"secret",secretName:"SUPABASE_URL",field:{label:"SUPABASE_URL",type:"text",placeholder:"https://xxxx.supabase.co",help:"Project URL for Supabase writes + shared cloud layer."},settingsHref:"/settings/connectors",docSlug:"connect-supabase"},{id:"set-supabase-service-key",title:"Set Supabase service-role key",category:"Credentials",keywords:["supabase","service role","key","api key","secret","database"],kind:"secret",secretName:"SUPABASE_SERVICE_ROLE_KEY",field:{label:"SUPABASE_SERVICE_ROLE_KEY",type:"password",placeholder:"eyJ…",help:"Server-side service-role key. Never exposed to the browser."},settingsHref:"/settings/connectors",docSlug:"connect-supabase"},{id:"set-default-model",title:"Set default model",category:"Agent runtime",keywords:["model","default model","llm","opus","sonnet","haiku","picker"],kind:"config",configKey:"model",field:{label:"Default model",type:"select",help:"Model the main agent uses by default.",options:[{value:"claude-opus-4-7",label:"Opus 4.7"},{value:"claude-sonnet-4-6",label:"Sonnet 4.6"},{value:"claude-haiku-4-5-20251001",label:"Haiku 4.5"}]},settingsHref:"/settings/engines",docSlug:"choose-agent-engine"},{id:"set-design-style",title:"Set artifact design style",category:"Agent runtime",keywords:["design","style","aesthetic","minimal","bold","soft","balanced","artifact"],kind:"config",configKey:"designStyle",field:{label:"Design style",type:"select",help:"Visual style agents use when producing artifacts.",options:[{value:"balanced",label:"Balanced"},{value:"minimal",label:"Minimal"},{value:"bold",label:"Bold"},{value:"soft",label:"Soft"}]},settingsHref:"/settings/brand",docSlug:null},{id:"set-trust-mode",title:"Set main-agent trust mode",category:"Agent runtime",keywords:["trust","trust mode","auto","approval","safety","permission","gate"],kind:"trust-mode",field:{label:"Trust mode",type:"select",help:"Warning: auto lets the main agent run high-and-below risk tool calls WITHOUT asking you first (irreversible_external is always gated). Saving auto confirms this. approval_required is the safe default.",options:[{value:"approval_required",label:"Approval required (safe default)"},{value:"auto",label:"Auto (skip gate for ≤ high risk)"}]},settingsHref:"/settings/advanced",docSlug:"set-trust-mode"}],i=[{id:"start-whatsapp-bridge",slug:"start-whatsapp-bridge",title:"Start the WhatsApp bridge",summary:"Pair a dedicated WhatsApp number and run the gateway daemon so agents can send and receive messages.",category:"Channels",keywords:["whatsapp","bridge","gateway","baileys","pair","daemon","messages"],related:["secrets-vault-overview"]},{id:"set-api-key",slug:"set-api-key",title:"Set an API key",summary:"How API keys and secrets are stored, and the fastest way to add one from anywhere with Cmd+K.",category:"Credentials",keywords:["api key","secret","credential","token","vault","set key"],related:["set-anthropic-key","connect-supabase","secrets-vault-overview"]},{id:"set-anthropic-key",slug:"set-anthropic-key",title:"Set the Anthropic API key",summary:"Add the Anthropic key that powers the cloud engine.",category:"Credentials",keywords:["anthropic","api key","claude","cloud engine","llm"],related:["choose-agent-engine","set-api-key"]},{id:"set-resend-key",slug:"set-resend-key",title:"Set the Resend API key (email)",summary:"Enable the email tool by adding a Resend key.",category:"Credentials",keywords:["resend","email","api key","send mail"],related:["set-api-key"]},{id:"set-github-token",slug:"set-github-token",title:"Set a GitHub token",summary:"Add a personal access token to unlock the GitHub tool adapter.",category:"Credentials",keywords:["github","token","pat","repo","api key"],related:["set-api-key"]},{id:"connect-supabase",slug:"connect-supabase",title:"Connect Supabase",summary:"Wire up Supabase URL and keys for database writes and the shared cloud layer.",category:"Credentials",keywords:["supabase","database","connect","url","service role","shared cloud"],related:["set-api-key","secrets-vault-overview"]},{id:"choose-agent-engine",slug:"choose-agent-engine",title:"Choose an agent engine",summary:"Pick between claude-code, anthropic, ollama, codex, and hermes — and what each needs.",category:"Agent runtime",keywords:["engine","model","claude-code","ollama","codex","hermes","anthropic","local"],related:["set-anthropic-key"]},{id:"set-trust-mode",slug:"set-trust-mode",title:"Set trust mode",summary:"Control whether the main agent gates risky tool calls or runs them automatically.",category:"Agent runtime",keywords:["trust","trust mode","auto","approval","safety","risk","gate"],related:["create-agent"]},{id:"create-agent",slug:"create-agent",title:"Create an agent",summary:"Spin up a worker, set its schedule, scope its tools, and run it.",category:"Getting started",keywords:["agent","create","worker","new agent","caretaker","roster"],related:["schedules-and-cron","set-trust-mode"]},{id:"schedules-and-cron",slug:"schedules-and-cron",title:"Schedules and cron",summary:"How schedules queue durable heartbeat work, backfill missed windows, and run automatically.",category:"Getting started",keywords:["schedule","cron","daily","heartbeat","backfill","recurring"],related:["create-agent"]},{id:"secrets-vault-overview",slug:"secrets-vault-overview",title:"Secrets vault overview",summary:"Where credentials live, how they are encrypted, and why values are never shown back.",category:"Credentials",keywords:["secrets","vault","encryption","aes","master key","security"],related:["set-api-key"]},{id:"keyboard-shortcuts",slug:"keyboard-shortcuts",title:"Keyboard shortcuts",summary:"Every shortcut, including Cmd+K smart search and the composer keys.",category:"Getting started",keywords:["keyboard","shortcut","cmd k","command","hotkey","search"],related:[]}];function o(e){var t,a;let{action:l,current:i,onClose:o,onSaved:c}=e;(0,n.useRouter)();let d=(0,r.useRef)(null),u=l.field,[h,p]=(0,r.useState)("select"===u.type&&((null==i?void 0:i.value)||(null==(a=u.options)||null==(t=a[0])?void 0:t.value))||""),[m,g]=(0,r.useState)(!1),[f,y]=(0,r.useState)(""),[v,b]=(0,r.useState)(!1);async function k(e){if(e.preventDefault(),m)return;let t=String(h).trim();if(!t)return void y("Enter a value.");g(!0),y("");try{let{endpoint:e,method:s,body:r}=function(e,t){switch(e.kind){case"secret":return{endpoint:"/api/secrets",method:"POST",body:{name:e.secretName,value:t,scope:"global",source:"help-modal"}};case"config":return{endpoint:"/api/config",method:"PUT",body:{[e.configKey]:t}};case"trust-mode":return{endpoint:"/api/settings/trust-mode",method:"PATCH",body:"auto"===t?{mode:t,confirm:!0}:{mode:t}};default:throw Error("unknown action kind: ".concat(e.kind))}}(l,t),n=await fetch(e,{method:s,headers:{"content-type":"application/json"},body:JSON.stringify(r)});if(!n.ok){if(403===n.status)y("You need admin or owner access to change this.");else if(401===n.status)y("Sign in to change this setting.");else{let e=await n.text().catch(()=>""),t=e;try{var a;t=(null==(a=JSON.parse(e))?void 0:a.error)||e}catch(e){}y(t||"Failed (".concat(n.status,")."))}g(!1);return}b(!0),g(!1),null==c||c(l),window.setTimeout(()=>o(),700)}catch(e){y((null==e?void 0:e.message)||"Network error."),g(!1)}}(0,r.useEffect)(()=>{let e=window.setTimeout(()=>{var e;return null==(e=d.current)?void 0:e.focus()},0);return()=>window.clearTimeout(e)},[]),(0,r.useEffect)(()=>{function e(e){"Escape"===e.key&&(e.preventDefault(),o())}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[o]);let x=function(e,t){if(!t)return null;if("secret"===e.kind)return"set"===t.status?"Currently set":"Not set";if(null!=t.value){var a;let s=null==(a=e.field.options)?void 0:a.find(e=>e.value===t.value);return"Currently: ".concat(s?s.label:t.value)}return null}(l,i);return(0,s.jsx)("div",{className:"help-value-overlay",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&o()},children:(0,s.jsxs)("form",{className:"help-value-modal",role:"dialog","aria-modal":"true","aria-label":l.title,onSubmit:k,children:[(0,s.jsxs)("header",{className:"help-value-head",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("small",{children:l.category}),(0,s.jsx)("h2",{children:l.title})]}),(0,s.jsx)("button",{type:"button",className:"help-value-close",onClick:o,"aria-label":"Close",children:"esc"})]}),(0,s.jsxs)("div",{className:"help-value-body",children:[(0,s.jsxs)("label",{className:"help-value-field",children:[(0,s.jsxs)("span",{className:"help-value-label",children:[u.label,x?(0,s.jsx)("em",{className:"help-value-status",children:x}):null]}),"select"===u.type?(0,s.jsx)("select",{ref:d,value:h,onChange:e=>p(e.target.value),disabled:m||v,children:u.options.map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))}):(0,s.jsx)("input",{ref:d,type:"password"===u.type?"password":"text",value:h,placeholder:u.placeholder||"",onChange:e=>p(e.target.value),disabled:m||v,autoComplete:"off",spellCheck:!1})]}),u.help?(0,s.jsx)("p",{className:"help-value-help",children:u.help}):null,f?(0,s.jsx)("p",{className:"help-value-error",role:"alert",children:f}):null,v?(0,s.jsx)("p",{className:"help-value-ok",role:"status",children:"Saved."}):null]}),(0,s.jsxs)("footer",{className:"help-value-foot",children:[(0,s.jsxs)("div",{className:"help-value-links",children:[(0,s.jsx)("a",{href:l.settingsHref,onClick:o,children:"Open full settings"}),l.docSlug?(0,s.jsx)("a",{href:"/help/".concat(l.docSlug),onClick:o,children:"Read the guide"}):null]}),(0,s.jsxs)("div",{className:"help-value-actions",children:[(0,s.jsx)("button",{type:"button",className:"help-value-btn ghost",onClick:o,disabled:m,children:"Cancel"}),(0,s.jsx)("button",{type:"submit",className:"help-value-btn primary",disabled:m||v,children:m?"Saving…":"Save"})]})]})]})})}let c=[{title:"Overview",href:"/",section:"Navigate",keys:["dashboard","home","canvas","main"]},{title:"Agents",href:"/agents",section:"Navigate",keys:["agent","worker","roster","team"]},{title:"Tasks",href:"/tasks",section:"Navigate",keys:["task","work","todo","kanban"]},{title:"Approvals",href:"/approvals",section:"Navigate",keys:["approve","permission","review"]},{title:"Tools",href:"/tools",section:"Navigate",keys:["tool","connector","capability"]},{title:"Schedules",href:"/schedules",section:"Navigate",keys:["cron","schedule","calendar"]},{title:"Reports",href:"/reports",section:"Navigate",keys:["report","artifact","brief"]},{title:"Activity",href:"/activity",section:"Navigate",keys:["activity","runs","history"]},{title:"Runtime",href:"/runtime",section:"Navigate",keys:["runtime","diagnostics","heartbeat","process"]},{title:"Brand",href:"/brand",section:"Navigate",keys:["brand","identity","design"]},{title:"Settings",href:"/settings",section:"Navigate",keys:["settings","config","preferences"]},{title:"Help",href:"/help",section:"Navigate",keys:["help","guide","docs","documentation","shortcuts"]}],d=[{id:"focus-main-agent",title:"Focus main agent composer",detail:"Jump to the prompt box without leaving the keyboard.",section:"Action",shortcut:"⌘J",keys:["chat","composer","prompt","ask","agent"],run:e=>{let{router:t,pathname:a}=e;"/"!==a?(t.push("/"),window.setTimeout(()=>window.dispatchEvent(new Event("madarx:focus-composer")),180)):window.dispatchEvent(new Event("madarx:focus-composer"))}},{id:"new-chat",title:"New main-agent chat",detail:"Fresh conversation without using ⌘N, which belongs to the browser.",section:"Action",shortcut:"⌘⇧J",keys:["new","session","chat","fresh"],run:e=>{let{router:t,pathname:a}=e;"/"!==a&&t.push("/"),window.setTimeout(()=>window.dispatchEvent(new Event("madarx:new-chat")),180*("/"!==a))}},{id:"settings-modal",title:"Open agent configuration",detail:"Close to the right thumb, but avoids browser-level ⌘, preferences.",section:"Action",shortcut:"⌘;",keys:["settings","preferences","config","model"],run:e=>{let{router:t,pathname:a}=e;"/"!==a?(t.push("/"),window.setTimeout(()=>window.dispatchEvent(new Event("madarx:open-config")),180)):window.dispatchEvent(new Event("madarx:open-config"))}},{id:"shortcut-help",title:"Show keyboard shortcuts",detail:"Open this palette and filter to shortcut help.",section:"Action",shortcut:"⌘/",keys:["keyboard","shortcut","help","command"],run:e=>{let{openWithQuery:t}=e;return t("shortcuts")}}],u=[{title:"Open smart search",detail:"⌘Space or ⌘K. Thumb + home-row fallback; Ctrl Space also works when macOS owns Spotlight.",section:"Shortcuts",keys:["shortcut","search","spotlight","command space"]},{title:"Focus main agent",detail:"⌘J. Right thumb + index on home row; avoids browser shortcuts.",section:"Shortcuts",keys:["shortcut","composer","prompt"]},{title:"New chat",detail:"⌘⇧J. Same hand position as focus, with Shift; avoids ⌘N.",section:"Shortcuts",keys:["shortcut","new chat","session"]},{title:"Agents / Tasks / Runtime",detail:"⌘⇧A, ⌘⇧T, ⌘⇧D. Left-hand clusters for common operating surfaces.",section:"Shortcuts",keys:["shortcut","navigation","agents","tasks","runtime"]},{title:"Agent settings",detail:"⌘; sits under the right hand and avoids browser Preferences on ⌘,.",section:"Shortcuts",keys:["shortcut","settings","preferences"]}];function h(e){return String(e||"").toLowerCase().trim()}function p(){let e=(0,n.useRouter)(),t=(0,n.usePathname)(),a=(0,r.useRef)(null),[p,m]=(0,r.useState)(!1),[g,f]=(0,r.useState)(""),[y,v]=(0,r.useState)(0),[b,k]=(0,r.useState)({}),[x,w]=(0,r.useState)(!1),[j,N]=(0,r.useState)(null),S=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/help",{cache:"no-store"});if(!e.ok)return;let t=await e.json(),a={};for(let e of t.actions||[])a[e.id]=e.current;k(a),w(!0)}catch(e){}},[]),A=(0,r.useMemo)(()=>{let e=c.map(e=>({...e,id:"nav:".concat(e.href),kind:"nav",detail:"/"===e.href?"Return to the main command center.":"Open ".concat(e.href),run:t=>{let{router:a}=t;return a.push(e.href)}}));return[...d,...l.map(e=>{var t;return{id:"set:".concat(e.id),kind:"setting",action:e,title:e.title,detail:(null==(t=e.field)?void 0:t.help)||"Set this value.",section:"Set",keys:e.keywords}}),...i.map(e=>({id:"doc:".concat(e.slug),kind:"doc",title:e.title,detail:e.summary,section:"Doc",href:"/help/".concat(e.slug),keys:e.keywords})),...e,...u]},[]),E=(0,r.useMemo)(()=>{let e=h(g);if(!e)return A.slice(0,10);let t=e.split(/\s+/).filter(Boolean);return A.map(a=>{let s=[a.title,a.detail,a.section,a.href,...a.keys||[]].filter(Boolean).join(" ").toLowerCase(),r=t.reduce((e,t)=>e+ +!!s.includes(t),0),n=3*!!h(a.title).startsWith(e);return{item:a,score:r+n}}).filter(e=>{let{score:t}=e;return t>0}).sort((e,t)=>t.score-e.score||e.item.title.localeCompare(t.item.title)).map(e=>{let{item:t}=e;return t}).slice(0,12)},[A,g]),C=e=>{f(e||""),m(!0),v(0)},_=()=>{m(!1),f(""),v(0)},P=(0,r.useCallback)(e=>{let t=l.find(t=>t.id===e);t&&N(t)},[]),T=(0,r.useCallback)(()=>N(null),[]),K=a=>{if(a){if("setting"===a.kind){N(a.action),_();return}if("doc"===a.kind){e.push(a.href),_();return}a.run&&(a.run({router:e,pathname:t,openWithQuery:C}),"Shortcuts"!==a.section&&_())}};(0,r.useEffect)(()=>{(p||j)&&!x&&S()},[p,j,x,S]),(0,r.useEffect)(()=>{if(!p)return;let e=window.setTimeout(()=>{var e;return null==(e=a.current)?void 0:e.focus()},0);return()=>window.clearTimeout(e)},[p]),(0,r.useEffect)(()=>{v(0)},[g,p]),(0,r.useEffect)(()=>{function e(e){var t;let a=null==e||null==(t=e.detail)?void 0:t.id;a&&P(a)}return window.addEventListener("madarx:open-setting",e),()=>window.removeEventListener("madarx:open-setting",e)},[P]),(0,r.useEffect)(()=>{function a(a){let s=a.key.toLowerCase(),r=a.metaKey||a.ctrlKey,n=function(e){var t;let a=null==e||null==(t=e.tagName)?void 0:t.toLowerCase();return(null==e?void 0:e.isContentEditable)||"input"===a||"textarea"===a||"select"===a}(a.target);if(p){if("Escape"===a.key){a.preventDefault(),_();return}if("ArrowDown"===a.key){a.preventDefault(),v(e=>Math.min(e+1,Math.max(0,E.length-1)));return}if("ArrowUp"===a.key){a.preventDefault(),v(e=>Math.max(0,e-1));return}if("Enter"===a.key){a.preventDefault(),K(E[y]);return}}if(a.metaKey&&"Space"===a.code||a.metaKey&&"k"===s||a.ctrlKey&&"Space"===a.code){a.preventDefault(),m(e=>(e||N(null),!e));return}if(r&&!n){if(a.metaKey&&"j"===s&&!a.shiftKey){a.preventDefault(),d[0].run({router:e,pathname:t});return}if(a.metaKey&&"j"===s&&a.shiftKey){a.preventDefault(),d[1].run({router:e,pathname:t});return}if(a.metaKey&&";"===s){a.preventDefault(),d[2].run({router:e,pathname:t});return}if(a.metaKey&&"/"===s){a.preventDefault(),C("shortcuts");return}a.metaKey&&a.shiftKey&&["a","t","d"].includes(s)&&(a.preventDefault(),e.push("a"===s?"/agents":"t"===s?"/tasks":"/runtime"))}}return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[y,p,t,E,e]);let R=j?(0,s.jsx)(o,{action:j,current:b[j.id],onClose:T,onSaved:S}):null;return p?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"smart-search-overlay",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&_()},children:(0,s.jsxs)("section",{className:"smart-search-panel",role:"dialog","aria-modal":"true","aria-label":"Smart search",children:[(0,s.jsxs)("div",{className:"smart-search-head",children:[(0,s.jsx)("span",{className:"smart-search-orb","aria-hidden":"true"}),(0,s.jsx)("input",{ref:a,value:g,onChange:e=>f(e.target.value),placeholder:"Search docs, settings, pages…","aria-label":"Search madarX OS"}),(0,s.jsx)("kbd",{children:"esc"})]}),(0,s.jsx)("div",{className:"smart-search-results",role:"listbox","aria-label":"Smart search results",children:E.length?E.map((e,t)=>{let a="setting"===e.kind?b[e.action.id]:null,r=a&&"secret"===e.action.kind&&"set"===a.status?"Set":null;return(0,s.jsxs)("button",{type:"button",className:"smart-search-row"+(t===y?" is-active":""),onMouseEnter:()=>v(t),onClick:()=>K(e),role:"option","aria-selected":t===y,children:[(0,s.jsxs)("span",{className:"smart-search-row-main",children:[(0,s.jsxs)("small",{children:[(0,s.jsx)("span",{className:"smart-search-kind kind-".concat(e.kind||"nav"),children:e.section}),r?(0,s.jsx)("span",{className:"smart-search-pill",children:r}):null]}),(0,s.jsx)("b",{children:e.title}),(0,s.jsx)("em",{children:e.detail})]}),e.shortcut?(0,s.jsx)("kbd",{children:e.shortcut}):e.href?(0,s.jsx)("kbd",{children:e.href}):null]},e.id||e.title)}):(0,s.jsx)("div",{className:"smart-search-empty",children:"No matches. Try “api key”, “whatsapp”, “agent”, or “shortcut”."})}),(0,s.jsxs)("footer",{className:"smart-search-foot",children:[(0,s.jsxs)("span",{children:[(0,s.jsx)("kbd",{children:"↑"}),(0,s.jsx)("kbd",{children:"↓"})," select"]}),(0,s.jsxs)("span",{children:[(0,s.jsx)("kbd",{children:"return"})," open"]}),(0,s.jsxs)("span",{children:[(0,s.jsx)("kbd",{children:"⌘J"})," composer"]})]})]})}),R]}):R}let m=["/login","/share"];function g(e){let{children:t,sidebar:a}=e,l=(0,n.usePathname)();return(0,r.useMemo)(()=>m.some(e=>l===e||(null==l?void 0:l.startsWith("".concat(e,"/")))),[l])?(0,s.jsx)("div",{className:"chromeless-page",children:t}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"app-shell",children:[(0,s.jsx)("div",{className:"app-rail",children:null!=a?a:null}),(0,s.jsx)("div",{className:"app-content",children:t})]}),(0,s.jsx)(p,{})]})}},7438:(e,t,a)=>{"use strict";a.d(t,{default:()=>R});var s=a(5155),r=a(2115),n=a(2619),l=a.n(n),i=a(63),o=a(9565),c=a(7629),d=a(8987),u=a(5709),h=a(1516),p=a(4733),m=a(1745),g=a(4597),f=a(1092),y=a(5893),v=a(6351),b=a(7657),k=a(3437),x=a(6898),w=a(4227),j=a(1042),N=a(1510),S=a(8080),A=a(4333);let E=[{group:"work",name:"Overview",href:"/",icon:d.A},{group:"work",name:"Projects",href:"/projects",icon:u.A},{group:"work",name:"Agents",href:"/agents",icon:h.A},{group:"work",name:"Tasks",href:"/tasks",icon:p.A},{group:"work",name:"Workflows",href:"/workflows",icon:m.A},{group:"work",name:"Approvals",href:"/approvals",icon:g.A},{group:"library",name:"Marketplace",href:"/marketplace",icon:f.A}],C={Pickaxe:y.A,Boxes:v.A,Gem:b.A,FlaskConical:k.A,Factory:x.A,Building2:w.A,Package:f.A,FolderOpen:u.A,Workflow:m.A},_=[{name:"Settings",icon:j.A,href:"/settings"}];function P(e,t){return!!e&&("/"===t?"/"===e:e===t||e.startsWith("".concat(t,"/")))}function T(e){var t,a;null==(a=e.currentTarget)||null==(t=a.blur)||t.call(a)}function K(e){let{item:t,active:a}=e,r=t.icon;return(0,s.jsxs)(l(),{href:t.href,prefetch:!0,"aria-label":t.name,"aria-current":a?"page":void 0,"data-active":a?"true":void 0,onClick:T,className:"".concat("relative flex items-center justify-center p-2 rounded-lg transition-colors duration-150 group"," ").concat(a?"text-[#C2452A]":"text-[#69707a] hover:text-[#111318] hover:bg-[rgba(17,19,24,0.08)] active:bg-[rgba(17,19,24,0.12)]"),children:[(0,s.jsx)(r,{className:"w-5 h-5",strokeWidth:1.75,"aria-hidden":"true"}),(0,s.jsx)("span",{className:"absolute left-12 px-2 py-1 rounded-md whitespace-nowrap text-xs text-white bg-[#111318] hidden group-hover:inline-block group-focus-visible:inline-block z-50 shadow-lg pointer-events-none",children:t.name})]})}function R(e){let{moduleNav:t=[]}=e,a=(0,i.usePathname)(),{session:n,signOut:d}=function(){let[e,t]=(0,r.useState)(null),a=(0,i.useRouter)();return(0,r.useEffect)(()=>{let e=!0;return fetch("/api/auth/session",{cache:"no-store"}).then(e=>e.json()).then(a=>{e&&t((null==a?void 0:a.user)||null)}).catch(()=>{e&&t(null)}),()=>{e=!1}},[]),{session:e,signOut:async function(){await fetch("/api/auth/session",{method:"DELETE"}).catch(()=>null),a.replace("/login"),a.refresh()}}}(),[u,h]=(0,r.useState)(null);(0,r.useEffect)(()=>{let e=!0;return fetch("/api/system/update").then(e=>e.ok?e.json():null).then(t=>{e&&t&&h(t)}).catch(()=>{}),()=>{e=!1}},[]);let p=(Array.isArray(t)?t:[]).map(e=>({group:"module",name:e.label,href:e.href,icon:C[e.icon]||v.A})),m=[...E.filter(e=>"work"===e.group),...p,...E.filter(e=>"library"===e.group)],g=(null==n?void 0:n.email)||"Local owner",f="local"===((null==n?void 0:n.auth_mode)||"local"),y=((null==n?void 0:n.email)||(null==n?void 0:n.display_name)||"AK").slice(0,2).toUpperCase();return(0,s.jsxs)("aside",{className:"relative z-30 h-full w-full rounded-[18px] border border-white/75 bg-[var(--glass)] backdrop-blur-[22px] backdrop-saturate-150 shadow-[0_18px_54px_rgba(37,36,34,0.16)] flex flex-col","aria-label":"Primary navigation",children:[(0,s.jsx)("div",{className:"h-20 flex items-center justify-center px-3 shrink-0",children:(0,s.jsx)(l(),{href:"/",prefetch:!0,className:"flex-none","aria-label":"madarX home",onClick:T,children:(0,s.jsx)("img",{src:"/madarx-mark.svg",alt:"madarX",width:32,height:32,className:"block text-[#111318]"})})}),(0,s.jsxs)("div",{className:"flex-1 flex flex-col min-h-0",children:[(0,s.jsx)("ul",{className:"list-none m-0 p-0 px-3 text-sm font-medium flex-1 space-y-1",children:m.map((e,t)=>{let r=m[t-1],n=r&&r.group!==e.group,l=P(a,e.href);return(0,s.jsxs)("li",{children:[n?(0,s.jsx)("div",{"aria-hidden":"true",className:"mx-2 my-2 h-px bg-[rgba(20,22,26,0.09)]"}):null,(0,s.jsx)(K,{item:e,active:l})]},e.name)})}),(0,s.jsx)("ul",{className:"list-none m-0 p-0 px-3 pb-3 pt-2 text-sm font-medium space-y-1",children:_.map(e=>{let t=P(a,e.href);return(0,s.jsx)("li",{children:(0,s.jsx)(K,{item:e,active:t})},e.name)})}),(0,s.jsx)("div",{className:"relative py-4 px-3 border-t border-[rgba(20,22,26,0.09)] flex justify-center",children:(0,s.jsxs)(o.bL,{children:[(0,s.jsx)(o.l9,{className:"outline-none rounded-full border-0 bg-transparent p-0 appearance-none cursor-pointer focus-visible:ring-2 focus-visible:ring-[#111318] focus-visible:ring-offset-2 focus-visible:ring-offset-white/50","aria-label":"Account menu",children:(0,s.jsxs)(c.bL,{className:"w-10 h-10 rounded-full overflow-hidden cursor-pointer block",children:[(0,s.jsx)(c._V,{className:"w-full h-full object-cover",src:"/madarx-mark.svg",alt:"AK"}),(0,s.jsx)(c.H4,{className:"flex w-full h-full items-center justify-center text-white text-xs font-bold tracking-wider bg-gradient-to-br from-[#111318] to-[#565d6b]",delayMs:150,children:y})]})}),(0,s.jsx)(o.ZL,{children:(0,s.jsxs)(o.UC,{side:"right",align:"end",sideOffset:12,className:"w-64 rounded-xl bg-white shadow-[0_22px_60px_rgba(17,19,24,0.20)] border border-[rgba(20,22,26,0.09)] text-sm text-[#59606b] p-2 z-[100]",children:[(0,s.jsx)("div",{className:"px-2 py-1.5 text-[11px] uppercase tracking-[0.14em] text-[var(--accent-600)] font-bold",children:f?"Local operator":"Signed in"}),(0,s.jsx)("span",{className:"block text-[#68707b] px-2 pb-2 truncate",children:g}),(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsx)(l(),{href:"/",className:"block w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:"Dashboard"})}),(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsx)(l(),{href:"/settings",className:"block w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:"Settings"})}),(0,s.jsx)(o.wv,{className:"my-1 h-px bg-[rgba(20,22,26,0.09)]"}),(null==u?void 0:u.behind)&&(null==u?void 0:u.latest)?(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsxs)(l(),{href:"/",className:"flex items-center justify-between gap-x-2 w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:[(0,s.jsxs)("span",{className:"flex items-center gap-x-2",children:[(0,s.jsx)(N.A,{className:"w-4 h-4 text-[var(--accent-600)]",strokeWidth:1.75}),"Update available"]}),(0,s.jsxs)("span",{className:"text-[11px] font-semibold text-[var(--accent-600)]",children:["v",u.latest]})]})}):(0,s.jsxs)("div",{className:"flex items-center justify-between px-2 py-2 text-[12px] text-[#9aa1ab]",children:[(0,s.jsx)("span",{children:"Version"}),(0,s.jsx)("span",{className:"font-medium text-[#68707b]",children:(null==u?void 0:u.current)?"v".concat(u.current):"—"})]}),(0,s.jsx)(o.wv,{className:"my-1 h-px bg-[rgba(20,22,26,0.09)]"}),f?(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsxs)(l(),{href:"/settings/account",className:"flex items-center gap-x-2 w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:[(0,s.jsx)(S.A,{className:"w-4 h-4",strokeWidth:1.75}),"Sign in with an account"]})}):(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsxs)("button",{type:"button",onClick:d,className:"flex items-center gap-x-2 w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer text-[#313740]",children:[(0,s.jsx)(A.A,{className:"w-4 h-4",strokeWidth:1.75}),"Sign out"]})})]})})]})})]})]})}}},e=>{e.O(0,[3045,1741,2619,7597,8441,1255,7358],()=>e(e.s=2455)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1290:()=>{},2455:(e,t,a)=>{Promise.resolve().then(a.bind(a,3455)),Promise.resolve().then(a.bind(a,7438)),Promise.resolve().then(a.t.bind(a,2295,23)),Promise.resolve().then(a.t.bind(a,1290,23))},3455:(e,t,a)=>{"use strict";a.d(t,{default:()=>g});var s=a(5155),r=a(2115),n=a(63);let l=[{id:"set-anthropic-key",title:"Set Anthropic API key",category:"Credentials",keywords:["anthropic","api key","claude","apikey","llm","token","cloud engine"],kind:"secret",secretName:"ANTHROPIC_API_KEY",field:{label:"ANTHROPIC_API_KEY",type:"password",placeholder:"sk-ant-…",help:"Used by the Anthropic cloud engine. Stored encrypted in the secrets vault."},settingsHref:"/settings/tools",docSlug:"set-anthropic-key"},{id:"set-resend-key",title:"Set Resend API key (email)",category:"Credentials",keywords:["resend","email","api key","smtp","send mail"],kind:"secret",secretName:"RESEND_API_KEY",field:{label:"RESEND_API_KEY",type:"password",placeholder:"re_…",help:"Enables the email tool. Encrypted at rest."},settingsHref:"/settings/connectors",docSlug:"set-resend-key"},{id:"set-github-token",title:"Set GitHub token",category:"Credentials",keywords:["github","token","pat","api key","git","repo"],kind:"secret",secretName:"GITHUB_TOKEN",field:{label:"GITHUB_TOKEN",type:"password",placeholder:"ghp_… / github_pat_…",help:"Personal access token for the GitHub tool adapter."},settingsHref:"/settings/connectors",docSlug:"set-github-token"},{id:"set-supabase-url",title:"Set Supabase URL",category:"Credentials",keywords:["supabase","url","database","project url","connect"],kind:"secret",secretName:"SUPABASE_URL",field:{label:"SUPABASE_URL",type:"text",placeholder:"https://xxxx.supabase.co",help:"Project URL for Supabase writes + shared cloud layer."},settingsHref:"/settings/connectors",docSlug:"connect-supabase"},{id:"set-supabase-service-key",title:"Set Supabase service-role key",category:"Credentials",keywords:["supabase","service role","key","api key","secret","database"],kind:"secret",secretName:"SUPABASE_SERVICE_ROLE_KEY",field:{label:"SUPABASE_SERVICE_ROLE_KEY",type:"password",placeholder:"eyJ…",help:"Server-side service-role key. Never exposed to the browser."},settingsHref:"/settings/connectors",docSlug:"connect-supabase"},{id:"set-default-model",title:"Set default model",category:"Agent runtime",keywords:["model","default model","llm","opus","sonnet","haiku","picker"],kind:"config",configKey:"model",field:{label:"Default model",type:"select",help:"Model the main agent uses by default.",options:[{value:"claude-opus-4-7",label:"Opus 4.7"},{value:"claude-sonnet-4-6",label:"Sonnet 4.6"},{value:"claude-haiku-4-5-20251001",label:"Haiku 4.5"}]},settingsHref:"/settings/engines",docSlug:"choose-agent-engine"},{id:"set-design-style",title:"Set artifact design style",category:"Agent runtime",keywords:["design","style","aesthetic","minimal","bold","soft","balanced","artifact"],kind:"config",configKey:"designStyle",field:{label:"Design style",type:"select",help:"Visual style agents use when producing artifacts.",options:[{value:"balanced",label:"Balanced"},{value:"minimal",label:"Minimal"},{value:"bold",label:"Bold"},{value:"soft",label:"Soft"}]},settingsHref:"/settings/brand",docSlug:null},{id:"set-trust-mode",title:"Set main-agent trust mode",category:"Agent runtime",keywords:["trust","trust mode","auto","approval","safety","permission","gate"],kind:"trust-mode",field:{label:"Trust mode",type:"select",help:"Warning: auto lets the main agent run high-and-below risk tool calls WITHOUT asking you first (irreversible_external is always gated). Saving auto confirms this. approval_required is the safe default.",options:[{value:"approval_required",label:"Approval required (safe default)"},{value:"auto",label:"Auto (skip gate for ≤ high risk)"}]},settingsHref:"/settings/advanced",docSlug:"set-trust-mode"}],i=[{id:"start-whatsapp-bridge",slug:"start-whatsapp-bridge",title:"Start the WhatsApp bridge",summary:"Pair a dedicated WhatsApp number and run the gateway daemon so agents can send and receive messages.",category:"Channels",keywords:["whatsapp","bridge","gateway","baileys","pair","daemon","messages"],related:["secrets-vault-overview"]},{id:"set-api-key",slug:"set-api-key",title:"Set an API key",summary:"How API keys and secrets are stored, and the fastest way to add one from anywhere with Cmd+K.",category:"Credentials",keywords:["api key","secret","credential","token","vault","set key"],related:["set-anthropic-key","connect-supabase","secrets-vault-overview"]},{id:"set-anthropic-key",slug:"set-anthropic-key",title:"Set the Anthropic API key",summary:"Add the Anthropic key that powers the cloud engine.",category:"Credentials",keywords:["anthropic","api key","claude","cloud engine","llm"],related:["choose-agent-engine","set-api-key"]},{id:"set-resend-key",slug:"set-resend-key",title:"Set the Resend API key (email)",summary:"Enable the email tool by adding a Resend key.",category:"Credentials",keywords:["resend","email","api key","send mail"],related:["set-api-key"]},{id:"set-github-token",slug:"set-github-token",title:"Set a GitHub token",summary:"Add a personal access token to unlock the GitHub tool adapter.",category:"Credentials",keywords:["github","token","pat","repo","api key"],related:["set-api-key"]},{id:"connect-supabase",slug:"connect-supabase",title:"Connect Supabase",summary:"Wire up Supabase URL and keys for database writes and the shared cloud layer.",category:"Credentials",keywords:["supabase","database","connect","url","service role","shared cloud"],related:["set-api-key","secrets-vault-overview"]},{id:"choose-agent-engine",slug:"choose-agent-engine",title:"Choose an agent engine",summary:"Pick between claude-code, anthropic, ollama, codex, and hermes — and what each needs.",category:"Agent runtime",keywords:["engine","model","claude-code","ollama","codex","hermes","anthropic","local"],related:["set-anthropic-key"]},{id:"set-trust-mode",slug:"set-trust-mode",title:"Set trust mode",summary:"Control whether the main agent gates risky tool calls or runs them automatically.",category:"Agent runtime",keywords:["trust","trust mode","auto","approval","safety","risk","gate"],related:["create-agent"]},{id:"create-agent",slug:"create-agent",title:"Create an agent",summary:"Spin up a worker, set its schedule, scope its tools, and run it.",category:"Getting started",keywords:["agent","create","worker","new agent","caretaker","roster"],related:["schedules-and-cron","set-trust-mode"]},{id:"schedules-and-cron",slug:"schedules-and-cron",title:"Schedules and cron",summary:"How schedules queue durable heartbeat work, backfill missed windows, and run automatically.",category:"Getting started",keywords:["schedule","cron","daily","heartbeat","backfill","recurring"],related:["create-agent"]},{id:"secrets-vault-overview",slug:"secrets-vault-overview",title:"Secrets vault overview",summary:"Where credentials live, how they are encrypted, and why values are never shown back.",category:"Credentials",keywords:["secrets","vault","encryption","aes","master key","security"],related:["set-api-key"]},{id:"keyboard-shortcuts",slug:"keyboard-shortcuts",title:"Keyboard shortcuts",summary:"Every shortcut, including Cmd+K smart search and the composer keys.",category:"Getting started",keywords:["keyboard","shortcut","cmd k","command","hotkey","search"],related:[]}];function o(e){var t,a;let{action:l,current:i,onClose:o,onSaved:c}=e;(0,n.useRouter)();let d=(0,r.useRef)(null),u=l.field,[h,p]=(0,r.useState)("select"===u.type&&((null==i?void 0:i.value)||(null==(a=u.options)||null==(t=a[0])?void 0:t.value))||""),[m,g]=(0,r.useState)(!1),[f,y]=(0,r.useState)(""),[v,b]=(0,r.useState)(!1);async function k(e){if(e.preventDefault(),m)return;let t=String(h).trim();if(!t)return void y("Enter a value.");g(!0),y("");try{let{endpoint:e,method:s,body:r}=function(e,t){switch(e.kind){case"secret":return{endpoint:"/api/secrets",method:"POST",body:{name:e.secretName,value:t,scope:"global",source:"help-modal"}};case"config":return{endpoint:"/api/config",method:"PUT",body:{[e.configKey]:t}};case"trust-mode":return{endpoint:"/api/settings/trust-mode",method:"PATCH",body:"auto"===t?{mode:t,confirm:!0}:{mode:t}};default:throw Error("unknown action kind: ".concat(e.kind))}}(l,t),n=await fetch(e,{method:s,headers:{"content-type":"application/json"},body:JSON.stringify(r)});if(!n.ok){if(403===n.status)y("You need admin or owner access to change this.");else if(401===n.status)y("Sign in to change this setting.");else{let e=await n.text().catch(()=>""),t=e;try{var a;t=(null==(a=JSON.parse(e))?void 0:a.error)||e}catch(e){}y(t||"Failed (".concat(n.status,")."))}g(!1);return}b(!0),g(!1),null==c||c(l),window.setTimeout(()=>o(),700)}catch(e){y((null==e?void 0:e.message)||"Network error."),g(!1)}}(0,r.useEffect)(()=>{let e=window.setTimeout(()=>{var e;return null==(e=d.current)?void 0:e.focus()},0);return()=>window.clearTimeout(e)},[]),(0,r.useEffect)(()=>{function e(e){"Escape"===e.key&&(e.preventDefault(),o())}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[o]);let x=function(e,t){if(!t)return null;if("secret"===e.kind)return"set"===t.status?"Currently set":"Not set";if(null!=t.value){var a;let s=null==(a=e.field.options)?void 0:a.find(e=>e.value===t.value);return"Currently: ".concat(s?s.label:t.value)}return null}(l,i);return(0,s.jsx)("div",{className:"help-value-overlay",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&o()},children:(0,s.jsxs)("form",{className:"help-value-modal",role:"dialog","aria-modal":"true","aria-label":l.title,onSubmit:k,children:[(0,s.jsxs)("header",{className:"help-value-head",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("small",{children:l.category}),(0,s.jsx)("h2",{children:l.title})]}),(0,s.jsx)("button",{type:"button",className:"help-value-close",onClick:o,"aria-label":"Close",children:"esc"})]}),(0,s.jsxs)("div",{className:"help-value-body",children:[(0,s.jsxs)("label",{className:"help-value-field",children:[(0,s.jsxs)("span",{className:"help-value-label",children:[u.label,x?(0,s.jsx)("em",{className:"help-value-status",children:x}):null]}),"select"===u.type?(0,s.jsx)("select",{ref:d,value:h,onChange:e=>p(e.target.value),disabled:m||v,children:u.options.map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))}):(0,s.jsx)("input",{ref:d,type:"password"===u.type?"password":"text",value:h,placeholder:u.placeholder||"",onChange:e=>p(e.target.value),disabled:m||v,autoComplete:"off",spellCheck:!1})]}),u.help?(0,s.jsx)("p",{className:"help-value-help",children:u.help}):null,f?(0,s.jsx)("p",{className:"help-value-error",role:"alert",children:f}):null,v?(0,s.jsx)("p",{className:"help-value-ok",role:"status",children:"Saved."}):null]}),(0,s.jsxs)("footer",{className:"help-value-foot",children:[(0,s.jsxs)("div",{className:"help-value-links",children:[(0,s.jsx)("a",{href:l.settingsHref,onClick:o,children:"Open full settings"}),l.docSlug?(0,s.jsx)("a",{href:"/help/".concat(l.docSlug),onClick:o,children:"Read the guide"}):null]}),(0,s.jsxs)("div",{className:"help-value-actions",children:[(0,s.jsx)("button",{type:"button",className:"help-value-btn ghost",onClick:o,disabled:m,children:"Cancel"}),(0,s.jsx)("button",{type:"submit",className:"help-value-btn primary",disabled:m||v,children:m?"Saving…":"Save"})]})]})]})})}let c=[{title:"Overview",href:"/",section:"Navigate",keys:["dashboard","home","canvas","main"]},{title:"Agents",href:"/agents",section:"Navigate",keys:["agent","worker","roster","team"]},{title:"Tasks",href:"/tasks",section:"Navigate",keys:["task","work","todo","kanban"]},{title:"Approvals",href:"/approvals",section:"Navigate",keys:["approve","permission","review"]},{title:"Tools",href:"/tools",section:"Navigate",keys:["tool","connector","capability"]},{title:"Schedules",href:"/schedules",section:"Navigate",keys:["cron","schedule","calendar"]},{title:"Reports",href:"/reports",section:"Navigate",keys:["report","artifact","brief"]},{title:"Activity",href:"/activity",section:"Navigate",keys:["activity","runs","history"]},{title:"Runtime",href:"/runtime",section:"Navigate",keys:["runtime","diagnostics","heartbeat","process"]},{title:"Brand",href:"/brand",section:"Navigate",keys:["brand","identity","design"]},{title:"Settings",href:"/settings",section:"Navigate",keys:["settings","config","preferences"]},{title:"Help",href:"/help",section:"Navigate",keys:["help","guide","docs","documentation","shortcuts"]}],d=[{id:"focus-main-agent",title:"Focus main agent composer",detail:"Jump to the prompt box without leaving the keyboard.",section:"Action",shortcut:"⌘J",keys:["chat","composer","prompt","ask","agent"],run:e=>{let{router:t,pathname:a}=e;"/"!==a?(t.push("/"),window.setTimeout(()=>window.dispatchEvent(new Event("madarx:focus-composer")),180)):window.dispatchEvent(new Event("madarx:focus-composer"))}},{id:"new-chat",title:"New main-agent chat",detail:"Fresh conversation without using ⌘N, which belongs to the browser.",section:"Action",shortcut:"⌘⇧J",keys:["new","session","chat","fresh"],run:e=>{let{router:t,pathname:a}=e;"/"!==a&&t.push("/"),window.setTimeout(()=>window.dispatchEvent(new Event("madarx:new-chat")),180*("/"!==a))}},{id:"settings-modal",title:"Open agent configuration",detail:"Close to the right thumb, but avoids browser-level ⌘, preferences.",section:"Action",shortcut:"⌘;",keys:["settings","preferences","config","model"],run:e=>{let{router:t,pathname:a}=e;"/"!==a?(t.push("/"),window.setTimeout(()=>window.dispatchEvent(new Event("madarx:open-config")),180)):window.dispatchEvent(new Event("madarx:open-config"))}},{id:"shortcut-help",title:"Show keyboard shortcuts",detail:"Open this palette and filter to shortcut help.",section:"Action",shortcut:"⌘/",keys:["keyboard","shortcut","help","command"],run:e=>{let{openWithQuery:t}=e;return t("shortcuts")}}],u=[{title:"Open smart search",detail:"⌘Space or ⌘K. Thumb + home-row fallback; Ctrl Space also works when macOS owns Spotlight.",section:"Shortcuts",keys:["shortcut","search","spotlight","command space"]},{title:"Focus main agent",detail:"⌘J. Right thumb + index on home row; avoids browser shortcuts.",section:"Shortcuts",keys:["shortcut","composer","prompt"]},{title:"New chat",detail:"⌘⇧J. Same hand position as focus, with Shift; avoids ⌘N.",section:"Shortcuts",keys:["shortcut","new chat","session"]},{title:"Agents / Tasks / Runtime",detail:"⌘⇧A, ⌘⇧T, ⌘⇧D. Left-hand clusters for common operating surfaces.",section:"Shortcuts",keys:["shortcut","navigation","agents","tasks","runtime"]},{title:"Agent settings",detail:"⌘; sits under the right hand and avoids browser Preferences on ⌘,.",section:"Shortcuts",keys:["shortcut","settings","preferences"]}];function h(e){return String(e||"").toLowerCase().trim()}function p(){let e=(0,n.useRouter)(),t=(0,n.usePathname)(),a=(0,r.useRef)(null),[p,m]=(0,r.useState)(!1),[g,f]=(0,r.useState)(""),[y,v]=(0,r.useState)(0),[b,k]=(0,r.useState)({}),[x,w]=(0,r.useState)(!1),[j,N]=(0,r.useState)(null),S=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/help",{cache:"no-store"});if(!e.ok)return;let t=await e.json(),a={};for(let e of t.actions||[])a[e.id]=e.current;k(a),w(!0)}catch(e){}},[]),A=(0,r.useMemo)(()=>{let e=c.map(e=>({...e,id:"nav:".concat(e.href),kind:"nav",detail:"/"===e.href?"Return to the main command center.":"Open ".concat(e.href),run:t=>{let{router:a}=t;return a.push(e.href)}}));return[...d,...l.map(e=>{var t;return{id:"set:".concat(e.id),kind:"setting",action:e,title:e.title,detail:(null==(t=e.field)?void 0:t.help)||"Set this value.",section:"Set",keys:e.keywords}}),...i.map(e=>({id:"doc:".concat(e.slug),kind:"doc",title:e.title,detail:e.summary,section:"Doc",href:"/help/".concat(e.slug),keys:e.keywords})),...e,...u]},[]),E=(0,r.useMemo)(()=>{let e=h(g);if(!e)return A.slice(0,10);let t=e.split(/\s+/).filter(Boolean);return A.map(a=>{let s=[a.title,a.detail,a.section,a.href,...a.keys||[]].filter(Boolean).join(" ").toLowerCase(),r=t.reduce((e,t)=>e+ +!!s.includes(t),0),n=3*!!h(a.title).startsWith(e);return{item:a,score:r+n}}).filter(e=>{let{score:t}=e;return t>0}).sort((e,t)=>t.score-e.score||e.item.title.localeCompare(t.item.title)).map(e=>{let{item:t}=e;return t}).slice(0,12)},[A,g]),C=e=>{f(e||""),m(!0),v(0)},_=()=>{m(!1),f(""),v(0)},P=(0,r.useCallback)(e=>{let t=l.find(t=>t.id===e);t&&N(t)},[]),T=(0,r.useCallback)(()=>N(null),[]),K=a=>{if(a){if("setting"===a.kind){N(a.action),_();return}if("doc"===a.kind){e.push(a.href),_();return}a.run&&(a.run({router:e,pathname:t,openWithQuery:C}),"Shortcuts"!==a.section&&_())}};(0,r.useEffect)(()=>{(p||j)&&!x&&S()},[p,j,x,S]),(0,r.useEffect)(()=>{if(!p)return;let e=window.setTimeout(()=>{var e;return null==(e=a.current)?void 0:e.focus()},0);return()=>window.clearTimeout(e)},[p]),(0,r.useEffect)(()=>{v(0)},[g,p]),(0,r.useEffect)(()=>{function e(e){var t;let a=null==e||null==(t=e.detail)?void 0:t.id;a&&P(a)}return window.addEventListener("madarx:open-setting",e),()=>window.removeEventListener("madarx:open-setting",e)},[P]),(0,r.useEffect)(()=>{function a(a){let s=(a.key||"").toLowerCase(),r=a.metaKey||a.ctrlKey,n=function(e){var t;let a=null==e||null==(t=e.tagName)?void 0:t.toLowerCase();return(null==e?void 0:e.isContentEditable)||"input"===a||"textarea"===a||"select"===a}(a.target);if(p){if("Escape"===a.key){a.preventDefault(),_();return}if("ArrowDown"===a.key){a.preventDefault(),v(e=>Math.min(e+1,Math.max(0,E.length-1)));return}if("ArrowUp"===a.key){a.preventDefault(),v(e=>Math.max(0,e-1));return}if("Enter"===a.key){a.preventDefault(),K(E[y]);return}}if(a.metaKey&&"Space"===a.code||a.metaKey&&"k"===s||a.ctrlKey&&"Space"===a.code){a.preventDefault(),m(e=>(e||N(null),!e));return}if(r&&!n){if(a.metaKey&&"j"===s&&!a.shiftKey){a.preventDefault(),d[0].run({router:e,pathname:t});return}if(a.metaKey&&"j"===s&&a.shiftKey){a.preventDefault(),d[1].run({router:e,pathname:t});return}if(a.metaKey&&";"===s){a.preventDefault(),d[2].run({router:e,pathname:t});return}if(a.metaKey&&"/"===s){a.preventDefault(),C("shortcuts");return}a.metaKey&&a.shiftKey&&["a","t","d"].includes(s)&&(a.preventDefault(),e.push("a"===s?"/agents":"t"===s?"/tasks":"/runtime"))}}return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[y,p,t,E,e]);let R=j?(0,s.jsx)(o,{action:j,current:b[j.id],onClose:T,onSaved:S}):null;return p?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"smart-search-overlay",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&_()},children:(0,s.jsxs)("section",{className:"smart-search-panel",role:"dialog","aria-modal":"true","aria-label":"Smart search",children:[(0,s.jsxs)("div",{className:"smart-search-head",children:[(0,s.jsx)("span",{className:"smart-search-orb","aria-hidden":"true"}),(0,s.jsx)("input",{ref:a,value:g,onChange:e=>f(e.target.value),placeholder:"Search docs, settings, pages…","aria-label":"Search madarX OS"}),(0,s.jsx)("kbd",{children:"esc"})]}),(0,s.jsx)("div",{className:"smart-search-results",role:"listbox","aria-label":"Smart search results",children:E.length?E.map((e,t)=>{let a="setting"===e.kind?b[e.action.id]:null,r=a&&"secret"===e.action.kind&&"set"===a.status?"Set":null;return(0,s.jsxs)("button",{type:"button",className:"smart-search-row"+(t===y?" is-active":""),onMouseEnter:()=>v(t),onClick:()=>K(e),role:"option","aria-selected":t===y,children:[(0,s.jsxs)("span",{className:"smart-search-row-main",children:[(0,s.jsxs)("small",{children:[(0,s.jsx)("span",{className:"smart-search-kind kind-".concat(e.kind||"nav"),children:e.section}),r?(0,s.jsx)("span",{className:"smart-search-pill",children:r}):null]}),(0,s.jsx)("b",{children:e.title}),(0,s.jsx)("em",{children:e.detail})]}),e.shortcut?(0,s.jsx)("kbd",{children:e.shortcut}):e.href?(0,s.jsx)("kbd",{children:e.href}):null]},e.id||e.title)}):(0,s.jsx)("div",{className:"smart-search-empty",children:"No matches. Try “api key”, “whatsapp”, “agent”, or “shortcut”."})}),(0,s.jsxs)("footer",{className:"smart-search-foot",children:[(0,s.jsxs)("span",{children:[(0,s.jsx)("kbd",{children:"↑"}),(0,s.jsx)("kbd",{children:"↓"})," select"]}),(0,s.jsxs)("span",{children:[(0,s.jsx)("kbd",{children:"return"})," open"]}),(0,s.jsxs)("span",{children:[(0,s.jsx)("kbd",{children:"⌘J"})," composer"]})]})]})}),R]}):R}let m=["/login","/share"];function g(e){let{children:t,sidebar:a}=e,l=(0,n.usePathname)();return(0,r.useMemo)(()=>m.some(e=>l===e||(null==l?void 0:l.startsWith("".concat(e,"/")))),[l])?(0,s.jsx)("div",{className:"chromeless-page",children:t}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"app-shell",children:[(0,s.jsx)("div",{className:"app-rail",children:null!=a?a:null}),(0,s.jsx)("div",{className:"app-content",children:t})]}),(0,s.jsx)(p,{})]})}},7438:(e,t,a)=>{"use strict";a.d(t,{default:()=>R});var s=a(5155),r=a(2115),n=a(2619),l=a.n(n),i=a(63),o=a(9565),c=a(7629),d=a(8987),u=a(5709),h=a(1516),p=a(4733),m=a(1745),g=a(4597),f=a(1092),y=a(5893),v=a(6351),b=a(7657),k=a(3437),x=a(6898),w=a(4227),j=a(1042),N=a(1510),S=a(8080),A=a(4333);let E=[{group:"work",name:"Overview",href:"/",icon:d.A},{group:"work",name:"Projects",href:"/projects",icon:u.A},{group:"work",name:"Agents",href:"/agents",icon:h.A},{group:"work",name:"Tasks",href:"/tasks",icon:p.A},{group:"work",name:"Workflows",href:"/workflows",icon:m.A},{group:"work",name:"Approvals",href:"/approvals",icon:g.A},{group:"library",name:"Marketplace",href:"/marketplace",icon:f.A}],C={Pickaxe:y.A,Boxes:v.A,Gem:b.A,FlaskConical:k.A,Factory:x.A,Building2:w.A,Package:f.A,FolderOpen:u.A,Workflow:m.A},_=[{name:"Settings",icon:j.A,href:"/settings"}];function P(e,t){return!!e&&("/"===t?"/"===e:e===t||e.startsWith("".concat(t,"/")))}function T(e){var t,a;null==(a=e.currentTarget)||null==(t=a.blur)||t.call(a)}function K(e){let{item:t,active:a}=e,r=t.icon;return(0,s.jsxs)(l(),{href:t.href,prefetch:!0,"aria-label":t.name,"aria-current":a?"page":void 0,"data-active":a?"true":void 0,onClick:T,className:"".concat("relative flex items-center justify-center p-2 rounded-lg transition-colors duration-150 group"," ").concat(a?"text-[#C2452A]":"text-[#69707a] hover:text-[#111318] hover:bg-[rgba(17,19,24,0.08)] active:bg-[rgba(17,19,24,0.12)]"),children:[(0,s.jsx)(r,{className:"w-5 h-5",strokeWidth:1.75,"aria-hidden":"true"}),(0,s.jsx)("span",{className:"absolute left-12 px-2 py-1 rounded-md whitespace-nowrap text-xs text-white bg-[#111318] hidden group-hover:inline-block group-focus-visible:inline-block z-50 shadow-lg pointer-events-none",children:t.name})]})}function R(e){let{moduleNav:t=[]}=e,a=(0,i.usePathname)(),{session:n,signOut:d}=function(){let[e,t]=(0,r.useState)(null),a=(0,i.useRouter)();return(0,r.useEffect)(()=>{let e=!0;return fetch("/api/auth/session",{cache:"no-store"}).then(e=>e.json()).then(a=>{e&&t((null==a?void 0:a.user)||null)}).catch(()=>{e&&t(null)}),()=>{e=!1}},[]),{session:e,signOut:async function(){await fetch("/api/auth/session",{method:"DELETE"}).catch(()=>null),a.replace("/login"),a.refresh()}}}(),[u,h]=(0,r.useState)(null);(0,r.useEffect)(()=>{let e=!0;return fetch("/api/system/update").then(e=>e.ok?e.json():null).then(t=>{e&&t&&h(t)}).catch(()=>{}),()=>{e=!1}},[]);let p=(Array.isArray(t)?t:[]).map(e=>({group:"module",name:e.label,href:e.href,icon:C[e.icon]||v.A})),m=[...E.filter(e=>"work"===e.group),...p,...E.filter(e=>"library"===e.group)],g=(null==n?void 0:n.email)||"Local owner",f="local"===((null==n?void 0:n.auth_mode)||"local"),y=((null==n?void 0:n.email)||(null==n?void 0:n.display_name)||"AK").slice(0,2).toUpperCase();return(0,s.jsxs)("aside",{className:"relative z-30 h-full w-full rounded-[18px] border border-white/75 bg-[var(--glass)] backdrop-blur-[22px] backdrop-saturate-150 shadow-[0_18px_54px_rgba(37,36,34,0.16)] flex flex-col","aria-label":"Primary navigation",children:[(0,s.jsx)("div",{className:"h-20 flex items-center justify-center px-3 shrink-0",children:(0,s.jsx)(l(),{href:"/",prefetch:!0,className:"flex-none","aria-label":"madarX home",onClick:T,children:(0,s.jsx)("img",{src:"/madarx-mark.svg",alt:"madarX",width:32,height:32,className:"block text-[#111318]"})})}),(0,s.jsxs)("div",{className:"flex-1 flex flex-col min-h-0",children:[(0,s.jsx)("ul",{className:"list-none m-0 p-0 px-3 text-sm font-medium flex-1 space-y-1",children:m.map((e,t)=>{let r=m[t-1],n=r&&r.group!==e.group,l=P(a,e.href);return(0,s.jsxs)("li",{children:[n?(0,s.jsx)("div",{"aria-hidden":"true",className:"mx-2 my-2 h-px bg-[rgba(20,22,26,0.09)]"}):null,(0,s.jsx)(K,{item:e,active:l})]},e.name)})}),(0,s.jsx)("ul",{className:"list-none m-0 p-0 px-3 pb-3 pt-2 text-sm font-medium space-y-1",children:_.map(e=>{let t=P(a,e.href);return(0,s.jsx)("li",{children:(0,s.jsx)(K,{item:e,active:t})},e.name)})}),(0,s.jsx)("div",{className:"relative py-4 px-3 border-t border-[rgba(20,22,26,0.09)] flex justify-center",children:(0,s.jsxs)(o.bL,{children:[(0,s.jsx)(o.l9,{className:"outline-none rounded-full border-0 bg-transparent p-0 appearance-none cursor-pointer focus-visible:ring-2 focus-visible:ring-[#111318] focus-visible:ring-offset-2 focus-visible:ring-offset-white/50","aria-label":"Account menu",children:(0,s.jsxs)(c.bL,{className:"w-10 h-10 rounded-full overflow-hidden cursor-pointer block",children:[(0,s.jsx)(c._V,{className:"w-full h-full object-cover",src:"/madarx-mark.svg",alt:"AK"}),(0,s.jsx)(c.H4,{className:"flex w-full h-full items-center justify-center text-white text-xs font-bold tracking-wider bg-gradient-to-br from-[#111318] to-[#565d6b]",delayMs:150,children:y})]})}),(0,s.jsx)(o.ZL,{children:(0,s.jsxs)(o.UC,{side:"right",align:"end",sideOffset:12,className:"w-64 rounded-xl bg-white shadow-[0_22px_60px_rgba(17,19,24,0.20)] border border-[rgba(20,22,26,0.09)] text-sm text-[#59606b] p-2 z-[100]",children:[(0,s.jsx)("div",{className:"px-2 py-1.5 text-[11px] uppercase tracking-[0.14em] text-[var(--accent-600)] font-bold",children:f?"Local operator":"Signed in"}),(0,s.jsx)("span",{className:"block text-[#68707b] px-2 pb-2 truncate",children:g}),(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsx)(l(),{href:"/",className:"block w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:"Dashboard"})}),(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsx)(l(),{href:"/settings",className:"block w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:"Settings"})}),(0,s.jsx)(o.wv,{className:"my-1 h-px bg-[rgba(20,22,26,0.09)]"}),(null==u?void 0:u.behind)&&(null==u?void 0:u.latest)?(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsxs)(l(),{href:"/",className:"flex items-center justify-between gap-x-2 w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:[(0,s.jsxs)("span",{className:"flex items-center gap-x-2",children:[(0,s.jsx)(N.A,{className:"w-4 h-4 text-[var(--accent-600)]",strokeWidth:1.75}),"Update available"]}),(0,s.jsxs)("span",{className:"text-[11px] font-semibold text-[var(--accent-600)]",children:["v",u.latest]})]})}):(0,s.jsxs)("div",{className:"flex items-center justify-between px-2 py-2 text-[12px] text-[#9aa1ab]",children:[(0,s.jsx)("span",{children:"Version"}),(0,s.jsx)("span",{className:"font-medium text-[#68707b]",children:(null==u?void 0:u.current)?"v".concat(u.current):"—"})]}),(0,s.jsx)(o.wv,{className:"my-1 h-px bg-[rgba(20,22,26,0.09)]"}),f?(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsxs)(l(),{href:"/settings/account",className:"flex items-center gap-x-2 w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer no-underline text-[#313740]",children:[(0,s.jsx)(S.A,{className:"w-4 h-4",strokeWidth:1.75}),"Sign in with an account"]})}):(0,s.jsx)(o.q7,{asChild:!0,className:"outline-none",children:(0,s.jsxs)("button",{type:"button",onClick:d,className:"flex items-center gap-x-2 w-full p-2 text-left rounded-md hover:bg-[rgba(17,19,24,0.05)] active:bg-[rgba(17,19,24,0.1)] duration-150 cursor-pointer text-[#313740]",children:[(0,s.jsx)(A.A,{className:"w-4 h-4",strokeWidth:1.75}),"Sign out"]})})]})})]})})]})]})}}},e=>{e.O(0,[3045,1741,2619,7597,8441,1255,7358],()=>e(e.s=2455)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[893],{45:(e,a,t)=>{"use strict";t.d(a,{default:()=>o});var s=t(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},l=t(4250);let r=(0,s.createContext)({}),o=(0,s.forwardRef)((e,a)=>{var t,o,c;let{color:i,size:d,strokeWidth:u,absoluteStrokeWidth:m,className:h="",children:p,iconNode:f,...j}=e,{size:x=24,strokeWidth:g=2,absoluteStrokeWidth:v=!1,color:b="currentColor",className:y=""}=null!=(t=(0,s.useContext)(r))?t:{},k=(null!=m?m:v)?24*Number(null!=u?u:g)/Number(null!=d?d:x):null!=u?u:g;return(0,s.createElement)("svg",{ref:a,...n,width:null!=(o=null!=d?d:x)?o:n.width,height:null!=(c=null!=d?d:x)?c:n.height,stroke:null!=i?i:b,strokeWidth:k,className:(0,l.z)("lucide",y,h),...!p&&!(e=>{for(let a in e)if(a.startsWith("aria-")||"role"===a||"title"===a)return!0;return!1})(j)&&{"aria-hidden":"true"},...j},[...f.map(e=>{let[a,t]=e;return(0,s.createElement)(a,t)}),...Array.isArray(p)?p:[p]])})},677:(e,a,t)=>{"use strict";t.d(a,{default:()=>l});var s=t(5155),n=t(2115);function l(){let[e,a]=(0,n.useState)([]),[t,l]=(0,n.useState)("");return(0,n.useEffect)(()=>{l(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>a(e.projects||[])).catch(()=>{})},[]),(0,s.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,s.jsxs)("select",{value:t,onChange:e=>{var a;l(a=e.target.value),a?localStorage.setItem("madarx.activeProjectId",a):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:a||null}}))},"aria-label":"Active project",children:[(0,s.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,s.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},926:(e,a,t)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),!function(e,a){for(var t in a)Object.defineProperty(e,t,{enumerable:!0,get:a[t]})}(a,{callServer:function(){return s.callServer},createServerReference:function(){return l.createServerReference},findSourceMapURL:function(){return n.findSourceMapURL}});let s=t(1209),n=t(5153),l=t(7197)},2233:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("40eef191530afb2a910c9f1a66cefee4b4975bb762",o.callServer,void 0,o.findSourceMapURL,"createProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Creating…":"Create project"})}function m(e){let{workspaceRoot:a="~/workspace/projects"}=e,[t,l]=n.useState(!1),[o,m]=n.useState(""),[h,p]=n.useState("workspace"),[f,j]=n.useState(""),x=n.useRef(null),g=n.useMemo(()=>"".concat(a.replace(/\/$/,""),"/").concat(String(o||"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"),[a,o]);return n.useEffect(()=>{var e;"custom"===h&&(null==(e=x.current)||e.focus())},[h]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("button",{type:"button",className:"admin-button agents-new-cta",onClick:()=>l(!0),children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"agents-new-cta-glyph",children:"+"}),"New project"]}),(0,s.jsx)(r.A,{open:t,onClose:()=>l(!1),eyebrow:"New project",title:"Create a project",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("p",{className:"agents-modal-help",children:"Scope agents, documents, memory, and integrations together."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",required:!0,placeholder:"Acme Co.",autoComplete:"off",value:o,onChange:e=>m(e.target.value),autoFocus:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where this project lives on disk."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("workspace"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"workspace",checked:"workspace"===h,onChange:()=>p("workspace")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"madarX workspace"}),(0,s.jsx)("code",{title:g,children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(g)})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===h,onChange:()=>p("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Custom path"}),(0,s.jsx)("small",{children:"Any absolute folder. Created if missing."})]})]})]}),"custom"===h?(0,s.jsx)(i.A,{inputRef:x,value:f,onChange:j}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Used for the project tile across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:"#c2452a"===e.value}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}},3179:(e,a,t)=>{"use strict";t.d(a,{default:()=>d});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("404c8804c1148aee36dfb0fb9269e772184aae34de",o.callServer,void 0,o.findSourceMapURL,"deleteProjectAction");function i(e){let{disabled:a}=e,{pending:t}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button danger",disabled:t||a,"aria-busy":t?"true":void 0,children:t?"Deleting…":"Delete project"})}function d(e){let{projectId:a,projectName:t,projectSlug:l,isProtected:o}=e,[d,u]=n.useState(!1),[m,h]=n.useState("");if(o)return(0,s.jsxs)("span",{className:"admin-button secondary project-delete is-locked","aria-disabled":"true",title:"The Personal project is the default scope and cannot be deleted.",children:[(0,s.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{marginRight:6,verticalAlign:"-1px"},children:[(0,s.jsx)("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),(0,s.jsx)("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Protected"]});n.useEffect(()=>{d||h("")},[d]);let p=m.trim()===l;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-delete",onClick:()=>u(!0),"aria-label":"Delete ".concat(t),children:"Delete"}),(0,s.jsx)(r.A,{open:d,onClose:()=>u(!1),eyebrow:"Delete project",title:"Delete ".concat(t,"?"),tone:"danger",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("p",{className:"agents-modal-help",children:"This removes the project, its agents, Disk files, memory, secrets, and audit history. The folder on your local drive is left untouched."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsxs)("span",{children:["Type ",(0,s.jsx)("code",{className:"agents-modal-inline-code",children:l})," to confirm"]}),(0,s.jsx)("input",{type:"text",autoComplete:"off",spellCheck:!1,value:m,onChange:e=>h(e.target.value),placeholder:l,autoFocus:!0})]})}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(!1),children:"Cancel"}),(0,s.jsx)(i,{disabled:!p})]})]})})]})}},3185:(e,a,t)=>{"use strict";t.d(a,{A:()=>o});var s=t(2115),n=t(4250);let l=e=>{let a=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,a,t)=>t?t.toUpperCase():a.toLowerCase());return a.charAt(0).toUpperCase()+a.slice(1)};var r=t(45);let o=(e,a)=>{let t=(0,s.forwardRef)((t,o)=>{let{className:c,...i}=t;return(0,s.createElement)(r.default,{ref:o,iconNode:a,className:(0,n.z)("lucide-".concat(l(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),c),...i})});return t.displayName=l(e),t}},4250:(e,a,t)=>{"use strict";t.d(a,{z:()=>s});let s=function(){for(var e=arguments.length,a=Array(e),t=0;t<e;t++)a[t]=arguments[t];return a.filter((e,a,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===a).join(" ").trim()}},4788:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5649:(e,a,t)=>{"use strict";t.d(a,{A:()=>r});var s=t(5155),n=t(2115),l=t(4788);function r(e){let{open:a,onClose:t,eyebrow:r,title:o,tone:c="default",size:i="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(a&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!a&&e.open&&e.close())},[a]),n.useEffect(()=>{let e=u.current;if(!e)return;let a=e=>{e.preventDefault(),t()};return e.addEventListener("cancel",a),()=>e.removeEventListener("cancel",a)},[t]),(0,s.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===i?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&t()},children:a?(0,s.jsxs)("div",{className:"agents-modal-card".concat("danger"===c?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("header",{className:"agents-modal-head",children:[(0,s.jsxs)("div",{children:[r?(0,s.jsx)("span",{className:"admin-kicker",children:r}):null,(0,s.jsx)("h2",{children:o})]}),(0,s.jsx)("button",{type:"button",className:"agents-modal-close",onClick:t,"aria-label":"Close",children:(0,s.jsx)(l.A,{size:14})})]}),d]}):null})}},6787:(e,a,t)=>{Promise.resolve().then(t.bind(t,677)),Promise.resolve().then(t.bind(t,3179)),Promise.resolve().then(t.bind(t,7612)),Promise.resolve().then(t.bind(t,2233)),Promise.resolve().then(t.t.bind(t,2619,23))},7612:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("40bd236cf4b7d72418a71d22f3677546a1dcb9a913",o.callServer,void 0,o.findSourceMapURL,"updateProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Saving…":"Save changes"})}function m(e){let{projectId:a,projectName:t,projectColor:l,projectDescription:o,projectFolderPath:m}=e,[h,p]=n.useState(!1),[f,j]=n.useState("keep"),[x,g]=n.useState(m||""),v=n.useRef(null);return n.useEffect(()=>{h&&(j("keep"),g(m||""))},[h,m]),n.useEffect(()=>{var e;"custom"===f&&(null==(e=v.current)||e.focus())},[f]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-edit",onClick:()=>p(!0),"aria-label":"Edit ".concat(t),children:"Edit"}),(0,s.jsx)(r.A,{open:h,onClose:()=>p(!1),eyebrow:"Edit project",title:"Edit ".concat(t),children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",defaultValue:t,autoComplete:"off",required:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where project files live on disk. Move only if you've already moved the folder yourself."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("keep"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"keep",checked:"keep"===f,onChange:()=>j("keep")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Keep current"}),(0,s.jsx)("code",{title:m||"",children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(m)||"(not set)"})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===f,onChange:()=>j("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Change to…"}),(0,s.jsx)("small",{children:"Absolute path. Must already exist or be writable."})]})]})]}),"custom"===f?(0,s.jsx)(i.A,{inputRef:v,value:x,onChange:g}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Tile color across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:e.value===(l||"#c2452a")}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,defaultValue:o||"",placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>p(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}},9097:(e,a,t)=>{"use strict";t.d(a,{A:()=>l});var s=t(5155),n=t(2115);function l(e){let{name:a="folder_path",value:t,onChange:l,inputRef:r,placeholder:o="/Users/you/Documents/my-project"}=e,[c,i]=n.useState(null),[d,u]=n.useState(!1),[m,h]=n.useState(""),[p,f]=n.useState(""),[j,x]=n.useState(null);async function g(){var e;let a;if(i(null),!(null==(e=navigator.clipboard)?void 0:e.readText))return void i({kind:"error",message:"Clipboard not available."});try{a=await navigator.clipboard.readText()}catch(e){i({kind:"error",message:"Allow clipboard access."});return}let t=(a||"").trim();if((t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))&&(t=t.slice(1,-1)),t.startsWith("file://"))try{t=decodeURI(t.slice(7))}catch(e){}return t?t.startsWith("/")||t.startsWith("~")?void(l(t),i({kind:"success",message:"Pasted."})):void i({kind:"error",message:"Path must be absolute."}):void i({kind:"error",message:"Clipboard is empty."})}async function v(){i(null),x("pick");try{let e=await fetch("/api/fs/pick-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:"Choose project folder",start_path:t&&t.startsWith("/")?t:void 0})});if(499===e.status)return void i({kind:"error",message:"Cancelled."});let a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Picker failed."});l(a.folder_path),i({kind:"success",message:"Selected ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}async function b(){if(i(null),!m.trim()||!p.trim())return void i({kind:"error",message:"Parent and name required."});x("create");try{let e=await fetch("/api/fs/create-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({parent:m.trim(),name:p.trim()})}),a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Create failed."});l(a.folder_path),u(!1),f(""),i({kind:"success",message:"Created ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}return n.useEffect(()=>{d&&!m&&h(t||"~/Documents")},[d,t,m]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"agents-modal-paste-row",children:[(0,s.jsx)("input",{ref:r,name:a,type:"text",placeholder:o,autoComplete:"off",spellCheck:!1,value:t||"",onChange:e=>{l(e.target.value),c&&i(null)},required:!0}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:v,disabled:"pick"===j,children:"pick"===j?"Opening…":"Choose folder…"})]}),(0,s.jsxs)("div",{className:"agents-modal-folder-tools",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:g,children:"Paste from clipboard"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Documents"),children:"~/Documents"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Desktop"),children:"~/Desktop"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(e=>!e),children:d?"Cancel new folder":"+ New folder"})]}),d?(0,s.jsxs)("div",{className:"agents-modal-create-folder",children:[(0,s.jsx)("small",{children:"Create a folder anywhere outside system directories. Parent must exist."}),(0,s.jsx)("div",{className:"agents-modal-create-row",children:(0,s.jsx)("input",{type:"text",placeholder:"Parent (e.g. ~/Documents)",value:m,onChange:e=>h(e.target.value),spellCheck:!1,autoComplete:"off"})}),(0,s.jsxs)("div",{className:"agents-modal-create-row",children:[(0,s.jsx)("input",{type:"text",placeholder:"New folder name",value:p,onChange:e=>f(e.target.value),spellCheck:!1,autoComplete:"off"}),(0,s.jsx)("button",{type:"button",className:"admin-button",onClick:b,disabled:"create"===j,children:"create"===j?"Creating…":"Create"})]})]}):null,c?(0,s.jsx)("p",{className:"agents-modal-feedback ".concat(c.kind),role:"status","aria-live":"polite",children:c.message}):null]})}}},e=>{e.O(0,[2619,8441,1255,7358],()=>e(e.s=6787)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[893],{45:(e,a,t)=>{"use strict";t.d(a,{default:()=>o});var s=t(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},l=t(4250);let r=(0,s.createContext)({}),o=(0,s.forwardRef)((e,a)=>{var t,o,c;let{color:i,size:d,strokeWidth:u,absoluteStrokeWidth:m,className:h="",children:p,iconNode:f,...j}=e,{size:x=24,strokeWidth:g=2,absoluteStrokeWidth:v=!1,color:b="currentColor",className:y=""}=null!=(t=(0,s.useContext)(r))?t:{},k=(null!=m?m:v)?24*Number(null!=u?u:g)/Number(null!=d?d:x):null!=u?u:g;return(0,s.createElement)("svg",{ref:a,...n,width:null!=(o=null!=d?d:x)?o:n.width,height:null!=(c=null!=d?d:x)?c:n.height,stroke:null!=i?i:b,strokeWidth:k,className:(0,l.z)("lucide",y,h),...!p&&!(e=>{for(let a in e)if(a.startsWith("aria-")||"role"===a||"title"===a)return!0;return!1})(j)&&{"aria-hidden":"true"},...j},[...f.map(e=>{let[a,t]=e;return(0,s.createElement)(a,t)}),...Array.isArray(p)?p:[p]])})},677:(e,a,t)=>{"use strict";t.d(a,{default:()=>l});var s=t(5155),n=t(2115);function l(){let[e,a]=(0,n.useState)([]),[t,l]=(0,n.useState)("");return(0,n.useEffect)(()=>{l(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>a(e.projects||[])).catch(()=>{})},[]),(0,s.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,s.jsxs)("select",{value:t,onChange:e=>{var a;l(a=e.target.value),a?localStorage.setItem("madarx.activeProjectId",a):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:a||null}}))},"aria-label":"Active project",children:[(0,s.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,s.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},926:(e,a,t)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),!function(e,a){for(var t in a)Object.defineProperty(e,t,{enumerable:!0,get:a[t]})}(a,{callServer:function(){return s.callServer},createServerReference:function(){return l.createServerReference},findSourceMapURL:function(){return n.findSourceMapURL}});let s=t(1209),n=t(5153),l=t(7197)},3185:(e,a,t)=>{"use strict";t.d(a,{A:()=>o});var s=t(2115),n=t(4250);let l=e=>{let a=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,a,t)=>t?t.toUpperCase():a.toLowerCase());return a.charAt(0).toUpperCase()+a.slice(1)};var r=t(45);let o=(e,a)=>{let t=(0,s.forwardRef)((t,o)=>{let{className:c,...i}=t;return(0,s.createElement)(r.default,{ref:o,iconNode:a,className:(0,n.z)("lucide-".concat(l(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),c),...i})});return t.displayName=l(e),t}},4250:(e,a,t)=>{"use strict";t.d(a,{z:()=>s});let s=function(){for(var e=arguments.length,a=Array(e),t=0;t<e;t++)a[t]=arguments[t];return a.filter((e,a,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===a).join(" ").trim()}},4788:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5407:(e,a,t)=>{"use strict";t.d(a,{default:()=>d});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("400fc7ee1083524750d811f6e09478c8bbb5a59f72",o.callServer,void 0,o.findSourceMapURL,"deleteProjectAction");function i(e){let{disabled:a}=e,{pending:t}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button danger",disabled:t||a,"aria-busy":t?"true":void 0,children:t?"Deleting…":"Delete project"})}function d(e){let{projectId:a,projectName:t,projectSlug:l,isProtected:o}=e,[d,u]=n.useState(!1),[m,h]=n.useState("");if(o)return(0,s.jsxs)("span",{className:"admin-button secondary project-delete is-locked","aria-disabled":"true",title:"The Personal project is the default scope and cannot be deleted.",children:[(0,s.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{marginRight:6,verticalAlign:"-1px"},children:[(0,s.jsx)("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),(0,s.jsx)("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Protected"]});n.useEffect(()=>{d||h("")},[d]);let p=m.trim()===l;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-delete",onClick:()=>u(!0),"aria-label":"Delete ".concat(t),children:"Delete"}),(0,s.jsx)(r.A,{open:d,onClose:()=>u(!1),eyebrow:"Delete project",title:"Delete ".concat(t,"?"),tone:"danger",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("p",{className:"agents-modal-help",children:"This removes the project, its agents, Disk files, memory, secrets, and audit history. The folder on your local drive is left untouched."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsxs)("span",{children:["Type ",(0,s.jsx)("code",{className:"agents-modal-inline-code",children:l})," to confirm"]}),(0,s.jsx)("input",{type:"text",autoComplete:"off",spellCheck:!1,value:m,onChange:e=>h(e.target.value),placeholder:l,autoFocus:!0})]})}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(!1),children:"Cancel"}),(0,s.jsx)(i,{disabled:!p})]})]})})]})}},5649:(e,a,t)=>{"use strict";t.d(a,{A:()=>r});var s=t(5155),n=t(2115),l=t(4788);function r(e){let{open:a,onClose:t,eyebrow:r,title:o,tone:c="default",size:i="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(a&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!a&&e.open&&e.close())},[a]),n.useEffect(()=>{let e=u.current;if(!e)return;let a=e=>{e.preventDefault(),t()};return e.addEventListener("cancel",a),()=>e.removeEventListener("cancel",a)},[t]),(0,s.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===i?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&t()},children:a?(0,s.jsxs)("div",{className:"agents-modal-card".concat("danger"===c?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("header",{className:"agents-modal-head",children:[(0,s.jsxs)("div",{children:[r?(0,s.jsx)("span",{className:"admin-kicker",children:r}):null,(0,s.jsx)("h2",{children:o})]}),(0,s.jsx)("button",{type:"button",className:"agents-modal-close",onClick:t,"aria-label":"Close",children:(0,s.jsx)(l.A,{size:14})})]}),d]}):null})}},6787:(e,a,t)=>{Promise.resolve().then(t.bind(t,677)),Promise.resolve().then(t.bind(t,5407)),Promise.resolve().then(t.bind(t,9020)),Promise.resolve().then(t.bind(t,8473)),Promise.resolve().then(t.t.bind(t,2619,23))},8473:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("40e0d415e25a2989b94e38244cb01379d3f03ea01b",o.callServer,void 0,o.findSourceMapURL,"createProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Creating…":"Create project"})}function m(e){let{workspaceRoot:a="~/workspace/projects"}=e,[t,l]=n.useState(!1),[o,m]=n.useState(""),[h,p]=n.useState("workspace"),[f,j]=n.useState(""),x=n.useRef(null),g=n.useMemo(()=>"".concat(a.replace(/\/$/,""),"/").concat(String(o||"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"),[a,o]);return n.useEffect(()=>{var e;"custom"===h&&(null==(e=x.current)||e.focus())},[h]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("button",{type:"button",className:"admin-button agents-new-cta",onClick:()=>l(!0),children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"agents-new-cta-glyph",children:"+"}),"New project"]}),(0,s.jsx)(r.A,{open:t,onClose:()=>l(!1),eyebrow:"New project",title:"Create a project",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("p",{className:"agents-modal-help",children:"Scope agents, documents, memory, and integrations together."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",required:!0,placeholder:"Acme Co.",autoComplete:"off",value:o,onChange:e=>m(e.target.value),autoFocus:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where this project lives on disk."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("workspace"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"workspace",checked:"workspace"===h,onChange:()=>p("workspace")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"madarX workspace"}),(0,s.jsx)("code",{title:g,children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(g)})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===h,onChange:()=>p("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Custom path"}),(0,s.jsx)("small",{children:"Any absolute folder. Created if missing."})]})]})]}),"custom"===h?(0,s.jsx)(i.A,{inputRef:x,value:f,onChange:j}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Used for the project tile across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:"#c2452a"===e.value}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}},9020:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("40281d896809d9c296146721aefa88a456d7c5bf72",o.callServer,void 0,o.findSourceMapURL,"updateProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Saving…":"Save changes"})}function m(e){let{projectId:a,projectName:t,projectColor:l,projectDescription:o,projectFolderPath:m}=e,[h,p]=n.useState(!1),[f,j]=n.useState("keep"),[x,g]=n.useState(m||""),v=n.useRef(null);return n.useEffect(()=>{h&&(j("keep"),g(m||""))},[h,m]),n.useEffect(()=>{var e;"custom"===f&&(null==(e=v.current)||e.focus())},[f]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-edit",onClick:()=>p(!0),"aria-label":"Edit ".concat(t),children:"Edit"}),(0,s.jsx)(r.A,{open:h,onClose:()=>p(!1),eyebrow:"Edit project",title:"Edit ".concat(t),children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",defaultValue:t,autoComplete:"off",required:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where project files live on disk. Move only if you've already moved the folder yourself."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("keep"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"keep",checked:"keep"===f,onChange:()=>j("keep")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Keep current"}),(0,s.jsx)("code",{title:m||"",children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(m)||"(not set)"})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===f,onChange:()=>j("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Change to…"}),(0,s.jsx)("small",{children:"Absolute path. Must already exist or be writable."})]})]})]}),"custom"===f?(0,s.jsx)(i.A,{inputRef:v,value:x,onChange:g}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Tile color across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:e.value===(l||"#c2452a")}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,defaultValue:o||"",placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>p(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}},9097:(e,a,t)=>{"use strict";t.d(a,{A:()=>l});var s=t(5155),n=t(2115);function l(e){let{name:a="folder_path",value:t,onChange:l,inputRef:r,placeholder:o="/Users/you/Documents/my-project"}=e,[c,i]=n.useState(null),[d,u]=n.useState(!1),[m,h]=n.useState(""),[p,f]=n.useState(""),[j,x]=n.useState(null);async function g(){var e;let a;if(i(null),!(null==(e=navigator.clipboard)?void 0:e.readText))return void i({kind:"error",message:"Clipboard not available."});try{a=await navigator.clipboard.readText()}catch(e){i({kind:"error",message:"Allow clipboard access."});return}let t=(a||"").trim();if((t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))&&(t=t.slice(1,-1)),t.startsWith("file://"))try{t=decodeURI(t.slice(7))}catch(e){}return t?t.startsWith("/")||t.startsWith("~")?void(l(t),i({kind:"success",message:"Pasted."})):void i({kind:"error",message:"Path must be absolute."}):void i({kind:"error",message:"Clipboard is empty."})}async function v(){i(null),x("pick");try{let e=await fetch("/api/fs/pick-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:"Choose project folder",start_path:t&&t.startsWith("/")?t:void 0})});if(499===e.status)return void i({kind:"error",message:"Cancelled."});let a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Picker failed."});l(a.folder_path),i({kind:"success",message:"Selected ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}async function b(){if(i(null),!m.trim()||!p.trim())return void i({kind:"error",message:"Parent and name required."});x("create");try{let e=await fetch("/api/fs/create-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({parent:m.trim(),name:p.trim()})}),a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Create failed."});l(a.folder_path),u(!1),f(""),i({kind:"success",message:"Created ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}return n.useEffect(()=>{d&&!m&&h(t||"~/Documents")},[d,t,m]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"agents-modal-paste-row",children:[(0,s.jsx)("input",{ref:r,name:a,type:"text",placeholder:o,autoComplete:"off",spellCheck:!1,value:t||"",onChange:e=>{l(e.target.value),c&&i(null)},required:!0}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:v,disabled:"pick"===j,children:"pick"===j?"Opening…":"Choose folder…"})]}),(0,s.jsxs)("div",{className:"agents-modal-folder-tools",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:g,children:"Paste from clipboard"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Documents"),children:"~/Documents"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Desktop"),children:"~/Desktop"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(e=>!e),children:d?"Cancel new folder":"+ New folder"})]}),d?(0,s.jsxs)("div",{className:"agents-modal-create-folder",children:[(0,s.jsx)("small",{children:"Create a folder anywhere outside system directories. Parent must exist."}),(0,s.jsx)("div",{className:"agents-modal-create-row",children:(0,s.jsx)("input",{type:"text",placeholder:"Parent (e.g. ~/Documents)",value:m,onChange:e=>h(e.target.value),spellCheck:!1,autoComplete:"off"})}),(0,s.jsxs)("div",{className:"agents-modal-create-row",children:[(0,s.jsx)("input",{type:"text",placeholder:"New folder name",value:p,onChange:e=>f(e.target.value),spellCheck:!1,autoComplete:"off"}),(0,s.jsx)("button",{type:"button",className:"admin-button",onClick:b,disabled:"create"===j,children:"create"===j?"Creating…":"Create"})]})]}):null,c?(0,s.jsx)("p",{className:"agents-modal-feedback ".concat(c.kind),role:"status","aria-live":"polite",children:c.message}):null]})}}},e=>{e.O(0,[2619,8441,1255,7358],()=>e(e.s=6787)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (()=>{"use strict";var e={},t={};function r(o){var a=t[o];if(void 0!==a)return a.exports;var n=t[o]={exports:{}},c=!0;try{e[o].call(n.exports,n,n.exports,r),c=!1}finally{c&&delete t[o]}return n.exports}r.m=e,(()=>{var e=[];r.O=(t,o,a,n)=>{if(o){n=n||0;for(var c=e.length;c>0&&e[c-1][2]>n;c--)e[c]=e[c-1];e[c]=[o,a,n];return}for(var i=1/0,c=0;c<e.length;c++){for(var[o,a,n]=e[c],d=!0,u=0;u<o.length;u++)(!1&n||i>=n)&&Object.keys(r.O).every(e=>r.O[e](o[u]))?o.splice(u--,1):(d=!1,n<i&&(i=n));if(d){e.splice(c--,1);var s=a();void 0!==s&&(t=s)}}return t}})(),r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(o,a){if(1&a&&(o=this(o)),8&a||"object"==typeof o&&o&&(4&a&&o.__esModule||16&a&&"function"==typeof o.then))return o;var n=Object.create(null);r.r(n);var c={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&o;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach(e=>c[e]=()=>o[e]);return c.default=()=>o,r.d(n,c),n}})(),r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>2769===e?"static/chunks/2769-5ea87fab731b4c4d.js":4119===e?"static/chunks/4119-5297b212ff79d264.js":930===e?"static/chunks/930-de78056b2dc197a2.js":"static/chunks/"+(5730===e?"44530001":e)+"."+({840:"c27c21f4787aea90",1517:"be5e2c446b38c681",2713:"4f4ae8af4e5bf2ee",3168:"3b5e35036a18bdd3",4797:"5d0d513a724ca684",5730:"ef2edd53e6cfdfa8",5938:"238480f58c343b6b",7130:"5de172d005b1e866",8217:"93f3920e3c35c748",9863:"8c29a80e7d210e46",9867:"fc6d7dc10dd6c262"})[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(o,a,n,c)=>{if(e[o])return void e[o].push(a);if(void 0!==n)for(var i,d,u=document.getElementsByTagName("script"),s=0;s<u.length;s++){var l=u[s];if(l.getAttribute("src")==o||l.getAttribute("data-webpack")==t+n){i=l;break}}i||(d=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,r.nc&&i.setAttribute("nonce",r.nc),i.setAttribute("data-webpack",t+n),i.src=r.tu(o)),e[o]=[a];var f=(t,r)=>{i.onerror=i.onload=null,clearTimeout(b);var a=e[o];if(delete e[o],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(r)),t)return t(r)},b=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),d&&document.head.appendChild(i)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={8068:0,3045:0,1741:0,8422:0,1776:0};r.f.j=(t,o)=>{var a=r.o(e,t)?e[t]:void 0;if(0!==a)if(a)o.push(a[2]);else if(/^(17(41|76)|3045|8068|8422)$/.test(t))e[t]=0;else{var n=new Promise((r,o)=>a=e[t]=[r,o]);o.push(a[2]=n);var c=r.p+r.u(t),i=Error();r.l(c,o=>{if(r.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var n=o&&("load"===o.type?"missing":o.type),c=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+n+": "+c+")",i.name="ChunkLoadError",i.type=n,i.request=c,a[1](i)}},"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var a,n,[c,i,d]=o,u=0;if(c.some(t=>0!==e[t])){for(a in i)r.o(i,a)&&(r.m[a]=i[a]);if(d)var s=d(r)}for(t&&t(o);u<c.length;u++)n=c[u],r.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return r.O(s)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})(),r.nc=void 0})();
1
+ (()=>{"use strict";var e={},t={};function r(o){var a=t[o];if(void 0!==a)return a.exports;var n=t[o]={exports:{}},c=!0;try{e[o].call(n.exports,n,n.exports,r),c=!1}finally{c&&delete t[o]}return n.exports}r.m=e,(()=>{var e=[];r.O=(t,o,a,n)=>{if(o){n=n||0;for(var c=e.length;c>0&&e[c-1][2]>n;c--)e[c]=e[c-1];e[c]=[o,a,n];return}for(var i=1/0,c=0;c<e.length;c++){for(var[o,a,n]=e[c],d=!0,u=0;u<o.length;u++)(!1&n||i>=n)&&Object.keys(r.O).every(e=>r.O[e](o[u]))?o.splice(u--,1):(d=!1,n<i&&(i=n));if(d){e.splice(c--,1);var s=a();void 0!==s&&(t=s)}}return t}})(),r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(o,a){if(1&a&&(o=this(o)),8&a||"object"==typeof o&&o&&(4&a&&o.__esModule||16&a&&"function"==typeof o.then))return o;var n=Object.create(null);r.r(n);var c={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&o;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach(e=>c[e]=()=>o[e]);return c.default=()=>o,r.d(n,c),n}})(),r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>2769===e?"static/chunks/2769-5ea87fab731b4c4d.js":4119===e?"static/chunks/4119-5297b212ff79d264.js":930===e?"static/chunks/930-de78056b2dc197a2.js":"static/chunks/"+(5730===e?"44530001":e)+"."+({840:"c27c21f4787aea90",1517:"be5e2c446b38c681",2713:"4f4ae8af4e5bf2ee",3168:"3b5e35036a18bdd3",4797:"5d0d513a724ca684",5730:"ef2edd53e6cfdfa8",5938:"238480f58c343b6b",7130:"5de172d005b1e866",8217:"93f3920e3c35c748",9863:"8c29a80e7d210e46",9867:"fc6d7dc10dd6c262"})[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(o,a,n,c)=>{if(e[o])return void e[o].push(a);if(void 0!==n)for(var i,d,u=document.getElementsByTagName("script"),s=0;s<u.length;s++){var l=u[s];if(l.getAttribute("src")==o||l.getAttribute("data-webpack")==t+n){i=l;break}}i||(d=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,r.nc&&i.setAttribute("nonce",r.nc),i.setAttribute("data-webpack",t+n),i.src=r.tu(o)),e[o]=[a];var f=(t,r)=>{i.onerror=i.onload=null,clearTimeout(b);var a=e[o];if(delete e[o],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(r)),t)return t(r)},b=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),d&&document.head.appendChild(i)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={8068:0,3045:0,1741:0,1776:0,8422:0};r.f.j=(t,o)=>{var a=r.o(e,t)?e[t]:void 0;if(0!==a)if(a)o.push(a[2]);else if(/^(17(41|76)|3045|8068|8422)$/.test(t))e[t]=0;else{var n=new Promise((r,o)=>a=e[t]=[r,o]);o.push(a[2]=n);var c=r.p+r.u(t),i=Error();r.l(c,o=>{if(r.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var n=o&&("load"===o.type?"missing":o.type),c=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+n+": "+c+")",i.name="ChunkLoadError",i.type=n,i.request=c,a[1](i)}},"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var a,n,[c,i,d]=o,u=0;if(c.some(t=>0!==e[t])){for(a in i)r.o(i,a)&&(r.m[a]=i[a]);if(d)var s=d(r)}for(t&&t(o);u<c.length;u++)n=c[u],r.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return r.O(s)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})(),r.nc=void 0})();
@@ -234,7 +234,7 @@ export default function SmartSearch() {
234
234
 
235
235
  useEffect(() => {
236
236
  function onKeyDown(event) {
237
- const key = event.key.toLowerCase();
237
+ const key = (event.key || '').toLowerCase();
238
238
  const mod = event.metaKey || event.ctrlKey;
239
239
  const typing = isTypingTarget(event.target);
240
240
 
package/lib/auth.js CHANGED
@@ -256,6 +256,44 @@ export async function _claimEmailInvitesAtLogin(sbUser, accessToken) {
256
256
  }
257
257
  }
258
258
 
259
+ // Canonical membership ordering — mirrors the ORDER BY in _resolveOrgFromDb so
260
+ // the cloud-reconcile path and the local-table path pick the same primary org.
261
+ const _ROLE_RANK = { owner: 0, admin: 1, member: 2, viewer: 3 };
262
+
263
+ /**
264
+ * Picks the primary membership from a list, by highest privilege then org_id for
265
+ * a deterministic tiebreak. Returns null for an empty list.
266
+ */
267
+ export function _pickPrimaryMembership(memberships) {
268
+ if (!Array.isArray(memberships) || memberships.length === 0) return null;
269
+ return [...memberships].sort((a, b) => {
270
+ const ra = _ROLE_RANK[a.role] ?? 4;
271
+ const rb = _ROLE_RANK[b.role] ?? 4;
272
+ if (ra !== rb) return ra - rb;
273
+ return String(a.org_id).localeCompare(String(b.org_id));
274
+ })[0];
275
+ }
276
+
277
+ /**
278
+ * Mirrors the user's existing cloud org memberships into local SQLite at login.
279
+ * Thin wrapper over shared-cloud's mirror; returns the mirrored memberships
280
+ * (`[{ org_id, role }]`) so the caller can prefer a cloud-confirmed org over a
281
+ * local-only row. Never throws — the cloud is best-effort here, and getSession
282
+ * falls through to the local table / invite claim / bootstrap on an empty list.
283
+ */
284
+ export async function _mirrorCloudMembershipsAtLogin(sbUser, accessToken) {
285
+ try {
286
+ const { mirrorCloudMembershipsForUser } = await import('./shared-cloud.js');
287
+ return await mirrorCloudMembershipsForUser({
288
+ user_id: sbUser.id,
289
+ supabase_access_token: accessToken,
290
+ });
291
+ } catch (err) {
292
+ console.warn('[auth] cloud membership mirror failed:', err.message);
293
+ return [];
294
+ }
295
+ }
296
+
259
297
  // ── Upsert a user row in the SQLite cache (Supabase sign-in) ─────────────────
260
298
 
261
299
  function _upsertUserRow(sbUser) {
@@ -334,6 +372,30 @@ export async function getSession(req) {
334
372
  // Resolve org membership from SQLite.
335
373
  let membership = _resolveOrgFromDb(user.id);
336
374
 
375
+ // Cloud reconcile. In supabase mode the cloud `org_memberships` table is
376
+ // authoritative, so we mirror the user's EXISTING cloud memberships down and
377
+ // prefer a cloud-confirmed org over any local-only row.
378
+ //
379
+ // • Admin/owner instance (service-role key present): reconcile on EVERY login.
380
+ // This SELF-HEALS a locally-bootstrapped "phantom" org — one created by
381
+ // `_bootstrapFirstOrg` during a fresh install or a transient cloud blip,
382
+ // which has no cloud row and would otherwise make `requireFreshMembership`
383
+ // lock the user out with `membership_revoked` forever (the phantom local
384
+ // row stops the lazy mirror from ever re-running).
385
+ // • Member instance (no service key) / cloud unreachable: stay lazy — only
386
+ // reconcile when there is no local membership yet, to avoid an extra cloud
387
+ // round-trip on every login (members get memberships via invite claim).
388
+ const cloudFirst = Boolean(getSupabaseServiceKey());
389
+ if (cloudFirst || !membership) {
390
+ const cloudMemberships = await _mirrorCloudMembershipsAtLogin(user, accessToken);
391
+ if (cloudMemberships.length) {
392
+ // Prefer the cloud-confirmed membership over the (possibly phantom) local
393
+ // row. The phantom row is left in place but is never selected, so the
394
+ // session org always matches what the live-check validates against.
395
+ membership = _pickPrimaryMembership(cloudMemberships) || membership;
396
+ }
397
+ }
398
+
337
399
  // Phase 2 — claim a pending email pre-invite into the INVITING org before the
338
400
  // fresh-install bootstrap. An invited member must land in the org they were
339
401
  // invited to, not get bootstrapped into a brand-new personal org.
package/lib/cli/run.js CHANGED
@@ -71,6 +71,11 @@ function spawnWeb(layout) {
71
71
  PORT,
72
72
  HOSTNAME: HOST, // Next standalone server reads HOSTNAME/PORT
73
73
  MADARX_HOME: layout.home,
74
+ // The web bundle's import.meta.url is baked at build time, so lib modules
75
+ // pulled into the bundle compute a wrong package ROOT (the CI builder's
76
+ // path). Pass the real install dir so runtime spawns (hermes job runner,
77
+ // browser harness) can resolve an existing cwd + sibling scripts.
78
+ MADARX_PKG_ROOT: PKG_ROOT,
74
79
  ...(pkgVersion() ? { MADARX_VERSION: pkgVersion() } : {}),
75
80
  },
76
81
  });
@@ -2,7 +2,7 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { spawn } from 'node:child_process';
4
4
  import { getDb, newId, nowIso } from './db.js';
5
- import { ARTIFACTS_DIR, ROOT, WORKSPACE, ensureDirs, relToRoot } from './paths.js';
5
+ import { ARTIFACTS_DIR, ROOT, PKG_ROOT, WORKSPACE, ensureDirs, relToRoot, pickExistingDir } from './paths.js';
6
6
  import { ensureArtifactDir } from './artifact-paths.js';
7
7
  import { DEFAULT_PROJECT_ID } from './projects.js';
8
8
  import { appendAudit, recordArtifact, recordRun, updateRun } from './runtime.js';
@@ -240,8 +240,13 @@ export function createHermesJob({ prompt, title, cwd, session_id, model, timeout
240
240
  }
241
241
 
242
242
  export function startHermesJobWorker(jobId) {
243
- const child = spawn(process.execPath, ['scripts/hermes-job-runner.mjs', '--job-id', jobId], {
244
- cwd: ROOT,
243
+ // PKG_ROOT is the real install dir at runtime (MADARX_PKG_ROOT). ROOT is the
244
+ // build-time-baked path and is wrong in the packaged web bundle. Resolve the
245
+ // runner script absolutely against PKG_ROOT so it is found regardless of cwd,
246
+ // and spawn from a cwd that actually exists.
247
+ const runnerScript = path.join(PKG_ROOT, 'scripts', 'hermes-job-runner.mjs');
248
+ const child = spawn(process.execPath, [runnerScript, '--job-id', jobId], {
249
+ cwd: pickExistingDir(PKG_ROOT, WORKSPACE),
245
250
  env: process.env,
246
251
  stdio: 'ignore',
247
252
  detached: true,
package/lib/paths.js CHANGED
@@ -6,6 +6,27 @@ import { fileURLToPath } from 'node:url';
6
6
  const here = path.dirname(fileURLToPath(import.meta.url));
7
7
  export const ROOT = path.resolve(here, '..');
8
8
 
9
+ // Runtime package root. ROOT is derived from import.meta.url, which Next.js
10
+ // bakes at BUILD time — for any lib module pulled into the standalone web
11
+ // bundle that resolves to the CI builder's path (/home/runner/work/...),
12
+ // which does not exist on the user's machine. Using it as a spawn `cwd` (or to
13
+ // locate a sibling script) fails with `spawn <cmd> ENOENT`. The `madarx` CLI
14
+ // knows the real install dir and exports it as MADARX_PKG_ROOT when it spawns
15
+ // the web server — prefer that. Fall back to the baked ROOT, which is correct
16
+ // in dev (`next dev` bakes the local path) and for non-bundled callers.
17
+ export const PKG_ROOT = process.env.MADARX_PKG_ROOT
18
+ ? path.resolve(process.env.MADARX_PKG_ROOT)
19
+ : ROOT;
20
+
21
+ // First candidate that exists and is a directory, else process.cwd(). Use to
22
+ // pick a spawn `cwd` that is guaranteed to exist at runtime.
23
+ export function pickExistingDir(...candidates) {
24
+ for (const dir of candidates) {
25
+ try { if (dir && fs.statSync(dir).isDirectory()) return dir; } catch { /* next */ }
26
+ }
27
+ return process.cwd();
28
+ }
29
+
9
30
  // ---------------------------------------------------------------------------
10
31
  // Data + workspace location resolution.
11
32
  //
@@ -1252,6 +1252,94 @@ export async function redeemInviteViaCloud(token, session, options = {}) {
1252
1252
  return { org_id: row.org_id, role };
1253
1253
  }
1254
1254
 
1255
+ /**
1256
+ * Mirrors the signed-in user's EXISTING cloud org memberships into local SQLite.
1257
+ *
1258
+ * Runs at login BEFORE the local first-org bootstrap. In supabase mode the cloud
1259
+ * `org_memberships` table is authoritative for who belongs to which org. A fresh
1260
+ * local install (a new $MADARX_HOME, a wiped data dir, a second machine) has no
1261
+ * local membership rows, which would otherwise drive `_bootstrapFirstOrg` to
1262
+ * invent a brand-new phantom org. That phantom org has no cloud row, so the first
1263
+ * `requireFreshMembership` live-check returns 0 rows and locks the user out with
1264
+ * `membership_revoked`. Mirroring the real cloud memberships down first keeps the
1265
+ * local session org in agreement with the cloud the live-check validates against.
1266
+ *
1267
+ * Prefers the service-role admin client (owner/server). Falls back to the
1268
+ * member's own JWT — RLS lets a member SELECT their own membership rows — so a
1269
+ * member machine without the service key still reconciles. Returns [] and never
1270
+ * throws when the cloud is unconfigured/unreachable, so getSession can fall back
1271
+ * to the local table / invite claim / bootstrap.
1272
+ *
1273
+ * NOTE: additive only. Like `_ensureLocalOrgMembership`, this inserts missing
1274
+ * local rows; it never deletes a local membership the cloud no longer has. That
1275
+ * keeps the mirror safe to run on every no-local-membership login. Revocation of
1276
+ * an existing membership is handled separately by `requireFreshMembership`.
1277
+ *
1278
+ * @param {object} session Must carry user_id; supabase_access_token for the member path.
1279
+ * @returns {Promise<Array<{ org_id, role }>>}
1280
+ */
1281
+ export async function mirrorCloudMembershipsForUser(session, options = {}) {
1282
+ assertServerOnly();
1283
+ const userId = session?.user_id;
1284
+ if (!userId) return [];
1285
+
1286
+ const accessToken = session?.supabase_access_token || null;
1287
+ const kind = selectCloudClientKind({
1288
+ serviceReady: isSharedCloudReady(options),
1289
+ userReady: isSharedCloudUserReady(options),
1290
+ accessToken,
1291
+ });
1292
+ if (!kind) return [];
1293
+
1294
+ let client;
1295
+ try {
1296
+ client = kind === 'admin'
1297
+ ? getSharedCloudAdmin(options)
1298
+ : getSharedCloudUserClient(accessToken, options);
1299
+ } catch {
1300
+ return [];
1301
+ }
1302
+
1303
+ let rows;
1304
+ try {
1305
+ rows = await client.select('org_memberships', {
1306
+ filters: { user_id: userId },
1307
+ select: 'org_id,role',
1308
+ limit: 100,
1309
+ });
1310
+ } catch {
1311
+ return []; // table absent / project not migrated / network — caller falls back.
1312
+ }
1313
+ if (!Array.isArray(rows) || rows.length === 0) return [];
1314
+
1315
+ // Resolve org names so the mirrored local `organizations` row isn't an opaque
1316
+ // id. Best-effort: on failure we fall back to the id as the local name.
1317
+ const orgIds = [...new Set(rows.map((r) => r.org_id).filter(Boolean))];
1318
+ const nameById = new Map();
1319
+ try {
1320
+ if (orgIds.length) {
1321
+ const orgRows = await client.select('organizations', {
1322
+ filters: { id: `in.(${orgIds.join(',')})` },
1323
+ select: 'id,name',
1324
+ limit: 1000,
1325
+ });
1326
+ for (const o of Array.isArray(orgRows) ? orgRows : []) {
1327
+ if (o.id) nameById.set(o.id, o.name);
1328
+ }
1329
+ }
1330
+ } catch {
1331
+ /* name lookup is best-effort */
1332
+ }
1333
+
1334
+ const out = [];
1335
+ for (const r of rows) {
1336
+ if (!r.org_id) continue;
1337
+ _ensureLocalOrgMembership(r.org_id, userId, r.role, nameById.get(r.org_id));
1338
+ out.push({ org_id: r.org_id, role: r.role });
1339
+ }
1340
+ return out;
1341
+ }
1342
+
1255
1343
  // ════════════════════════════════════════════════════════════════════════════
1256
1344
  // SPACE / PROJECT ACL — per-principal access grants
1257
1345
  //
@@ -1,5 +1,5 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { ROOT } from '../../paths.js';
2
+ import { PKG_ROOT, WORKSPACE, pickExistingDir } from '../../paths.js';
3
3
  import { redactToolOutput } from '../safety.js';
4
4
 
5
5
  const DEFAULT_TIMEOUT_MS = 120000;
@@ -77,7 +77,11 @@ export async function browserHarnessRun(input = {}) {
77
77
  let settled = false;
78
78
  let killTimer = null;
79
79
  const child = spawn(command, [], {
80
- cwd: ROOT,
80
+ // The harness reads its script from stdin, so cwd only needs to exist.
81
+ // ROOT is the build-time-baked path (absent in packaged installs) and
82
+ // made spawn throw ENOENT before the binary even resolved. Use a dir that
83
+ // exists at runtime.
84
+ cwd: pickExistingDir(PKG_ROOT, WORKSPACE),
81
85
  shell: false,
82
86
  detached: process.platform !== 'win32',
83
87
  stdio: ['pipe', 'pipe', 'pipe'],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "madarx",
3
- "version": "2.9.11",
3
+ "version": "2.9.13",
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",