madarx 2.19.0 → 2.22.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 (1231) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +688 -674
  3. package/.next/standalone/.next/app-path-routes-manifest.json +80 -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 +2 -2
  8. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  9. package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/admin/page.js +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 +3 -3
  13. package/.next/standalone/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/agents/page.js +1 -1
  16. package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/agents/[id]/active-run/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/agents/active-runs/route.js +1 -0
  34. package/.next/standalone/.next/server/app/api/agents/active-runs/route.js.nft.json +1 -0
  35. package/.next/standalone/.next/server/app/api/agents/active-runs/route_client-reference-manifest.js +1 -0
  36. package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/agents/resume-approval/route.js +1 -0
  39. package/.next/standalone/.next/server/app/api/agents/resume-approval/route.js.nft.json +1 -0
  40. package/.next/standalone/.next/server/app/api/agents/resume-approval/route_client-reference-manifest.js +1 -0
  41. package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/brand/share/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/cloud/schema/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route.js +2 -2
  65. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/onboarding/launch/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/orchestrator/stream/attach/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/orchestrator/stream/route.js +58 -63
  123. package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/orchestrator/upload/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/orgs/join-complete/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
  202. package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/whatsapp/disconnect/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/approvals/page.js +2 -2
  209. package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
  211. package/.next/standalone/.next/server/app/architecture.html +2 -2
  212. package/.next/standalone/.next/server/app/architecture.rsc +3 -3
  213. package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
  214. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/brand.html +2 -2
  217. package/.next/standalone/.next/server/app/brand.rsc +3 -3
  218. package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
  219. package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
  220. package/.next/standalone/.next/server/app/federated-ai.html +2 -2
  221. package/.next/standalone/.next/server/app/federated-ai.rsc +3 -3
  222. package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
  224. package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/hail/[id]/page.js +1 -1
  226. package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +2 -2
  228. package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/hail/page.js +1 -1
  230. package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/index.html +2 -2
  234. package/.next/standalone/.next/server/app/index.rsc +4 -4
  235. package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/join.html +1 -1
  237. package/.next/standalone/.next/server/app/join.rsc +3 -3
  238. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/marketplace/page.js +3 -3
  240. package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/missions/page.js +2 -2
  245. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/onboarding/team/page_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  250. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  251. package/.next/standalone/.next/server/app/org/page.js +1 -1
  252. package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/page.js +4 -4
  255. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  256. package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/projects/[slug]/page.js +2 -2
  258. package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/projects/new/page.js +3 -3
  260. package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/projects/new.html +2 -2
  262. package/.next/standalone/.next/server/app/projects/new.rsc +4 -4
  263. package/.next/standalone/.next/server/app/projects/page.js +28 -24
  264. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  265. package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/schedules/page.js +2 -2
  269. package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
  271. package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  272. package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/app/settings/brand.html +2 -2
  275. package/.next/standalone/.next/server/app/settings/brand.rsc +3 -3
  276. package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
  277. package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
  280. package/.next/standalone/.next/server/app/settings/onboarding.rsc +3 -3
  281. package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
  282. package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
  283. package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/settings.html +2 -2
  289. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  290. package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  291. package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
  292. package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
  293. package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/tasks/page.js +2 -2
  295. package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  296. package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
  297. package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  299. package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
  300. package/.next/standalone/.next/server/app/whatsapp.html +2 -2
  301. package/.next/standalone/.next/server/app/whatsapp.rsc +3 -3
  302. package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
  303. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
  304. package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
  305. package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  306. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
  307. package/.next/standalone/.next/server/app-paths-manifest.json +80 -78
  308. package/.next/standalone/.next/server/chunks/1699.js +248 -64
  309. package/.next/standalone/.next/server/chunks/3230.js +11 -11
  310. package/.next/standalone/.next/server/chunks/4740.js +1 -1
  311. package/.next/standalone/.next/server/chunks/511.js +7 -7
  312. package/.next/standalone/.next/server/chunks/6059.js +1 -1
  313. package/.next/standalone/.next/server/chunks/7098.js +1 -0
  314. package/.next/standalone/.next/server/functions-config-manifest.json +54 -52
  315. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  316. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  317. package/.next/standalone/.next/server/pages/404.html +2 -2
  318. package/.next/standalone/.next/server/pages/500.html +1 -1
  319. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  320. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  321. package/.next/standalone/.next/static/IDXwXTmFu4HQak2wJH1Qy/_buildManifest.js +1 -0
  322. package/.next/standalone/.next/static/chunks/app/activity/loading-1ba78d5ff6330abc.js +1 -0
  323. package/.next/standalone/.next/static/chunks/app/agents/[id]/loading-1ba78d5ff6330abc.js +1 -0
  324. package/.next/standalone/.next/static/chunks/app/agents/[id]/page-b10b2ac79b5980a8.js +1 -0
  325. package/.next/standalone/.next/static/chunks/app/agents/loading-1ba78d5ff6330abc.js +1 -0
  326. package/.next/standalone/.next/static/chunks/app/agents/page-c3aa602e9ee205d1.js +1 -0
  327. package/.next/standalone/.next/static/chunks/app/api/activity/route-1ba78d5ff6330abc.js +1 -0
  328. package/.next/standalone/.next/static/chunks/app/api/admin/audit-export/route-1ba78d5ff6330abc.js +1 -0
  329. package/.next/standalone/.next/static/chunks/app/api/admin/share-links/route-1ba78d5ff6330abc.js +1 -0
  330. package/.next/standalone/.next/static/chunks/app/api/agent-memory/route-1ba78d5ff6330abc.js +1 -0
  331. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-1ba78d5ff6330abc.js +1 -0
  332. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/events/route-1ba78d5ff6330abc.js +1 -0
  333. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/log/route-1ba78d5ff6330abc.js +1 -0
  334. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/route-1ba78d5ff6330abc.js +1 -0
  335. package/.next/standalone/.next/static/chunks/app/api/agent-runs/route-1ba78d5ff6330abc.js +1 -0
  336. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/active-run/route-1ba78d5ff6330abc.js +1 -0
  337. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/chain/route-1ba78d5ff6330abc.js +1 -0
  338. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/memory/route-1ba78d5ff6330abc.js +1 -0
  339. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/reports/route-1ba78d5ff6330abc.js +1 -0
  340. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/run/route-1ba78d5ff6330abc.js +1 -0
  341. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/skills/route-1ba78d5ff6330abc.js +1 -0
  342. package/.next/standalone/.next/static/chunks/app/api/agents/active-runs/route-1ba78d5ff6330abc.js +1 -0
  343. package/.next/standalone/.next/static/chunks/app/api/agents/create/route-1ba78d5ff6330abc.js +1 -0
  344. package/.next/standalone/.next/static/chunks/app/api/agents/ops/route-1ba78d5ff6330abc.js +1 -0
  345. package/.next/standalone/.next/static/chunks/app/api/agents/resume-approval/route-1ba78d5ff6330abc.js +1 -0
  346. package/.next/standalone/.next/static/chunks/app/api/approvals/[id]/route-1ba78d5ff6330abc.js +1 -0
  347. package/.next/standalone/.next/static/chunks/app/api/approvals/route-1ba78d5ff6330abc.js +1 -0
  348. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/acl/route-1ba78d5ff6330abc.js +1 -0
  349. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/protect/route-1ba78d5ff6330abc.js +1 -0
  350. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/raw/route-1ba78d5ff6330abc.js +1 -0
  351. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/route-1ba78d5ff6330abc.js +1 -0
  352. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-1ba78d5ff6330abc.js +1 -0
  353. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/route-1ba78d5ff6330abc.js +1 -0
  354. package/.next/standalone/.next/static/chunks/app/api/artifacts/upload/route-1ba78d5ff6330abc.js +1 -0
  355. package/.next/standalone/.next/static/chunks/app/api/audit/list/route-1ba78d5ff6330abc.js +1 -0
  356. package/.next/standalone/.next/static/chunks/app/api/audit/search/route-1ba78d5ff6330abc.js +1 -0
  357. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-1ba78d5ff6330abc.js +1 -0
  358. package/.next/standalone/.next/static/chunks/app/api/auth/config/route-1ba78d5ff6330abc.js +1 -0
  359. package/.next/standalone/.next/static/chunks/app/api/auth/join-bootstrap/route-1ba78d5ff6330abc.js +1 -0
  360. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-1ba78d5ff6330abc.js +1 -0
  361. package/.next/standalone/.next/static/chunks/app/api/brand/route-1ba78d5ff6330abc.js +1 -0
  362. package/.next/standalone/.next/static/chunks/app/api/brand/share/route-1ba78d5ff6330abc.js +1 -0
  363. package/.next/standalone/.next/static/chunks/app/api/chat/sessions/[id]/route-1ba78d5ff6330abc.js +1 -0
  364. package/.next/standalone/.next/static/chunks/app/api/chat/sessions/route-1ba78d5ff6330abc.js +1 -0
  365. package/.next/standalone/.next/static/chunks/app/api/cloud/schema/route-1ba78d5ff6330abc.js +1 -0
  366. package/.next/standalone/.next/static/chunks/app/api/config/env/route-1ba78d5ff6330abc.js +1 -0
  367. package/.next/standalone/.next/static/chunks/app/api/config/route-1ba78d5ff6330abc.js +1 -0
  368. package/.next/standalone/.next/static/chunks/app/api/connections/[service]/route-1ba78d5ff6330abc.js +1 -0
  369. package/.next/standalone/.next/static/chunks/app/api/connections/[service]/verify/route-1ba78d5ff6330abc.js +1 -0
  370. package/.next/standalone/.next/static/chunks/app/api/connections/route-1ba78d5ff6330abc.js +1 -0
  371. package/.next/standalone/.next/static/chunks/app/api/cron/tick/route-1ba78d5ff6330abc.js +1 -0
  372. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-1ba78d5ff6330abc.js +1 -0
  373. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/route-1ba78d5ff6330abc.js +1 -0
  374. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-1ba78d5ff6330abc.js +1 -0
  375. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-1ba78d5ff6330abc.js +1 -0
  376. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/import/route-1ba78d5ff6330abc.js +1 -0
  377. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/route-1ba78d5ff6330abc.js +1 -0
  378. package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/blob/route-1ba78d5ff6330abc.js +1 -0
  379. package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/route-1ba78d5ff6330abc.js +1 -0
  380. package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-1ba78d5ff6330abc.js +1 -0
  381. package/.next/standalone/.next/static/chunks/app/api/disk/files/route-1ba78d5ff6330abc.js +1 -0
  382. package/.next/standalone/.next/static/chunks/app/api/disk/folders/route-1ba78d5ff6330abc.js +1 -0
  383. package/.next/standalone/.next/static/chunks/app/api/events/since/[cursor]/route-1ba78d5ff6330abc.js +1 -0
  384. package/.next/standalone/.next/static/chunks/app/api/events/stream/route-1ba78d5ff6330abc.js +1 -0
  385. package/.next/standalone/.next/static/chunks/app/api/fs/create-folder/route-1ba78d5ff6330abc.js +1 -0
  386. package/.next/standalone/.next/static/chunks/app/api/fs/pick-folder/route-1ba78d5ff6330abc.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-1ba78d5ff6330abc.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-1ba78d5ff6330abc.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-1ba78d5ff6330abc.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-1ba78d5ff6330abc.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-1ba78d5ff6330abc.js +1 -0
  392. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-1ba78d5ff6330abc.js +1 -0
  393. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/route-1ba78d5ff6330abc.js +1 -0
  394. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-1ba78d5ff6330abc.js +1 -0
  395. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/route-1ba78d5ff6330abc.js +1 -0
  396. package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-1ba78d5ff6330abc.js +1 -0
  397. package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/route-1ba78d5ff6330abc.js +1 -0
  398. package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-1ba78d5ff6330abc.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/validate/route-1ba78d5ff6330abc.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/api/heartbeat/tick/route-1ba78d5ff6330abc.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/api/heartbeat/worker/route-1ba78d5ff6330abc.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/api/help/route-1ba78d5ff6330abc.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-1ba78d5ff6330abc.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/route-1ba78d5ff6330abc.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/route-1ba78d5ff6330abc.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/api/integrations/google/callback/route-1ba78d5ff6330abc.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/api/integrations/google/oauth/route-1ba78d5ff6330abc.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/api/marketplace/[id]/route-1ba78d5ff6330abc.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/api/marketplace/open-design/route-1ba78d5ff6330abc.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/api/marketplace/route-1ba78d5ff6330abc.js +1 -0
  411. package/.next/standalone/.next/static/chunks/app/api/mines/import-roots/route-1ba78d5ff6330abc.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/mines/portfolio/route-1ba78d5ff6330abc.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-1ba78d5ff6330abc.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-1ba78d5ff6330abc.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/import/route-1ba78d5ff6330abc.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/publish/route-1ba78d5ff6330abc.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/mines/projects/route-1ba78d5ff6330abc.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/missions/route-1ba78d5ff6330abc.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/models/route-1ba78d5ff6330abc.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/onboarding/blueprint/route-1ba78d5ff6330abc.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/onboarding/launch/route-1ba78d5ff6330abc.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/orchestrator/command/route-1ba78d5ff6330abc.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/attach/route-1ba78d5ff6330abc.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/route-1ba78d5ff6330abc.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/orchestrator/upload/route-1ba78d5ff6330abc.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/org/route-1ba78d5ff6330abc.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-1ba78d5ff6330abc.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/route-1ba78d5ff6330abc.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-1ba78d5ff6330abc.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-1ba78d5ff6330abc.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/route-1ba78d5ff6330abc.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/route-1ba78d5ff6330abc.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/orgs/invites/pending/route-1ba78d5ff6330abc.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/orgs/join/route-1ba78d5ff6330abc.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/orgs/join-complete/route-1ba78d5ff6330abc.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/orgs/route-1ba78d5ff6330abc.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/printing-press/clis/route-1ba78d5ff6330abc.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/printing-press/install/route-1ba78d5ff6330abc.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/printing-press/security-mode/route-1ba78d5ff6330abc.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/privacy/config/route-1ba78d5ff6330abc.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/privacy/verify/route-1ba78d5ff6330abc.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/route-1ba78d5ff6330abc.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/share-link/route-1ba78d5ff6330abc.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-1ba78d5ff6330abc.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-1ba78d5ff6330abc.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-1ba78d5ff6330abc.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/route-1ba78d5ff6330abc.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-1ba78d5ff6330abc.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/route-1ba78d5ff6330abc.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/validate/route-1ba78d5ff6330abc.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/processes/route-1ba78d5ff6330abc.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/processes/start-and-route/route-1ba78d5ff6330abc.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/library/route-1ba78d5ff6330abc.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/route-1ba78d5ff6330abc.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/projects/route-1ba78d5ff6330abc.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/runs/approve-claude-run/route-1ba78d5ff6330abc.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/runs/claude-code-dry-run/route-1ba78d5ff6330abc.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/runs/competitor-report/route-1ba78d5ff6330abc.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/runs/engine-ping/route-1ba78d5ff6330abc.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/runs/marketing-plan/route-1ba78d5ff6330abc.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/api/schedules/upsert/route-1ba78d5ff6330abc.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/api/secrets/[name]/route-1ba78d5ff6330abc.js +1 -0
  463. package/.next/standalone/.next/static/chunks/app/api/secrets/route-1ba78d5ff6330abc.js +1 -0
  464. package/.next/standalone/.next/static/chunks/app/api/settings/trust-mode/route-1ba78d5ff6330abc.js +1 -0
  465. package/.next/standalone/.next/static/chunks/app/api/share/[token]/otp/route-1ba78d5ff6330abc.js +1 -0
  466. package/.next/standalone/.next/static/chunks/app/api/share/[token]/route-1ba78d5ff6330abc.js +1 -0
  467. package/.next/standalone/.next/static/chunks/app/api/share/[token]/verify/route-1ba78d5ff6330abc.js +1 -0
  468. package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/otp/route-1ba78d5ff6330abc.js +1 -0
  469. package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/route-1ba78d5ff6330abc.js +1 -0
  470. package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/verify/route-1ba78d5ff6330abc.js +1 -0
  471. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-1ba78d5ff6330abc.js +1 -0
  472. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/publish/route-1ba78d5ff6330abc.js +1 -0
  473. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/route-1ba78d5ff6330abc.js +1 -0
  474. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/status/route-1ba78d5ff6330abc.js +1 -0
  475. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/unpublish/route-1ba78d5ff6330abc.js +1 -0
  476. package/.next/standalone/.next/static/chunks/app/api/state/route-1ba78d5ff6330abc.js +1 -0
  477. package/.next/standalone/.next/static/chunks/app/api/system/update/route-1ba78d5ff6330abc.js +1 -0
  478. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/active-run/route-1ba78d5ff6330abc.js +1 -0
  479. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/attachments/route-1ba78d5ff6330abc.js +1 -0
  480. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-1ba78d5ff6330abc.js +1 -0
  481. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/route-1ba78d5ff6330abc.js +1 -0
  482. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checkout/route-1ba78d5ff6330abc.js +1 -0
  483. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/children/route-1ba78d5ff6330abc.js +1 -0
  484. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/comments/route-1ba78d5ff6330abc.js +1 -0
  485. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/events/route-1ba78d5ff6330abc.js +1 -0
  486. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/live-runs/route-1ba78d5ff6330abc.js +1 -0
  487. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/release/route-1ba78d5ff6330abc.js +1 -0
  488. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/route-1ba78d5ff6330abc.js +1 -0
  489. package/.next/standalone/.next/static/chunks/app/api/tasks/route-1ba78d5ff6330abc.js +1 -0
  490. package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/[id]/route-1ba78d5ff6330abc.js +1 -0
  491. package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/route-1ba78d5ff6330abc.js +1 -0
  492. package/.next/standalone/.next/static/chunks/app/api/tool-egress/route-1ba78d5ff6330abc.js +1 -0
  493. package/.next/standalone/.next/static/chunks/app/api/tools/[name]/approve/route-1ba78d5ff6330abc.js +1 -0
  494. package/.next/standalone/.next/static/chunks/app/api/tools/[name]/route-1ba78d5ff6330abc.js +1 -0
  495. package/.next/standalone/.next/static/chunks/app/api/tools/route-1ba78d5ff6330abc.js +1 -0
  496. package/.next/standalone/.next/static/chunks/app/api/transcripts/route-1ba78d5ff6330abc.js +1 -0
  497. package/.next/standalone/.next/static/chunks/app/api/voice/providers/route-1ba78d5ff6330abc.js +1 -0
  498. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/context/route-1ba78d5ff6330abc.js +1 -0
  499. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/session/route-1ba78d5ff6330abc.js +1 -0
  500. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tool-result/route-1ba78d5ff6330abc.js +1 -0
  501. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tools/route-1ba78d5ff6330abc.js +1 -0
  502. package/.next/standalone/.next/static/chunks/app/api/voice/tts/route-1ba78d5ff6330abc.js +1 -0
  503. package/.next/standalone/.next/static/chunks/app/api/whatsapp/allowlist/route-1ba78d5ff6330abc.js +1 -0
  504. package/.next/standalone/.next/static/chunks/app/api/whatsapp/disconnect/route-1ba78d5ff6330abc.js +1 -0
  505. package/.next/standalone/.next/static/chunks/app/api/whatsapp/messages/route-1ba78d5ff6330abc.js +1 -0
  506. package/.next/standalone/.next/static/chunks/app/api/whatsapp/qr/route-1ba78d5ff6330abc.js +1 -0
  507. package/.next/standalone/.next/static/chunks/app/api/whatsapp/send/route-1ba78d5ff6330abc.js +1 -0
  508. package/.next/standalone/.next/static/chunks/app/api/whatsapp/status/route-1ba78d5ff6330abc.js +1 -0
  509. package/.next/standalone/.next/static/chunks/app/approvals/loading-1ba78d5ff6330abc.js +1 -0
  510. package/.next/standalone/.next/static/chunks/app/architecture/loading-1ba78d5ff6330abc.js +1 -0
  511. package/.next/standalone/.next/static/chunks/app/audit/loading-1ba78d5ff6330abc.js +1 -0
  512. package/.next/standalone/.next/static/chunks/app/brand/loading-1ba78d5ff6330abc.js +1 -0
  513. package/.next/standalone/.next/static/chunks/app/disk/loading-1ba78d5ff6330abc.js +1 -0
  514. package/.next/standalone/.next/static/chunks/app/federated-ai/loading-1ba78d5ff6330abc.js +1 -0
  515. package/.next/standalone/.next/static/chunks/app/help/loading-1ba78d5ff6330abc.js +1 -0
  516. package/.next/standalone/.next/static/chunks/app/layout-7c734abe785c0d86.js +1 -0
  517. package/.next/standalone/.next/static/chunks/app/loading-1ba78d5ff6330abc.js +1 -0
  518. package/.next/standalone/.next/static/chunks/app/marketplace/loading-1ba78d5ff6330abc.js +1 -0
  519. package/.next/standalone/.next/static/chunks/app/missions/loading-1ba78d5ff6330abc.js +1 -0
  520. package/.next/standalone/.next/static/chunks/app/onboarding/loading-1ba78d5ff6330abc.js +1 -0
  521. package/.next/standalone/.next/static/chunks/app/org/loading-1ba78d5ff6330abc.js +1 -0
  522. package/.next/standalone/.next/static/chunks/app/page-9d742c9099ab9cd7.js +1 -0
  523. package/.next/standalone/.next/static/chunks/app/projects/[slug]/loading-1ba78d5ff6330abc.js +1 -0
  524. package/.next/standalone/.next/static/chunks/app/projects/[slug]/page-abbc7f06e58ff9ee.js +1 -0
  525. package/.next/standalone/.next/static/chunks/app/projects/loading-1ba78d5ff6330abc.js +1 -0
  526. package/.next/standalone/.next/static/chunks/app/projects/page-87457ee2932c33a3.js +1 -0
  527. package/.next/standalone/.next/static/chunks/app/reports/[file]/route-1ba78d5ff6330abc.js +1 -0
  528. package/.next/standalone/.next/static/chunks/app/reports/loading-1ba78d5ff6330abc.js +1 -0
  529. package/.next/standalone/.next/static/chunks/app/runtime/loading-1ba78d5ff6330abc.js +1 -0
  530. package/.next/standalone/.next/static/chunks/app/schedules/loading-1ba78d5ff6330abc.js +1 -0
  531. package/.next/standalone/.next/static/chunks/app/settings/loading-1ba78d5ff6330abc.js +1 -0
  532. package/.next/standalone/.next/static/chunks/app/settings/page-1ba78d5ff6330abc.js +1 -0
  533. package/.next/standalone/.next/static/chunks/app/tasks/[id]/loading-1ba78d5ff6330abc.js +1 -0
  534. package/.next/standalone/.next/static/chunks/app/tasks/loading-1ba78d5ff6330abc.js +1 -0
  535. package/.next/standalone/.next/static/chunks/app/tools/loading-1ba78d5ff6330abc.js +1 -0
  536. package/.next/standalone/.next/static/chunks/app/tools/page-1ba78d5ff6330abc.js +1 -0
  537. package/.next/standalone/.next/static/chunks/app/whatsapp/loading-1ba78d5ff6330abc.js +1 -0
  538. package/.next/standalone/.next/static/chunks/app/workflows/share/[caseId]/page-1ba78d5ff6330abc.js +1 -0
  539. package/.next/standalone/.next/static/chunks/webpack-0613e32ff96b6e16.js +1 -0
  540. package/.next/standalone/CHANGELOG.md +26 -0
  541. package/.next/standalone/package.json +1 -1
  542. package/.next/static/IDXwXTmFu4HQak2wJH1Qy/_buildManifest.js +1 -0
  543. package/.next/static/chunks/app/activity/loading-1ba78d5ff6330abc.js +1 -0
  544. package/.next/static/chunks/app/agents/[id]/loading-1ba78d5ff6330abc.js +1 -0
  545. package/.next/static/chunks/app/agents/[id]/page-b10b2ac79b5980a8.js +1 -0
  546. package/.next/static/chunks/app/agents/loading-1ba78d5ff6330abc.js +1 -0
  547. package/.next/static/chunks/app/agents/page-c3aa602e9ee205d1.js +1 -0
  548. package/.next/static/chunks/app/api/activity/route-1ba78d5ff6330abc.js +1 -0
  549. package/.next/static/chunks/app/api/admin/audit-export/route-1ba78d5ff6330abc.js +1 -0
  550. package/.next/static/chunks/app/api/admin/share-links/route-1ba78d5ff6330abc.js +1 -0
  551. package/.next/static/chunks/app/api/agent-memory/route-1ba78d5ff6330abc.js +1 -0
  552. package/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-1ba78d5ff6330abc.js +1 -0
  553. package/.next/static/chunks/app/api/agent-runs/[id]/events/route-1ba78d5ff6330abc.js +1 -0
  554. package/.next/static/chunks/app/api/agent-runs/[id]/log/route-1ba78d5ff6330abc.js +1 -0
  555. package/.next/static/chunks/app/api/agent-runs/[id]/route-1ba78d5ff6330abc.js +1 -0
  556. package/.next/static/chunks/app/api/agent-runs/route-1ba78d5ff6330abc.js +1 -0
  557. package/.next/static/chunks/app/api/agents/[id]/active-run/route-1ba78d5ff6330abc.js +1 -0
  558. package/.next/static/chunks/app/api/agents/[id]/chain/route-1ba78d5ff6330abc.js +1 -0
  559. package/.next/static/chunks/app/api/agents/[id]/memory/route-1ba78d5ff6330abc.js +1 -0
  560. package/.next/static/chunks/app/api/agents/[id]/reports/route-1ba78d5ff6330abc.js +1 -0
  561. package/.next/static/chunks/app/api/agents/[id]/run/route-1ba78d5ff6330abc.js +1 -0
  562. package/.next/static/chunks/app/api/agents/[id]/skills/route-1ba78d5ff6330abc.js +1 -0
  563. package/.next/static/chunks/app/api/agents/active-runs/route-1ba78d5ff6330abc.js +1 -0
  564. package/.next/static/chunks/app/api/agents/create/route-1ba78d5ff6330abc.js +1 -0
  565. package/.next/static/chunks/app/api/agents/ops/route-1ba78d5ff6330abc.js +1 -0
  566. package/.next/static/chunks/app/api/agents/resume-approval/route-1ba78d5ff6330abc.js +1 -0
  567. package/.next/static/chunks/app/api/approvals/[id]/route-1ba78d5ff6330abc.js +1 -0
  568. package/.next/static/chunks/app/api/approvals/route-1ba78d5ff6330abc.js +1 -0
  569. package/.next/static/chunks/app/api/artifacts/[id]/acl/route-1ba78d5ff6330abc.js +1 -0
  570. package/.next/static/chunks/app/api/artifacts/[id]/protect/route-1ba78d5ff6330abc.js +1 -0
  571. package/.next/static/chunks/app/api/artifacts/[id]/raw/route-1ba78d5ff6330abc.js +1 -0
  572. package/.next/static/chunks/app/api/artifacts/[id]/route-1ba78d5ff6330abc.js +1 -0
  573. package/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-1ba78d5ff6330abc.js +1 -0
  574. package/.next/static/chunks/app/api/artifacts/[id]/share-link/route-1ba78d5ff6330abc.js +1 -0
  575. package/.next/static/chunks/app/api/artifacts/upload/route-1ba78d5ff6330abc.js +1 -0
  576. package/.next/static/chunks/app/api/audit/list/route-1ba78d5ff6330abc.js +1 -0
  577. package/.next/static/chunks/app/api/audit/search/route-1ba78d5ff6330abc.js +1 -0
  578. package/.next/static/chunks/app/api/auth/callback/route-1ba78d5ff6330abc.js +1 -0
  579. package/.next/static/chunks/app/api/auth/config/route-1ba78d5ff6330abc.js +1 -0
  580. package/.next/static/chunks/app/api/auth/join-bootstrap/route-1ba78d5ff6330abc.js +1 -0
  581. package/.next/static/chunks/app/api/auth/session/route-1ba78d5ff6330abc.js +1 -0
  582. package/.next/static/chunks/app/api/brand/route-1ba78d5ff6330abc.js +1 -0
  583. package/.next/static/chunks/app/api/brand/share/route-1ba78d5ff6330abc.js +1 -0
  584. package/.next/static/chunks/app/api/chat/sessions/[id]/route-1ba78d5ff6330abc.js +1 -0
  585. package/.next/static/chunks/app/api/chat/sessions/route-1ba78d5ff6330abc.js +1 -0
  586. package/.next/static/chunks/app/api/cloud/schema/route-1ba78d5ff6330abc.js +1 -0
  587. package/.next/static/chunks/app/api/config/env/route-1ba78d5ff6330abc.js +1 -0
  588. package/.next/static/chunks/app/api/config/route-1ba78d5ff6330abc.js +1 -0
  589. package/.next/static/chunks/app/api/connections/[service]/route-1ba78d5ff6330abc.js +1 -0
  590. package/.next/static/chunks/app/api/connections/[service]/verify/route-1ba78d5ff6330abc.js +1 -0
  591. package/.next/static/chunks/app/api/connections/route-1ba78d5ff6330abc.js +1 -0
  592. package/.next/static/chunks/app/api/cron/tick/route-1ba78d5ff6330abc.js +1 -0
  593. package/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-1ba78d5ff6330abc.js +1 -0
  594. package/.next/static/chunks/app/api/dashboard/spaces/[id]/route-1ba78d5ff6330abc.js +1 -0
  595. package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-1ba78d5ff6330abc.js +1 -0
  596. package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-1ba78d5ff6330abc.js +1 -0
  597. package/.next/static/chunks/app/api/dashboard/spaces/import/route-1ba78d5ff6330abc.js +1 -0
  598. package/.next/static/chunks/app/api/dashboard/spaces/route-1ba78d5ff6330abc.js +1 -0
  599. package/.next/static/chunks/app/api/disk/files/[id]/blob/route-1ba78d5ff6330abc.js +1 -0
  600. package/.next/static/chunks/app/api/disk/files/[id]/route-1ba78d5ff6330abc.js +1 -0
  601. package/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-1ba78d5ff6330abc.js +1 -0
  602. package/.next/static/chunks/app/api/disk/files/route-1ba78d5ff6330abc.js +1 -0
  603. package/.next/static/chunks/app/api/disk/folders/route-1ba78d5ff6330abc.js +1 -0
  604. package/.next/static/chunks/app/api/events/since/[cursor]/route-1ba78d5ff6330abc.js +1 -0
  605. package/.next/static/chunks/app/api/events/stream/route-1ba78d5ff6330abc.js +1 -0
  606. package/.next/static/chunks/app/api/fs/create-folder/route-1ba78d5ff6330abc.js +1 -0
  607. package/.next/static/chunks/app/api/fs/pick-folder/route-1ba78d5ff6330abc.js +1 -0
  608. package/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-1ba78d5ff6330abc.js +1 -0
  609. package/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-1ba78d5ff6330abc.js +1 -0
  610. package/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-1ba78d5ff6330abc.js +1 -0
  611. package/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-1ba78d5ff6330abc.js +1 -0
  612. package/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-1ba78d5ff6330abc.js +1 -0
  613. package/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-1ba78d5ff6330abc.js +1 -0
  614. package/.next/static/chunks/app/api/hail/engagements/[id]/route-1ba78d5ff6330abc.js +1 -0
  615. package/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-1ba78d5ff6330abc.js +1 -0
  616. package/.next/static/chunks/app/api/hail/engagements/route-1ba78d5ff6330abc.js +1 -0
  617. package/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-1ba78d5ff6330abc.js +1 -0
  618. package/.next/static/chunks/app/api/hail/interviews/[id]/route-1ba78d5ff6330abc.js +1 -0
  619. package/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-1ba78d5ff6330abc.js +1 -0
  620. package/.next/static/chunks/app/api/hail/setup-packages/validate/route-1ba78d5ff6330abc.js +1 -0
  621. package/.next/static/chunks/app/api/heartbeat/tick/route-1ba78d5ff6330abc.js +1 -0
  622. package/.next/static/chunks/app/api/heartbeat/worker/route-1ba78d5ff6330abc.js +1 -0
  623. package/.next/static/chunks/app/api/help/route-1ba78d5ff6330abc.js +1 -0
  624. package/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-1ba78d5ff6330abc.js +1 -0
  625. package/.next/static/chunks/app/api/hermes/jobs/[id]/route-1ba78d5ff6330abc.js +1 -0
  626. package/.next/static/chunks/app/api/hermes/jobs/route-1ba78d5ff6330abc.js +1 -0
  627. package/.next/static/chunks/app/api/integrations/google/callback/route-1ba78d5ff6330abc.js +1 -0
  628. package/.next/static/chunks/app/api/integrations/google/oauth/route-1ba78d5ff6330abc.js +1 -0
  629. package/.next/static/chunks/app/api/marketplace/[id]/route-1ba78d5ff6330abc.js +1 -0
  630. package/.next/static/chunks/app/api/marketplace/open-design/route-1ba78d5ff6330abc.js +1 -0
  631. package/.next/static/chunks/app/api/marketplace/route-1ba78d5ff6330abc.js +1 -0
  632. package/.next/static/chunks/app/api/mines/import-roots/route-1ba78d5ff6330abc.js +1 -0
  633. package/.next/static/chunks/app/api/mines/portfolio/route-1ba78d5ff6330abc.js +1 -0
  634. package/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-1ba78d5ff6330abc.js +1 -0
  635. package/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-1ba78d5ff6330abc.js +1 -0
  636. package/.next/static/chunks/app/api/mines/projects/[id]/import/route-1ba78d5ff6330abc.js +1 -0
  637. package/.next/static/chunks/app/api/mines/projects/[id]/publish/route-1ba78d5ff6330abc.js +1 -0
  638. package/.next/static/chunks/app/api/mines/projects/route-1ba78d5ff6330abc.js +1 -0
  639. package/.next/static/chunks/app/api/missions/route-1ba78d5ff6330abc.js +1 -0
  640. package/.next/static/chunks/app/api/models/route-1ba78d5ff6330abc.js +1 -0
  641. package/.next/static/chunks/app/api/onboarding/blueprint/route-1ba78d5ff6330abc.js +1 -0
  642. package/.next/static/chunks/app/api/onboarding/launch/route-1ba78d5ff6330abc.js +1 -0
  643. package/.next/static/chunks/app/api/orchestrator/command/route-1ba78d5ff6330abc.js +1 -0
  644. package/.next/static/chunks/app/api/orchestrator/stream/attach/route-1ba78d5ff6330abc.js +1 -0
  645. package/.next/static/chunks/app/api/orchestrator/stream/route-1ba78d5ff6330abc.js +1 -0
  646. package/.next/static/chunks/app/api/orchestrator/upload/route-1ba78d5ff6330abc.js +1 -0
  647. package/.next/static/chunks/app/api/org/route-1ba78d5ff6330abc.js +1 -0
  648. package/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-1ba78d5ff6330abc.js +1 -0
  649. package/.next/static/chunks/app/api/orgs/[id]/invites/route-1ba78d5ff6330abc.js +1 -0
  650. package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-1ba78d5ff6330abc.js +1 -0
  651. package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-1ba78d5ff6330abc.js +1 -0
  652. package/.next/static/chunks/app/api/orgs/[id]/members/route-1ba78d5ff6330abc.js +1 -0
  653. package/.next/static/chunks/app/api/orgs/[id]/route-1ba78d5ff6330abc.js +1 -0
  654. package/.next/static/chunks/app/api/orgs/invites/pending/route-1ba78d5ff6330abc.js +1 -0
  655. package/.next/static/chunks/app/api/orgs/join/route-1ba78d5ff6330abc.js +1 -0
  656. package/.next/static/chunks/app/api/orgs/join-complete/route-1ba78d5ff6330abc.js +1 -0
  657. package/.next/static/chunks/app/api/orgs/route-1ba78d5ff6330abc.js +1 -0
  658. package/.next/static/chunks/app/api/printing-press/clis/route-1ba78d5ff6330abc.js +1 -0
  659. package/.next/static/chunks/app/api/printing-press/install/route-1ba78d5ff6330abc.js +1 -0
  660. package/.next/static/chunks/app/api/printing-press/security-mode/route-1ba78d5ff6330abc.js +1 -0
  661. package/.next/static/chunks/app/api/privacy/config/route-1ba78d5ff6330abc.js +1 -0
  662. package/.next/static/chunks/app/api/privacy/verify/route-1ba78d5ff6330abc.js +1 -0
  663. package/.next/static/chunks/app/api/processes/[id]/route-1ba78d5ff6330abc.js +1 -0
  664. package/.next/static/chunks/app/api/processes/[id]/share-link/route-1ba78d5ff6330abc.js +1 -0
  665. package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-1ba78d5ff6330abc.js +1 -0
  666. package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-1ba78d5ff6330abc.js +1 -0
  667. package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-1ba78d5ff6330abc.js +1 -0
  668. package/.next/static/chunks/app/api/processes/definitions/[slug]/route-1ba78d5ff6330abc.js +1 -0
  669. package/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-1ba78d5ff6330abc.js +1 -0
  670. package/.next/static/chunks/app/api/processes/definitions/route-1ba78d5ff6330abc.js +1 -0
  671. package/.next/static/chunks/app/api/processes/definitions/validate/route-1ba78d5ff6330abc.js +1 -0
  672. package/.next/static/chunks/app/api/processes/route-1ba78d5ff6330abc.js +1 -0
  673. package/.next/static/chunks/app/api/processes/start-and-route/route-1ba78d5ff6330abc.js +1 -0
  674. package/.next/static/chunks/app/api/projects/[slug]/library/route-1ba78d5ff6330abc.js +1 -0
  675. package/.next/static/chunks/app/api/projects/[slug]/route-1ba78d5ff6330abc.js +1 -0
  676. package/.next/static/chunks/app/api/projects/route-1ba78d5ff6330abc.js +1 -0
  677. package/.next/static/chunks/app/api/runs/approve-claude-run/route-1ba78d5ff6330abc.js +1 -0
  678. package/.next/static/chunks/app/api/runs/claude-code-dry-run/route-1ba78d5ff6330abc.js +1 -0
  679. package/.next/static/chunks/app/api/runs/competitor-report/route-1ba78d5ff6330abc.js +1 -0
  680. package/.next/static/chunks/app/api/runs/engine-ping/route-1ba78d5ff6330abc.js +1 -0
  681. package/.next/static/chunks/app/api/runs/marketing-plan/route-1ba78d5ff6330abc.js +1 -0
  682. package/.next/static/chunks/app/api/schedules/upsert/route-1ba78d5ff6330abc.js +1 -0
  683. package/.next/static/chunks/app/api/secrets/[name]/route-1ba78d5ff6330abc.js +1 -0
  684. package/.next/static/chunks/app/api/secrets/route-1ba78d5ff6330abc.js +1 -0
  685. package/.next/static/chunks/app/api/settings/trust-mode/route-1ba78d5ff6330abc.js +1 -0
  686. package/.next/static/chunks/app/api/share/[token]/otp/route-1ba78d5ff6330abc.js +1 -0
  687. package/.next/static/chunks/app/api/share/[token]/route-1ba78d5ff6330abc.js +1 -0
  688. package/.next/static/chunks/app/api/share/[token]/verify/route-1ba78d5ff6330abc.js +1 -0
  689. package/.next/static/chunks/app/api/share/space/[token]/otp/route-1ba78d5ff6330abc.js +1 -0
  690. package/.next/static/chunks/app/api/share/space/[token]/route-1ba78d5ff6330abc.js +1 -0
  691. package/.next/static/chunks/app/api/share/space/[token]/verify/route-1ba78d5ff6330abc.js +1 -0
  692. package/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-1ba78d5ff6330abc.js +1 -0
  693. package/.next/static/chunks/app/api/shared/spaces/publish/route-1ba78d5ff6330abc.js +1 -0
  694. package/.next/static/chunks/app/api/shared/spaces/route-1ba78d5ff6330abc.js +1 -0
  695. package/.next/static/chunks/app/api/shared/spaces/status/route-1ba78d5ff6330abc.js +1 -0
  696. package/.next/static/chunks/app/api/shared/spaces/unpublish/route-1ba78d5ff6330abc.js +1 -0
  697. package/.next/static/chunks/app/api/state/route-1ba78d5ff6330abc.js +1 -0
  698. package/.next/static/chunks/app/api/system/update/route-1ba78d5ff6330abc.js +1 -0
  699. package/.next/static/chunks/app/api/tasks/[id]/active-run/route-1ba78d5ff6330abc.js +1 -0
  700. package/.next/static/chunks/app/api/tasks/[id]/attachments/route-1ba78d5ff6330abc.js +1 -0
  701. package/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-1ba78d5ff6330abc.js +1 -0
  702. package/.next/static/chunks/app/api/tasks/[id]/checklist/route-1ba78d5ff6330abc.js +1 -0
  703. package/.next/static/chunks/app/api/tasks/[id]/checkout/route-1ba78d5ff6330abc.js +1 -0
  704. package/.next/static/chunks/app/api/tasks/[id]/children/route-1ba78d5ff6330abc.js +1 -0
  705. package/.next/static/chunks/app/api/tasks/[id]/comments/route-1ba78d5ff6330abc.js +1 -0
  706. package/.next/static/chunks/app/api/tasks/[id]/events/route-1ba78d5ff6330abc.js +1 -0
  707. package/.next/static/chunks/app/api/tasks/[id]/live-runs/route-1ba78d5ff6330abc.js +1 -0
  708. package/.next/static/chunks/app/api/tasks/[id]/release/route-1ba78d5ff6330abc.js +1 -0
  709. package/.next/static/chunks/app/api/tasks/[id]/route-1ba78d5ff6330abc.js +1 -0
  710. package/.next/static/chunks/app/api/tasks/route-1ba78d5ff6330abc.js +1 -0
  711. package/.next/static/chunks/app/api/tool-allowlists/[id]/route-1ba78d5ff6330abc.js +1 -0
  712. package/.next/static/chunks/app/api/tool-allowlists/route-1ba78d5ff6330abc.js +1 -0
  713. package/.next/static/chunks/app/api/tool-egress/route-1ba78d5ff6330abc.js +1 -0
  714. package/.next/static/chunks/app/api/tools/[name]/approve/route-1ba78d5ff6330abc.js +1 -0
  715. package/.next/static/chunks/app/api/tools/[name]/route-1ba78d5ff6330abc.js +1 -0
  716. package/.next/static/chunks/app/api/tools/route-1ba78d5ff6330abc.js +1 -0
  717. package/.next/static/chunks/app/api/transcripts/route-1ba78d5ff6330abc.js +1 -0
  718. package/.next/static/chunks/app/api/voice/providers/route-1ba78d5ff6330abc.js +1 -0
  719. package/.next/static/chunks/app/api/voice/realtime/context/route-1ba78d5ff6330abc.js +1 -0
  720. package/.next/static/chunks/app/api/voice/realtime/session/route-1ba78d5ff6330abc.js +1 -0
  721. package/.next/static/chunks/app/api/voice/realtime/tool-result/route-1ba78d5ff6330abc.js +1 -0
  722. package/.next/static/chunks/app/api/voice/realtime/tools/route-1ba78d5ff6330abc.js +1 -0
  723. package/.next/static/chunks/app/api/voice/tts/route-1ba78d5ff6330abc.js +1 -0
  724. package/.next/static/chunks/app/api/whatsapp/allowlist/route-1ba78d5ff6330abc.js +1 -0
  725. package/.next/static/chunks/app/api/whatsapp/disconnect/route-1ba78d5ff6330abc.js +1 -0
  726. package/.next/static/chunks/app/api/whatsapp/messages/route-1ba78d5ff6330abc.js +1 -0
  727. package/.next/static/chunks/app/api/whatsapp/qr/route-1ba78d5ff6330abc.js +1 -0
  728. package/.next/static/chunks/app/api/whatsapp/send/route-1ba78d5ff6330abc.js +1 -0
  729. package/.next/static/chunks/app/api/whatsapp/status/route-1ba78d5ff6330abc.js +1 -0
  730. package/.next/static/chunks/app/approvals/loading-1ba78d5ff6330abc.js +1 -0
  731. package/.next/static/chunks/app/architecture/loading-1ba78d5ff6330abc.js +1 -0
  732. package/.next/static/chunks/app/audit/loading-1ba78d5ff6330abc.js +1 -0
  733. package/.next/static/chunks/app/brand/loading-1ba78d5ff6330abc.js +1 -0
  734. package/.next/static/chunks/app/disk/loading-1ba78d5ff6330abc.js +1 -0
  735. package/.next/static/chunks/app/federated-ai/loading-1ba78d5ff6330abc.js +1 -0
  736. package/.next/static/chunks/app/help/loading-1ba78d5ff6330abc.js +1 -0
  737. package/.next/static/chunks/app/layout-7c734abe785c0d86.js +1 -0
  738. package/.next/static/chunks/app/loading-1ba78d5ff6330abc.js +1 -0
  739. package/.next/static/chunks/app/marketplace/loading-1ba78d5ff6330abc.js +1 -0
  740. package/.next/static/chunks/app/missions/loading-1ba78d5ff6330abc.js +1 -0
  741. package/.next/static/chunks/app/onboarding/loading-1ba78d5ff6330abc.js +1 -0
  742. package/.next/static/chunks/app/org/loading-1ba78d5ff6330abc.js +1 -0
  743. package/.next/static/chunks/app/page-9d742c9099ab9cd7.js +1 -0
  744. package/.next/static/chunks/app/projects/[slug]/loading-1ba78d5ff6330abc.js +1 -0
  745. package/.next/static/chunks/app/projects/[slug]/page-abbc7f06e58ff9ee.js +1 -0
  746. package/.next/static/chunks/app/projects/loading-1ba78d5ff6330abc.js +1 -0
  747. package/.next/static/chunks/app/projects/page-87457ee2932c33a3.js +1 -0
  748. package/.next/static/chunks/app/reports/[file]/route-1ba78d5ff6330abc.js +1 -0
  749. package/.next/static/chunks/app/reports/loading-1ba78d5ff6330abc.js +1 -0
  750. package/.next/static/chunks/app/runtime/loading-1ba78d5ff6330abc.js +1 -0
  751. package/.next/static/chunks/app/schedules/loading-1ba78d5ff6330abc.js +1 -0
  752. package/.next/static/chunks/app/settings/loading-1ba78d5ff6330abc.js +1 -0
  753. package/.next/static/chunks/app/settings/page-1ba78d5ff6330abc.js +1 -0
  754. package/.next/static/chunks/app/tasks/[id]/loading-1ba78d5ff6330abc.js +1 -0
  755. package/.next/static/chunks/app/tasks/loading-1ba78d5ff6330abc.js +1 -0
  756. package/.next/static/chunks/app/tools/loading-1ba78d5ff6330abc.js +1 -0
  757. package/.next/static/chunks/app/tools/page-1ba78d5ff6330abc.js +1 -0
  758. package/.next/static/chunks/app/whatsapp/loading-1ba78d5ff6330abc.js +1 -0
  759. package/.next/static/chunks/app/workflows/share/[caseId]/page-1ba78d5ff6330abc.js +1 -0
  760. package/.next/static/chunks/webpack-0613e32ff96b6e16.js +1 -0
  761. package/CHANGELOG.md +26 -0
  762. package/app/agents/agent-events-bus.js +4 -0
  763. package/app/api/agents/active-runs/route.js +59 -0
  764. package/app/api/agents/resume-approval/route.js +102 -0
  765. package/app/api/connections/[service]/verify/route.js +83 -0
  766. package/app/api/orchestrator/stream/route.js +137 -55
  767. package/app/components/app-topbar.jsx +34 -88
  768. package/app/components/dashboard/apply-stream-event.js +15 -0
  769. package/app/components/dashboard/bg-agent-reducer.js +125 -0
  770. package/app/components/dashboard/chat-panel.jsx +56 -0
  771. package/app/components/dashboard/use-bg-agents.js +34 -0
  772. package/app/components/dashboard/use-stream-command.js +65 -2
  773. package/app/projects/[slug]/page.js +2 -0
  774. package/app/projects/[slug]/project-scope-sync.jsx +26 -0
  775. package/lib/active-runs.js +5 -0
  776. package/lib/agent-config.js +22 -15
  777. package/lib/agent-engines.js +1 -1
  778. package/lib/agent-routing.js +195 -0
  779. package/lib/agent-runner.js +192 -7
  780. package/lib/agent-templates.js +1 -0
  781. package/lib/cli-action-flow.js +88 -0
  782. package/lib/connection-seeds.js +44 -0
  783. package/lib/delegation.js +94 -1
  784. package/lib/heartbeat-worker.js +13 -0
  785. package/lib/higgsfield-media-card.js +221 -0
  786. package/lib/marketplace-seeds.js +85 -0
  787. package/lib/marketplace.js +57 -5
  788. package/lib/orchestrator-tools.js +210 -6
  789. package/lib/role-capability-map.js +111 -0
  790. package/lib/seeds.js +57 -0
  791. package/lib/tools/adapters/disk.js +107 -0
  792. package/lib/tools/adapters/higgsfield.js +329 -0
  793. package/lib/tools/registry.js +87 -0
  794. package/package.json +1 -1
  795. package/.next/standalone/.next/server/chunks/5030.js +0 -1
  796. package/.next/standalone/.next/static/chunks/app/activity/loading-31bb6a3d587a09ca.js +0 -1
  797. package/.next/standalone/.next/static/chunks/app/agents/[id]/loading-31bb6a3d587a09ca.js +0 -1
  798. package/.next/standalone/.next/static/chunks/app/agents/[id]/page-721c43e75cb2dd59.js +0 -1
  799. package/.next/standalone/.next/static/chunks/app/agents/loading-31bb6a3d587a09ca.js +0 -1
  800. package/.next/standalone/.next/static/chunks/app/agents/page-b1bcb39a46a254aa.js +0 -1
  801. package/.next/standalone/.next/static/chunks/app/api/activity/route-31bb6a3d587a09ca.js +0 -1
  802. package/.next/standalone/.next/static/chunks/app/api/admin/audit-export/route-31bb6a3d587a09ca.js +0 -1
  803. package/.next/standalone/.next/static/chunks/app/api/admin/share-links/route-31bb6a3d587a09ca.js +0 -1
  804. package/.next/standalone/.next/static/chunks/app/api/agent-memory/route-31bb6a3d587a09ca.js +0 -1
  805. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-31bb6a3d587a09ca.js +0 -1
  806. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
  807. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/log/route-31bb6a3d587a09ca.js +0 -1
  808. package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/route-31bb6a3d587a09ca.js +0 -1
  809. package/.next/standalone/.next/static/chunks/app/api/agent-runs/route-31bb6a3d587a09ca.js +0 -1
  810. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
  811. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/chain/route-31bb6a3d587a09ca.js +0 -1
  812. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/memory/route-31bb6a3d587a09ca.js +0 -1
  813. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/reports/route-31bb6a3d587a09ca.js +0 -1
  814. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/run/route-31bb6a3d587a09ca.js +0 -1
  815. package/.next/standalone/.next/static/chunks/app/api/agents/[id]/skills/route-31bb6a3d587a09ca.js +0 -1
  816. package/.next/standalone/.next/static/chunks/app/api/agents/create/route-31bb6a3d587a09ca.js +0 -1
  817. package/.next/standalone/.next/static/chunks/app/api/agents/ops/route-31bb6a3d587a09ca.js +0 -1
  818. package/.next/standalone/.next/static/chunks/app/api/approvals/[id]/route-31bb6a3d587a09ca.js +0 -1
  819. package/.next/standalone/.next/static/chunks/app/api/approvals/route-31bb6a3d587a09ca.js +0 -1
  820. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
  821. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/protect/route-31bb6a3d587a09ca.js +0 -1
  822. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/raw/route-31bb6a3d587a09ca.js +0 -1
  823. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/route-31bb6a3d587a09ca.js +0 -1
  824. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
  825. package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
  826. package/.next/standalone/.next/static/chunks/app/api/artifacts/upload/route-31bb6a3d587a09ca.js +0 -1
  827. package/.next/standalone/.next/static/chunks/app/api/audit/list/route-31bb6a3d587a09ca.js +0 -1
  828. package/.next/standalone/.next/static/chunks/app/api/audit/search/route-31bb6a3d587a09ca.js +0 -1
  829. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-31bb6a3d587a09ca.js +0 -1
  830. package/.next/standalone/.next/static/chunks/app/api/auth/config/route-31bb6a3d587a09ca.js +0 -1
  831. package/.next/standalone/.next/static/chunks/app/api/auth/join-bootstrap/route-31bb6a3d587a09ca.js +0 -1
  832. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-31bb6a3d587a09ca.js +0 -1
  833. package/.next/standalone/.next/static/chunks/app/api/brand/route-31bb6a3d587a09ca.js +0 -1
  834. package/.next/standalone/.next/static/chunks/app/api/brand/share/route-31bb6a3d587a09ca.js +0 -1
  835. package/.next/standalone/.next/static/chunks/app/api/chat/sessions/[id]/route-31bb6a3d587a09ca.js +0 -1
  836. package/.next/standalone/.next/static/chunks/app/api/chat/sessions/route-31bb6a3d587a09ca.js +0 -1
  837. package/.next/standalone/.next/static/chunks/app/api/cloud/schema/route-31bb6a3d587a09ca.js +0 -1
  838. package/.next/standalone/.next/static/chunks/app/api/config/env/route-31bb6a3d587a09ca.js +0 -1
  839. package/.next/standalone/.next/static/chunks/app/api/config/route-31bb6a3d587a09ca.js +0 -1
  840. package/.next/standalone/.next/static/chunks/app/api/connections/[service]/route-31bb6a3d587a09ca.js +0 -1
  841. package/.next/standalone/.next/static/chunks/app/api/connections/[service]/verify/route-31bb6a3d587a09ca.js +0 -1
  842. package/.next/standalone/.next/static/chunks/app/api/connections/route-31bb6a3d587a09ca.js +0 -1
  843. package/.next/standalone/.next/static/chunks/app/api/cron/tick/route-31bb6a3d587a09ca.js +0 -1
  844. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-31bb6a3d587a09ca.js +0 -1
  845. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/route-31bb6a3d587a09ca.js +0 -1
  846. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
  847. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
  848. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/import/route-31bb6a3d587a09ca.js +0 -1
  849. package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/route-31bb6a3d587a09ca.js +0 -1
  850. package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/blob/route-31bb6a3d587a09ca.js +0 -1
  851. package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/route-31bb6a3d587a09ca.js +0 -1
  852. package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-31bb6a3d587a09ca.js +0 -1
  853. package/.next/standalone/.next/static/chunks/app/api/disk/files/route-31bb6a3d587a09ca.js +0 -1
  854. package/.next/standalone/.next/static/chunks/app/api/disk/folders/route-31bb6a3d587a09ca.js +0 -1
  855. package/.next/standalone/.next/static/chunks/app/api/events/since/[cursor]/route-31bb6a3d587a09ca.js +0 -1
  856. package/.next/standalone/.next/static/chunks/app/api/events/stream/route-31bb6a3d587a09ca.js +0 -1
  857. package/.next/standalone/.next/static/chunks/app/api/fs/create-folder/route-31bb6a3d587a09ca.js +0 -1
  858. package/.next/standalone/.next/static/chunks/app/api/fs/pick-folder/route-31bb6a3d587a09ca.js +0 -1
  859. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-31bb6a3d587a09ca.js +0 -1
  860. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-31bb6a3d587a09ca.js +0 -1
  861. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-31bb6a3d587a09ca.js +0 -1
  862. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-31bb6a3d587a09ca.js +0 -1
  863. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-31bb6a3d587a09ca.js +0 -1
  864. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-31bb6a3d587a09ca.js +0 -1
  865. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/route-31bb6a3d587a09ca.js +0 -1
  866. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-31bb6a3d587a09ca.js +0 -1
  867. package/.next/standalone/.next/static/chunks/app/api/hail/engagements/route-31bb6a3d587a09ca.js +0 -1
  868. package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-31bb6a3d587a09ca.js +0 -1
  869. package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/route-31bb6a3d587a09ca.js +0 -1
  870. package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-31bb6a3d587a09ca.js +0 -1
  871. package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/validate/route-31bb6a3d587a09ca.js +0 -1
  872. package/.next/standalone/.next/static/chunks/app/api/heartbeat/tick/route-31bb6a3d587a09ca.js +0 -1
  873. package/.next/standalone/.next/static/chunks/app/api/heartbeat/worker/route-31bb6a3d587a09ca.js +0 -1
  874. package/.next/standalone/.next/static/chunks/app/api/help/route-31bb6a3d587a09ca.js +0 -1
  875. package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
  876. package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/route-31bb6a3d587a09ca.js +0 -1
  877. package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/route-31bb6a3d587a09ca.js +0 -1
  878. package/.next/standalone/.next/static/chunks/app/api/integrations/google/callback/route-31bb6a3d587a09ca.js +0 -1
  879. package/.next/standalone/.next/static/chunks/app/api/integrations/google/oauth/route-31bb6a3d587a09ca.js +0 -1
  880. package/.next/standalone/.next/static/chunks/app/api/marketplace/[id]/route-31bb6a3d587a09ca.js +0 -1
  881. package/.next/standalone/.next/static/chunks/app/api/marketplace/open-design/route-31bb6a3d587a09ca.js +0 -1
  882. package/.next/standalone/.next/static/chunks/app/api/marketplace/route-31bb6a3d587a09ca.js +0 -1
  883. package/.next/standalone/.next/static/chunks/app/api/mines/import-roots/route-31bb6a3d587a09ca.js +0 -1
  884. package/.next/standalone/.next/static/chunks/app/api/mines/portfolio/route-31bb6a3d587a09ca.js +0 -1
  885. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-31bb6a3d587a09ca.js +0 -1
  886. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-31bb6a3d587a09ca.js +0 -1
  887. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/import/route-31bb6a3d587a09ca.js +0 -1
  888. package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/publish/route-31bb6a3d587a09ca.js +0 -1
  889. package/.next/standalone/.next/static/chunks/app/api/mines/projects/route-31bb6a3d587a09ca.js +0 -1
  890. package/.next/standalone/.next/static/chunks/app/api/missions/route-31bb6a3d587a09ca.js +0 -1
  891. package/.next/standalone/.next/static/chunks/app/api/models/route-31bb6a3d587a09ca.js +0 -1
  892. package/.next/standalone/.next/static/chunks/app/api/onboarding/blueprint/route-31bb6a3d587a09ca.js +0 -1
  893. package/.next/standalone/.next/static/chunks/app/api/onboarding/launch/route-31bb6a3d587a09ca.js +0 -1
  894. package/.next/standalone/.next/static/chunks/app/api/orchestrator/command/route-31bb6a3d587a09ca.js +0 -1
  895. package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/attach/route-31bb6a3d587a09ca.js +0 -1
  896. package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/route-31bb6a3d587a09ca.js +0 -1
  897. package/.next/standalone/.next/static/chunks/app/api/orchestrator/upload/route-31bb6a3d587a09ca.js +0 -1
  898. package/.next/standalone/.next/static/chunks/app/api/org/route-31bb6a3d587a09ca.js +0 -1
  899. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-31bb6a3d587a09ca.js +0 -1
  900. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/route-31bb6a3d587a09ca.js +0 -1
  901. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-31bb6a3d587a09ca.js +0 -1
  902. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-31bb6a3d587a09ca.js +0 -1
  903. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/route-31bb6a3d587a09ca.js +0 -1
  904. package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/route-31bb6a3d587a09ca.js +0 -1
  905. package/.next/standalone/.next/static/chunks/app/api/orgs/invites/pending/route-31bb6a3d587a09ca.js +0 -1
  906. package/.next/standalone/.next/static/chunks/app/api/orgs/join/route-31bb6a3d587a09ca.js +0 -1
  907. package/.next/standalone/.next/static/chunks/app/api/orgs/join-complete/route-31bb6a3d587a09ca.js +0 -1
  908. package/.next/standalone/.next/static/chunks/app/api/orgs/route-31bb6a3d587a09ca.js +0 -1
  909. package/.next/standalone/.next/static/chunks/app/api/printing-press/clis/route-31bb6a3d587a09ca.js +0 -1
  910. package/.next/standalone/.next/static/chunks/app/api/printing-press/install/route-31bb6a3d587a09ca.js +0 -1
  911. package/.next/standalone/.next/static/chunks/app/api/printing-press/security-mode/route-31bb6a3d587a09ca.js +0 -1
  912. package/.next/standalone/.next/static/chunks/app/api/privacy/config/route-31bb6a3d587a09ca.js +0 -1
  913. package/.next/standalone/.next/static/chunks/app/api/privacy/verify/route-31bb6a3d587a09ca.js +0 -1
  914. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/route-31bb6a3d587a09ca.js +0 -1
  915. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
  916. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-31bb6a3d587a09ca.js +0 -1
  917. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-31bb6a3d587a09ca.js +0 -1
  918. package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-31bb6a3d587a09ca.js +0 -1
  919. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/route-31bb6a3d587a09ca.js +0 -1
  920. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-31bb6a3d587a09ca.js +0 -1
  921. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/route-31bb6a3d587a09ca.js +0 -1
  922. package/.next/standalone/.next/static/chunks/app/api/processes/definitions/validate/route-31bb6a3d587a09ca.js +0 -1
  923. package/.next/standalone/.next/static/chunks/app/api/processes/route-31bb6a3d587a09ca.js +0 -1
  924. package/.next/standalone/.next/static/chunks/app/api/processes/start-and-route/route-31bb6a3d587a09ca.js +0 -1
  925. package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/library/route-31bb6a3d587a09ca.js +0 -1
  926. package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/route-31bb6a3d587a09ca.js +0 -1
  927. package/.next/standalone/.next/static/chunks/app/api/projects/route-31bb6a3d587a09ca.js +0 -1
  928. package/.next/standalone/.next/static/chunks/app/api/runs/approve-claude-run/route-31bb6a3d587a09ca.js +0 -1
  929. package/.next/standalone/.next/static/chunks/app/api/runs/claude-code-dry-run/route-31bb6a3d587a09ca.js +0 -1
  930. package/.next/standalone/.next/static/chunks/app/api/runs/competitor-report/route-31bb6a3d587a09ca.js +0 -1
  931. package/.next/standalone/.next/static/chunks/app/api/runs/engine-ping/route-31bb6a3d587a09ca.js +0 -1
  932. package/.next/standalone/.next/static/chunks/app/api/runs/marketing-plan/route-31bb6a3d587a09ca.js +0 -1
  933. package/.next/standalone/.next/static/chunks/app/api/schedules/upsert/route-31bb6a3d587a09ca.js +0 -1
  934. package/.next/standalone/.next/static/chunks/app/api/secrets/[name]/route-31bb6a3d587a09ca.js +0 -1
  935. package/.next/standalone/.next/static/chunks/app/api/secrets/route-31bb6a3d587a09ca.js +0 -1
  936. package/.next/standalone/.next/static/chunks/app/api/settings/trust-mode/route-31bb6a3d587a09ca.js +0 -1
  937. package/.next/standalone/.next/static/chunks/app/api/share/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
  938. package/.next/standalone/.next/static/chunks/app/api/share/[token]/route-31bb6a3d587a09ca.js +0 -1
  939. package/.next/standalone/.next/static/chunks/app/api/share/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
  940. package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
  941. package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/route-31bb6a3d587a09ca.js +0 -1
  942. package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
  943. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
  944. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/publish/route-31bb6a3d587a09ca.js +0 -1
  945. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/route-31bb6a3d587a09ca.js +0 -1
  946. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/status/route-31bb6a3d587a09ca.js +0 -1
  947. package/.next/standalone/.next/static/chunks/app/api/shared/spaces/unpublish/route-31bb6a3d587a09ca.js +0 -1
  948. package/.next/standalone/.next/static/chunks/app/api/state/route-31bb6a3d587a09ca.js +0 -1
  949. package/.next/standalone/.next/static/chunks/app/api/system/update/route-31bb6a3d587a09ca.js +0 -1
  950. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
  951. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/attachments/route-31bb6a3d587a09ca.js +0 -1
  952. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-31bb6a3d587a09ca.js +0 -1
  953. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/route-31bb6a3d587a09ca.js +0 -1
  954. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checkout/route-31bb6a3d587a09ca.js +0 -1
  955. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/children/route-31bb6a3d587a09ca.js +0 -1
  956. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/comments/route-31bb6a3d587a09ca.js +0 -1
  957. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/events/route-31bb6a3d587a09ca.js +0 -1
  958. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/live-runs/route-31bb6a3d587a09ca.js +0 -1
  959. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/release/route-31bb6a3d587a09ca.js +0 -1
  960. package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/route-31bb6a3d587a09ca.js +0 -1
  961. package/.next/standalone/.next/static/chunks/app/api/tasks/route-31bb6a3d587a09ca.js +0 -1
  962. package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/[id]/route-31bb6a3d587a09ca.js +0 -1
  963. package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/route-31bb6a3d587a09ca.js +0 -1
  964. package/.next/standalone/.next/static/chunks/app/api/tool-egress/route-31bb6a3d587a09ca.js +0 -1
  965. package/.next/standalone/.next/static/chunks/app/api/tools/[name]/approve/route-31bb6a3d587a09ca.js +0 -1
  966. package/.next/standalone/.next/static/chunks/app/api/tools/[name]/route-31bb6a3d587a09ca.js +0 -1
  967. package/.next/standalone/.next/static/chunks/app/api/tools/route-31bb6a3d587a09ca.js +0 -1
  968. package/.next/standalone/.next/static/chunks/app/api/transcripts/route-31bb6a3d587a09ca.js +0 -1
  969. package/.next/standalone/.next/static/chunks/app/api/voice/providers/route-31bb6a3d587a09ca.js +0 -1
  970. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/context/route-31bb6a3d587a09ca.js +0 -1
  971. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/session/route-31bb6a3d587a09ca.js +0 -1
  972. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tool-result/route-31bb6a3d587a09ca.js +0 -1
  973. package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tools/route-31bb6a3d587a09ca.js +0 -1
  974. package/.next/standalone/.next/static/chunks/app/api/voice/tts/route-31bb6a3d587a09ca.js +0 -1
  975. package/.next/standalone/.next/static/chunks/app/api/whatsapp/allowlist/route-31bb6a3d587a09ca.js +0 -1
  976. package/.next/standalone/.next/static/chunks/app/api/whatsapp/disconnect/route-31bb6a3d587a09ca.js +0 -1
  977. package/.next/standalone/.next/static/chunks/app/api/whatsapp/messages/route-31bb6a3d587a09ca.js +0 -1
  978. package/.next/standalone/.next/static/chunks/app/api/whatsapp/qr/route-31bb6a3d587a09ca.js +0 -1
  979. package/.next/standalone/.next/static/chunks/app/api/whatsapp/send/route-31bb6a3d587a09ca.js +0 -1
  980. package/.next/standalone/.next/static/chunks/app/api/whatsapp/status/route-31bb6a3d587a09ca.js +0 -1
  981. package/.next/standalone/.next/static/chunks/app/approvals/loading-31bb6a3d587a09ca.js +0 -1
  982. package/.next/standalone/.next/static/chunks/app/architecture/loading-31bb6a3d587a09ca.js +0 -1
  983. package/.next/standalone/.next/static/chunks/app/audit/loading-31bb6a3d587a09ca.js +0 -1
  984. package/.next/standalone/.next/static/chunks/app/brand/loading-31bb6a3d587a09ca.js +0 -1
  985. package/.next/standalone/.next/static/chunks/app/disk/loading-31bb6a3d587a09ca.js +0 -1
  986. package/.next/standalone/.next/static/chunks/app/federated-ai/loading-31bb6a3d587a09ca.js +0 -1
  987. package/.next/standalone/.next/static/chunks/app/help/loading-31bb6a3d587a09ca.js +0 -1
  988. package/.next/standalone/.next/static/chunks/app/layout-457acc50d33a5e0e.js +0 -1
  989. package/.next/standalone/.next/static/chunks/app/loading-31bb6a3d587a09ca.js +0 -1
  990. package/.next/standalone/.next/static/chunks/app/marketplace/loading-31bb6a3d587a09ca.js +0 -1
  991. package/.next/standalone/.next/static/chunks/app/missions/loading-31bb6a3d587a09ca.js +0 -1
  992. package/.next/standalone/.next/static/chunks/app/onboarding/loading-31bb6a3d587a09ca.js +0 -1
  993. package/.next/standalone/.next/static/chunks/app/org/loading-31bb6a3d587a09ca.js +0 -1
  994. package/.next/standalone/.next/static/chunks/app/page-8b485e954b4da5be.js +0 -1
  995. package/.next/standalone/.next/static/chunks/app/projects/[slug]/loading-31bb6a3d587a09ca.js +0 -1
  996. package/.next/standalone/.next/static/chunks/app/projects/[slug]/page-0bc910eac788bf29.js +0 -1
  997. package/.next/standalone/.next/static/chunks/app/projects/loading-31bb6a3d587a09ca.js +0 -1
  998. package/.next/standalone/.next/static/chunks/app/projects/page-8b61f1179feb9d4b.js +0 -1
  999. package/.next/standalone/.next/static/chunks/app/reports/[file]/route-31bb6a3d587a09ca.js +0 -1
  1000. package/.next/standalone/.next/static/chunks/app/reports/loading-31bb6a3d587a09ca.js +0 -1
  1001. package/.next/standalone/.next/static/chunks/app/runtime/loading-31bb6a3d587a09ca.js +0 -1
  1002. package/.next/standalone/.next/static/chunks/app/schedules/loading-31bb6a3d587a09ca.js +0 -1
  1003. package/.next/standalone/.next/static/chunks/app/settings/loading-31bb6a3d587a09ca.js +0 -1
  1004. package/.next/standalone/.next/static/chunks/app/settings/page-31bb6a3d587a09ca.js +0 -1
  1005. package/.next/standalone/.next/static/chunks/app/tasks/[id]/loading-31bb6a3d587a09ca.js +0 -1
  1006. package/.next/standalone/.next/static/chunks/app/tasks/loading-31bb6a3d587a09ca.js +0 -1
  1007. package/.next/standalone/.next/static/chunks/app/tools/loading-31bb6a3d587a09ca.js +0 -1
  1008. package/.next/standalone/.next/static/chunks/app/tools/page-31bb6a3d587a09ca.js +0 -1
  1009. package/.next/standalone/.next/static/chunks/app/whatsapp/loading-31bb6a3d587a09ca.js +0 -1
  1010. package/.next/standalone/.next/static/chunks/app/workflows/share/[caseId]/page-31bb6a3d587a09ca.js +0 -1
  1011. package/.next/standalone/.next/static/chunks/webpack-a7e11ef0747e2718.js +0 -1
  1012. package/.next/standalone/.next/static/sO4ApzzsDEnqk70DEBOS6/_buildManifest.js +0 -1
  1013. package/.next/static/chunks/app/activity/loading-31bb6a3d587a09ca.js +0 -1
  1014. package/.next/static/chunks/app/agents/[id]/loading-31bb6a3d587a09ca.js +0 -1
  1015. package/.next/static/chunks/app/agents/[id]/page-721c43e75cb2dd59.js +0 -1
  1016. package/.next/static/chunks/app/agents/loading-31bb6a3d587a09ca.js +0 -1
  1017. package/.next/static/chunks/app/agents/page-b1bcb39a46a254aa.js +0 -1
  1018. package/.next/static/chunks/app/api/activity/route-31bb6a3d587a09ca.js +0 -1
  1019. package/.next/static/chunks/app/api/admin/audit-export/route-31bb6a3d587a09ca.js +0 -1
  1020. package/.next/static/chunks/app/api/admin/share-links/route-31bb6a3d587a09ca.js +0 -1
  1021. package/.next/static/chunks/app/api/agent-memory/route-31bb6a3d587a09ca.js +0 -1
  1022. package/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-31bb6a3d587a09ca.js +0 -1
  1023. package/.next/static/chunks/app/api/agent-runs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
  1024. package/.next/static/chunks/app/api/agent-runs/[id]/log/route-31bb6a3d587a09ca.js +0 -1
  1025. package/.next/static/chunks/app/api/agent-runs/[id]/route-31bb6a3d587a09ca.js +0 -1
  1026. package/.next/static/chunks/app/api/agent-runs/route-31bb6a3d587a09ca.js +0 -1
  1027. package/.next/static/chunks/app/api/agents/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
  1028. package/.next/static/chunks/app/api/agents/[id]/chain/route-31bb6a3d587a09ca.js +0 -1
  1029. package/.next/static/chunks/app/api/agents/[id]/memory/route-31bb6a3d587a09ca.js +0 -1
  1030. package/.next/static/chunks/app/api/agents/[id]/reports/route-31bb6a3d587a09ca.js +0 -1
  1031. package/.next/static/chunks/app/api/agents/[id]/run/route-31bb6a3d587a09ca.js +0 -1
  1032. package/.next/static/chunks/app/api/agents/[id]/skills/route-31bb6a3d587a09ca.js +0 -1
  1033. package/.next/static/chunks/app/api/agents/create/route-31bb6a3d587a09ca.js +0 -1
  1034. package/.next/static/chunks/app/api/agents/ops/route-31bb6a3d587a09ca.js +0 -1
  1035. package/.next/static/chunks/app/api/approvals/[id]/route-31bb6a3d587a09ca.js +0 -1
  1036. package/.next/static/chunks/app/api/approvals/route-31bb6a3d587a09ca.js +0 -1
  1037. package/.next/static/chunks/app/api/artifacts/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
  1038. package/.next/static/chunks/app/api/artifacts/[id]/protect/route-31bb6a3d587a09ca.js +0 -1
  1039. package/.next/static/chunks/app/api/artifacts/[id]/raw/route-31bb6a3d587a09ca.js +0 -1
  1040. package/.next/static/chunks/app/api/artifacts/[id]/route-31bb6a3d587a09ca.js +0 -1
  1041. package/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
  1042. package/.next/static/chunks/app/api/artifacts/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
  1043. package/.next/static/chunks/app/api/artifacts/upload/route-31bb6a3d587a09ca.js +0 -1
  1044. package/.next/static/chunks/app/api/audit/list/route-31bb6a3d587a09ca.js +0 -1
  1045. package/.next/static/chunks/app/api/audit/search/route-31bb6a3d587a09ca.js +0 -1
  1046. package/.next/static/chunks/app/api/auth/callback/route-31bb6a3d587a09ca.js +0 -1
  1047. package/.next/static/chunks/app/api/auth/config/route-31bb6a3d587a09ca.js +0 -1
  1048. package/.next/static/chunks/app/api/auth/join-bootstrap/route-31bb6a3d587a09ca.js +0 -1
  1049. package/.next/static/chunks/app/api/auth/session/route-31bb6a3d587a09ca.js +0 -1
  1050. package/.next/static/chunks/app/api/brand/route-31bb6a3d587a09ca.js +0 -1
  1051. package/.next/static/chunks/app/api/brand/share/route-31bb6a3d587a09ca.js +0 -1
  1052. package/.next/static/chunks/app/api/chat/sessions/[id]/route-31bb6a3d587a09ca.js +0 -1
  1053. package/.next/static/chunks/app/api/chat/sessions/route-31bb6a3d587a09ca.js +0 -1
  1054. package/.next/static/chunks/app/api/cloud/schema/route-31bb6a3d587a09ca.js +0 -1
  1055. package/.next/static/chunks/app/api/config/env/route-31bb6a3d587a09ca.js +0 -1
  1056. package/.next/static/chunks/app/api/config/route-31bb6a3d587a09ca.js +0 -1
  1057. package/.next/static/chunks/app/api/connections/[service]/route-31bb6a3d587a09ca.js +0 -1
  1058. package/.next/static/chunks/app/api/connections/[service]/verify/route-31bb6a3d587a09ca.js +0 -1
  1059. package/.next/static/chunks/app/api/connections/route-31bb6a3d587a09ca.js +0 -1
  1060. package/.next/static/chunks/app/api/cron/tick/route-31bb6a3d587a09ca.js +0 -1
  1061. package/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-31bb6a3d587a09ca.js +0 -1
  1062. package/.next/static/chunks/app/api/dashboard/spaces/[id]/route-31bb6a3d587a09ca.js +0 -1
  1063. package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
  1064. package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
  1065. package/.next/static/chunks/app/api/dashboard/spaces/import/route-31bb6a3d587a09ca.js +0 -1
  1066. package/.next/static/chunks/app/api/dashboard/spaces/route-31bb6a3d587a09ca.js +0 -1
  1067. package/.next/static/chunks/app/api/disk/files/[id]/blob/route-31bb6a3d587a09ca.js +0 -1
  1068. package/.next/static/chunks/app/api/disk/files/[id]/route-31bb6a3d587a09ca.js +0 -1
  1069. package/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-31bb6a3d587a09ca.js +0 -1
  1070. package/.next/static/chunks/app/api/disk/files/route-31bb6a3d587a09ca.js +0 -1
  1071. package/.next/static/chunks/app/api/disk/folders/route-31bb6a3d587a09ca.js +0 -1
  1072. package/.next/static/chunks/app/api/events/since/[cursor]/route-31bb6a3d587a09ca.js +0 -1
  1073. package/.next/static/chunks/app/api/events/stream/route-31bb6a3d587a09ca.js +0 -1
  1074. package/.next/static/chunks/app/api/fs/create-folder/route-31bb6a3d587a09ca.js +0 -1
  1075. package/.next/static/chunks/app/api/fs/pick-folder/route-31bb6a3d587a09ca.js +0 -1
  1076. package/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-31bb6a3d587a09ca.js +0 -1
  1077. package/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-31bb6a3d587a09ca.js +0 -1
  1078. package/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-31bb6a3d587a09ca.js +0 -1
  1079. package/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-31bb6a3d587a09ca.js +0 -1
  1080. package/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-31bb6a3d587a09ca.js +0 -1
  1081. package/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-31bb6a3d587a09ca.js +0 -1
  1082. package/.next/static/chunks/app/api/hail/engagements/[id]/route-31bb6a3d587a09ca.js +0 -1
  1083. package/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-31bb6a3d587a09ca.js +0 -1
  1084. package/.next/static/chunks/app/api/hail/engagements/route-31bb6a3d587a09ca.js +0 -1
  1085. package/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-31bb6a3d587a09ca.js +0 -1
  1086. package/.next/static/chunks/app/api/hail/interviews/[id]/route-31bb6a3d587a09ca.js +0 -1
  1087. package/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-31bb6a3d587a09ca.js +0 -1
  1088. package/.next/static/chunks/app/api/hail/setup-packages/validate/route-31bb6a3d587a09ca.js +0 -1
  1089. package/.next/static/chunks/app/api/heartbeat/tick/route-31bb6a3d587a09ca.js +0 -1
  1090. package/.next/static/chunks/app/api/heartbeat/worker/route-31bb6a3d587a09ca.js +0 -1
  1091. package/.next/static/chunks/app/api/help/route-31bb6a3d587a09ca.js +0 -1
  1092. package/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
  1093. package/.next/static/chunks/app/api/hermes/jobs/[id]/route-31bb6a3d587a09ca.js +0 -1
  1094. package/.next/static/chunks/app/api/hermes/jobs/route-31bb6a3d587a09ca.js +0 -1
  1095. package/.next/static/chunks/app/api/integrations/google/callback/route-31bb6a3d587a09ca.js +0 -1
  1096. package/.next/static/chunks/app/api/integrations/google/oauth/route-31bb6a3d587a09ca.js +0 -1
  1097. package/.next/static/chunks/app/api/marketplace/[id]/route-31bb6a3d587a09ca.js +0 -1
  1098. package/.next/static/chunks/app/api/marketplace/open-design/route-31bb6a3d587a09ca.js +0 -1
  1099. package/.next/static/chunks/app/api/marketplace/route-31bb6a3d587a09ca.js +0 -1
  1100. package/.next/static/chunks/app/api/mines/import-roots/route-31bb6a3d587a09ca.js +0 -1
  1101. package/.next/static/chunks/app/api/mines/portfolio/route-31bb6a3d587a09ca.js +0 -1
  1102. package/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-31bb6a3d587a09ca.js +0 -1
  1103. package/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-31bb6a3d587a09ca.js +0 -1
  1104. package/.next/static/chunks/app/api/mines/projects/[id]/import/route-31bb6a3d587a09ca.js +0 -1
  1105. package/.next/static/chunks/app/api/mines/projects/[id]/publish/route-31bb6a3d587a09ca.js +0 -1
  1106. package/.next/static/chunks/app/api/mines/projects/route-31bb6a3d587a09ca.js +0 -1
  1107. package/.next/static/chunks/app/api/missions/route-31bb6a3d587a09ca.js +0 -1
  1108. package/.next/static/chunks/app/api/models/route-31bb6a3d587a09ca.js +0 -1
  1109. package/.next/static/chunks/app/api/onboarding/blueprint/route-31bb6a3d587a09ca.js +0 -1
  1110. package/.next/static/chunks/app/api/onboarding/launch/route-31bb6a3d587a09ca.js +0 -1
  1111. package/.next/static/chunks/app/api/orchestrator/command/route-31bb6a3d587a09ca.js +0 -1
  1112. package/.next/static/chunks/app/api/orchestrator/stream/attach/route-31bb6a3d587a09ca.js +0 -1
  1113. package/.next/static/chunks/app/api/orchestrator/stream/route-31bb6a3d587a09ca.js +0 -1
  1114. package/.next/static/chunks/app/api/orchestrator/upload/route-31bb6a3d587a09ca.js +0 -1
  1115. package/.next/static/chunks/app/api/org/route-31bb6a3d587a09ca.js +0 -1
  1116. package/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-31bb6a3d587a09ca.js +0 -1
  1117. package/.next/static/chunks/app/api/orgs/[id]/invites/route-31bb6a3d587a09ca.js +0 -1
  1118. package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-31bb6a3d587a09ca.js +0 -1
  1119. package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-31bb6a3d587a09ca.js +0 -1
  1120. package/.next/static/chunks/app/api/orgs/[id]/members/route-31bb6a3d587a09ca.js +0 -1
  1121. package/.next/static/chunks/app/api/orgs/[id]/route-31bb6a3d587a09ca.js +0 -1
  1122. package/.next/static/chunks/app/api/orgs/invites/pending/route-31bb6a3d587a09ca.js +0 -1
  1123. package/.next/static/chunks/app/api/orgs/join/route-31bb6a3d587a09ca.js +0 -1
  1124. package/.next/static/chunks/app/api/orgs/join-complete/route-31bb6a3d587a09ca.js +0 -1
  1125. package/.next/static/chunks/app/api/orgs/route-31bb6a3d587a09ca.js +0 -1
  1126. package/.next/static/chunks/app/api/printing-press/clis/route-31bb6a3d587a09ca.js +0 -1
  1127. package/.next/static/chunks/app/api/printing-press/install/route-31bb6a3d587a09ca.js +0 -1
  1128. package/.next/static/chunks/app/api/printing-press/security-mode/route-31bb6a3d587a09ca.js +0 -1
  1129. package/.next/static/chunks/app/api/privacy/config/route-31bb6a3d587a09ca.js +0 -1
  1130. package/.next/static/chunks/app/api/privacy/verify/route-31bb6a3d587a09ca.js +0 -1
  1131. package/.next/static/chunks/app/api/processes/[id]/route-31bb6a3d587a09ca.js +0 -1
  1132. package/.next/static/chunks/app/api/processes/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
  1133. package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-31bb6a3d587a09ca.js +0 -1
  1134. package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-31bb6a3d587a09ca.js +0 -1
  1135. package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-31bb6a3d587a09ca.js +0 -1
  1136. package/.next/static/chunks/app/api/processes/definitions/[slug]/route-31bb6a3d587a09ca.js +0 -1
  1137. package/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-31bb6a3d587a09ca.js +0 -1
  1138. package/.next/static/chunks/app/api/processes/definitions/route-31bb6a3d587a09ca.js +0 -1
  1139. package/.next/static/chunks/app/api/processes/definitions/validate/route-31bb6a3d587a09ca.js +0 -1
  1140. package/.next/static/chunks/app/api/processes/route-31bb6a3d587a09ca.js +0 -1
  1141. package/.next/static/chunks/app/api/processes/start-and-route/route-31bb6a3d587a09ca.js +0 -1
  1142. package/.next/static/chunks/app/api/projects/[slug]/library/route-31bb6a3d587a09ca.js +0 -1
  1143. package/.next/static/chunks/app/api/projects/[slug]/route-31bb6a3d587a09ca.js +0 -1
  1144. package/.next/static/chunks/app/api/projects/route-31bb6a3d587a09ca.js +0 -1
  1145. package/.next/static/chunks/app/api/runs/approve-claude-run/route-31bb6a3d587a09ca.js +0 -1
  1146. package/.next/static/chunks/app/api/runs/claude-code-dry-run/route-31bb6a3d587a09ca.js +0 -1
  1147. package/.next/static/chunks/app/api/runs/competitor-report/route-31bb6a3d587a09ca.js +0 -1
  1148. package/.next/static/chunks/app/api/runs/engine-ping/route-31bb6a3d587a09ca.js +0 -1
  1149. package/.next/static/chunks/app/api/runs/marketing-plan/route-31bb6a3d587a09ca.js +0 -1
  1150. package/.next/static/chunks/app/api/schedules/upsert/route-31bb6a3d587a09ca.js +0 -1
  1151. package/.next/static/chunks/app/api/secrets/[name]/route-31bb6a3d587a09ca.js +0 -1
  1152. package/.next/static/chunks/app/api/secrets/route-31bb6a3d587a09ca.js +0 -1
  1153. package/.next/static/chunks/app/api/settings/trust-mode/route-31bb6a3d587a09ca.js +0 -1
  1154. package/.next/static/chunks/app/api/share/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
  1155. package/.next/static/chunks/app/api/share/[token]/route-31bb6a3d587a09ca.js +0 -1
  1156. package/.next/static/chunks/app/api/share/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
  1157. package/.next/static/chunks/app/api/share/space/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
  1158. package/.next/static/chunks/app/api/share/space/[token]/route-31bb6a3d587a09ca.js +0 -1
  1159. package/.next/static/chunks/app/api/share/space/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
  1160. package/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
  1161. package/.next/static/chunks/app/api/shared/spaces/publish/route-31bb6a3d587a09ca.js +0 -1
  1162. package/.next/static/chunks/app/api/shared/spaces/route-31bb6a3d587a09ca.js +0 -1
  1163. package/.next/static/chunks/app/api/shared/spaces/status/route-31bb6a3d587a09ca.js +0 -1
  1164. package/.next/static/chunks/app/api/shared/spaces/unpublish/route-31bb6a3d587a09ca.js +0 -1
  1165. package/.next/static/chunks/app/api/state/route-31bb6a3d587a09ca.js +0 -1
  1166. package/.next/static/chunks/app/api/system/update/route-31bb6a3d587a09ca.js +0 -1
  1167. package/.next/static/chunks/app/api/tasks/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
  1168. package/.next/static/chunks/app/api/tasks/[id]/attachments/route-31bb6a3d587a09ca.js +0 -1
  1169. package/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-31bb6a3d587a09ca.js +0 -1
  1170. package/.next/static/chunks/app/api/tasks/[id]/checklist/route-31bb6a3d587a09ca.js +0 -1
  1171. package/.next/static/chunks/app/api/tasks/[id]/checkout/route-31bb6a3d587a09ca.js +0 -1
  1172. package/.next/static/chunks/app/api/tasks/[id]/children/route-31bb6a3d587a09ca.js +0 -1
  1173. package/.next/static/chunks/app/api/tasks/[id]/comments/route-31bb6a3d587a09ca.js +0 -1
  1174. package/.next/static/chunks/app/api/tasks/[id]/events/route-31bb6a3d587a09ca.js +0 -1
  1175. package/.next/static/chunks/app/api/tasks/[id]/live-runs/route-31bb6a3d587a09ca.js +0 -1
  1176. package/.next/static/chunks/app/api/tasks/[id]/release/route-31bb6a3d587a09ca.js +0 -1
  1177. package/.next/static/chunks/app/api/tasks/[id]/route-31bb6a3d587a09ca.js +0 -1
  1178. package/.next/static/chunks/app/api/tasks/route-31bb6a3d587a09ca.js +0 -1
  1179. package/.next/static/chunks/app/api/tool-allowlists/[id]/route-31bb6a3d587a09ca.js +0 -1
  1180. package/.next/static/chunks/app/api/tool-allowlists/route-31bb6a3d587a09ca.js +0 -1
  1181. package/.next/static/chunks/app/api/tool-egress/route-31bb6a3d587a09ca.js +0 -1
  1182. package/.next/static/chunks/app/api/tools/[name]/approve/route-31bb6a3d587a09ca.js +0 -1
  1183. package/.next/static/chunks/app/api/tools/[name]/route-31bb6a3d587a09ca.js +0 -1
  1184. package/.next/static/chunks/app/api/tools/route-31bb6a3d587a09ca.js +0 -1
  1185. package/.next/static/chunks/app/api/transcripts/route-31bb6a3d587a09ca.js +0 -1
  1186. package/.next/static/chunks/app/api/voice/providers/route-31bb6a3d587a09ca.js +0 -1
  1187. package/.next/static/chunks/app/api/voice/realtime/context/route-31bb6a3d587a09ca.js +0 -1
  1188. package/.next/static/chunks/app/api/voice/realtime/session/route-31bb6a3d587a09ca.js +0 -1
  1189. package/.next/static/chunks/app/api/voice/realtime/tool-result/route-31bb6a3d587a09ca.js +0 -1
  1190. package/.next/static/chunks/app/api/voice/realtime/tools/route-31bb6a3d587a09ca.js +0 -1
  1191. package/.next/static/chunks/app/api/voice/tts/route-31bb6a3d587a09ca.js +0 -1
  1192. package/.next/static/chunks/app/api/whatsapp/allowlist/route-31bb6a3d587a09ca.js +0 -1
  1193. package/.next/static/chunks/app/api/whatsapp/disconnect/route-31bb6a3d587a09ca.js +0 -1
  1194. package/.next/static/chunks/app/api/whatsapp/messages/route-31bb6a3d587a09ca.js +0 -1
  1195. package/.next/static/chunks/app/api/whatsapp/qr/route-31bb6a3d587a09ca.js +0 -1
  1196. package/.next/static/chunks/app/api/whatsapp/send/route-31bb6a3d587a09ca.js +0 -1
  1197. package/.next/static/chunks/app/api/whatsapp/status/route-31bb6a3d587a09ca.js +0 -1
  1198. package/.next/static/chunks/app/approvals/loading-31bb6a3d587a09ca.js +0 -1
  1199. package/.next/static/chunks/app/architecture/loading-31bb6a3d587a09ca.js +0 -1
  1200. package/.next/static/chunks/app/audit/loading-31bb6a3d587a09ca.js +0 -1
  1201. package/.next/static/chunks/app/brand/loading-31bb6a3d587a09ca.js +0 -1
  1202. package/.next/static/chunks/app/disk/loading-31bb6a3d587a09ca.js +0 -1
  1203. package/.next/static/chunks/app/federated-ai/loading-31bb6a3d587a09ca.js +0 -1
  1204. package/.next/static/chunks/app/help/loading-31bb6a3d587a09ca.js +0 -1
  1205. package/.next/static/chunks/app/layout-457acc50d33a5e0e.js +0 -1
  1206. package/.next/static/chunks/app/loading-31bb6a3d587a09ca.js +0 -1
  1207. package/.next/static/chunks/app/marketplace/loading-31bb6a3d587a09ca.js +0 -1
  1208. package/.next/static/chunks/app/missions/loading-31bb6a3d587a09ca.js +0 -1
  1209. package/.next/static/chunks/app/onboarding/loading-31bb6a3d587a09ca.js +0 -1
  1210. package/.next/static/chunks/app/org/loading-31bb6a3d587a09ca.js +0 -1
  1211. package/.next/static/chunks/app/page-8b485e954b4da5be.js +0 -1
  1212. package/.next/static/chunks/app/projects/[slug]/loading-31bb6a3d587a09ca.js +0 -1
  1213. package/.next/static/chunks/app/projects/[slug]/page-0bc910eac788bf29.js +0 -1
  1214. package/.next/static/chunks/app/projects/loading-31bb6a3d587a09ca.js +0 -1
  1215. package/.next/static/chunks/app/projects/page-8b61f1179feb9d4b.js +0 -1
  1216. package/.next/static/chunks/app/reports/[file]/route-31bb6a3d587a09ca.js +0 -1
  1217. package/.next/static/chunks/app/reports/loading-31bb6a3d587a09ca.js +0 -1
  1218. package/.next/static/chunks/app/runtime/loading-31bb6a3d587a09ca.js +0 -1
  1219. package/.next/static/chunks/app/schedules/loading-31bb6a3d587a09ca.js +0 -1
  1220. package/.next/static/chunks/app/settings/loading-31bb6a3d587a09ca.js +0 -1
  1221. package/.next/static/chunks/app/settings/page-31bb6a3d587a09ca.js +0 -1
  1222. package/.next/static/chunks/app/tasks/[id]/loading-31bb6a3d587a09ca.js +0 -1
  1223. package/.next/static/chunks/app/tasks/loading-31bb6a3d587a09ca.js +0 -1
  1224. package/.next/static/chunks/app/tools/loading-31bb6a3d587a09ca.js +0 -1
  1225. package/.next/static/chunks/app/tools/page-31bb6a3d587a09ca.js +0 -1
  1226. package/.next/static/chunks/app/whatsapp/loading-31bb6a3d587a09ca.js +0 -1
  1227. package/.next/static/chunks/app/workflows/share/[caseId]/page-31bb6a3d587a09ca.js +0 -1
  1228. package/.next/static/chunks/webpack-a7e11ef0747e2718.js +0 -1
  1229. package/.next/static/sO4ApzzsDEnqk70DEBOS6/_buildManifest.js +0 -1
  1230. /package/.next/standalone/.next/static/{sO4ApzzsDEnqk70DEBOS6 → IDXwXTmFu4HQak2wJH1Qy}/_ssgManifest.js +0 -0
  1231. /package/.next/static/{sO4ApzzsDEnqk70DEBOS6 → IDXwXTmFu4HQak2wJH1Qy}/_ssgManifest.js +0 -0
@@ -44,12 +44,16 @@ Return ONLY corrected JSON in a \`\`\`json fence that matches the schema. No oth
44
44
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run((0,g.newId)("audit"),(0,g.nowIso)(),"auth.membership.revoked_detected",`Membership revoked detected for user ${a} in org ${b}`,"denied",JSON.stringify({user_id:a,org_id:b}),a,b)}catch(a){console.error("[auth] Failed to write membership_revoked audit row:",a.message)}}function w(a,b,c){try{(0,g.getDb)().prepare(`INSERT INTO audit_logs (id, at, type, summary, status, meta, user_id, org_id)
45
45
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run((0,g.newId)("audit"),(0,g.nowIso)(),"auth.live_check_unavailable",`Membership live check unavailable for user ${a} in org ${b}`,"error",JSON.stringify({user_id:a,org_id:b,reason:c}),a,b)}catch(a){console.error("[auth] Failed to write live_check_unavailable audit row:",a.message)}}d()}catch(a){d(a)}})},1623:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$b:()=>m,E1:()=>r,JD:()=>k,OD:()=>A,PA:()=>j,VS:()=>l,Wr:()=>u,iS:()=>s,q9:()=>w,sR:()=>n,uB:()=>o,uR:()=>v,wA:()=>t,zr:()=>q});var e=c(34255),f=c(40718),g=c(91648),h=c(72326),i=a([e,f,g,h]);[e,f,g,h]=i.then?(await i)():i;let v=`IDENTITY
46
46
  You are madarX — Chief of Staff to the principal. Local-first orchestrator. Your job is routing, presentation, escalation. You are NOT the doer; you conduct. Every specialist, tool, or sub-agent in this workspace is an instrument you direct. You translate principal intent into action and bring back verified results.`,w=`ORCHESTRATOR_MODE (NON-NEGOTIABLE)
47
- For ANY task longer than a one-line factual reply, your default move is DELEGATE. Decision order on every request:
48
- 1. Is there an existing agent in workspace/agents/ whose role matches the task type or topic? Call run_agent to dispatch it now.
49
- 2. Is this a recurring or scheduled task (daily monitoring, weekly reports, ongoing watch)? Call create_agent with a schedule.
50
- 3. Is this a one-off specialist task (research, scraping, design, code, data, news)? Spawn a one-shot agent OR use the specialist toolset directly when no matching agent exists.
51
- 4. Is this a one-line factual ask answerable from your own context without any tool? Reply in chat.
52
- You have access to every tool the principal has enabled. Use them when delegation is not possible — but treat direct execution as the FALLBACK, not the default. You always own: presentation choice, artifact verification, escalation to principal, and approval gating for irreversible actions.
47
+ You DELEGATE specialist work; you do not perform it yourself. Specialist domain tools (flights, hotels, email, GitHub writes, calendar, database, deploys, browser automation, voice) are intentionally absent from your toolset they live with the specialist agents that own them. Do not try to work around this.
48
+
49
+ For ANY request longer than a one-line factual reply, set the goal in one sentence, then call route_goal(goal) FIRST. It returns the live registry — every active agent with its role/mission/skills/granted tools, the tool catalog, and whether Tool Smith can build what's missing. Reason over it and pick exactly one ladder step:
50
+ 1. delegate a live specialist fits the goal: dispatch it with run_agent (pass instruction + expected_output so it knows what "done" means).
51
+ 2. create_then_delegate no fit specialist exists yet: create_agent for the role the goal needs, then run_agent it. BEFORE creating, CHECK THE ROSTER (route_goal's recommended_specialists, or list_agents) — if an existing agent already owns the tool the goal needs, delegate to it; never spawn a duplicate. When you do create one, grant it the tools the goal needs or it cannot finish.
52
+ 3. build_capability a specialist exists but lacks a required tool: call request_capability so Tool Smith builds and grants it, tell the principal it's being built, then delegate.
53
+ 4. direct_fallback — ONLY a trivial one-line factual ask, or no capability can be built: answer in chat (or, if you must act and a tool was re-granted for this one turn, do so — audited).
54
+ This works for ANY goal, not a fixed list of domains — route_goal grounds the decision in real capabilities. fast_path_hint is a shortcut for obvious cases, never the whole answer. You always own: presentation choice, artifact verification, escalation to principal, and approval gating for irreversible actions.
55
+
56
+ TASK TRACKING (automatic): every run_agent delegation is filed as a tracked task on the /tasks board (assignee = the specialist), runs to completion, and its status is updated for you (in_progress → in_review → done, or blocked on failure). A background sweep re-drives any task that stalls. You do not need to create the task yourself — but you DO own making sure the goal is actually met: verify the returned artifact satisfies the expected_output before telling the principal it is done; if a task came back blocked or partial, re-dispatch or escalate. Use list_agents to see your workforce and their open task load before assigning more work.
53
57
 
54
58
  TOOL_USE_DISCIPLINE
55
59
  - Never end a turn with a promise of future action. If you say you will do X, call the tool for X in the same response.
@@ -59,15 +63,18 @@ TOOL_USE_DISCIPLINE
59
63
  - If required context is missing, do NOT guess. Fetch it with a tool, OR ask the principal one specific targeted question. Never hallucinate.
60
64
  - Act-don't-ask: when there is an obvious default interpretation, act on it. Ask only when the ambiguity changes which tool you would call.
61
65
 
62
- LIVE_DATA_RESEARCH_RULE (non-negotiableCEO-report standard)
63
- You are reporting to the chairman. Your job is to bring back the actual answer, not a list of places to look.
64
- Workflow for any live-data query (flights, hotels, weather, news, prices, web research):
65
- 1. web_search to identify the 2-4 most authoritative sources (operator or booking sites, official pages, named publications). Ignore generic aggregators when a primary source is available. For flights, call flight_search directly it always handles provider routing internally (Amadeus when configured, Google Flights free fallback otherwise).
66
- 2. web_fetch (or flight_search, hotel_search, hotel_rates) each chosen source to pull concrete values: prices, dates, times, addresses, names, distances, capacities, ratings. Never stop at snippets.
67
- 3. Present the result as a comparison table or structured list with real values in cellsno "see link" placeholders. Include a short "Sources" footnote with 2-4 cited links.
68
- 4. If a fetch fails or a value is genuinely unavailable, write "Not listed" in that cell — do not substitute search-engine titles for missing data.
69
- NEVER deliver a response that consists of "Results for X" sections of search titles and snippets. That is a failure mode. If you cannot extract concrete values, say so explicitly and propose the next step (retry, narrower query, or pivot to a different source).
70
- For JS-heavy sites (Skyscanner, Google Flights, booking platforms, social media), prefer browser_navigate over web_fetch when available.
66
+ LIVE_DATA_RESEARCH_RULE (CEO-report standard applies to whoever does the work)
67
+ The deliverable is the actual answer with concrete values, never a list of places to look. Domain lookups (flights, hotels, prices, schedules) are SPECIALIST work — route_goal and delegate to the agent that owns the tool (e.g. the Travel Concierge owns flight_search / hotel_search). Do not run those tools yourself; you do not have them.
68
+ You DO keep a quick-fact allowance: web_search and web_fetch remain on your toolset for a fast factual lookup that does not warrant a specialist (a single date, a definition, one current number). When you use them:
69
+ 1. web_search to find the 2-4 most authoritative sources, then web_fetch to pull the concrete valuenever stop at snippets.
70
+ 2. Present real values in a table or structured list with a short "Sources" footnote; write "Not listed" for a genuinely missing value.
71
+ When you (or a specialist you delegate to) return results, NEVER deliver "Results for X" sections of search titles and snippets that is a failure mode. If the goal needs real booking/operator data behind a JS-heavy site, that is the specialist's job via its browser/domain tools, not a web_fetch from you.
72
+
73
+ GOAL_COMPLETION_RULE (non-negotiable)
74
+ The principal's goal must be met FULLY, not half-way. Before finishing:
75
+ - When you delegated, you MUST have passed an expected_output / acceptance contract, and you MUST check the specialist's returned artifact actually satisfies it (every part of the ask, real values, right format).
76
+ - If the result is partial, wrong, or the specialist returned blocked/escalated (missing capability), do NOT present it as the answer. Re-dispatch once with a sharper instruction, follow the build_capability ladder step, or tell the principal exactly what is blocked and what happens next.
77
+ - Only present a result you have verified meets the goal. A confirmed-partial delivered as if complete is the worst failure.
71
78
 
72
79
  FORMAT_DECISION_RULE (NON-NEGOTIABLE)
73
80
  Before choosing a tool, decide the output medium:
@@ -158,7 +165,7 @@ ${c}`)}catch{}return b}let x=[{id:"claude-sonnet-4-6",label:"Sonnet 4.6",engine:
158
165
  WHERE slug=?`).run(g.title,g.description,l,g.risk_level,m,j,g.slug):i.prepare(`INSERT INTO composite_tools
159
166
  (slug, title, description, spec_json, risk_level, input_schema_json, status,
160
167
  created_by_user_id, created_by_agent_id, created_at, updated_at)
161
- VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?)`).run(g.slug,g.title,g.description,l,g.risk_level,m,b.created_by_user_id||null,b.created_by_agent_id||null,j,j),{slug:g.slug,risk_level:g.risk_level,warnings:d.warnings}}function i(a){let b=(0,e.getDb)();return b.prepare("SELECT slug FROM composite_tools WHERE slug=?").get(a)?(b.prepare("UPDATE composite_tools SET status='archived', updated_at=? WHERE slug=?").run((0,e.nowIso)(),a),{ok:!0,slug:a}):{ok:!1,error:"not_found",slug:a}}function j(a){return(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE slug=? AND status='active'").get(a)||null}function k(a){let b=j(a);if(!b)return null;try{return JSON.parse(b.spec_json)}catch{return null}}function l(){let a;try{a=(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE status='active' ORDER BY slug ASC").all()}catch{return[]}return a.map(a=>{let b,{approval_required:c,approval_mode:d}=function(a){let b=f.pE.indexOf(a)>=f.pE.indexOf("medium");return{approval_required:b,approval_mode:b?"approval_required":"auto"}}(a.risk_level);try{b=JSON.parse(a.input_schema_json||"")||{type:"object",properties:{}}}catch{b={type:"object",properties:{}}}return{name:a.slug,title:a.title||a.slug,description:a.description||`Composite tool: ${a.slug}`,category:"composite",risk_level:a.risk_level,approval_required:c,approval_mode:d,required_env:[],enabled:!0,available:!0,missing_env:[],allowlist_required:!1,allowlist_scope_key:null,allowlist_default_allow:!1,input_schema:b,source:{kind:"composite",composite_slug:a.slug}}})}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},5735:(a,b,c)=>{"use strict";c.d(b,{zP:()=>l});let d=new Set(["intake_form","agent_run","policy_gate","human_approval","package"]),e=new Set(["text","email","number","textarea","select","shareholders"]),f=new Set(["low","medium","high","irreversible_external"]),g=/^[a-z][a-z0-9-]{2,63}$/;function h(a,b,c){a.push(`${b}: ${c}`)}function i(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}let j=new Set(["and","or"]),k=new Set(["eq","neq","lt","lte","gt","gte","in","nin"]);function l(a,b={}){var c;let m,n=[],o=[];try{m=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!m||"undefined"===m)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(m,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(m,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!i(a))return{ok:!1,errors:["spec: must be an object"],warnings:[],normalized:null};a.slug&&"string"==typeof a.slug?g.test(a.slug)||h(n,"slug",`does not match ${g} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):h(n,"slug","required (string)"),a.name&&"string"==typeof a.name||h(n,"name","required (string)");let p=a.schema_version??1;if(null==a.schema_version||Number.isInteger(a.schema_version)||h(n,"schema_version","must be an integer"),null!=a.version&&(!Number.isInteger(a.version)||a.version<1)&&h(n,"version","must be a positive integer"),!Array.isArray(a.stages)||0===a.stages.length)return h(n,"stages","required (non-empty array)"),{ok:!1,errors:n,warnings:o,normalized:null};let q=new Set;a.stages.forEach((a,b)=>{let c=`stages[${b}]`;if(!i(a))return void h(n,c,"must be an object");a.slug&&"string"==typeof a.slug?g.test(a.slug)?q.has(a.slug)?h(n,`${c}.slug`,`duplicate stage slug "${a.slug}"`):q.add(a.slug):h(n,`${c}.slug`,`does not match ${g}`):h(n,`${c}.slug`,"required (string)"),a.name&&"string"==typeof a.name||h(n,`${c}.name`,"required (string)"),a.kind&&d.has(a.kind)||h(n,`${c}.kind`,`unknown kind "${a.kind}" (allowed: ${[...d].join(", ")})`)});let r=a.stages[0];if(r&&r.kind&&"intake_form"!==r.kind&&h(n,"stages[0].kind",`first stage must be "intake_form" (got "${r.kind}")`),a.stages.forEach((a,c)=>{if(!a||!d.has(a.kind))return;let g=`stages[${c}]`;if(!i(a.config))return void h(n,`${g}.config`,"must be an object");switch(a.kind){case"intake_form":!function(a,b,c){let d=a?.config?.form_schema;if(!i(d))return h(b,`${c}.config.form_schema`,"required (must be object)");if(!Array.isArray(d.fields)||0===d.fields.length)return h(b,`${c}.config.form_schema.fields`,"must be a non-empty array");let f=new Set;d.fields.forEach((a,d)=>{let g=`${c}.config.form_schema.fields[${d}]`;if(!i(a))return void h(b,g,"must be an object");a.name&&"string"==typeof a.name||h(b,`${g}.name`,"required (string)"),a.label&&"string"==typeof a.label||h(b,`${g}.label`,"required (string)"),a.type&&e.has(a.type)||h(b,`${g}.type`,`unknown type "${a.type}" (allowed: ${[...e].join(", ")})`),"select"!==a.type||Array.isArray(a.options)&&0!==a.options.length||h(b,`${g}.options`,"select requires a non-empty options[] array"),a.name&&(f.has(a.name)&&h(b,`${g}.name`,`duplicate field name "${a.name}"`),f.add(a.name))})}(a,n,g);break;case"agent_run":let l=a.config||{};if(l.agent_template_slug&&"string"==typeof l.agent_template_slug?b.knownAgentTemplates&&!b.knownAgentTemplates.has(l.agent_template_slug)&&h(n,`${g}.config.agent_template_slug`,`unknown template "${l.agent_template_slug}"`):h(n,`${g}.config.agent_template_slug`,"required (string)"),l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&h(n,`${g}.config.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):h(n,`${g}.config.prompt`,"required (string)"),null!=l.timeout_ms&&(!Number.isInteger(l.timeout_ms)||l.timeout_ms<1e3||l.timeout_ms>6e5)&&h(n,`${g}.config.timeout_ms`,"must be integer 1000..600000"),null!=l.on_outcome)if(i(l.on_outcome))for(let[a,b]of Object.entries(l.on_outcome)){if("string"!=typeof b){h(n,`${g}.config.on_outcome.${a}`,'value must be a string (stage slug or "fail")');continue}"fail"!==b&&q&&!q.has(b)&&h(n,`${g}.config.on_outcome.${a}`,`references non-existent stage "${b}"`)}else h(n,`${g}.config.on_outcome`,"must be an object");break;case"policy_gate":!function(a,b,c){let d=a.config||{};if(!Array.isArray(d.rules)||0===d.rules.length)return h(b,`${c}.config.rules`,"required (non-empty array)");d.rules.forEach((a,d)=>{let e=`${c}.config.rules[${d}]`;"string"==typeof a?a.trim()||h(b,e,"empty rule expression"):i(a)&&"string"==typeof a.op?function a(b,c,d,e=0){if(e>20)return void h(c,d,"predicate nesting too deep");if(!i(b))return void h(c,d,"predicate must be an object");let f=b.op;j.has(f)?Array.isArray(b.rules)&&0!==b.rules.length?b.rules.forEach((b,f)=>a(b,c,`${d}.rules[${f}]`,e+1)):h(c,`${d}.rules`,`"${f}" requires a non-empty rules[] array`):"not"===f?i(b.rule)?a(b.rule,c,`${d}.rule`,e+1):h(c,`${d}.rule`,'"not" requires a rule object'):k.has(f)?("string"==typeof b.path&&b.path.trim()||h(c,`${d}.path`,"required (non-empty string)"),"value"in b?"in"!==f&&"nin"!==f||Array.isArray(b.value)||h(c,`${d}.value`,`"${f}" requires an array value`):h(c,`${d}.value`,"required")):h(c,`${d}.op`,`unknown predicate op "${f}"`)}(a,b,e):i(a)?a.expr&&"string"==typeof a.expr&&a.expr.trim()||h(b,`${e}.expr`,"required (non-empty string)"):h(b,e,"rule must be a JSON predicate, a string, or { expr, label }")})}(a,n,g);break;case"human_approval":let m=a.config||{};m.action_type&&"string"==typeof m.action_type?m.action_type.startsWith("process.stage.")||h(n,`${g}.config.action_type`,'must start with "process.stage."'):h(n,`${g}.config.action_type`,"required (string)"),m.risk&&f.has(m.risk)||h(n,`${g}.config.risk`,`must be one of ${[...f].join(", ")}`),null!=m.summary_template&&"string"!=typeof m.summary_template&&h(n,`${g}.config.summary_template`,"must be a string");break;case"package":let o=a.config||{};o.title_template&&"string"==typeof o.title_template||h(n,`${g}.config.title_template`,"required (string)"),null!=o.include_stages&&(Array.isArray(o.include_stages)?o.include_stages.forEach((a,b)=>{"string"!=typeof a?h(n,`${g}.config.include_stages[${b}]`,"must be a string"):q.has(a)||h(n,`${g}.config.include_stages[${b}]`,`unknown stage slug "${a}"`)}):h(n,`${g}.config.include_stages`,"must be an array of stage slugs"))}}),a.stages.forEach((a,b)=>{if(!i(a))return;let c=`stages[${b}]`;null==a.on_pass_stage_slug||"fail"===a.on_pass_stage_slug||q.has(a.on_pass_stage_slug)||h(n,`${c}.on_pass_stage_slug`,`references non-existent stage "${a.on_pass_stage_slug}"`),null==a.on_fail_stage_slug||"fail"===a.on_fail_stage_slug||q.has(a.on_fail_stage_slug)||h(n,`${c}.on_fail_stage_slug`,`references non-existent stage "${a.on_fail_stage_slug}"`)}),0===n.length&&function(a){let b=new Map(a.map(a=>[a.slug,a])),c=new Map(a.map(a=>[a.slug,0]));for(let d of a)if(0===c.get(d.slug)&&function a(d){if(!b.has(d))return!1;let e=c.get(d);if(1===e)return!0;if(2===e)return!1;c.set(d,1);let f=b.get(d).on_pass_stage_slug;return!!(f&&"fail"!==f&&a(f))||(c.set(d,2),!1)}(d.slug))return!0;return!1}(a.stages)&&h(n,"stages","routing graph contains a cycle"),0===n.length){let b=new Set;a.stages.forEach(a=>{a.on_pass_stage_slug&&"fail"!==a.on_pass_stage_slug&&b.add(a.on_pass_stage_slug),a.on_fail_stage_slug&&"fail"!==a.on_fail_stage_slug&&b.add(a.on_fail_stage_slug);let c=a?.config?.on_outcome;if(i(c))for(let a of Object.values(c))"string"==typeof a&&"fail"!==a&&b.add(a)}),a.stages.forEach((a,c)=>{0!==c&&(b.has(a.slug)||o.push(`stages[${c}] "${a.slug}": orphan stage (no inbound edges)`))})}return n.length>0?{ok:!1,errors:n,warnings:o,normalized:null}:{ok:!0,errors:[],warnings:o,normalized:{schema_version:p,slug:(c=a).slug,name:c.name,version:c.version||1,description:c.description||null,category:c.category||null,source:c.source||"api",status:c.status||"draft",stages:c.stages.map(a=>({slug:a.slug,name:a.name,kind:a.kind,config:structuredClone(a.config||{}),on_pass_stage_slug:a.on_pass_stage_slug||null,on_fail_stage_slug:a.on_fail_stage_slug||null,required:!1!==a.required}))}}}},7183:(a,b,c)=>{"use strict";c.d(b,{X:()=>e});let d=Object.create(null);for(let a of["00_historic","01_arcgis_data","02_assay_labs","03_cad_files","04_official_database","05_drill_campaign","06_exploration_geos","07_geophysics","08_backup_bd","09_petrography","10_presentations","11_general_pictures","12_safety","13_reports","14_inegi_data","15_sgm_data","16_claims_properties","17_minesight","18_exported_maps","19_survey","20_geotechnical","21_general_files","22_qa_qc","uncategorized"]){let b=a.match(/^(\d{2})_/);b&&(d[b[1]]=a)}function e(a){let b=String(a||"").split(/[/\\]/).filter(Boolean),c=null;for(let a of b){let b=a.match(/^(\d{2})[-_ ]/i);if(!b)continue;let e=b[1];Object.prototype.hasOwnProperty.call(d,e)&&(c=d[e])}return c??"uncategorized"}},7945:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{H6:()=>j,WV:()=>l});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-engagement-lifecycle.js")),l="hail-engagement-lifecycle",m=null;function j(){let a=(m||(m=function(){let a=(0,g.join)(k,"specs","hail-engagement-lifecycle.json");return JSON.parse((0,e.readFileSync)(a,"utf8"))}()),m);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},8437:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{D6:()=>l,ct:()=>n,jT:()=>m,r2:()=>o,t6:()=>p,v:()=>q,zU:()=>i});var e=c(34255),f=c(40563),g=c(9001),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let r=new Set;function i(a){return"function"!=typeof a?()=>{}:(r.add(a),()=>{r.delete(a)})}function j(){try{(0,g.jO)("approvals")}catch{}}function k(a){return a?{...a,payload:function(a,b=null){try{return JSON.parse(a)}catch{return b}}(a.payload,{})}:null}function l({action_type:a,risk:b="medium",summary:c,payload:d={},requested_by:f="system",expires_at:g=null,project_id:h=null}){let i=(0,e.getDb)(),k=(0,e.newId)("approval"),l=(0,e.nowIso)(),n=h||d?.project_id||d?.projectId||null;return i.prepare(`
168
+ VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?)`).run(g.slug,g.title,g.description,l,g.risk_level,m,b.created_by_user_id||null,b.created_by_agent_id||null,j,j),{slug:g.slug,risk_level:g.risk_level,warnings:d.warnings}}function i(a){let b=(0,e.getDb)();return b.prepare("SELECT slug FROM composite_tools WHERE slug=?").get(a)?(b.prepare("UPDATE composite_tools SET status='archived', updated_at=? WHERE slug=?").run((0,e.nowIso)(),a),{ok:!0,slug:a}):{ok:!1,error:"not_found",slug:a}}function j(a){return(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE slug=? AND status='active'").get(a)||null}function k(a){let b=j(a);if(!b)return null;try{return JSON.parse(b.spec_json)}catch{return null}}function l(){let a;try{a=(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE status='active' ORDER BY slug ASC").all()}catch{return[]}return a.map(a=>{let b,{approval_required:c,approval_mode:d}=function(a){let b=f.pE.indexOf(a)>=f.pE.indexOf("medium");return{approval_required:b,approval_mode:b?"approval_required":"auto"}}(a.risk_level);try{b=JSON.parse(a.input_schema_json||"")||{type:"object",properties:{}}}catch{b={type:"object",properties:{}}}return{name:a.slug,title:a.title||a.slug,description:a.description||`Composite tool: ${a.slug}`,category:"composite",risk_level:a.risk_level,approval_required:c,approval_mode:d,required_env:[],enabled:!0,available:!0,missing_env:[],allowlist_required:!1,allowlist_scope_key:null,allowlist_default_allow:!1,input_schema:b,source:{kind:"composite",composite_slug:a.slug}}})}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},5295:(a,b,c)=>{"use strict";c.d(b,{Op:()=>j,W6:()=>i,Wp:()=>h,Wq:()=>f,xU:()=>g});let d=new Set(["travel","email","calendar","supabase","vercel","mines"]),e={travel:"travel_concierge",email:"personal_assistant",github:"engineering_lead",calendar:"ops_manager",supabase:"web_ecommerce",vercel:"web_ecommerce",browser:"web_ecommerce",voice:"content_social"},f=[[/\b(flight|flights|fly|airfare|airline|hotel|hotels|itinerary|trip|travel|book a (room|stay))\b/i,"travel"],[/\b(email|inbox|reply to .*(mail|message)|draft a (reply|mail|email)|gmail)\b/i,"email"],[/\b(pull request|\bpr\b|open an? issue|github|merge|commit|repo|repository)\b/i,"github"],[/\b(calendar|schedule a (meeting|call)|book (a )?(meeting|slot|30 ?min)|invite .* to)\b/i,"calendar"],[/\b(deploy|vercel|production build|ship the site)\b/i,"vercel"],[/\b(supabase|database row|insert into|update the table|sql)\b/i,"supabase"],[/\b(image|images|photo|photograph|photoshoot|picture|visual|visuals|render|rendering|artwork|illustration|graphic|poster|advert|advertisement|\bad\b|\bads\b|banner|logo|thumbnail|mockup|still[\s-]?life|moodboard|generate (an?|the) (image|picture|visual|ad)|text[\s-]?to[\s-]?image)\b/i,"media"]],g=["travel-concierge"];function h(a){return!!(a&&d.has(a.category))}function i(a){return e[a]||null}function j(a){let b=String(a||"");if(!b.trim())return[];let c=[];for(let[a,d]of f)a.test(b)&&!c.includes(d)&&c.push(d);return c}},5735:(a,b,c)=>{"use strict";c.d(b,{zP:()=>l});let d=new Set(["intake_form","agent_run","policy_gate","human_approval","package"]),e=new Set(["text","email","number","textarea","select","shareholders"]),f=new Set(["low","medium","high","irreversible_external"]),g=/^[a-z][a-z0-9-]{2,63}$/;function h(a,b,c){a.push(`${b}: ${c}`)}function i(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}let j=new Set(["and","or"]),k=new Set(["eq","neq","lt","lte","gt","gte","in","nin"]);function l(a,b={}){var c;let m,n=[],o=[];try{m=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!m||"undefined"===m)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(m,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(m,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!i(a))return{ok:!1,errors:["spec: must be an object"],warnings:[],normalized:null};a.slug&&"string"==typeof a.slug?g.test(a.slug)||h(n,"slug",`does not match ${g} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):h(n,"slug","required (string)"),a.name&&"string"==typeof a.name||h(n,"name","required (string)");let p=a.schema_version??1;if(null==a.schema_version||Number.isInteger(a.schema_version)||h(n,"schema_version","must be an integer"),null!=a.version&&(!Number.isInteger(a.version)||a.version<1)&&h(n,"version","must be a positive integer"),!Array.isArray(a.stages)||0===a.stages.length)return h(n,"stages","required (non-empty array)"),{ok:!1,errors:n,warnings:o,normalized:null};let q=new Set;a.stages.forEach((a,b)=>{let c=`stages[${b}]`;if(!i(a))return void h(n,c,"must be an object");a.slug&&"string"==typeof a.slug?g.test(a.slug)?q.has(a.slug)?h(n,`${c}.slug`,`duplicate stage slug "${a.slug}"`):q.add(a.slug):h(n,`${c}.slug`,`does not match ${g}`):h(n,`${c}.slug`,"required (string)"),a.name&&"string"==typeof a.name||h(n,`${c}.name`,"required (string)"),a.kind&&d.has(a.kind)||h(n,`${c}.kind`,`unknown kind "${a.kind}" (allowed: ${[...d].join(", ")})`)});let r=a.stages[0];if(r&&r.kind&&"intake_form"!==r.kind&&h(n,"stages[0].kind",`first stage must be "intake_form" (got "${r.kind}")`),a.stages.forEach((a,c)=>{if(!a||!d.has(a.kind))return;let g=`stages[${c}]`;if(!i(a.config))return void h(n,`${g}.config`,"must be an object");switch(a.kind){case"intake_form":!function(a,b,c){let d=a?.config?.form_schema;if(!i(d))return h(b,`${c}.config.form_schema`,"required (must be object)");if(!Array.isArray(d.fields)||0===d.fields.length)return h(b,`${c}.config.form_schema.fields`,"must be a non-empty array");let f=new Set;d.fields.forEach((a,d)=>{let g=`${c}.config.form_schema.fields[${d}]`;if(!i(a))return void h(b,g,"must be an object");a.name&&"string"==typeof a.name||h(b,`${g}.name`,"required (string)"),a.label&&"string"==typeof a.label||h(b,`${g}.label`,"required (string)"),a.type&&e.has(a.type)||h(b,`${g}.type`,`unknown type "${a.type}" (allowed: ${[...e].join(", ")})`),"select"!==a.type||Array.isArray(a.options)&&0!==a.options.length||h(b,`${g}.options`,"select requires a non-empty options[] array"),a.name&&(f.has(a.name)&&h(b,`${g}.name`,`duplicate field name "${a.name}"`),f.add(a.name))})}(a,n,g);break;case"agent_run":let l=a.config||{};if(l.agent_template_slug&&"string"==typeof l.agent_template_slug?b.knownAgentTemplates&&!b.knownAgentTemplates.has(l.agent_template_slug)&&h(n,`${g}.config.agent_template_slug`,`unknown template "${l.agent_template_slug}"`):h(n,`${g}.config.agent_template_slug`,"required (string)"),l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&h(n,`${g}.config.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):h(n,`${g}.config.prompt`,"required (string)"),null!=l.timeout_ms&&(!Number.isInteger(l.timeout_ms)||l.timeout_ms<1e3||l.timeout_ms>6e5)&&h(n,`${g}.config.timeout_ms`,"must be integer 1000..600000"),null!=l.on_outcome)if(i(l.on_outcome))for(let[a,b]of Object.entries(l.on_outcome)){if("string"!=typeof b){h(n,`${g}.config.on_outcome.${a}`,'value must be a string (stage slug or "fail")');continue}"fail"!==b&&q&&!q.has(b)&&h(n,`${g}.config.on_outcome.${a}`,`references non-existent stage "${b}"`)}else h(n,`${g}.config.on_outcome`,"must be an object");break;case"policy_gate":!function(a,b,c){let d=a.config||{};if(!Array.isArray(d.rules)||0===d.rules.length)return h(b,`${c}.config.rules`,"required (non-empty array)");d.rules.forEach((a,d)=>{let e=`${c}.config.rules[${d}]`;"string"==typeof a?a.trim()||h(b,e,"empty rule expression"):i(a)&&"string"==typeof a.op?function a(b,c,d,e=0){if(e>20)return void h(c,d,"predicate nesting too deep");if(!i(b))return void h(c,d,"predicate must be an object");let f=b.op;j.has(f)?Array.isArray(b.rules)&&0!==b.rules.length?b.rules.forEach((b,f)=>a(b,c,`${d}.rules[${f}]`,e+1)):h(c,`${d}.rules`,`"${f}" requires a non-empty rules[] array`):"not"===f?i(b.rule)?a(b.rule,c,`${d}.rule`,e+1):h(c,`${d}.rule`,'"not" requires a rule object'):k.has(f)?("string"==typeof b.path&&b.path.trim()||h(c,`${d}.path`,"required (non-empty string)"),"value"in b?"in"!==f&&"nin"!==f||Array.isArray(b.value)||h(c,`${d}.value`,`"${f}" requires an array value`):h(c,`${d}.value`,"required")):h(c,`${d}.op`,`unknown predicate op "${f}"`)}(a,b,e):i(a)?a.expr&&"string"==typeof a.expr&&a.expr.trim()||h(b,`${e}.expr`,"required (non-empty string)"):h(b,e,"rule must be a JSON predicate, a string, or { expr, label }")})}(a,n,g);break;case"human_approval":let m=a.config||{};m.action_type&&"string"==typeof m.action_type?m.action_type.startsWith("process.stage.")||h(n,`${g}.config.action_type`,'must start with "process.stage."'):h(n,`${g}.config.action_type`,"required (string)"),m.risk&&f.has(m.risk)||h(n,`${g}.config.risk`,`must be one of ${[...f].join(", ")}`),null!=m.summary_template&&"string"!=typeof m.summary_template&&h(n,`${g}.config.summary_template`,"must be a string");break;case"package":let o=a.config||{};o.title_template&&"string"==typeof o.title_template||h(n,`${g}.config.title_template`,"required (string)"),null!=o.include_stages&&(Array.isArray(o.include_stages)?o.include_stages.forEach((a,b)=>{"string"!=typeof a?h(n,`${g}.config.include_stages[${b}]`,"must be a string"):q.has(a)||h(n,`${g}.config.include_stages[${b}]`,`unknown stage slug "${a}"`)}):h(n,`${g}.config.include_stages`,"must be an array of stage slugs"))}}),a.stages.forEach((a,b)=>{if(!i(a))return;let c=`stages[${b}]`;null==a.on_pass_stage_slug||"fail"===a.on_pass_stage_slug||q.has(a.on_pass_stage_slug)||h(n,`${c}.on_pass_stage_slug`,`references non-existent stage "${a.on_pass_stage_slug}"`),null==a.on_fail_stage_slug||"fail"===a.on_fail_stage_slug||q.has(a.on_fail_stage_slug)||h(n,`${c}.on_fail_stage_slug`,`references non-existent stage "${a.on_fail_stage_slug}"`)}),0===n.length&&function(a){let b=new Map(a.map(a=>[a.slug,a])),c=new Map(a.map(a=>[a.slug,0]));for(let d of a)if(0===c.get(d.slug)&&function a(d){if(!b.has(d))return!1;let e=c.get(d);if(1===e)return!0;if(2===e)return!1;c.set(d,1);let f=b.get(d).on_pass_stage_slug;return!!(f&&"fail"!==f&&a(f))||(c.set(d,2),!1)}(d.slug))return!0;return!1}(a.stages)&&h(n,"stages","routing graph contains a cycle"),0===n.length){let b=new Set;a.stages.forEach(a=>{a.on_pass_stage_slug&&"fail"!==a.on_pass_stage_slug&&b.add(a.on_pass_stage_slug),a.on_fail_stage_slug&&"fail"!==a.on_fail_stage_slug&&b.add(a.on_fail_stage_slug);let c=a?.config?.on_outcome;if(i(c))for(let a of Object.values(c))"string"==typeof a&&"fail"!==a&&b.add(a)}),a.stages.forEach((a,c)=>{0!==c&&(b.has(a.slug)||o.push(`stages[${c}] "${a.slug}": orphan stage (no inbound edges)`))})}return n.length>0?{ok:!1,errors:n,warnings:o,normalized:null}:{ok:!0,errors:[],warnings:o,normalized:{schema_version:p,slug:(c=a).slug,name:c.name,version:c.version||1,description:c.description||null,category:c.category||null,source:c.source||"api",status:c.status||"draft",stages:c.stages.map(a=>({slug:a.slug,name:a.name,kind:a.kind,config:structuredClone(a.config||{}),on_pass_stage_slug:a.on_pass_stage_slug||null,on_fail_stage_slug:a.on_fail_stage_slug||null,required:!1!==a.required}))}}}},7183:(a,b,c)=>{"use strict";c.d(b,{X:()=>e});let d=Object.create(null);for(let a of["00_historic","01_arcgis_data","02_assay_labs","03_cad_files","04_official_database","05_drill_campaign","06_exploration_geos","07_geophysics","08_backup_bd","09_petrography","10_presentations","11_general_pictures","12_safety","13_reports","14_inegi_data","15_sgm_data","16_claims_properties","17_minesight","18_exported_maps","19_survey","20_geotechnical","21_general_files","22_qa_qc","uncategorized"]){let b=a.match(/^(\d{2})_/);b&&(d[b[1]]=a)}function e(a){let b=String(a||"").split(/[/\\]/).filter(Boolean),c=null;for(let a of b){let b=a.match(/^(\d{2})[-_ ]/i);if(!b)continue;let e=b[1];Object.prototype.hasOwnProperty.call(d,e)&&(c=d[e])}return c??"uncategorized"}},7945:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{H6:()=>j,WV:()=>l});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-engagement-lifecycle.js")),l="hail-engagement-lifecycle",m=null;function j(){let a=(m||(m=function(){let a=(0,g.join)(k,"specs","hail-engagement-lifecycle.json");return JSON.parse((0,e.readFileSync)(a,"utf8"))}()),m);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},8437:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{D6:()=>l,ct:()=>n,jT:()=>m,r2:()=>o,t6:()=>p,v:()=>q,zU:()=>i});var e=c(34255),f=c(40563),g=c(9001),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let r=new Set;function i(a){return"function"!=typeof a?()=>{}:(r.add(a),()=>{r.delete(a)})}function j(){try{(0,g.jO)("approvals")}catch{}}function k(a){return a?{...a,payload:function(a,b=null){try{return JSON.parse(a)}catch{return b}}(a.payload,{})}:null}function l({action_type:a,risk:b="medium",summary:c,payload:d={},requested_by:f="system",expires_at:g=null,project_id:h=null}){let i=(0,e.getDb)(),k=(0,e.newId)("approval"),l=(0,e.nowIso)(),n=h||d?.project_id||d?.projectId||null;return i.prepare(`
162
169
  INSERT INTO approval_requests (id, status, action_type, risk, summary, payload, requested_by, created_at, expires_at, project_id)
163
170
  VALUES (?, 'pending', ?, ?, ?, ?, ?, ?, ?, ?)
164
171
  `).run(k,a,b,c,JSON.stringify(d),f,l,g,n),i.prepare(`
@@ -598,47 +605,54 @@ ${A||' <p class="cl-sub">No notable changes recorded for this release.</p>'}
598
605
  SELECT sample_id, width_m, cu_pct, ag_ppm, other_grades_json
599
606
  FROM mines_assay_samples WHERE project_id = ? AND sample_type = 'drill_core'
600
607
  ORDER BY (cu_pct * width_m) DESC LIMIT 8
601
- `).all(d),k=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(d).n,l=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(d).n,p=b=>a.prepare("SELECT price_usd, price_unit, source FROM mines_market_snapshots WHERE lower(commodity)=lower(?) ORDER BY fetched_at DESC LIMIT 1").get(b),r=p("Cu"),t=p("Ag"),u=a.prepare("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%' ORDER BY scenario").all(d);f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"Cu"} | **Jurisdiction:** ${b.state_province||"Sonora"}, ${b.country}`),f.push(""),f.push("> This memorandum is generated by autonomous agents from the project document archive and structured database. Every figure traces to a source document, a database aggregate, or a labelled estimate. Figures attributed to an operator scenario are conceptual and are **not** mineral resources."),f.push(""),f.push("## 1. Executive summary"),f.push("");let v=s(e,"deposit_type"),w=s(e,"asset_stage"),x=q(c,"exec_summary");x&&(f.push(x),f.push("")),v&&f.push(`- **Deposit type:** ${v.text} ${v.cite}`);let y=q(c,"thesis");y&&(f.push(`**Investment thesis.** ${y}`),f.push("")),w&&f.push(`- **Stage / resource status:** ${w.text} ${w.cite}`),i?.n&&f.push(`- **Drilling to date:** ${i.n} holes for ${o(i.m)} m [DrillHole aggregate]`),h?.n&&f.push(`- **Surface geochemistry:** ${h.n} trench channel samples averaging ${m(h.avg_cu,3)}% Cu [AssaySample aggregate]`),f.push(`- **Definitive valuation:** Not available — no declared resource. See \xa76 for a labelled operator scenario.`),f.push(""),f.push("## 2. Project overview"),f.push("");{let a=q(c,"overview");a&&(f.push(a),f.push(""))}for(let a of["property","mineralization","asset_stage"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push(""),f.push("## 3. Geology & mineralization"),f.push("");{let a=q(c,"geology");a&&(f.push(a),f.push(""))}for(let a of["deposit_type","geophysics"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push("");let z=[...e.keys()].filter(a=>a.startsWith("target_")).sort();if(z.length){for(let a of(f.push("### Defined targets"),f.push(""),z)){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("target_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push("")}f.push("## 4. Exploration results"),f.push("");{let a=q(c,"exploration");a&&(f.push(a),f.push(""))}let A=s(e,"drilling_summary");if(A&&f.push(`${A.text} ${A.cite}`),f.push(""),j.length){for(let a of(f.push("**Best drill intercepts (Cu \xd7 width ranked):**"),f.push(""),f.push("| Interval | Width (m) | Cu % | Ag g/t | CuEq % |"),f.push("|----------|-----------|------|--------|--------|"),j)){let b={};try{b=JSON.parse(a.other_grades_json||"{}")}catch{}f.push(`| \`${a.sample_id}\` | ${o(a.width_m,1)} | ${m(a.cu_pct,3)} | ${null!=a.ag_ppm?m(a.ag_ppm,1):"—"} | ${null!=b.cueq_pct?m(b.cueq_pct,3):"—"} |`)}f.push(""),f.push("_[AssaySample drill_core rows; CuEq per source-report formula]_"),f.push("")}let B=s(e,"trenching_summary");B&&(f.push(`${B.text} ${B.cite}`),f.push(""));let C=[...e.keys()].filter(a=>a.startsWith("comparable_")).sort();if(C.length){f.push("## 5. Comparable assets (analogues in the same belt)"),f.push("");{let a=q(c,"comparables");a&&(f.push(a),f.push(""))}for(let a of C){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("comparable_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push(""),f.push("_Analogues establish the geological model and the in-ground value range for a successful porphyry discovery in this belt. They are not a prediction of Batamote tonnage or grade._"),f.push("")}if(f.push("## 6. Valuation framework & indicative scenario"),f.push(""),f.push("No mineral resource has been declared for the project, therefore **no definitive (T1 in-situ or T2 DCF) valuation is produced** — the system does not assign tonnage or value to undefined mineralization. The figures below are a **conceptual operator scenario**, not a mineral resource and not a valuation opinion."),f.push(""),(r||t)&&(f.push(`**Metal price basis:** ${r?`Cu ${n(r.price_usd)}/lb`:""}${r&&t?" \xb7 ":""}${t?`Ag ${n(t.price_usd)}/oz`:""} (${r?.source||t?.source||"snapshot"}).`),f.push("")),u.length){for(let a of(f.push("| Scenario | Target tonnage | Cu grade | Indicative in-situ value |"),f.push("|----------|----------------|----------|--------------------------|"),u)){let b={},c={};try{b=JSON.parse(a.assumptions_json||"{}")}catch{}try{c=JSON.parse(a.result_json||"{}")}catch{}let d=a.scenario.replace("operator_","");f.push(`| ${d} | ${o(b.resource_tonnes)} t | ${m(b.grade_cu_pct,3)}% | ${n(c.in_situ_value_usd)} |`)}f.push(""),f.push("> **CONCEPTUAL EXPLORATION TARGET — IMPORTANT.** The tonnage and grade above are an operator-supplied conceptual exploration target expressed as a range. They are conceptual in nature; there has been insufficient exploration to define a mineral resource; and it is uncertain whether further exploration will result in the target being delineated as a mineral resource. These figures must not be construed as a mineral resource or a mineral reserve, and the in-situ values are an order-of-magnitude indication of exploration optionality only."),f.push("")}f.push("## 7. Data inventory & quality control"),f.push(""),f.push(`- **Documents catalogued:** ${o(k)} files across the project archive.`),f.push(`- **Text chunks indexed:** ${o(l)} for retrieval.`),i?.n&&f.push(`- **Structured drill holes:** ${i.n}; **trench assays:** ${h?.n||0}; **drill intercepts:** ${j.length}.`);let D=s(e,"qa_qc");D&&f.push(`- **QA/QC:** ${D.text} ${D.cite}`);let E=s(e,"data_verification");E&&f.push(`- **Data verification:** ${E.text} ${E.cite}`),f.push(""),f.push("## 8. Risk register"),f.push("");{let a=q(c,"risk_intro");a&&(f.push(a),f.push(""))}f.push("| Risk | Severity | Mitigation |"),f.push("|------|----------|------------|"),f.push("| No declared mineral resource (exploration risk) | High | Maiden resource drill program at El Choclo NW / Bata Sur |"),f.push("| Grade continuity not yet demonstrated at depth | Medium | Infill + step-out drilling; clay-alteration vectoring |"),f.push("| Metal price volatility | Medium | Long-dated optionality; copper structural demand |"),f.push("| Permitting / surface rights (Sonora) | Medium | Confirm tenure & community agreements in legal DD |"),f.push("| Data provenance (historic operators) | Low–Med | Teck data verified vs lab certificates; re-log key holes |"),f.push(""),f.push("## 9. Recommended work program"),f.push("");let F=s(e,"work_program");F&&(f.push(`${F.text} ${F.cite}`),f.push(""));let G=q(c,"recommendation");return G&&(f.push("_Indicative next-phase program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(G),f.push("")),f.push("## 10. Limitations & disclaimers"),f.push(""),f.push("Structured figures are transcribed/extracted from the project NI 43-101 technical report and archive; comparable-asset figures are from public S-K 1300 reports referenced therein. Metal prices are dated market snapshots. The operator scenario is conceptual and not a mineral resource. This memorandum is decision-support analysis, not a qualified person's valuation opinion, and does not constitute investment advice."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (due_diligence_memo). Numeric claims trace to `mines_extracted_facts`, SQL aggregates, or persisted `mines_valuation_scenarios` rows._"),{markdown:f.join("\n"),facts_cited:[...e.values()].reduce((a,b)=>a+b.length,0),comparables:C.length,targets:z.length,scenario_rows:u.length}}(w,y,B);c=a.markdown,d=`Investment Diligence Memo — ${y.name}`,z={facts_cited:a.facts_cited,comparables:a.comparables,targets:a.targets,scenario_rows:a.scenario_rows}}else if("pfs_readiness_report"===l){let a=function(a,b,c={}){let d=b.id,e=function(a,b){let c=new Set(a.prepare("SELECT DISTINCT fact_type FROM mines_extracted_facts WHERE project_id = ?").all(b).map(a=>a.fact_type)),d=(...a)=>[...c].some(b=>a.some(a=>b===a||b.startsWith(`${a}_`)||b.includes(a))),e=a.prepare("SELECT COUNT(*) n, SUM(total_depth_m) m FROM mines_drill_holes WHERE project_id = ?").get(b),f=a.prepare("SELECT COUNT(*) n FROM mines_assay_samples WHERE project_id = ?").get(b),g=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(b).n,h=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(b).n,i=[...c].filter(a=>a.startsWith("target_")).length,j=[...c].filter(a=>a.startsWith("comparable_")).length,k=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario NOT LIKE 'operator_%'").get(b).n,l=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'").get(b).n,m=d("mineral_resource","resource_estimate","resource_statement","resource_classification","measured_indicated"),n=d("mineral_reserve","reserve_estimate","proven","probable"),o=d("metallurg","recovery","met_testwork","processing"),p=d("mine_plan","production_schedule","mining_method","pit","geotech"),q=d("capex","opex","cost_estimate","aisc"),r=d("market","price_deck","offtake")||a.prepare("SELECT COUNT(*) n FROM mines_market_snapshots").get().n>0,s=c.has("qa_qc"),t=c.has("data_verification"),u=d("deposit_type","mineralization","geophysics","property")||i>0,v=(e?.n||0)>0||d("drilling_summary","trenching_summary");return{factTypes:c,drill:e,assay:f,docCount:g,chunkCount:h,targets:i,comparables:j,indicativeScenarios:k,conceptualScenarios:l,hasResource:m,hasReserve:n,hasMetTestwork:o,hasMinePlan:p,hasCostEstimate:q,hasMarket:r,hasQaQc:s,hasDataVerification:t,hasGeology:u,hasDrilling:v}}(a,d),f=[],g=new Date().toISOString().slice(0,10),h=e.hasResource&&e.hasReserve;f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"n/a"} | **Jurisdiction:** ${b.state_province||"n/a"}, ${b.country||"n/a"}`),f.push(""),f.push("> **This is a PFS-READINESS ASSESSMENT, not a Pre-Feasibility Study.** A PFS requires a Mineral Reserve converted from Measured & Indicated Resources (no Inferred), with Modifying Factors, a mine plan, recovery testwork, and capex/opex to \xb125% (AACE Class 4), each signed off by a competent QP/CP. This report measures the asset against that standard, inventories the data that exists (every count traces to a database row), and lists the gaps and work program required to reach PFS confidence. It does **not** declare a resource, a reserve, or any figure the source data does not contain."),f.push(""),f.push("## 1. Readiness verdict"),f.push("");{let a=q(c,"verdict");a&&(f.push(a),f.push(""))}h?f.push("**A Mineral Reserve appears to exist in the dataset.** A PFS may be supportable — proceed to the section-by-section coverage below to confirm each discipline meets PFS confidence, then route reserve/economics work to the valuation analyst and a competent QP."):e.hasResource&&!e.hasReserve?f.push("**A Mineral Resource is present but no Mineral Reserve has been declared.** A PFS is **not yet supportable**. The defining PFS step — conversion of Measured & Indicated Resources to a Proven/Probable Reserve via Modifying Factors (template \xa715) — has not been done. This is the critical path."):(f.push("**No Mineral Resource is declared for this asset.** A PFS is **not supportable and must not be produced.** Per the PFS contract (template \xa71, checklist gate G3) reserves derive from Measured & Indicated Resources only — and there is no resource to convert. The asset sits at an **exploration / scoping** confidence level. The work below maps a path from exploration data to a maiden resource, and from there toward PFS."),e.conceptualScenarios>0&&(f.push(""),f.push(`> The project carries ${e.conceptualScenarios} conceptual operator scenario(s) in \`mines_valuation_scenarios\`. These are exploration-target order-of-magnitude figures, **not** a mineral resource, and cannot seed a reserve or a PFS economic case.`))),f.push("");let i=e.hasResource?x.ready:e.hasDrilling&&(e.hasQaQc||e.hasDataVerification)||e.hasGeology?x.partial:x.gap,j=e.hasMinePlan&&e.hasMetTestwork?x.ready:e.hasMinePlan||e.hasMetTestwork?x.partial:x.gap,k=e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked,l=e.hasReserve&&e.hasCostEstimate?x.ready:e.hasReserve?x.partial:x.blocked,m=h?x.partial:x.blocked;f.push("## 2. Decision-gate status"),f.push(""),f.push("_Gates are sequential (template \xa72). A downstream gate is `Blocked` until its prerequisite passes — no amount of work on a later gate substitutes for the gate before it._"),f.push(""),f.push("| Gate | Requirement | Status |"),f.push("|------|-------------|--------|"),f.push(`| **G0** Study launch | Charter, code, scope, QPs, budget, gates fixed | ${x.gap} (no study charter in dataset) |`),f.push(`| **G1** Geological foundation | DB validated; QA/QC documented; M/I/I classified; RPEEE shown | ${i} |`),f.push(`| **G2** Options / trade-off | Mining method, process route, tailings, power/water selected | ${j} |`),f.push(`| **G3** Reserve declaration | M&I only; no Inferred; dilution & losses; Modifying Factors | ${k} |`),f.push(`| **G4** Estimate & economics | Capex/opex \xb125%; ~15% contingency; reserve-based model | ${l} |`),f.push(`| **G5** Assurance & disclosure | Risk register, fatal-flaw + independent review, QP sign-offs | ${m} |`),f.push("");let n=a=>a?x.partial:x.gap,p=[["1–3 \xb7 Summary / Introduction / Reliance",e.docCount>0,`${o(e.docCount)} source documents catalogued`],["4 \xb7 Property Description & Location",e.factTypes.has("property"),e.factTypes.has("property")?"property fact present":"no tenure/location fact extracted"],["5 \xb7 Accessibility, Climate, Infrastructure",!1,"not extracted — requires site/infrastructure data"],["6 \xb7 History",e.factTypes.has("deposit_type")||e.docCount>0,"historic archive present"],["7 \xb7 Geological Setting & Mineralization",e.hasGeology,e.hasGeology?`geology facts + ${e.targets} target(s)`:"no geology facts"],["8 \xb7 Deposit Types",e.factTypes.has("deposit_type"),e.factTypes.has("deposit_type")?"deposit_type fact present":"no deposit_type fact"],["9–10 \xb7 Exploration & Drilling",e.hasDrilling,`${e.drill?.n||0} drill holes; drilling/trenching summaries`],["11–12 \xb7 Sampling, Analyses, Data Verification",e.hasQaQc||e.hasDataVerification,`${e.assay?.n||0} assay samples; QA/QC=${e.hasQaQc}; verification=${e.hasDataVerification}`],["13 \xb7 Mineral Processing & Metallurgical Testing",e.hasMetTestwork,e.hasMetTestwork?"testwork present":"no metallurgical testwork — required for recovery model"],["14 \xb7 Mineral Resource Estimate",e.hasResource,e.hasResource?"resource present":"NO RESOURCE — blocks reserve & economics"],["15 \xb7 Mineral Reserve Estimate (defining PFS section)",e.hasReserve,e.hasReserve?"reserve present":"NO RESERVE — the PFS cannot exist without this"],["16 \xb7 Mining Methods",e.hasMinePlan,e.hasMinePlan?"mine-plan/geotech facts present":"no mine plan / geotechnical model"],["17 \xb7 Recovery Methods",e.hasMetTestwork,e.hasMetTestwork?"derived from testwork":"blocked on metallurgical testwork"],["18 \xb7 Project Infrastructure",!1,"not extracted — power/water/tailings/access required"],["19 \xb7 Market Studies & Contracts",e.hasMarket,e.hasMarket?"market snapshots/facts present":"no price deck / offtake"],["20 \xb7 Environmental, Permitting, Social",!1,"not extracted — baseline/permitting register required"],["21 \xb7 Capital & Operating Costs",e.hasCostEstimate,e.hasCostEstimate?"cost facts present":"no capex/opex estimate (need AACE Class 4)"],["22 \xb7 Economic Analysis",e.hasReserve&&e.hasCostEstimate,"requires a reserve-based model"],["23 \xb7 Adjacent Properties",e.comparables>0,`${e.comparables} comparable asset(s)`],["25–26 \xb7 Interpretation, Conclusions & Recommendations",e.docCount>0,"authored from the above"]];for(let[a,b,c]of(f.push("## 3. PFS section coverage (NI 43-101 body)"),f.push(""),f.push("| Section | Status | Evidence in dataset |"),f.push("|---------|--------|---------------------|"),p)){let d=a.startsWith("14 ")?e.hasResource?x.ready:x.gap:a.startsWith("15 ")?e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked:n(b);f.push(`| ${a} | ${d} | ${c} |`)}for(let[a,b]of(f.push(""),f.push("_Status is computed from `mines_extracted_facts` types and SQL aggregates — a `Gap` means the data type is absent from the database, not that it was judged inadequate._"),f.push(""),f.push("## 4. The PFS contract (must all hold to declare a PFS)"),f.push(""),[["Reserves from Measured & Indicated only (no Inferred)",e.hasReserve],["Dilution & mining losses incorporated",e.hasReserve&&e.hasMinePlan],["Modifying Factors formally applied & documented",e.hasReserve],["Capex/opex \xb125%, ~15% contingency, AACE Class 4",e.hasCostEstimate],["Reserve-based financial model, positive across a downside",e.hasReserve&&e.hasCostEstimate],["Each discipline signed off by a competent QP/CP",h]]))f.push(`- [${b?"x":" "}] ${a}`);f.push(""),h||f.push("Until every box is checked, the asset is **pre-PFS**. The earliest unchecked box on the critical path is where work must start (see \xa76)."),f.push(""),f.push("## 5. Data inventory"),f.push(""),f.push(`- **Documents catalogued:** ${o(e.docCount)} \xb7 **text chunks indexed:** ${o(e.chunkCount)}`),f.push(`- **Structured drill holes:** ${e.drill?.n||0}${e.drill?.m?` for ${o(e.drill.m)} m`:""} \xb7 **assay samples:** ${e.assay?.n||0}`),f.push(`- **Extracted fact types:** ${e.factTypes.size} \xb7 **defined targets:** ${e.targets} \xb7 **comparables:** ${e.comparables}`),f.push(`- **Valuation scenarios:** ${e.indicativeScenarios} indicative (T1/T2 runs) \xb7 ${e.conceptualScenarios} conceptual operator-target — neither is a declared resource`),f.push(""),f.push("_Counts are read directly from `mines_source_documents`, `mines_document_chunks`, `mines_drill_holes`, `mines_assay_samples`, `mines_extracted_facts`, and `mines_valuation_scenarios`._"),f.push(""),f.push("## 6. Critical-path gaps (ordered)"),f.push("");{let a=q(c,"gap_intro");a&&(f.push(a),f.push(""))}let r=[];e.hasResource||r.push("**Maiden Mineral Resource estimate** — the single hard blocker. Requires sufficient drill density, QA/QC-validated assays, density data, domaining, a block model, classification (M/I/I), and RPEEE within a constraining shape. Until this exists, no reserve, no economics, no PFS."),e.hasMetTestwork||r.push("**Metallurgical testwork** — representative samples across lithology/alteration/oxidation/depth/grade; a recovery model by domain (not a single point). Blocks \xa713/\xa717."),e.hasResource&&!e.hasMinePlan&&r.push("**Mine plan & geotechnical model** — method/pit-configuration trade-off, slope/support parameters, production schedule. Required before reserve conversion."),e.hasResource&&!e.hasReserve&&r.push("**Reserve conversion (\xa715)** — apply Modifying Factors to M&I, incorporate dilution & mining losses, derive Proven/Probable. This is the defining PFS step."),e.hasCostEstimate||r.push("**Capex/opex estimate to \xb125% (AACE Class 4)** — formal Basis of Estimate, vendor budget quotes on major items, ~15% risk-based contingency. Blocks \xa721/\xa722."),r.push("**Infrastructure, water & tailings study** — power/water/access; site water balance; tailings option + GISTM alignment; confirm no fatal flaw."),r.push("**Environmental / permitting / social baseline** — multi-season baseline, permitting register on the critical path, closure cost flowed to the model."),r.push("**Competent QP/CP sign-off per discipline** — and an independent / peer technical review before any disclosure."),r.forEach((a,b)=>f.push(`${b+1}. ${a}`)),f.push(""),f.push("## 7. Recommended work program to reach PFS"),f.push("");let s=a.prepare("SELECT id, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ? AND fact_type = 'work_program' LIMIT 1").get(d);s&&(f.push(`${s.value_text} [ExtractedFact:${s.id}${s.page_or_location?`, ${s.page_or_location}`:""}]`),f.push(""));let t=q(c,"work_program")||q(c,"recommendation");return t?(f.push("_Indicative phased program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(t),f.push("")):s||(f.push("Phase the program to the gate sequence above: (1) resource-definition drilling → maiden resource (G1); (2) metallurgical testwork + mining/geotech trade-off (G2); (3) reserve conversion with Modifying Factors (G3); (4) Class 4 cost estimate + reserve-based model (G4); (5) risk, independent review, QP sign-off (G5). Budget and schedule each phase before launch."),f.push("")),f.push("## 8. Limitations & disclaimers"),f.push(""),f.push("This is a readiness assessment generated by autonomous agents from the project database and document archive. Statuses reflect the **presence** of data types, not a competent person's judgement of their adequacy. The absence of a resource/reserve in the database is reported as a gap, never filled with an estimate. This document is decision-support analysis; it is not a Pre-Feasibility Study, not a qualified person's opinion, and does not constitute investment advice. Producing an actual PFS requires the work program above and competent-person sign-off under the applicable reporting code (NI 43-101 / S-K 1300 / JORC)."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (pfs_readiness_report). Gate/section statuses derive from `mines_extracted_facts` types and SQL aggregates; no figure is asserted that the source data does not contain. Rubric: `docs/mines/pfs-best-practice-template.md` + `pfs-best-practice-checklist.md`._"),{markdown:f.join("\n"),pfs_feasible:h,has_resource:e.hasResource,has_reserve:e.hasReserve,gaps_count:r.length,fact_types:e.factTypes.size,documents:e.docCount}}(w,y,B);c=a.markdown,d=`PFS-Readiness Assessment — ${y.name}`,z={pfs_feasible:a.pfs_feasible,has_resource:a.has_resource,has_reserve:a.has_reserve,gaps_count:a.gaps_count,fact_types:a.fact_types,documents:a.documents}}else{let a=await r(w,y,B);c=a.markdown,d=`Interpretation Memo — ${y.name}`,z={numeric_claims_count:a.numeric_claims_count,chunk_citations_count:a.chunk_citations_count,retrieval_mode:a.retrieval_mode}}let C=(0,k.Om)([a?.space_id,y.default_space_id],{fallback:null}),D=function(a,b){let c=a.prepare("SELECT os_project_id FROM mines_projects WHERE id = ?").get(b);return c?.os_project_id||null}(w,h);try{for(let a of C?w.prepare("SELECT id FROM artifacts WHERE title = ? AND space_id = ?").all(d,C):w.prepare("SELECT id FROM artifacts WHERE title = ? AND project_id = ?").all(d,D||"personal"))try{(0,f.CM)(a.id)}catch{}}catch{}let E=(0,f.Dg)({title:d,kind:A,content:c,project_id:D,agent_id:b.agent_id||null,space_id:C,dedupe_key:""});if(C&&!E.deduped)try{(0,k.h5)(E.artifact_id,C)}catch{}try{(0,i.appendComplianceAudit)({user_id:b.acting_on_behalf_of_user_id||b.user_id||"system",org_id:"personal-org",action:"mines.report.generated",status:"success",summary:`Generated ${l} for ${y.name}`,action_target_id:E.artifact_id,action_target_type:"artifact",meta:{project_id:h,report_kind:l,artifact_id:E.artifact_id,...z}})}catch{}return{status:"ok",artifact_id:E.artifact_id,report_kind:l,space_id:C,chunk_citations_count:z.chunk_citations_count??0,...z}}d()}catch(a){d(a)}})},14207:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{xI:()=>j});var e=c(73024),f=c(76760),g=c(26531),h=c(1441),i=a([h]);h=(i.then?(await i)():i)[0];let k=new Set(["node_modules",".git",".ssh"]),l=new Set([".ssh"]);function j({org_id:a}={}){function b(b){let c=f.resolve(String(b||""));if(!b)throw Error("allowlist_violation: empty path");if(function(a){if(a.split(f.sep).filter(Boolean).some(a=>l.has(a)))return!0;let b=f.basename(a);return".env.local"===b||/^\.env($|\.)/.test(b)}(c))throw Error("allowlist_violation: path is a secret/system path: "+c);if(!(0,g.wn)(c)&&!(0,h.RB)(c,{org_id:a}))throw Error("allowlist_violation: path is outside the OS-allowed or approved Mines import roots: "+c);return c}return{listFolder(a){let c=b(a),d=[],g=[c];for(;g.length;){let a,b=g.pop();try{a=e.readdirSync(b,{withFileTypes:!0})}catch{continue}for(let c of a){let a=c.name;if(a.startsWith("."))continue;let e=f.join(b,a);if(!c.isSymbolicLink())if(c.isDirectory()){if(k.has(a))continue;g.push(e)}else c.isFile()&&d.push(e)}}return d},readDocument(a){let c=b(a);return e.readFileSync(c)},statFile(a){let c,d=b(a);try{c=e.statSync(d)}catch{return null}return{size:c.size,mtimeMs:c.mtimeMs,isDirectory:c.isDirectory(),isFile:c.isFile()}}}}j(),d()}catch(a){d(a)}})},14743:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{G:()=>x});var e=c(73024),f=c(76760),g=c(19151),h=c(72326),i=c(1623),j=c(8727),k=c(34255),l=c(9381),m=c(40718),n=c(16494),o=c(63289),p=c(9001),q=c(69286),r=c(83963),s=a([g,h,i,j,k,m,n,p,r]);function t(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function u(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"agent"}async function v({agent:a,artifactTitle:b,renderedHtml:d,runId:e,triggeredBy:f,appendAudit:g}){let h,i,j=function(a){if(!a?.metadata_json)return null;let b=a.metadata_json;if("string"==typeof b)try{b=JSON.parse(b)}catch{return null}let c=b?.whatsapp_notify_chat_id;return"string"==typeof c&&c.trim()?c.trim():null}(a);if(!j||!d||!String(d).trim())return;try{({getBridgeHealth:h,sendWhatsAppDocument:i}=await c.e(4143).then(c.bind(c,64143)))}catch(b){g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp module unavailable for ${a.name}: ${b.message}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j}});return}let k=await h();if(!k||!1===k.ok||"paired"!==k.pairing_state)return void g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp bridge not paired — skipped artifact notify for ${a.name}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j,pairing_state:k?.pairing_state||null,bridge_error:k?.error||null}});try{let c=await i({chat_id:j,content:d,filename:function(a){let b=String(a||"agent-report").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"agent-report";return`${b}.html`}(b),mimetype:"text/html",caption:`${b} (${f||"scheduled"})`});g({type:"agent.whatsapp_notify.sent",summary:`Sent "${b}" to ${j} via WhatsApp`,status:"sent",meta:{agent_id:a.id,run_id:e,chat_id:j,message_id:c?.message_id||null}}),(0,p.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:"whatsapp_notify",status:"done"})}catch(b){g({type:"agent.whatsapp_notify.failed",summary:`Failed to WhatsApp artifact for ${a.name}: ${b.message}`,status:"error",meta:{agent_id:a.id,run_id:e,chat_id:j}})}}async function w({agent:a,systemPrompt:b,userMessage:c,onToolStart:d,onToolResult:e,onToolError:f,acting_on_behalf_of_user_id:i,heartbeat_task_id:j}){if(process.env.MADARX_MOCK_CLAUDE_TICK)return{output:process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[]};let k=Math.max(256,Math.min(8192,Number(process.env.MAX_TOKENS_PER_TICK||1024)||1024)),l=(0,m.IC)(a.id),n=[{role:"user",content:c}],o=[],q="";for(let c=0;c<4;c+=1){let c=await (0,g.chatWithClaude)(n,b,l,{max_tokens:k,model:a.model}),h=(c?.content||[]).filter(a=>a?.type==="text"||"string"==typeof a?.text).map(a=>a.text||"").join("\n").trim();h&&(q=h);let r=(c?.content||[]).filter(a=>a?.type==="tool_use"&&a.name&&a.id);if(!r.length)break;n.push({role:"assistant",content:c.content});let s=[];for(let b of r){let c={name:b.name,input:b.input||{},status:"pending"},g=function(a,b){if(!b||"object"!=typeof b)return null;let c={};if("web_search"===a&&"string"==typeof b.query)c.query=b.query.slice(0,80);else if("web_fetch"===a&&"string"==typeof b.url)try{c.host=new URL(b.url).hostname}catch{}else"create_artifact"===a&&"string"==typeof b.title?c.title=b.title.slice(0,60):"create_agent"===a&&"string"==typeof b.name&&(c.name=b.name.slice(0,60));return Object.keys(c).length?c:null}(b.name,b.input);(0,p.AC)({type:"agent_tool_start",agent_id:a.id,agent_name:a.name,tool:b.name,input_summary:g}),await d?.({toolUse:b,inputSummary:g});try{let d=await (0,m.executeRegistryTool)(b.name,b.input||{},{agent_id:a.id,acting_on_behalf_of_user_id:i||null,heartbeat_task_id:j||null});c.status=d?.status||"complete",c.result=d,s.push({type:"tool_result",tool_use_id:b.id,content:function(a){try{return JSON.stringify(a).slice(0,4e3)}catch{return String(a).slice(0,4e3)}}(d),is_error:d?.ok===!1&&d?.status!=="approval_required"}),(0,p.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:c.status,isError:d?.ok===!1&&d?.status!=="approval_required"}),await e?.({toolUse:b,result:d,inputSummary:g,event:c})}catch(d){c.status="failed",c.error=d.message,s.push({type:"tool_result",tool_use_id:b.id,content:d.message,is_error:!0}),(0,p.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:"failed",isError:!0,message:d.message}),await f?.({toolUse:b,error:d,inputSummary:g,event:c})}o.push(c)}n.push({role:"user",content:s})}if(!q)throw Error("Claude returned no text for scheduled agent tick");return{output:q,toolEvents:o,engine:"anthropic",model:a.model||(0,h.Qp)("anthropic")}}async function x(a,{triggered_by:b="cron",task_id:d=null,agent_run_id:g=null,wake_reason:m=null,instruction:s=null,expected_output:y=null,acting_on_behalf_of_user_id:z=null,heartbeat_task_id:A=null}={}){(0,l.Jh)();let B=(0,k.getDb)(),C="object"==typeof a&&a?.id?a:(0,k.getDb)().prepare("SELECT * FROM agents WHERE id = ?").get(String(a||""));if(!C)return null;let D=d?g?(0,r.rN)(g):(0,r.n5)({task_id:d,agent_id:C.id,trigger_source:b,trigger_detail:m||b}):null;D&&((0,r.V0)(D.id),(0,r.lC)(d,{status:"in_progress",actor_type:"agent",actor_id:C.id})),(0,q.XI)(C.id),(0,p.AC)({type:"agent_run_start",agent_id:C.id,agent_name:C.name,triggered_by:b,run_id:D?.id||null,task_id:d});try{let a=t(C.memory,[]),g=a.slice(-10),m=function(a){let b=f.join(l.bo,a,"skills.md");try{return e.readFileSync(b,"utf8").trim()}catch{return""}}(C.id),q=new Date().toISOString().slice(0,10),x=C.system_prompt||`You are ${C.name}, a scheduled madarX OS worker.
608
+ `).all(d),k=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(d).n,l=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(d).n,p=b=>a.prepare("SELECT price_usd, price_unit, source FROM mines_market_snapshots WHERE lower(commodity)=lower(?) ORDER BY fetched_at DESC LIMIT 1").get(b),r=p("Cu"),t=p("Ag"),u=a.prepare("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%' ORDER BY scenario").all(d);f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"Cu"} | **Jurisdiction:** ${b.state_province||"Sonora"}, ${b.country}`),f.push(""),f.push("> This memorandum is generated by autonomous agents from the project document archive and structured database. Every figure traces to a source document, a database aggregate, or a labelled estimate. Figures attributed to an operator scenario are conceptual and are **not** mineral resources."),f.push(""),f.push("## 1. Executive summary"),f.push("");let v=s(e,"deposit_type"),w=s(e,"asset_stage"),x=q(c,"exec_summary");x&&(f.push(x),f.push("")),v&&f.push(`- **Deposit type:** ${v.text} ${v.cite}`);let y=q(c,"thesis");y&&(f.push(`**Investment thesis.** ${y}`),f.push("")),w&&f.push(`- **Stage / resource status:** ${w.text} ${w.cite}`),i?.n&&f.push(`- **Drilling to date:** ${i.n} holes for ${o(i.m)} m [DrillHole aggregate]`),h?.n&&f.push(`- **Surface geochemistry:** ${h.n} trench channel samples averaging ${m(h.avg_cu,3)}% Cu [AssaySample aggregate]`),f.push(`- **Definitive valuation:** Not available — no declared resource. See \xa76 for a labelled operator scenario.`),f.push(""),f.push("## 2. Project overview"),f.push("");{let a=q(c,"overview");a&&(f.push(a),f.push(""))}for(let a of["property","mineralization","asset_stage"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push(""),f.push("## 3. Geology & mineralization"),f.push("");{let a=q(c,"geology");a&&(f.push(a),f.push(""))}for(let a of["deposit_type","geophysics"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push("");let z=[...e.keys()].filter(a=>a.startsWith("target_")).sort();if(z.length){for(let a of(f.push("### Defined targets"),f.push(""),z)){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("target_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push("")}f.push("## 4. Exploration results"),f.push("");{let a=q(c,"exploration");a&&(f.push(a),f.push(""))}let A=s(e,"drilling_summary");if(A&&f.push(`${A.text} ${A.cite}`),f.push(""),j.length){for(let a of(f.push("**Best drill intercepts (Cu \xd7 width ranked):**"),f.push(""),f.push("| Interval | Width (m) | Cu % | Ag g/t | CuEq % |"),f.push("|----------|-----------|------|--------|--------|"),j)){let b={};try{b=JSON.parse(a.other_grades_json||"{}")}catch{}f.push(`| \`${a.sample_id}\` | ${o(a.width_m,1)} | ${m(a.cu_pct,3)} | ${null!=a.ag_ppm?m(a.ag_ppm,1):"—"} | ${null!=b.cueq_pct?m(b.cueq_pct,3):"—"} |`)}f.push(""),f.push("_[AssaySample drill_core rows; CuEq per source-report formula]_"),f.push("")}let B=s(e,"trenching_summary");B&&(f.push(`${B.text} ${B.cite}`),f.push(""));let C=[...e.keys()].filter(a=>a.startsWith("comparable_")).sort();if(C.length){f.push("## 5. Comparable assets (analogues in the same belt)"),f.push("");{let a=q(c,"comparables");a&&(f.push(a),f.push(""))}for(let a of C){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("comparable_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push(""),f.push("_Analogues establish the geological model and the in-ground value range for a successful porphyry discovery in this belt. They are not a prediction of Batamote tonnage or grade._"),f.push("")}if(f.push("## 6. Valuation framework & indicative scenario"),f.push(""),f.push("No mineral resource has been declared for the project, therefore **no definitive (T1 in-situ or T2 DCF) valuation is produced** — the system does not assign tonnage or value to undefined mineralization. The figures below are a **conceptual operator scenario**, not a mineral resource and not a valuation opinion."),f.push(""),(r||t)&&(f.push(`**Metal price basis:** ${r?`Cu ${n(r.price_usd)}/lb`:""}${r&&t?" \xb7 ":""}${t?`Ag ${n(t.price_usd)}/oz`:""} (${r?.source||t?.source||"snapshot"}).`),f.push("")),u.length){for(let a of(f.push("| Scenario | Target tonnage | Cu grade | Indicative in-situ value |"),f.push("|----------|----------------|----------|--------------------------|"),u)){let b={},c={};try{b=JSON.parse(a.assumptions_json||"{}")}catch{}try{c=JSON.parse(a.result_json||"{}")}catch{}let d=a.scenario.replace("operator_","");f.push(`| ${d} | ${o(b.resource_tonnes)} t | ${m(b.grade_cu_pct,3)}% | ${n(c.in_situ_value_usd)} |`)}f.push(""),f.push("> **CONCEPTUAL EXPLORATION TARGET — IMPORTANT.** The tonnage and grade above are an operator-supplied conceptual exploration target expressed as a range. They are conceptual in nature; there has been insufficient exploration to define a mineral resource; and it is uncertain whether further exploration will result in the target being delineated as a mineral resource. These figures must not be construed as a mineral resource or a mineral reserve, and the in-situ values are an order-of-magnitude indication of exploration optionality only."),f.push("")}f.push("## 7. Data inventory & quality control"),f.push(""),f.push(`- **Documents catalogued:** ${o(k)} files across the project archive.`),f.push(`- **Text chunks indexed:** ${o(l)} for retrieval.`),i?.n&&f.push(`- **Structured drill holes:** ${i.n}; **trench assays:** ${h?.n||0}; **drill intercepts:** ${j.length}.`);let D=s(e,"qa_qc");D&&f.push(`- **QA/QC:** ${D.text} ${D.cite}`);let E=s(e,"data_verification");E&&f.push(`- **Data verification:** ${E.text} ${E.cite}`),f.push(""),f.push("## 8. Risk register"),f.push("");{let a=q(c,"risk_intro");a&&(f.push(a),f.push(""))}f.push("| Risk | Severity | Mitigation |"),f.push("|------|----------|------------|"),f.push("| No declared mineral resource (exploration risk) | High | Maiden resource drill program at El Choclo NW / Bata Sur |"),f.push("| Grade continuity not yet demonstrated at depth | Medium | Infill + step-out drilling; clay-alteration vectoring |"),f.push("| Metal price volatility | Medium | Long-dated optionality; copper structural demand |"),f.push("| Permitting / surface rights (Sonora) | Medium | Confirm tenure & community agreements in legal DD |"),f.push("| Data provenance (historic operators) | Low–Med | Teck data verified vs lab certificates; re-log key holes |"),f.push(""),f.push("## 9. Recommended work program"),f.push("");let F=s(e,"work_program");F&&(f.push(`${F.text} ${F.cite}`),f.push(""));let G=q(c,"recommendation");return G&&(f.push("_Indicative next-phase program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(G),f.push("")),f.push("## 10. Limitations & disclaimers"),f.push(""),f.push("Structured figures are transcribed/extracted from the project NI 43-101 technical report and archive; comparable-asset figures are from public S-K 1300 reports referenced therein. Metal prices are dated market snapshots. The operator scenario is conceptual and not a mineral resource. This memorandum is decision-support analysis, not a qualified person's valuation opinion, and does not constitute investment advice."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (due_diligence_memo). Numeric claims trace to `mines_extracted_facts`, SQL aggregates, or persisted `mines_valuation_scenarios` rows._"),{markdown:f.join("\n"),facts_cited:[...e.values()].reduce((a,b)=>a+b.length,0),comparables:C.length,targets:z.length,scenario_rows:u.length}}(w,y,B);c=a.markdown,d=`Investment Diligence Memo — ${y.name}`,z={facts_cited:a.facts_cited,comparables:a.comparables,targets:a.targets,scenario_rows:a.scenario_rows}}else if("pfs_readiness_report"===l){let a=function(a,b,c={}){let d=b.id,e=function(a,b){let c=new Set(a.prepare("SELECT DISTINCT fact_type FROM mines_extracted_facts WHERE project_id = ?").all(b).map(a=>a.fact_type)),d=(...a)=>[...c].some(b=>a.some(a=>b===a||b.startsWith(`${a}_`)||b.includes(a))),e=a.prepare("SELECT COUNT(*) n, SUM(total_depth_m) m FROM mines_drill_holes WHERE project_id = ?").get(b),f=a.prepare("SELECT COUNT(*) n FROM mines_assay_samples WHERE project_id = ?").get(b),g=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(b).n,h=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(b).n,i=[...c].filter(a=>a.startsWith("target_")).length,j=[...c].filter(a=>a.startsWith("comparable_")).length,k=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario NOT LIKE 'operator_%'").get(b).n,l=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'").get(b).n,m=d("mineral_resource","resource_estimate","resource_statement","resource_classification","measured_indicated"),n=d("mineral_reserve","reserve_estimate","proven","probable"),o=d("metallurg","recovery","met_testwork","processing"),p=d("mine_plan","production_schedule","mining_method","pit","geotech"),q=d("capex","opex","cost_estimate","aisc"),r=d("market","price_deck","offtake")||a.prepare("SELECT COUNT(*) n FROM mines_market_snapshots").get().n>0,s=c.has("qa_qc"),t=c.has("data_verification"),u=d("deposit_type","mineralization","geophysics","property")||i>0,v=(e?.n||0)>0||d("drilling_summary","trenching_summary");return{factTypes:c,drill:e,assay:f,docCount:g,chunkCount:h,targets:i,comparables:j,indicativeScenarios:k,conceptualScenarios:l,hasResource:m,hasReserve:n,hasMetTestwork:o,hasMinePlan:p,hasCostEstimate:q,hasMarket:r,hasQaQc:s,hasDataVerification:t,hasGeology:u,hasDrilling:v}}(a,d),f=[],g=new Date().toISOString().slice(0,10),h=e.hasResource&&e.hasReserve;f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"n/a"} | **Jurisdiction:** ${b.state_province||"n/a"}, ${b.country||"n/a"}`),f.push(""),f.push("> **This is a PFS-READINESS ASSESSMENT, not a Pre-Feasibility Study.** A PFS requires a Mineral Reserve converted from Measured & Indicated Resources (no Inferred), with Modifying Factors, a mine plan, recovery testwork, and capex/opex to \xb125% (AACE Class 4), each signed off by a competent QP/CP. This report measures the asset against that standard, inventories the data that exists (every count traces to a database row), and lists the gaps and work program required to reach PFS confidence. It does **not** declare a resource, a reserve, or any figure the source data does not contain."),f.push(""),f.push("## 1. Readiness verdict"),f.push("");{let a=q(c,"verdict");a&&(f.push(a),f.push(""))}h?f.push("**A Mineral Reserve appears to exist in the dataset.** A PFS may be supportable — proceed to the section-by-section coverage below to confirm each discipline meets PFS confidence, then route reserve/economics work to the valuation analyst and a competent QP."):e.hasResource&&!e.hasReserve?f.push("**A Mineral Resource is present but no Mineral Reserve has been declared.** A PFS is **not yet supportable**. The defining PFS step — conversion of Measured & Indicated Resources to a Proven/Probable Reserve via Modifying Factors (template \xa715) — has not been done. This is the critical path."):(f.push("**No Mineral Resource is declared for this asset.** A PFS is **not supportable and must not be produced.** Per the PFS contract (template \xa71, checklist gate G3) reserves derive from Measured & Indicated Resources only — and there is no resource to convert. The asset sits at an **exploration / scoping** confidence level. The work below maps a path from exploration data to a maiden resource, and from there toward PFS."),e.conceptualScenarios>0&&(f.push(""),f.push(`> The project carries ${e.conceptualScenarios} conceptual operator scenario(s) in \`mines_valuation_scenarios\`. These are exploration-target order-of-magnitude figures, **not** a mineral resource, and cannot seed a reserve or a PFS economic case.`))),f.push("");let i=e.hasResource?x.ready:e.hasDrilling&&(e.hasQaQc||e.hasDataVerification)||e.hasGeology?x.partial:x.gap,j=e.hasMinePlan&&e.hasMetTestwork?x.ready:e.hasMinePlan||e.hasMetTestwork?x.partial:x.gap,k=e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked,l=e.hasReserve&&e.hasCostEstimate?x.ready:e.hasReserve?x.partial:x.blocked,m=h?x.partial:x.blocked;f.push("## 2. Decision-gate status"),f.push(""),f.push("_Gates are sequential (template \xa72). A downstream gate is `Blocked` until its prerequisite passes — no amount of work on a later gate substitutes for the gate before it._"),f.push(""),f.push("| Gate | Requirement | Status |"),f.push("|------|-------------|--------|"),f.push(`| **G0** Study launch | Charter, code, scope, QPs, budget, gates fixed | ${x.gap} (no study charter in dataset) |`),f.push(`| **G1** Geological foundation | DB validated; QA/QC documented; M/I/I classified; RPEEE shown | ${i} |`),f.push(`| **G2** Options / trade-off | Mining method, process route, tailings, power/water selected | ${j} |`),f.push(`| **G3** Reserve declaration | M&I only; no Inferred; dilution & losses; Modifying Factors | ${k} |`),f.push(`| **G4** Estimate & economics | Capex/opex \xb125%; ~15% contingency; reserve-based model | ${l} |`),f.push(`| **G5** Assurance & disclosure | Risk register, fatal-flaw + independent review, QP sign-offs | ${m} |`),f.push("");let n=a=>a?x.partial:x.gap,p=[["1–3 \xb7 Summary / Introduction / Reliance",e.docCount>0,`${o(e.docCount)} source documents catalogued`],["4 \xb7 Property Description & Location",e.factTypes.has("property"),e.factTypes.has("property")?"property fact present":"no tenure/location fact extracted"],["5 \xb7 Accessibility, Climate, Infrastructure",!1,"not extracted — requires site/infrastructure data"],["6 \xb7 History",e.factTypes.has("deposit_type")||e.docCount>0,"historic archive present"],["7 \xb7 Geological Setting & Mineralization",e.hasGeology,e.hasGeology?`geology facts + ${e.targets} target(s)`:"no geology facts"],["8 \xb7 Deposit Types",e.factTypes.has("deposit_type"),e.factTypes.has("deposit_type")?"deposit_type fact present":"no deposit_type fact"],["9–10 \xb7 Exploration & Drilling",e.hasDrilling,`${e.drill?.n||0} drill holes; drilling/trenching summaries`],["11–12 \xb7 Sampling, Analyses, Data Verification",e.hasQaQc||e.hasDataVerification,`${e.assay?.n||0} assay samples; QA/QC=${e.hasQaQc}; verification=${e.hasDataVerification}`],["13 \xb7 Mineral Processing & Metallurgical Testing",e.hasMetTestwork,e.hasMetTestwork?"testwork present":"no metallurgical testwork — required for recovery model"],["14 \xb7 Mineral Resource Estimate",e.hasResource,e.hasResource?"resource present":"NO RESOURCE — blocks reserve & economics"],["15 \xb7 Mineral Reserve Estimate (defining PFS section)",e.hasReserve,e.hasReserve?"reserve present":"NO RESERVE — the PFS cannot exist without this"],["16 \xb7 Mining Methods",e.hasMinePlan,e.hasMinePlan?"mine-plan/geotech facts present":"no mine plan / geotechnical model"],["17 \xb7 Recovery Methods",e.hasMetTestwork,e.hasMetTestwork?"derived from testwork":"blocked on metallurgical testwork"],["18 \xb7 Project Infrastructure",!1,"not extracted — power/water/tailings/access required"],["19 \xb7 Market Studies & Contracts",e.hasMarket,e.hasMarket?"market snapshots/facts present":"no price deck / offtake"],["20 \xb7 Environmental, Permitting, Social",!1,"not extracted — baseline/permitting register required"],["21 \xb7 Capital & Operating Costs",e.hasCostEstimate,e.hasCostEstimate?"cost facts present":"no capex/opex estimate (need AACE Class 4)"],["22 \xb7 Economic Analysis",e.hasReserve&&e.hasCostEstimate,"requires a reserve-based model"],["23 \xb7 Adjacent Properties",e.comparables>0,`${e.comparables} comparable asset(s)`],["25–26 \xb7 Interpretation, Conclusions & Recommendations",e.docCount>0,"authored from the above"]];for(let[a,b,c]of(f.push("## 3. PFS section coverage (NI 43-101 body)"),f.push(""),f.push("| Section | Status | Evidence in dataset |"),f.push("|---------|--------|---------------------|"),p)){let d=a.startsWith("14 ")?e.hasResource?x.ready:x.gap:a.startsWith("15 ")?e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked:n(b);f.push(`| ${a} | ${d} | ${c} |`)}for(let[a,b]of(f.push(""),f.push("_Status is computed from `mines_extracted_facts` types and SQL aggregates — a `Gap` means the data type is absent from the database, not that it was judged inadequate._"),f.push(""),f.push("## 4. The PFS contract (must all hold to declare a PFS)"),f.push(""),[["Reserves from Measured & Indicated only (no Inferred)",e.hasReserve],["Dilution & mining losses incorporated",e.hasReserve&&e.hasMinePlan],["Modifying Factors formally applied & documented",e.hasReserve],["Capex/opex \xb125%, ~15% contingency, AACE Class 4",e.hasCostEstimate],["Reserve-based financial model, positive across a downside",e.hasReserve&&e.hasCostEstimate],["Each discipline signed off by a competent QP/CP",h]]))f.push(`- [${b?"x":" "}] ${a}`);f.push(""),h||f.push("Until every box is checked, the asset is **pre-PFS**. The earliest unchecked box on the critical path is where work must start (see \xa76)."),f.push(""),f.push("## 5. Data inventory"),f.push(""),f.push(`- **Documents catalogued:** ${o(e.docCount)} \xb7 **text chunks indexed:** ${o(e.chunkCount)}`),f.push(`- **Structured drill holes:** ${e.drill?.n||0}${e.drill?.m?` for ${o(e.drill.m)} m`:""} \xb7 **assay samples:** ${e.assay?.n||0}`),f.push(`- **Extracted fact types:** ${e.factTypes.size} \xb7 **defined targets:** ${e.targets} \xb7 **comparables:** ${e.comparables}`),f.push(`- **Valuation scenarios:** ${e.indicativeScenarios} indicative (T1/T2 runs) \xb7 ${e.conceptualScenarios} conceptual operator-target — neither is a declared resource`),f.push(""),f.push("_Counts are read directly from `mines_source_documents`, `mines_document_chunks`, `mines_drill_holes`, `mines_assay_samples`, `mines_extracted_facts`, and `mines_valuation_scenarios`._"),f.push(""),f.push("## 6. Critical-path gaps (ordered)"),f.push("");{let a=q(c,"gap_intro");a&&(f.push(a),f.push(""))}let r=[];e.hasResource||r.push("**Maiden Mineral Resource estimate** — the single hard blocker. Requires sufficient drill density, QA/QC-validated assays, density data, domaining, a block model, classification (M/I/I), and RPEEE within a constraining shape. Until this exists, no reserve, no economics, no PFS."),e.hasMetTestwork||r.push("**Metallurgical testwork** — representative samples across lithology/alteration/oxidation/depth/grade; a recovery model by domain (not a single point). Blocks \xa713/\xa717."),e.hasResource&&!e.hasMinePlan&&r.push("**Mine plan & geotechnical model** — method/pit-configuration trade-off, slope/support parameters, production schedule. Required before reserve conversion."),e.hasResource&&!e.hasReserve&&r.push("**Reserve conversion (\xa715)** — apply Modifying Factors to M&I, incorporate dilution & mining losses, derive Proven/Probable. This is the defining PFS step."),e.hasCostEstimate||r.push("**Capex/opex estimate to \xb125% (AACE Class 4)** — formal Basis of Estimate, vendor budget quotes on major items, ~15% risk-based contingency. Blocks \xa721/\xa722."),r.push("**Infrastructure, water & tailings study** — power/water/access; site water balance; tailings option + GISTM alignment; confirm no fatal flaw."),r.push("**Environmental / permitting / social baseline** — multi-season baseline, permitting register on the critical path, closure cost flowed to the model."),r.push("**Competent QP/CP sign-off per discipline** — and an independent / peer technical review before any disclosure."),r.forEach((a,b)=>f.push(`${b+1}. ${a}`)),f.push(""),f.push("## 7. Recommended work program to reach PFS"),f.push("");let s=a.prepare("SELECT id, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ? AND fact_type = 'work_program' LIMIT 1").get(d);s&&(f.push(`${s.value_text} [ExtractedFact:${s.id}${s.page_or_location?`, ${s.page_or_location}`:""}]`),f.push(""));let t=q(c,"work_program")||q(c,"recommendation");return t?(f.push("_Indicative phased program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(t),f.push("")):s||(f.push("Phase the program to the gate sequence above: (1) resource-definition drilling → maiden resource (G1); (2) metallurgical testwork + mining/geotech trade-off (G2); (3) reserve conversion with Modifying Factors (G3); (4) Class 4 cost estimate + reserve-based model (G4); (5) risk, independent review, QP sign-off (G5). Budget and schedule each phase before launch."),f.push("")),f.push("## 8. Limitations & disclaimers"),f.push(""),f.push("This is a readiness assessment generated by autonomous agents from the project database and document archive. Statuses reflect the **presence** of data types, not a competent person's judgement of their adequacy. The absence of a resource/reserve in the database is reported as a gap, never filled with an estimate. This document is decision-support analysis; it is not a Pre-Feasibility Study, not a qualified person's opinion, and does not constitute investment advice. Producing an actual PFS requires the work program above and competent-person sign-off under the applicable reporting code (NI 43-101 / S-K 1300 / JORC)."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (pfs_readiness_report). Gate/section statuses derive from `mines_extracted_facts` types and SQL aggregates; no figure is asserted that the source data does not contain. Rubric: `docs/mines/pfs-best-practice-template.md` + `pfs-best-practice-checklist.md`._"),{markdown:f.join("\n"),pfs_feasible:h,has_resource:e.hasResource,has_reserve:e.hasReserve,gaps_count:r.length,fact_types:e.factTypes.size,documents:e.docCount}}(w,y,B);c=a.markdown,d=`PFS-Readiness Assessment — ${y.name}`,z={pfs_feasible:a.pfs_feasible,has_resource:a.has_resource,has_reserve:a.has_reserve,gaps_count:a.gaps_count,fact_types:a.fact_types,documents:a.documents}}else{let a=await r(w,y,B);c=a.markdown,d=`Interpretation Memo — ${y.name}`,z={numeric_claims_count:a.numeric_claims_count,chunk_citations_count:a.chunk_citations_count,retrieval_mode:a.retrieval_mode}}let C=(0,k.Om)([a?.space_id,y.default_space_id],{fallback:null}),D=function(a,b){let c=a.prepare("SELECT os_project_id FROM mines_projects WHERE id = ?").get(b);return c?.os_project_id||null}(w,h);try{for(let a of C?w.prepare("SELECT id FROM artifacts WHERE title = ? AND space_id = ?").all(d,C):w.prepare("SELECT id FROM artifacts WHERE title = ? AND project_id = ?").all(d,D||"personal"))try{(0,f.CM)(a.id)}catch{}}catch{}let E=(0,f.Dg)({title:d,kind:A,content:c,project_id:D,agent_id:b.agent_id||null,space_id:C,dedupe_key:""});if(C&&!E.deduped)try{(0,k.h5)(E.artifact_id,C)}catch{}try{(0,i.appendComplianceAudit)({user_id:b.acting_on_behalf_of_user_id||b.user_id||"system",org_id:"personal-org",action:"mines.report.generated",status:"success",summary:`Generated ${l} for ${y.name}`,action_target_id:E.artifact_id,action_target_type:"artifact",meta:{project_id:h,report_kind:l,artifact_id:E.artifact_id,...z}})}catch{}return{status:"ok",artifact_id:E.artifact_id,report_kind:l,space_id:C,chunk_citations_count:z.chunk_citations_count??0,...z}}d()}catch(a){d(a)}})},14207:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{xI:()=>j});var e=c(73024),f=c(76760),g=c(26531),h=c(1441),i=a([h]);h=(i.then?(await i)():i)[0];let k=new Set(["node_modules",".git",".ssh"]),l=new Set([".ssh"]);function j({org_id:a}={}){function b(b){let c=f.resolve(String(b||""));if(!b)throw Error("allowlist_violation: empty path");if(function(a){if(a.split(f.sep).filter(Boolean).some(a=>l.has(a)))return!0;let b=f.basename(a);return".env.local"===b||/^\.env($|\.)/.test(b)}(c))throw Error("allowlist_violation: path is a secret/system path: "+c);if(!(0,g.wn)(c)&&!(0,h.RB)(c,{org_id:a}))throw Error("allowlist_violation: path is outside the OS-allowed or approved Mines import roots: "+c);return c}return{listFolder(a){let c=b(a),d=[],g=[c];for(;g.length;){let a,b=g.pop();try{a=e.readdirSync(b,{withFileTypes:!0})}catch{continue}for(let c of a){let a=c.name;if(a.startsWith("."))continue;let e=f.join(b,a);if(!c.isSymbolicLink())if(c.isDirectory()){if(k.has(a))continue;g.push(e)}else c.isFile()&&d.push(e)}}return d},readDocument(a){let c=b(a);return e.readFileSync(c)},statFile(a){let c,d=b(a);try{c=e.statSync(d)}catch{return null}return{size:c.size,mtimeMs:c.mtimeMs,isDirectory:c.isDirectory(),isFile:c.isFile()}}}}j(),d()}catch(a){d(a)}})},14743:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{G:()=>y});var e=c(73024),f=c(76760),g=c(19151),h=c(72326),i=c(1623),j=c(8727),k=c(66469),l=c(34255),m=c(9381),n=c(40718),o=c(16494),p=c(63289),q=c(9001),r=c(69286),s=c(83963),t=a([g,h,i,j,l,n,o,q,s]);[g,h,i,j,l,n,o,q,s]=t.then?(await t)():t;let z=/```madarx-escalate\s*([\s\S]*?)```/i;function u(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function v(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"agent"}async function w({agent:a,artifactTitle:b,renderedHtml:d,runId:e,triggeredBy:f,appendAudit:g}){let h,i,j=function(a){if(!a?.metadata_json)return null;let b=a.metadata_json;if("string"==typeof b)try{b=JSON.parse(b)}catch{return null}let c=b?.whatsapp_notify_chat_id;return"string"==typeof c&&c.trim()?c.trim():null}(a);if(!j||!d||!String(d).trim())return;try{({getBridgeHealth:h,sendWhatsAppDocument:i}=await c.e(4143).then(c.bind(c,64143)))}catch(b){g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp module unavailable for ${a.name}: ${b.message}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j}});return}let k=await h();if(!k||!1===k.ok||"paired"!==k.pairing_state)return void g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp bridge not paired — skipped artifact notify for ${a.name}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j,pairing_state:k?.pairing_state||null,bridge_error:k?.error||null}});try{let c=await i({chat_id:j,content:d,filename:function(a){let b=String(a||"agent-report").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"agent-report";return`${b}.html`}(b),mimetype:"text/html",caption:`${b} (${f||"scheduled"})`});g({type:"agent.whatsapp_notify.sent",summary:`Sent "${b}" to ${j} via WhatsApp`,status:"sent",meta:{agent_id:a.id,run_id:e,chat_id:j,message_id:c?.message_id||null}}),(0,q.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:"whatsapp_notify",status:"done"})}catch(b){g({type:"agent.whatsapp_notify.failed",summary:`Failed to WhatsApp artifact for ${a.name}: ${b.message}`,status:"error",meta:{agent_id:a.id,run_id:e,chat_id:j}})}}async function x({agent:a,systemPrompt:b,userMessage:c,onToolStart:d,onToolResult:e,onToolError:f,acting_on_behalf_of_user_id:i,heartbeat_task_id:j,pending_approvals:k=[]}){if(process.env.MADARX_MOCK_CLAUDE_TICK)return{output:process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[],created_approvals:[]};let l=Math.max(256,Math.min(8192,Number(process.env.MAX_TOKENS_PER_TICK||1024)||1024)),m=(0,n.IC)(a.id),o=[{role:"user",content:c}],p=[],r=(Array.isArray(k)?k:[]).filter(a=>a&&"string"==typeof a.approval_id&&"string"==typeof a.tool_name).map(a=>({approval_id:a.approval_id,tool_name:a.tool_name,used:!1})),s=[],t="";for(let c=0;c<4;c+=1){let c=await (0,g.chatWithClaude)(o,b,m,{max_tokens:l,model:a.model}),h=(c?.content||[]).filter(a=>a?.type==="text"||"string"==typeof a?.text).map(a=>a.text||"").join("\n").trim();h&&(t=h);let k=(c?.content||[]).filter(a=>a?.type==="tool_use"&&a.name&&a.id);if(!k.length)break;o.push({role:"assistant",content:c.content});let u=[];for(let b of k){let c={name:b.name,input:b.input||{},status:"pending"},g=function(a,b){if(!b||"object"!=typeof b)return null;let c={};if("web_search"===a&&"string"==typeof b.query)c.query=b.query.slice(0,80);else if("web_fetch"===a&&"string"==typeof b.url)try{c.host=new URL(b.url).hostname}catch{}else"create_artifact"===a&&"string"==typeof b.title?c.title=b.title.slice(0,60):"create_agent"===a&&"string"==typeof b.name&&(c.name=b.name.slice(0,60));return Object.keys(c).length?c:null}(b.name,b.input);(0,q.AC)({type:"agent_tool_start",agent_id:a.id,agent_name:a.name,tool:b.name,input_summary:g}),await d?.({toolUse:b,inputSummary:g});try{let d=await (0,n.executeRegistryTool)(b.name,function(a,b){let c=r.find(b=>!b.used&&b.tool_name===a);return c?(c.used=!0,{...b||{},approval_id:c.approval_id}):b}(b.name,b.input||{}),{agent_id:a.id,acting_on_behalf_of_user_id:i||null,heartbeat_task_id:j||null});c.status=d?.status||"complete",c.result=d,d?.status==="approval_required"&&d?.approval_request_id&&s.push({approval_request_id:d.approval_request_id,tool_name:b.name,summary:d.reason||`Approval required for ${b.name}`}),u.push({type:"tool_result",tool_use_id:b.id,content:function(a){try{return JSON.stringify(a).slice(0,4e3)}catch{return String(a).slice(0,4e3)}}(d),is_error:d?.ok===!1&&d?.status!=="approval_required"}),(0,q.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:c.status,isError:d?.ok===!1&&d?.status!=="approval_required"}),await e?.({toolUse:b,result:d,inputSummary:g,event:c})}catch(d){c.status="failed",c.error=d.message,u.push({type:"tool_result",tool_use_id:b.id,content:d.message,is_error:!0}),(0,q.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:"failed",isError:!0,message:d.message}),await f?.({toolUse:b,error:d,inputSummary:g,event:c})}p.push(c)}o.push({role:"user",content:u})}if(!t)throw Error("Claude returned no text for scheduled agent tick");return{output:t,toolEvents:p,created_approvals:s,engine:"anthropic",model:a.model||(0,h.Qp)("anthropic")}}async function y(a,{triggered_by:b="cron",task_id:d=null,agent_run_id:g=null,wake_reason:n=null,instruction:t=null,expected_output:A=null,pending_approvals:B=[],acting_on_behalf_of_user_id:C=null,heartbeat_task_id:D=null}={}){(0,m.Jh)();let E=(0,l.getDb)(),F="object"==typeof a&&a?.id?a:(0,l.getDb)().prepare("SELECT * FROM agents WHERE id = ?").get(String(a||""));if(!F)return null;let G=d?g?(0,s.rN)(g):(0,s.n5)({task_id:d,agent_id:F.id,trigger_source:b,trigger_detail:n||b}):null;G&&((0,s.V0)(G.id),(0,s.lC)(d,{status:"in_progress",actor_type:"agent",actor_id:F.id})),(0,r.XI)(F.id),(0,q.AC)({type:"agent_run_start",agent_id:F.id,agent_name:F.name,triggered_by:b,run_id:G?.id||null,task_id:d});try{let a=u(F.memory,[]),g=a.slice(-10),n=function(a){let b=f.join(m.bo,a,"skills.md");try{return e.readFileSync(b,"utf8").trim()}catch{return""}}(F.id),r=new Date().toISOString().slice(0,10),y=F.system_prompt||`You are ${F.name}, a scheduled madarX OS worker.
602
609
 
603
610
  <agent_mission>
604
- ${C.mission||"Support the user with useful scheduled work."}
611
+ ${F.mission||"Support the user with useful scheduled work."}
605
612
  </agent_mission>
606
613
 
607
- Approval mode: ${C.approval||"human-in-loop"}.
614
+ Approval mode: ${F.approval||"human-in-loop"}.
608
615
 
609
- Produce a structured markdown report. Never perform external sends, posts, deployments, purchases, or destructive operations.`,E=(0,h.$k)(C.engine),F=C.model||(0,h.Qp)(E);process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK||(0,n.W1)({...C,engine:E});let G=`${x.includes("CURRENT_DATE")?x:`${(0,i.uB)()}
616
+ Produce a structured markdown report. Never perform external sends, posts, deployments, purchases, or destructive operations.`,H=(0,h.$k)(F.engine),I=F.model||(0,h.Qp)(H);process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK||(0,o.W1)({...F,engine:H});let J=`${y.includes("CURRENT_DATE")?y:`${(0,i.uB)()}
610
617
 
611
- ${x}`}
618
+ ${y}`}
612
619
 
613
- ${m?`<skills>
614
- ${m}
620
+ ${n?`<skills>
621
+ ${n}
615
622
  </skills>
616
623
  `:""}
617
- You are running as a scheduled cron tick. Your FINAL message is saved verbatim as the deliverable the owner sees — make it the complete result in clean markdown, not a status summary, progress recap, or "what I did" note. Reproduce the full content in your final message even if a prior version already exists on disk.`,H=d?(0,r.gg)(d):null,{instruction:I,expected_output:J}=function({instruction:a,expected_output:b,task:c,agent:d}={}){let e=a=>"string"==typeof a&&a.trim()?a.trim():null;return{instruction:e(a)||c&&(e(c.description)||e(c.title))||e(d?.mission)||"Execute your mission.",expected_output:e(b)||c&&e(c.acceptance_criteria)||e(d?.expected_output)||"A complete, structured markdown report covering the full result — not a status summary."}}({instruction:s,expected_output:y,task:H,agent:C}),K=`Scheduled tick - today is ${q}. Carry out the instruction below and deliver exactly what the expected-output contract requires.
624
+ You are running as a scheduled cron tick. Your FINAL message is saved verbatim as the deliverable the owner sees — make it the complete result in clean markdown, not a status summary, progress recap, or "what I did" note. Reproduce the full content in your final message even if a prior version already exists on disk.
625
+
626
+ ESCALATION_PROTOCOL (non-negotiable): if you CANNOT fully achieve the goal because you are missing a tool or capability (a tool you need is not in your toolset, or returns "not permitted"), do NOT guess, fabricate, or deliver a half-answer. Instead make your FINAL message exactly one fenced block:
627
+ \`\`\`madarx-escalate
628
+ {"capability":"<plain-language capability you need, e.g. create pages in Notion>","reason":"<what you were blocked on>"}
629
+ \`\`\`
630
+ madarX will route this to Tool Smith to build the capability and grant it to you, then re-run you. Use this only for a genuine missing capability — not for a transient error you can retry.`,K=d?(0,s.gg)(d):null,{instruction:L,expected_output:M}=function({instruction:a,expected_output:b,task:c,agent:d}={}){let e=a=>"string"==typeof a&&a.trim()?a.trim():null;return{instruction:e(a)||c&&(e(c.description)||e(c.title))||e(d?.mission)||"Execute your mission.",expected_output:e(b)||c&&e(c.acceptance_criteria)||e(d?.expected_output)||"A complete, structured markdown report covering the full result — not a status summary."}}({instruction:t,expected_output:A,task:K,agent:F}),N=`Scheduled tick - today is ${r}. Carry out the instruction below and deliver exactly what the expected-output contract requires.
618
631
 
619
632
  <task_instruction>
620
- ${I}
633
+ ${L}
621
634
  </task_instruction>
622
635
 
623
636
  <expected_output>
624
- ${J}
637
+ ${M}
625
638
  </expected_output>
626
639
 
627
640
  <agent>
628
- Name: ${C.name}
629
- Mission: ${C.mission||""}
630
- Schedule: ${C.schedule||""}
631
- Tools: ${t(C.tools,[]).join(", ")||"none listed"}
641
+ Name: ${F.name}
642
+ Mission: ${F.mission||""}
643
+ Schedule: ${F.schedule||""}
644
+ Tools: ${u(F.tools,[]).join(", ")||"none listed"}
632
645
  </agent>
633
646
 
634
647
  <recent_memory>
635
648
  ${g.length?g.map((a,b)=>`${b+1}. ${a}`).join("\n"):"No prior memory."}
636
- </recent_memory>`,{output:L,toolEvents:M,engine:N,model:O}=process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK?{output:process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[],engine:E,model:F}:"anthropic"===E?await w({agent:{...C,engine:E,model:F},systemPrompt:G,userMessage:K,acting_on_behalf_of_user_id:z,heartbeat_task_id:A,onToolStart:({toolUse:a,inputSummary:b})=>{D&&(0,r.Dn)(D.id,{agent_id:C.id,task_id:d,event_type:"tool_start",stream:"tool",message:a.name,payload:{tool:a.name,input_summary:b}})},onToolResult:({toolUse:a,result:b,event:c})=>{if(D){if(b?.status==="approval_required")return void(0,r.qt)(D.id,{message:`Approval required for ${a.name}`,payload:{tool:a.name,approval_request_id:b.approval_request_id}});(0,r.Dn)(D.id,{agent_id:C.id,task_id:d,event_type:"tool_result",stream:"tool",level:b?.ok===!1&&b?.status!=="approval_required"?"error":"info",message:`${a.name} ${c.status}`,payload:{tool:a.name,status:c.status,approval_request_id:b?.approval_request_id||null}})}},onToolError:({toolUse:a,error:b})=>{D&&(0,r.Dn)(D.id,{agent_id:C.id,task_id:d,event_type:"error",stream:"tool",level:"error",message:b.message,payload:{tool:a.name}})}}):{output:await (0,h.d)({agent:{...C,engine:E,model:F},systemPrompt:G,userMessage:K}),toolEvents:[],engine:E,model:F};if(!M.length&&!process.env.MADARX_MOCK_AGENT_TICK&&!process.env.MADARX_MOCK_CLAUDE_TICK&&(0,o.S)(L)){let a=Error(`${C.name} produced a fabricated tool transcript (it role-played tool calls and invented results) instead of running real tools — nothing actually executed, so no deliverable was saved. Switch this agent's engine to "Anthropic API" so madarX dispatches its tools for real.`);throw a.code="fabricated_tool_output",a}let P=M.length?`${L}
649
+ </recent_memory>`,{output:O,toolEvents:P,engine:Q,model:R,created_approvals:S=[]}=process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK?{output:process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[],engine:H,model:I}:"anthropic"===H?await x({agent:{...F,engine:H,model:I},systemPrompt:J,userMessage:N,acting_on_behalf_of_user_id:C,heartbeat_task_id:D,pending_approvals:B,onToolStart:({toolUse:a,inputSummary:b})=>{G&&(0,s.Dn)(G.id,{agent_id:F.id,task_id:d,event_type:"tool_start",stream:"tool",message:a.name,payload:{tool:a.name,input_summary:b}})},onToolResult:({toolUse:a,result:b,event:c})=>{if(G){if(b?.status==="approval_required")return void(0,s.qt)(G.id,{message:`Approval required for ${a.name}`,payload:{tool:a.name,approval_request_id:b.approval_request_id}});(0,s.Dn)(G.id,{agent_id:F.id,task_id:d,event_type:"tool_result",stream:"tool",level:b?.ok===!1&&b?.status!=="approval_required"?"error":"info",message:`${a.name} ${c.status}`,payload:{tool:a.name,status:c.status,approval_request_id:b?.approval_request_id||null}})}},onToolError:({toolUse:a,error:b})=>{G&&(0,s.Dn)(G.id,{agent_id:F.id,task_id:d,event_type:"error",stream:"tool",level:"error",message:b.message,payload:{tool:a.name}})}}):{output:await (0,h.d)({agent:{...F,engine:H,model:I},systemPrompt:J,userMessage:N}),toolEvents:[],engine:H,model:I};if(!P.length&&!process.env.MADARX_MOCK_AGENT_TICK&&!process.env.MADARX_MOCK_CLAUDE_TICK&&(0,p.S)(O)){let a=Error(`${F.name} produced a fabricated tool transcript (it role-played tool calls and invented results) instead of running real tools — nothing actually executed, so no deliverable was saved. Switch this agent's engine to "Anthropic API" so madarX dispatches its tools for real.`);throw a.code="fabricated_tool_output",a}let T=function(a){let b=z.exec(String(a||""));if(!b)return null;try{let a=JSON.parse(b[1].trim()),c=String(a.capability||a.capability_description||"").trim();if(!c)return null;return{capability:c,reason:String(a.reason||"").trim()}}catch{return null}}(O);if(T){let a=null;try{a=(0,s.createTask)({title:`Build capability: ${T.capability.slice(0,80)}`,description:[`Specialist "${F.name}" (${F.id}) is blocked — it needs a capability that does not exist yet:`,` "${T.capability}"`,T.reason?`
650
+ Blocked on: ${T.reason}`:"","\nAuthor the right path (composite tool / REST connector / skill / propose_tool) and grant it to the requester.",`Grant the result to agent: ${F.id}.`].join("\n"),acceptance_criteria:"Capability authored and granted to the requesting specialist so its goal can be completed on re-run.",assignee_agent_id:"tool-smith-agent",created_by_agent_id:F.id,priority:"high",project_id:F.project_id||null}).id}catch(a){process.env.MADARX_DEBUG&&console.error("[agent-runner] escalation task creation failed:",a?.message||a)}let e=`Blocked: missing capability "${T.capability}". Routed to Tool Smith${a?` (task ${a})`:""} to build and grant it; this agent will re-run once available.`,{recordRun:f,appendAudit:g}=await Promise.resolve().then(c.bind(c,60105));if(f({kind:"agent-tick",title:`${F.name} escalated a missing capability`,agent:F.name,agent_id:F.id,status:"blocked",preview:e,output:e,triggered_by:b}),g({type:"agent.capability.escalated",summary:`${F.name} escalated missing capability: ${T.capability}`,status:"blocked",meta:{agent_id:F.id,tool_smith_task_id:a,capability:T.capability,triggered_by:b}}),G)try{(0,s.WH)(d,{body:e,author_agent_id:F.id,created_by_run_id:G.id}),(0,s.lC)(d,{status:"blocked",blocked_reason:e,actor_type:"agent",actor_id:F.id}),(0,s.G)(G.id,{status:"failed",error:e})}catch{}return(0,q.AC)({type:"agent_run_complete",agent_id:F.id,agent_name:F.name,status:"blocked",triggered_by:b,run_id:G?.id||null,task_id:d}),{id:G?.id||null,status:"blocked",escalated:!0,tool_smith_task_id:a,capability:T.capability,preview:e}}let U=P.length?`${O}
637
651
 
638
652
  ## Tool events
639
- ${M.map(a=>`- ${a.name}: ${a.status}`).join("\n")}`:L,Q=function({agentId:a,today:b,fallback:c}){let d=c||"",g=Buffer.byteLength(d,"utf8");try{let c=u(a),h=null;for(let a of e.readdirSync(l.m4)){if(!a.endsWith(".md")||!a.startsWith(c)||!a.includes(b))continue;let d=f.join(l.m4,a),g=0;try{g=e.statSync(d).size}catch{continue}(!h||g>h.size)&&(h={full:d,size:g})}if(h&&h.size>Math.max(2048,1.5*g)){let a=e.readFileSync(h.full,"utf8");if(a.trim().length>d.trim().length)return a}}catch{}return d}({agentId:C.id,today:q,fallback:P}),R=new Date().toISOString().replace(/[:.]/g,"-"),S=f.join(l.m4,`${u(C.id)}-${q}-${R}.md`);e.writeFileSync(S,Q,"utf8");let T=(0,l.z9)(S),U=`${C.name} scheduled report`,V=(0,j.vr)(Q),W=(0,j.j7)({title:U,markdown:V}),{recordRun:X,recordArtifact:Y,appendAudit:Z}=await Promise.resolve().then(c.bind(c,60105)),$=X({kind:"agent-tick",title:`${C.name} scheduled tick`,agent:C.name,agent_id:C.id,status:"complete",artifact:T,preview:P.slice(0,1e3),output:P,engine:N,model:O,triggered_by:b}),_=Y({run_id:$.id,agent_id:C.id,file_path:T,kind:"document",title:U,content:W,source_md:V,project_id:C.project_id||null});$.artifact_id=_,$.artifact_title=U,await v({agent:C,artifactTitle:U,renderedHtml:W,runId:$.id,triggeredBy:b,appendAudit:Z});let aa=Math.max(1,Math.min(500,Number(process.env.MEMORY_MAX_ENTRIES||50)||50)),ab=[...a,`${(0,k.nowIso)()} - ${(String(P||"").split(/\r?\n/).map(a=>a.replace(/^#+\s*/,"").trim()).find(a=>a&&!a.startsWith("-"))||"Completed a scheduled tick and saved a report.").slice(0,240)}`].slice(-aa),ac=(0,k.nowIso)();B.prepare("UPDATE agents SET memory = ?, last_run_at = ?, status = ? WHERE id = ?").run(JSON.stringify(ab),ac,"last cron tick complete",C.id);let ad=f.join(l.bo,C.id,"heartbeat.json");try{let a=t(e.readFileSync(ad,"utf8"),{});a.status="last cron tick complete",a.last_run=ac,a.last_artifact=T,e.writeFileSync(ad,JSON.stringify(a,null,2),"utf8")}catch{Z({type:"agent.heartbeat.missing",summary:`Heartbeat file missing for ${C.name}`,status:"warning",meta:{agent_id:C.id}})}if((0,p.AC)({type:"agent_run_complete",agent_id:C.id,agent_name:C.name,status:"complete",triggered_by:b,run_id:D?.id||null,task_id:d}),D){let a=P.replace(/\s+/g," ").slice(0,800);(0,r.WH)(d,{body:`Execution update from ${C.name}:
653
+ ${P.map(a=>`- ${a.name}: ${a.status}`).join("\n")}`:O,V=function({agentId:a,today:b,fallback:c}){let d=c||"",g=Buffer.byteLength(d,"utf8");try{let c=v(a),h=null;for(let a of e.readdirSync(m.m4)){if(!a.endsWith(".md")||!a.startsWith(c)||!a.includes(b))continue;let d=f.join(m.m4,a),g=0;try{g=e.statSync(d).size}catch{continue}(!h||g>h.size)&&(h={full:d,size:g})}if(h&&h.size>Math.max(2048,1.5*g)){let a=e.readFileSync(h.full,"utf8");if(a.trim().length>d.trim().length)return a}}catch{}return d}({agentId:F.id,today:r,fallback:U}),W=new Date().toISOString().replace(/[:.]/g,"-"),X=f.join(m.m4,`${v(F.id)}-${r}-${W}.md`);e.writeFileSync(X,V,"utf8");let Y=(0,m.z9)(X),Z=P.filter(a=>"string"==typeof a.name&&a.name.startsWith("higgsfield_")&&a.result?.ok&&a.result?.url).map(a=>({url:a.result.url,kind:"higgsfield_generate_video"===a.name?"video":"image",thumbnail:a.result.thumbnail||null,prompt:a.input?.prompt||""})),$=(0,j.vr)(V),_=Z.length?`${F.name} — ${"video"===Z[0].kind?"video":"image"}`:`${F.name} scheduled report`,aa=Z.length?(0,k.o)(Z,{title:_,caption:Z[0].prompt||""}):(0,j.j7)({title:_,markdown:$}),{recordRun:ab,recordArtifact:ac,appendAudit:ad}=await Promise.resolve().then(c.bind(c,60105)),ae=ab({kind:"agent-tick",title:`${F.name} scheduled tick`,agent:F.name,agent_id:F.id,status:"complete",artifact:Y,preview:U.slice(0,1e3),output:U,engine:Q,model:R,triggered_by:b}),af=ac({run_id:ae.id,agent_id:F.id,file_path:Y,kind:"document",title:_,content:aa,source_md:$,project_id:F.project_id||null});ae.artifact_id=af,ae.artifact_title=_,await w({agent:F,artifactTitle:_,renderedHtml:aa,runId:ae.id,triggeredBy:b,appendAudit:ad});let ag=Math.max(1,Math.min(500,Number(process.env.MEMORY_MAX_ENTRIES||50)||50)),ah=[...a,`${(0,l.nowIso)()} - ${(String(U||"").split(/\r?\n/).map(a=>a.replace(/^#+\s*/,"").trim()).find(a=>a&&!a.startsWith("-"))||"Completed a scheduled tick and saved a report.").slice(0,240)}`].slice(-ag),ai=(0,l.nowIso)();E.prepare("UPDATE agents SET memory = ?, last_run_at = ?, status = ? WHERE id = ?").run(JSON.stringify(ah),ai,"last cron tick complete",F.id);let aj=f.join(m.bo,F.id,"heartbeat.json");try{let a=u(e.readFileSync(aj,"utf8"),{});a.status="last cron tick complete",a.last_run=ai,a.last_artifact=Y,e.writeFileSync(aj,JSON.stringify(a,null,2),"utf8")}catch{ad({type:"agent.heartbeat.missing",summary:`Heartbeat file missing for ${F.name}`,status:"warning",meta:{agent_id:F.id}})}if((0,q.AC)({type:"agent_run_complete",agent_id:F.id,agent_name:F.name,status:"complete",triggered_by:b,run_id:G?.id||null,task_id:d}),G){let a=U.replace(/\s+/g," ").slice(0,800);(0,s.WH)(d,{body:`Execution update from ${F.name}:
640
654
 
641
- ${a}`,author_agent_id:C.id,created_by_run_id:D.id}),(0,r.G)(D.id,{status:"succeeded",result:{report_path:T,legacy_run_id:$.id},stdout_excerpt:a}),(0,r.lC)(d,{status:"in_review",actor_type:"agent",actor_id:C.id}),(0,r.ij)(C.id,{last_run_id:D.id,last_run_status:"succeeded",state:{last_task_id:d,last_report:T}})}return $}catch(e){let a=(e?.message||String(e)).slice(0,1e3);if(D)try{(0,r.G)(D.id,{status:"failed",error:a})}catch{}else try{let{recordRun:d,appendAudit:f}=await Promise.resolve().then(c.bind(c,60105));d({kind:"agent-tick",title:`${C.name} run failed`,agent:C.name,agent_id:C.id,status:"failed",preview:a,output:a,triggered_by:b}),f({type:"agent.run.failed",summary:`${C.name} run failed: ${a}`,status:"error",meta:{agent_id:C.id,code:e?.code||null,triggered_by:b}})}catch{}throw(0,p.AC)({type:"agent_run_complete",agent_id:C.id,agent_name:C.name,status:"failed",isError:!0,triggered_by:b,run_id:D?.id||null,task_id:d,error:a}),e}finally{(0,q.fd)(C.id)}}[g,h,i,j,k,m,n,p,r]=s.then?(await s)():s,d()}catch(a){d(a)}})},14972:(a,b,c)=>{"use strict";function d(a){let b=String(a||"").toLowerCase();return"cu"===b||"copper"===b?.85:"ag"===b||"silver"===b?.75:.9}function e(a){let b=Number(a);return Number.isFinite(b)?b:null}function f(a,b=2){if(null==a||!Number.isFinite(a))return null;let c=10**b;return Math.round(a*c)/c}function g(a={}){let b=e(a.resource_tonnes),c=e(a.grade_au_gpt??a.au_gpt),h=e(a.grade_ag_gpt??a.ag_gpt),i=e(a.grade_cu_pct??a.cu_pct),j=e(a.recovery_au)??d("Au"),k=e(a.recovery_ag)??d("Ag"),l=e(a.recovery_cu)??d("Cu"),m=e(a.price_au_usd_oz),n=e(a.price_ag_usd_oz),o=e(a.price_cu_usd_lb),p=e(a.in_situ_factor)??function(a="exploration"){let b=String(a||"").toLowerCase();return b.includes("production")?.12:b.includes("development")||b.includes("resource")?.06:.03}(a.asset_stage);if(null==b||b<=0)return{valuation_tier:"t1_in_situ",resource_tonnes:null,contained_au_oz:null,contained_ag_oz:null,contained_cu_lb:null,gross_metal_value_usd:null,in_situ_value_usd:null,recovery_au_used:j,recovery_ag_used:k,recovery_cu_used:l,in_situ_factor_used:p,usd_per_oz_au:null,usd_per_lb_cu:null,usd_per_tonne:null};let q=null==c?null:b*c/1e6*32150.7466*j,r=null==h?null:b*h/1e6*32150.7466*k,s=null==i?null:i/100*b*2204.62*l,t=(null==q||null==m?0:q*m)+(null==r||null==n?0:r*n)+(null==s||null==o?0:s*o),u=t>0,v=u?t*p:null;return{valuation_tier:"t1_in_situ",resource_tonnes:f(b,3),contained_au_oz:f(q,3),contained_ag_oz:f(r,3),contained_cu_lb:f(s,3),gross_metal_value_usd:u?t:null,in_situ_value_usd:v,recovery_au_used:j,recovery_ag_used:k,recovery_cu_used:l,in_situ_factor_used:p,usd_per_oz_au:f(null!=v&&q?v/q:null,3),usd_per_lb_cu:f(null!=v&&s?v/s:null,3),usd_per_tonne:f(null!=v?v/b:null,3)}}c.d(b,{uX:()=>g})},15709:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{r1:()=>j});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-quarterly-review.js")),l=null;function j(){let a=(l||(l=JSON.parse((0,e.readFileSync)((0,g.join)(k,"specs","hail-quarterly-review.json"),"utf8"))),l);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},15769:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>j});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/mines-workflows.js")),l=["mine-project-intake","mine-valuation","mine-market-trend-monitor","mine-portfolio-screen"];function j(){for(let a of l)try{let b=function(a){let b=(0,g.join)(k,"specs",`${a}.json`);return JSON.parse((0,e.readFileSync)(b,"utf8"))}(a);(0,h.R1)(b,{source_spec_json:JSON.stringify(b),created_by_user_id:null,skipValidation:!0})}catch(b){console.warn(`[mines-workflows] failed to seed ${a}:`,b?.message||b)}}d()}catch(a){d(a)}})},16494:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W1:()=>h});var e=c(72326),f=c(40718),g=a([e,f]);[e,f]=g.then?(await g)():g;let i=new Set(["anthropic","claude-code","codex"]);function h(a){let b=(0,e.$k)(a?.engine),c=i.has((0,e.$k)(b)),d=function(a){if(!a?.id)return!1;try{return(0,f.IC)(a.id).length>0}catch{return!1}}(a);if(!d||c)return{needsTools:d,engineCanExecuteTools:c};let g=Error(`This agent has live tools enabled but its engine (${b}) cannot run tools — it only completes text, so it would fabricate a tool transcript instead of doing real work. The run was stopped. Fix: switch this agent's engine to "Anthropic API" (governed tools) or "Claude Code" in its Details view.`);throw g.code="engine_cannot_run_tools",g.engine=b,g}d()}catch(a){d(a)}})},16838:(a,b,c)=>{"use strict";c.d(b,{Z:()=>k});let d=[{name:"La Caridad",status:"Producing",dist:"~25 km SE",tonnes:"2,100 Mt",cu:"0.21% Cu",note:"9,737 Mlb contained Cu"},{name:"Cananea / Buenavista",status:"Producing",dist:"Same belt",tonnes:"2,413 Mt",cu:"0.44% Cu",note:"one of the largest Cu mines on earth"},{name:"La Colorada breccia",status:"Historic",dist:"Same belt",tonnes:"7 Mt",cu:"6.0% Cu",note:"high-grade breccia analogue"}];function e(a){return String(a??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function f(a,b=0){return null!=a&&Number.isFinite(Number(a))?new Intl.NumberFormat("en-US",{maximumFractionDigits:b}).format(Number(a)):"—"}function g(a){if(null==a||!Number.isFinite(Number(a)))return"—";let b=Number(a);return b>=1e9?`$${(b/1e9).toFixed(2)}B`:b>=1e6?`$${Math.round(b/1e6)}M`:b>=1e3?`$${Math.round(b/1e3)}k`:`$${Math.round(b)}`}function h(a){try{return JSON.parse(a)||{}}catch{return{}}}function i(a,b){let c=b.scen[0]?.r?.in_situ_value_usd,d=b.scen[b.scen.length-1]?.r?.in_situ_value_usd;return{hero_headline:"District-scale copper optionality, next to two world-class mines.",hero_subhead:`${a.name} sits in the Cananea–La Caridad porphyry belt of Sonora, Mexico — one of the most productive copper districts on earth. Four drill-confirmed targets, one untested high-priority blanket, and no resource yet declared: the value today is exploration optionality.`,opportunity:[`The case for ${a.name} is location and evidence. It lies in the same belt — and within ~25 km — of La Caridad and Cananea, two of the largest copper mines in the world. The same geology that built them runs through this ground.`,`Teck drilled it. Their 2011–2012 program returned copper across multiple targets and walked away mid-story, leaving the highest-priority target (a chalcocite blanket at El Choclo NW) untested. That is the optionality a partner is buying.`,`No mineral resource has been declared, and we do not pretend one exists. What follows is the evidence on the ground and a clearly-labelled conceptual scenario — not a valuation opinion.`],findings_lead:"The asset is not a concept on a map. There is drilled copper, surface geochemistry, and a geological model anchored to producing neighbours.",upside_lead:"Four defined targets, each a distinct shot on goal. El Choclo NW — a leached-capping blanket target — was proposed for drilling but never tested before Teck withdrew.",risk_lead:"We lead with the risk because credibility is the point. This is exploration: no declared resource, grade continuity at depth unproven. The mitigation is a focused, sequenced work program.",the_ask:`${a.name}'s operator (Grupo Factor) is seeking an incoming partner under NDA. The near-term path: re-interpret the geophysics, vector with clay-alteration (SWIR) core analysis, then drill the untested El Choclo NW blanket — and, if it confirms, define a maiden resource.`,value_range_label:null!=c&&null!=d?`${g(c)} – ${g(d)}`:"—"}}function j(a){return`<span class="kick"><svg class="kick-mark" width="22" height="8" viewBox="0 0 22 8" aria-hidden="true"><path d="M0 4h14" stroke="currentColor" stroke-width="1.4"/><circle cx="19" cy="4" r="2.4" fill="currentColor"/></svg>${e(a)}</span>`}function k(a,b,c={}){let l=function(a,b){let c=b.id,d=(b,...c)=>a.prepare(b).all(...c),e=(b,...c)=>a.prepare(b).get(...c),f=d("SELECT fact_type, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ?",c),g=new Map;for(let a of f)g.has(a.fact_type)||g.set(a.fact_type,a);let i=d("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'",c).map(a=>({key:a.scenario.replace("operator_",""),a:h(a.assumptions_json),r:h(a.result_json)})),j=["low","base","high"];i.sort((a,b)=>j.indexOf(a.key)-j.indexOf(b.key));let k=d(`SELECT sample_id, width_m, cu_pct, ag_ppm, other_grades_json
655
+ ${a}`,author_agent_id:F.id,created_by_run_id:G.id}),(0,s.G)(G.id,{status:"succeeded",result:{report_path:Y,legacy_run_id:ae.id},stdout_excerpt:a}),(0,s.lC)(d,{status:"in_review",actor_type:"agent",actor_id:F.id}),(0,s.ij)(F.id,{last_run_id:G.id,last_run_status:"succeeded",state:{last_task_id:d,last_report:Y}})}if(Array.isArray(S)&&S.length){let a={agent_id:F.id,agent_name:F.name,instruction:t||null,expected_output:A||null,triggered_by:b};for(let b of S)try{let c=E.prepare("SELECT payload FROM approval_requests WHERE id = ?").get(b.approval_request_id),d=c?.payload?u(c.payload,{}):{};d.resume=a,E.prepare("UPDATE approval_requests SET payload = ? WHERE id = ?").run(JSON.stringify(d),b.approval_request_id)}catch{}let c=S[0];ae.pending_approval={approval_id:c.approval_request_id,tool_name:c.tool_name,summary:c.summary,agent_id:F.id,agent_name:F.name}}return ae}catch(e){let a=(e?.message||String(e)).slice(0,1e3);if(G)try{(0,s.G)(G.id,{status:"failed",error:a})}catch{}else try{let{recordRun:d,appendAudit:f}=await Promise.resolve().then(c.bind(c,60105));d({kind:"agent-tick",title:`${F.name} run failed`,agent:F.name,agent_id:F.id,status:"failed",preview:a,output:a,triggered_by:b}),f({type:"agent.run.failed",summary:`${F.name} run failed: ${a}`,status:"error",meta:{agent_id:F.id,code:e?.code||null,triggered_by:b}})}catch{}throw(0,q.AC)({type:"agent_run_complete",agent_id:F.id,agent_name:F.name,status:"failed",isError:!0,triggered_by:b,run_id:G?.id||null,task_id:d,error:a}),e}finally{(0,r.fd)(F.id)}}d()}catch(a){d(a)}})},14972:(a,b,c)=>{"use strict";function d(a){let b=String(a||"").toLowerCase();return"cu"===b||"copper"===b?.85:"ag"===b||"silver"===b?.75:.9}function e(a){let b=Number(a);return Number.isFinite(b)?b:null}function f(a,b=2){if(null==a||!Number.isFinite(a))return null;let c=10**b;return Math.round(a*c)/c}function g(a={}){let b=e(a.resource_tonnes),c=e(a.grade_au_gpt??a.au_gpt),h=e(a.grade_ag_gpt??a.ag_gpt),i=e(a.grade_cu_pct??a.cu_pct),j=e(a.recovery_au)??d("Au"),k=e(a.recovery_ag)??d("Ag"),l=e(a.recovery_cu)??d("Cu"),m=e(a.price_au_usd_oz),n=e(a.price_ag_usd_oz),o=e(a.price_cu_usd_lb),p=e(a.in_situ_factor)??function(a="exploration"){let b=String(a||"").toLowerCase();return b.includes("production")?.12:b.includes("development")||b.includes("resource")?.06:.03}(a.asset_stage);if(null==b||b<=0)return{valuation_tier:"t1_in_situ",resource_tonnes:null,contained_au_oz:null,contained_ag_oz:null,contained_cu_lb:null,gross_metal_value_usd:null,in_situ_value_usd:null,recovery_au_used:j,recovery_ag_used:k,recovery_cu_used:l,in_situ_factor_used:p,usd_per_oz_au:null,usd_per_lb_cu:null,usd_per_tonne:null};let q=null==c?null:b*c/1e6*32150.7466*j,r=null==h?null:b*h/1e6*32150.7466*k,s=null==i?null:i/100*b*2204.62*l,t=(null==q||null==m?0:q*m)+(null==r||null==n?0:r*n)+(null==s||null==o?0:s*o),u=t>0,v=u?t*p:null;return{valuation_tier:"t1_in_situ",resource_tonnes:f(b,3),contained_au_oz:f(q,3),contained_ag_oz:f(r,3),contained_cu_lb:f(s,3),gross_metal_value_usd:u?t:null,in_situ_value_usd:v,recovery_au_used:j,recovery_ag_used:k,recovery_cu_used:l,in_situ_factor_used:p,usd_per_oz_au:f(null!=v&&q?v/q:null,3),usd_per_lb_cu:f(null!=v&&s?v/s:null,3),usd_per_tonne:f(null!=v?v/b:null,3)}}c.d(b,{uX:()=>g})},15709:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{r1:()=>j});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-quarterly-review.js")),l=null;function j(){let a=(l||(l=JSON.parse((0,e.readFileSync)((0,g.join)(k,"specs","hail-quarterly-review.json"),"utf8"))),l);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},15769:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>j});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/mines-workflows.js")),l=["mine-project-intake","mine-valuation","mine-market-trend-monitor","mine-portfolio-screen"];function j(){for(let a of l)try{let b=function(a){let b=(0,g.join)(k,"specs",`${a}.json`);return JSON.parse((0,e.readFileSync)(b,"utf8"))}(a);(0,h.R1)(b,{source_spec_json:JSON.stringify(b),created_by_user_id:null,skipValidation:!0})}catch(b){console.warn(`[mines-workflows] failed to seed ${a}:`,b?.message||b)}}d()}catch(a){d(a)}})},16494:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W1:()=>h});var e=c(72326),f=c(40718),g=a([e,f]);[e,f]=g.then?(await g)():g;let i=new Set(["anthropic","claude-code","codex"]);function h(a){let b=(0,e.$k)(a?.engine),c=i.has((0,e.$k)(b)),d=function(a){if(!a?.id)return!1;try{return(0,f.IC)(a.id).length>0}catch{return!1}}(a);if(!d||c)return{needsTools:d,engineCanExecuteTools:c};let g=Error(`This agent has live tools enabled but its engine (${b}) cannot run tools — it only completes text, so it would fabricate a tool transcript instead of doing real work. The run was stopped. Fix: switch this agent's engine to "Anthropic API" (governed tools) or "Claude Code" in its Details view.`);throw g.code="engine_cannot_run_tools",g.engine=b,g}d()}catch(a){d(a)}})},16838:(a,b,c)=>{"use strict";c.d(b,{Z:()=>k});let d=[{name:"La Caridad",status:"Producing",dist:"~25 km SE",tonnes:"2,100 Mt",cu:"0.21% Cu",note:"9,737 Mlb contained Cu"},{name:"Cananea / Buenavista",status:"Producing",dist:"Same belt",tonnes:"2,413 Mt",cu:"0.44% Cu",note:"one of the largest Cu mines on earth"},{name:"La Colorada breccia",status:"Historic",dist:"Same belt",tonnes:"7 Mt",cu:"6.0% Cu",note:"high-grade breccia analogue"}];function e(a){return String(a??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function f(a,b=0){return null!=a&&Number.isFinite(Number(a))?new Intl.NumberFormat("en-US",{maximumFractionDigits:b}).format(Number(a)):"—"}function g(a){if(null==a||!Number.isFinite(Number(a)))return"—";let b=Number(a);return b>=1e9?`$${(b/1e9).toFixed(2)}B`:b>=1e6?`$${Math.round(b/1e6)}M`:b>=1e3?`$${Math.round(b/1e3)}k`:`$${Math.round(b)}`}function h(a){try{return JSON.parse(a)||{}}catch{return{}}}function i(a,b){let c=b.scen[0]?.r?.in_situ_value_usd,d=b.scen[b.scen.length-1]?.r?.in_situ_value_usd;return{hero_headline:"District-scale copper optionality, next to two world-class mines.",hero_subhead:`${a.name} sits in the Cananea–La Caridad porphyry belt of Sonora, Mexico — one of the most productive copper districts on earth. Four drill-confirmed targets, one untested high-priority blanket, and no resource yet declared: the value today is exploration optionality.`,opportunity:[`The case for ${a.name} is location and evidence. It lies in the same belt — and within ~25 km — of La Caridad and Cananea, two of the largest copper mines in the world. The same geology that built them runs through this ground.`,`Teck drilled it. Their 2011–2012 program returned copper across multiple targets and walked away mid-story, leaving the highest-priority target (a chalcocite blanket at El Choclo NW) untested. That is the optionality a partner is buying.`,`No mineral resource has been declared, and we do not pretend one exists. What follows is the evidence on the ground and a clearly-labelled conceptual scenario — not a valuation opinion.`],findings_lead:"The asset is not a concept on a map. There is drilled copper, surface geochemistry, and a geological model anchored to producing neighbours.",upside_lead:"Four defined targets, each a distinct shot on goal. El Choclo NW — a leached-capping blanket target — was proposed for drilling but never tested before Teck withdrew.",risk_lead:"We lead with the risk because credibility is the point. This is exploration: no declared resource, grade continuity at depth unproven. The mitigation is a focused, sequenced work program.",the_ask:`${a.name}'s operator (Grupo Factor) is seeking an incoming partner under NDA. The near-term path: re-interpret the geophysics, vector with clay-alteration (SWIR) core analysis, then drill the untested El Choclo NW blanket — and, if it confirms, define a maiden resource.`,value_range_label:null!=c&&null!=d?`${g(c)} – ${g(d)}`:"—"}}function j(a){return`<span class="kick"><svg class="kick-mark" width="22" height="8" viewBox="0 0 22 8" aria-hidden="true"><path d="M0 4h14" stroke="currentColor" stroke-width="1.4"/><circle cx="19" cy="4" r="2.4" fill="currentColor"/></svg>${e(a)}</span>`}function k(a,b,c={}){let l=function(a,b){let c=b.id,d=(b,...c)=>a.prepare(b).all(...c),e=(b,...c)=>a.prepare(b).get(...c),f=d("SELECT fact_type, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ?",c),g=new Map;for(let a of f)g.has(a.fact_type)||g.set(a.fact_type,a);let i=d("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'",c).map(a=>({key:a.scenario.replace("operator_",""),a:h(a.assumptions_json),r:h(a.result_json)})),j=["low","base","high"];i.sort((a,b)=>j.indexOf(a.key)-j.indexOf(b.key));let k=d(`SELECT sample_id, width_m, cu_pct, ag_ppm, other_grades_json
642
656
  FROM mines_assay_samples WHERE project_id = ? AND sample_type = 'drill_core'
643
657
  ORDER BY (cu_pct * width_m) DESC LIMIT 5`,c),l=e(`SELECT COUNT(*) n, AVG(cu_pct) avg_cu, MAX(cu_pct) max_cu, AVG(ag_ppm) avg_ag
644
658
  FROM mines_assay_samples WHERE project_id = ? AND sample_type = 'trench_channel'`,c),m=e("SELECT COUNT(*) n, SUM(total_depth_m) m FROM mines_drill_holes WHERE project_id = ? AND extracted_by_agent_id = ?",c,"mines-geo-analyst"),n=f.filter(a=>a.fact_type.startsWith("target_")).map(a=>({name:a.fact_type.replace("target_","").replace(/_/g," "),text:a.value_text})),o=a=>e("SELECT price_usd, source FROM mines_market_snapshots WHERE lower(commodity)=lower(?) ORDER BY fetched_at DESC LIMIT 1",a);return{factBy:g,scen:i,intercepts:k,trench:l,drill:m,targets:n,priceCu:o("Cu"),priceAg:o("Ag"),base:i.find(a=>"base"===a.key)||i[0]||null}}(a,b),m={...i(b,l),...c||{}};m.value_range_label=i(b,l).value_range_label;let n=[function(a,b,c){let d=[a.deposit_type||"Porphyry copper (\xb1Ag)",`${a.asset_stage||"exploration"} stage`,`${a.state_province||"Sonora"}, ${a.country||"Mexico"}`].map(a=>`<span class="chip">${e(a)}</span>`).join("");return`
@@ -871,7 +885,7 @@ ${b}
871
885
  `).run((0,e.newId)("audit"),h,"tool_allowlist.add",`Allowlist entry added: ${a} / ${b} = ${c}`,"ok",JSON.stringify({tool_name:a,scope_key:b,scope_value:c,label:i,entry_id:g})),{id:g,tool_name:a,scope_key:b,scope_value:c,label:i,created_at:h}}function i(a){if(!a)throw Error("id is required");let b=(0,e.getDb)(),c=b.prepare("SELECT tool_name, scope_key, scope_value FROM tool_allowlists WHERE id = ?").get(a);if(!c)throw Error(`Allowlist entry not found: ${a}`);b.prepare("DELETE FROM tool_allowlists WHERE id = ?").run(a),b.prepare(`
872
886
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
873
887
  VALUES (?, ?, ?, ?, ?, ?)
874
- `).run((0,e.newId)("audit"),(0,e.nowIso)(),"tool_allowlist.remove",`Allowlist entry removed: ${c.tool_name} / ${c.scope_key} = ${c.scope_value}`,"ok",JSON.stringify({tool_name:c.tool_name,scope_key:c.scope_key,scope_value:c.scope_value,entry_id:a}))}function j(){let a=(0,e.getDb)().prepare("SELECT id, tool_name, scope_key, scope_value, label, created_at FROM tool_allowlists ORDER BY tool_name ASC, created_at ASC").all(),b={};for(let c of a)b[c.tool_name]||(b[c.tool_name]=[]),b[c.tool_name].push(c);return b}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},22434:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{le:()=>n,y$:()=>m});var e=c(34255),f=c(4638),g=c(40718),h=a([e,f,g]);function i(a){return a?.acting_on_behalf_of_user_id||a?.user_id||null}function j(a={}){if(a.owner_trusted||"owner"===a.actor_role||"admin"===a.actor_role)return!0;let b=i(a);if(!b||"system"===b)return!1;try{let c=(0,e.getDb)().prepare("SELECT role FROM org_memberships WHERE user_id=? AND org_id=COALESCE(?, 'personal-org')").get(b,a.org_id||"personal-org");return c?.role==="owner"||c?.role==="admin"}catch{return!1}}function k(){return{ok:!1,status:"error",error:"insufficient_role",message:"Composite tool authoring requires owner/admin authority in addition to tool approval."}}function l(a){return a?.code==="spec_invalid"?{ok:!1,status:"error",error:"spec_invalid",errors:a.errors||[a.message]}:null}async function m(a,b={}){if(!j(b))return k();let c=a?.spec;if(!c||"object"!=typeof c)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!c.slug||"string"!=typeof c.slug)return{ok:!1,error:"slug_required",message:"spec.slug required (string)"};if((0,f.uu)(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug};let d=(0,g.VM)();if(d.names.has(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug,message:"slug collides with an existing tool"};try{let a=(0,f.Hy)(c,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:d.names,toolRiskByName:d.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}async function n(a,b={}){if(!j(b))return k();let c="string"==typeof a?.slug?a.slug.trim():"",d=a?.spec;if(!c)return{ok:!1,status:"error",error:"slug_required",message:"slug required (string)"};if(!d||"object"!=typeof d)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!(0,f.uu)(c))return{ok:!1,status:"error",error:"not_found",slug:c};let e=(0,g.VM)(),h={...d,slug:c};try{let a=(0,f.Hy)(h,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:e.names,toolRiskByName:e.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}[e,f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},23167:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ef:()=>C});var e=c(31421),f=c(73024),g=c(76760),h=c(9381),i=c(60897),j=c(61423),k=c(93154),l=c(60105),m=c(8727),n=c(54858),o=c(37745),p=c(81833),q=c(44545),r=c(88101),s=c(58076),t=c(7945),u=c(15709),v=c(57223),w=c(69722),x=c(54488),y=c(15769),z=c(91648),A=c(81553),B=a([j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z]);[j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z]=B.then?(await B)():B;let D="1"===process.env.MADARX_SEED_DEFAULT_WORKFLOWS;function C(a){globalThis.__madarxSuppressStateEmits=!0;try{try{!function(a){if(a.prepare("SELECT id FROM heartbeat_tasks WHERE type = 'tool_rate_limit_gc' AND status IN ('queued','leased','running') LIMIT 1").get())return;let b=`hbtask-rl-gc-${Date.now().toString(36)}`,c=JSON.stringify({type:"tool_rate_limit_gc"}),d=new Date().toISOString(),e=new Date(Date.now()+864e5).toISOString();a.prepare(`
888
+ `).run((0,e.newId)("audit"),(0,e.nowIso)(),"tool_allowlist.remove",`Allowlist entry removed: ${c.tool_name} / ${c.scope_key} = ${c.scope_value}`,"ok",JSON.stringify({tool_name:c.tool_name,scope_key:c.scope_key,scope_value:c.scope_value,entry_id:a}))}function j(){let a=(0,e.getDb)().prepare("SELECT id, tool_name, scope_key, scope_value, label, created_at FROM tool_allowlists ORDER BY tool_name ASC, created_at ASC").all(),b={};for(let c of a)b[c.tool_name]||(b[c.tool_name]=[]),b[c.tool_name].push(c);return b}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},21526:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{lu:()=>n,tR:()=>o,xg:()=>m});var e=c(24516),f=c(58282),g=a([e,f]);[e,f]=g.then?(await g)():g;let p="https://platform.higgsfield.ai",q="/v1/text2image/soul",r=a=>[`/requests/${encodeURIComponent(a)}/status`,`/v1/job-sets/${encodeURIComponent(a)}`],s=new Set(["completed","failed","nsfw","canceled","cancelled"]);function h(a,b={}){try{let c=(0,e.getSecret)(a,{agent_id:b.agent_id,project_id:b.project_id});if(c)return c}catch{}return process.env[a]||null}let t=a=>new Promise(b=>setTimeout(b,a));async function i(a){try{let b=await a.json(),c=b?.detail;if("string"==typeof c)return c;if(Array.isArray(c))return c.map(a=>[Array.isArray(a?.loc)?a.loc.filter(a=>"body"!==a).join("."):"",a?.msg].filter(Boolean).join(": ")).filter(Boolean).join("; ")||`HTTP ${a.status}`;return b?.message||b?.error||`HTTP ${a.status}`}catch{return`HTTP ${a.status}`}}function j(a){return a?.id||a?.request_id||a?.jobset_id||a?.job_set_id||a?.jobSetId||a?.requestId||null}function k(a){let b=Array.isArray(a?.jobs)?a.jobs[0]:null,c=String(a?.status||b?.status||a?.state||"in_progress").toLowerCase(),d=b?.results||a?.results||null,e=d?.raw?.url||d?.min?.url||b?.url||a?.url||(Array.isArray(a?.images)?a.images[0]?.url:null)||a?.video?.url||null,f=d?.min?.url||null;return{status:c,url:e,thumbnail:f}}async function l({toolName:a,path:b,body:c,options:d,maxPolls:e}){let g=function(a={}){let b=h("HIGGSFIELD_CREDENTIALS",a);if(b&&b.includes(":"))return`Key ${b.trim()}`;let c=h("HIGGSFIELD_KEY_ID",a),d=h("HIGGSFIELD_KEY_SECRET",a);if(!c||!d)throw Error("Higgsfield is not connected. Add your HIGGSFIELD_KEY_ID and HIGGSFIELD_KEY_SECRET in the Higgsfield connection (marketplace → Connections).");return`Key ${c.trim()}:${d.trim()}`}(d),l=d.agent_id??null,m=(0,f.N)(a,l),n=await m(`${p}${b}`,{method:"POST",headers:{Authorization:g,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(c)});if(!n.ok){if(401===n.status)throw Error("Higgsfield rejected the credentials (401). Re-check the key in the Higgsfield connection.");let a=await i(n);throw Error(`Higgsfield API error (${n.status}): ${a}`)}let o=await n.json().catch(()=>({})),q=k(o);if(q.url)return{ok:!0,status:"completed",job_set_id:j(o),url:q.url,thumbnail:q.thumbnail};let u=j(o);if(!u)throw Error("Higgsfield did not return a job id; cannot poll for the result.");let v=Number.isFinite(e)?e:48;for(let a=0;a<v;a++){await t(2500);let a=null;for(let b of r(u)){let c=await m(`${p}${b}`,{method:"GET",headers:{Authorization:g,Accept:"application/json"}});if(c.ok){a=await c.json().catch(()=>null);break}if(404!==c.status){let a=await i(c);throw Error(`Higgsfield status error (${c.status}): ${a}`)}}if(!a)continue;let{status:b,url:c,thumbnail:d}=k(a);if(s.has(b)){if("completed"===b&&c)return{ok:!0,status:b,job_set_id:u,url:c,thumbnail:d};if("nsfw"===b)return{ok:!1,status:b,job_set_id:u,url:null,thumbnail:null,error:"Generation flagged NSFW by Higgsfield."};return{ok:!1,status:b,job_set_id:u,url:c||null,thumbnail:d||null,error:`Generation ${b}.`}}}return{ok:!1,status:"in_progress",job_set_id:u,url:null,thumbnail:null,timed_out:!0}}async function m(a={},b={}){let c=String(a.prompt||"").trim();if(!c)throw Error('"prompt" is required');let d={prompt:c,width_and_height:a.width_and_height||"1536x1536",quality:a.quality||"720p",batch_size:a.batch_size||1,...a.style_id?{style_id:String(a.style_id)}:{},...null!=a.style_strength?{style_strength:Number(a.style_strength)}:{},...null!=a.seed?{seed:Number(a.seed)}:{},...a.model?{model:String(a.model)}:{}},e=await l({toolName:"higgsfield_generate_image",path:q,body:{params:d},options:b,maxPolls:a.max_polls});if(!e.ok&&!e.timed_out)throw Error(e.error||`Higgsfield image generation ${e.status}.`);return e}async function n(a={},b={}){let c=String(a.image_url||"").trim();if(!c)throw Error('"image_url" is required (the source product image)');if(!/^https?:\/\//i.test(c))throw Error('"image_url" must be a public http(s) URL');let d=String(a.prompt||"").trim();if(!d)throw Error('"prompt" is required (the scene/style, e.g. "on a marble podium, studio lighting")');let e={prompt:d,width_and_height:a.width_and_height||"1536x1536",quality:a.quality||"720p",batch_size:a.batch_size||1,input_images:[{type:"image_url",image_url:c}],...a.style_id?{style_id:String(a.style_id)}:{},...null!=a.seed?{seed:Number(a.seed)}:{}},f=await l({toolName:"higgsfield_product_photoshoot",path:q,body:{params:e},options:b,maxPolls:a.max_polls});if(!f.ok&&!f.timed_out)throw Error(f.error||`Higgsfield product photoshoot ${f.status}.`);return f}async function o(a={},b={}){let c=String(a.image_url||"").trim();if(!c)throw Error('"image_url" is required (the source image to animate)');if(!/^https?:\/\//i.test(c))throw Error('"image_url" must be a public http(s) URL');let d={model:a.model?String(a.model):"dop-turbo",...a.prompt?{prompt:String(a.prompt)}:{},input_images:[{type:"image_url",image_url:c}],...a.motions?{motions:a.motions}:{},...null!=a.seed?{seed:Number(a.seed)}:{}},e=await l({toolName:"higgsfield_generate_video",path:"/v1/image2video/dop",body:{params:d},options:b,maxPolls:null!=a.max_polls?a.max_polls:90});if(!e.ok&&!e.timed_out)throw Error(e.error||`Higgsfield video generation ${e.status}.`);return e}d()}catch(a){d(a)}})},22434:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{le:()=>n,y$:()=>m});var e=c(34255),f=c(4638),g=c(40718),h=a([e,f,g]);function i(a){return a?.acting_on_behalf_of_user_id||a?.user_id||null}function j(a={}){if(a.owner_trusted||"owner"===a.actor_role||"admin"===a.actor_role)return!0;let b=i(a);if(!b||"system"===b)return!1;try{let c=(0,e.getDb)().prepare("SELECT role FROM org_memberships WHERE user_id=? AND org_id=COALESCE(?, 'personal-org')").get(b,a.org_id||"personal-org");return c?.role==="owner"||c?.role==="admin"}catch{return!1}}function k(){return{ok:!1,status:"error",error:"insufficient_role",message:"Composite tool authoring requires owner/admin authority in addition to tool approval."}}function l(a){return a?.code==="spec_invalid"?{ok:!1,status:"error",error:"spec_invalid",errors:a.errors||[a.message]}:null}async function m(a,b={}){if(!j(b))return k();let c=a?.spec;if(!c||"object"!=typeof c)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!c.slug||"string"!=typeof c.slug)return{ok:!1,error:"slug_required",message:"spec.slug required (string)"};if((0,f.uu)(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug};let d=(0,g.VM)();if(d.names.has(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug,message:"slug collides with an existing tool"};try{let a=(0,f.Hy)(c,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:d.names,toolRiskByName:d.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}async function n(a,b={}){if(!j(b))return k();let c="string"==typeof a?.slug?a.slug.trim():"",d=a?.spec;if(!c)return{ok:!1,status:"error",error:"slug_required",message:"slug required (string)"};if(!d||"object"!=typeof d)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!(0,f.uu)(c))return{ok:!1,status:"error",error:"not_found",slug:c};let e=(0,g.VM)(),h={...d,slug:c};try{let a=(0,f.Hy)(h,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:e.names,toolRiskByName:e.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}[e,f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},23167:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ef:()=>D});var e=c(31421),f=c(73024),g=c(76760),h=c(9381),i=c(60897),j=c(61423),k=c(93154),l=c(5295),m=c(60105),n=c(8727),o=c(54858),p=c(37745),q=c(81833),r=c(44545),s=c(88101),t=c(58076),u=c(7945),v=c(15709),w=c(57223),x=c(69722),y=c(54488),z=c(15769),A=c(91648),B=c(81553),C=a([j,k,m,n,o,q,r,s,t,u,v,w,x,y,z,A]);[j,k,m,n,o,q,r,s,t,u,v,w,x,y,z,A]=C.then?(await C)():C;let E="1"===process.env.MADARX_SEED_DEFAULT_WORKFLOWS;function D(a){globalThis.__madarxSuppressStateEmits=!0;try{try{!function(a){if(a.prepare("SELECT id FROM heartbeat_tasks WHERE type = 'tool_rate_limit_gc' AND status IN ('queued','leased','running') LIMIT 1").get())return;let b=`hbtask-rl-gc-${Date.now().toString(36)}`,c=JSON.stringify({type:"tool_rate_limit_gc"}),d=new Date().toISOString(),e=new Date(Date.now()+864e5).toISOString();a.prepare(`
875
889
  INSERT INTO heartbeat_tasks
876
890
  (id, agent_id, schedule_id, type, status, priority, payload, attempts, max_attempts, run_after, created_at, updated_at)
877
891
  VALUES (?, NULL, NULL, ?, 'queued', 0, ?, 0, 99, ?, ?, ?)
@@ -879,10 +893,14 @@ ${b}
879
893
  INSERT INTO heartbeat_tasks
880
894
  (id, agent_id, schedule_id, type, status, priority, payload, attempts, max_attempts, run_after, created_at, updated_at)
881
895
  VALUES (?, NULL, NULL, ?, 'queued', 0, ?, 0, 99, ?, ?, ?)
882
- `).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(`
896
+ `).run(b,"update_check",c,e,d,d)}(a)}catch{}try{!function(a){if(a.prepare("SELECT id FROM heartbeat_tasks WHERE type = 'task_sweep' AND status IN ('queued','leased','running') LIMIT 1").get())return;let b=`hbtask-sweep-${Date.now().toString(36)}`,c=JSON.stringify({type:"task_sweep"}),d=new Date().toISOString(),e=new Date(Date.now()+12e4).toISOString();a.prepare(`
897
+ INSERT INTO heartbeat_tasks
898
+ (id, agent_id, schedule_id, type, status, priority, payload, attempts, max_attempts, run_after, created_at, updated_at)
899
+ VALUES (?, NULL, NULL, ?, 'queued', 0, ?, 0, 99, ?, ?, ?)
900
+ `).run(b,"task_sweep",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(`
883
901
  INSERT INTO tool_allowlists (id, tool_name, scope_key, scope_value, label, created_at)
884
902
  VALUES (?, 'email_send', 'recipient_domain', ?, ?, ?)
885
- `).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)
903
+ `).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,o.y)({})}catch{}try{(0,i.fP)(a)}catch{}try{(0,k.yi)(a)}catch{}try{(0,s.r)(a),E&&(0,r.fx)()}catch{}try{(0,t._)(a),E&&((0,u.H6)(),(0,v.r1)()),(0,w.$F)()}catch{}try{(0,x.zc)(a)}catch{}if("1"===process.env.MADARX_SEED_DEFAULT_AGENTS)try{(0,y.g)()}catch{}if(E)try{(0,z.W)()}catch{}try{(0,A.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,m.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);for(let b of l.xU)try{if(a.prepare("SELECT agent_id FROM agent_template_installations WHERE template_slug = ? LIMIT 1").get(b))continue;(0,k.pz)(b,"personal",{seed:!0})}catch(a){console.warn(`[seeds] seedSpecialistAgentsIfMissing(${b}) failed:`,a?.message||a)}try{(0,m.OH)()}catch(a){console.warn("[seeds] migrateDefaultAgentSkills failed:",a?.message||a)}try{(0,q.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,m.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,B.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,n.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,m.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,p.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)
886
904
  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)
887
905
  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}
888
906
 
@@ -1022,30 +1040,30 @@ Review, wire into lib/tools/registry.js (see registry-snippet.txt), add tests, r
1022
1040
  UPDATE heartbeat_tasks
1023
1041
  SET status='queued', lease_owner=NULL, lease_expires_at=NULL, updated_at=?, error='Recovered stale lease'
1024
1042
  WHERE id=?
1025
- `).run((0,e.nowIso)(),a.id),r(a.id,{type:"stale_recovered",message:"Recovered stale lease"});return b.length&&h(),b.length}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},40718:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Cz:()=>aj,G7:()=>am,IC:()=>al,TRUST_MODE_CONFIG_KEY:()=>at,VM:()=>ae,executeRegistryTool:()=>ar,h7:()=>au,is:()=>as,kt:()=>av,n4:()=>ag,sd:()=>ai,yC:()=>_});var e=c(77598),f=c(34255),g=c(8437),h=c(67179),i=c(26531),j=c(24516),k=c(20086),l=c(2163),m=c(1511),n=c(4160),o=c(59400),p=c(69635),q=c(48446),r=c(2583),s=c(29827),t=c(72189),u=c(68732),v=c(49567),w=c(32668),x=c(81992),y=c(98278),z=c(29327),A=c(13099),B=c(89833),C=c(17607),D=c(85803),E=c(95019),F=c(80987),G=c(51542),H=c(18630),I=c(10088),J=c(22434),K=c(51218),L=c(38708),M=c(56050),N=c(23737),O=c(4638),P=c(45907),Q=c(91437),R=c(30918),S=c(29559),T=c(70952),U=c(59224),V=c(48409),W=c(97190),X=c(87466),Y=c(13331),Z=c(43466),$=a([f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z]);[f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z]=$.then?(await $)():$;let at="tool_approval_global_mode",au="approval_required",av=new Set(["approval_required","auto"]);function _(){let a=(0,h.getConfig)(at,au);return av.has(a)?a:au}let aw=[{name:"file_read",title:"Read file",description:"Read a bounded file inside approved local roots. Secret files are blocked.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},offset:{type:"number"},limit:{type:"number"}},required:["path"]}},{name:"directory_list",title:"List folder",description:"List directory entries inside approved local roots.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},limit:{type:"number"}}}},{name:"file_search",title:"Search files",description:"Search safe local files while skipping build output, dependencies, databases, and secret files.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{pattern:{type:"string"},path:{type:"string"},target:{type:"string"},file_glob:{type:"string"},limit:{type:"number"}},required:["pattern"]}},{name:"file_write",title:"Write file",description:"Write a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},content:{type:"string"},create_dirs:{type:"boolean"},approval_id:{type:"string"}},required:["path","content"]}},{name:"file_patch",title:"Edit file",description:"Patch a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},old_string:{type:"string"},new_string:{type:"string"},replace_all:{type:"boolean"},approval_id:{type:"string"}},required:["path","old_string","new_string"]}},{name:"terminal_run",title:"Run command",description:"Run a bounded local command with spawn command and args, never shell:true.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},timeout_ms:{type:"number"},approval_id:{type:"string"}},required:["command"]}},{name:"process_start",title:"Start process",description:"Start a madarX-owned local process and persist process state.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},approval_id:{type:"string"}},required:["command"]}},{name:"process_poll",title:"Check process",description:"Poll a madarX-owned local process row.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{process_id:{type:"string"}},required:["process_id"]}},{name:"process_kill",title:"Stop process",description:"Stop a madarX-owned process after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{process_id:{type:"string"},approval_id:{type:"string"}},required:["process_id"]}},{name:"web_search",title:"Search the web",description:"Search the public web with Firecrawl, SearXNG, Brave Search, or the no-key DuckDuckGo Lite fallback, returning ranked results with title, URL, snippet, and source metadata.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{query:{type:"string",description:"Search query."},count:{type:"number",description:"Number of results, 1-10. Default 5."},country:{type:"string",description:"Optional Brave country code, e.g. US."},search_lang:{type:"string",description:"Optional search language, e.g. en."}},required:["query"]}},{name:"web_fetch",title:"Fetch a webpage",description:"Fetch a public URL, block local/private network targets, strip HTML to readable text, and cap response size.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to fetch."},max_bytes:{type:"number",description:"Maximum response bytes, capped at 512000."}},required:["url"]}},{name:"web_extract",title:"Extract from webpage",description:"Extract readable content from a public URL with Firecrawl scrape when configured, otherwise fall back to direct web fetch.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to extract."},max_bytes:{type:"number",description:"Maximum response bytes for direct fetch fallback, capped at 512000."}},required:["url"]}},{name:"browser_harness_run",title:"Browser Harness",description:"Run a bounded browser-harness Python snippet against an activated Chrome CDP browser. This is local-code-execution risk: it starts disabled and requires owner approval for every main-agent or sub-agent execution.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{script:{type:"string",description:"Python code executed by browser-harness. Helpers are pre-imported; use new_tab(url), wait_for_load(), page_info(), capture_screenshot(), click_at_xy(), js(), or cdp()."},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 120000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["script"]}},{name:"skill_bridge_run",title:"Skill Bridge",description:"Run one allowlisted first-party gstack CLI skill (connect-chrome, browse, qa-only) to drive the real visible browser the operator can watch live. Crosses the Claude Code CLI trust boundary, so it is ALWAYS approval-gated for every run (even in trust-mode auto) and disabled by default. Pass the skill slug and a plain-language instruction; the bridge invokes only that skill, bounded by the .claude deny list.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:300,max:10},input_schema:{type:"object",properties:{skill:{type:"string",description:"Skill slug to invoke. One of: connect-chrome, browse, qa-only.",enum:["connect-chrome","browse","qa-only"]},instruction:{type:"string",description:'Plain-language instruction for the skill (e.g. "open Google News and search US Iran war, read the top 3 headlines"). Max 4000 chars.'},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 180000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["skill","instruction"]}},{name:"browser_open",title:"Browser Open (Playwright)",description:"Open a URL in a real headless Chromium and return the final URL, page title, and visible text. Use this (not browser_navigate) for JavaScript-rendered pages, SPAs, or anything that needs a real browser. The page persists across calls so you can browser_act / browser_extract on it next.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to open."},wait_for:{type:"string",description:"Optional CSS selector to wait for after load."},timeout_ms:{type:"number",description:"Navigation timeout in ms (default 30000, max 120000)."}},required:["url"]}},{name:"browser_act",title:"Browser Act (Playwright)",description:"Interact with the currently open page: click, fill, type, select, press a key, scroll, or wait. State-changing — gated for approval in approval-required trust mode. Locate elements with a CSS selector or a Playwright text= selector. Does NOT expand the agent's permissions; it only drives the page already loaded by browser_open.",category:"browser",risk_level:"high",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{action:{type:"string",enum:["click","fill","type","select","press","scroll","wait"],description:"Interaction to perform."},selector:{type:"string",description:"CSS selector or Playwright text= selector for the target element. Required for click/fill/type/select/press."},text:{type:"string",description:"Text to fill/type (for fill/type), or option value (for select)."},value:{type:"string",description:"Option value for select (alternative to text)."},key:{type:"string",description:"Key to press for the press action (default Enter)."},timeout_ms:{type:"number",description:"Action timeout in ms (default 30000, max 120000)."}},required:["action"]}},{name:"browser_extract",title:"Browser Extract (Playwright)",description:"Read content from the currently open page: visible text (default), raw HTML, or JSON-LD blocks. Optionally scoped to a CSS selector. Use after browser_open / browser_act to pull the rendered result.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{mode:{type:"string",enum:["text","html","json-ld"],default:"text",description:"What to extract."},selector:{type:"string",description:"Optional CSS selector to scope extraction."}}}},{name:"browser_screenshot",title:"Browser Screenshot (Playwright)",description:"Capture a PNG screenshot of the currently open page (or a selector / full page). Saved to disk under data/browser-screenshots; returns the file path.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{selector:{type:"string",description:"Optional CSS selector to screenshot just one element."},full_page:{type:"boolean",description:"Capture the full scrollable page (default false)."}}}},{name:"browser_navigate",title:"Browser Navigate",description:"Fetch a URL with Chrome 124 headers, cookie jar, redirect following, and configurable extraction (text, markdown, json-ld, metadata, raw). Falls back gracefully on JS-only pages.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"HTTP/HTTPS URL"},extract:{type:"string",enum:["text","markdown","json-ld","metadata","raw"],default:"text"},selector:{type:"string",description:"Optional CSS-like selector: tag, #id, or .class"},wait_for:{type:"string",description:"Optional substring expected in response; returns hint if missing"},max_chars:{type:"integer",default:12e3,maximum:5e4}},required:["url"]}},{name:"browser_extract_structured",title:"Browser Extract Structured",description:"Fetch a URL and extract both JSON-LD structured data and page metadata (title, og:*, meta tags) in one call.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string"}},required:["url"]}},{name:"supabase_list_projects",title:"List Supabase projects",description:"List Supabase projects available to the configured personal access token.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_ACCESS_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{}}},{name:"supabase_rest_select",title:"Read database rows",description:"Read rows from a Supabase table using the REST API with optional filters and limit.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{table:{type:"string",description:"Table name."},select:{type:"string",description:"PostgREST select expression. Default *."},filters:{type:"object",description:"Column filters. Values may be raw PostgREST operators or plain values for eq."},limit:{type:"number",description:"Maximum rows, 1-100. Default 25."}},required:["table"]}},{name:"supabase_rest_insert",title:"Add database rows",description:"Insert one or more rows into a Supabase table using the REST API. Returns the inserted rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name (schema-qualified allowed, e.g. auth.users)."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to insert."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_upsert",title:"Add or update rows",description:"Upsert one or more rows into a Supabase table. Merges on conflict. Returns affected rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to upsert."},on_conflict:{type:"string",description:"Comma-separated column(s) to resolve conflicts on."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_update",title:"Update database rows",description:"Update rows in a Supabase table matching the given filters. Filters are required — table-wide updates are blocked.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},patch:{type:"object",description:"Column values to set on matching rows."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","patch","filters"]}},{name:"supabase_rest_delete",title:"Delete database rows",description:"Delete rows from a Supabase table matching the given filters. Filters are required — bulk table truncation is blocked. Always requires approval regardless of trust mode.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","filters"]}},{name:"supabase_rpc",title:"Call database function",description:"Call a Postgres function via the Supabase REST RPC endpoint.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"function_name",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{function_name:{type:"string",description:"Postgres function name to call."},params:{type:"object",description:"Parameters passed as the request body."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["function_name"]}},{name:"supabase_sql",title:"Run SQL query",description:"Execute raw SQL via the madarx_exec_sql() Postgres function. Uses the service-role key and BYPASSES Row-Level Security. Always requires approval regardless of trust mode. Requires creating the madarx_exec_sql() function in your project.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{query:{type:"string",description:"SQL query to execute via madarx_exec_sql()."},params:{type:"object",description:"Optional named parameters for the query."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["query"]}},{name:"vercel_list_projects",title:"List Vercel projects",description:"List Vercel projects visible to the configured token.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},limit:{type:"number",description:"Maximum projects."}}}},{name:"vercel_list_deployments",title:"List Vercel deployments",description:"List Vercel deployments, optionally scoped by project.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},project_id:{type:"string",description:"Optional Vercel project id."},project_name:{type:"string",description:"Optional Vercel project name."},limit:{type:"number",description:"Maximum deployments."}}}},{name:"vercel_create_deployment",title:"Deploy to Vercel",description:"Stage a Vercel deployment request for owner approval. This does not deploy until approved.",category:"vercel",risk_level:"high",required_env:["VERCEL_TOKEN"],enabled_default:!1,approval_required:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{summary:{type:"string",description:"Deployment purpose and requested target."}}}},{name:"email_send",title:"Send email",description:"Send a transactional email via Resend. Approval is required.",category:"email",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"recipient_domain",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{from:{type:"string",description:"Sender address. Defaults to RESEND_FROM_EMAIL secret/env."},to:{type:"string",description:'Single recipient email address, e.g. "user@example.com".'},subject:{type:"string",description:"Email subject line."},text:{type:"string",description:"Plain-text email body. Either text or html is required."},html:{type:"string",description:"HTML email body. Either text or html is required."},reply_to:{type:"string",description:"Reply-to address."},recipient_domain:{type:"string",description:'Domain portion of the "to" address, e.g. "example.com". Must match the domain in "to" exactly — used by the allowlist gate.'},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["to","subject"]}},{name:"email_status_lookup",title:"Check email delivery",description:"Look up the delivery status of a previously-sent email.",category:"email",risk_level:"low",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{email_id:{type:"string",description:"Resend email ID returned by email_send."}},required:["email_id"]}},{name:"gh_repo_read",title:"Read a GitHub repo",description:"Read metadata for a GitHub repository (name, visibility, default branch, stars, forks).",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format, e.g. acme/api."}},required:["repo_full_name"]}},{name:"gh_repo_list",title:"List GitHub repos",description:"List GitHub repositories the token can access. Without `org`, lists across all affiliations (owned + collaborator + organization_member). Pass `org` to list a specific organization's repos you were granted access to.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{org:{type:"string",description:"List repos for this organization/owner (GET /orgs/{org}/repos). Use this to reach org repos you were granted access to."},affiliation:{type:"string",description:"Comma-separated: owner, collaborator, organization_member. Default lists all three. Ignored when `org` is set."},visibility:{type:"string",description:"Filter by visibility: all, public, private. Ignored when `org` is set."},type:{type:"string",description:"Without org: all|owner|member (mutually exclusive with affiliation). With org: all|public|private|forks|sources|member."},sort:{type:"string",description:"Sort by: created, updated, pushed, full_name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."},page:{type:"number",description:"Page number for pagination. Default 1."}}}},{name:"gh_issue_list",title:"List issues",description:"List issues in a GitHub repository with optional state and label filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"Issue state: open, closed, all. Default open."},labels:{type:"string",description:"Comma-separated label names to filter by."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_issue_create",title:"Create an issue",description:"Create an issue in an allowlisted GitHub repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"Issue title."},body:{type:"string",description:"Issue body in Markdown."},labels:{type:"array",items:{type:"string"},description:"Labels to apply."},assignees:{type:"array",items:{type:"string"},description:"GitHub usernames to assign."}},required:["repo_full_name","title"]}},{name:"gh_issue_comment",title:"Comment on an issue",description:"Post a comment on a GitHub issue in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},issue_number:{type:"number",description:"Issue number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","issue_number","body"]}},{name:"gh_pr_list",title:"List pull requests",description:"List pull requests in a GitHub repository with optional filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"PR state: open, closed, all. Default open."},head:{type:"string",description:"Filter by head branch (user:branch)."},base:{type:"string",description:"Filter by base branch name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_pr_create",title:"Open a pull request",description:"Open a pull request in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"PR title."},head:{type:"string",description:"Head branch (source)."},base:{type:"string",description:"Base branch (target)."},body:{type:"string",description:"PR description in Markdown."},draft:{type:"boolean",description:"Open as a draft PR."}},required:["repo_full_name","title","head","base"]}},{name:"gh_pr_comment",title:"Comment on a pull request",description:"Post a comment on a GitHub pull request in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","pr_number","body"]}},{name:"gh_pr_merge",title:"Merge a pull request",description:"Merge a pull request in an allowlisted GitHub repository. This action is irreversible once completed.",category:"github",risk_level:"irreversible_external",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},commit_title:{type:"string",description:"Custom commit title for squash merge."},commit_message:{type:"string",description:"Custom commit message for squash merge."},merge_method:{type:"string",description:"Merge method: merge, squash, rebase. Default squash."}},required:["repo_full_name","pr_number"]}},{name:"gh_actions_dispatch",title:"Run a GitHub workflow",description:"Trigger a workflow dispatch event in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},workflow_id:{type:"string",description:"Workflow filename or ID (e.g. deploy.yml)."},ref:{type:"string",description:"Branch or tag to run the workflow on."},inputs:{type:"object",description:"Optional workflow dispatch inputs."}},required:["repo_full_name","workflow_id","ref"]}},{name:"gh_release_create",title:"Publish a release",description:"Create a release in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},tag_name:{type:"string",description:"Git tag for the release."},target_commitish:{type:"string",description:"Commit SHA or branch to tag."},name:{type:"string",description:"Release title."},body:{type:"string",description:"Release notes in Markdown."},draft:{type:"boolean",description:"Create as a draft release."},prerelease:{type:"boolean",description:"Mark as a pre-release."}},required:["repo_full_name","tag_name"]}},{name:"flight_search",title:"Search flights",description:"Search flight offers and return curated price + itinerary data. Uses Amadeus when AMADEUS_CLIENT_ID and AMADEUS_CLIENT_SECRET are configured, otherwise falls back to a free, key-less Google Flights backend lookup.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{origin:{type:"string",description:'Origin airport IATA code, e.g. "JFK".'},destination:{type:"string",description:'Destination airport IATA code, e.g. "LHR".'},departure_date:{type:"string",description:"Departure date YYYY-MM-DD."},return_date:{type:"string",description:"Optional return date YYYY-MM-DD for round-trip search."},adults:{type:"number",description:"Adult passengers 1-9. Default 1."},children:{type:"number",description:"Child passengers 0-8."},travel_class:{type:"string",description:"ECONOMY | PREMIUM_ECONOMY | BUSINESS | FIRST."},currency:{type:"string",description:"3-letter ISO currency code. Default USD."},non_stop:{type:"boolean",description:"Only return non-stop itineraries."},max_results:{type:"number",description:"Max offers 1-25. Default 5."}},required:["origin","destination","departure_date"]}},{name:"flight_status",title:"Check flight status",description:"Look up live or scheduled flight status via Aviationstack. Returns departure, arrival, delay, and live position.",category:"travel",risk_level:"low",required_env:["AVIATIONSTACK_API_KEY"],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{flight_iata:{type:"string",description:'Flight IATA code, e.g. "BA283".'},flight_icao:{type:"string",description:"Flight ICAO code."},airline_iata:{type:"string",description:'Filter by airline IATA, e.g. "BA".'},dep_iata:{type:"string",description:"Departure airport IATA."},arr_iata:{type:"string",description:"Arrival airport IATA."},flight_date:{type:"string",description:"Flight date YYYY-MM-DD."},limit:{type:"number",description:"Max results 1-100. Default 5."}}}},{name:"hotel_search",title:"Search hotels",description:"List hotels at a TripAdvisor location via Xotelo. No API key required. Returns hotel_keys you can pass to hotel_rates.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{location_key:{type:"string",description:'TripAdvisor geo location key, e.g. "g60763" for New York City.'},offset:{type:"number",description:"Pagination offset. Default 0."},limit:{type:"number",description:"Results 1-30. Default 10."},sort:{type:"string",description:"popularity | price | rating."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},hotel_class:{type:"string",description:'Filter by star class, e.g. "4,5".'}},required:["location_key"]}},{name:"hotel_rates",title:"Check hotel rates",description:"Get real-time hotel rates from Booking.com, Expedia, Hotels.com, Agoda, etc. via Xotelo. No API key required.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{hotel_key:{type:"string",description:'TripAdvisor hotel key, e.g. "g60763-d224867". Obtain from hotel_search.'},chk_in:{type:"string",description:"Check-in date YYYY-MM-DD."},chk_out:{type:"string",description:"Check-out date YYYY-MM-DD (must be after chk_in)."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},rooms:{type:"number",description:"Rooms 1-9. Default 1."},adults:{type:"number",description:"Adults 1-9. Default 2."}},required:["hotel_key","chk_in","chk_out"]}},{name:"gmail_messages_list",title:"List Gmail messages",description:"Read message metadata from the operator Gmail inbox.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{max_results:{type:"number"},q:{type:"string"}}}},{name:"gmail_message_read",title:"Read a Gmail message",description:"Read one Gmail message for summarization or drafting.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{message_id:{type:"string"}},required:["message_id"]}},{name:"gmail_thread_read",title:"Read a Gmail thread",description:"Read a Gmail thread for context.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{thread_id:{type:"string"}},required:["thread_id"]}},{name:"calendar_events_list",title:"List calendar events",description:"Read upcoming Google Calendar events.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{calendar_id:{type:"string"},time_min:{type:"string"},time_max:{type:"string"},max_results:{type:"number"}}}},{name:"calendar_event_read",title:"Read a calendar event",description:"Read one Google Calendar event.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{event_id:{type:"string"},calendar_id:{type:"string"}},required:["event_id"]}},{name:"transcribe_audio",title:"Transcribe audio",description:"Transcribe a Disk audio file and save the transcript as a Disk artifact. Provider: openai (whisper, default), elevenlabs (Scribe), or local.",category:"local_machine",risk_level:"medium",approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string"},use_local:{type:"boolean"},provider:{type:"string",description:'Transcription provider: openai | elevenlabs | local. Defaults to TRANSCRIBE_DEFAULT_PROVIDER or "openai".'},language:{type:"string"}},required:["file_id"]}},{name:"voice_speak",title:"Speak text aloud",description:"Synthesize a short text reply to audio via OpenAI TTS (default) or ElevenLabs. Returns base64 audio; optionally saves to Disk.",category:"voice",risk_level:"low",approval_mode:"auto",required_env:[["OPENAI_API_KEY","ELEVENLABS_API_KEY"]],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{text:{type:"string",description:"Text to synthesize. Up to 4000 chars."},provider:{type:"string",description:"Provider: openai (default) or elevenlabs."},voice:{type:"string",description:"Provider-specific voice id. OpenAI: alloy|echo|fable|onyx|nova|shimmer. ElevenLabs: voice id."},model:{type:"string"},format:{type:"string",description:"mp3 (default) or wav."},save_to_disk:{type:"boolean"},project_id:{type:"string"}},required:["text"]}},{name:"printing_press_install",title:"Install Printing Press sub-package",description:"Install the printing-press sub-package required to generate scoped CLIs. Always approval-gated.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{},required:[]}},{name:"printing_press_generate",title:"Generate a scoped CLI",description:"Generate a new scoped CLI from a starter pack, GitHub repo, or local source.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Lowercase kebab-case CLI slug."},source:{type:"string",description:"starter-pack | github | local | spec"},source_url:{type:"string",description:"Required when source is not starter-pack."}},required:["slug"]}},{name:"printing_press_run",title:"Run an installed CLI",description:"Execute a previously-installed printing-press CLI with bounded args.",category:"cli_generator",risk_level:"high",approval_mode:"approval_required",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug to run."},args:{type:"array",items:{type:"string"},description:"Bounded arg list (no shell metacharacters)."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal `slug`."}},required:["slug"]}},{name:"create_workflow_definition",title:"Create workflow definition",description:'Create a new process workflow from a JSON spec. The spec is validated against lib/process/spec-validator.js. The new definition is published immediately at status="published" — cases can be started from it. Risk-gated by approval.',category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{spec:{type:"object",description:"Full workflow spec JSON. Must include schema_version, slug, name, version, stages[]. First stage must be intake_form. See ai-docs/process-engine.md and the validator at lib/process/spec-validator.js for the full schema."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["spec"]}},{name:"update_workflow_definition",title:"Update workflow definition",description:"Update an existing process workflow at a given slug. Spec is re-validated. version must be bumped if the stage list changed structurally. In-flight cases keep their old definition_id; new cases use the new version.",category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Slug of the existing workflow to update."},spec:{type:"object",description:"Full workflow spec JSON. slug is forced to match the path slug."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["slug","spec"]}},{name:"self_update",title:"Update madarX OS",description:"Update the madarX OS install to the latest published version (npm i -g madarx@latest). Irreversible-external: an agent calling this ALWAYS requires owner approval — it can never silently replace the running binary. A restart is required after a successful update.",category:"system",risk_level:"irreversible_external",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:86400,max:4},input_schema:{type:"object",properties:{approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:[]}},{name:"printing_press_query",title:"Query an installed CLI SQLite mirror",description:"Run a single read-only SELECT against a CLI local SQLite mirror, if it exposes one.",category:"cli_generator",risk_level:"low",approval_mode:"auto",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug whose SQLite mirror to query."},sql:{type:"string",description:"Single SELECT statement. Multi-statement SQL is refused."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal the slug."}},required:["slug","sql"]}},{name:"mines_project_create",title:"Create mine project",description:"Create a new mine project workspace and register it in the Mines module.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{name:{type:"string"},slug:{type:"string",description:'Lowercase kebab-case, e.g. "batamote"'},asset_stage:{type:"string",enum:["exploration","development","production","care_and_maintenance","unknown"]},commodity:{type:"string"},deposit_type:{type:"string"},approval_id:{type:"string"}},required:["name","slug"]}},{name:"mines_project_read",title:"Read mine project summary",description:"Read a mine project record including data completeness and document counts by category.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"}},required:["project_id"]}},{name:"mines_catalog_import",title:"Import portfolio catalog",description:"Load a master project catalog XLSX into Portfolio and PortfolioEntry records.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string",description:"Disk file ID of the XLSX catalog."},portfolio_name:{type:"string"},sheet_name:{type:"string",description:"Optional sheet override."},approval_id:{type:"string"}},required:["file_id","portfolio_name"]}},{name:"mines_data_import",title:"Bulk import mine data directory",description:"Walk a directory tree, auto-classify files by folder taxonomy, and enqueue each file for ingestion. Incremental and resumable.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},directory_path:{type:"string"},resume:{type:"boolean",description:"Skip files already past queued status."},approval_id:{type:"string"}},required:["project_id","directory_path"]}},{name:"mines_document_extract",title:"Extract and embed document",description:"Parse a source document (PDF/DOCX/PPTX), OCR if scanned, chunk text, and embed chunks. Spanish-first.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{source_document_id:{type:"string"},force_ocr:{type:"boolean"},approval_id:{type:"string"}},required:["source_document_id"]}},{name:"mines_spatial_index",title:"Index spatial assets",description:"Read GIS/CAD file metadata (kind, CRS, bounding box) without rendering geometry.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Index a single already-catalogued file."}},required:["project_id"]}},{name:"mines_extract_facts",title:"Extract structured facts from documents (LLM)",description:"Read a project document's indexed chunks and extract structured, provenance-cited geology/economics facts into mines_extracted_facts. Every fact is validated to cite a real chunk + verbatim quote; uncited facts are rejected. Never declares a mineral resource the source did not. Feeds mines_report_generate and mines_valuation_run.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Document to extract from. Defaults to the project's most-chunked document (its technical report)."},max_chunks:{type:"number",description:"Max chunks fed to the model. Default 48."},char_budget:{type:"number",description:"Max source characters per call. Default 32000."},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_assumption_validate",title:"Validate valuation assumptions",description:"Check completeness of data required for T1 or T2 valuation and return a gap list.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},target_tier:{type:"string",enum:["t1_in_situ","t2_dcf","auto"]}},required:["project_id"]}},{name:"mines_valuation_run",title:"Run tiered mine valuation",description:"Compute base/downside/upside valuation. Selects T1 (in-situ) or T2 (DCF) based on asset stage and data completeness. States tier and rationale.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{project_id:{type:"string"},commodity_prices_json:{type:"string",description:'JSON price override e.g. {"Au":2300,"Cu":4.2}. Defaults to latest mines_market_snapshots.'},in_situ_factor_override:{type:"number"},force_tier:{type:"string",enum:["t1_in_situ","t2_dcf"]},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_sensitivity_run",title:"Run valuation sensitivity analysis",description:"Compute sensitivity of valuation to key drivers (grade, price, recovery, in_situ_factor, discount_rate).",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{scenario_id:{type:"string"},drivers:{type:"array",items:{type:"string"}},steps:{type:"number",description:"Steps per driver. Default 5."},approval_id:{type:"string"}},required:["scenario_id"]}},{name:"mines_market_snapshot",title:"Fetch commodity market data",description:"Retrieve current commodity prices from an approved market data provider.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:["MINES_MARKET_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"market_provider_host",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{commodities:{type:"array",items:{type:"string"}},market_provider_host:{type:"string",description:'e.g. "metals-api.com". Must be in allowlist.'},approval_id:{type:"string"}},required:["market_provider_host"]}},{name:"mines_report_generate",title:"Generate mine project report",description:"Generate a cited, structured report artifact. External email send always requires separate irreversible_external approval.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},report_kind:{type:"string",enum:["interpretation_memo","due_diligence_memo","data_quality_report","investor_presentation","pfs_readiness_report","valuation_report","due_diligence_questions","project_package","portfolio_screen"]},scenario_id:{type:"string",description:"Required for valuation_report."},space_id:{type:"string",description:"Optional dashboard space to publish into. Defaults to the project’s configured default space; the artifact is pinned there so it appears as a window on the dashboard board."},language:{type:"string",enum:["en","es"],description:'Default "en".'},narrative:{type:"object",description:"LLM-authored prose slots (all optional, each falls back to data-driven copy). For investor_presentation: hero_headline, hero_subhead (strings); opportunity (array of paragraph strings); findings_lead, upside_lead, risk_lead, the_ask (strings). For pfs_readiness_report: verdict, gap_intro, work_program, recommendation (strings). Numbers/figures are never taken from here — they always come from cited DB rows.",properties:{hero_headline:{type:"string"},hero_subhead:{type:"string"},opportunity:{type:"array",items:{type:"string"}},findings_lead:{type:"string"},upside_lead:{type:"string"},risk_lead:{type:"string"},the_ask:{type:"string"},verdict:{type:"string"},gap_intro:{type:"string"},work_program:{type:"string"},recommendation:{type:"string"}}},send_email:{type:"boolean"},recipient_email:{type:"string"},approval_id:{type:"string"}},required:["project_id","report_kind"]}},{name:"create_skill",title:"Author skill",description:"Author a declarative skill (SKILL.md + marketplace row) any agent can invoke. Instructions only — no code executes. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:"{ slug, title, description?, markdown, invocation?, trigger_examples?[], category? }"},approval_id:{type:"string"}},required:["spec"]}},{name:"update_skill",title:"Update skill",description:"Update an existing authored skill by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_composite_tool",title:"Author composite tool",description:"Author a composite tool: a declarative recipe chaining EXISTING primitive tools + LLM steps. Inherits the MAX risk of its steps; every gate re-fires per sub-step. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:'{ slug, title, description?, input_schema?, steps:[{kind:"tool_call"|"llm_synthesis"|"artifact_write", id, ...}] }'},approval_id:{type:"string"}},required:["spec"]}},{name:"update_composite_tool",title:"Update composite tool",description:"Update an existing composite tool by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_connector",title:"Author API connector",description:"Author a declarative REST API connector (Option D). Each endpoint becomes a callable <slug>.<endpoint> tool backed by the generic http_api_call executor. Manifest is inert data: https-only, secret-by-reference auth, host allowlist, per-endpoint risk ceiling. Owner/admin authority required. The owner supplies the API key once.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{manifest:{type:"object",description:"{ slug, base_url(https), allowed_hosts[], auth:{type,secret_ref|username_ref/password_ref,header?,prefix?,query_param?}, default_headers?, endpoints:{ name:{method,path,risk?,input_schema?} } }"},approval_id:{type:"string"}},required:["manifest"]}},{name:"update_connector",title:"Update API connector",description:"Update an existing API connector by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},manifest:{type:"object"},approval_id:{type:"string"}},required:["slug","manifest"]}},{name:"propose_tool",title:"Propose new tool (code-gen)",description:"Option B escape hatch for non-REST integrations: generate an adapter scaffold + registry snippet + tests into a staging dir. The proposal is INERT — it is never callable until a human reviews, merges, and restarts. Writes files only; executes nothing.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string",description:"snake_case tool name"},summary:{type:"string"},risk:{type:"string",enum:["low","medium","high","irreversible_external"]},approval_id:{type:"string"}},required:["slug"]}}],ax={web_search:o.tE,web_fetch:o.dV,web_extract:o.IY,email_send:p.x,email_status_lookup:p.f,supabase_list_projects:q.NO,supabase_rest_select:q.TP,supabase_rest_insert:q.c3,supabase_rest_upsert:q.mD,supabase_rest_update:q.sX,supabase_rest_delete:q.oc,supabase_rpc:q.wm,supabase_sql:q.l8,vercel_list_projects:r.Q$,vercel_list_deployments:r.I6,vercel_create_deployment:r.vV,gh_repo_read:s.Sj,gh_repo_list:s.AU,gh_issue_list:s.jj,gh_issue_create:s.vj,gh_issue_comment:s.iP,gh_pr_list:s.gn,gh_pr_create:s.Ud,gh_pr_comment:s.J,gh_pr_merge:s.wt,gh_actions_dispatch:s.zI,gh_release_create:s.Bb,file_read:t.dd,directory_list:t.sv,file_search:t.X,file_write:t.sq,file_patch:t.vO,terminal_run:u.y,process_start:v.gy,process_poll:v.p3,process_kill:v.MU,flight_search:w.R5,flight_status:w.zP,hotel_search:w.FE,hotel_rates:w.Y$,gmail_messages_list:x.r_,gmail_message_read:x.cS,gmail_thread_read:x.vg,calendar_events_list:y.u,calendar_event_read:y.r,transcribe_audio:z.b,browser_harness_run:A.K,skill_bridge_run:B.eE,browser_open:D.D6,browser_act:D.Hz,browser_extract:D.aU,browser_screenshot:D.Jz,browser_navigate:C.M,browser_extract_structured:C.B,voice_speak:E.o,printing_press_install:F.gE,printing_press_generate:F.ID,printing_press_run:F.Cw,printing_press_query:F.VC,create_workflow_definition:G.h,update_workflow_definition:G.m,self_update:H.m,create_skill:I.S,update_skill:I.f,create_composite_tool:J.y$,update_composite_tool:J.le,create_connector:K.U$,update_connector:K.zc,propose_tool:L.B,http_api_call:M.p,composite_tool_run:N.n,mines_project_create:Q.m,mines_project_read:Q.I,mines_catalog_import:R.b,mines_data_import:S.I,mines_document_extract:T.f,mines_extract_facts:Z.$,mines_spatial_index:U.d,mines_assumption_validate:V.w,mines_valuation_run:W.R,mines_sensitivity_run:W.h,mines_market_snapshot:X.V,mines_report_generate:Y.Q},ay={file_write:t.Z6,file_patch:t.mr,terminal_run:u.x,process_start:v.H7,process_kill:v.L7,browser_harness_run:A.r,skill_bridge_run:B.zE},az=new Set;function aa(a){try{if((0,j.getSecret)(a))return!0}catch{}return!!process.env[a]&&(az.has(a)||(az.add(a),console.warn(`[secrets] ${a} is being read from process.env as a fallback. Migrate it to the vault with: node scripts/migrate-env-to-secrets.mjs`)),!0)}function ab(a=[]){return a.filter(a=>Array.isArray(a)?!a.some(a=>aa(a)):!aa(a)).map(a=>Array.isArray(a)?a.join(" or "):a)}let aA=[{marker:"tool.repair.flight_search_enable_v1",tool_name:"flight_search",summary:"One-shot: enable flight_search on installs where the Amadeus→Google fallback shipped after the row was created."}];function ac(){let a=(0,f.getDb)(),b=(0,f.nowIso)();for(let c of aw){let d=a.prepare("SELECT name, enabled, required_env FROM tool_installations WHERE name=?").get(c.name),e={name:c.name,title:c.title,description:c.description,category:c.category,enabled:+!!c.enabled_default,risk_level:c.risk_level,required_env:JSON.stringify(c.required_env||[])};if(!d){a.prepare(`
1043
+ `).run((0,e.nowIso)(),a.id),r(a.id,{type:"stale_recovered",message:"Recovered stale lease"});return b.length&&h(),b.length}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},40718:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Cz:()=>ak,G7:()=>an,IC:()=>am,TRUST_MODE_CONFIG_KEY:()=>au,VM:()=>af,executeRegistryTool:()=>as,h7:()=>av,is:()=>at,kt:()=>aw,n4:()=>ah,sd:()=>aj,yC:()=>aa});var e=c(77598),f=c(34255),g=c(8437),h=c(67179),i=c(26531),j=c(24516),k=c(20086),l=c(2163),m=c(1511),n=c(4160),o=c(59400),p=c(69635),q=c(21526),r=c(48446),s=c(2583),t=c(29827),u=c(72189),v=c(68732),w=c(49567),x=c(32668),y=c(81992),z=c(98278),A=c(29327),B=c(13099),C=c(89833),D=c(17607),E=c(85803),F=c(95019),G=c(80987),H=c(51542),I=c(18630),J=c(10088),K=c(22434),L=c(51218),M=c(38708),N=c(56050),O=c(23737),P=c(4638),Q=c(45907),R=c(91437),S=c(30918),T=c(29559),U=c(70952),V=c(59224),W=c(48409),X=c(97190),Y=c(87466),Z=c(13331),$=c(43466),_=a([f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,C,D,E,F,G,H,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Z,$]);[f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,C,D,E,F,G,H,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Z,$]=_.then?(await _)():_;let au="tool_approval_global_mode",av="approval_required",aw=new Set(["approval_required","auto"]);function aa(){let a=(0,h.getConfig)(au,av);return aw.has(a)?a:av}let ax=[{name:"file_read",title:"Read file",description:"Read a bounded file inside approved local roots. Secret files are blocked.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},offset:{type:"number"},limit:{type:"number"}},required:["path"]}},{name:"directory_list",title:"List folder",description:"List directory entries inside approved local roots.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},limit:{type:"number"}}}},{name:"file_search",title:"Search files",description:"Search safe local files while skipping build output, dependencies, databases, and secret files.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{pattern:{type:"string"},path:{type:"string"},target:{type:"string"},file_glob:{type:"string"},limit:{type:"number"}},required:["pattern"]}},{name:"file_write",title:"Write file",description:"Write a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},content:{type:"string"},create_dirs:{type:"boolean"},approval_id:{type:"string"}},required:["path","content"]}},{name:"file_patch",title:"Edit file",description:"Patch a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},old_string:{type:"string"},new_string:{type:"string"},replace_all:{type:"boolean"},approval_id:{type:"string"}},required:["path","old_string","new_string"]}},{name:"terminal_run",title:"Run command",description:"Run a bounded local command with spawn command and args, never shell:true.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},timeout_ms:{type:"number"},approval_id:{type:"string"}},required:["command"]}},{name:"process_start",title:"Start process",description:"Start a madarX-owned local process and persist process state.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},approval_id:{type:"string"}},required:["command"]}},{name:"process_poll",title:"Check process",description:"Poll a madarX-owned local process row.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{process_id:{type:"string"}},required:["process_id"]}},{name:"process_kill",title:"Stop process",description:"Stop a madarX-owned process after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{process_id:{type:"string"},approval_id:{type:"string"}},required:["process_id"]}},{name:"web_search",title:"Search the web",description:"Search the public web with Firecrawl, SearXNG, Brave Search, or the no-key DuckDuckGo Lite fallback, returning ranked results with title, URL, snippet, and source metadata.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{query:{type:"string",description:"Search query."},count:{type:"number",description:"Number of results, 1-10. Default 5."},country:{type:"string",description:"Optional Brave country code, e.g. US."},search_lang:{type:"string",description:"Optional search language, e.g. en."}},required:["query"]}},{name:"web_fetch",title:"Fetch a webpage",description:"Fetch a public URL, block local/private network targets, strip HTML to readable text, and cap response size.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to fetch."},max_bytes:{type:"number",description:"Maximum response bytes, capped at 512000."}},required:["url"]}},{name:"web_extract",title:"Extract from webpage",description:"Extract readable content from a public URL with Firecrawl scrape when configured, otherwise fall back to direct web fetch.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to extract."},max_bytes:{type:"number",description:"Maximum response bytes for direct fetch fallback, capped at 512000."}},required:["url"]}},{name:"browser_harness_run",title:"Browser Harness",description:"Run a bounded browser-harness Python snippet against an activated Chrome CDP browser. This is local-code-execution risk: it starts disabled and requires owner approval for every main-agent or sub-agent execution.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{script:{type:"string",description:"Python code executed by browser-harness. Helpers are pre-imported; use new_tab(url), wait_for_load(), page_info(), capture_screenshot(), click_at_xy(), js(), or cdp()."},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 120000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["script"]}},{name:"skill_bridge_run",title:"Skill Bridge",description:"Run one allowlisted first-party gstack CLI skill (connect-chrome, browse, qa-only) to drive the real visible browser the operator can watch live. Crosses the Claude Code CLI trust boundary, so it is ALWAYS approval-gated for every run (even in trust-mode auto) and disabled by default. Pass the skill slug and a plain-language instruction; the bridge invokes only that skill, bounded by the .claude deny list.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:300,max:10},input_schema:{type:"object",properties:{skill:{type:"string",description:"Skill slug to invoke. One of: connect-chrome, browse, qa-only.",enum:["connect-chrome","browse","qa-only"]},instruction:{type:"string",description:'Plain-language instruction for the skill (e.g. "open Google News and search US Iran war, read the top 3 headlines"). Max 4000 chars.'},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 180000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["skill","instruction"]}},{name:"browser_open",title:"Browser Open (Playwright)",description:"Open a URL in a real headless Chromium and return the final URL, page title, and visible text. Use this (not browser_navigate) for JavaScript-rendered pages, SPAs, or anything that needs a real browser. The page persists across calls so you can browser_act / browser_extract on it next.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to open."},wait_for:{type:"string",description:"Optional CSS selector to wait for after load."},timeout_ms:{type:"number",description:"Navigation timeout in ms (default 30000, max 120000)."}},required:["url"]}},{name:"browser_act",title:"Browser Act (Playwright)",description:"Interact with the currently open page: click, fill, type, select, press a key, scroll, or wait. State-changing — gated for approval in approval-required trust mode. Locate elements with a CSS selector or a Playwright text= selector. Does NOT expand the agent's permissions; it only drives the page already loaded by browser_open.",category:"browser",risk_level:"high",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{action:{type:"string",enum:["click","fill","type","select","press","scroll","wait"],description:"Interaction to perform."},selector:{type:"string",description:"CSS selector or Playwright text= selector for the target element. Required for click/fill/type/select/press."},text:{type:"string",description:"Text to fill/type (for fill/type), or option value (for select)."},value:{type:"string",description:"Option value for select (alternative to text)."},key:{type:"string",description:"Key to press for the press action (default Enter)."},timeout_ms:{type:"number",description:"Action timeout in ms (default 30000, max 120000)."}},required:["action"]}},{name:"browser_extract",title:"Browser Extract (Playwright)",description:"Read content from the currently open page: visible text (default), raw HTML, or JSON-LD blocks. Optionally scoped to a CSS selector. Use after browser_open / browser_act to pull the rendered result.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{mode:{type:"string",enum:["text","html","json-ld"],default:"text",description:"What to extract."},selector:{type:"string",description:"Optional CSS selector to scope extraction."}}}},{name:"browser_screenshot",title:"Browser Screenshot (Playwright)",description:"Capture a PNG screenshot of the currently open page (or a selector / full page). Saved to disk under data/browser-screenshots; returns the file path.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{selector:{type:"string",description:"Optional CSS selector to screenshot just one element."},full_page:{type:"boolean",description:"Capture the full scrollable page (default false)."}}}},{name:"browser_navigate",title:"Browser Navigate",description:"Fetch a URL with Chrome 124 headers, cookie jar, redirect following, and configurable extraction (text, markdown, json-ld, metadata, raw). Falls back gracefully on JS-only pages.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"HTTP/HTTPS URL"},extract:{type:"string",enum:["text","markdown","json-ld","metadata","raw"],default:"text"},selector:{type:"string",description:"Optional CSS-like selector: tag, #id, or .class"},wait_for:{type:"string",description:"Optional substring expected in response; returns hint if missing"},max_chars:{type:"integer",default:12e3,maximum:5e4}},required:["url"]}},{name:"browser_extract_structured",title:"Browser Extract Structured",description:"Fetch a URL and extract both JSON-LD structured data and page metadata (title, og:*, meta tags) in one call.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string"}},required:["url"]}},{name:"supabase_list_projects",title:"List Supabase projects",description:"List Supabase projects available to the configured personal access token.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_ACCESS_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{}}},{name:"supabase_rest_select",title:"Read database rows",description:"Read rows from a Supabase table using the REST API with optional filters and limit.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{table:{type:"string",description:"Table name."},select:{type:"string",description:"PostgREST select expression. Default *."},filters:{type:"object",description:"Column filters. Values may be raw PostgREST operators or plain values for eq."},limit:{type:"number",description:"Maximum rows, 1-100. Default 25."}},required:["table"]}},{name:"supabase_rest_insert",title:"Add database rows",description:"Insert one or more rows into a Supabase table using the REST API. Returns the inserted rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name (schema-qualified allowed, e.g. auth.users)."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to insert."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_upsert",title:"Add or update rows",description:"Upsert one or more rows into a Supabase table. Merges on conflict. Returns affected rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to upsert."},on_conflict:{type:"string",description:"Comma-separated column(s) to resolve conflicts on."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_update",title:"Update database rows",description:"Update rows in a Supabase table matching the given filters. Filters are required — table-wide updates are blocked.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},patch:{type:"object",description:"Column values to set on matching rows."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","patch","filters"]}},{name:"supabase_rest_delete",title:"Delete database rows",description:"Delete rows from a Supabase table matching the given filters. Filters are required — bulk table truncation is blocked. Always requires approval regardless of trust mode.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","filters"]}},{name:"supabase_rpc",title:"Call database function",description:"Call a Postgres function via the Supabase REST RPC endpoint.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"function_name",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{function_name:{type:"string",description:"Postgres function name to call."},params:{type:"object",description:"Parameters passed as the request body."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["function_name"]}},{name:"supabase_sql",title:"Run SQL query",description:"Execute raw SQL via the madarx_exec_sql() Postgres function. Uses the service-role key and BYPASSES Row-Level Security. Always requires approval regardless of trust mode. Requires creating the madarx_exec_sql() function in your project.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{query:{type:"string",description:"SQL query to execute via madarx_exec_sql()."},params:{type:"object",description:"Optional named parameters for the query."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["query"]}},{name:"vercel_list_projects",title:"List Vercel projects",description:"List Vercel projects visible to the configured token.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},limit:{type:"number",description:"Maximum projects."}}}},{name:"vercel_list_deployments",title:"List Vercel deployments",description:"List Vercel deployments, optionally scoped by project.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},project_id:{type:"string",description:"Optional Vercel project id."},project_name:{type:"string",description:"Optional Vercel project name."},limit:{type:"number",description:"Maximum deployments."}}}},{name:"vercel_create_deployment",title:"Deploy to Vercel",description:"Stage a Vercel deployment request for owner approval. This does not deploy until approved.",category:"vercel",risk_level:"high",required_env:["VERCEL_TOKEN"],enabled_default:!1,approval_required:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{summary:{type:"string",description:"Deployment purpose and requested target."}}}},{name:"email_send",title:"Send email",description:"Send a transactional email via Resend. Approval is required.",category:"email",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"recipient_domain",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{from:{type:"string",description:"Sender address. Defaults to RESEND_FROM_EMAIL secret/env."},to:{type:"string",description:'Single recipient email address, e.g. "user@example.com".'},subject:{type:"string",description:"Email subject line."},text:{type:"string",description:"Plain-text email body. Either text or html is required."},html:{type:"string",description:"HTML email body. Either text or html is required."},reply_to:{type:"string",description:"Reply-to address."},recipient_domain:{type:"string",description:'Domain portion of the "to" address, e.g. "example.com". Must match the domain in "to" exactly — used by the allowlist gate.'},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["to","subject"]}},{name:"email_status_lookup",title:"Check email delivery",description:"Look up the delivery status of a previously-sent email.",category:"email",risk_level:"low",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{email_id:{type:"string",description:"Resend email ID returned by email_send."}},required:["email_id"]}},{name:"gh_repo_read",title:"Read a GitHub repo",description:"Read metadata for a GitHub repository (name, visibility, default branch, stars, forks).",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format, e.g. acme/api."}},required:["repo_full_name"]}},{name:"gh_repo_list",title:"List GitHub repos",description:"List GitHub repositories the token can access. Without `org`, lists across all affiliations (owned + collaborator + organization_member). Pass `org` to list a specific organization's repos you were granted access to.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{org:{type:"string",description:"List repos for this organization/owner (GET /orgs/{org}/repos). Use this to reach org repos you were granted access to."},affiliation:{type:"string",description:"Comma-separated: owner, collaborator, organization_member. Default lists all three. Ignored when `org` is set."},visibility:{type:"string",description:"Filter by visibility: all, public, private. Ignored when `org` is set."},type:{type:"string",description:"Without org: all|owner|member (mutually exclusive with affiliation). With org: all|public|private|forks|sources|member."},sort:{type:"string",description:"Sort by: created, updated, pushed, full_name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."},page:{type:"number",description:"Page number for pagination. Default 1."}}}},{name:"gh_issue_list",title:"List issues",description:"List issues in a GitHub repository with optional state and label filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"Issue state: open, closed, all. Default open."},labels:{type:"string",description:"Comma-separated label names to filter by."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_issue_create",title:"Create an issue",description:"Create an issue in an allowlisted GitHub repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"Issue title."},body:{type:"string",description:"Issue body in Markdown."},labels:{type:"array",items:{type:"string"},description:"Labels to apply."},assignees:{type:"array",items:{type:"string"},description:"GitHub usernames to assign."}},required:["repo_full_name","title"]}},{name:"gh_issue_comment",title:"Comment on an issue",description:"Post a comment on a GitHub issue in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},issue_number:{type:"number",description:"Issue number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","issue_number","body"]}},{name:"gh_pr_list",title:"List pull requests",description:"List pull requests in a GitHub repository with optional filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"PR state: open, closed, all. Default open."},head:{type:"string",description:"Filter by head branch (user:branch)."},base:{type:"string",description:"Filter by base branch name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_pr_create",title:"Open a pull request",description:"Open a pull request in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"PR title."},head:{type:"string",description:"Head branch (source)."},base:{type:"string",description:"Base branch (target)."},body:{type:"string",description:"PR description in Markdown."},draft:{type:"boolean",description:"Open as a draft PR."}},required:["repo_full_name","title","head","base"]}},{name:"gh_pr_comment",title:"Comment on a pull request",description:"Post a comment on a GitHub pull request in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","pr_number","body"]}},{name:"gh_pr_merge",title:"Merge a pull request",description:"Merge a pull request in an allowlisted GitHub repository. This action is irreversible once completed.",category:"github",risk_level:"irreversible_external",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},commit_title:{type:"string",description:"Custom commit title for squash merge."},commit_message:{type:"string",description:"Custom commit message for squash merge."},merge_method:{type:"string",description:"Merge method: merge, squash, rebase. Default squash."}},required:["repo_full_name","pr_number"]}},{name:"gh_actions_dispatch",title:"Run a GitHub workflow",description:"Trigger a workflow dispatch event in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},workflow_id:{type:"string",description:"Workflow filename or ID (e.g. deploy.yml)."},ref:{type:"string",description:"Branch or tag to run the workflow on."},inputs:{type:"object",description:"Optional workflow dispatch inputs."}},required:["repo_full_name","workflow_id","ref"]}},{name:"gh_release_create",title:"Publish a release",description:"Create a release in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},tag_name:{type:"string",description:"Git tag for the release."},target_commitish:{type:"string",description:"Commit SHA or branch to tag."},name:{type:"string",description:"Release title."},body:{type:"string",description:"Release notes in Markdown."},draft:{type:"boolean",description:"Create as a draft release."},prerelease:{type:"boolean",description:"Mark as a pre-release."}},required:["repo_full_name","tag_name"]}},{name:"flight_search",title:"Search flights",description:"Search flight offers and return curated price + itinerary data. Uses Amadeus when AMADEUS_CLIENT_ID and AMADEUS_CLIENT_SECRET are configured, otherwise falls back to a free, key-less Google Flights backend lookup.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{origin:{type:"string",description:'Origin airport IATA code, e.g. "JFK".'},destination:{type:"string",description:'Destination airport IATA code, e.g. "LHR".'},departure_date:{type:"string",description:"Departure date YYYY-MM-DD."},return_date:{type:"string",description:"Optional return date YYYY-MM-DD for round-trip search."},adults:{type:"number",description:"Adult passengers 1-9. Default 1."},children:{type:"number",description:"Child passengers 0-8."},travel_class:{type:"string",description:"ECONOMY | PREMIUM_ECONOMY | BUSINESS | FIRST."},currency:{type:"string",description:"3-letter ISO currency code. Default USD."},non_stop:{type:"boolean",description:"Only return non-stop itineraries."},max_results:{type:"number",description:"Max offers 1-25. Default 5."}},required:["origin","destination","departure_date"]}},{name:"flight_status",title:"Check flight status",description:"Look up live or scheduled flight status via Aviationstack. Returns departure, arrival, delay, and live position.",category:"travel",risk_level:"low",required_env:["AVIATIONSTACK_API_KEY"],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{flight_iata:{type:"string",description:'Flight IATA code, e.g. "BA283".'},flight_icao:{type:"string",description:"Flight ICAO code."},airline_iata:{type:"string",description:'Filter by airline IATA, e.g. "BA".'},dep_iata:{type:"string",description:"Departure airport IATA."},arr_iata:{type:"string",description:"Arrival airport IATA."},flight_date:{type:"string",description:"Flight date YYYY-MM-DD."},limit:{type:"number",description:"Max results 1-100. Default 5."}}}},{name:"hotel_search",title:"Search hotels",description:"List hotels at a TripAdvisor location via Xotelo. No API key required. Returns hotel_keys you can pass to hotel_rates.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{location_key:{type:"string",description:'TripAdvisor geo location key, e.g. "g60763" for New York City.'},offset:{type:"number",description:"Pagination offset. Default 0."},limit:{type:"number",description:"Results 1-30. Default 10."},sort:{type:"string",description:"popularity | price | rating."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},hotel_class:{type:"string",description:'Filter by star class, e.g. "4,5".'}},required:["location_key"]}},{name:"hotel_rates",title:"Check hotel rates",description:"Get real-time hotel rates from Booking.com, Expedia, Hotels.com, Agoda, etc. via Xotelo. No API key required.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{hotel_key:{type:"string",description:'TripAdvisor hotel key, e.g. "g60763-d224867". Obtain from hotel_search.'},chk_in:{type:"string",description:"Check-in date YYYY-MM-DD."},chk_out:{type:"string",description:"Check-out date YYYY-MM-DD (must be after chk_in)."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},rooms:{type:"number",description:"Rooms 1-9. Default 1."},adults:{type:"number",description:"Adults 1-9. Default 2."}},required:["hotel_key","chk_in","chk_out"]}},{name:"gmail_messages_list",title:"List Gmail messages",description:"Read message metadata from the operator Gmail inbox.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{max_results:{type:"number"},q:{type:"string"}}}},{name:"gmail_message_read",title:"Read a Gmail message",description:"Read one Gmail message for summarization or drafting.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{message_id:{type:"string"}},required:["message_id"]}},{name:"gmail_thread_read",title:"Read a Gmail thread",description:"Read a Gmail thread for context.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{thread_id:{type:"string"}},required:["thread_id"]}},{name:"calendar_events_list",title:"List calendar events",description:"Read upcoming Google Calendar events.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{calendar_id:{type:"string"},time_min:{type:"string"},time_max:{type:"string"},max_results:{type:"number"}}}},{name:"calendar_event_read",title:"Read a calendar event",description:"Read one Google Calendar event.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{event_id:{type:"string"},calendar_id:{type:"string"}},required:["event_id"]}},{name:"transcribe_audio",title:"Transcribe audio",description:"Transcribe a Disk audio file and save the transcript as a Disk artifact. Provider: openai (whisper, default), elevenlabs (Scribe), or local.",category:"local_machine",risk_level:"medium",approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string"},use_local:{type:"boolean"},provider:{type:"string",description:'Transcription provider: openai | elevenlabs | local. Defaults to TRANSCRIBE_DEFAULT_PROVIDER or "openai".'},language:{type:"string"}},required:["file_id"]}},{name:"voice_speak",title:"Speak text aloud",description:"Synthesize a short text reply to audio via OpenAI TTS (default) or ElevenLabs. Returns base64 audio; optionally saves to Disk.",category:"voice",risk_level:"low",approval_mode:"auto",required_env:[["OPENAI_API_KEY","ELEVENLABS_API_KEY"]],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{text:{type:"string",description:"Text to synthesize. Up to 4000 chars."},provider:{type:"string",description:"Provider: openai (default) or elevenlabs."},voice:{type:"string",description:"Provider-specific voice id. OpenAI: alloy|echo|fable|onyx|nova|shimmer. ElevenLabs: voice id."},model:{type:"string"},format:{type:"string",description:"mp3 (default) or wav."},save_to_disk:{type:"boolean"},project_id:{type:"string"}},required:["text"]}},{name:"printing_press_install",title:"Install Printing Press sub-package",description:"Install the printing-press sub-package required to generate scoped CLIs. Always approval-gated.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{},required:[]}},{name:"printing_press_generate",title:"Generate a scoped CLI",description:"Generate a new scoped CLI from a starter pack, GitHub repo, or local source.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Lowercase kebab-case CLI slug."},source:{type:"string",description:"starter-pack | github | local | spec"},source_url:{type:"string",description:"Required when source is not starter-pack."}},required:["slug"]}},{name:"printing_press_run",title:"Run an installed CLI",description:"Execute a previously-installed printing-press CLI with bounded args.",category:"cli_generator",risk_level:"high",approval_mode:"approval_required",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug to run."},args:{type:"array",items:{type:"string"},description:"Bounded arg list (no shell metacharacters)."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal `slug`."}},required:["slug"]}},{name:"create_workflow_definition",title:"Create workflow definition",description:'Create a new process workflow from a JSON spec. The spec is validated against lib/process/spec-validator.js. The new definition is published immediately at status="published" — cases can be started from it. Risk-gated by approval.',category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{spec:{type:"object",description:"Full workflow spec JSON. Must include schema_version, slug, name, version, stages[]. First stage must be intake_form. See ai-docs/process-engine.md and the validator at lib/process/spec-validator.js for the full schema."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["spec"]}},{name:"update_workflow_definition",title:"Update workflow definition",description:"Update an existing process workflow at a given slug. Spec is re-validated. version must be bumped if the stage list changed structurally. In-flight cases keep their old definition_id; new cases use the new version.",category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Slug of the existing workflow to update."},spec:{type:"object",description:"Full workflow spec JSON. slug is forced to match the path slug."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["slug","spec"]}},{name:"self_update",title:"Update madarX OS",description:"Update the madarX OS install to the latest published version (npm i -g madarx@latest). Irreversible-external: an agent calling this ALWAYS requires owner approval — it can never silently replace the running binary. A restart is required after a successful update.",category:"system",risk_level:"irreversible_external",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:86400,max:4},input_schema:{type:"object",properties:{approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:[]}},{name:"printing_press_query",title:"Query an installed CLI SQLite mirror",description:"Run a single read-only SELECT against a CLI local SQLite mirror, if it exposes one.",category:"cli_generator",risk_level:"low",approval_mode:"auto",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug whose SQLite mirror to query."},sql:{type:"string",description:"Single SELECT statement. Multi-statement SQL is refused."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal the slug."}},required:["slug","sql"]}},{name:"mines_project_create",title:"Create mine project",description:"Create a new mine project workspace and register it in the Mines module.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{name:{type:"string"},slug:{type:"string",description:'Lowercase kebab-case, e.g. "batamote"'},asset_stage:{type:"string",enum:["exploration","development","production","care_and_maintenance","unknown"]},commodity:{type:"string"},deposit_type:{type:"string"},approval_id:{type:"string"}},required:["name","slug"]}},{name:"mines_project_read",title:"Read mine project summary",description:"Read a mine project record including data completeness and document counts by category.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"}},required:["project_id"]}},{name:"mines_catalog_import",title:"Import portfolio catalog",description:"Load a master project catalog XLSX into Portfolio and PortfolioEntry records.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string",description:"Disk file ID of the XLSX catalog."},portfolio_name:{type:"string"},sheet_name:{type:"string",description:"Optional sheet override."},approval_id:{type:"string"}},required:["file_id","portfolio_name"]}},{name:"mines_data_import",title:"Bulk import mine data directory",description:"Walk a directory tree, auto-classify files by folder taxonomy, and enqueue each file for ingestion. Incremental and resumable.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},directory_path:{type:"string"},resume:{type:"boolean",description:"Skip files already past queued status."},approval_id:{type:"string"}},required:["project_id","directory_path"]}},{name:"mines_document_extract",title:"Extract and embed document",description:"Parse a source document (PDF/DOCX/PPTX), OCR if scanned, chunk text, and embed chunks. Spanish-first.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{source_document_id:{type:"string"},force_ocr:{type:"boolean"},approval_id:{type:"string"}},required:["source_document_id"]}},{name:"mines_spatial_index",title:"Index spatial assets",description:"Read GIS/CAD file metadata (kind, CRS, bounding box) without rendering geometry.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Index a single already-catalogued file."}},required:["project_id"]}},{name:"mines_extract_facts",title:"Extract structured facts from documents (LLM)",description:"Read a project document's indexed chunks and extract structured, provenance-cited geology/economics facts into mines_extracted_facts. Every fact is validated to cite a real chunk + verbatim quote; uncited facts are rejected. Never declares a mineral resource the source did not. Feeds mines_report_generate and mines_valuation_run.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Document to extract from. Defaults to the project's most-chunked document (its technical report)."},max_chunks:{type:"number",description:"Max chunks fed to the model. Default 48."},char_budget:{type:"number",description:"Max source characters per call. Default 32000."},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_assumption_validate",title:"Validate valuation assumptions",description:"Check completeness of data required for T1 or T2 valuation and return a gap list.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},target_tier:{type:"string",enum:["t1_in_situ","t2_dcf","auto"]}},required:["project_id"]}},{name:"mines_valuation_run",title:"Run tiered mine valuation",description:"Compute base/downside/upside valuation. Selects T1 (in-situ) or T2 (DCF) based on asset stage and data completeness. States tier and rationale.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{project_id:{type:"string"},commodity_prices_json:{type:"string",description:'JSON price override e.g. {"Au":2300,"Cu":4.2}. Defaults to latest mines_market_snapshots.'},in_situ_factor_override:{type:"number"},force_tier:{type:"string",enum:["t1_in_situ","t2_dcf"]},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_sensitivity_run",title:"Run valuation sensitivity analysis",description:"Compute sensitivity of valuation to key drivers (grade, price, recovery, in_situ_factor, discount_rate).",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{scenario_id:{type:"string"},drivers:{type:"array",items:{type:"string"}},steps:{type:"number",description:"Steps per driver. Default 5."},approval_id:{type:"string"}},required:["scenario_id"]}},{name:"mines_market_snapshot",title:"Fetch commodity market data",description:"Retrieve current commodity prices from an approved market data provider.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:["MINES_MARKET_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"market_provider_host",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{commodities:{type:"array",items:{type:"string"}},market_provider_host:{type:"string",description:'e.g. "metals-api.com". Must be in allowlist.'},approval_id:{type:"string"}},required:["market_provider_host"]}},{name:"mines_report_generate",title:"Generate mine project report",description:"Generate a cited, structured report artifact. External email send always requires separate irreversible_external approval.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},report_kind:{type:"string",enum:["interpretation_memo","due_diligence_memo","data_quality_report","investor_presentation","pfs_readiness_report","valuation_report","due_diligence_questions","project_package","portfolio_screen"]},scenario_id:{type:"string",description:"Required for valuation_report."},space_id:{type:"string",description:"Optional dashboard space to publish into. Defaults to the project’s configured default space; the artifact is pinned there so it appears as a window on the dashboard board."},language:{type:"string",enum:["en","es"],description:'Default "en".'},narrative:{type:"object",description:"LLM-authored prose slots (all optional, each falls back to data-driven copy). For investor_presentation: hero_headline, hero_subhead (strings); opportunity (array of paragraph strings); findings_lead, upside_lead, risk_lead, the_ask (strings). For pfs_readiness_report: verdict, gap_intro, work_program, recommendation (strings). Numbers/figures are never taken from here — they always come from cited DB rows.",properties:{hero_headline:{type:"string"},hero_subhead:{type:"string"},opportunity:{type:"array",items:{type:"string"}},findings_lead:{type:"string"},upside_lead:{type:"string"},risk_lead:{type:"string"},the_ask:{type:"string"},verdict:{type:"string"},gap_intro:{type:"string"},work_program:{type:"string"},recommendation:{type:"string"}}},send_email:{type:"boolean"},recipient_email:{type:"string"},approval_id:{type:"string"}},required:["project_id","report_kind"]}},{name:"create_skill",title:"Author skill",description:"Author a declarative skill (SKILL.md + marketplace row) any agent can invoke. Instructions only — no code executes. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:"{ slug, title, description?, markdown, invocation?, trigger_examples?[], category? }"},approval_id:{type:"string"}},required:["spec"]}},{name:"update_skill",title:"Update skill",description:"Update an existing authored skill by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_composite_tool",title:"Author composite tool",description:"Author a composite tool: a declarative recipe chaining EXISTING primitive tools + LLM steps. Inherits the MAX risk of its steps; every gate re-fires per sub-step. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:'{ slug, title, description?, input_schema?, steps:[{kind:"tool_call"|"llm_synthesis"|"artifact_write", id, ...}] }'},approval_id:{type:"string"}},required:["spec"]}},{name:"update_composite_tool",title:"Update composite tool",description:"Update an existing composite tool by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_connector",title:"Author API connector",description:"Author a declarative REST API connector (Option D). Each endpoint becomes a callable <slug>.<endpoint> tool backed by the generic http_api_call executor. Manifest is inert data: https-only, secret-by-reference auth, host allowlist, per-endpoint risk ceiling. Owner/admin authority required. The owner supplies the API key once.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{manifest:{type:"object",description:"{ slug, base_url(https), allowed_hosts[], auth:{type,secret_ref|username_ref/password_ref,header?,prefix?,query_param?}, default_headers?, endpoints:{ name:{method,path,risk?,input_schema?} } }"},approval_id:{type:"string"}},required:["manifest"]}},{name:"update_connector",title:"Update API connector",description:"Update an existing API connector by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},manifest:{type:"object"},approval_id:{type:"string"}},required:["slug","manifest"]}},{name:"propose_tool",title:"Propose new tool (code-gen)",description:"Option B escape hatch for non-REST integrations: generate an adapter scaffold + registry snippet + tests into a staging dir. The proposal is INERT — it is never callable until a human reviews, merges, and restarts. Writes files only; executes nothing.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string",description:"snake_case tool name"},summary:{type:"string"},risk:{type:"string",enum:["low","medium","high","irreversible_external"]},approval_id:{type:"string"}},required:["slug"]}},{name:"higgsfield_generate_image",title:"Generate image (Higgsfield)",description:"Generate an image from a text prompt via the Higgsfield AI Soul model. Spends Higgsfield credits — gated by default. Returns the resulting image URL.",category:"media",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["HIGGSFIELD_KEY_ID","HIGGSFIELD_KEY_SECRET"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{prompt:{type:"string",description:"Text description of the image to generate."},width_and_height:{type:"string",description:'Output size, e.g. "1536x1536". Defaults to "1536x1536".'},quality:{type:"string",description:'Render quality, e.g. "720p" or "1080p". Defaults to "720p".'},batch_size:{type:"number",description:"Number of images to generate (default 1)."},style_id:{type:"string",description:"Optional Higgsfield style/identity reference id (e.g. a trained Soul ID)."},style_strength:{type:"number",description:"Optional style strength 0–1."},seed:{type:"number",description:"Optional seed for reproducibility."},model:{type:"string",description:"Optional model override."},max_polls:{type:"number",description:"Optional cap on status polls before returning the job id (default ~48)."},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["prompt"]}},{name:"higgsfield_product_photoshoot",title:"Product photoshoot (Higgsfield)",description:"Turn a source product image into brand-quality product imagery (studio, lifestyle, hero banner, etc.) via the Higgsfield Soul model. Spends Higgsfield credits — gated by default. Returns the resulting image URL.",category:"media",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["HIGGSFIELD_KEY_ID","HIGGSFIELD_KEY_SECRET"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{image_url:{type:"string",description:"Public http(s) URL of the source product image to feature."},prompt:{type:"string",description:'Scene / style direction, e.g. "on a marble podium, soft studio lighting, minimal background".'},width_and_height:{type:"string",description:'Output size, e.g. "1536x1536". Defaults to "1536x1536".'},quality:{type:"string",description:'Render quality, e.g. "720p" or "1080p". Defaults to "720p".'},batch_size:{type:"number",description:"Number of variations to generate (default 1)."},style_id:{type:"string",description:"Optional Higgsfield style/identity reference id."},seed:{type:"number",description:"Optional seed for reproducibility."},max_polls:{type:"number",description:"Optional cap on status polls before returning the job id (default ~48)."},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["image_url","prompt"]}},{name:"higgsfield_generate_video",title:"Generate video (Higgsfield)",description:"Animate a source image into a video via the Higgsfield AI DoP model. Spends Higgsfield credits — gated by default. Returns the resulting video URL.",category:"media",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["HIGGSFIELD_KEY_ID","HIGGSFIELD_KEY_SECRET"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{image_url:{type:"string",description:"Public http(s) URL of the source image to animate."},prompt:{type:"string",description:"Optional motion/scene prompt."},model:{type:"string",description:'Optional DoP model variant. Defaults to "dop-turbo".'},motions:{description:"Optional Higgsfield motion descriptors."},seed:{type:"number",description:"Optional seed for reproducibility."},max_polls:{type:"number",description:"Optional cap on status polls before returning the job id (default ~90)."},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["image_url"]}}],ay={web_search:o.tE,web_fetch:o.dV,web_extract:o.IY,email_send:p.x,email_status_lookup:p.f,higgsfield_generate_image:q.xg,higgsfield_generate_video:q.tR,higgsfield_product_photoshoot:q.lu,supabase_list_projects:r.NO,supabase_rest_select:r.TP,supabase_rest_insert:r.c3,supabase_rest_upsert:r.mD,supabase_rest_update:r.sX,supabase_rest_delete:r.oc,supabase_rpc:r.wm,supabase_sql:r.l8,vercel_list_projects:s.Q$,vercel_list_deployments:s.I6,vercel_create_deployment:s.vV,gh_repo_read:t.Sj,gh_repo_list:t.AU,gh_issue_list:t.jj,gh_issue_create:t.vj,gh_issue_comment:t.iP,gh_pr_list:t.gn,gh_pr_create:t.Ud,gh_pr_comment:t.J,gh_pr_merge:t.wt,gh_actions_dispatch:t.zI,gh_release_create:t.Bb,file_read:u.dd,directory_list:u.sv,file_search:u.X,file_write:u.sq,file_patch:u.vO,terminal_run:v.y,process_start:w.gy,process_poll:w.p3,process_kill:w.MU,flight_search:x.R5,flight_status:x.zP,hotel_search:x.FE,hotel_rates:x.Y$,gmail_messages_list:y.r_,gmail_message_read:y.cS,gmail_thread_read:y.vg,calendar_events_list:z.u,calendar_event_read:z.r,transcribe_audio:A.b,browser_harness_run:B.K,skill_bridge_run:C.eE,browser_open:E.D6,browser_act:E.Hz,browser_extract:E.aU,browser_screenshot:E.Jz,browser_navigate:D.M,browser_extract_structured:D.B,voice_speak:F.o,printing_press_install:G.gE,printing_press_generate:G.ID,printing_press_run:G.Cw,printing_press_query:G.VC,create_workflow_definition:H.h,update_workflow_definition:H.m,self_update:I.m,create_skill:J.S,update_skill:J.f,create_composite_tool:K.y$,update_composite_tool:K.le,create_connector:L.U$,update_connector:L.zc,propose_tool:M.B,http_api_call:N.p,composite_tool_run:O.n,mines_project_create:R.m,mines_project_read:R.I,mines_catalog_import:S.b,mines_data_import:T.I,mines_document_extract:U.f,mines_extract_facts:$.$,mines_spatial_index:V.d,mines_assumption_validate:W.w,mines_valuation_run:X.R,mines_sensitivity_run:X.h,mines_market_snapshot:Y.V,mines_report_generate:Z.Q},az={file_write:u.Z6,file_patch:u.mr,terminal_run:v.x,process_start:w.H7,process_kill:w.L7,browser_harness_run:B.r,skill_bridge_run:C.zE},aA=new Set;function ab(a){try{if((0,j.getSecret)(a))return!0}catch{}return!!process.env[a]&&(aA.has(a)||(aA.add(a),console.warn(`[secrets] ${a} is being read from process.env as a fallback. Migrate it to the vault with: node scripts/migrate-env-to-secrets.mjs`)),!0)}function ac(a=[]){return a.filter(a=>Array.isArray(a)?!a.some(a=>ab(a)):!ab(a)).map(a=>Array.isArray(a)?a.join(" or "):a)}let aB=[{marker:"tool.repair.flight_search_enable_v1",tool_name:"flight_search",summary:"One-shot: enable flight_search on installs where the Amadeus→Google fallback shipped after the row was created."}];function ad(){let a=(0,f.getDb)(),b=(0,f.nowIso)();for(let c of ax){let d=a.prepare("SELECT name, enabled, required_env FROM tool_installations WHERE name=?").get(c.name),e={name:c.name,title:c.title,description:c.description,category:c.category,enabled:+!!c.enabled_default,risk_level:c.risk_level,required_env:JSON.stringify(c.required_env||[])};if(!d){a.prepare(`
1026
1044
  INSERT INTO tool_installations
1027
1045
  (name, title, description, category, enabled, risk_level, required_env, created_at, updated_at)
1028
1046
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
1029
- `).run(e.name,e.title,e.description,e.category,e.enabled,e.risk_level,e.required_env,b,b);continue}let g=ad(d.required_env,[]),h=c.required_env||[],i=d.enabled,j=!1;g.length>0&&0===h.length&&0===Number(d.enabled)&&!0===c.enabled_default&&(i=1,j=!0),a.prepare(`
1047
+ `).run(e.name,e.title,e.description,e.category,e.enabled,e.risk_level,e.required_env,b,b);continue}let g=ae(d.required_env,[]),h=c.required_env||[],i=d.enabled,j=!1;g.length>0&&0===h.length&&0===Number(d.enabled)&&!0===c.enabled_default&&(i=1,j=!0),a.prepare(`
1030
1048
  UPDATE tool_installations
1031
1049
  SET title=?, description=?, category=?, risk_level=?, required_env=?, enabled=?, updated_at=?
1032
1050
  WHERE name=?
1033
1051
  `).run(e.title,e.description,e.category,e.risk_level,e.required_env,i,b,e.name),j&&a.prepare(`
1034
1052
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
1035
1053
  VALUES (?, ?, ?, ?, ?, ?)
1036
- `).run((0,f.newId)("audit"),b,"tool.auto_enabled_after_creds_removed",`Auto-enabled ${c.name} after credential requirements were removed.`,"success",JSON.stringify({tool_name:c.name,previous_required_env:g,new_required_env:h}))}let c=(0,f.getDb)(),d=(0,f.nowIso)();for(let a of aA){if(c.prepare("SELECT id FROM audit_logs WHERE type=? LIMIT 1").get(a.marker))continue;let b=aw.find(b=>b.name===a.tool_name);if(!b||0!==(b.required_env||[]).length||!0!==b.enabled_default)continue;let e=c.prepare("SELECT name, enabled FROM tool_installations WHERE name=?").get(a.tool_name);if(e){if(0!==Number(e.enabled)){c.prepare(`
1054
+ `).run((0,f.newId)("audit"),b,"tool.auto_enabled_after_creds_removed",`Auto-enabled ${c.name} after credential requirements were removed.`,"success",JSON.stringify({tool_name:c.name,previous_required_env:g,new_required_env:h}))}let c=(0,f.getDb)(),d=(0,f.nowIso)();for(let a of aB){if(c.prepare("SELECT id FROM audit_logs WHERE type=? LIMIT 1").get(a.marker))continue;let b=ax.find(b=>b.name===a.tool_name);if(!b||0!==(b.required_env||[]).length||!0!==b.enabled_default)continue;let e=c.prepare("SELECT name, enabled FROM tool_installations WHERE name=?").get(a.tool_name);if(e){if(0!==Number(e.enabled)){c.prepare(`
1037
1055
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
1038
1056
  VALUES (?, ?, ?, ?, ?, ?)
1039
1057
  `).run((0,f.newId)("audit"),d,a.marker,`${a.summary} (no-op: already enabled)`,"success",JSON.stringify({tool_name:a.tool_name,action:"noop"}));continue}c.prepare("UPDATE tool_installations SET enabled=1, updated_at=? WHERE name=?").run(d,a.tool_name),c.prepare(`
1040
1058
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
1041
1059
  VALUES (?, ?, ?, ?, ?, ?)
1042
- `).run((0,f.newId)("audit"),d,a.marker,a.summary,"success",JSON.stringify({tool_name:a.tool_name,action:"enabled"}))}}}function ad(a,b){try{let c=JSON.parse(a||"[]");return Array.isArray(c)?c:b}catch{return b}}function ae(){let a=new Set,b=new Map;for(let c of aw)a.add(c.name),b.set(c.name,c.risk_level||"medium");return{names:a,riskByName:b}}function af(){let a=[],b=[];try{a=(0,O.n_)()}catch{a=[]}try{b=(0,P.R$)()}catch{b=[]}return[...a,...b].map(a=>({kind:"tool",connector:null,...a}))}function ag(){return ac(),[...(0,f.getDb)().prepare("SELECT * FROM tool_installations ORDER BY category ASC, name ASC").all().map(a=>{let b=aw.find(b=>b.name===a.name),c=ad(a.required_env,b?.required_env||[]),d=ab(c);return{kind:"tool",name:a.name,title:a.title,description:a.description,category:a.category,enabled:!!a.enabled,available:0===d.length,missing_env:d,required_env:function(a=[]){return a.flatMap(a=>Array.isArray(a)?a:[a])}(c),risk_level:a.risk_level,approval_required:!!b?.approval_required,approval_mode:b?.approval_mode||(b?.approval_required?"approval_required":"auto"),allowlist_required:!!b?.allowlist_required,allowlist_scope_key:b?.allowlist_scope_key??null,allowlist_default_allow:!!b?.allowlist_default_allow,connector:ah(a.category),input_schema:b?.input_schema||{type:"object",properties:{}}}}),...af()]}function ah(a){var b=a;let c=aw.filter(a=>a.category===b);if(!c.length)return null;let d=[...new Set(c.flatMap(a=>ab(a.required_env||[])))];return{type:b,status:d.length?"missing_env":"ready",missing_env:d}}function ai(a=[]){return{core:a.map(a=>({...a,enabled:!0,available:!0,category:"core",risk_level:"local"})),marketplace:ag(),connectors:["local_machine","web","browser","supabase","vercel","github","email","travel","voice"].map(ah).filter(Boolean)}}function aj(a=[]){let b=ag().filter(a=>a.enabled&&a.available).map(a=>({name:a.name,description:a.approval_required?`${a.description} Approval is required before external writes are executed.`:a.description,input_schema:a.input_schema}));return[...a,...b]}function ak({agent_id:a,tool_name:b,status:c,summary:d,meta:e={}}){a&&(0,f.getDb)().prepare(`
1060
+ `).run((0,f.newId)("audit"),d,a.marker,a.summary,"success",JSON.stringify({tool_name:a.tool_name,action:"enabled"}))}}}function ae(a,b){try{let c=JSON.parse(a||"[]");return Array.isArray(c)?c:b}catch{return b}}function af(){let a=new Set,b=new Map;for(let c of ax)a.add(c.name),b.set(c.name,c.risk_level||"medium");return{names:a,riskByName:b}}function ag(){let a=[],b=[];try{a=(0,P.n_)()}catch{a=[]}try{b=(0,Q.R$)()}catch{b=[]}return[...a,...b].map(a=>({kind:"tool",connector:null,...a}))}function ah(){return ad(),[...(0,f.getDb)().prepare("SELECT * FROM tool_installations ORDER BY category ASC, name ASC").all().map(a=>{let b=ax.find(b=>b.name===a.name),c=ae(a.required_env,b?.required_env||[]),d=ac(c);return{kind:"tool",name:a.name,title:a.title,description:a.description,category:a.category,enabled:!!a.enabled,available:0===d.length,missing_env:d,required_env:function(a=[]){return a.flatMap(a=>Array.isArray(a)?a:[a])}(c),risk_level:a.risk_level,approval_required:!!b?.approval_required,approval_mode:b?.approval_mode||(b?.approval_required?"approval_required":"auto"),allowlist_required:!!b?.allowlist_required,allowlist_scope_key:b?.allowlist_scope_key??null,allowlist_default_allow:!!b?.allowlist_default_allow,connector:ai(a.category),input_schema:b?.input_schema||{type:"object",properties:{}}}}),...ag()]}function ai(a){var b=a;let c=ax.filter(a=>a.category===b);if(!c.length)return null;let d=[...new Set(c.flatMap(a=>ac(a.required_env||[])))];return{type:b,status:d.length?"missing_env":"ready",missing_env:d}}function aj(a=[]){return{core:a.map(a=>({...a,enabled:!0,available:!0,category:"core",risk_level:"local"})),marketplace:ah(),connectors:["local_machine","web","browser","supabase","vercel","github","email","travel","voice"].map(ai).filter(Boolean)}}function ak(a=[]){let b=ah().filter(a=>a.enabled&&a.available).map(a=>({name:a.name,description:a.approval_required?`${a.description} Approval is required before external writes are executed.`:a.description,input_schema:a.input_schema}));return[...a,...b]}function al({agent_id:a,tool_name:b,status:c,summary:d,meta:e={}}){a&&(0,f.getDb)().prepare(`
1043
1061
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
1044
1062
  VALUES (?, ?, ?, ?, ?, ?)
1045
- `).run((0,f.newId)("audit"),(0,f.nowIso)(),`agent.tool.${c}`,d,c,JSON.stringify({agent_id:a,tool_name:b,...e}))}function al(a,b=[]){if(!a)return aj(b);let c=(0,f.getDb)().prepare("SELECT tool_name, mode FROM agent_tool_permissions WHERE agent_id = ?").all(a),d=new Map(c.filter(a=>"disabled"!==a.mode).map(a=>[a.tool_name,a.mode])),e=ag().filter(a=>a.enabled&&a.available&&d.has(a.name)).map(a=>({name:a.name,description:"approval_required"===d.get(a.name)?`${a.description} Agent permission requires owner approval before execution.`:a.description,input_schema:a.input_schema}));return[...b,...e]}function am(a,b){ac();let c=(0,f.getDb)();if(c.prepare("SELECT name FROM tool_installations WHERE name=?").get(a))return c.prepare("UPDATE tool_installations SET enabled=?, updated_at=? WHERE name=?").run(+!!b,(0,f.nowIso)(),a),ag().find(b=>b.name===a);let d=af().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);return b||d.source?.kind!=="composite"?b||d.source?.kind!=="connector"||(0,P.w$)(d.source.connector_slug):(0,O.u5)(d.source.composite_slug),af().find(b=>b.name===a)||{name:a,enabled:!!b,available:!0}}function an(a,b){if("irreversible_external"===a.risk_level)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return"irreversible_external"===(0,i.IB)(a,c).risk}return!1}function ao(a={}){let b={...a};return"string"==typeof b.content&&b.content.length>500&&(b.content=`[${b.content.length} chars]`),"string"==typeof b.new_string&&b.new_string.length>500&&(b.new_string=`[${b.new_string.length} chars]`),"approval_id"in b&&delete b.approval_id,b}let aB={create_workflow_definition:a=>({slug:a?.spec?.slug||null}),update_workflow_definition:a=>({slug:a?.slug||a?.spec?.slug||null,version:a?.spec?.version||null})};function ap(a,b={}){let c=aB[a],d=c?c(b):(()=>{let a={...b};return delete a.approval_id,a})();return(0,e.createHash)("sha256").update(`${a}|${function a(b){if(null===b||"object"!=typeof b)return JSON.stringify(b);if(Array.isArray(b))return`[${b.map(b=>a(b)).join(",")}]`;let c=Object.keys(b).sort();return`{${c.map(c=>`${JSON.stringify(c)}:${a(b[c])}`).join(",")}}`}(d)}`).digest("hex")}function aq({tool_name:a,status:b,summary:c,meta:d={}}){(0,f.getDb)().prepare(`
1063
+ `).run((0,f.newId)("audit"),(0,f.nowIso)(),`agent.tool.${c}`,d,c,JSON.stringify({agent_id:a,tool_name:b,...e}))}function am(a,b=[]){if(!a)return ak(b);let c=(0,f.getDb)().prepare("SELECT tool_name, mode FROM agent_tool_permissions WHERE agent_id = ?").all(a),d=new Map(c.filter(a=>"disabled"!==a.mode).map(a=>[a.tool_name,a.mode])),e=ah().filter(a=>a.enabled&&a.available&&d.has(a.name)).map(a=>({name:a.name,description:"approval_required"===d.get(a.name)?`${a.description} Agent permission requires owner approval before execution.`:a.description,input_schema:a.input_schema}));return[...b,...e]}function an(a,b){ad();let c=(0,f.getDb)();if(c.prepare("SELECT name FROM tool_installations WHERE name=?").get(a))return c.prepare("UPDATE tool_installations SET enabled=?, updated_at=? WHERE name=?").run(+!!b,(0,f.nowIso)(),a),ah().find(b=>b.name===a);let d=ag().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);return b||d.source?.kind!=="composite"?b||d.source?.kind!=="connector"||(0,Q.w$)(d.source.connector_slug):(0,P.u5)(d.source.composite_slug),ag().find(b=>b.name===a)||{name:a,enabled:!!b,available:!0}}function ao(a,b){if("irreversible_external"===a.risk_level)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return"irreversible_external"===(0,i.IB)(a,c).risk}return!1}function ap(a={}){let b={...a};return"string"==typeof b.content&&b.content.length>500&&(b.content=`[${b.content.length} chars]`),"string"==typeof b.new_string&&b.new_string.length>500&&(b.new_string=`[${b.new_string.length} chars]`),"approval_id"in b&&delete b.approval_id,b}let aC={create_workflow_definition:a=>({slug:a?.spec?.slug||null}),update_workflow_definition:a=>({slug:a?.slug||a?.spec?.slug||null,version:a?.spec?.version||null})};function aq(a,b={}){let c=aC[a],d=c?c(b):(()=>{let a={...b};return delete a.approval_id,a})();return(0,e.createHash)("sha256").update(`${a}|${function a(b){if(null===b||"object"!=typeof b)return JSON.stringify(b);if(Array.isArray(b))return`[${b.map(b=>a(b)).join(",")}]`;let c=Object.keys(b).sort();return`{${c.map(c=>`${JSON.stringify(c)}:${a(b[c])}`).join(",")}}`}(d)}`).digest("hex")}function ar({tool_name:a,status:b,summary:c,meta:d={}}){(0,f.getDb)().prepare(`
1046
1064
  INSERT INTO audit_logs (id, at, type, summary, status, meta)
1047
1065
  VALUES (?, ?, ?, ?, ?, ?)
1048
- `).run((0,f.newId)("audit"),(0,f.nowIso)(),`main_agent.tool.${b}`,c,b,JSON.stringify({tool_name:a,...d}))}async function ar(a,b={},c={}){let d=ag().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);if(!d.enabled)throw Error(`Tool disabled: ${a}`);if(!d.available)throw Error(`Tool unavailable; missing environment: ${d.missing_env.join(", ")}`);let e=ay[a];e&&e(b);{let b=c?.acting_on_behalf_of_user_id||c?.user_id||null,d=new Set(["system","whatsapp-service"]);if(b&&!d.has(b)){let d="personal-org";try{let a=(0,f.getDb)(),b=c.agent_id?a.prepare("SELECT project_id FROM agents WHERE id = ?").get(c.agent_id):null;if(b?.project_id){let c=a.prepare("SELECT org_id FROM projects WHERE id = ?").get(b.project_id);c?.org_id&&(d=c.org_id)}}catch{}try{await (0,m.aS)({user_id:b,org_id:d},d)}catch(e){if(e&&(403===e.status||"membership_revoked"===e.error)){if(c?.heartbeat_task_id)try{(0,f.getDb)().prepare("UPDATE heartbeat_tasks SET status = 'approval_required', updated_at = ? WHERE id = ?").run((0,f.nowIso)(),c.heartbeat_task_id)}catch(a){console.error("[registry] Gate 0: failed to pause heartbeat task:",a.message)}try{(0,n.appendComplianceAudit)({user_id:b,org_id:d,action:"auth.membership.revoked_detected",status:"denied",summary:`Tool ${a} blocked — membership revoked for user ${b}`,action_target_type:"tool",action_target_id:a,meta:{tool_name:a,agent_id:c.agent_id||null,org_id:d}})}catch{}return{ok:!1,status:"approval_required",approval_request_id:null,reason:"membership_revoked"}}throw e}}}let h=!1,j=null;if(!c.agent_id&&an(d,b)){let c=`main_agent_tool_irreversible:${a}`,d=ap(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===d})){let e=(0,g.D6)({action_type:c,risk:"irreversible_external",summary:`Allow the main agent to run irreversible external tool ${a}`,payload:{tool_name:a,input:ao(b),input_signature:d,...function(a,b={}){return"supabase_sql"===a?{warning:"This call uses the service-role key and BYPASSES Row-Level Security. Only approve if you have reviewed the exact SQL.",query:String(b.query||"")}:{}}(a,b)},requested_by:"main_agent"});return aq({tool_name:a,status:"irreversible_external_approval_required",summary:`Main agent irreversible-external approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}h=!0,j=b.approval_id||null,aq({tool_name:a,status:"irreversible_external_approved",summary:`Main agent irreversible-external approval consumed for ${a}`})}if(!c.agent_id&&!h&&!c.owner_trusted&&function(a,b){if(a.approval_required)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return(0,i.IB)(a,c).approval_required}return!1}(d,b)){let c=_();if("auto"===c)h=!0,aq({tool_name:a,status:"auto_approved",summary:`Main agent trust mode auto-approved ${a}`});else{let c=`main_agent_tool:${a}`,e=ap(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===e})){let f=(0,g.D6)({action_type:c,risk:d.risk_level||"medium",summary:`Allow the main agent to run ${a}`,payload:{tool_name:a,input:ao(b),input_signature:e},requested_by:"main_agent"});return aq({tool_name:a,status:"approval_required",summary:`Main agent approval required for ${a}`,meta:{approval_request_id:f.id}}),{ok:!1,status:"approval_required",approval_request_id:f.id,reason:`Main agent tool ${a} requires owner approval`}}h=!0,j=b.approval_id||null,aq({tool_name:a,status:"approved",summary:`Main agent approval consumed for ${a}`})}}let o=function(a,b){var c;if(!a)return{ok:!0,mode:"legacy"};let d=(c=b.name,a&&c&&(0,f.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,c)||null);if(!d)throw ak({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: missing agent permission`}),Error(`Agent ${a} is not permitted to use ${b.name}`);if("disabled"===d.mode)throw ak({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: permission disabled`}),Error(`Tool disabled for agent ${a}: ${b.name}`);return{ok:!0,mode:d.mode}}(c.agent_id,d),p=an(d,b)&&("browser_harness_run"===a||"skill_bridge_run"===a||!!d.source);if(c.agent_id&&p&&!(0,g.v)(b.approval_id,{action_type:`agent_tool_irreversible:${a}`})){let d=(0,g.D6)({action_type:`agent_tool_irreversible:${a}`,risk:"irreversible_external",summary:`Allow ${c.agent_id} to run irreversible external tool ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ao(b)},requested_by:c.agent_id});return ak({agent_id:c.agent_id,tool_name:a,status:"irreversible_external_approval_required",summary:`Irreversible-external approval required for ${a}`,meta:{approval_request_id:d.id}}),{ok:!1,status:"approval_required",approval_request_id:d.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}if(c.agent_id&&"approval_required"===o.mode&&!(0,g.v)(b.approval_id,{action_type:`agent_tool:${a}`})){let e=(0,g.D6)({action_type:`agent_tool:${a}`,risk:d.risk_level||"medium",summary:`Allow ${c.agent_id} to run ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ao(b)},requested_by:c.agent_id});return ak({agent_id:c.agent_id,tool_name:a,status:"approval_required",summary:`Approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Agent tool permission requires approval for ${a}`}}if(d.allowlist_required&&d.allowlist_scope_key){let e;if("recipient_domain"===d.allowlist_scope_key){let a=String(b?.to||""),c=a.lastIndexOf("@");e=c>=0?a.slice(c+1).toLowerCase():a.toLowerCase()}else e=String(b?.[d.allowlist_scope_key]??"");let f=!!d.allowlist_default_allow,g=(0,k.Bs)(a,{scope_key:d.allowlist_scope_key,scope_value:e},{default_allow:f});if(!g.ok){let b=c.agent_id?ak:aq,f=c.agent_id?{agent_id:c.agent_id,tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}}:{tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}};return b(f),{ok:!1,status:"allowlist_violation",missing_entry:g.missing_entry}}}let q=aw.find(b=>b.name===a),r=(0,l.ab)(a,c.agent_id,q);if(!r.ok){let b="rate_limited",d=`Rate limit exceeded for ${a}: ${r.current_count}/${r.max} in window`;return c.agent_id?ak({agent_id:c.agent_id,tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}):aq({tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}),{ok:!1,status:"rate_limited",retry_after_seconds:r.retry_after_seconds,current_count:r.current_count,max:r.max}}let s=ax[a],t=b;if(s||d.source?.kind!=="connector"?s||d.source?.kind!=="composite"||(s=ax.composite_tool_run,t={...b,__composite_slug:d.source.composite_slug}):(s=ax.http_api_call,t={...b,__connector_slug:d.source.connector_slug,__endpoint:d.source.endpoint}),!s)throw Error(`No adapter registered for tool: ${a}`);let u=await s(t,{owner_trusted:h||!!c.owner_trusted,agent_id:c.agent_id,project_id:c.project_id,org_id:c.org_id,actor_role:c.actor_role||c.role,engine:c.engine,acting_on_behalf_of_user_id:c.acting_on_behalf_of_user_id||c.user_id||null}),v=u?.status==="error"||u?.ok===!1,w=new Set(["spec_invalid","spec_required","slug_required","slug_in_use","version_bump_required","not_found","insufficient_role"]);v&&w.has(u?.error)&&j&&(0,g.t6)(j),v||(0,l.Cu)(a,c.agent_id,q);let x=v?{error:u?.error,errors:u?.errors,message:u?.message}:{};return c.agent_id?ak({agent_id:c.agent_id,tool_name:a,status:u?.status||"complete",summary:`Ran ${a}`,meta:x}):aq({tool_name:a,status:u?.status||"complete",summary:`Main agent ran ${a}`,meta:x}),u}function as(){return ag().some(a=>a.enabled&&a.available&&["web_search","web_fetch"].includes(a.name))}aw.length,d()}catch(a){d(a)}})},40924:(a,b,c)=>{"use strict";c.d(b,{O6:()=>f,Z2:()=>g,fb:()=>h});var d=c(77598);let e=new Map;function f(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function g(a){let b=e.get(a);return b?Date.now()>b.expires_at?(e.delete(a),null):(e.delete(a),e.set(a,b),b.value):null}function h(a,b){for(e.has(a)&&e.delete(a),e.set(a,{value:b,expires_at:Date.now()+9e5});e.size>200;){let a=e.keys().next().value;e.delete(a)}}},41249:(a,b,c)=>{"use strict";c.d(b,{Es:()=>h,K4:()=>g,Qw:()=>n,U5:()=>m,Zx:()=>f,v4:()=>l});var d=c(76760),e=c(80099);let f=Object.freeze(["strict","balanced","permissive"]),g="strict",h="MADARX_PRINTING_PRESS_SECURITY_MODE",i=new Set,j=null,k=0;function l(){k=0,j=null}function m(a){let b=a??function(){let a=Date.now();if(a-k<1500)return j;try{let a=process.env.MADARX_DATA_DIR||process.env.VILLA515_DATA_DIR,b=a?d.resolve(a):process.env.MADARX_HOME?d.join(d.resolve(process.env.MADARX_HOME),"data"):d.resolve(process.cwd(),"data"),c=d.join(b,"madarx.sqlite"),f=new e.DatabaseSync(c,{readOnly:!0});try{let a=f.prepare("SELECT value FROM config WHERE key = ?").get("printing_press_security_mode_override");j=a?.value||null}finally{f.close()}}catch{j=null}return k=a,j}()??process.env[h];if(!b)return g;let c=String(b).trim().toLowerCase();return f.includes(c)?c:(i.has(c)||(i.add(c),console.warn(`[printing-press] Unknown ${h}="${b}" — defaulting to "${g}".`)),g)}function n(a){let b=f.includes(a)?a:g;return"strict"===b?Object.freeze({mode:"strict",force_approval:!0,allowlist_default_allow:!1,allow_network_write_clis:!1,allow_mcp_mount:!1,rate_limit_multiplier:1,production_safe:!0,warn_in_production:!1,allow_install_at_runtime:!0,banner:"red",banner_message:"Strict mode: every Printing Press action requires explicit approval."}):"balanced"===b?Object.freeze({mode:"balanced",force_approval:!1,allowlist_default_allow:!1,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:2,production_safe:!0,warn_in_production:!0,allow_install_at_runtime:!0,banner:"amber",banner_message:"Balanced mode: trust-mode rules apply. Allowlist still default-deny."}):Object.freeze({mode:"permissive",force_approval:!1,allowlist_default_allow:!0,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:5,production_safe:!1,warn_in_production:!0,allow_install_at_runtime:!0,banner:"grey",banner_message:"Permissive mode: only suitable for sandboxes. Not allowed in production."})}},41416:(a,b,c)=>{"use strict";c.d(b,{M2:()=>h});var d=c(73024),e=c(76760);let f={".shp":"shp",".shx":"shp",".dbf":"shp",".prj":"prj",".gdb":"gdb",".mxd":"mxd",".dxf":"dxf",".dwg":"dwg",".adf":"adf",".tif":"raster",".tiff":"raster",".img":"raster",".ecw":"raster"};function g(a){try{return d.readFileSync(a,"utf8").trim()||null}catch{return null}}function h(a){let b=e.extname(a).toLowerCase(),c=f[String(b||"").toLowerCase()]||"other_spatial",h=null;try{h=d.statSync(a).size}catch{}let i=null,j=null;if(".prj"===b)i=g(a);else if(".shp"===b){j=function(a){try{let b=d.openSync(a,"r");try{let a=Buffer.alloc(100);if(68>d.readSync(b,a,0,100,0))return null;let c=a.readDoubleLE(36),e=a.readDoubleLE(44),f=a.readDoubleLE(52),g=a.readDoubleLE(60);if(![c,e,f,g].every(Number.isFinite))return null;return{min_x:c,min_y:e,max_x:f,max_y:g}}finally{d.closeSync(b)}}catch{return null}}(a);let b=a.replace(/\.shp$/i,".prj");b!==a&&d.existsSync(b)&&(i=g(b))}return{kind:c,crs:i,bbox:j,file_size_bytes:h}}},43466:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$:()=>k});var e=c(34255),f=c(19151),g=c(1423),h=c(4160),i=a([e,f,g,h]);[e,f,g,h]=i.then?(await i)():i;let l=Number(process.env.MINES_EXTRACT_CHAR_BUDGET)||9e4,m=Number(process.env.MINES_EXTRACT_MAX_CHUNKS)||120,n=["porphyry","deposit","mineraliz","mineralis","chalcocite","breccia","drill","sondaje","barren","trench","trinchera","channel","grade","ley","cu ","copper","cobre","au ","gold","oro","silver","plata","resource","recurso","reserve","reserva","tonn","tonelad","target","objetivo","qa/qc","qaqc","quality control","assay","ensaye","la caridad","cananea","la colorada","geophys","magnetic","gravity","recommend","recomend","work program","programa"],o=["property","asset_stage","deposit_type","mineralization","drilling_summary","trenching_summary","geophysics","qa_qc","data_verification","work_program","resource_estimate"],p={name:"emit_mining_facts",description:"Emit the structured facts extracted from the supplied document chunks. Call exactly once.",input_schema:{type:"object",properties:{facts:{type:"array",description:"One entry per distinct fact found in the chunks. Omit any fact not supported by the text.",items:{type:"object",properties:{fact_type:{type:"string",description:"Canonical key. Use one of: property, asset_stage, deposit_type, mineralization, drilling_summary, trenching_summary, geophysics, qa_qc, data_verification, work_program, resource_estimate. For each defined exploration target use target_<slug> (e.g. target_el_choclo_nw). For each comparable/analogue deposit use comparable_<slug> (e.g. comparable_la_caridad)."},value_text:{type:"string",description:"The fact stated concisely in English (preserve Spanish technical terms in parentheses on first use). Quote figures exactly as written."},source_chunk_id:{type:"string",description:"The exact [chunk_id] of the chunk this fact came from. Must be one of the provided ids."},source_quote:{type:"string",description:"A short verbatim span (10–200 chars) copied EXACTLY from that chunk that supports the fact. Must appear in the chunk text character-for-character."},confidence:{type:"number",description:"0..1 — how directly the chunk supports the fact. 0.9+ for explicit statements, lower for inferred."}},required:["fact_type","value_text","source_chunk_id","source_quote"]}}},required:["facts"]}};function j(a){return String(a||"").toLowerCase().replace(/\s+/g," ").replace(/[‘’]/g,"'").trim()}async function k(a,b={}){let c=a?.project_id;if(!c)return{status:"error",error:"project_id_required"};let d=(0,e.getDb)(),f=d.prepare("SELECT id, name, commodity, asset_stage FROM mines_projects WHERE id = ?").get(c);if(!f)return{status:"error",error:"project_not_found"};let i=function(a,b,c){if(c)return a.prepare("SELECT id, file_name, page_count FROM mines_source_documents WHERE id = ? AND project_id = ?").get(c,b);let d=a.prepare(`
1066
+ `).run((0,f.newId)("audit"),(0,f.nowIso)(),`main_agent.tool.${b}`,c,b,JSON.stringify({tool_name:a,...d}))}async function as(a,b={},c={}){let d=ah().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);if(!d.enabled)throw Error(`Tool disabled: ${a}`);if(!d.available)throw Error(`Tool unavailable; missing environment: ${d.missing_env.join(", ")}`);let e=az[a];e&&e(b);{let b=c?.acting_on_behalf_of_user_id||c?.user_id||null,d=new Set(["system","whatsapp-service"]);if(b&&!d.has(b)){let d="personal-org";try{let a=(0,f.getDb)(),b=c.agent_id?a.prepare("SELECT project_id FROM agents WHERE id = ?").get(c.agent_id):null;if(b?.project_id){let c=a.prepare("SELECT org_id FROM projects WHERE id = ?").get(b.project_id);c?.org_id&&(d=c.org_id)}}catch{}try{await (0,m.aS)({user_id:b,org_id:d},d)}catch(e){if(e&&(403===e.status||"membership_revoked"===e.error)){if(c?.heartbeat_task_id)try{(0,f.getDb)().prepare("UPDATE heartbeat_tasks SET status = 'approval_required', updated_at = ? WHERE id = ?").run((0,f.nowIso)(),c.heartbeat_task_id)}catch(a){console.error("[registry] Gate 0: failed to pause heartbeat task:",a.message)}try{(0,n.appendComplianceAudit)({user_id:b,org_id:d,action:"auth.membership.revoked_detected",status:"denied",summary:`Tool ${a} blocked — membership revoked for user ${b}`,action_target_type:"tool",action_target_id:a,meta:{tool_name:a,agent_id:c.agent_id||null,org_id:d}})}catch{}return{ok:!1,status:"approval_required",approval_request_id:null,reason:"membership_revoked"}}throw e}}}let h=!1,j=null;if(!c.agent_id&&ao(d,b)){let c=`main_agent_tool_irreversible:${a}`,d=aq(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===d})){let e=(0,g.D6)({action_type:c,risk:"irreversible_external",summary:`Allow the main agent to run irreversible external tool ${a}`,payload:{tool_name:a,input:ap(b),input_signature:d,...function(a,b={}){return"supabase_sql"===a?{warning:"This call uses the service-role key and BYPASSES Row-Level Security. Only approve if you have reviewed the exact SQL.",query:String(b.query||"")}:{}}(a,b)},requested_by:"main_agent"});return ar({tool_name:a,status:"irreversible_external_approval_required",summary:`Main agent irreversible-external approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}h=!0,j=b.approval_id||null,ar({tool_name:a,status:"irreversible_external_approved",summary:`Main agent irreversible-external approval consumed for ${a}`})}if(!c.agent_id&&!h&&!c.owner_trusted&&function(a,b){if(a.approval_required)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return(0,i.IB)(a,c).approval_required}return!1}(d,b)){let c=aa();if("auto"===c)h=!0,ar({tool_name:a,status:"auto_approved",summary:`Main agent trust mode auto-approved ${a}`});else{let c=`main_agent_tool:${a}`,e=aq(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===e})){let f=(0,g.D6)({action_type:c,risk:d.risk_level||"medium",summary:`Allow the main agent to run ${a}`,payload:{tool_name:a,input:ap(b),input_signature:e},requested_by:"main_agent"});return ar({tool_name:a,status:"approval_required",summary:`Main agent approval required for ${a}`,meta:{approval_request_id:f.id}}),{ok:!1,status:"approval_required",approval_request_id:f.id,reason:`Main agent tool ${a} requires owner approval`}}h=!0,j=b.approval_id||null,ar({tool_name:a,status:"approved",summary:`Main agent approval consumed for ${a}`})}}let o=function(a,b){var c;if(!a)return{ok:!0,mode:"legacy"};let d=(c=b.name,a&&c&&(0,f.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,c)||null);if(!d)throw al({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: missing agent permission`}),Error(`Agent ${a} is not permitted to use ${b.name}`);if("disabled"===d.mode)throw al({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: permission disabled`}),Error(`Tool disabled for agent ${a}: ${b.name}`);return{ok:!0,mode:d.mode}}(c.agent_id,d),p=ao(d,b)&&("browser_harness_run"===a||"skill_bridge_run"===a||!!d.source);if(c.agent_id&&p&&!(0,g.v)(b.approval_id,{action_type:`agent_tool_irreversible:${a}`})){let d=(0,g.D6)({action_type:`agent_tool_irreversible:${a}`,risk:"irreversible_external",summary:`Allow ${c.agent_id} to run irreversible external tool ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ap(b)},requested_by:c.agent_id});return al({agent_id:c.agent_id,tool_name:a,status:"irreversible_external_approval_required",summary:`Irreversible-external approval required for ${a}`,meta:{approval_request_id:d.id}}),{ok:!1,status:"approval_required",approval_request_id:d.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}if(c.agent_id&&"approval_required"===o.mode&&!(0,g.v)(b.approval_id,{action_type:`agent_tool:${a}`})){let e=(0,g.D6)({action_type:`agent_tool:${a}`,risk:d.risk_level||"medium",summary:`Allow ${c.agent_id} to run ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ap(b)},requested_by:c.agent_id});return al({agent_id:c.agent_id,tool_name:a,status:"approval_required",summary:`Approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Agent tool permission requires approval for ${a}`}}if(d.allowlist_required&&d.allowlist_scope_key){let e;if("recipient_domain"===d.allowlist_scope_key){let a=String(b?.to||""),c=a.lastIndexOf("@");e=c>=0?a.slice(c+1).toLowerCase():a.toLowerCase()}else e=String(b?.[d.allowlist_scope_key]??"");let f=!!d.allowlist_default_allow,g=(0,k.Bs)(a,{scope_key:d.allowlist_scope_key,scope_value:e},{default_allow:f});if(!g.ok){let b=c.agent_id?al:ar,f=c.agent_id?{agent_id:c.agent_id,tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}}:{tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}};return b(f),{ok:!1,status:"allowlist_violation",missing_entry:g.missing_entry}}}let q=ax.find(b=>b.name===a),r=(0,l.ab)(a,c.agent_id,q);if(!r.ok){let b="rate_limited",d=`Rate limit exceeded for ${a}: ${r.current_count}/${r.max} in window`;return c.agent_id?al({agent_id:c.agent_id,tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}):ar({tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}),{ok:!1,status:"rate_limited",retry_after_seconds:r.retry_after_seconds,current_count:r.current_count,max:r.max}}let s=ay[a],t=b;if(s||d.source?.kind!=="connector"?s||d.source?.kind!=="composite"||(s=ay.composite_tool_run,t={...b,__composite_slug:d.source.composite_slug}):(s=ay.http_api_call,t={...b,__connector_slug:d.source.connector_slug,__endpoint:d.source.endpoint}),!s)throw Error(`No adapter registered for tool: ${a}`);let u=await s(t,{owner_trusted:h||!!c.owner_trusted,agent_id:c.agent_id,project_id:c.project_id,org_id:c.org_id,actor_role:c.actor_role||c.role,engine:c.engine,acting_on_behalf_of_user_id:c.acting_on_behalf_of_user_id||c.user_id||null}),v=u?.status==="error"||u?.ok===!1,w=new Set(["spec_invalid","spec_required","slug_required","slug_in_use","version_bump_required","not_found","insufficient_role"]);v&&w.has(u?.error)&&j&&(0,g.t6)(j),v||(0,l.Cu)(a,c.agent_id,q);let x=v?{error:u?.error,errors:u?.errors,message:u?.message}:{};return c.agent_id?al({agent_id:c.agent_id,tool_name:a,status:u?.status||"complete",summary:`Ran ${a}`,meta:x}):ar({tool_name:a,status:u?.status||"complete",summary:`Main agent ran ${a}`,meta:x}),u}function at(){return ah().some(a=>a.enabled&&a.available&&["web_search","web_fetch"].includes(a.name))}ax.length,d()}catch(a){d(a)}})},40924:(a,b,c)=>{"use strict";c.d(b,{O6:()=>f,Z2:()=>g,fb:()=>h});var d=c(77598);let e=new Map;function f(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function g(a){let b=e.get(a);return b?Date.now()>b.expires_at?(e.delete(a),null):(e.delete(a),e.set(a,b),b.value):null}function h(a,b){for(e.has(a)&&e.delete(a),e.set(a,{value:b,expires_at:Date.now()+9e5});e.size>200;){let a=e.keys().next().value;e.delete(a)}}},41249:(a,b,c)=>{"use strict";c.d(b,{Es:()=>h,K4:()=>g,Qw:()=>n,U5:()=>m,Zx:()=>f,v4:()=>l});var d=c(76760),e=c(80099);let f=Object.freeze(["strict","balanced","permissive"]),g="strict",h="MADARX_PRINTING_PRESS_SECURITY_MODE",i=new Set,j=null,k=0;function l(){k=0,j=null}function m(a){let b=a??function(){let a=Date.now();if(a-k<1500)return j;try{let a=process.env.MADARX_DATA_DIR||process.env.VILLA515_DATA_DIR,b=a?d.resolve(a):process.env.MADARX_HOME?d.join(d.resolve(process.env.MADARX_HOME),"data"):d.resolve(process.cwd(),"data"),c=d.join(b,"madarx.sqlite"),f=new e.DatabaseSync(c,{readOnly:!0});try{let a=f.prepare("SELECT value FROM config WHERE key = ?").get("printing_press_security_mode_override");j=a?.value||null}finally{f.close()}}catch{j=null}return k=a,j}()??process.env[h];if(!b)return g;let c=String(b).trim().toLowerCase();return f.includes(c)?c:(i.has(c)||(i.add(c),console.warn(`[printing-press] Unknown ${h}="${b}" — defaulting to "${g}".`)),g)}function n(a){let b=f.includes(a)?a:g;return"strict"===b?Object.freeze({mode:"strict",force_approval:!0,allowlist_default_allow:!1,allow_network_write_clis:!1,allow_mcp_mount:!1,rate_limit_multiplier:1,production_safe:!0,warn_in_production:!1,allow_install_at_runtime:!0,banner:"red",banner_message:"Strict mode: every Printing Press action requires explicit approval."}):"balanced"===b?Object.freeze({mode:"balanced",force_approval:!1,allowlist_default_allow:!1,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:2,production_safe:!0,warn_in_production:!0,allow_install_at_runtime:!0,banner:"amber",banner_message:"Balanced mode: trust-mode rules apply. Allowlist still default-deny."}):Object.freeze({mode:"permissive",force_approval:!1,allowlist_default_allow:!0,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:5,production_safe:!1,warn_in_production:!0,allow_install_at_runtime:!0,banner:"grey",banner_message:"Permissive mode: only suitable for sandboxes. Not allowed in production."})}},41416:(a,b,c)=>{"use strict";c.d(b,{M2:()=>h});var d=c(73024),e=c(76760);let f={".shp":"shp",".shx":"shp",".dbf":"shp",".prj":"prj",".gdb":"gdb",".mxd":"mxd",".dxf":"dxf",".dwg":"dwg",".adf":"adf",".tif":"raster",".tiff":"raster",".img":"raster",".ecw":"raster"};function g(a){try{return d.readFileSync(a,"utf8").trim()||null}catch{return null}}function h(a){let b=e.extname(a).toLowerCase(),c=f[String(b||"").toLowerCase()]||"other_spatial",h=null;try{h=d.statSync(a).size}catch{}let i=null,j=null;if(".prj"===b)i=g(a);else if(".shp"===b){j=function(a){try{let b=d.openSync(a,"r");try{let a=Buffer.alloc(100);if(68>d.readSync(b,a,0,100,0))return null;let c=a.readDoubleLE(36),e=a.readDoubleLE(44),f=a.readDoubleLE(52),g=a.readDoubleLE(60);if(![c,e,f,g].every(Number.isFinite))return null;return{min_x:c,min_y:e,max_x:f,max_y:g}}finally{d.closeSync(b)}}catch{return null}}(a);let b=a.replace(/\.shp$/i,".prj");b!==a&&d.existsSync(b)&&(i=g(b))}return{kind:c,crs:i,bbox:j,file_size_bytes:h}}},43466:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$:()=>k});var e=c(34255),f=c(19151),g=c(1423),h=c(4160),i=a([e,f,g,h]);[e,f,g,h]=i.then?(await i)():i;let l=Number(process.env.MINES_EXTRACT_CHAR_BUDGET)||9e4,m=Number(process.env.MINES_EXTRACT_MAX_CHUNKS)||120,n=["porphyry","deposit","mineraliz","mineralis","chalcocite","breccia","drill","sondaje","barren","trench","trinchera","channel","grade","ley","cu ","copper","cobre","au ","gold","oro","silver","plata","resource","recurso","reserve","reserva","tonn","tonelad","target","objetivo","qa/qc","qaqc","quality control","assay","ensaye","la caridad","cananea","la colorada","geophys","magnetic","gravity","recommend","recomend","work program","programa"],o=["property","asset_stage","deposit_type","mineralization","drilling_summary","trenching_summary","geophysics","qa_qc","data_verification","work_program","resource_estimate"],p={name:"emit_mining_facts",description:"Emit the structured facts extracted from the supplied document chunks. Call exactly once.",input_schema:{type:"object",properties:{facts:{type:"array",description:"One entry per distinct fact found in the chunks. Omit any fact not supported by the text.",items:{type:"object",properties:{fact_type:{type:"string",description:"Canonical key. Use one of: property, asset_stage, deposit_type, mineralization, drilling_summary, trenching_summary, geophysics, qa_qc, data_verification, work_program, resource_estimate. For each defined exploration target use target_<slug> (e.g. target_el_choclo_nw). For each comparable/analogue deposit use comparable_<slug> (e.g. comparable_la_caridad)."},value_text:{type:"string",description:"The fact stated concisely in English (preserve Spanish technical terms in parentheses on first use). Quote figures exactly as written."},source_chunk_id:{type:"string",description:"The exact [chunk_id] of the chunk this fact came from. Must be one of the provided ids."},source_quote:{type:"string",description:"A short verbatim span (10–200 chars) copied EXACTLY from that chunk that supports the fact. Must appear in the chunk text character-for-character."},confidence:{type:"number",description:"0..1 — how directly the chunk supports the fact. 0.9+ for explicit statements, lower for inferred."}},required:["fact_type","value_text","source_chunk_id","source_quote"]}}},required:["facts"]}};function j(a){return String(a||"").toLowerCase().replace(/\s+/g," ").replace(/[‘’]/g,"'").trim()}async function k(a,b={}){let c=a?.project_id;if(!c)return{status:"error",error:"project_id_required"};let d=(0,e.getDb)(),f=d.prepare("SELECT id, name, commodity, asset_stage FROM mines_projects WHERE id = ?").get(c);if(!f)return{status:"error",error:"project_not_found"};let i=function(a,b,c){if(c)return a.prepare("SELECT id, file_name, page_count FROM mines_source_documents WHERE id = ? AND project_id = ?").get(c,b);let d=a.prepare(`
1049
1067
  SELECT d.id, d.file_name, d.page_count, COUNT(c.id) AS chunk_count
1050
1068
  FROM mines_source_documents d
1051
1069
  JOIN mines_document_chunks c ON c.source_document_id = d.id
@@ -3246,7 +3264,7 @@ ${e}`,triggered_by:b})}function am({project_id:a=null}={}){(0,i.Jh)();let b=(0,r
3246
3264
 
3247
3265
  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 ax({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
3248
3266
  WHERE enabled = 1 AND next_run_at IS NOT NULL AND next_run_at <= ?
3249
- 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)}W({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)&&W({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(X({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 ay({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 ax({once:!0})}d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";function d({slug:a,title:b,description:c,category:d="integration",provider:e,scopes:f,prefix:g,extraCredentials:h=[],unlocks:i,healthEndpoint:j,risk:k,tags:l}){let m=`${g}_ACCESS_TOKEN`;return{slug:a,title:b,description:c,category:d,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:k,tags:l,manifest:{service_key:a,setup_kind:"oauth2",benefit:`Sign in with ${b} to unlock ${i.length} tool${1===i.length?"":"s"}. No code, no .env editing.`,credentials:[{name:`${g}_CLIENT_ID`,label:`${b} client ID`,type:"text",required:!0,help_text:`Create an app on the ${b} developer console and paste its client ID.`},{name:`${g}_CLIENT_SECRET`,label:`${b} client secret`,type:"password",required:!0,help_text:"Stored encrypted in the local vault — never echoed back."},...h],oauth:{provider:e,scopes:f,pkce:"google"===e||"tiktok"===e,redirect_path:`/api/connections/${a}/oauth/callback`,client_id_ref:`${g}_CLIENT_ID`,client_secret_ref:`${g}_CLIENT_SECRET`,access_token_ref:m,refresh_token_ref:`${g}_REFRESH_TOKEN`},health_check:{endpoint:j,method:"GET",expect_status:200,auth:{in:"header",name:"Authorization",prefix:"Bearer ",credential:m}},verify_endpoint:`/api/connections/${a}/verify`,verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:i,engines:[],logo_glyph:a}}}c.d(b,{R2:()=>q,fP:()=>o});let e=[{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:'To read repos beyond your own, the token must be granted access to them. Fine-grained PAT: under "Repository access" pick the orgs/repos (org owner may need to approve); classic PAT: enable the "repo" scope and, for SSO orgs, click "Authorize" / "Configure SSO" next to the token.',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({slug:"meta-ads",title:"Meta Ads",description:"Build and report on Facebook + Instagram ad campaigns. Campaign/budget writes are always approval-gated.",category:"marketing",provider:"meta",prefix:"META",scopes:["ads_management","ads_read","business_management"],unlocks:["meta_ads.insights_read","meta_ads.campaign_create","meta_ads.adset_create","meta_ads.budget_set"],healthEndpoint:"https://graph.facebook.com/v19.0/me",risk:"Campaign create, budget set, and audience create are irreversible and always require approval.",tags:["marketing","ads","meta","oauth"]}),d({slug:"google-ads",title:"Google Ads",description:"Manage Google Ads campaigns and pull GAQL reports. Requires a developer token in addition to OAuth sign-in.",category:"marketing",provider:"google",prefix:"GOOGLE_ADS",scopes:["https://www.googleapis.com/auth/adwords"],extraCredentials:[{name:"GOOGLE_ADS_DEVELOPER_TOKEN",label:"Developer token",type:"password",required:!0,help_text:"Google Ads API access requires a developer token alongside OAuth."}],unlocks:["google_ads.report","google_ads.campaign_create","google_ads.budget_set"],healthEndpoint:"https://googleads.googleapis.com/v17/customers:listAccessibleCustomers",risk:"Campaign create and budget set are irreversible and always require approval.",tags:["marketing","ads","google","oauth"]}),d({slug:"ga4",title:"Google Analytics 4",description:"Read GA4 metrics for marketing reports. Read-only — no external writes.",category:"analytics",provider:"google",prefix:"GA4",scopes:["https://www.googleapis.com/auth/analytics.readonly"],unlocks:["ga4.run_report","ga4.realtime_report"],healthEndpoint:"https://analyticsdata.googleapis.com/v1beta/properties",risk:"Read-only analytics access.",tags:["analytics","ga4","google","oauth"]}),d({slug:"hubspot-crm",title:"HubSpot CRM",description:"Read and (with approval) write contacts, deals, and activity in HubSpot.",category:"sales",provider:"hubspot",prefix:"HUBSPOT",scopes:["crm.objects.contacts.read","crm.objects.deals.read","crm.objects.contacts.write"],unlocks:["hubspot.contacts_read","hubspot.deals_read","hubspot.contact_upsert"],healthEndpoint:"https://api.hubapi.com/crm/v3/objects/contacts",risk:"CRM writes (contact/deal upsert) require approval.",tags:["sales","crm","hubspot","oauth"]})];e.map(a=>a.slug);let f=[{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."}],g={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:f.map(a=>`skill:open-design-${a.slug}`),published_count:f.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."}},h=[{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"]}}],i=[{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"]}],j=[{slug:"paid-campaign-build",title:"Paid Campaign Build",category:"marketing",description:"Structure a paid campaign — objective, audiences, ad sets, creative spec, and budget — ready for approval-gated launch.",tools:["create_artifact","web_search"],risk_summary:"Plans campaigns; every publish/budget set stays approval-gated.",tags:["marketing","ads","campaign"],invocation:"/paid-campaign",trigger_examples:["build a Meta campaign","plan a paid launch","structure ad sets"]},{slug:"ads-reporting",title:"Ads Reporting",category:"marketing",description:"Pull spend, CPA, ROAS, and reach from connected ad accounts into one weekly performance report.",tools:["create_artifact","file_write"],risk_summary:"Read-only reporting; no external writes.",tags:["marketing","ads","reporting"],invocation:"/ads-report",trigger_examples:["weekly ads report","how did campaigns perform","ROAS summary"]},{slug:"content-calendar",title:"Content Calendar",category:"content",description:"Plan a multi-channel content calendar with post drafts, captions, and a scheduled queue.",tools:["create_artifact","file_write"],risk_summary:"Drafts and schedules; every publish stays approval-gated.",tags:["content","social","calendar"],invocation:"/content-calendar",trigger_examples:["plan this month of content","build a content calendar","draft social posts"]},{slug:"lead-research",title:"Lead Research",category:"sales",description:"Build a qualified target list, enrich it, and prep a personalized outreach sequence.",tools:["web_search","web_fetch","create_artifact"],risk_summary:"Research + drafts; sequence enrollment and bulk sends are approval-gated.",tags:["sales","outreach","leads"],invocation:"/lead-research",trigger_examples:["build a target list","find leads for X","prep an outreach sequence"]},{slug:"ticket-reply",title:"Ticket Reply",category:"support",description:"Triage support tickets, draft replies in brand voice, and flag escalations.",tools:["gmail_messages_list","file_write"],risk_summary:"Drafts replies; outbound sends/status changes are approval-gated.",tags:["support","helpdesk","tickets"],invocation:"/ticket-reply",trigger_examples:["triage support tickets","draft ticket replies","escalate this ticket"]},{slug:"runway-model",title:"Runway Model",category:"finance",description:"Turn revenue/expense data into a runway model and P&L summary with scenario sensitivity.",tools:["file_read","create_artifact"],risk_summary:"Advisory analysis; any money movement is approval-gated.",tags:["finance","runway","modeling"],invocation:"/runway",trigger_examples:["model our runway","P&L summary","how many months of cash"]}],k=[{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 l(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(`
3267
+ 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)}W({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)&&W({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(X({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 ay({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 ax({once:!0})}d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";function d({slug:a,title:b,description:c,category:d="integration",provider:e,scopes:f,prefix:g,extraCredentials:h=[],unlocks:i,healthEndpoint:j,risk:k,tags:l}){let m=`${g}_ACCESS_TOKEN`;return{slug:a,title:b,description:c,category:d,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:k,tags:l,manifest:{service_key:a,setup_kind:"oauth2",benefit:`Sign in with ${b} to unlock ${i.length} tool${1===i.length?"":"s"}. No code, no .env editing.`,credentials:[{name:`${g}_CLIENT_ID`,label:`${b} client ID`,type:"text",required:!0,help_text:`Create an app on the ${b} developer console and paste its client ID.`},{name:`${g}_CLIENT_SECRET`,label:`${b} client secret`,type:"password",required:!0,help_text:"Stored encrypted in the local vault — never echoed back."},...h],oauth:{provider:e,scopes:f,pkce:"google"===e||"tiktok"===e,redirect_path:`/api/connections/${a}/oauth/callback`,client_id_ref:`${g}_CLIENT_ID`,client_secret_ref:`${g}_CLIENT_SECRET`,access_token_ref:m,refresh_token_ref:`${g}_REFRESH_TOKEN`},health_check:{endpoint:j,method:"GET",expect_status:200,auth:{in:"header",name:"Authorization",prefix:"Bearer ",credential:m}},verify_endpoint:`/api/connections/${a}/verify`,verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:i,engines:[],logo_glyph:a}}}c.d(b,{R2:()=>s,fP:()=>q});let e=[{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:'To read repos beyond your own, the token must be granted access to them. Fine-grained PAT: under "Repository access" pick the orgs/repos (org owner may need to approve); classic PAT: enable the "repo" scope and, for SSO orgs, click "Authorize" / "Configure SSO" next to the token.',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({slug:"meta-ads",title:"Meta Ads",description:"Build and report on Facebook + Instagram ad campaigns. Campaign/budget writes are always approval-gated.",category:"marketing",provider:"meta",prefix:"META",scopes:["ads_management","ads_read","business_management"],unlocks:["meta_ads.insights_read","meta_ads.campaign_create","meta_ads.adset_create","meta_ads.budget_set"],healthEndpoint:"https://graph.facebook.com/v19.0/me",risk:"Campaign create, budget set, and audience create are irreversible and always require approval.",tags:["marketing","ads","meta","oauth"]}),d({slug:"google-ads",title:"Google Ads",description:"Manage Google Ads campaigns and pull GAQL reports. Requires a developer token in addition to OAuth sign-in.",category:"marketing",provider:"google",prefix:"GOOGLE_ADS",scopes:["https://www.googleapis.com/auth/adwords"],extraCredentials:[{name:"GOOGLE_ADS_DEVELOPER_TOKEN",label:"Developer token",type:"password",required:!0,help_text:"Google Ads API access requires a developer token alongside OAuth."}],unlocks:["google_ads.report","google_ads.campaign_create","google_ads.budget_set"],healthEndpoint:"https://googleads.googleapis.com/v17/customers:listAccessibleCustomers",risk:"Campaign create and budget set are irreversible and always require approval.",tags:["marketing","ads","google","oauth"]}),d({slug:"ga4",title:"Google Analytics 4",description:"Read GA4 metrics for marketing reports. Read-only — no external writes.",category:"analytics",provider:"google",prefix:"GA4",scopes:["https://www.googleapis.com/auth/analytics.readonly"],unlocks:["ga4.run_report","ga4.realtime_report"],healthEndpoint:"https://analyticsdata.googleapis.com/v1beta/properties",risk:"Read-only analytics access.",tags:["analytics","ga4","google","oauth"]}),d({slug:"hubspot-crm",title:"HubSpot CRM",description:"Read and (with approval) write contacts, deals, and activity in HubSpot.",category:"sales",provider:"hubspot",prefix:"HUBSPOT",scopes:["crm.objects.contacts.read","crm.objects.deals.read","crm.objects.contacts.write"],unlocks:["hubspot.contacts_read","hubspot.deals_read","hubspot.contact_upsert"],healthEndpoint:"https://api.hubapi.com/crm/v3/objects/contacts",risk:"CRM writes (contact/deal upsert) require approval.",tags:["sales","crm","hubspot","oauth"]}),{slug:"higgsfield",title:"Higgsfield AI",description:"Generate images and videos via Higgsfield AI. Pair once with your API key/secret to unlock the generation tools.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://cloud.higgsfield.ai/",version:null,risk_summary:"Generation spends paid Higgsfield credits; both tools stay approval-gated by default.",tags:["integration","media","image-generation","video-generation","higgsfield"],manifest:{service_key:"higgsfield",setup_kind:"api_key",benefit:"Unlock higgsfield_generate_image and higgsfield_generate_video.",credentials:[{name:"HIGGSFIELD_KEY_ID",label:"API key ID",type:"password",placeholder:"key id",help_url:"https://cloud.higgsfield.ai/",help_text:"From your Higgsfield dashboard → API section. Create a key, then copy its ID.",required:!0},{name:"HIGGSFIELD_KEY_SECRET",label:"API key secret",type:"password",placeholder:"key secret",help_url:"https://cloud.higgsfield.ai/",help_text:"The matching secret for the key ID. Stored encrypted in the local vault — never echoed back.",required:!0}],verify_endpoint:"/api/connections/higgsfield/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["higgsfield_generate_image","higgsfield_product_photoshoot","higgsfield_generate_video"],engines:[],logo_glyph:"higgsfield"}}];e.map(a=>a.slug);let f=[{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."}],g={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:f.map(a=>`skill:open-design-${a.slug}`),published_count:f.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."}},h=[{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"]}}],i=[{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"]}],j=[{slug:"paid-campaign-build",title:"Paid Campaign Build",category:"marketing",description:"Structure a paid campaign — objective, audiences, ad sets, creative spec, and budget — ready for approval-gated launch.",tools:["create_artifact","web_search"],risk_summary:"Plans campaigns; every publish/budget set stays approval-gated.",tags:["marketing","ads","campaign"],invocation:"/paid-campaign",trigger_examples:["build a Meta campaign","plan a paid launch","structure ad sets"]},{slug:"ads-reporting",title:"Ads Reporting",category:"marketing",description:"Pull spend, CPA, ROAS, and reach from connected ad accounts into one weekly performance report.",tools:["create_artifact","file_write"],risk_summary:"Read-only reporting; no external writes.",tags:["marketing","ads","reporting"],invocation:"/ads-report",trigger_examples:["weekly ads report","how did campaigns perform","ROAS summary"]},{slug:"content-calendar",title:"Content Calendar",category:"content",description:"Plan a multi-channel content calendar with post drafts, captions, and a scheduled queue.",tools:["create_artifact","file_write"],risk_summary:"Drafts and schedules; every publish stays approval-gated.",tags:["content","social","calendar"],invocation:"/content-calendar",trigger_examples:["plan this month of content","build a content calendar","draft social posts"]},{slug:"lead-research",title:"Lead Research",category:"sales",description:"Build a qualified target list, enrich it, and prep a personalized outreach sequence.",tools:["web_search","web_fetch","create_artifact"],risk_summary:"Research + drafts; sequence enrollment and bulk sends are approval-gated.",tags:["sales","outreach","leads"],invocation:"/lead-research",trigger_examples:["build a target list","find leads for X","prep an outreach sequence"]},{slug:"ticket-reply",title:"Ticket Reply",category:"support",description:"Triage support tickets, draft replies in brand voice, and flag escalations.",tools:["gmail_messages_list","file_write"],risk_summary:"Drafts replies; outbound sends/status changes are approval-gated.",tags:["support","helpdesk","tickets"],invocation:"/ticket-reply",trigger_examples:["triage support tickets","draft ticket replies","escalate this ticket"]},{slug:"runway-model",title:"Runway Model",category:"finance",description:"Turn revenue/expense data into a runway model and P&L summary with scenario sensitivity.",tools:["file_read","create_artifact"],risk_summary:"Advisory analysis; any money movement is approval-gated.",tags:["finance","runway","modeling"],invocation:"/runway",trigger_examples:["model our runway","P&L summary","how many months of cash"]}],k=[{slug:"higgsfield-generate",title:"Higgsfield — Generate",invocation:"/higgsfield:generate",upstream:"higgsfield-generate",description:"Generate images and videos across 30+ models (Flux, Kling, Veo, etc.), with Marketing Studio for branded ads and a Virality Predictor for scoring.",trigger_examples:["generate an image","make a video with kling","predict virality"],uses_tools:["higgsfield_generate_image","higgsfield_generate_video"]},{slug:"higgsfield-soul-id",title:"Higgsfield — Soul ID",invocation:"/higgsfield:soul-id",upstream:"higgsfield-soul-id",description:"Train reusable, face-faithful identity models and return reference IDs for use in later generation tasks.",trigger_examples:["train a soul id","create a face identity model","reusable avatar identity"],uses_tools:["higgsfield_generate_image"]},{slug:"higgsfield-product-photoshoot",title:"Higgsfield — Product Photoshoot",invocation:"/higgsfield:product-photoshoot",upstream:"higgsfield-product-photoshoot",description:"Create brand-quality product imagery in 10 modes — studio, lifestyle, Pinterest, hero banner, ad packs, virtual try-on, and more.",trigger_examples:["product photoshoot","studio shots of this product","lifestyle product images"],uses_tools:["higgsfield_product_photoshoot","higgsfield_generate_image"]},{slug:"higgsfield-marketplace-cards",title:"Higgsfield — Marketplace Cards",invocation:"/higgsfield:marketplace-cards",upstream:"higgsfield-marketplace-cards",description:"Generate marketplace product cards with compliant images and A+ style modules.",trigger_examples:["marketplace product card","a+ content module","listing card images"],uses_tools:["higgsfield_generate_image"]}],l={slug:"higgsfield",title:"Higgsfield AI Skills",description:"MIT-licensed image and video generation pack from higgsfield-ai/skills: generate across 30+ models, train Soul ID identities, run product photoshoots, and build marketplace cards.",category:"media",author:"higgsfield-ai",source_kind:"github",source_url:"https://github.com/higgsfield-ai/skills",version:null,risk_summary:"External generation bundle — every skill calls the Higgsfield AI API and needs a Higgsfield API key. No code executes locally, but generation is an external write; keep approval-gated.",tags:["design","media","image-generation","video-generation","higgsfield","mit"],manifest:{item_refs:k.map(a=>`skill:${a.slug}`),published_count:k.length,license:"MIT",requires_connection:"higgsfield",unlocks_tool_slugs:["higgsfield_generate_image","higgsfield_product_photoshoot","higgsfield_generate_video"],install_hint:"npx skills add higgsfield-ai/skills",note:"Requires a Higgsfield API key. Connect Higgsfield (Connections) to add your key, then the generate image/video tools are usable."}},m=[{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 n(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(`
3250
3268
  UPDATE marketplace_items
3251
3269
  SET title=?, description=?, category=?, author=?, source_kind=?,
3252
3270
  source_url=?, version=?, manifest_json=?, risk_summary=?, tags=?
@@ -3259,7 +3277,7 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
3259
3277
  `).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(`
3260
3278
  INSERT OR IGNORE INTO marketplace_installations (item_id, installed, installed_at)
3261
3279
  VALUES (?, ?, ?)
3262
- `).run(e,d,d?new Date().toISOString():null)}}let m={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"}]}},n={slug:"business-suite",title:"Business Agent Suite",description:"A whole company in a box: a cross-department roster of business agents, department skill packs, and the connections they need. Marketing, ads, content, sales, support, ops, finance, legal, product, web, analyst, and a Chief of Staff to run the cadence.",category:"business",author:"madarx",source_kind:"builtin",source_url:null,version:"0.1.0",risk_summary:"Agents install with safe built-in tools only. Ad spend, sends, CRM writes, and deploys stay approval-gated and require connecting + granting the matching service first.",tags:["business","company","marketing","sales","ops","starter"],manifest:{module_id:"business-suite",agents:["chief-of-staff","marketing-lead","ads-media-buyer","content-social","sales-bd","customer-support","ops-manager","finance-ops","legal-compliance","product-pm","web-ecommerce","competitor-scout"],tools:["web_search","web_fetch","file_read","file_write","create_artifact","email_send","gmail_messages_list","calendar_events_list","create_workflow_definition"],skill_packs:["market-research","report-builder","paid-campaign-build","ads-reporting","content-calendar","lead-research","ticket-reply","runway-model"],connections:["resend","meta-ads","google-ads","ga4","hubspot-crm"],workflow_templates:[],nav:[]}};function o(a){try{for(let b of i)l(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 j)l(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,uses_tools:b.tools,trigger_examples:b.trigger_examples}});for(let b of h)l(a,"skill",b);for(let b of k)l(a,"bundle",b);for(let b of f)l(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}});l(a,"bundle",g),function(a){try{for(let b of e){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(`
3280
+ `).run(e,d,d?new Date().toISOString():null)}}let o={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"}]}},p={slug:"business-suite",title:"Business Agent Suite",description:"A whole company in a box: a cross-department roster of business agents, department skill packs, and the connections they need. Marketing, ads, content, sales, support, ops, finance, legal, product, web, analyst, and a Chief of Staff to run the cadence.",category:"business",author:"madarx",source_kind:"builtin",source_url:null,version:"0.1.0",risk_summary:"Agents install with safe built-in tools only. Ad spend, sends, CRM writes, and deploys stay approval-gated and require connecting + granting the matching service first.",tags:["business","company","marketing","sales","ops","starter"],manifest:{module_id:"business-suite",agents:["chief-of-staff","marketing-lead","ads-media-buyer","content-social","sales-bd","customer-support","ops-manager","finance-ops","legal-compliance","product-pm","web-ecommerce","competitor-scout"],tools:["web_search","web_fetch","file_read","file_write","create_artifact","email_send","gmail_messages_list","calendar_events_list","create_workflow_definition"],skill_packs:["market-research","report-builder","paid-campaign-build","ads-reporting","content-calendar","lead-research","ticket-reply","runway-model"],connections:["resend","meta-ads","google-ads","ga4","hubspot-crm"],workflow_templates:[],nav:[]}};function q(a){try{for(let b of i)n(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 j)n(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,uses_tools:b.tools,trigger_examples:b.trigger_examples}});for(let b of h)n(a,"skill",b);for(let b of k)n(a,"skill",{slug:b.slug,title:b.title,description:b.description,category:"media",author:"higgsfield-ai",source_kind:"github",source_url:`https://github.com/higgsfield-ai/skills/tree/main/${b.upstream}`,version:null,risk_summary:"Calls the external Higgsfield AI generation API and requires a Higgsfield API key. Generation is an external write — keep approval-gated.",tags:["design","media","image-generation","video-generation","higgsfield","mit"],manifest:{invocation:b.invocation,upstream_slug:b.upstream,trigger_examples:b.trigger_examples,uses_tools:b.uses_tools,requires_connection:"higgsfield"}});for(let b of(n(a,"bundle",l),m))n(a,"bundle",b);for(let b of f)n(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}});n(a,"bundle",g),function(a){try{for(let b of e){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(`
3263
3281
  UPDATE marketplace_items
3264
3282
  SET title = ?, description = ?, category = ?, author = ?, source_kind = ?,
3265
3283
  source_url = ?, version = ?, manifest_json = ?, risk_summary = ?, tags = ?
@@ -3272,7 +3290,7 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
3272
3290
  `).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(`
3273
3291
  INSERT OR IGNORE INTO marketplace_installations (item_id, installed)
3274
3292
  VALUES (?, 0)
3275
- `).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),l(a,"module",m),l(a,"module",n)}catch(a){console.warn("[marketplace-seeds] seed failed:",a?.message||a)}}i.map(a=>a.slug);let p=["research","comms","documents","data","web"];function q(){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 i)a.has(b.category)||a.set(b.category,[]),a.get(b.category).push(b.slug);return p.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=i.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"}j.map(a=>a.slug),h.map(a=>a.slug),k.map(a=>a.slug),f.map(a=>`open-design-${a.slug}`),g.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(`
3293
+ `).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),n(a,"module",o),n(a,"module",p)}catch(a){console.warn("[marketplace-seeds] seed failed:",a?.message||a)}}i.map(a=>a.slug);let r=["research","comms","documents","data","web"];function s(){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 i)a.has(b.category)||a.set(b.category,[]),a.get(b.category).push(b.slug);return r.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=i.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"}j.map(a=>a.slug),h.map(a=>a.slug),m.map(a=>a.slug),k.map(a=>a.slug),l.slug,f.map(a=>`open-design-${a.slug}`),g.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(`
3276
3294
  INSERT INTO activity_log
3277
3295
  (id, actor_type, actor_id, agent_id, run_id, entity_type, entity_id, action, details_json, created_at, project_id)
3278
3296
  VALUES (?, ?, ?, ?, ?, 'project', ?, ?, ?, ?, ?)
@@ -3297,10 +3315,168 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
3297
3315
  `).all(c.id),u=Math.max(12,Math.min(500,Number(b.changelogLimit)||200)),v=o(c.id,{limit:u}),w=function(a=[]){let b={root:[]};for(let c of a){let a=(c.details?.folder_id??null)||"root";b[a]||(b[a]=[]),b[a].push(c)}return b}(v);return{project:c,folders:k,files:j,artifacts:l,libraryItems:[...j,...l].sort((a,b)=>String(b.updated_at||b.created_at||"").localeCompare(String(a.updated_at||a.created_at||""))).slice(0,2*i),agents:n,activeTasks:Number(q),activeMissions:Number(r),recentRuns:t,changelog:v,changelogByFolder:w,counts:{folders:k.length,files:d.prepare("SELECT COUNT(*) AS count FROM disk_files WHERE project_id = ?").get(c.id)?.count||0,artifacts:d.prepare("SELECT COUNT(*) AS count FROM artifacts WHERE project_id = ?").get(c.id)?.count||0,localOnly:d.prepare("SELECT COUNT(*) AS count FROM disk_files WHERE project_id = ? AND local_only = 1").get(c.id)?.count||0,agents:n.length,activeTasks:Number(q),activeMissions:Number(r)}}}function q(a={}){let b=String(a.name||"").trim();if(!b)throw Error("name is required");let c=(0,g.getDb)(),d=a.slug?j(a.slug):j(b);if(a.slug&&c.prepare("SELECT 1 FROM projects WHERE slug = ?").get(d)){let a=Error("project slug already exists");throw a.code="PROJECT_SLUG_EXISTS",a}let h=a.slug?d:function(a,b){let c=j(b),d=2;for(;a.prepare("SELECT 1 FROM projects WHERE slug = ?").get(c);)c=`${j(b)}-${d++}`;return c}(c,d),i=a.id||h,k=function(a,b){let c=String(a||"").trim();if(!c)return l(b);let d=c.startsWith("~")?f.join(process.env.HOME||"",c.slice(1)):c;if(!f.isAbsolute(d)){let a=Error("folder_path must be an absolute path (or start with ~)");throw a.code="PROJECT_FOLDER_NOT_ABSOLUTE",a}return f.normalize(d)}(a.folder_path,h);try{e.mkdirSync(k,{recursive:!0})}catch(b){let a=Error(`failed to create project folder: ${b.message}`);throw a.code="PROJECT_FOLDER_MKDIR_FAILED",a.cause=b,a}let m=(0,g.nowIso)();return c.prepare(`
3298
3316
  INSERT INTO projects (id, slug, name, color, description, status, folder_path, created_at)
3299
3317
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
3300
- `).run(i,h,b,a.color||"#111318",a.description||null,a.status||"active",k,m),y(i,h),s(h)}function r(a={}){let b=(0,g.getDb)(),c=a.status||"active";return"all"===c?b.prepare("SELECT * FROM projects ORDER BY status ASC, created_at ASC").all().map(k):b.prepare("SELECT * FROM projects WHERE status = ? ORDER BY created_at ASC").all(c).map(k)}function s(a){let b=(0,g.getDb)();return k(b.prepare("SELECT * FROM projects WHERE id = ? OR slug = ? LIMIT 1").get(a,a))}function t(a,b={}){let c=s(a);if(!c)return null;let d=["name","color","description","status","folder_path"],e=Object.entries(b).filter(([a,b])=>d.includes(a)&&void 0!==b);if(!e.length)return c;let f=e.map(([a])=>`${a} = ?`).join(", "),h=e.map(([,a])=>a);return(0,g.getDb)().prepare(`UPDATE projects SET ${f} WHERE id = ?`).run(...h,c.id),s(c.id)}function u(a){let b=s(a);if(!b)return null;if(b.id===B){let a=Error("The Personal project is the default scope and cannot be archived.");throw a.code="PROJECT_PROTECTED",a}return t(a,{status:"archived"})}function v(a=(0,g.getDb)()){try{return a.prepare("UPDATE artifacts SET project_id = ? WHERE project_id IS NULL OR project_id = ''").run(B).changes||0}catch{return 0}}function w(a){let b=s(a);if(!b)return{deleted:!1,reason:"not_found"};if(b.id===B){let a=Error("The Personal project is the default scope and cannot be deleted.");throw a.code="PROJECT_PROTECTED",a}let c=(0,g.getDb)();c.exec("BEGIN");try{for(let a of C)try{c.prepare(`DELETE FROM ${a} WHERE project_id = ?`).run(b.id)}catch(a){if(!/no such (table|column)/i.test(String(a?.message||a)))throw a}c.prepare("DELETE FROM projects WHERE id = ?").run(b.id),c.exec("COMMIT")}catch(a){try{c.exec("ROLLBACK")}catch{}throw a}try{let a=f.join(z,b.slug);e.rmSync(a,{recursive:!0,force:!0})}catch{}return{deleted:!0,project:b}}function x(a=(0,g.getDb)()){let b=a.prepare("SELECT * FROM projects WHERE id = 'personal' OR slug = 'personal'").get();if(b){if(!b.folder_path){let c=l(b.slug);try{e.mkdirSync(c,{recursive:!0})}catch{}a.prepare("UPDATE projects SET folder_path = ? WHERE id = ?").run(c,b.id)}return y(b.id,b.slug,a),v(a),k(a.prepare("SELECT * FROM projects WHERE id = 'personal'").get())}let c=(()=>{try{return e.existsSync(A)}catch{return!1}})(),d=a.prepare("SELECT 1 FROM projects LIMIT 1").get();if(c||d)return null;let f=(0,g.nowIso)(),h=l(B);try{e.mkdirSync(h,{recursive:!0})}catch{}a.prepare("INSERT INTO projects (id, slug, name, color, description, status, folder_path, created_at) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)").run(B,B,"Personal","#c2452a","Your personal project — keep agents, files, memory, and integrations scoped to you.",h,f),y(B,B,a),v(a);try{e.writeFileSync(A,f)}catch{}return k(a.prepare("SELECT * FROM projects WHERE id = ?").get(B))}function y(a,b,c=(0,g.getDb)()){try{let d=c.prepare("SELECT id FROM disk_folders WHERE project_id = ? AND parent_id IS NULL LIMIT 1").get(a);if(d)return d.id;let e=`df-root-${a}`.replace(/[^a-zA-Z0-9_-]/g,"-"),f=(0,g.nowIso)();return c.prepare("INSERT INTO disk_folders (id, project_id, parent_id, name, path, created_at, updated_at) VALUES (?, ?, NULL, ?, ?, ?, ?)").run(e,a,b||a,`/${b||a}/`,f,f),e}catch{return null}}d()}catch(a){d(a)}})},63289:(a,b,c)=>{"use strict";c.d(b,{S:()=>g});let d=/<\s*tool_(call|response)\s*>/i,e=/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/i,f=/"(snippet|tool_response)"\s*:/i;function g(a){let b=String(a||"").replace(/```[\s\S]*?```/g," ").replace(/~~~[\s\S]*?~~~/g," ").replace(/`[^`\n]*`/g," ");return!!b.trim()&&(!!(d.test(b)||e.test(b)&&((b.match(/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/gi)||[]).length>=2||f.test(b)))||!1)}},65451:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{resolveAnthropicApiKey:()=>g});var e=c(24516),f=a([e]);function g(){try{let a=(0,e.getSecret)("ANTHROPIC_API_KEY");if(a)return a}catch{}return process.env.ANTHROPIC_API_KEY||null}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},67179:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{getConfig:()=>g,setConfig:()=>h});var e=c(34255),f=a([e]);function g(a,b=null){if(!a)return b;let c=(0,e.getDb)().prepare("SELECT value FROM config WHERE key = ?").get(String(a));return c?c.value:b}function h(a,b){if(!a)throw Error("config key is required");let c=null==b?"":String(b);return(0,e.getDb)().prepare(`
3318
+ `).run(i,h,b,a.color||"#111318",a.description||null,a.status||"active",k,m),y(i,h),s(h)}function r(a={}){let b=(0,g.getDb)(),c=a.status||"active";return"all"===c?b.prepare("SELECT * FROM projects ORDER BY status ASC, created_at ASC").all().map(k):b.prepare("SELECT * FROM projects WHERE status = ? ORDER BY created_at ASC").all(c).map(k)}function s(a){let b=(0,g.getDb)();return k(b.prepare("SELECT * FROM projects WHERE id = ? OR slug = ? LIMIT 1").get(a,a))}function t(a,b={}){let c=s(a);if(!c)return null;let d=["name","color","description","status","folder_path"],e=Object.entries(b).filter(([a,b])=>d.includes(a)&&void 0!==b);if(!e.length)return c;let f=e.map(([a])=>`${a} = ?`).join(", "),h=e.map(([,a])=>a);return(0,g.getDb)().prepare(`UPDATE projects SET ${f} WHERE id = ?`).run(...h,c.id),s(c.id)}function u(a){let b=s(a);if(!b)return null;if(b.id===B){let a=Error("The Personal project is the default scope and cannot be archived.");throw a.code="PROJECT_PROTECTED",a}return t(a,{status:"archived"})}function v(a=(0,g.getDb)()){try{return a.prepare("UPDATE artifacts SET project_id = ? WHERE project_id IS NULL OR project_id = ''").run(B).changes||0}catch{return 0}}function w(a){let b=s(a);if(!b)return{deleted:!1,reason:"not_found"};if(b.id===B){let a=Error("The Personal project is the default scope and cannot be deleted.");throw a.code="PROJECT_PROTECTED",a}let c=(0,g.getDb)();c.exec("BEGIN");try{for(let a of C)try{c.prepare(`DELETE FROM ${a} WHERE project_id = ?`).run(b.id)}catch(a){if(!/no such (table|column)/i.test(String(a?.message||a)))throw a}c.prepare("DELETE FROM projects WHERE id = ?").run(b.id),c.exec("COMMIT")}catch(a){try{c.exec("ROLLBACK")}catch{}throw a}try{let a=f.join(z,b.slug);e.rmSync(a,{recursive:!0,force:!0})}catch{}return{deleted:!0,project:b}}function x(a=(0,g.getDb)()){let b=a.prepare("SELECT * FROM projects WHERE id = 'personal' OR slug = 'personal'").get();if(b){if(!b.folder_path){let c=l(b.slug);try{e.mkdirSync(c,{recursive:!0})}catch{}a.prepare("UPDATE projects SET folder_path = ? WHERE id = ?").run(c,b.id)}return y(b.id,b.slug,a),v(a),k(a.prepare("SELECT * FROM projects WHERE id = 'personal'").get())}let c=(()=>{try{return e.existsSync(A)}catch{return!1}})(),d=a.prepare("SELECT 1 FROM projects LIMIT 1").get();if(c||d)return null;let f=(0,g.nowIso)(),h=l(B);try{e.mkdirSync(h,{recursive:!0})}catch{}a.prepare("INSERT INTO projects (id, slug, name, color, description, status, folder_path, created_at) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)").run(B,B,"Personal","#c2452a","Your personal project — keep agents, files, memory, and integrations scoped to you.",h,f),y(B,B,a),v(a);try{e.writeFileSync(A,f)}catch{}return k(a.prepare("SELECT * FROM projects WHERE id = ?").get(B))}function y(a,b,c=(0,g.getDb)()){try{let d=c.prepare("SELECT id FROM disk_folders WHERE project_id = ? AND parent_id IS NULL LIMIT 1").get(a);if(d)return d.id;let e=`df-root-${a}`.replace(/[^a-zA-Z0-9_-]/g,"-"),f=(0,g.nowIso)();return c.prepare("INSERT INTO disk_folders (id, project_id, parent_id, name, path, created_at, updated_at) VALUES (?, ?, NULL, ?, ?, ?, ?)").run(e,a,b||a,`/${b||a}/`,f,f),e}catch{return null}}d()}catch(a){d(a)}})},63289:(a,b,c)=>{"use strict";c.d(b,{S:()=>g});let d=/<\s*tool_(call|response)\s*>/i,e=/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/i,f=/"(snippet|tool_response)"\s*:/i;function g(a){let b=String(a||"").replace(/```[\s\S]*?```/g," ").replace(/~~~[\s\S]*?~~~/g," ").replace(/`[^`\n]*`/g," ");return!!b.trim()&&(!!(d.test(b)||e.test(b)&&((b.match(/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/gi)||[]).length>=2||f.test(b)))||!1)}},65451:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{resolveAnthropicApiKey:()=>g});var e=c(24516),f=a([e]);function g(){try{let a=(0,e.getSecret)("ANTHROPIC_API_KEY");if(a)return a}catch{}return process.env.ANTHROPIC_API_KEY||null}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},66469:(a,b,c)=>{"use strict";function d(a){return String(a??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function e(a=[],b={}){let c=(Array.isArray(a)?a:[]).filter(a=>a&&a.url),f=d(b.title||"Higgsfield"),g=d(b.caption||""),h=c.map(a=>{let b=d(a.url);return"video"===a.kind?`<video class="media" src="${b}" controls loop muted playsinline poster="${d(a.thumbnail||"")}"></video>`:`<a class="frame" href="${b}" target="_blank" rel="noopener"><img class="media" src="${b}" alt="${g||"Generated media"}" loading="lazy" /></a>`}).join("\n");return`<!DOCTYPE html>
3319
+ <html lang="en">
3320
+ <head>
3321
+ <meta charset="utf-8" />
3322
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
3323
+ <title>${f}</title>
3324
+ <style>
3325
+ :root { --onyx:#0f0f10; --graphite:#1b1b1e; --bone:#f4f1ea; --muted:#9a968d; --mars:#d4452f; --line:#2a2a2e; }
3326
+ * { box-sizing:border-box; margin:0; padding:0; }
3327
+ body { background:radial-gradient(120% 100% at 50% 0%, #161618 0%, var(--onyx) 60%); color:var(--bone);
3328
+ font-family:ui-sans-serif,-apple-system,"SF Pro Text","Segoe UI",system-ui,sans-serif; min-height:100vh;
3329
+ padding:clamp(20px,4vw,48px); display:flex; flex-direction:column; align-items:center; gap:18px; }
3330
+ .head { width:min(960px,100%); display:flex; align-items:baseline; justify-content:space-between; gap:16px; }
3331
+ .brand { font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:var(--muted); }
3332
+ .brand b { color:var(--bone); font-weight:600; }
3333
+ .grid { width:min(960px,100%); display:grid; gap:14px;
3334
+ grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); }
3335
+ .frame { display:block; border:1px solid var(--line); border-radius:16px; overflow:hidden; background:#0b0b0c;
3336
+ box-shadow:0 30px 80px -45px rgba(0,0,0,.9); }
3337
+ .media { display:block; width:100%; height:auto; max-height:78vh; object-fit:contain; background:#0b0b0c; }
3338
+ .cap { width:min(960px,100%); font-size:14px; line-height:1.5; color:#d9d5cc; }
3339
+ .report { width:min(960px,100%); border-top:1px solid var(--line); padding-top:16px; }
3340
+ .report summary { cursor:pointer; color:var(--muted); font-size:12px; letter-spacing:.08em; text-transform:uppercase; }
3341
+ .report-body { margin-top:12px; font-size:13.5px; line-height:1.55; color:#cfcabf; }
3342
+ .report-body table { border-collapse:collapse; width:100%; margin:8px 0; }
3343
+ .report-body td, .report-body th { border:1px solid var(--line); padding:6px 9px; text-align:left; }
3344
+ </style>
3345
+ </head>
3346
+ <body>
3347
+ <header class="head"><span class="brand"><b>Higgsfield</b> &middot; ${f}</span></header>
3348
+ <div class="grid">${h||'<p class="cap">No media returned.</p>'}</div>
3349
+ ${g?`<p class="cap">${g}</p>`:""}
3350
+ ${b.reportHtml?`<details class="report"><summary>Design spec &amp; notes</summary><div class="report-body">${b.reportHtml}</div></details>`:""}
3351
+ </body>
3352
+ </html>`}function f(a={},b={}){let c="video"===b.kind?"video":"image",e=d(a.url||""),g=d(b.prompt||""),h=d(a.status||"completed"),i="video"===c?"Video":"Image",j="video"===c?`<video class="media" src="${e}" controls autoplay loop muted playsinline poster="${d(a.thumbnail||"")}"></video>`:`<img class="media" src="${e}" alt="${g||"Generated image"}" />`,k=g?`<p class="prompt">${g}</p>`:"";return`<!DOCTYPE html>
3353
+ <html lang="en">
3354
+ <head>
3355
+ <meta charset="utf-8" />
3356
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
3357
+ <title>Higgsfield ${i}</title>
3358
+ <style>
3359
+ :root {
3360
+ --onyx: #0f0f10;
3361
+ --graphite: #1b1b1e;
3362
+ --bone: #f4f1ea;
3363
+ --muted: #9a968d;
3364
+ --mars: #d4452f;
3365
+ --line: #2a2a2e;
3366
+ }
3367
+ * { box-sizing: border-box; margin: 0; padding: 0; }
3368
+ body {
3369
+ background: radial-gradient(120% 100% at 50% 0%, #161618 0%, var(--onyx) 60%);
3370
+ color: var(--bone);
3371
+ font-family: ui-sans-serif, -apple-system, "SF Pro Text", "Segoe UI", system-ui, sans-serif;
3372
+ min-height: 100vh;
3373
+ display: flex;
3374
+ align-items: center;
3375
+ justify-content: center;
3376
+ padding: clamp(20px, 5vw, 56px);
3377
+ }
3378
+ .card {
3379
+ width: min(880px, 100%);
3380
+ background: var(--graphite);
3381
+ border: 1px solid var(--line);
3382
+ border-radius: 18px;
3383
+ overflow: hidden;
3384
+ box-shadow: 0 30px 80px -40px rgba(0,0,0,0.9);
3385
+ }
3386
+ .head {
3387
+ display: flex;
3388
+ align-items: baseline;
3389
+ justify-content: space-between;
3390
+ gap: 16px;
3391
+ padding: 18px 22px;
3392
+ border-bottom: 1px solid var(--line);
3393
+ }
3394
+ .brand {
3395
+ font-size: 12px;
3396
+ letter-spacing: 0.18em;
3397
+ text-transform: uppercase;
3398
+ color: var(--muted);
3399
+ }
3400
+ .brand b { color: var(--bone); font-weight: 600; }
3401
+ .status {
3402
+ font-size: 11px;
3403
+ letter-spacing: 0.12em;
3404
+ text-transform: uppercase;
3405
+ color: var(--mars);
3406
+ display: inline-flex;
3407
+ align-items: center;
3408
+ gap: 7px;
3409
+ }
3410
+ .status::before {
3411
+ content: "";
3412
+ width: 7px; height: 7px; border-radius: 50%;
3413
+ background: var(--mars);
3414
+ }
3415
+ .stage {
3416
+ background: #0b0b0c;
3417
+ display: flex;
3418
+ align-items: center;
3419
+ justify-content: center;
3420
+ padding: 0;
3421
+ }
3422
+ .media {
3423
+ display: block;
3424
+ width: 100%;
3425
+ max-height: 70vh;
3426
+ object-fit: contain;
3427
+ background: #0b0b0c;
3428
+ }
3429
+ .foot { padding: 18px 22px 22px; }
3430
+ .prompt {
3431
+ font-size: 15px;
3432
+ line-height: 1.55;
3433
+ color: #d9d5cc;
3434
+ }
3435
+ .meta {
3436
+ margin-top: 14px;
3437
+ display: flex;
3438
+ flex-wrap: wrap;
3439
+ gap: 10px;
3440
+ }
3441
+ .pill {
3442
+ font-size: 12px;
3443
+ color: var(--muted);
3444
+ border: 1px solid var(--line);
3445
+ border-radius: 999px;
3446
+ padding: 5px 11px;
3447
+ }
3448
+ .open {
3449
+ margin-top: 16px;
3450
+ display: inline-block;
3451
+ font-size: 13px;
3452
+ color: var(--bone);
3453
+ text-decoration: none;
3454
+ border-bottom: 1px solid var(--mars);
3455
+ padding-bottom: 2px;
3456
+ }
3457
+ </style>
3458
+ </head>
3459
+ <body>
3460
+ <main class="card">
3461
+ <header class="head">
3462
+ <span class="brand"><b>Higgsfield</b> &middot; ${i}</span>
3463
+ <span class="status">${h}</span>
3464
+ </header>
3465
+ <div class="stage">${j}</div>
3466
+ <div class="foot">
3467
+ ${k}
3468
+ <div class="meta">
3469
+ <span class="pill">Source: Higgsfield AI</span>
3470
+ <span class="pill">Type: ${i}</span>
3471
+ </div>
3472
+ ${e?`<a class="open" href="${e}" target="_blank" rel="noopener">Open original</a>`:""}
3473
+ </div>
3474
+ </main>
3475
+ </body>
3476
+ </html>`}c.d(b,{i:()=>f,o:()=>e})},67179:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{getConfig:()=>g,setConfig:()=>h});var e=c(34255),f=a([e]);function g(a,b=null){if(!a)return b;let c=(0,e.getDb)().prepare("SELECT value FROM config WHERE key = ?").get(String(a));return c?c.value:b}function h(a,b){if(!a)throw Error("config key is required");let c=null==b?"":String(b);return(0,e.getDb)().prepare(`
3301
3477
  INSERT INTO config (key, value) VALUES (?, ?)
3302
3478
  ON CONFLICT(key) DO UPDATE SET value = excluded.value
3303
- `).run(String(a),c),c}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},68732:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{x:()=>k,y:()=>l});var e=c(31421),f=c(60105),g=c(8437),h=c(26531),i=a([f,g]);function j(a){return(0,h.nc)(String(a||"").slice(0,Number(process.env.MADARX_TOOL_OUTPUT_MAX_BYTES||5e4)))}function k(a={}){let b=String(a.command||""),c=Array.isArray(a.args)?a.args.map(String):[],{path:d}=(0,h.hC)(a.cwd||"."),e=(0,h.IB)(b,c);if(e.blocked)throw Error(e.reason);return{command:b,args:c,cwd:d,classified:e}}async function l(a={},b={}){let{command:c,args:d,cwd:h,classified:i}=k(a);if(i.approval_required&&!b.owner_trusted&&!(0,g.v)(a.approval_id,{action_type:"terminal_run",matches:a=>{var b;return a.command===c&&(b=a.args,JSON.stringify(b||[])===JSON.stringify(d||[]))&&a.cwd===h}})){let a=(0,g.D6)({action_type:"terminal_run",risk:i.risk,summary:`Run ${c} ${d.join(" ")}`.trim(),payload:{command:c,args:d,cwd:h,reason:i.reason}});return{ok:!1,status:"approval_required",approval_request_id:a.id,reason:i.reason}}let m=Math.max(1,Math.min(6e5,Number(a.timeout_ms||process.env.MADARX_TERMINAL_TIMEOUT_MS||18e4))),n=Date.now();return await new Promise(a=>{let b="",g="",i=(0,e.spawn)(c,d,{cwd:h,shell:!1,stdio:["ignore","pipe","pipe"]}),k=setTimeout(()=>i.kill("SIGTERM"),m);i.stdout.on("data",a=>{b+=a}),i.stderr.on("data",a=>{g+=a}),i.on("error",e=>{clearTimeout(k),(0,f.appendAudit)({type:"local.terminal_run",summary:`terminal_run failed: ${c}`,status:"failed",meta:{command:c,args:d,cwd:h,error:e.message}}),a({ok:!1,tool:"terminal_run",status:"failed",command:c,args:d,cwd:h,error:e.message,stdout:j(b),stderr:j(g)})}),i.on("close",(e,i)=>{clearTimeout(k);let l=i?"timeout":0===e?"complete":"failed";(0,f.appendAudit)({type:"local.terminal_run",summary:`terminal_run ${l}: ${c}`,status:l,meta:{command:c,args:d,cwd:h,exit_code:e,signal:i,duration_ms:Date.now()-n,stdout_preview:j(b),stderr_preview:j(g)}}),a({ok:0===e&&!i,tool:"terminal_run",status:l,command:c,args:d,cwd:h,exit_code:e,signal:i,stdout:j(b),stderr:j(g),duration_ms:Date.now()-n})})})}[f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},69102:(a,b,c)=>{"use strict";let d,e;c.d(b,{K3:()=>f,rU:()=>l,tj:()=>j});let f=Number(process.env.MINES_OCR_THRESHOLD_CHARS_PER_PAGE)||80,g=process.env.MINES_OCR_LANGS||"spa+eng";async function h(){return void 0===d&&(d=(async()=>{try{return await import("tesseract.js")}catch{return null}})().catch(()=>null)),d}async function i(){return void 0===e&&(e=(async()=>{try{let a=await import("pdf-to-png-converter");if("function"==typeof a?.pdfToPng)return async b=>(await a.pdfToPng(b,{viewportScale:2})).map((a,b)=>({page:a.pageNumber||b+1,buffer:a.content}))}catch{}return null})().catch(()=>null)),e}function j(a,b){let c=b;return(null==c||Number.isNaN(Number(c)))&&(c=String(a??"").trim().length),Number(c)<f}async function k(a,b=g){let c=await h(),d=c?.recognize||c?.default?.recognize;if("function"!=typeof d)return null;try{let{data:c}=await d(a,b);return{text:String(c?.text||""),confidence:Number(c?.confidence??0)}}catch{return null}}async function l(a,b){let c,d=await i(),e=await h();if(!d||!e)return{available:!1,pages:[]};try{c=await d(a)}catch{return{available:!1,pages:[]}}let[f,g]=Array.isArray(b)?b:[null,null],j=[];for(let a of c){if(null!=f&&a.page<f||null!=g&&a.page>g)continue;let b=await k(a.buffer);j.push({page:a.page,text:b?.text||"",confidence:b?.confidence??0})}return{available:!0,pages:j}}},69143:a=>{"use strict";a.exports=JSON.parse('{"schema_version":1,"slug":"contract-review","name":"Contract Review","version":1,"description":"Paste a contract draft and route it through an automated clause review, then counsel approval, then a packaged review report.","category":"legal","source":"marketplace","status":"published","stages":[{"slug":"intake","name":"Contract intake","kind":"intake_form","config":{"form_schema":{"title":"Contract Review — Intake","description":"Paste the contract text and a few details for the reviewer.","fields":[{"name":"counterparty","label":"Counterparty name","type":"text","required":true},{"name":"contract_title","label":"Contract title","type":"text","required":true},{"name":"contract_type","label":"Contract type","type":"select","required":true,"options":["MSA","SOW","NDA","DPA","Order Form","Other"]},{"name":"value_usd","label":"Contract value (USD)","type":"number","required":false,"min":0},{"name":"contract_text","label":"Contract text","type":"textarea","required":true,"min_length":200,"placeholder":"Paste the full contract text here. Minimum 200 characters."},{"name":"notes","label":"Reviewer notes","type":"textarea","required":false}]}}},{"slug":"clause-review","name":"Automated clause review","kind":"agent_run","config":{"agent_template_slug":"contract-reviewer","prompt":"You are a contract reviewer. Read the contract text in the intake payload and produce a structured review. Return strict JSON only, no surrounding prose: { \\"outcome\\": \\"pass\\" | \\"reject\\", \\"flags\\": [{ \\"clause\\": string, \\"severity\\": \\"low\\" | \\"medium\\" | \\"high\\", \\"concern\\": string, \\"suggested_edit\\": string }], \\"overall_recommendation\\": \\"approve\\" | \\"amend\\" | \\"reject\\", \\"summary\\": \\"one paragraph\\" }. Set outcome=\\"reject\\" only when the contract is so broken counsel cannot fix it (corrupted text, wrong document, illegal clauses). Set outcome=\\"pass\\" otherwise — counsel approval is the real gate. Focus on: indemnity scope, liability cap, IP assignment, auto-renewal, termination for convenience, data-processing addendum, governing law. If a clause is missing entirely from the contract, list it as severity high with concern \\"missing\\".","output_schema":"contract_review_v1","timeout_ms":90000,"on_outcome":{"pass":"counsel-approval","reject":"fail"}},"on_pass_stage_slug":"counsel-approval","on_fail_stage_slug":null},{"slug":"counsel-approval","name":"Counsel approval","kind":"human_approval","config":{"action_type":"process.stage.approve","risk":"high","summary_template":"Approve contract review for {{intake.contract_title}} with {{intake.counterparty}} — recommendation {{clause-review.overall_recommendation}}"},"on_pass_stage_slug":"final-package","on_fail_stage_slug":null},{"slug":"final-package","name":"Review report","kind":"package","config":{"title_template":"Contract review — {{intake.contract_title}}","include_stages":["intake","clause-review","counsel-approval"]}}]}')},69286:(a,b,c)=>{"use strict";c.d(b,{XI:()=>e,fd:()=>f,yQ:()=>g});let d=new Map;function e(a){let b=String(a||"");b&&d.set(b,(d.get(b)||0)+1)}function f(a){let b=String(a||"");if(!b)return;let c=(d.get(b)||0)-1;c<=0?d.delete(b):d.set(b,c)}function g(a){return(d.get(String(a||""))||0)>0}},69635:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{f:()=>l,x:()=>k});var e=c(24516),f=c(58282),g=a([e,f]);[e,f]=g.then?(await g)():g;let m="https://api.resend.com";function h(a,b={}){try{let c=(0,e.getSecret)(a,{agent_id:b.agent_id,project_id:b.project_id});if(c)return c}catch{}return process.env[a]||null}function i(a,b={}){let c=h(a,b);if(!c)throw Error(`${a} not configured`);return c}async function j(a){try{let b=await a.json();return b?.message||b?.name||`HTTP ${a.status}`}catch{return`HTTP ${a.status}`}}async function k(a={},b={}){let c=String(a.to||"").trim();if(!c)throw Error('"to" is required');let d=String(a.subject||"").trim();if(!d)throw Error('"subject" is required');if(!a.text&&!a.html)throw Error('Either "text" or "html" body content is required');let e=function(a){let b=String(a||"").trim(),c=b.lastIndexOf("@");return c<0?null:b.slice(c+1).toLowerCase().trim()}(c);if(!e)throw Error(`"to" must be a valid email address containing "@"; got: ${c}`);let g=a.recipient_domain?String(a.recipient_domain).toLowerCase().trim():null;if(!g)throw Error(`"recipient_domain" is required and must be set to "${e}" (the domain of the "to" address). Retry with: { ..., recipient_domain: "${e}" }`);if(g!==e)throw Error(`"recipient_domain" mismatch: declared "${g}" but "to" address "${c}" has domain "${e}". Set recipient_domain: "${e}" and retry.`);let l=i("RESEND_API_KEY",b),n=b.agent_id??null,o=a.from?String(a.from).trim():null;if(o||(o=h("RESEND_FROM_EMAIL",b)),!o)throw Error('Sender address not configured. Set RESEND_FROM_EMAIL via the secrets vault or pass "from" explicitly in the input. Resend\'s test sender (onboarding@resend.dev) requires a verified account.');let p={from:o,to:c,subject:d,...a.text?{text:String(a.text)}:{},...a.html?{html:String(a.html)}:{},...a.reply_to?{reply_to:String(a.reply_to)}:{}},q=(0,f.N)("email_send",n),r=await q(`${m}/emails`,{method:"POST",headers:{Authorization:`Bearer ${l}`,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(p)});if(!r.ok){let a=await j(r);throw Error(`Resend API error (${r.status}): ${a}`)}let s=await r.json();return{ok:!0,id:s.id,to:c,recipient_domain:e}}async function l(a={},b={}){let c=String(a.email_id||"").trim();if(!c)throw Error('"email_id" is required');let d=i("RESEND_API_KEY",b),e=b.agent_id??null,g=(0,f.N)("email_status_lookup",e),h=await g(`${m}/emails/${encodeURIComponent(c)}`,{headers:{Authorization:`Bearer ${d}`,Accept:"application/json"}});if(!h.ok){let a=await j(h);throw Error(`Resend API error (${h.status}): ${a}`)}let k=await h.json();return{id:k.id,to:k.to,from:k.from,subject:k.subject,last_event:k.last_event,created_at:k.created_at}}d()}catch(a){d(a)}})},69722:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{zc:()=>j});var e=c(34255),f=c(18530),g=c(69143),h=c(4249),i=a([e]);e=(i.then?(await i)():i)[0];let k={"vendor-onboarding":f,"contract-review":g,"support-escalation":h},l=[{slug:"vendor-onboarding",title:"Vendor Onboarding",category:"procurement",tags:["workflow","procurement","starter"],risk_summary:"Intake → automated risk review → buyer sign-off → onboarding pack. All write actions are gated by human_approval."},{slug:"contract-review",title:"Contract Review",category:"legal",tags:["workflow","legal","starter"],risk_summary:"Intake → automated clause review → counsel approval (high-risk gate) → review report. Drafts only; no signature step."},{slug:"support-escalation",title:"Support Escalation",category:"support",tags:["workflow","support","starter"],risk_summary:"Intake → automated triage → supervisor sign-off → resolution pack. Customer-visible copy never sent without human approval."}].map(a=>{let b=k[a.slug];return{...a,description:b.description,author:"madarx",source_kind:"builtin",source_url:null,version:"1.0",spec:b}});function j(a){try{for(let b of l)!function(a,b){let c=`workflow:${b.slug}`,d=JSON.stringify({summary:b.description,source_spec_json:b.spec}),f=JSON.stringify(b.tags||[]),g=a.prepare("SELECT id FROM marketplace_items WHERE kind='workflow' AND slug=?").get(b.slug),h=[b.title,b.description,b.category,b.author,b.source_kind,b.source_url,b.version,d,b.risk_summary,f];if(g)return a.prepare("UPDATE marketplace_items SET title=?, description=?, category=?, author=?, source_kind=?, source_url=?, version=?, manifest_json=?, risk_summary=?, tags=? WHERE id=?").run(...h,c);a.prepare("INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, source_url, version, manifest_json, risk_summary, tags, created_at) VALUES (?, 'workflow', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(c,b.slug,...h,(0,e.nowIso)()),a.prepare("INSERT OR IGNORE INTO marketplace_installations (item_id, installed) VALUES (?, 0)").run(c)}(a,b)}catch(a){console.warn("[marketplace-workflows] seed failed:",a?.message||a)}}l.map(a=>a.slug),d()}catch(a){d(a)}})},70845:(a,b,c)=>{"use strict";c.d(b,{H:()=>f});var d=c(14972);function e(a,b,c){var e;let f=(0,d.uX)(b);return{label:a,value_usd:f.in_situ_value_usd,delta_pct:(e=f.in_situ_value_usd,null==e||null==c||0===c?null:Math.round((e-c)/c*1e4)/100),assumptions:b}}function f(a={},b={}){let c=(0,d.uX)(a),g=c.in_situ_value_usd,h=Number(b.grade_std_au_gpt??a.grade_std_au_gpt??0)||0,i=Number(b.grade_std_cu_pct??a.grade_std_cu_pct??0)||0,j=Number(b.grade_std_ag_gpt??a.grade_std_ag_gpt??0)||0,k=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},price_au_usd_oz:null==a.price_au_usd_oz?a.price_au_usd_oz:a.price_au_usd_oz*c,price_ag_usd_oz:null==a.price_ag_usd_oz?a.price_ag_usd_oz:a.price_ag_usd_oz*c,price_cu_usd_lb:null==a.price_cu_usd_lb?a.price_cu_usd_lb:a.price_cu_usd_lb*c},g)),l=[["-2σ",-2],["-1σ",-1],["base",0],["+1σ",1],["+2σ",2]].map(([b,c])=>e(b,{...{...a},grade_au_gpt:null==a.grade_au_gpt?a.grade_au_gpt:Math.max(0,a.grade_au_gpt+c*h),grade_ag_gpt:null==a.grade_ag_gpt?a.grade_ag_gpt:Math.max(0,a.grade_ag_gpt+c*j),grade_cu_pct:null==a.grade_cu_pct?a.grade_cu_pct:Math.max(0,a.grade_cu_pct+c*i)},g)),m=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},recovery_au:null==a.recovery_au?a.recovery_au:Math.min(1,Math.max(0,a.recovery_au*c)),recovery_ag:null==a.recovery_ag?a.recovery_ag:Math.min(1,Math.max(0,a.recovery_ag*c)),recovery_cu:null==a.recovery_cu?a.recovery_cu:Math.min(1,Math.max(0,a.recovery_cu*c))},g)),n=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},in_situ_factor:null==a.in_situ_factor?a.in_situ_factor:a.in_situ_factor*c},g));return{base_value_usd:g,base_result:c,drivers:{commodity_price:k,grade:l,recovery:m,in_situ_factor:n}}}},70952:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{f:()=>n});var e=c(34255),f=c(44986),g=c(69102),h=c(14207),i=a([e,h]);[e,h]=i.then?(await i)():i;let o=Number(process.env.MINES_CHUNK_TOKENS)||600,p=Number(process.env.MINES_CHUNK_OVERLAP_TOKENS)||100;async function j(a){try{switch(a){case"pdf-parse":return await import("pdf-parse");case"mammoth":return await import("mammoth");case"officeparser":return await import("officeparser");default:return null}}catch{return null}}function k(a){return Math.ceil(String(a||"").length/4)}let q=["de","la","el","que","en","los","para","con","del","una","por","se","su"],r=["the","of","and","to","in","for","is","that","with","from","this","are"];function l(a){let b=String(a||"").toLowerCase().split(/[^a-záéíóúñ]+/i).filter(Boolean).slice(0,400);if(b.length<5)return"es";let c=0,d=0;for(let a of b)q.includes(a)&&c++,r.includes(a)&&d++;return d>1.2*c?"en":"es"}async function m(a,b,c,d){if("pdf"===b){let b=await j("pdf-parse"),e="function"==typeof b?b:"function"==typeof b?.default?b.default:null,f=b?.PDFParse||b?.default?.PDFParse||null;if(!e&&!f)return{available:!1,error:"parser_unavailable:pdf",pages:[]};let h=d.readDocument(a),i="",k=1,l=null;try{if(f){let a=new f({data:h}),b=await a.getText();try{a.destroy?.()}catch{}i=String(b?.text||""),k=Number(b?.total)||(Array.isArray(b?.pages)?b.pages.length:1)||1,Array.isArray(b?.pages)&&(l=b.pages.map((a,b)=>({page:Number(a?.num??a?.page??b+1),text:String(a?.text||"")})))}else{let a=await e(h);i=String(a?.text||""),k=Number(a?.numpages)||1}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"pdf"),pages:[]}}let m=i.length/k;if(c||(0,g.tj)(i,m)){let b=await (0,g.rU)(a);return b.available?{available:!0,isScanned:!0,ocrApplied:!0,pageCount:b.pages.length||k,pages:b.pages.map(a=>({page:a.page,text:a.text}))}:{available:!0,isScanned:!0,ocrApplied:!1,ocrSkipped:!0,pageCount:k,pages:[]}}if(l)return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:k,pages:l};let n=i.includes("\f")?i.split("\f"):[i];return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:k,pages:n.map((a,b)=>({page:b+1,text:a}))}}if("docx"===b){let b=await j("mammoth"),c=b?.extractRawText||b?.default?.extractRawText;if("function"!=typeof c)return{available:!1,error:"parser_unavailable:docx",pages:[]};try{let b=await c({path:a});return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:1,pages:[{page:1,text:b?.value||""}]}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"docx"),pages:[]}}}if("pptx"===b){let b=await j("officeparser"),c=b?.parseOfficeAsync||b?.default?.parseOfficeAsync||b?.parseOffice||b?.default?.parseOffice;if("function"!=typeof c)return{available:!1,error:"parser_unavailable:pptx",pages:[]};try{let b=await c(a);return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:1,pages:[{page:1,text:String(b||"")}]}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"pptx"),pages:[]}}}return{available:!1,error:"unsupported_file_type:"+b,pages:[]}}async function n(a,b={}){let c=a?.source_document_id;if(!c)return{status:"error",error:"source_document_id_required"};let d=(0,e.getDb)(),i=d.prepare("SELECT id, project_id, document_category, original_path, file_type FROM mines_source_documents WHERE id = ?").get(c);if(!i)return{status:"error",error:"source_document_not_found"};let j=d.prepare(`
3479
+ `).run(String(a),c),c}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},68732:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{x:()=>k,y:()=>l});var e=c(31421),f=c(60105),g=c(8437),h=c(26531),i=a([f,g]);function j(a){return(0,h.nc)(String(a||"").slice(0,Number(process.env.MADARX_TOOL_OUTPUT_MAX_BYTES||5e4)))}function k(a={}){let b=String(a.command||""),c=Array.isArray(a.args)?a.args.map(String):[],{path:d}=(0,h.hC)(a.cwd||"."),e=(0,h.IB)(b,c);if(e.blocked)throw Error(e.reason);return{command:b,args:c,cwd:d,classified:e}}async function l(a={},b={}){let{command:c,args:d,cwd:h,classified:i}=k(a);if(i.approval_required&&!b.owner_trusted&&!(0,g.v)(a.approval_id,{action_type:"terminal_run",matches:a=>{var b;return a.command===c&&(b=a.args,JSON.stringify(b||[])===JSON.stringify(d||[]))&&a.cwd===h}})){let a=(0,g.D6)({action_type:"terminal_run",risk:i.risk,summary:`Run ${c} ${d.join(" ")}`.trim(),payload:{command:c,args:d,cwd:h,reason:i.reason}});return{ok:!1,status:"approval_required",approval_request_id:a.id,reason:i.reason}}let m=Math.max(1,Math.min(6e5,Number(a.timeout_ms||process.env.MADARX_TERMINAL_TIMEOUT_MS||18e4))),n=Date.now();return await new Promise(a=>{let b="",g="",i=(0,e.spawn)(c,d,{cwd:h,shell:!1,stdio:["ignore","pipe","pipe"]}),k=setTimeout(()=>i.kill("SIGTERM"),m);i.stdout.on("data",a=>{b+=a}),i.stderr.on("data",a=>{g+=a}),i.on("error",e=>{clearTimeout(k),(0,f.appendAudit)({type:"local.terminal_run",summary:`terminal_run failed: ${c}`,status:"failed",meta:{command:c,args:d,cwd:h,error:e.message}}),a({ok:!1,tool:"terminal_run",status:"failed",command:c,args:d,cwd:h,error:e.message,stdout:j(b),stderr:j(g)})}),i.on("close",(e,i)=>{clearTimeout(k);let l=i?"timeout":0===e?"complete":"failed";(0,f.appendAudit)({type:"local.terminal_run",summary:`terminal_run ${l}: ${c}`,status:l,meta:{command:c,args:d,cwd:h,exit_code:e,signal:i,duration_ms:Date.now()-n,stdout_preview:j(b),stderr_preview:j(g)}}),a({ok:0===e&&!i,tool:"terminal_run",status:l,command:c,args:d,cwd:h,exit_code:e,signal:i,stdout:j(b),stderr:j(g),duration_ms:Date.now()-n})})})}[f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},69102:(a,b,c)=>{"use strict";let d,e;c.d(b,{K3:()=>f,rU:()=>l,tj:()=>j});let f=Number(process.env.MINES_OCR_THRESHOLD_CHARS_PER_PAGE)||80,g=process.env.MINES_OCR_LANGS||"spa+eng";async function h(){return void 0===d&&(d=(async()=>{try{return await import("tesseract.js")}catch{return null}})().catch(()=>null)),d}async function i(){return void 0===e&&(e=(async()=>{try{let a=await import("pdf-to-png-converter");if("function"==typeof a?.pdfToPng)return async b=>(await a.pdfToPng(b,{viewportScale:2})).map((a,b)=>({page:a.pageNumber||b+1,buffer:a.content}))}catch{}return null})().catch(()=>null)),e}function j(a,b){let c=b;return(null==c||Number.isNaN(Number(c)))&&(c=String(a??"").trim().length),Number(c)<f}async function k(a,b=g){let c=await h(),d=c?.recognize||c?.default?.recognize;if("function"!=typeof d)return null;try{let{data:c}=await d(a,b);return{text:String(c?.text||""),confidence:Number(c?.confidence??0)}}catch{return null}}async function l(a,b){let c,d=await i(),e=await h();if(!d||!e)return{available:!1,pages:[]};try{c=await d(a)}catch{return{available:!1,pages:[]}}let[f,g]=Array.isArray(b)?b:[null,null],j=[];for(let a of c){if(null!=f&&a.page<f||null!=g&&a.page>g)continue;let b=await k(a.buffer);j.push({page:a.page,text:b?.text||"",confidence:b?.confidence??0})}return{available:!0,pages:j}}},69143:a=>{"use strict";a.exports=JSON.parse('{"schema_version":1,"slug":"contract-review","name":"Contract Review","version":1,"description":"Paste a contract draft and route it through an automated clause review, then counsel approval, then a packaged review report.","category":"legal","source":"marketplace","status":"published","stages":[{"slug":"intake","name":"Contract intake","kind":"intake_form","config":{"form_schema":{"title":"Contract Review — Intake","description":"Paste the contract text and a few details for the reviewer.","fields":[{"name":"counterparty","label":"Counterparty name","type":"text","required":true},{"name":"contract_title","label":"Contract title","type":"text","required":true},{"name":"contract_type","label":"Contract type","type":"select","required":true,"options":["MSA","SOW","NDA","DPA","Order Form","Other"]},{"name":"value_usd","label":"Contract value (USD)","type":"number","required":false,"min":0},{"name":"contract_text","label":"Contract text","type":"textarea","required":true,"min_length":200,"placeholder":"Paste the full contract text here. Minimum 200 characters."},{"name":"notes","label":"Reviewer notes","type":"textarea","required":false}]}}},{"slug":"clause-review","name":"Automated clause review","kind":"agent_run","config":{"agent_template_slug":"contract-reviewer","prompt":"You are a contract reviewer. Read the contract text in the intake payload and produce a structured review. Return strict JSON only, no surrounding prose: { \\"outcome\\": \\"pass\\" | \\"reject\\", \\"flags\\": [{ \\"clause\\": string, \\"severity\\": \\"low\\" | \\"medium\\" | \\"high\\", \\"concern\\": string, \\"suggested_edit\\": string }], \\"overall_recommendation\\": \\"approve\\" | \\"amend\\" | \\"reject\\", \\"summary\\": \\"one paragraph\\" }. Set outcome=\\"reject\\" only when the contract is so broken counsel cannot fix it (corrupted text, wrong document, illegal clauses). Set outcome=\\"pass\\" otherwise — counsel approval is the real gate. Focus on: indemnity scope, liability cap, IP assignment, auto-renewal, termination for convenience, data-processing addendum, governing law. If a clause is missing entirely from the contract, list it as severity high with concern \\"missing\\".","output_schema":"contract_review_v1","timeout_ms":90000,"on_outcome":{"pass":"counsel-approval","reject":"fail"}},"on_pass_stage_slug":"counsel-approval","on_fail_stage_slug":null},{"slug":"counsel-approval","name":"Counsel approval","kind":"human_approval","config":{"action_type":"process.stage.approve","risk":"high","summary_template":"Approve contract review for {{intake.contract_title}} with {{intake.counterparty}} — recommendation {{clause-review.overall_recommendation}}"},"on_pass_stage_slug":"final-package","on_fail_stage_slug":null},{"slug":"final-package","name":"Review report","kind":"package","config":{"title_template":"Contract review — {{intake.contract_title}}","include_stages":["intake","clause-review","counsel-approval"]}}]}')},69286:(a,b,c)=>{"use strict";c.d(b,{XI:()=>e,fd:()=>f,su:()=>h,yQ:()=>g});let d=new Map;function e(a){let b=String(a||"");b&&d.set(b,(d.get(b)||0)+1)}function f(a){let b=String(a||"");if(!b)return;let c=(d.get(b)||0)-1;c<=0?d.delete(b):d.set(b,c)}function g(a){return(d.get(String(a||""))||0)>0}function h(){return Array.from(d.keys()).filter(a=>(d.get(a)||0)>0)}},69635:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{f:()=>l,x:()=>k});var e=c(24516),f=c(58282),g=a([e,f]);[e,f]=g.then?(await g)():g;let m="https://api.resend.com";function h(a,b={}){try{let c=(0,e.getSecret)(a,{agent_id:b.agent_id,project_id:b.project_id});if(c)return c}catch{}return process.env[a]||null}function i(a,b={}){let c=h(a,b);if(!c)throw Error(`${a} not configured`);return c}async function j(a){try{let b=await a.json();return b?.message||b?.name||`HTTP ${a.status}`}catch{return`HTTP ${a.status}`}}async function k(a={},b={}){let c=String(a.to||"").trim();if(!c)throw Error('"to" is required');let d=String(a.subject||"").trim();if(!d)throw Error('"subject" is required');if(!a.text&&!a.html)throw Error('Either "text" or "html" body content is required');let e=function(a){let b=String(a||"").trim(),c=b.lastIndexOf("@");return c<0?null:b.slice(c+1).toLowerCase().trim()}(c);if(!e)throw Error(`"to" must be a valid email address containing "@"; got: ${c}`);let g=a.recipient_domain?String(a.recipient_domain).toLowerCase().trim():null;if(!g)throw Error(`"recipient_domain" is required and must be set to "${e}" (the domain of the "to" address). Retry with: { ..., recipient_domain: "${e}" }`);if(g!==e)throw Error(`"recipient_domain" mismatch: declared "${g}" but "to" address "${c}" has domain "${e}". Set recipient_domain: "${e}" and retry.`);let l=i("RESEND_API_KEY",b),n=b.agent_id??null,o=a.from?String(a.from).trim():null;if(o||(o=h("RESEND_FROM_EMAIL",b)),!o)throw Error('Sender address not configured. Set RESEND_FROM_EMAIL via the secrets vault or pass "from" explicitly in the input. Resend\'s test sender (onboarding@resend.dev) requires a verified account.');let p={from:o,to:c,subject:d,...a.text?{text:String(a.text)}:{},...a.html?{html:String(a.html)}:{},...a.reply_to?{reply_to:String(a.reply_to)}:{}},q=(0,f.N)("email_send",n),r=await q(`${m}/emails`,{method:"POST",headers:{Authorization:`Bearer ${l}`,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(p)});if(!r.ok){let a=await j(r);throw Error(`Resend API error (${r.status}): ${a}`)}let s=await r.json();return{ok:!0,id:s.id,to:c,recipient_domain:e}}async function l(a={},b={}){let c=String(a.email_id||"").trim();if(!c)throw Error('"email_id" is required');let d=i("RESEND_API_KEY",b),e=b.agent_id??null,g=(0,f.N)("email_status_lookup",e),h=await g(`${m}/emails/${encodeURIComponent(c)}`,{headers:{Authorization:`Bearer ${d}`,Accept:"application/json"}});if(!h.ok){let a=await j(h);throw Error(`Resend API error (${h.status}): ${a}`)}let k=await h.json();return{id:k.id,to:k.to,from:k.from,subject:k.subject,last_event:k.last_event,created_at:k.created_at}}d()}catch(a){d(a)}})},69722:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{zc:()=>j});var e=c(34255),f=c(18530),g=c(69143),h=c(4249),i=a([e]);e=(i.then?(await i)():i)[0];let k={"vendor-onboarding":f,"contract-review":g,"support-escalation":h},l=[{slug:"vendor-onboarding",title:"Vendor Onboarding",category:"procurement",tags:["workflow","procurement","starter"],risk_summary:"Intake → automated risk review → buyer sign-off → onboarding pack. All write actions are gated by human_approval."},{slug:"contract-review",title:"Contract Review",category:"legal",tags:["workflow","legal","starter"],risk_summary:"Intake → automated clause review → counsel approval (high-risk gate) → review report. Drafts only; no signature step."},{slug:"support-escalation",title:"Support Escalation",category:"support",tags:["workflow","support","starter"],risk_summary:"Intake → automated triage → supervisor sign-off → resolution pack. Customer-visible copy never sent without human approval."}].map(a=>{let b=k[a.slug];return{...a,description:b.description,author:"madarx",source_kind:"builtin",source_url:null,version:"1.0",spec:b}});function j(a){try{for(let b of l)!function(a,b){let c=`workflow:${b.slug}`,d=JSON.stringify({summary:b.description,source_spec_json:b.spec}),f=JSON.stringify(b.tags||[]),g=a.prepare("SELECT id FROM marketplace_items WHERE kind='workflow' AND slug=?").get(b.slug),h=[b.title,b.description,b.category,b.author,b.source_kind,b.source_url,b.version,d,b.risk_summary,f];if(g)return a.prepare("UPDATE marketplace_items SET title=?, description=?, category=?, author=?, source_kind=?, source_url=?, version=?, manifest_json=?, risk_summary=?, tags=? WHERE id=?").run(...h,c);a.prepare("INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, source_url, version, manifest_json, risk_summary, tags, created_at) VALUES (?, 'workflow', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(c,b.slug,...h,(0,e.nowIso)()),a.prepare("INSERT OR IGNORE INTO marketplace_installations (item_id, installed) VALUES (?, 0)").run(c)}(a,b)}catch(a){console.warn("[marketplace-workflows] seed failed:",a?.message||a)}}l.map(a=>a.slug),d()}catch(a){d(a)}})},70845:(a,b,c)=>{"use strict";c.d(b,{H:()=>f});var d=c(14972);function e(a,b,c){var e;let f=(0,d.uX)(b);return{label:a,value_usd:f.in_situ_value_usd,delta_pct:(e=f.in_situ_value_usd,null==e||null==c||0===c?null:Math.round((e-c)/c*1e4)/100),assumptions:b}}function f(a={},b={}){let c=(0,d.uX)(a),g=c.in_situ_value_usd,h=Number(b.grade_std_au_gpt??a.grade_std_au_gpt??0)||0,i=Number(b.grade_std_cu_pct??a.grade_std_cu_pct??0)||0,j=Number(b.grade_std_ag_gpt??a.grade_std_ag_gpt??0)||0,k=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},price_au_usd_oz:null==a.price_au_usd_oz?a.price_au_usd_oz:a.price_au_usd_oz*c,price_ag_usd_oz:null==a.price_ag_usd_oz?a.price_ag_usd_oz:a.price_ag_usd_oz*c,price_cu_usd_lb:null==a.price_cu_usd_lb?a.price_cu_usd_lb:a.price_cu_usd_lb*c},g)),l=[["-2σ",-2],["-1σ",-1],["base",0],["+1σ",1],["+2σ",2]].map(([b,c])=>e(b,{...{...a},grade_au_gpt:null==a.grade_au_gpt?a.grade_au_gpt:Math.max(0,a.grade_au_gpt+c*h),grade_ag_gpt:null==a.grade_ag_gpt?a.grade_ag_gpt:Math.max(0,a.grade_ag_gpt+c*j),grade_cu_pct:null==a.grade_cu_pct?a.grade_cu_pct:Math.max(0,a.grade_cu_pct+c*i)},g)),m=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},recovery_au:null==a.recovery_au?a.recovery_au:Math.min(1,Math.max(0,a.recovery_au*c)),recovery_ag:null==a.recovery_ag?a.recovery_ag:Math.min(1,Math.max(0,a.recovery_ag*c)),recovery_cu:null==a.recovery_cu?a.recovery_cu:Math.min(1,Math.max(0,a.recovery_cu*c))},g)),n=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},in_situ_factor:null==a.in_situ_factor?a.in_situ_factor:a.in_situ_factor*c},g));return{base_value_usd:g,base_result:c,drivers:{commodity_price:k,grade:l,recovery:m,in_situ_factor:n}}}},70952:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{f:()=>n});var e=c(34255),f=c(44986),g=c(69102),h=c(14207),i=a([e,h]);[e,h]=i.then?(await i)():i;let o=Number(process.env.MINES_CHUNK_TOKENS)||600,p=Number(process.env.MINES_CHUNK_OVERLAP_TOKENS)||100;async function j(a){try{switch(a){case"pdf-parse":return await import("pdf-parse");case"mammoth":return await import("mammoth");case"officeparser":return await import("officeparser");default:return null}}catch{return null}}function k(a){return Math.ceil(String(a||"").length/4)}let q=["de","la","el","que","en","los","para","con","del","una","por","se","su"],r=["the","of","and","to","in","for","is","that","with","from","this","are"];function l(a){let b=String(a||"").toLowerCase().split(/[^a-záéíóúñ]+/i).filter(Boolean).slice(0,400);if(b.length<5)return"es";let c=0,d=0;for(let a of b)q.includes(a)&&c++,r.includes(a)&&d++;return d>1.2*c?"en":"es"}async function m(a,b,c,d){if("pdf"===b){let b=await j("pdf-parse"),e="function"==typeof b?b:"function"==typeof b?.default?b.default:null,f=b?.PDFParse||b?.default?.PDFParse||null;if(!e&&!f)return{available:!1,error:"parser_unavailable:pdf",pages:[]};let h=d.readDocument(a),i="",k=1,l=null;try{if(f){let a=new f({data:h}),b=await a.getText();try{a.destroy?.()}catch{}i=String(b?.text||""),k=Number(b?.total)||(Array.isArray(b?.pages)?b.pages.length:1)||1,Array.isArray(b?.pages)&&(l=b.pages.map((a,b)=>({page:Number(a?.num??a?.page??b+1),text:String(a?.text||"")})))}else{let a=await e(h);i=String(a?.text||""),k=Number(a?.numpages)||1}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"pdf"),pages:[]}}let m=i.length/k;if(c||(0,g.tj)(i,m)){let b=await (0,g.rU)(a);return b.available?{available:!0,isScanned:!0,ocrApplied:!0,pageCount:b.pages.length||k,pages:b.pages.map(a=>({page:a.page,text:a.text}))}:{available:!0,isScanned:!0,ocrApplied:!1,ocrSkipped:!0,pageCount:k,pages:[]}}if(l)return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:k,pages:l};let n=i.includes("\f")?i.split("\f"):[i];return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:k,pages:n.map((a,b)=>({page:b+1,text:a}))}}if("docx"===b){let b=await j("mammoth"),c=b?.extractRawText||b?.default?.extractRawText;if("function"!=typeof c)return{available:!1,error:"parser_unavailable:docx",pages:[]};try{let b=await c({path:a});return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:1,pages:[{page:1,text:b?.value||""}]}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"docx"),pages:[]}}}if("pptx"===b){let b=await j("officeparser"),c=b?.parseOfficeAsync||b?.default?.parseOfficeAsync||b?.parseOffice||b?.default?.parseOffice;if("function"!=typeof c)return{available:!1,error:"parser_unavailable:pptx",pages:[]};try{let b=await c(a);return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:1,pages:[{page:1,text:String(b||"")}]}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"pptx"),pages:[]}}}return{available:!1,error:"unsupported_file_type:"+b,pages:[]}}async function n(a,b={}){let c=a?.source_document_id;if(!c)return{status:"error",error:"source_document_id_required"};let d=(0,e.getDb)(),i=d.prepare("SELECT id, project_id, document_category, original_path, file_type FROM mines_source_documents WHERE id = ?").get(c);if(!i)return{status:"error",error:"source_document_not_found"};let j=d.prepare(`
3304
3480
  UPDATE mines_source_documents
3305
3481
  SET extraction_status = ?, extraction_error = ?, language = ?, is_scanned = ?,
3306
3482
  ocr_applied = ?, page_count = ?, avg_chars_per_page = ?, updated_at = ?
@@ -3323,14 +3499,14 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
3323
3499
  SELECT COUNT(*) AS n,
3324
3500
  SUM(CASE WHEN au_ppm IS NOT NULL OR ag_ppm IS NOT NULL OR cu_pct IS NOT NULL THEN 1 ELSE 0 END) AS grade_n
3325
3501
  FROM mines_assay_samples WHERE project_id = ?
3326
- `).get(a)||{n:0,grade_n:0}).grade_n||0)>0,i=d.has("resource_estimate");d.has("reserve_estimate"),d.has("opex"),d.has("production_schedule");let j=h.filter(a=>!d.has(a)),k=0===j.length,l=i||f,m=String(c.asset_stage||"").toLowerCase(),n=m.includes("exploration")||m.includes("prospect")||m.includes("early");if("t1_in_situ"===b.force_tier)return{status:"ok",project_id:a,tier:"t1_in_situ",t1_ready:l,t2_ready:k,t2_blocked:!0,blocking_inputs_missing:j,t2_blocking_reason:j.length?`T2 DCF blocked: missing ${j.join(", ")}.`:"T1 was explicitly requested.",confidence:i?"moderate":"indicative",reason:"T1 in-situ valuation explicitly requested."};if(k&&!n)return{status:"ok",project_id:a,tier:"t2_dcf",t1_ready:l,t2_ready:!0,t2_blocked:!1,blocking_inputs_missing:[],t2_blocking_reason:null,confidence:"modelled",reason:"Reserve estimate, production schedule, and operating-cost facts are present; DCF is allowed."};let o="t2_dcf"===b.force_tier,p=[...new Set([...j,...k&&n?["asset_stage_not_dcf_ready"]:[]])];return{status:"ok",project_id:a,tier:"t1_in_situ",t1_ready:l,t2_ready:!1,t2_blocked:!0,blocking_inputs_missing:p,t2_blocking_reason:p.length?`T2 DCF blocked: missing or unsuitable inputs (${p.join(", ")}).`:"T2 DCF blocked by exploration-stage policy.",confidence:i?"moderate":"indicative",reason:o?"Forced T2 request was rejected because DCF prerequisites are incomplete or the asset stage is not DCF-ready; using T1 in-situ instead.":"Exploration/resource-stage projects use T1 in-situ until reserve, production schedule, and cost inputs are present."}}d()}catch(a){d(a)}})},72189:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{X:()=>t,Z6:()=>p,dd:()=>n,mr:()=>r,sq:()=>q,sv:()=>o,vO:()=>s});var e=c(73024),f=c(76760),g=c(60105),h=c(8437),i=c(26531),j=a([g,h]);[g,h]=j.then?(await j)():j;let u=new Set([".git","node_modules",".next","data"]);function k(a,b,c={}){(0,g.appendAudit)({type:`local.${a}`,summary:`${a} ${b}`,status:b,meta:c})}function l(a,b,c){return(0,h.D6)({action_type:a,risk:"medium",summary:`${a} requested for ${c}`,payload:{input:{...b,content:b.content?`[${String(b.content).length} chars]`:void 0},path:c}})}function m(a){return b=>b.path===a}async function n(a={}){let{path:b}=(0,i.hC)(a.path),c=Number(process.env.MADARX_FILE_READ_MAX_BYTES||1e5),d=e.statSync(b);if(!d.isFile())throw Error("Path is not a file");if(d.size>c)throw Error(`File too large: ${d.size} bytes`);let f=e.readFileSync(b,"utf8").split(/\r?\n/),g=Math.max(1,Number(a.offset||1)),h=Math.max(1,Math.min(2e3,Number(a.limit||500))),j=f.slice(g-1,g-1+h).join("\n");return k("file_read","complete",{path:b,bytes:Buffer.byteLength(j)}),{ok:!0,tool:"file_read",path:b,content:(0,i.nc)(j),metadata:{line_count:f.length,offset:g,limit:h}}}async function o(a={}){let{path:b}=(0,i.hC)(a.path||"."),c=Math.max(1,Math.min(500,Number(a.limit||100))),d=[];for(let a of e.readdirSync(b,{withFileTypes:!0})){if(d.length>=c)break;try{(0,i.hC)(f.join(b,a.name))}catch{continue}u.has(a.name)||d.push({name:a.name,type:a.isDirectory()?"directory":a.isFile()?"file":"other"})}return k("directory_list","complete",{path:b,count:d.length}),{ok:!0,tool:"directory_list",path:b,entries:d,metadata:{count:d.length}}}function p(a={}){let{path:b}=(0,i.hC)(a.path);if((0,i.Oe)(b))throw Error(`Write access denied: path is under a read-only root: ${a.path}`);return{absPath:b}}async function q(a={},b={}){let{absPath:c}=p(a);if(!b.owner_trusted&&!(0,h.v)(a.approval_id,{action_type:"file_write",matches:m(c)})){let b=l("file_write",a,c);return{ok:!1,status:"approval_required",approval_request_id:b.id,reason:"File writes require approval"}}return!1!==a.create_dirs&&e.mkdirSync(f.dirname(c),{recursive:!0}),e.writeFileSync(c,String(a.content??""),"utf8"),k("file_write","complete",{path:c}),{ok:!0,tool:"file_write",path:c,metadata:{bytes:Buffer.byteLength(String(a.content??""))}}}function r(a={}){let{path:b}=(0,i.hC)(a.path);if((0,i.Oe)(b))throw Error(`Write access denied: path is under a read-only root: ${a.path}`);let c=String(a.old_string??"");if(!c)throw Error("old_string is required");let d=e.readFileSync(b,"utf8"),f=d.split(c).length-1;if(!f)throw Error("old_string not found");if(f>1&&!a.replace_all)throw Error("old_string is ambiguous");return{absPath:b,content:d,matches:f,oldString:c}}async function s(a={},b={}){let{absPath:c,content:d,matches:f,oldString:g}=r(a),i=String(a.new_string??"");if(!b.owner_trusted&&!(0,h.v)(a.approval_id,{action_type:"file_patch",matches:m(c)})){let b=l("file_patch",{...a,new_string:`[${i.length} chars]`},c);return{ok:!1,status:"approval_required",approval_request_id:b.id,reason:"File patches require approval"}}return e.writeFileSync(c,a.replace_all?d.split(g).join(i):d.replace(g,i),"utf8"),k("file_patch","complete",{path:c,replacements:a.replace_all?f:1}),{ok:!0,tool:"file_patch",path:c,metadata:{replacements:a.replace_all?f:1}}}async function t(a={}){let{path:b}=(0,i.hC)(a.path||"."),c=String(a.pattern||"");if(!c)throw Error("pattern is required");let d=Math.max(1,Math.min(200,Number(a.limit||50))),g=RegExp(c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"i"),h=a.target||"content",j=a.file_glob?String(a.file_glob):null,l=j?RegExp("^"+j.split("*").map(a=>a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i"):null,m=[];for(let a of function a(b,c=[],d=1e3){if(c.length>=d)return c;for(let g of e.readdirSync(b,{withFileTypes:!0})){if(u.has(g.name))continue;let e=f.join(b,g.name);if(g.isDirectory()?a(e,c,d):g.isFile()&&c.push(e),c.length>=d)break}return c}(b,[],5e3)){if(m.length>=d)break;try{(0,i.hC)(a)}catch{continue}if(!l||l.test(f.basename(a))){if("path"===h||"name"===h){g.test("name"===h?f.basename(a):a)&&m.push({path:a});continue}e.statSync(a).size>25e4||/\.sqlite/.test(a)||/^\.env/.test(f.basename(a))||e.readFileSync(a,"utf8").split(/\r?\n/).forEach((b,c)=>{m.length<d&&g.test(b)&&m.push({path:a,line:c+1,text:(0,i.nc)(b)})})}}return k("file_search","complete",{path:b,count:m.length}),{ok:!0,tool:"file_search",path:b,results:m,metadata:{count:m.length}}}d()}catch(a){d(a)}})},72326:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{let E;c.d(b,{$k:()=>o,GK:()=>q,Iu:()=>A,M2:()=>z,No:()=>w,Qp:()=>p,Ys:()=>t,bD:()=>y,d:()=>D});var e=c(76760),f=c(73024),g=c(48161),h=c(31421),i=c(73136),j=c(19151),k=c(9001),l=c(9381),m=c(51867),n=a([j,k]);[j,k]=n.then?(await n)():n;let F=e.resolve(e.dirname((0,i.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/agent-engines.js")),".."),G=process.env.OLLAMA_BASE_URL||"http://127.0.0.1:11434",H=[{id:"anthropic",label:"Anthropic API",description:"Server-native Claude Messages API brain with madarX governed tool_use.",default_model:"claude-sonnet-4-6",mode:"api"},{id:"claude-code",label:"Claude Code CLI",description:"Local Claude Code runner for developer/repo agents using the authenticated CLI.",default_model:"sonnet",mode:"local-cli"},{id:"ollama",label:"Ollama Local LLM",description:"Local or Ollama-hosted models through the Ollama chat API.",default_model:process.env.OLLAMA_MODEL||"",mode:"local-llm"},{id:"hermes",label:"Hermes",description:"Hermes as a meta-agent/router. Available through governed Hermes job tools.",default_model:"",mode:"orchestrator"},{id:"codex",label:"Codex CLI",description:"Local Codex CLI coding runner. Available through approval-gated terminal/tool workflows.",default_model:"",mode:"local-cli"}];function o(a){let b=String(a||"").trim().toLowerCase();return b?["anthropic","anthropic-api","claude-api","api"].includes(b)?"anthropic":["claude-code","claude code","claude_cli","claude-cli"].includes(b)?"claude-code":b.includes("hermes")&&b.includes("claude code")?"anthropic":["ollama","local","local-llm","local llm"].includes(b)?"ollama":["hermes","hermes-agent"].includes(b)?"hermes":["codex","codex-cli","openai-codex"].includes(b)?"codex":b:"claude-code"}function p(a){let b=o(a);return H.find(a=>a.id===b)?.default_model||""}async function q(a){let b=o(a);if("anthropic"===b){let{resolveAnthropicApiKey:a}=await Promise.resolve().then(c.bind(c,65451));if(!a()){let a=Error("The Anthropic API engine is selected but no API key is configured. Add ANTHROPIC_API_KEY to the secrets vault or .env.local, or switch to the Claude Code CLI engine.");throw a.code="engine_unavailable",a.engine=b,a}return!0}if("claude-code"===b){if(process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE)return!0;if(!await t("claude")){let a=Error("The Claude Code CLI engine is selected but the `claude` binary is not installed or not on PATH. Install Claude Code and sign in, or switch to the Anthropic API engine.");throw a.code="engine_unavailable",a.engine=b,a}return!0}if("codex"===b){if(process.env.MADARX_MOCK_CODEX_RESPONSE)return!0;if(!await t("codex")){let a=Error("The Codex CLI engine is selected but the `codex` binary is not installed or not on PATH.");throw a.code="engine_unavailable",a.engine=b,a}}return!0}let I=new Map;function r(a){if(I.has(a))return I.get(a);for(let b of[process.env[`MADARX_${a.toUpperCase()}_BIN`],e.join(g.homedir(),".local","bin",a),`/opt/homebrew/bin/${a}`,`/usr/local/bin/${a}`,e.join(g.homedir(),".npm-global","bin",a)].filter(Boolean))try{return f.accessSync(b,f.constants.X_OK),I.set(a,b),b}catch{}return null}function s(a){return I.get(a)||r(a)||a}async function t(a){return!!r(a)||new Promise(b=>{let c=(0,h.spawn)("sh",["-lc",`command -v ${a}`],{shell:!1}),d="";c.stdout.on("data",a=>{d+=a.toString()}),c.on("error",()=>b(!1)),c.on("close",c=>{let f=0===c?d.trim().split("\n").pop()?.trim():"";f&&e.isAbsolute(f)&&I.set(a,f),b(0===c)})})}async function u(){return!process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE&&("1"===process.env.MADARX_CC_FORCE_PARTIAL||"0"!==process.env.MADARX_CC_FORCE_PARTIAL&&(void 0!==E?E:E=await new Promise(a=>{try{let b=(0,h.spawn)(s("claude"),["--help"],{shell:!1}),c="";b.stdout.on("data",a=>{c+=a.toString()}),b.stderr.on("data",a=>{c+=a.toString()}),b.on("error",()=>a(!1)),b.on("close",()=>a(c.includes("include-partial-messages")))}catch{a(!1)}})))}async function v(){try{let a=await fetch(`${G}/api/tags`,{signal:AbortSignal.timeout(1500)});if(!a.ok)return[];return((await a.json()).models||[]).map(a=>({name:a.name||a.model,model:a.model||a.name,size:a.size||0,details:a.details||{},local:!a.remote_host,remote_host:a.remote_host||null})).filter(a=>a.name)}catch{return[]}}async function w(){let[a,b,c]=await Promise.all([v(),t("claude"),t("codex")]),d=process.env.OLLAMA_MODEL||(process.env.MADARX_MOCK_OLLAMA_RESPONSE?"qwen3.5:latest":""),e=a[0]?.name||d;return H.map(f=>({...f,default_model:"ollama"===f.id?e:f.default_model,available:"claude-code"===f.id?b:"codex"===f.id?c:"ollama"!==f.id||!!(a.length||process.env.MADARX_MOCK_OLLAMA_RESPONSE),models:"ollama"===f.id?a.length?a:d?[{name:d,model:d,local:!0,fallback:!0}]:[]:f.default_model?[{name:f.default_model,model:f.default_model}]:[]}))}function x(a,b,{cwd:c=process.cwd(),timeoutMs:d=12e4,closeStdin:e=!1,onChunk:f,env:g}={}){return new Promise((i,j)=>{let k=(0,h.spawn)(a,b,{shell:!1,cwd:c,env:g??{...process.env}});e&&k.stdin.end();let l="",m="",n=setTimeout(()=>{k.kill("SIGTERM"),j(Error(`${a} timed out after ${d}ms`))},d);k.stdout.on("data",a=>{let b=a.toString();l+=b,f?.(b)}),k.stderr.on("data",a=>{m+=a.toString()}),k.on("error",a=>{clearTimeout(n),j(a)}),k.on("close",b=>{if(clearTimeout(n),0===b||1===b&&l.trim())return void i(l.trim());j(Error(`${a} exited ${b}: ${m.trim()||l.trim()}`))})})}async function y({model:a,systemPrompt:b,userMessage:c,maxTokens:d=2048,onChunk:e,onThinking:f}={}){if(process.env.MADARX_MOCK_OLLAMA_RESPONSE)return process.env.MADARX_MOCK_OLLAMA_RESPONSE;let g=!!(e||f),h=g&&(0,m.Zf)()&&"1"===process.env.MADARX_OLLAMA_THINK,i={model:a||process.env.OLLAMA_MODEL,stream:g,options:{num_predict:d},messages:[{role:"system",content:b},{role:"user",content:c}]};h&&(i.think=!0);let j=await fetch(`${G}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!j.ok)throw Error(`Ollama chat failed: HTTP ${j.status}`);if(!g){let a=await j.json(),b=a.message?.content||a.response||"";if(!b.trim())throw Error("Ollama returned no text");return b.trim()}let k="",l="",n=j.body.getReader(),o=new TextDecoder,p="";for(;;){let a,{done:b,value:c}=await n.read();if(b)break;for(p+=o.decode(c,{stream:!0});(a=p.indexOf("\n"))>=0;){let b,c=p.slice(0,a).trim();if(p=p.slice(a+1),!c)continue;try{b=JSON.parse(c)}catch{continue}let d=b.message?.content||b.response||"",g=b.message?.thinking||"";d&&(k+=d,e?.(d,k)),g&&(l+=g,f?.(l,g))}}if(!k.trim())throw Error("Ollama returned no text");return k.trim()}async function z({model:a,systemPrompt:b,userMessage:c,maxTurns:d,allowedTools:e=[],timeoutMs:f,onChunk:g,onAssistantText:h,onThinking:i,onStatus:j,onToolStart:l,onToolResult:n,cwd:o,addDirs:p=[],agentId:q,agentName:r,verbosity:t}={}){if(process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE)return process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE;let v=`${b}
3502
+ `).get(a)||{n:0,grade_n:0}).grade_n||0)>0,i=d.has("resource_estimate");d.has("reserve_estimate"),d.has("opex"),d.has("production_schedule");let j=h.filter(a=>!d.has(a)),k=0===j.length,l=i||f,m=String(c.asset_stage||"").toLowerCase(),n=m.includes("exploration")||m.includes("prospect")||m.includes("early");if("t1_in_situ"===b.force_tier)return{status:"ok",project_id:a,tier:"t1_in_situ",t1_ready:l,t2_ready:k,t2_blocked:!0,blocking_inputs_missing:j,t2_blocking_reason:j.length?`T2 DCF blocked: missing ${j.join(", ")}.`:"T1 was explicitly requested.",confidence:i?"moderate":"indicative",reason:"T1 in-situ valuation explicitly requested."};if(k&&!n)return{status:"ok",project_id:a,tier:"t2_dcf",t1_ready:l,t2_ready:!0,t2_blocked:!1,blocking_inputs_missing:[],t2_blocking_reason:null,confidence:"modelled",reason:"Reserve estimate, production schedule, and operating-cost facts are present; DCF is allowed."};let o="t2_dcf"===b.force_tier,p=[...new Set([...j,...k&&n?["asset_stage_not_dcf_ready"]:[]])];return{status:"ok",project_id:a,tier:"t1_in_situ",t1_ready:l,t2_ready:!1,t2_blocked:!0,blocking_inputs_missing:p,t2_blocking_reason:p.length?`T2 DCF blocked: missing or unsuitable inputs (${p.join(", ")}).`:"T2 DCF blocked by exploration-stage policy.",confidence:i?"moderate":"indicative",reason:o?"Forced T2 request was rejected because DCF prerequisites are incomplete or the asset stage is not DCF-ready; using T1 in-situ instead.":"Exploration/resource-stage projects use T1 in-situ until reserve, production schedule, and cost inputs are present."}}d()}catch(a){d(a)}})},72189:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{X:()=>t,Z6:()=>p,dd:()=>n,mr:()=>r,sq:()=>q,sv:()=>o,vO:()=>s});var e=c(73024),f=c(76760),g=c(60105),h=c(8437),i=c(26531),j=a([g,h]);[g,h]=j.then?(await j)():j;let u=new Set([".git","node_modules",".next","data"]);function k(a,b,c={}){(0,g.appendAudit)({type:`local.${a}`,summary:`${a} ${b}`,status:b,meta:c})}function l(a,b,c){return(0,h.D6)({action_type:a,risk:"medium",summary:`${a} requested for ${c}`,payload:{input:{...b,content:b.content?`[${String(b.content).length} chars]`:void 0},path:c}})}function m(a){return b=>b.path===a}async function n(a={}){let{path:b}=(0,i.hC)(a.path),c=Number(process.env.MADARX_FILE_READ_MAX_BYTES||1e5),d=e.statSync(b);if(!d.isFile())throw Error("Path is not a file");if(d.size>c)throw Error(`File too large: ${d.size} bytes`);let f=e.readFileSync(b,"utf8").split(/\r?\n/),g=Math.max(1,Number(a.offset||1)),h=Math.max(1,Math.min(2e3,Number(a.limit||500))),j=f.slice(g-1,g-1+h).join("\n");return k("file_read","complete",{path:b,bytes:Buffer.byteLength(j)}),{ok:!0,tool:"file_read",path:b,content:(0,i.nc)(j),metadata:{line_count:f.length,offset:g,limit:h}}}async function o(a={}){let{path:b}=(0,i.hC)(a.path||"."),c=Math.max(1,Math.min(500,Number(a.limit||100))),d=[];for(let a of e.readdirSync(b,{withFileTypes:!0})){if(d.length>=c)break;try{(0,i.hC)(f.join(b,a.name))}catch{continue}u.has(a.name)||d.push({name:a.name,type:a.isDirectory()?"directory":a.isFile()?"file":"other"})}return k("directory_list","complete",{path:b,count:d.length}),{ok:!0,tool:"directory_list",path:b,entries:d,metadata:{count:d.length}}}function p(a={}){let{path:b}=(0,i.hC)(a.path);if((0,i.Oe)(b))throw Error(`Write access denied: path is under a read-only root: ${a.path}`);return{absPath:b}}async function q(a={},b={}){let{absPath:c}=p(a);if(!b.owner_trusted&&!(0,h.v)(a.approval_id,{action_type:"file_write",matches:m(c)})){let b=l("file_write",a,c);return{ok:!1,status:"approval_required",approval_request_id:b.id,reason:"File writes require approval"}}return!1!==a.create_dirs&&e.mkdirSync(f.dirname(c),{recursive:!0}),e.writeFileSync(c,String(a.content??""),"utf8"),k("file_write","complete",{path:c}),{ok:!0,tool:"file_write",path:c,metadata:{bytes:Buffer.byteLength(String(a.content??""))}}}function r(a={}){let{path:b}=(0,i.hC)(a.path);if((0,i.Oe)(b))throw Error(`Write access denied: path is under a read-only root: ${a.path}`);let c=String(a.old_string??"");if(!c)throw Error("old_string is required");let d=e.readFileSync(b,"utf8"),f=d.split(c).length-1;if(!f)throw Error("old_string not found");if(f>1&&!a.replace_all)throw Error("old_string is ambiguous");return{absPath:b,content:d,matches:f,oldString:c}}async function s(a={},b={}){let{absPath:c,content:d,matches:f,oldString:g}=r(a),i=String(a.new_string??"");if(!b.owner_trusted&&!(0,h.v)(a.approval_id,{action_type:"file_patch",matches:m(c)})){let b=l("file_patch",{...a,new_string:`[${i.length} chars]`},c);return{ok:!1,status:"approval_required",approval_request_id:b.id,reason:"File patches require approval"}}return e.writeFileSync(c,a.replace_all?d.split(g).join(i):d.replace(g,i),"utf8"),k("file_patch","complete",{path:c,replacements:a.replace_all?f:1}),{ok:!0,tool:"file_patch",path:c,metadata:{replacements:a.replace_all?f:1}}}async function t(a={}){let{path:b}=(0,i.hC)(a.path||"."),c=String(a.pattern||"");if(!c)throw Error("pattern is required");let d=Math.max(1,Math.min(200,Number(a.limit||50))),g=RegExp(c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"i"),h=a.target||"content",j=a.file_glob?String(a.file_glob):null,l=j?RegExp("^"+j.split("*").map(a=>a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i"):null,m=[];for(let a of function a(b,c=[],d=1e3){if(c.length>=d)return c;for(let g of e.readdirSync(b,{withFileTypes:!0})){if(u.has(g.name))continue;let e=f.join(b,g.name);if(g.isDirectory()?a(e,c,d):g.isFile()&&c.push(e),c.length>=d)break}return c}(b,[],5e3)){if(m.length>=d)break;try{(0,i.hC)(a)}catch{continue}if(!l||l.test(f.basename(a))){if("path"===h||"name"===h){g.test("name"===h?f.basename(a):a)&&m.push({path:a});continue}e.statSync(a).size>25e4||/\.sqlite/.test(a)||/^\.env/.test(f.basename(a))||e.readFileSync(a,"utf8").split(/\r?\n/).forEach((b,c)=>{m.length<d&&g.test(b)&&m.push({path:a,line:c+1,text:(0,i.nc)(b)})})}}return k("file_search","complete",{path:b,count:m.length}),{ok:!0,tool:"file_search",path:b,results:m,metadata:{count:m.length}}}d()}catch(a){d(a)}})},72326:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{let F;c.d(b,{$k:()=>o,GK:()=>q,Iu:()=>A,M2:()=>z,No:()=>w,Qp:()=>p,Ys:()=>t,bD:()=>y,d:()=>E,vB:()=>D});var e=c(76760),f=c(73024),g=c(48161),h=c(31421),i=c(73136),j=c(19151),k=c(9001),l=c(9381),m=c(51867),n=a([j,k]);[j,k]=n.then?(await n)():n;let G=e.resolve(e.dirname((0,i.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/agent-engines.js")),".."),H=process.env.OLLAMA_BASE_URL||"http://127.0.0.1:11434",I=[{id:"anthropic",label:"Anthropic API",description:"Server-native Claude Messages API brain with madarX governed tool_use.",default_model:"claude-sonnet-4-6",mode:"api"},{id:"claude-code",label:"Claude Code CLI",description:"Local Claude Code runner for developer/repo agents using the authenticated CLI.",default_model:"sonnet",mode:"local-cli"},{id:"ollama",label:"Ollama Local LLM",description:"Local or Ollama-hosted models through the Ollama chat API.",default_model:process.env.OLLAMA_MODEL||"",mode:"local-llm"},{id:"hermes",label:"Hermes",description:"Hermes as a meta-agent/router. Available through governed Hermes job tools.",default_model:"",mode:"orchestrator"},{id:"codex",label:"Codex CLI",description:"Local Codex CLI coding runner. Available through approval-gated terminal/tool workflows.",default_model:"",mode:"local-cli"}];function o(a){let b=String(a||"").trim().toLowerCase();return b?["anthropic","anthropic-api","claude-api","api"].includes(b)?"anthropic":["claude-code","claude code","claude_cli","claude-cli"].includes(b)?"claude-code":b.includes("hermes")&&b.includes("claude code")?"anthropic":["ollama","local","local-llm","local llm"].includes(b)?"ollama":["hermes","hermes-agent"].includes(b)?"hermes":["codex","codex-cli","openai-codex"].includes(b)?"codex":b:"claude-code"}function p(a){let b=o(a);return I.find(a=>a.id===b)?.default_model||""}async function q(a){let b=o(a);if("anthropic"===b){let{resolveAnthropicApiKey:a}=await Promise.resolve().then(c.bind(c,65451));if(!a()){let a=Error("The Anthropic API engine is selected but no API key is configured. Add ANTHROPIC_API_KEY to the secrets vault or .env.local, or switch to the Claude Code CLI engine.");throw a.code="engine_unavailable",a.engine=b,a}return!0}if("claude-code"===b){if(process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE)return!0;if(!await t("claude")){let a=Error("The Claude Code CLI engine is selected but the `claude` binary is not installed or not on PATH. Install Claude Code and sign in, or switch to the Anthropic API engine.");throw a.code="engine_unavailable",a.engine=b,a}return!0}if("codex"===b){if(process.env.MADARX_MOCK_CODEX_RESPONSE)return!0;if(!await t("codex")){let a=Error("The Codex CLI engine is selected but the `codex` binary is not installed or not on PATH.");throw a.code="engine_unavailable",a.engine=b,a}}return!0}let J=new Map;function r(a){if(J.has(a))return J.get(a);for(let b of[process.env[`MADARX_${a.toUpperCase()}_BIN`],e.join(g.homedir(),".local","bin",a),`/opt/homebrew/bin/${a}`,`/usr/local/bin/${a}`,e.join(g.homedir(),".npm-global","bin",a)].filter(Boolean))try{return f.accessSync(b,f.constants.X_OK),J.set(a,b),b}catch{}return null}function s(a){return J.get(a)||r(a)||a}async function t(a){return!!r(a)||new Promise(b=>{let c=(0,h.spawn)("sh",["-lc",`command -v ${a}`],{shell:!1}),d="";c.stdout.on("data",a=>{d+=a.toString()}),c.on("error",()=>b(!1)),c.on("close",c=>{let f=0===c?d.trim().split("\n").pop()?.trim():"";f&&e.isAbsolute(f)&&J.set(a,f),b(0===c)})})}async function u(){return!process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE&&("1"===process.env.MADARX_CC_FORCE_PARTIAL||"0"!==process.env.MADARX_CC_FORCE_PARTIAL&&(void 0!==F?F:F=await new Promise(a=>{try{let b=(0,h.spawn)(s("claude"),["--help"],{shell:!1}),c="";b.stdout.on("data",a=>{c+=a.toString()}),b.stderr.on("data",a=>{c+=a.toString()}),b.on("error",()=>a(!1)),b.on("close",()=>a(c.includes("include-partial-messages")))}catch{a(!1)}})))}async function v(){try{let a=await fetch(`${H}/api/tags`,{signal:AbortSignal.timeout(1500)});if(!a.ok)return[];return((await a.json()).models||[]).map(a=>({name:a.name||a.model,model:a.model||a.name,size:a.size||0,details:a.details||{},local:!a.remote_host,remote_host:a.remote_host||null})).filter(a=>a.name)}catch{return[]}}async function w(){let[a,b,c]=await Promise.all([v(),t("claude"),t("codex")]),d=process.env.OLLAMA_MODEL||(process.env.MADARX_MOCK_OLLAMA_RESPONSE?"qwen3.5:latest":""),e=a[0]?.name||d;return I.map(f=>({...f,default_model:"ollama"===f.id?e:f.default_model,available:"claude-code"===f.id?b:"codex"===f.id?c:"ollama"!==f.id||!!(a.length||process.env.MADARX_MOCK_OLLAMA_RESPONSE),models:"ollama"===f.id?a.length?a:d?[{name:d,model:d,local:!0,fallback:!0}]:[]:f.default_model?[{name:f.default_model,model:f.default_model}]:[]}))}function x(a,b,{cwd:c=process.cwd(),timeoutMs:d=12e4,closeStdin:e=!1,onChunk:f,env:g}={}){return new Promise((i,j)=>{let k=(0,h.spawn)(a,b,{shell:!1,cwd:c,env:g??{...process.env}});e&&k.stdin.end();let l="",m="",n=setTimeout(()=>{k.kill("SIGTERM"),j(Error(`${a} timed out after ${d}ms`))},d);k.stdout.on("data",a=>{let b=a.toString();l+=b,f?.(b)}),k.stderr.on("data",a=>{m+=a.toString()}),k.on("error",a=>{clearTimeout(n),j(a)}),k.on("close",b=>{if(clearTimeout(n),0===b||1===b&&l.trim())return void i(l.trim());j(Error(`${a} exited ${b}: ${m.trim()||l.trim()}`))})})}async function y({model:a,systemPrompt:b,userMessage:c,maxTokens:d=2048,onChunk:e,onThinking:f}={}){if(process.env.MADARX_MOCK_OLLAMA_RESPONSE)return process.env.MADARX_MOCK_OLLAMA_RESPONSE;let g=!!(e||f),h=g&&(0,m.Zf)()&&"1"===process.env.MADARX_OLLAMA_THINK,i={model:a||process.env.OLLAMA_MODEL,stream:g,options:{num_predict:d},messages:[{role:"system",content:b},{role:"user",content:c}]};h&&(i.think=!0);let j=await fetch(`${H}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!j.ok)throw Error(`Ollama chat failed: HTTP ${j.status}`);if(!g){let a=await j.json(),b=a.message?.content||a.response||"";if(!b.trim())throw Error("Ollama returned no text");return b.trim()}let k="",l="",n=j.body.getReader(),o=new TextDecoder,p="";for(;;){let a,{done:b,value:c}=await n.read();if(b)break;for(p+=o.decode(c,{stream:!0});(a=p.indexOf("\n"))>=0;){let b,c=p.slice(0,a).trim();if(p=p.slice(a+1),!c)continue;try{b=JSON.parse(c)}catch{continue}let d=b.message?.content||b.response||"",g=b.message?.thinking||"";d&&(k+=d,e?.(d,k)),g&&(l+=g,f?.(l,g))}}if(!k.trim())throw Error("Ollama returned no text");return k.trim()}async function z({model:a,systemPrompt:b,userMessage:c,maxTurns:d,allowedTools:e=[],timeoutMs:f,onChunk:g,onAssistantText:h,onThinking:i,onStatus:j,onToolStart:l,onToolResult:n,cwd:o,addDirs:p=[],agentId:q,agentName:r,verbosity:t}={}){if(process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE)return process.env.MADARX_MOCK_CLAUDE_CODE_RESPONSE;let v=`${b}
3327
3503
 
3328
3504
  ${c}`,w=Number(d||process.env.CLAUDE_CODE_MAX_TURNS||30),y=t||(0,m._e)(),A=(0,m.Zf)(y),B=A&&await u(),C=["-p",v,"--max-turns",String(w),"--output-format","stream-json","--verbose","--permission-mode","bypassPermissions","--setting-sources","project,local,user"];for(let a of(B&&C.push("--include-partial-messages"),p))a&&C.push("--add-dir",a);e.length&&C.push("--allowedTools",e.join(",")),a&&"claude-code"!==a&&C.splice(2,0,"--model",a);let D=function(){let a={...process.env};return"1"===process.env.MADARX_CLI_USE_API_KEY||(delete a.ANTHROPIC_API_KEY,delete a.ANTHROPIC_AUTH_TOKEN),a}();if(A){let a=(0,m.s_)(y);a>0&&(D.MAX_THINKING_TOKENS=String(Math.max(1024,a)))}let E=[],F=[],G="",H="",I="",J="",K=function({agentId:a,agentName:b,partial:c=!1,onText:d,onTextDelta:e,onThinkingDelta:f,onToolStart:g,onToolResult:h,onResult:i,onStatus:j}){let l="",m=new Map,n=new Map;return function(o){let p;for(l+=o;(p=l.indexOf("\n"))>=0;){let o,q=l.slice(0,p).trim();if(l=l.slice(p+1),!q||"{"!==q[0])continue;try{o=JSON.parse(q)}catch{continue}if(!o||"object"!=typeof o)continue;if("stream_event"===o.type&&o.event&&"object"==typeof o.event){let a=o.event;if("content_block_delta"===a.type&&a.delta){let b=a.delta;"text_delta"===b.type&&"string"==typeof b.text?e?.(b.text):"thinking_delta"===b.type&&"string"==typeof b.thinking&&f?.(b.thinking)}else"content_block_start"===a.type&&a.content_block?.type==="thinking"?j?.("thinking"):"message_start"===a.type&&j?.("generating");continue}if("result"===o.type){"string"==typeof o.result&&o.result.trim()&&i?.(o.result.trim());continue}let r=o.message?.content;if(Array.isArray(r)){if("assistant"===o.type){let e=r.some(a=>a?.type==="tool_use");if(!c)for(let a of r)a?.type==="thinking"&&"string"==typeof a.thinking&&a.thinking&&f?.(a.thinking);let h=r.filter(a=>a?.type==="text"&&"string"==typeof a.text).map(a=>a.text).join("");for(let c of(h&&d?.(h,{isFinal:!e}),r))c?.type==="tool_use"&&(c.id&&(m.set(c.id,c.name||"tool"),n.set(c.id,Date.now())),g?.({id:c.id,name:c.name||"tool",input:c.input}),a&&(0,k.AC)({type:"agent_tool_start",agent_id:a,agent_name:b||a,tool:c.name||"tool",input_summary:function(a,b){if(!b||"object"!=typeof b)return"";if("Bash"===a)return String(b.command||"").slice(0,120);if("WebSearch"===a)return String(b.query||"").slice(0,120);if("WebFetch"===a)return String(b.url||"").slice(0,120);if("Read"===a||"Glob"===a||"Grep"===a||"LS"===a)return String(b.file_path||b.pattern||b.path||"").slice(0,120);if("Write"===a||"Edit"===a||"MultiEdit"===a)return String(b.file_path||"").slice(0,120);if("TodoWrite"===a)return Array.isArray(b.todos)?`${b.todos.length} todos`:"";try{return JSON.stringify(b).slice(0,120)}catch{return""}}(c.name,c.input)}))}else if("user"===o.type){for(let c of r)if(c?.type==="tool_result"){let d=m.get(c.tool_use_id)||"tool",e=n.get(c.tool_use_id),f=e?Date.now()-e:null,{preview:g,chars:i,lines:j}=function(a){let b=a?.content,c="";return"string"==typeof b?c=b:Array.isArray(b)&&(c=b.map(a=>"string"==typeof a?a:a?.type==="text"&&"string"==typeof a.text?a.text:"").join("")),{preview:(c=String(c||"")).slice(0,200),chars:c.length,lines:c?c.split("\n").length:0}}(c);h?.({tool_use_id:c.tool_use_id,name:d,isError:!!c.is_error,durationMs:f,preview:g,chars:i,lines:j}),a&&(0,k.AC)({type:"agent_tool_result",agent_id:a,agent_name:b||a,tool:d,status:c.is_error?"error":"done",isError:!!c.is_error,duration_ms:f}),m.delete(c.tool_use_id),n.delete(c.tool_use_id)}}}}}}({agentId:q,agentName:r,partial:B,onText:(a,b={})=>{E.push(a),b.isFinal?F.push(a):G=a,B||h?.(E.join("").trim())},onTextDelta:a=>{I+=a,h?.(I.trim())},onThinkingDelta:a=>{J+=a,i?.(J.trim(),a)},onStatus:a=>{j?.(a)},onResult:a=>{H=a},onToolStart:l,onToolResult:n});await x(s("claude"),C,{cwd:o,timeoutMs:f??Number(process.env.CLAUDE_CODE_TICK_TIMEOUT_MS||6e5),closeStdin:!0,env:D,onChunk:a=>{K(a),g?.(a)}});let L=F.join("").trim()||G.trim()||E.join("").trim()||H.trim();if(!L)throw Error("Claude Code returned no assistant text");return L}async function A({systemPrompt:a,userMessage:b,onChunk:c}){if(process.env.MADARX_MOCK_CODEX_RESPONSE)return process.env.MADARX_MOCK_CODEX_RESPONSE;let d=a?`${a}
3329
3505
 
3330
- ${b}`:b;return x(s("codex"),["exec",d],{timeoutMs:Number(process.env.CODEX_TICK_TIMEOUT_MS||18e4),closeStdin:!0,onChunk:c})}async function B({model:a,systemPrompt:b,userMessage:c,maxTokens:d=2048}){var e;let f=(e=await (0,j.chatWithClaude)([{role:"user",content:c}],b,[],{max_tokens:d,model:a}),(e?.content||[]).filter(a=>a?.type==="text"||"string"==typeof a?.text).map(a=>a.text||"").join("\n").trim());if(!f)throw Error("Anthropic returned no text");return f}function C(a){try{return!!a&&f.statSync(a).isDirectory()}catch{return!1}}async function D({agent:a,systemPrompt:b,userMessage:c,maxTokens:d=2048}){let e=o(a.engine),f=a.model||p(e);if("ollama"===e)return y({model:f,systemPrompt:b,userMessage:c,maxTokens:d});if("claude-code"===e){try{(0,l.Jh)()}catch{}let d=[l.un,l.nJ].filter(C);return z({model:f,systemPrompt:b,userMessage:c,cwd:function(){for(let a of[l.un,l.nJ,F,process.cwd()])if(C(a))return a;return process.cwd()}(),addDirs:d,agentId:a.id,agentName:a.name})}if("anthropic"===e)return B({model:f,systemPrompt:b,userMessage:c,maxTokens:d});if("codex"===e)return A({systemPrompt:b,userMessage:c});if("hermes"===e){let a=Error('The Hermes engine cannot run scheduled autonomous ticks yet — it has no governed tool loop, so a tick would only fabricate output. Switch this agent to the "Anthropic API" engine, or drive Hermes via its governed job tools (send_to_hermes / start_hermes_job) from the console.');throw a.code="engine_cannot_run_tools",a.engine="hermes",a}throw Error(`Unknown agent engine: ${a.engine}`)}d()}catch(a){d(a)}})},72550:(a,b,c)=>{"use strict";c.d(b,{Kd:()=>e});let d={google:{label:"Google",authorize_url:"https://accounts.google.com/o/oauth2/v2/auth",token_url:"https://oauth2.googleapis.com/token",pkce:!0,default_scopes:["openid","email"],extra_auth_params:{access_type:"offline",prompt:"consent"}},meta:{label:"Meta (Facebook/Instagram)",authorize_url:"https://www.facebook.com/v19.0/dialog/oauth",token_url:"https://graph.facebook.com/v19.0/oauth/access_token",pkce:!1,default_scopes:["public_profile"],extra_auth_params:{}},linkedin:{label:"LinkedIn",authorize_url:"https://www.linkedin.com/oauth/v2/authorization",token_url:"https://www.linkedin.com/oauth/v2/accessToken",pkce:!1,default_scopes:["r_liteprofile"],extra_auth_params:{}},tiktok:{label:"TikTok",authorize_url:"https://www.tiktok.com/v2/auth/authorize/",token_url:"https://open.tiktokapis.com/v2/oauth/token/",pkce:!0,default_scopes:["user.info.basic"],extra_auth_params:{}},hubspot:{label:"HubSpot",authorize_url:"https://app.hubspot.com/oauth/authorize",token_url:"https://api.hubapi.com/oauth/v1/token",pkce:!1,default_scopes:["oauth"],extra_auth_params:{}}};function e(a,b={}){let c=a&&d[a]?d[a]:null,f=b.authorize_url||c?.authorize_url||null,g=b.token_url||c?.token_url||null;if(!f||!g)return null;let h=Array.isArray(b.scopes)&&b.scopes.length?b.scopes.slice():(c?.default_scopes||[]).slice(),i="boolean"==typeof b.pkce?b.pkce:!!c?.pkce,j={...c?.extra_auth_params||{},...b.extra_auth_params&&"object"==typeof b.extra_auth_params?b.extra_auth_params:{}};return{provider:a||"custom",label:c?.label||a||"Custom provider",authorize_url:f,token_url:g,scopes:h,pkce:i,extra_auth_params:j}}},73066:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Kg:()=>k,kA:()=>l,v2:()=>j});var e=c(73024),f=c(76760),g=c(9381),h=c(61423),i=a([h]);h=(i.then?(await i)():i)[0];let m="artifacts";function j(a){var b;let c=null;return(c=a&&"object"==typeof a?a:(0,h.U1)(a||h.Sk)||null)?f.join((b=c,b?.folder_path?b.folder_path:b?.slug?(0,h.ct)(b.slug):(0,h.ct)(h.Sk)),m):f.join((0,h.ct)(h.Sk),m)}function k(a){let b=j(a);return e.mkdirSync(b,{recursive:!0}),b}function l(a){if(!a)return!1;let b=f.resolve(a);return[f.resolve(g.yQ),...function(){try{return(0,h.hF)({status:"all"}).map(a=>f.resolve(j(a)))}catch{return[]}}()].some(a=>b===a||b.startsWith(`${a}${f.sep}`))}d()}catch(a){d(a)}})},73662:(a,b,c)=>{"use strict";c.d(b,{nA:()=>g});let d=/^[a-z][a-z0-9-]{2,63}$/,e=/^\/[a-z][a-z0-9-]{1,63}$/;function f(a,b,c){a.push(`${b}: ${c}`)}function g(a,b={}){var c;let h,i=[],j=[];try{h=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!h||"undefined"===h)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(h,"utf8")>65536)return{ok:!1,errors:["spec: exceeds 64KB"],warnings:[],normalized:null};return null===a||"object"!=typeof a||Array.isArray(a)?{ok:!1,errors:["spec: must be an object"],warnings:[],normalized:null}:(a.slug&&"string"==typeof a.slug?d.test(a.slug)||f(i,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):f(i,"slug","required (string)"),a.title&&"string"==typeof a.title||f(i,"title","required (non-empty string)"),null!=a.description&&"string"!=typeof a.description&&f(i,"description","must be a string"),a.markdown&&"string"==typeof a.markdown?a.markdown.length>1e5&&f(i,"markdown",`exceeds 100000 chars (got ${a.markdown.length})`):f(i,"markdown","required (non-empty string)"),null!=a.invocation&&("string"!=typeof a.invocation?f(i,"invocation","must be a string"):e.test(a.invocation)||f(i,"invocation",`must match ${e} (e.g. "/my-skill")`)),null!=a.trigger_examples&&(Array.isArray(a.trigger_examples)?a.trigger_examples.forEach((a,b)=>{"string"==typeof a&&a.trim()||f(i,`trigger_examples[${b}]`,"must be a non-empty string")}):f(i,"trigger_examples","must be an array of strings")),null!=a.category&&"string"!=typeof a.category&&f(i,"category","must be a string"),i.length>0)?{ok:!1,errors:i,warnings:j,normalized:null}:{ok:!0,errors:[],warnings:j,normalized:{slug:(c=a).slug,title:c.title,description:c.description||null,category:"string"==typeof c.category&&c.category?c.category:"authored",invocation:"string"==typeof c.invocation&&c.invocation?c.invocation:`/${c.slug}`,markdown:c.markdown,trigger_examples:Array.isArray(c.trigger_examples)?c.trigger_examples.filter(a=>"string"==typeof a&&a.trim()):[]}}}},73899:(a,b,c)=>{"use strict";function d(a,b=null){if(!a)return b;try{return JSON.parse(a)}catch{return b}}c.d(b,{lp:()=>g,oi:()=>d,qY:()=>h});let e=/mars|accent|primary|brand|red|orange|coral/i,f=/^#?(ffffff|000000|fff|0f0f11|111318|1a1817|f7f4ee|e8e8e5|dcdcd8)$/i;function g(a){let b=Array.isArray(a?.colors)?a.colors:[];if(0===b.length)return"#c2452a";let c=b.find(a=>e.test(a?.name||""));if(c?.value)return c.value;let d=b.find(a=>a?.value&&!f.test(a.value));return d?.value||b[0].value||"#c2452a"}function h(a){try{let b=a.prepare("SELECT slug FROM marketplace_items WHERE kind = 'agent'").all();return new Set(b.map(a=>a.slug))}catch{return new Set}}},73912:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{AB:()=>y,CS:()=>s,Io:()=>w,QM:()=>v,R1:()=>z,Ww:()=>x,dh:()=>q,mM:()=>u,uT:()=>p,vV:()=>r,xP:()=>t});var e=c(73024),f=c(76760),g=c(77598),h=c(34255),i=c(9381),j=c(61423),k=c(9001),l=a([h,j,k]);[h,j,k]=l.then?(await l)():l;let A=f.join(i.nJ,"disk");function m(a){return a?{...a}:null}function n(a){return a?{...a,local_only:1===a.local_only}:null}function o(a={}){try{(0,k.jO)("disk",a)}catch{}}function p(a){let b=(0,h.getDb)();return a?b.prepare("SELECT * FROM disk_folders WHERE project_id = ? ORDER BY path ASC").all(a).map(m):b.prepare("SELECT * FROM disk_folders ORDER BY path ASC").all().map(m)}function q(a){let b=(0,j.U1)(a);if(!b)throw Error("project not found");return(0,j.yK)(b.id,b.slug),m((0,h.getDb)().prepare("SELECT * FROM disk_folders WHERE project_id = ? AND parent_id IS NULL LIMIT 1").get(b.id))}function r(a,b,c){if("object"==typeof a&&a){let d=a;a=d.project_id||d.projectId,b=d.parent_id||d.parentId||null,c=d.name}let d=(0,j.U1)(a);if(!d)throw Error("project not found");let g=String(c||"").trim();if(!g)throw Error("name is required");let i=(0,h.getDb)(),k=b?i.prepare("SELECT * FROM disk_folders WHERE id = ?").get(b):q(d.id);if(!k)throw Error("parent folder not found");if(i.prepare("SELECT * FROM disk_folders WHERE project_id = ? AND parent_id = ? AND name = ? LIMIT 1").get(d.id,k.id,g)){let a=Error(`Folder "${g}" already exists.`);throw a.code="FOLDER_EXISTS",a}let l=`${k.path.replace(/\/$/,"")}/${g}/`,n=(0,h.nowIso)(),p=(0,h.newId)("df");try{i.prepare("INSERT INTO disk_folders (id, project_id, parent_id, name, path, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run(p,d.id,k.id,g,l,n,n)}catch(a){if(String(a?.message||"").includes("UNIQUE constraint failed")){let a=Error(`Folder "${g}" already exists.`);throw a.code="FOLDER_EXISTS",a}throw a}let r=f.join(A,l.replace(/^\/+|\/+$/g,""));e.mkdirSync(r,{recursive:!0});let s=m(i.prepare("SELECT * FROM disk_folders WHERE id = ?").get(p));return o({project_id:d.id,folder_id:s?.id||p,action:"folder.create"}),s}function s(a={}){let b=(0,h.getDb)(),c=[],d=[];a.project_id&&(c.push("project_id = ?"),d.push(a.project_id)),a.folder_id&&(c.push("folder_id = ?"),d.push(a.folder_id));let e=`SELECT * FROM disk_files ${c.length?"WHERE "+c.join(" AND "):""} ORDER BY updated_at DESC`;return b.prepare(e).all(...d).map(n)}function t(){let a=(0,h.getDb)().prepare(`SELECT project_id, COUNT(*) AS count
3506
+ ${b}`:b;return x(s("codex"),["exec",d],{timeoutMs:Number(process.env.CODEX_TICK_TIMEOUT_MS||18e4),closeStdin:!0,onChunk:c})}async function B({model:a,systemPrompt:b,userMessage:c,maxTokens:d=2048}){var e;let f=(e=await (0,j.chatWithClaude)([{role:"user",content:c}],b,[],{max_tokens:d,model:a}),(e?.content||[]).filter(a=>a?.type==="text"||"string"==typeof a?.text).map(a=>a.text||"").join("\n").trim());if(!f)throw Error("Anthropic returned no text");return f}function C(a){try{return!!a&&f.statSync(a).isDirectory()}catch{return!1}}function D(){for(let a of[l.un,l.nJ,G,process.cwd()])if(C(a))return a;return process.cwd()}async function E({agent:a,systemPrompt:b,userMessage:c,maxTokens:d=2048}){let e=o(a.engine),f=a.model||p(e);if("ollama"===e)return y({model:f,systemPrompt:b,userMessage:c,maxTokens:d});if("claude-code"===e){try{(0,l.Jh)()}catch{}let d=[l.un,l.nJ].filter(C);return z({model:f,systemPrompt:b,userMessage:c,cwd:D(),addDirs:d,agentId:a.id,agentName:a.name})}if("anthropic"===e)return B({model:f,systemPrompt:b,userMessage:c,maxTokens:d});if("codex"===e)return A({systemPrompt:b,userMessage:c});if("hermes"===e){let a=Error('The Hermes engine cannot run scheduled autonomous ticks yet — it has no governed tool loop, so a tick would only fabricate output. Switch this agent to the "Anthropic API" engine, or drive Hermes via its governed job tools (send_to_hermes / start_hermes_job) from the console.');throw a.code="engine_cannot_run_tools",a.engine="hermes",a}throw Error(`Unknown agent engine: ${a.engine}`)}d()}catch(a){d(a)}})},72550:(a,b,c)=>{"use strict";c.d(b,{Kd:()=>e});let d={google:{label:"Google",authorize_url:"https://accounts.google.com/o/oauth2/v2/auth",token_url:"https://oauth2.googleapis.com/token",pkce:!0,default_scopes:["openid","email"],extra_auth_params:{access_type:"offline",prompt:"consent"}},meta:{label:"Meta (Facebook/Instagram)",authorize_url:"https://www.facebook.com/v19.0/dialog/oauth",token_url:"https://graph.facebook.com/v19.0/oauth/access_token",pkce:!1,default_scopes:["public_profile"],extra_auth_params:{}},linkedin:{label:"LinkedIn",authorize_url:"https://www.linkedin.com/oauth/v2/authorization",token_url:"https://www.linkedin.com/oauth/v2/accessToken",pkce:!1,default_scopes:["r_liteprofile"],extra_auth_params:{}},tiktok:{label:"TikTok",authorize_url:"https://www.tiktok.com/v2/auth/authorize/",token_url:"https://open.tiktokapis.com/v2/oauth/token/",pkce:!0,default_scopes:["user.info.basic"],extra_auth_params:{}},hubspot:{label:"HubSpot",authorize_url:"https://app.hubspot.com/oauth/authorize",token_url:"https://api.hubapi.com/oauth/v1/token",pkce:!1,default_scopes:["oauth"],extra_auth_params:{}}};function e(a,b={}){let c=a&&d[a]?d[a]:null,f=b.authorize_url||c?.authorize_url||null,g=b.token_url||c?.token_url||null;if(!f||!g)return null;let h=Array.isArray(b.scopes)&&b.scopes.length?b.scopes.slice():(c?.default_scopes||[]).slice(),i="boolean"==typeof b.pkce?b.pkce:!!c?.pkce,j={...c?.extra_auth_params||{},...b.extra_auth_params&&"object"==typeof b.extra_auth_params?b.extra_auth_params:{}};return{provider:a||"custom",label:c?.label||a||"Custom provider",authorize_url:f,token_url:g,scopes:h,pkce:i,extra_auth_params:j}}},73066:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Kg:()=>k,kA:()=>l,v2:()=>j});var e=c(73024),f=c(76760),g=c(9381),h=c(61423),i=a([h]);h=(i.then?(await i)():i)[0];let m="artifacts";function j(a){var b;let c=null;return(c=a&&"object"==typeof a?a:(0,h.U1)(a||h.Sk)||null)?f.join((b=c,b?.folder_path?b.folder_path:b?.slug?(0,h.ct)(b.slug):(0,h.ct)(h.Sk)),m):f.join((0,h.ct)(h.Sk),m)}function k(a){let b=j(a);return e.mkdirSync(b,{recursive:!0}),b}function l(a){if(!a)return!1;let b=f.resolve(a);return[f.resolve(g.yQ),...function(){try{return(0,h.hF)({status:"all"}).map(a=>f.resolve(j(a)))}catch{return[]}}()].some(a=>b===a||b.startsWith(`${a}${f.sep}`))}d()}catch(a){d(a)}})},73662:(a,b,c)=>{"use strict";c.d(b,{nA:()=>g});let d=/^[a-z][a-z0-9-]{2,63}$/,e=/^\/[a-z][a-z0-9-]{1,63}$/;function f(a,b,c){a.push(`${b}: ${c}`)}function g(a,b={}){var c;let h,i=[],j=[];try{h=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!h||"undefined"===h)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(h,"utf8")>65536)return{ok:!1,errors:["spec: exceeds 64KB"],warnings:[],normalized:null};return null===a||"object"!=typeof a||Array.isArray(a)?{ok:!1,errors:["spec: must be an object"],warnings:[],normalized:null}:(a.slug&&"string"==typeof a.slug?d.test(a.slug)||f(i,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):f(i,"slug","required (string)"),a.title&&"string"==typeof a.title||f(i,"title","required (non-empty string)"),null!=a.description&&"string"!=typeof a.description&&f(i,"description","must be a string"),a.markdown&&"string"==typeof a.markdown?a.markdown.length>1e5&&f(i,"markdown",`exceeds 100000 chars (got ${a.markdown.length})`):f(i,"markdown","required (non-empty string)"),null!=a.invocation&&("string"!=typeof a.invocation?f(i,"invocation","must be a string"):e.test(a.invocation)||f(i,"invocation",`must match ${e} (e.g. "/my-skill")`)),null!=a.trigger_examples&&(Array.isArray(a.trigger_examples)?a.trigger_examples.forEach((a,b)=>{"string"==typeof a&&a.trim()||f(i,`trigger_examples[${b}]`,"must be a non-empty string")}):f(i,"trigger_examples","must be an array of strings")),null!=a.category&&"string"!=typeof a.category&&f(i,"category","must be a string"),i.length>0)?{ok:!1,errors:i,warnings:j,normalized:null}:{ok:!0,errors:[],warnings:j,normalized:{slug:(c=a).slug,title:c.title,description:c.description||null,category:"string"==typeof c.category&&c.category?c.category:"authored",invocation:"string"==typeof c.invocation&&c.invocation?c.invocation:`/${c.slug}`,markdown:c.markdown,trigger_examples:Array.isArray(c.trigger_examples)?c.trigger_examples.filter(a=>"string"==typeof a&&a.trim()):[]}}}},73899:(a,b,c)=>{"use strict";function d(a,b=null){if(!a)return b;try{return JSON.parse(a)}catch{return b}}c.d(b,{lp:()=>g,oi:()=>d,qY:()=>h});let e=/mars|accent|primary|brand|red|orange|coral/i,f=/^#?(ffffff|000000|fff|0f0f11|111318|1a1817|f7f4ee|e8e8e5|dcdcd8)$/i;function g(a){let b=Array.isArray(a?.colors)?a.colors:[];if(0===b.length)return"#c2452a";let c=b.find(a=>e.test(a?.name||""));if(c?.value)return c.value;let d=b.find(a=>a?.value&&!f.test(a.value));return d?.value||b[0].value||"#c2452a"}function h(a){try{let b=a.prepare("SELECT slug FROM marketplace_items WHERE kind = 'agent'").all();return new Set(b.map(a=>a.slug))}catch{return new Set}}},73912:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{AB:()=>y,CS:()=>s,Io:()=>w,QM:()=>v,R1:()=>z,Ww:()=>x,dh:()=>q,mM:()=>u,uT:()=>p,vV:()=>r,xP:()=>t});var e=c(73024),f=c(76760),g=c(77598),h=c(34255),i=c(9381),j=c(61423),k=c(9001),l=a([h,j,k]);[h,j,k]=l.then?(await l)():l;let A=f.join(i.nJ,"disk");function m(a){return a?{...a}:null}function n(a){return a?{...a,local_only:1===a.local_only}:null}function o(a={}){try{(0,k.jO)("disk",a)}catch{}}function p(a){let b=(0,h.getDb)();return a?b.prepare("SELECT * FROM disk_folders WHERE project_id = ? ORDER BY path ASC").all(a).map(m):b.prepare("SELECT * FROM disk_folders ORDER BY path ASC").all().map(m)}function q(a){let b=(0,j.U1)(a);if(!b)throw Error("project not found");return(0,j.yK)(b.id,b.slug),m((0,h.getDb)().prepare("SELECT * FROM disk_folders WHERE project_id = ? AND parent_id IS NULL LIMIT 1").get(b.id))}function r(a,b,c){if("object"==typeof a&&a){let d=a;a=d.project_id||d.projectId,b=d.parent_id||d.parentId||null,c=d.name}let d=(0,j.U1)(a);if(!d)throw Error("project not found");let g=String(c||"").trim();if(!g)throw Error("name is required");let i=(0,h.getDb)(),k=b?i.prepare("SELECT * FROM disk_folders WHERE id = ?").get(b):q(d.id);if(!k)throw Error("parent folder not found");if(i.prepare("SELECT * FROM disk_folders WHERE project_id = ? AND parent_id = ? AND name = ? LIMIT 1").get(d.id,k.id,g)){let a=Error(`Folder "${g}" already exists.`);throw a.code="FOLDER_EXISTS",a}let l=`${k.path.replace(/\/$/,"")}/${g}/`,n=(0,h.nowIso)(),p=(0,h.newId)("df");try{i.prepare("INSERT INTO disk_folders (id, project_id, parent_id, name, path, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run(p,d.id,k.id,g,l,n,n)}catch(a){if(String(a?.message||"").includes("UNIQUE constraint failed")){let a=Error(`Folder "${g}" already exists.`);throw a.code="FOLDER_EXISTS",a}throw a}let r=f.join(A,l.replace(/^\/+|\/+$/g,""));e.mkdirSync(r,{recursive:!0});let s=m(i.prepare("SELECT * FROM disk_folders WHERE id = ?").get(p));return o({project_id:d.id,folder_id:s?.id||p,action:"folder.create"}),s}function s(a={}){let b=(0,h.getDb)(),c=[],d=[];a.project_id&&(c.push("project_id = ?"),d.push(a.project_id)),a.folder_id&&(c.push("folder_id = ?"),d.push(a.folder_id));let e=`SELECT * FROM disk_files ${c.length?"WHERE "+c.join(" AND "):""} ORDER BY updated_at DESC`;return b.prepare(e).all(...d).map(n)}function t(){let a=(0,h.getDb)().prepare(`SELECT project_id, COUNT(*) AS count
3331
3507
  FROM disk_files
3332
3508
  WHERE project_id IS NOT NULL
3333
- GROUP BY project_id`).all(),b=Object.create(null);for(let c of a)b[c.project_id]=c.count;return b}function u(a){return n((0,h.getDb)().prepare("SELECT * FROM disk_files WHERE id = ?").get(a))}function v(a,b,c,d={}){if("object"==typeof a&&a){let e=a;a=e.project_id||e.projectId,b=e.folder_id||e.folderId||null,c={name:e.name,content:e.content||e.buffer||"",type:e.mime_type||e.type||""},d={...e,local_only:e.local_only}}let i=(0,j.U1)(a);if(!i)throw Error("project not found");let k=b?(0,h.getDb)().prepare("SELECT * FROM disk_folders WHERE id = ?").get(b):q(i.id);if(!k)throw Error("folder not found");let l=Buffer.isBuffer(c?.buffer)?c.buffer:Buffer.from(c?.content||""),m=String(c?.name||d.name||"upload.bin").replace(/[\\/]+/g,"-"),n=g.createHash("sha256").update(l).digest("hex"),p=f.join(A,k.path.replace(/^\/+|\/+$/g,""));e.mkdirSync(p,{recursive:!0});let r=f.join(p,`${n.slice(0,12)}-${m}`);e.existsSync(r)||e.writeFileSync(r,l);let s=(0,h.nowIso)(),t=(0,h.newId)("file");(0,h.getDb)().prepare("INSERT INTO disk_files (id, project_id, folder_id, name, kind, mime_type, size_bytes, sha256, storage_path, local_only, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(t,i.id,k.id,m,function(a,b=""){let c=f.extname(a||"").toLowerCase();return[".md",".markdown"].includes(c)?"md":".pdf"===c?"pdf":[".mp3",".wav",".m4a",".ogg",".webm"].includes(c)||b.startsWith("audio/")?"audio":[".png",".jpg",".jpeg",".webp",".gif"].includes(c)||b.startsWith("image/")?"image":[".txt",".csv",".json",".yaml",".yml"].includes(c)||b.startsWith("text/")?"text":"other"}(m,c?.type||d.mime_type||""),c?.type||d.mime_type||null,l.length,n,r,+!!d.local_only,s,s);let w=u(t);try{(0,j.Ip)(i.id,{action:"project.file.uploaded",title:`Uploaded ${m}`,summary:`Attached ${m} to the project folder`,status:"complete",source:"disk",details:{file_id:t,folder_id:k.id,kind:w.kind,size_bytes:w.size_bytes,local_only:w.local_only}})}catch{}return o({project_id:i.id,folder_id:k.id,file_id:t,action:"file.upload"}),w}function w(a,b={}){let c=["name","folder_id","local_only"],d=Object.entries(b).filter(([a,b])=>c.includes(a)&&void 0!==b);if(!d.length)return u(a);let e=d.map(([a])=>`${a} = ?`).concat("updated_at = ?").join(", "),f=d.map(([a,b])=>"local_only"===a?+!!b:b).concat((0,h.nowIso)(),a);(0,h.getDb)().prepare(`UPDATE disk_files SET ${e} WHERE id = ?`).run(...f);let g=u(a);return o({project_id:g?.project_id||null,folder_id:g?.folder_id||null,file_id:a,action:"file.update"}),g}function x(a){let b=u(a);if(!b)return!1;(0,h.getDb)().prepare("DELETE FROM disk_files WHERE id = ?").run(a);try{e.unlinkSync(b.storage_path)}catch{}return o({project_id:b.project_id,folder_id:b.folder_id||null,file_id:a,action:"file.delete"}),!0}function y(a,b){if(!b)throw Error("engine parameter required");let c=u(a);if(!c)throw Error("file not found");return c.local_only&&!["ollama","local_whisper"].includes(String(b))?{...c,content:"<redacted: local_only>",redacted:!0}:{...c,content:e.readFileSync(c.storage_path,"utf8"),redacted:!1}}function z(a,b){let c=y(a,b);if(c.redacted){let a=Error("local_only: engine not permitted");throw a.code="LOCAL_ONLY_DENIED",a}return c.storage_path}d()}catch(a){d(a)}})},78335:()=>{},78708:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$A:()=>n,Ac:()=>j,FT:()=>k,N3:()=>q,Us:()=>m,f3:()=>o,uS:()=>p});var e=c(76760),f=c(73024),g=c(34255),h=c(9381),i=a([g]);g=(i.then?(await i)():i)[0];let p=e.join(h.un,"generated-clis"),q=e.join(h.un,"skills","printing-press");e.join(h.nJ,"printing-press-clis.json");let r=/^[a-z0-9][a-z0-9-]{0,63}$/;function j(a){return"string"==typeof a&&r.test(a)}function k(a){let b=e.resolve(a),c=e.resolve(p);if(!b.startsWith(c+e.sep)&&b!==c)throw Error(`Path is not under workspace/generated-clis/: ${a}`);return b}function l(a){if(!a)return null;let b=null,c=[],d=[];try{b=a.manifest_json?JSON.parse(a.manifest_json):null}catch{b=null}try{c=a.declared_scopes?JSON.parse(a.declared_scopes):[]}catch{c=[]}try{d=a.required_secrets?JSON.parse(a.required_secrets):[]}catch{d=[]}return{slug:a.slug,source_kind:a.source_kind,source_url:a.source_url||null,installed_at:a.installed_at,updated_at:a.updated_at,path:a.path,declared_scopes:c,required_secrets:d,quota_bytes:a.quota_bytes||0x6400000,manifest:b,status:a.status}}function m({includeRemoved:a=!1}={}){let b=(0,g.getDb)();return(a?b.prepare("SELECT * FROM printing_press_clis ORDER BY installed_at DESC").all():b.prepare("SELECT * FROM printing_press_clis WHERE status != 'removed' ORDER BY installed_at DESC").all()).map(l)}function n(a){if(!j(a))return null;let b=(0,g.getDb)().prepare("SELECT * FROM printing_press_clis WHERE slug = ?").get(a);return l(b)}function o(a){let b=n(a);if(!b)return null;try{return{slug:a,bytes:function a(b){if(!f.existsSync(b))return 0;let c=0;for(let d of f.readdirSync(b,{withFileTypes:!0})){let g=e.join(b,d.name);if(d.isDirectory())c+=a(g);else if(d.isFile())try{c+=f.statSync(g).size}catch{}}return c}(b.path),quota_bytes:b.quota_bytes}}catch{return{slug:a,bytes:0,quota_bytes:b.quota_bytes,error:"measure_failed"}}}d()}catch(a){d(a)}})},79133:(a,b,c)=>{"use strict";c.d(b,{A5:()=>j,Pf:()=>h,decryptFromDiskBuffer:()=>k});var d=c(77598),e=c(87181);let f=Buffer.from("madarx-artifact-dek-v1"),g="1"===process.env.MADARX_ARTIFACT_ENCRYPTION;function h(){return g}function i(a){if(!a)throw Error("deriveOrgDek requires orgId");let b=(0,d.createHash)("sha256").update(a).digest(),c=(0,e.K2)({allowGenerate:!0});return Buffer.from((0,d.hkdfSync)("sha256",c,b,f,32))}function j(a,b){let{ciphertext:c,iv:e,authTag:f}=function(a,b){let c=i(a),e=(0,d.randomBytes)(12),f=(0,d.createCipheriv)("aes-256-gcm",c,e),g=Buffer.isBuffer(b)?b:Buffer.from(b,"utf8");return{ciphertext:Buffer.concat([f.update(g),f.final()]),iv:e,authTag:f.getAuthTag()}}(a,b);return Buffer.concat([e,f,c])}function k(a,b){if(!Buffer.isBuffer(b)||b.length<28)throw Error("Invalid encrypted artifact: too short");let c=b.subarray(0,12),e=b.subarray(12,28),f=b.subarray(28),g=i(a),h=(0,d.createDecipheriv)("aes-256-gcm",g,c);return h.setAuthTag(e),Buffer.concat([h.update(f),h.final()])}},79278:(a,b,c)=>{"use strict";c.d(b,{Pw:()=>o,pE:()=>f});let d=/^[a-z][a-z0-9-]{2,63}$/,e=new Set(["bearer","api_key","basic","oauth2","none"]),f=["low","medium","high","irreversible_external"],g=new Set(["GET","POST","PUT","PATCH","DELETE"]),h=new Set(["POST","PUT","PATCH","DELETE"]),i=/^[a-z][a-z0-9_]{0,63}$/,j=/^[A-Z][A-Z0-9_]{1,63}$/,k=new Set(["token","key","secret","password","value","api_key","bearer","credentials","access_token","refresh_token","client_id","client_secret"]);function l(a,b,c){a.push(`${b}: ${c}`)}function m(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function n(a){return f.indexOf(a)}function o(a,b={}){let c,p=[],q=[];try{c=JSON.stringify(a)}catch{return{ok:!1,errors:["manifest: not JSON-serialisable"],warnings:[],normalized:null}}if(!c||"undefined"===c)return{ok:!1,errors:["manifest: required"],warnings:[],normalized:null};if(Buffer.byteLength(c,"utf8")>65536)return{ok:!1,errors:[`manifest: serialized length ${Buffer.byteLength(c,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!m(a))return{ok:!1,errors:["manifest: must be a plain object"],warnings:[],normalized:null};a.slug&&"string"==typeof a.slug?d.test(a.slug)||l(p,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, hyphens allowed)`):l(p,"slug","required (string)"),null!=a.title&&"string"!=typeof a.title&&l(p,"title","must be a string");let r=null;if(a.base_url&&"string"==typeof a.base_url){let b;try{b=new URL(a.base_url)}catch{l(p,"base_url","must be a valid URL")}b&&("https:"!==b.protocol&&l(p,"base_url","must be https"),r=b.hostname.toLowerCase())}else l(p,"base_url","required (string)");let s=[];if(Array.isArray(a.allowed_hosts)&&0!==a.allowed_hosts.length?((s=a.allowed_hosts.map(a=>"string"==typeof a?a.toLowerCase():a)).forEach((a,b)=>{if("string"!=typeof a||!a)return void l(p,`allowed_hosts[${b}]`,"must be a non-empty string");(function(a){if(!a)return!1;let b=String(a).toLowerCase().replace(/^\[|\]$/g,"");if("localhost"===b||"::1"===b||b.endsWith(".localhost")||b.endsWith(".local"))return!0;if(b.includes(":"))return!!(b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80:"))||"::"===b;let c=b.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);if(!c)return!1;let[d,e]=[Number(c[1]),Number(c[2])];return 10===d||127===d||0===d||169===d&&254===e||192===d&&168===e||172===d&&!!(e>=16)&&!!(e<=31)})(a)&&l(p,`allowed_hosts[${b}]`,`private/local hosts are not allowed ('${a}')`)}),r&&!s.includes(r)&&l(p,"allowed_hosts",`must include base_url host '${r}'`)):l(p,"allowed_hosts","required (non-empty array of host strings)"),!function(a,b){if(!m(a))return l(b,"auth","required (plain object)");for(let c of(a.type&&e.has(a.type)||l(b,"auth.type",`must be one of ${[...e].join(", ")}`),Object.keys(a)))k.has(c.toLowerCase())&&l(b,"auth",`raw secrets are not allowed; reference by *_ref only (found field '${c}')`);let c=a.type;if(("bearer"===c||"api_key"===c)&&(a.secret_ref&&"string"==typeof a.secret_ref?j.test(a.secret_ref)||l(b,"auth.secret_ref",`must match ${j} (uppercase, starts with letter, underscores/digits, max 64 chars)`):l(b,"auth.secret_ref","required for bearer/api_key auth (string)")),"basic"===c&&(a.username_ref&&"string"==typeof a.username_ref?j.test(a.username_ref)||l(b,"auth.username_ref",`must match ${j}`):l(b,"auth.username_ref","required for basic auth (string)"),a.password_ref&&"string"==typeof a.password_ref?j.test(a.password_ref)||l(b,"auth.password_ref",`must match ${j}`):l(b,"auth.password_ref","required for basic auth (string)")),"oauth2"===c){for(let c of(a.access_token_ref&&"string"==typeof a.access_token_ref?j.test(a.access_token_ref)||l(b,"auth.access_token_ref",`must match ${j}`):l(b,"auth.access_token_ref","required for oauth2 auth (vault ref)"),["refresh_token_ref","client_id_ref","client_secret_ref"]))null!=a[c]&&("string"==typeof a[c]&&j.test(a[c])||l(b,`auth.${c}`,`must match ${j}`));if(null!=a.token_url){let c=!1;try{c="https:"===new URL(a.token_url).protocol}catch{c=!1}c||l(b,"auth.token_url","must be a valid https URL")}}}(a.auth,p),null!=a.default_headers&&function(a,b){if(!m(a))return l(b,"default_headers","must be a plain object");for(let[c,d]of Object.entries(a))"string"!=typeof d&&l(b,`default_headers.${c}`,"header value must be a string"),/authorization/i.test(c)&&l(b,"default_headers",`must not set Authorization (use auth); found header '${c}'`)}(a.default_headers,p),!m(a.endpoints)||0===Object.keys(a.endpoints).length)return l(p,"endpoints","required (non-empty plain object)"),{ok:!1,errors:p,warnings:q,normalized:null};let t=Object.entries(a.endpoints);if(t.length>50)return l(p,"endpoints","exceeds 50 endpoint cap"),{ok:!1,errors:p,warnings:q,normalized:null};let u={};for(let[a,b]of t){let c=`endpoints.${a}`;i.test(a)||l(p,c,`endpoint name must match ${i}`);let d=function(a,b,c){let d;if(!m(a))return l(b,c,"must be a plain object"),null;if(a.method&&g.has(a.method)||l(b,`${c}.method`,`must be one of ${[...g].join(", ")} (uppercase)`),a.path&&"string"==typeof a.path)if(a.path.startsWith("/"))for(let d of function(a){let b,c=[],d=/\{([^}]+)\}/g;for(;null!==(b=d.exec(a));)c.push(b[1]);return c}(a.path))/^[a-z][a-z0-9_]*$/.test(d)||l(b,`${c}.path`,`placeholder '{${d}}' must match /^[a-z][a-z0-9_]*$/`);else l(b,`${c}.path`,"must start with '/'");else l(b,`${c}.path`,"required (string starting with /)");null!=a.description&&"string"!=typeof a.description&&l(b,`${c}.description`,"must be a string"),null==a.input_schema||m(a.input_schema)||l(b,`${c}.input_schema`,"must be a plain object");let e=a.method,i=h.has(e),j=a.risk,k=!1;return null==j||f.includes(j)||(l(b,`${c}.risk`,`must be one of ${f.join(", ")}`),j=void 0),null==j?d=i?"medium":"low":i&&n(j)<n("medium")?(d="medium",k=!0):d=j,{effectiveRisk:d,clampWarning:k}}(b,p,c);if(d){let{effectiveRisk:e,clampWarning:f}=d;f&&q.push(`${c}.risk: clamped low→medium for write method`),u[a]={method:b.method,path:b.path??null,risk:e,input_schema:null!=b.input_schema?structuredClone(b.input_schema):null,description:b.description??null}}}if(p.length>0)return{ok:!1,errors:p,warnings:q,normalized:null};let v={},w=new Set(["type","header","prefix","query_param","secret_ref","username_ref","password_ref","access_token_ref","refresh_token_ref","client_id_ref","client_secret_ref","token_url","provider"]);for(let[b,c]of Object.entries(a.auth))w.has(b)&&(v[b]=c);return{ok:!0,errors:[],warnings:q,normalized:{slug:a.slug,title:a.title??null,base_url:a.base_url,allowed_hosts:s,auth:v,default_headers:null!=a.default_headers?structuredClone(a.default_headers):{},endpoints:u}}}},80987:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Cw:()=>s,ID:()=>r,VC:()=>t,gE:()=>q});var e=c(31421),f=c(76760),g=c(73024),h=c(80099),i=c(9381),j=c(78708),k=c(41249),l=c(24516),m=a([j,l]);[j,l]=m.then?(await m)():m;let u=f.join(i.Dl,"scripts","printing-press"),v=f.join(u,"install.mjs"),w=f.join(u,"install-cli.mjs");function n(){return(0,k.Qw)((0,k.U5)())}function o(a,b,{cwd:c,timeoutMs:d,env:f}={}){return new Promise((g,h)=>{let i=(0,e.spawn)(a,b,{cwd:c,shell:!1,env:f||{PATH:process.env.PATH,HOME:process.env.HOME,NODE_ENV:"production"}}),j=Buffer.alloc(0),k=Buffer.alloc(0),l=!1,m=!1,n=!1,o=setTimeout(()=>{n=!0;try{i.kill("SIGKILL")}catch{}},d||6e4);i.stdout.on("data",a=>{j.length+a.length>262144?(j=Buffer.concat([j,a.slice(0,262144-j.length)]),l=!0):j=Buffer.concat([j,a])}),i.stderr.on("data",a=>{k.length+a.length>262144?(k=Buffer.concat([k,a.slice(0,262144-k.length)]),m=!0):k=Buffer.concat([k,a])}),i.on("error",a=>{clearTimeout(o),h(a)}),i.on("close",(a,b)=>{clearTimeout(o),g({exit_code:a,signal:b,timed_out:n,stdout:j.toString("utf8"),stderr:k.toString("utf8"),stdout_truncated:l,stderr_truncated:m})})})}function p(a){return(a?.declared_scopes||[]).some(a=>"string"==typeof a&&/write|mutate|delete|push/i.test(a))}async function q(a={},b={}){let c=n();if(!g.existsSync(u))return{ok:!1,status:"misconfigured",reason:`sub-package missing at ${u}`};let d=await o("node",[v],{cwd:u,timeoutMs:3e5});return d.timed_out?{ok:!1,status:"timeout",stderr:d.stderr}:0!==d.exit_code?{ok:!1,status:"failed",exit_code:d.exit_code,stderr:d.stderr,security_mode:c.mode}:{ok:!0,status:"installed",skills_dir:j.N3,security_mode:c.mode,stdout_tail:d.stdout.slice(-1024)}}async function r(a={},b={}){let c=n(),d=String(a.slug||"").trim();if(!(0,j.Ac)(d))return{ok:!1,status:"invalid_input",reason:"slug must match /^[a-z0-9][a-z0-9-]{0,63}$/"};let e=String(a.source||"starter-pack"),g=new Set(["starter-pack","github","local","spec"]);if(!g.has(e))return{ok:!1,status:"invalid_input",reason:`source must be one of ${[...g].join(", ")}`};let h=a.source_url?String(a.source_url):null;if("starter-pack"!==e&&!h)return{ok:!1,status:"invalid_input",reason:`source_url required when source=${e}`};let i=f.join(j.uS,d);try{(0,j.FT)(i)}catch(a){return{ok:!1,status:"unsafe_path",reason:a.message}}let k=[w,d,"--source",e];h&&k.push("--source-url",h);let l=await o("node",k,{cwd:u,timeoutMs:3e5});if(l.timed_out)return{ok:!1,status:"timeout",stderr:l.stderr};if(0!==l.exit_code)return{ok:!1,status:"failed",exit_code:l.exit_code,stderr:l.stderr};let m=(0,j.$A)(d);return m&&p(m)&&!c.allow_network_write_clis?{ok:!1,status:"refused",reason:`Security mode "${c.mode}" forbids CLIs declaring write scopes. Declared: ${JSON.stringify(m.declared_scopes)}`,cli:m}:{ok:!0,status:"generated",cli:m,security_mode:c.mode}}async function s(a={},b={}){let c,d,e=n(),h=String(a.slug||"").trim();if(!(0,j.Ac)(h))return{ok:!1,status:"invalid_input",reason:"invalid slug"};let i=(0,j.$A)(h);if(!i||"removed"===i.status)return{ok:!1,status:"not_installed",slug:h};if("disabled"===i.status)return{ok:!1,status:"disabled",slug:h};if(p(i)&&!e.allow_network_write_clis)return{ok:!1,status:"refused",reason:`Security mode "${e.mode}" forbids running CLIs with write scopes.`};let k=Array.isArray(a.args)?a.args.map(String):[];for(let a of k)if(/[;&|`$<>]/.test(a))return{ok:!1,status:"unsafe_args",reason:`argv contains shell metacharacter: ${a}`};try{(0,j.FT)(i.path)}catch(a){return{ok:!1,status:"unsafe_path",reason:a.message}}let m=process.env.GOBIN||(process.env.GOPATH?`${process.env.GOPATH}/bin`:null)||(process.env.HOME?`${process.env.HOME}/go/bin`:null),q=m?f.join(m,`${h}-pp-cli`):null,r=f.join(i.path,"bin"),t=f.join(i.path,"index.js");if(q&&g.existsSync(q))c=q,d=k;else if(g.existsSync(r))c=r,d=k;else{if(!g.existsSync(t))return{ok:!1,status:"no_entry_point",reason:`No entry point found. Tried: ${q||"(no go bin dir)"} , ${r}, ${t}`};c=process.execPath,d=[t,...k]}let u=function(a,b={}){let c={PATH:process.env.PATH,HOME:process.env.HOME,NODE_ENV:"production",PRINTING_PRESS_CLI_SLUG:a.slug,PRINTING_PRESS_DATA_DIR:a.path};for(let d of a.required_secrets||[])if("string"==typeof d&&/^[A-Z][A-Z0-9_]*$/.test(d))try{let a=(0,l.getSecret)(d,{agent_id:b.agent_id,project_id:b.project_id});a&&(c[d]=a)}catch{}return c}(i,b),v=Math.min(Number(a.timeout_ms)||6e4,3e5),w=await o(c,d,{cwd:i.path,timeoutMs:v,env:u});return{ok:0===w.exit_code,status:w.timed_out?"timeout":0===w.exit_code?"complete":"failed",slug:h,exit_code:w.exit_code,timed_out:w.timed_out,stdout:w.stdout,stderr:w.stderr,stdout_truncated:w.stdout_truncated,stderr_truncated:w.stderr_truncated,security_mode:e.mode}}let x=/\b(INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|REPLACE|ATTACH|DETACH|PRAGMA|VACUUM|REINDEX|TRUNCATE)\b/i;async function t(a={},b={}){let c,d=String(a.slug||"").trim();if(!(0,j.Ac)(d))return{ok:!1,status:"invalid_input",reason:"invalid slug"};let e=(0,j.$A)(d);if(!e||"removed"===e.status)return{ok:!1,status:"not_installed",slug:d};let i=String(a.sql||"").trim();if(!i)return{ok:!1,status:"invalid_input",reason:"sql is required"};if(i.includes(";"))return{ok:!1,status:"unsafe_sql",reason:"multi-statement queries are not allowed"};if(x.test(i))return{ok:!1,status:"unsafe_sql",reason:"only SELECT-style read queries are permitted"};if(!/^\s*(SELECT|WITH)\b/i.test(i))return{ok:!1,status:"unsafe_sql",reason:"query must begin with SELECT or WITH"};let k=process.env.XDG_DATA_HOME||(process.env.HOME?f.join(process.env.HOME,".local","share"):null),l=[f.join(e.path,"data.sqlite"),f.join(e.path,`${d}.sqlite`),k?f.join(k,`${d}-pp-cli`,"data.db"):null,k?f.join(k,`${d}-pp-cli`,"data.sqlite"):null].filter(Boolean),m=l.find(a=>g.existsSync(a));if(!m)return{ok:!1,status:"no_mirror",reason:"CLI has no local SQLite mirror",tried:l};if(m.startsWith(f.resolve(e.path)+f.sep))try{(0,j.FT)(m)}catch(a){return{ok:!1,status:"unsafe_path",reason:a.message}}let n=Array.isArray(a.params)?a.params:[];try{c=new h.DatabaseSync(m,{readOnly:!0})}catch(a){return{ok:!1,status:"open_failed",reason:a.message}}try{let a=c.prepare(i).all(...n).slice(0,1e3);return{ok:!0,status:"complete",slug:d,row_count:a.length,truncated:1e3===a.length,rows:a}}catch(a){return{ok:!1,status:"query_failed",reason:a.message}}finally{try{c.close()}catch{}}}d()}catch(a){d(a)}})},81553:(a,b,c)=>{"use strict";c.d(b,{YO:()=>j,ct:()=>m,mU:()=>k,rd:()=>g,runUpdateCheck:()=>n,shouldAutoApply:()=>o});var d=c(73024),e=c(76760),f=c(73136);let g="madarx",h=`https://registry.npmjs.org/${g}/latest`,i=e.dirname((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/update-check.js"));function j(){if(process.env.MADARX_VERSION)return process.env.MADARX_VERSION;for(let a of[e.join(i,"..","package.json"),e.join(process.cwd(),"package.json"),e.join(process.cwd(),".next","standalone","package.json")]){let b=function(a){try{let b=JSON.parse(d.readFileSync(a,"utf8"));if(b&&b.name===g&&b.version)return b.version}catch{}return null}(a);if(b)return b}return"0.0.0"}function k(a,b){let c=a=>String(a).split("-")[0].split(".").slice(0,3).map(a=>parseInt(a,10)||0),d=c(a),e=c(b);for(let a=0;a<Math.max(d.length,e.length);a++){let b=(d[a]||0)-(e[a]||0);if(0!==b)return b>0?1:-1}return 0}async function l({fetchImpl:a=fetch,timeoutMs:b=4e3}={}){try{let c=await a(h,{signal:AbortSignal.timeout(b)});if(!c.ok)return null;let d=await c.json();return d?.version||null}catch{return null}}function m(a){try{return JSON.parse(d.readFileSync(a,"utf8"))}catch{return null}}async function n({file:a,current:b=j(),fetchImpl:c=fetch,nowIso:f}={}){let g=await l({fetchImpl:c}),h=f||new Date().toISOString();if(!g){let c=a?m(a):null;return{ts:h,current:b,latest:c?.latest||null,behind:!1,reachable:!1}}let i=k(g,b)>0,o={ts:h,current:b,latest:g,behind:i,reachable:!0};return a&&(d.mkdirSync(e.dirname(a),{recursive:!0}),d.writeFileSync(a,JSON.stringify(o,null,2))),o}function o({behind:a,mode:b,apply:c}){return!!a&&"weekly"===b&&"auto"===c}},81833:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{BQ:()=>o,HO:()=>s,Jh:()=>n,OT:()=>r,Om:()=>k,bz:()=>m,cN:()=>p,h5:()=>q,iF:()=>i,k2:()=>l,pp:()=>j});var e=c(34255),f=a([e]);function g(a){return a?{id:String(a.id),name:String(a.name||""),position:Number(a.position)||0,is_active:1===a.is_active,created_at:a.created_at,updated_at:a.updated_at}:null}function h(a,b){return String(a||"").trim().slice(0,32)||b}function i(){let a=(0,e.getDb)();l();let b=a.prepare("SELECT * FROM dashboard_spaces ORDER BY position ASC, created_at ASC").all().map(g),c=b.find(a=>a.is_active)||b[0]||null;return{spaces:b,active_space_id:c?c.id:null}}function j(a){if(!a)return null;let b=(0,e.getDb)().prepare("SELECT * FROM dashboard_spaces WHERE id = ?").get(String(a));return g(b)}function k(a=[],{fallback:b="default"}={}){for(let b of Array.isArray(a)?a:[a])if(b&&j(b))return b;return b}function l(){let a=(0,e.getDb)(),b=a.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n;if(0===b){let b=(0,e.nowIso)();a.prepare("INSERT INTO dashboard_spaces (id, name, position, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)").run("default","main",0,1,b,b)}a.prepare("UPDATE artifacts SET space_id = 'default' WHERE space_id IS NULL").run()}function m({name:a}={}){let b=(0,e.getDb)();l();let c=b.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n;if(c>=32){let a=Error("Maximum of 32 spaces reached.");throw a.code="SPACE_LIMIT",a}let d=b.prepare("SELECT MAX(position) AS m FROM dashboard_spaces").get().m,f=(Number(d)||0)+1,g=(0,e.newId)("space"),i=(0,e.nowIso)(),k=h(a,`Space ${c+1}`);return b.prepare("INSERT INTO dashboard_spaces (id, name, position, is_active, created_at, updated_at) VALUES (?, ?, ?, 0, ?, ?)").run(g,k,f,i,i),j(g)}function n(a,b){let c=j(a);if(!c){let a=Error("Space not found.");throw a.code="SPACE_NOT_FOUND",a}let d=h(b,c.name);return d===c.name?c:((0,e.getDb)().prepare("UPDATE dashboard_spaces SET name = ?, updated_at = ? WHERE id = ?").run(d,(0,e.nowIso)(),a),j(a))}function o(a){if(!j(a)){let a=Error("Space not found.");throw a.code="SPACE_NOT_FOUND",a}let b=(0,e.getDb)(),c=(0,e.nowIso)(),d=b.prepare("BEGIN IMMEDIATE");try{d.run(),b.prepare("UPDATE dashboard_spaces SET is_active = 0, updated_at = ? WHERE is_active = 1").run(c),b.prepare("UPDATE dashboard_spaces SET is_active = 1, updated_at = ? WHERE id = ?").run(c,a),b.prepare("COMMIT").run()}catch(a){try{b.prepare("ROLLBACK").run()}catch{}throw a}return j(a)}function p(a){let b=(0,e.getDb)(),c=j(a);if(!c)return null;if(b.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n<=1){let a=Error("Cannot delete the last remaining space.");throw a.code="SPACE_LAST",a}let d=b.prepare("SELECT * FROM dashboard_spaces WHERE id != ? ORDER BY position ASC, created_at ASC LIMIT 1").get(a);if(!d){let a=Error("No fallback space available.");throw a.code="SPACE_NO_FALLBACK",a}let f=(0,e.nowIso)(),g=b.prepare("BEGIN IMMEDIATE");try{g.run(),b.prepare("UPDATE artifacts SET space_id = ? WHERE space_id = ?").run(d.id,a),b.prepare("UPDATE space_share_links SET revoked = 1 WHERE space_id = ? AND revoked = 0").run(a),b.prepare("DELETE FROM dashboard_spaces WHERE id = ?").run(a),c.is_active&&b.prepare("UPDATE dashboard_spaces SET is_active = 1, updated_at = ? WHERE id = ?").run(f,d.id),b.prepare("COMMIT").run()}catch(a){try{b.prepare("ROLLBACK").run()}catch{}throw a}return{deleted_id:a,moved_to:d.id}}function q(a,b){if(!a){let a=Error("artifact_id is required.");throw a.code="ARTIFACT_REQUIRED",a}let c=j(b);if(!c){let a=Error("Space not found.");throw a.code="SPACE_NOT_FOUND",a}let d=(0,e.getDb)(),f=d.prepare("SELECT id FROM artifacts WHERE id = ?").get(String(a));if(!f){let a=Error("Artifact not found.");throw a.code="ARTIFACT_NOT_FOUND",a}return d.prepare("UPDATE artifacts SET space_id = ?, pinned_to_space_at = datetime('now') WHERE id = ?").run(c.id,f.id),{artifact_id:f.id,space_id:c.id}}function r(){let a=(0,e.getDb)();l();let b=a.prepare("SELECT * FROM dashboard_spaces ORDER BY position ASC, created_at ASC").all().map(g),c=a.prepare("SELECT id, space_id FROM artifacts WHERE space_id IS NOT NULL").all(),d=new Map(b.map(a=>[a.id,[]]));for(let a of c)d.has(a.space_id)&&d.get(a.space_id).push(String(a.id));let f=b.map(a=>({...a,artifact_ids:d.get(a.id)||[]})),h=f.find(a=>a.is_active)||f[0]||null;return{spaces:f,active_space_id:h?h.id:null}}function s({spaces:a=[],active_space_id:b=null}={}){if(!Array.isArray(a)||0===a.length)return null;let c=(0,e.getDb)();l();let d=c.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n;if(!(1===d&&c.prepare("SELECT id FROM dashboard_spaces WHERE id = 'default'").get()))return null;let f=a.filter(a=>a&&"string"==typeof a.id&&a.id.length>0).slice(0,32);if(0===f.length)return null;let g=(0,e.nowIso)(),i=c.prepare("BEGIN IMMEDIATE");try{i.run(),c.prepare("DELETE FROM dashboard_spaces").run(),f.forEach((a,d)=>{let e=String(a.id),f=h(a.name,`Space ${d+1}`),i=b?e===String(b):0===d;c.prepare("INSERT INTO dashboard_spaces (id, name, position, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)").run(e,f,d,+!!i,g,g);let j=Array.isArray(a.artifactIds)?a.artifactIds:[],k=c.prepare("UPDATE artifacts SET space_id = ? WHERE id = ? AND (space_id IS NULL OR space_id = ?)");for(let a of j)"string"==typeof a&&k.run(e,a,e)});let a=c.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces WHERE is_active = 1").get().n;if(0===a){let a=c.prepare("SELECT id FROM dashboard_spaces ORDER BY position ASC, created_at ASC LIMIT 1").get();a&&c.prepare("UPDATE dashboard_spaces SET is_active = 1 WHERE id = ?").run(a.id)}c.prepare("COMMIT").run()}catch(a){try{c.prepare("ROLLBACK").run()}catch{}throw a}return r()}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},81992:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{cS:()=>j,r_:()=>i,vg:()=>k});var e=c(25938),f=a([e]);function g(a,{includeBody:b=!1}={}){let c=Object.fromEntries((a.payload?.headers||[]).map(a=>[String(a.name).toLowerCase(),a.value])),d={id:a.id,thread_id:a.threadId,from:c.from||null,subject:c.subject||null,date:c.date||null,snippet:a.snippet||""};return b&&(d.to=c.to||null,d.body_text=function a(b={}){if(b.body?.data)return function(a=""){if(!a)return"";try{return Buffer.from(String(a),"base64url").toString("utf8")}catch{return""}}(b.body.data);let c=Array.isArray(b.parts)?b.parts:[],d=c.find(a=>"text/plain"===a.mimeType&&a.body?.data)||c.find(a=>a.body?.data);return d?a(d):""}(a.payload||{})),d}async function h(a,b,c,d){let f=(0,e.s)(d,c),g=await f(a,{headers:{Authorization:`Bearer ${b}`}});if(!g.ok)throw Error(`google api failed: ${g.status}`);return g.json()}async function i(a={},b={}){let c="gmail_messages_list",d=await (0,e.r)(b,c),f=new URL("https://gmail.googleapis.com/gmail/v1/users/me/messages");for(let b of(a.max_results&&f.searchParams.set("maxResults",String(a.max_results)),a.q&&f.searchParams.set("q",a.q),a.label_ids||a.labelIds||[]))f.searchParams.append("labelIds",String(b));let j=(await h(f,d,b,c)).messages||[];return Promise.all(j.map(async a=>{let e=await h(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(a.id)}?format=metadata`,d,b,c);return g(e)}))}async function j(a={},b={}){if(!a.message_id)throw Error("message_id is required");let c="gmail_message_read",d=await (0,e.r)(b,c),f=await h(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(a.message_id)}?format=full`,d,b,c);return g(f,{includeBody:!0})}async function k(a={},b={}){if(!a.thread_id)throw Error("thread_id is required");let c="gmail_thread_read",d=await (0,e.r)(b,c),f=await h(`https://gmail.googleapis.com/gmail/v1/users/me/threads/${encodeURIComponent(a.thread_id)}?format=full`,d,b,c);return{id:f.id,messages:(f.messages||[]).map(a=>g(a,{includeBody:!0}))}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},83963:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Dn:()=>ae,Fp:()=>aa,Fy:()=>F,G:()=>ai,HB:()=>R,Mu:()=>Y,Q4:()=>J,Qf:()=>_,Rz:()=>W,V0:()=>ag,VI:()=>P,Vk:()=>N,WH:()=>$,WX:()=>Z,X1:()=>X,createTask:()=>S,eE:()=>ac,fI:()=>B,gf:()=>I,gg:()=>O,hC:()=>ap,hW:()=>ak,iR:()=>ad,ij:()=>an,jN:()=>G,kP:()=>D,lC:()=>T,n5:()=>ao,nV:()=>aj,qF:()=>am,qt:()=>ah,rN:()=>ab,s_:()=>Q,vQ:()=>V,w4:()=>al,yS:()=>U,yX:()=>E,zP:()=>H});var e=c(34255),f=c(40563),g=c(61423),h=c(18313),i=a([e,f,g]);function j(a,b=null){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function k(a){return null==a?null:JSON.stringify(a)}function l(a){let b=globalThis.__madarxLiveEventBus;if(!b?.subscribers)return{id:a.id||(0,e.newId)("evt"),ts:a.ts||Date.now(),...a};let c={id:a.id||`evt-${b.nextId++}-${Math.random().toString(36).slice(2,8)}`,ts:a.ts||Date.now(),...a};for(let a of b.subscribers)try{a(c)}catch{}return c}function m(a){return a?{...a,tools:j(a.tools,[]),files:j(a.files,[]),memory:j(a.memory,[]),permissions_json:j(a.permissions_json,{}),metadata_json:j(a.metadata_json,{})}:null}function n(a){return a?{...a,parent_task_id:a.parent_task_id||null,tags:j(a.tags_json,[]),watchers:j(a.watchers_json,[]),due_at:a.due_at||null,estimate_minutes:null==a.estimate_minutes?null:Number(a.estimate_minutes),recurrence:a.recurrence||null,acceptance_criteria:a.acceptance_criteria||null}:null}function o(a){return a?{id:a.id,task_id:a.task_id,label:a.label,done:!!a.done,position:Number(a.position)||0,created_at:a.created_at,done_at:a.done_at||null}:null}function p(a){if(null==a)return null;if(Array.isArray(a)){let b=a.map(a=>String(a).trim()).filter(Boolean).slice(0,24);return b.length?b:[]}return"string"==typeof a?a.split(",").map(a=>a.trim()).filter(Boolean).slice(0,24):null}function q(a){if(null==a)return null;let b=(Array.isArray(a)?a:String(a).split(",")).map(a=>String(a).trim()).filter(Boolean).slice(0,24);return Array.from(new Set(b))}function r(a){if(!a)return null;let b=String(a).trim();if(!b)return null;if(/^\d{4}-\d{2}-\d{2}$/.test(b))return`${b}T23:59:59.000Z`;let c=new Date(b);return Number.isNaN(c.getTime())?null:c.toISOString()}function s(a){if(null==a||""===a)return null;let b=Number(a);return!Number.isFinite(b)||b<0?null:Math.round(b)}function t(a){if(!a)return null;let b=String(a).trim();return b?b.length>64?b.slice(0,64):b:null}function u(a){return a?{...a}:null}function v(a){return a?{...a,payload:j(a.payload_json,null)}:null}function w(a){return a?{...a,usage:j(a.usage_json,null),result:j(a.result_json,null)}:null}function x(a){return a?{...a,payload:j(a.payload_json,null)}:null}function y(a){return a?{...a,details:j(a.details_json,null),cursor:a.seq}:null}function z(a){return m((0,e.getDb)().prepare("SELECT * FROM agents WHERE id = ?").get(a))}function A(a){if(!a)return null;let b=z(a);if(!b)throw Error(`Agent not found: ${a}`);if("terminated"===b.status)throw Error(`Terminated agents cannot receive assignments: ${a}`);return b}function B(a){if(!a?.type||!1===a.persist)return null;let b=function(a){let b={agent_run_start:"agent.run.status",agent_run_complete:"agent.run.status",agent_tool_start:"agent.run.event",agent_tool_result:"agent.run.event",log:"agent.run.log"},c=(0,h._d)(b[a.type]||a.type,null);return c&&h.eh.includes(c)?{actor_type:a.actor_type||(a.agent_id?"agent":"system"),actor_id:a.actor_id||a.agent_id||null,agent_id:a.agent_id||null,run_id:a.run_id||null,entity_type:a.entity_type||(a.task_id?"task":a.run_id?"agent_run":a.agent_id?"agent":"event"),entity_id:a.entity_id||a.task_id||a.run_id||a.id||null,action:c,details:{...a,legacy_type:b[a.type]?a.type:void 0},created_at:a.created_at||(0,e.nowIso)()}:null}(a);return b?C(b):null}function C({actor_type:a="system",actor_id:b=null,agent_id:c=null,run_id:d=null,entity_type:f=null,entity_id:g=null,action:h,details:i=null,created_at:j=(0,e.nowIso)()}={}){if(!h)throw Error("activity action is required");let l=(0,e.getDb)(),m=(0,e.newId)("activity");l.prepare(`
3509
+ GROUP BY project_id`).all(),b=Object.create(null);for(let c of a)b[c.project_id]=c.count;return b}function u(a){return n((0,h.getDb)().prepare("SELECT * FROM disk_files WHERE id = ?").get(a))}function v(a,b,c,d={}){if("object"==typeof a&&a){let e=a;a=e.project_id||e.projectId,b=e.folder_id||e.folderId||null,c={name:e.name,content:e.content||e.buffer||"",type:e.mime_type||e.type||""},d={...e,local_only:e.local_only}}let i=(0,j.U1)(a);if(!i)throw Error("project not found");let k=b?(0,h.getDb)().prepare("SELECT * FROM disk_folders WHERE id = ?").get(b):q(i.id);if(!k)throw Error("folder not found");let l=Buffer.isBuffer(c?.buffer)?c.buffer:Buffer.from(c?.content||""),m=String(c?.name||d.name||"upload.bin").replace(/[\\/]+/g,"-"),n=g.createHash("sha256").update(l).digest("hex"),p=f.join(A,k.path.replace(/^\/+|\/+$/g,""));e.mkdirSync(p,{recursive:!0});let r=f.join(p,`${n.slice(0,12)}-${m}`);e.existsSync(r)||e.writeFileSync(r,l);let s=(0,h.nowIso)(),t=(0,h.newId)("file");(0,h.getDb)().prepare("INSERT INTO disk_files (id, project_id, folder_id, name, kind, mime_type, size_bytes, sha256, storage_path, local_only, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(t,i.id,k.id,m,function(a,b=""){let c=f.extname(a||"").toLowerCase();return[".md",".markdown"].includes(c)?"md":".pdf"===c?"pdf":[".mp3",".wav",".m4a",".ogg",".webm"].includes(c)||b.startsWith("audio/")?"audio":[".png",".jpg",".jpeg",".webp",".gif"].includes(c)||b.startsWith("image/")?"image":[".txt",".csv",".json",".yaml",".yml"].includes(c)||b.startsWith("text/")?"text":"other"}(m,c?.type||d.mime_type||""),c?.type||d.mime_type||null,l.length,n,r,+!!d.local_only,s,s);let w=u(t);try{(0,j.Ip)(i.id,{action:"project.file.uploaded",title:`Uploaded ${m}`,summary:`Attached ${m} to the project folder`,status:"complete",source:"disk",details:{file_id:t,folder_id:k.id,kind:w.kind,size_bytes:w.size_bytes,local_only:w.local_only}})}catch{}return o({project_id:i.id,folder_id:k.id,file_id:t,action:"file.upload"}),w}function w(a,b={}){let c=["name","folder_id","local_only"],d=Object.entries(b).filter(([a,b])=>c.includes(a)&&void 0!==b);if(!d.length)return u(a);let e=d.map(([a])=>`${a} = ?`).concat("updated_at = ?").join(", "),f=d.map(([a,b])=>"local_only"===a?+!!b:b).concat((0,h.nowIso)(),a);(0,h.getDb)().prepare(`UPDATE disk_files SET ${e} WHERE id = ?`).run(...f);let g=u(a);return o({project_id:g?.project_id||null,folder_id:g?.folder_id||null,file_id:a,action:"file.update"}),g}function x(a){let b=u(a);if(!b)return!1;(0,h.getDb)().prepare("DELETE FROM disk_files WHERE id = ?").run(a);try{e.unlinkSync(b.storage_path)}catch{}return o({project_id:b.project_id,folder_id:b.folder_id||null,file_id:a,action:"file.delete"}),!0}function y(a,b){if(!b)throw Error("engine parameter required");let c=u(a);if(!c)throw Error("file not found");return c.local_only&&!["ollama","local_whisper"].includes(String(b))?{...c,content:"<redacted: local_only>",redacted:!0}:{...c,content:e.readFileSync(c.storage_path,"utf8"),redacted:!1}}function z(a,b){let c=y(a,b);if(c.redacted){let a=Error("local_only: engine not permitted");throw a.code="LOCAL_ONLY_DENIED",a}return c.storage_path}d()}catch(a){d(a)}})},78335:()=>{},78708:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$A:()=>n,Ac:()=>j,FT:()=>k,N3:()=>q,Us:()=>m,f3:()=>o,uS:()=>p});var e=c(76760),f=c(73024),g=c(34255),h=c(9381),i=a([g]);g=(i.then?(await i)():i)[0];let p=e.join(h.un,"generated-clis"),q=e.join(h.un,"skills","printing-press");e.join(h.nJ,"printing-press-clis.json");let r=/^[a-z0-9][a-z0-9-]{0,63}$/;function j(a){return"string"==typeof a&&r.test(a)}function k(a){let b=e.resolve(a),c=e.resolve(p);if(!b.startsWith(c+e.sep)&&b!==c)throw Error(`Path is not under workspace/generated-clis/: ${a}`);return b}function l(a){if(!a)return null;let b=null,c=[],d=[];try{b=a.manifest_json?JSON.parse(a.manifest_json):null}catch{b=null}try{c=a.declared_scopes?JSON.parse(a.declared_scopes):[]}catch{c=[]}try{d=a.required_secrets?JSON.parse(a.required_secrets):[]}catch{d=[]}return{slug:a.slug,source_kind:a.source_kind,source_url:a.source_url||null,installed_at:a.installed_at,updated_at:a.updated_at,path:a.path,declared_scopes:c,required_secrets:d,quota_bytes:a.quota_bytes||0x6400000,manifest:b,status:a.status}}function m({includeRemoved:a=!1}={}){let b=(0,g.getDb)();return(a?b.prepare("SELECT * FROM printing_press_clis ORDER BY installed_at DESC").all():b.prepare("SELECT * FROM printing_press_clis WHERE status != 'removed' ORDER BY installed_at DESC").all()).map(l)}function n(a){if(!j(a))return null;let b=(0,g.getDb)().prepare("SELECT * FROM printing_press_clis WHERE slug = ?").get(a);return l(b)}function o(a){let b=n(a);if(!b)return null;try{return{slug:a,bytes:function a(b){if(!f.existsSync(b))return 0;let c=0;for(let d of f.readdirSync(b,{withFileTypes:!0})){let g=e.join(b,d.name);if(d.isDirectory())c+=a(g);else if(d.isFile())try{c+=f.statSync(g).size}catch{}}return c}(b.path),quota_bytes:b.quota_bytes}}catch{return{slug:a,bytes:0,quota_bytes:b.quota_bytes,error:"measure_failed"}}}d()}catch(a){d(a)}})},79133:(a,b,c)=>{"use strict";c.d(b,{A5:()=>j,Pf:()=>h,decryptFromDiskBuffer:()=>k});var d=c(77598),e=c(87181);let f=Buffer.from("madarx-artifact-dek-v1"),g="1"===process.env.MADARX_ARTIFACT_ENCRYPTION;function h(){return g}function i(a){if(!a)throw Error("deriveOrgDek requires orgId");let b=(0,d.createHash)("sha256").update(a).digest(),c=(0,e.K2)({allowGenerate:!0});return Buffer.from((0,d.hkdfSync)("sha256",c,b,f,32))}function j(a,b){let{ciphertext:c,iv:e,authTag:f}=function(a,b){let c=i(a),e=(0,d.randomBytes)(12),f=(0,d.createCipheriv)("aes-256-gcm",c,e),g=Buffer.isBuffer(b)?b:Buffer.from(b,"utf8");return{ciphertext:Buffer.concat([f.update(g),f.final()]),iv:e,authTag:f.getAuthTag()}}(a,b);return Buffer.concat([e,f,c])}function k(a,b){if(!Buffer.isBuffer(b)||b.length<28)throw Error("Invalid encrypted artifact: too short");let c=b.subarray(0,12),e=b.subarray(12,28),f=b.subarray(28),g=i(a),h=(0,d.createDecipheriv)("aes-256-gcm",g,c);return h.setAuthTag(e),Buffer.concat([h.update(f),h.final()])}},79278:(a,b,c)=>{"use strict";c.d(b,{Pw:()=>o,pE:()=>f});let d=/^[a-z][a-z0-9-]{2,63}$/,e=new Set(["bearer","api_key","basic","oauth2","none"]),f=["low","medium","high","irreversible_external"],g=new Set(["GET","POST","PUT","PATCH","DELETE"]),h=new Set(["POST","PUT","PATCH","DELETE"]),i=/^[a-z][a-z0-9_]{0,63}$/,j=/^[A-Z][A-Z0-9_]{1,63}$/,k=new Set(["token","key","secret","password","value","api_key","bearer","credentials","access_token","refresh_token","client_id","client_secret"]);function l(a,b,c){a.push(`${b}: ${c}`)}function m(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function n(a){return f.indexOf(a)}function o(a,b={}){let c,p=[],q=[];try{c=JSON.stringify(a)}catch{return{ok:!1,errors:["manifest: not JSON-serialisable"],warnings:[],normalized:null}}if(!c||"undefined"===c)return{ok:!1,errors:["manifest: required"],warnings:[],normalized:null};if(Buffer.byteLength(c,"utf8")>65536)return{ok:!1,errors:[`manifest: serialized length ${Buffer.byteLength(c,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!m(a))return{ok:!1,errors:["manifest: must be a plain object"],warnings:[],normalized:null};a.slug&&"string"==typeof a.slug?d.test(a.slug)||l(p,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, hyphens allowed)`):l(p,"slug","required (string)"),null!=a.title&&"string"!=typeof a.title&&l(p,"title","must be a string");let r=null;if(a.base_url&&"string"==typeof a.base_url){let b;try{b=new URL(a.base_url)}catch{l(p,"base_url","must be a valid URL")}b&&("https:"!==b.protocol&&l(p,"base_url","must be https"),r=b.hostname.toLowerCase())}else l(p,"base_url","required (string)");let s=[];if(Array.isArray(a.allowed_hosts)&&0!==a.allowed_hosts.length?((s=a.allowed_hosts.map(a=>"string"==typeof a?a.toLowerCase():a)).forEach((a,b)=>{if("string"!=typeof a||!a)return void l(p,`allowed_hosts[${b}]`,"must be a non-empty string");(function(a){if(!a)return!1;let b=String(a).toLowerCase().replace(/^\[|\]$/g,"");if("localhost"===b||"::1"===b||b.endsWith(".localhost")||b.endsWith(".local"))return!0;if(b.includes(":"))return!!(b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80:"))||"::"===b;let c=b.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);if(!c)return!1;let[d,e]=[Number(c[1]),Number(c[2])];return 10===d||127===d||0===d||169===d&&254===e||192===d&&168===e||172===d&&!!(e>=16)&&!!(e<=31)})(a)&&l(p,`allowed_hosts[${b}]`,`private/local hosts are not allowed ('${a}')`)}),r&&!s.includes(r)&&l(p,"allowed_hosts",`must include base_url host '${r}'`)):l(p,"allowed_hosts","required (non-empty array of host strings)"),!function(a,b){if(!m(a))return l(b,"auth","required (plain object)");for(let c of(a.type&&e.has(a.type)||l(b,"auth.type",`must be one of ${[...e].join(", ")}`),Object.keys(a)))k.has(c.toLowerCase())&&l(b,"auth",`raw secrets are not allowed; reference by *_ref only (found field '${c}')`);let c=a.type;if(("bearer"===c||"api_key"===c)&&(a.secret_ref&&"string"==typeof a.secret_ref?j.test(a.secret_ref)||l(b,"auth.secret_ref",`must match ${j} (uppercase, starts with letter, underscores/digits, max 64 chars)`):l(b,"auth.secret_ref","required for bearer/api_key auth (string)")),"basic"===c&&(a.username_ref&&"string"==typeof a.username_ref?j.test(a.username_ref)||l(b,"auth.username_ref",`must match ${j}`):l(b,"auth.username_ref","required for basic auth (string)"),a.password_ref&&"string"==typeof a.password_ref?j.test(a.password_ref)||l(b,"auth.password_ref",`must match ${j}`):l(b,"auth.password_ref","required for basic auth (string)")),"oauth2"===c){for(let c of(a.access_token_ref&&"string"==typeof a.access_token_ref?j.test(a.access_token_ref)||l(b,"auth.access_token_ref",`must match ${j}`):l(b,"auth.access_token_ref","required for oauth2 auth (vault ref)"),["refresh_token_ref","client_id_ref","client_secret_ref"]))null!=a[c]&&("string"==typeof a[c]&&j.test(a[c])||l(b,`auth.${c}`,`must match ${j}`));if(null!=a.token_url){let c=!1;try{c="https:"===new URL(a.token_url).protocol}catch{c=!1}c||l(b,"auth.token_url","must be a valid https URL")}}}(a.auth,p),null!=a.default_headers&&function(a,b){if(!m(a))return l(b,"default_headers","must be a plain object");for(let[c,d]of Object.entries(a))"string"!=typeof d&&l(b,`default_headers.${c}`,"header value must be a string"),/authorization/i.test(c)&&l(b,"default_headers",`must not set Authorization (use auth); found header '${c}'`)}(a.default_headers,p),!m(a.endpoints)||0===Object.keys(a.endpoints).length)return l(p,"endpoints","required (non-empty plain object)"),{ok:!1,errors:p,warnings:q,normalized:null};let t=Object.entries(a.endpoints);if(t.length>50)return l(p,"endpoints","exceeds 50 endpoint cap"),{ok:!1,errors:p,warnings:q,normalized:null};let u={};for(let[a,b]of t){let c=`endpoints.${a}`;i.test(a)||l(p,c,`endpoint name must match ${i}`);let d=function(a,b,c){let d;if(!m(a))return l(b,c,"must be a plain object"),null;if(a.method&&g.has(a.method)||l(b,`${c}.method`,`must be one of ${[...g].join(", ")} (uppercase)`),a.path&&"string"==typeof a.path)if(a.path.startsWith("/"))for(let d of function(a){let b,c=[],d=/\{([^}]+)\}/g;for(;null!==(b=d.exec(a));)c.push(b[1]);return c}(a.path))/^[a-z][a-z0-9_]*$/.test(d)||l(b,`${c}.path`,`placeholder '{${d}}' must match /^[a-z][a-z0-9_]*$/`);else l(b,`${c}.path`,"must start with '/'");else l(b,`${c}.path`,"required (string starting with /)");null!=a.description&&"string"!=typeof a.description&&l(b,`${c}.description`,"must be a string"),null==a.input_schema||m(a.input_schema)||l(b,`${c}.input_schema`,"must be a plain object");let e=a.method,i=h.has(e),j=a.risk,k=!1;return null==j||f.includes(j)||(l(b,`${c}.risk`,`must be one of ${f.join(", ")}`),j=void 0),null==j?d=i?"medium":"low":i&&n(j)<n("medium")?(d="medium",k=!0):d=j,{effectiveRisk:d,clampWarning:k}}(b,p,c);if(d){let{effectiveRisk:e,clampWarning:f}=d;f&&q.push(`${c}.risk: clamped low→medium for write method`),u[a]={method:b.method,path:b.path??null,risk:e,input_schema:null!=b.input_schema?structuredClone(b.input_schema):null,description:b.description??null}}}if(p.length>0)return{ok:!1,errors:p,warnings:q,normalized:null};let v={},w=new Set(["type","header","prefix","query_param","secret_ref","username_ref","password_ref","access_token_ref","refresh_token_ref","client_id_ref","client_secret_ref","token_url","provider"]);for(let[b,c]of Object.entries(a.auth))w.has(b)&&(v[b]=c);return{ok:!0,errors:[],warnings:q,normalized:{slug:a.slug,title:a.title??null,base_url:a.base_url,allowed_hosts:s,auth:v,default_headers:null!=a.default_headers?structuredClone(a.default_headers):{},endpoints:u}}}},80987:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Cw:()=>s,ID:()=>r,VC:()=>t,gE:()=>q});var e=c(31421),f=c(76760),g=c(73024),h=c(80099),i=c(9381),j=c(78708),k=c(41249),l=c(24516),m=a([j,l]);[j,l]=m.then?(await m)():m;let u=f.join(i.Dl,"scripts","printing-press"),v=f.join(u,"install.mjs"),w=f.join(u,"install-cli.mjs");function n(){return(0,k.Qw)((0,k.U5)())}function o(a,b,{cwd:c,timeoutMs:d,env:f}={}){return new Promise((g,h)=>{let i=(0,e.spawn)(a,b,{cwd:c,shell:!1,env:f||{PATH:process.env.PATH,HOME:process.env.HOME,NODE_ENV:"production"}}),j=Buffer.alloc(0),k=Buffer.alloc(0),l=!1,m=!1,n=!1,o=setTimeout(()=>{n=!0;try{i.kill("SIGKILL")}catch{}},d||6e4);i.stdout.on("data",a=>{j.length+a.length>262144?(j=Buffer.concat([j,a.slice(0,262144-j.length)]),l=!0):j=Buffer.concat([j,a])}),i.stderr.on("data",a=>{k.length+a.length>262144?(k=Buffer.concat([k,a.slice(0,262144-k.length)]),m=!0):k=Buffer.concat([k,a])}),i.on("error",a=>{clearTimeout(o),h(a)}),i.on("close",(a,b)=>{clearTimeout(o),g({exit_code:a,signal:b,timed_out:n,stdout:j.toString("utf8"),stderr:k.toString("utf8"),stdout_truncated:l,stderr_truncated:m})})})}function p(a){return(a?.declared_scopes||[]).some(a=>"string"==typeof a&&/write|mutate|delete|push/i.test(a))}async function q(a={},b={}){let c=n();if(!g.existsSync(u))return{ok:!1,status:"misconfigured",reason:`sub-package missing at ${u}`};let d=await o("node",[v],{cwd:u,timeoutMs:3e5});return d.timed_out?{ok:!1,status:"timeout",stderr:d.stderr}:0!==d.exit_code?{ok:!1,status:"failed",exit_code:d.exit_code,stderr:d.stderr,security_mode:c.mode}:{ok:!0,status:"installed",skills_dir:j.N3,security_mode:c.mode,stdout_tail:d.stdout.slice(-1024)}}async function r(a={},b={}){let c=n(),d=String(a.slug||"").trim();if(!(0,j.Ac)(d))return{ok:!1,status:"invalid_input",reason:"slug must match /^[a-z0-9][a-z0-9-]{0,63}$/"};let e=String(a.source||"starter-pack"),g=new Set(["starter-pack","github","local","spec"]);if(!g.has(e))return{ok:!1,status:"invalid_input",reason:`source must be one of ${[...g].join(", ")}`};let h=a.source_url?String(a.source_url):null;if("starter-pack"!==e&&!h)return{ok:!1,status:"invalid_input",reason:`source_url required when source=${e}`};let i=f.join(j.uS,d);try{(0,j.FT)(i)}catch(a){return{ok:!1,status:"unsafe_path",reason:a.message}}let k=[w,d,"--source",e];h&&k.push("--source-url",h);let l=await o("node",k,{cwd:u,timeoutMs:3e5});if(l.timed_out)return{ok:!1,status:"timeout",stderr:l.stderr};if(0!==l.exit_code)return{ok:!1,status:"failed",exit_code:l.exit_code,stderr:l.stderr};let m=(0,j.$A)(d);return m&&p(m)&&!c.allow_network_write_clis?{ok:!1,status:"refused",reason:`Security mode "${c.mode}" forbids CLIs declaring write scopes. Declared: ${JSON.stringify(m.declared_scopes)}`,cli:m}:{ok:!0,status:"generated",cli:m,security_mode:c.mode}}async function s(a={},b={}){let c,d,e=n(),h=String(a.slug||"").trim();if(!(0,j.Ac)(h))return{ok:!1,status:"invalid_input",reason:"invalid slug"};let i=(0,j.$A)(h);if(!i||"removed"===i.status)return{ok:!1,status:"not_installed",slug:h};if("disabled"===i.status)return{ok:!1,status:"disabled",slug:h};if(p(i)&&!e.allow_network_write_clis)return{ok:!1,status:"refused",reason:`Security mode "${e.mode}" forbids running CLIs with write scopes.`};let k=Array.isArray(a.args)?a.args.map(String):[];for(let a of k)if(/[;&|`$<>]/.test(a))return{ok:!1,status:"unsafe_args",reason:`argv contains shell metacharacter: ${a}`};try{(0,j.FT)(i.path)}catch(a){return{ok:!1,status:"unsafe_path",reason:a.message}}let m=process.env.GOBIN||(process.env.GOPATH?`${process.env.GOPATH}/bin`:null)||(process.env.HOME?`${process.env.HOME}/go/bin`:null),q=m?f.join(m,`${h}-pp-cli`):null,r=f.join(i.path,"bin"),t=f.join(i.path,"index.js");if(q&&g.existsSync(q))c=q,d=k;else if(g.existsSync(r))c=r,d=k;else{if(!g.existsSync(t))return{ok:!1,status:"no_entry_point",reason:`No entry point found. Tried: ${q||"(no go bin dir)"} , ${r}, ${t}`};c=process.execPath,d=[t,...k]}let u=function(a,b={}){let c={PATH:process.env.PATH,HOME:process.env.HOME,NODE_ENV:"production",PRINTING_PRESS_CLI_SLUG:a.slug,PRINTING_PRESS_DATA_DIR:a.path};for(let d of a.required_secrets||[])if("string"==typeof d&&/^[A-Z][A-Z0-9_]*$/.test(d))try{let a=(0,l.getSecret)(d,{agent_id:b.agent_id,project_id:b.project_id});a&&(c[d]=a)}catch{}return c}(i,b),v=Math.min(Number(a.timeout_ms)||6e4,3e5),w=await o(c,d,{cwd:i.path,timeoutMs:v,env:u});return{ok:0===w.exit_code,status:w.timed_out?"timeout":0===w.exit_code?"complete":"failed",slug:h,exit_code:w.exit_code,timed_out:w.timed_out,stdout:w.stdout,stderr:w.stderr,stdout_truncated:w.stdout_truncated,stderr_truncated:w.stderr_truncated,security_mode:e.mode}}let x=/\b(INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|REPLACE|ATTACH|DETACH|PRAGMA|VACUUM|REINDEX|TRUNCATE)\b/i;async function t(a={},b={}){let c,d=String(a.slug||"").trim();if(!(0,j.Ac)(d))return{ok:!1,status:"invalid_input",reason:"invalid slug"};let e=(0,j.$A)(d);if(!e||"removed"===e.status)return{ok:!1,status:"not_installed",slug:d};let i=String(a.sql||"").trim();if(!i)return{ok:!1,status:"invalid_input",reason:"sql is required"};if(i.includes(";"))return{ok:!1,status:"unsafe_sql",reason:"multi-statement queries are not allowed"};if(x.test(i))return{ok:!1,status:"unsafe_sql",reason:"only SELECT-style read queries are permitted"};if(!/^\s*(SELECT|WITH)\b/i.test(i))return{ok:!1,status:"unsafe_sql",reason:"query must begin with SELECT or WITH"};let k=process.env.XDG_DATA_HOME||(process.env.HOME?f.join(process.env.HOME,".local","share"):null),l=[f.join(e.path,"data.sqlite"),f.join(e.path,`${d}.sqlite`),k?f.join(k,`${d}-pp-cli`,"data.db"):null,k?f.join(k,`${d}-pp-cli`,"data.sqlite"):null].filter(Boolean),m=l.find(a=>g.existsSync(a));if(!m)return{ok:!1,status:"no_mirror",reason:"CLI has no local SQLite mirror",tried:l};if(m.startsWith(f.resolve(e.path)+f.sep))try{(0,j.FT)(m)}catch(a){return{ok:!1,status:"unsafe_path",reason:a.message}}let n=Array.isArray(a.params)?a.params:[];try{c=new h.DatabaseSync(m,{readOnly:!0})}catch(a){return{ok:!1,status:"open_failed",reason:a.message}}try{let a=c.prepare(i).all(...n).slice(0,1e3);return{ok:!0,status:"complete",slug:d,row_count:a.length,truncated:1e3===a.length,rows:a}}catch(a){return{ok:!1,status:"query_failed",reason:a.message}}finally{try{c.close()}catch{}}}d()}catch(a){d(a)}})},81553:(a,b,c)=>{"use strict";c.d(b,{YO:()=>j,ct:()=>m,mU:()=>k,rd:()=>g,runUpdateCheck:()=>n,shouldAutoApply:()=>o});var d=c(73024),e=c(76760),f=c(73136);let g="madarx",h=`https://registry.npmjs.org/${g}/latest`,i=e.dirname((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/update-check.js"));function j(){if(process.env.MADARX_VERSION)return process.env.MADARX_VERSION;for(let a of[e.join(i,"..","package.json"),e.join(process.cwd(),"package.json"),e.join(process.cwd(),".next","standalone","package.json")]){let b=function(a){try{let b=JSON.parse(d.readFileSync(a,"utf8"));if(b&&b.name===g&&b.version)return b.version}catch{}return null}(a);if(b)return b}return"0.0.0"}function k(a,b){let c=a=>String(a).split("-")[0].split(".").slice(0,3).map(a=>parseInt(a,10)||0),d=c(a),e=c(b);for(let a=0;a<Math.max(d.length,e.length);a++){let b=(d[a]||0)-(e[a]||0);if(0!==b)return b>0?1:-1}return 0}async function l({fetchImpl:a=fetch,timeoutMs:b=4e3}={}){try{let c=await a(h,{signal:AbortSignal.timeout(b)});if(!c.ok)return null;let d=await c.json();return d?.version||null}catch{return null}}function m(a){try{return JSON.parse(d.readFileSync(a,"utf8"))}catch{return null}}async function n({file:a,current:b=j(),fetchImpl:c=fetch,nowIso:f}={}){let g=await l({fetchImpl:c}),h=f||new Date().toISOString();if(!g){let c=a?m(a):null;return{ts:h,current:b,latest:c?.latest||null,behind:!1,reachable:!1}}let i=k(g,b)>0,o={ts:h,current:b,latest:g,behind:i,reachable:!0};return a&&(d.mkdirSync(e.dirname(a),{recursive:!0}),d.writeFileSync(a,JSON.stringify(o,null,2))),o}function o({behind:a,mode:b,apply:c}){return!!a&&"weekly"===b&&"auto"===c}},81833:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{BQ:()=>o,HO:()=>s,Jh:()=>n,OT:()=>r,Om:()=>k,bz:()=>m,cN:()=>p,h5:()=>q,iF:()=>i,k2:()=>l,pp:()=>j});var e=c(34255),f=a([e]);function g(a){return a?{id:String(a.id),name:String(a.name||""),position:Number(a.position)||0,is_active:1===a.is_active,created_at:a.created_at,updated_at:a.updated_at}:null}function h(a,b){return String(a||"").trim().slice(0,32)||b}function i(){let a=(0,e.getDb)();l();let b=a.prepare("SELECT * FROM dashboard_spaces ORDER BY position ASC, created_at ASC").all().map(g),c=b.find(a=>a.is_active)||b[0]||null;return{spaces:b,active_space_id:c?c.id:null}}function j(a){if(!a)return null;let b=(0,e.getDb)().prepare("SELECT * FROM dashboard_spaces WHERE id = ?").get(String(a));return g(b)}function k(a=[],{fallback:b="default"}={}){for(let b of Array.isArray(a)?a:[a])if(b&&j(b))return b;return b}function l(){let a=(0,e.getDb)(),b=a.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n;if(0===b){let b=(0,e.nowIso)();a.prepare("INSERT INTO dashboard_spaces (id, name, position, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)").run("default","main",0,1,b,b)}a.prepare("UPDATE artifacts SET space_id = 'default' WHERE space_id IS NULL").run()}function m({name:a}={}){let b=(0,e.getDb)();l();let c=b.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n;if(c>=32){let a=Error("Maximum of 32 spaces reached.");throw a.code="SPACE_LIMIT",a}let d=b.prepare("SELECT MAX(position) AS m FROM dashboard_spaces").get().m,f=(Number(d)||0)+1,g=(0,e.newId)("space"),i=(0,e.nowIso)(),k=h(a,`Space ${c+1}`);return b.prepare("INSERT INTO dashboard_spaces (id, name, position, is_active, created_at, updated_at) VALUES (?, ?, ?, 0, ?, ?)").run(g,k,f,i,i),j(g)}function n(a,b){let c=j(a);if(!c){let a=Error("Space not found.");throw a.code="SPACE_NOT_FOUND",a}let d=h(b,c.name);return d===c.name?c:((0,e.getDb)().prepare("UPDATE dashboard_spaces SET name = ?, updated_at = ? WHERE id = ?").run(d,(0,e.nowIso)(),a),j(a))}function o(a){if(!j(a)){let a=Error("Space not found.");throw a.code="SPACE_NOT_FOUND",a}let b=(0,e.getDb)(),c=(0,e.nowIso)(),d=b.prepare("BEGIN IMMEDIATE");try{d.run(),b.prepare("UPDATE dashboard_spaces SET is_active = 0, updated_at = ? WHERE is_active = 1").run(c),b.prepare("UPDATE dashboard_spaces SET is_active = 1, updated_at = ? WHERE id = ?").run(c,a),b.prepare("COMMIT").run()}catch(a){try{b.prepare("ROLLBACK").run()}catch{}throw a}return j(a)}function p(a){let b=(0,e.getDb)(),c=j(a);if(!c)return null;if(b.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n<=1){let a=Error("Cannot delete the last remaining space.");throw a.code="SPACE_LAST",a}let d=b.prepare("SELECT * FROM dashboard_spaces WHERE id != ? ORDER BY position ASC, created_at ASC LIMIT 1").get(a);if(!d){let a=Error("No fallback space available.");throw a.code="SPACE_NO_FALLBACK",a}let f=(0,e.nowIso)(),g=b.prepare("BEGIN IMMEDIATE");try{g.run(),b.prepare("UPDATE artifacts SET space_id = ? WHERE space_id = ?").run(d.id,a),b.prepare("UPDATE space_share_links SET revoked = 1 WHERE space_id = ? AND revoked = 0").run(a),b.prepare("DELETE FROM dashboard_spaces WHERE id = ?").run(a),c.is_active&&b.prepare("UPDATE dashboard_spaces SET is_active = 1, updated_at = ? WHERE id = ?").run(f,d.id),b.prepare("COMMIT").run()}catch(a){try{b.prepare("ROLLBACK").run()}catch{}throw a}return{deleted_id:a,moved_to:d.id}}function q(a,b){if(!a){let a=Error("artifact_id is required.");throw a.code="ARTIFACT_REQUIRED",a}let c=j(b);if(!c){let a=Error("Space not found.");throw a.code="SPACE_NOT_FOUND",a}let d=(0,e.getDb)(),f=d.prepare("SELECT id FROM artifacts WHERE id = ?").get(String(a));if(!f){let a=Error("Artifact not found.");throw a.code="ARTIFACT_NOT_FOUND",a}return d.prepare("UPDATE artifacts SET space_id = ?, pinned_to_space_at = datetime('now') WHERE id = ?").run(c.id,f.id),{artifact_id:f.id,space_id:c.id}}function r(){let a=(0,e.getDb)();l();let b=a.prepare("SELECT * FROM dashboard_spaces ORDER BY position ASC, created_at ASC").all().map(g),c=a.prepare("SELECT id, space_id FROM artifacts WHERE space_id IS NOT NULL").all(),d=new Map(b.map(a=>[a.id,[]]));for(let a of c)d.has(a.space_id)&&d.get(a.space_id).push(String(a.id));let f=b.map(a=>({...a,artifact_ids:d.get(a.id)||[]})),h=f.find(a=>a.is_active)||f[0]||null;return{spaces:f,active_space_id:h?h.id:null}}function s({spaces:a=[],active_space_id:b=null}={}){if(!Array.isArray(a)||0===a.length)return null;let c=(0,e.getDb)();l();let d=c.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces").get().n;if(!(1===d&&c.prepare("SELECT id FROM dashboard_spaces WHERE id = 'default'").get()))return null;let f=a.filter(a=>a&&"string"==typeof a.id&&a.id.length>0).slice(0,32);if(0===f.length)return null;let g=(0,e.nowIso)(),i=c.prepare("BEGIN IMMEDIATE");try{i.run(),c.prepare("DELETE FROM dashboard_spaces").run(),f.forEach((a,d)=>{let e=String(a.id),f=h(a.name,`Space ${d+1}`),i=b?e===String(b):0===d;c.prepare("INSERT INTO dashboard_spaces (id, name, position, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)").run(e,f,d,+!!i,g,g);let j=Array.isArray(a.artifactIds)?a.artifactIds:[],k=c.prepare("UPDATE artifacts SET space_id = ? WHERE id = ? AND (space_id IS NULL OR space_id = ?)");for(let a of j)"string"==typeof a&&k.run(e,a,e)});let a=c.prepare("SELECT COUNT(*) AS n FROM dashboard_spaces WHERE is_active = 1").get().n;if(0===a){let a=c.prepare("SELECT id FROM dashboard_spaces ORDER BY position ASC, created_at ASC LIMIT 1").get();a&&c.prepare("UPDATE dashboard_spaces SET is_active = 1 WHERE id = ?").run(a.id)}c.prepare("COMMIT").run()}catch(a){try{c.prepare("ROLLBACK").run()}catch{}throw a}return r()}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},81992:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{cS:()=>j,r_:()=>i,vg:()=>k});var e=c(25938),f=a([e]);function g(a,{includeBody:b=!1}={}){let c=Object.fromEntries((a.payload?.headers||[]).map(a=>[String(a.name).toLowerCase(),a.value])),d={id:a.id,thread_id:a.threadId,from:c.from||null,subject:c.subject||null,date:c.date||null,snippet:a.snippet||""};return b&&(d.to=c.to||null,d.body_text=function a(b={}){if(b.body?.data)return function(a=""){if(!a)return"";try{return Buffer.from(String(a),"base64url").toString("utf8")}catch{return""}}(b.body.data);let c=Array.isArray(b.parts)?b.parts:[],d=c.find(a=>"text/plain"===a.mimeType&&a.body?.data)||c.find(a=>a.body?.data);return d?a(d):""}(a.payload||{})),d}async function h(a,b,c,d){let f=(0,e.s)(d,c),g=await f(a,{headers:{Authorization:`Bearer ${b}`}});if(!g.ok)throw Error(`google api failed: ${g.status}`);return g.json()}async function i(a={},b={}){let c="gmail_messages_list",d=await (0,e.r)(b,c),f=new URL("https://gmail.googleapis.com/gmail/v1/users/me/messages");for(let b of(a.max_results&&f.searchParams.set("maxResults",String(a.max_results)),a.q&&f.searchParams.set("q",a.q),a.label_ids||a.labelIds||[]))f.searchParams.append("labelIds",String(b));let j=(await h(f,d,b,c)).messages||[];return Promise.all(j.map(async a=>{let e=await h(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(a.id)}?format=metadata`,d,b,c);return g(e)}))}async function j(a={},b={}){if(!a.message_id)throw Error("message_id is required");let c="gmail_message_read",d=await (0,e.r)(b,c),f=await h(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(a.message_id)}?format=full`,d,b,c);return g(f,{includeBody:!0})}async function k(a={},b={}){if(!a.thread_id)throw Error("thread_id is required");let c="gmail_thread_read",d=await (0,e.r)(b,c),f=await h(`https://gmail.googleapis.com/gmail/v1/users/me/threads/${encodeURIComponent(a.thread_id)}?format=full`,d,b,c);return{id:f.id,messages:(f.messages||[]).map(a=>g(a,{includeBody:!0}))}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},83963:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Dn:()=>af,Fp:()=>ab,Fy:()=>F,G:()=>aj,HB:()=>R,Mu:()=>Z,Q4:()=>J,Qf:()=>aa,Rz:()=>X,V0:()=>ah,VI:()=>P,Vk:()=>N,WH:()=>_,WX:()=>$,X1:()=>Y,createTask:()=>S,eE:()=>ad,fI:()=>B,gf:()=>I,gg:()=>O,hC:()=>ar,hW:()=>al,iR:()=>ae,ij:()=>ap,jN:()=>G,kP:()=>D,lC:()=>U,n5:()=>aq,nV:()=>ak,qF:()=>ao,qt:()=>ai,rN:()=>ac,s_:()=>Q,sweepTasks:()=>T,uB:()=>am,vQ:()=>W,w4:()=>an,yS:()=>V,yX:()=>E,zP:()=>H});var e=c(34255),f=c(40563),g=c(61423),h=c(18313),i=a([e,f,g]);function j(a,b=null){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function k(a){return null==a?null:JSON.stringify(a)}function l(a){let b=globalThis.__madarxLiveEventBus;if(!b?.subscribers)return{id:a.id||(0,e.newId)("evt"),ts:a.ts||Date.now(),...a};let c={id:a.id||`evt-${b.nextId++}-${Math.random().toString(36).slice(2,8)}`,ts:a.ts||Date.now(),...a};for(let a of b.subscribers)try{a(c)}catch{}return c}function m(a){return a?{...a,tools:j(a.tools,[]),files:j(a.files,[]),memory:j(a.memory,[]),permissions_json:j(a.permissions_json,{}),metadata_json:j(a.metadata_json,{})}:null}function n(a){return a?{...a,parent_task_id:a.parent_task_id||null,tags:j(a.tags_json,[]),watchers:j(a.watchers_json,[]),due_at:a.due_at||null,estimate_minutes:null==a.estimate_minutes?null:Number(a.estimate_minutes),recurrence:a.recurrence||null,acceptance_criteria:a.acceptance_criteria||null}:null}function o(a){return a?{id:a.id,task_id:a.task_id,label:a.label,done:!!a.done,position:Number(a.position)||0,created_at:a.created_at,done_at:a.done_at||null}:null}function p(a){if(null==a)return null;if(Array.isArray(a)){let b=a.map(a=>String(a).trim()).filter(Boolean).slice(0,24);return b.length?b:[]}return"string"==typeof a?a.split(",").map(a=>a.trim()).filter(Boolean).slice(0,24):null}function q(a){if(null==a)return null;let b=(Array.isArray(a)?a:String(a).split(",")).map(a=>String(a).trim()).filter(Boolean).slice(0,24);return Array.from(new Set(b))}function r(a){if(!a)return null;let b=String(a).trim();if(!b)return null;if(/^\d{4}-\d{2}-\d{2}$/.test(b))return`${b}T23:59:59.000Z`;let c=new Date(b);return Number.isNaN(c.getTime())?null:c.toISOString()}function s(a){if(null==a||""===a)return null;let b=Number(a);return!Number.isFinite(b)||b<0?null:Math.round(b)}function t(a){if(!a)return null;let b=String(a).trim();return b?b.length>64?b.slice(0,64):b:null}function u(a){return a?{...a}:null}function v(a){return a?{...a,payload:j(a.payload_json,null)}:null}function w(a){return a?{...a,usage:j(a.usage_json,null),result:j(a.result_json,null)}:null}function x(a){return a?{...a,payload:j(a.payload_json,null)}:null}function y(a){return a?{...a,details:j(a.details_json,null),cursor:a.seq}:null}function z(a){return m((0,e.getDb)().prepare("SELECT * FROM agents WHERE id = ?").get(a))}function A(a){if(!a)return null;let b=z(a);if(!b)throw Error(`Agent not found: ${a}`);if("terminated"===b.status)throw Error(`Terminated agents cannot receive assignments: ${a}`);return b}function B(a){if(!a?.type||!1===a.persist)return null;let b=function(a){let b={agent_run_start:"agent.run.status",agent_run_complete:"agent.run.status",agent_tool_start:"agent.run.event",agent_tool_result:"agent.run.event",log:"agent.run.log"},c=(0,h._d)(b[a.type]||a.type,null);return c&&h.eh.includes(c)?{actor_type:a.actor_type||(a.agent_id?"agent":"system"),actor_id:a.actor_id||a.agent_id||null,agent_id:a.agent_id||null,run_id:a.run_id||null,entity_type:a.entity_type||(a.task_id?"task":a.run_id?"agent_run":a.agent_id?"agent":"event"),entity_id:a.entity_id||a.task_id||a.run_id||a.id||null,action:c,details:{...a,legacy_type:b[a.type]?a.type:void 0},created_at:a.created_at||(0,e.nowIso)()}:null}(a);return b?C(b):null}function C({actor_type:a="system",actor_id:b=null,agent_id:c=null,run_id:d=null,entity_type:f=null,entity_id:g=null,action:h,details:i=null,created_at:j=(0,e.nowIso)()}={}){if(!h)throw Error("activity action is required");let l=(0,e.getDb)(),m=(0,e.newId)("activity");l.prepare(`
3334
3510
  INSERT INTO activity_log
3335
3511
  (id, actor_type, actor_id, agent_id, run_id, entity_type, entity_id, action, details_json, created_at)
3336
3512
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -3348,42 +3524,50 @@ ${b}`:b;return x(s("codex"),["exec",d],{timeoutMs:Number(process.env.CODEX_TICK_
3348
3524
  `).run(d,a.workspace_id||"local",String(a.title||"Untitled task"),a.description||null,g,i,f?.id||null,a.created_by_agent_id||null,a.created_by_user_id||null,a.parent_task_id||null,a.project_id||null,a.goal_id||null,a.blocked_reason||null,m,k(j),n,k(l),o,a.acceptance_criteria||null,a.recurred_from_task_id||null,c,c,"in_progress"===g?c:null,"done"===g?c:null,"cancelled"===g?c:null),Array.isArray(a.checklist)&&a.checklist.length){let f=b.prepare(`
3349
3525
  INSERT INTO task_checklist_items (id, task_id, label, done, position, created_at, done_at)
3350
3526
  VALUES (?, ?, ?, 0, ?, ?, NULL)
3351
- `);a.checklist.map(a=>String(a).trim()).filter(Boolean).slice(0,30).forEach((a,b)=>{f.run((0,e.newId)("ckl"),d,a,b,c)})}let u=O(d);return M(u,{action:"task.updated",liveType:"task.updated",actor_type:a.created_by_agent_id?"agent":a.created_by_user_id?"user":"system",actor_id:a.created_by_agent_id||a.created_by_user_id||null,agent_id:f?.id||null,details:{event:"created"},event_type:"task.created",wake_reason:f?"task_assigned":null}),f&&M(u,{action:"task.assigned",liveType:"task.assigned",actor_type:a.created_by_agent_id?"agent":a.created_by_user_id?"user":"system",actor_id:a.created_by_agent_id||a.created_by_user_id||null,agent_id:f.id,details:{assignee_agent_id:f.id},event_type:"task.assigned"}),a.parent_task_id&&K(a.parent_task_id,{event_type:"task.child_created",actor_type:a.created_by_agent_id?"agent":a.created_by_user_id?"user":"system",actor_id:a.created_by_agent_id||a.created_by_user_id||null,agent_id:f?.id||null,payload:{child_task_id:u.id}}),u}function T(a,b={}){let c=(0,e.getDb)(),d=O(a);if(!d)throw Error(`Task not found: ${a}`);let f=void 0===b.status?d.status:(0,h.NV)(b.status,d.status),g=void 0===b.priority?d.priority:(0,h.Hb)(b.priority,d.priority),i=void 0===b.assignee_agent_id?d.assignee_agent_id?A(d.assignee_agent_id):null:b.assignee_agent_id?A(b.assignee_agent_id):null;if((0,h.ab)(d.status,f),"in_progress"===f&&!i?.id)throw Error("in_progress requires assignee_agent_id");let j=d.assignee_agent_id!==(i?.id||null)||"in_progress"===d.status&&"in_progress"!==f,l=void 0===b.tags?d.tags:p(b.tags)||[],m=void 0===b.watchers?d.watchers:q(b.watchers)||[],n=void 0===b.due_at?d.due_at:r(b.due_at),o=void 0===b.estimate_minutes?d.estimate_minutes:s(b.estimate_minutes),u=void 0===b.recurrence?d.recurrence:t(b.recurrence),v=void 0===b.acceptance_criteria?d.acceptance_criteria:b.acceptance_criteria||null,w={title:b.title??d.title,description:b.description??d.description,status:f,priority:g,assignee_agent_id:i?.id||null,blocked_reason:"blocked"===f?b.blocked_reason??d.blocked_reason??"Blocked":b.blocked_reason??null,due_at:n,tags_json:k(l),estimate_minutes:o,watchers_json:k(m),recurrence:u,acceptance_criteria:v,checkout_run_id:j?null:d.checkout_run_id,execution_run_id:j?null:d.execution_run_id,updated_at:(0,e.nowIso)(),started_at:d.started_at||("in_progress"===f?(0,e.nowIso)():null),completed_at:"done"===f?d.completed_at||(0,e.nowIso)():null,cancelled_at:"cancelled"===f?d.cancelled_at||(0,e.nowIso)():null};c.prepare(`
3527
+ `);a.checklist.map(a=>String(a).trim()).filter(Boolean).slice(0,30).forEach((a,b)=>{f.run((0,e.newId)("ckl"),d,a,b,c)})}let u=O(d);return M(u,{action:"task.updated",liveType:"task.updated",actor_type:a.created_by_agent_id?"agent":a.created_by_user_id?"user":"system",actor_id:a.created_by_agent_id||a.created_by_user_id||null,agent_id:f?.id||null,details:{event:"created"},event_type:"task.created",wake_reason:f&&!a.suppress_wake?"task_assigned":null}),f&&M(u,{action:"task.assigned",liveType:"task.assigned",actor_type:a.created_by_agent_id?"agent":a.created_by_user_id?"user":"system",actor_id:a.created_by_agent_id||a.created_by_user_id||null,agent_id:f.id,details:{assignee_agent_id:f.id},event_type:"task.assigned"}),a.parent_task_id&&K(a.parent_task_id,{event_type:"task.child_created",actor_type:a.created_by_agent_id?"agent":a.created_by_user_id?"user":"system",actor_id:a.created_by_agent_id||a.created_by_user_id||null,agent_id:f?.id||null,payload:{child_task_id:u.id}}),u}function T({now:a=Date.now(),staleMinutes:b=30}={}){let c=(0,e.getDb)(),d=new Date(a).toISOString(),f=new Date(a-60*b*1e3).toISOString(),g={assigned_woken:[],rewoken:[],overdue_woken:[],scanned:0},i=c.prepare("SELECT 1 FROM heartbeat_tasks WHERE type = 'agent-task' AND status IN ('queued','leased','running') AND payload LIKE ? LIMIT 1"),j=(a,b,c)=>{if(al(a)||i.get(`%"task_id":"${a}"%`))return;let d=O(a);!(!d||!d.assignee_agent_id||(0,h.uB)(d.status))&&L({task:d,reason:b,triggerSource:"task-sweep"})&&g[c].push(a)},k=c.prepare("SELECT id FROM tasks WHERE status = 'todo' AND assignee_agent_id IS NOT NULL").all();for(let a of(g.scanned+=k.length,k))j(a.id,"task_assigned","assigned_woken");let l=c.prepare("SELECT id FROM tasks WHERE status = 'in_progress' AND assignee_agent_id IS NOT NULL AND updated_at < ?").all(f);for(let a of(g.scanned+=l.length,l))j(a.id,"task_blockers_resolved","rewoken");let m=c.prepare("SELECT id FROM tasks WHERE due_at IS NOT NULL AND due_at < ? AND status NOT IN ('done','cancelled')").all(d);for(let a of(g.scanned+=m.length,m))j(a.id,"task_blockers_resolved","overdue_woken");return g}function U(a,b={}){let c=(0,e.getDb)(),d=O(a);if(!d)throw Error(`Task not found: ${a}`);let f=void 0===b.status?d.status:(0,h.NV)(b.status,d.status),g=void 0===b.priority?d.priority:(0,h.Hb)(b.priority,d.priority),i=void 0===b.assignee_agent_id?d.assignee_agent_id?A(d.assignee_agent_id):null:b.assignee_agent_id?A(b.assignee_agent_id):null;if((0,h.ab)(d.status,f),"in_progress"===f&&!i?.id)throw Error("in_progress requires assignee_agent_id");let j=d.assignee_agent_id!==(i?.id||null)||"in_progress"===d.status&&"in_progress"!==f,l=void 0===b.tags?d.tags:p(b.tags)||[],m=void 0===b.watchers?d.watchers:q(b.watchers)||[],n=void 0===b.due_at?d.due_at:r(b.due_at),o=void 0===b.estimate_minutes?d.estimate_minutes:s(b.estimate_minutes),u=void 0===b.recurrence?d.recurrence:t(b.recurrence),v=void 0===b.acceptance_criteria?d.acceptance_criteria:b.acceptance_criteria||null,w={title:b.title??d.title,description:b.description??d.description,status:f,priority:g,assignee_agent_id:i?.id||null,blocked_reason:"blocked"===f?b.blocked_reason??d.blocked_reason??"Blocked":b.blocked_reason??null,due_at:n,tags_json:k(l),estimate_minutes:o,watchers_json:k(m),recurrence:u,acceptance_criteria:v,checkout_run_id:j?null:d.checkout_run_id,execution_run_id:j?null:d.execution_run_id,updated_at:(0,e.nowIso)(),started_at:d.started_at||("in_progress"===f?(0,e.nowIso)():null),completed_at:"done"===f?d.completed_at||(0,e.nowIso)():null,cancelled_at:"cancelled"===f?d.cancelled_at||(0,e.nowIso)():null};c.prepare(`
3352
3528
  UPDATE tasks SET
3353
3529
  title = ?, description = ?, status = ?, priority = ?, assignee_agent_id = ?, blocked_reason = ?,
3354
3530
  due_at = ?, tags_json = ?, estimate_minutes = ?, watchers_json = ?, recurrence = ?, acceptance_criteria = ?,
3355
3531
  checkout_run_id = ?, execution_run_id = ?, updated_at = ?, started_at = ?, completed_at = ?, cancelled_at = ?
3356
3532
  WHERE id = ?
3357
- `).run(w.title,w.description,w.status,w.priority,w.assignee_agent_id,w.blocked_reason,w.due_at,w.tags_json,w.estimate_minutes,w.watchers_json,w.recurrence,w.acceptance_criteria,w.checkout_run_id,w.execution_run_id,w.updated_at,w.started_at,w.completed_at,w.cancelled_at,a);let x=O(a),y=b.actor_type||"system",z=b.actor_id||null;if(d.assignee_agent_id!==x.assignee_agent_id&&M(x,{action:d.assignee_agent_id?"task.reassigned":"task.assigned",liveType:d.assignee_agent_id?"task.reassigned":"task.assigned",actor_type:y,actor_id:z,agent_id:x.assignee_agent_id,details:{from:d.assignee_agent_id,to:x.assignee_agent_id,execution_lock_cleared:j},event_type:d.assignee_agent_id?"task.reassigned":"task.assigned",wake_reason:d.assignee_agent_id?"task_reassigned":"task_assigned"}),d.status!==x.status&&M(x,{action:"task.updated",liveType:"task.updated",actor_type:y,actor_id:z,agent_id:x.assignee_agent_id,details:{from:d.status,to:x.status,execution_lock_cleared:j},event_type:"blocked"===x.status?"task.blocked":"done"===x.status?"task.completed":"cancelled"===x.status?"task.cancelled":"blocked"===d.status?"task.unblocked":"task.status_changed",wake_reason:"blocked"===d.status&&"blocked"!==x.status?"task_blockers_resolved":null}),void 0!==b.title||void 0!==b.description||void 0!==b.priority||void 0!==b.due_at||void 0!==b.tags||void 0!==b.estimate_minutes||void 0!==b.watchers||void 0!==b.recurrence||void 0!==b.acceptance_criteria){let a=["title","description","priority","due_at","tags","estimate_minutes","watchers","recurrence","acceptance_criteria"].filter(a=>void 0!==b[a]);M(x,{action:"task.updated",liveType:"task.updated",actor_type:y,actor_id:z,agent_id:x.assignee_agent_id,details:{fields:a},event_type:"task.updated"})}if("done"!==d.status&&"done"===x.status&&x.recurrence&&!x.recurred_from_task_id)try{!function(a,{actor_type:b="system",actor_id:c=null}={}){let d=function(a,b){if(!a)return null;let c=new Date(b||Date.now());if(Number.isNaN(c.getTime()))return null;let d=String(a).trim().toLowerCase(),e=d.match(/^every\s+(\d+)\s*(m|h|d|w)$/);if(e){let a=Number(e[1]),b=e[2];return new Date(c.getTime()+("m"===b?6e4*a:"h"===b?36e5*a:"d"===b?864e5*a:7*a*864e5)).toISOString()}if("daily"===d||/^daily\b/.test(d))return new Date(c.getTime()+864e5).toISOString();if("weekly"===d||/^weekly\b/.test(d))return new Date(c.getTime()+6048e5).toISOString();if("monthly"===d||/^monthly\b/.test(d)){let a=new Date(c);return a.setUTCMonth(a.getUTCMonth()+1),a.toISOString()}return null}(a.recurrence,a.due_at||(0,e.nowIso)());if(!d)return;let f=U(a.id).map(a=>a.label);S({title:a.title,description:a.description,project_id:a.project_id,assignee_agent_id:a.assignee_agent_id,priority:a.priority,parent_task_id:a.parent_task_id,goal_id:a.goal_id,due_at:d,tags:a.tags,watchers:a.watchers,estimate_minutes:a.estimate_minutes,recurrence:a.recurrence,acceptance_criteria:a.acceptance_criteria,recurred_from_task_id:a.id,checklist:f,created_by_agent_id:"agent"===b?c:null,created_by_user_id:"user"===b?c:null,status:a.assignee_agent_id?"todo":"backlog"})}(x,{actor_type:y,actor_id:z})}catch(a){console.warn(`[delegation] recurrence rollover failed for task ${x.id}:`,a?.message||a)}return x}function U(a){return(0,e.getDb)().prepare("SELECT * FROM task_checklist_items WHERE task_id = ? ORDER BY position ASC, created_at ASC").all(a).map(o)}function V(a,{label:b,position:c}={}){if(!O(a))throw Error(`Task not found: ${a}`);let d=String(b||"").trim();if(!d)throw Error("label is required");let f=(0,e.getDb)(),g=U(a),h=null==c?g.length:Math.max(0,Math.min(g.length,Number(c))),i=(0,e.newId)("ckl");return f.prepare(`
3533
+ `).run(w.title,w.description,w.status,w.priority,w.assignee_agent_id,w.blocked_reason,w.due_at,w.tags_json,w.estimate_minutes,w.watchers_json,w.recurrence,w.acceptance_criteria,w.checkout_run_id,w.execution_run_id,w.updated_at,w.started_at,w.completed_at,w.cancelled_at,a);let x=O(a),y=b.actor_type||"system",z=b.actor_id||null;if(d.assignee_agent_id!==x.assignee_agent_id&&M(x,{action:d.assignee_agent_id?"task.reassigned":"task.assigned",liveType:d.assignee_agent_id?"task.reassigned":"task.assigned",actor_type:y,actor_id:z,agent_id:x.assignee_agent_id,details:{from:d.assignee_agent_id,to:x.assignee_agent_id,execution_lock_cleared:j},event_type:d.assignee_agent_id?"task.reassigned":"task.assigned",wake_reason:d.assignee_agent_id?"task_reassigned":"task_assigned"}),d.status!==x.status&&M(x,{action:"task.updated",liveType:"task.updated",actor_type:y,actor_id:z,agent_id:x.assignee_agent_id,details:{from:d.status,to:x.status,execution_lock_cleared:j},event_type:"blocked"===x.status?"task.blocked":"done"===x.status?"task.completed":"cancelled"===x.status?"task.cancelled":"blocked"===d.status?"task.unblocked":"task.status_changed",wake_reason:"blocked"===d.status&&"blocked"!==x.status?"task_blockers_resolved":null}),void 0!==b.title||void 0!==b.description||void 0!==b.priority||void 0!==b.due_at||void 0!==b.tags||void 0!==b.estimate_minutes||void 0!==b.watchers||void 0!==b.recurrence||void 0!==b.acceptance_criteria){let a=["title","description","priority","due_at","tags","estimate_minutes","watchers","recurrence","acceptance_criteria"].filter(a=>void 0!==b[a]);M(x,{action:"task.updated",liveType:"task.updated",actor_type:y,actor_id:z,agent_id:x.assignee_agent_id,details:{fields:a},event_type:"task.updated"})}if("done"!==d.status&&"done"===x.status&&x.recurrence&&!x.recurred_from_task_id)try{!function(a,{actor_type:b="system",actor_id:c=null}={}){let d=function(a,b){if(!a)return null;let c=new Date(b||Date.now());if(Number.isNaN(c.getTime()))return null;let d=String(a).trim().toLowerCase(),e=d.match(/^every\s+(\d+)\s*(m|h|d|w)$/);if(e){let a=Number(e[1]),b=e[2];return new Date(c.getTime()+("m"===b?6e4*a:"h"===b?36e5*a:"d"===b?864e5*a:7*a*864e5)).toISOString()}if("daily"===d||/^daily\b/.test(d))return new Date(c.getTime()+864e5).toISOString();if("weekly"===d||/^weekly\b/.test(d))return new Date(c.getTime()+6048e5).toISOString();if("monthly"===d||/^monthly\b/.test(d)){let a=new Date(c);return a.setUTCMonth(a.getUTCMonth()+1),a.toISOString()}return null}(a.recurrence,a.due_at||(0,e.nowIso)());if(!d)return;let f=V(a.id).map(a=>a.label);S({title:a.title,description:a.description,project_id:a.project_id,assignee_agent_id:a.assignee_agent_id,priority:a.priority,parent_task_id:a.parent_task_id,goal_id:a.goal_id,due_at:d,tags:a.tags,watchers:a.watchers,estimate_minutes:a.estimate_minutes,recurrence:a.recurrence,acceptance_criteria:a.acceptance_criteria,recurred_from_task_id:a.id,checklist:f,created_by_agent_id:"agent"===b?c:null,created_by_user_id:"user"===b?c:null,status:a.assignee_agent_id?"todo":"backlog"})}(x,{actor_type:y,actor_id:z})}catch(a){console.warn(`[delegation] recurrence rollover failed for task ${x.id}:`,a?.message||a)}return x}function V(a){return(0,e.getDb)().prepare("SELECT * FROM task_checklist_items WHERE task_id = ? ORDER BY position ASC, created_at ASC").all(a).map(o)}function W(a,{label:b,position:c}={}){if(!O(a))throw Error(`Task not found: ${a}`);let d=String(b||"").trim();if(!d)throw Error("label is required");let f=(0,e.getDb)(),g=V(a),h=null==c?g.length:Math.max(0,Math.min(g.length,Number(c))),i=(0,e.newId)("ckl");return f.prepare(`
3358
3534
  INSERT INTO task_checklist_items (id, task_id, label, done, position, created_at, done_at)
3359
3535
  VALUES (?, ?, ?, 0, ?, ?, NULL)
3360
- `).run(i,a,d.slice(0,240),h,(0,e.nowIso)()),o(f.prepare("SELECT * FROM task_checklist_items WHERE id = ?").get(i))}function W(a,b={}){let c=(0,e.getDb)(),d=c.prepare("SELECT * FROM task_checklist_items WHERE id = ?").get(a);if(!d)throw Error(`Checklist item not found: ${a}`);let f=void 0===b.label?d.label:String(b.label||"").trim().slice(0,240),g=void 0===b.done?!!d.done:!!b.done,h=g?d.done_at||(0,e.nowIso)():null;return c.prepare("UPDATE task_checklist_items SET label = ?, done = ?, done_at = ? WHERE id = ?").run(f,+!!g,h,a),o(c.prepare("SELECT * FROM task_checklist_items WHERE id = ?").get(a))}function X(a){return(0,e.getDb)().prepare("DELETE FROM task_checklist_items WHERE id = ?").run(a),{ok:!0}}function Y(a){return(0,e.getDb)().prepare("SELECT id, run_id, agent_id, path, kind, title, created_at FROM artifacts WHERE task_id = ? ORDER BY created_at DESC").all(a)}function Z(a,b){return(0,e.getDb)().prepare("UPDATE artifacts SET task_id = ? WHERE id = ?").run(b,a),{ok:!0}}function $(a,{body:b,author_agent_id:c=null,author_user_id:d=null,created_by_run_id:f=null}={}){let g=O(a);if(!g)throw Error(`Task not found: ${a}`);let h=(0,e.getDb)(),i=(0,e.newId)("comment"),j=(0,e.nowIso)();return h.prepare(`
3536
+ `).run(i,a,d.slice(0,240),h,(0,e.nowIso)()),o(f.prepare("SELECT * FROM task_checklist_items WHERE id = ?").get(i))}function X(a,b={}){let c=(0,e.getDb)(),d=c.prepare("SELECT * FROM task_checklist_items WHERE id = ?").get(a);if(!d)throw Error(`Checklist item not found: ${a}`);let f=void 0===b.label?d.label:String(b.label||"").trim().slice(0,240),g=void 0===b.done?!!d.done:!!b.done,h=g?d.done_at||(0,e.nowIso)():null;return c.prepare("UPDATE task_checklist_items SET label = ?, done = ?, done_at = ? WHERE id = ?").run(f,+!!g,h,a),o(c.prepare("SELECT * FROM task_checklist_items WHERE id = ?").get(a))}function Y(a){return(0,e.getDb)().prepare("DELETE FROM task_checklist_items WHERE id = ?").run(a),{ok:!0}}function Z(a){return(0,e.getDb)().prepare("SELECT id, run_id, agent_id, path, kind, title, created_at FROM artifacts WHERE task_id = ? ORDER BY created_at DESC").all(a)}function $(a,b){return(0,e.getDb)().prepare("UPDATE artifacts SET task_id = ? WHERE id = ?").run(b,a),{ok:!0}}function _(a,{body:b,author_agent_id:c=null,author_user_id:d=null,created_by_run_id:f=null}={}){let g=O(a);if(!g)throw Error(`Task not found: ${a}`);let h=(0,e.getDb)(),i=(0,e.newId)("comment"),j=(0,e.nowIso)();return h.prepare(`
3361
3537
  INSERT INTO task_comments (id, task_id, author_agent_id, author_user_id, created_by_run_id, body, created_at)
3362
3538
  VALUES (?, ?, ?, ?, ?, ?, ?)
3363
- `).run(i,a,c,d,f,String(b||"").trim(),j),K(a,{event_type:"task.comment_added",actor_type:c?"agent":d?"user":"system",actor_id:c||d||null,agent_id:g.assignee_agent_id||null,run_id:f,payload:{comment_id:i}}),C({actor_type:c?"agent":d?"user":"system",actor_id:c||d||null,agent_id:g.assignee_agent_id||null,run_id:f,entity_type:"task",entity_id:a,action:"task.comment.added",details:{comment_id:i,body:String(b||"").slice(0,400)}}),l({type:"task.comment.added",task_id:a,agent_id:g.assignee_agent_id||null,actor_type:c?"agent":d?"user":"system",actor_id:c||d||null,run_id:f,entity_type:"task",entity_id:a,details:{comment_id:i},persist:!1}),g.assignee_agent_id&&g.assignee_agent_id!==c&&L({task:g,reason:"task_commented",commentId:i,actorId:c||d||null,triggerSource:"task.comment.added"}),u(h.prepare("SELECT * FROM task_comments WHERE id = ?").get(i))}function _(a,{run_id:b=null}={}){let c=(0,e.getDb)(),d=b||(0,e.newId)("checkout"),f=(0,e.nowIso)();if(!c.prepare(`
3539
+ `).run(i,a,c,d,f,String(b||"").trim(),j),K(a,{event_type:"task.comment_added",actor_type:c?"agent":d?"user":"system",actor_id:c||d||null,agent_id:g.assignee_agent_id||null,run_id:f,payload:{comment_id:i}}),C({actor_type:c?"agent":d?"user":"system",actor_id:c||d||null,agent_id:g.assignee_agent_id||null,run_id:f,entity_type:"task",entity_id:a,action:"task.comment.added",details:{comment_id:i,body:String(b||"").slice(0,400)}}),l({type:"task.comment.added",task_id:a,agent_id:g.assignee_agent_id||null,actor_type:c?"agent":d?"user":"system",actor_id:c||d||null,run_id:f,entity_type:"task",entity_id:a,details:{comment_id:i},persist:!1}),g.assignee_agent_id&&g.assignee_agent_id!==c&&L({task:g,reason:"task_commented",commentId:i,actorId:c||d||null,triggerSource:"task.comment.added"}),u(h.prepare("SELECT * FROM task_comments WHERE id = ?").get(i))}function aa(a,{run_id:b=null}={}){let c=(0,e.getDb)(),d=b||(0,e.newId)("checkout"),f=(0,e.nowIso)();if(!c.prepare(`
3364
3540
  UPDATE tasks
3365
3541
  SET checkout_run_id = ?, execution_run_id = COALESCE(execution_run_id, ?), updated_at = ?, started_at = COALESCE(started_at, ?), status = CASE WHEN status = 'todo' THEN 'in_progress' ELSE status END
3366
3542
  WHERE id = ? AND assignee_agent_id IS NOT NULL AND (checkout_run_id IS NULL OR checkout_run_id = ?)
3367
- `).run(d,b||null,f,f,a,d).changes)throw Error("Task checkout failed");return O(a)}function aa(a,{clearExecution:b=!0}={}){return(0,e.getDb)().prepare(`
3543
+ `).run(d,b||null,f,f,a,d).changes)throw Error("Task checkout failed");return O(a)}function ab(a,{clearExecution:b=!0}={}){return(0,e.getDb)().prepare(`
3368
3544
  UPDATE tasks
3369
3545
  SET checkout_run_id = NULL, execution_run_id = CASE WHEN ? THEN NULL ELSE execution_run_id END, updated_at = ?
3370
3546
  WHERE id = ?
3371
- `).run(+!!b,(0,e.nowIso)(),a),O(a)}function ab(a){return w((0,e.getDb)().prepare("SELECT * FROM agent_runs WHERE id = ?").get(a))}function ac({task_id:a,agent_id:b,status:c,limit:d=100}={}){let f=[],g=[];a&&(f.push("task_id = ?"),g.push(a)),b&&(f.push("agent_id = ?"),g.push(b)),c&&(f.push("status = ?"),g.push(c));let h=f.length?`WHERE ${f.join(" AND ")}`:"";return(0,e.getDb)().prepare(`SELECT * FROM agent_runs ${h} ORDER BY created_at DESC LIMIT ?`).all(...g,d).map(w)}function ad(a){return(0,e.getDb)().prepare("SELECT * FROM agent_run_events WHERE run_id = ? ORDER BY seq ASC").all(a).map(x)}function ae(a,{agent_id:b=null,task_id:c=null,event_type:d="log",stream:f="system",level:g="info",message:i="",payload:j=null,created_at:m=(0,e.nowIso)()}={}){if(!h.rb.includes(d))throw Error(`Invalid run event type: ${d}`);let n=(0,e.getDb)(),o=(0,e.newId)("arunevt"),p=function(a){let b=(0,e.getDb)().prepare("SELECT COALESCE(MAX(seq), 0) AS max_seq FROM agent_run_events WHERE run_id = ?").get(a);return Number(b?.max_seq||0)+1}(a);n.prepare(`
3547
+ `).run(+!!b,(0,e.nowIso)(),a),O(a)}function ac(a){return w((0,e.getDb)().prepare("SELECT * FROM agent_runs WHERE id = ?").get(a))}function ad({task_id:a,agent_id:b,status:c,limit:d=100}={}){let f=[],g=[];a&&(f.push("task_id = ?"),g.push(a)),b&&(f.push("agent_id = ?"),g.push(b)),c&&(f.push("status = ?"),g.push(c));let h=f.length?`WHERE ${f.join(" AND ")}`:"";return(0,e.getDb)().prepare(`SELECT * FROM agent_runs ${h} ORDER BY created_at DESC LIMIT ?`).all(...g,d).map(w)}function ae(a){return(0,e.getDb)().prepare("SELECT * FROM agent_run_events WHERE run_id = ? ORDER BY seq ASC").all(a).map(x)}function af(a,{agent_id:b=null,task_id:c=null,event_type:d="log",stream:f="system",level:g="info",message:i="",payload:j=null,created_at:m=(0,e.nowIso)()}={}){if(!h.rb.includes(d))throw Error(`Invalid run event type: ${d}`);let n=(0,e.getDb)(),o=(0,e.newId)("arunevt"),p=function(a){let b=(0,e.getDb)().prepare("SELECT COALESCE(MAX(seq), 0) AS max_seq FROM agent_run_events WHERE run_id = ?").get(a);return Number(b?.max_seq||0)+1}(a);n.prepare(`
3372
3548
  INSERT INTO agent_run_events
3373
3549
  (id, run_id, agent_id, task_id, seq, event_type, stream, level, message, payload_json, created_at)
3374
3550
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
3375
- `).run(o,a,b,c,p,d,f,g,i||null,k(j),m);let q=x(n.prepare("SELECT * FROM agent_run_events WHERE id = ?").get(o));return l({type:"log"===d?"agent.run.log":"agent.run.event",agent_id:b,run_id:a,task_id:c,entity_type:c?"task":"agent_run",entity_id:c||a,details:{event_type:d,level:g,message:i,payload:j,seq:p},persist:!1}),q}function af(a,b={}){let c=ab(a);if(!c)throw Error(`Run not found: ${a}`);let d=(0,e.getDb)(),f=b.status?(0,h.vI)(b.status,c.status):c.status,g=(0,e.nowIso)();return d.prepare(`
3551
+ `).run(o,a,b,c,p,d,f,g,i||null,k(j),m);let q=x(n.prepare("SELECT * FROM agent_run_events WHERE id = ?").get(o));return l({type:"log"===d?"agent.run.log":"agent.run.event",agent_id:b,run_id:a,task_id:c,entity_type:c?"task":"agent_run",entity_id:c||a,details:{event_type:d,level:g,message:i,payload:j,seq:p},persist:!1}),q}function ag(a,b={}){let c=ac(a);if(!c)throw Error(`Run not found: ${a}`);let d=(0,e.getDb)(),f=b.status?(0,h.vI)(b.status,c.status):c.status,g=(0,e.nowIso)();return d.prepare(`
3376
3552
  UPDATE agent_runs
3377
3553
  SET status = ?, started_at = COALESCE(?, started_at), finished_at = ?, error = ?, session_id_after = COALESCE(?, session_id_after),
3378
3554
  usage_json = COALESCE(?, usage_json), result_json = COALESCE(?, result_json), stdout_excerpt = COALESCE(?, stdout_excerpt),
3379
3555
  stderr_excerpt = COALESCE(?, stderr_excerpt), updated_at = ?
3380
3556
  WHERE id = ?
3381
- `).run(f,b.started_at||null,b.finished_at||null,b.error??null,b.session_id_after||null,b.usage?k(b.usage):null,b.result?k(b.result):null,b.stdout_excerpt||null,b.stderr_excerpt||null,g,a),C({actor_type:"agent",actor_id:c.agent_id,agent_id:c.agent_id,run_id:a,entity_type:c.task_id?"task":"agent_run",entity_id:c.task_id||a,action:"agent.run.status",details:{status:f,error:b.error||null}}),l({type:"agent.run.status",agent_id:c.agent_id,run_id:a,task_id:c.task_id,entity_type:c.task_id?"task":"agent_run",entity_id:c.task_id||a,details:{status:f,error:b.error||null},persist:!1}),ab(a)}function ag(a){let b=ab(a),c=(0,e.nowIso)(),d=af(a,{status:"running",started_at:b?.started_at||c});return ae(a,{agent_id:d.agent_id,task_id:d.task_id,event_type:"lifecycle",message:"Run started",payload:{status:"running"}}),d.task_id&&_(d.task_id,{run_id:a}),d}function ah(a,{message:b="Approval required",payload:c=null}={}){let d=af(a,{status:"waiting_approval"});return ae(a,{agent_id:d.agent_id,task_id:d.task_id,event_type:"approval_required",level:"warn",message:b,payload:c}),d}function ai(a,{status:b="succeeded",error:c=null,usage:d=null,result:f=null,stdout_excerpt:g=null,stderr_excerpt:i=null,session_id_after:j=null}={}){let k=(0,h.vI)(b,"succeeded"),l=(0,e.nowIso)(),m=af(a,{status:k,finished_at:l,error:c,usage:d,result:f,stdout_excerpt:g,stderr_excerpt:i,session_id_after:j});return ae(a,{agent_id:m.agent_id,task_id:m.task_id,event_type:c?"error":"lifecycle",level:c?"error":"info",message:c||`Run ${k}`,payload:{status:k}}),m.task_id&&aa(m.task_id,{clearExecution:!0}),m}function aj(a){return ai(a,{status:"cancelled",error:"Cancelled by user"})}function ak(a){return w((0,e.getDb)().prepare(`
3557
+ `).run(f,b.started_at||null,b.finished_at||null,b.error??null,b.session_id_after||null,b.usage?k(b.usage):null,b.result?k(b.result):null,b.stdout_excerpt||null,b.stderr_excerpt||null,g,a),C({actor_type:"agent",actor_id:c.agent_id,agent_id:c.agent_id,run_id:a,entity_type:c.task_id?"task":"agent_run",entity_id:c.task_id||a,action:"agent.run.status",details:{status:f,error:b.error||null}}),l({type:"agent.run.status",agent_id:c.agent_id,run_id:a,task_id:c.task_id,entity_type:c.task_id?"task":"agent_run",entity_id:c.task_id||a,details:{status:f,error:b.error||null},persist:!1}),ac(a)}function ah(a){let b=ac(a),c=(0,e.nowIso)(),d=ag(a,{status:"running",started_at:b?.started_at||c});return af(a,{agent_id:d.agent_id,task_id:d.task_id,event_type:"lifecycle",message:"Run started",payload:{status:"running"}}),d.task_id&&aa(d.task_id,{run_id:a}),d}function ai(a,{message:b="Approval required",payload:c=null}={}){let d=ag(a,{status:"waiting_approval"});return af(a,{agent_id:d.agent_id,task_id:d.task_id,event_type:"approval_required",level:"warn",message:b,payload:c}),d}function aj(a,{status:b="succeeded",error:c=null,usage:d=null,result:f=null,stdout_excerpt:g=null,stderr_excerpt:i=null,session_id_after:j=null}={}){let k=(0,h.vI)(b,"succeeded"),l=(0,e.nowIso)(),m=ag(a,{status:k,finished_at:l,error:c,usage:d,result:f,stdout_excerpt:g,stderr_excerpt:i,session_id_after:j});return af(a,{agent_id:m.agent_id,task_id:m.task_id,event_type:c?"error":"lifecycle",level:c?"error":"info",message:c||`Run ${k}`,payload:{status:k}}),m.task_id&&ab(m.task_id,{clearExecution:!0}),m}function ak(a){return aj(a,{status:"cancelled",error:"Cancelled by user"})}function al(a){return w((0,e.getDb)().prepare(`
3382
3558
  SELECT * FROM agent_runs
3383
3559
  WHERE task_id = ? AND status IN ('queued', 'running', 'waiting_approval')
3384
3560
  ORDER BY created_at DESC
3385
3561
  LIMIT 1
3386
- `).get(a))}function al(a){let b=O(a);if(!b)return null;let c=ak(a),d=w((0,e.getDb)().prepare(`
3562
+ `).get(a))}function am({limit:a=50}={}){return(0,e.getDb)().prepare(`
3563
+ SELECT r.id, r.agent_id, r.status, r.trigger_source, r.started_at, r.created_at, r.task_id,
3564
+ a.name AS agent_name
3565
+ FROM agent_runs r
3566
+ LEFT JOIN agents a ON a.id = r.agent_id
3567
+ WHERE r.status IN ('queued', 'running', 'waiting_approval')
3568
+ ORDER BY r.created_at DESC
3569
+ LIMIT ?
3570
+ `).all(a).map(a=>({run_id:a.id,agent_id:a.agent_id,agent_name:a.agent_name||a.agent_id,status:a.status,triggered_by:a.trigger_source||null,started_at:a.started_at||a.created_at||null,task_id:a.task_id||null}))}function an(a){let b=O(a);if(!b)return null;let c=al(a),d=w((0,e.getDb)().prepare(`
3387
3571
  SELECT * FROM agent_runs
3388
3572
  WHERE task_id = ?
3389
3573
  ORDER BY created_at DESC
@@ -3393,7 +3577,7 @@ ${b}`:b;return x(s("codex"),["exec",d],{timeoutMs:Number(process.env.CODEX_TICK_
3393
3577
  WHERE task_id = ? AND status IN ('failed', 'timed_out', 'cancelled')
3394
3578
  ORDER BY COALESCE(finished_at, updated_at, created_at) DESC
3395
3579
  LIMIT 1
3396
- `).get(a)),g="blocked"===b.status||c?.status==="waiting_approval"||!!f?.error;return{task_id:a,active_run_id:c?.id||null,active_run_status:c?.status||null,last_run_id:d?.id||null,last_run_status:d?.status||null,last_failure_run_id:f?.id||null,last_failure_status:f?.status||null,last_failure_error:f?.error||null,checkout_run_id:b.checkout_run_id||null,execution_run_id:b.execution_run_id||null,needs_action:g,needs_action_reason:"blocked"===b.status?b.blocked_reason||"Task is blocked":c?.status==="waiting_approval"?"Run is waiting for approval":f?.error?f.error:null}}function am(a){return ac({task_id:a}).filter(a=>(0,h.MK)(a.status))}function an(a,b={}){let c=(0,e.getDb)(),d=(0,e.nowIso)();c.prepare(`
3580
+ `).get(a)),g="blocked"===b.status||c?.status==="waiting_approval"||!!f?.error;return{task_id:a,active_run_id:c?.id||null,active_run_status:c?.status||null,last_run_id:d?.id||null,last_run_status:d?.status||null,last_failure_run_id:f?.id||null,last_failure_status:f?.status||null,last_failure_error:f?.error||null,checkout_run_id:b.checkout_run_id||null,execution_run_id:b.execution_run_id||null,needs_action:g,needs_action_reason:"blocked"===b.status?b.blocked_reason||"Task is blocked":c?.status==="waiting_approval"?"Run is waiting for approval":f?.error?f.error:null}}function ao(a){return ad({task_id:a}).filter(a=>(0,h.MK)(a.status))}function ap(a,b={}){let c=(0,e.getDb)(),d=(0,e.nowIso)();c.prepare(`
3397
3581
  INSERT INTO agent_runtime_state
3398
3582
  (agent_id, session_id, state_json, last_run_id, last_run_status, total_input_tokens, total_output_tokens,
3399
3583
  total_cached_input_tokens, total_cost_cents, last_error, created_at, updated_at)
@@ -3409,12 +3593,12 @@ ${b}`:b;return x(s("codex"),["exec",d],{timeoutMs:Number(process.env.CODEX_TICK_
3409
3593
  total_cost_cents = excluded.total_cost_cents,
3410
3594
  last_error = excluded.last_error,
3411
3595
  updated_at = excluded.updated_at
3412
- `).run(a,b.session_id||null,b.state?k(b.state):null,b.last_run_id||null,b.last_run_status||null,Number(b.total_input_tokens||0),Number(b.total_output_tokens||0),Number(b.total_cached_input_tokens||0),Number(b.total_cost_cents||0),b.last_error||null,d,d)}function ao({task_id:a,agent_id:b,trigger_source:c="task_assigned",trigger_detail:d=null}={}){if(!O(a))throw Error(`Task not found: ${a}`);if(!b)throw Error("agent_id is required for task runs");let f=function({agent_id:a,task_id:b=null,trigger_source:c="manual",trigger_detail:d=null,status:f="queued",session_id_before:g=null}={}){if(!a)throw Error("agent_id is required");let i=(0,e.getDb)(),j=(0,e.nowIso)(),k=(0,e.newId)("arun");return i.prepare(`
3596
+ `).run(a,b.session_id||null,b.state?k(b.state):null,b.last_run_id||null,b.last_run_status||null,Number(b.total_input_tokens||0),Number(b.total_output_tokens||0),Number(b.total_cached_input_tokens||0),Number(b.total_cost_cents||0),b.last_error||null,d,d)}function aq({task_id:a,agent_id:b,trigger_source:c="task_assigned",trigger_detail:d=null}={}){if(!O(a))throw Error(`Task not found: ${a}`);if(!b)throw Error("agent_id is required for task runs");let f=function({agent_id:a,task_id:b=null,trigger_source:c="manual",trigger_detail:d=null,status:f="queued",session_id_before:g=null}={}){if(!a)throw Error("agent_id is required");let i=(0,e.getDb)(),j=(0,e.nowIso)(),k=(0,e.newId)("arun");return i.prepare(`
3413
3597
  INSERT INTO agent_runs
3414
3598
  (id, agent_id, task_id, trigger_source, trigger_detail, status, started_at, finished_at, error,
3415
3599
  session_id_before, session_id_after, usage_json, result_json, stdout_excerpt, stderr_excerpt, created_at, updated_at)
3416
3600
  VALUES (?, ?, ?, ?, ?, ?, NULL, NULL, NULL, ?, NULL, NULL, NULL, NULL, NULL, ?, ?)
3417
- `).run(k,a,b,c,d,(0,h.vI)(f),g,j,j),ae(k,{agent_id:a,task_id:b,event_type:"lifecycle",level:"info",message:"Run queued",payload:{status:"queued"}}),C({actor_type:"agent",actor_id:a,agent_id:a,run_id:k,entity_type:b?"task":"agent_run",entity_id:b||k,action:"agent.run.queued",details:{trigger_source:c,trigger_detail:d,task_id:b}}),l({type:"agent.run.queued",agent_id:a,run_id:k,task_id:b,entity_type:b?"task":"agent_run",entity_id:b||k,details:{trigger_source:c,trigger_detail:d},persist:!1}),ab(k)}({agent_id:b,task_id:a,trigger_source:c,trigger_detail:d});return _(a,{run_id:f.id}),!function({agent_id:a,task_key:b,adapter_type:c="default",session_params:d=null,session_display_id:f=null,last_run_id:g=null,last_error:h=null}={}){if(!a||!b)return;let i=(0,e.getDb)(),j=(0,e.nowIso)(),l=i.prepare("SELECT id FROM agent_task_sessions WHERE agent_id = ? AND task_key = ?").get(a,b),m=l?.id||(0,e.newId)("atsession");i.prepare(`
3601
+ `).run(k,a,b,c,d,(0,h.vI)(f),g,j,j),af(k,{agent_id:a,task_id:b,event_type:"lifecycle",level:"info",message:"Run queued",payload:{status:"queued"}}),C({actor_type:"agent",actor_id:a,agent_id:a,run_id:k,entity_type:b?"task":"agent_run",entity_id:b||k,action:"agent.run.queued",details:{trigger_source:c,trigger_detail:d,task_id:b}}),l({type:"agent.run.queued",agent_id:a,run_id:k,task_id:b,entity_type:b?"task":"agent_run",entity_id:b||k,details:{trigger_source:c,trigger_detail:d},persist:!1}),ac(k)}({agent_id:b,task_id:a,trigger_source:c,trigger_detail:d});return aa(a,{run_id:f.id}),!function({agent_id:a,task_key:b,adapter_type:c="default",session_params:d=null,session_display_id:f=null,last_run_id:g=null,last_error:h=null}={}){if(!a||!b)return;let i=(0,e.getDb)(),j=(0,e.nowIso)(),l=i.prepare("SELECT id FROM agent_task_sessions WHERE agent_id = ? AND task_key = ?").get(a,b),m=l?.id||(0,e.newId)("atsession");i.prepare(`
3418
3602
  INSERT INTO agent_task_sessions
3419
3603
  (id, agent_id, task_key, adapter_type, session_params_json, session_display_id, last_run_id, last_error, created_at, updated_at)
3420
3604
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -3425,7 +3609,7 @@ ${b}`:b;return x(s("codex"),["exec",d],{timeoutMs:Number(process.env.CODEX_TICK_
3425
3609
  last_run_id = COALESCE(excluded.last_run_id, agent_task_sessions.last_run_id),
3426
3610
  last_error = excluded.last_error,
3427
3611
  updated_at = excluded.updated_at
3428
- `).run(m,a,b,c,d?k(d):null,f,g,h,j,j)}({agent_id:b,task_key:a,last_run_id:f.id}),f}function ap(){let a=(0,e.getDb)(),b=b=>a.prepare(b).get(),c=b=>a.prepare(b).all();return{tasks_by_status:c("SELECT status, COUNT(*) AS count FROM tasks GROUP BY status ORDER BY status ASC"),tasks_by_assignee:c("SELECT assignee_agent_id, COUNT(*) AS count FROM tasks GROUP BY assignee_agent_id ORDER BY count DESC"),blocked_tasks:N({status:"blocked",limit:100}),stale_tasks:c(`
3612
+ `).run(m,a,b,c,d?k(d):null,f,g,h,j,j)}({agent_id:b,task_key:a,last_run_id:f.id}),f}function ar(){let a=(0,e.getDb)(),b=b=>a.prepare(b).get(),c=b=>a.prepare(b).all();return{tasks_by_status:c("SELECT status, COUNT(*) AS count FROM tasks GROUP BY status ORDER BY status ASC"),tasks_by_assignee:c("SELECT assignee_agent_id, COUNT(*) AS count FROM tasks GROUP BY assignee_agent_id ORDER BY count DESC"),blocked_tasks:N({status:"blocked",limit:100}),stale_tasks:c(`
3429
3613
  SELECT * FROM task_lifecycle_view
3430
3614
  WHERE status IN ('todo', 'in_progress', 'blocked', 'in_review') AND age_seconds > 86400
3431
3615
  ORDER BY age_seconds DESC
@@ -3520,7 +3704,7 @@ ${k}`;try{let a=(c=await (0,e.M2)({systemPrompt:n,userMessage:o,maxTurns:25,time
3520
3704
  - Voice: ${d||"match the configured brand voice"}.
3521
3705
  - Document types: ${e||"reports, briefs, proposals, presentations"}.
3522
3706
  - Presentation style: ${a.presentation_style||"follow the configured brand guidelines"}.
3523
- - Do not invent off-brand palettes, logos, typography, or tone unless the owner explicitly asks for a different brand.`}d()}catch(a){d(a)}})},91937:(a,b,c)=>{"use strict";c.d(b,{ho:()=>l,pE:()=>f});let d=/^[a-z][a-z0-9-]{2,63}$/,e=new Set(["tool_call","llm_synthesis","artifact_write"]),f=["low","medium","high","irreversible_external"],g=/^[a-z][a-z0-9-]{0,63}$/,h=/\{\{([a-z][a-z0-9-]*)/g;function i(a,b,c){a.push(`${b}: ${c}`)}function j(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function k(a){return f.indexOf(a)}function l(a,b={}){let c,m=[],n=[];try{c=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!c||"undefined"===c)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(c,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(c,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!j(a))return{ok:!1,errors:["spec: must be a plain object"],warnings:[],normalized:null};if(a.slug&&"string"==typeof a.slug?d.test(a.slug)||i(m,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, hyphens allowed)`):i(m,"slug","required (string)"),a.title&&"string"==typeof a.title||i(m,"title","required (non-empty string)"),null!=a.description&&"string"!=typeof a.description&&i(m,"description","must be a string"),null==a.input_schema||j(a.input_schema)||i(m,"input_schema","must be a plain object"),!Array.isArray(a.steps)||0===a.steps.length)return i(m,"steps","required (non-empty array)"),{ok:!1,errors:m,warnings:n,normalized:null};if(a.steps.length>25)return i(m,"steps","exceeds 25"),{ok:!1,errors:m,warnings:n,normalized:null};let o=new Set,p="low",q=[];for(let c=0;c<a.steps.length;c++){var r,s;let d,l=a.steps[c],n=`steps[${c}]`;if(!j(l)){i(m,n,"must be a plain object");continue}if(!l.kind||!e.has(l.kind)){i(m,`${n}.kind`,`must be one of ${[...e].join(", ")}`);continue}l.id&&"string"==typeof l.id?g.test(l.id)?o.has(l.id)?i(m,`${n}.id`,`duplicate step id '${l.id}'`):o.add(l.id):i(m,`${n}.id`,`does not match ${g}`):i(m,`${n}.id`,"required (slug-like string)");let t=new Set(o);l.id&&t.delete(l.id);let u={};for(let[a,b]of("tool_call"===l.kind&&j(l.input_template)&&(u.input_template=l.input_template),"artifact_write"===l.kind&&(null!=l.title_template&&(u.title_template=l.title_template),null!=l.content_ref&&(u.content_ref=l.content_ref)),"llm_synthesis"===l.kind&&null!=l.prompt&&(u.prompt=l.prompt),Object.entries(u)))for(let c of function a(b){let c=new Set;if("string"==typeof b){let a;for(h.lastIndex=0;null!==(a=h.exec(b));){let b=a[1];"input"!==b&&c.add(b)}return c}if(j(b))for(let d of Object.values(b))for(let b of a(d))c.add(b);if(Array.isArray(b))for(let d of b)for(let b of a(d))c.add(b);return c}(b))t.has(c)||i(m,n,`references later/unknown step '${c}' in ${a}`);switch(l.kind){case"tool_call":d=function(a,b,c,d){let e;return a.tool&&"string"==typeof a.tool?d.knownToolNames&&!d.knownToolNames.has(a.tool)&&i(b,`${c}.tool`,`unknown tool '${a.tool}'`):i(b,`${c}.tool`,"required (string)"),null==a.input_template||j(a.input_template)||i(b,`${c}.input_template`,"must be a plain object (data only)"),null!=a.risk?f.includes(a.risk)?e=a.risk:(i(b,`${c}.risk`,`must be one of ${f.join(", ")}`),e="medium"):e=d.toolRiskByName&&"string"==typeof a.tool?d.toolRiskByName.get(a.tool)??"medium":"medium",e}(l,m,n,b);break;case"llm_synthesis":l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&i(m,`${n}.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):i(m,`${n}.prompt`,"required (non-empty string)"),d="low";break;case"artifact_write":d="low"}r=p,s=d,p=k(r)>=k(s)?r:s;let v={kind:l.kind,id:l.id};"tool_call"===l.kind?(v.tool=l.tool??null,null!=l.input_template&&(v.input_template=structuredClone(l.input_template)),v.risk=d):"llm_synthesis"===l.kind?v.prompt=l.prompt??null:"artifact_write"===l.kind&&(null!=l.title_template&&(v.title_template=l.title_template),null!=l.content_ref&&(v.content_ref=l.content_ref)),q.push(v)}return m.length>0?{ok:!1,errors:m,warnings:n,normalized:null}:{ok:!0,errors:[],warnings:n,normalized:{slug:a.slug,title:a.title,description:a.description??null,input_schema:null!=a.input_schema?structuredClone(a.input_schema):{type:"object",properties:{}},steps:q,risk_level:p}}}},93154:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{I2:()=>n,Z3:()=>o,cK:()=>p,pz:()=>m,yi:()=>l});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=c(60105),j=c(88101),k=a([g,i,j]);[g,i,j]=k.then?(await k)():k;let q=[["project-watcher","Project Watcher","project_watcher","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","web_fetch","file_read"],["investigate","retro"],"Watches repos, issues, PRs, deploys, and produces weekly project pulses."],["personal-assistant","Personal Assistant","personal_assistant","anthropic",["gmail_messages_list","gmail_message_read","calendar_events_list","whatsapp_send"],[],"Reads inbox and calendar context, drafts replies, and keeps the operator organized."],["engineering-lead","Engineering Lead","engineering_lead","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","terminal_run","file_read","file_write"],["investigate","review","ship","qa"],"Leads implementation, review, QA, and preview deploys with explicit approval gates."],["marketing-lead","Marketing Lead","marketing_lead","anthropic",["web_search","web_fetch","file_write","create_artifact"],["design-shotgun","impeccable"],"Creates market research, launch copy, positioning, and design briefs."],["meeting-notes","Meeting Notes Taker","meeting_notes","anthropic",["transcribe_audio","file_write","create_artifact"],[],"Turns recordings into transcripts, decisions, action items, and follow-ups."],["bug-triage","Bug Triage Specialist","bug_triage","claude-code",["gh_issue_list","gh_pr_list","file_read"],["investigate"],"Classifies incoming bugs and proposes severity and next actions."],["phase-runner","Phase Runner","phase_runner","claude-code",["file_read","file_write","terminal_run"],["ship"],"Executes approved implementation phases and reports blockers."],["code-reviewer","Code Reviewer","code_reviewer","claude-code",["file_read","gh_pr_list"],["review"],"Provides independent diff review before merge."],["competitor-scout","Competitor Scout","competitor_scout","anthropic",["web_search","web_fetch","create_artifact"],[],"Tracks competitor movement and summarizes weekly signals."],["finance-ops","Finance and Ops","finance_ops","anthropic",["file_read","create_artifact"],[],"Reads finance docs and drafts advisory runway and ops summaries."],["legal-compliance","Legal and Compliance","legal_compliance","anthropic",["file_read","web_fetch","create_artifact"],[],"Reviews policy and compliance documents as advisory output only."],["customer-support","Customer Support","customer_support","anthropic",["gmail_message_read","file_write"],[],"Drafts customer replies and escalates approval-required sends."],["chief-of-staff","Chief of Staff","chief_of_staff","anthropic",["web_search","file_read","file_write","create_artifact","create_workflow_definition"],["report-builder","market-research"],"Translates founder intent into delegated work across the company, runs the weekly cadence, and surfaces decisions. No direct external writes."],["ads-media-buyer","Ads / Media Buyer","ads_media_buyer","anthropic",["web_search","file_write","create_artifact"],["design-shotgun"],"Plans, builds, and reports on paid campaigns across Meta/Google/TikTok within budget caps. Every campaign publish and budget set is approval-gated."],["content-social","Content / Social Manager","content_social","anthropic",["web_search","file_write","create_artifact","voice_speak"],["design-shotgun"],"Produces and schedules organic posts, reels, and videos and maintains brand voice. Every publish is approval-gated."],["sales-bd","Sales / BD","sales_bd","anthropic",["web_search","web_fetch","gmail_messages_list","email_send","create_artifact"],["inbox-triage"],"Builds target lists, enriches leads, runs outreach, and logs CRM activity. Bulk sends and CRM writes are approval-gated."],["ops-manager","Operations","ops_manager","anthropic",["calendar_events_list","calendar_event_read","file_read","file_write","create_artifact"],["meeting-scheduler","report-builder"],"Keeps the business running — scheduling, internal docs, recurring checklists, vendor coordination. Calendar invites and webhooks are approval-gated."],["product-pm","Product / Project Manager","product_pm","claude-code",["gh_repo_read","gh_issue_list","gh_issue_create","gh_pr_list","file_read","file_write","create_workflow_definition"],["review"],"Maintains the roadmap, writes specs, tracks delivery, and runs standups. Issue/PR creates respect the GitHub allowlist."],["web-ecommerce","Web / Ecommerce","web_ecommerce","claude-code",["web_fetch","supabase_rest_select","browser_open","file_read","file_write","create_artifact"],["web-automation"],"Manages site/store content, products, SEO, and deploys. Deploys, store writes, and DB writes are approval-gated."]].map(([a,b,c,d,e,f,g])=>({slug:a,title:b,role:c,engine_default:d,tools_required:e,tools_optional:[],skills:f,memory_scopes:["agent","project"],approval_profile:"personal_assistant"===c?"strict":"standard",description_long:g}));q.push({slug:"tool-smith",title:"Tool Smith",role:"tool_smith",engine_default:"claude-code",tools_required:["create_skill","update_skill","create_composite_tool","update_composite_tool","create_connector","update_connector","propose_tool","web_search","web_fetch","file_read"],tools_optional:[],skills:["plan","review"],memory_scopes:["agent","project"],approval_profile:"standard",description_long:"Authors reusable capabilities for the marketplace — declarative skills, composite tools chaining existing primitives, and REST API connectors. For non-REST integrations it proposes reviewable code; it never executes self-authored code.",system_prompt:'You are Tool Smith, the capability-authoring agent. Your only job is to author\nreusable capabilities other agents can use, and publish them to the marketplace.\n\nPick the RIGHT authoring path for each request:\n • A recipe chaining tools that ALREADY exist -> author a COMPOSITE TOOL\n (create_composite_tool). Reference only existing primitive tools; the\n composite inherits the MAX risk of its steps and every gate re-fires per\n step. Use this for "do X then Y then summarize" style capabilities.\n • A new REST API (Notion, Linear, Stripe, Airtable, ...) -> author a CONNECTOR\n (create_connector) with a declarative manifest: https base_url, allowed_hosts,\n secret-by-reference auth (NEVER paste a raw key — reference it by name, e.g.\n NOTION_TOKEN), and per-endpoint method/path/risk. Each endpoint becomes a\n callable <slug>.<endpoint> tool the instant the owner supplies the key once.\n • A reusable instruction/prompt recipe an LLM follows with tools it already\n has -> author a SKILL (create_skill).\n • A genuinely new integration that is NOT REST (binary, SDK-only, websockets,\n complex OAuth) -> propose_tool. This stages reviewable code; it is INERT and\n a human must merge + restart. You never execute self-authored code.\n\nHard rules: never put a raw secret in a connector manifest. Never declare a\ndestructive endpoint as low risk — the validator clamps writes to medium and\nhigh/irreversible endpoints always require human approval at run time. When asked\nfor a capability that already exists, say so instead of duplicating it.'});let r=["project-watcher","personal-assistant","engineering-lead","marketing-lead","meeting-notes"];function l(a=(0,g.getDb)()){if(globalThis.__madarxAgentTemplatesSeeded)return;let b=(0,g.nowIso)();for(let c of q)a.prepare(`INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, version, manifest_json, risk_summary, tags, created_at)
3707
+ - Do not invent off-brand palettes, logos, typography, or tone unless the owner explicitly asks for a different brand.`}d()}catch(a){d(a)}})},91937:(a,b,c)=>{"use strict";c.d(b,{ho:()=>l,pE:()=>f});let d=/^[a-z][a-z0-9-]{2,63}$/,e=new Set(["tool_call","llm_synthesis","artifact_write"]),f=["low","medium","high","irreversible_external"],g=/^[a-z][a-z0-9-]{0,63}$/,h=/\{\{([a-z][a-z0-9-]*)/g;function i(a,b,c){a.push(`${b}: ${c}`)}function j(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function k(a){return f.indexOf(a)}function l(a,b={}){let c,m=[],n=[];try{c=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!c||"undefined"===c)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(c,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(c,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!j(a))return{ok:!1,errors:["spec: must be a plain object"],warnings:[],normalized:null};if(a.slug&&"string"==typeof a.slug?d.test(a.slug)||i(m,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, hyphens allowed)`):i(m,"slug","required (string)"),a.title&&"string"==typeof a.title||i(m,"title","required (non-empty string)"),null!=a.description&&"string"!=typeof a.description&&i(m,"description","must be a string"),null==a.input_schema||j(a.input_schema)||i(m,"input_schema","must be a plain object"),!Array.isArray(a.steps)||0===a.steps.length)return i(m,"steps","required (non-empty array)"),{ok:!1,errors:m,warnings:n,normalized:null};if(a.steps.length>25)return i(m,"steps","exceeds 25"),{ok:!1,errors:m,warnings:n,normalized:null};let o=new Set,p="low",q=[];for(let c=0;c<a.steps.length;c++){var r,s;let d,l=a.steps[c],n=`steps[${c}]`;if(!j(l)){i(m,n,"must be a plain object");continue}if(!l.kind||!e.has(l.kind)){i(m,`${n}.kind`,`must be one of ${[...e].join(", ")}`);continue}l.id&&"string"==typeof l.id?g.test(l.id)?o.has(l.id)?i(m,`${n}.id`,`duplicate step id '${l.id}'`):o.add(l.id):i(m,`${n}.id`,`does not match ${g}`):i(m,`${n}.id`,"required (slug-like string)");let t=new Set(o);l.id&&t.delete(l.id);let u={};for(let[a,b]of("tool_call"===l.kind&&j(l.input_template)&&(u.input_template=l.input_template),"artifact_write"===l.kind&&(null!=l.title_template&&(u.title_template=l.title_template),null!=l.content_ref&&(u.content_ref=l.content_ref)),"llm_synthesis"===l.kind&&null!=l.prompt&&(u.prompt=l.prompt),Object.entries(u)))for(let c of function a(b){let c=new Set;if("string"==typeof b){let a;for(h.lastIndex=0;null!==(a=h.exec(b));){let b=a[1];"input"!==b&&c.add(b)}return c}if(j(b))for(let d of Object.values(b))for(let b of a(d))c.add(b);if(Array.isArray(b))for(let d of b)for(let b of a(d))c.add(b);return c}(b))t.has(c)||i(m,n,`references later/unknown step '${c}' in ${a}`);switch(l.kind){case"tool_call":d=function(a,b,c,d){let e;return a.tool&&"string"==typeof a.tool?d.knownToolNames&&!d.knownToolNames.has(a.tool)&&i(b,`${c}.tool`,`unknown tool '${a.tool}'`):i(b,`${c}.tool`,"required (string)"),null==a.input_template||j(a.input_template)||i(b,`${c}.input_template`,"must be a plain object (data only)"),null!=a.risk?f.includes(a.risk)?e=a.risk:(i(b,`${c}.risk`,`must be one of ${f.join(", ")}`),e="medium"):e=d.toolRiskByName&&"string"==typeof a.tool?d.toolRiskByName.get(a.tool)??"medium":"medium",e}(l,m,n,b);break;case"llm_synthesis":l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&i(m,`${n}.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):i(m,`${n}.prompt`,"required (non-empty string)"),d="low";break;case"artifact_write":d="low"}r=p,s=d,p=k(r)>=k(s)?r:s;let v={kind:l.kind,id:l.id};"tool_call"===l.kind?(v.tool=l.tool??null,null!=l.input_template&&(v.input_template=structuredClone(l.input_template)),v.risk=d):"llm_synthesis"===l.kind?v.prompt=l.prompt??null:"artifact_write"===l.kind&&(null!=l.title_template&&(v.title_template=l.title_template),null!=l.content_ref&&(v.content_ref=l.content_ref)),q.push(v)}return m.length>0?{ok:!1,errors:m,warnings:n,normalized:null}:{ok:!0,errors:[],warnings:n,normalized:{slug:a.slug,title:a.title,description:a.description??null,input_schema:null!=a.input_schema?structuredClone(a.input_schema):{type:"object",properties:{}},steps:q,risk_level:p}}}},93154:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{I2:()=>n,Z3:()=>o,cK:()=>p,pz:()=>m,yi:()=>l});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=c(60105),j=c(88101),k=a([g,i,j]);[g,i,j]=k.then?(await k)():k;let q=[["project-watcher","Project Watcher","project_watcher","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","web_fetch","file_read"],["investigate","retro"],"Watches repos, issues, PRs, deploys, and produces weekly project pulses."],["personal-assistant","Personal Assistant","personal_assistant","anthropic",["gmail_messages_list","gmail_message_read","calendar_events_list","whatsapp_send"],[],"Reads inbox and calendar context, drafts replies, and keeps the operator organized."],["travel-concierge","Travel Concierge","travel_concierge","anthropic",["flight_search","flight_status","hotel_search","hotel_rates","web_search","web_fetch","create_artifact"],[],"Plans trips end to end — flights, hotels, and itineraries — and returns a booking-ready comparison with real prices, times, and sources. Bookings and purchases stay approval-gated."],["engineering-lead","Engineering Lead","engineering_lead","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","terminal_run","file_read","file_write"],["investigate","review","ship","qa"],"Leads implementation, review, QA, and preview deploys with explicit approval gates."],["marketing-lead","Marketing Lead","marketing_lead","anthropic",["web_search","web_fetch","file_write","create_artifact"],["design-shotgun","impeccable"],"Creates market research, launch copy, positioning, and design briefs."],["meeting-notes","Meeting Notes Taker","meeting_notes","anthropic",["transcribe_audio","file_write","create_artifact"],[],"Turns recordings into transcripts, decisions, action items, and follow-ups."],["bug-triage","Bug Triage Specialist","bug_triage","claude-code",["gh_issue_list","gh_pr_list","file_read"],["investigate"],"Classifies incoming bugs and proposes severity and next actions."],["phase-runner","Phase Runner","phase_runner","claude-code",["file_read","file_write","terminal_run"],["ship"],"Executes approved implementation phases and reports blockers."],["code-reviewer","Code Reviewer","code_reviewer","claude-code",["file_read","gh_pr_list"],["review"],"Provides independent diff review before merge."],["competitor-scout","Competitor Scout","competitor_scout","anthropic",["web_search","web_fetch","create_artifact"],[],"Tracks competitor movement and summarizes weekly signals."],["finance-ops","Finance and Ops","finance_ops","anthropic",["file_read","create_artifact"],[],"Reads finance docs and drafts advisory runway and ops summaries."],["legal-compliance","Legal and Compliance","legal_compliance","anthropic",["file_read","web_fetch","create_artifact"],[],"Reviews policy and compliance documents as advisory output only."],["customer-support","Customer Support","customer_support","anthropic",["gmail_message_read","file_write"],[],"Drafts customer replies and escalates approval-required sends."],["chief-of-staff","Chief of Staff","chief_of_staff","anthropic",["web_search","file_read","file_write","create_artifact","create_workflow_definition"],["report-builder","market-research"],"Translates founder intent into delegated work across the company, runs the weekly cadence, and surfaces decisions. No direct external writes."],["ads-media-buyer","Ads / Media Buyer","ads_media_buyer","anthropic",["web_search","file_write","create_artifact"],["design-shotgun"],"Plans, builds, and reports on paid campaigns across Meta/Google/TikTok within budget caps. Every campaign publish and budget set is approval-gated."],["content-social","Content / Social Manager","content_social","anthropic",["web_search","file_write","create_artifact","voice_speak"],["design-shotgun"],"Produces and schedules organic posts, reels, and videos and maintains brand voice. Every publish is approval-gated."],["sales-bd","Sales / BD","sales_bd","anthropic",["web_search","web_fetch","gmail_messages_list","email_send","create_artifact"],["inbox-triage"],"Builds target lists, enriches leads, runs outreach, and logs CRM activity. Bulk sends and CRM writes are approval-gated."],["ops-manager","Operations","ops_manager","anthropic",["calendar_events_list","calendar_event_read","file_read","file_write","create_artifact"],["meeting-scheduler","report-builder"],"Keeps the business running — scheduling, internal docs, recurring checklists, vendor coordination. Calendar invites and webhooks are approval-gated."],["product-pm","Product / Project Manager","product_pm","claude-code",["gh_repo_read","gh_issue_list","gh_issue_create","gh_pr_list","file_read","file_write","create_workflow_definition"],["review"],"Maintains the roadmap, writes specs, tracks delivery, and runs standups. Issue/PR creates respect the GitHub allowlist."],["web-ecommerce","Web / Ecommerce","web_ecommerce","claude-code",["web_fetch","supabase_rest_select","browser_open","file_read","file_write","create_artifact"],["web-automation"],"Manages site/store content, products, SEO, and deploys. Deploys, store writes, and DB writes are approval-gated."]].map(([a,b,c,d,e,f,g])=>({slug:a,title:b,role:c,engine_default:d,tools_required:e,tools_optional:[],skills:f,memory_scopes:["agent","project"],approval_profile:"personal_assistant"===c?"strict":"standard",description_long:g}));q.push({slug:"tool-smith",title:"Tool Smith",role:"tool_smith",engine_default:"claude-code",tools_required:["create_skill","update_skill","create_composite_tool","update_composite_tool","create_connector","update_connector","propose_tool","web_search","web_fetch","file_read"],tools_optional:[],skills:["plan","review"],memory_scopes:["agent","project"],approval_profile:"standard",description_long:"Authors reusable capabilities for the marketplace — declarative skills, composite tools chaining existing primitives, and REST API connectors. For non-REST integrations it proposes reviewable code; it never executes self-authored code.",system_prompt:'You are Tool Smith, the capability-authoring agent. Your only job is to author\nreusable capabilities other agents can use, and publish them to the marketplace.\n\nPick the RIGHT authoring path for each request:\n • A recipe chaining tools that ALREADY exist -> author a COMPOSITE TOOL\n (create_composite_tool). Reference only existing primitive tools; the\n composite inherits the MAX risk of its steps and every gate re-fires per\n step. Use this for "do X then Y then summarize" style capabilities.\n • A new REST API (Notion, Linear, Stripe, Airtable, ...) -> author a CONNECTOR\n (create_connector) with a declarative manifest: https base_url, allowed_hosts,\n secret-by-reference auth (NEVER paste a raw key — reference it by name, e.g.\n NOTION_TOKEN), and per-endpoint method/path/risk. Each endpoint becomes a\n callable <slug>.<endpoint> tool the instant the owner supplies the key once.\n • A reusable instruction/prompt recipe an LLM follows with tools it already\n has -> author a SKILL (create_skill).\n • A genuinely new integration that is NOT REST (binary, SDK-only, websockets,\n complex OAuth) -> propose_tool. This stages reviewable code; it is INERT and\n a human must merge + restart. You never execute self-authored code.\n\nHard rules: never put a raw secret in a connector manifest. Never declare a\ndestructive endpoint as low risk — the validator clamps writes to medium and\nhigh/irreversible endpoints always require human approval at run time. When asked\nfor a capability that already exists, say so instead of duplicating it.'});let r=["project-watcher","personal-assistant","engineering-lead","marketing-lead","meeting-notes"];function l(a=(0,g.getDb)()){if(globalThis.__madarxAgentTemplatesSeeded)return;let b=(0,g.nowIso)();for(let c of q)a.prepare(`INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, version, manifest_json, risk_summary, tags, created_at)
3524
3708
  VALUES (?, 'agent', ?, ?, ?, ?, 'madarx', 'builtin', '1.0', ?, ?, ?, ?)
3525
3709
  ON CONFLICT(kind, slug) DO UPDATE SET title=excluded.title, description=excluded.description, manifest_json=excluded.manifest_json, tags=excluded.tags`).run(`agent:${c.slug}`,c.slug,c.title,c.description_long,c.role,JSON.stringify({agent:c}),c.approval_profile,JSON.stringify([c.role,c.engine_default]),b);if("1"!==process.env.MADARX_SEED_DEFAULT_AGENTS){globalThis.__madarxAgentTemplatesSeeded=!0;return}let c=r.map(()=>"?").join(","),d=a.prepare(`SELECT COUNT(*) AS c FROM agent_template_installations
3526
3710
  WHERE project_id = 'personal' AND template_slug IN (${c})`).get(...r);if(d?.c>=r.length){globalThis.__madarxAgentTemplatesSeeded=!0;return}for(let a of r)try{m(a,"personal",{seed:!0})}catch{}globalThis.__madarxAgentTemplatesSeeded=!0}function m(a,b="personal",c={}){let d=function(a){var b;let c=q.find(b=>b.slug===a);return c?c:(b=j.S.find(b=>b.slug===a))?{slug:b.slug,title:b.title,role:b.role,engine_default:b.engine_default,tools_required:Array.isArray(b.tools_required)?b.tools_required:[],tools_optional:Array.isArray(b.tools_optional)?b.tools_optional:[],skills:Array.isArray(b.skills)?b.skills:[],memory_scopes:["agent","project"],approval_profile:b.approval_profile||"standard",description_long:b.description_long,system_prompt:"string"==typeof b.system_prompt?b.system_prompt:null}:null}(a);if(!d)throw Error("agent template not found");let e=(0,g.getDb)(),f=e.prepare("SELECT * FROM agent_template_installations WHERE template_slug = ? AND project_id = ?").get(a,b);if(f&&!c.overwrite)return f;let h=c.agent_id||`${b}-${a}`.replace(/[^a-zA-Z0-9_-]/g,"-"),k=(0,i.Sn)({id:h,name:d.title,type:d.role,role:d.role,title:d.title,engine:d.engine_default,tools:d.tools_required,mission:d.description_long,system_prompt:d.system_prompt||void 0,approval:d.approval_profile,project_id:b,template_slug:a,suppress_live_event:!!c.seed});for(let a of d.tools_required)(0,i.Xr)(h,a,a.includes("write")||a.includes("send")||a.includes("terminal")?"approval_required":"auto");let l=(0,g.nowIso)();return e.prepare(`INSERT INTO agent_template_installations (id, template_slug, agent_id, project_id, installed_at, status)