expxagents 0.25.1 → 0.25.2

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 (594) hide show
  1. package/assets/agents/_catalog.yaml +35 -0
  2. package/assets/agents/accounting/accountant.agent.md +41 -0
  3. package/assets/agents/accounting/audit-analyst.agent.md +41 -0
  4. package/assets/agents/accounting/financial-reporting.agent.md +41 -0
  5. package/assets/agents/accounting/fiscal-analyst.agent.md +41 -0
  6. package/assets/agents/accounting/payroll-specialist.agent.md +41 -0
  7. package/assets/agents/accounting/tax-compliance.agent.md +41 -0
  8. package/assets/agents/administrative/document-controller.agent.md +41 -0
  9. package/assets/agents/administrative/office-manager.agent.md +41 -0
  10. package/assets/agents/administrative/process-documentation-officer.agent.md +41 -0
  11. package/assets/agents/administrative/procurement-specialist.agent.md +41 -0
  12. package/assets/agents/board/board-report-writer.agent.md +41 -0
  13. package/assets/agents/board/business-intelligence.agent.md +41 -0
  14. package/assets/agents/board/governance-officer.agent.md +41 -0
  15. package/assets/agents/board/okr-manager.agent.md +41 -0
  16. package/assets/agents/board/risk-analyst.agent.md +41 -0
  17. package/assets/agents/board/strategic-advisor.agent.md +41 -0
  18. package/assets/agents/commercial/account-executive.agent.md +41 -0
  19. package/assets/agents/commercial/crm-manager.agent.md +41 -0
  20. package/assets/agents/commercial/pricing-strategist.agent.md +41 -0
  21. package/assets/agents/commercial/proposal-writer.agent.md +41 -0
  22. package/assets/agents/commercial/sdr.agent.md +41 -0
  23. package/assets/agents/compliance/compliance-officer.agent.md +41 -0
  24. package/assets/agents/compliance/data-privacy-specialist.agent.md +41 -0
  25. package/assets/agents/compliance/internal-auditor.agent.md +41 -0
  26. package/assets/agents/compliance/regulatory-monitor.agent.md +41 -0
  27. package/assets/agents/customer-success/churn-prevention.agent.md +41 -0
  28. package/assets/agents/customer-success/csm.agent.md +41 -0
  29. package/assets/agents/customer-success/expansion-manager.agent.md +41 -0
  30. package/assets/agents/customer-success/nps-analyst.agent.md +41 -0
  31. package/assets/agents/customer-success/renewal-manager.agent.md +41 -0
  32. package/assets/agents/development/android-developer.agent.md +41 -0
  33. package/assets/agents/development/backend-developer.agent.md +42 -0
  34. package/assets/agents/development/business-analyst.agent.md +41 -0
  35. package/assets/agents/development/code-reviewer.agent.md +41 -0
  36. package/assets/agents/development/cross-platform-mobile.agent.md +41 -0
  37. package/assets/agents/development/dba.agent.md +41 -0
  38. package/assets/agents/development/desktop-developer.agent.md +41 -0
  39. package/assets/agents/development/devops-engineer.agent.md +41 -0
  40. package/assets/agents/development/frontend-developer.agent.md +103 -0
  41. package/assets/agents/development/ios-developer.agent.md +41 -0
  42. package/assets/agents/development/product-manager.agent.md +41 -0
  43. package/assets/agents/development/qa-engineer.agent.md +41 -0
  44. package/assets/agents/development/scrum-master.agent.md +41 -0
  45. package/assets/agents/development/security-analyst.agent.md +41 -0
  46. package/assets/agents/development/tech-lead.agent.md +42 -0
  47. package/assets/agents/development/tech-writer.agent.md +41 -0
  48. package/assets/agents/development/ux-design-expert.agent.md +108 -0
  49. package/assets/agents/development/ux-designer.agent.md +41 -0
  50. package/assets/agents/finance/accounts-manager.agent.md +41 -0
  51. package/assets/agents/finance/billing-analyst.agent.md +41 -0
  52. package/assets/agents/finance/budget-planner.agent.md +41 -0
  53. package/assets/agents/finance/financial-controller.agent.md +41 -0
  54. package/assets/agents/hr/benefits-manager.agent.md +41 -0
  55. package/assets/agents/hr/hr-onboarding.agent.md +41 -0
  56. package/assets/agents/hr/interview-coordinator.agent.md +41 -0
  57. package/assets/agents/hr/people-culture.agent.md +41 -0
  58. package/assets/agents/hr/performance-analyst.agent.md +41 -0
  59. package/assets/agents/hr/recruiter.agent.md +41 -0
  60. package/assets/agents/implantation/deployment-manager.agent.md +41 -0
  61. package/assets/agents/implantation/environment-specialist.agent.md +41 -0
  62. package/assets/agents/implantation/go-live-coordinator.agent.md +41 -0
  63. package/assets/agents/implantation/integration-specialist.agent.md +41 -0
  64. package/assets/agents/implantation/migration-specialist.agent.md +41 -0
  65. package/assets/agents/legal/contract-manager.agent.md +41 -0
  66. package/assets/agents/legal/ip-specialist.agent.md +41 -0
  67. package/assets/agents/legal/labor-attorney.agent.md +41 -0
  68. package/assets/agents/legal/legal-counsel.agent.md +41 -0
  69. package/assets/agents/marketing/brand-guardian.agent.md +40 -0
  70. package/assets/agents/marketing/content-creator.agent.md +41 -0
  71. package/assets/agents/marketing/email-marketing.agent.md +41 -0
  72. package/assets/agents/marketing/landing-page-builder.agent.md +138 -0
  73. package/assets/agents/marketing/marketing-analyst.agent.md +41 -0
  74. package/assets/agents/marketing/paid-ads-manager.agent.md +41 -0
  75. package/assets/agents/marketing/seo-specialist.agent.md +41 -0
  76. package/assets/agents/marketing/social-media-manager.agent.md +41 -0
  77. package/assets/agents/rnd/benchmark-analyst.agent.md +41 -0
  78. package/assets/agents/rnd/innovation-scout.agent.md +41 -0
  79. package/assets/agents/rnd/market-researcher.agent.md +41 -0
  80. package/assets/agents/rnd/product-analyst.agent.md +41 -0
  81. package/assets/agents/rnd/prototype-builder.agent.md +41 -0
  82. package/assets/agents/support/knowledge-base-manager.agent.md +41 -0
  83. package/assets/agents/support/l1-support.agent.md +41 -0
  84. package/assets/agents/support/l2-support.agent.md +41 -0
  85. package/assets/agents/support/l3-support.agent.md +41 -0
  86. package/assets/agents/support/sla-monitor.agent.md +41 -0
  87. package/assets/agents/training/assessment-creator.agent.md +41 -0
  88. package/assets/agents/training/onboarding-coach.agent.md +41 -0
  89. package/assets/agents/training/training-designer.agent.md +41 -0
  90. package/assets/agents/training/workshop-facilitator.agent.md +41 -0
  91. package/assets/core/best-practices/_catalog.yaml +91 -0
  92. package/assets/core/best-practices/api-documentation.md +137 -0
  93. package/assets/core/best-practices/blog-post.md +86 -0
  94. package/assets/core/best-practices/blog-seo.md +91 -0
  95. package/assets/core/best-practices/code-review.md +97 -0
  96. package/assets/core/best-practices/copywriting.md +75 -0
  97. package/assets/core/best-practices/data-analysis.md +93 -0
  98. package/assets/core/best-practices/deploy-checklist.md +99 -0
  99. package/assets/core/best-practices/email-newsletter.md +84 -0
  100. package/assets/core/best-practices/email-sales.md +91 -0
  101. package/assets/core/best-practices/fullstack-page-generation.md +936 -0
  102. package/assets/core/best-practices/image-design.md +78 -0
  103. package/assets/core/best-practices/instagram-feed.md +70 -0
  104. package/assets/core/best-practices/instagram-reels.md +75 -0
  105. package/assets/core/best-practices/instagram-stories.md +68 -0
  106. package/assets/core/best-practices/landing-page-react.md +2263 -0
  107. package/assets/core/best-practices/landing-page.md +279 -0
  108. package/assets/core/best-practices/linkedin-article.md +83 -0
  109. package/assets/core/best-practices/linkedin-post.md +84 -0
  110. package/assets/core/best-practices/researching.md +89 -0
  111. package/assets/core/best-practices/review.md +95 -0
  112. package/assets/core/best-practices/sprint-planning.md +91 -0
  113. package/assets/core/best-practices/strategist.md +95 -0
  114. package/assets/core/best-practices/technical-writing.md +104 -0
  115. package/assets/core/best-practices/twitter-post.md +75 -0
  116. package/assets/core/best-practices/twitter-thread.md +92 -0
  117. package/assets/core/best-practices/whatsapp-broadcast.md +95 -0
  118. package/assets/core/best-practices/youtube-script.md +80 -0
  119. package/assets/core/best-practices/youtube-shorts.md +76 -0
  120. package/assets/core/prompts/insight-hunter.prompt.md +62 -0
  121. package/assets/core/runner.pipeline.md +200 -0
  122. package/assets/core/skills.engine.md +65 -0
  123. package/assets/core/solution-architect.agent.md +329 -0
  124. package/assets/mcps/_catalog.yaml +17 -0
  125. package/assets/mcps/figma.mcp.yaml +35 -0
  126. package/assets/mcps/github.mcp.yaml +44 -0
  127. package/assets/mcps/linear.mcp.yaml +37 -0
  128. package/assets/mcps/notion.mcp.yaml +37 -0
  129. package/assets/mcps/pencil.mcp.yaml +32 -0
  130. package/assets/mcps/postgresql.mcp.yaml +39 -0
  131. package/assets/mcps/sentry.mcp.yaml +41 -0
  132. package/assets/mcps/slack.mcp.yaml +37 -0
  133. package/assets/mcps/vercel.mcp.yaml +39 -0
  134. package/assets/templates/_expxagents/_memory/company.md +25 -0
  135. package/assets/templates/_expxagents/_memory/preferences.md +6 -0
  136. package/assets/templates/squads/_memory/memories.md +16 -0
  137. package/dist/dashboard/assets/BufferResource-D79vaoFm.js +185 -0
  138. package/dist/dashboard/assets/CanvasRenderer-BUoxTNKV.js +1 -0
  139. package/dist/dashboard/assets/JarvisView-DSN7xWMz.js +1 -0
  140. package/dist/dashboard/assets/RenderTargetSystem-B7rwTXA1.js +172 -0
  141. package/dist/dashboard/assets/ThreeBackground-BQTdScX-.js +1 -0
  142. package/dist/dashboard/assets/WebGLRenderer-DgdVNsZ9.js +156 -0
  143. package/dist/dashboard/assets/WebGPURenderer-DnQNvjEQ.js +41 -0
  144. package/dist/dashboard/assets/browserAll-Cbsk7DE4.js +14 -0
  145. package/dist/dashboard/assets/index-CrlhoBta.js +783 -0
  146. package/dist/dashboard/assets/index-DtbIzZ5n.css +1 -0
  147. package/dist/dashboard/assets/three-BZk_I9Ly.js +4057 -0
  148. package/dist/dashboard/assets/webworkerAll-BLmfReEj.js +83 -0
  149. package/dist/dashboard/index.html +13 -0
  150. package/dist/server/api/__tests__/cost-routes.test.d.ts +2 -0
  151. package/dist/server/api/__tests__/cost-routes.test.d.ts.map +1 -0
  152. package/dist/server/api/__tests__/cost-routes.test.js +54 -0
  153. package/dist/server/api/__tests__/cost-routes.test.js.map +1 -0
  154. package/dist/server/api/__tests__/files-routes.test.d.ts +2 -0
  155. package/dist/server/api/__tests__/files-routes.test.d.ts.map +1 -0
  156. package/dist/server/api/__tests__/files-routes.test.js +85 -0
  157. package/dist/server/api/__tests__/files-routes.test.js.map +1 -0
  158. package/dist/server/api/__tests__/graph-routes.test.d.ts +2 -0
  159. package/dist/server/api/__tests__/graph-routes.test.d.ts.map +1 -0
  160. package/dist/server/api/__tests__/graph-routes.test.js +105 -0
  161. package/dist/server/api/__tests__/graph-routes.test.js.map +1 -0
  162. package/dist/server/api/__tests__/health-routes.test.d.ts +2 -0
  163. package/dist/server/api/__tests__/health-routes.test.d.ts.map +1 -0
  164. package/dist/server/api/__tests__/health-routes.test.js +22 -0
  165. package/dist/server/api/__tests__/health-routes.test.js.map +1 -0
  166. package/dist/server/api/__tests__/integration-routes.test.d.ts +2 -0
  167. package/dist/server/api/__tests__/integration-routes.test.d.ts.map +1 -0
  168. package/dist/server/api/__tests__/integration-routes.test.js +243 -0
  169. package/dist/server/api/__tests__/integration-routes.test.js.map +1 -0
  170. package/dist/server/api/__tests__/kanban-routes.test.d.ts +2 -0
  171. package/dist/server/api/__tests__/kanban-routes.test.d.ts.map +1 -0
  172. package/dist/server/api/__tests__/kanban-routes.test.js +316 -0
  173. package/dist/server/api/__tests__/kanban-routes.test.js.map +1 -0
  174. package/dist/server/api/__tests__/log-routes.test.d.ts +2 -0
  175. package/dist/server/api/__tests__/log-routes.test.d.ts.map +1 -0
  176. package/dist/server/api/__tests__/log-routes.test.js +35 -0
  177. package/dist/server/api/__tests__/log-routes.test.js.map +1 -0
  178. package/dist/server/api/__tests__/orgchart-routes.test.d.ts +2 -0
  179. package/dist/server/api/__tests__/orgchart-routes.test.d.ts.map +1 -0
  180. package/dist/server/api/__tests__/orgchart-routes.test.js +161 -0
  181. package/dist/server/api/__tests__/orgchart-routes.test.js.map +1 -0
  182. package/dist/server/api/__tests__/settings-routes.test.d.ts +2 -0
  183. package/dist/server/api/__tests__/settings-routes.test.d.ts.map +1 -0
  184. package/dist/server/api/__tests__/settings-routes.test.js +177 -0
  185. package/dist/server/api/__tests__/settings-routes.test.js.map +1 -0
  186. package/dist/server/api/__tests__/system-routes.test.d.ts +2 -0
  187. package/dist/server/api/__tests__/system-routes.test.d.ts.map +1 -0
  188. package/dist/server/api/__tests__/system-routes.test.js +79 -0
  189. package/dist/server/api/__tests__/system-routes.test.js.map +1 -0
  190. package/dist/server/api/__tests__/team-routes.test.d.ts +2 -0
  191. package/dist/server/api/__tests__/team-routes.test.d.ts.map +1 -0
  192. package/dist/server/api/__tests__/team-routes.test.js +116 -0
  193. package/dist/server/api/__tests__/team-routes.test.js.map +1 -0
  194. package/dist/server/api/__tests__/webhook-routes.test.d.ts +2 -0
  195. package/dist/server/api/__tests__/webhook-routes.test.d.ts.map +1 -0
  196. package/dist/server/api/__tests__/webhook-routes.test.js +111 -0
  197. package/dist/server/api/__tests__/webhook-routes.test.js.map +1 -0
  198. package/dist/server/api/activity-routes.d.ts +8 -0
  199. package/dist/server/api/activity-routes.d.ts.map +1 -0
  200. package/dist/server/api/activity-routes.js +34 -0
  201. package/dist/server/api/activity-routes.js.map +1 -0
  202. package/dist/server/api/chat-api-routes.d.ts +4 -0
  203. package/dist/server/api/chat-api-routes.d.ts.map +1 -0
  204. package/dist/server/api/chat-api-routes.js +28 -0
  205. package/dist/server/api/chat-api-routes.js.map +1 -0
  206. package/dist/server/api/cost-routes.d.ts +8 -0
  207. package/dist/server/api/cost-routes.d.ts.map +1 -0
  208. package/dist/server/api/cost-routes.js +39 -0
  209. package/dist/server/api/cost-routes.js.map +1 -0
  210. package/dist/server/api/dashboard-routes.d.ts +10 -0
  211. package/dist/server/api/dashboard-routes.d.ts.map +1 -0
  212. package/dist/server/api/dashboard-routes.js +128 -0
  213. package/dist/server/api/dashboard-routes.js.map +1 -0
  214. package/dist/server/api/files-routes.d.ts +5 -0
  215. package/dist/server/api/files-routes.d.ts.map +1 -0
  216. package/dist/server/api/files-routes.js +218 -0
  217. package/dist/server/api/files-routes.js.map +1 -0
  218. package/dist/server/api/graph-routes.d.ts +24 -0
  219. package/dist/server/api/graph-routes.d.ts.map +1 -0
  220. package/dist/server/api/graph-routes.js +208 -0
  221. package/dist/server/api/graph-routes.js.map +1 -0
  222. package/dist/server/api/health-routes.d.ts +9 -0
  223. package/dist/server/api/health-routes.d.ts.map +1 -0
  224. package/dist/server/api/health-routes.js +46 -0
  225. package/dist/server/api/health-routes.js.map +1 -0
  226. package/dist/server/api/integration-routes.d.ts +23 -0
  227. package/dist/server/api/integration-routes.d.ts.map +1 -0
  228. package/dist/server/api/integration-routes.js +326 -0
  229. package/dist/server/api/integration-routes.js.map +1 -0
  230. package/dist/server/api/kanban-routes.d.ts +8 -0
  231. package/dist/server/api/kanban-routes.d.ts.map +1 -0
  232. package/dist/server/api/kanban-routes.js +128 -0
  233. package/dist/server/api/kanban-routes.js.map +1 -0
  234. package/dist/server/api/knowledge-routes.d.ts +8 -0
  235. package/dist/server/api/knowledge-routes.d.ts.map +1 -0
  236. package/dist/server/api/knowledge-routes.js +82 -0
  237. package/dist/server/api/knowledge-routes.js.map +1 -0
  238. package/dist/server/api/log-routes.d.ts +8 -0
  239. package/dist/server/api/log-routes.d.ts.map +1 -0
  240. package/dist/server/api/log-routes.js +31 -0
  241. package/dist/server/api/log-routes.js.map +1 -0
  242. package/dist/server/api/orgchart-routes.d.ts +7 -0
  243. package/dist/server/api/orgchart-routes.d.ts.map +1 -0
  244. package/dist/server/api/orgchart-routes.js +154 -0
  245. package/dist/server/api/orgchart-routes.js.map +1 -0
  246. package/dist/server/api/permissions-routes.d.ts +8 -0
  247. package/dist/server/api/permissions-routes.d.ts.map +1 -0
  248. package/dist/server/api/permissions-routes.js +37 -0
  249. package/dist/server/api/permissions-routes.js.map +1 -0
  250. package/dist/server/api/registry-routes.d.ts +7 -0
  251. package/dist/server/api/registry-routes.d.ts.map +1 -0
  252. package/dist/server/api/registry-routes.js +51 -0
  253. package/dist/server/api/registry-routes.js.map +1 -0
  254. package/dist/server/api/settings-routes.d.ts +11 -0
  255. package/dist/server/api/settings-routes.d.ts.map +1 -0
  256. package/dist/server/api/settings-routes.js +167 -0
  257. package/dist/server/api/settings-routes.js.map +1 -0
  258. package/dist/server/api/squads-routes.d.ts +9 -0
  259. package/dist/server/api/squads-routes.d.ts.map +1 -0
  260. package/dist/server/api/squads-routes.js +171 -0
  261. package/dist/server/api/squads-routes.js.map +1 -0
  262. package/dist/server/api/system-routes.d.ts +9 -0
  263. package/dist/server/api/system-routes.d.ts.map +1 -0
  264. package/dist/server/api/system-routes.js +241 -0
  265. package/dist/server/api/system-routes.js.map +1 -0
  266. package/dist/server/api/team-routes.d.ts +8 -0
  267. package/dist/server/api/team-routes.d.ts.map +1 -0
  268. package/dist/server/api/team-routes.js +55 -0
  269. package/dist/server/api/team-routes.js.map +1 -0
  270. package/dist/server/api/users-routes.d.ts +8 -0
  271. package/dist/server/api/users-routes.d.ts.map +1 -0
  272. package/dist/server/api/users-routes.js +65 -0
  273. package/dist/server/api/users-routes.js.map +1 -0
  274. package/dist/server/api/webhook-routes.d.ts +9 -0
  275. package/dist/server/api/webhook-routes.d.ts.map +1 -0
  276. package/dist/server/api/webhook-routes.js +82 -0
  277. package/dist/server/api/webhook-routes.js.map +1 -0
  278. package/dist/server/app.d.ts +9 -0
  279. package/dist/server/app.d.ts.map +1 -0
  280. package/dist/server/app.js +265 -0
  281. package/dist/server/app.js.map +1 -0
  282. package/dist/server/auth/auth-middleware.d.ts +13 -0
  283. package/dist/server/auth/auth-middleware.d.ts.map +1 -0
  284. package/dist/server/auth/auth-middleware.js +25 -0
  285. package/dist/server/auth/auth-middleware.js.map +1 -0
  286. package/dist/server/auth/auth-routes.d.ts +9 -0
  287. package/dist/server/auth/auth-routes.d.ts.map +1 -0
  288. package/dist/server/auth/auth-routes.js +152 -0
  289. package/dist/server/auth/auth-routes.js.map +1 -0
  290. package/dist/server/auth/jwt.d.ts +14 -0
  291. package/dist/server/auth/jwt.d.ts.map +1 -0
  292. package/dist/server/auth/jwt.js +16 -0
  293. package/dist/server/auth/jwt.js.map +1 -0
  294. package/dist/server/auth/password.d.ts +3 -0
  295. package/dist/server/auth/password.d.ts.map +1 -0
  296. package/dist/server/auth/password.js +9 -0
  297. package/dist/server/auth/password.js.map +1 -0
  298. package/dist/server/bridge/__tests__/chat-handler.test.d.ts +2 -0
  299. package/dist/server/bridge/__tests__/chat-handler.test.d.ts.map +1 -0
  300. package/dist/server/bridge/__tests__/chat-handler.test.js +143 -0
  301. package/dist/server/bridge/__tests__/chat-handler.test.js.map +1 -0
  302. package/dist/server/bridge/__tests__/chat-integration.test.d.ts +2 -0
  303. package/dist/server/bridge/__tests__/chat-integration.test.d.ts.map +1 -0
  304. package/dist/server/bridge/__tests__/chat-integration.test.js +129 -0
  305. package/dist/server/bridge/__tests__/chat-integration.test.js.map +1 -0
  306. package/dist/server/bridge/__tests__/claude-bridge.test.d.ts +2 -0
  307. package/dist/server/bridge/__tests__/claude-bridge.test.d.ts.map +1 -0
  308. package/dist/server/bridge/__tests__/claude-bridge.test.js +300 -0
  309. package/dist/server/bridge/__tests__/claude-bridge.test.js.map +1 -0
  310. package/dist/server/bridge/__tests__/conversation.test.d.ts +2 -0
  311. package/dist/server/bridge/__tests__/conversation.test.d.ts.map +1 -0
  312. package/dist/server/bridge/__tests__/conversation.test.js +168 -0
  313. package/dist/server/bridge/__tests__/conversation.test.js.map +1 -0
  314. package/dist/server/bridge/__tests__/registry.test.d.ts +2 -0
  315. package/dist/server/bridge/__tests__/registry.test.d.ts.map +1 -0
  316. package/dist/server/bridge/__tests__/registry.test.js +45 -0
  317. package/dist/server/bridge/__tests__/registry.test.js.map +1 -0
  318. package/dist/server/bridge/__tests__/stream-parser.test.d.ts +2 -0
  319. package/dist/server/bridge/__tests__/stream-parser.test.d.ts.map +1 -0
  320. package/dist/server/bridge/__tests__/stream-parser.test.js +66 -0
  321. package/dist/server/bridge/__tests__/stream-parser.test.js.map +1 -0
  322. package/dist/server/bridge/chat-handler.d.ts +32 -0
  323. package/dist/server/bridge/chat-handler.d.ts.map +1 -0
  324. package/dist/server/bridge/chat-handler.js +356 -0
  325. package/dist/server/bridge/chat-handler.js.map +1 -0
  326. package/dist/server/bridge/claude-bridge.d.ts +21 -0
  327. package/dist/server/bridge/claude-bridge.d.ts.map +1 -0
  328. package/dist/server/bridge/claude-bridge.js +273 -0
  329. package/dist/server/bridge/claude-bridge.js.map +1 -0
  330. package/dist/server/bridge/conversation.d.ts +45 -0
  331. package/dist/server/bridge/conversation.d.ts.map +1 -0
  332. package/dist/server/bridge/conversation.js +78 -0
  333. package/dist/server/bridge/conversation.js.map +1 -0
  334. package/dist/server/bridge/engine-manager.d.ts +13 -0
  335. package/dist/server/bridge/engine-manager.d.ts.map +1 -0
  336. package/dist/server/bridge/engine-manager.js +54 -0
  337. package/dist/server/bridge/engine-manager.js.map +1 -0
  338. package/dist/server/bridge/engine.d.ts +37 -0
  339. package/dist/server/bridge/engine.d.ts.map +1 -0
  340. package/dist/server/bridge/engine.js +2 -0
  341. package/dist/server/bridge/engine.js.map +1 -0
  342. package/dist/server/bridge/factory.d.ts +4 -0
  343. package/dist/server/bridge/factory.d.ts.map +1 -0
  344. package/dist/server/bridge/factory.js +18 -0
  345. package/dist/server/bridge/factory.js.map +1 -0
  346. package/dist/server/bridge/opencode-bridge.d.ts +27 -0
  347. package/dist/server/bridge/opencode-bridge.d.ts.map +1 -0
  348. package/dist/server/bridge/opencode-bridge.js +163 -0
  349. package/dist/server/bridge/opencode-bridge.js.map +1 -0
  350. package/dist/server/bridge/registry.d.ts +19 -0
  351. package/dist/server/bridge/registry.d.ts.map +1 -0
  352. package/dist/server/bridge/registry.js +29 -0
  353. package/dist/server/bridge/registry.js.map +1 -0
  354. package/dist/server/bridge/session-journal.d.ts +25 -0
  355. package/dist/server/bridge/session-journal.d.ts.map +1 -0
  356. package/dist/server/bridge/session-journal.js +69 -0
  357. package/dist/server/bridge/session-journal.js.map +1 -0
  358. package/dist/server/bridge/stream-parser.d.ts +14 -0
  359. package/dist/server/bridge/stream-parser.d.ts.map +1 -0
  360. package/dist/server/bridge/stream-parser.js +26 -0
  361. package/dist/server/bridge/stream-parser.js.map +1 -0
  362. package/dist/server/config/engine-config.d.ts +4 -0
  363. package/dist/server/config/engine-config.d.ts.map +1 -0
  364. package/dist/server/config/engine-config.js +24 -0
  365. package/dist/server/config/engine-config.js.map +1 -0
  366. package/dist/server/config.d.ts +17 -0
  367. package/dist/server/config.d.ts.map +1 -0
  368. package/dist/server/config.js +39 -0
  369. package/dist/server/config.js.map +1 -0
  370. package/dist/server/db/__tests__/chat-tables.test.d.ts +2 -0
  371. package/dist/server/db/__tests__/chat-tables.test.d.ts.map +1 -0
  372. package/dist/server/db/__tests__/chat-tables.test.js +82 -0
  373. package/dist/server/db/__tests__/chat-tables.test.js.map +1 -0
  374. package/dist/server/db/__tests__/email-schema.test.d.ts +2 -0
  375. package/dist/server/db/__tests__/email-schema.test.d.ts.map +1 -0
  376. package/dist/server/db/__tests__/email-schema.test.js +53 -0
  377. package/dist/server/db/__tests__/email-schema.test.js.map +1 -0
  378. package/dist/server/db/__tests__/scheduler-schema.test.d.ts +2 -0
  379. package/dist/server/db/__tests__/scheduler-schema.test.d.ts.map +1 -0
  380. package/dist/server/db/__tests__/scheduler-schema.test.js +52 -0
  381. package/dist/server/db/__tests__/scheduler-schema.test.js.map +1 -0
  382. package/dist/server/db/connection.d.ts +4 -0
  383. package/dist/server/db/connection.d.ts.map +1 -0
  384. package/dist/server/db/connection.js +40 -0
  385. package/dist/server/db/connection.js.map +1 -0
  386. package/dist/server/db/migrations.d.ts +4 -0
  387. package/dist/server/db/migrations.d.ts.map +1 -0
  388. package/dist/server/db/migrations.js +47 -0
  389. package/dist/server/db/migrations.js.map +1 -0
  390. package/dist/server/db/schema.d.ts +2 -0
  391. package/dist/server/db/schema.d.ts.map +1 -0
  392. package/dist/server/db/schema.js +288 -0
  393. package/dist/server/db/schema.js.map +1 -0
  394. package/dist/server/email/__tests__/campaign-routes.test.d.ts +2 -0
  395. package/dist/server/email/__tests__/campaign-routes.test.d.ts.map +1 -0
  396. package/dist/server/email/__tests__/campaign-routes.test.js +216 -0
  397. package/dist/server/email/__tests__/campaign-routes.test.js.map +1 -0
  398. package/dist/server/email/__tests__/campaign-service.test.d.ts +2 -0
  399. package/dist/server/email/__tests__/campaign-service.test.d.ts.map +1 -0
  400. package/dist/server/email/__tests__/campaign-service.test.js +79 -0
  401. package/dist/server/email/__tests__/campaign-service.test.js.map +1 -0
  402. package/dist/server/email/__tests__/email-queue-worker.test.d.ts +2 -0
  403. package/dist/server/email/__tests__/email-queue-worker.test.d.ts.map +1 -0
  404. package/dist/server/email/__tests__/email-queue-worker.test.js +93 -0
  405. package/dist/server/email/__tests__/email-queue-worker.test.js.map +1 -0
  406. package/dist/server/email/__tests__/email-utils.test.d.ts +2 -0
  407. package/dist/server/email/__tests__/email-utils.test.d.ts.map +1 -0
  408. package/dist/server/email/__tests__/email-utils.test.js +36 -0
  409. package/dist/server/email/__tests__/email-utils.test.js.map +1 -0
  410. package/dist/server/email/__tests__/lead-routes.test.d.ts +2 -0
  411. package/dist/server/email/__tests__/lead-routes.test.d.ts.map +1 -0
  412. package/dist/server/email/__tests__/lead-routes.test.js +180 -0
  413. package/dist/server/email/__tests__/lead-routes.test.js.map +1 -0
  414. package/dist/server/email/__tests__/lead-service.test.d.ts +2 -0
  415. package/dist/server/email/__tests__/lead-service.test.d.ts.map +1 -0
  416. package/dist/server/email/__tests__/lead-service.test.js +113 -0
  417. package/dist/server/email/__tests__/lead-service.test.js.map +1 -0
  418. package/dist/server/email/__tests__/ses-client.test.d.ts +2 -0
  419. package/dist/server/email/__tests__/ses-client.test.d.ts.map +1 -0
  420. package/dist/server/email/__tests__/ses-client.test.js +48 -0
  421. package/dist/server/email/__tests__/ses-client.test.js.map +1 -0
  422. package/dist/server/email/__tests__/sns-webhook.test.d.ts +2 -0
  423. package/dist/server/email/__tests__/sns-webhook.test.d.ts.map +1 -0
  424. package/dist/server/email/__tests__/sns-webhook.test.js +40 -0
  425. package/dist/server/email/__tests__/sns-webhook.test.js.map +1 -0
  426. package/dist/server/email/campaign-routes.d.ts +8 -0
  427. package/dist/server/email/campaign-routes.d.ts.map +1 -0
  428. package/dist/server/email/campaign-routes.js +65 -0
  429. package/dist/server/email/campaign-routes.js.map +1 -0
  430. package/dist/server/email/campaign-service.d.ts +55 -0
  431. package/dist/server/email/campaign-service.d.ts.map +1 -0
  432. package/dist/server/email/campaign-service.js +89 -0
  433. package/dist/server/email/campaign-service.js.map +1 -0
  434. package/dist/server/email/email-queue-worker.d.ts +27 -0
  435. package/dist/server/email/email-queue-worker.d.ts.map +1 -0
  436. package/dist/server/email/email-queue-worker.js +119 -0
  437. package/dist/server/email/email-queue-worker.js.map +1 -0
  438. package/dist/server/email/email-utils.d.ts +5 -0
  439. package/dist/server/email/email-utils.d.ts.map +1 -0
  440. package/dist/server/email/email-utils.js +24 -0
  441. package/dist/server/email/email-utils.js.map +1 -0
  442. package/dist/server/email/lead-routes.d.ts +8 -0
  443. package/dist/server/email/lead-routes.d.ts.map +1 -0
  444. package/dist/server/email/lead-routes.js +56 -0
  445. package/dist/server/email/lead-routes.js.map +1 -0
  446. package/dist/server/email/lead-service.d.ts +66 -0
  447. package/dist/server/email/lead-service.d.ts.map +1 -0
  448. package/dist/server/email/lead-service.js +138 -0
  449. package/dist/server/email/lead-service.js.map +1 -0
  450. package/dist/server/email/ses-client.d.ts +27 -0
  451. package/dist/server/email/ses-client.d.ts.map +1 -0
  452. package/dist/server/email/ses-client.js +44 -0
  453. package/dist/server/email/ses-client.js.map +1 -0
  454. package/dist/server/email/sns-webhook.d.ts +10 -0
  455. package/dist/server/email/sns-webhook.d.ts.map +1 -0
  456. package/dist/server/email/sns-webhook.js +73 -0
  457. package/dist/server/email/sns-webhook.js.map +1 -0
  458. package/dist/server/index.d.ts +2 -0
  459. package/dist/server/index.d.ts.map +1 -0
  460. package/dist/server/index.js +36 -0
  461. package/dist/server/index.js.map +1 -0
  462. package/dist/server/mcp/expxagents-mcp.d.ts +2 -0
  463. package/dist/server/mcp/expxagents-mcp.d.ts.map +1 -0
  464. package/dist/server/mcp/expxagents-mcp.js +230 -0
  465. package/dist/server/mcp/expxagents-mcp.js.map +1 -0
  466. package/dist/server/routes/__tests__/conversations.test.d.ts +2 -0
  467. package/dist/server/routes/__tests__/conversations.test.d.ts.map +1 -0
  468. package/dist/server/routes/__tests__/conversations.test.js +111 -0
  469. package/dist/server/routes/__tests__/conversations.test.js.map +1 -0
  470. package/dist/server/routes/conversations.d.ts +8 -0
  471. package/dist/server/routes/conversations.d.ts.map +1 -0
  472. package/dist/server/routes/conversations.js +36 -0
  473. package/dist/server/routes/conversations.js.map +1 -0
  474. package/dist/server/scheduler/__tests__/job-runner.test.d.ts +2 -0
  475. package/dist/server/scheduler/__tests__/job-runner.test.d.ts.map +1 -0
  476. package/dist/server/scheduler/__tests__/job-runner.test.js +488 -0
  477. package/dist/server/scheduler/__tests__/job-runner.test.js.map +1 -0
  478. package/dist/server/scheduler/__tests__/scheduler-routes.test.d.ts +2 -0
  479. package/dist/server/scheduler/__tests__/scheduler-routes.test.d.ts.map +1 -0
  480. package/dist/server/scheduler/__tests__/scheduler-routes.test.js +167 -0
  481. package/dist/server/scheduler/__tests__/scheduler-routes.test.js.map +1 -0
  482. package/dist/server/scheduler/__tests__/scheduler-service.test.d.ts +2 -0
  483. package/dist/server/scheduler/__tests__/scheduler-service.test.d.ts.map +1 -0
  484. package/dist/server/scheduler/__tests__/scheduler-service.test.js +207 -0
  485. package/dist/server/scheduler/__tests__/scheduler-service.test.js.map +1 -0
  486. package/dist/server/scheduler/job-runner.d.ts +73 -0
  487. package/dist/server/scheduler/job-runner.d.ts.map +1 -0
  488. package/dist/server/scheduler/job-runner.js +407 -0
  489. package/dist/server/scheduler/job-runner.js.map +1 -0
  490. package/dist/server/scheduler/scheduler-routes.d.ts +10 -0
  491. package/dist/server/scheduler/scheduler-routes.d.ts.map +1 -0
  492. package/dist/server/scheduler/scheduler-routes.js +105 -0
  493. package/dist/server/scheduler/scheduler-routes.js.map +1 -0
  494. package/dist/server/scheduler/scheduler-service.d.ts +55 -0
  495. package/dist/server/scheduler/scheduler-service.d.ts.map +1 -0
  496. package/dist/server/scheduler/scheduler-service.js +271 -0
  497. package/dist/server/scheduler/scheduler-service.js.map +1 -0
  498. package/dist/server/services/__tests__/cost-service.test.d.ts +2 -0
  499. package/dist/server/services/__tests__/cost-service.test.d.ts.map +1 -0
  500. package/dist/server/services/__tests__/cost-service.test.js +72 -0
  501. package/dist/server/services/__tests__/cost-service.test.js.map +1 -0
  502. package/dist/server/services/__tests__/execution-log-service.test.d.ts +2 -0
  503. package/dist/server/services/__tests__/execution-log-service.test.d.ts.map +1 -0
  504. package/dist/server/services/__tests__/execution-log-service.test.js +40 -0
  505. package/dist/server/services/__tests__/execution-log-service.test.js.map +1 -0
  506. package/dist/server/services/__tests__/integration-registry.test.d.ts +2 -0
  507. package/dist/server/services/__tests__/integration-registry.test.d.ts.map +1 -0
  508. package/dist/server/services/__tests__/integration-registry.test.js +28 -0
  509. package/dist/server/services/__tests__/integration-registry.test.js.map +1 -0
  510. package/dist/server/services/__tests__/log-service.test.d.ts +2 -0
  511. package/dist/server/services/__tests__/log-service.test.d.ts.map +1 -0
  512. package/dist/server/services/__tests__/log-service.test.js +49 -0
  513. package/dist/server/services/__tests__/log-service.test.js.map +1 -0
  514. package/dist/server/services/__tests__/permissions-service.test.d.ts +2 -0
  515. package/dist/server/services/__tests__/permissions-service.test.d.ts.map +1 -0
  516. package/dist/server/services/__tests__/permissions-service.test.js +46 -0
  517. package/dist/server/services/__tests__/permissions-service.test.js.map +1 -0
  518. package/dist/server/services/__tests__/pipeline-task-service.test.d.ts +2 -0
  519. package/dist/server/services/__tests__/pipeline-task-service.test.d.ts.map +1 -0
  520. package/dist/server/services/__tests__/pipeline-task-service.test.js +268 -0
  521. package/dist/server/services/__tests__/pipeline-task-service.test.js.map +1 -0
  522. package/dist/server/services/__tests__/state-service.test.d.ts +2 -0
  523. package/dist/server/services/__tests__/state-service.test.d.ts.map +1 -0
  524. package/dist/server/services/__tests__/state-service.test.js +136 -0
  525. package/dist/server/services/__tests__/state-service.test.js.map +1 -0
  526. package/dist/server/services/activity-service.d.ts +35 -0
  527. package/dist/server/services/activity-service.d.ts.map +1 -0
  528. package/dist/server/services/activity-service.js +92 -0
  529. package/dist/server/services/activity-service.js.map +1 -0
  530. package/dist/server/services/cost-service.d.ts +55 -0
  531. package/dist/server/services/cost-service.d.ts.map +1 -0
  532. package/dist/server/services/cost-service.js +59 -0
  533. package/dist/server/services/cost-service.js.map +1 -0
  534. package/dist/server/services/execution-log-service.d.ts +20 -0
  535. package/dist/server/services/execution-log-service.d.ts.map +1 -0
  536. package/dist/server/services/execution-log-service.js +17 -0
  537. package/dist/server/services/execution-log-service.js.map +1 -0
  538. package/dist/server/services/integration-registry.d.ts +9 -0
  539. package/dist/server/services/integration-registry.d.ts.map +1 -0
  540. package/dist/server/services/integration-registry.js +14 -0
  541. package/dist/server/services/integration-registry.js.map +1 -0
  542. package/dist/server/services/log-service.d.ts +28 -0
  543. package/dist/server/services/log-service.d.ts.map +1 -0
  544. package/dist/server/services/log-service.js +34 -0
  545. package/dist/server/services/log-service.js.map +1 -0
  546. package/dist/server/services/permissions-service.d.ts +10 -0
  547. package/dist/server/services/permissions-service.d.ts.map +1 -0
  548. package/dist/server/services/permissions-service.js +48 -0
  549. package/dist/server/services/permissions-service.js.map +1 -0
  550. package/dist/server/services/pipeline-task-service.d.ts +79 -0
  551. package/dist/server/services/pipeline-task-service.d.ts.map +1 -0
  552. package/dist/server/services/pipeline-task-service.js +122 -0
  553. package/dist/server/services/pipeline-task-service.js.map +1 -0
  554. package/dist/server/services/squad-registry.d.ts +35 -0
  555. package/dist/server/services/squad-registry.d.ts.map +1 -0
  556. package/dist/server/services/squad-registry.js +141 -0
  557. package/dist/server/services/squad-registry.js.map +1 -0
  558. package/dist/server/services/state-service.d.ts +22 -0
  559. package/dist/server/services/state-service.d.ts.map +1 -0
  560. package/dist/server/services/state-service.js +114 -0
  561. package/dist/server/services/state-service.js.map +1 -0
  562. package/dist/server/types/a2ui.d.ts +27 -0
  563. package/dist/server/types/a2ui.d.ts.map +1 -0
  564. package/dist/server/types/a2ui.js +2 -0
  565. package/dist/server/types/a2ui.js.map +1 -0
  566. package/dist/server/utils/find-free-port.d.ts +2 -0
  567. package/dist/server/utils/find-free-port.d.ts.map +1 -0
  568. package/dist/server/utils/find-free-port.js +17 -0
  569. package/dist/server/utils/find-free-port.js.map +1 -0
  570. package/dist/server/watcher/__tests__/file-watcher.test.d.ts +2 -0
  571. package/dist/server/watcher/__tests__/file-watcher.test.d.ts.map +1 -0
  572. package/dist/server/watcher/__tests__/file-watcher.test.js +81 -0
  573. package/dist/server/watcher/__tests__/file-watcher.test.js.map +1 -0
  574. package/dist/server/watcher/file-watcher.d.ts +19 -0
  575. package/dist/server/watcher/file-watcher.d.ts.map +1 -0
  576. package/dist/server/watcher/file-watcher.js +105 -0
  577. package/dist/server/watcher/file-watcher.js.map +1 -0
  578. package/dist/server/watcher/state-parser.d.ts +77 -0
  579. package/dist/server/watcher/state-parser.d.ts.map +1 -0
  580. package/dist/server/watcher/state-parser.js +78 -0
  581. package/dist/server/watcher/state-parser.js.map +1 -0
  582. package/dist/server/ws/ws-auth.d.ts +4 -0
  583. package/dist/server/ws/ws-auth.d.ts.map +1 -0
  584. package/dist/server/ws/ws-auth.js +42 -0
  585. package/dist/server/ws/ws-auth.js.map +1 -0
  586. package/dist/server/ws/ws-handler.d.ts +12 -0
  587. package/dist/server/ws/ws-handler.d.ts.map +1 -0
  588. package/dist/server/ws/ws-handler.js +171 -0
  589. package/dist/server/ws/ws-handler.js.map +1 -0
  590. package/dist/server/ws/ws-rooms.d.ts +12 -0
  591. package/dist/server/ws/ws-rooms.d.ts.map +1 -0
  592. package/dist/server/ws/ws-rooms.js +52 -0
  593. package/dist/server/ws/ws-rooms.js.map +1 -0
  594. package/package.json +2 -2
