madarx 2.12.1 → 2.13.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 (328) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +544 -544
  3. package/.next/standalone/.next/app-path-routes-manifest.json +78 -78
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  8. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  9. package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/admin/page.js +2 -2
  11. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/agents/[id]/page.js +4 -4
  13. package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/agents/page.js +1 -1
  15. package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/orchestrator/upload/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/orgs/join-complete/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/whatsapp/disconnect/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/approvals/page.js +2 -2
  193. package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/architecture.html +2 -2
  196. package/.next/standalone/.next/server/app/architecture.rsc +1 -1
  197. package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/brand.html +1 -1
  201. package/.next/standalone/.next/server/app/brand.rsc +1 -1
  202. package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/federated-ai.html +2 -2
  205. package/.next/standalone/.next/server/app/federated-ai.rsc +1 -1
  206. package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
  208. package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/hail/[id]/page.js +1 -1
  210. package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
  211. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +2 -2
  212. package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/hail/page.js +2 -2
  214. package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  217. package/.next/standalone/.next/server/app/index.html +2 -2
  218. package/.next/standalone/.next/server/app/index.rsc +1 -1
  219. package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
  220. package/.next/standalone/.next/server/app/join.html +1 -1
  221. package/.next/standalone/.next/server/app/join.rsc +1 -1
  222. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/marketplace/page.js +2 -2
  224. package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/missions/page.js +2 -2
  229. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  230. package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  233. package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
  234. package/.next/standalone/.next/server/app/org/page.js +1 -1
  235. package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
  236. package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  238. package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
  241. package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/projects/new.html +1 -1
  243. package/.next/standalone/.next/server/app/projects/new.rsc +2 -2
  244. package/.next/standalone/.next/server/app/projects/page.js +27 -27
  245. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/schedules/page.js +2 -2
  250. package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  253. package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/settings/brand.html +2 -2
  256. package/.next/standalone/.next/server/app/settings/brand.rsc +1 -1
  257. package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
  258. package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
  261. package/.next/standalone/.next/server/app/settings/onboarding.rsc +1 -1
  262. package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
  263. package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
  264. package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
  265. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/settings.html +2 -2
  270. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  271. package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  272. package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
  274. package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  275. package/.next/standalone/.next/server/app/tasks/page.js +1 -1
  276. package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  277. package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/whatsapp.html +1 -1
  282. package/.next/standalone/.next/server/app/whatsapp.rsc +1 -1
  283. package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
  289. package/.next/standalone/.next/server/app-paths-manifest.json +78 -78
  290. package/.next/standalone/.next/server/chunks/{3784.js → 1092.js} +1 -1
  291. package/.next/standalone/.next/server/chunks/1699.js +27 -27
  292. package/.next/standalone/.next/server/functions-config-manifest.json +22 -22
  293. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  294. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  295. package/.next/standalone/.next/server/pages/404.html +1 -1
  296. package/.next/standalone/.next/server/pages/500.html +1 -1
  297. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  299. package/.next/standalone/.next/static/chunks/app/projects/page-2166c214f854766e.js +1 -0
  300. package/.next/standalone/.next/static/chunks/{webpack-86ee88827adb756d.js → webpack-0cfb048137bd7fce.js} +1 -1
  301. package/.next/standalone/CHANGELOG.md +15 -0
  302. package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
  303. package/.next/standalone/data/.default-project-seeded +1 -1
  304. package/.next/standalone/data/madarx.sqlite +0 -0
  305. package/.next/standalone/data/madarx.sqlite-shm +0 -0
  306. package/.next/standalone/data/madarx.sqlite-wal +0 -0
  307. package/.next/standalone/package.json +4 -1
  308. package/.next/standalone/workspace/agents/ops-agent/skills.md +24 -0
  309. package/.next/standalone/workspace/agents/tool-smith-agent/skills.md +24 -0
  310. package/.next/static/chunks/app/projects/page-2166c214f854766e.js +1 -0
  311. package/.next/static/chunks/{webpack-86ee88827adb756d.js → webpack-0cfb048137bd7fce.js} +1 -1
  312. package/CHANGELOG.md +15 -0
  313. package/lib/cli/banner.js +200 -21
  314. package/lib/cli/run.js +33 -11
  315. package/lib/cli/splash.js +120 -0
  316. package/lib/marketplace-seeds.js +141 -3
  317. package/lib/runtime.js +52 -3
  318. package/lib/seeds.js +5 -1
  319. package/lib/tools/registry.js +20 -0
  320. package/package.json +4 -1
  321. package/scripts/postinstall-splash.mjs +81 -0
  322. package/scripts/preview-banner.mjs +24 -0
  323. package/.next/standalone/.next/static/chunks/app/projects/page-7b6c6e010183e070.js +0 -1
  324. package/.next/static/chunks/app/projects/page-7b6c6e010183e070.js +0 -1
  325. /package/.next/standalone/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → cR6E_4o8_rHXujVNesWiZ}/_buildManifest.js +0 -0
  326. /package/.next/standalone/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → cR6E_4o8_rHXujVNesWiZ}/_ssgManifest.js +0 -0
  327. /package/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → cR6E_4o8_rHXujVNesWiZ}/_buildManifest.js +0 -0
  328. /package/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → cR6E_4o8_rHXujVNesWiZ}/_ssgManifest.js +0 -0
@@ -874,7 +874,7 @@ ${b}
874
874
  `).run(b,"update_check",c,e,d,d)}(a)}catch{}try{!function(a){try{if(a.prepare("SELECT id FROM tool_allowlists WHERE tool_name = 'email_send' LIMIT 1").get())return;let b=null;try{let a=(0,e.execFileSync)("git",["config","user.email"],{stdio:["ignore","pipe","ignore"],timeout:3e3}).toString().trim();a.includes("@")&&(b=a.split("@").pop().toLowerCase().trim())}catch{}if(!b)return void console.warn("[seeds] Could not determine email domain from git config user.email. Add a recipient_domain allowlist entry for email_send manually via the dashboard.");let c=`tal-seed-email-${Date.now().toString(36)}`,d=new Date().toISOString();a.prepare(`
875
875
  INSERT INTO tool_allowlists (id, tool_name, scope_key, scope_value, label, created_at)
876
876
  VALUES (?, 'email_send', 'recipient_domain', ?, ?, ?)
