saasgadget 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +48 -0
- package/dist/agents/business-analyst.d.ts +14 -0
- package/dist/agents/business-analyst.d.ts.map +1 -0
- package/dist/agents/business-analyst.js +70 -0
- package/dist/agents/business-analyst.js.map +1 -0
- package/dist/agents/code-inspector.d.ts +19 -0
- package/dist/agents/code-inspector.d.ts.map +1 -0
- package/dist/agents/code-inspector.js +149 -0
- package/dist/agents/code-inspector.js.map +1 -0
- package/dist/agents/competitor-tracker.d.ts +19 -0
- package/dist/agents/competitor-tracker.d.ts.map +1 -0
- package/dist/agents/competitor-tracker.js +190 -0
- package/dist/agents/competitor-tracker.js.map +1 -0
- package/dist/agents/finance-auditor.d.ts +14 -0
- package/dist/agents/finance-auditor.d.ts.map +1 -0
- package/dist/agents/finance-auditor.js +73 -0
- package/dist/agents/finance-auditor.js.map +1 -0
- package/dist/agents/gtm-strategist.d.ts +14 -0
- package/dist/agents/gtm-strategist.d.ts.map +1 -0
- package/dist/agents/gtm-strategist.js +73 -0
- package/dist/agents/gtm-strategist.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +52 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +174 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/sdk-client.d.ts +48 -0
- package/dist/agents/sdk-client.d.ts.map +1 -0
- package/dist/agents/sdk-client.js +119 -0
- package/dist/agents/sdk-client.js.map +1 -0
- package/dist/agents/security-compliance.d.ts +14 -0
- package/dist/agents/security-compliance.d.ts.map +1 -0
- package/dist/agents/security-compliance.js +87 -0
- package/dist/agents/security-compliance.js.map +1 -0
- package/dist/agents/skeptic-reviewer.d.ts +14 -0
- package/dist/agents/skeptic-reviewer.d.ts.map +1 -0
- package/dist/agents/skeptic-reviewer.js +65 -0
- package/dist/agents/skeptic-reviewer.js.map +1 -0
- package/dist/agents/skills-directory.d.ts +36 -0
- package/dist/agents/skills-directory.d.ts.map +1 -0
- package/dist/agents/skills-directory.js +108 -0
- package/dist/agents/skills-directory.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +8 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +90 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +10 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +240 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/fix.d.ts +4 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +344 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +109 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +4 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +441 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/new.d.ts +4 -0
- package/dist/cli/commands/new.d.ts.map +1 -0
- package/dist/cli/commands/new.js +193 -0
- package/dist/cli/commands/new.js.map +1 -0
- package/dist/cli/commands/pack.d.ts +4 -0
- package/dist/cli/commands/pack.d.ts.map +1 -0
- package/dist/cli/commands/pack.js +312 -0
- package/dist/cli/commands/pack.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +4 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +250 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/research.d.ts +7 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/research.js +331 -0
- package/dist/cli/commands/research.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +4 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +434 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/session.d.ts +4 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +343 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/settings.d.ts +8 -0
- package/dist/cli/commands/settings.d.ts.map +1 -0
- package/dist/cli/commands/settings.js +302 -0
- package/dist/cli/commands/settings.js.map +1 -0
- package/dist/cli/commands/start.d.ts +10 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +185 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/types.d.ts +15 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/flag-resolver.d.ts +17 -0
- package/dist/cli/flag-resolver.d.ts.map +1 -0
- package/dist/cli/flag-resolver.js +57 -0
- package/dist/cli/flag-resolver.js.map +1 -0
- package/dist/cli/output/formatter.d.ts +22 -0
- package/dist/cli/output/formatter.d.ts.map +1 -0
- package/dist/cli/output/formatter.js +40 -0
- package/dist/cli/output/formatter.js.map +1 -0
- package/dist/cli/output/hints.d.ts +7 -0
- package/dist/cli/output/hints.d.ts.map +1 -0
- package/dist/cli/output/hints.js +27 -0
- package/dist/cli/output/hints.js.map +1 -0
- package/dist/cli/output/json-writer.d.ts +7 -0
- package/dist/cli/output/json-writer.d.ts.map +1 -0
- package/dist/cli/output/json-writer.js +19 -0
- package/dist/cli/output/json-writer.js.map +1 -0
- package/dist/cli/output/markdown-writer.d.ts +7 -0
- package/dist/cli/output/markdown-writer.d.ts.map +1 -0
- package/dist/cli/output/markdown-writer.js +75 -0
- package/dist/cli/output/markdown-writer.js.map +1 -0
- package/dist/cli/tui/banner.d.ts +2 -0
- package/dist/cli/tui/banner.d.ts.map +1 -0
- package/dist/cli/tui/banner.js +46 -0
- package/dist/cli/tui/banner.js.map +1 -0
- package/dist/cli/tui/colors.d.ts +22 -0
- package/dist/cli/tui/colors.d.ts.map +1 -0
- package/dist/cli/tui/colors.js +79 -0
- package/dist/cli/tui/colors.js.map +1 -0
- package/dist/cli/tui/dashboard.d.ts +20 -0
- package/dist/cli/tui/dashboard.d.ts.map +1 -0
- package/dist/cli/tui/dashboard.js +140 -0
- package/dist/cli/tui/dashboard.js.map +1 -0
- package/dist/cli/tui/prompt.d.ts +55 -0
- package/dist/cli/tui/prompt.d.ts.map +1 -0
- package/dist/cli/tui/prompt.js +193 -0
- package/dist/cli/tui/prompt.js.map +1 -0
- package/dist/cli/tui/slash-commands.d.ts +43 -0
- package/dist/cli/tui/slash-commands.d.ts.map +1 -0
- package/dist/cli/tui/slash-commands.js +439 -0
- package/dist/cli/tui/slash-commands.js.map +1 -0
- package/dist/config/config-store.d.ts +27 -0
- package/dist/config/config-store.d.ts.map +1 -0
- package/dist/config/config-store.js +125 -0
- package/dist/config/config-store.js.map +1 -0
- package/dist/config/presets.d.ts +15 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +91 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/tool-profiles.d.ts +29 -0
- package/dist/config/tool-profiles.d.ts.map +1 -0
- package/dist/config/tool-profiles.js +56 -0
- package/dist/config/tool-profiles.js.map +1 -0
- package/dist/contracts/agent-invoker.d.ts +9 -0
- package/dist/contracts/agent-invoker.d.ts.map +1 -0
- package/dist/contracts/agent-invoker.js +2 -0
- package/dist/contracts/agent-invoker.js.map +1 -0
- package/dist/contracts/agent.d.ts +36 -0
- package/dist/contracts/agent.d.ts.map +1 -0
- package/dist/contracts/agent.js +2 -0
- package/dist/contracts/agent.js.map +1 -0
- package/dist/contracts/config-store.d.ts +13 -0
- package/dist/contracts/config-store.d.ts.map +1 -0
- package/dist/contracts/config-store.js +2 -0
- package/dist/contracts/config-store.js.map +1 -0
- package/dist/contracts/crawler.d.ts +17 -0
- package/dist/contracts/crawler.d.ts.map +1 -0
- package/dist/contracts/crawler.js +2 -0
- package/dist/contracts/crawler.js.map +1 -0
- package/dist/contracts/exporter.d.ts +18 -0
- package/dist/contracts/exporter.d.ts.map +1 -0
- package/dist/contracts/exporter.js +11 -0
- package/dist/contracts/exporter.js.map +1 -0
- package/dist/contracts/index.d.ts +14 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/mcp-tool-provider.d.ts +18 -0
- package/dist/contracts/mcp-tool-provider.d.ts.map +1 -0
- package/dist/contracts/mcp-tool-provider.js +2 -0
- package/dist/contracts/mcp-tool-provider.js.map +1 -0
- package/dist/contracts/report-pack-generator.d.ts +20 -0
- package/dist/contracts/report-pack-generator.d.ts.map +1 -0
- package/dist/contracts/report-pack-generator.js +2 -0
- package/dist/contracts/report-pack-generator.js.map +1 -0
- package/dist/contracts/search-provider.d.ts +15 -0
- package/dist/contracts/search-provider.d.ts.map +1 -0
- package/dist/contracts/search-provider.js +2 -0
- package/dist/contracts/search-provider.js.map +1 -0
- package/dist/contracts/session-manager.d.ts +36 -0
- package/dist/contracts/session-manager.d.ts.map +1 -0
- package/dist/contracts/session-manager.js +2 -0
- package/dist/contracts/session-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +299 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ai/provider-factory.d.ts +64 -0
- package/dist/lib/ai/provider-factory.d.ts.map +1 -0
- package/dist/lib/ai/provider-factory.js +249 -0
- package/dist/lib/ai/provider-factory.js.map +1 -0
- package/dist/lib/audit-logger.d.ts +10 -0
- package/dist/lib/audit-logger.d.ts.map +1 -0
- package/dist/lib/audit-logger.js +101 -0
- package/dist/lib/audit-logger.js.map +1 -0
- package/dist/lib/auth.d.ts +39 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +219 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/competitor-scheduler.d.ts +73 -0
- package/dist/lib/competitor-scheduler.d.ts.map +1 -0
- package/dist/lib/competitor-scheduler.js +235 -0
- package/dist/lib/competitor-scheduler.js.map +1 -0
- package/dist/lib/crawler.d.ts +17 -0
- package/dist/lib/crawler.d.ts.map +1 -0
- package/dist/lib/crawler.js +168 -0
- package/dist/lib/crawler.js.map +1 -0
- package/dist/lib/errors.d.ts +34 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +63 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/exporter.d.ts +9 -0
- package/dist/lib/exporter.d.ts.map +1 -0
- package/dist/lib/exporter.js +100 -0
- package/dist/lib/exporter.js.map +1 -0
- package/dist/lib/html-cleaner.d.ts +19 -0
- package/dist/lib/html-cleaner.d.ts.map +1 -0
- package/dist/lib/html-cleaner.js +144 -0
- package/dist/lib/html-cleaner.js.map +1 -0
- package/dist/lib/http.d.ts +18 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +83 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/lockfile.d.ts +10 -0
- package/dist/lib/lockfile.d.ts.map +1 -0
- package/dist/lib/lockfile.js +56 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/mcp-registry.d.ts +47 -0
- package/dist/lib/mcp-registry.d.ts.map +1 -0
- package/dist/lib/mcp-registry.js +212 -0
- package/dist/lib/mcp-registry.js.map +1 -0
- package/dist/lib/profile-resolver.d.ts +28 -0
- package/dist/lib/profile-resolver.d.ts.map +1 -0
- package/dist/lib/profile-resolver.js +72 -0
- package/dist/lib/profile-resolver.js.map +1 -0
- package/dist/lib/profile-store.d.ts +14 -0
- package/dist/lib/profile-store.d.ts.map +1 -0
- package/dist/lib/profile-store.js +80 -0
- package/dist/lib/profile-store.js.map +1 -0
- package/dist/lib/rate-limiter.d.ts +32 -0
- package/dist/lib/rate-limiter.d.ts.map +1 -0
- package/dist/lib/rate-limiter.js +124 -0
- package/dist/lib/rate-limiter.js.map +1 -0
- package/dist/lib/sandbox.d.ts +25 -0
- package/dist/lib/sandbox.d.ts.map +1 -0
- package/dist/lib/sandbox.js +134 -0
- package/dist/lib/sandbox.js.map +1 -0
- package/dist/lib/search.d.ts +22 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +147 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/secret-scanner.d.ts +26 -0
- package/dist/lib/secret-scanner.d.ts.map +1 -0
- package/dist/lib/secret-scanner.js +74 -0
- package/dist/lib/secret-scanner.js.map +1 -0
- package/dist/lib/url.d.ts +17 -0
- package/dist/lib/url.d.ts.map +1 -0
- package/dist/lib/url.js +51 -0
- package/dist/lib/url.js.map +1 -0
- package/dist/mcp/progressive-discovery.d.ts +21 -0
- package/dist/mcp/progressive-discovery.d.ts.map +1 -0
- package/dist/mcp/progressive-discovery.js +86 -0
- package/dist/mcp/progressive-discovery.js.map +1 -0
- package/dist/mcp/ptc-executor.d.ts +92 -0
- package/dist/mcp/ptc-executor.d.ts.map +1 -0
- package/dist/mcp/ptc-executor.js +199 -0
- package/dist/mcp/ptc-executor.js.map +1 -0
- package/dist/mcp/server.d.ts +29 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +299 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-codegen.d.ts +33 -0
- package/dist/mcp/tool-codegen.d.ts.map +1 -0
- package/dist/mcp/tool-codegen.js +129 -0
- package/dist/mcp/tool-codegen.js.map +1 -0
- package/dist/mcp/tool-examples.d.ts +22 -0
- package/dist/mcp/tool-examples.d.ts.map +1 -0
- package/dist/mcp/tool-examples.js +117 -0
- package/dist/mcp/tool-examples.js.map +1 -0
- package/dist/mcp/tools/classify-signals.d.ts +67 -0
- package/dist/mcp/tools/classify-signals.d.ts.map +1 -0
- package/dist/mcp/tools/classify-signals.js +124 -0
- package/dist/mcp/tools/classify-signals.js.map +1 -0
- package/dist/mcp/tools/compute-risk-score.d.ts +97 -0
- package/dist/mcp/tools/compute-risk-score.d.ts.map +1 -0
- package/dist/mcp/tools/compute-risk-score.js +171 -0
- package/dist/mcp/tools/compute-risk-score.js.map +1 -0
- package/dist/mcp/tools/generate-plan.d.ts +99 -0
- package/dist/mcp/tools/generate-plan.d.ts.map +1 -0
- package/dist/mcp/tools/generate-plan.js +200 -0
- package/dist/mcp/tools/generate-plan.js.map +1 -0
- package/dist/mcp/tools/generate-report-pack.d.ts +119 -0
- package/dist/mcp/tools/generate-report-pack.d.ts.map +1 -0
- package/dist/mcp/tools/generate-report-pack.js +304 -0
- package/dist/mcp/tools/generate-report-pack.js.map +1 -0
- package/dist/mcp/tools/run-skeptic-review.d.ts +33 -0
- package/dist/mcp/tools/run-skeptic-review.d.ts.map +1 -0
- package/dist/mcp/tools/run-skeptic-review.js +157 -0
- package/dist/mcp/tools/run-skeptic-review.js.map +1 -0
- package/dist/mcp/tools/scan-saas-repo.d.ts +103 -0
- package/dist/mcp/tools/scan-saas-repo.d.ts.map +1 -0
- package/dist/mcp/tools/scan-saas-repo.js +421 -0
- package/dist/mcp/tools/scan-saas-repo.js.map +1 -0
- package/dist/mcp/tools/scrape-competitor.d.ts +38 -0
- package/dist/mcp/tools/scrape-competitor.d.ts.map +1 -0
- package/dist/mcp/tools/scrape-competitor.js +124 -0
- package/dist/mcp/tools/scrape-competitor.js.map +1 -0
- package/dist/mcp/tools/search-tools.d.ts +37 -0
- package/dist/mcp/tools/search-tools.d.ts.map +1 -0
- package/dist/mcp/tools/search-tools.js +109 -0
- package/dist/mcp/tools/search-tools.js.map +1 -0
- package/dist/packs/business-viability.d.ts +30 -0
- package/dist/packs/business-viability.d.ts.map +1 -0
- package/dist/packs/business-viability.js +37 -0
- package/dist/packs/business-viability.js.map +1 -0
- package/dist/packs/competitor-intel.d.ts +34 -0
- package/dist/packs/competitor-intel.d.ts.map +1 -0
- package/dist/packs/competitor-intel.js +72 -0
- package/dist/packs/competitor-intel.js.map +1 -0
- package/dist/packs/financial-audit.d.ts +40 -0
- package/dist/packs/financial-audit.d.ts.map +1 -0
- package/dist/packs/financial-audit.js +74 -0
- package/dist/packs/financial-audit.js.map +1 -0
- package/dist/packs/pitch-deck.d.ts +38 -0
- package/dist/packs/pitch-deck.d.ts.map +1 -0
- package/dist/packs/pitch-deck.js +80 -0
- package/dist/packs/pitch-deck.js.map +1 -0
- package/dist/packs/smm-gtm.d.ts +38 -0
- package/dist/packs/smm-gtm.d.ts.map +1 -0
- package/dist/packs/smm-gtm.js +83 -0
- package/dist/packs/smm-gtm.js.map +1 -0
- package/dist/packs/tech-audit.d.ts +34 -0
- package/dist/packs/tech-audit.d.ts.map +1 -0
- package/dist/packs/tech-audit.js +43 -0
- package/dist/packs/tech-audit.js.map +1 -0
- package/dist/project-templates/build-proof.d.ts +24 -0
- package/dist/project-templates/build-proof.d.ts.map +1 -0
- package/dist/project-templates/build-proof.js +108 -0
- package/dist/project-templates/build-proof.js.map +1 -0
- package/dist/project-templates/quickstart-renderer.d.ts +16 -0
- package/dist/project-templates/quickstart-renderer.d.ts.map +1 -0
- package/dist/project-templates/quickstart-renderer.js +57 -0
- package/dist/project-templates/quickstart-renderer.js.map +1 -0
- package/dist/project-templates/registry.d.ts +68 -0
- package/dist/project-templates/registry.d.ts.map +1 -0
- package/dist/project-templates/registry.js +328 -0
- package/dist/project-templates/registry.js.map +1 -0
- package/dist/project-templates/templates.d.ts +3 -0
- package/dist/project-templates/templates.d.ts.map +1 -0
- package/dist/project-templates/templates.js +188 -0
- package/dist/project-templates/templates.js.map +1 -0
- package/dist/prompts/biz-viability.d.ts +10 -0
- package/dist/prompts/biz-viability.d.ts.map +1 -0
- package/dist/prompts/biz-viability.js +35 -0
- package/dist/prompts/biz-viability.js.map +1 -0
- package/dist/prompts/catalog.d.ts +16 -0
- package/dist/prompts/catalog.d.ts.map +1 -0
- package/dist/prompts/catalog.js +17 -0
- package/dist/prompts/catalog.js.map +1 -0
- package/dist/prompts/competitor-intel.d.ts +10 -0
- package/dist/prompts/competitor-intel.d.ts.map +1 -0
- package/dist/prompts/competitor-intel.js +37 -0
- package/dist/prompts/competitor-intel.js.map +1 -0
- package/dist/prompts/finance-audit.d.ts +10 -0
- package/dist/prompts/finance-audit.d.ts.map +1 -0
- package/dist/prompts/finance-audit.js +35 -0
- package/dist/prompts/finance-audit.js.map +1 -0
- package/dist/prompts/fix-sprint-plan.d.ts +10 -0
- package/dist/prompts/fix-sprint-plan.d.ts.map +1 -0
- package/dist/prompts/fix-sprint-plan.js +45 -0
- package/dist/prompts/fix-sprint-plan.js.map +1 -0
- package/dist/prompts/gtm-smm.d.ts +10 -0
- package/dist/prompts/gtm-smm.d.ts.map +1 -0
- package/dist/prompts/gtm-smm.js +35 -0
- package/dist/prompts/gtm-smm.js.map +1 -0
- package/dist/prompts/orchestrator-dispatch.d.ts +40 -0
- package/dist/prompts/orchestrator-dispatch.d.ts.map +1 -0
- package/dist/prompts/orchestrator-dispatch.js +92 -0
- package/dist/prompts/orchestrator-dispatch.js.map +1 -0
- package/dist/prompts/pitch-deck.d.ts +10 -0
- package/dist/prompts/pitch-deck.d.ts.map +1 -0
- package/dist/prompts/pitch-deck.js +36 -0
- package/dist/prompts/pitch-deck.js.map +1 -0
- package/dist/prompts/prompt-template.d.ts +16 -0
- package/dist/prompts/prompt-template.d.ts.map +1 -0
- package/dist/prompts/prompt-template.js +22 -0
- package/dist/prompts/prompt-template.js.map +1 -0
- package/dist/prompts/repo-audit-deep.d.ts +10 -0
- package/dist/prompts/repo-audit-deep.d.ts.map +1 -0
- package/dist/prompts/repo-audit-deep.js +39 -0
- package/dist/prompts/repo-audit-deep.js.map +1 -0
- package/dist/prompts/repo-scan-quick.d.ts +35 -0
- package/dist/prompts/repo-scan-quick.d.ts.map +1 -0
- package/dist/prompts/repo-scan-quick.js +69 -0
- package/dist/prompts/repo-scan-quick.js.map +1 -0
- package/dist/prompts/skeptic-review.d.ts +10 -0
- package/dist/prompts/skeptic-review.d.ts.map +1 -0
- package/dist/prompts/skeptic-review.js +40 -0
- package/dist/prompts/skeptic-review.js.map +1 -0
- package/dist/schemas/agent-step-sequence.d.ts +41 -0
- package/dist/schemas/agent-step-sequence.d.ts.map +1 -0
- package/dist/schemas/agent-step-sequence.js +25 -0
- package/dist/schemas/agent-step-sequence.js.map +1 -0
- package/dist/schemas/artifact-envelope.v1.d.ts +69 -0
- package/dist/schemas/artifact-envelope.v1.d.ts.map +1 -0
- package/dist/schemas/artifact-envelope.v1.js +24 -0
- package/dist/schemas/artifact-envelope.v1.js.map +1 -0
- package/dist/schemas/business-viability.v1.d.ts +223 -0
- package/dist/schemas/business-viability.v1.d.ts.map +1 -0
- package/dist/schemas/business-viability.v1.js +47 -0
- package/dist/schemas/business-viability.v1.js.map +1 -0
- package/dist/schemas/common.d.ts +9 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +8 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/competitor-intel.v1.d.ts +239 -0
- package/dist/schemas/competitor-intel.v1.d.ts.map +1 -0
- package/dist/schemas/competitor-intel.v1.js +59 -0
- package/dist/schemas/competitor-intel.v1.js.map +1 -0
- package/dist/schemas/config.d.ts +133 -0
- package/dist/schemas/config.d.ts.map +1 -0
- package/dist/schemas/config.js +142 -0
- package/dist/schemas/config.js.map +1 -0
- package/dist/schemas/financial-audit.v1.d.ts +139 -0
- package/dist/schemas/financial-audit.v1.d.ts.map +1 -0
- package/dist/schemas/financial-audit.v1.js +50 -0
- package/dist/schemas/financial-audit.v1.js.map +1 -0
- package/dist/schemas/fix-result.v1.d.ts +104 -0
- package/dist/schemas/fix-result.v1.d.ts.map +1 -0
- package/dist/schemas/fix-result.v1.js +41 -0
- package/dist/schemas/fix-result.v1.js.map +1 -0
- package/dist/schemas/founder-profile.d.ts +76 -0
- package/dist/schemas/founder-profile.d.ts.map +1 -0
- package/dist/schemas/founder-profile.js +54 -0
- package/dist/schemas/founder-profile.js.map +1 -0
- package/dist/schemas/investor-readiness.v1.d.ts +20 -0
- package/dist/schemas/investor-readiness.v1.d.ts.map +1 -0
- package/dist/schemas/investor-readiness.v1.js +15 -0
- package/dist/schemas/investor-readiness.v1.js.map +1 -0
- package/dist/schemas/mcp-server-entry.d.ts +37 -0
- package/dist/schemas/mcp-server-entry.d.ts.map +1 -0
- package/dist/schemas/mcp-server-entry.js +23 -0
- package/dist/schemas/mcp-server-entry.js.map +1 -0
- package/dist/schemas/pitch-deck.v1.d.ts +141 -0
- package/dist/schemas/pitch-deck.v1.d.ts.map +1 -0
- package/dist/schemas/pitch-deck.v1.js +57 -0
- package/dist/schemas/pitch-deck.v1.js.map +1 -0
- package/dist/schemas/plan.v1.d.ts +97 -0
- package/dist/schemas/plan.v1.d.ts.map +1 -0
- package/dist/schemas/plan.v1.js +41 -0
- package/dist/schemas/plan.v1.js.map +1 -0
- package/dist/schemas/project-template.d.ts +101 -0
- package/dist/schemas/project-template.d.ts.map +1 -0
- package/dist/schemas/project-template.js +59 -0
- package/dist/schemas/project-template.js.map +1 -0
- package/dist/schemas/research-result.v1.d.ts +45 -0
- package/dist/schemas/research-result.v1.d.ts.map +1 -0
- package/dist/schemas/research-result.v1.js +20 -0
- package/dist/schemas/research-result.v1.js.map +1 -0
- package/dist/schemas/roadmap.v1.d.ts +49 -0
- package/dist/schemas/roadmap.v1.d.ts.map +1 -0
- package/dist/schemas/roadmap.v1.js +22 -0
- package/dist/schemas/roadmap.v1.js.map +1 -0
- package/dist/schemas/scan-result.v1.d.ts +87 -0
- package/dist/schemas/scan-result.v1.d.ts.map +1 -0
- package/dist/schemas/scan-result.v1.js +22 -0
- package/dist/schemas/scan-result.v1.js.map +1 -0
- package/dist/schemas/session.d.ts +165 -0
- package/dist/schemas/session.d.ts.map +1 -0
- package/dist/schemas/session.js +70 -0
- package/dist/schemas/session.js.map +1 -0
- package/dist/schemas/smm-gtm.v1.d.ts +175 -0
- package/dist/schemas/smm-gtm.v1.d.ts.map +1 -0
- package/dist/schemas/smm-gtm.v1.js +60 -0
- package/dist/schemas/smm-gtm.v1.js.map +1 -0
- package/dist/schemas/tech-audit.v1.d.ts +254 -0
- package/dist/schemas/tech-audit.v1.d.ts.map +1 -0
- package/dist/schemas/tech-audit.v1.js +61 -0
- package/dist/schemas/tech-audit.v1.js.map +1 -0
- package/dist/session/agent-session.d.ts +20 -0
- package/dist/session/agent-session.d.ts.map +1 -0
- package/dist/session/agent-session.js +53 -0
- package/dist/session/agent-session.js.map +1 -0
- package/dist/session/compaction/memory-pointers.d.ts +17 -0
- package/dist/session/compaction/memory-pointers.d.ts.map +1 -0
- package/dist/session/compaction/memory-pointers.js +46 -0
- package/dist/session/compaction/memory-pointers.js.map +1 -0
- package/dist/session/compaction/selective-retention.d.ts +19 -0
- package/dist/session/compaction/selective-retention.d.ts.map +1 -0
- package/dist/session/compaction/selective-retention.js +36 -0
- package/dist/session/compaction/selective-retention.js.map +1 -0
- package/dist/session/compaction/trajectory-summarizer.d.ts +22 -0
- package/dist/session/compaction/trajectory-summarizer.d.ts.map +1 -0
- package/dist/session/compaction/trajectory-summarizer.js +34 -0
- package/dist/session/compaction/trajectory-summarizer.js.map +1 -0
- package/dist/session/sdk-hooks.d.ts +31 -0
- package/dist/session/sdk-hooks.d.ts.map +1 -0
- package/dist/session/sdk-hooks.js +56 -0
- package/dist/session/sdk-hooks.js.map +1 -0
- package/dist/session/session-manager.d.ts +42 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +236 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/token-tracker.d.ts +31 -0
- package/dist/session/token-tracker.d.ts.map +1 -0
- package/dist/session/token-tracker.js +66 -0
- package/dist/session/token-tracker.js.map +1 -0
- package/package.json +80 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 WxZRD Media
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# saasgadget
|
|
2
|
+
|
|
3
|
+
CLI tool for solo SaaS founders — scan repos, generate audit reports, plan changes, and manage MCP servers.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx saasgadget scan .
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install globally:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g saasgadget
|
|
15
|
+
saasgadget scan .
|
|
16
|
+
sg scan . # short alias
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Commands
|
|
20
|
+
|
|
21
|
+
| Command | Description |
|
|
22
|
+
| ----------- | ---------------------------------------------- |
|
|
23
|
+
| `scan` | Scan a repository for SaaS signals |
|
|
24
|
+
| `report` | Generate a structured audit report pack |
|
|
25
|
+
| `plan` | Create a prioritized change plan |
|
|
26
|
+
| `new` | Scaffold a new SaaS project from templates |
|
|
27
|
+
| `mcp` | Start the MCP server for IDE integration |
|
|
28
|
+
| `auth` | Authenticate with GitHub |
|
|
29
|
+
| `settings` | Manage CLI configuration |
|
|
30
|
+
| `session` | Manage analysis sessions |
|
|
31
|
+
| `doctor` | Diagnose environment and connectivity issues |
|
|
32
|
+
|
|
33
|
+
## Features
|
|
34
|
+
|
|
35
|
+
- **Repository Analysis**: Detect auth, billing, tenancy, security, and code-health signals
|
|
36
|
+
- **Dual Output**: Every analytical command produces JSON + Markdown
|
|
37
|
+
- **MCP Server**: Expose tools to VS Code Copilot and other MCP clients
|
|
38
|
+
- **Session Management**: Track analysis across multiple runs with token budgets
|
|
39
|
+
- **Project Templates**: Scaffold Stripe billing, Supabase auth, RBAC, and more
|
|
40
|
+
|
|
41
|
+
## Documentation
|
|
42
|
+
|
|
43
|
+
- Website: [saasgadget.io](https://saasgadget.io)
|
|
44
|
+
- Docs: [docs.saasgadget.io](https://docs.saasgadget.io)
|
|
45
|
+
|
|
46
|
+
## License
|
|
47
|
+
|
|
48
|
+
MIT — see [LICENSE.md](./LICENSE.md)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Business Analyst specialist agent — market analysis, revenue model, moat evaluation.
|
|
3
|
+
* @module agents/business-analyst
|
|
4
|
+
*/
|
|
5
|
+
import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
|
|
6
|
+
import type { AIProvider } from '../lib/ai/provider-factory.js';
|
|
7
|
+
export declare class BusinessAnalyst implements IAgent {
|
|
8
|
+
private readonly provider;
|
|
9
|
+
constructor(provider: AIProvider);
|
|
10
|
+
getName(): string;
|
|
11
|
+
getDomain(): string;
|
|
12
|
+
analyze(context: AgentContext): Promise<AgentResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=business-analyst.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-analyst.d.ts","sourceRoot":"","sources":["../../src/agents/business-analyst.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIhE,qBAAa,eAAgB,YAAW,MAAM;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA2D3D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { bizViabilityTemplate } from '../prompts/biz-viability.js';
|
|
2
|
+
export class BusinessAnalyst {
|
|
3
|
+
provider;
|
|
4
|
+
constructor(provider) {
|
|
5
|
+
this.provider = provider;
|
|
6
|
+
}
|
|
7
|
+
getName() {
|
|
8
|
+
return 'business-analyst';
|
|
9
|
+
}
|
|
10
|
+
getDomain() {
|
|
11
|
+
return 'business';
|
|
12
|
+
}
|
|
13
|
+
async analyze(context) {
|
|
14
|
+
const assumptions = [];
|
|
15
|
+
const signals = [];
|
|
16
|
+
const { repo } = context;
|
|
17
|
+
// Build analysis prompt from template
|
|
18
|
+
const prompt = [
|
|
19
|
+
`PERSONA: ${bizViabilityTemplate.persona}`,
|
|
20
|
+
`OBJECTIVE: ${bizViabilityTemplate.objective}`,
|
|
21
|
+
`CONSTRAINTS: ${bizViabilityTemplate.constraints}`,
|
|
22
|
+
`CONTEXT: Analyzing ${repo.owner}/${repo.name} (ref: ${repo.ref})`,
|
|
23
|
+
`CONFIDENCE RUBRIC: ${bizViabilityTemplate.confidence_rubric}`,
|
|
24
|
+
].join('\n\n');
|
|
25
|
+
let rawOutput;
|
|
26
|
+
try {
|
|
27
|
+
rawOutput = await this.provider.chat([
|
|
28
|
+
{ role: 'system', content: prompt },
|
|
29
|
+
{
|
|
30
|
+
role: 'user',
|
|
31
|
+
content: `Analyze the business viability of ${repo.owner}/${repo.name}. ` +
|
|
32
|
+
`Detail level: ${context.detail ?? 'balanced'}. ` +
|
|
33
|
+
(context.founderProfile
|
|
34
|
+
? `Founder context available: ${JSON.stringify(context.founderProfile)}`
|
|
35
|
+
: 'No founder context provided.') +
|
|
36
|
+
(context.scanResult
|
|
37
|
+
? `\n\nPrior scan results available:\n${JSON.stringify(context.scanResult, null, 2).slice(0, 4000)}`
|
|
38
|
+
: ''),
|
|
39
|
+
},
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
rawOutput = 'Business analysis could not be completed — AI provider unavailable.';
|
|
44
|
+
assumptions.push({
|
|
45
|
+
statement: 'AI analysis unavailable — provider returned an error',
|
|
46
|
+
confidence: 0.1,
|
|
47
|
+
source: 'agent',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Generate baseline signals from available context
|
|
51
|
+
signals.push({
|
|
52
|
+
id: `ba-${Date.now()}-001`,
|
|
53
|
+
category: 'architecture',
|
|
54
|
+
severity: 'info',
|
|
55
|
+
title: 'Business Analysis Completed',
|
|
56
|
+
finding: `Business viability analysis performed for ${repo.owner}/${repo.name}`,
|
|
57
|
+
evidence: [{ filePath: 'README.md', lineRange: null, content: 'Repository analyzed', toolOutput: null }],
|
|
58
|
+
ruleAnchored: false,
|
|
59
|
+
agentConfidence: 0.7,
|
|
60
|
+
priority: 'next',
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
findings: signals,
|
|
64
|
+
assumptions,
|
|
65
|
+
confidence: 0.7,
|
|
66
|
+
rawOutput,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=business-analyst.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-analyst.js","sourceRoot":"","sources":["../../src/agents/business-analyst.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,OAAO,eAAe;IACT,QAAQ,CAAa;IAEtC,YAAY,QAAoB;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,SAAS;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAqB;QACjC,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEzB,sCAAsC;QACtC,MAAM,MAAM,GAAG;YACb,YAAY,oBAAoB,CAAC,OAAO,EAAE;YAC1C,cAAc,oBAAoB,CAAC,SAAS,EAAE;YAC9C,gBAAgB,oBAAoB,CAAC,WAAW,EAAE;YAClD,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,GAAG,GAAG;YAClE,sBAAsB,oBAAoB,CAAC,iBAAiB,EAAE;SAC/D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEf,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;gBACnC;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,qCAAqC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI;wBACvE,iBAAiB,OAAO,CAAC,MAAM,IAAI,UAAU,IAAI;wBACjD,CAAC,OAAO,CAAC,cAAc;4BACrB,CAAC,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;4BACxE,CAAC,CAAC,8BAA8B,CAAC;wBACnC,CAAC,OAAO,CAAC,UAAU;4BACjB,CAAC,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;4BACpG,CAAC,CAAC,EAAE,CAAC;iBACV;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,qEAAqE,CAAC;YAClF,WAAW,CAAC,IAAI,CAAC;gBACf,SAAS,EAAE,sDAAsD;gBACjE,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM;YAC1B,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,6CAA6C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAC/E,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACxG,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,GAAG;YACpB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,WAAW;YACX,UAAU,EAAE,GAAG;YACf,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Inspector specialist agent — architecture analysis, code health signals.
|
|
3
|
+
* Receives CopilotProvider instance injected via constructor by the orchestrator.
|
|
4
|
+
* @module agents/code-inspector
|
|
5
|
+
*/
|
|
6
|
+
import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
|
|
7
|
+
import type { AIProvider } from '../lib/ai/provider-factory.js';
|
|
8
|
+
export declare class CodeInspector implements IAgent {
|
|
9
|
+
private readonly provider;
|
|
10
|
+
constructor(provider: AIProvider);
|
|
11
|
+
getName(): string;
|
|
12
|
+
getDomain(): string;
|
|
13
|
+
analyze(context: AgentContext): Promise<AgentResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Enhance an existing scan result with additional agent analysis.
|
|
16
|
+
*/
|
|
17
|
+
private enhanceExistingScan;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=code-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-inspector.d.ts","sourceRoot":"","sources":["../../src/agents/code-inspector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAOhE,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAsG1D;;OAEG;YACW,mBAAmB;CA+ClC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { CATEGORY_TO_DOMAIN } from '../schemas/common.js';
|
|
2
|
+
import { executeScanSaasRepo } from '../mcp/tools/scan-saas-repo.js';
|
|
3
|
+
import { classifyFindings } from '../mcp/tools/classify-signals.js';
|
|
4
|
+
import { applyBaselineRules, computeRiskScore } from '../mcp/tools/compute-risk-score.js';
|
|
5
|
+
export class CodeInspector {
|
|
6
|
+
provider;
|
|
7
|
+
constructor(provider) {
|
|
8
|
+
this.provider = provider;
|
|
9
|
+
}
|
|
10
|
+
getName() {
|
|
11
|
+
return 'code-inspector';
|
|
12
|
+
}
|
|
13
|
+
getDomain() {
|
|
14
|
+
return 'code-health';
|
|
15
|
+
}
|
|
16
|
+
async analyze(context) {
|
|
17
|
+
const assumptions = [];
|
|
18
|
+
const { repo, scanResult } = context;
|
|
19
|
+
// If scan result already exists, enhance it with agent analysis
|
|
20
|
+
if (scanResult && typeof scanResult === 'object' && 'signals' in scanResult) {
|
|
21
|
+
return this.enhanceExistingScan(scanResult, context);
|
|
22
|
+
}
|
|
23
|
+
// Otherwise, run a fresh scan
|
|
24
|
+
const noop = async () => { };
|
|
25
|
+
const scanOutput = await executeScanSaasRepo({
|
|
26
|
+
repo: `${repo.owner}/${repo.name}`,
|
|
27
|
+
ref: repo.ref,
|
|
28
|
+
focus: 'all',
|
|
29
|
+
sourceMode: 'remote',
|
|
30
|
+
}, noop);
|
|
31
|
+
// Classify signals per domain
|
|
32
|
+
const domains = ['auth', 'billing', 'tenancy', 'security', 'code-health'];
|
|
33
|
+
const allSignals = [...scanOutput.signals];
|
|
34
|
+
for (const domain of domains) {
|
|
35
|
+
const domainFindings = scanOutput.signals
|
|
36
|
+
.filter((s) => s.category === domain)
|
|
37
|
+
.map((s) => ({
|
|
38
|
+
filePath: s.evidence[0]?.filePath ?? 'unknown',
|
|
39
|
+
content: s.finding,
|
|
40
|
+
context: s.evidence.map((e) => e.content).join('; '),
|
|
41
|
+
}));
|
|
42
|
+
if (domainFindings.length > 0) {
|
|
43
|
+
const classified = classifyFindings(domainFindings, domain);
|
|
44
|
+
// Merge classified signals (avoid duplicates)
|
|
45
|
+
for (const sig of classified.signals) {
|
|
46
|
+
if (!allSignals.some((s) => s.finding === sig.finding)) {
|
|
47
|
+
allSignals.push(sig);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Apply baseline rules and compute risk
|
|
53
|
+
const riskDomains = ['tech', 'security', 'code-health', 'business', 'finance'];
|
|
54
|
+
for (const rd of riskDomains) {
|
|
55
|
+
const baseline = applyBaselineRules(rd, allSignals);
|
|
56
|
+
if (baseline.rulesFired.length > 0) {
|
|
57
|
+
const riskResult = computeRiskScore({
|
|
58
|
+
domain: rd,
|
|
59
|
+
signals: allSignals.filter((s) => CATEGORY_TO_DOMAIN[s.category] === rd),
|
|
60
|
+
rulesBaseline: baseline,
|
|
61
|
+
});
|
|
62
|
+
assumptions.push({
|
|
63
|
+
statement: `${rd} risk: ${riskResult.finalRisk} (${riskResult.summary})`,
|
|
64
|
+
confidence: riskResult.confidence,
|
|
65
|
+
source: 'rule',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Try agent enhancement via LLM if available
|
|
70
|
+
let agentEnhancement = '';
|
|
71
|
+
try {
|
|
72
|
+
const signalSummary = allSignals
|
|
73
|
+
.slice(0, 10) // limit to avoid token explosion
|
|
74
|
+
.map((s) => `[${s.severity}] ${s.category}: ${s.finding}`)
|
|
75
|
+
.join('\n');
|
|
76
|
+
agentEnhancement = await this.provider.chat([
|
|
77
|
+
{
|
|
78
|
+
role: 'system',
|
|
79
|
+
content: 'You are a code health analyst. Analyze these signals and provide brief insights about the repository\'s SaaS readiness. Be concise — 3-5 sentences max.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
role: 'user',
|
|
83
|
+
content: `Repository: ${repo.owner}/${repo.name}\nRef: ${repo.ref}\n\nDetected signals:\n${signalSummary}\n\nProvide a brief assessment of this repository's SaaS maturity.`,
|
|
84
|
+
},
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
assumptions.push({
|
|
89
|
+
statement: 'Agent enhancement unavailable — using rule-based analysis only',
|
|
90
|
+
confidence: 1.0,
|
|
91
|
+
source: 'agent',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
const avgConf = allSignals.length > 0
|
|
95
|
+
? allSignals.reduce((sum, s) => sum + s.agentConfidence, 0) / allSignals.length
|
|
96
|
+
: 0.5;
|
|
97
|
+
return {
|
|
98
|
+
findings: allSignals,
|
|
99
|
+
assumptions,
|
|
100
|
+
confidence: Math.round(avgConf * 100) / 100,
|
|
101
|
+
rawOutput: agentEnhancement || `Deterministic scan: ${allSignals.length} signals detected.`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Enhance an existing scan result with additional agent analysis.
|
|
106
|
+
*/
|
|
107
|
+
async enhanceExistingScan(scanResult, context) {
|
|
108
|
+
const existingSignals = scanResult['signals'] ?? [];
|
|
109
|
+
const assumptions = [{
|
|
110
|
+
statement: 'Using existing scan results for enhancement',
|
|
111
|
+
confidence: 1.0,
|
|
112
|
+
source: 'agent',
|
|
113
|
+
}];
|
|
114
|
+
let enhancement = '';
|
|
115
|
+
try {
|
|
116
|
+
const signalSummary = existingSignals
|
|
117
|
+
.slice(0, 10)
|
|
118
|
+
.map((s) => `[${s.severity}] ${s.category}: ${s.finding}`)
|
|
119
|
+
.join('\n');
|
|
120
|
+
enhancement = await this.provider.chat([
|
|
121
|
+
{
|
|
122
|
+
role: 'system',
|
|
123
|
+
content: 'You are a code health analyst. Provide insights on the repository\'s SaaS readiness based on these signals. Be concise.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
role: 'user',
|
|
127
|
+
content: `Repository: ${context.repo.owner}/${context.repo.name}\n\nSignals:\n${signalSummary}`,
|
|
128
|
+
},
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
assumptions.push({
|
|
133
|
+
statement: 'Agent enhancement failed — returning existing signals',
|
|
134
|
+
confidence: 1.0,
|
|
135
|
+
source: 'agent',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const avgConf = existingSignals.length > 0
|
|
139
|
+
? existingSignals.reduce((sum, s) => sum + s.agentConfidence, 0) / existingSignals.length
|
|
140
|
+
: 0.5;
|
|
141
|
+
return {
|
|
142
|
+
findings: existingSignals,
|
|
143
|
+
assumptions,
|
|
144
|
+
confidence: Math.round(avgConf * 100) / 100,
|
|
145
|
+
rawOutput: enhancement || `Code inspector analysis: ${existingSignals.length} signals.`,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=code-inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-inspector.js","sourceRoot":"","sources":["../../src/agents/code-inspector.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE1F,MAAM,OAAO,aAAa;IACP,QAAQ,CAAa;IAEtC,YAAY,QAAoB;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAqB;QACjC,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAErC,gEAAgE;QAChE,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;YAC5E,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAqC,EAAE,OAAO,CAAC,CAAC;QAClF,CAAC;QAED,8BAA8B;QAC9B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAC1C;YACE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAClC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,QAAQ;SACrB,EACD,IAAI,CACL,CAAC;QAEF,8BAA8B;QAC9B,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;QACnF,MAAM,UAAU,GAAa,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAErD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO;iBACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;iBACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS;gBAC9C,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aACrD,CAAC,CAAC,CAAC;YAEN,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBAC5D,8CAA8C;gBAC9C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBACvD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;QACxF,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,gBAAgB,CAAC;oBAClC,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACxE,aAAa,EAAE,QAAQ;iBACxB,CAAC,CAAC;gBAEH,WAAW,CAAC,IAAI,CAAC;oBACf,SAAS,EAAE,GAAG,EAAE,UAAU,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,OAAO,GAAG;oBACxE,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,UAAU;iBAC7B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iCAAiC;iBAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACzD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC1C;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,yJAAyJ;iBACnK;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,eAAe,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,GAAG,0BAA0B,aAAa,oEAAoE;iBAC7K;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC;gBACf,SAAS,EAAE,gEAAgE;gBAC3E,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;YACnC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM;YAC/E,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,QAAQ,EAAE,UAAU;YACpB,WAAW;YACX,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG;YAC3C,SAAS,EAAE,gBAAgB,IAAI,uBAAuB,UAAU,CAAC,MAAM,oBAAoB;SAC5F,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,UAAmC,EACnC,OAAqB;QAErB,MAAM,eAAe,GAAI,UAAU,CAAC,SAAS,CAAc,IAAI,EAAE,CAAC;QAClE,MAAM,WAAW,GAAiB,CAAC;gBACjC,SAAS,EAAE,6CAA6C;gBACxD,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,eAAe;iBAClC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACzD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACrC;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,yHAAyH;iBACnI;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,eAAe,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,aAAa,EAAE;iBAChG;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC;gBACf,SAAS,EAAE,uDAAuD;gBAClE,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;YACxC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM;YACzF,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,WAAW;YACX,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG;YAC3C,SAAS,EAAE,WAAW,IAAI,4BAA4B,eAAe,CAAC,MAAM,WAAW;SACxF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Competitor Tracker agent — monitors competitor changes via TF-IDF cosine similarity.
|
|
3
|
+
* Uses the `natural` package for TF-IDF vectorization and cosine comparison.
|
|
4
|
+
* @module agents/competitor-tracker
|
|
5
|
+
*/
|
|
6
|
+
import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
|
|
7
|
+
import type { AIProvider } from '../lib/ai/provider-factory.js';
|
|
8
|
+
export declare class CompetitorTracker implements IAgent {
|
|
9
|
+
private readonly provider;
|
|
10
|
+
constructor(provider: AIProvider);
|
|
11
|
+
getName(): string;
|
|
12
|
+
getDomain(): string;
|
|
13
|
+
analyze(context: AgentContext): Promise<AgentResult>;
|
|
14
|
+
/** Extract competitor text blocks from scan result for TF-IDF analysis. */
|
|
15
|
+
private extractCompetitorTexts;
|
|
16
|
+
/** Use TF-IDF to detect trending terms across competitor content. */
|
|
17
|
+
private detectTrends;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=competitor-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitor-tracker.d.ts","sourceRoot":"","sources":["../../src/agents/competitor-tracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAwChE,qBAAa,iBAAkB,YAAW,MAAM;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAgF1D,2EAA2E;IAC3E,OAAO,CAAC,sBAAsB;IAiC9B,qEAAqE;YACvD,YAAY;CAoD3B"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { competitorIntelTemplate } from '../prompts/competitor-intel.js';
|
|
2
|
+
async function loadTfIdf() {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
4
|
+
const mod = require('natural');
|
|
5
|
+
return { TfIdf: mod['TfIdf'] };
|
|
6
|
+
}
|
|
7
|
+
/** Compute cosine similarity between two term-frequency vectors. */
|
|
8
|
+
function cosineSimilarity(vecA, vecB) {
|
|
9
|
+
let dot = 0;
|
|
10
|
+
let magA = 0;
|
|
11
|
+
let magB = 0;
|
|
12
|
+
for (const [term, wA] of vecA) {
|
|
13
|
+
magA += wA * wA;
|
|
14
|
+
const wB = vecB.get(term) ?? 0;
|
|
15
|
+
dot += wA * wB;
|
|
16
|
+
}
|
|
17
|
+
for (const wB of vecB.values()) {
|
|
18
|
+
magB += wB * wB;
|
|
19
|
+
}
|
|
20
|
+
const denom = Math.sqrt(magA) * Math.sqrt(magB);
|
|
21
|
+
return denom === 0 ? 0 : dot / denom;
|
|
22
|
+
}
|
|
23
|
+
export class CompetitorTracker {
|
|
24
|
+
provider;
|
|
25
|
+
constructor(provider) {
|
|
26
|
+
this.provider = provider;
|
|
27
|
+
}
|
|
28
|
+
getName() {
|
|
29
|
+
return 'competitor-tracker';
|
|
30
|
+
}
|
|
31
|
+
getDomain() {
|
|
32
|
+
return 'business';
|
|
33
|
+
}
|
|
34
|
+
async analyze(context) {
|
|
35
|
+
const assumptions = [];
|
|
36
|
+
const signals = [];
|
|
37
|
+
const { repo } = context;
|
|
38
|
+
// Attempt TF-IDF trend detection if prior competitor data exists
|
|
39
|
+
let trendAnalysis = '';
|
|
40
|
+
try {
|
|
41
|
+
const competitorData = this.extractCompetitorTexts(context);
|
|
42
|
+
if (competitorData.length >= 2) {
|
|
43
|
+
trendAnalysis = await this.detectTrends(competitorData);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
assumptions.push({
|
|
47
|
+
statement: 'Insufficient competitor data for trend detection — need at least 2 snapshots',
|
|
48
|
+
confidence: 1.0,
|
|
49
|
+
source: 'agent',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
assumptions.push({
|
|
55
|
+
statement: 'TF-IDF analysis failed — falling back to AI-only competitor analysis',
|
|
56
|
+
confidence: 1.0,
|
|
57
|
+
source: 'agent',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// AI-powered analysis
|
|
61
|
+
const prompt = [
|
|
62
|
+
`PERSONA: ${competitorIntelTemplate.persona}`,
|
|
63
|
+
`OBJECTIVE: ${competitorIntelTemplate.objective}`,
|
|
64
|
+
`CONSTRAINTS: ${competitorIntelTemplate.constraints}`,
|
|
65
|
+
`CONTEXT: Tracking competitors for ${repo.owner}/${repo.name} (ref: ${repo.ref})`,
|
|
66
|
+
`CONFIDENCE RUBRIC: ${competitorIntelTemplate.confidence_rubric}`,
|
|
67
|
+
].join('\n\n');
|
|
68
|
+
let rawOutput;
|
|
69
|
+
try {
|
|
70
|
+
rawOutput = await this.provider.chat([
|
|
71
|
+
{ role: 'system', content: prompt },
|
|
72
|
+
{
|
|
73
|
+
role: 'user',
|
|
74
|
+
content: [
|
|
75
|
+
`Produce competitive intelligence for ${repo.owner}/${repo.name}.`,
|
|
76
|
+
`Detail level: ${context.detail ?? 'balanced'}.`,
|
|
77
|
+
trendAnalysis ? `\nTF-IDF trend analysis:\n${trendAnalysis}` : '',
|
|
78
|
+
context.scanResult
|
|
79
|
+
? `\nPrior scan results:\n${JSON.stringify(context.scanResult, null, 2).slice(0, 4000)}`
|
|
80
|
+
: '',
|
|
81
|
+
].filter(Boolean).join(' '),
|
|
82
|
+
},
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
rawOutput = 'Competitor tracking could not be completed — AI provider unavailable.';
|
|
87
|
+
assumptions.push({
|
|
88
|
+
statement: 'AI analysis unavailable — provider returned an error',
|
|
89
|
+
confidence: 0.1,
|
|
90
|
+
source: 'agent',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
signals.push({
|
|
94
|
+
id: `ct-${Date.now()}-001`,
|
|
95
|
+
category: 'architecture',
|
|
96
|
+
severity: 'info',
|
|
97
|
+
title: 'Competitor Tracking Completed',
|
|
98
|
+
finding: `Competitive intelligence gathered for ${repo.owner}/${repo.name}`,
|
|
99
|
+
evidence: [{ filePath: 'README.md', lineRange: null, content: 'Competitor landscape analyzed', toolOutput: null }],
|
|
100
|
+
ruleAnchored: false,
|
|
101
|
+
agentConfidence: trendAnalysis ? 0.75 : 0.5,
|
|
102
|
+
priority: 'next',
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
findings: signals,
|
|
106
|
+
assumptions,
|
|
107
|
+
confidence: trendAnalysis ? 0.75 : 0.5,
|
|
108
|
+
rawOutput,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** Extract competitor text blocks from scan result for TF-IDF analysis. */
|
|
112
|
+
extractCompetitorTexts(context) {
|
|
113
|
+
const result = context.scanResult;
|
|
114
|
+
if (!result || typeof result !== 'object')
|
|
115
|
+
return [];
|
|
116
|
+
const texts = [];
|
|
117
|
+
const scan = result;
|
|
118
|
+
// Check for competitor data in various shapes
|
|
119
|
+
if (Array.isArray(scan.competitors)) {
|
|
120
|
+
for (const c of scan.competitors) {
|
|
121
|
+
if (typeof c === 'object' && c !== null) {
|
|
122
|
+
const comp = c;
|
|
123
|
+
const parts = [comp.name, comp.description, comp.features, comp.positioning]
|
|
124
|
+
.filter((v) => typeof v === 'string');
|
|
125
|
+
if (parts.length > 0)
|
|
126
|
+
texts.push(parts.join(' '));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (Array.isArray(scan.crawlResults)) {
|
|
131
|
+
for (const cr of scan.crawlResults) {
|
|
132
|
+
if (typeof cr === 'object' && cr !== null) {
|
|
133
|
+
const page = cr;
|
|
134
|
+
if (typeof page.content === 'string' && page.content.length > 50) {
|
|
135
|
+
texts.push(page.content.slice(0, 5000));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return texts;
|
|
141
|
+
}
|
|
142
|
+
/** Use TF-IDF to detect trending terms across competitor content. */
|
|
143
|
+
async detectTrends(texts) {
|
|
144
|
+
const { TfIdf } = await loadTfIdf();
|
|
145
|
+
const tfidf = new TfIdf();
|
|
146
|
+
for (const text of texts) {
|
|
147
|
+
tfidf.addDocument(text);
|
|
148
|
+
}
|
|
149
|
+
// Build term vectors for each document
|
|
150
|
+
const vectors = [];
|
|
151
|
+
for (let i = 0; i < texts.length; i++) {
|
|
152
|
+
const vec = new Map();
|
|
153
|
+
for (const { term, tfidf: score } of tfidf.listTerms(i)) {
|
|
154
|
+
vec.set(term, score);
|
|
155
|
+
}
|
|
156
|
+
vectors.push(vec);
|
|
157
|
+
}
|
|
158
|
+
// Compute pairwise similarity
|
|
159
|
+
const similarities = [];
|
|
160
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
161
|
+
for (let j = i + 1; j < vectors.length; j++) {
|
|
162
|
+
const sim = cosineSimilarity(vectors[i], vectors[j]);
|
|
163
|
+
similarities.push(`Doc ${i + 1} ↔ Doc ${j + 1}: ${(sim * 100).toFixed(1)}% similarity`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Extract top shared terms (appearing in majority of docs with high TF-IDF)
|
|
167
|
+
const termCounts = new Map();
|
|
168
|
+
for (const vec of vectors) {
|
|
169
|
+
for (const term of vec.keys()) {
|
|
170
|
+
termCounts.set(term, (termCounts.get(term) ?? 0) + 1);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const threshold = Math.ceil(texts.length * 0.6);
|
|
174
|
+
const sharedTerms = Array.from(termCounts.entries())
|
|
175
|
+
.filter(([, count]) => count >= threshold)
|
|
176
|
+
.sort(([, a], [, b]) => b - a)
|
|
177
|
+
.slice(0, 20)
|
|
178
|
+
.map(([term, count]) => `${term} (${count}/${texts.length} docs)`);
|
|
179
|
+
return [
|
|
180
|
+
'## TF-IDF Trend Analysis',
|
|
181
|
+
'',
|
|
182
|
+
'### Pairwise Similarity',
|
|
183
|
+
...similarities,
|
|
184
|
+
'',
|
|
185
|
+
'### Shared High-Signal Terms',
|
|
186
|
+
...sharedTerms.map((t) => `- ${t}`),
|
|
187
|
+
].join('\n');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=competitor-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitor-tracker.js","sourceRoot":"","sources":["../../src/agents/competitor-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finance Auditor specialist agent — unit economics, runway, burn rate analysis.
|
|
3
|
+
* @module agents/finance-auditor
|
|
4
|
+
*/
|
|
5
|
+
import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
|
|
6
|
+
import type { AIProvider } from '../lib/ai/provider-factory.js';
|
|
7
|
+
export declare class FinanceAuditor implements IAgent {
|
|
8
|
+
private readonly provider;
|
|
9
|
+
constructor(provider: AIProvider);
|
|
10
|
+
getName(): string;
|
|
11
|
+
getDomain(): string;
|
|
12
|
+
analyze(context: AgentContext): Promise<AgentResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=finance-auditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance-auditor.d.ts","sourceRoot":"","sources":["../../src/agents/finance-auditor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIhE,qBAAa,cAAe,YAAW,MAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA+D3D"}
|