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,55 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface CostEntry {
3
+ squadCode: string;
4
+ activityId?: string;
5
+ agentId: string;
6
+ agentName?: string;
7
+ stepIndex?: number;
8
+ model: string;
9
+ inputChars: number;
10
+ outputChars: number;
11
+ estimatedTokensIn: number;
12
+ estimatedTokensOut: number;
13
+ estimatedCostUsd: number;
14
+ }
15
+ export interface CostRow {
16
+ id: number;
17
+ squad_code: string;
18
+ activity_id: string | null;
19
+ agent_id: string;
20
+ agent_name: string | null;
21
+ step_index: number | null;
22
+ model: string;
23
+ input_chars: number;
24
+ output_chars: number;
25
+ estimated_tokens_in: number;
26
+ estimated_tokens_out: number;
27
+ estimated_cost_usd: number;
28
+ created_at: string;
29
+ }
30
+ export interface CostSummary {
31
+ totalCostUsd: number;
32
+ entryCount: number;
33
+ byAgent: Record<string, number>;
34
+ byModel: Record<string, number>;
35
+ }
36
+ export interface BudgetConfig {
37
+ monthlyBudget?: number;
38
+ agentBudgets?: Record<string, number>;
39
+ alertThreshold?: number;
40
+ }
41
+ export type BudgetStatus = 'ok' | 'warn' | 'blocked';
42
+ export interface BudgetCheckResult {
43
+ status: BudgetStatus;
44
+ usedUsd: number;
45
+ limitUsd: number | null;
46
+ message?: string;
47
+ }
48
+ export declare function persistCostEntry(db: Database.Database, entry: CostEntry): number;
49
+ export declare function getSquadCosts(db: Database.Database, squadCode: string, opts?: {
50
+ agentId?: string;
51
+ since?: string;
52
+ }): CostRow[];
53
+ export declare function getSquadCostSummary(db: Database.Database, squadCode: string, since?: string): CostSummary;
54
+ export declare function checkBudget(db: Database.Database, squadCode: string, budget: BudgetConfig, agentId?: string): BudgetCheckResult;
55
+ //# sourceMappingURL=cost-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-service.d.ts","sourceRoot":"","sources":["../../src/services/cost-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAWhF;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAO9H;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAWzG;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAwB/H"}
@@ -0,0 +1,59 @@
1
+ export function persistCostEntry(db, entry) {
2
+ const now = new Date().toISOString();
3
+ const result = db.prepare(`INSERT INTO cost_entries (squad_code, activity_id, agent_id, agent_name, step_index, model, input_chars, output_chars, estimated_tokens_in, estimated_tokens_out, estimated_cost_usd, created_at)
4
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(entry.squadCode, entry.activityId ?? null, entry.agentId, entry.agentName ?? null, entry.stepIndex ?? null, entry.model, entry.inputChars, entry.outputChars, entry.estimatedTokensIn, entry.estimatedTokensOut, entry.estimatedCostUsd, now);
5
+ return Number(result.lastInsertRowid);
6
+ }
7
+ export function getSquadCosts(db, squadCode, opts) {
8
+ let sql = 'SELECT * FROM cost_entries WHERE squad_code = ?';
9
+ const params = [squadCode];
10
+ if (opts?.agentId) {
11
+ sql += ' AND agent_id = ?';
12
+ params.push(opts.agentId);
13
+ }
14
+ if (opts?.since) {
15
+ sql += ' AND created_at >= ?';
16
+ params.push(opts.since);
17
+ }
18
+ sql += ' ORDER BY created_at DESC';
19
+ return db.prepare(sql).all(...params);
20
+ }
21
+ export function getSquadCostSummary(db, squadCode, since) {
22
+ const costs = getSquadCosts(db, squadCode, { since });
23
+ const byAgent = {};
24
+ const byModel = {};
25
+ let totalCostUsd = 0;
26
+ for (const row of costs) {
27
+ totalCostUsd += row.estimated_cost_usd;
28
+ byAgent[row.agent_id] = (byAgent[row.agent_id] ?? 0) + row.estimated_cost_usd;
29
+ byModel[row.model] = (byModel[row.model] ?? 0) + row.estimated_cost_usd;
30
+ }
31
+ return { totalCostUsd, entryCount: costs.length, byAgent, byModel };
32
+ }
33
+ export function checkBudget(db, squadCode, budget, agentId) {
34
+ const now = new Date();
35
+ const monthStart = new Date(now.getFullYear(), now.getMonth(), 1).toISOString();
36
+ if (agentId && budget.agentBudgets?.[agentId] !== undefined) {
37
+ const agentCosts = getSquadCosts(db, squadCode, { agentId, since: monthStart });
38
+ const used = agentCosts.reduce((sum, c) => sum + c.estimated_cost_usd, 0);
39
+ const limit = budget.agentBudgets[agentId];
40
+ if (used >= limit)
41
+ return { status: 'blocked', usedUsd: used, limitUsd: limit, message: `Agent "${agentId}" exceeded monthly budget` };
42
+ const threshold = budget.alertThreshold ?? 0.8;
43
+ if (used >= limit * threshold)
44
+ return { status: 'warn', usedUsd: used, limitUsd: limit, message: `Agent "${agentId}" at ${Math.round((used / limit) * 100)}% of budget` };
45
+ }
46
+ if (budget.monthlyBudget !== undefined) {
47
+ const allCosts = getSquadCosts(db, squadCode, { since: monthStart });
48
+ const used = allCosts.reduce((sum, c) => sum + c.estimated_cost_usd, 0);
49
+ const limit = budget.monthlyBudget;
50
+ if (used >= limit)
51
+ return { status: 'blocked', usedUsd: used, limitUsd: limit, message: 'Squad exceeded monthly budget' };
52
+ const threshold = budget.alertThreshold ?? 0.8;
53
+ if (used >= limit * threshold)
54
+ return { status: 'warn', usedUsd: used, limitUsd: limit, message: `Squad at ${Math.round((used / limit) * 100)}% of budget` };
55
+ return { status: 'ok', usedUsd: used, limitUsd: limit };
56
+ }
57
+ return { status: 'ok', usedUsd: 0, limitUsd: null };
58
+ }
59
+ //# sourceMappingURL=cost-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-service.js","sourceRoot":"","sources":["../../src/services/cost-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface ExecutionLogChunk {
3
+ activityId: string;
4
+ squadCode: string;
5
+ chunk: string;
6
+ source?: string;
7
+ }
8
+ export interface ExecutionLogRow {
9
+ id: number;
10
+ activity_id: string;
11
+ squad_code: string;
12
+ chunk: string;
13
+ source: string;
14
+ created_at: string;
15
+ }
16
+ export declare function appendExecutionLog(db: Database.Database, entry: ExecutionLogChunk): void;
17
+ export declare function getExecutionLogs(db: Database.Database, activityId: string): ExecutionLogRow[];
18
+ export declare function getExecutionLogText(db: Database.Database, activityId: string): string;
19
+ export declare function pruneExecutionLogs(db: Database.Database, keepDays?: number): number;
20
+ //# sourceMappingURL=execution-log-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-log-service.d.ts","sourceRoot":"","sources":["../../src/services/execution-log-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAKxF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAI7F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,CAIvF"}
@@ -0,0 +1,17 @@
1
+ export function appendExecutionLog(db, entry) {
2
+ const now = new Date().toISOString();
3
+ db.prepare('INSERT INTO execution_logs (activity_id, squad_code, chunk, source, created_at) VALUES (?, ?, ?, ?, ?)').run(entry.activityId, entry.squadCode, entry.chunk, entry.source ?? 'output', now);
4
+ }
5
+ export function getExecutionLogs(db, activityId) {
6
+ return db.prepare('SELECT * FROM execution_logs WHERE activity_id = ? ORDER BY created_at ASC, id ASC').all(activityId);
7
+ }
8
+ export function getExecutionLogText(db, activityId) {
9
+ const rows = getExecutionLogs(db, activityId);
10
+ return rows.map((r) => r.chunk).join('');
11
+ }
12
+ export function pruneExecutionLogs(db, keepDays = 30) {
13
+ const cutoff = new Date(Date.now() - keepDays * 24 * 60 * 60 * 1000).toISOString();
14
+ const result = db.prepare('DELETE FROM execution_logs WHERE created_at < ?').run(cutoff);
15
+ return result.changes;
16
+ }
17
+ //# sourceMappingURL=execution-log-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-log-service.js","sourceRoot":"","sources":["../../src/services/execution-log-service.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,KAAwB;IAChF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,EAAE,CAAC,OAAO,CACR,wGAAwG,CACzG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,GAAG,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAqB,EAAE,UAAkB;IACxE,OAAO,EAAE,CAAC,OAAO,CACf,oFAAoF,CACrF,CAAC,GAAG,CAAC,UAAU,CAAsB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAqB,EAAE,UAAkB;IAC3E,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,WAAmB,EAAE;IAC7E,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ProviderDefinition } from '../api/integration-routes.js';
2
+ export declare class IntegrationRegistry {
3
+ private definitions;
4
+ register(def: ProviderDefinition): void;
5
+ list(): ProviderDefinition[];
6
+ get(key: string): ProviderDefinition | undefined;
7
+ }
8
+ export declare const integrationRegistry: IntegrationRegistry;
9
+ //# sourceMappingURL=integration-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-registry.d.ts","sourceRoot":"","sources":["../../src/services/integration-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAyC;IAE5D,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAIvC,IAAI,IAAI,kBAAkB,EAAE;IAI5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;CAGjD;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export class IntegrationRegistry {
2
+ definitions = new Map();
3
+ register(def) {
4
+ this.definitions.set(def.key, def);
5
+ }
6
+ list() {
7
+ return [...this.definitions.values()];
8
+ }
9
+ get(key) {
10
+ return this.definitions.get(key);
11
+ }
12
+ }
13
+ export const integrationRegistry = new IntegrationRegistry();
14
+ //# sourceMappingURL=integration-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-registry.js","sourceRoot":"","sources":["../../src/services/integration-registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IACtB,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE5D,QAAQ,CAAC,GAAuB;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type Database from 'better-sqlite3';
2
+ export type LogLevel = 'info' | 'warn' | 'error';
3
+ export interface LogEntry {
4
+ level: LogLevel;
5
+ squadCode?: string;
6
+ source: string;
7
+ message: string;
8
+ detail?: string;
9
+ }
10
+ export interface LogRow {
11
+ id: number;
12
+ level: string;
13
+ squad_code: string | null;
14
+ source: string;
15
+ message: string;
16
+ detail: string | null;
17
+ created_at: string;
18
+ }
19
+ export declare function persistLog(db: Database.Database, entry: LogEntry): number;
20
+ export declare function getLogs(db: Database.Database, opts?: {
21
+ level?: LogLevel;
22
+ squadCode?: string;
23
+ since?: string;
24
+ limit?: number;
25
+ search?: string;
26
+ }): LogRow[];
27
+ export declare function pruneOldLogs(db: Database.Database, keepDays?: number): number;
28
+ //# sourceMappingURL=log-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-service.d.ts","sourceRoot":"","sources":["../../src/services/log-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAMzE;AAED,wBAAgB,OAAO,CACrB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/F,MAAM,EAAE,CAyBV;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAIhF"}
@@ -0,0 +1,34 @@
1
+ export function persistLog(db, entry) {
2
+ const now = new Date().toISOString();
3
+ const result = db.prepare('INSERT INTO event_log (level, squad_code, source, message, detail, created_at) VALUES (?, ?, ?, ?, ?, ?)').run(entry.level, entry.squadCode ?? null, entry.source, entry.message, entry.detail ?? null, now);
4
+ return Number(result.lastInsertRowid);
5
+ }
6
+ export function getLogs(db, opts) {
7
+ let sql = 'SELECT * FROM event_log WHERE 1=1';
8
+ const params = [];
9
+ if (opts?.level) {
10
+ sql += ' AND level = ?';
11
+ params.push(opts.level);
12
+ }
13
+ if (opts?.squadCode) {
14
+ sql += ' AND squad_code = ?';
15
+ params.push(opts.squadCode);
16
+ }
17
+ if (opts?.since) {
18
+ sql += ' AND created_at >= ?';
19
+ params.push(opts.since);
20
+ }
21
+ if (opts?.search) {
22
+ sql += ' AND (message LIKE ? OR detail LIKE ?)';
23
+ params.push(`%${opts.search}%`, `%${opts.search}%`);
24
+ }
25
+ sql += ' ORDER BY created_at DESC LIMIT ?';
26
+ params.push(opts?.limit ?? 200);
27
+ return db.prepare(sql).all(...params);
28
+ }
29
+ export function pruneOldLogs(db, keepDays = 7) {
30
+ const cutoff = new Date(Date.now() - keepDays * 24 * 60 * 60 * 1000).toISOString();
31
+ const result = db.prepare('DELETE FROM event_log WHERE created_at < ?').run(cutoff);
32
+ return result.changes;
33
+ }
34
+ //# sourceMappingURL=log-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-service.js","sourceRoot":"","sources":["../../src/services/log-service.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,KAAe;IAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,0GAA0G,CAC3G,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;IACpG,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,EAAqB,EACrB,IAAgG;IAEhG,IAAI,GAAG,GAAG,mCAAmC,CAAC;IAC9C,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,GAAG,IAAI,gBAAgB,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACpB,GAAG,IAAI,qBAAqB,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,GAAG,IAAI,sBAAsB,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,GAAG,IAAI,wCAAwC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,GAAG,IAAI,mCAAmC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAa,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,WAAmB,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type Database from 'better-sqlite3';
2
+ declare const VALID_PAGES: string[];
3
+ export declare function getUserSquads(db: Database.Database, userId: string): string[];
4
+ export declare function getUserPages(db: Database.Database, userId: string): string[];
5
+ export declare function canAccessSquad(db: Database.Database, userId: string, role: string, squadCode: string): boolean;
6
+ export declare function canAccessPage(db: Database.Database, userId: string, role: string, page: string): boolean;
7
+ export declare function setUserSquads(db: Database.Database, userId: string, squadCodes: string[]): void;
8
+ export declare function setUserPages(db: Database.Database, userId: string, pages: string[]): void;
9
+ export { VALID_PAGES };
10
+ //# sourceMappingURL=permissions-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-service.d.ts","sourceRoot":"","sources":["../../src/services/permissions-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,QAAA,MAAM,WAAW,UAIhB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAG7E;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAI9G;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIxG;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAS/F;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUzF;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ const VALID_PAGES = [
2
+ 'office', 'chat', 'kanban', 'marketplace', 'dashboard',
3
+ 'scheduler', 'email', 'orgchart', 'graph', 'files',
4
+ 'knowledge', 'settings', 'logs',
5
+ ];
6
+ export function getUserSquads(db, userId) {
7
+ const rows = db.prepare('SELECT squad_code FROM user_squad_access WHERE user_id = ?').all(userId);
8
+ return rows.map((r) => r.squad_code);
9
+ }
10
+ export function getUserPages(db, userId) {
11
+ const rows = db.prepare('SELECT page FROM user_page_access WHERE user_id = ?').all(userId);
12
+ return rows.map((r) => r.page);
13
+ }
14
+ export function canAccessSquad(db, userId, role, squadCode) {
15
+ if (role === 'admin')
16
+ return true;
17
+ const row = db.prepare('SELECT 1 FROM user_squad_access WHERE user_id = ? AND squad_code = ?').get(userId, squadCode);
18
+ return !!row;
19
+ }
20
+ export function canAccessPage(db, userId, role, page) {
21
+ if (role === 'admin')
22
+ return true;
23
+ const row = db.prepare('SELECT 1 FROM user_page_access WHERE user_id = ? AND page = ?').get(userId, page);
24
+ return !!row;
25
+ }
26
+ export function setUserSquads(db, userId, squadCodes) {
27
+ const tx = db.transaction(() => {
28
+ db.prepare('DELETE FROM user_squad_access WHERE user_id = ?').run(userId);
29
+ const insert = db.prepare('INSERT INTO user_squad_access (user_id, squad_code) VALUES (?, ?)');
30
+ for (const code of squadCodes) {
31
+ insert.run(userId, code);
32
+ }
33
+ });
34
+ tx();
35
+ }
36
+ export function setUserPages(db, userId, pages) {
37
+ const filtered = pages.filter((p) => VALID_PAGES.includes(p));
38
+ const tx = db.transaction(() => {
39
+ db.prepare('DELETE FROM user_page_access WHERE user_id = ?').run(userId);
40
+ const insert = db.prepare('INSERT INTO user_page_access (user_id, page) VALUES (?, ?)');
41
+ for (const page of filtered) {
42
+ insert.run(userId, page);
43
+ }
44
+ });
45
+ tx();
46
+ }
47
+ export { VALID_PAGES };
48
+ //# sourceMappingURL=permissions-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-service.js","sourceRoot":"","sources":["../../src/services/permissions-service.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW;IACtD,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IAClD,WAAW,EAAE,UAAU,EAAE,MAAM;CAChC,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,MAAc;IACjE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,CAAC,MAAM,CAA6B,CAAC;IAC9H,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,MAAc;IAChE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAuB,CAAC;IACjH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAqB,EAAE,MAAc,EAAE,IAAY,EAAE,SAAiB;IACnG,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtH,OAAO,CAAC,CAAC,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,MAAc,EAAE,IAAY,EAAE,IAAY;IAC7F,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1G,OAAO,CAAC,CAAC,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,MAAc,EAAE,UAAoB;IACvF,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC,CAAC;QAC/F,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,EAAE,EAAE,CAAC;AACP,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,MAAc,EAAE,KAAe;IACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC;QACxF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,EAAE,EAAE,CAAC;AACP,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface PipelineStep {
3
+ id: string;
4
+ label: string;
5
+ agentId: string | null;
6
+ agentName: string | null;
7
+ type?: 'agent' | 'checkpoint';
8
+ }
9
+ export interface CreatePipelineTasksParams {
10
+ squadCode: string;
11
+ activityId: string;
12
+ triggeredBy: 'dashboard' | 'chat' | 'schedule' | 'chain';
13
+ steps: PipelineStep[];
14
+ }
15
+ export interface KanbanTaskRow {
16
+ id: string;
17
+ squad_code: string;
18
+ title: string;
19
+ description: string | null;
20
+ status: string;
21
+ position: number;
22
+ result: string | null;
23
+ started_at: string | null;
24
+ finished_at: string | null;
25
+ step_id: string | null;
26
+ agent_id: string | null;
27
+ agent_name: string | null;
28
+ activity_id: string | null;
29
+ triggered_by: string;
30
+ created_at: string;
31
+ updated_at: string;
32
+ }
33
+ export declare function createPipelineTasks(db: Database.Database, params: CreatePipelineTasksParams): KanbanTaskRow[];
34
+ export declare function markTaskExecuting(db: Database.Database, params: {
35
+ activityId: string;
36
+ stepId: string;
37
+ }): void;
38
+ export declare function markTaskDone(db: Database.Database, params: {
39
+ activityId: string;
40
+ stepId: string;
41
+ result?: string;
42
+ }): void;
43
+ export declare function markTaskFailed(db: Database.Database, params: {
44
+ activityId: string;
45
+ stepId: string;
46
+ error?: string;
47
+ }): void;
48
+ /**
49
+ * Get the active (running) activity ID for a squad.
50
+ */
51
+ export declare function getActiveActivityId(db: Database.Database, squadCode: string): string | null;
52
+ /**
53
+ * Mark a task as executing by its pipeline position (0-based index).
54
+ */
55
+ export declare function markTaskExecutingByPosition(db: Database.Database, params: {
56
+ activityId: string;
57
+ position: number;
58
+ }): void;
59
+ /**
60
+ * Mark a task as done by its pipeline position (0-based index).
61
+ */
62
+ export declare function markTaskDoneByPosition(db: Database.Database, params: {
63
+ activityId: string;
64
+ position: number;
65
+ }): void;
66
+ export declare function markAllTasksDone(db: Database.Database, params: {
67
+ activityId: string;
68
+ result?: string;
69
+ }): void;
70
+ export declare function markAllTasksFailed(db: Database.Database, params: {
71
+ activityId: string;
72
+ error?: string;
73
+ }): void;
74
+ /**
75
+ * Parse squad.yaml and create pipeline tasks for an activity.
76
+ * Returns empty array if no pipeline steps found or yaml is missing.
77
+ */
78
+ export declare function createPipelineTasksFromYaml(db: Database.Database, squadsDir: string, squadName: string, activityId: string, triggeredBy: 'dashboard' | 'chat' | 'schedule' | 'chain'): KanbanTaskRow[];
79
+ //# sourceMappingURL=pipeline-task-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-task-service.d.ts","sourceRoot":"","sources":["../../src/services/pipeline-task-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import crypto from 'node:crypto';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import YAML from 'yaml';
5
+ import { findSquadDir } from './squad-registry.js';
6
+ export function createPipelineTasks(db, params) {
7
+ const now = new Date().toISOString();
8
+ const tasks = [];
9
+ const insert = db.prepare(`INSERT INTO kanban_tasks
10
+ (id, squad_code, title, description, status, position, step_id, agent_id, agent_name, activity_id, triggered_by, created_at, updated_at)
11
+ VALUES (?, ?, ?, NULL, 'planned', ?, ?, ?, ?, ?, ?, ?, ?)`);
12
+ for (let i = 0; i < params.steps.length; i++) {
13
+ const step = params.steps[i];
14
+ const id = crypto.randomUUID();
15
+ insert.run(id, params.squadCode, step.label, i, step.id, step.agentId, step.agentName, params.activityId, params.triggeredBy, now, now);
16
+ tasks.push({
17
+ id,
18
+ squad_code: params.squadCode,
19
+ title: step.label,
20
+ description: null,
21
+ status: 'planned',
22
+ position: i,
23
+ result: null,
24
+ started_at: null,
25
+ finished_at: null,
26
+ step_id: step.id,
27
+ agent_id: step.agentId,
28
+ agent_name: step.agentName,
29
+ activity_id: params.activityId,
30
+ triggered_by: params.triggeredBy,
31
+ created_at: now,
32
+ updated_at: now,
33
+ });
34
+ }
35
+ return tasks;
36
+ }
37
+ export function markTaskExecuting(db, params) {
38
+ const now = new Date().toISOString();
39
+ db.prepare(`UPDATE kanban_tasks SET status = 'executing', started_at = ?, updated_at = ?
40
+ WHERE activity_id = ? AND step_id = ?`).run(now, now, params.activityId, params.stepId);
41
+ }
42
+ export function markTaskDone(db, params) {
43
+ const now = new Date().toISOString();
44
+ db.prepare(`UPDATE kanban_tasks SET status = 'done', finished_at = ?, result = ?, updated_at = ?
45
+ WHERE activity_id = ? AND step_id = ?`).run(now, params.result ?? null, now, params.activityId, params.stepId);
46
+ }
47
+ export function markTaskFailed(db, params) {
48
+ const now = new Date().toISOString();
49
+ db.prepare(`UPDATE kanban_tasks SET status = 'failed', finished_at = ?, result = ?, updated_at = ?
50
+ WHERE activity_id = ? AND step_id = ?`).run(now, params.error ?? null, now, params.activityId, params.stepId);
51
+ }
52
+ /**
53
+ * Get the active (running) activity ID for a squad.
54
+ */
55
+ export function getActiveActivityId(db, squadCode) {
56
+ const row = db.prepare(`SELECT id FROM squad_activities WHERE squad_code = ? AND status = 'running' ORDER BY started_at DESC LIMIT 1`).get(squadCode);
57
+ return row?.id ?? null;
58
+ }
59
+ /**
60
+ * Mark a task as executing by its pipeline position (0-based index).
61
+ */
62
+ export function markTaskExecutingByPosition(db, params) {
63
+ const now = new Date().toISOString();
64
+ db.prepare(`UPDATE kanban_tasks SET status = 'executing', started_at = ?, updated_at = ?
65
+ WHERE activity_id = ? AND position = ? AND status = 'planned'`).run(now, now, params.activityId, params.position);
66
+ }
67
+ /**
68
+ * Mark a task as done by its pipeline position (0-based index).
69
+ */
70
+ export function markTaskDoneByPosition(db, params) {
71
+ const now = new Date().toISOString();
72
+ db.prepare(`UPDATE kanban_tasks SET status = 'done', finished_at = ?, updated_at = ?
73
+ WHERE activity_id = ? AND position = ? AND status = 'executing'`).run(now, now, params.activityId, params.position);
74
+ }
75
+ export function markAllTasksDone(db, params) {
76
+ const now = new Date().toISOString();
77
+ db.prepare(`UPDATE kanban_tasks SET status = 'done', finished_at = ?, result = COALESCE(result, ?), updated_at = ?
78
+ WHERE activity_id = ? AND status IN ('planned', 'executing')`).run(now, params.result ?? null, now, params.activityId);
79
+ }
80
+ export function markAllTasksFailed(db, params) {
81
+ const now = new Date().toISOString();
82
+ db.prepare(`UPDATE kanban_tasks SET status = 'failed', finished_at = ?, result = ?, updated_at = ?
83
+ WHERE activity_id = ? AND status IN ('planned', 'executing')`).run(now, params.error ?? null, now, params.activityId);
84
+ }
85
+ /**
86
+ * Parse squad.yaml and create pipeline tasks for an activity.
87
+ * Returns empty array if no pipeline steps found or yaml is missing.
88
+ */
89
+ export function createPipelineTasksFromYaml(db, squadsDir, squadName, activityId, triggeredBy) {
90
+ try {
91
+ const squadDir = findSquadDir(squadsDir, squadName);
92
+ const yamlPath = squadDir ? path.join(squadDir, 'squad.yaml') : path.join(squadsDir, squadName, 'squad.yaml');
93
+ if (!fs.existsSync(yamlPath))
94
+ return [];
95
+ const raw = fs.readFileSync(yamlPath, 'utf-8');
96
+ const parsed = YAML.parse(raw);
97
+ const squad = parsed?.squad;
98
+ if (!squad?.pipeline?.steps)
99
+ return [];
100
+ const agents = new Map();
101
+ if (Array.isArray(squad.agents)) {
102
+ for (const a of squad.agents) {
103
+ agents.set(a.id, { id: a.id, name: a.name || a.id });
104
+ }
105
+ }
106
+ const steps = squad.pipeline.steps.map((s) => {
107
+ const agent = s.agent ? agents.get(s.agent) : null;
108
+ return {
109
+ id: s.id,
110
+ label: s.label || s.id,
111
+ agentId: agent?.id ?? null,
112
+ agentName: agent?.name ?? null,
113
+ type: s.type === 'checkpoint' ? 'checkpoint' : 'agent',
114
+ };
115
+ });
116
+ return createPipelineTasks(db, { squadCode: squadName, activityId, triggeredBy, steps });
117
+ }
118
+ catch {
119
+ return [];
120
+ }
121
+ }
122
+ //# sourceMappingURL=pipeline-task-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-task-service.js","sourceRoot":"","sources":["../../src/services/pipeline-task-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface SquadFile {
2
+ path: string;
3
+ content: string;
4
+ }
5
+ export interface SquadManifest {
6
+ code: string;
7
+ name: string;
8
+ description: string;
9
+ icon: string;
10
+ version: string;
11
+ category: string;
12
+ tags: string[];
13
+ author?: string;
14
+ license?: string;
15
+ }
16
+ /**
17
+ * Recursively find all squad directories (containing squad.yaml) under squadsDir.
18
+ * Returns array of { code, dir } where dir is the absolute path.
19
+ */
20
+ export declare function discoverSquadDirs(squadsDir: string): Array<{
21
+ code: string;
22
+ dir: string;
23
+ }>;
24
+ /**
25
+ * Find the directory for a squad by its code, searching recursively.
26
+ */
27
+ export declare function findSquadDir(squadsDir: string, code: string): string | null;
28
+ export declare function readSquadManifest(squadDir: string): SquadManifest;
29
+ export declare function collectSquadFiles(squadDir: string): SquadFile[];
30
+ export declare function validateSquadForPublish(squadDir: string): {
31
+ valid: boolean;
32
+ errors: string[];
33
+ };
34
+ export declare function extractSquadToDir(files: SquadFile[], targetDir: string): void;
35
+ //# sourceMappingURL=squad-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"squad-registry.d.ts","sourceRoot":"","sources":["../../src/services/squad-registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BzF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAyBjE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAsB/D;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC9F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAS7E"}