@build-astron-co/nimbus 0.2.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 +21 -0
- package/README.md +628 -0
- package/bin/nimbus +38 -0
- package/package.json +80 -0
- package/src/__tests__/app.test.ts +76 -0
- package/src/__tests__/audit.test.ts +877 -0
- package/src/__tests__/circuit-breaker.test.ts +116 -0
- package/src/__tests__/cli-run.test.ts +115 -0
- package/src/__tests__/context-manager.test.ts +502 -0
- package/src/__tests__/context.test.ts +242 -0
- package/src/__tests__/enterprise.test.ts +401 -0
- package/src/__tests__/generator.test.ts +433 -0
- package/src/__tests__/hooks.test.ts +582 -0
- package/src/__tests__/init.test.ts +436 -0
- package/src/__tests__/intent-parser.test.ts +229 -0
- package/src/__tests__/llm-router.test.ts +209 -0
- package/src/__tests__/lsp.test.ts +293 -0
- package/src/__tests__/modes.test.ts +336 -0
- package/src/__tests__/permissions.test.ts +338 -0
- package/src/__tests__/serve.test.ts +275 -0
- package/src/__tests__/sessions.test.ts +227 -0
- package/src/__tests__/sharing.test.ts +288 -0
- package/src/__tests__/snapshots.test.ts +581 -0
- package/src/__tests__/state-db.test.ts +334 -0
- package/src/__tests__/stream-with-tools.test.ts +732 -0
- package/src/__tests__/subagents.test.ts +176 -0
- package/src/__tests__/system-prompt.test.ts +169 -0
- package/src/__tests__/tool-converter.test.ts +256 -0
- package/src/__tests__/tool-schemas.test.ts +397 -0
- package/src/__tests__/tools.test.ts +143 -0
- package/src/__tests__/version.test.ts +49 -0
- package/src/agent/compaction-agent.ts +227 -0
- package/src/agent/context-manager.ts +435 -0
- package/src/agent/context.ts +427 -0
- package/src/agent/deploy-preview.ts +426 -0
- package/src/agent/index.ts +68 -0
- package/src/agent/loop.ts +717 -0
- package/src/agent/modes.ts +429 -0
- package/src/agent/permissions.ts +466 -0
- package/src/agent/subagents/base.ts +116 -0
- package/src/agent/subagents/cost.ts +51 -0
- package/src/agent/subagents/explore.ts +42 -0
- package/src/agent/subagents/general.ts +54 -0
- package/src/agent/subagents/index.ts +102 -0
- package/src/agent/subagents/infra.ts +59 -0
- package/src/agent/subagents/security.ts +69 -0
- package/src/agent/system-prompt.ts +436 -0
- package/src/app.ts +122 -0
- package/src/audit/activity-log.ts +290 -0
- package/src/audit/compliance-checker.ts +540 -0
- package/src/audit/cost-tracker.ts +318 -0
- package/src/audit/index.ts +23 -0
- package/src/audit/security-scanner.ts +596 -0
- package/src/auth/guard.ts +75 -0
- package/src/auth/index.ts +56 -0
- package/src/auth/oauth.ts +455 -0
- package/src/auth/providers.ts +470 -0
- package/src/auth/sso.ts +113 -0
- package/src/auth/store.ts +505 -0
- package/src/auth/types.ts +187 -0
- package/src/build.ts +141 -0
- package/src/cli/index.ts +16 -0
- package/src/cli/init.ts +854 -0
- package/src/cli/openapi-spec.ts +356 -0
- package/src/cli/run.ts +237 -0
- package/src/cli/serve-auth.ts +80 -0
- package/src/cli/serve.ts +462 -0
- package/src/cli/web.ts +67 -0
- package/src/cli.ts +1417 -0
- package/src/clients/core-engine-client.ts +227 -0
- package/src/clients/enterprise-client.ts +334 -0
- package/src/clients/generator-client.ts +351 -0
- package/src/clients/git-client.ts +627 -0
- package/src/clients/github-client.ts +410 -0
- package/src/clients/helm-client.ts +504 -0
- package/src/clients/index.ts +80 -0
- package/src/clients/k8s-client.ts +497 -0
- package/src/clients/llm-client.ts +161 -0
- package/src/clients/rest-client.ts +130 -0
- package/src/clients/service-discovery.ts +33 -0
- package/src/clients/terraform-client.ts +482 -0
- package/src/clients/tools-client.ts +1843 -0
- package/src/clients/ws-client.ts +115 -0
- package/src/commands/analyze/index.ts +352 -0
- package/src/commands/apply/helm.ts +473 -0
- package/src/commands/apply/index.ts +213 -0
- package/src/commands/apply/k8s.ts +454 -0
- package/src/commands/apply/terraform.ts +582 -0
- package/src/commands/ask.ts +167 -0
- package/src/commands/audit/index.ts +238 -0
- package/src/commands/auth-cloud.ts +294 -0
- package/src/commands/auth-list.ts +134 -0
- package/src/commands/auth-profile.ts +121 -0
- package/src/commands/auth-status.ts +141 -0
- package/src/commands/aws/ec2.ts +501 -0
- package/src/commands/aws/iam.ts +397 -0
- package/src/commands/aws/index.ts +133 -0
- package/src/commands/aws/lambda.ts +396 -0
- package/src/commands/aws/rds.ts +439 -0
- package/src/commands/aws/s3.ts +439 -0
- package/src/commands/aws/vpc.ts +393 -0
- package/src/commands/aws-discover.ts +649 -0
- package/src/commands/aws-terraform.ts +805 -0
- package/src/commands/azure/aks.ts +376 -0
- package/src/commands/azure/functions.ts +253 -0
- package/src/commands/azure/index.ts +116 -0
- package/src/commands/azure/storage.ts +478 -0
- package/src/commands/azure/vm.ts +355 -0
- package/src/commands/billing/index.ts +256 -0
- package/src/commands/chat.ts +314 -0
- package/src/commands/config.ts +346 -0
- package/src/commands/cost/cloud-cost-estimator.ts +266 -0
- package/src/commands/cost/estimator.ts +79 -0
- package/src/commands/cost/index.ts +594 -0
- package/src/commands/cost/parsers/terraform.ts +273 -0
- package/src/commands/cost/parsers/types.ts +25 -0
- package/src/commands/cost/pricing/aws.ts +544 -0
- package/src/commands/cost/pricing/azure.ts +499 -0
- package/src/commands/cost/pricing/gcp.ts +396 -0
- package/src/commands/cost/pricing/index.ts +40 -0
- package/src/commands/demo.ts +250 -0
- package/src/commands/doctor.ts +794 -0
- package/src/commands/drift/index.ts +439 -0
- package/src/commands/explain.ts +277 -0
- package/src/commands/feedback.ts +389 -0
- package/src/commands/fix.ts +324 -0
- package/src/commands/fs/index.ts +402 -0
- package/src/commands/gcp/compute.ts +325 -0
- package/src/commands/gcp/functions.ts +271 -0
- package/src/commands/gcp/gke.ts +438 -0
- package/src/commands/gcp/iam.ts +344 -0
- package/src/commands/gcp/index.ts +129 -0
- package/src/commands/gcp/storage.ts +284 -0
- package/src/commands/generate-helm.ts +1249 -0
- package/src/commands/generate-k8s.ts +1560 -0
- package/src/commands/generate-terraform.ts +1460 -0
- package/src/commands/gh/index.ts +863 -0
- package/src/commands/git/index.ts +1343 -0
- package/src/commands/helm/index.ts +1126 -0
- package/src/commands/help.ts +539 -0
- package/src/commands/history.ts +142 -0
- package/src/commands/import.ts +868 -0
- package/src/commands/index.ts +367 -0
- package/src/commands/init.ts +1046 -0
- package/src/commands/k8s/index.ts +1137 -0
- package/src/commands/login.ts +631 -0
- package/src/commands/logout.ts +83 -0
- package/src/commands/onboarding.ts +228 -0
- package/src/commands/plan/display.ts +279 -0
- package/src/commands/plan/index.ts +599 -0
- package/src/commands/preview.ts +452 -0
- package/src/commands/questionnaire.ts +1270 -0
- package/src/commands/resume.ts +55 -0
- package/src/commands/team/index.ts +346 -0
- package/src/commands/template.ts +232 -0
- package/src/commands/tf/index.ts +1034 -0
- package/src/commands/upgrade.ts +550 -0
- package/src/commands/usage/index.ts +134 -0
- package/src/commands/version.ts +170 -0
- package/src/compat/index.ts +2 -0
- package/src/compat/runtime.ts +12 -0
- package/src/compat/sqlite.ts +107 -0
- package/src/config/index.ts +17 -0
- package/src/config/manager.ts +530 -0
- package/src/config/safety-policy.ts +358 -0
- package/src/config/schema.ts +125 -0
- package/src/config/types.ts +527 -0
- package/src/context/context-db.ts +199 -0
- package/src/demo/index.ts +349 -0
- package/src/demo/scenarios/full-journey.ts +229 -0
- package/src/demo/scenarios/getting-started.ts +127 -0
- package/src/demo/scenarios/helm-release.ts +341 -0
- package/src/demo/scenarios/k8s-deployment.ts +194 -0
- package/src/demo/scenarios/terraform-vpc.ts +170 -0
- package/src/demo/types.ts +92 -0
- package/src/engine/cost-estimator.ts +438 -0
- package/src/engine/diagram-generator.ts +256 -0
- package/src/engine/drift-detector.ts +902 -0
- package/src/engine/executor.ts +1035 -0
- package/src/engine/index.ts +76 -0
- package/src/engine/orchestrator.ts +636 -0
- package/src/engine/planner.ts +720 -0
- package/src/engine/safety.ts +743 -0
- package/src/engine/verifier.ts +770 -0
- package/src/enterprise/audit.ts +348 -0
- package/src/enterprise/auth.ts +270 -0
- package/src/enterprise/billing.ts +822 -0
- package/src/enterprise/index.ts +17 -0
- package/src/enterprise/teams.ts +443 -0
- package/src/generator/best-practices.ts +1608 -0
- package/src/generator/helm.ts +630 -0
- package/src/generator/index.ts +37 -0
- package/src/generator/intent-parser.ts +514 -0
- package/src/generator/kubernetes.ts +976 -0
- package/src/generator/terraform.ts +1867 -0
- package/src/history/index.ts +8 -0
- package/src/history/manager.ts +322 -0
- package/src/history/types.ts +34 -0
- package/src/hooks/config.ts +432 -0
- package/src/hooks/engine.ts +391 -0
- package/src/hooks/index.ts +4 -0
- package/src/llm/auth-bridge.ts +198 -0
- package/src/llm/circuit-breaker.ts +140 -0
- package/src/llm/config-loader.ts +201 -0
- package/src/llm/cost-calculator.ts +171 -0
- package/src/llm/index.ts +8 -0
- package/src/llm/model-aliases.ts +115 -0
- package/src/llm/provider-registry.ts +63 -0
- package/src/llm/providers/anthropic.ts +433 -0
- package/src/llm/providers/bedrock.ts +477 -0
- package/src/llm/providers/google.ts +405 -0
- package/src/llm/providers/ollama.ts +767 -0
- package/src/llm/providers/openai-compatible.ts +340 -0
- package/src/llm/providers/openai.ts +328 -0
- package/src/llm/providers/openrouter.ts +338 -0
- package/src/llm/router.ts +1035 -0
- package/src/llm/types.ts +232 -0
- package/src/lsp/client.ts +298 -0
- package/src/lsp/languages.ts +116 -0
- package/src/lsp/manager.ts +278 -0
- package/src/mcp/client.ts +402 -0
- package/src/mcp/index.ts +5 -0
- package/src/mcp/manager.ts +133 -0
- package/src/nimbus.ts +214 -0
- package/src/plugins/index.ts +27 -0
- package/src/plugins/loader.ts +334 -0
- package/src/plugins/manager.ts +376 -0
- package/src/plugins/types.ts +284 -0
- package/src/scanners/cicd-scanner.ts +258 -0
- package/src/scanners/cloud-scanner.ts +466 -0
- package/src/scanners/framework-scanner.ts +469 -0
- package/src/scanners/iac-scanner.ts +388 -0
- package/src/scanners/index.ts +539 -0
- package/src/scanners/language-scanner.ts +276 -0
- package/src/scanners/package-manager-scanner.ts +277 -0
- package/src/scanners/types.ts +172 -0
- package/src/sessions/manager.ts +365 -0
- package/src/sessions/types.ts +44 -0
- package/src/sharing/sync.ts +296 -0
- package/src/sharing/viewer.ts +97 -0
- package/src/snapshots/index.ts +2 -0
- package/src/snapshots/manager.ts +530 -0
- package/src/state/artifacts.ts +147 -0
- package/src/state/audit.ts +137 -0
- package/src/state/billing.ts +240 -0
- package/src/state/checkpoints.ts +117 -0
- package/src/state/config.ts +67 -0
- package/src/state/conversations.ts +14 -0
- package/src/state/credentials.ts +154 -0
- package/src/state/db.ts +58 -0
- package/src/state/index.ts +26 -0
- package/src/state/messages.ts +115 -0
- package/src/state/projects.ts +123 -0
- package/src/state/schema.ts +236 -0
- package/src/state/sessions.ts +147 -0
- package/src/state/teams.ts +200 -0
- package/src/telemetry.ts +108 -0
- package/src/tools/aws-ops.ts +952 -0
- package/src/tools/azure-ops.ts +579 -0
- package/src/tools/file-ops.ts +593 -0
- package/src/tools/gcp-ops.ts +625 -0
- package/src/tools/git-ops.ts +773 -0
- package/src/tools/github-ops.ts +799 -0
- package/src/tools/helm-ops.ts +943 -0
- package/src/tools/index.ts +17 -0
- package/src/tools/k8s-ops.ts +819 -0
- package/src/tools/schemas/converter.ts +184 -0
- package/src/tools/schemas/devops.ts +612 -0
- package/src/tools/schemas/index.ts +73 -0
- package/src/tools/schemas/standard.ts +1144 -0
- package/src/tools/schemas/types.ts +705 -0
- package/src/tools/terraform-ops.ts +862 -0
- package/src/types/ambient.d.ts +193 -0
- package/src/types/config.ts +83 -0
- package/src/types/drift.ts +116 -0
- package/src/types/enterprise.ts +335 -0
- package/src/types/index.ts +20 -0
- package/src/types/plan.ts +44 -0
- package/src/types/request.ts +65 -0
- package/src/types/response.ts +54 -0
- package/src/types/service.ts +51 -0
- package/src/ui/App.tsx +997 -0
- package/src/ui/DeployPreview.tsx +169 -0
- package/src/ui/Header.tsx +68 -0
- package/src/ui/InputBox.tsx +350 -0
- package/src/ui/MessageList.tsx +585 -0
- package/src/ui/PermissionPrompt.tsx +151 -0
- package/src/ui/StatusBar.tsx +158 -0
- package/src/ui/ToolCallDisplay.tsx +409 -0
- package/src/ui/chat-ui.ts +853 -0
- package/src/ui/index.ts +33 -0
- package/src/ui/ink/index.ts +711 -0
- package/src/ui/streaming.ts +176 -0
- package/src/ui/types.ts +57 -0
- package/src/utils/analytics.ts +72 -0
- package/src/utils/cost-warning.ts +27 -0
- package/src/utils/env.ts +46 -0
- package/src/utils/errors.ts +69 -0
- package/src/utils/event-bus.ts +38 -0
- package/src/utils/index.ts +24 -0
- package/src/utils/logger.ts +171 -0
- package/src/utils/rate-limiter.ts +121 -0
- package/src/utils/service-auth.ts +49 -0
- package/src/utils/validation.ts +53 -0
- package/src/version.ts +4 -0
- package/src/watcher/index.ts +163 -0
- package/src/wizard/approval.ts +383 -0
- package/src/wizard/index.ts +25 -0
- package/src/wizard/prompts.ts +338 -0
- package/src/wizard/types.ts +171 -0
- package/src/wizard/ui.ts +556 -0
- package/src/wizard/wizard.ts +304 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General-Purpose Research Subagent
|
|
3
|
+
*
|
|
4
|
+
* Broad-access subagent with code search, shell commands, and web fetch
|
|
5
|
+
* capabilities. Suitable for open-ended research tasks that do not fit
|
|
6
|
+
* neatly into a specialized category.
|
|
7
|
+
*
|
|
8
|
+
* @module agent/subagents/general
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Subagent, type SubagentConfig } from './base';
|
|
12
|
+
import {
|
|
13
|
+
readFileTool,
|
|
14
|
+
globTool,
|
|
15
|
+
grepTool,
|
|
16
|
+
listDirTool,
|
|
17
|
+
bashTool,
|
|
18
|
+
webfetchTool,
|
|
19
|
+
} from '../../tools/schemas/standard';
|
|
20
|
+
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Configuration
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
const generalConfig: SubagentConfig = {
|
|
26
|
+
name: 'general',
|
|
27
|
+
description: 'General-purpose research agent with broad tool access.',
|
|
28
|
+
systemPrompt: `You are a general-purpose research subagent. You can search code, run commands, and fetch web content.
|
|
29
|
+
|
|
30
|
+
Your job:
|
|
31
|
+
- Answer questions by searching the codebase and running commands
|
|
32
|
+
- Research topics by fetching web content
|
|
33
|
+
- Provide thorough, well-documented answers
|
|
34
|
+
|
|
35
|
+
Rules:
|
|
36
|
+
- Be thorough but efficient
|
|
37
|
+
- Cite sources (file paths, URLs) for all findings
|
|
38
|
+
- Run non-destructive commands only
|
|
39
|
+
- Do NOT spawn further subagents`,
|
|
40
|
+
tools: [readFileTool, globTool, grepTool, listDirTool, bashTool, webfetchTool],
|
|
41
|
+
model: 'anthropic/claude-sonnet-4-20250514',
|
|
42
|
+
maxTurns: 20,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Factory
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
/** Create a new general-purpose research subagent instance. */
|
|
50
|
+
export function createGeneralSubagent(): Subagent {
|
|
51
|
+
return new Subagent(generalConfig);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { generalConfig };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagent System -- Barrel Re-exports
|
|
3
|
+
*
|
|
4
|
+
* Central entry point for the Nimbus subagent system. Provides factory
|
|
5
|
+
* functions for each specialized subagent, a type-safe factory by name,
|
|
6
|
+
* and a parser for the `@agent` mention syntax.
|
|
7
|
+
*
|
|
8
|
+
* @module agent/subagents
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Named Re-exports
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
export { Subagent, type SubagentConfig, type SubagentResult } from './base';
|
|
16
|
+
export { createExploreSubagent, exploreConfig } from './explore';
|
|
17
|
+
export { createInfraSubagent, infraConfig } from './infra';
|
|
18
|
+
export { createSecuritySubagent, securityConfig } from './security';
|
|
19
|
+
export { createCostSubagent, costConfig } from './cost';
|
|
20
|
+
export { createGeneralSubagent, generalConfig } from './general';
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Factory
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
import type { Subagent } from './base';
|
|
27
|
+
import { createExploreSubagent } from './explore';
|
|
28
|
+
import { createInfraSubagent } from './infra';
|
|
29
|
+
import { createSecuritySubagent } from './security';
|
|
30
|
+
import { createCostSubagent } from './cost';
|
|
31
|
+
import { createGeneralSubagent } from './general';
|
|
32
|
+
|
|
33
|
+
/** Union of all built-in subagent type identifiers. */
|
|
34
|
+
export type SubagentType = 'explore' | 'infra' | 'security' | 'cost' | 'general';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create a subagent by type name.
|
|
38
|
+
*
|
|
39
|
+
* Uses an exhaustive switch so that adding a new {@link SubagentType}
|
|
40
|
+
* variant without a corresponding case produces a compile-time error.
|
|
41
|
+
*
|
|
42
|
+
* @param type - The subagent specialization to instantiate.
|
|
43
|
+
* @returns A configured {@link Subagent} instance.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const agent = createSubagent('explore');
|
|
48
|
+
* const result = await agent.run('Find all TODO comments', router);
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function createSubagent(type: SubagentType): Subagent {
|
|
52
|
+
switch (type) {
|
|
53
|
+
case 'explore':
|
|
54
|
+
return createExploreSubagent();
|
|
55
|
+
case 'infra':
|
|
56
|
+
return createInfraSubagent();
|
|
57
|
+
case 'security':
|
|
58
|
+
return createSecuritySubagent();
|
|
59
|
+
case 'cost':
|
|
60
|
+
return createCostSubagent();
|
|
61
|
+
case 'general':
|
|
62
|
+
return createGeneralSubagent();
|
|
63
|
+
default: {
|
|
64
|
+
const _exhaustive: never = type;
|
|
65
|
+
throw new Error(`Unknown subagent type: ${_exhaustive}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// @agent Mention Parser
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Parse `@agent` syntax from user input.
|
|
76
|
+
*
|
|
77
|
+
* Returns an object with the matched agent type and the remaining prompt
|
|
78
|
+
* if the input starts with a recognized `@<agent>` prefix, or `null` if
|
|
79
|
+
* the input does not match the pattern.
|
|
80
|
+
*
|
|
81
|
+
* @param input - Raw user input string.
|
|
82
|
+
* @returns Parsed agent mention, or `null` if no match.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* parseAgentMention('@explore find all TODO comments');
|
|
87
|
+
* // => { agent: 'explore', prompt: 'find all TODO comments' }
|
|
88
|
+
*
|
|
89
|
+
* parseAgentMention('@infra check EKS autoscaling');
|
|
90
|
+
* // => { agent: 'infra', prompt: 'check EKS autoscaling' }
|
|
91
|
+
*
|
|
92
|
+
* parseAgentMention('normal message');
|
|
93
|
+
* // => null
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export function parseAgentMention(input: string): { agent: SubagentType; prompt: string } | null {
|
|
97
|
+
const match = input.match(/^@(explore|infra|security|cost|general)\s+(.+)$/s);
|
|
98
|
+
if (!match) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return { agent: match[1] as SubagentType, prompt: match[2] };
|
|
102
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infrastructure Analysis Subagent
|
|
3
|
+
*
|
|
4
|
+
* Reads IaC files, discovers cloud resources, detects drift, and estimates
|
|
5
|
+
* costs. Uses a mid-tier model for deeper reasoning on infrastructure
|
|
6
|
+
* configurations.
|
|
7
|
+
*
|
|
8
|
+
* @module agent/subagents/infra
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Subagent, type SubagentConfig } from './base';
|
|
12
|
+
import { readFileTool, globTool, grepTool, listDirTool } from '../../tools/schemas/standard';
|
|
13
|
+
import { cloudDiscoverTool, costEstimateTool, driftDetectTool } from '../../tools/schemas/devops';
|
|
14
|
+
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Configuration
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
const infraConfig: SubagentConfig = {
|
|
20
|
+
name: 'infra',
|
|
21
|
+
description:
|
|
22
|
+
'Infrastructure analysis — reads IaC files, discovers cloud resources, detects drift, estimates costs.',
|
|
23
|
+
systemPrompt: `You are an infrastructure analysis subagent. You specialize in cloud infrastructure.
|
|
24
|
+
|
|
25
|
+
Your capabilities:
|
|
26
|
+
- Read Terraform, Kubernetes, and Helm configuration files
|
|
27
|
+
- Discover cloud resources (AWS, GCP, Azure)
|
|
28
|
+
- Detect infrastructure drift
|
|
29
|
+
- Estimate costs
|
|
30
|
+
|
|
31
|
+
Rules:
|
|
32
|
+
- Analyze thoroughly but efficiently
|
|
33
|
+
- Report findings with specific file paths and line numbers
|
|
34
|
+
- Flag any security concerns or misconfigurations
|
|
35
|
+
- Do NOT make changes — analysis only
|
|
36
|
+
- Do NOT spawn further subagents`,
|
|
37
|
+
tools: [
|
|
38
|
+
readFileTool,
|
|
39
|
+
globTool,
|
|
40
|
+
grepTool,
|
|
41
|
+
listDirTool,
|
|
42
|
+
cloudDiscoverTool,
|
|
43
|
+
costEstimateTool,
|
|
44
|
+
driftDetectTool,
|
|
45
|
+
],
|
|
46
|
+
model: 'anthropic/claude-sonnet-4-20250514',
|
|
47
|
+
maxTurns: 20,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Factory
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
/** Create a new infrastructure analysis subagent instance. */
|
|
55
|
+
export function createInfraSubagent(): Subagent {
|
|
56
|
+
return new Subagent(infraConfig);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { infraConfig };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Scanning Subagent
|
|
3
|
+
*
|
|
4
|
+
* Scans codebases for vulnerabilities, leaked secrets, and
|
|
5
|
+
* misconfigurations. Reports findings with severity levels and
|
|
6
|
+
* remediation guidance.
|
|
7
|
+
*
|
|
8
|
+
* @module agent/subagents/security
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Subagent, type SubagentConfig } from './base';
|
|
12
|
+
import { readFileTool, globTool, grepTool, listDirTool } from '../../tools/schemas/standard';
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Security Patterns
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Common security anti-patterns the subagent is instructed to scan for.
|
|
20
|
+
* These are embedded in the system prompt so the LLM knows what to look for.
|
|
21
|
+
*/
|
|
22
|
+
const SECURITY_PATTERNS = [
|
|
23
|
+
'AWS access keys (AKIA...)',
|
|
24
|
+
'Private keys (.pem, .key)',
|
|
25
|
+
'Hardcoded passwords',
|
|
26
|
+
'Open security groups (0.0.0.0/0)',
|
|
27
|
+
'Unencrypted S3 buckets',
|
|
28
|
+
'Missing HTTPS/TLS',
|
|
29
|
+
'SQL injection vectors',
|
|
30
|
+
'XSS vulnerabilities',
|
|
31
|
+
'Exposed secrets in env files',
|
|
32
|
+
'Overly permissive IAM policies',
|
|
33
|
+
] as const;
|
|
34
|
+
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Configuration
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
const securityConfig: SubagentConfig = {
|
|
40
|
+
name: 'security',
|
|
41
|
+
description:
|
|
42
|
+
'Security auditor — scans for vulnerabilities, leaked secrets, and misconfigurations.',
|
|
43
|
+
systemPrompt: `You are a security auditor subagent. You scan codebases for security issues.
|
|
44
|
+
|
|
45
|
+
Scan for:
|
|
46
|
+
${SECURITY_PATTERNS.map(p => `- ${p}`).join('\n')}
|
|
47
|
+
|
|
48
|
+
Rules:
|
|
49
|
+
- Search systematically — use grep for patterns, glob to find config files
|
|
50
|
+
- Report findings with severity levels (CRITICAL, HIGH, MEDIUM, LOW)
|
|
51
|
+
- Include file paths and line numbers for every finding
|
|
52
|
+
- Suggest remediation steps
|
|
53
|
+
- Do NOT modify any files
|
|
54
|
+
- Do NOT spawn further subagents`,
|
|
55
|
+
tools: [readFileTool, globTool, grepTool, listDirTool],
|
|
56
|
+
model: 'anthropic/claude-sonnet-4-20250514',
|
|
57
|
+
maxTurns: 20,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Factory
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
|
|
64
|
+
/** Create a new security scanning subagent instance. */
|
|
65
|
+
export function createSecuritySubagent(): Subagent {
|
|
66
|
+
return new Subagent(securityConfig);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { securityConfig };
|