@@ -0,0 +1,53 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import Database from 'better-sqlite3';
3
+ import { runMigrations } from '../migrations.js';
4
+ describe('email schema', () => {
5
+ let db;
6
+ beforeEach(() => {
7
+ db = new Database(':memory:');
8
+ runMigrations(db);
9
+ });
10
+ afterEach(() => { db.close(); });
11
+ it('should create leads table', () => {
12
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='leads'").get();
13
+ expect(row).toBeTruthy();
14
+ });
15
+ it('should create lead_tags table', () => {
16
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='lead_tags'").get();
17
+ expect(row).toBeTruthy();
18
+ });
19
+ it('should create lead_lists table', () => {
20
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='lead_lists'").get();
21
+ expect(row).toBeTruthy();
22
+ });
23
+ it('should create email_campaigns table', () => {
24
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='email_campaigns'").get();
25
+ expect(row).toBeTruthy();
26
+ });
27
+ it('should create email_queue table', () => {
28
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='email_queue'").get();
29
+ expect(row).toBeTruthy();
30
+ });
31
+ it('should enforce unique email on leads', () => {
32
+ db.prepare("INSERT INTO leads (id, email) VALUES ('a', 'test@example.com')").run();
33
+ expect(() => {
34
+ db.prepare("INSERT INTO leads (id, email) VALUES ('b', 'test@example.com')").run();
35
+ }).toThrow();
36
+ });
37
+ it('should cascade delete lead_tags when lead is deleted', () => {
38
+ db.prepare("INSERT INTO leads (id, email) VALUES ('a', 'test@example.com')").run();
39
+ db.prepare("INSERT INTO lead_tags (lead_id, tag) VALUES ('a', 'saas')").run();
40
+ db.prepare("DELETE FROM leads WHERE id = 'a'").run();
41
+ const tags = db.prepare("SELECT * FROM lead_tags WHERE lead_id = 'a'").all();
42
+ expect(tags).toHaveLength(0);
43
+ });
44
+ it('should set null on email_queue.lead_id when lead is deleted', () => {
45
+ db.prepare("INSERT INTO leads (id, email) VALUES ('a', 'test@example.com')").run();
46
+ db.prepare("INSERT INTO email_campaigns (id, name, subject, body_html, from_email) VALUES ('c1', 'Test', 'Hi', '<p>Hi</p>', 'a@b.com')").run();
47
+ db.prepare("INSERT INTO email_queue (id, campaign_id, lead_id, to_email) VALUES ('q1', 'c1', 'a', 'test@example.com')").run();
48
+ db.prepare("DELETE FROM leads WHERE id = 'a'").run();
49
+ const row = db.prepare("SELECT lead_id FROM email_queue WHERE id = 'q1'").get();
50
+ expect(row.lead_id).toBeNull();
51
+ });
52
+ });
53
+ //# sourceMappingURL=email-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-schema.test.js","sourceRoot":"","sources":["../../../src/db/__tests__/email-schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scheduler-schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-schema.test.d.ts","sourceRoot":"","sources":["../../../src/db/__tests__/scheduler-schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import Database from 'better-sqlite3';
3
+ import { runMigrations } from '../migrations.js';
4
+ describe('scheduler schema', () => {
5
+ let db;
6
+ beforeEach(() => {
7
+ db = new Database(':memory:');
8
+ runMigrations(db);
9
+ });
10
+ afterEach(() => {
11
+ db.close();
12
+ });
13
+ it('should create scheduled_jobs table', () => {
14
+ const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='scheduled_jobs'").all();
15
+ expect(tables).toHaveLength(1);
16
+ });
17
+ it('should insert and query scheduled_jobs', () => {
18
+ db.prepare(`
19
+ INSERT INTO scheduled_jobs (squad_name, cron_expression, prompt)
20
+ VALUES (?, ?, ?)
21
+ `).run('test-squad', '0 9 * * 1', 'Run test');
22
+ const row = db.prepare('SELECT * FROM scheduled_jobs WHERE squad_name = ?').get('test-squad');
23
+ expect(row.squad_name).toBe('test-squad');
24
+ expect(row.cron_expression).toBe('0 9 * * 1');
25
+ expect(row.status).toBe('active');
26
+ expect(row.mode).toBe('autonomous');
27
+ expect(row.timeout_minutes).toBe(30);
28
+ });
29
+ it('should enforce unique squad_name in scheduled_jobs', () => {
30
+ db.prepare(`
31
+ INSERT INTO scheduled_jobs (squad_name, cron_expression, prompt)
32
+ VALUES (?, ?, ?)
33
+ `).run('test-squad', '0 9 * * 1', 'Run test');
34
+ expect(() => {
35
+ db.prepare(`
36
+ INSERT INTO scheduled_jobs (squad_name, cron_expression, prompt)
37
+ VALUES (?, ?, ?)
38
+ `).run('test-squad', '0 10 * * 1', 'Run again');
39
+ }).toThrow();
40
+ });
41
+ it('should have attempt column in squad_activities', () => {
42
+ const columns = db.prepare('PRAGMA table_info(squad_activities)').all();
43
+ const attemptCol = columns.find((c) => c.name === 'attempt');
44
+ expect(attemptCol).toBeDefined();
45
+ expect(attemptCol.dflt_value).toBe('1');
46
+ });
47
+ it('should have index on squad_activities triggered_by', () => {
48
+ const indexes = db.prepare("SELECT name FROM sqlite_master WHERE type='index' AND name='idx_squad_activities_triggered_by'").all();
49
+ expect(indexes).toHaveLength(1);
50
+ });
51
+ });
52
+ //# sourceMappingURL=scheduler-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-schema.test.js","sourceRoot":"","sources":["../../../src/db/__tests__/scheduler-schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function getDb(dataDir: string): Database.Database;
3
+ export declare function closeDb(): void;
4
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0BtC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAYxD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAK9B"}
@@ -0,0 +1,40 @@
1
+ import Database from 'better-sqlite3';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { runMigrations } from './migrations.js';
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ let db = null;
8
+ /** Migrate DB from old location (server/data/) to new location (.expxagents/data/) */
9
+ function migrateOldDb(newDbPath) {
10
+ if (fs.existsSync(newDbPath))
11
+ return; // new DB already exists
12
+ // Old location: server/data/opensquad.db (relative to this file's __dirname)
13
+ const oldDbPath = path.join(__dirname, '..', 'data', 'opensquad.db');
14
+ if (!fs.existsSync(oldDbPath))
15
+ return; // no old DB to migrate
16
+ try {
17
+ fs.copyFileSync(oldDbPath, newDbPath);
18
+ console.log(`[db] Migrated database from ${oldDbPath} to ${newDbPath}`);
19
+ }
20
+ catch (err) {
21
+ console.warn(`[db] Failed to migrate old database: ${err}`);
22
+ }
23
+ }
24
+ export function getDb(dataDir) {
25
+ if (db)
26
+ return db;
27
+ fs.mkdirSync(dataDir, { recursive: true });
28
+ const dbPath = path.join(dataDir, 'opensquad.db');
29
+ migrateOldDb(dbPath);
30
+ db = new Database(dbPath);
31
+ runMigrations(db);
32
+ return db;
33
+ }
34
+ export function closeDb() {
35
+ if (db) {
36
+ db.close();
37
+ db = null;
38
+ }
39
+ }
40
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,IAAI,EAAE,GAA6B,IAAI,CAAC;AAExC,sFAAsF;AACtF,SAAS,YAAY,CAAC,SAAiB;IACrC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,wBAAwB;IAE9D,6EAA6E;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,uBAAuB;IAE9D,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,OAAO,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAElD,YAAY,CAAC,MAAM,CAAC,CAAC;IAErB,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function runMigrations(db: Database.Database): void;
3
+ export declare function seedDefaultAdmin(db: Database.Database): Promise<void>;
4
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAqCzD;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3E"}
@@ -0,0 +1,47 @@
1
+ import bcrypt from 'bcrypt';
2
+ import crypto from 'node:crypto';
3
+ import { SCHEMA_SQL } from './schema.js';
4
+ export function runMigrations(db) {
5
+ db.pragma('journal_mode = WAL');
6
+ db.pragma('foreign_keys = ON');
7
+ db.exec(SCHEMA_SQL);
8
+ // Add attempt column to squad_activities if it doesn't exist
9
+ const columns = db.prepare('PRAGMA table_info(squad_activities)').all();
10
+ const hasAttempt = columns.some((c) => c.name === 'attempt');
11
+ if (!hasAttempt) {
12
+ db.exec('ALTER TABLE squad_activities ADD COLUMN attempt INTEGER DEFAULT 1');
13
+ }
14
+ // Add result, started_at, finished_at to kanban_tasks if missing
15
+ const kanbanCols = db.prepare('PRAGMA table_info(kanban_tasks)').all();
16
+ if (kanbanCols.length > 0) {
17
+ const hasResult = kanbanCols.some((c) => c.name === 'result');
18
+ if (!hasResult) {
19
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN result TEXT');
20
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN started_at TEXT');
21
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN finished_at TEXT');
22
+ }
23
+ }
24
+ // Add pipeline columns to kanban_tasks if missing
25
+ const kanbanColsForPipeline = db.prepare('PRAGMA table_info(kanban_tasks)').all();
26
+ if (kanbanColsForPipeline.length > 0) {
27
+ const hasStepId = kanbanColsForPipeline.some((c) => c.name === 'step_id');
28
+ if (!hasStepId) {
29
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN step_id TEXT');
30
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN agent_id TEXT');
31
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN agent_name TEXT');
32
+ db.exec('ALTER TABLE kanban_tasks ADD COLUMN activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL');
33
+ db.exec("ALTER TABLE kanban_tasks ADD COLUMN triggered_by TEXT DEFAULT 'dashboard'");
34
+ }
35
+ db.exec('CREATE INDEX IF NOT EXISTS idx_kanban_tasks_activity ON kanban_tasks(activity_id)');
36
+ db.exec('CREATE INDEX IF NOT EXISTS idx_kanban_tasks_squad_activity ON kanban_tasks(squad_code, activity_id)');
37
+ }
38
+ }
39
+ export async function seedDefaultAdmin(db) {
40
+ const existing = db.prepare('SELECT id FROM users WHERE username = ?').get('admin');
41
+ if (existing)
42
+ return;
43
+ const id = crypto.randomUUID();
44
+ const hash = await bcrypt.hash('admin', 12);
45
+ db.prepare('INSERT INTO users (id, username, email, password_hash, role, created_at) VALUES (?, ?, ?, ?, ?, ?)').run(id, 'admin', null, hash, 'admin', new Date().toISOString());
46
+ }
47
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,6DAA6D;IAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAW,CAAC;IACjF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,EAAE,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAC/E,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAW,CAAC;IAChF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC3D,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC/D,EAAE,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAW,CAAC;IAC3F,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC5D,EAAE,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAC7D,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC/D,EAAE,CAAC,IAAI,CAAC,yGAAyG,CAAC,CAAC;YACnH,EAAE,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACvF,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAC7F,EAAE,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAqB;IAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpF,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5C,EAAE,CAAC,OAAO,CACR,oGAAoG,CACrG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n username TEXT UNIQUE NOT NULL,\n email TEXT,\n password_hash TEXT NOT NULL,\n role TEXT NOT NULL DEFAULT 'operator',\n created_at TEXT NOT NULL,\n last_login TEXT\n);\n\nCREATE TABLE IF NOT EXISTS sessions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n token_hash TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS audit_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n user_id TEXT NOT NULL REFERENCES users(id),\n action TEXT NOT NULL,\n details TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n squad_name TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS chat_messages (\n id TEXT PRIMARY KEY,\n conversation_id TEXT NOT NULL REFERENCES conversations(id),\n role TEXT NOT NULL,\n content TEXT NOT NULL,\n agent_id TEXT,\n agent_name TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS squad_activities (\n id TEXT PRIMARY KEY,\n squad_code TEXT NOT NULL,\n conversation_id TEXT,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n duration_ms INTEGER,\n status TEXT NOT NULL DEFAULT 'running',\n user_message TEXT,\n result_summary TEXT,\n triggered_by TEXT DEFAULT 'dashboard',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_squad_date\n ON squad_activities(squad_code, started_at);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_date\n ON squad_activities(started_at);\n\nCREATE TABLE IF NOT EXISTS scheduled_jobs (\n squad_name TEXT PRIMARY KEY,\n cron_expression TEXT NOT NULL,\n prompt TEXT NOT NULL,\n mode TEXT DEFAULT 'autonomous',\n timeout_minutes INTEGER DEFAULT 30,\n retry_on_failure INTEGER DEFAULT 0,\n timezone TEXT,\n status TEXT DEFAULT 'active',\n last_run_at TEXT,\n last_result TEXT,\n next_run_at TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_triggered_by\n ON squad_activities(triggered_by, squad_code);\n\nCREATE TABLE IF NOT EXISTS leads (\n id TEXT PRIMARY KEY,\n email TEXT UNIQUE NOT NULL,\n name TEXT,\n company TEXT,\n metadata TEXT,\n status TEXT DEFAULT 'active',\n source TEXT,\n source_detail TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS lead_tags (\n lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,\n tag TEXT NOT NULL,\n PRIMARY KEY (lead_id, tag)\n);\n\nCREATE TABLE IF NOT EXISTS lead_lists (\n lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,\n list_name TEXT NOT NULL,\n PRIMARY KEY (lead_id, list_name)\n);\n\nCREATE TABLE IF NOT EXISTS email_campaigns (\n id TEXT PRIMARY KEY,\n name TEXT,\n squad_name TEXT,\n subject TEXT,\n body_html TEXT,\n body_text TEXT,\n from_email TEXT,\n from_name TEXT,\n status TEXT DEFAULT 'draft',\n total_recipients INTEGER DEFAULT 0,\n sent_count INTEGER DEFAULT 0,\n failed_count INTEGER DEFAULT 0,\n bounce_count INTEGER DEFAULT 0,\n complaint_count INTEGER DEFAULT 0,\n created_at TEXT DEFAULT (datetime('now')),\n started_at TEXT,\n completed_at TEXT\n);\n\nCREATE TABLE IF NOT EXISTS email_queue (\n id TEXT PRIMARY KEY,\n campaign_id TEXT REFERENCES email_campaigns(id) ON DELETE CASCADE,\n lead_id TEXT REFERENCES leads(id) ON DELETE SET NULL,\n to_email TEXT NOT NULL,\n status TEXT DEFAULT 'pending',\n ses_message_id TEXT,\n error TEXT,\n attempts INTEGER DEFAULT 0,\n scheduled_at TEXT,\n sent_at TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_email_queue_status_scheduled\n ON email_queue(status, scheduled_at);\nCREATE INDEX IF NOT EXISTS idx_email_queue_ses_message_id\n ON email_queue(ses_message_id);\nCREATE INDEX IF NOT EXISTS idx_email_queue_campaign_status\n ON email_queue(campaign_id, status);\nCREATE INDEX IF NOT EXISTS idx_lead_tags_tag\n ON lead_tags(tag);\nCREATE INDEX IF NOT EXISTS idx_lead_lists_list_name\n ON lead_lists(list_name);\n\nCREATE TABLE IF NOT EXISTS team_members (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n role TEXT NOT NULL,\n email TEXT,\n phone TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS integrations (\n provider TEXT PRIMARY KEY,\n enabled INTEGER NOT NULL DEFAULT 0,\n config TEXT NOT NULL DEFAULT '{}',\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS kanban_tasks (\n id TEXT PRIMARY KEY,\n squad_code TEXT NOT NULL,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'planned',\n position INTEGER NOT NULL DEFAULT 0,\n result TEXT,\n started_at TEXT,\n finished_at TEXT,\n step_id TEXT,\n agent_id TEXT,\n agent_name TEXT,\n activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,\n triggered_by TEXT DEFAULT 'dashboard',\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_kanban_tasks_squad_status\n ON kanban_tasks(squad_code, status);\n\nCREATE TABLE IF NOT EXISTS squad_states (\n squad_code TEXT PRIMARY KEY,\n status TEXT NOT NULL DEFAULT 'idle',\n current_step INTEGER NOT NULL DEFAULT 0,\n total_steps INTEGER NOT NULL DEFAULT 0,\n step_label TEXT DEFAULT '',\n started_at TEXT,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS agent_states (\n id TEXT NOT NULL,\n squad_code TEXT NOT NULL REFERENCES squad_states(squad_code) ON DELETE CASCADE,\n name TEXT NOT NULL,\n icon TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'idle',\n step_index INTEGER NOT NULL DEFAULT 0,\n step_label TEXT DEFAULT '',\n deliver_to TEXT,\n desk_col INTEGER NOT NULL,\n desk_row INTEGER NOT NULL,\n message TEXT,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (squad_code, id)\n);\n\nCREATE TABLE IF NOT EXISTS handoffs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n squad_code TEXT NOT NULL REFERENCES squad_states(squad_code),\n from_agent TEXT NOT NULL,\n to_agent TEXT NOT NULL,\n message TEXT NOT NULL,\n completed_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_handoffs_squad ON handoffs(squad_code, completed_at);\nCREATE INDEX IF NOT EXISTS idx_agent_states_status ON agent_states(squad_code, status);\n\nCREATE TABLE IF NOT EXISTS cost_entries (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n squad_code TEXT NOT NULL,\n activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,\n agent_id TEXT NOT NULL,\n agent_name TEXT,\n step_index INTEGER,\n model TEXT NOT NULL,\n input_chars INTEGER NOT NULL,\n output_chars INTEGER NOT NULL,\n estimated_tokens_in INTEGER NOT NULL,\n estimated_tokens_out INTEGER NOT NULL,\n estimated_cost_usd REAL NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_cost_squad_date ON cost_entries(squad_code, created_at);\nCREATE INDEX IF NOT EXISTS idx_cost_agent ON cost_entries(squad_code, agent_id);\nCREATE INDEX IF NOT EXISTS idx_cost_activity ON cost_entries(activity_id);\n\nCREATE TABLE IF NOT EXISTS event_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n level TEXT NOT NULL DEFAULT 'info',\n squad_code TEXT,\n source TEXT NOT NULL,\n message TEXT NOT NULL,\n detail TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_event_log_created ON event_log(created_at);\nCREATE INDEX IF NOT EXISTS idx_event_log_squad ON event_log(squad_code, created_at);\nCREATE INDEX IF NOT EXISTS idx_event_log_level ON event_log(level, created_at);\n\nCREATE TABLE IF NOT EXISTS execution_logs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n activity_id TEXT NOT NULL REFERENCES squad_activities(id) ON DELETE CASCADE,\n squad_code TEXT NOT NULL,\n chunk TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'output',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_execution_logs_activity ON execution_logs(activity_id, created_at);\n\nCREATE TABLE IF NOT EXISTS user_squad_access (\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n squad_code TEXT NOT NULL,\n PRIMARY KEY (user_id, squad_code)\n);\n\nCREATE TABLE IF NOT EXISTS user_page_access (\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n page TEXT NOT NULL,\n PRIMARY KEY (user_id, page)\n);\n";
2
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,00QA8RtB,CAAC"}
@@ -0,0 +1,288 @@
1
+ export const SCHEMA_SQL = `
2
+ CREATE TABLE IF NOT EXISTS users (
3
+ id TEXT PRIMARY KEY,
4
+ username TEXT UNIQUE NOT NULL,
5
+ email TEXT,
6
+ password_hash TEXT NOT NULL,
7
+ role TEXT NOT NULL DEFAULT 'operator',
8
+ created_at TEXT NOT NULL,
9
+ last_login TEXT
10
+ );
11
+
12
+ CREATE TABLE IF NOT EXISTS sessions (
13
+ id TEXT PRIMARY KEY,
14
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
15
+ token_hash TEXT NOT NULL,
16
+ expires_at TEXT NOT NULL,
17
+ created_at TEXT NOT NULL
18
+ );
19
+
20
+ CREATE TABLE IF NOT EXISTS audit_log (
21
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
22
+ user_id TEXT NOT NULL REFERENCES users(id),
23
+ action TEXT NOT NULL,
24
+ details TEXT,
25
+ created_at TEXT NOT NULL
26
+ );
27
+
28
+ CREATE TABLE IF NOT EXISTS conversations (
29
+ id TEXT PRIMARY KEY,
30
+ squad_name TEXT NOT NULL,
31
+ created_at TEXT NOT NULL
32
+ );
33
+
34
+ CREATE TABLE IF NOT EXISTS chat_messages (
35
+ id TEXT PRIMARY KEY,
36
+ conversation_id TEXT NOT NULL REFERENCES conversations(id),
37
+ role TEXT NOT NULL,
38
+ content TEXT NOT NULL,
39
+ agent_id TEXT,
40
+ agent_name TEXT,
41
+ created_at TEXT NOT NULL
42
+ );
43
+
44
+ CREATE TABLE IF NOT EXISTS squad_activities (
45
+ id TEXT PRIMARY KEY,
46
+ squad_code TEXT NOT NULL,
47
+ conversation_id TEXT,
48
+ started_at TEXT NOT NULL,
49
+ finished_at TEXT,
50
+ duration_ms INTEGER,
51
+ status TEXT NOT NULL DEFAULT 'running',
52
+ user_message TEXT,
53
+ result_summary TEXT,
54
+ triggered_by TEXT DEFAULT 'dashboard',
55
+ created_at TEXT NOT NULL
56
+ );
57
+
58
+ CREATE INDEX IF NOT EXISTS idx_squad_activities_squad_date
59
+ ON squad_activities(squad_code, started_at);
60
+
61
+ CREATE INDEX IF NOT EXISTS idx_squad_activities_date
62
+ ON squad_activities(started_at);
63
+
64
+ CREATE TABLE IF NOT EXISTS scheduled_jobs (
65
+ squad_name TEXT PRIMARY KEY,
66
+ cron_expression TEXT NOT NULL,
67
+ prompt TEXT NOT NULL,
68
+ mode TEXT DEFAULT 'autonomous',
69
+ timeout_minutes INTEGER DEFAULT 30,
70
+ retry_on_failure INTEGER DEFAULT 0,
71
+ timezone TEXT,
72
+ status TEXT DEFAULT 'active',
73
+ last_run_at TEXT,
74
+ last_result TEXT,
75
+ next_run_at TEXT,
76
+ created_at TEXT DEFAULT (datetime('now')),
77
+ updated_at TEXT DEFAULT (datetime('now'))
78
+ );
79
+
80
+ CREATE INDEX IF NOT EXISTS idx_squad_activities_triggered_by
81
+ ON squad_activities(triggered_by, squad_code);
82
+
83
+ CREATE TABLE IF NOT EXISTS leads (
84
+ id TEXT PRIMARY KEY,
85
+ email TEXT UNIQUE NOT NULL,
86
+ name TEXT,
87
+ company TEXT,
88
+ metadata TEXT,
89
+ status TEXT DEFAULT 'active',
90
+ source TEXT,
91
+ source_detail TEXT,
92
+ created_at TEXT DEFAULT (datetime('now')),
93
+ updated_at TEXT DEFAULT (datetime('now'))
94
+ );
95
+
96
+ CREATE TABLE IF NOT EXISTS lead_tags (
97
+ lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,
98
+ tag TEXT NOT NULL,
99
+ PRIMARY KEY (lead_id, tag)
100
+ );
101
+
102
+ CREATE TABLE IF NOT EXISTS lead_lists (
103
+ lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,
104
+ list_name TEXT NOT NULL,
105
+ PRIMARY KEY (lead_id, list_name)
106
+ );
107
+
108
+ CREATE TABLE IF NOT EXISTS email_campaigns (
109
+ id TEXT PRIMARY KEY,
110
+ name TEXT,
111
+ squad_name TEXT,
112
+ subject TEXT,
113
+ body_html TEXT,
114
+ body_text TEXT,
115
+ from_email TEXT,
116
+ from_name TEXT,
117
+ status TEXT DEFAULT 'draft',
118
+ total_recipients INTEGER DEFAULT 0,
119
+ sent_count INTEGER DEFAULT 0,
120
+ failed_count INTEGER DEFAULT 0,
121
+ bounce_count INTEGER DEFAULT 0,
122
+ complaint_count INTEGER DEFAULT 0,
123
+ created_at TEXT DEFAULT (datetime('now')),
124
+ started_at TEXT,
125
+ completed_at TEXT
126
+ );
127
+
128
+ CREATE TABLE IF NOT EXISTS email_queue (
129
+ id TEXT PRIMARY KEY,
130
+ campaign_id TEXT REFERENCES email_campaigns(id) ON DELETE CASCADE,
131
+ lead_id TEXT REFERENCES leads(id) ON DELETE SET NULL,
132
+ to_email TEXT NOT NULL,
133
+ status TEXT DEFAULT 'pending',
134
+ ses_message_id TEXT,
135
+ error TEXT,
136
+ attempts INTEGER DEFAULT 0,
137
+ scheduled_at TEXT,
138
+ sent_at TEXT,
139
+ created_at TEXT DEFAULT (datetime('now'))
140
+ );
141
+
142
+ CREATE INDEX IF NOT EXISTS idx_email_queue_status_scheduled
143
+ ON email_queue(status, scheduled_at);
144
+ CREATE INDEX IF NOT EXISTS idx_email_queue_ses_message_id
145
+ ON email_queue(ses_message_id);
146
+ CREATE INDEX IF NOT EXISTS idx_email_queue_campaign_status
147
+ ON email_queue(campaign_id, status);
148
+ CREATE INDEX IF NOT EXISTS idx_lead_tags_tag
149
+ ON lead_tags(tag);
150
+ CREATE INDEX IF NOT EXISTS idx_lead_lists_list_name
151
+ ON lead_lists(list_name);
152
+
153
+ CREATE TABLE IF NOT EXISTS team_members (
154
+ id TEXT PRIMARY KEY,
155
+ name TEXT NOT NULL,
156
+ role TEXT NOT NULL,
157
+ email TEXT,
158
+ phone TEXT,
159
+ created_at TEXT DEFAULT (datetime('now')),
160
+ updated_at TEXT DEFAULT (datetime('now'))
161
+ );
162
+
163
+ CREATE TABLE IF NOT EXISTS integrations (
164
+ provider TEXT PRIMARY KEY,
165
+ enabled INTEGER NOT NULL DEFAULT 0,
166
+ config TEXT NOT NULL DEFAULT '{}',
167
+ created_at TEXT DEFAULT (datetime('now')),
168
+ updated_at TEXT DEFAULT (datetime('now'))
169
+ );
170
+
171
+ CREATE TABLE IF NOT EXISTS kanban_tasks (
172
+ id TEXT PRIMARY KEY,
173
+ squad_code TEXT NOT NULL,
174
+ title TEXT NOT NULL,
175
+ description TEXT,
176
+ status TEXT NOT NULL DEFAULT 'planned',
177
+ position INTEGER NOT NULL DEFAULT 0,
178
+ result TEXT,
179
+ started_at TEXT,
180
+ finished_at TEXT,
181
+ step_id TEXT,
182
+ agent_id TEXT,
183
+ agent_name TEXT,
184
+ activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,
185
+ triggered_by TEXT DEFAULT 'dashboard',
186
+ created_at TEXT DEFAULT (datetime('now')),
187
+ updated_at TEXT DEFAULT (datetime('now'))
188
+ );
189
+
190
+ CREATE INDEX IF NOT EXISTS idx_kanban_tasks_squad_status
191
+ ON kanban_tasks(squad_code, status);
192
+
193
+ CREATE TABLE IF NOT EXISTS squad_states (
194
+ squad_code TEXT PRIMARY KEY,
195
+ status TEXT NOT NULL DEFAULT 'idle',
196
+ current_step INTEGER NOT NULL DEFAULT 0,
197
+ total_steps INTEGER NOT NULL DEFAULT 0,
198
+ step_label TEXT DEFAULT '',
199
+ started_at TEXT,
200
+ updated_at TEXT NOT NULL
201
+ );
202
+
203
+ CREATE TABLE IF NOT EXISTS agent_states (
204
+ id TEXT NOT NULL,
205
+ squad_code TEXT NOT NULL REFERENCES squad_states(squad_code) ON DELETE CASCADE,
206
+ name TEXT NOT NULL,
207
+ icon TEXT NOT NULL,
208
+ status TEXT NOT NULL DEFAULT 'idle',
209
+ step_index INTEGER NOT NULL DEFAULT 0,
210
+ step_label TEXT DEFAULT '',
211
+ deliver_to TEXT,
212
+ desk_col INTEGER NOT NULL,
213
+ desk_row INTEGER NOT NULL,
214
+ message TEXT,
215
+ updated_at TEXT NOT NULL,
216
+ PRIMARY KEY (squad_code, id)
217
+ );
218
+
219
+ CREATE TABLE IF NOT EXISTS handoffs (
220
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
221
+ squad_code TEXT NOT NULL REFERENCES squad_states(squad_code),
222
+ from_agent TEXT NOT NULL,
223
+ to_agent TEXT NOT NULL,
224
+ message TEXT NOT NULL,
225
+ completed_at TEXT NOT NULL
226
+ );
227
+
228
+ CREATE INDEX IF NOT EXISTS idx_handoffs_squad ON handoffs(squad_code, completed_at);
229
+ CREATE INDEX IF NOT EXISTS idx_agent_states_status ON agent_states(squad_code, status);
230
+
231
+ CREATE TABLE IF NOT EXISTS cost_entries (
232
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
233
+ squad_code TEXT NOT NULL,
234
+ activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,
235
+ agent_id TEXT NOT NULL,
236
+ agent_name TEXT,
237
+ step_index INTEGER,
238
+ model TEXT NOT NULL,
239
+ input_chars INTEGER NOT NULL,
240
+ output_chars INTEGER NOT NULL,
241
+ estimated_tokens_in INTEGER NOT NULL,
242
+ estimated_tokens_out INTEGER NOT NULL,
243
+ estimated_cost_usd REAL NOT NULL,
244
+ created_at TEXT NOT NULL
245
+ );
246
+
247
+ CREATE INDEX IF NOT EXISTS idx_cost_squad_date ON cost_entries(squad_code, created_at);
248
+ CREATE INDEX IF NOT EXISTS idx_cost_agent ON cost_entries(squad_code, agent_id);
249
+ CREATE INDEX IF NOT EXISTS idx_cost_activity ON cost_entries(activity_id);
250
+
251
+ CREATE TABLE IF NOT EXISTS event_log (
252
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
253
+ level TEXT NOT NULL DEFAULT 'info',
254
+ squad_code TEXT,
255
+ source TEXT NOT NULL,
256
+ message TEXT NOT NULL,
257
+ detail TEXT,
258
+ created_at TEXT NOT NULL
259
+ );
260
+
261
+ CREATE INDEX IF NOT EXISTS idx_event_log_created ON event_log(created_at);
262
+ CREATE INDEX IF NOT EXISTS idx_event_log_squad ON event_log(squad_code, created_at);
263
+ CREATE INDEX IF NOT EXISTS idx_event_log_level ON event_log(level, created_at);
264
+
265
+ CREATE TABLE IF NOT EXISTS execution_logs (
266
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
267
+ activity_id TEXT NOT NULL REFERENCES squad_activities(id) ON DELETE CASCADE,
268
+ squad_code TEXT NOT NULL,
269
+ chunk TEXT NOT NULL,
270
+ source TEXT NOT NULL DEFAULT 'output',
271
+ created_at TEXT NOT NULL
272
+ );
273
+
274
+ CREATE INDEX IF NOT EXISTS idx_execution_logs_activity ON execution_logs(activity_id, created_at);
275
+
276
+ CREATE TABLE IF NOT EXISTS user_squad_access (
277
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
278
+ squad_code TEXT NOT NULL,
279
+ PRIMARY KEY (user_id, squad_code)
280
+ );
281
+
282
+ CREATE TABLE IF NOT EXISTS user_page_access (
283
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
284
+ page TEXT NOT NULL,
285
+ PRIMARY KEY (user_id, page)
286
+ );
287
+ `;
288
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8RzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=campaign-routes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaign-routes.test.d.ts","sourceRoot":"","sources":["../../../src/email/__tests__/campaign-routes.test.ts"],"names":[],"mappings":""}