madarx 2.12.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +582 -582
  3. package/.next/standalone/.next/app-path-routes-manifest.json +83 -83
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  8. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  9. package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/admin/page.js +3 -3
  11. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/agents/[id]/page.js +4 -4
  13. package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/agents/page.js +1 -1
  15. package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/orchestrator/stream/route.js +12 -12
  108. package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/orchestrator/upload/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/orgs/join-complete/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/whatsapp/disconnect/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/approvals/page.js +2 -2
  194. package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/architecture.html +2 -2
  197. package/.next/standalone/.next/server/app/architecture.rsc +1 -1
  198. package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/brand.html +1 -1
  202. package/.next/standalone/.next/server/app/brand.rsc +1 -1
  203. package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/federated-ai.html +2 -2
  206. package/.next/standalone/.next/server/app/federated-ai.rsc +1 -1
  207. package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
  209. package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/hail/[id]/page.js +1 -1
  211. package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +2 -2
  213. package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
  214. package/.next/standalone/.next/server/app/hail/page.js +2 -2
  215. package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
  217. package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/index.html +2 -2
  219. package/.next/standalone/.next/server/app/index.rsc +1 -1
  220. package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/join.html +1 -1
  222. package/.next/standalone/.next/server/app/join.rsc +1 -1
  223. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/marketplace/page.js +2 -2
  225. package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/missions/page.js +1 -1
  230. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  234. package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
  235. package/.next/standalone/.next/server/app/org/page.js +1 -1
  236. package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
  237. package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
  238. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
  242. package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/projects/new.html +1 -1
  244. package/.next/standalone/.next/server/app/projects/new.rsc +2 -2
  245. package/.next/standalone/.next/server/app/projects/page.js +30 -30
  246. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
  250. package/.next/standalone/.next/server/app/schedules/page.js +2 -2
  251. package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
  253. package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
  256. package/.next/standalone/.next/server/app/settings/brand.html +2 -2
  257. package/.next/standalone/.next/server/app/settings/brand.rsc +1 -1
  258. package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
  262. package/.next/standalone/.next/server/app/settings/onboarding.rsc +1 -1
  263. package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
  264. package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/settings.html +2 -2
  271. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  272. package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/app/tasks/[id]/page.js +1 -1
  275. package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/tasks/page.js +2 -2
  277. package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/whatsapp.html +1 -1
  283. package/.next/standalone/.next/server/app/whatsapp.rsc +1 -1
  284. package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  289. package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app-paths-manifest.json +83 -83
  291. package/.next/standalone/.next/server/chunks/{8332.js → 1092.js} +1 -1
  292. package/.next/standalone/.next/server/chunks/1699.js +44 -44
  293. package/.next/standalone/.next/server/functions-config-manifest.json +46 -46
  294. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  295. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  296. package/.next/standalone/.next/server/pages/404.html +1 -1
  297. package/.next/standalone/.next/server/pages/500.html +1 -1
  298. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  299. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  300. package/.next/standalone/.next/static/chunks/app/projects/page-2166c214f854766e.js +1 -0
  301. package/.next/standalone/.next/static/chunks/{webpack-86ee88827adb756d.js → webpack-0cfb048137bd7fce.js} +1 -1
  302. package/.next/standalone/CHANGELOG.md +21 -0
  303. package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
  304. package/.next/standalone/data/.default-project-seeded +1 -1
  305. package/.next/standalone/data/madarx.sqlite +0 -0
  306. package/.next/standalone/data/madarx.sqlite-shm +0 -0
  307. package/.next/standalone/data/madarx.sqlite-wal +0 -0
  308. package/.next/standalone/package.json +4 -1
  309. package/.next/standalone/workspace/agents/ops-agent/skills.md +24 -0
  310. package/.next/standalone/workspace/agents/tool-smith-agent/skills.md +24 -0
  311. package/.next/static/chunks/app/projects/page-2166c214f854766e.js +1 -0
  312. package/.next/static/chunks/{webpack-86ee88827adb756d.js → webpack-0cfb048137bd7fce.js} +1 -1
  313. package/CHANGELOG.md +21 -0
  314. package/ai-docs/key-constraints.md +5 -0
  315. package/app/api/orchestrator/stream/route.js +39 -3
  316. package/lib/agent-engines.js +4 -1
  317. package/lib/agent-runner.js +24 -0
  318. package/lib/cli/banner.js +200 -21
  319. package/lib/cli/run.js +33 -11
  320. package/lib/cli/splash.js +120 -0
  321. package/lib/engine-capabilities.js +92 -0
  322. package/lib/fabricated-tool-output.js +77 -0
  323. package/lib/marketplace-seeds.js +141 -3
  324. package/lib/runtime.js +52 -3
  325. package/lib/seeds.js +5 -1
  326. package/lib/tools/registry.js +20 -0
  327. package/package.json +4 -1
  328. package/scripts/postinstall-splash.mjs +81 -0
  329. package/scripts/preview-banner.mjs +24 -0
  330. package/.next/standalone/.next/static/chunks/app/projects/page-e51d5f90e549d669.js +0 -1
  331. package/.next/static/chunks/app/projects/page-e51d5f90e549d669.js +0 -1
  332. /package/.next/standalone/.next/static/{61oz5Ag6h45ZPi6uZn01m → cR6E_4o8_rHXujVNesWiZ}/_buildManifest.js +0 -0
  333. /package/.next/standalone/.next/static/{61oz5Ag6h45ZPi6uZn01m → cR6E_4o8_rHXujVNesWiZ}/_ssgManifest.js +0 -0
  334. /package/.next/static/{61oz5Ag6h45ZPi6uZn01m → cR6E_4o8_rHXujVNesWiZ}/_buildManifest.js +0 -0
  335. /package/.next/static/{61oz5Ag6h45ZPi6uZn01m → cR6E_4o8_rHXujVNesWiZ}/_ssgManifest.js +0 -0
