madarx 2.14.0 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +579 -579
  3. package/.next/standalone/.next/app-path-routes-manifest.json +77 -77
  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/react-loadable-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  9. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  10. package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/admin/page.js +3 -3
  12. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/agents/[id]/page.js +3 -3
  14. package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/agents/page.js +1 -1
  16. package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/orchestrator/upload/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/orgs/join-complete/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/whatsapp/disconnect/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/approvals/page.js +2 -2
  194. package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/architecture.html +2 -2
  197. package/.next/standalone/.next/server/app/architecture.rsc +2 -2
  198. package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/brand.html +1 -1
  202. package/.next/standalone/.next/server/app/brand.rsc +2 -2
  203. package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/federated-ai.html +2 -2
  206. package/.next/standalone/.next/server/app/federated-ai.rsc +2 -2
  207. package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
  209. package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/hail/[id]/page.js +2 -2
  211. package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +1 -1
  213. package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
  214. package/.next/standalone/.next/server/app/hail/page.js +2 -2
  215. package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
  217. package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/index.html +2 -2
  219. package/.next/standalone/.next/server/app/index.rsc +2 -2
  220. package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/join.html +1 -1
  222. package/.next/standalone/.next/server/app/join.rsc +2 -2
  223. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/marketplace/page.js +2 -2
  225. package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/missions/page.js +1 -1
  230. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  234. package/.next/standalone/.next/server/app/onboarding.rsc +2 -2
  235. package/.next/standalone/.next/server/app/org/page.js +1 -1
  236. package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
  237. package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
  238. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
  242. package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/projects/new.html +1 -1
  244. package/.next/standalone/.next/server/app/projects/new.rsc +3 -3
  245. package/.next/standalone/.next/server/app/projects/page.js +19 -19
  246. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
  250. package/.next/standalone/.next/server/app/schedules/page.js +2 -2
  251. package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
  253. package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
  256. package/.next/standalone/.next/server/app/settings/brand.html +2 -2
  257. package/.next/standalone/.next/server/app/settings/brand.rsc +2 -2
  258. package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
  262. package/.next/standalone/.next/server/app/settings/onboarding.rsc +2 -2
  263. package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
  264. package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/settings.html +2 -2
  271. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  272. package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/app/tasks/[id]/page.js +1 -1
  275. package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/tasks/page.js +2 -2
  277. package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/whatsapp/page.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_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  289. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app-paths-manifest.json +77 -77
  291. package/.next/standalone/.next/server/chunks/1699.js +18 -18
  292. package/.next/standalone/.next/server/chunks/51.js +1 -0
  293. package/.next/standalone/.next/server/functions-config-manifest.json +24 -24
  294. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  295. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  296. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  297. package/.next/standalone/.next/server/pages/404.html +1 -1
  298. package/.next/standalone/.next/server/pages/500.html +1 -1
  299. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  300. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  301. package/.next/standalone/.next/static/chunks/4119-cfb6260557a0a3d2.js +1 -0
  302. package/.next/standalone/.next/static/chunks/app/projects/page-f136822590202f9f.js +1 -0
  303. package/.next/standalone/.next/static/chunks/{webpack-86ee88827adb756d.js → webpack-f916d679fe38a701.js} +1 -1
  304. package/.next/standalone/.next/static/css/0bd4c357d4f0c4f2.css +1 -0
  305. package/.next/standalone/CHANGELOG.md +12 -0
  306. package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
  307. package/.next/standalone/data/.default-project-seeded +1 -1
  308. package/.next/standalone/data/madarx.sqlite +0 -0
  309. package/.next/standalone/data/madarx.sqlite-shm +0 -0
  310. package/.next/standalone/data/madarx.sqlite-wal +0 -0
  311. package/.next/standalone/package.json +2 -2
  312. package/.next/static/chunks/4119-cfb6260557a0a3d2.js +1 -0
  313. package/.next/static/chunks/app/projects/page-f136822590202f9f.js +1 -0
  314. package/.next/static/chunks/{webpack-86ee88827adb756d.js → webpack-f916d679fe38a701.js} +1 -1
  315. package/.next/static/css/0bd4c357d4f0c4f2.css +1 -0
  316. package/CHANGELOG.md +12 -0
  317. package/app/components/dashboard/whatsapp-section.jsx +54 -13
  318. package/lib/cli/prompt.js +110 -0
  319. package/lib/cli/setup.js +152 -87
  320. package/lib/runtime.js +8 -2
  321. package/package.json +2 -2
  322. package/scripts/whatsapp-reset.mjs +15 -0
  323. package/.next/standalone/.next/server/chunks/6474.js +0 -1
  324. package/.next/standalone/.next/static/chunks/4119-3b6adff3c7187ef3.js +0 -1
  325. package/.next/standalone/.next/static/chunks/app/projects/page-09e5c527e3ba83e2.js +0 -1
  326. package/.next/standalone/.next/static/css/0bfed9e12afa1dc1.css +0 -1
  327. package/.next/static/chunks/4119-3b6adff3c7187ef3.js +0 -1
  328. package/.next/static/chunks/app/projects/page-09e5c527e3ba83e2.js +0 -1
  329. package/.next/static/css/0bfed9e12afa1dc1.css +0 -1
  330. /package/.next/standalone/.next/static/{-LlttjOnKZXGqZXDKcj-4 → tMcPS9JR5cRXSe0u5ne95}/_buildManifest.js +0 -0
  331. /package/.next/standalone/.next/static/{-LlttjOnKZXGqZXDKcj-4 → tMcPS9JR5cRXSe0u5ne95}/_ssgManifest.js +0 -0
  332. /package/.next/static/{-LlttjOnKZXGqZXDKcj-4 → tMcPS9JR5cRXSe0u5ne95}/_buildManifest.js +0 -0
  333. /package/.next/static/{-LlttjOnKZXGqZXDKcj-4 → tMcPS9JR5cRXSe0u5ne95}/_ssgManifest.js +0 -0
