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
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { financeAuditTemplate } from '../prompts/finance-audit.js';
|
|
2
|
+
export class FinanceAuditor {
|
|
3
|
+
provider;
|
|
4
|
+
constructor(provider) {
|
|
5
|
+
this.provider = provider;
|
|
6
|
+
}
|
|
7
|
+
getName() {
|
|
8
|
+
return 'finance-auditor';
|
|
9
|
+
}
|
|
10
|
+
getDomain() {
|
|
11
|
+
return 'finance';
|
|
12
|
+
}
|
|
13
|
+
async analyze(context) {
|
|
14
|
+
const assumptions = [];
|
|
15
|
+
const signals = [];
|
|
16
|
+
const { repo } = context;
|
|
17
|
+
const prompt = [
|
|
18
|
+
`PERSONA: ${financeAuditTemplate.persona}`,
|
|
19
|
+
`OBJECTIVE: ${financeAuditTemplate.objective}`,
|
|
20
|
+
`CONSTRAINTS: ${financeAuditTemplate.constraints}`,
|
|
21
|
+
`CONTEXT: Analyzing ${repo.owner}/${repo.name} (ref: ${repo.ref})`,
|
|
22
|
+
`CONFIDENCE RUBRIC: ${financeAuditTemplate.confidence_rubric}`,
|
|
23
|
+
].join('\n\n');
|
|
24
|
+
let rawOutput;
|
|
25
|
+
try {
|
|
26
|
+
rawOutput = await this.provider.chat([
|
|
27
|
+
{ role: 'system', content: prompt },
|
|
28
|
+
{
|
|
29
|
+
role: 'user',
|
|
30
|
+
content: `Perform a financial audit of ${repo.owner}/${repo.name}. ` +
|
|
31
|
+
`Detail level: ${context.detail ?? 'balanced'}. ` +
|
|
32
|
+
(context.founderProfile
|
|
33
|
+
? `Founder context available: ${JSON.stringify(context.founderProfile)}`
|
|
34
|
+
: 'No founder context provided.') +
|
|
35
|
+
(context.scanResult
|
|
36
|
+
? `\n\nPrior scan results available:\n${JSON.stringify(context.scanResult, null, 2).slice(0, 4000)}`
|
|
37
|
+
: ''),
|
|
38
|
+
},
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
rawOutput = 'Financial audit could not be completed — AI provider unavailable.';
|
|
43
|
+
assumptions.push({
|
|
44
|
+
statement: 'AI analysis unavailable — provider returned an error',
|
|
45
|
+
confidence: 0.1,
|
|
46
|
+
source: 'agent',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
signals.push({
|
|
50
|
+
id: `fa-${Date.now()}-001`,
|
|
51
|
+
category: 'billing',
|
|
52
|
+
severity: 'info',
|
|
53
|
+
title: 'Financial Audit Completed',
|
|
54
|
+
finding: `Financial audit performed for ${repo.owner}/${repo.name}`,
|
|
55
|
+
evidence: [{ filePath: 'package.json', lineRange: null, content: 'Repository analyzed', toolOutput: null }],
|
|
56
|
+
ruleAnchored: false,
|
|
57
|
+
agentConfidence: 0.6,
|
|
58
|
+
priority: 'next',
|
|
59
|
+
});
|
|
60
|
+
assumptions.push({
|
|
61
|
+
statement: 'Financial data inferred from code — all figures are [ESTIMATED] unless explicitly verified',
|
|
62
|
+
confidence: 0.4,
|
|
63
|
+
source: 'agent',
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
findings: signals,
|
|
67
|
+
assumptions,
|
|
68
|
+
confidence: 0.6,
|
|
69
|
+
rawOutput,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=finance-auditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance-auditor.js","sourceRoot":"","sources":["../../src/agents/finance-auditor.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,OAAO,cAAc;IACR,QAAQ,CAAa;IAEtC,YAAY,QAAoB;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,SAAS;QACP,OAAO,SAAS,CAAC;IACnB,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,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,gCAAgC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI;wBAClE,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,mEAAmE,CAAC;YAChF,WAAW,CAAC,IAAI,CAAC;gBACf,SAAS,EAAE,sDAAsD;gBACjE,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM;YAC1B,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,2BAA2B;YAClC,OAAO,EAAE,iCAAiC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YACnE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YAC3G,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,GAAG;YACpB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,WAAW,CAAC,IAAI,CAAC;YACf,SAAS,EAAE,4FAA4F;YACvG,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,WAAW;YACX,UAAU,EAAE,GAAG;YACf,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GTM Strategist specialist agent — go-to-market strategy, social media marketing.
|
|
3
|
+
* @module agents/gtm-strategist
|
|
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 GtmStrategist 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=gtm-strategist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtm-strategist.d.ts","sourceRoot":"","sources":["../../src/agents/gtm-strategist.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,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;CA+D3D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { gtmSmmTemplate } from '../prompts/gtm-smm.js';
|
|
2
|
+
export class GtmStrategist {
|
|
3
|
+
provider;
|
|
4
|
+
constructor(provider) {
|
|
5
|
+
this.provider = provider;
|
|
6
|
+
}
|
|
7
|
+
getName() {
|
|
8
|
+
return 'gtm-strategist';
|
|
9
|
+
}
|
|
10
|
+
getDomain() {
|
|
11
|
+
return 'business';
|
|
12
|
+
}
|
|
13
|
+
async analyze(context) {
|
|
14
|
+
const assumptions = [];
|
|
15
|
+
const signals = [];
|
|
16
|
+
const { repo } = context;
|
|
17
|
+
const prompt = [
|
|
18
|
+
`PERSONA: ${gtmSmmTemplate.persona}`,
|
|
19
|
+
`OBJECTIVE: ${gtmSmmTemplate.objective}`,
|
|
20
|
+
`CONSTRAINTS: ${gtmSmmTemplate.constraints}`,
|
|
21
|
+
`CONTEXT: Analyzing ${repo.owner}/${repo.name} (ref: ${repo.ref})`,
|
|
22
|
+
`CONFIDENCE RUBRIC: ${gtmSmmTemplate.confidence_rubric}`,
|
|
23
|
+
].join('\n\n');
|
|
24
|
+
let rawOutput;
|
|
25
|
+
try {
|
|
26
|
+
rawOutput = await this.provider.chat([
|
|
27
|
+
{ role: 'system', content: prompt },
|
|
28
|
+
{
|
|
29
|
+
role: 'user',
|
|
30
|
+
content: `Design a GTM and social media strategy for ${repo.owner}/${repo.name}. ` +
|
|
31
|
+
`Detail level: ${context.detail ?? 'balanced'}. ` +
|
|
32
|
+
(context.founderProfile
|
|
33
|
+
? `Founder context available: ${JSON.stringify(context.founderProfile)}`
|
|
34
|
+
: 'No founder context provided.') +
|
|
35
|
+
(context.scanResult
|
|
36
|
+
? `\n\nPrior scan results available:\n${JSON.stringify(context.scanResult, null, 2).slice(0, 4000)}`
|
|
37
|
+
: ''),
|
|
38
|
+
},
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
rawOutput = 'GTM strategy could not be completed — AI provider unavailable.';
|
|
43
|
+
assumptions.push({
|
|
44
|
+
statement: 'AI analysis unavailable — provider returned an error',
|
|
45
|
+
confidence: 0.1,
|
|
46
|
+
source: 'agent',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
signals.push({
|
|
50
|
+
id: `gtm-${Date.now()}-001`,
|
|
51
|
+
category: 'architecture',
|
|
52
|
+
severity: 'info',
|
|
53
|
+
title: 'GTM Strategy Completed',
|
|
54
|
+
finding: `Go-to-market strategy designed for ${repo.owner}/${repo.name}`,
|
|
55
|
+
evidence: [{ filePath: 'README.md', lineRange: null, content: 'Repository analyzed', toolOutput: null }],
|
|
56
|
+
ruleAnchored: false,
|
|
57
|
+
agentConfidence: 0.65,
|
|
58
|
+
priority: 'next',
|
|
59
|
+
});
|
|
60
|
+
assumptions.push({
|
|
61
|
+
statement: 'Target audience inferred from product positioning — channel recommendations may need adjustment',
|
|
62
|
+
confidence: 0.5,
|
|
63
|
+
source: 'agent',
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
findings: signals,
|
|
67
|
+
assumptions,
|
|
68
|
+
confidence: 0.65,
|
|
69
|
+
rawOutput,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=gtm-strategist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtm-strategist.js","sourceRoot":"","sources":["../../src/agents/gtm-strategist.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,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,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,MAAM,MAAM,GAAG;YACb,YAAY,cAAc,CAAC,OAAO,EAAE;YACpC,cAAc,cAAc,CAAC,SAAS,EAAE;YACxC,gBAAgB,cAAc,CAAC,WAAW,EAAE;YAC5C,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,GAAG,GAAG;YAClE,sBAAsB,cAAc,CAAC,iBAAiB,EAAE;SACzD,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,8CAA8C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI;wBAChF,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,gEAAgE,CAAC;YAC7E,WAAW,CAAC,IAAI,CAAC;gBACf,SAAS,EAAE,sDAAsD;gBACjE,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM;YAC3B,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,sCAAsC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YACxE,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,IAAI;YACrB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,WAAW,CAAC,IAAI,CAAC;YACf,SAAS,EAAE,iGAAiG;YAC5G,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,WAAW;YACX,UAAU,EAAE,IAAI;YAChB,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator agent — task decomposition, specialist routing, output merging.
|
|
3
|
+
* @module agents/orchestrator
|
|
4
|
+
*/
|
|
5
|
+
import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
|
|
6
|
+
import type { IAgentInvoker } from '../contracts/agent-invoker.js';
|
|
7
|
+
import type { IConfigStore } from '../contracts/config-store.js';
|
|
8
|
+
import { SDKClient } from './sdk-client.js';
|
|
9
|
+
import type { PTCExecutor } from '../mcp/ptc-executor.js';
|
|
10
|
+
/**
|
|
11
|
+
* Orchestrator implements both IAgent (for direct analysis) and
|
|
12
|
+
* IAgentInvoker (for MCP tool → agent routing).
|
|
13
|
+
*/
|
|
14
|
+
export declare class Orchestrator implements IAgent, IAgentInvoker {
|
|
15
|
+
private readonly agents;
|
|
16
|
+
private readonly configStore;
|
|
17
|
+
private sdkClient;
|
|
18
|
+
private ptcExecutor;
|
|
19
|
+
private toolCallCount;
|
|
20
|
+
constructor(configStore: IConfigStore);
|
|
21
|
+
/** Register a specialist agent. */
|
|
22
|
+
registerAgent(agent: IAgent): void;
|
|
23
|
+
/** Attach a PTC executor for programmatic tool calling. */
|
|
24
|
+
setPTCExecutor(executor: PTCExecutor): void;
|
|
25
|
+
/** Get current cumulative tool call count for PTC threshold check. */
|
|
26
|
+
getToolCallCount(): number;
|
|
27
|
+
/** Check if PTC should activate based on accumulated tool calls. */
|
|
28
|
+
shouldUsePTC(): boolean;
|
|
29
|
+
getName(): string;
|
|
30
|
+
getDomain(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve the routing table for a given task type.
|
|
33
|
+
* Reads agents.routing from config per-invocation (not cached at startup).
|
|
34
|
+
*/
|
|
35
|
+
private resolveRouting;
|
|
36
|
+
/**
|
|
37
|
+
* IAgentInvoker.invoke — route tasks to specialist agents.
|
|
38
|
+
* Uses parallel execution via Promise.allSettled when multiple agents are routed.
|
|
39
|
+
*/
|
|
40
|
+
invoke(taskType: string, context: AgentContext, _options?: Record<string, unknown>): Promise<AgentResult>;
|
|
41
|
+
/**
|
|
42
|
+
* IAgent.analyze — direct orchestrator analysis (delegates to invoke).
|
|
43
|
+
*/
|
|
44
|
+
analyze(context: AgentContext): Promise<AgentResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Merge results from multiple specialist agents.
|
|
47
|
+
*/
|
|
48
|
+
private mergeResults;
|
|
49
|
+
/** Provide the SDK client to specialist agents that need it. */
|
|
50
|
+
getSDKClient(): SDKClient | null;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAgB1D;;;GAGG;AACH,qBAAa,YAAa,YAAW,MAAM,EAAE,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAAK;gBAEd,WAAW,EAAE,YAAY;IAIrC,mCAAmC;IACnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,2DAA2D;IAC3D,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI3C,sEAAsE;IACtE,gBAAgB,IAAI,MAAM;IAI1B,oEAAoE;IACpE,YAAY,IAAI,OAAO;IAIvB,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAInB;;;OAGG;YACW,cAAc;IAa5B;;;OAGG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,EACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC;IAyEvB;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAI1D;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB,gEAAgE;IAChE,YAAY,IAAI,SAAS,GAAG,IAAI;CAGjC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { SDKClient } from './sdk-client.js';
|
|
2
|
+
// --- Default static routing table ---
|
|
3
|
+
const DEFAULT_ROUTING = {
|
|
4
|
+
'tech-audit': ['code-inspector', 'security-compliance'],
|
|
5
|
+
'business-viability': ['business-analyst'],
|
|
6
|
+
'financial-audit': ['finance-auditor'],
|
|
7
|
+
'pitch-deck': ['business-analyst', 'gtm-strategist'],
|
|
8
|
+
'smm-gtm': ['gtm-strategist'],
|
|
9
|
+
'competitor-intel': ['business-analyst', 'competitor-tracker'],
|
|
10
|
+
'scan': ['code-inspector'],
|
|
11
|
+
'plan': ['code-inspector'],
|
|
12
|
+
'fix': ['code-inspector'],
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Orchestrator implements both IAgent (for direct analysis) and
|
|
16
|
+
* IAgentInvoker (for MCP tool → agent routing).
|
|
17
|
+
*/
|
|
18
|
+
export class Orchestrator {
|
|
19
|
+
agents = new Map();
|
|
20
|
+
configStore;
|
|
21
|
+
sdkClient = null;
|
|
22
|
+
ptcExecutor = null;
|
|
23
|
+
toolCallCount = 0;
|
|
24
|
+
constructor(configStore) {
|
|
25
|
+
this.configStore = configStore;
|
|
26
|
+
}
|
|
27
|
+
/** Register a specialist agent. */
|
|
28
|
+
registerAgent(agent) {
|
|
29
|
+
this.agents.set(agent.getName(), agent);
|
|
30
|
+
}
|
|
31
|
+
/** Attach a PTC executor for programmatic tool calling. */
|
|
32
|
+
setPTCExecutor(executor) {
|
|
33
|
+
this.ptcExecutor = executor;
|
|
34
|
+
}
|
|
35
|
+
/** Get current cumulative tool call count for PTC threshold check. */
|
|
36
|
+
getToolCallCount() {
|
|
37
|
+
return this.toolCallCount;
|
|
38
|
+
}
|
|
39
|
+
/** Check if PTC should activate based on accumulated tool calls. */
|
|
40
|
+
shouldUsePTC() {
|
|
41
|
+
return this.ptcExecutor !== null && this.ptcExecutor.shouldActivate(this.toolCallCount);
|
|
42
|
+
}
|
|
43
|
+
getName() {
|
|
44
|
+
return 'orchestrator';
|
|
45
|
+
}
|
|
46
|
+
getDomain() {
|
|
47
|
+
return 'orchestration';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the routing table for a given task type.
|
|
51
|
+
* Reads agents.routing from config per-invocation (not cached at startup).
|
|
52
|
+
*/
|
|
53
|
+
async resolveRouting(taskType) {
|
|
54
|
+
try {
|
|
55
|
+
const agentsConfig = await this.configStore.get('agents');
|
|
56
|
+
const routing = agentsConfig.routing;
|
|
57
|
+
if (routing && routing[taskType]) {
|
|
58
|
+
return routing[taskType];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Config read failure — fall back to defaults
|
|
63
|
+
}
|
|
64
|
+
return DEFAULT_ROUTING[taskType] ?? ['code-inspector'];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* IAgentInvoker.invoke — route tasks to specialist agents.
|
|
68
|
+
* Uses parallel execution via Promise.allSettled when multiple agents are routed.
|
|
69
|
+
*/
|
|
70
|
+
async invoke(taskType, context, _options) {
|
|
71
|
+
const agentNames = await this.resolveRouting(taskType);
|
|
72
|
+
const results = [];
|
|
73
|
+
// Initialize SDK client for this invocation if not already active
|
|
74
|
+
if (!this.sdkClient) {
|
|
75
|
+
this.sdkClient = new SDKClient({
|
|
76
|
+
sessionId: context.sessionId,
|
|
77
|
+
taskType,
|
|
78
|
+
approvalMode: context.toolProfile.name === 'run' ? 'yolo' : 'guided',
|
|
79
|
+
tokenBudget: context.tokenBudget,
|
|
80
|
+
toolProfile: context.toolProfile,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
await this.sdkClient.start();
|
|
85
|
+
// Parallel execution when multiple agents are routed
|
|
86
|
+
const agentEntries = agentNames.map((name) => ({
|
|
87
|
+
name,
|
|
88
|
+
agent: this.agents.get(name) ?? null,
|
|
89
|
+
}));
|
|
90
|
+
const settled = await Promise.allSettled(agentEntries.map(async ({ name, agent }) => {
|
|
91
|
+
if (!agent) {
|
|
92
|
+
return {
|
|
93
|
+
findings: [],
|
|
94
|
+
assumptions: [{
|
|
95
|
+
statement: `Agent "${name}" not registered — skipped`,
|
|
96
|
+
confidence: 1.0,
|
|
97
|
+
source: 'agent',
|
|
98
|
+
}],
|
|
99
|
+
confidence: 0,
|
|
100
|
+
rawOutput: `Agent "${name}" is not available.`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return agent.analyze(context);
|
|
104
|
+
}));
|
|
105
|
+
for (const outcome of settled) {
|
|
106
|
+
if (outcome.status === 'fulfilled') {
|
|
107
|
+
results.push(outcome.value);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
results.push({
|
|
111
|
+
findings: [],
|
|
112
|
+
assumptions: [{
|
|
113
|
+
statement: `Agent failed: ${outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason)}`,
|
|
114
|
+
confidence: 1.0,
|
|
115
|
+
source: 'agent',
|
|
116
|
+
}],
|
|
117
|
+
confidence: 0,
|
|
118
|
+
rawOutput: `Agent error: ${outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason)}`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Track cumulative tool calls for PTC threshold
|
|
123
|
+
this.toolCallCount += agentNames.length;
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
const totalTokens = results.reduce((sum, r) => {
|
|
127
|
+
// Estimate tokens from raw output length
|
|
128
|
+
return sum + Math.ceil(r.rawOutput.length / 4);
|
|
129
|
+
}, 0);
|
|
130
|
+
await this.sdkClient.stop('completed', totalTokens);
|
|
131
|
+
this.sdkClient = null;
|
|
132
|
+
}
|
|
133
|
+
return this.mergeResults(results);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* IAgent.analyze — direct orchestrator analysis (delegates to invoke).
|
|
137
|
+
*/
|
|
138
|
+
async analyze(context) {
|
|
139
|
+
return this.invoke('scan', context);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Merge results from multiple specialist agents.
|
|
143
|
+
*/
|
|
144
|
+
mergeResults(results) {
|
|
145
|
+
const allFindings = [];
|
|
146
|
+
const allAssumptions = [];
|
|
147
|
+
const rawParts = [];
|
|
148
|
+
let totalConfidence = 0;
|
|
149
|
+
for (const result of results) {
|
|
150
|
+
allFindings.push(...result.findings);
|
|
151
|
+
allAssumptions.push(...result.assumptions);
|
|
152
|
+
rawParts.push(result.rawOutput);
|
|
153
|
+
totalConfidence += result.confidence;
|
|
154
|
+
}
|
|
155
|
+
// Deduplicate signals by ID
|
|
156
|
+
const uniqueFindings = new Map();
|
|
157
|
+
for (const f of allFindings) {
|
|
158
|
+
if (!uniqueFindings.has(f.id)) {
|
|
159
|
+
uniqueFindings.set(f.id, f);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
findings: Array.from(uniqueFindings.values()),
|
|
164
|
+
assumptions: allAssumptions,
|
|
165
|
+
confidence: results.length > 0 ? totalConfidence / results.length : 0,
|
|
166
|
+
rawOutput: rawParts.join('\n\n---\n\n'),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/** Provide the SDK client to specialist agents that need it. */
|
|
170
|
+
getSDKClient() {
|
|
171
|
+
return this.sdkClient;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copilot SDK client — session management and tool invocation.
|
|
3
|
+
* @module agents/sdk-client
|
|
4
|
+
*/
|
|
5
|
+
import type { AIProvider, ProviderConfig } from '../lib/ai/provider-factory.js';
|
|
6
|
+
export interface SDKClientOptions {
|
|
7
|
+
sessionId: string;
|
|
8
|
+
taskType: string;
|
|
9
|
+
approvalMode: 'guided' | 'yolo';
|
|
10
|
+
tokenBudget: number;
|
|
11
|
+
toolProfile: {
|
|
12
|
+
name: string;
|
|
13
|
+
allowedTools: string[];
|
|
14
|
+
requireApproval: string[];
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
/** AI provider name (default: 'copilot'). */
|
|
18
|
+
provider?: string;
|
|
19
|
+
/** Provider config for BYOK (api key, model override). */
|
|
20
|
+
providerConfig?: ProviderConfig;
|
|
21
|
+
/** Fallback chain of provider names to try in order. */
|
|
22
|
+
fallbackChain?: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface SDKChatMessage {
|
|
25
|
+
role: 'system' | 'user' | 'assistant';
|
|
26
|
+
content: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Copilot SDK client wrapper — manages AI provider session with hooks.
|
|
30
|
+
* Constitution Principle XI: client.stop() in try/finally.
|
|
31
|
+
*/
|
|
32
|
+
export declare class SDKClient {
|
|
33
|
+
private readonly provider;
|
|
34
|
+
private readonly hookCtx;
|
|
35
|
+
private readonly options;
|
|
36
|
+
private started;
|
|
37
|
+
constructor(options: SDKClientOptions);
|
|
38
|
+
/** Start the SDK session. */
|
|
39
|
+
start(): Promise<void>;
|
|
40
|
+
/** Send a chat message with system context and get a response. */
|
|
41
|
+
chat(userMessage: string, additionalContext?: string): Promise<string>;
|
|
42
|
+
/** Stop the SDK session. */
|
|
43
|
+
stop(finalState: string, tokensUsed: number): Promise<void>;
|
|
44
|
+
getProvider(): AIProvider;
|
|
45
|
+
getSessionId(): string;
|
|
46
|
+
getToolProfile(): SDKClientOptions['toolProfile'];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=sdk-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-client.d.ts","sourceRoot":"","sources":["../../src/agents/sdk-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AA2ChF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,gBAAgB;IAerC,6BAA6B;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,kEAAkE;IAC5D,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0C5E,4BAA4B;IACtB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE,WAAW,IAAI,UAAU;IAIzB,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,gBAAgB,CAAC,aAAa,CAAC;CAGlD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { getAIProvider, getAIProviderWithFallback } from '../lib/ai/provider-factory.js';
|
|
2
|
+
import { AuthError } from '../lib/errors.js';
|
|
3
|
+
import { onSessionStart, onSessionEnd, onPreToolUse, onPostToolUse, onErrorOccurred, } from '../session/sdk-hooks.js';
|
|
4
|
+
/** System message content per system-message.md prompt outline. */
|
|
5
|
+
const SYSTEM_MESSAGE = `You are "Gadget." You are the Lead Director of Operations in the Operations Department at SaaSGadgetCLI, in partnership with WxZRD Consulting. You will complete your objective efficiently, as to satisfy the customers with their requests.
|
|
6
|
+
|
|
7
|
+
MOOD: Composed and authoritative. You set the standard that every other agent in this building follows. Steady, reliable, unflappable — the calm voice in every session.
|
|
8
|
+
|
|
9
|
+
You are a SaaSGadgetCLI specialist agent — an AI-powered analysis tool for solo SaaS founders. You help founders understand, evaluate, and improve their SaaS repositories through structured analysis.
|
|
10
|
+
|
|
11
|
+
SAFETY RULES (non-negotiable):
|
|
12
|
+
- Default to guided mode: request explicit confirmation before any write action.
|
|
13
|
+
- Never execute destructive operations without approval.
|
|
14
|
+
- Never fabricate data — if information is unavailable, state that explicitly.
|
|
15
|
+
- If a tool call fails, report the failure — do not silently retry with altered parameters.
|
|
16
|
+
|
|
17
|
+
OUTPUT FORMAT:
|
|
18
|
+
- All analytical outputs MUST produce both JSON data artifact and authored markdown summary.
|
|
19
|
+
- Utility operations (init, auth, doctor, settings, mcp, new, session) are exempt.
|
|
20
|
+
|
|
21
|
+
TRANSPARENCY REQUIREMENTS:
|
|
22
|
+
- Disclose ALL assumptions in a dedicated "Assumptions" section.
|
|
23
|
+
- Tag each assumption with its source: "rule" | "agent" | "profile" | "inferred".
|
|
24
|
+
- Include data freshness timestamps for any time-sensitive claims.
|
|
25
|
+
|
|
26
|
+
CONFIDENCE SCORING:
|
|
27
|
+
- Assign a confidence score (0.0-1.0) to every analytical claim.
|
|
28
|
+
- When confidence < 0.5, explicitly flag the finding as uncertain.
|
|
29
|
+
|
|
30
|
+
TONE:
|
|
31
|
+
- Direct, concise, actionable.
|
|
32
|
+
- Lead with the most important finding first.
|
|
33
|
+
- When delivering bad news, pair it with a concrete next step.`;
|
|
34
|
+
/**
|
|
35
|
+
* Copilot SDK client wrapper — manages AI provider session with hooks.
|
|
36
|
+
* Constitution Principle XI: client.stop() in try/finally.
|
|
37
|
+
*/
|
|
38
|
+
export class SDKClient {
|
|
39
|
+
provider;
|
|
40
|
+
hookCtx;
|
|
41
|
+
options;
|
|
42
|
+
started = false;
|
|
43
|
+
constructor(options) {
|
|
44
|
+
this.options = options;
|
|
45
|
+
// Support fallback chain or single provider selection
|
|
46
|
+
if (options.fallbackChain && options.fallbackChain.length > 1) {
|
|
47
|
+
this.provider = getAIProviderWithFallback(options.fallbackChain);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.provider = getAIProvider(options.provider ?? 'copilot', options.providerConfig);
|
|
51
|
+
}
|
|
52
|
+
this.hookCtx = {
|
|
53
|
+
sessionId: options.sessionId,
|
|
54
|
+
taskType: options.taskType,
|
|
55
|
+
approvalMode: options.approvalMode,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Start the SDK session. */
|
|
59
|
+
async start() {
|
|
60
|
+
await onSessionStart(this.hookCtx);
|
|
61
|
+
this.started = true;
|
|
62
|
+
}
|
|
63
|
+
/** Send a chat message with system context and get a response. */
|
|
64
|
+
async chat(userMessage, additionalContext) {
|
|
65
|
+
if (!this.started)
|
|
66
|
+
await this.start();
|
|
67
|
+
const messages = [
|
|
68
|
+
{ role: 'system', content: SYSTEM_MESSAGE },
|
|
69
|
+
];
|
|
70
|
+
if (additionalContext) {
|
|
71
|
+
messages.push({ role: 'system', content: additionalContext });
|
|
72
|
+
}
|
|
73
|
+
messages.push({ role: 'user', content: userMessage });
|
|
74
|
+
const startMs = Date.now();
|
|
75
|
+
try {
|
|
76
|
+
const hookResult = await onPreToolUse(this.hookCtx, 'copilot-chat', { userMessage: userMessage.slice(0, 200) });
|
|
77
|
+
if (!hookResult.allow) {
|
|
78
|
+
throw new AuthError(`Chat denied: ${hookResult.reason}`, 'Check your approval mode settings or use `--yolo` for auto-approve.');
|
|
79
|
+
}
|
|
80
|
+
const response = await this.provider.chat(messages);
|
|
81
|
+
await onPostToolUse(this.hookCtx, 'copilot-chat', {
|
|
82
|
+
isError: false,
|
|
83
|
+
elapsedMs: Date.now() - startMs,
|
|
84
|
+
});
|
|
85
|
+
return response;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
await onPostToolUse(this.hookCtx, 'copilot-chat', {
|
|
89
|
+
isError: true,
|
|
90
|
+
elapsedMs: Date.now() - startMs,
|
|
91
|
+
});
|
|
92
|
+
await onErrorOccurred(this.hookCtx, {
|
|
93
|
+
type: 'sdk-chat-error',
|
|
94
|
+
message: error instanceof Error ? error.message : String(error),
|
|
95
|
+
context: {},
|
|
96
|
+
});
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Stop the SDK session. */
|
|
101
|
+
async stop(finalState, tokensUsed) {
|
|
102
|
+
try {
|
|
103
|
+
await onSessionEnd(this.hookCtx, { tokensUsed, finalState });
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
this.started = false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
getProvider() {
|
|
110
|
+
return this.provider;
|
|
111
|
+
}
|
|
112
|
+
getSessionId() {
|
|
113
|
+
return this.options.sessionId;
|
|
114
|
+
}
|
|
115
|
+
getToolProfile() {
|
|
116
|
+
return this.options.toolProfile;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=sdk-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-client.js","sourceRoot":"","sources":["../../src/agents/sdk-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security & Compliance specialist agent — OWASP, secrets, auth patterns.
|
|
3
|
+
* @module agents/security-compliance
|
|
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 SecurityComplianceAgent 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=security-compliance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-compliance.d.ts","sourceRoot":"","sources":["../../src/agents/security-compliance.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;AAKhE,qBAAa,uBAAwB,YAAW,MAAM;IACpD,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+E3D"}
|