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/dist/index.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point — process.argv parsing, global flags, command routing.
|
|
4
|
+
* @module index
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { createRequire } from 'node:module';
|
|
8
|
+
import { renderBanner } from './cli/tui/banner.js';
|
|
9
|
+
import { resolveFlags } from './cli/flag-resolver.js';
|
|
10
|
+
import { auditLog } from './lib/audit-logger.js';
|
|
11
|
+
import { printHint } from './cli/output/hints.js';
|
|
12
|
+
import { ConfigStore } from './config/config-store.js';
|
|
13
|
+
import { setAccessibleMode } from './cli/tui/colors.js';
|
|
14
|
+
const GlobalFlagsSchema = z.object({
|
|
15
|
+
version: z.boolean().default(false),
|
|
16
|
+
help: z.boolean().default(false),
|
|
17
|
+
yolo: z.boolean().default(false),
|
|
18
|
+
format: z.enum(['json', 'markdown', 'dual']).optional(),
|
|
19
|
+
verbose: z.boolean().default(false),
|
|
20
|
+
quiet: z.boolean().default(false),
|
|
21
|
+
outputDir: z.string().optional(),
|
|
22
|
+
compact: z.boolean().default(false),
|
|
23
|
+
detail: z.enum(['concise', 'balanced', 'exhaustive']).optional(),
|
|
24
|
+
accessible: z.boolean().default(false),
|
|
25
|
+
});
|
|
26
|
+
function parseArgs(argv) {
|
|
27
|
+
const args = argv.slice(2); // skip node + script
|
|
28
|
+
const rawFlags = {};
|
|
29
|
+
const positional = [];
|
|
30
|
+
for (let i = 0; i < args.length; i++) {
|
|
31
|
+
const arg = args[i] ?? '';
|
|
32
|
+
if (arg === '--version' || arg === '-V') {
|
|
33
|
+
rawFlags['version'] = true;
|
|
34
|
+
}
|
|
35
|
+
else if (arg === '--help' || arg === '-h') {
|
|
36
|
+
rawFlags['help'] = true;
|
|
37
|
+
}
|
|
38
|
+
else if (arg === '--yolo') {
|
|
39
|
+
rawFlags['yolo'] = true;
|
|
40
|
+
}
|
|
41
|
+
else if (arg === '--verbose') {
|
|
42
|
+
rawFlags['verbose'] = true;
|
|
43
|
+
}
|
|
44
|
+
else if (arg === '--quiet') {
|
|
45
|
+
rawFlags['quiet'] = true;
|
|
46
|
+
}
|
|
47
|
+
else if (arg === '--compact') {
|
|
48
|
+
rawFlags['compact'] = true;
|
|
49
|
+
}
|
|
50
|
+
else if (arg === '--accessible' || arg === '--a11y') {
|
|
51
|
+
rawFlags['accessible'] = true;
|
|
52
|
+
}
|
|
53
|
+
else if (arg === '--json') {
|
|
54
|
+
rawFlags['format'] = 'json';
|
|
55
|
+
}
|
|
56
|
+
else if (arg === '--debug') {
|
|
57
|
+
rawFlags['verbose'] = true;
|
|
58
|
+
}
|
|
59
|
+
else if (arg === '--format' && i + 1 < args.length) {
|
|
60
|
+
rawFlags['format'] = args[++i] ?? '';
|
|
61
|
+
}
|
|
62
|
+
else if (arg === '--output-dir' && i + 1 < args.length) {
|
|
63
|
+
rawFlags['outputDir'] = args[++i] ?? '';
|
|
64
|
+
}
|
|
65
|
+
else if (arg === '--detail' && i + 1 < args.length) {
|
|
66
|
+
rawFlags['detail'] = args[++i] ?? '';
|
|
67
|
+
}
|
|
68
|
+
else if (arg.startsWith('--')) {
|
|
69
|
+
// Pass unknown flags to sub-commands
|
|
70
|
+
positional.push(arg);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
positional.push(arg);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Ensure any leading --flags before the command are reordered so the
|
|
77
|
+
// first non-flag becomes the command. This prevents `saasgadget --dry-run scan`
|
|
78
|
+
// from treating `--dry-run` as the command name.
|
|
79
|
+
const firstNonFlag = positional.findIndex((a) => !a.startsWith('-'));
|
|
80
|
+
if (firstNonFlag > 0) {
|
|
81
|
+
const cmd = positional.splice(firstNonFlag, 1)[0];
|
|
82
|
+
positional.unshift(cmd);
|
|
83
|
+
}
|
|
84
|
+
const flags = GlobalFlagsSchema.parse(rawFlags);
|
|
85
|
+
const command = positional.length > 0 ? (positional[0] ?? null) : null;
|
|
86
|
+
const subArgs = positional.slice(1);
|
|
87
|
+
return { command, subArgs, flags };
|
|
88
|
+
}
|
|
89
|
+
function printVersion() {
|
|
90
|
+
try {
|
|
91
|
+
const req = createRequire(import.meta.url);
|
|
92
|
+
const pkg = req('../package.json');
|
|
93
|
+
console.log(pkg.version);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
console.log('0.0.0');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function printHelp(command) {
|
|
100
|
+
if (command) {
|
|
101
|
+
const loader = COMMANDS[command];
|
|
102
|
+
if (loader) {
|
|
103
|
+
try {
|
|
104
|
+
const mod = await loader();
|
|
105
|
+
if (mod.USAGE) {
|
|
106
|
+
console.log(mod.USAGE.trim());
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch { /* fall through to generic help */ }
|
|
111
|
+
}
|
|
112
|
+
console.log(`Usage: saasgadget ${command} [options]\n`);
|
|
113
|
+
console.log(`No detailed help available for '${command}'. Run 'saasgadget --help' to see all commands.`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
console.log(`Usage: saasgadget <command> [options]
|
|
117
|
+
|
|
118
|
+
Commands:
|
|
119
|
+
init Initialize CLI configuration
|
|
120
|
+
auth login Authenticate via GitHub Copilot token
|
|
121
|
+
doctor Validate environment readiness
|
|
122
|
+
settings View or modify settings
|
|
123
|
+
scan Scan a SaaS repository
|
|
124
|
+
pack <type> Generate a report pack
|
|
125
|
+
plan Plan a code change
|
|
126
|
+
fix Apply fixes to code
|
|
127
|
+
research Conduct web research
|
|
128
|
+
mcp Manage MCP servers
|
|
129
|
+
new Scaffold a new SaaS project
|
|
130
|
+
session Manage sessions (list, resume)
|
|
131
|
+
start Launch interactive TUI mode
|
|
132
|
+
|
|
133
|
+
Global Flags:
|
|
134
|
+
-V, --version Print version and exit
|
|
135
|
+
-h, --help Print help and exit
|
|
136
|
+
--yolo Skip all approval prompts (session-scoped)
|
|
137
|
+
--format <type> Output format: json, markdown, dual (default: dual)
|
|
138
|
+
--verbose Enable verbose logging
|
|
139
|
+
--quiet Suppress banner and non-essential output
|
|
140
|
+
--output-dir <path> Custom output directory
|
|
141
|
+
--compact Trigger context compaction on active session
|
|
142
|
+
--detail <level> Detail level: concise, balanced, exhaustive
|
|
143
|
+
--accessible, --a11y Enable accessible mode (NO_COLOR, screen-reader hints)
|
|
144
|
+
|
|
145
|
+
Examples:
|
|
146
|
+
$ sg scan https://github.com/octocat/hello-world
|
|
147
|
+
$ sg pack drift --repo octocat/hello-world --output-dir ./reports
|
|
148
|
+
$ sg doctor
|
|
149
|
+
$ sg start # Launch interactive TUI mode
|
|
150
|
+
$ sg mcp search "github"
|
|
151
|
+
$ sg new --template nextjs-saas --name my-app
|
|
152
|
+
|
|
153
|
+
For command-specific help:
|
|
154
|
+
$ sg <command> --help
|
|
155
|
+
`);
|
|
156
|
+
}
|
|
157
|
+
const COMMANDS = {
|
|
158
|
+
init: () => import('./cli/commands/init.js'),
|
|
159
|
+
auth: () => import('./cli/commands/auth.js'),
|
|
160
|
+
doctor: () => import('./cli/commands/doctor.js'),
|
|
161
|
+
settings: () => import('./cli/commands/settings.js'),
|
|
162
|
+
scan: () => import('./cli/commands/scan.js'),
|
|
163
|
+
pack: () => import('./cli/commands/pack.js'),
|
|
164
|
+
plan: () => import('./cli/commands/plan.js'),
|
|
165
|
+
fix: () => import('./cli/commands/fix.js'),
|
|
166
|
+
research: () => import('./cli/commands/research.js'),
|
|
167
|
+
mcp: () => import('./cli/commands/mcp.js'),
|
|
168
|
+
new: () => import('./cli/commands/new.js'),
|
|
169
|
+
session: () => import('./cli/commands/session.js'),
|
|
170
|
+
start: () => import('./cli/commands/start.js'),
|
|
171
|
+
};
|
|
172
|
+
/** Commands that auto-wrap in TUI when app.mode is 'tui'. */
|
|
173
|
+
const TUI_WRAPPABLE_COMMANDS = new Set([
|
|
174
|
+
'scan', 'pack', 'plan', 'fix', 'research',
|
|
175
|
+
]);
|
|
176
|
+
async function loadAppMode() {
|
|
177
|
+
try {
|
|
178
|
+
const config = await new ConfigStore().load();
|
|
179
|
+
return config.app.mode;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return 'cli'; // fallback when config unavailable
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async function main() {
|
|
186
|
+
const { command, subArgs, flags: rawFlags } = parseArgs(process.argv);
|
|
187
|
+
if (rawFlags.version) {
|
|
188
|
+
printVersion();
|
|
189
|
+
process.exit(0);
|
|
190
|
+
}
|
|
191
|
+
if (!command || rawFlags.help) {
|
|
192
|
+
if (!rawFlags.quiet) {
|
|
193
|
+
console.log(renderBanner());
|
|
194
|
+
}
|
|
195
|
+
await printHelp(command ?? undefined);
|
|
196
|
+
process.exit(0);
|
|
197
|
+
}
|
|
198
|
+
// Handle --compact: trigger context compaction on active session
|
|
199
|
+
if (rawFlags.compact) {
|
|
200
|
+
console.error('No active session. --compact requires an active session with token context.');
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
// Flag conflict detection
|
|
204
|
+
if (rawFlags.verbose && rawFlags.quiet) {
|
|
205
|
+
console.error('Conflicting flags: --verbose and --quiet cannot be used together.');
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
// Resolve effective flags: CLI > workspace > global config
|
|
209
|
+
const flags = await resolveFlags(command, rawFlags);
|
|
210
|
+
// Enable accessible mode (NO_COLOR + high-contrast + screen-reader hints)
|
|
211
|
+
if (flags.accessible) {
|
|
212
|
+
setAccessibleMode(true);
|
|
213
|
+
}
|
|
214
|
+
if (!flags.quiet) {
|
|
215
|
+
console.log(renderBanner());
|
|
216
|
+
}
|
|
217
|
+
// app.mode routing: when 'tui', analytical commands auto-wrap in TUI
|
|
218
|
+
const appMode = await loadAppMode();
|
|
219
|
+
if (appMode === 'tui' && TUI_WRAPPABLE_COMMANDS.has(command) && command !== 'start') {
|
|
220
|
+
// Auto-wrap: run the command then launch TUI for follow-up
|
|
221
|
+
const cmdLoader = COMMANDS[command];
|
|
222
|
+
if (!cmdLoader) {
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
const startMs = Date.now();
|
|
226
|
+
try {
|
|
227
|
+
const mod = await cmdLoader();
|
|
228
|
+
await mod.execute(subArgs, flags);
|
|
229
|
+
await auditLog('cli', 'command.complete', {
|
|
230
|
+
command,
|
|
231
|
+
args: subArgs,
|
|
232
|
+
elapsedMs: Date.now() - startMs,
|
|
233
|
+
status: 'ok',
|
|
234
|
+
}).catch(() => { });
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
await auditLog('cli', 'command.error', {
|
|
238
|
+
command,
|
|
239
|
+
args: subArgs,
|
|
240
|
+
elapsedMs: Date.now() - startMs,
|
|
241
|
+
status: 'error',
|
|
242
|
+
error: error instanceof Error ? error.message : String(error),
|
|
243
|
+
}).catch(() => { });
|
|
244
|
+
if (error instanceof Error && 'remediation' in error) {
|
|
245
|
+
const sgError = error;
|
|
246
|
+
console.error(`\n[${sgError.code}] ${sgError.message}`);
|
|
247
|
+
console.error(` → ${sgError.remediation}\n`);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
251
|
+
}
|
|
252
|
+
// Continue to TUI even after error so user can issue follow-up commands
|
|
253
|
+
}
|
|
254
|
+
// Launch TUI for follow-up commands in the same session
|
|
255
|
+
const startMod = await import('./cli/commands/start.js');
|
|
256
|
+
await startMod.execute([], flags);
|
|
257
|
+
process.exit(0);
|
|
258
|
+
}
|
|
259
|
+
const loader = COMMANDS[command];
|
|
260
|
+
if (!loader) {
|
|
261
|
+
console.error(`Unknown command: ${command}\nRun 'saasgadget --help' for usage.`);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
const startMs = Date.now();
|
|
265
|
+
try {
|
|
266
|
+
const mod = await loader();
|
|
267
|
+
await mod.execute(subArgs, flags);
|
|
268
|
+
// Contextual slash-command hints for TUI discoverability
|
|
269
|
+
printHint(command, flags.quiet);
|
|
270
|
+
// Log tool invocation on success
|
|
271
|
+
await auditLog('cli', 'command.complete', {
|
|
272
|
+
command,
|
|
273
|
+
args: subArgs,
|
|
274
|
+
elapsedMs: Date.now() - startMs,
|
|
275
|
+
status: 'ok',
|
|
276
|
+
}).catch(() => { });
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
// Log tool invocation on error
|
|
280
|
+
await auditLog('cli', 'command.error', {
|
|
281
|
+
command,
|
|
282
|
+
args: subArgs,
|
|
283
|
+
elapsedMs: Date.now() - startMs,
|
|
284
|
+
status: 'error',
|
|
285
|
+
error: error instanceof Error ? error.message : String(error),
|
|
286
|
+
}).catch(() => { });
|
|
287
|
+
if (error instanceof Error && 'remediation' in error) {
|
|
288
|
+
const sgError = error;
|
|
289
|
+
console.error(`\n[${sgError.code}] ${sgError.message}`);
|
|
290
|
+
console.error(` → ${sgError.remediation}\n`);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
294
|
+
}
|
|
295
|
+
process.exit(1);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
main();
|
|
299
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI provider factory — multi-LLM provider registry.
|
|
3
|
+
* v1: CopilotProvider active. v2: OpenAI + Anthropic via BYOK.
|
|
4
|
+
* PTC Pattern P8: Multi-LLM — pluggable provider registry.
|
|
5
|
+
* @module lib/ai/provider-factory
|
|
6
|
+
*/
|
|
7
|
+
export interface AIProvider {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
chat(messages: Array<{
|
|
10
|
+
role: 'system' | 'user' | 'assistant';
|
|
11
|
+
content: string;
|
|
12
|
+
}>): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
export interface ProviderConfig {
|
|
15
|
+
/** Provider identifier */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Model identifier (e.g., 'gpt-4o', 'claude-sonnet-4-20250514') */
|
|
18
|
+
model?: string;
|
|
19
|
+
/** API key for BYOK providers */
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
/** Provider-specific options */
|
|
22
|
+
options?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/** Cost tracking entry for a single provider call. */
|
|
25
|
+
export interface ProviderCostEntry {
|
|
26
|
+
provider: string;
|
|
27
|
+
model: string;
|
|
28
|
+
inputTokens: number;
|
|
29
|
+
outputTokens: number;
|
|
30
|
+
estimatedCostUsd: number;
|
|
31
|
+
timestamp: number;
|
|
32
|
+
}
|
|
33
|
+
/** Estimate cost and log it. Returns the entry. */
|
|
34
|
+
export declare function trackCost(provider: string, model: string, inputTokens: number, outputTokens: number): ProviderCostEntry;
|
|
35
|
+
/** Get all cost entries for the current session. */
|
|
36
|
+
export declare function getCostLog(): readonly ProviderCostEntry[];
|
|
37
|
+
/** Get total estimated cost for the current session. */
|
|
38
|
+
export declare function getTotalCost(): number;
|
|
39
|
+
/** Reset cost log (e.g., at session start). */
|
|
40
|
+
export declare function resetCostLog(): void;
|
|
41
|
+
type ProviderFactory = (config?: ProviderConfig) => AIProvider;
|
|
42
|
+
/**
|
|
43
|
+
* Register a custom AI provider factory.
|
|
44
|
+
*/
|
|
45
|
+
export declare function registerProvider(name: string, factory: ProviderFactory): void;
|
|
46
|
+
/**
|
|
47
|
+
* Register a Vercel AI SDK provider with a model identifier.
|
|
48
|
+
*/
|
|
49
|
+
export declare function registerVercelProvider(name: string, model: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get an AI provider by name. Falls back to 'copilot' if not found.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getAIProvider(name?: string, config?: ProviderConfig): AIProvider;
|
|
54
|
+
/**
|
|
55
|
+
* Get an AI provider with fallback chain support.
|
|
56
|
+
* Tries each provider in order until one succeeds.
|
|
57
|
+
*/
|
|
58
|
+
export declare function getAIProviderWithFallback(chain: string[], configMap?: Record<string, ProviderConfig>): AIProvider;
|
|
59
|
+
/**
|
|
60
|
+
* List all registered provider names.
|
|
61
|
+
*/
|
|
62
|
+
export declare function listProviders(): string[];
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=provider-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/provider-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpG;AAID,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,iBAAiB,CAYvH;AAED,oDAAoD;AACpD,wBAAgB,UAAU,IAAI,SAAS,iBAAiB,EAAE,CAEzD;AAED,wDAAwD;AACxD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,+CAA+C;AAC/C,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAkKD,KAAK,eAAe,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,KAAK,UAAU,CAAC;AAgB/D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAY,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,UAAU,CAMnF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACzC,UAAU,CA0BZ;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI provider factory — multi-LLM provider registry.
|
|
3
|
+
* v1: CopilotProvider active. v2: OpenAI + Anthropic via BYOK.
|
|
4
|
+
* PTC Pattern P8: Multi-LLM — pluggable provider registry.
|
|
5
|
+
* @module lib/ai/provider-factory
|
|
6
|
+
*/
|
|
7
|
+
import { ConfigError } from '../errors.js';
|
|
8
|
+
// ── Per-model cost rates (USD per 1K tokens) ──
|
|
9
|
+
const COST_RATES = {
|
|
10
|
+
'gpt-4o': { input: 0.0025, output: 0.01 },
|
|
11
|
+
'gpt-4o-mini': { input: 0.00015, output: 0.0006 },
|
|
12
|
+
'gpt-4': { input: 0.03, output: 0.06 },
|
|
13
|
+
'claude-sonnet-4-20250514': { input: 0.003, output: 0.015 },
|
|
14
|
+
'claude-3-5-haiku-20241022': { input: 0.001, output: 0.005 },
|
|
15
|
+
'claude-3-opus-20240229': { input: 0.015, output: 0.075 },
|
|
16
|
+
'copilot': { input: 0, output: 0 }, // free tier
|
|
17
|
+
};
|
|
18
|
+
const costLog = [];
|
|
19
|
+
/** Estimate cost and log it. Returns the entry. */
|
|
20
|
+
export function trackCost(provider, model, inputTokens, outputTokens) {
|
|
21
|
+
const rates = COST_RATES[model] ?? { input: 0, output: 0 };
|
|
22
|
+
const entry = {
|
|
23
|
+
provider,
|
|
24
|
+
model,
|
|
25
|
+
inputTokens,
|
|
26
|
+
outputTokens,
|
|
27
|
+
estimatedCostUsd: (inputTokens / 1000) * rates.input + (outputTokens / 1000) * rates.output,
|
|
28
|
+
timestamp: Date.now(),
|
|
29
|
+
};
|
|
30
|
+
costLog.push(entry);
|
|
31
|
+
return entry;
|
|
32
|
+
}
|
|
33
|
+
/** Get all cost entries for the current session. */
|
|
34
|
+
export function getCostLog() {
|
|
35
|
+
return costLog;
|
|
36
|
+
}
|
|
37
|
+
/** Get total estimated cost for the current session. */
|
|
38
|
+
export function getTotalCost() {
|
|
39
|
+
return costLog.reduce((sum, e) => sum + e.estimatedCostUsd, 0);
|
|
40
|
+
}
|
|
41
|
+
/** Reset cost log (e.g., at session start). */
|
|
42
|
+
export function resetCostLog() {
|
|
43
|
+
costLog.length = 0;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* CopilotProvider wraps @github/copilot-sdk for LLM calls.
|
|
47
|
+
* Lazy-loaded to allow CLI to function without SDK in non-AI paths.
|
|
48
|
+
*/
|
|
49
|
+
class CopilotProvider {
|
|
50
|
+
name = 'copilot';
|
|
51
|
+
async chat(messages) {
|
|
52
|
+
// Dynamic import so the binary can load even if the SDK is missing
|
|
53
|
+
const sdk = (await import('@github/copilot-sdk'));
|
|
54
|
+
// @github/copilot-sdk exports may vary — guard the call
|
|
55
|
+
const chatFn = sdk['chat'] ?? sdk['default'];
|
|
56
|
+
if (typeof chatFn !== 'function') {
|
|
57
|
+
throw new ConfigError('copilot-sdk does not export a chat function in this version.', 'Update @github/copilot-sdk or check your Node.js version.');
|
|
58
|
+
}
|
|
59
|
+
const response = (await chatFn({ messages }));
|
|
60
|
+
const text = response.text ?? response.content ?? '';
|
|
61
|
+
trackCost('copilot', 'copilot', estimateTokens(messages), estimateTokens([{ role: 'assistant', content: text }]));
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* OpenAI provider — wraps the `openai` package for GPT models.
|
|
67
|
+
* Requires BYOK: `OPENAI_API_KEY` env var or config-provided key.
|
|
68
|
+
*/
|
|
69
|
+
class OpenAIProvider {
|
|
70
|
+
name = 'openai';
|
|
71
|
+
model;
|
|
72
|
+
apiKey;
|
|
73
|
+
constructor(model, apiKey) {
|
|
74
|
+
this.model = model;
|
|
75
|
+
this.apiKey = apiKey;
|
|
76
|
+
}
|
|
77
|
+
async chat(messages) {
|
|
78
|
+
try {
|
|
79
|
+
// @ts-expect-error -- openai is an optional peer dependency
|
|
80
|
+
const { default: OpenAI } = (await import('openai'));
|
|
81
|
+
const client = new OpenAI({ apiKey: this.apiKey });
|
|
82
|
+
const response = await client.chat.completions.create({
|
|
83
|
+
model: this.model,
|
|
84
|
+
messages,
|
|
85
|
+
});
|
|
86
|
+
const text = response.choices[0]?.message?.content ?? '';
|
|
87
|
+
trackCost('openai', this.model, response.usage?.prompt_tokens ?? 0, response.usage?.completion_tokens ?? 0);
|
|
88
|
+
return text;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error instanceof Error && (error.message.includes('Cannot find module') || error.message.includes('Cannot find package'))) {
|
|
92
|
+
throw new ConfigError(`OpenAI SDK not installed. Run: npm install openai\n` +
|
|
93
|
+
`Provider "openai" (model: ${this.model}) requires the 'openai' package.`);
|
|
94
|
+
}
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Anthropic provider — wraps the `@anthropic-ai/sdk` package for Claude models.
|
|
101
|
+
* Requires BYOK: `ANTHROPIC_API_KEY` env var or config-provided key.
|
|
102
|
+
*/
|
|
103
|
+
class AnthropicProvider {
|
|
104
|
+
name = 'anthropic';
|
|
105
|
+
model;
|
|
106
|
+
apiKey;
|
|
107
|
+
constructor(model, apiKey) {
|
|
108
|
+
this.model = model;
|
|
109
|
+
this.apiKey = apiKey;
|
|
110
|
+
}
|
|
111
|
+
async chat(messages) {
|
|
112
|
+
try {
|
|
113
|
+
// @ts-expect-error -- @anthropic-ai/sdk is an optional peer dependency
|
|
114
|
+
const { default: Anthropic } = (await import('@anthropic-ai/sdk'));
|
|
115
|
+
const client = new Anthropic({ apiKey: this.apiKey });
|
|
116
|
+
// Anthropic separates system messages from the messages array
|
|
117
|
+
const systemMsg = messages.filter(m => m.role === 'system').map(m => m.content).join('\n\n');
|
|
118
|
+
const chatMessages = messages.filter(m => m.role !== 'system');
|
|
119
|
+
const response = await client.messages.create({
|
|
120
|
+
model: this.model,
|
|
121
|
+
max_tokens: 4096,
|
|
122
|
+
system: systemMsg || undefined,
|
|
123
|
+
messages: chatMessages,
|
|
124
|
+
});
|
|
125
|
+
const text = response.content.map((b) => b.text).join('');
|
|
126
|
+
trackCost('anthropic', this.model, response.usage?.input_tokens ?? 0, response.usage?.output_tokens ?? 0);
|
|
127
|
+
return text;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (error instanceof Error && (error.message.includes('Cannot find module') || error.message.includes('Cannot find package'))) {
|
|
131
|
+
throw new ConfigError(`Anthropic SDK not installed. Run: npm install @anthropic-ai/sdk\n` +
|
|
132
|
+
`Provider "anthropic" (model: ${this.model}) requires the '@anthropic-ai/sdk' package.`);
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Vercel AI SDK provider — wraps the `ai` package for multi-model support.
|
|
140
|
+
* Requires `ai` + a model provider package (e.g., `@ai-sdk/openai`).
|
|
141
|
+
*/
|
|
142
|
+
class VercelAIProvider {
|
|
143
|
+
name;
|
|
144
|
+
model;
|
|
145
|
+
constructor(name, model) {
|
|
146
|
+
this.name = name;
|
|
147
|
+
this.model = model;
|
|
148
|
+
}
|
|
149
|
+
async chat(messages) {
|
|
150
|
+
try {
|
|
151
|
+
// @ts-expect-error -- ai is an optional peer dependency
|
|
152
|
+
const ai = (await import('ai'));
|
|
153
|
+
const generateTextFn = ai['generateText'];
|
|
154
|
+
if (typeof generateTextFn !== 'function') {
|
|
155
|
+
throw new ConfigError('Vercel AI SDK does not export generateText in this version.', 'Update the `ai` package: npm install ai@latest');
|
|
156
|
+
}
|
|
157
|
+
const result = await generateTextFn({
|
|
158
|
+
model: this.model,
|
|
159
|
+
messages,
|
|
160
|
+
});
|
|
161
|
+
return result.text ?? '';
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (error instanceof Error && (error.message.includes('Cannot find module') || error.message.includes('Cannot find package'))) {
|
|
165
|
+
throw new ConfigError(`Vercel AI SDK not installed. Run: npm install ai @ai-sdk/openai\n` +
|
|
166
|
+
`Provider "${this.name}" requires the 'ai' package.`);
|
|
167
|
+
}
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const providerFactories = new Map([
|
|
173
|
+
['copilot', () => new CopilotProvider()],
|
|
174
|
+
['openai', (config) => {
|
|
175
|
+
const apiKey = config?.apiKey ?? process.env['OPENAI_API_KEY'] ?? '';
|
|
176
|
+
if (!apiKey)
|
|
177
|
+
throw new ConfigError('OpenAI API key required. Set OPENAI_API_KEY env var or configure via `saasgadget settings set ai.providers.openai.apiKey <key>`.');
|
|
178
|
+
return new OpenAIProvider(config?.model ?? 'gpt-4o', apiKey);
|
|
179
|
+
}],
|
|
180
|
+
['anthropic', (config) => {
|
|
181
|
+
const apiKey = config?.apiKey ?? process.env['ANTHROPIC_API_KEY'] ?? '';
|
|
182
|
+
if (!apiKey)
|
|
183
|
+
throw new ConfigError('Anthropic API key required. Set ANTHROPIC_API_KEY env var or configure via `saasgadget settings set ai.providers.anthropic.apiKey <key>`.');
|
|
184
|
+
return new AnthropicProvider(config?.model ?? 'claude-sonnet-4-20250514', apiKey);
|
|
185
|
+
}],
|
|
186
|
+
]);
|
|
187
|
+
/**
|
|
188
|
+
* Register a custom AI provider factory.
|
|
189
|
+
*/
|
|
190
|
+
export function registerProvider(name, factory) {
|
|
191
|
+
providerFactories.set(name, factory);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Register a Vercel AI SDK provider with a model identifier.
|
|
195
|
+
*/
|
|
196
|
+
export function registerVercelProvider(name, model) {
|
|
197
|
+
providerFactories.set(name, () => new VercelAIProvider(name, model));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get an AI provider by name. Falls back to 'copilot' if not found.
|
|
201
|
+
*/
|
|
202
|
+
export function getAIProvider(name = 'copilot', config) {
|
|
203
|
+
const factory = providerFactories.get(name);
|
|
204
|
+
if (!factory) {
|
|
205
|
+
throw new ConfigError(`Unknown AI provider: "${name}". Available: ${[...providerFactories.keys()].join(', ')}`, 'Use one of the available providers or register a custom one.');
|
|
206
|
+
}
|
|
207
|
+
return factory(config);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get an AI provider with fallback chain support.
|
|
211
|
+
* Tries each provider in order until one succeeds.
|
|
212
|
+
*/
|
|
213
|
+
export function getAIProviderWithFallback(chain, configMap) {
|
|
214
|
+
if (chain.length === 0) {
|
|
215
|
+
return getAIProvider('copilot');
|
|
216
|
+
}
|
|
217
|
+
// If only one provider, return directly (no fallback wrapping)
|
|
218
|
+
if (chain.length === 1) {
|
|
219
|
+
return getAIProvider(chain[0], configMap?.[chain[0]]);
|
|
220
|
+
}
|
|
221
|
+
// Wrap in a fallback proxy
|
|
222
|
+
return {
|
|
223
|
+
name: `fallback(${chain.join('→')})`,
|
|
224
|
+
async chat(messages) {
|
|
225
|
+
let lastError;
|
|
226
|
+
for (const providerName of chain) {
|
|
227
|
+
try {
|
|
228
|
+
const provider = getAIProvider(providerName, configMap?.[providerName]);
|
|
229
|
+
return await provider.chat(messages);
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
throw lastError ?? new Error('All providers in fallback chain failed.');
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* List all registered provider names.
|
|
241
|
+
*/
|
|
242
|
+
export function listProviders() {
|
|
243
|
+
return [...providerFactories.keys()];
|
|
244
|
+
}
|
|
245
|
+
/** Rough token estimation (4 chars ≈ 1 token). */
|
|
246
|
+
function estimateTokens(messages) {
|
|
247
|
+
return Math.ceil(messages.reduce((sum, m) => sum + m.content.length, 0) / 4);
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=provider-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../../src/lib/ai/provider-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function auditLog(sessionId: string, event: string, data: Record<string, unknown>): Promise<void>;
|
|
2
|
+
/**
|
|
3
|
+
* Rotate logs: remove files older than MAX_LOG_AGE_MS,
|
|
4
|
+
* then remove oldest files if total size exceeds MAX_LOG_DIR_BYTES.
|
|
5
|
+
*/
|
|
6
|
+
export declare function rotateLogs(): Promise<{
|
|
7
|
+
deleted: string[];
|
|
8
|
+
totalRemaining: number;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=audit-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/lib/audit-logger.ts"],"names":[],"mappings":"AA0CA,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAaf;AAOD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CzF"}
|