877
- `).run(c,b,"Seeded from git config on first install",d),console.info(`[seeds] Email allowlist seeded: email_send / recipient_domain = ${b}`)}catch(a){console.warn("[seeds] seedDefaultEmailAllowlist failed:",a?.message||a)}}(a)}catch{}try{(0,j.jz)(a)}catch{}try{(0,n.y)({})}catch{}try{(0,i.fP)(a)}catch{}try{(0,k.yi)(a)}catch{}try{(0,r.r)(a),D&&(0,q.fx)()}catch{}try{(0,s._)(a),D&&((0,t.H6)(),(0,u.r1)()),(0,v.$F)()}catch{}try{(0,w.zc)(a)}catch{}if("1"===process.env.MADARX_SEED_DEFAULT_AGENTS)try{(0,x.g)()}catch{}if(D)try{(0,y.W)()}catch{}try{(0,z.mx)(a)}catch{}!function(a){try{let b=a.prepare("SELECT id, name FROM agents WHERE id = 'ops-agent' LIMIT 1").get();if(b){"Ops Agent"===b.name&&(a.prepare("UPDATE agents SET name = 'Caretaker' WHERE id = 'ops-agent'").run(),a.prepare("UPDATE schedules SET name = 'Caretaker' WHERE agent_id = 'ops-agent' AND name = 'Ops Agent'").run());return}(0,l.W1)({silent:!0})}catch(a){console.warn("[seeds] seedOpsAgentIfMissing failed:",a?.message||a)}}(a),function(a){try{if(a.prepare("SELECT id FROM agents WHERE id = 'tool-smith-agent' LIMIT 1").get())return;(0,k.pz)("tool-smith","personal",{seed:!0,agent_id:"tool-smith-agent"})}catch(a){console.warn("[seeds] seedToolSmithAgentIfMissing failed:",a?.message||a)}}(a);try{(0,p.k2)()}catch{}try{!function(a){try{if(a.prepare("SELECT value FROM config WHERE key = 'cto_brief_seeded'").get())return;let b=g.join(h.Dl,"seed-assets","cto-brief.html");if(!f.existsSync(b))return;let c=f.readFileSync(b,"utf8");(0,l.Dg)({title:"madarX OS — Vision, Plan & Open Questions (CTO Brief)",kind:"html",content:c,space_id:"default",agent_id:"main-orchestrator",dedupe_key:""}),a.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('cto_brief_seeded', '1')").run()}catch(a){console.warn("[seeds] seedCtoBriefArtifact failed:",a?.message||a)}}(a)}catch{}try{!function(a){try{let b=(0,A.YO)();if(!b||"0.0.0"===b)return;let c=a.prepare("SELECT value FROM config WHERE key = 'last_release_noted'").get(),d=c?.value||null;if(d===b)return;let e=()=>a.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('last_release_noted', ?)").run(b);if(!d)return void e();let i=function(a,b){if(!a||!b)return null;let c=a.split("\n"),d=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e=RegExp(`^##\\s*\\[${d}\\]`),f=-1;for(let a=0;a<c.length;a++)if(e.test(c[a])){f=a;break}if(-1===f)return null;let g=c.length;for(let a=f+1;a<c.length;a++)if(/^##\s*\[/.test(c[a])){g=a;break}return c.slice(f,g).join("\n").trim()||null}(function(){for(let a of[g.join(h.Dl,"CHANGELOG.md"),g.join(process.cwd(),"CHANGELOG.md"),g.join(process.cwd(),".next","standalone","CHANGELOG.md")])try{if(f.existsSync(a))return f.readFileSync(a,"utf8")}catch{}return null}(),b);if(!i)return void e();let j=i,k="markdown";try{let a=(0,m.K8)({version:b,markdown:i});a&&a.includes("<!DOCTYPE")&&(j=a,k="html")}catch(a){console.warn("[seeds] renderChangelogHtml failed, using markdown:",a?.message||a)}(0,l.Dg)({title:`madarX ${b} — What's new`,kind:k,content:j,space_id:"default",agent_id:"main-orchestrator",dedupe_key:""}),e()}catch(a){console.warn("[seeds] seedReleaseNotesArtifact failed:",a?.message||a)}}(a)}catch{}try{(0,o.d)(a)}catch{}if(!process.env.MADARX_DATA_DIR&&!process.env.VILLA515_DATA_DIR)try{!function(a){if(!globalThis.__madarxDiskEncryptionCheckRan){if(globalThis.__madarxDiskEncryptionCheckRan=!0,a)try{if(a.prepare("SELECT id FROM audit_logs WHERE type = 'disk_encryption.health' AND at > datetime('now', '-1 hour') LIMIT 1").get())return}catch{}try{let a=new c.U(c(123)).pathname;(0,e.spawnSync)(process.execPath,["--no-warnings",a],{stdio:"ignore",detached:!1,timeout:1e4,env:{...process.env}})}catch{}}}(a)}catch{}}finally{globalThis.__madarxSuppressStateEmits=!1}}d()}catch(a){d(a)}})},23737:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{n:()=>l});var e=c(40718),f=c(4638),g=c(60105),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let m=new Set(["__composite_slug","approval_id"]);function i(a,b){let c=a;for(let a of b.split(".")){if(null==c)return;c=c[a]}return c}function j(a,b){if("string"==typeof a){let c=a.match(/^\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}$/);if(c){let a=i(b,c[1]);return void 0===a?"":a}return a.replace(/\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}/g,(a,c)=>{let d=i(b,c);return void 0===d?"":"string"==typeof d?d:JSON.stringify(d)})}if(Array.isArray(a))return a.map(a=>j(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=j(e,b);return c}return a}async function k(a,b,d){let e=j(a.prompt,b);if("function"==typeof d.__synthesize)try{let a=await d.__synthesize(e);return{ok:!0,text:String(a??"")}}catch(a){return{ok:!0,text:"",skipped:!0,reason:String(a?.message||a)}}try{let{chatWithClaude:a}=await Promise.resolve().then(c.bind(c,19151)),b=await a({messages:[{role:"user",content:e}]}),d="string"==typeof b?b:b?.text||b?.content||"";return{ok:!0,text:String(d||"")}}catch(a){return{ok:!0,text:"",skipped:!0,reason:String(a?.message||a)}}}async function l(a={},b={}){let c=a.__composite_slug,d=c?(0,f.t2)(c):null;if(!d)return{ok:!1,status:"error",error:"not_found",message:`Unknown composite tool: ${c||"(none)"}`};let h={};for(let[b,c]of Object.entries(a))m.has(b)||(h[b]=c);let i={input:h},n=[],o={agent_id:b.agent_id,project_id:b.project_id,org_id:b.org_id,actor_role:b.actor_role,owner_trusted:b.owner_trusted,acting_on_behalf_of_user_id:b.acting_on_behalf_of_user_id||b.user_id||null};for(let a of d.steps)if("tool_call"===a.kind){let b,d=j(a.input_template||{},i);try{b=await (0,e.executeRegistryTool)(a.tool,d,o)}catch(b){return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,failed_tool:a.tool,message:`Composite ${c} aborted at step '${a.id}' (${a.tool}): ${String(b?.message||b)}`,completed_steps:n.map(a=>a.id)}}if(!(b&&!1!==b.ok&&"approval_required"!==b.status&&"allowlist_violation"!==b.status&&"rate_limited"!==b.status&&"error"!==b.status))return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,failed_tool:a.tool,step_result:b,message:`Composite ${c} aborted at step '${a.id}' (${a.tool}): ${b?.status||b?.error||"failed"}`,completed_steps:n.map(a=>a.id)};i[a.id]=b,n.push({id:a.id,kind:"tool_call",tool:a.tool,ok:!0,status:b.status})}else if("llm_synthesis"===a.kind){let c=await k(a,i,b);i[a.id]=c,n.push({id:a.id,kind:"llm_synthesis",ok:!0,skipped:!!c.skipped})}else if("artifact_write"===a.kind)try{let d=j(a.title_template||`${c} output`,i),e=a.content_ref?j(a.content_ref,i):"",f=(0,g.Dg)({title:String(d),kind:"markdown",content:"string"==typeof e?e:JSON.stringify(e,null,2),agent_id:b.agent_id||null,project_id:b.project_id||null});i[a.id]=f,n.push({id:a.id,kind:"artifact_write",ok:!0,artifact_id:f?.id||null})}catch(b){return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,message:`Composite ${c} aborted at artifact_write '${a.id}': ${String(b?.message||b)}`,completed_steps:n.map(a=>a.id)}}return{ok:!0,status:"complete",composite:c,steps:n,result:n.length?i[n[n.length-1].id]:null}}d()}catch(a){d(a)}})},24516:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{AQ:()=>r,e3:()=>q,getSecret:()=>n,setSecret:()=>o,yz:()=>p});var e=c(77598),f=c(34255),g=c(87181),h=a([f]);f=(h.then?(await h)():h)[0];let s="aes-256-gcm",t=new Map;function i(){return(0,g.K2)({db:(0,f.getDb)(),allowGenerate:!0})}function j(a={}){return a.scope?String(a.scope):a.agent_id?`agent:${a.agent_id}`:a.project_id?`project:${a.project_id}`:"global"}function k(a,b={}){return b.project_id?String(b.project_id):String(a).startsWith("project:")?String(a).slice(8):null}function l(a,b,c){return`${a}::${b}::${c||""}`}function m(a,b,c){return(0,f.getDb)().prepare("SELECT * FROM secrets WHERE name = ? AND scope = ? AND COALESCE(project_id, '') = COALESCE(?, '') AND status = 'active' LIMIT 1").get(a,b,c||null)}function n(a,b={}){let c=[];b.agent_id&&c.push([`agent:${b.agent_id}`,null]),b.project_id&&c.push([`project:${b.project_id}`,String(b.project_id)]);let d=j(b);c.push([d,k(d,b)]),c.push(["global",null]);let g=new Set;for(let[b,d]of c){let c=l(a,b,d);if(g.has(c))continue;if(g.add(c),t.has(c))return t.get(c);let h=m(a,b,d);if(h)return function(a,b){let c;try{c=function(a,b,c,d){let f=(0,e.createDecipheriv)(s,d,b);return f.setAuthTag(c),Buffer.concat([f.update(a),f.final()]).toString("utf8")}(Buffer.from(a.value_encrypted),Buffer.from(a.iv),Buffer.from(a.auth_tag),i())}catch(b){throw console.warn(`[secrets] decrypt failed for ${a.name} (scope=${a.scope}, id=${a.id}): ${b?.message||b}. The active MADARX_MASTER_KEY does not match the key that encrypted this row. Either restore the original key or re-store this secret with the current key.`),b}return(0,f.getDb)().prepare("UPDATE secrets SET last_used_at = ? WHERE id = ?").run((0,f.nowIso)(),a.id),t.set(b,c),c}(h,c)}return Object.prototype.hasOwnProperty.call(process.env,a)?process.env[a]:null}function o(a,b,c={}){if(!a||"string"!=typeof a)throw Error("name is required");if(null==b)throw Error("value is required");let d=j(c),g=k(d,c),h=(0,f.getDb)(),n=(0,f.nowIso)(),p=m(a,d,g);p&&h.prepare("UPDATE secrets SET status = ?, rotated_at = ? WHERE id = ?").run("rotated",n,p.id),t.delete(l(a,d,g));let{iv:q,encrypted:r,authTag:u}=function(a,b){let c=(0,e.randomBytes)(12),d=(0,e.createCipheriv)(s,b,c),f=Buffer.concat([d.update(String(a),"utf8"),d.final()]);return{iv:c,encrypted:f,authTag:d.getAuthTag()}}(b,i());h.prepare(`INSERT INTO secrets (id, name, scope, value_encrypted, iv, auth_tag, status, source, metadata_json, project_id, created_at)
877
+ `).run(c,b,"Seeded from git config on first install",d),console.info(`[seeds] Email allowlist seeded: email_send / recipient_domain = ${b}`)}catch(a){console.warn("[seeds] seedDefaultEmailAllowlist failed:",a?.message||a)}}(a)}catch{}try{(0,j.jz)(a)}catch{}try{(0,n.y)({})}catch{}try{(0,i.fP)(a)}catch{}try{(0,k.yi)(a)}catch{}try{(0,r.r)(a),D&&(0,q.fx)()}catch{}try{(0,s._)(a),D&&((0,t.H6)(),(0,u.r1)()),(0,v.$F)()}catch{}try{(0,w.zc)(a)}catch{}if("1"===process.env.MADARX_SEED_DEFAULT_AGENTS)try{(0,x.g)()}catch{}if(D)try{(0,y.W)()}catch{}try{(0,z.mx)(a)}catch{}!function(a){try{let b=a.prepare("SELECT id, name FROM agents WHERE id = 'ops-agent' LIMIT 1").get();if(b){"Ops Agent"===b.name&&(a.prepare("UPDATE agents SET name = 'Caretaker' WHERE id = 'ops-agent'").run(),a.prepare("UPDATE schedules SET name = 'Caretaker' WHERE agent_id = 'ops-agent' AND name = 'Ops Agent'").run());return}(0,l.W1)({silent:!0})}catch(a){console.warn("[seeds] seedOpsAgentIfMissing failed:",a?.message||a)}}(a),function(a){try{if(a.prepare("SELECT id FROM agents WHERE id = 'tool-smith-agent' LIMIT 1").get())return;(0,k.pz)("tool-smith","personal",{seed:!0,agent_id:"tool-smith-agent"})}catch(a){console.warn("[seeds] seedToolSmithAgentIfMissing failed:",a?.message||a)}}(a);try{(0,l.OH)()}catch(a){console.warn("[seeds] migrateDefaultAgentSkills failed:",a?.message||a)}try{(0,p.k2)()}catch{}try{!function(a){try{if(a.prepare("SELECT value FROM config WHERE key = 'cto_brief_seeded'").get())return;let b=g.join(h.Dl,"seed-assets","cto-brief.html");if(!f.existsSync(b))return;let c=f.readFileSync(b,"utf8");(0,l.Dg)({title:"madarX OS — Vision, Plan & Open Questions (CTO Brief)",kind:"html",content:c,space_id:"default",agent_id:"main-orchestrator",dedupe_key:""}),a.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('cto_brief_seeded', '1')").run()}catch(a){console.warn("[seeds] seedCtoBriefArtifact failed:",a?.message||a)}}(a)}catch{}try{!function(a){try{let b=(0,A.YO)();if(!b||"0.0.0"===b)return;let c=a.prepare("SELECT value FROM config WHERE key = 'last_release_noted'").get(),d=c?.value||null;if(d===b)return;let e=()=>a.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('last_release_noted', ?)").run(b);if(!d)return void e();let i=function(a,b){if(!a||!b)return null;let c=a.split("\n"),d=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e=RegExp(`^##\\s*\\[${d}\\]`),f=-1;for(let a=0;a<c.length;a++)if(e.test(c[a])){f=a;break}if(-1===f)return null;let g=c.length;for(let a=f+1;a<c.length;a++)if(/^##\s*\[/.test(c[a])){g=a;break}return c.slice(f,g).join("\n").trim()||null}(function(){for(let a of[g.join(h.Dl,"CHANGELOG.md"),g.join(process.cwd(),"CHANGELOG.md"),g.join(process.cwd(),".next","standalone","CHANGELOG.md")])try{if(f.existsSync(a))return f.readFileSync(a,"utf8")}catch{}return null}(),b);if(!i)return void e();let j=i,k="markdown";try{let a=(0,m.K8)({version:b,markdown:i});a&&a.includes("<!DOCTYPE")&&(j=a,k="html")}catch(a){console.warn("[seeds] renderChangelogHtml failed, using markdown:",a?.message||a)}(0,l.Dg)({title:`madarX ${b} — What's new`,kind:k,content:j,space_id:"default",agent_id:"main-orchestrator",dedupe_key:""}),e()}catch(a){console.warn("[seeds] seedReleaseNotesArtifact failed:",a?.message||a)}}(a)}catch{}try{(0,o.d)(a)}catch{}if(!process.env.MADARX_DATA_DIR&&!process.env.VILLA515_DATA_DIR)try{!function(a){if(!globalThis.__madarxDiskEncryptionCheckRan){if(globalThis.__madarxDiskEncryptionCheckRan=!0,a)try{if(a.prepare("SELECT id FROM audit_logs WHERE type = 'disk_encryption.health' AND at > datetime('now', '-1 hour') LIMIT 1").get())return}catch{}try{let a=new c.U(c(123)).pathname;(0,e.spawnSync)(process.execPath,["--no-warnings",a],{stdio:"ignore",detached:!1,timeout:1e4,env:{...process.env}})}catch{}}}(a)}catch{}}finally{globalThis.__madarxSuppressStateEmits=!1}}d()}catch(a){d(a)}})},23737:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{n:()=>l});var e=c(40718),f=c(4638),g=c(60105),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let m=new Set(["__composite_slug","approval_id"]);function i(a,b){let c=a;for(let a of b.split(".")){if(null==c)return;c=c[a]}return c}function j(a,b){if("string"==typeof a){let c=a.match(/^\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}$/);if(c){let a=i(b,c[1]);return void 0===a?"":a}return a.replace(/\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}/g,(a,c)=>{let d=i(b,c);return void 0===d?"":"string"==typeof d?d:JSON.stringify(d)})}if(Array.isArray(a))return a.map(a=>j(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=j(e,b);return c}return a}async function k(a,b,d){let e=j(a.prompt,b);if("function"==typeof d.__synthesize)try{let a=await d.__synthesize(e);return{ok:!0,text:String(a??"")}}catch(a){return{ok:!0,text:"",skipped:!0,reason:String(a?.message||a)}}try{let{chatWithClaude:a}=await Promise.resolve().then(c.bind(c,19151)),b=await a({messages:[{role:"user",content:e}]}),d="string"==typeof b?b:b?.text||b?.content||"";return{ok:!0,text:String(d||"")}}catch(a){return{ok:!0,text:"",skipped:!0,reason:String(a?.message||a)}}}async function l(a={},b={}){let c=a.__composite_slug,d=c?(0,f.t2)(c):null;if(!d)return{ok:!1,status:"error",error:"not_found",message:`Unknown composite tool: ${c||"(none)"}`};let h={};for(let[b,c]of Object.entries(a))m.has(b)||(h[b]=c);let i={input:h},n=[],o={agent_id:b.agent_id,project_id:b.project_id,org_id:b.org_id,actor_role:b.actor_role,owner_trusted:b.owner_trusted,acting_on_behalf_of_user_id:b.acting_on_behalf_of_user_id||b.user_id||null};for(let a of d.steps)if("tool_call"===a.kind){let b,d=j(a.input_template||{},i);try{b=await (0,e.executeRegistryTool)(a.tool,d,o)}catch(b){return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,failed_tool:a.tool,message:`Composite ${c} aborted at step '${a.id}' (${a.tool}): ${String(b?.message||b)}`,completed_steps:n.map(a=>a.id)}}if(!(b&&!1!==b.ok&&"approval_required"!==b.status&&"allowlist_violation"!==b.status&&"rate_limited"!==b.status&&"error"!==b.status))return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,failed_tool:a.tool,step_result:b,message:`Composite ${c} aborted at step '${a.id}' (${a.tool}): ${b?.status||b?.error||"failed"}`,completed_steps:n.map(a=>a.id)};i[a.id]=b,n.push({id:a.id,kind:"tool_call",tool:a.tool,ok:!0,status:b.status})}else if("llm_synthesis"===a.kind){let c=await k(a,i,b);i[a.id]=c,n.push({id:a.id,kind:"llm_synthesis",ok:!0,skipped:!!c.skipped})}else if("artifact_write"===a.kind)try{let d=j(a.title_template||`${c} output`,i),e=a.content_ref?j(a.content_ref,i):"",f=(0,g.Dg)({title:String(d),kind:"markdown",content:"string"==typeof e?e:JSON.stringify(e,null,2),agent_id:b.agent_id||null,project_id:b.project_id||null});i[a.id]=f,n.push({id:a.id,kind:"artifact_write",ok:!0,artifact_id:f?.id||null})}catch(b){return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,message:`Composite ${c} aborted at artifact_write '${a.id}': ${String(b?.message||b)}`,completed_steps:n.map(a=>a.id)}}return{ok:!0,status:"complete",composite:c,steps:n,result:n.length?i[n[n.length-1].id]:null}}d()}catch(a){d(a)}})},24516:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{AQ:()=>r,e3:()=>q,getSecret:()=>n,setSecret:()=>o,yz:()=>p});var e=c(77598),f=c(34255),g=c(87181),h=a([f]);f=(h.then?(await h)():h)[0];let s="aes-256-gcm",t=new Map;function i(){return(0,g.K2)({db:(0,f.getDb)(),allowGenerate:!0})}function j(a={}){return a.scope?String(a.scope):a.agent_id?`agent:${a.agent_id}`:a.project_id?`project:${a.project_id}`:"global"}function k(a,b={}){return b.project_id?String(b.project_id):String(a).startsWith("project:")?String(a).slice(8):null}function l(a,b,c){return`${a}::${b}::${c||""}`}function m(a,b,c){return(0,f.getDb)().prepare("SELECT * FROM secrets WHERE name = ? AND scope = ? AND COALESCE(project_id, '') = COALESCE(?, '') AND status = 'active' LIMIT 1").get(a,b,c||null)}function n(a,b={}){let c=[];b.agent_id&&c.push([`agent:${b.agent_id}`,null]),b.project_id&&c.push([`project:${b.project_id}`,String(b.project_id)]);let d=j(b);c.push([d,k(d,b)]),c.push(["global",null]);let g=new Set;for(let[b,d]of c){let c=l(a,b,d);if(g.has(c))continue;if(g.add(c),t.has(c))return t.get(c);let h=m(a,b,d);if(h)return function(a,b){let c;try{c=function(a,b,c,d){let f=(0,e.createDecipheriv)(s,d,b);return f.setAuthTag(c),Buffer.concat([f.update(a),f.final()]).toString("utf8")}(Buffer.from(a.value_encrypted),Buffer.from(a.iv),Buffer.from(a.auth_tag),i())}catch(b){throw console.warn(`[secrets] decrypt failed for ${a.name} (scope=${a.scope}, id=${a.id}): ${b?.message||b}. The active MADARX_MASTER_KEY does not match the key that encrypted this row. Either restore the original key or re-store this secret with the current key.`),b}return(0,f.getDb)().prepare("UPDATE secrets SET last_used_at = ? WHERE id = ?").run((0,f.nowIso)(),a.id),t.set(b,c),c}(h,c)}return Object.prototype.hasOwnProperty.call(process.env,a)?process.env[a]:null}function o(a,b,c={}){if(!a||"string"!=typeof a)throw Error("name is required");if(null==b)throw Error("value is required");let d=j(c),g=k(d,c),h=(0,f.getDb)(),n=(0,f.nowIso)(),p=m(a,d,g);p&&h.prepare("UPDATE secrets SET status = ?, rotated_at = ? WHERE id = ?").run("rotated",n,p.id),t.delete(l(a,d,g));let{iv:q,encrypted:r,authTag:u}=function(a,b){let c=(0,e.randomBytes)(12),d=(0,e.createCipheriv)(s,b,c),f=Buffer.concat([d.update(String(a),"utf8"),d.final()]);return{iv:c,encrypted:f,authTag:d.getAuthTag()}}(b,i());h.prepare(`INSERT INTO secrets (id, name, scope, value_encrypted, iv, auth_tag, status, source, metadata_json, project_id, created_at)
878
878
  VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?)`).run((0,f.newId)("sec"),a,d,r,q,u,c.source||"manual",c.metadata?JSON.stringify(c.metadata):null,g,n),t.set(l(a,d,g),String(b))}function p(a,b,c={}){o(a,b,{...c,source:"rotation"})}function q(a,b={}){let c=j(b),d=k(c,b),e=m(a,c,d);if(!e)throw Error(`Secret not found: ${a} (scope: ${c})`);(0,f.getDb)().prepare("UPDATE secrets SET status = ?, rotated_at = ? WHERE id = ?").run("revoked",(0,f.nowIso)(),e.id),t.delete(l(a,c,d))}function r(){return(0,f.getDb)().prepare("SELECT id, name, scope, project_id, status, source, last_used_at, created_at, rotated_at FROM secrets WHERE status = 'active' ORDER BY name ASC, scope ASC").all()}d()}catch(a){d(a)}})},25938:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{r:()=>h,s:()=>i});var e=c(24516),f=c(58282),g=a([e,f]);async function h(a={},b="google_oauth"){if(a.access_token)return a.access_token;let c=(0,e.getSecret)("GOOGLE_ACCESS_TOKEN",a);if(c&&!a.force_refresh)return c;let d=(0,e.getSecret)("GOOGLE_REFRESH_TOKEN",a),g=(0,e.getSecret)("GOOGLE_OAUTH_CLIENT_ID",a)||process.env.GOOGLE_CLIENT_ID,i=(0,e.getSecret)("GOOGLE_OAUTH_CLIENT_SECRET",a)||process.env.GOOGLE_CLIENT_SECRET;if(!d)throw Error("GOOGLE_REFRESH_TOKEN missing");if(!g||!i)throw Error("GOOGLE_OAUTH_CLIENT_ID/GOOGLE_OAUTH_CLIENT_SECRET missing");let j=new URLSearchParams({client_id:g,client_secret:i,refresh_token:d,grant_type:"refresh_token"}),k=(0,f.N)(b,a.agent_id??null,a.fetch||fetch),l=await k("https://oauth2.googleapis.com/token",{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:j});if(!l.ok)throw Error(`google token refresh failed: ${l.status}`);let m=await l.json();if(!m.access_token)throw Error("google token refresh returned no access_token");return(0,e.setSecret)("GOOGLE_ACCESS_TOKEN",m.access_token,{...a,source:"oauth_access",metadata:{expires_in:m.expires_in||null,refreshed_at:new Date().toISOString()}}),m.access_token}function i(a,b={}){return(0,f.N)(a,b.agent_id??null,b.fetch||fetch)}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},26531:(a,b,c)=>{"use strict";c.d(b,{IB:()=>s,Oe:()=>m,hC:()=>r,nc:()=>t,wn:()=>q});var d=c(73024),e=c(76760),f=c(48161),g=c(9381);let h=new Set([".ssh"]),i=/(;|&&|\|\||\||>|<|\$\(|`)/;function j(){return String(process.env.MADARX_ALLOWED_ROOTS||"").split(",").map(a=>a.trim()).filter(Boolean)}function k(){return String(process.env.MADARX_READONLY_ROOTS||"").split(",").map(a=>a.trim().replace(/^~/,f.homedir())).filter(Boolean)}function l(){return[...new Set([g.Dl,g.un,...j(),...k()].map(a=>p(e.resolve(a))))]}function m(a){let b=p(e.resolve(a)),c=[...new Set(k().map(a=>p(e.resolve(a))))];return!(0===c.length||[g.Dl,g.un,...j()].map(a=>p(e.resolve(a))).some(a=>n(b,a)))&&c.some(a=>n(b,a))}function n(a,b){let c=e.relative(b,a);return""===c||!!c&&!c.startsWith("..")&&!e.isAbsolute(c)}function o(a){if(a.split(e.sep).filter(Boolean).some(a=>h.has(a)))return!0;let b=e.basename(a);return!!(".env.local"===b||/^\.env($|\.)/.test(b))}function p(a){if(d.existsSync(a))return d.realpathSync(a);let b=[],c=a;for(;!d.existsSync(c);){b.unshift(e.basename(c));let d=e.dirname(c);if(d===c)return a;c=d}return e.join(d.realpathSync(c),...b)}function q(a,b={}){let c=(b.allowedRoots||l()).map(a=>e.resolve(a)),d=p(e.resolve(String(a||".")));return c.some(a=>n(d,a))}function r(a,b={}){let c=(b.allowedRoots||l()).map(a=>e.resolve(a)),d=b.base?e.resolve(b.base):g.Dl,f=e.resolve(d,String(a||".")),h=p(f),i=c.find(a=>n(h,a));if(!i)throw Error(`Path is outside allowed roots: ${a}`);if(o(f)||o(h))throw Error(`Path is blocked by safety policy: ${a}`);for(let b of["/System","/Library","/private","/etc","/var"])if(h===b||h.startsWith(`${b}/`))throw Error(`Path is blocked by safety policy: ${a}`);return{path:f,root:i}}function s(a,b=[],c={}){let d=String(a||"").trim(),e=Array.isArray(b)?b.map(String):[],f=[d,...e].join(" ");return d?c.rawString&&i.test(d)?{risk:"high",approval_required:!0,blocked:!1,reason:"Shell metacharacters require approval"}:"sudo"===d||f.includes("rm -rf")||"git"===d&&"reset"===e[0]&&e.includes("--hard")?{risk:"blocked",approval_required:!0,blocked:!0,reason:"Destructive command is blocked"}:"git"===d&&"push"===e[0]&&(e.includes("--force")||e.includes("-f"))?{risk:"irreversible_external",approval_required:!0,blocked:!1,reason:"Force-push rewrites remote history and cannot be undone"}:"kubectl"===d&&"delete"===e[0]?{risk:"irreversible_external",approval_required:!0,blocked:!1,reason:"kubectl delete removes live cluster resources and cannot be undone"}:["psql","mysql","sqlite3","pgcli","mycli"].includes(d)&&/\b(DROP\s+TABLE|DROP\s+DATABASE|TRUNCATE|DELETE\s+FROM\s+\w+\s*(?:;|$))/i.test(f)?{risk:"irreversible_external",approval_required:!0,blocked:!1,reason:"Destructive SQL (DROP/TRUNCATE/DELETE without WHERE) cannot be undone"}:"git"===d&&["commit","push"].includes(e[0])||["chmod","chown","kill","pkill"].includes(d)||f.includes("deploy")?{risk:"high",approval_required:!0,blocked:!1,reason:"Command can modify history, permissions, processes, or deployments"}:["npm","pnpm","yarn","bun"].includes(d)&&["install","add","remove"].includes(e[0])?{risk:"medium",approval_required:!0,blocked:!1,reason:"Package manager mutation requires approval"}:["curl","wget","python","python3","node"].includes(d)&&("node"!==d||"--version"!==e[0])?{risk:"medium",approval_required:!0,blocked:!1,reason:"General command execution requires approval"}:[["pwd"],["date"],["node","--version"],["npm","test"],["npm","run","check"],["git","status"],["git","diff"],["git","log"]].some(a=>a.every((a,b)=>[d,...e][b]===a))?{risk:"low",approval_required:!1,blocked:!1,reason:"Read-only or verification command"}:{risk:"medium",approval_required:!0,blocked:!1,reason:"Command is not on the low-risk allowlist"}:{risk:"blocked",approval_required:!0,blocked:!0,reason:"No command provided"}}function t(a){return String(a||"").replace(/\b(sk|pk|xox[baprs]|ghp|github_pat|AIza)[A-Za-z0-9_\-]{12,}\b/g,"[REDACTED_TOKEN]").replace(/\b[A-Za-z0-9._%+-]+_API_KEY\s*=\s*[^\s]+/gi,"[REDACTED_API_KEY]").replace(/\b(api[_-]?key|token|secret|password)\s*[:=]\s*['"]?[^'"\s]+/gi,"$1=[REDACTED]")}},28741:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Q:()=>n,o:()=>o});var e=c(73024),f=c(31421),g=c(34255),h=c(73912),i=c(24516),j=c(58282),k=a([g,h,i,j]);async function l(a,b={}){let c=(0,i.getSecret)("OPENAI_API_KEY",b)||process.env.OPENAI_API_KEY;if(!c)throw Error("OPENAI_API_KEY missing for OpenAI Whisper transcription");let d=e.readFileSync(a.storage_path),f=new FormData;f.set("model",b.model||"whisper-1"),f.set("file",new Blob([d],{type:a.mime_type||"application/octet-stream"}),a.name),b.language&&f.set("language",b.language);let g=(0,j.N)("transcribe_audio",b.agent_id??null,b.fetch||fetch),h=await g("https://api.openai.com/v1/audio/transcriptions",{method:"POST",headers:{Authorization:`Bearer ${c}`},body:f});if(!h.ok)throw Error(`openai whisper failed: ${h.status}`);let k=await h.json();return{text:k.text||"",language:k.language||b.language||null,duration_seconds:k.duration_seconds??k.duration??null}}async function m(a,b={}){let c=(0,i.getSecret)("ELEVENLABS_API_KEY",b)||process.env.ELEVENLABS_API_KEY;if(!c)throw Error("ELEVENLABS_API_KEY missing for ElevenLabs Scribe transcription");let d=e.readFileSync(a.storage_path),f=new FormData;f.set("model_id",b.model||"scribe_v1"),f.set("file",new Blob([d],{type:a.mime_type||"application/octet-stream"}),a.name),b.language&&f.set("language_code",b.language);let g=(0,j.N)("transcribe_audio",b.agent_id??null,b.fetch||fetch),h=await g("https://api.elevenlabs.io/v1/speech-to-text",{method:"POST",headers:{"xi-api-key":c},body:f});if(!h.ok){let a="";try{a=(await h.text()).slice(0,256)}catch{}throw Error(`elevenlabs scribe failed: ${h.status} ${a.replace(c,"***")}`)}let k=await h.json();return{text:k.text||"",language:k.language_code||b.language||null,duration_seconds:k.duration_seconds??null}}[g,h,i,j]=k.then?(await k)():k;let p={openai:"openai_whisper",elevenlabs:"elevenlabs_scribe",local:"local_whisper"};async function n(a,b={}){let c=(0,h.mM)(a);if(!c)throw Error("source file not found");let d=function(a={}){if(a.use_local||"1"===process.env.LOCAL_WHISPER)return"local";let b=String(a.provider||process.env.TRANSCRIBE_DEFAULT_PROVIDER||"openai").toLowerCase();return["openai","whisper"].includes(b)?"openai":["elevenlabs","scribe","elevenlabs_scribe"].includes(b)?(0,i.getSecret)("ELEVENLABS_API_KEY",a)||process.env.ELEVENLABS_API_KEY?"elevenlabs":(console.warn("[transcribe] ELEVENLABS_API_KEY missing — falling back to openai whisper"),"openai"):"local"===b?"local":"openai"}(b),e="local"===d,j=p[d];if(c.local_only&&!e)return{status:"allowlist_violation",error:`local_only audio cannot be sent to ${d}`};if((0,h.AB)(a,j).redacted)return{status:"allowlist_violation",error:"audio source redacted for engine"};let k=(0,g.getDb)(),o=(0,g.nowIso)(),q=(0,g.newId)("tr");k.prepare(`INSERT INTO transcripts (id, source_file_id, project_id, status, provider, engine, text, created_at, updated_at)
879
879
  VALUES (?, ?, ?, 'pending', ?, ?, '', ?, ?)`).run(q,a,c.project_id,d,j,o,o);let r="local"===d?()=>(function(a,b={}){if(b.mock_text)return{text:b.mock_text,language:b.language||null,duration_seconds:b.duration_seconds||null};let c=b.whisper_command||process.env.WHISPER_CPP_BIN||process.env.LOCAL_WHISPER_BIN;if(!c)return{text:`Transcript for ${a.name}`,language:b.language||null,duration_seconds:null};let d=(0,f.spawnSync)(c,["-f",a.storage_path],{encoding:"utf8",timeout:b.timeout_ms||12e4});if(0!==d.status)throw Error(`local whisper failed: ${d.stderr||d.stdout||d.status}`);return{text:String(d.stdout||"").trim(),language:b.language||null,duration_seconds:null}})(c,b):"elevenlabs"===d?()=>m(c,b):()=>l(c,b);try{k.prepare("UPDATE transcripts SET status='running', updated_at=? WHERE id=?").run((0,g.nowIso)(),q);let a=await r(),b=a.text||`Transcript for ${c.name}`,d=function(a){let b=(0,g.getDb)(),c=(0,h.dh)(a),d=b.prepare("SELECT * FROM disk_folders WHERE project_id = ? AND parent_id = ? AND name = ? LIMIT 1").get(a,c.id,"transcripts");return d||(0,h.vV)(a,c.id,"transcripts")}(c.project_id),e=(0,h.QM)(c.project_id,d.id,{name:`${c.name}.transcript.md`,content:`# Transcript: ${c.name}
880
880
 
@@ -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:()=>ap,AD:()=>at,CM:()=>Y,Ck:()=>K,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),w=(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,v.Pf)();function C(a,b){return B?(e.writeFileSync(a,(0,v.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,`${w}-${Date.now().toString(36)}.md`),{encrypted:g,encryption_key_id:h}=C(e,a),j=(0,i.z9)(e),k=U({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=V({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,`${w}-${Date.now().toString(36)}.${"html"===c||F?"html":"txt"}`),{encrypted:I,encryption_key_id:J}=C(H,G),K=(0,i.z9)(H),L=U({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=V({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:()=>ai,IG:()=>ag,K2:()=>G,Mh:()=>N,NK:()=>ae,Nv:()=>ac,PF:()=>O,RB:()=>_,RG:()=>L,S9:()=>Z,Sn:()=>$,UA:()=>ao,V1:()=>J,W1:()=>I,WU:()=>E,Xr:()=>H,YS:()=>al,_u:()=>P,appendAudit:()=>T,bC:()=>ab,eP:()=>X,fB:()=>an,fk:()=>am,jZ:()=>S,mk:()=>af,mo:()=>aq,n1:()=>R,nF:()=>ah,q:()=>ar,recordArtifact:()=>V,recordRun:()=>U,v:()=>M,vc:()=>D,wn:()=>Q,x4:()=>aa});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(9001),u=c(81833),v=c(79133),w=a([h,j,l,m,n,o,p,q,r,s,t,u]);function x(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}function y(){return new Date().toISOString().slice(0,10)}function z(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function A(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:z(a.tools,[]),status:a.status,approval:a.approval,generated:1===a.generated,files:z(a.files,[]),system_prompt:a.system_prompt||null,expected_output:a.expected_output||null,memory:z(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:z(a.permissions_json,{}),metadata_json:z(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 B(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 C(a){return a?{...a}:null}function D(){return(0,h.getDb)().prepare("SELECT * FROM agents ORDER BY generated ASC, name ASC").all().map(A)}function E(a){let b=(0,h.getDb)();return A(b.prepare("SELECT * FROM agents WHERE id = ?").get(a))}function F(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 G(a){return(0,h.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? ORDER BY tool_name ASC").all(a).map(F)}function H(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:()=>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(`
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),F(d.prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,b))}function I({silent:a=!1}={}){let b=["directory_list","file_read","file_search","terminal_run","web_search","web_fetch"],c=$({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(ac({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";H("ops-agent",a,b)}return T({type:"agent.ops.ensure",summary:"Ensured Caretaker",status:"complete",meta:{agent_id:"ops-agent"}}),{...c,permissions:G("ops-agent")}}function J(a){let b=(0,h.getDb)().prepare("SELECT memory FROM agents WHERE id = ?").get(a);return b?z(b.memory,[]):null}function K(a,b){let c=J(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),T({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 L(){return(0,h.getDb)().prepare("SELECT * FROM schedules ORDER BY enabled DESC, next_run_at ASC").all().map(B)}function M(a=20){return(0,h.getDb)().prepare("SELECT * FROM runs ORDER BY at DESC LIMIT ?").all(a).map(C)}function N(a){let b=(0,h.getDb)();return C(b.prepare("SELECT * FROM runs WHERE id = ?").get(a))}function O(a,b={}){let c=["status","artifact","preview","output"],d=Object.entries(b).filter(([a])=>c.includes(a));if(!d.length)return N(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),N(a)}function P(a=20){return(0,h.getDb)().prepare("SELECT * FROM audit_logs ORDER BY at DESC LIMIT ?").all(a)}function Q(a=50){return(0,h.getDb)().prepare("SELECT * FROM artifacts ORDER BY created_at DESC LIMIT ?").all(a)}function R({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),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=`
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 S(a){return a&&(0,h.getDb)().prepare("SELECT * FROM artifacts WHERE id = ?").get(String(a))||null}function T(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 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(`
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,t.jO)(f)}catch{}return{id:c,at:d,...a}}function U(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,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(`
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),T({type:"run",summary:a.title||a.kind,status:e,meta:{run_id:c,kind:a.kind}}),{id:c,at:d,status:e,...a}}function V({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,u.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),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(`
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 W(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 X(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=W(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 Y(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 Z(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=W(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,v.decryptFromDiskBuffer)(p,a);e.writeFileSync(o,(0,v.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 T({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 $(a={}){let b=(0,h.getDb)(),c=a.name||"Client Workspace Custom Agent",d=x(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 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.
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:[],u=(0,h.nowIso)(),v={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:u,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},w=function(a){(0,i.Jh)();let b=f.join(i.bo,a.id);e.mkdirSync(b,{recursive:!0});let c=["AGENTS.md","skills.md","tools.md","heartbeat.json"].map(a=>(0,i.z9)(f.join(b,a)));e.writeFileSync(f.join(b,"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: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}
3032
3032
 
3033
3033
  Parent orchestrator: madarX Main Agent.
3034
3034
 
@@ -3047,7 +3047,7 @@ ${a.mission}
3047
3047
  3. Save artifacts under your project's artifacts folder (workspace/projects/<slug>/artifacts/).
3048
3048
  4. Never send emails, WhatsApp messages, social posts, deployments, purchases, or destructive commands without explicit approval.
3049
3049
  5. Update heartbeat.json after each run.
3050
- `);let d="string"==typeof a.skills_markdown&&a.skills_markdown.trim()?a.skills_markdown.trim()+"\n":`# ${a.name} Skills
3050
+ `),"string"==typeof a.skills_markdown&&a.skills_markdown.trim())b=a.skills_markdown.trim()+"\n";else{let c="";try{c="\n"+(0,t.R2)()}catch{}b=`# ${a.name} Skills
3051
3051
 
3052
3052
  ## Mission
3053
3053
  ${a.mission}
@@ -3058,7 +3058,7 @@ ${a.mission}
3058
3058
  - Save every output as a local artifact under your project's artifacts folder (workspace/projects/<slug>/artifacts/).
3059
3059
  - Hand off any external send, post, deployment, or destructive command to the main agent for approval.
3060
3060
  - After each run, update heartbeat.json with status, summary, and next-run plan.
3061
- `;e.writeFileSync(f.join(b,"skills.md"),d),e.writeFileSync(f.join(b,"tools.md"),`# ${a.name} Tools
3061
+ ${c}`}e.writeFileSync(f.join(c,"skills.md"),b),e.writeFileSync(f.join(c,"tools.md"),`# ${a.name} Tools
3062
3062
 
3063
3063
  Allowed tools/connectors:
3064
3064
  ${(a.tools||[]).map(a=>`- ${a}`).join("\n")}
@@ -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:c};return e.writeFileSync(f.join(b,"heartbeat.json"),JSON.stringify(g,null,2)),c}(v),y=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}(w),z=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(w),r,v.expected_output,JSON.stringify(s),u,v.reports_to,v.role,v.title,v.status_reason,v.autonomy_mode,v.budget_monthly_cents,v.spent_monthly_cents,JSON.stringify(v.permissions_json),JSON.stringify(v.metadata_json),v.project_id,v.template_slug),!y&&(T({type:"agent.create",summary:`Created ${c}`,meta:{agent_id:d,files:w}}),a.suppress_live_event||(0,t.AC)({type:"agent_created",agent_id:d,agent_name:c,triggered_by:a.triggered_by||null})),{agent:{...v,status:"created",generated:!0,files:w},files:w}}function _(a){let b=(0,h.getDb)(),c=A(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 T({type:"agent.delete",summary:`Deleted ${c.name}`,status:"complete",meta:{agent_id:a}}),{ok:!0}}function aa(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),T({type:"agent.update",summary:`Updated ${a}`,meta:{id:a,patch:b}}),{ok:!0}):{ok:!1,error:"nothing to update"}}function ab(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=z(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),T({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 ac(a={}){let b=(0,h.getDb)(),c=x(a.agent_id||a.agentId||a.id||a.name||"custom-agent"),d=E(c)||b.prepare("SELECT * FROM agents WHERE name = ?").get(a.name||""),e=d?A(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,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(`
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),T({type:"schedule.upsert",summary:`Scheduled ${e.name} \xb7 ${f}`,status:i?"enabled":"paused",meta:{schedule_id:g}}),{ok:!0,schedule:B(b.prepare("SELECT * FROM schedules WHERE id = ?").get(g))}}function ad(a){return(0,i.Jh)(),f.join(i.m4,`madarx-${a}-${y()}.md`)}function ae({triggered_by:a="manual"}={}){let b=ad("competitor-report"),c=y(),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),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}
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=U({kind:"competitor-report",title:f,agent:"Competitor Intelligence Agent",agent_id:"competitor-intelligence",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return V({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 af({triggered_by:a="manual"}={}){let b=ad("marketing-plan"),c=y(),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=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}
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=U({kind:"marketing-plan",title:f,agent:"Marketing Strategist Agent",agent_id:"marketing-strategist",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return V({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 ag({triggered_by:a="manual"}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=b.prepare("SELECT * FROM agents WHERE generated = 1").all().map(A);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 U({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 ah(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 U({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 ai({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:D().filter(d),tasks:(0,r.Vk)({limit:100}).filter(d),runs:M(20).filter(d),audit:P(20).filter(d),activity:(0,r.kP)({limit:50}).filter(d),schedules:L().filter(d),connectors:(0,h.getDb)().prepare("SELECT * FROM connectors ORDER BY name ASC").all(),artifacts:Q(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:P(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=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
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 aj(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 ak(a){return a?{id:a.id,session_id:a.session_id,role:a.role,content:a.content,tool_calls:z(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 al(a=50){return(0,h.getDb)().prepare("SELECT * FROM chat_sessions ORDER BY COALESCE(last_message_at, created_at) DESC LIMIT ?").all(a).map(aj)}function am(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(ak);return{...aj(c),messages:d}}function an({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 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(`
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 ao(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 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(`
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,24 +3184,24 @@ ${e}`,triggered_by:b})}function ai({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 ap(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 aq(a){return{ok:(0,h.getDb)().prepare("DELETE FROM chat_sessions WHERE id = ?").run(a).changes>0}}function ar(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(U({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=$({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&&ac({agent_id:e.agent.id,schedule:d,action_kind:"agent-tick"});let g=U({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(af({triggered_by:"orchestrator"}),"Marketing plan generated."):c.includes("competitor")||c.includes("daily report")?f(ae({triggered_by:"orchestrator"}),"Competitor report generated."):c.includes("heartbeat")||c.includes("schedule tick")?f(ag({triggered_by:"orchestrator"}),"Heartbeat tick completed."):c.includes("claude")||c.includes("ui mockup")||c.includes("website")||c.includes("landing page")?f(ah({prompt:b},{triggered_by:"orchestrator"}),"Claude Code command prepared. Approve in the dashboard to execute."):f(U({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 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}
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 as({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 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
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)}T({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)&&T({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(U({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 at({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 as({once:!0})}[h,j,l,m,n,o,p,q,r,s,t,u]=w.then?(await w)():w,d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";c.d(b,{fP:()=>k});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:"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 i(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;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)}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(`
3192
3192
  UPDATE marketplace_items
3193
3193
  SET title=?, description=?, category=?, author=?, source_kind=?,
3194
3194
  source_url=?, version=?, manifest_json=?, risk_summary=?, tags=?
3195
3195
  WHERE id=?
3196
- `).run(c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,e):(a.prepare(`
3196
+ `).run(c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,e);else{a.prepare(`
3197
3197
  INSERT INTO marketplace_items
3198
3198
  (id, kind, slug, title, description, category, author,
3199
3199
  source_kind, source_url, version, manifest_json, risk_summary, tags, created_at)
3200
3200
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
3201
- `).run(e,b,c.slug,c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,new Date().toISOString()),a.prepare(`
3202
- INSERT OR IGNORE INTO marketplace_installations (item_id, installed)
3203
- VALUES (?, 0)
3204
- `).run(e))}let j={slug:"mines",title:"Mines",description:"Mining project analysis: portfolio screening, data interpretation, tiered valuation, market intelligence, and NI 43-101 report packaging.",category:"industry",author:"madarx",source_kind:"builtin",source_url:null,version:"0.1.0",risk_summary:"High-risk valuation and report tools are gated; external providers disabled by default.",tags:["mining","metals","due-diligence","valuation"],manifest:{module_id:"mines",manifest_path:"config/madarx-module.json",agents:["mines-analyst","mines-data-interpreter","mines-valuation-analyst","mines-market-researcher","mines-report-packager"],tools:["mines_project_create","mines_project_read","mines_catalog_import","mines_data_import","mines_document_extract","mines_extract_facts","mines_spatial_index","mines_assumption_validate","mines_valuation_run","mines_sensitivity_run","mines_market_snapshot","mines_report_generate"],skill_packs:["mines-taxonomy-classification","mines-ocr-spanish","mines-tiered-valuation","mines-ni43101-template","mines-provenance-rules"],workflow_templates:["mine-project-intake","mine-valuation","mine-market-trend-monitor","mine-portfolio-screen"],nav:[{label:"Mines",href:"/mines",icon:"Pickaxe",group:"Industry"}]}};function k(a){try{for(let b of g)i(a,"skill",b);for(let b of h)i(a,"bundle",b);for(let b of e)i(a,"skill",{slug:`open-design-${b.slug}`,title:b.title,description:b.description,category:"design",author:"nexu-io",source_kind:"github",source_url:`https://github.com/nexu-io/open-design/tree/main/skills/${b.slug}`,version:null,risk_summary:"Read-only design corpus — no external writes.",tags:["design","open-design","nexu-io"],manifest:{invocation:`/open-design/${b.slug}`,file_paths:[`workspace/skills/open-design/skills/${b.slug}/SKILL.md`],trigger_examples:[`apply ${b.slug.replace(/-/g," ")}`,"design using open-design"],upstream_slug:b.slug}});i(a,"bundle",f),function(a){try{for(let b of d){let c=a.prepare("SELECT id FROM marketplace_items WHERE kind = 'connection' AND slug = ?").get(b.slug),d=c?.id||`connection:${b.slug}`,e=b.manifest?JSON.stringify(b.manifest):null,f=b.tags?JSON.stringify(b.tags):null;c?a.prepare(`
3201
+ `).run(e,b,c.slug,c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,new Date().toISOString());let d=+!!c?.manifest?.default;a.prepare(`
3202
+ INSERT OR IGNORE INTO marketplace_installations (item_id, installed, installed_at)
3203
+ VALUES (?, ?, ?)
3204
+ `).run(e,d,d?new Date().toISOString():null)}}let k={slug:"mines",title:"Mines",description:"Mining project analysis: portfolio screening, data interpretation, tiered valuation, market intelligence, and NI 43-101 report packaging.",category:"industry",author:"madarx",source_kind:"builtin",source_url:null,version:"0.1.0",risk_summary:"High-risk valuation and report tools are gated; external providers disabled by default.",tags:["mining","metals","due-diligence","valuation"],manifest:{module_id:"mines",manifest_path:"config/madarx-module.json",agents:["mines-analyst","mines-data-interpreter","mines-valuation-analyst","mines-market-researcher","mines-report-packager"],tools:["mines_project_create","mines_project_read","mines_catalog_import","mines_data_import","mines_document_extract","mines_extract_facts","mines_spatial_index","mines_assumption_validate","mines_valuation_run","mines_sensitivity_run","mines_market_snapshot","mines_report_generate"],skill_packs:["mines-taxonomy-classification","mines-ocr-spanish","mines-tiered-valuation","mines-ni43101-template","mines-provenance-rules"],workflow_templates:["mine-project-intake","mine-valuation","mine-market-trend-monitor","mine-portfolio-screen"],nav:[{label:"Mines",href:"/mines",icon:"Pickaxe",group:"Industry"}]}};function l(a){try{for(let b of h)j(a,"skill",{slug:b.slug,title:b.title,description:b.description,category:b.category,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:b.risk_summary,tags:b.tags,manifest:{invocation:b.invocation,default:!0,uses_tools:b.tools,trigger_examples:b.trigger_examples}});for(let b of g)j(a,"skill",b);for(let b of i)j(a,"bundle",b);for(let b of e)j(a,"skill",{slug:`open-design-${b.slug}`,title:b.title,description:b.description,category:"design",author:"nexu-io",source_kind:"github",source_url:`https://github.com/nexu-io/open-design/tree/main/skills/${b.slug}`,version:null,risk_summary:"Read-only design corpus — no external writes.",tags:["design","open-design","nexu-io"],manifest:{invocation:`/open-design/${b.slug}`,file_paths:[`workspace/skills/open-design/skills/${b.slug}/SKILL.md`],trigger_examples:[`apply ${b.slug.replace(/-/g," ")}`,"design using open-design"],upstream_slug:b.slug}});j(a,"bundle",f),function(a){try{for(let b of d){let c=a.prepare("SELECT id FROM marketplace_items WHERE kind = 'connection' AND slug = ?").get(b.slug),d=c?.id||`connection:${b.slug}`,e=b.manifest?JSON.stringify(b.manifest):null,f=b.tags?JSON.stringify(b.tags):null;c?a.prepare(`
3205
3205
  UPDATE marketplace_items
3206
3206
  SET title = ?, description = ?, category = ?, author = ?, source_kind = ?,
3207
3207
  source_url = ?, version = ?, manifest_json = ?, risk_summary = ?, tags = ?
@@ -3214,7 +3214,7 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
3214
3214
  `).run(d,b.slug,b.title,b.description,b.category,b.author,b.source_kind,b.source_url,b.version,e,b.risk_summary,f,new Date().toISOString()),a.prepare(`
3215
3215
  INSERT OR IGNORE INTO marketplace_installations (item_id, installed)
3216
3216
  VALUES (?, 0)
3217
- `).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),i(a,"module",j)}catch(a){console.warn("[marketplace-seeds] seed failed:",a?.message||a)}}g.map(a=>a.slug),h.map(a=>a.slug),e.map(a=>`open-design-${a.slug}`),f.slug},61423:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DJ:()=>j,Im:()=>u,Ip:()=>n,Rt:()=>p,Sk:()=>B,U1:()=>s,W6:()=>o,ct:()=>l,gA:()=>q,hF:()=>r,jz:()=>x,vr:()=>t,xx:()=>w,yK:()=>y});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=a([g]);g=(i.then?(await i)():i)[0];let z=f.join(h.nJ,"disk"),A=f.join(h.nJ,".default-project-seeded"),B="personal",C=["agents","agent_template_installations","agent_memory","disk_files","disk_folders","missions","transcripts","artifacts","heartbeat_tasks","approval_requests","audit_logs","activity_log","tool_egress","secrets"];function j(a){return String(a||"project").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"}function k(a){return a?{...a}:null}function l(a){return f.join(h.un,"projects",a)}function m(a,b=900){let c=String(a||"").replace(/\s+/g," ").trim();return c.length>b?`${c.slice(0,b).trim()}...`:c}let D=new Set(["md","markdown","text","txt","html","htm"]);function n(a,b={}){if(!a)throw Error("project_id is required");let c=(0,g.getDb)(),d=(0,g.newId)("activity"),e=b.created_at||(0,g.nowIso)(),f=void 0!==b.folder_id?b.folder_id:b.details&&void 0!==b.details.folder_id?b.details.folder_id:null,h={title:b.title||b.summary||"Project update",summary:b.summary||b.title||"Project update",status:b.status||null,source:b.source||"system",update_kind:b.update_kind||null,...b.details,folder_id:f};return c.prepare(`
3217
+ `).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),j(a,"module",k)}catch(a){console.warn("[marketplace-seeds] seed failed:",a?.message||a)}}h.map(a=>a.slug);let m=["research","comms","documents","data","web"];function n(){let a=a=>a.charAt(0).toUpperCase()+a.slice(1),b=["## Default skills","","You ship with these ready-to-use business skills. Reach for them by intent;","each is backed by your enabled tools and stays within the usual approval gates.",""];for(let c of function(){let a=new Map;for(let b of h)a.has(b.category)||a.set(b.category,[]),a.get(b.category).push(b.slug);return m.filter(b=>a.has(b)).map(b=>({category:b,count:a.get(b).length,names:a.get(b)}))}()){for(let d of(b.push(`### ${a(c.category)}`),c.names)){let a=h.find(a=>a.slug===d);a&&b.push(`- **${a.title}** (\`${a.invocation}\`) — ${a.description} _Tools: ${a.tools.join(", ")}._`)}b.push("")}return b.join("\n").trimEnd()+"\n"}g.map(a=>a.slug),i.map(a=>a.slug),e.map(a=>`open-design-${a.slug}`),f.slug},61423:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DJ:()=>j,Im:()=>u,Ip:()=>n,Rt:()=>p,Sk:()=>B,U1:()=>s,W6:()=>o,ct:()=>l,gA:()=>q,hF:()=>r,jz:()=>x,vr:()=>t,xx:()=>w,yK:()=>y});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=a([g]);g=(i.then?(await i)():i)[0];let z=f.join(h.nJ,"disk"),A=f.join(h.nJ,".default-project-seeded"),B="personal",C=["agents","agent_template_installations","agent_memory","disk_files","disk_folders","missions","transcripts","artifacts","heartbeat_tasks","approval_requests","audit_logs","activity_log","tool_egress","secrets"];function j(a){return String(a||"project").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"}function k(a){return a?{...a}:null}function l(a){return f.join(h.un,"projects",a)}function m(a,b=900){let c=String(a||"").replace(/\s+/g," ").trim();return c.length>b?`${c.slice(0,b).trim()}...`:c}let D=new Set(["md","markdown","text","txt","html","htm"]);function n(a,b={}){if(!a)throw Error("project_id is required");let c=(0,g.getDb)(),d=(0,g.newId)("activity"),e=b.created_at||(0,g.nowIso)(),f=void 0!==b.folder_id?b.folder_id:b.details&&void 0!==b.details.folder_id?b.details.folder_id:null,h={title:b.title||b.summary||"Project update",summary:b.summary||b.title||"Project update",status:b.status||null,source:b.source||"system",update_kind:b.update_kind||null,...b.details,folder_id:f};return c.prepare(`
3218
3218
  INSERT INTO activity_log
3219
3219
  (id, actor_type, actor_id, agent_id, run_id, entity_type, entity_id, action, details_json, created_at, project_id)
3220
3220
  VALUES (?, ?, ?, ?, ?, 'project', ?, ?, ?, ?, ?)