package/lib/cli/banner.js CHANGED
@@ -12,16 +12,22 @@
12
12
 
13
13
  // ── palette ────────────────────────────────────────────────────────────────
14
14
  const PALETTE = {
15
- mars: [0xc2, 0x45, 0x2a], // brand primary
15
+ mars: [0xc2, 0x45, 0x2a], // brand primary / THE accent
16
16
  marsHi: [0xde, 0x6a, 0x53], // lighter mars (top of gradient)
17
17
  marsLo: [0x7c, 0x2b, 0x19], // dark mars (bottom of gradient)
18
18
  gold: [0xd4, 0xb7, 0x7f],
19
19
  sand: [0xf6, 0xf3, 0xed],
20
20
  ink: [0x68, 0x70, 0x7b], // "muted" — used for secondary text
21
21
  green: [0x4c, 0xae, 0x6a],
22
+ // ── Sovereign-Mono palette (brand-guidelines v1.3) — used by the splash ──
23
+ onyx: [0x0F, 0x0F, 0x11], // ground / black letter fill
24
+ platinum: [0xE8, 0xE8, 0xE5], // mark / wordmark / "done" ✓
25
+ bone: [0xDC, 0xDC, 0xD8], // body labels
26
+ graphite: [0x4A, 0x4A, 0x4D], // rules, borders, pending ·
27
+ muted: [0x8A, 0x82, 0x78], // datelines, subtitle, secondary
22
28
  };
23
29
 
