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.
- package/assets/agents/_catalog.yaml +35 -0
- package/assets/agents/accounting/accountant.agent.md +41 -0
- package/assets/agents/accounting/audit-analyst.agent.md +41 -0
- package/assets/agents/accounting/financial-reporting.agent.md +41 -0
- package/assets/agents/accounting/fiscal-analyst.agent.md +41 -0
- package/assets/agents/accounting/payroll-specialist.agent.md +41 -0
- package/assets/agents/accounting/tax-compliance.agent.md +41 -0
- package/assets/agents/administrative/document-controller.agent.md +41 -0
- package/assets/agents/administrative/office-manager.agent.md +41 -0
- package/assets/agents/administrative/process-documentation-officer.agent.md +41 -0
- package/assets/agents/administrative/procurement-specialist.agent.md +41 -0
- package/assets/agents/board/board-report-writer.agent.md +41 -0
- package/assets/agents/board/business-intelligence.agent.md +41 -0
- package/assets/agents/board/governance-officer.agent.md +41 -0
- package/assets/agents/board/okr-manager.agent.md +41 -0
- package/assets/agents/board/risk-analyst.agent.md +41 -0
- package/assets/agents/board/strategic-advisor.agent.md +41 -0
- package/assets/agents/commercial/account-executive.agent.md +41 -0
- package/assets/agents/commercial/crm-manager.agent.md +41 -0
- package/assets/agents/commercial/pricing-strategist.agent.md +41 -0
- package/assets/agents/commercial/proposal-writer.agent.md +41 -0
- package/assets/agents/commercial/sdr.agent.md +41 -0
- package/assets/agents/compliance/compliance-officer.agent.md +41 -0
- package/assets/agents/compliance/data-privacy-specialist.agent.md +41 -0
- package/assets/agents/compliance/internal-auditor.agent.md +41 -0
- package/assets/agents/compliance/regulatory-monitor.agent.md +41 -0
- package/assets/agents/customer-success/churn-prevention.agent.md +41 -0
- package/assets/agents/customer-success/csm.agent.md +41 -0
- package/assets/agents/customer-success/expansion-manager.agent.md +41 -0
- package/assets/agents/customer-success/nps-analyst.agent.md +41 -0
- package/assets/agents/customer-success/renewal-manager.agent.md +41 -0
- package/assets/agents/development/android-developer.agent.md +41 -0
- package/assets/agents/development/backend-developer.agent.md +42 -0
- package/assets/agents/development/business-analyst.agent.md +41 -0
- package/assets/agents/development/code-reviewer.agent.md +41 -0
- package/assets/agents/development/cross-platform-mobile.agent.md +41 -0
- package/assets/agents/development/dba.agent.md +41 -0
- package/assets/agents/development/desktop-developer.agent.md +41 -0
- package/assets/agents/development/devops-engineer.agent.md +41 -0
- package/assets/agents/development/frontend-developer.agent.md +103 -0
- package/assets/agents/development/ios-developer.agent.md +41 -0
- package/assets/agents/development/product-manager.agent.md +41 -0
- package/assets/agents/development/qa-engineer.agent.md +41 -0
- package/assets/agents/development/scrum-master.agent.md +41 -0
- package/assets/agents/development/security-analyst.agent.md +41 -0
- package/assets/agents/development/tech-lead.agent.md +42 -0
- package/assets/agents/development/tech-writer.agent.md +41 -0
- package/assets/agents/development/ux-design-expert.agent.md +108 -0
- package/assets/agents/development/ux-designer.agent.md +41 -0
- package/assets/agents/finance/accounts-manager.agent.md +41 -0
- package/assets/agents/finance/billing-analyst.agent.md +41 -0
- package/assets/agents/finance/budget-planner.agent.md +41 -0
- package/assets/agents/finance/financial-controller.agent.md +41 -0
- package/assets/agents/hr/benefits-manager.agent.md +41 -0
- package/assets/agents/hr/hr-onboarding.agent.md +41 -0
- package/assets/agents/hr/interview-coordinator.agent.md +41 -0
- package/assets/agents/hr/people-culture.agent.md +41 -0
- package/assets/agents/hr/performance-analyst.agent.md +41 -0
- package/assets/agents/hr/recruiter.agent.md +41 -0
- package/assets/agents/implantation/deployment-manager.agent.md +41 -0
- package/assets/agents/implantation/environment-specialist.agent.md +41 -0
- package/assets/agents/implantation/go-live-coordinator.agent.md +41 -0
- package/assets/agents/implantation/integration-specialist.agent.md +41 -0
- package/assets/agents/implantation/migration-specialist.agent.md +41 -0
- package/assets/agents/legal/contract-manager.agent.md +41 -0
- package/assets/agents/legal/ip-specialist.agent.md +41 -0
- package/assets/agents/legal/labor-attorney.agent.md +41 -0
- package/assets/agents/legal/legal-counsel.agent.md +41 -0
- package/assets/agents/marketing/brand-guardian.agent.md +40 -0
- package/assets/agents/marketing/content-creator.agent.md +41 -0
- package/assets/agents/marketing/email-marketing.agent.md +41 -0
- package/assets/agents/marketing/landing-page-builder.agent.md +138 -0
- package/assets/agents/marketing/marketing-analyst.agent.md +41 -0
- package/assets/agents/marketing/paid-ads-manager.agent.md +41 -0
- package/assets/agents/marketing/seo-specialist.agent.md +41 -0
- package/assets/agents/marketing/social-media-manager.agent.md +41 -0
- package/assets/agents/rnd/benchmark-analyst.agent.md +41 -0
- package/assets/agents/rnd/innovation-scout.agent.md +41 -0
- package/assets/agents/rnd/market-researcher.agent.md +41 -0
- package/assets/agents/rnd/product-analyst.agent.md +41 -0
- package/assets/agents/rnd/prototype-builder.agent.md +41 -0
- package/assets/agents/support/knowledge-base-manager.agent.md +41 -0
- package/assets/agents/support/l1-support.agent.md +41 -0
- package/assets/agents/support/l2-support.agent.md +41 -0
- package/assets/agents/support/l3-support.agent.md +41 -0
- package/assets/agents/support/sla-monitor.agent.md +41 -0
- package/assets/agents/training/assessment-creator.agent.md +41 -0
- package/assets/agents/training/onboarding-coach.agent.md +41 -0
- package/assets/agents/training/training-designer.agent.md +41 -0
- package/assets/agents/training/workshop-facilitator.agent.md +41 -0
- package/assets/core/best-practices/_catalog.yaml +91 -0
- package/assets/core/best-practices/api-documentation.md +137 -0
- package/assets/core/best-practices/blog-post.md +86 -0
- package/assets/core/best-practices/blog-seo.md +91 -0
- package/assets/core/best-practices/code-review.md +97 -0
- package/assets/core/best-practices/copywriting.md +75 -0
- package/assets/core/best-practices/data-analysis.md +93 -0
- package/assets/core/best-practices/deploy-checklist.md +99 -0
- package/assets/core/best-practices/email-newsletter.md +84 -0
- package/assets/core/best-practices/email-sales.md +91 -0
- package/assets/core/best-practices/fullstack-page-generation.md +936 -0
- package/assets/core/best-practices/image-design.md +78 -0
- package/assets/core/best-practices/instagram-feed.md +70 -0
- package/assets/core/best-practices/instagram-reels.md +75 -0
- package/assets/core/best-practices/instagram-stories.md +68 -0
- package/assets/core/best-practices/landing-page-react.md +2263 -0
- package/assets/core/best-practices/landing-page.md +279 -0
- package/assets/core/best-practices/linkedin-article.md +83 -0
- package/assets/core/best-practices/linkedin-post.md +84 -0
- package/assets/core/best-practices/researching.md +89 -0
- package/assets/core/best-practices/review.md +95 -0
- package/assets/core/best-practices/sprint-planning.md +91 -0
- package/assets/core/best-practices/strategist.md +95 -0
- package/assets/core/best-practices/technical-writing.md +104 -0
- package/assets/core/best-practices/twitter-post.md +75 -0
- package/assets/core/best-practices/twitter-thread.md +92 -0
- package/assets/core/best-practices/whatsapp-broadcast.md +95 -0
- package/assets/core/best-practices/youtube-script.md +80 -0
- package/assets/core/best-practices/youtube-shorts.md +76 -0
- package/assets/core/prompts/insight-hunter.prompt.md +62 -0
- package/assets/core/runner.pipeline.md +200 -0
- package/assets/core/skills.engine.md +65 -0
- package/assets/core/solution-architect.agent.md +329 -0
- package/assets/mcps/_catalog.yaml +17 -0
- package/assets/mcps/figma.mcp.yaml +35 -0
- package/assets/mcps/github.mcp.yaml +44 -0
- package/assets/mcps/linear.mcp.yaml +37 -0
- package/assets/mcps/notion.mcp.yaml +37 -0
- package/assets/mcps/pencil.mcp.yaml +32 -0
- package/assets/mcps/postgresql.mcp.yaml +39 -0
- package/assets/mcps/sentry.mcp.yaml +41 -0
- package/assets/mcps/slack.mcp.yaml +37 -0
- package/assets/mcps/vercel.mcp.yaml +39 -0
- package/assets/templates/_expxagents/_memory/company.md +25 -0
- package/assets/templates/_expxagents/_memory/preferences.md +6 -0
- package/assets/templates/squads/_memory/memories.md +16 -0
- package/dist/dashboard/assets/BufferResource-D79vaoFm.js +185 -0
- package/dist/dashboard/assets/CanvasRenderer-BUoxTNKV.js +1 -0
- package/dist/dashboard/assets/JarvisView-DSN7xWMz.js +1 -0
- package/dist/dashboard/assets/RenderTargetSystem-B7rwTXA1.js +172 -0
- package/dist/dashboard/assets/ThreeBackground-BQTdScX-.js +1 -0
- package/dist/dashboard/assets/WebGLRenderer-DgdVNsZ9.js +156 -0
- package/dist/dashboard/assets/WebGPURenderer-DnQNvjEQ.js +41 -0
- package/dist/dashboard/assets/browserAll-Cbsk7DE4.js +14 -0
- package/dist/dashboard/assets/index-CrlhoBta.js +783 -0
- package/dist/dashboard/assets/index-DtbIzZ5n.css +1 -0
- package/dist/dashboard/assets/three-BZk_I9Ly.js +4057 -0
- package/dist/dashboard/assets/webworkerAll-BLmfReEj.js +83 -0
- package/dist/dashboard/index.html +13 -0
- package/dist/server/api/__tests__/cost-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/cost-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/cost-routes.test.js +54 -0
- package/dist/server/api/__tests__/cost-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/files-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/files-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/files-routes.test.js +85 -0
- package/dist/server/api/__tests__/files-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/graph-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/graph-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/graph-routes.test.js +105 -0
- package/dist/server/api/__tests__/graph-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/health-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/health-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/health-routes.test.js +22 -0
- package/dist/server/api/__tests__/health-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/integration-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/integration-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/integration-routes.test.js +243 -0
- package/dist/server/api/__tests__/integration-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/kanban-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/kanban-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/kanban-routes.test.js +316 -0
- package/dist/server/api/__tests__/kanban-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/log-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/log-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/log-routes.test.js +35 -0
- package/dist/server/api/__tests__/log-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/orgchart-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/orgchart-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/orgchart-routes.test.js +161 -0
- package/dist/server/api/__tests__/orgchart-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/settings-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/settings-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/settings-routes.test.js +177 -0
- package/dist/server/api/__tests__/settings-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/system-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/system-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/system-routes.test.js +79 -0
- package/dist/server/api/__tests__/system-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/team-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/team-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/team-routes.test.js +116 -0
- package/dist/server/api/__tests__/team-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/webhook-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/webhook-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/webhook-routes.test.js +111 -0
- package/dist/server/api/__tests__/webhook-routes.test.js.map +1 -0
- package/dist/server/api/activity-routes.d.ts +8 -0
- package/dist/server/api/activity-routes.d.ts.map +1 -0
- package/dist/server/api/activity-routes.js +34 -0
- package/dist/server/api/activity-routes.js.map +1 -0
- package/dist/server/api/chat-api-routes.d.ts +4 -0
- package/dist/server/api/chat-api-routes.d.ts.map +1 -0
- package/dist/server/api/chat-api-routes.js +28 -0
- package/dist/server/api/chat-api-routes.js.map +1 -0
- package/dist/server/api/cost-routes.d.ts +8 -0
- package/dist/server/api/cost-routes.d.ts.map +1 -0
- package/dist/server/api/cost-routes.js +39 -0
- package/dist/server/api/cost-routes.js.map +1 -0
- package/dist/server/api/dashboard-routes.d.ts +10 -0
- package/dist/server/api/dashboard-routes.d.ts.map +1 -0
- package/dist/server/api/dashboard-routes.js +128 -0
- package/dist/server/api/dashboard-routes.js.map +1 -0
- package/dist/server/api/files-routes.d.ts +5 -0
- package/dist/server/api/files-routes.d.ts.map +1 -0
- package/dist/server/api/files-routes.js +218 -0
- package/dist/server/api/files-routes.js.map +1 -0
- package/dist/server/api/graph-routes.d.ts +24 -0
- package/dist/server/api/graph-routes.d.ts.map +1 -0
- package/dist/server/api/graph-routes.js +208 -0
- package/dist/server/api/graph-routes.js.map +1 -0
- package/dist/server/api/health-routes.d.ts +9 -0
- package/dist/server/api/health-routes.d.ts.map +1 -0
- package/dist/server/api/health-routes.js +46 -0
- package/dist/server/api/health-routes.js.map +1 -0
- package/dist/server/api/integration-routes.d.ts +23 -0
- package/dist/server/api/integration-routes.d.ts.map +1 -0
- package/dist/server/api/integration-routes.js +326 -0
- package/dist/server/api/integration-routes.js.map +1 -0
- package/dist/server/api/kanban-routes.d.ts +8 -0
- package/dist/server/api/kanban-routes.d.ts.map +1 -0
- package/dist/server/api/kanban-routes.js +128 -0
- package/dist/server/api/kanban-routes.js.map +1 -0
- package/dist/server/api/knowledge-routes.d.ts +8 -0
- package/dist/server/api/knowledge-routes.d.ts.map +1 -0
- package/dist/server/api/knowledge-routes.js +82 -0
- package/dist/server/api/knowledge-routes.js.map +1 -0
- package/dist/server/api/log-routes.d.ts +8 -0
- package/dist/server/api/log-routes.d.ts.map +1 -0
- package/dist/server/api/log-routes.js +31 -0
- package/dist/server/api/log-routes.js.map +1 -0
- package/dist/server/api/orgchart-routes.d.ts +7 -0
- package/dist/server/api/orgchart-routes.d.ts.map +1 -0
- package/dist/server/api/orgchart-routes.js +154 -0
- package/dist/server/api/orgchart-routes.js.map +1 -0
- package/dist/server/api/permissions-routes.d.ts +8 -0
- package/dist/server/api/permissions-routes.d.ts.map +1 -0
- package/dist/server/api/permissions-routes.js +37 -0
- package/dist/server/api/permissions-routes.js.map +1 -0
- package/dist/server/api/registry-routes.d.ts +7 -0
- package/dist/server/api/registry-routes.d.ts.map +1 -0
- package/dist/server/api/registry-routes.js +51 -0
- package/dist/server/api/registry-routes.js.map +1 -0
- package/dist/server/api/settings-routes.d.ts +11 -0
- package/dist/server/api/settings-routes.d.ts.map +1 -0
- package/dist/server/api/settings-routes.js +167 -0
- package/dist/server/api/settings-routes.js.map +1 -0
- package/dist/server/api/squads-routes.d.ts +9 -0
- package/dist/server/api/squads-routes.d.ts.map +1 -0
- package/dist/server/api/squads-routes.js +171 -0
- package/dist/server/api/squads-routes.js.map +1 -0
- package/dist/server/api/system-routes.d.ts +9 -0
- package/dist/server/api/system-routes.d.ts.map +1 -0
- package/dist/server/api/system-routes.js +241 -0
- package/dist/server/api/system-routes.js.map +1 -0
- package/dist/server/api/team-routes.d.ts +8 -0
- package/dist/server/api/team-routes.d.ts.map +1 -0
- package/dist/server/api/team-routes.js +55 -0
- package/dist/server/api/team-routes.js.map +1 -0
- package/dist/server/api/users-routes.d.ts +8 -0
- package/dist/server/api/users-routes.d.ts.map +1 -0
- package/dist/server/api/users-routes.js +65 -0
- package/dist/server/api/users-routes.js.map +1 -0
- package/dist/server/api/webhook-routes.d.ts +9 -0
- package/dist/server/api/webhook-routes.d.ts.map +1 -0
- package/dist/server/api/webhook-routes.js +82 -0
- package/dist/server/api/webhook-routes.js.map +1 -0
- package/dist/server/app.d.ts +9 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +265 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/auth/auth-middleware.d.ts +13 -0
- package/dist/server/auth/auth-middleware.d.ts.map +1 -0
- package/dist/server/auth/auth-middleware.js +25 -0
- package/dist/server/auth/auth-middleware.js.map +1 -0
- package/dist/server/auth/auth-routes.d.ts +9 -0
- package/dist/server/auth/auth-routes.d.ts.map +1 -0
- package/dist/server/auth/auth-routes.js +152 -0
- package/dist/server/auth/auth-routes.js.map +1 -0
- package/dist/server/auth/jwt.d.ts +14 -0
- package/dist/server/auth/jwt.d.ts.map +1 -0
- package/dist/server/auth/jwt.js +16 -0
- package/dist/server/auth/jwt.js.map +1 -0
- package/dist/server/auth/password.d.ts +3 -0
- package/dist/server/auth/password.d.ts.map +1 -0
- package/dist/server/auth/password.js +9 -0
- package/dist/server/auth/password.js.map +1 -0
- package/dist/server/bridge/__tests__/chat-handler.test.d.ts +2 -0
- package/dist/server/bridge/__tests__/chat-handler.test.d.ts.map +1 -0
- package/dist/server/bridge/__tests__/chat-handler.test.js +143 -0
- package/dist/server/bridge/__tests__/chat-handler.test.js.map +1 -0
- package/dist/server/bridge/__tests__/chat-integration.test.d.ts +2 -0
- package/dist/server/bridge/__tests__/chat-integration.test.d.ts.map +1 -0
- package/dist/server/bridge/__tests__/chat-integration.test.js +129 -0
- package/dist/server/bridge/__tests__/chat-integration.test.js.map +1 -0
- package/dist/server/bridge/__tests__/claude-bridge.test.d.ts +2 -0
- package/dist/server/bridge/__tests__/claude-bridge.test.d.ts.map +1 -0
- package/dist/server/bridge/__tests__/claude-bridge.test.js +300 -0
- package/dist/server/bridge/__tests__/claude-bridge.test.js.map +1 -0
- package/dist/server/bridge/__tests__/conversation.test.d.ts +2 -0
- package/dist/server/bridge/__tests__/conversation.test.d.ts.map +1 -0
- package/dist/server/bridge/__tests__/conversation.test.js +168 -0
- package/dist/server/bridge/__tests__/conversation.test.js.map +1 -0
- package/dist/server/bridge/__tests__/registry.test.d.ts +2 -0
- package/dist/server/bridge/__tests__/registry.test.d.ts.map +1 -0
- package/dist/server/bridge/__tests__/registry.test.js +45 -0
- package/dist/server/bridge/__tests__/registry.test.js.map +1 -0
- package/dist/server/bridge/__tests__/stream-parser.test.d.ts +2 -0
- package/dist/server/bridge/__tests__/stream-parser.test.d.ts.map +1 -0
- package/dist/server/bridge/__tests__/stream-parser.test.js +66 -0
- package/dist/server/bridge/__tests__/stream-parser.test.js.map +1 -0
- package/dist/server/bridge/chat-handler.d.ts +32 -0
- package/dist/server/bridge/chat-handler.d.ts.map +1 -0
- package/dist/server/bridge/chat-handler.js +356 -0
- package/dist/server/bridge/chat-handler.js.map +1 -0
- package/dist/server/bridge/claude-bridge.d.ts +21 -0
- package/dist/server/bridge/claude-bridge.d.ts.map +1 -0
- package/dist/server/bridge/claude-bridge.js +273 -0
- package/dist/server/bridge/claude-bridge.js.map +1 -0
- package/dist/server/bridge/conversation.d.ts +45 -0
- package/dist/server/bridge/conversation.d.ts.map +1 -0
- package/dist/server/bridge/conversation.js +78 -0
- package/dist/server/bridge/conversation.js.map +1 -0
- package/dist/server/bridge/engine-manager.d.ts +13 -0
- package/dist/server/bridge/engine-manager.d.ts.map +1 -0
- package/dist/server/bridge/engine-manager.js +54 -0
- package/dist/server/bridge/engine-manager.js.map +1 -0
- package/dist/server/bridge/engine.d.ts +37 -0
- package/dist/server/bridge/engine.d.ts.map +1 -0
- package/dist/server/bridge/engine.js +2 -0
- package/dist/server/bridge/engine.js.map +1 -0
- package/dist/server/bridge/factory.d.ts +4 -0
- package/dist/server/bridge/factory.d.ts.map +1 -0
- package/dist/server/bridge/factory.js +18 -0
- package/dist/server/bridge/factory.js.map +1 -0
- package/dist/server/bridge/opencode-bridge.d.ts +27 -0
- package/dist/server/bridge/opencode-bridge.d.ts.map +1 -0
- package/dist/server/bridge/opencode-bridge.js +163 -0
- package/dist/server/bridge/opencode-bridge.js.map +1 -0
- package/dist/server/bridge/registry.d.ts +19 -0
- package/dist/server/bridge/registry.d.ts.map +1 -0
- package/dist/server/bridge/registry.js +29 -0
- package/dist/server/bridge/registry.js.map +1 -0
- package/dist/server/bridge/session-journal.d.ts +25 -0
- package/dist/server/bridge/session-journal.d.ts.map +1 -0
- package/dist/server/bridge/session-journal.js +69 -0
- package/dist/server/bridge/session-journal.js.map +1 -0
- package/dist/server/bridge/stream-parser.d.ts +14 -0
- package/dist/server/bridge/stream-parser.d.ts.map +1 -0
- package/dist/server/bridge/stream-parser.js +26 -0
- package/dist/server/bridge/stream-parser.js.map +1 -0
- package/dist/server/config/engine-config.d.ts +4 -0
- package/dist/server/config/engine-config.d.ts.map +1 -0
- package/dist/server/config/engine-config.js +24 -0
- package/dist/server/config/engine-config.js.map +1 -0
- package/dist/server/config.d.ts +17 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +39 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/db/__tests__/chat-tables.test.d.ts +2 -0
- package/dist/server/db/__tests__/chat-tables.test.d.ts.map +1 -0
- package/dist/server/db/__tests__/chat-tables.test.js +82 -0
- package/dist/server/db/__tests__/chat-tables.test.js.map +1 -0
- package/dist/server/db/__tests__/email-schema.test.d.ts +2 -0
- package/dist/server/db/__tests__/email-schema.test.d.ts.map +1 -0
- package/dist/server/db/__tests__/email-schema.test.js +53 -0
- package/dist/server/db/__tests__/email-schema.test.js.map +1 -0
- package/dist/server/db/__tests__/scheduler-schema.test.d.ts +2 -0
- package/dist/server/db/__tests__/scheduler-schema.test.d.ts.map +1 -0
- package/dist/server/db/__tests__/scheduler-schema.test.js +52 -0
- package/dist/server/db/__tests__/scheduler-schema.test.js.map +1 -0
- package/dist/server/db/connection.d.ts +4 -0
- package/dist/server/db/connection.d.ts.map +1 -0
- package/dist/server/db/connection.js +40 -0
- package/dist/server/db/connection.js.map +1 -0
- package/dist/server/db/migrations.d.ts +4 -0
- package/dist/server/db/migrations.d.ts.map +1 -0
- package/dist/server/db/migrations.js +47 -0
- package/dist/server/db/migrations.js.map +1 -0
- package/dist/server/db/schema.d.ts +2 -0
- package/dist/server/db/schema.d.ts.map +1 -0
- package/dist/server/db/schema.js +288 -0
- package/dist/server/db/schema.js.map +1 -0
- package/dist/server/email/__tests__/campaign-routes.test.d.ts +2 -0
- package/dist/server/email/__tests__/campaign-routes.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/campaign-routes.test.js +216 -0
- package/dist/server/email/__tests__/campaign-routes.test.js.map +1 -0
- package/dist/server/email/__tests__/campaign-service.test.d.ts +2 -0
- package/dist/server/email/__tests__/campaign-service.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/campaign-service.test.js +79 -0
- package/dist/server/email/__tests__/campaign-service.test.js.map +1 -0
- package/dist/server/email/__tests__/email-queue-worker.test.d.ts +2 -0
- package/dist/server/email/__tests__/email-queue-worker.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/email-queue-worker.test.js +93 -0
- package/dist/server/email/__tests__/email-queue-worker.test.js.map +1 -0
- package/dist/server/email/__tests__/email-utils.test.d.ts +2 -0
- package/dist/server/email/__tests__/email-utils.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/email-utils.test.js +36 -0
- package/dist/server/email/__tests__/email-utils.test.js.map +1 -0
- package/dist/server/email/__tests__/lead-routes.test.d.ts +2 -0
- package/dist/server/email/__tests__/lead-routes.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/lead-routes.test.js +180 -0
- package/dist/server/email/__tests__/lead-routes.test.js.map +1 -0
- package/dist/server/email/__tests__/lead-service.test.d.ts +2 -0
- package/dist/server/email/__tests__/lead-service.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/lead-service.test.js +113 -0
- package/dist/server/email/__tests__/lead-service.test.js.map +1 -0
- package/dist/server/email/__tests__/ses-client.test.d.ts +2 -0
- package/dist/server/email/__tests__/ses-client.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/ses-client.test.js +48 -0
- package/dist/server/email/__tests__/ses-client.test.js.map +1 -0
- package/dist/server/email/__tests__/sns-webhook.test.d.ts +2 -0
- package/dist/server/email/__tests__/sns-webhook.test.d.ts.map +1 -0
- package/dist/server/email/__tests__/sns-webhook.test.js +40 -0
- package/dist/server/email/__tests__/sns-webhook.test.js.map +1 -0
- package/dist/server/email/campaign-routes.d.ts +8 -0
- package/dist/server/email/campaign-routes.d.ts.map +1 -0
- package/dist/server/email/campaign-routes.js +65 -0
- package/dist/server/email/campaign-routes.js.map +1 -0
- package/dist/server/email/campaign-service.d.ts +55 -0
- package/dist/server/email/campaign-service.d.ts.map +1 -0
- package/dist/server/email/campaign-service.js +89 -0
- package/dist/server/email/campaign-service.js.map +1 -0
- package/dist/server/email/email-queue-worker.d.ts +27 -0
- package/dist/server/email/email-queue-worker.d.ts.map +1 -0
- package/dist/server/email/email-queue-worker.js +119 -0
- package/dist/server/email/email-queue-worker.js.map +1 -0
- package/dist/server/email/email-utils.d.ts +5 -0
- package/dist/server/email/email-utils.d.ts.map +1 -0
- package/dist/server/email/email-utils.js +24 -0
- package/dist/server/email/email-utils.js.map +1 -0
- package/dist/server/email/lead-routes.d.ts +8 -0
- package/dist/server/email/lead-routes.d.ts.map +1 -0
- package/dist/server/email/lead-routes.js +56 -0
- package/dist/server/email/lead-routes.js.map +1 -0
- package/dist/server/email/lead-service.d.ts +66 -0
- package/dist/server/email/lead-service.d.ts.map +1 -0
- package/dist/server/email/lead-service.js +138 -0
- package/dist/server/email/lead-service.js.map +1 -0
- package/dist/server/email/ses-client.d.ts +27 -0
- package/dist/server/email/ses-client.d.ts.map +1 -0
- package/dist/server/email/ses-client.js +44 -0
- package/dist/server/email/ses-client.js.map +1 -0
- package/dist/server/email/sns-webhook.d.ts +10 -0
- package/dist/server/email/sns-webhook.d.ts.map +1 -0
- package/dist/server/email/sns-webhook.js +73 -0
- package/dist/server/email/sns-webhook.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +36 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp/expxagents-mcp.d.ts +2 -0
- package/dist/server/mcp/expxagents-mcp.d.ts.map +1 -0
- package/dist/server/mcp/expxagents-mcp.js +230 -0
- package/dist/server/mcp/expxagents-mcp.js.map +1 -0
- package/dist/server/routes/__tests__/conversations.test.d.ts +2 -0
- package/dist/server/routes/__tests__/conversations.test.d.ts.map +1 -0
- package/dist/server/routes/__tests__/conversations.test.js +111 -0
- package/dist/server/routes/__tests__/conversations.test.js.map +1 -0
- package/dist/server/routes/conversations.d.ts +8 -0
- package/dist/server/routes/conversations.d.ts.map +1 -0
- package/dist/server/routes/conversations.js +36 -0
- package/dist/server/routes/conversations.js.map +1 -0
- package/dist/server/scheduler/__tests__/job-runner.test.d.ts +2 -0
- package/dist/server/scheduler/__tests__/job-runner.test.d.ts.map +1 -0
- package/dist/server/scheduler/__tests__/job-runner.test.js +488 -0
- package/dist/server/scheduler/__tests__/job-runner.test.js.map +1 -0
- package/dist/server/scheduler/__tests__/scheduler-routes.test.d.ts +2 -0
- package/dist/server/scheduler/__tests__/scheduler-routes.test.d.ts.map +1 -0
- package/dist/server/scheduler/__tests__/scheduler-routes.test.js +167 -0
- package/dist/server/scheduler/__tests__/scheduler-routes.test.js.map +1 -0
- package/dist/server/scheduler/__tests__/scheduler-service.test.d.ts +2 -0
- package/dist/server/scheduler/__tests__/scheduler-service.test.d.ts.map +1 -0
- package/dist/server/scheduler/__tests__/scheduler-service.test.js +207 -0
- package/dist/server/scheduler/__tests__/scheduler-service.test.js.map +1 -0
- package/dist/server/scheduler/job-runner.d.ts +73 -0
- package/dist/server/scheduler/job-runner.d.ts.map +1 -0
- package/dist/server/scheduler/job-runner.js +407 -0
- package/dist/server/scheduler/job-runner.js.map +1 -0
- package/dist/server/scheduler/scheduler-routes.d.ts +10 -0
- package/dist/server/scheduler/scheduler-routes.d.ts.map +1 -0
- package/dist/server/scheduler/scheduler-routes.js +105 -0
- package/dist/server/scheduler/scheduler-routes.js.map +1 -0
- package/dist/server/scheduler/scheduler-service.d.ts +55 -0
- package/dist/server/scheduler/scheduler-service.d.ts.map +1 -0
- package/dist/server/scheduler/scheduler-service.js +271 -0
- package/dist/server/scheduler/scheduler-service.js.map +1 -0
- package/dist/server/services/__tests__/cost-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/cost-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/cost-service.test.js +72 -0
- package/dist/server/services/__tests__/cost-service.test.js.map +1 -0
- package/dist/server/services/__tests__/execution-log-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/execution-log-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/execution-log-service.test.js +40 -0
- package/dist/server/services/__tests__/execution-log-service.test.js.map +1 -0
- package/dist/server/services/__tests__/integration-registry.test.d.ts +2 -0
- package/dist/server/services/__tests__/integration-registry.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/integration-registry.test.js +28 -0
- package/dist/server/services/__tests__/integration-registry.test.js.map +1 -0
- package/dist/server/services/__tests__/log-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/log-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/log-service.test.js +49 -0
- package/dist/server/services/__tests__/log-service.test.js.map +1 -0
- package/dist/server/services/__tests__/permissions-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/permissions-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/permissions-service.test.js +46 -0
- package/dist/server/services/__tests__/permissions-service.test.js.map +1 -0
- package/dist/server/services/__tests__/pipeline-task-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/pipeline-task-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/pipeline-task-service.test.js +268 -0
- package/dist/server/services/__tests__/pipeline-task-service.test.js.map +1 -0
- package/dist/server/services/__tests__/state-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/state-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/state-service.test.js +136 -0
- package/dist/server/services/__tests__/state-service.test.js.map +1 -0
- package/dist/server/services/activity-service.d.ts +35 -0
- package/dist/server/services/activity-service.d.ts.map +1 -0
- package/dist/server/services/activity-service.js +92 -0
- package/dist/server/services/activity-service.js.map +1 -0
- package/dist/server/services/cost-service.d.ts +55 -0
- package/dist/server/services/cost-service.d.ts.map +1 -0
- package/dist/server/services/cost-service.js +59 -0
- package/dist/server/services/cost-service.js.map +1 -0
- package/dist/server/services/execution-log-service.d.ts +20 -0
- package/dist/server/services/execution-log-service.d.ts.map +1 -0
- package/dist/server/services/execution-log-service.js +17 -0
- package/dist/server/services/execution-log-service.js.map +1 -0
- package/dist/server/services/integration-registry.d.ts +9 -0
- package/dist/server/services/integration-registry.d.ts.map +1 -0
- package/dist/server/services/integration-registry.js +14 -0
- package/dist/server/services/integration-registry.js.map +1 -0
- package/dist/server/services/log-service.d.ts +28 -0
- package/dist/server/services/log-service.d.ts.map +1 -0
- package/dist/server/services/log-service.js +34 -0
- package/dist/server/services/log-service.js.map +1 -0
- package/dist/server/services/permissions-service.d.ts +10 -0
- package/dist/server/services/permissions-service.d.ts.map +1 -0
- package/dist/server/services/permissions-service.js +48 -0
- package/dist/server/services/permissions-service.js.map +1 -0
- package/dist/server/services/pipeline-task-service.d.ts +79 -0
- package/dist/server/services/pipeline-task-service.d.ts.map +1 -0
- package/dist/server/services/pipeline-task-service.js +122 -0
- package/dist/server/services/pipeline-task-service.js.map +1 -0
- package/dist/server/services/squad-registry.d.ts +35 -0
- package/dist/server/services/squad-registry.d.ts.map +1 -0
- package/dist/server/services/squad-registry.js +141 -0
- package/dist/server/services/squad-registry.js.map +1 -0
- package/dist/server/services/state-service.d.ts +22 -0
- package/dist/server/services/state-service.d.ts.map +1 -0
- package/dist/server/services/state-service.js +114 -0
- package/dist/server/services/state-service.js.map +1 -0
- package/dist/server/types/a2ui.d.ts +27 -0
- package/dist/server/types/a2ui.d.ts.map +1 -0
- package/dist/server/types/a2ui.js +2 -0
- package/dist/server/types/a2ui.js.map +1 -0
- package/dist/server/utils/find-free-port.d.ts +2 -0
- package/dist/server/utils/find-free-port.d.ts.map +1 -0
- package/dist/server/utils/find-free-port.js +17 -0
- package/dist/server/utils/find-free-port.js.map +1 -0
- package/dist/server/watcher/__tests__/file-watcher.test.d.ts +2 -0
- package/dist/server/watcher/__tests__/file-watcher.test.d.ts.map +1 -0
- package/dist/server/watcher/__tests__/file-watcher.test.js +81 -0
- package/dist/server/watcher/__tests__/file-watcher.test.js.map +1 -0
- package/dist/server/watcher/file-watcher.d.ts +19 -0
- package/dist/server/watcher/file-watcher.d.ts.map +1 -0
- package/dist/server/watcher/file-watcher.js +105 -0
- package/dist/server/watcher/file-watcher.js.map +1 -0
- package/dist/server/watcher/state-parser.d.ts +77 -0
- package/dist/server/watcher/state-parser.d.ts.map +1 -0
- package/dist/server/watcher/state-parser.js +78 -0
- package/dist/server/watcher/state-parser.js.map +1 -0
- package/dist/server/ws/ws-auth.d.ts +4 -0
- package/dist/server/ws/ws-auth.d.ts.map +1 -0
- package/dist/server/ws/ws-auth.js +42 -0
- package/dist/server/ws/ws-auth.js.map +1 -0
- package/dist/server/ws/ws-handler.d.ts +12 -0
- package/dist/server/ws/ws-handler.d.ts.map +1 -0
- package/dist/server/ws/ws-handler.js +171 -0
- package/dist/server/ws/ws-handler.js.map +1 -0
- package/dist/server/ws/ws-rooms.d.ts +12 -0
- package/dist/server/ws/ws-rooms.d.ts.map +1 -0
- package/dist/server/ws/ws-rooms.js +52 -0
- package/dist/server/ws/ws-rooms.js.map +1 -0
- 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"}
|