@@ -2991,25 +2991,25 @@ HARD SAFETY RULES (non-negotiable — the package is rejected by the validator o
2991
2991
  INSERT OR IGNORE INTO mines_spatial_assets
2992
2992
  (id, project_id, kind, path, crs, bbox, file_size_bytes, indexed_at)
2993
2993
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
2994
- `).run((0,e.newId)("msa"),b.project_id,d.kind,b.original_path,d.crs,d.bbox?JSON.stringify(d.bbox):null,d.file_size_bytes,(0,e.nowIso)()),a.prepare("UPDATE mines_source_documents SET extraction_status = ?, updated_at = ? WHERE id = ?").run("complete",(0,e.nowIso)(),b.id),!!c}async function i(a,b={}){let c=(0,e.getDb)();if(a?.source_document_id){let b=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE id = ?").get(a.source_document_id);if(!b)return{status:"error",error:"source_document_not_found"};let d=h(c,b);return{status:"ok",assets_indexed:+!d,assets_skipped:+!!d}}let d=a?.project_id;if(!d)return{status:"error",error:"project_id_required"};let f=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE project_id = ?").all(d).filter(a=>j.has(String(a.file_type||"").toLowerCase())),g=0,k=0;for(let a of f)try{h(c,a)?k++:g++}catch{k++}return{status:"ok",assets_indexed:g,assets_skipped:k}}d()}catch(a){d(a)}})},59400:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{IY:()=>B,dV:()=>A,tE:()=>x,vC:()=>y});var e=c(77030),f=c(24516),g=c(58282),h=a([f,g]);function i(a){return String(process.env[a]||"").trim()}function j(a){try{let b=(0,f.getSecret)(a);if(b)return String(b).trim()}catch{}return i(a)}function k(a={}){let b=String(a.query||a.q||"").trim();if(!b)throw Error("query is required");return b}function l(a={}){return Math.min(Math.max(Number(a.count||5),1),10)}function m({title:a,url:b,snippet:c,source:d,rank:e=0,metadata:f={}}){return{rank:e+1,title:String(a||""),url:String(b||""),snippet:String(c||""),source:d,metadata:f}}async function n(a,b={},c=fetch){let d=await c(a,b);if(!d.ok){let a=d.statusText||String(d.status);try{let b=await d.text();b&&(a=`${a}: ${b.slice(0,200)}`)}catch{}throw Error(`Request failed: ${d.status} ${a}`.trim())}return d.json()}function o(a={},b=0){return m({rank:b,title:a.title,url:a.url,snippet:a.description||a.snippet,source:"brave",metadata:{age:a.age||null,family_friendly:a.family_friendly??null}})}function p(){let a={Accept:"application/json","Content-Type":"application/json"},b=j("FIRECRAWL_API_KEY");return b&&(a.Authorization=`Bearer ${b}`),a}function q(){return(j("FIRECRAWL_API_URL")||"https://api.firecrawl.dev").replace(/\/+$/g,"")}async function r(a={},b=fetch){let c=k(a),d=l(a),e=await n(`${q()}/v1/search`,{method:"POST",headers:p(),body:JSON.stringify({query:c,limit:d})},b);return{query:c,source:"firecrawl",results:(function(a={}){return Array.isArray(a.data)?a.data:Array.isArray(a.results)?a.results:Array.isArray(a.web)?a.web:Array.isArray(a.web?.results)?a.web.results:[]})(e).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url||a.link,snippet:a.description||a.snippet||a.content||a.markdown,source:"firecrawl",metadata:a.metadata||{}})).filter(a=>a.url)}}async function s(a={},b=fetch){let c=k(a),d=l(a),e=j("SEARXNG_URL");if(!e)throw Error("SEARXNG_URL not configured");let f=new URL("/search",e.replace(/\/+$/g,""));f.searchParams.set("q",c),f.searchParams.set("format","json"),(a.search_lang||a.language)&&f.searchParams.set("language",String(a.search_lang||a.language));let g=await n(f,{headers:{Accept:"application/json"}},b);return{query:c,source:"searxng",results:(g.results||[]).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url,snippet:a.content||a.snippet,source:"searxng",metadata:a.metadata||{}})).filter(a=>a.url)}}async function t(a={},b=fetch){let c=j("BRAVE_SEARCH_API_KEY");if(!c)throw Error("BRAVE_SEARCH_API_KEY not configured");let d=k(a),e=l(a),f=new URL("https://api.search.brave.com/res/v1/web/search");f.searchParams.set("q",d),f.searchParams.set("count",String(e)),a.country&&f.searchParams.set("country",String(a.country)),a.search_lang&&f.searchParams.set("search_lang",String(a.search_lang));let g=await n(f,{headers:{Accept:"application/json","X-Subscription-Token":c}},b),h=(g.web?.results||[]).slice(0,e).map(o);return{query:d,source:"brave",results:h}}function u(a=""){return String(a).replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&#x27;/g,"'")}function v(a=""){return u(String(a).replace(/<[^>]+>/g," ")).replace(/\s+/g," ").trim()}async function w(a={},b=fetch){let c=k(a),d=l(a),e=new URL("https://lite.duckduckgo.com/lite/");e.searchParams.set("q",c);let f=await b(e,{headers:{Accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"}});if(!f.ok)throw Error(`DuckDuckGo Lite search failed: ${f.status}`);let g=await f.text();return{query:c,source:"fetch",results:function(a="",b=5){let c=[...String(a).matchAll(/<a\b[^>]*href=["'][^"']+["'][^>]*>[\s\S]*?<\/a>/gi)],d=[...String(a).matchAll(/<td\b[^>]*class=["'][^"']*result-snippet[^"']*["'][^>]*>([\s\S]*?)<\/td>/gi)].map(a=>v(a[1])),e=[];for(let a of c){let c=a[0].match(/<a\b[^>]*>/i)?.[0]||"",f=v(a[0]),g=function(a=""){try{let b=new URL(a,"https://lite.duckduckgo.com"),c=b.searchParams.get("uddg");if(c)return c;if(["http:","https:"].includes(b.protocol))return b.toString()}catch{}return a}(function(a,b){let c=a.match(RegExp(`${b}\\s*=\\s*["']([^"']+)["']`,"i"));return c?u(c[1]):""}(c,"href"));if(f&&/^https?:\/\//i.test(g)&&(e.push(m({rank:e.length,title:f,url:g,snippet:d[e.length]||"",source:"duckduckgo_lite",metadata:{}})),e.length>=b))break}return e}(g,d)}}async function x(a={},b={}){let c=b.agent_id??null,d=function(){let a=i("MADARX_WEB_PROVIDER").toLowerCase();if(a){if(["firecrawl","searxng","brave","fetch"].includes(a))return a;throw Error(`Unsupported MADARX_WEB_PROVIDER: ${a}`)}return j("FIRECRAWL_API_URL")||j("FIRECRAWL_API_KEY")?"firecrawl":j("SEARXNG_URL")?"searxng":j("BRAVE_SEARCH_API_KEY")?"brave":"fetch"}();return"firecrawl"===d?r(a,(0,g.N)("web_search",c)):"searxng"===d?s(a,(0,g.N)("web_search",c)):"brave"===d?t(a,(0,g.N)("web_search",c)):w(a,(0,g.N)("web_search",c))}function y(a){let b;try{b=new URL(String(a||""))}catch{throw Error("url must be a valid URL")}if(!["http:","https:"].includes(b.protocol))throw Error("Only http and https URLs are supported");let c=b.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(!c)throw Error("URL host is required");if("localhost"===c||c.endsWith(".localhost")||c.endsWith(".local"))throw Error("Local/private network URLs are blocked");let d=e.isIP(c);if(4===d&&function(a){let b=a.split(".").map(Number);if(4!==b.length||b.some(a=>!Number.isInteger(a)||a<0||a>255))return!1;let[c,d]=b;return 10===c||127===c||169===c&&254===d||172===c&&d>=16&&d<=31||192===c&&168===d||0===c}(c)||6===d&&function(a){let b=a.toLowerCase();return"::1"===b||b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80:")||"::"===b||b.startsWith("0:")}(c))throw Error("Local/private network URLs are blocked");return b}function z(a){return String(a||"").replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi," ").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi," ").replace(/<noscript\b[^>]*>[\s\S]*?<\/noscript>/gi," ").replace(/<!--[\s\S]*?-->/g," ").replace(/<\/(p|div|section|article|header|footer|main|li|h[1-6]|tr)>/gi,"\n").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").replace(/[ \t]{2,}/g," ").trim()}async function A(a={},b={}){let c=b.agent_id??null,d=(0,g.N)("web_fetch",c),e=y(a.url),f=Math.min(Math.max(Number(a.max_bytes||512e3),1024),512e3),h=await d(e,{headers:{Accept:"text/html,text/plain,application/xhtml+xml,application/json;q=0.8,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"},redirect:"follow"});if(!h.ok)throw Error(`Fetch failed: ${h.status}`);let i=Number(h.headers.get("content-length")||0);if(i&&i>f)throw Error(`Response too large: ${i} bytes`);let j=h.body?.getReader();if(!j){let a=await h.text();if(Buffer.byteLength(a,"utf8")>f)throw Error("Response too large");return{url:e.toString(),status:h.status,content_type:h.headers.get("content-type")||"",text:z(a)}}let k=[],l=0;for(;;){let{value:a,done:b}=await j.read();if(b)break;if((l+=a.byteLength)>f)throw Error("Response too large");k.push(a)}let m=Buffer.concat(k).toString("utf8"),n=h.headers.get("content-type")||"";return{url:h.url||e.toString(),status:h.status,content_type:n,text:z(m).slice(0,Math.min(f,12e4)),source:{url:h.url||e.toString(),fetched_at:new Date().toISOString()}}}async function B(a={},b={}){let c=b.agent_id??null,d=y(a.url);if(!j("FIRECRAWL_API_URL")&&!j("FIRECRAWL_API_KEY"))return A(a,b);let e=await n(`${q()}/v1/scrape`,{method:"POST",headers:p(),body:JSON.stringify({url:d.toString(),formats:["markdown"]})},(0,g.N)("web_extract",c)),f=e.data||e,h=String(f.markdown||f.content||f.text||"");return{url:d.toString(),status:200,content_type:"text/markdown",text:h.slice(0,12e4),metadata:f.metadata||{},source:{provider:"firecrawl",url:d.toString(),fetched_at:new Date().toISOString()}}}[f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},60105:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$S:()=>ar,AD:()=>av,CM:()=>Z,Ck:()=>L,Dg:()=>function a({title:b,kind:c="html",content:d,project_id:k=null,agent_id:l=null,space_id:n=null,heartbeat_task_id:o=null,dedupe_key:p=null}){(0,i.Jh)();let r=k||q.Sk,s=(0,q.hF)({status:"all"}).find(a=>a.id===r||a.slug===r),t=s?s.id:q.Sk,u=(0,j.Kg)(t),v=(b||"artifact").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"artifact",x=l||"main-orchestrator",y=""===p?null:p||function({agent_id:a,title:b,project_id:c}){let d=new Date().toISOString().slice(0,10),e=String(b||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");return g.createHash("sha256").update([a||"main-orchestrator",c||q.Sk,e,d].join("|")).digest("hex").slice(0,32)}({agent_id:x,title:b,project_id:t}),z=function({heartbeat_task_id:a,dedupe_key:b,project_id:c}){if(!a&&!b)return null;let d=(0,h.getDb)(),e=c||q.Sk;if(a){let b=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE heartbeat_task_id = ? LIMIT 1").get(String(a));if(b)return b}if(b){let a=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE dedupe_key = ? AND project_id = ? LIMIT 1").get(String(b),e);if(a)return a}return null}({heartbeat_task_id:o,dedupe_key:y,project_id:t});if(z)return{artifact_id:z.id,file_path:z.path,title:z.title||b,kind:z.kind||c,deduped:!0};let A=s&&s.org_id?s.org_id:"personal-org",B=(0,w.Pf)();function C(a,b){return B?(e.writeFileSync(a,(0,w.A5)(A,b)),{encrypted:1,encryption_key_id:A}):(e.writeFileSync(a,b,"utf8"),{encrypted:0,encryption_key_id:null})}let D="main-orchestrator"===x?"madarX Main Agent":(a=>{try{let b=a.prepare("SELECT name FROM agents WHERE id = ?").get(x);return b?.name||x}catch{return x}})((0,h.getDb)());if("markdown"===c||"text"===c){let a=(0,m.vr)(d||""),c=(0,m.j7)({title:b,markdown:a}),e=f.join(u,`${v}-${Date.now().toString(36)}.md`),{encrypted:g,encryption_key_id:h}=C(e,a),j=(0,i.z9)(e),k=V({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:x,artifact:j,preview:a.slice(0,200),triggered_by:"claude",status:"complete"}),l=W({run_id:k.id,agent_id:x,file_path:j,kind:"document",title:b,content:c,source_md:a,project_id:t,encrypted:g,encryption_key_id:h,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:x,run_id:k.id,title:`Created artifact: ${b}`,summary:`New document "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:l,kind:"document",folder_id:null}})}catch{}return{artifact_id:l,file_path:j,title:b,kind:"document"}}if("html"===c){let c=(d||"").trimStart().slice(0,200).toLowerCase();if(!(c.startsWith("<!doctype")||c.startsWith("<html")||c.includes("<body")))return a({title:b,kind:"markdown",content:d,project_id:k,agent_id:l,space_id:n,heartbeat_task_id:o,dedupe_key:p})}let E=(d||"").trimStart().slice(0,200).toLowerCase(),F=E.startsWith("<!doctype")||E.startsWith("<html")||E.includes("<body"),G="html"===c||F?(0,m.vr)(d||""):d||"",H=f.join(u,`${v}-${Date.now().toString(36)}.${"html"===c||F?"html":"txt"}`),{encrypted:I,encryption_key_id:J}=C(H,G),K=(0,i.z9)(H),L=V({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:x,artifact:K,preview:G.slice(0,200),triggered_by:"claude",status:"complete"}),M=W({run_id:L.id,agent_id:x,file_path:K,kind:c,title:b,content:G,project_id:t,encrypted:I,encryption_key_id:J,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:x,run_id:L.id,title:`Created artifact: ${b}`,summary:`New ${c} artifact "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:M,kind:c,folder_id:null}})}catch{}return{artifact_id:M,file_path:K,title:b,kind:c}},Gu:()=>ak,IG:()=>ai,K2:()=>H,Mh:()=>O,NK:()=>ag,Nv:()=>ae,OH:()=>_,PF:()=>P,RB:()=>ab,RG:()=>M,S9:()=>$,Sn:()=>aa,UA:()=>aq,V1:()=>K,W1:()=>J,WU:()=>F,Xr:()=>I,YS:()=>an,_u:()=>Q,appendAudit:()=>U,bC:()=>ad,eP:()=>Y,fB:()=>ap,fk:()=>ao,jZ:()=>T,mk:()=>ah,mo:()=>as,n1:()=>S,nF:()=>aj,q:()=>at,recordArtifact:()=>W,recordRun:()=>V,v:()=>N,vc:()=>E,wn:()=>R,x4:()=>ac});var e=c(73024),f=c(76760),g=c(77598),h=c(34255),i=c(9381),j=c(73066),k=c(90712),l=c(14743),m=c(8727),n=c(40563),o=c(8437),p=c(72326),q=c(61423),r=c(83963),s=c(40718),t=c(60897),u=c(9001),v=c(81833),w=c(79133),x=a([h,j,l,m,n,o,p,q,r,s,u,v]);function y(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}function z(){return new Date().toISOString().slice(0,10)}function A(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function B(a){return a?{id:a.id,name:a.name,type:a.type,engine:(0,p.$k)(a.engine),model:a.model||(0,p.Qp)(a.engine),mission:a.mission,schedule:a.schedule,tools:A(a.tools,[]),status:a.status,approval:a.approval,generated:1===a.generated,files:A(a.files,[]),system_prompt:a.system_prompt||null,expected_output:a.expected_output||null,memory:A(a.memory,[]),created_at:a.created_at,last_heartbeat:a.last_heartbeat,last_run_at:a.last_run_at,next_run_at:a.next_run_at,reports_to:a.reports_to||null,role:a.role||null,title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||null,budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:A(a.permissions_json,{}),metadata_json:A(a.metadata_json,{}),project_id:a.project_id||null,template_slug:a.template_slug||null,default_space_id:a.default_space_id||null}:null}function C(a){return a?{id:a.id,agent_id:a.agent_id,agent_name:a.agent_name,schedule:a.schedule,action_kind:a.action_kind,enabled:1===a.enabled,next_run_at:a.next_run_at,last_run_at:a.last_run_at,delivery:a.delivery,approval:a.approval,last_queued_at:a.last_queued_at,last_queued_window:a.last_queued_window,updated_at:a.updated_at}:null}function D(a){return a?{...a}:null}function E(){return(0,h.getDb)().prepare("SELECT * FROM agents ORDER BY generated ASC, name ASC").all().map(B)}function F(a){let b=(0,h.getDb)();return B(b.prepare("SELECT * FROM agents WHERE id = ?").get(a))}function G(a){return a?{id:a.id,agent_id:a.agent_id,tool_name:a.tool_name,mode:a.mode,created_at:a.created_at,updated_at:a.updated_at}:null}function H(a){return(0,h.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? ORDER BY tool_name ASC").all(a).map(G)}function I(a,b,c="approval_required"){if(!a||!b)throw Error("agent_id and tool_name are required");if(!["auto","approval_required","disabled"].includes(c))throw Error(`Invalid tool permission mode: ${c}`);let d=(0,h.getDb)(),e=(0,h.nowIso)(),f=`perm-${a}-${b}`.replace(/[^a-zA-Z0-9_-]/g,"-");return d.prepare(`
2994
+ `).run((0,e.newId)("msa"),b.project_id,d.kind,b.original_path,d.crs,d.bbox?JSON.stringify(d.bbox):null,d.file_size_bytes,(0,e.nowIso)()),a.prepare("UPDATE mines_source_documents SET extraction_status = ?, updated_at = ? WHERE id = ?").run("complete",(0,e.nowIso)(),b.id),!!c}async function i(a,b={}){let c=(0,e.getDb)();if(a?.source_document_id){let b=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE id = ?").get(a.source_document_id);if(!b)return{status:"error",error:"source_document_not_found"};let d=h(c,b);return{status:"ok",assets_indexed:+!d,assets_skipped:+!!d}}let d=a?.project_id;if(!d)return{status:"error",error:"project_id_required"};let f=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE project_id = ?").all(d).filter(a=>j.has(String(a.file_type||"").toLowerCase())),g=0,k=0;for(let a of f)try{h(c,a)?k++:g++}catch{k++}return{status:"ok",assets_indexed:g,assets_skipped:k}}d()}catch(a){d(a)}})},59400:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{IY:()=>B,dV:()=>A,tE:()=>x,vC:()=>y});var e=c(77030),f=c(24516),g=c(58282),h=a([f,g]);function i(a){return String(process.env[a]||"").trim()}function j(a){try{let b=(0,f.getSecret)(a);if(b)return String(b).trim()}catch{}return i(a)}function k(a={}){let b=String(a.query||a.q||"").trim();if(!b)throw Error("query is required");return b}function l(a={}){return Math.min(Math.max(Number(a.count||5),1),10)}function m({title:a,url:b,snippet:c,source:d,rank:e=0,metadata:f={}}){return{rank:e+1,title:String(a||""),url:String(b||""),snippet:String(c||""),source:d,metadata:f}}async function n(a,b={},c=fetch){let d=await c(a,b);if(!d.ok){let a=d.statusText||String(d.status);try{let b=await d.text();b&&(a=`${a}: ${b.slice(0,200)}`)}catch{}throw Error(`Request failed: ${d.status} ${a}`.trim())}return d.json()}function o(a={},b=0){return m({rank:b,title:a.title,url:a.url,snippet:a.description||a.snippet,source:"brave",metadata:{age:a.age||null,family_friendly:a.family_friendly??null}})}function p(){let a={Accept:"application/json","Content-Type":"application/json"},b=j("FIRECRAWL_API_KEY");return b&&(a.Authorization=`Bearer ${b}`),a}function q(){return(j("FIRECRAWL_API_URL")||"https://api.firecrawl.dev").replace(/\/+$/g,"")}async function r(a={},b=fetch){let c=k(a),d=l(a),e=await n(`${q()}/v1/search`,{method:"POST",headers:p(),body:JSON.stringify({query:c,limit:d})},b);return{query:c,source:"firecrawl",results:(function(a={}){return Array.isArray(a.data)?a.data:Array.isArray(a.results)?a.results:Array.isArray(a.web)?a.web:Array.isArray(a.web?.results)?a.web.results:[]})(e).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url||a.link,snippet:a.description||a.snippet||a.content||a.markdown,source:"firecrawl",metadata:a.metadata||{}})).filter(a=>a.url)}}async function s(a={},b=fetch){let c=k(a),d=l(a),e=j("SEARXNG_URL");if(!e)throw Error("SEARXNG_URL not configured");let f=new URL("/search",e.replace(/\/+$/g,""));f.searchParams.set("q",c),f.searchParams.set("format","json"),(a.search_lang||a.language)&&f.searchParams.set("language",String(a.search_lang||a.language));let g=await n(f,{headers:{Accept:"application/json"}},b);return{query:c,source:"searxng",results:(g.results||[]).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url,snippet:a.content||a.snippet,source:"searxng",metadata:a.metadata||{}})).filter(a=>a.url)}}async function t(a={},b=fetch){let c=j("BRAVE_SEARCH_API_KEY");if(!c)throw Error("BRAVE_SEARCH_API_KEY not configured");let d=k(a),e=l(a),f=new URL("https://api.search.brave.com/res/v1/web/search");f.searchParams.set("q",d),f.searchParams.set("count",String(e)),a.country&&f.searchParams.set("country",String(a.country)),a.search_lang&&f.searchParams.set("search_lang",String(a.search_lang));let g=await n(f,{headers:{Accept:"application/json","X-Subscription-Token":c}},b),h=(g.web?.results||[]).slice(0,e).map(o);return{query:d,source:"brave",results:h}}function u(a=""){return String(a).replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&#x27;/g,"'")}function v(a=""){return u(String(a).replace(/<[^>]+>/g," ")).replace(/\s+/g," ").trim()}async function w(a={},b=fetch){let c=k(a),d=l(a),e=new URL("https://lite.duckduckgo.com/lite/");e.searchParams.set("q",c);let f=await b(e,{headers:{Accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"}});if(!f.ok)throw Error(`DuckDuckGo Lite search failed: ${f.status}`);let g=await f.text();return{query:c,source:"fetch",results:function(a="",b=5){let c=[...String(a).matchAll(/<a\b[^>]*href=["'][^"']+["'][^>]*>[\s\S]*?<\/a>/gi)],d=[...String(a).matchAll(/<td\b[^>]*class=["'][^"']*result-snippet[^"']*["'][^>]*>([\s\S]*?)<\/td>/gi)].map(a=>v(a[1])),e=[];for(let a of c){let c=a[0].match(/<a\b[^>]*>/i)?.[0]||"",f=v(a[0]),g=function(a=""){try{let b=new URL(a,"https://lite.duckduckgo.com"),c=b.searchParams.get("uddg");if(c)return c;if(["http:","https:"].includes(b.protocol))return b.toString()}catch{}return a}(function(a,b){let c=a.match(RegExp(`${b}\\s*=\\s*["']([^"']+)["']`,"i"));return c?u(c[1]):""}(c,"href"));if(f&&/^https?:\/\//i.test(g)&&(e.push(m({rank:e.length,title:f,url:g,snippet:d[e.length]||"",source:"duckduckgo_lite",metadata:{}})),e.length>=b))break}return e}(g,d)}}async function x(a={},b={}){let c=b.agent_id??null,d=function(){let a=i("MADARX_WEB_PROVIDER").toLowerCase();if(a){if(["firecrawl","searxng","brave","fetch"].includes(a))return a;throw Error(`Unsupported MADARX_WEB_PROVIDER: ${a}`)}return j("FIRECRAWL_API_URL")||j("FIRECRAWL_API_KEY")?"firecrawl":j("SEARXNG_URL")?"searxng":j("BRAVE_SEARCH_API_KEY")?"brave":"fetch"}();return"firecrawl"===d?r(a,(0,g.N)("web_search",c)):"searxng"===d?s(a,(0,g.N)("web_search",c)):"brave"===d?t(a,(0,g.N)("web_search",c)):w(a,(0,g.N)("web_search",c))}function y(a){let b;try{b=new URL(String(a||""))}catch{throw Error("url must be a valid URL")}if(!["http:","https:"].includes(b.protocol))throw Error("Only http and https URLs are supported");let c=b.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(!c)throw Error("URL host is required");if("localhost"===c||c.endsWith(".localhost")||c.endsWith(".local"))throw Error("Local/private network URLs are blocked");let d=e.isIP(c);if(4===d&&function(a){let b=a.split(".").map(Number);if(4!==b.length||b.some(a=>!Number.isInteger(a)||a<0||a>255))return!1;let[c,d]=b;return 10===c||127===c||169===c&&254===d||172===c&&d>=16&&d<=31||192===c&&168===d||0===c}(c)||6===d&&function(a){let b=a.toLowerCase();return"::1"===b||b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80:")||"::"===b||b.startsWith("0:")}(c))throw Error("Local/private network URLs are blocked");return b}function z(a){return String(a||"").replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi," ").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi," ").replace(/<noscript\b[^>]*>[\s\S]*?<\/noscript>/gi," ").replace(/<!--[\s\S]*?-->/g," ").replace(/<\/(p|div|section|article|header|footer|main|li|h[1-6]|tr)>/gi,"\n").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").replace(/[ \t]{2,}/g," ").trim()}async function A(a={},b={}){let c=b.agent_id??null,d=(0,g.N)("web_fetch",c),e=y(a.url),f=Math.min(Math.max(Number(a.max_bytes||512e3),1024),512e3),h=await d(e,{headers:{Accept:"text/html,text/plain,application/xhtml+xml,application/json;q=0.8,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"},redirect:"follow"});if(!h.ok)throw Error(`Fetch failed: ${h.status}`);let i=Number(h.headers.get("content-length")||0);if(i&&i>f)throw Error(`Response too large: ${i} bytes`);let j=h.body?.getReader();if(!j){let a=await h.text();if(Buffer.byteLength(a,"utf8")>f)throw Error("Response too large");return{url:e.toString(),status:h.status,content_type:h.headers.get("content-type")||"",text:z(a)}}let k=[],l=0;for(;;){let{value:a,done:b}=await j.read();if(b)break;if((l+=a.byteLength)>f)throw Error("Response too large");k.push(a)}let m=Buffer.concat(k).toString("utf8"),n=h.headers.get("content-type")||"";return{url:h.url||e.toString(),status:h.status,content_type:n,text:z(m).slice(0,Math.min(f,12e4)),source:{url:h.url||e.toString(),fetched_at:new Date().toISOString()}}}async function B(a={},b={}){let c=b.agent_id??null,d=y(a.url);if(!j("FIRECRAWL_API_URL")&&!j("FIRECRAWL_API_KEY"))return A(a,b);let e=await n(`${q()}/v1/scrape`,{method:"POST",headers:p(),body:JSON.stringify({url:d.toString(),formats:["markdown"]})},(0,g.N)("web_extract",c)),f=e.data||e,h=String(f.markdown||f.content||f.text||"");return{url:d.toString(),status:200,content_type:"text/markdown",text:h.slice(0,12e4),metadata:f.metadata||{},source:{provider:"firecrawl",url:d.toString(),fetched_at:new Date().toISOString()}}}[f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},60105:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$S:()=>as,AD:()=>aw,CM:()=>$,Ck:()=>M,Dg:()=>function a({title:b,kind:c="html",content:d,project_id:k=null,agent_id:l=null,space_id:n=null,heartbeat_task_id:o=null,dedupe_key:p=null}){(0,i.Jh)();let r=k||q.Sk,s=(0,q.hF)({status:"all"}).find(a=>a.id===r||a.slug===r),t=s?s.id:q.Sk,u=(0,j.Kg)(t),v=(b||"artifact").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"artifact",w=l||"main-orchestrator",y=""===p?null:p||function({agent_id:a,title:b,project_id:c}){let d=new Date().toISOString().slice(0,10),e=String(b||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");return g.createHash("sha256").update([a||"main-orchestrator",c||q.Sk,e,d].join("|")).digest("hex").slice(0,32)}({agent_id:w,title:b,project_id:t}),z=function({heartbeat_task_id:a,dedupe_key:b,project_id:c}){if(!a&&!b)return null;let d=(0,h.getDb)(),e=c||q.Sk;if(a){let b=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE heartbeat_task_id = ? LIMIT 1").get(String(a));if(b)return b}if(b){let a=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE dedupe_key = ? AND project_id = ? LIMIT 1").get(String(b),e);if(a)return a}return null}({heartbeat_task_id:o,dedupe_key:y,project_id:t});if(z)return{artifact_id:z.id,file_path:z.path,title:z.title||b,kind:z.kind||c,deduped:!0};let A=s&&s.org_id?s.org_id:"personal-org",B=(0,x.Pf)();function C(a,b){return B?(e.writeFileSync(a,(0,x.A5)(A,b)),{encrypted:1,encryption_key_id:A}):(e.writeFileSync(a,b,"utf8"),{encrypted:0,encryption_key_id:null})}let D="main-orchestrator"===w?"madarX Main Agent":(a=>{try{let b=a.prepare("SELECT name FROM agents WHERE id = ?").get(w);return b?.name||w}catch{return w}})((0,h.getDb)());if("markdown"===c||"text"===c){let a=(0,m.vr)(d||""),c=(0,m.j7)({title:b,markdown:a}),e=f.join(u,`${v}-${Date.now().toString(36)}.md`),{encrypted:g,encryption_key_id:h}=C(e,a),j=(0,i.z9)(e),k=W({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:w,artifact:j,preview:a.slice(0,200),triggered_by:"claude",status:"complete"}),l=X({run_id:k.id,agent_id:w,file_path:j,kind:"document",title:b,content:c,source_md:a,project_id:t,encrypted:g,encryption_key_id:h,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:w,run_id:k.id,title:`Created artifact: ${b}`,summary:`New document "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:l,kind:"document",folder_id:null}})}catch{}return{artifact_id:l,file_path:j,title:b,kind:"document"}}if("html"===c){let c=(d||"").trimStart().slice(0,200).toLowerCase();if(!(c.startsWith("<!doctype")||c.startsWith("<html")||c.includes("<body")))return a({title:b,kind:"markdown",content:d,project_id:k,agent_id:l,space_id:n,heartbeat_task_id:o,dedupe_key:p})}let E=(d||"").trimStart().slice(0,200).toLowerCase(),F=E.startsWith("<!doctype")||E.startsWith("<html")||E.includes("<body"),G="html"===c||F?(0,m.vr)(d||""):d||"",H=f.join(u,`${v}-${Date.now().toString(36)}.${"html"===c||F?"html":"txt"}`),{encrypted:I,encryption_key_id:J}=C(H,G),K=(0,i.z9)(H),L=W({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:w,artifact:K,preview:G.slice(0,200),triggered_by:"claude",status:"complete"}),M=X({run_id:L.id,agent_id:w,file_path:K,kind:c,title:b,content:G,project_id:t,encrypted:I,encryption_key_id:J,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:w,run_id:L.id,title:`Created artifact: ${b}`,summary:`New ${c} artifact "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:M,kind:c,folder_id:null}})}catch{}return{artifact_id:M,file_path:K,title:b,kind:c}},Gu:()=>al,IG:()=>aj,K2:()=>I,Mh:()=>P,NK:()=>ah,Nv:()=>af,OH:()=>aa,PF:()=>Q,RB:()=>ac,RG:()=>N,S9:()=>_,Sn:()=>ab,UA:()=>ar,V1:()=>L,W1:()=>K,WU:()=>G,Xr:()=>J,YS:()=>ao,_u:()=>R,appendAudit:()=>V,bC:()=>ae,eP:()=>Z,fB:()=>aq,fk:()=>ap,jZ:()=>U,mk:()=>ai,mo:()=>at,n1:()=>T,nF:()=>ak,q:()=>au,recordArtifact:()=>X,recordRun:()=>W,v:()=>O,vc:()=>F,wn:()=>S,x4:()=>ad});var e=c(73024),f=c(76760),g=c(77598),h=c(34255),i=c(9381),j=c(73066),k=c(90712),l=c(14743),m=c(8727),n=c(40563),o=c(8437),p=c(72326),q=c(61423),r=c(83963),s=c(40718),t=c(60897),u=c(67179),v=c(9001),w=c(81833),x=c(79133),y=a([h,j,l,m,n,o,p,q,r,s,u,v,w]);function z(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}function A(){return new Date().toISOString().slice(0,10)}function B(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function C(a){return a?{id:a.id,name:a.name,type:a.type,engine:(0,p.$k)(a.engine),model:a.model||(0,p.Qp)(a.engine),mission:a.mission,schedule:a.schedule,tools:B(a.tools,[]),status:a.status,approval:a.approval,generated:1===a.generated,files:B(a.files,[]),system_prompt:a.system_prompt||null,expected_output:a.expected_output||null,memory:B(a.memory,[]),created_at:a.created_at,last_heartbeat:a.last_heartbeat,last_run_at:a.last_run_at,next_run_at:a.next_run_at,reports_to:a.reports_to||null,role:a.role||null,title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||null,budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:B(a.permissions_json,{}),metadata_json:B(a.metadata_json,{}),project_id:a.project_id||null,template_slug:a.template_slug||null,default_space_id:a.default_space_id||null}:null}function D(a){return a?{id:a.id,agent_id:a.agent_id,agent_name:a.agent_name,schedule:a.schedule,action_kind:a.action_kind,enabled:1===a.enabled,next_run_at:a.next_run_at,last_run_at:a.last_run_at,delivery:a.delivery,approval:a.approval,last_queued_at:a.last_queued_at,last_queued_window:a.last_queued_window,updated_at:a.updated_at}:null}function E(a){return a?{...a}:null}function F(){return(0,h.getDb)().prepare("SELECT * FROM agents ORDER BY generated ASC, name ASC").all().map(C)}function G(a){let b=(0,h.getDb)();return C(b.prepare("SELECT * FROM agents WHERE id = ?").get(a))}function H(a){return a?{id:a.id,agent_id:a.agent_id,tool_name:a.tool_name,mode:a.mode,created_at:a.created_at,updated_at:a.updated_at}:null}function I(a){return(0,h.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? ORDER BY tool_name ASC").all(a).map(H)}function J(a,b,c="approval_required"){if(!a||!b)throw Error("agent_id and tool_name are required");if(!["auto","approval_required","disabled"].includes(c))throw Error(`Invalid tool permission mode: ${c}`);let d=(0,h.getDb)(),e=(0,h.nowIso)(),f=`perm-${a}-${b}`.replace(/[^a-zA-Z0-9_-]/g,"-");return d.prepare(`
2995
2995
  INSERT INTO agent_tool_permissions (id, agent_id, tool_name, mode, created_at, updated_at)
2996
2996
  VALUES (?, ?, ?, ?, ?, ?)
2997
2997
  ON CONFLICT(agent_id, tool_name) DO UPDATE SET mode=excluded.mode, updated_at=excluded.updated_at
2998
- `).run(f,a,b,c,e,e),G(d.prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,b))}function J({silent:a=!1}={}){let b=["directory_list","file_read","file_search","terminal_run","web_search","web_fetch"],c=aa({id:"ops-agent",name:"Caretaker",type:"ops",mission:"Run safe daily operations checks for madarX OS, inspect local workspace state, summarize risks, and prepare owner-ready next actions without external sends or destructive changes.",schedule:"daily 08:00",engine:"ollama",model:(0,p.Qp)("ollama"),tools:b,approval:"human-in-loop",suppress_live_event:a});for(let a of(ae({agent_id:"ops-agent",name:"Caretaker",schedule:"daily 08:00",action_kind:"agent-tick",approval:"human-in-loop"}),b)){let b=["directory_list","file_read","file_search","web_search","web_fetch"].includes(a)?"auto":"approval_required";I("ops-agent",a,b)}return U({type:"agent.ops.ensure",summary:"Ensured Caretaker",status:"complete",meta:{agent_id:"ops-agent"}}),{...c,permissions:H("ops-agent")}}function K(a){let b=(0,h.getDb)().prepare("SELECT memory FROM agents WHERE id = ?").get(a);return b?A(b.memory,[]):null}function L(a,b){let c=K(a);if(!c)return{ok:!1,error:"agent not found"};let d=Number(b);if(!Number.isInteger(d)||d<0||d>=c.length)return{ok:!1,error:"memory index out of range"};let e=c.splice(d,1)[0];return(0,h.getDb)().prepare("UPDATE agents SET memory = ? WHERE id = ?").run(JSON.stringify(c),a),U({type:"agent.memory.delete",summary:`Deleted memory entry for ${a}`,status:"complete",meta:{agent_id:a,index:d}}),{ok:!0,removed:e,memory:c}}function M(){return(0,h.getDb)().prepare("SELECT * FROM schedules ORDER BY enabled DESC, next_run_at ASC").all().map(C)}function N(a=20){return(0,h.getDb)().prepare("SELECT * FROM runs ORDER BY at DESC LIMIT ?").all(a).map(D)}function O(a){let b=(0,h.getDb)();return D(b.prepare("SELECT * FROM runs WHERE id = ?").get(a))}function P(a,b={}){let c=["status","artifact","preview","output"],d=Object.entries(b).filter(([a])=>c.includes(a));if(!d.length)return O(a);let e=(0,h.getDb)(),f=d.map(([a])=>`${a} = ?`).join(", "),g=d.map(([,a])=>a??null);return e.prepare(`UPDATE runs SET ${f} WHERE id = ?`).run(...g,a),O(a)}function Q(a=20){return(0,h.getDb)().prepare("SELECT * FROM audit_logs ORDER BY at DESC LIMIT ?").all(a)}function R(a=50){return(0,h.getDb)().prepare("SELECT * FROM artifacts ORDER BY created_at DESC LIMIT ?").all(a)}function S({title_query:a,agent_id:b,agent_name:c,kind:d,project_id:e,space_id:f,limit:g=10}={}){let i=(0,h.getDb)(),j=[],k=[];if(a){let b=String(a).toLowerCase().split(/\s+/).map(a=>a.replace(/[^a-z0-9]+/g,"")).filter(Boolean);if(0===b.length)j.push("LOWER(a.title) LIKE ?"),k.push(`%${String(a).toLowerCase()}%`);else for(let a of b)j.push("LOWER(a.title) LIKE ?"),k.push(`%${a}%`)}if(b&&(j.push("a.agent_id = ?"),k.push(String(b))),d&&(j.push("a.kind = ?"),k.push(String(d))),e){let a=String(e),b=(0,q.hF)({status:"all"}).find(b=>b.id===a||b.slug===a);j.push("a.project_id = ?"),k.push(b?b.id:a)}f&&(j.push("a.space_id = ?"),k.push(String(f)));let l=`
2998
+ `).run(f,a,b,c,e,e),H(d.prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,b))}function K({silent:a=!1}={}){let b=["directory_list","file_read","file_search","terminal_run","web_search","web_fetch"],c=ab({id:"ops-agent",name:"Caretaker",type:"ops",mission:"Run safe daily operations checks for madarX OS, inspect local workspace state, summarize risks, and prepare owner-ready next actions without external sends or destructive changes.",schedule:"daily 08:00",engine:"ollama",model:(0,p.Qp)("ollama"),tools:b,approval:"human-in-loop",suppress_live_event:a});for(let a of(af({agent_id:"ops-agent",name:"Caretaker",schedule:"daily 08:00",action_kind:"agent-tick",approval:"human-in-loop"}),b)){let b=["directory_list","file_read","file_search","web_search","web_fetch"].includes(a)?"auto":"approval_required";J("ops-agent",a,b)}return V({type:"agent.ops.ensure",summary:"Ensured Caretaker",status:"complete",meta:{agent_id:"ops-agent"}}),{...c,permissions:I("ops-agent")}}function L(a){let b=(0,h.getDb)().prepare("SELECT memory FROM agents WHERE id = ?").get(a);return b?B(b.memory,[]):null}function M(a,b){let c=L(a);if(!c)return{ok:!1,error:"agent not found"};let d=Number(b);if(!Number.isInteger(d)||d<0||d>=c.length)return{ok:!1,error:"memory index out of range"};let e=c.splice(d,1)[0];return(0,h.getDb)().prepare("UPDATE agents SET memory = ? WHERE id = ?").run(JSON.stringify(c),a),V({type:"agent.memory.delete",summary:`Deleted memory entry for ${a}`,status:"complete",meta:{agent_id:a,index:d}}),{ok:!0,removed:e,memory:c}}function N(){return(0,h.getDb)().prepare("SELECT * FROM schedules ORDER BY enabled DESC, next_run_at ASC").all().map(D)}function O(a=20){return(0,h.getDb)().prepare("SELECT * FROM runs ORDER BY at DESC LIMIT ?").all(a).map(E)}function P(a){let b=(0,h.getDb)();return E(b.prepare("SELECT * FROM runs WHERE id = ?").get(a))}function Q(a,b={}){let c=["status","artifact","preview","output"],d=Object.entries(b).filter(([a])=>c.includes(a));if(!d.length)return P(a);let e=(0,h.getDb)(),f=d.map(([a])=>`${a} = ?`).join(", "),g=d.map(([,a])=>a??null);return e.prepare(`UPDATE runs SET ${f} WHERE id = ?`).run(...g,a),P(a)}function R(a=20){return(0,h.getDb)().prepare("SELECT * FROM audit_logs ORDER BY at DESC LIMIT ?").all(a)}function S(a=50){return(0,h.getDb)().prepare("SELECT * FROM artifacts ORDER BY created_at DESC LIMIT ?").all(a)}function T({title_query:a,agent_id:b,agent_name:c,kind:d,project_id:e,space_id:f,limit:g=10}={}){let i=(0,h.getDb)(),j=[],k=[];if(a){let b=String(a).toLowerCase().split(/\s+/).map(a=>a.replace(/[^a-z0-9]+/g,"")).filter(Boolean);if(0===b.length)j.push("LOWER(a.title) LIKE ?"),k.push(`%${String(a).toLowerCase()}%`);else for(let a of b)j.push("LOWER(a.title) LIKE ?"),k.push(`%${a}%`)}if(b&&(j.push("a.agent_id = ?"),k.push(String(b))),d&&(j.push("a.kind = ?"),k.push(String(d))),e){let a=String(e),b=(0,q.hF)({status:"all"}).find(b=>b.id===a||b.slug===a);j.push("a.project_id = ?"),k.push(b?b.id:a)}f&&(j.push("a.space_id = ?"),k.push(String(f)));let l=`
2999
2999
  SELECT a.id, a.title, a.kind, a.agent_id, a.run_id, a.path, a.project_id, a.space_id, a.created_at,
3000
3000
  ag.name AS agent_name
3001
3001
  FROM artifacts a
3002
3002
  LEFT JOIN agents ag ON ag.id = a.agent_id
3003
- `;return c&&(j.push("LOWER(ag.name) LIKE ?"),k.push(`%${String(c).toLowerCase()}%`)),j.length&&(l+=`WHERE ${j.join(" AND ")} `),l+="ORDER BY a.created_at DESC LIMIT ?",k.push(Math.max(1,Math.min(50,Number(g)||10))),i.prepare(l).all(...k)}function T(a){return a&&(0,h.getDb)().prepare("SELECT * FROM artifacts WHERE id = ?").get(String(a))||null}function U(a){let b=(0,h.getDb)(),c=(0,h.newId)("audit"),d=(0,h.nowIso)(),e=a.type||"info";b.prepare(`
3003
+ `;return c&&(j.push("LOWER(ag.name) LIKE ?"),k.push(`%${String(c).toLowerCase()}%`)),j.length&&(l+=`WHERE ${j.join(" AND ")} `),l+="ORDER BY a.created_at DESC LIMIT ?",k.push(Math.max(1,Math.min(50,Number(g)||10))),i.prepare(l).all(...k)}function U(a){return a&&(0,h.getDb)().prepare("SELECT * FROM artifacts WHERE id = ?").get(String(a))||null}function V(a){let b=(0,h.getDb)(),c=(0,h.newId)("audit"),d=(0,h.nowIso)(),e=a.type||"info";b.prepare(`
3004
3004
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
3005
3005
  VALUES (?, ?, ?, ?, ?, ?)
3006
- `).run(c,d,e,a.summary||"",a.status||null,a.meta?JSON.stringify(a.meta):null);let f=e?e.startsWith("agent.")?"agents":"run"===e||e.startsWith("run.")||e.startsWith("claude.")?"runs":e.startsWith("artifact")?"artifacts":e.startsWith("approval")?"approvals":e.startsWith("heartbeat")||e.startsWith("cron")||e.startsWith("schedule")?"heartbeat":e.startsWith("connector")?"connectors":e.startsWith("local.process")||e.startsWith("process.")?"local_processes":e.startsWith("local.tool")||e.startsWith("local.terminal")||e.startsWith("local_tool")?"local_actions":e.startsWith("hermes")?"hermes_jobs":null:null;if(f)try{(0,u.jO)(f)}catch{}return{id:c,at:d,...a}}function V(a){let b=(0,h.getDb)(),c=(0,h.newId)("run"),d=(0,h.nowIso)(),e=a.status||"complete";return b.prepare(`
3006
+ `).run(c,d,e,a.summary||"",a.status||null,a.meta?JSON.stringify(a.meta):null);let f=e?e.startsWith("agent.")?"agents":"run"===e||e.startsWith("run.")||e.startsWith("claude.")?"runs":e.startsWith("artifact")?"artifacts":e.startsWith("approval")?"approvals":e.startsWith("heartbeat")||e.startsWith("cron")||e.startsWith("schedule")?"heartbeat":e.startsWith("connector")?"connectors":e.startsWith("local.process")||e.startsWith("process.")?"local_processes":e.startsWith("local.tool")||e.startsWith("local.terminal")||e.startsWith("local_tool")?"local_actions":e.startsWith("hermes")?"hermes_jobs":null:null;if(f)try{(0,v.jO)(f)}catch{}return{id:c,at:d,...a}}function W(a){let b=(0,h.getDb)(),c=(0,h.newId)("run"),d=(0,h.nowIso)(),e=a.status||"complete";return b.prepare(`
3007
3007
  INSERT INTO runs (id, kind, title, agent, agent_id, status, artifact, preview, output, command, triggered_by, at)
3008
3008
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
3009
- `).run(c,a.kind,a.title||a.kind,a.agent||null,a.agent_id||null,e,a.artifact||null,a.preview||null,a.output||null,a.command||null,a.triggered_by||"manual",d),U({type:"run",summary:a.title||a.kind,status:e,meta:{run_id:c,kind:a.kind}}),{id:c,at:d,status:e,...a}}function W({run_id:a,agent_id:b,file_path:c,kind:d,title:e,content:f,source_md:g=null,project_id:i=null,encrypted:j=0,encryption_key_id:k=null,space_id:l=null,heartbeat_task_id:m=null,dedupe_key:n=null}){let o=(0,h.getDb)(),p=(0,h.newId)("artifact"),r=i||q.Sk,s=null;if(b){let a=o.prepare("SELECT default_space_id FROM agents WHERE id = ?").get(String(b));s=a?.default_space_id||null}let t=(0,v.Om)([l,s]);return o.prepare(`
3009
+ `).run(c,a.kind,a.title||a.kind,a.agent||null,a.agent_id||null,e,a.artifact||null,a.preview||null,a.output||null,a.command||null,a.triggered_by||"manual",d),V({type:"run",summary:a.title||a.kind,status:e,meta:{run_id:c,kind:a.kind}}),{id:c,at:d,status:e,...a}}function X({run_id:a,agent_id:b,file_path:c,kind:d,title:e,content:f,source_md:g=null,project_id:i=null,encrypted:j=0,encryption_key_id:k=null,space_id:l=null,heartbeat_task_id:m=null,dedupe_key:n=null}){let o=(0,h.getDb)(),p=(0,h.newId)("artifact"),r=i||q.Sk,s=null;if(b){let a=o.prepare("SELECT default_space_id FROM agents WHERE id = ?").get(String(b));s=a?.default_space_id||null}let t=(0,w.Om)([l,s]);return o.prepare(`
3010
3010
  INSERT INTO artifacts (id, run_id, agent_id, path, kind, title, content, source_md, project_id, encrypted, encryption_key_id, space_id, heartbeat_task_id, dedupe_key, created_at)
3011
3011
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
3012
- `).run(p,a||null,b||null,c,d||null,e||null,f||null,g,r,+!!j,k||null,t,m||null,n||null,(0,h.nowIso)()),p}function X(a){if(!a)return null;let b=f.resolve(i.Dl,a);if((0,j.kA)(b))return b;let c=f.resolve(i.m4)+f.sep;return b.startsWith(c)?b:null}function Y(a,{title:b,content:c}){let d=(0,h.getDb)(),f=d.prepare("SELECT * FROM artifacts WHERE id = ?").get(a);if(!f)throw Error(`Artifact not found: ${a}`);let g=b||f.title,i=X(f.path);if("document"===f.kind){let b=(0,m.vr)(c||""),f=(0,m.j7)({title:g,markdown:b});if(i)try{e.writeFileSync(i,b,"utf8")}catch{}d.prepare("UPDATE artifacts SET title = ?, content = ?, source_md = ? WHERE id = ?").run(g,f,b,a)}else{let b="html"===f.kind?(0,m.vr)(c||""):c||"";if(i)try{e.writeFileSync(i,b,"utf8")}catch{}d.prepare("UPDATE artifacts SET title = ?, content = ? WHERE id = ?").run(g,b,a)}if(f.project_id)try{(0,q.Ip)(f.project_id,{action:"project.artifact.updated",actor_type:"agent",agent_id:f.agent_id||"main-orchestrator",title:`Updated artifact: ${g}`,summary:`"${g}" was edited.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:f.kind,folder_id:null}})}catch{}return{artifact_id:a,title:g,kind:f.kind}}function Z(a){let b=(0,h.getDb)(),c=b.prepare("SELECT path FROM artifacts WHERE id = ?").get(a);if(!c)return{ok:!1,error:"not found"};b.prepare("DELETE FROM artifacts WHERE id = ?").run(a);try{let a=(0,i.ny)(c.path),b=a&&e.existsSync(a)?e.realpathSync(a):null;b&&(0,j.kA)(b)&&e.unlinkSync(b)}catch{}return{ok:!0}}function $(a,{target_project_id:b}){if(!a)return{ok:!1,error:"artifact_id required"};if(!b)return{ok:!1,error:"target_project_id required"};let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM artifacts WHERE id = ?").get(a);if(!d)return{ok:!1,error:"artifact not found"};let g=(0,q.U1)(b);if(!g)return{ok:!1,error:`target project not found: ${b}`};let k=d.project_id||q.Sk;if(k===g.id)return{ok:!0,moved:!1,artifact_id:a,project_id:g.id,reason:"already in target project"};let l=(0,q.U1)(k),m=(0,j.Kg)(g),n=X(d.path),o=null;if(n){let a=f.basename(n),b=f.join(m,a);if(e.existsSync(b)){let c=f.extname(a),d=a.slice(0,a.length-c.length),g=1;for(;e.existsSync(f.join(m,`${d}-${g}${c}`));)g+=1;b=f.join(m,`${d}-${g}${c}`)}o=b}let p=d.encryption_key_id||l&&l.org_id||"personal-org",r=g.org_id||"personal-org",s=d.encryption_key_id;if(n&&o&&e.existsSync(n))try{if(1===d.encrypted&&p!==r){let a=e.readFileSync(n),b=(0,w.decryptFromDiskBuffer)(p,a);e.writeFileSync(o,(0,w.A5)(r,b)),e.unlinkSync(n),s=r}else e.renameSync(n,o)}catch(a){return{ok:!1,error:`disk move failed: ${a?.message||String(a)}`}}let t=o?(0,i.z9)(o):d.path;c.prepare("UPDATE artifacts SET project_id = ?, path = ?, encryption_key_id = ? WHERE id = ?").run(g.id,t,s,a);let u=`Moved "${d.title}" from ${l?.name||k} to ${g.name}`;try{(0,q.Ip)(k,{action:"project.artifact.moved_out",actor_type:"agent",agent_id:"main-orchestrator",title:`Moved artifact out: ${d.title}`,summary:u,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:d.kind,target_project_id:g.id,target_project_slug:g.slug}})}catch{}try{(0,q.Ip)(g.id,{action:"project.artifact.moved_in",actor_type:"agent",agent_id:"main-orchestrator",title:`Moved artifact in: ${d.title}`,summary:u,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:d.kind,source_project_id:k,source_project_slug:l?.slug||null}})}catch{}return U({type:"artifact.move",summary:u,status:"complete",meta:{artifact_id:a,source_project_id:k,target_project_id:g.id,old_path:d.path,new_path:t,re_encrypted:1===d.encrypted&&p!==r}}),{ok:!0,moved:!0,artifact_id:a,title:d.title,kind:d.kind,source_project_id:k,target_project_id:g.id,file_path:t}}function _(){let a,b=0,c=0;try{a=(0,t.R2)().trimEnd()+"\n"}catch{return{scanned:b,updated:c}}let d=[];try{d=e.readdirSync(i.bo,{withFileTypes:!0}).filter(a=>a.isDirectory())}catch{return{scanned:b,updated:c}}for(let g of d){let d,h,j=f.join(i.bo,g.name,"skills.md");try{d=e.readFileSync(j,"utf8")}catch{continue}if(b++,!d.includes("## Core playbooks"))continue;let k=d.indexOf("\n## Default skills");if((h=k>=0?d.slice(0,k).trimEnd()+"\n\n"+a:d.trimEnd()+"\n\n"+a)!==d)try{e.writeFileSync(j,h),c++}catch{}}return{scanned:b,updated:c}}function aa(a={}){let b=(0,h.getDb)(),c=a.name||"Client Workspace Custom Agent",d=y(a.id||c),g=a.type||"custom",j=a.mission||"Support Client Workspace operations as a local sub-agent.",k=a.schedule||"on demand",l=a.engine||"claude-code",m=(0,p.$k)(l),n=a.model||(0,p.Qp)(m),o=Array.isArray(a.tools)?a.tools:String(a.tools||"web-search,browser,files,cron").split(",").map(a=>a.trim()).filter(Boolean),q=a.approval||"human-in-loop",r=a.system_prompt||function({name:a,mission:b,tools:c=[],approval:d="human-in-loop"}={}){return`You are ${a||"a madarX OS agent"}, a local-first scheduled worker managed by the madarX Main Agent.
3012
+ `).run(p,a||null,b||null,c,d||null,e||null,f||null,g,r,+!!j,k||null,t,m||null,n||null,(0,h.nowIso)()),p}function Y(a){if(!a)return null;let b=f.resolve(i.Dl,a);if((0,j.kA)(b))return b;let c=f.resolve(i.m4)+f.sep;return b.startsWith(c)?b:null}function Z(a,{title:b,content:c}){let d=(0,h.getDb)(),f=d.prepare("SELECT * FROM artifacts WHERE id = ?").get(a);if(!f)throw Error(`Artifact not found: ${a}`);let g=b||f.title,i=Y(f.path);if("document"===f.kind){let b=(0,m.vr)(c||""),f=(0,m.j7)({title:g,markdown:b});if(i)try{e.writeFileSync(i,b,"utf8")}catch{}d.prepare("UPDATE artifacts SET title = ?, content = ?, source_md = ? WHERE id = ?").run(g,f,b,a)}else{let b="html"===f.kind?(0,m.vr)(c||""):c||"";if(i)try{e.writeFileSync(i,b,"utf8")}catch{}d.prepare("UPDATE artifacts SET title = ?, content = ? WHERE id = ?").run(g,b,a)}if(f.project_id)try{(0,q.Ip)(f.project_id,{action:"project.artifact.updated",actor_type:"agent",agent_id:f.agent_id||"main-orchestrator",title:`Updated artifact: ${g}`,summary:`"${g}" was edited.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:f.kind,folder_id:null}})}catch{}return{artifact_id:a,title:g,kind:f.kind}}function $(a){let b=(0,h.getDb)(),c=b.prepare("SELECT path FROM artifacts WHERE id = ?").get(a);if(!c)return{ok:!1,error:"not found"};b.prepare("DELETE FROM artifacts WHERE id = ?").run(a);try{let a=(0,i.ny)(c.path),b=a&&e.existsSync(a)?e.realpathSync(a):null;b&&(0,j.kA)(b)&&e.unlinkSync(b)}catch{}return{ok:!0}}function _(a,{target_project_id:b}){if(!a)return{ok:!1,error:"artifact_id required"};if(!b)return{ok:!1,error:"target_project_id required"};let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM artifacts WHERE id = ?").get(a);if(!d)return{ok:!1,error:"artifact not found"};let g=(0,q.U1)(b);if(!g)return{ok:!1,error:`target project not found: ${b}`};let k=d.project_id||q.Sk;if(k===g.id)return{ok:!0,moved:!1,artifact_id:a,project_id:g.id,reason:"already in target project"};let l=(0,q.U1)(k),m=(0,j.Kg)(g),n=Y(d.path),o=null;if(n){let a=f.basename(n),b=f.join(m,a);if(e.existsSync(b)){let c=f.extname(a),d=a.slice(0,a.length-c.length),g=1;for(;e.existsSync(f.join(m,`${d}-${g}${c}`));)g+=1;b=f.join(m,`${d}-${g}${c}`)}o=b}let p=d.encryption_key_id||l&&l.org_id||"personal-org",r=g.org_id||"personal-org",s=d.encryption_key_id;if(n&&o&&e.existsSync(n))try{if(1===d.encrypted&&p!==r){let a=e.readFileSync(n),b=(0,x.decryptFromDiskBuffer)(p,a);e.writeFileSync(o,(0,x.A5)(r,b)),e.unlinkSync(n),s=r}else e.renameSync(n,o)}catch(a){return{ok:!1,error:`disk move failed: ${a?.message||String(a)}`}}let t=o?(0,i.z9)(o):d.path;c.prepare("UPDATE artifacts SET project_id = ?, path = ?, encryption_key_id = ? WHERE id = ?").run(g.id,t,s,a);let u=`Moved "${d.title}" from ${l?.name||k} to ${g.name}`;try{(0,q.Ip)(k,{action:"project.artifact.moved_out",actor_type:"agent",agent_id:"main-orchestrator",title:`Moved artifact out: ${d.title}`,summary:u,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:d.kind,target_project_id:g.id,target_project_slug:g.slug}})}catch{}try{(0,q.Ip)(g.id,{action:"project.artifact.moved_in",actor_type:"agent",agent_id:"main-orchestrator",title:`Moved artifact in: ${d.title}`,summary:u,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:d.kind,source_project_id:k,source_project_slug:l?.slug||null}})}catch{}return V({type:"artifact.move",summary:u,status:"complete",meta:{artifact_id:a,source_project_id:k,target_project_id:g.id,old_path:d.path,new_path:t,re_encrypted:1===d.encrypted&&p!==r}}),{ok:!0,moved:!0,artifact_id:a,title:d.title,kind:d.kind,source_project_id:k,target_project_id:g.id,file_path:t}}function aa(){let a,b=0,c=0;try{a=(0,t.R2)().trimEnd()+"\n"}catch{return{scanned:b,updated:c}}let d=[];try{d=e.readdirSync(i.bo,{withFileTypes:!0}).filter(a=>a.isDirectory())}catch{return{scanned:b,updated:c}}for(let g of d){let d,h,j=f.join(i.bo,g.name,"skills.md");try{d=e.readFileSync(j,"utf8")}catch{continue}if(b++,!d.includes("## Core playbooks"))continue;let k=d.indexOf("\n## Default skills");if((h=k>=0?d.slice(0,k).trimEnd()+"\n\n"+a:d.trimEnd()+"\n\n"+a)!==d)try{e.writeFileSync(j,h),c++}catch{}}return{scanned:b,updated:c}}function ab(a={}){let b=(0,h.getDb)(),c=a.name||"Client Workspace Custom Agent",d=z(a.id||c),g=a.type||"custom",j=a.mission||"Support Client Workspace operations as a local sub-agent.",k=a.schedule||"on demand",l=null,m=null;try{l=(0,u.getConfig)("default_agent_engine",null),m=(0,u.getConfig)("default_agent_model",null)}catch{}let n=a.engine||l||"claude-code",o=(0,p.$k)(n),q=a.model||!a.engine&&m||(0,p.Qp)(o),r=Array.isArray(a.tools)?a.tools:String(a.tools||"web-search,browser,files,cron").split(",").map(a=>a.trim()).filter(Boolean),s=a.approval||"human-in-loop",w=a.system_prompt||function({name:a,mission:b,tools:c=[],approval:d="human-in-loop"}={}){return`You are ${a||"a madarX OS agent"}, a local-first scheduled worker managed by the madarX Main Agent.
3013
3013
 
3014
3014
  <agent_mission>
3015
3015
  ${b||"Support the user with concise, useful work."}
@@ -3028,7 +3028,7 @@ Rules:
3028
3028
  Deliverable contract (read carefully):
3029
3029
  - Your FINAL message is saved verbatim as the artifact the owner sees. It MUST be the complete result in clean markdown — the full report itself, not a status update, progress recap, run summary, or "what I did" note.
3030
3030
  - Use working files only for your own scratch/dedup. The deliverable is the final message, so reproduce the full content there even if a prior version of today's output already exists on disk.
3031
- - Structure for reading: a title, then well-organized sections with headings. Include every item in full (with sources, timestamps, and links where the mission calls for them), not just headlines or a scorecard.`}({name:c,mission:j,tools:o,approval:q}),s=Array.isArray(a.memory)?a.memory:[],v=(0,h.nowIso)(),w={id:d,name:c,type:g,engine:m,model:n,mission:j,schedule:k,tools:o,approval:q,system_prompt:r,expected_output:"string"==typeof a.expected_output?a.expected_output:null,memory:s,created_at:v,skills_markdown:"string"==typeof a.skills_markdown?a.skills_markdown:null,reports_to:a.reports_to||null,role:a.role||"individual_contributor",title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||"managed",budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:a.permissions_json||{},metadata_json:{...a.metadata_json||{},...void 0!==a.whatsapp_notify_chat_id?{whatsapp_notify_chat_id:a.whatsapp_notify_chat_id||null}:{}},project_id:a.project_id||null,template_slug:a.template_slug||null},x=function(a){let b;(0,i.Jh)();let c=f.join(i.bo,a.id);e.mkdirSync(c,{recursive:!0});let d=["AGENTS.md","skills.md","tools.md","heartbeat.json"].map(a=>(0,i.z9)(f.join(c,a)));if(e.writeFileSync(f.join(c,"AGENTS.md"),`# ${a.name}
3031
+ - Structure for reading: a title, then well-organized sections with headings. Include every item in full (with sources, timestamps, and links where the mission calls for them), not just headlines or a scorecard.`}({name:c,mission:j,tools:r,approval:s}),x=Array.isArray(a.memory)?a.memory:[],y=(0,h.nowIso)(),A={id:d,name:c,type:g,engine:o,model:q,mission:j,schedule:k,tools:r,approval:s,system_prompt:w,expected_output:"string"==typeof a.expected_output?a.expected_output:null,memory:x,created_at:y,skills_markdown:"string"==typeof a.skills_markdown?a.skills_markdown:null,reports_to:a.reports_to||null,role:a.role||"individual_contributor",title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||"managed",budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:a.permissions_json||{},metadata_json:{...a.metadata_json||{},...void 0!==a.whatsapp_notify_chat_id?{whatsapp_notify_chat_id:a.whatsapp_notify_chat_id||null}:{}},project_id:a.project_id||null,template_slug:a.template_slug||null},B=function(a){let b;(0,i.Jh)();let c=f.join(i.bo,a.id);e.mkdirSync(c,{recursive:!0});let d=["AGENTS.md","skills.md","tools.md","heartbeat.json"].map(a=>(0,i.z9)(f.join(c,a)));if(e.writeFileSync(f.join(c,"AGENTS.md"),`# ${a.name}
3032
3032
 
3033
3033
  Parent orchestrator: madarX Main Agent.
3034
3034
 
@@ -3073,7 +3073,7 @@ ${(a.tools||[]).map(a=>`- ${a}`).join("\n")}
3073
3073
  - Instagram/TikTok monitoring is public-view/mock until authenticated connectors are approved.
3074
3074
  - Gmail/Calendar actions are draft or read mode unless the owner approves.
3075
3075
  - Claude Code commands require visible command preview and audit log entry.
3076
- `);let g={id:a.id,name:a.name,type:a.type,engine:a.engine,model:a.model,mission:a.mission,schedule:a.schedule,tools:a.tools,status:"created",approval:a.approval,created_at:a.created_at,last_run:null,next_run:"on demand"===a.schedule?null:"next scheduled window",files:d};return e.writeFileSync(f.join(c,"heartbeat.json"),JSON.stringify(g,null,2)),d}(w),z=b.prepare("SELECT 1 AS x FROM agents WHERE id = ?").get(d);return b.prepare(`
3076
+ `);let g={id:a.id,name:a.name,type:a.type,engine:a.engine,model:a.model,mission:a.mission,schedule:a.schedule,tools:a.tools,status:"created",approval:a.approval,created_at:a.created_at,last_run:null,next_run:"on demand"===a.schedule?null:"next scheduled window",files:d};return e.writeFileSync(f.join(c,"heartbeat.json"),JSON.stringify(g,null,2)),d}(A),C=b.prepare("SELECT 1 AS x FROM agents WHERE id = ?").get(d);return b.prepare(`
3077
3077
  INSERT INTO agents (id, name, type, engine, model, mission, schedule, tools, status, approval, generated, files, system_prompt, expected_output, memory, created_at,
3078
3078
  reports_to, role, title, status_reason, autonomy_mode, budget_monthly_cents, spent_monthly_cents, permissions_json, metadata_json, project_id, template_slug)
3079
3079
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'created', ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -3094,14 +3094,14 @@ ${(a.tools||[]).map(a=>`- ${a}`).join("\n")}
3094
3094
  metadata_json=COALESCE(agents.metadata_json, excluded.metadata_json),
3095
3095
  project_id=COALESCE(agents.project_id, excluded.project_id),
3096
3096
  template_slug=COALESCE(agents.template_slug, excluded.template_slug)
3097
- `).run(d,c,g,m,n,j,k,JSON.stringify(o),q,JSON.stringify(x),r,w.expected_output,JSON.stringify(s),v,w.reports_to,w.role,w.title,w.status_reason,w.autonomy_mode,w.budget_monthly_cents,w.spent_monthly_cents,JSON.stringify(w.permissions_json),JSON.stringify(w.metadata_json),w.project_id,w.template_slug),!z&&(U({type:"agent.create",summary:`Created ${c}`,meta:{agent_id:d,files:x}}),a.suppress_live_event||(0,u.AC)({type:"agent_created",agent_id:d,agent_name:c,triggered_by:a.triggered_by||null})),{agent:{...w,status:"created",generated:!0,files:x},files:x}}function ab(a){let b=(0,h.getDb)(),c=B(b.prepare("SELECT * FROM agents WHERE id = ?").get(a));if(!c)return{ok:!1,error:"agent not found"};b.prepare("DELETE FROM agents WHERE id = ?").run(a),b.prepare("DELETE FROM schedules WHERE agent_id = ?").run(a);try{let b=f.join(i.bo,a);e.existsSync(b)&&e.rmSync(b,{recursive:!0,force:!0})}catch{}return U({type:"agent.delete",summary:`Deleted ${c.name}`,status:"complete",meta:{agent_id:a}}),{ok:!0}}function ac(a,b={}){let c=(0,h.getDb)(),d=[],e=[];if(void 0!==b.engine){let a=(0,p.$k)(b.engine);d.push("engine = ?"),e.push(a),void 0===b.model&&(d.push("model = ?"),e.push((0,p.Qp)(a)))}for(let a of(void 0!==b.model&&(d.push("model = ?"),e.push(b.model)),void 0!==b.schedule&&(d.push("schedule = ?"),e.push(b.schedule)),["reports_to","role","title","status","status_reason","autonomy_mode","budget_monthly_cents","spent_monthly_cents"]))void 0!==b[a]&&(d.push(`${a} = ?`),e.push(b[a]??null));for(let a of["system_prompt","mission","expected_output"])if(void 0!==b[a]){let c=null==b[a]?null:String(b[a]).trim();d.push(`${a} = ?`),e.push(c||null)}if(void 0!==b.default_space_id){let a=b.default_space_id,f=null;if(null!==a&&""!==a){if(!c.prepare("SELECT id FROM dashboard_spaces WHERE id = ?").get(String(a)))return{ok:!1,error:`unknown space_id: ${a}`};f=String(a)}d.push("default_space_id = ?"),e.push(f)}for(let a of["permissions_json","metadata_json"])void 0!==b[a]&&(d.push(`${a} = ?`),e.push(JSON.stringify(b[a]||{})));return d.length?(e.push(a),c.prepare(`UPDATE agents SET ${d.join(", ")} WHERE id = ?`).run(...e),U({type:"agent.update",summary:`Updated ${a}`,meta:{id:a,patch:b}}),{ok:!0}):{ok:!1,error:"nothing to update"}}function ad(a,b){let c=(0,h.getDb)(),d=c.prepare("SELECT id, name, metadata_json FROM agents WHERE id = ?").get(String(a||""));if(!d)return{ok:!1,error:`agent not found: ${a}`};let e=A(d.metadata_json,{}),f=b?String(b).trim():null;return f?e.whatsapp_notify_chat_id=f:delete e.whatsapp_notify_chat_id,c.prepare("UPDATE agents SET metadata_json = ? WHERE id = ?").run(JSON.stringify(e),d.id),U({type:"agent.whatsapp_notify",summary:f?`Enabled WhatsApp artifact notify for ${d.name} → ${f}`:`Cleared WhatsApp artifact notify for ${d.name}`,status:"complete",meta:{agent_id:d.id,chat_id:f}}),{ok:!0,agent_id:d.id,whatsapp_notify_chat_id:f}}function ae(a={}){let b=(0,h.getDb)(),c=y(a.agent_id||a.agentId||a.id||a.name||"custom-agent"),d=F(c)||b.prepare("SELECT * FROM agents WHERE name = ?").get(a.name||""),e=d?B(d):{id:c,name:a.name||c,approval:"human-in-loop"},f=a.schedule||"daily 07:30",g=`schedule-${e.id}`,i=+(!1!==a.enabled),j=(0,k.F)(f),l=(0,h.nowIso)(),m=String(f).trim().toLowerCase().startsWith("every")?"fire_once":"fire_all",n=a.catchup_policy||m;return b.prepare(`
3097
+ `).run(d,c,g,o,q,j,k,JSON.stringify(r),s,JSON.stringify(B),w,A.expected_output,JSON.stringify(x),y,A.reports_to,A.role,A.title,A.status_reason,A.autonomy_mode,A.budget_monthly_cents,A.spent_monthly_cents,JSON.stringify(A.permissions_json),JSON.stringify(A.metadata_json),A.project_id,A.template_slug),!C&&(V({type:"agent.create",summary:`Created ${c}`,meta:{agent_id:d,files:B}}),a.suppress_live_event||(0,v.AC)({type:"agent_created",agent_id:d,agent_name:c,triggered_by:a.triggered_by||null})),{agent:{...A,status:"created",generated:!0,files:B},files:B}}function ac(a){let b=(0,h.getDb)(),c=C(b.prepare("SELECT * FROM agents WHERE id = ?").get(a));if(!c)return{ok:!1,error:"agent not found"};b.prepare("DELETE FROM agents WHERE id = ?").run(a),b.prepare("DELETE FROM schedules WHERE agent_id = ?").run(a);try{let b=f.join(i.bo,a);e.existsSync(b)&&e.rmSync(b,{recursive:!0,force:!0})}catch{}return V({type:"agent.delete",summary:`Deleted ${c.name}`,status:"complete",meta:{agent_id:a}}),{ok:!0}}function ad(a,b={}){let c=(0,h.getDb)(),d=[],e=[];if(void 0!==b.engine){let a=(0,p.$k)(b.engine);d.push("engine = ?"),e.push(a),void 0===b.model&&(d.push("model = ?"),e.push((0,p.Qp)(a)))}for(let a of(void 0!==b.model&&(d.push("model = ?"),e.push(b.model)),void 0!==b.schedule&&(d.push("schedule = ?"),e.push(b.schedule)),["reports_to","role","title","status","status_reason","autonomy_mode","budget_monthly_cents","spent_monthly_cents"]))void 0!==b[a]&&(d.push(`${a} = ?`),e.push(b[a]??null));for(let a of["system_prompt","mission","expected_output"])if(void 0!==b[a]){let c=null==b[a]?null:String(b[a]).trim();d.push(`${a} = ?`),e.push(c||null)}if(void 0!==b.default_space_id){let a=b.default_space_id,f=null;if(null!==a&&""!==a){if(!c.prepare("SELECT id FROM dashboard_spaces WHERE id = ?").get(String(a)))return{ok:!1,error:`unknown space_id: ${a}`};f=String(a)}d.push("default_space_id = ?"),e.push(f)}for(let a of["permissions_json","metadata_json"])void 0!==b[a]&&(d.push(`${a} = ?`),e.push(JSON.stringify(b[a]||{})));return d.length?(e.push(a),c.prepare(`UPDATE agents SET ${d.join(", ")} WHERE id = ?`).run(...e),V({type:"agent.update",summary:`Updated ${a}`,meta:{id:a,patch:b}}),{ok:!0}):{ok:!1,error:"nothing to update"}}function ae(a,b){let c=(0,h.getDb)(),d=c.prepare("SELECT id, name, metadata_json FROM agents WHERE id = ?").get(String(a||""));if(!d)return{ok:!1,error:`agent not found: ${a}`};let e=B(d.metadata_json,{}),f=b?String(b).trim():null;return f?e.whatsapp_notify_chat_id=f:delete e.whatsapp_notify_chat_id,c.prepare("UPDATE agents SET metadata_json = ? WHERE id = ?").run(JSON.stringify(e),d.id),V({type:"agent.whatsapp_notify",summary:f?`Enabled WhatsApp artifact notify for ${d.name} → ${f}`:`Cleared WhatsApp artifact notify for ${d.name}`,status:"complete",meta:{agent_id:d.id,chat_id:f}}),{ok:!0,agent_id:d.id,whatsapp_notify_chat_id:f}}function af(a={}){let b=(0,h.getDb)(),c=z(a.agent_id||a.agentId||a.id||a.name||"custom-agent"),d=G(c)||b.prepare("SELECT * FROM agents WHERE name = ?").get(a.name||""),e=d?C(d):{id:c,name:a.name||c,approval:"human-in-loop"},f=a.schedule||"daily 07:30",g=`schedule-${e.id}`,i=+(!1!==a.enabled),j=(0,k.F)(f),l=(0,h.nowIso)(),m=String(f).trim().toLowerCase().startsWith("every")?"fire_once":"fire_all",n=a.catchup_policy||m;return b.prepare(`
3098
3098
  INSERT INTO schedules (id, agent_id, agent_name, schedule, action_kind, enabled, next_run_at, delivery, approval, updated_at, catchup_policy)
3099
3099
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
3100
3100
  ON CONFLICT(id) DO UPDATE SET
3101
3101
  schedule=excluded.schedule, action_kind=excluded.action_kind, enabled=excluded.enabled,
3102
3102
  next_run_at=excluded.next_run_at, delivery=excluded.delivery, approval=excluded.approval,
3103
3103
  updated_at=excluded.updated_at, catchup_policy=excluded.catchup_policy
3104
- `).run(g,e.id,e.name,f,a.action_kind||"agent-tick",i,j,a.delivery||"dashboard + owner approval",a.approval||e.approval||"human-in-loop",l,n),U({type:"schedule.upsert",summary:`Scheduled ${e.name} \xb7 ${f}`,status:i?"enabled":"paused",meta:{schedule_id:g}}),{ok:!0,schedule:C(b.prepare("SELECT * FROM schedules WHERE id = ?").get(g))}}function af(a){return(0,i.Jh)(),f.join(i.m4,`madarx-${a}-${z()}.md`)}function ag({triggered_by:a="manual"}={}){let b=af("competitor-report"),c=z(),d=`# Client Workspace Daily Competitor Report — ${c}
3104
+ `).run(g,e.id,e.name,f,a.action_kind||"agent-tick",i,j,a.delivery||"dashboard + owner approval",a.approval||e.approval||"human-in-loop",l,n),V({type:"schedule.upsert",summary:`Scheduled ${e.name} \xb7 ${f}`,status:i?"enabled":"paused",meta:{schedule_id:g}}),{ok:!0,schedule:D(b.prepare("SELECT * FROM schedules WHERE id = ?").get(g))}}function ag(a){return(0,i.Jh)(),f.join(i.m4,`madarx-${a}-${A()}.md`)}function ah({triggered_by:a="manual"}={}){let b=ag("competitor-report"),c=A(),d=`# Client Workspace Daily Competitor Report — ${c}
3105
3105
 
3106
3106
  Generated by: Competitor Intelligence Agent
3107
3107
 
@@ -3131,7 +3131,7 @@ Client Workspace should defend its niche perfumery authority while bundling work
3131
3131
  2. Draft 5 Instagram reel concepts and 3 WhatsApp concierge messages.
3132
3132
  3. Build a one-page workshop campaign mockup.
3133
3133
  4. Send owner report for approval at 08:00.
3134
- `;e.writeFileSync(b,d);let f="Daily Client Workspace competitor report",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=V({kind:"competitor-report",title:f,agent:"Competitor Intelligence Agent",agent_id:"competitor-intelligence",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return W({run_id:j.id,agent_id:"competitor-intelligence",file_path:(0,i.z9)(b),kind:"document",title:f,content:h,source_md:g}),j}function ah({triggered_by:a="manual"}={}){let b=af("marketing-plan"),c=z(),d=`# Client Workspace 7-Day Marketing Plan — ${c}
3134
+ `;e.writeFileSync(b,d);let f="Daily Client Workspace competitor report",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=W({kind:"competitor-report",title:f,agent:"Competitor Intelligence Agent",agent_id:"competitor-intelligence",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return X({run_id:j.id,agent_id:"competitor-intelligence",file_path:(0,i.z9)(b),kind:"document",title:f,content:h,source_md:g}),j}function ai({triggered_by:a="manual"}={}){let b=ag("marketing-plan"),c=A(),d=`# Client Workspace 7-Day Marketing Plan — ${c}
3135
3135
 
3136
3136
  Generated by: Marketing Strategist Agent
3137
3137
 
@@ -3157,17 +3157,17 @@ Day 7: Owner report — leads, bookings, content performance, next experiments.
3157
3157
  - Claude Code: build/update landing page mockup and QA screenshot.
3158
3158
  - Codex: analyze report data and campaign performance table.
3159
3159
  - Hermes: schedule reminders, draft WhatsApp/email replies, deliver owner briefing.
3160
- `;e.writeFileSync(b,d);let f="Client Workspace 7-day marketing plan",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=V({kind:"marketing-plan",title:f,agent:"Marketing Strategist Agent",agent_id:"marketing-strategist",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return W({run_id:j.id,agent_id:"marketing-strategist",file_path:(0,i.z9)(b),kind:"document",title:f,content:h,source_md:g}),j}function ai({triggered_by:a="manual"}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=b.prepare("SELECT * FROM agents WHERE generated = 1").all().map(B);for(let a of d){let d,g=f.join(i.bo,a.id,"heartbeat.json");try{d=JSON.parse(e.readFileSync(g,"utf8"))}catch{d={...a}}d.status="heartbeat ok",d.last_heartbeat=c,d.next_run="on demand"===d.schedule?null:"next scheduled window",e.mkdirSync(f.dirname(g),{recursive:!0}),e.writeFileSync(g,JSON.stringify(d,null,2)),b.prepare("UPDATE agents SET last_heartbeat = ?, status = ? WHERE id = ?").run(c,"heartbeat ok",a.id)}return V({kind:"heartbeat",title:"Heartbeat tick completed",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"workspace/agents/*/heartbeat.json",preview:`Heartbeat checked ${d.length} agents at ${c}`,triggered_by:a})}function aj(a={},{triggered_by:b="manual"}={}){let c=Math.max(1,Math.min(50,Number(process.env.MAX_CLAUDE_TURNS||12)||12)),d=String(a.prompt||"Build a Client Workspace UI mockup and run browser QA.").replace(/\s+/g," ").slice(0,500),e=`claude -p ${JSON.stringify(d)} --allowedTools "Read,Write,Edit,Bash" --max-turns ${c} --output-format json`;return V({kind:"claude-code-dry-run",title:"Claude Code local runner command prepared",agent:"madarX Main Agent",agent_id:"main-orchestrator",status:"approval-needed",artifact:"audit log only - not executed",command:e,preview:`Approval required before executing:
3161
- ${e}`,triggered_by:b})}function ak({project_id:a=null}={}){(0,i.Jh)();let b=(0,r.hC)(),c=a||null;if(c)try{let a=(0,q.hF)({status:"all"}).find(a=>a.id===c||a.slug===c);a&&(c=a.id)}catch{}let d=a=>!c||a?.project_id===c;return{ok:!0,product:"madarX OS",workspace:"Client Workspace",project_filter:c||null,projects:(0,q.hF)({status:"all"}),agents:E().filter(d),tasks:(0,r.Vk)({limit:100}).filter(d),runs:N(20).filter(d),audit:Q(20).filter(d),activity:(0,r.kP)({limit:50}).filter(d),schedules:M().filter(d),connectors:(0,h.getDb)().prepare("SELECT * FROM connectors ORDER BY name ASC").all(),artifacts:R(500).filter(a=>d(a)||a.pinned_to_space_at),heartbeat_tasks:(0,n.N$)(20).filter(d),heartbeat_task_events:(0,n.vK)({limit:100}).filter(a=>!c||a.project_id===c||(0,h.getDb)().prepare("SELECT project_id FROM heartbeat_tasks WHERE id=?").get(a.task_id)?.project_id===c),approvals:(0,o.ct)({project_id:c,limit:20}),pending_approvals:(0,o.ct)({status:"pending",project_id:c,limit:20}),local_processes:function(a=20){return(0,h.getDb)().prepare("SELECT * FROM local_processes ORDER BY updated_at DESC LIMIT ?").all(a)}(20),local_tool_audit:Q(50).filter(a=>String(a.type||"").startsWith("local.")&&d(a)).slice(0,20),main_agent_trust_mode:(0,s.yC)(),reporting:b,processes:function(a){try{let b=(0,h.getDb)(),c=a?"WHERE project_id = ?":"",d=a?[a]:[],e=b.prepare(`SELECT id, definition_slug, project_id, title, status, current_stage_slug, updated_at, completed_at
3160
+ `;e.writeFileSync(b,d);let f="Client Workspace 7-day marketing plan",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=W({kind:"marketing-plan",title:f,agent:"Marketing Strategist Agent",agent_id:"marketing-strategist",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return X({run_id:j.id,agent_id:"marketing-strategist",file_path:(0,i.z9)(b),kind:"document",title:f,content:h,source_md:g}),j}function aj({triggered_by:a="manual"}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=b.prepare("SELECT * FROM agents WHERE generated = 1").all().map(C);for(let a of d){let d,g=f.join(i.bo,a.id,"heartbeat.json");try{d=JSON.parse(e.readFileSync(g,"utf8"))}catch{d={...a}}d.status="heartbeat ok",d.last_heartbeat=c,d.next_run="on demand"===d.schedule?null:"next scheduled window",e.mkdirSync(f.dirname(g),{recursive:!0}),e.writeFileSync(g,JSON.stringify(d,null,2)),b.prepare("UPDATE agents SET last_heartbeat = ?, status = ? WHERE id = ?").run(c,"heartbeat ok",a.id)}return W({kind:"heartbeat",title:"Heartbeat tick completed",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"workspace/agents/*/heartbeat.json",preview:`Heartbeat checked ${d.length} agents at ${c}`,triggered_by:a})}function ak(a={},{triggered_by:b="manual"}={}){let c=Math.max(1,Math.min(50,Number(process.env.MAX_CLAUDE_TURNS||12)||12)),d=String(a.prompt||"Build a Client Workspace UI mockup and run browser QA.").replace(/\s+/g," ").slice(0,500),e=`claude -p ${JSON.stringify(d)} --allowedTools "Read,Write,Edit,Bash" --max-turns ${c} --output-format json`;return W({kind:"claude-code-dry-run",title:"Claude Code local runner command prepared",agent:"madarX Main Agent",agent_id:"main-orchestrator",status:"approval-needed",artifact:"audit log only - not executed",command:e,preview:`Approval required before executing:
3161
+ ${e}`,triggered_by:b})}function al({project_id:a=null}={}){(0,i.Jh)();let b=(0,r.hC)(),c=a||null;if(c)try{let a=(0,q.hF)({status:"all"}).find(a=>a.id===c||a.slug===c);a&&(c=a.id)}catch{}let d=a=>!c||a?.project_id===c;return{ok:!0,product:"madarX OS",workspace:"Client Workspace",project_filter:c||null,projects:(0,q.hF)({status:"all"}),agents:F().filter(d),tasks:(0,r.Vk)({limit:100}).filter(d),runs:O(20).filter(d),audit:R(20).filter(d),activity:(0,r.kP)({limit:50}).filter(d),schedules:N().filter(d),connectors:(0,h.getDb)().prepare("SELECT * FROM connectors ORDER BY name ASC").all(),artifacts:S(500).filter(a=>d(a)||a.pinned_to_space_at),heartbeat_tasks:(0,n.N$)(20).filter(d),heartbeat_task_events:(0,n.vK)({limit:100}).filter(a=>!c||a.project_id===c||(0,h.getDb)().prepare("SELECT project_id FROM heartbeat_tasks WHERE id=?").get(a.task_id)?.project_id===c),approvals:(0,o.ct)({project_id:c,limit:20}),pending_approvals:(0,o.ct)({status:"pending",project_id:c,limit:20}),local_processes:function(a=20){return(0,h.getDb)().prepare("SELECT * FROM local_processes ORDER BY updated_at DESC LIMIT ?").all(a)}(20),local_tool_audit:R(50).filter(a=>String(a.type||"").startsWith("local.")&&d(a)).slice(0,20),main_agent_trust_mode:(0,s.yC)(),reporting:b,processes:function(a){try{let b=(0,h.getDb)(),c=a?"WHERE project_id = ?":"",d=a?[a]:[],e=b.prepare(`SELECT id, definition_slug, project_id, title, status, current_stage_slug, updated_at, completed_at
3162
3162
  FROM process_cases ${c}
3163
3163
  ORDER BY updated_at DESC
3164
- LIMIT 20`).all(...d),f=b.prepare(`SELECT status, COUNT(*) AS n FROM process_cases ${c} GROUP BY status`).all(...d).reduce((a,b)=>(a[b.status]=b.n,a),{});return{active_count:["intake","running","awaiting_approval"].reduce((a,b)=>a+(f[b]||0),0),by_status:f,recent_cases:e}}catch{return{active_count:0,by_status:{},recent_cases:[]}}}(c),hail:function(){try{let a=(0,h.getDb)().prepare("SELECT current_stage AS stage, COUNT(*) AS n FROM hail_engagements WHERE status = 'active' GROUP BY current_stage").all().reduce((a,b)=>(a[b.stage]=b.n,a),{});return{active_count:Object.values(a).reduce((a,b)=>a+b,0),by_stage:a}}catch{return{active_count:0,by_stage:{}}}}()}}function al(a){return a?{id:a.id,title:a.title,model:a.model,created_at:a.created_at,last_message_at:a.last_message_at,message_count:a.message_count,total_input_tokens:a.total_input_tokens,total_output_tokens:a.total_output_tokens,total_cache_read_tokens:a.total_cache_read_tokens,total_cache_creation_tokens:a.total_cache_creation_tokens,last_context_tokens:a.last_context_tokens}:null}function am(a){return a?{id:a.id,session_id:a.session_id,role:a.role,content:a.content,tool_calls:A(a.tool_calls,null),model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cache_read_tokens:a.cache_read_tokens,cache_creation_tokens:a.cache_creation_tokens,at:a.at}:null}function an(a=50){return(0,h.getDb)().prepare("SELECT * FROM chat_sessions ORDER BY COALESCE(last_message_at, created_at) DESC LIMIT ?").all(a).map(al)}function ao(a){let b=(0,h.getDb)(),c=b.prepare("SELECT * FROM chat_sessions WHERE id = ?").get(a);if(!c)return null;let d=b.prepare("SELECT * FROM chat_messages WHERE session_id = ? ORDER BY at ASC").all(a).map(am);return{...al(c),messages:d}}function ap({title:a=null,model:b=null}={}){let c=(0,h.getDb)(),d=(0,h.newId)("chat"),e=(0,h.nowIso)();return c.prepare(`
3164
+ LIMIT 20`).all(...d),f=b.prepare(`SELECT status, COUNT(*) AS n FROM process_cases ${c} GROUP BY status`).all(...d).reduce((a,b)=>(a[b.status]=b.n,a),{});return{active_count:["intake","running","awaiting_approval"].reduce((a,b)=>a+(f[b]||0),0),by_status:f,recent_cases:e}}catch{return{active_count:0,by_status:{},recent_cases:[]}}}(c),hail:function(){try{let a=(0,h.getDb)().prepare("SELECT current_stage AS stage, COUNT(*) AS n FROM hail_engagements WHERE status = 'active' GROUP BY current_stage").all().reduce((a,b)=>(a[b.stage]=b.n,a),{});return{active_count:Object.values(a).reduce((a,b)=>a+b,0),by_stage:a}}catch{return{active_count:0,by_stage:{}}}}()}}function am(a){return a?{id:a.id,title:a.title,model:a.model,created_at:a.created_at,last_message_at:a.last_message_at,message_count:a.message_count,total_input_tokens:a.total_input_tokens,total_output_tokens:a.total_output_tokens,total_cache_read_tokens:a.total_cache_read_tokens,total_cache_creation_tokens:a.total_cache_creation_tokens,last_context_tokens:a.last_context_tokens}:null}function an(a){return a?{id:a.id,session_id:a.session_id,role:a.role,content:a.content,tool_calls:B(a.tool_calls,null),model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cache_read_tokens:a.cache_read_tokens,cache_creation_tokens:a.cache_creation_tokens,at:a.at}:null}function ao(a=50){return(0,h.getDb)().prepare("SELECT * FROM chat_sessions ORDER BY COALESCE(last_message_at, created_at) DESC LIMIT ?").all(a).map(am)}function ap(a){let b=(0,h.getDb)(),c=b.prepare("SELECT * FROM chat_sessions WHERE id = ?").get(a);if(!c)return null;let d=b.prepare("SELECT * FROM chat_messages WHERE session_id = ? ORDER BY at ASC").all(a).map(an);return{...am(c),messages:d}}function aq({title:a=null,model:b=null}={}){let c=(0,h.getDb)(),d=(0,h.newId)("chat"),e=(0,h.nowIso)();return c.prepare(`
3165
3165
  INSERT INTO chat_sessions
3166
3166
  (id, title, model, created_at, last_message_at, message_count,
3167
3167
  total_input_tokens, total_output_tokens,
3168
3168
  total_cache_read_tokens, total_cache_creation_tokens, last_context_tokens)
3169
3169
  VALUES (?, ?, ?, ?, ?, 0, 0, 0, 0, 0, 0)
3170
- `).run(d,a,b,e,e),{id:d,title:a,model:b,created_at:e,last_message_at:e}}function aq(a,{role:b,content:c="",tool_calls:d=null,model:e=null,input_tokens:f=0,output_tokens:g=0,cache_read_tokens:i=0,cache_creation_tokens:j=0}={}){if(!b)throw Error("role required");let k=(0,h.getDb)(),l=k.prepare("SELECT * FROM chat_sessions WHERE id = ?").get(a);if(!l)throw Error(`chat session ${a} not found`);let m=(0,h.newId)("msg"),n=(0,h.nowIso)(),o=d?JSON.stringify(d):null;k.prepare(`
3170
+ `).run(d,a,b,e,e),{id:d,title:a,model:b,created_at:e,last_message_at:e}}function ar(a,{role:b,content:c="",tool_calls:d=null,model:e=null,input_tokens:f=0,output_tokens:g=0,cache_read_tokens:i=0,cache_creation_tokens:j=0}={}){if(!b)throw Error("role required");let k=(0,h.getDb)(),l=k.prepare("SELECT * FROM chat_sessions WHERE id = ?").get(a);if(!l)throw Error(`chat session ${a} not found`);let m=(0,h.newId)("msg"),n=(0,h.nowIso)(),o=d?JSON.stringify(d):null;k.prepare(`
3171
3171
  INSERT INTO chat_messages
3172
3172
  (id, session_id, role, content, tool_calls, model,
3173
3173
  input_tokens, output_tokens, cache_read_tokens, cache_creation_tokens, at)
@@ -3184,11 +3184,11 @@ ${e}`,triggered_by:b})}function ak({project_id:a=null}={}){(0,i.Jh)();let b=(0,r
3184
3184
  total_cache_creation_tokens = total_cache_creation_tokens + ?,
3185
3185
  last_context_tokens = CASE WHEN ? > 0 THEN ? ELSE last_context_tokens END
3186
3186
  WHERE id = ?
3187
- `).run(p,e,n,0|f,0|g,0|i,0|j,q,q,a),{id:m,session_id:a,role:b,at:n}}function ar(a,b){let c=(0,h.getDb)(),d=String(b||"").slice(0,200);return{ok:c.prepare("UPDATE chat_sessions SET title = ? WHERE id = ?").run(d,a).changes>0}}function as(a){return{ok:(0,h.getDb)().prepare("DELETE FROM chat_sessions WHERE id = ?").run(a).changes>0}}function at(a={}){let b=String(a.prompt||"").trim(),c=b.toLowerCase(),d=String(a.channel||"http"),e=a.from?String(a.from):null,f=(a,b)=>"whatsapp"!==d?a:{...a,channel:d,from:e,reply_text:function(a,b){if(!a)return b||"";let c=[];return a.title&&c.push(a.title),a.preview&&c.push(a.preview),!c.length&&b&&c.push(b),c.join("\n\n").replace(/`{1,3}/g,"").replace(/\*\*/g,"").replace(/<\/?[^>]+>/g,"").trim()}(a,b)};if(!b)return f(V({kind:"orchestrator-note",title:"Empty orchestrator command",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"none",preview:"Type a command for the madarX Main Agent."}),"Type a command for the madarX Main Agent.");if(c.includes("create agent")||c.includes("new agent")){let a=[];c.includes("instagram")&&a.push("instagram-public-view"),c.includes("tiktok")&&a.push("tiktok-public-view"),c.includes("web")&&a.push("web-search"),c.includes("browser")&&a.push("browser"),(c.includes("scrap")||c.includes("scrape"))&&a.push("browser-scrape"),(c.includes("mail")||c.includes("email"))&&a.push("gmail-draft"),(c.includes("ui")||c.includes("mockup")||c.includes("landing"))&&a.push("claude-code","browser-qa"),a.length||a.push("web-search","browser","files","cron");let d=c.includes("noon")?"daily 12:00":c.includes("08:15")?"daily 08:15":c.includes("daily")?"daily 07:30":"on demand",e=aa({name:function(a){let b=String(a||"").match(/create(?: an)? agent\s+([a-z0-9][a-z0-9\s-]{2,60}?)(?:\s+with|\s+to|\s+for|\s+every|\s+daily|$)/i);return b?b[1].trim().replace(/\s+/g," "):"Client Workspace Custom Agent"}(b),type:"custom",mission:b,schedule:d,tools:a});"on demand"!==d&&ae({agent_id:e.agent.id,schedule:d,action_kind:"agent-tick"});let g=V({kind:"agent-created",title:`Created ${e.agent.name}`,agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:e.files.join(", "),preview:`${e.agent.name} created with ${e.files.length} local files.`,triggered_by:"orchestrator"});return f({...g,created_agent:e.agent,files:e.files},`${e.agent.name} created with ${e.files.length} local files.`)}return c.includes("marketing")||c.includes("content plan")||c.includes("social media")?f(ah({triggered_by:"orchestrator"}),"Marketing plan generated."):c.includes("competitor")||c.includes("daily report")?f(ag({triggered_by:"orchestrator"}),"Competitor report generated."):c.includes("heartbeat")||c.includes("schedule tick")?f(ai({triggered_by:"orchestrator"}),"Heartbeat tick completed."):c.includes("claude")||c.includes("ui mockup")||c.includes("website")||c.includes("landing page")?f(aj({prompt:b},{triggered_by:"orchestrator"}),"Claude Code command prepared. Approve in the dashboard to execute."):f(V({kind:"orchestrator-plan",title:"Main agent routed command",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"audit log",preview:`Main agent received: ${b}
3187
+ `).run(p,e,n,0|f,0|g,0|i,0|j,q,q,a),{id:m,session_id:a,role:b,at:n}}function as(a,b){let c=(0,h.getDb)(),d=String(b||"").slice(0,200);return{ok:c.prepare("UPDATE chat_sessions SET title = ? WHERE id = ?").run(d,a).changes>0}}function at(a){return{ok:(0,h.getDb)().prepare("DELETE FROM chat_sessions WHERE id = ?").run(a).changes>0}}function au(a={}){let b=String(a.prompt||"").trim(),c=b.toLowerCase(),d=String(a.channel||"http"),e=a.from?String(a.from):null,f=(a,b)=>"whatsapp"!==d?a:{...a,channel:d,from:e,reply_text:function(a,b){if(!a)return b||"";let c=[];return a.title&&c.push(a.title),a.preview&&c.push(a.preview),!c.length&&b&&c.push(b),c.join("\n\n").replace(/`{1,3}/g,"").replace(/\*\*/g,"").replace(/<\/?[^>]+>/g,"").trim()}(a,b)};if(!b)return f(W({kind:"orchestrator-note",title:"Empty orchestrator command",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"none",preview:"Type a command for the madarX Main Agent."}),"Type a command for the madarX Main Agent.");if(c.includes("create agent")||c.includes("new agent")){let a=[];c.includes("instagram")&&a.push("instagram-public-view"),c.includes("tiktok")&&a.push("tiktok-public-view"),c.includes("web")&&a.push("web-search"),c.includes("browser")&&a.push("browser"),(c.includes("scrap")||c.includes("scrape"))&&a.push("browser-scrape"),(c.includes("mail")||c.includes("email"))&&a.push("gmail-draft"),(c.includes("ui")||c.includes("mockup")||c.includes("landing"))&&a.push("claude-code","browser-qa"),a.length||a.push("web-search","browser","files","cron");let d=c.includes("noon")?"daily 12:00":c.includes("08:15")?"daily 08:15":c.includes("daily")?"daily 07:30":"on demand",e=ab({name:function(a){let b=String(a||"").match(/create(?: an)? agent\s+([a-z0-9][a-z0-9\s-]{2,60}?)(?:\s+with|\s+to|\s+for|\s+every|\s+daily|$)/i);return b?b[1].trim().replace(/\s+/g," "):"Client Workspace Custom Agent"}(b),type:"custom",mission:b,schedule:d,tools:a});"on demand"!==d&&af({agent_id:e.agent.id,schedule:d,action_kind:"agent-tick"});let g=W({kind:"agent-created",title:`Created ${e.agent.name}`,agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:e.files.join(", "),preview:`${e.agent.name} created with ${e.files.length} local files.`,triggered_by:"orchestrator"});return f({...g,created_agent:e.agent,files:e.files},`${e.agent.name} created with ${e.files.length} local files.`)}return c.includes("marketing")||c.includes("content plan")||c.includes("social media")?f(ai({triggered_by:"orchestrator"}),"Marketing plan generated."):c.includes("competitor")||c.includes("daily report")?f(ah({triggered_by:"orchestrator"}),"Competitor report generated."):c.includes("heartbeat")||c.includes("schedule tick")?f(aj({triggered_by:"orchestrator"}),"Heartbeat tick completed."):c.includes("claude")||c.includes("ui mockup")||c.includes("website")||c.includes("landing page")?f(ak({prompt:b},{triggered_by:"orchestrator"}),"Claude Code command prepared. Approve in the dashboard to execute."):f(W({kind:"orchestrator-plan",title:"Main agent routed command",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"audit log",preview:`Main agent received: ${b}
3188
3188
 
3189
- Next action: choose a specialized agent, create a local run folder, keep human-in-loop approval before external actions.`,triggered_by:"orchestrator"}),`Received: ${b}`)}async function au({once:a=!0}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=Number(process.env.MADARX_BACKFILL_MAX_WINDOWS||10),e=b.prepare(`SELECT *, created_by_user_id FROM schedules
3189
+ Next action: choose a specialized agent, create a local run folder, keep human-in-loop approval before external actions.`,triggered_by:"orchestrator"}),`Received: ${b}`)}async function av({once:a=!0}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=Number(process.env.MADARX_BACKFILL_MAX_WINDOWS||10),e=b.prepare(`SELECT *, created_by_user_id FROM schedules
3190
3190
  WHERE enabled = 1 AND next_run_at IS NOT NULL AND next_run_at <= ?
3191
- ORDER BY next_run_at ASC`).all(c),f=[];for(let a of e)try{let e=a.created_by_user_id||null,g=a.catchup_policy||"fire_all",i=[],j=a.next_run_at;for(;j<=c&&i.length<d&&(i.push(j),j=(0,k.F)(a.schedule,j)););let l=0;if(j&&j<=c){let b=j;for(;b&&b<=c;)l++,b=(0,k.F)(a.schedule,b);j=b}let m="fire_once"===g?i.slice(-1):"skip"===g?[]:i;for(let c of m){let d=`hbtask-${a.id}-${String(c).replace(/[^a-zA-Z0-9]/g,"")}`,g=(0,n.aJ)({id:d,type:"agent_tick",agent_id:a.agent_id,schedule_id:a.id,max_attempts:Number(process.env.MADARX_AGENT_TICK_MAX_ATTEMPTS||1),payload:{type:a.action_kind||"agent-tick",agent_id:a.agent_id,schedule_id:a.id,prompt:`Run ${a.agent_name||a.agent_id} scheduled heartbeat`,tools_allowed:["web_search","file_read","create_artifact"]},run_after:c});if(e&&g?.id)try{b.prepare("UPDATE heartbeat_tasks SET acting_on_behalf_of_user_id = ? WHERE id = ?").run(e,g.id)}catch(a){console.warn("[cron] acting_on_behalf_of_user_id update failed:",a.message)}U({type:"cron.schedule.queued",summary:`Queued ${a.agent_name||a.agent_id} \xb7 ${a.action_kind}`,status:"queued",meta:{schedule_id:a.id,task_id:g?.id,window:c,acting_on_behalf_of_user_id:e}}),f.push(g)}let o=i.at(-1)||a.next_run_at;b.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, last_queued_at=?, last_queued_window=?, updated_at=? WHERE id=?").run(o,j,(0,h.nowIso)(),o,(0,h.nowIso)(),a.id),(i.length>1||l>0||"fire_all"!==g&&i.length>0)&&U({type:"cron.schedule.backfilled",summary:`Backfilled ${a.agent_name||a.agent_id}: fired ${m.length}/${i.length} missed windows`,status:"queued",meta:{schedule_id:a.id,missed_count:i.length,fired_count:m.length,truncated_count:l,policy:g,oldest:i[0]||null,newest:i.at(-1)||null}})}catch(b){f.push(V({kind:"cron-error",title:`Cron failed: ${a.id}`,status:"failed",agent:a.agent_name,agent_id:a.agent_id,preview:b.message,triggered_by:"cron"})),function(a,b=null){let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM schedules WHERE id = ?").get(a);if(!d)return;let e=b||(0,h.nowIso)(),f=(0,k.F)(d.schedule,e),g=(0,h.nowIso)();c.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, updated_at=? WHERE id=?").run(e,f,g,a)}(a.id,a.next_run_at)}return{ok:!0,once:a,executed:f.filter(Boolean).length,tasks:f}}async function av({lastTickAt:a=null,intervalMs:b=3e4}={}){let{recoverStaleHeartbeatTasks:d}=await Promise.resolve().then(c.bind(c,40563));if(null!==a&&Date.now()-a>2*b)try{await d()}catch(a){console.warn("[cron] stale recovery failed:",a?.message||a)}return au({once:!0})}[h,j,l,m,n,o,p,q,r,s,u,v]=x.then?(await x)():x,d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";c.d(b,{R2:()=>n,fP:()=>l});let d=[{slug:"anthropic",title:"Anthropic",description:"Power any agent running on the Anthropic engine (Claude Opus, Sonnet, Haiku). Your key is encrypted on this Mac and never leaves the vault.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://console.anthropic.com/settings/keys",version:null,risk_summary:"API key only — no destructive scope.",tags:["engine","anthropic","claude"],manifest:{service_key:"anthropic",setup_kind:"api_key",benefit:"Unlock the Anthropic engine for sub-agents and the main agent. Required for /api/orchestrator/command on default mode.",credentials:[{name:"ANTHROPIC_API_KEY",label:"API key",type:"password",placeholder:"sk-ant-…",help_url:"https://console.anthropic.com/settings/keys",help_text:"Generate a key in the Anthropic console.",required:!0}],verify_endpoint:"/api/connections/anthropic/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["anthropic"],logo_glyph:"anthropic"}},{slug:"openai",title:"OpenAI",description:"Use OpenAI models for agents that prefer GPT. Stored encrypted; never echoed back.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.openai.com/api-keys",version:null,risk_summary:"API key only.",tags:["engine","openai","gpt"],manifest:{service_key:"openai",setup_kind:"api_key",benefit:"Unlock OpenAI models for agents and transcription.",credentials:[{name:"OPENAI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.openai.com/api-keys",help_text:"Create a key in the OpenAI dashboard.",required:!0}],verify_endpoint:"/api/connections/openai/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["openai"],logo_glyph:"openai"}},{slug:"kimi",title:"Kimi (Moonshot)",description:"Connect Moonshot AI — Kimi models for long-context Chinese + English reasoning. Stored encrypted.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.moonshot.ai/console/api-keys",version:null,risk_summary:"API key only.",tags:["engine","kimi","moonshot"],manifest:{service_key:"kimi",setup_kind:"api_key",benefit:"Unlock Kimi (Moonshot) models for the kimi engine.",credentials:[{name:"KIMI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.moonshot.ai/console/api-keys",help_text:"Create a key in the Moonshot console.",required:!0}],verify_endpoint:"/api/connections/kimi/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["kimi"],logo_glyph:"kimi"}},{slug:"github",title:"GitHub",description:"Unlock 11 GitHub tools: read repos, list PRs, create issues, dispatch workflows, and (with approval) merge PRs. Token is encrypted at rest.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://github.com/settings/tokens",version:null,risk_summary:"Some GitHub tools are irreversible (e.g. gh_pr_merge) and always require approval.",tags:["integration","github","git"],manifest:{service_key:"github",setup_kind:"api_key",benefit:"Unlock 11 GitHub tools across read, issue, and PR workflows.",credentials:[{name:"GITHUB_TOKEN",label:"Personal access token",type:"password",placeholder:"ghp_…",help_url:"https://github.com/settings/tokens",help_text:"Use a fine-grained token. Grant only the scopes you need.",required:!0}],verify_endpoint:"/api/connections/github/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["gh_repo_read","gh_repo_list","gh_issue_list","gh_issue_create","gh_issue_comment","gh_pr_list","gh_pr_create","gh_pr_comment","gh_pr_merge","gh_actions_dispatch","gh_release_create"],engines:[],logo_glyph:"github"}},{slug:"resend",title:"Resend",description:"Send transactional email. A default recipient_domain allowlist is seeded from git config user.email — add more in the marketplace afterwards.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://resend.com/api-keys",version:null,risk_summary:"email_send is irreversible and always requires approval.",tags:["integration","email","resend"],manifest:{service_key:"resend",setup_kind:"api_key",benefit:"Unlock email_send and email_status_lookup for transactional email.",credentials:[{name:"RESEND_API_KEY",label:"API key",type:"password",placeholder:"re_…",help_url:"https://resend.com/api-keys",help_text:"Create a Resend API key.",required:!0},{name:"RESEND_FROM_EMAIL",label:"From email",type:"text",placeholder:"agent@yourdomain.com",help_url:"https://resend.com/domains",help_text:"A verified sender address on a verified Resend domain.",required:!0}],verify_endpoint:"/api/connections/resend/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["email_send","email_status_lookup"],engines:[],logo_glyph:"resend"}},{slug:"supabase",title:"Supabase",description:"Connect a Supabase project. Service role key bypasses RLS — destructive ops (supabase_rest_delete, supabase_sql) are always approval-gated.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://supabase.com/dashboard",version:null,risk_summary:"Service role key bypasses Row-Level Security. Some tools (supabase_sql) always require approval.",tags:["integration","database","supabase"],manifest:{service_key:"supabase",setup_kind:"api_key",benefit:"Unlock 7 Supabase tools: REST select/insert/upsert/update/delete, RPC, and SQL.",credentials:[{name:"SUPABASE_URL",label:"Project URL",type:"text",placeholder:"https://xxxx.supabase.co",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → Project URL.",required:!0},{name:"SUPABASE_SERVICE_ROLE_KEY",label:"Service role key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → service_role. Treat as a database password.",required:!1},{name:"SUPABASE_ANON_KEY",label:"Anon key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → anon. Used for verify when service-role is absent.",required:!1},{name:"SUPABASE_ACCESS_TOKEN",label:"Personal access token",type:"password",placeholder:"sbp_…",help_url:"https://supabase.com/dashboard/account/tokens",help_text:"Required only if you want the agent to list / manage your Supabase projects via the Management API. Distinct from the project keys above.",required:!1}],verify_endpoint:"/api/connections/supabase/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["supabase_list_projects","supabase_rest_select","supabase_rest_insert","supabase_rest_upsert","supabase_rest_update","supabase_rest_delete","supabase_rpc","supabase_sql"],engines:[],logo_glyph:"supabase"}},{slug:"vercel",title:"Vercel",description:"Trigger deployments and read project state. v1 saves the token without a live verify — failures surface on first call.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://vercel.com/account/tokens",version:null,risk_summary:"vercel_create_deployment is high risk and approval-gated.",tags:["integration","vercel","deploy"],manifest:{service_key:"vercel",setup_kind:"api_key",benefit:"Unlock 3 Vercel tools: list projects, list deployments, create deployment.",credentials:[{name:"VERCEL_TOKEN",label:"Access token",type:"password",placeholder:"vercel_…",help_url:"https://vercel.com/account/tokens",help_text:"Create a token scoped to the right team.",required:!0},{name:"VERCEL_TEAM_ID",label:"Team ID (optional)",type:"text",placeholder:"team_…",help_url:"https://vercel.com/teams",help_text:"Only required for team-scoped tokens.",required:!1}],verify_endpoint:"/api/connections/vercel/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["vercel_list_projects","vercel_list_deployments","vercel_create_deployment"],engines:[],logo_glyph:"vercel"}},{slug:"whatsapp",title:"WhatsApp",description:"Text the main agent like you text Hermes. Pairs a dedicated WhatsApp number via Baileys. Operations (allowlist, message log) live at /whatsapp.",category:"channel",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Pair only a dedicated number — Baileys is an unofficial Web client; the paired account can be banned.",tags:["channel","whatsapp","messaging"],manifest:{service_key:"whatsapp",setup_kind:"qr_pair",benefit:"Receive WhatsApp messages and let the main agent reply through your number.",credentials:[],verify_endpoint:"/api/connections/whatsapp/verify",verify_supported:!0,deep_link:"/whatsapp",requires_daemon:"npm run whatsapp:bridge",supports_scopes:["global"],unlocks_tool_slugs:["whatsapp_send"],engines:[],logo_glyph:"whatsapp"}},{slug:"hermes",title:"Hermes Agent",description:"Route long-running orchestrator jobs to the local Hermes binary. Detection probes ../hermes-agent and scripts/hermes-command.py.",category:"engine",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Local subprocess execution — Hermes jobs inherit your local env.",tags:["engine","hermes","local"],manifest:{service_key:"hermes",setup_kind:"binary_detect",benefit:"Unlock the Hermes engine and the start_hermes_job orchestrator tool.",credentials:[{name:"HERMES_AGENT_DIR",label:"Hermes agent directory (optional)",type:"text",placeholder:"/Users/you/Projects/hermes-agent",help_url:null,help_text:"Defaults to ../hermes-agent relative to this repo. Override to point at a different checkout.",required:!1}],verify_endpoint:"/api/connections/hermes/verify",verify_supported:!0,deep_link:null,supports_scopes:["global"],unlocks_tool_slugs:["start_hermes_job","send_to_hermes"],engines:["hermes"],logo_glyph:"hermes"}}];d.map(a=>a.slug);let e=[{slug:"web-prototype",title:"Open Design — Web Prototype",description:"Generate a complete production-quality web prototype from a brief."},{slug:"saas-landing",title:"Open Design — SaaS Landing",description:"Build a SaaS landing page with hero, features, social proof, pricing."},{slug:"dashboard",title:"Open Design — Dashboard",description:"Information-dense, hierarchy-driven dashboard scaffold."},{slug:"mobile-app",title:"Open Design — Mobile App",description:"Mobile-first product UI scaffold with touch targets and gestures."},{slug:"social-carousel",title:"Open Design — Social Carousel",description:"Editorial social carousel with platform-aware aspect ratios."},{slug:"magazine-poster",title:"Open Design — Magazine Poster",description:"Editorial magazine/poster typography with high contrast."},{slug:"deck-guizang-editorial",title:"Open Design — Editorial Deck",description:"Guizang editorial-style slide deck system."},{slug:"email-marketing",title:"Open Design — Email Marketing",description:"Transactional/marketing email scaffold with bulletproof HTML."},{slug:"design-brief",title:"Open Design — Design Brief",description:"Structured design brief used to seed the rest of the pipeline."},{slug:"design-review",title:"Open Design — Design Review",description:"Designer's eye plan review and visual QA pass."},{slug:"brand-guidelines",title:"Open Design — Brand Guidelines",description:"Distill or author a brand guidelines book."},{slug:"copywriting",title:"Open Design — Copywriting",description:"High-signal product copywriting craft notes and structure."}],f={slug:"open-design",title:"Open Design (nexu-io)",description:"Vendored design corpus from nexu-io/open-design: craft notes, 130+ skills, ~140 design systems, prompt + design templates. Apache-2.0.",category:"design",author:"nexu-io",source_kind:"github",source_url:"https://github.com/nexu-io/open-design",version:null,risk_summary:"Read-only design content. No code executes; no external writes.",tags:["design","craft","systems","templates","open-source","apache-2.0"],manifest:{item_refs:e.map(a=>`skill:open-design-${a.slug}`),published_count:e.length,license:"Apache-2.0",note:"Vendored under workspace/skills/open-design/. Re-vendor with `npm run vendor:open-design`. See NOTICE.md for attribution."}},g=[{slug:"design-shotgun",title:"Design Shotgun",description:"Generate multiple AI design variants for any UI surface, open a comparison board, and iterate from approved options.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only ideation — no external writes.",tags:["design","mockups","exploration"],manifest:{invocation:"/design-shotgun",file_paths:["skills/design-shotgun/SKILL.md"],trigger_examples:["explore designs","show me design variants","visual brainstorm"]}},{slug:"design-review",title:"Design Review",description:"Visual QA pass on live pages: extracts the design system in use, audits hierarchy, typography, color, and spacing, and proposes fixes.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit — fixes are proposed, not applied.",tags:["design","review","visual-qa"],manifest:{invocation:"/design-review",file_paths:["skills/design-review/SKILL.md"],trigger_examples:["review the design","visual QA","audit this page"]}},{slug:"qa-only",title:"QA Only",description:"Systematically QA a web app and produce a structured report with health score, screenshots, and repro steps. Never modifies code.",category:"review",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Report-only — no auto-fix.",tags:["qa","testing","report"],manifest:{invocation:"/qa-only",file_paths:["skills/qa-only/SKILL.md"],trigger_examples:["just report bugs","qa report only","test but do not fix"]}},{slug:"cso-audit",title:"CSO Audit",description:"Chief Security Officer mode: infrastructure-first security audit covering secrets archaeology, supply chain, OWASP Top 10, and threat modeling.",category:"security",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit; never executes destructive commands.",tags:["security","audit","owasp","threat-model"],manifest:{invocation:"/cso",file_paths:["skills/cso/SKILL.md"],trigger_examples:["security audit","threat model","OWASP review"]}}],h=[{slug:"market-research",title:"Market Research",category:"research",description:"Research any market, company, or topic across the web and deliver a cited, structured brief.",tools:["web_search","web_fetch","file_write"],risk_summary:"Read-only research; writes only the report file.",tags:["research","web","brief"],invocation:"/research",trigger_examples:["research this market","competitive landscape for X","brief me on company Y"]},{slug:"competitor-watch",title:"Competitor Watch",category:"research",description:"Track competitor pricing, features, and news on a schedule and alert you when something changes.",tools:["web_fetch","web_extract","email_send"],risk_summary:"Read-only monitoring; sends a summary email.",tags:["research","monitoring","competitive"],invocation:"/watch",trigger_examples:["watch competitor pricing","alert me when X changes","track this page weekly"]},{slug:"inbox-triage",title:"Inbox Triage",category:"comms",description:"Summarize, prioritize, and draft replies across your inbox so you act on what matters first.",tools:["gmail_messages_list","gmail_thread_read","email_send"],risk_summary:"Drafts replies; sending is approval-gated.",tags:["email","inbox","comms"],invocation:"/inbox",trigger_examples:["triage my inbox","summarize unread email","draft replies"]},{slug:"meeting-scheduler",title:"Meeting Scheduler",category:"comms",description:"Find times, schedule meetings, and send invites from your calendar and email.",tools:["calendar_events_list","calendar_event_read","email_send"],risk_summary:"Proposes times; invites are approval-gated.",tags:["calendar","scheduling","comms"],invocation:"/schedule-meeting",trigger_examples:["schedule a meeting","find a time with X","book a call next week"]},{slug:"document-extract",title:"Document Extraction",category:"documents",description:"Pull structured data and key facts from PDFs, documents, and audio into clean, usable output.",tools:["file_read","transcribe_audio","file_write"],risk_summary:"Read-only extraction; writes only the output file.",tags:["documents","extraction","pdf"],invocation:"/extract",trigger_examples:["extract data from this PDF","pull the numbers from these docs","transcribe this audio"]},{slug:"report-builder",title:"Report Builder",category:"documents",description:"Turn raw data and notes into a polished, formatted report or one-pager ready to share.",tools:["file_read","file_write"],risk_summary:"Generates a document; no external writes.",tags:["documents","reporting","writing"],invocation:"/report",trigger_examples:["build a report from this data","write a one-pager","summarize into a deck outline"]},{slug:"database-query",title:"Database Q&A",category:"data",description:"Ask questions of your database in plain English and get answers, tables, and charts.",tools:["supabase_rest_select","supabase_sql"],risk_summary:"Read-only queries by default; writes are approval-gated.",tags:["data","sql","analytics"],invocation:"/ask-data",trigger_examples:["how many orders last month","query the users table","top customers by revenue"]},{slug:"spreadsheet-analysis",title:"Spreadsheet Analysis",category:"data",description:"Clean, analyze, and summarize spreadsheets and CSVs — pivots, trends, and outliers.",tools:["file_read","file_write"],risk_summary:"Local file analysis; no external writes.",tags:["data","spreadsheet","csv"],invocation:"/analyze-sheet",trigger_examples:["analyze this spreadsheet","summarize this CSV","find trends in this data"]},{slug:"web-automation",title:"Web Automation",category:"web",description:"Fill forms, extract data, and run repetitive flows in a real browser, end to end.",tools:["browser_open","browser_act","browser_extract"],risk_summary:"Browser actions are bounded and audited.",tags:["web","automation","browser"],invocation:"/automate-web",trigger_examples:["automate this form","scrape this site","run this flow for each row"]}],i=[{slug:"gstack",title:"gstack",description:'"Senior engineering team in your terminal." 8 power tools + a stack of specialist skills for design, QA, review, security, and shipping. MIT licensed.',category:"engineering",author:"garrytan",source_kind:"builtin",source_url:"https://github.com/garrytan/gstack",version:null,risk_summary:"Mixed-risk bundle: includes read-only review skills and write-capable workflows (e.g. /ship runs git push). Per-item risk surfaces in Phase 2 when install is wired up.",tags:["engineering","skills-pack","mit"],manifest:{item_refs:["skill:design-shotgun","skill:design-review","skill:qa-only","skill:cso-audit"],published_count:4,license:"MIT",note:"Agent personas in this bundle will surface in the Agent Marketplace when it ships."}}];function j(a,b,c){let d=a.prepare("SELECT id FROM marketplace_items WHERE kind=? AND slug=?").get(b,c.slug),e=d?.id||`${b}:${c.slug}`,f=c.manifest?JSON.stringify(c.manifest):null,g=c.tags?JSON.stringify(c.tags):null;if(d)a.prepare(`
3191
+ ORDER BY next_run_at ASC`).all(c),f=[];for(let a of e)try{let e=a.created_by_user_id||null,g=a.catchup_policy||"fire_all",i=[],j=a.next_run_at;for(;j<=c&&i.length<d&&(i.push(j),j=(0,k.F)(a.schedule,j)););let l=0;if(j&&j<=c){let b=j;for(;b&&b<=c;)l++,b=(0,k.F)(a.schedule,b);j=b}let m="fire_once"===g?i.slice(-1):"skip"===g?[]:i;for(let c of m){let d=`hbtask-${a.id}-${String(c).replace(/[^a-zA-Z0-9]/g,"")}`,g=(0,n.aJ)({id:d,type:"agent_tick",agent_id:a.agent_id,schedule_id:a.id,max_attempts:Number(process.env.MADARX_AGENT_TICK_MAX_ATTEMPTS||1),payload:{type:a.action_kind||"agent-tick",agent_id:a.agent_id,schedule_id:a.id,prompt:`Run ${a.agent_name||a.agent_id} scheduled heartbeat`,tools_allowed:["web_search","file_read","create_artifact"]},run_after:c});if(e&&g?.id)try{b.prepare("UPDATE heartbeat_tasks SET acting_on_behalf_of_user_id = ? WHERE id = ?").run(e,g.id)}catch(a){console.warn("[cron] acting_on_behalf_of_user_id update failed:",a.message)}V({type:"cron.schedule.queued",summary:`Queued ${a.agent_name||a.agent_id} \xb7 ${a.action_kind}`,status:"queued",meta:{schedule_id:a.id,task_id:g?.id,window:c,acting_on_behalf_of_user_id:e}}),f.push(g)}let o=i.at(-1)||a.next_run_at;b.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, last_queued_at=?, last_queued_window=?, updated_at=? WHERE id=?").run(o,j,(0,h.nowIso)(),o,(0,h.nowIso)(),a.id),(i.length>1||l>0||"fire_all"!==g&&i.length>0)&&V({type:"cron.schedule.backfilled",summary:`Backfilled ${a.agent_name||a.agent_id}: fired ${m.length}/${i.length} missed windows`,status:"queued",meta:{schedule_id:a.id,missed_count:i.length,fired_count:m.length,truncated_count:l,policy:g,oldest:i[0]||null,newest:i.at(-1)||null}})}catch(b){f.push(W({kind:"cron-error",title:`Cron failed: ${a.id}`,status:"failed",agent:a.agent_name,agent_id:a.agent_id,preview:b.message,triggered_by:"cron"})),function(a,b=null){let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM schedules WHERE id = ?").get(a);if(!d)return;let e=b||(0,h.nowIso)(),f=(0,k.F)(d.schedule,e),g=(0,h.nowIso)();c.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, updated_at=? WHERE id=?").run(e,f,g,a)}(a.id,a.next_run_at)}return{ok:!0,once:a,executed:f.filter(Boolean).length,tasks:f}}async function aw({lastTickAt:a=null,intervalMs:b=3e4}={}){let{recoverStaleHeartbeatTasks:d}=await Promise.resolve().then(c.bind(c,40563));if(null!==a&&Date.now()-a>2*b)try{await d()}catch(a){console.warn("[cron] stale recovery failed:",a?.message||a)}return av({once:!0})}[h,j,l,m,n,o,p,q,r,s,u,v,w]=y.then?(await y)():y,d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";c.d(b,{R2:()=>n,fP:()=>l});let d=[{slug:"anthropic",title:"Anthropic",description:"Power any agent running on the Anthropic engine (Claude Opus, Sonnet, Haiku). Your key is encrypted on this Mac and never leaves the vault.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://console.anthropic.com/settings/keys",version:null,risk_summary:"API key only — no destructive scope.",tags:["engine","anthropic","claude"],manifest:{service_key:"anthropic",setup_kind:"api_key",benefit:"Unlock the Anthropic engine for sub-agents and the main agent. Required for /api/orchestrator/command on default mode.",credentials:[{name:"ANTHROPIC_API_KEY",label:"API key",type:"password",placeholder:"sk-ant-…",help_url:"https://console.anthropic.com/settings/keys",help_text:"Generate a key in the Anthropic console.",required:!0}],verify_endpoint:"/api/connections/anthropic/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["anthropic"],logo_glyph:"anthropic"}},{slug:"openai",title:"OpenAI",description:"Use OpenAI models for agents that prefer GPT. Stored encrypted; never echoed back.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.openai.com/api-keys",version:null,risk_summary:"API key only.",tags:["engine","openai","gpt"],manifest:{service_key:"openai",setup_kind:"api_key",benefit:"Unlock OpenAI models for agents and transcription.",credentials:[{name:"OPENAI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.openai.com/api-keys",help_text:"Create a key in the OpenAI dashboard.",required:!0}],verify_endpoint:"/api/connections/openai/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["openai"],logo_glyph:"openai"}},{slug:"kimi",title:"Kimi (Moonshot)",description:"Connect Moonshot AI — Kimi models for long-context Chinese + English reasoning. Stored encrypted.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.moonshot.ai/console/api-keys",version:null,risk_summary:"API key only.",tags:["engine","kimi","moonshot"],manifest:{service_key:"kimi",setup_kind:"api_key",benefit:"Unlock Kimi (Moonshot) models for the kimi engine.",credentials:[{name:"KIMI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.moonshot.ai/console/api-keys",help_text:"Create a key in the Moonshot console.",required:!0}],verify_endpoint:"/api/connections/kimi/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["kimi"],logo_glyph:"kimi"}},{slug:"github",title:"GitHub",description:"Unlock 11 GitHub tools: read repos, list PRs, create issues, dispatch workflows, and (with approval) merge PRs. Token is encrypted at rest.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://github.com/settings/tokens",version:null,risk_summary:"Some GitHub tools are irreversible (e.g. gh_pr_merge) and always require approval.",tags:["integration","github","git"],manifest:{service_key:"github",setup_kind:"api_key",benefit:"Unlock 11 GitHub tools across read, issue, and PR workflows.",credentials:[{name:"GITHUB_TOKEN",label:"Personal access token",type:"password",placeholder:"ghp_…",help_url:"https://github.com/settings/tokens",help_text:"Use a fine-grained token. Grant only the scopes you need.",required:!0}],verify_endpoint:"/api/connections/github/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["gh_repo_read","gh_repo_list","gh_issue_list","gh_issue_create","gh_issue_comment","gh_pr_list","gh_pr_create","gh_pr_comment","gh_pr_merge","gh_actions_dispatch","gh_release_create"],engines:[],logo_glyph:"github"}},{slug:"resend",title:"Resend",description:"Send transactional email. A default recipient_domain allowlist is seeded from git config user.email — add more in the marketplace afterwards.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://resend.com/api-keys",version:null,risk_summary:"email_send is irreversible and always requires approval.",tags:["integration","email","resend"],manifest:{service_key:"resend",setup_kind:"api_key",benefit:"Unlock email_send and email_status_lookup for transactional email.",credentials:[{name:"RESEND_API_KEY",label:"API key",type:"password",placeholder:"re_…",help_url:"https://resend.com/api-keys",help_text:"Create a Resend API key.",required:!0},{name:"RESEND_FROM_EMAIL",label:"From email",type:"text",placeholder:"agent@yourdomain.com",help_url:"https://resend.com/domains",help_text:"A verified sender address on a verified Resend domain.",required:!0}],verify_endpoint:"/api/connections/resend/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["email_send","email_status_lookup"],engines:[],logo_glyph:"resend"}},{slug:"supabase",title:"Supabase",description:"Connect a Supabase project. Service role key bypasses RLS — destructive ops (supabase_rest_delete, supabase_sql) are always approval-gated.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://supabase.com/dashboard",version:null,risk_summary:"Service role key bypasses Row-Level Security. Some tools (supabase_sql) always require approval.",tags:["integration","database","supabase"],manifest:{service_key:"supabase",setup_kind:"api_key",benefit:"Unlock 7 Supabase tools: REST select/insert/upsert/update/delete, RPC, and SQL.",credentials:[{name:"SUPABASE_URL",label:"Project URL",type:"text",placeholder:"https://xxxx.supabase.co",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → Project URL.",required:!0},{name:"SUPABASE_SERVICE_ROLE_KEY",label:"Service role key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → service_role. Treat as a database password.",required:!1},{name:"SUPABASE_ANON_KEY",label:"Anon key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → anon. Used for verify when service-role is absent.",required:!1},{name:"SUPABASE_ACCESS_TOKEN",label:"Personal access token",type:"password",placeholder:"sbp_…",help_url:"https://supabase.com/dashboard/account/tokens",help_text:"Required only if you want the agent to list / manage your Supabase projects via the Management API. Distinct from the project keys above.",required:!1}],verify_endpoint:"/api/connections/supabase/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["supabase_list_projects","supabase_rest_select","supabase_rest_insert","supabase_rest_upsert","supabase_rest_update","supabase_rest_delete","supabase_rpc","supabase_sql"],engines:[],logo_glyph:"supabase"}},{slug:"vercel",title:"Vercel",description:"Trigger deployments and read project state. v1 saves the token without a live verify — failures surface on first call.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://vercel.com/account/tokens",version:null,risk_summary:"vercel_create_deployment is high risk and approval-gated.",tags:["integration","vercel","deploy"],manifest:{service_key:"vercel",setup_kind:"api_key",benefit:"Unlock 3 Vercel tools: list projects, list deployments, create deployment.",credentials:[{name:"VERCEL_TOKEN",label:"Access token",type:"password",placeholder:"vercel_…",help_url:"https://vercel.com/account/tokens",help_text:"Create a token scoped to the right team.",required:!0},{name:"VERCEL_TEAM_ID",label:"Team ID (optional)",type:"text",placeholder:"team_…",help_url:"https://vercel.com/teams",help_text:"Only required for team-scoped tokens.",required:!1}],verify_endpoint:"/api/connections/vercel/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["vercel_list_projects","vercel_list_deployments","vercel_create_deployment"],engines:[],logo_glyph:"vercel"}},{slug:"whatsapp",title:"WhatsApp",description:"Text the main agent like you text Hermes. Pairs a dedicated WhatsApp number via Baileys. Operations (allowlist, message log) live at /whatsapp.",category:"channel",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Pair only a dedicated number — Baileys is an unofficial Web client; the paired account can be banned.",tags:["channel","whatsapp","messaging"],manifest:{service_key:"whatsapp",setup_kind:"qr_pair",benefit:"Receive WhatsApp messages and let the main agent reply through your number.",credentials:[],verify_endpoint:"/api/connections/whatsapp/verify",verify_supported:!0,deep_link:"/whatsapp",requires_daemon:"npm run whatsapp:bridge",supports_scopes:["global"],unlocks_tool_slugs:["whatsapp_send"],engines:[],logo_glyph:"whatsapp"}},{slug:"hermes",title:"Hermes Agent",description:"Route long-running orchestrator jobs to the local Hermes binary. Detection probes ../hermes-agent and scripts/hermes-command.py.",category:"engine",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Local subprocess execution — Hermes jobs inherit your local env.",tags:["engine","hermes","local"],manifest:{service_key:"hermes",setup_kind:"binary_detect",benefit:"Unlock the Hermes engine and the start_hermes_job orchestrator tool.",credentials:[{name:"HERMES_AGENT_DIR",label:"Hermes agent directory (optional)",type:"text",placeholder:"/Users/you/Projects/hermes-agent",help_url:null,help_text:"Defaults to ../hermes-agent relative to this repo. Override to point at a different checkout.",required:!1}],verify_endpoint:"/api/connections/hermes/verify",verify_supported:!0,deep_link:null,supports_scopes:["global"],unlocks_tool_slugs:["start_hermes_job","send_to_hermes"],engines:["hermes"],logo_glyph:"hermes"}}];d.map(a=>a.slug);let e=[{slug:"web-prototype",title:"Open Design — Web Prototype",description:"Generate a complete production-quality web prototype from a brief."},{slug:"saas-landing",title:"Open Design — SaaS Landing",description:"Build a SaaS landing page with hero, features, social proof, pricing."},{slug:"dashboard",title:"Open Design — Dashboard",description:"Information-dense, hierarchy-driven dashboard scaffold."},{slug:"mobile-app",title:"Open Design — Mobile App",description:"Mobile-first product UI scaffold with touch targets and gestures."},{slug:"social-carousel",title:"Open Design — Social Carousel",description:"Editorial social carousel with platform-aware aspect ratios."},{slug:"magazine-poster",title:"Open Design — Magazine Poster",description:"Editorial magazine/poster typography with high contrast."},{slug:"deck-guizang-editorial",title:"Open Design — Editorial Deck",description:"Guizang editorial-style slide deck system."},{slug:"email-marketing",title:"Open Design — Email Marketing",description:"Transactional/marketing email scaffold with bulletproof HTML."},{slug:"design-brief",title:"Open Design — Design Brief",description:"Structured design brief used to seed the rest of the pipeline."},{slug:"design-review",title:"Open Design — Design Review",description:"Designer's eye plan review and visual QA pass."},{slug:"brand-guidelines",title:"Open Design — Brand Guidelines",description:"Distill or author a brand guidelines book."},{slug:"copywriting",title:"Open Design — Copywriting",description:"High-signal product copywriting craft notes and structure."}],f={slug:"open-design",title:"Open Design (nexu-io)",description:"Vendored design corpus from nexu-io/open-design: craft notes, 130+ skills, ~140 design systems, prompt + design templates. Apache-2.0.",category:"design",author:"nexu-io",source_kind:"github",source_url:"https://github.com/nexu-io/open-design",version:null,risk_summary:"Read-only design content. No code executes; no external writes.",tags:["design","craft","systems","templates","open-source","apache-2.0"],manifest:{item_refs:e.map(a=>`skill:open-design-${a.slug}`),published_count:e.length,license:"Apache-2.0",note:"Vendored under workspace/skills/open-design/. Re-vendor with `npm run vendor:open-design`. See NOTICE.md for attribution."}},g=[{slug:"design-shotgun",title:"Design Shotgun",description:"Generate multiple AI design variants for any UI surface, open a comparison board, and iterate from approved options.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only ideation — no external writes.",tags:["design","mockups","exploration"],manifest:{invocation:"/design-shotgun",file_paths:["skills/design-shotgun/SKILL.md"],trigger_examples:["explore designs","show me design variants","visual brainstorm"]}},{slug:"design-review",title:"Design Review",description:"Visual QA pass on live pages: extracts the design system in use, audits hierarchy, typography, color, and spacing, and proposes fixes.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit — fixes are proposed, not applied.",tags:["design","review","visual-qa"],manifest:{invocation:"/design-review",file_paths:["skills/design-review/SKILL.md"],trigger_examples:["review the design","visual QA","audit this page"]}},{slug:"qa-only",title:"QA Only",description:"Systematically QA a web app and produce a structured report with health score, screenshots, and repro steps. Never modifies code.",category:"review",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Report-only — no auto-fix.",tags:["qa","testing","report"],manifest:{invocation:"/qa-only",file_paths:["skills/qa-only/SKILL.md"],trigger_examples:["just report bugs","qa report only","test but do not fix"]}},{slug:"cso-audit",title:"CSO Audit",description:"Chief Security Officer mode: infrastructure-first security audit covering secrets archaeology, supply chain, OWASP Top 10, and threat modeling.",category:"security",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit; never executes destructive commands.",tags:["security","audit","owasp","threat-model"],manifest:{invocation:"/cso",file_paths:["skills/cso/SKILL.md"],trigger_examples:["security audit","threat model","OWASP review"]}}],h=[{slug:"market-research",title:"Market Research",category:"research",description:"Research any market, company, or topic across the web and deliver a cited, structured brief.",tools:["web_search","web_fetch","file_write"],risk_summary:"Read-only research; writes only the report file.",tags:["research","web","brief"],invocation:"/research",trigger_examples:["research this market","competitive landscape for X","brief me on company Y"]},{slug:"competitor-watch",title:"Competitor Watch",category:"research",description:"Track competitor pricing, features, and news on a schedule and alert you when something changes.",tools:["web_fetch","web_extract","email_send"],risk_summary:"Read-only monitoring; sends a summary email.",tags:["research","monitoring","competitive"],invocation:"/watch",trigger_examples:["watch competitor pricing","alert me when X changes","track this page weekly"]},{slug:"inbox-triage",title:"Inbox Triage",category:"comms",description:"Summarize, prioritize, and draft replies across your inbox so you act on what matters first.",tools:["gmail_messages_list","gmail_thread_read","email_send"],risk_summary:"Drafts replies; sending is approval-gated.",tags:["email","inbox","comms"],invocation:"/inbox",trigger_examples:["triage my inbox","summarize unread email","draft replies"]},{slug:"meeting-scheduler",title:"Meeting Scheduler",category:"comms",description:"Find times, schedule meetings, and send invites from your calendar and email.",tools:["calendar_events_list","calendar_event_read","email_send"],risk_summary:"Proposes times; invites are approval-gated.",tags:["calendar","scheduling","comms"],invocation:"/schedule-meeting",trigger_examples:["schedule a meeting","find a time with X","book a call next week"]},{slug:"document-extract",title:"Document Extraction",category:"documents",description:"Pull structured data and key facts from PDFs, documents, and audio into clean, usable output.",tools:["file_read","transcribe_audio","file_write"],risk_summary:"Read-only extraction; writes only the output file.",tags:["documents","extraction","pdf"],invocation:"/extract",trigger_examples:["extract data from this PDF","pull the numbers from these docs","transcribe this audio"]},{slug:"report-builder",title:"Report Builder",category:"documents",description:"Turn raw data and notes into a polished, formatted report or one-pager ready to share.",tools:["file_read","file_write"],risk_summary:"Generates a document; no external writes.",tags:["documents","reporting","writing"],invocation:"/report",trigger_examples:["build a report from this data","write a one-pager","summarize into a deck outline"]},{slug:"database-query",title:"Database Q&A",category:"data",description:"Ask questions of your database in plain English and get answers, tables, and charts.",tools:["supabase_rest_select","supabase_sql"],risk_summary:"Read-only queries by default; writes are approval-gated.",tags:["data","sql","analytics"],invocation:"/ask-data",trigger_examples:["how many orders last month","query the users table","top customers by revenue"]},{slug:"spreadsheet-analysis",title:"Spreadsheet Analysis",category:"data",description:"Clean, analyze, and summarize spreadsheets and CSVs — pivots, trends, and outliers.",tools:["file_read","file_write"],risk_summary:"Local file analysis; no external writes.",tags:["data","spreadsheet","csv"],invocation:"/analyze-sheet",trigger_examples:["analyze this spreadsheet","summarize this CSV","find trends in this data"]},{slug:"web-automation",title:"Web Automation",category:"web",description:"Fill forms, extract data, and run repetitive flows in a real browser, end to end.",tools:["browser_open","browser_act","browser_extract"],risk_summary:"Browser actions are bounded and audited.",tags:["web","automation","browser"],invocation:"/automate-web",trigger_examples:["automate this form","scrape this site","run this flow for each row"]}],i=[{slug:"gstack",title:"gstack",description:'"Senior engineering team in your terminal." 8 power tools + a stack of specialist skills for design, QA, review, security, and shipping. MIT licensed.',category:"engineering",author:"garrytan",source_kind:"builtin",source_url:"https://github.com/garrytan/gstack",version:null,risk_summary:"Mixed-risk bundle: includes read-only review skills and write-capable workflows (e.g. /ship runs git push). Per-item risk surfaces in Phase 2 when install is wired up.",tags:["engineering","skills-pack","mit"],manifest:{item_refs:["skill:design-shotgun","skill:design-review","skill:qa-only","skill:cso-audit"],published_count:4,license:"MIT",note:"Agent personas in this bundle will surface in the Agent Marketplace when it ships."}}];function j(a,b,c){let d=a.prepare("SELECT id FROM marketplace_items WHERE kind=? AND slug=?").get(b,c.slug),e=d?.id||`${b}:${c.slug}`,f=c.manifest?JSON.stringify(c.manifest):null,g=c.tags?JSON.stringify(c.tags):null;if(d)a.prepare(`
3192
3192
  UPDATE marketplace_items
3193
3193
  SET title=?, description=?, category=?, author=?, source_kind=?,
3194
3194
  source_url=?, version=?, manifest_json=?, risk_summary=?, tags=?
@@ -0,0 +1 @@
1
+ exports.id=51,exports.ids=[51],exports.modules={6974:(a,b,c)=>{Promise.resolve().then(c.bind(c,35271))},30677:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{"40d05ecd9b76dbbde890a9b285c1387b5a99528510":()=>e.$$RSC_SERVER_ACTION_0});var e=c(91845),f=a([e]);e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},35271:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/madarx-os/madarx-os/app/components/admin/project-switcher.jsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/madarx-os/madarx-os/app/components/admin/project-switcher.jsx","default")},86893:(a,b,c)=>{"use strict";c.d(b,{hI:()=>g,iN:()=>f,pp:()=>i,qs:()=>h});var d=c(75338),e=c(35271);function f({kicker:a="madarX OS v1.0",title:b,description:c,actions:f,hideProjectSwitcher:g,children:h}){return(0,d.jsxs)("main",{className:"admin-shell",children:[(0,d.jsxs)("header",{className:"admin-header",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"admin-kicker",children:a}),(0,d.jsx)("h1",{children:b}),c?(0,d.jsx)("p",{children:c}):null]}),(0,d.jsxs)("div",{className:"admin-header-actions",children:[g?null:(0,d.jsx)(e.default,{}),f]})]}),h]})}function g({label:a,value:b,tone:c}){return(0,d.jsxs)("div",{className:`admin-stat ${c||""}`,children:[(0,d.jsx)("b",{children:b}),(0,d.jsx)("span",{children:a})]})}function h({children:a,tone:b="neutral"}){return(0,d.jsx)("span",{className:`admin-pill ${b}`,children:a})}function i({title:a,children:b}){return(0,d.jsxs)("div",{className:"admin-empty",children:[(0,d.jsx)("b",{children:a}),(0,d.jsx)("p",{children:b})]})}},89670:(a,b,c)=>{Promise.resolve().then(c.bind(c,94657))},91845:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{$$RSC_SERVER_ACTION_0:()=>u,default:()=>p,dynamic:()=>q,runtime:()=>r});var e=c(75338),f=c(75879);c(68633);var g=c(16780),h=c(82161),i=c(86893),j=c(83963),k=c(60105),l=a([j,k]);[j,k]=l.then?(await l)():l;let q="force-dynamic",r="nodejs",s={executive:"Executive",manager:"Manager",team_lead:"Team Lead",individual_contributor:"Contributor"},t={executive:"mars",manager:"ready",team_lead:"warn",individual_contributor:"neutral"};function m(a=""){return a.split(/\s+/).map(a=>a[0]).filter(Boolean).slice(0,2).join("").toUpperCase()||"\xb7"}let u=async function(a){let b=String(a.get("agent_id")||"").trim();if(!b)return;let c=String(a.get("reports_to")||"").trim(),d={reports_to:""===c?null:c},e=String(a.get("role")||"").trim();e&&(d.role=e);let f=String(a.get("title")||"").trim();(f||a.has("title"))&&(d.title=f||null);try{(0,j.jN)(b,d)}catch(a){console.warn("updateAgentOrg failed",a?.message)}(0,g.revalidatePath)("/org"),(0,g.revalidatePath)("/agents"),(0,h.redirect)("/org")};function n({node:a,workloadById:b}){let c=function(a){if(a.role&&s[a.role])return a.role;let b=a.reports?.length||0;return b>=4?"executive":b>=2?"manager":1===b?"team_lead":"individual_contributor"}(a),d=s[c],f=t[c],g=a.reports?.length||0,h=b.get(a.id),j=Number(h?.active_tasks||0),k=Number(h?.blocked_tasks||0),l=Number(h?.completed_tasks||0),n=a.status||"created";return(0,e.jsxs)("article",{className:`org-card org-card--${c}`,"data-reports":g>0?"has":"none",children:[(0,e.jsxs)("div",{className:"org-card-head",children:[(0,e.jsx)("div",{className:"org-card-avatar","aria-hidden":"true",children:m(a.name)}),(0,e.jsxs)("div",{className:"org-card-identity",children:[(0,e.jsx)("div",{className:"org-card-name",children:a.name}),(0,e.jsx)("div",{className:"org-card-title",children:a.title||a.mission?.slice(0,64)||"No title set"})]})]}),(0,e.jsxs)("div",{className:"org-card-meta",children:[(0,e.jsx)(i.qs,{tone:f,children:d}),(0,e.jsx)(i.qs,{tone:"heartbeat ok"===n?"ready":"terminated"===n?"danger":"neutral",children:n}),g>0?(0,e.jsxs)(i.qs,{tone:"neutral",children:[g," report",1===g?"":"s"]}):null]}),(0,e.jsxs)("dl",{className:"org-card-stats",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("dt",{children:"Active"}),(0,e.jsx)("dd",{children:j})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)("dt",{children:"Blocked"}),(0,e.jsx)("dd",{className:k?"is-warn":"",children:k})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)("dt",{children:"Done"}),(0,e.jsx)("dd",{children:l})]})]})]})}function o({node:a,workloadById:b}){let c=(a.reports||[]).length>0;return(0,e.jsxs)("li",{className:"org-branch",children:[(0,e.jsx)(n,{node:a,workloadById:b}),c?(0,e.jsx)("ul",{className:"org-children",children:a.reports.map(a=>(0,e.jsx)(o,{node:a,workloadById:b},a.id))}):null]})}function p(){let a=(0,j.zP)(),b=(0,j.hC)(),c=(0,k.vc)(),d=new Map((b.workload||[]).map(a=>[a.agent_id,a])),f=c.filter(a=>c.some(b=>b.reports_to===a.id)).length,g=c.filter(a=>!a.reports_to&&a.id).length;return(0,e.jsxs)(i.iN,{title:"Agent chart",description:"Company-style structure for your agent workforce. Set managers, define roles, and see workload at a glance.",children:[(0,e.jsxs)("section",{className:"admin-stats",children:[(0,e.jsx)(i.hI,{label:"Headcount",value:b.totals.active_agents}),(0,e.jsx)(i.hI,{label:"Leaders",value:f}),(0,e.jsx)(i.hI,{label:"Root nodes",value:g}),(0,e.jsx)(i.hI,{label:"Active tasks",value:b.totals.active_tasks})]}),(0,e.jsxs)("section",{className:"admin-panel",children:[(0,e.jsxs)("div",{className:"admin-panel-head",children:[(0,e.jsx)("span",{children:"Agent chart"}),(0,e.jsx)("small",{children:"Top-down hierarchy. Each card shows role, status, and current workload."})]}),a.length?(0,e.jsx)("div",{className:"org-chart-scroll",children:(0,e.jsx)("ul",{className:"org-chart",children:a.map(a=>(0,e.jsx)(o,{node:a,workloadById:d},a.id))})}):(0,e.jsx)(i.pp,{title:"No agents yet",children:"Create an agent on the Agents page, then come back here to assign managers."})]}),(0,e.jsxs)("section",{className:"admin-grid reports-layout",children:[(0,e.jsxs)("div",{className:"admin-panel",children:[(0,e.jsxs)("div",{className:"admin-panel-head",children:[(0,e.jsx)("span",{children:"Reporting lines"}),(0,e.jsx)("small",{children:"Re-parent any agent. Cycles are blocked automatically."})]}),c.length?(0,e.jsx)("div",{className:"admin-card-list compact",children:c.map(a=>{let b=a.reports_to?c.find(b=>b.id===a.reports_to):null,d=c.filter(b=>b.id!==a.id),f=a.role&&s[a.role]?a.role:"individual_contributor";return(0,e.jsxs)("form",{action:u,className:"org-reporting-row",children:[(0,e.jsx)("input",{type:"hidden",name:"agent_id",value:a.id}),(0,e.jsxs)("div",{className:"org-reporting-identity",children:[(0,e.jsx)("div",{className:"org-card-avatar small","aria-hidden":"true",children:m(a.name)}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"org-reporting-name",children:a.name}),(0,e.jsx)("div",{className:"org-reporting-sub",children:b?`Reports to ${b.name}`:"Top of chain"})]})]}),(0,e.jsxs)("div",{className:"org-reporting-fields",children:[(0,e.jsxs)("label",{className:"org-reporting-field",children:[(0,e.jsx)("span",{children:"Title"}),(0,e.jsx)("input",{type:"text",name:"title",defaultValue:a.title||"",placeholder:"e.g. Marketing Manager"})]}),(0,e.jsxs)("label",{className:"org-reporting-field",children:[(0,e.jsx)("span",{children:"Role"}),(0,e.jsx)("select",{name:"role",defaultValue:f,children:Object.entries(s).map(([a,b])=>(0,e.jsx)("option",{value:a,children:b},a))})]}),(0,e.jsxs)("label",{className:"org-reporting-field",children:[(0,e.jsx)("span",{children:"Manager"}),(0,e.jsxs)("select",{name:"reports_to",defaultValue:a.reports_to||"",children:[(0,e.jsx)("option",{value:"",children:"— None (top of chain)"}),d.map(a=>(0,e.jsx)("option",{value:a.id,children:a.name},a.id))]})]}),(0,e.jsx)("button",{className:"admin-button",type:"submit",children:"Save"})]})]},a.id)})}):(0,e.jsx)(i.pp,{title:"No agents yet",children:"Create agents to start building your org."})]}),(0,e.jsxs)("div",{className:"admin-panel",children:[(0,e.jsxs)("div",{className:"admin-panel-head",children:[(0,e.jsx)("span",{children:"Workload by agent"}),(0,e.jsx)("small",{children:"Derived from active tasks."})]}),b.workload.length?(0,e.jsx)("div",{className:"admin-card-list compact",children:b.workload.map(a=>(0,e.jsxs)("div",{className:"admin-record compact",children:[(0,e.jsxs)("div",{className:"admin-record-top",children:[(0,e.jsx)("b",{children:a.agent_name||a.agent_id}),(0,e.jsxs)(i.qs,{tone:a.blocked_tasks?"danger":a.active_tasks?"ready":"neutral",children:[a.active_tasks," active"]})]}),(0,e.jsxs)("p",{children:[a.total_tasks," total \xb7 ",a.blocked_tasks," blocked \xb7 ",a.completed_tasks," complete"]})]},a.agent_id))}):(0,e.jsx)(i.pp,{title:"No workload data",children:"Assign tasks to see workload distribution."})]})]})]})}(0,f.A)(u,"40d05ecd9b76dbbde890a9b285c1387b5a99528510",null),d()}catch(a){d(a)}})},94657:(a,b,c)=>{"use strict";c.d(b,{default:()=>f});var d=c(21124),e=c(38301);function f(){let[a,b]=(0,e.useState)([]),[c,f]=(0,e.useState)("");return(0,d.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,d.jsxs)("select",{value:c,onChange:a=>{var b;f(b=a.target.value),b?localStorage.setItem("madarx.activeProjectId",b):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:b||null}}))},"aria-label":"Active project",children:[(0,d.jsx)("option",{value:"",children:"All projects"}),a.map(a=>(0,d.jsx)("option",{value:a.id,children:a.name},a.id))]})})}}};