24
- function colorEnabled() {
30
+ export function colorEnabled() {
25
31
  if (process.env.FORCE_COLOR && process.env.FORCE_COLOR !== '0') return true;
26
32
  if (process.env.NO_COLOR) return false;
27
33
  return Boolean(process.stdout && process.stdout.isTTY);
@@ -29,32 +35,49 @@ function colorEnabled() {
29
35
 
30
36
  const ON = colorEnabled();
31
37
 
32
- function fg([r, g, b], s) {
38
+ export function fg([r, g, b], s) {
33
39
  if (!ON) return s;
34
40
  return `\x1b[38;2;${r};${g};${b}m${s}\x1b[0m`;
35
41
  }
36
- function bold(s) { return ON ? `\x1b[1m${s}\x1b[0m` : s; }
37
- function dim(s) { return ON ? `\x1b[2m${s}\x1b[0m` : s; }
42
+ export function bold(s) { return ON ? `\x1b[1m${s}\x1b[0m` : s; }
43
+ export function dim(s) { return ON ? `\x1b[2m${s}\x1b[0m` : s; }
38
44
 
39
- // ── wordmark ─────────────────────────────────────────────────────────────────
40
- // 5-row block alphabet, just the glyphs we need for "MADARX".
41
- const GLYPHS = {
42
- M: ['█ █', '██ ██', '█ █ █', '█ █', '█ █'],
43
- A: [' ███ ', '█ █', '█████', '█ █', '█ █'],
44
- D: ['████ ', '█ █', '█ █', '█ █', '████ '],
45
- R: ['████ ', '█ █', '████ ', '█ █ ', '█ █'],
46
- X: ['█ █', ' █ █ ', ' █ ', ' █ █ ', '█ █'],
47
- };
45
+ /** Visible (printable) length of a string, ignoring ANSI escape sequences. */
46
+ export function visibleLength(s) {
47
+ // eslint-disable-next-line no-control-regex
48
+ return String(s).replace(/\x1b\[[0-9;]*m/g, '').length;
49
+ }
48
50
 
49
- const ROW_TINT = [PALETTE.marsHi, PALETTE.mars, PALETTE.mars, PALETTE.marsLo, PALETTE.marsLo];
51
+ // ── wordmark ─────────────────────────────────────────────────────────────────
52
+ // Embedded figlet "Standard" font art for "madar" + "X", captured offline so the
53
+ // banner stays dependency-free (no figlet at runtime). "madar" renders in Sand,
54
+ // the "X" in Mars — the single brand accent (the X is a permanent constant, so
55
+ // it never counts against the one-Mars-per-surface rule).
56
+ const FIG_MADAR = [
57
+ ' _ ',
58
+ ' _ __ ___ __ _ __| | __ _ _ __ ',
59
+ " | '_ ` _ \\ / _` |/ _` |/ _` | '__|",
60
+ ' | | | | | | (_| | (_| | (_| | | ',
61
+ ' |_| |_| |_|\\__,_|\\__,_|\\__,_|_| ',
62
+ ' ',
63
+ ];
64
+ const FIG_X = [
65
+ ' __ __',
66
+ ' \\ \\/ /',
67
+ ' \\ / ',
68
+ ' / \\ ',
69
+ ' /_/\\_\\',
70
+ ' ',
71
+ ];
50
72
 
51
- /** The MADARX wordmark as a colored, multi-line string. */
52
- function wordmark() {
53
- const word = 'MADARX'.split('');
73
+ /** The "madarX" wordmark as a colored, multi-line string. */
74
+ export function wordmark() {
75
+ const rows = Math.max(FIG_MADAR.length, FIG_X.length);
54
76
  const lines = [];
55
- for (let row = 0; row < 5; row++) {
56
- const segs = word.map((ch) => GLYPHS[ch][row]).join(' ');
57
- lines.push(fg(ROW_TINT[row], segs));
77
+ for (let i = 0; i < rows; i++) {
78
+ const l = FIG_MADAR[i] ?? '';
79
+ const r = FIG_X[i] ?? '';
80
+ lines.push(fg(PALETTE.platinum, l) + fg(PALETTE.mars, r));
58
81
  }
59
82
  return lines.join('\n');
60
83
  }
@@ -145,4 +168,160 @@ export function renderHeader(title = 'setup', version) {
145
168
  return out.join('\n');
146
169
  }
147
170
 
171
+ // ── hero banner (Hermes-style: 3D wordmark + orbit mark + grouped catalog) ────
172
+
173
+ /**
174
+ * Hero wordmark — identical to the install splash: the lowercase Standard
175
+ * "madar" (FIG_MADAR, Platinum) beside the Standard "X" (FIG_X, Mars).
176
+ * Returns an array of lines so the hero can indent/compose them.
177
+ */
178
+ function heroWordmark() {
179
+ return wordmark().split('\n');
180
+ }
181
+
182
+ // Orbit mark — "madar" (مدار) is Arabic for orbit. Graphite ring, Mars core + bead.
183
+ const ORBIT = [
184
+ ' ╭───────╮ ● ',
185
+ ' ╭─╯ ╰─╮ ',
186
+ '│ ╲ ╱ │',
187
+ '│ ╳ │',
188
+ '│ ╱ ╲ │',
189
+ ' ╰─╮ ╭─╯ ',
190
+ ' ╰───────╯ ',
191
+ ];
192
+ function orbitMark() {
193
+ return ORBIT.map((line) => {
194
+ let out = '';
195
+ for (const ch of line) {
196
+ if (ch === ' ') out += ' ';
197
+ else if (ch === '╳' || ch === '╲' || ch === '╱' || ch === '●') out += fg(PALETTE.mars, ch);
198
+ else out += fg(PALETTE.graphite, ch);
199
+ }
200
+ return out;
201
+ });
202
+ }
203
+
204
+ /** Truncate raw (uncolored) text to a visible width with an ellipsis. */
205
+ function clip(s, width) {
206
+ if (s.length <= width) return s;
207
+ return s.slice(0, Math.max(0, width - 1)) + '…';
208
+ }
209
+
210
+ /**
211
+ * Hermes-style hero banner: a big 3D MADARX wordmark, a titled rule, then a
212
+ * two-column body — orbit mark + runtime meta on the left, a grouped capability
213
+ * catalog (tools by category, then skills) on the right.
214
+ *
215
+ * Dependency-free and DB-free: all inputs are passed in by the caller (the CLI
216
+ * supervisor), so importing this never opens the database.
217
+ *
218
+ * @param {object} info
219
+ * @param {string} info.version
220
+ * @param {string} [info.home] data home path
221
+ * @param {string} [info.url] dashboard URL
222
+ * @param {string} [info.engine] default sub-agent engine
223
+ * @param {string} [info.commit] short git hash (optional)
224
+ * @param {string} [info.session] session id (optional)
225
+ * @param {Array<{category:string,count:number,names:string[]}>} [info.toolCats]
226
+ * @param {number} [info.toolCount]
227
+ * @param {Array<{category:string,count:number,names:string[]}>} [info.skillGroups]
228
+ * @param {number} [info.skillCount]
229
+ * @param {boolean}[info.behind]
230
+ * @param {string} [info.latest]
231
+ * @returns {string}
232
+ */
233
+ export function renderHeroBanner(info = {}) {
234
+ const {
235
+ version = '0.0.0', home, url,
236
+ commit, session, toolCats = [], toolCount, skillGroups = [], skillCount,
237
+ behind = false, latest,
238
+ } = info;
239
+
240
+ const cols = (process.stdout && process.stdout.columns) || 84;
241
+ const out = [''];
242
+
243
+ // 1) 3D wordmark.
244
+ for (const l of heroWordmark()) out.push(' ' + l);
245
+ out.push('');
246
+
247
+ // 2) Titled rule: ── madarX OS v… · date · commit ─────────
248
+ const stamp = new Date().toISOString().slice(0, 10).replace(/-/g, '.');
249
+ const title = `${bold(fg(PALETTE.platinum, 'madar'))}${bold(fg(PALETTE.mars, 'X'))}${bold(fg(PALETTE.platinum, ' OS'))}`
250
+ + ` ${fg(PALETTE.mars, 'v' + version)}`
251
+ + fg(PALETTE.muted, ` · ${stamp}${commit ? ' · ' + commit : ''}`);
252
+ const titleVis = visibleLength(title);
253
+ const railLen = Math.max(3, cols - 4 - titleVis - 3);
254
+ out.push(' ' + fg(PALETTE.graphite, '── ') + title + ' ' + fg(PALETTE.graphite, '─'.repeat(railLen)));
255
+ out.push('');
256
+
257
+ // 3) Two columns. Left: orbit mark + meta. Right: catalog.
258
+ const left = orbitMark();
259
+ const leftMeta = [
260
+ '',
261
+ home ? ' ' + fg(PALETTE.muted, home.replace(process.env.HOME || '~', '~')) : '',
262
+ url ? ' ' + fg(PALETTE.muted, url) : '',
263
+ session ? ' ' + fg(PALETTE.muted, 'session ' + session) : '',
264
+ ].filter(Boolean);
265
+ const leftAll = [...left, ...leftMeta];
266
+ // Left column width = its widest line (orbit block or the longer meta lines
267
+ // like the dashboard URL / session id), so the right column never collides
268
+ // with the address/session under the logo.
269
+ const LW = Math.max(...leftAll.map(visibleLength));
270
+ const GAP = 6; // breathing room between the two columns
271
+
272
+ const right = [];
273
+ const rw = Math.max(28, cols - LW - GAP - 2);
274
+ // One "label: a, b, c…" row, clipped to the right column.
275
+ const groupLine = (label, names) => {
276
+ const body = clip(names.join(', '), rw - label.length - 2);
277
+ return `${fg(PALETTE.bone, label + ':')} ${fg(PALETTE.muted, body)}`;
278
+ };
279
+
280
+ right.push(fg(PALETTE.mars, bold('Available Tools')) + fg(PALETTE.muted, toolCount ? ` ${toolCount}` : ''));
281
+ // Feature the toolsets a business agent actually reaches for, in priority
282
+ // order — not raw count. Domain/installable packs (mines, travel,
283
+ // cli_generator, vercel, …) stay in the registry but fold into "more toolsets".
284
+ const FEATURED_TOOL_CATEGORIES = [
285
+ 'web', 'email', 'calendar', 'local_machine', 'browser',
286
+ 'supabase', 'workflow', 'authoring', 'github', 'voice',
287
+ ];
288
+ // Friendly display labels for the slugs that read like internals.
289
+ const TOOL_LABELS = {
290
+ local_machine: 'files', web: 'web', email: 'email', calendar: 'calendar',
291
+ browser: 'browser', supabase: 'data', workflow: 'automations',
292
+ authoring: 'build-tools', github: 'github', voice: 'voice',
293
+ };
294
+ const byName = new Map(toolCats.map((c) => [c.category, c]));
295
+ const featured = FEATURED_TOOL_CATEGORIES.map((n) => byName.get(n)).filter(Boolean);
296
+ const shownCats = featured.slice(0, 8);
297
+ for (const c of shownCats) right.push(groupLine(TOOL_LABELS[c.category] || c.category, c.names));
298
+ const moreCats = toolCats.length - shownCats.length;
299
+ if (moreCats > 0) right.push(fg(PALETTE.muted, `(and ${moreCats} more toolsets…)`));
300
+
301
+ right.push('');
302
+ right.push(fg(PALETTE.mars, bold('Available Skills')) + fg(PALETTE.muted, skillCount ? ` ${skillCount}` : ''));
303
+ // Business-default skills, grouped by category (research, comms, …).
304
+ for (const g of skillGroups) right.push(groupLine(g.category, g.names));
305
+
306
+ // Zip columns.
307
+ const rows = Math.max(leftAll.length, right.length);
308
+ for (let i = 0; i < rows; i++) {
309
+ const l = leftAll[i] ?? '';
310
+ const r = right[i] ?? '';
311
+ const pad = ' '.repeat(Math.max(0, LW - visibleLength(l)));
312
+ out.push(' ' + (l || '') + pad + ' '.repeat(GAP) + r);
313
+ }
314
+
315
+ // 4) Update status footer + dateline.
316
+ out.push('');
317
+ if (behind && latest) {
318
+ out.push(' ' + fg(PALETTE.mars, '▲') + ' ' + fg(PALETTE.bone, `v${latest} available`) + fg(PALETTE.muted, ' — run ') + fg(PALETTE.mars, 'madarx update'));
319
+ } else {
320
+ out.push(' ' + fg(PALETTE.muted, '● up to date'));
321
+ }
322
+ out.push(' ' + fg(PALETTE.muted, `${stamp} · Designed in UAE · v${version}`));
323
+ out.push('');
324
+ return out.join('\n');
325
+ }
326
+
148
327
  export const _palette = PALETTE;
package/lib/cli/run.js CHANGED
@@ -17,7 +17,8 @@ import fs from 'node:fs';
17
17
  import { spawn } from 'node:child_process';
18
18
  import { applyHomeEnv } from './home.js';
19
19
  import { PKG_ROOT } from './dispatch.js';
20
- import { renderBanner } from './banner.js';
20
+ import { renderBanner, renderHeroBanner } from './banner.js';
21
+ import { readyPanel } from './splash.js';
21
22
  import { readUpdateCheck } from '../update-check.js';
22
23
  import { loadProjectEnv } from '../load-env.js';
23
24
 
@@ -157,25 +158,39 @@ export async function run({ flags = {} } = {}) {
157
158
  // Catalog counts: best-effort dynamic import so a count never blocks or
158
159
  // breaks boot. These modules build static catalogs at eval time and do NOT
159
160
  // open the database, so the supervisor stays DB-free.
160
- let tools, skills;
161
+ let toolCats = [];
162
+ let toolCount;
163
+ let skillGroups = [];
164
+ let skillCount;
161
165
  try {
162
- const [{ MARKETPLACE_TOOL_COUNT }, seeds] = await Promise.all([
166
+ const [{ MARKETPLACE_TOOL_COUNT, listToolCategories }, seeds] = await Promise.all([
163
167
  import('../tools/registry.js'),
164
168
  import('../marketplace-seeds.js'),
165
169
  ]);
166
- tools = MARKETPLACE_TOOL_COUNT;
167
- skills = (seeds.PHASE1_SKILL_SLUGS?.length || 0) + (seeds.OPEN_DESIGN_SKILL_SLUGS?.length || 0);
168
- } catch { /* counts are optional */ }
170
+ toolCount = MARKETPLACE_TOOL_COUNT;
171
+ toolCats = listToolCategories();
172
+ // Showcase the business-default skill pack (research, comms, documents,
173
+ // data, web) grouped by category — what most teams need out of the box.
174
+ skillGroups = seeds.listDefaultSkillGroups ? seeds.listDefaultSkillGroups() : [];
175
+ skillCount = (seeds.DEFAULT_SKILL_SLUGS || []).length;
176
+ } catch { /* catalog is optional — banner still renders without it */ }
169
177
  const version = pkgVersion() || '0.0.0';
170
- console.log(renderBanner({
178
+ const hero = process.env.MADARX_BANNER_LEGACY !== '1';
179
+ const render = hero ? renderHeroBanner : renderBanner;
180
+ console.log(render({
171
181
  version,
172
182
  home: layout.home,
173
183
  url: BASE_URL,
174
- engine: process.env.MADARX_DEFAULT_ENGINE || 'claude-code (default)',
184
+ engine: process.env.MADARX_DEFAULT_ENGINE || 'claude-code',
185
+ commit: process.env.MADARX_COMMIT || undefined,
175
186
  latest: ledger?.latest || null,
176
187
  behind: Boolean(ledger?.latest && ledger.latest !== version && ledger?.behind),
177
- tools,
178
- skills,
188
+ toolCats,
189
+ toolCount,
190
+ skillGroups,
191
+ skillCount,
192
+ // legacy renderBanner still understands these:
193
+ tools: toolCount,
179
194
  }));
180
195
  } else {
181
196
  log(`data home: ${layout.home}`);
@@ -213,7 +228,14 @@ export async function run({ flags = {} } = {}) {
213
228
  // Health gate + browser open run alongside; never block shutdown on them.
214
229
  waitForHealth().then((ok) => {
215
230
  if (stopping) return;
216
- if (ok) { log(`ready → ${BASE_URL}`); openBrowser(BASE_URL, flags); }
231
+ if (ok) {
232
+ if (!flags.quiet && process.env.MADARX_NO_BANNER !== '1') {
233
+ console.log('\n' + readyPanel({ version: pkgVersion() || undefined, url: BASE_URL }) + '\n');
234
+ } else {
235
+ log(`ready → ${BASE_URL}`);
236
+ }
237
+ openBrowser(BASE_URL, flags);
238
+ }
217
239
  else warn(`web tier did not answer on ${BASE_URL} within the timeout — it may still be starting.`);
218
240
  });
219
241
  });
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Branded boot/install splash for the madarX OS CLI.
3
+ *
4
+ * Zero dependencies — node builtins + the ANSI primitives in ./banner.js only —
5
+ * so it is safe to import from the CLI supervisor (lib/cli/run.js) and from the
6
+ * postinstall script (scripts/postinstall-splash.mjs) without pulling in the
7
+ * runtime or opening the database.
8
+ *
9
+ * Look is the brand-guidelines v1.3 "Sovereign-Mono" splash (see preview.svg):
10
+ * the whole step list prints upfront — pending in Graphite, the active step
11
+ * carries the single live Mars spinner, settled steps resolve to a neutral
12
+ * Platinum ✓ (never green, so Mars never repeats on a settled surface). Closes
13
+ * on a Muted dateline. Degrades to a plain auditable record off-TTY.
14
+ */
15
+
16
+ import { _palette as P, fg, bold, dim, wordmark, colorEnabled, visibleLength } from './banner.js';
17
+
18
+ const ON = colorEnabled();
19
+ const isTTY = ON && Boolean(process.stdout && process.stdout.isTTY);
20
+
21
+ // Monospace-safe braille spinner — reads as motion without noise.
22
+ const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
23
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
24
+
25
+ const GLYPH = {
26
+ done: fg(P.platinum, '✓'),
27
+ fail: fg(P.mars, '✗'),
28
+ pending: fg(P.graphite, '·'),
29
+ bead: fg(P.mars, '●'),
30
+ };
31
+
32
+ // ── cursor hygiene: hide during animation, always restore ─────────────────────
33
+ let cursorHidden = false;
34
+ function hideCursor() { if (isTTY && !cursorHidden) { process.stdout.write('\x1b[?25l'); cursorHidden = true; } }
35
+ function showCursor() { if (cursorHidden) { process.stdout.write('\x1b[?25h'); cursorHidden = false; } }
36
+ process.on('exit', showCursor);
37
+ process.on('SIGINT', () => { showCursor(); process.exit(130); });
38
+
39
+ // A step line at a given state. `state`: 'pending' | 'active' | 'done' | 'fail'.
40
+ function lineFor(label, state, frame) {
41
+ if (state === 'pending') return ` ${GLYPH.pending} ${fg(P.graphite, label)}`;
42
+ if (state === 'active') return ` ${fg(P.mars, frame)} ${fg(P.bone, label)}`;
43
+ if (state === 'fail') return ` ${GLYPH.fail} ${fg(P.bone, label)}`;
44
+ return ` ${GLYPH.done} ${fg(P.bone, label)}`;
45
+ }
46
+
47
+ /**
48
+ * Run a list of boot steps, rendered the way preview.svg shows them: the whole
49
+ * list appears at once (pending/Graphite), then each step lights its Mars
50
+ * spinner while its real work runs and resolves to a Platinum ✓.
51
+ *
52
+ * @param {Array<{label: string, work: () => Promise<any>}>} steps
53
+ */
54
+ export async function bootSequence(steps) {
55
+ if (!isTTY) {
56
+ // CI / piped / NO_COLOR: no animation, just the record an auditor would want.
57
+ for (const s of steps) {
58
+ try { await s.work(); process.stdout.write(lineFor(s.label, 'done') + '\n'); }
59
+ catch { process.stdout.write(lineFor(s.label, 'fail') + '\n'); }
60
+ }
61
+ return;
62
+ }
63
+
64
+ const n = steps.length;
65
+ hideCursor();
66
+ try {
67
+ // Paint the full list pending, then park the cursor below it.
68
+ for (const s of steps) process.stdout.write(lineFor(s.label, 'pending') + '\n');
69
+
70
+ // Redraw line `i` (0 = top) in place: jump up, clear, write, jump back down.
71
+ const redraw = (i, text) => {
72
+ const up = n - i;
73
+ process.stdout.write(`\x1b[${up}A\r\x1b[2K${text}\r\x1b[${up}B`);
74
+ };
75
+
76
+ for (let i = 0; i < n; i++) {
77
+ const s = steps[i];
78
+ let spinning = true, f = 0;
79
+ const anim = (async () => {
80
+ while (spinning) { redraw(i, lineFor(s.label, 'active', SPINNER[f++ % SPINNER.length])); await sleep(80); }
81
+ })();
82
+ try { await s.work(); spinning = false; await anim; redraw(i, lineFor(s.label, 'done')); }
83
+ catch { spinning = false; await anim; redraw(i, lineFor(s.label, 'fail')); }
84
+ }
85
+ } finally {
86
+ showCursor();
87
+ }
88
+ }
89
+
90
+ /** The dateline rule: a Muted mono `date · place · version` stamp. */
91
+ export function dateline(version, place = 'Designed in UAE') {
92
+ const stamp = new Date().toISOString().slice(0, 10).replace(/-/g, '.');
93
+ const v = version ? ` · v${version}` : '';
94
+ return fg(P.muted, `${stamp} · ${place}${v}`);
95
+ }
96
+
97
+ // ── optional framed panel (used by `madarx run` ready-state, not the splash) ──
98
+
99
+ /** A framed panel. Graphite border; a single Mars bead leads the headline. */
100
+ export function readyBox(lines) {
101
+ const pad = 2;
102
+ const inner = Math.max(...lines.map(visibleLength)) + pad * 2;
103
+ const top = fg(P.graphite, '╭' + '─'.repeat(inner) + '╮');
104
+ const bot = fg(P.graphite, '╰' + '─'.repeat(inner) + '╯');
105
+ const bar = fg(P.graphite, '│');
106
+ const body = lines.map((l) => {
107
+ const gap = inner - visibleLength(l) - pad * 2;
108
+ return `${bar}${' '.repeat(pad)}${l}${' '.repeat(pad + gap)}${bar}`;
109
+ });
110
+ return [' ' + top, ...body.map((b) => ' ' + b), ' ' + bot].join('\n');
111
+ }
112
+
113
+ /** Standard "ready" panel for a booted instance (the `madarx run` close). */
114
+ export function readyPanel({ version, url } = {}) {
115
+ const head = `${GLYPH.bead} ${bold(fg(P.platinum, 'madarX is ready'))}`;
116
+ const hint = `${fg(P.muted, 'run')} ${fg(P.mars, 'madarx')} ${fg(P.muted, '→ dashboard on')} ${fg(P.bone, url || 'http://127.0.0.1:8787')}`;
117
+ return [readyBox([head, hint]), ' ' + dateline(version)].join('\n');
118
+ }
119
+
120
+ export { GLYPH, isTTY as splashIsTTY };
@@ -0,0 +1,92 @@
1
+ // Engine capability model — which engines can actually run tools, and whether a
2
+ // given agent's job depends on that.
3
+ //
4
+ // Two tiers:
5
+ // - GOVERNED tool loop: dispatches madarX registry tools through
6
+ // executeRegistryTool (gates, allowlists, audit). Today ONLY `anthropic`
7
+ // (generateTickOutput in lib/agent-runner.js).
8
+ // - REAL tool execution of SOME kind: the CLI agents (`claude-code`, `codex`)
9
+ // run their own native tool runtimes (WebSearch/WebFetch/Write/etc.) in a
10
+ // subprocess, so they do real work even though it isn't the governed madarX
11
+ // toolset.
12
+ //
13
+ // Engines with NEITHER (`ollama`, `hermes`) run a single-shot text completion
14
+ // with NO tool dispatch at all. A Hermes/Nous-template instruct model "satisfies"
15
+ // a tool task by role-playing the whole loop — emitting `<tool_call>` and an
16
+ // invented `<tool_response>` in plain text. Saving that as a deliverable ships
17
+ // fiction as a real result. This module is the single source of truth for the
18
+ // capability check so the runner can fail loudly instead.
19
+
20
+ import { normalizeAgentEngine } from './agent-engines.js';
21
+ import { getEnabledToolSchemasForAgent } from './tools/registry.js';
22
+
23
+ // Engines that run the GOVERNED madarX tool loop end-to-end.
24
+ const GOVERNED_TOOL_LOOP_ENGINES = new Set(['anthropic']);
25
+
26
+ // Engines that execute tools for real in SOME form (governed loop OR a native
27
+ // CLI tool runtime). Engines NOT in this set produce single-shot text only and
28
+ // will fabricate a tool transcript when asked to use tools.
29
+ const TOOL_EXECUTING_ENGINES = new Set(['anthropic', 'claude-code', 'codex']);
30
+
31
+ /**
32
+ * True when the engine runs the governed madarX tool loop (dispatches registry
33
+ * tools through executeRegistryTool with gates/allowlists/audit).
34
+ */
35
+ export function engineHasGovernedToolLoop(engine) {
36
+ return GOVERNED_TOOL_LOOP_ENGINES.has(normalizeAgentEngine(engine));
37
+ }
38
+
39
+ /**
40
+ * True when the engine can execute tools for real (governed loop or native CLI
41
+ * runtime). `ollama` / `hermes` return false — they only complete text.
42
+ */
43
+ export function engineCanExecuteTools(engine) {
44
+ return TOOL_EXECUTING_ENGINES.has(normalizeAgentEngine(engine));
45
+ }
46
+
47
+ /**
48
+ * True when the agent has at least one enabled madarX tool — i.e. its work
49
+ * depends on tools actually running. An agent with zero enabled tools is a
50
+ * pure-reasoning/summarize job and runs fine single-shot on any engine.
51
+ */
52
+ export function agentNeedsTools(agent) {
53
+ if (!agent?.id) return false;
54
+ try {
55
+ return getEnabledToolSchemasForAgent(agent.id).length > 0;
56
+ } catch {
57
+ // If we can't determine the toolset, do NOT over-block — treat as no tools.
58
+ return false;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Assert that `agent` can actually run its job on its selected engine. Throws a
64
+ * tagged error (`code = 'engine_cannot_run_tools'`) when the agent needs tools
65
+ * but the engine cannot execute any (`ollama` / `hermes`). The caller records
66
+ * this as a FAILED run with the remediation message rather than saving a
67
+ * fabricated transcript as a "complete" deliverable.
68
+ *
69
+ * CLI engines (`claude-code` / `codex`) pass this check — they run real tool
70
+ * runtimes — and rely on the fabricated-transcript detector (Layer B) as the
71
+ * backstop on the rare turn they role-play instead of dispatching.
72
+ *
73
+ * @returns {{ needsTools: boolean, engineCanExecuteTools: boolean }}
74
+ */
75
+ export function assertRunnable(agent) {
76
+ const engine = normalizeAgentEngine(agent?.engine);
77
+ const canExecute = engineCanExecuteTools(engine);
78
+ const needsTools = agentNeedsTools(agent);
79
+
80
+ if (!needsTools || canExecute) {
81
+ return { needsTools, engineCanExecuteTools: canExecute };
82
+ }
83
+
84
+ const e = new Error(
85
+ `This agent has live tools enabled but its engine (${engine}) cannot run tools — it only completes text, ` +
86
+ `so it would fabricate a tool transcript instead of doing real work. The run was stopped. ` +
87
+ `Fix: switch this agent's engine to "Anthropic API" (governed tools) or "Claude Code" in its Details view.`
88
+ );
89
+ e.code = 'engine_cannot_run_tools';
90
+ e.engine = engine;
91
+ throw e;
92
+ }
@@ -0,0 +1,77 @@
1
+ // Detector for FABRICATED tool-call transcripts.
2
+ //
3
+ // Some engines (Hermes/Nous-template instruct models on Ollama, and even the
4
+ // Claude Code CLI when asked to "run an agent") role-play an entire tool loop in
5
+ // PLAIN TEXT instead of dispatching real tools — emitting `<tool_call>` and a
6
+ // hallucinated `<tool_response>` with invented results. Nothing actually runs.
7
+ // If that text is saved verbatim as a deliverable or delivered as a chat answer,
8
+ // the user gets fiction presented as a real result.
9
+ //
10
+ // This module spots that pattern so callers can refuse to deliver/persist it.
11
+ //
12
+ // CRITICAL false-positive guard: a GENUINE report may legitimately *quote*
13
+ // `<tool_call>` inside a fenced code block (e.g. a bug write-up about this very
14
+ // problem). We must only flag the markers when they appear as BARE text — i.e.
15
+ // the model is emitting them as its own turn — never when they sit inside a
16
+ // ``` ``` ``` fence or inline `code` span. We strip fenced/inline code first and
17
+ // only scan what remains.
18
+
19
+ // Remove fenced code blocks (``` ... ``` and ~~~ ... ~~~) and inline `code`
20
+ // spans so quoted tool syntax inside documentation is NOT mistaken for a real
21
+ // (fabricated) emission.
22
+ function stripCodeContext(text) {
23
+ return String(text || '')
24
+ .replace(/```[\s\S]*?```/g, ' ')
25
+ .replace(/~~~[\s\S]*?~~~/g, ' ')
26
+ .replace(/`[^`\n]*`/g, ' ');
27
+ }
28
+
29
+ // Bare `<tool_call>` / `<tool_response>` XML tags (Hermes/Nous chat template).
30
+ const BARE_TOOL_TAG_RE = /<\s*tool_(call|response)\s*>/i;
31
+
32
+ // A bare JSON function-call blob the model wrote as text, e.g.
33
+ // {"name": "web-search", "parameters": { ... }}
34
+ // {"name": "web_fetch", "arguments": { ... }}
35
+ // Hyphenated tool names are an especially strong tell — the real registry uses
36
+ // underscores, so a hyphenated `"name"` call is almost certainly invented.
37
+ const BARE_JSON_CALL_RE = /\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/i;
38
+
39
+ // A fabricated tool RESULT echoed as text — the model inventing what a tool
40
+ // "returned". Pairs with the call markers above to raise confidence.
41
+ const BARE_TOOL_RESULT_RE = /"(snippet|tool_response)"\s*:/i;
42
+
43
+ /**
44
+ * True when `text` looks like a model that role-played a tool loop in plain text
45
+ * (fabricated calls + invented results) rather than dispatching real tools.
46
+ *
47
+ * Conservative by design: requires a bare (non-code-fenced) call marker. Quoting
48
+ * tool syntax inside ``` fences ``` or `inline code` does NOT trip it.
49
+ */
50
+ export function looksFabricatedToolTranscript(text) {
51
+ const bare = stripCodeContext(text);
52
+ if (!bare.trim()) return false;
53
+ // Primary tell: the Hermes `<tool_call>`/`<tool_response>` XML template.
54
+ if (BARE_TOOL_TAG_RE.test(bare)) return true;
55
+ // Secondary tell: a bare JSON function-call blob. Require a corroborating
56
+ // signal (a second call OR a fabricated result echo) so a single inline JSON
57
+ // object in prose can't false-positive.
58
+ if (BARE_JSON_CALL_RE.test(bare)) {
59
+ const callCount = (bare.match(/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/gi) || []).length;
60
+ if (callCount >= 2) return true;
61
+ if (BARE_TOOL_RESULT_RE.test(bare)) return true;
62
+ }
63
+ return false;
64
+ }
65
+
66
+ /**
67
+ * Remove fabricated tool-call / tool-response blocks from text, leaving any
68
+ * genuine prose. Used when we want to salvage a clean message rather than reject
69
+ * the whole turn. Best-effort — primarily strips the bare XML template.
70
+ */
71
+ export function stripFabricatedToolBlocks(text) {
72
+ return String(text || '')
73
+ // <tool_call> ... </tool_call> (with or without closing tag before EOF)
74
+ .replace(/<\s*tool_call\s*>[\s\S]*?(<\s*\/\s*tool_call\s*>|$)/gi, '')
75
+ .replace(/<\s*tool_response\s*>[\s\S]*?(<\s*\/\s*tool_response\s*>|$)/gi, '')
76
+ .trim();
77
+ }