agent-nuvira 1.14.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 +891 -0
- package/dist/agent-sdk/src/agent.d.ts +118 -0
- package/dist/agent-sdk/src/agent.d.ts.map +1 -0
- package/dist/agent-sdk/src/agent.js +88 -0
- package/dist/agent-sdk/src/agent.js.map +1 -0
- package/dist/agent-sdk/src/index.d.ts +33 -0
- package/dist/agent-sdk/src/index.d.ts.map +1 -0
- package/dist/agent-sdk/src/index.js +32 -0
- package/dist/agent-sdk/src/index.js.map +1 -0
- package/dist/agent-sdk/src/register.d.ts +70 -0
- package/dist/agent-sdk/src/register.d.ts.map +1 -0
- package/dist/agent-sdk/src/register.js +181 -0
- package/dist/agent-sdk/src/register.js.map +1 -0
- package/dist/agent-sdk/src/scaffold.d.ts +50 -0
- package/dist/agent-sdk/src/scaffold.d.ts.map +1 -0
- package/dist/agent-sdk/src/scaffold.js +291 -0
- package/dist/agent-sdk/src/scaffold.js.map +1 -0
- package/dist/agent-sdk/src/testing.d.ts +187 -0
- package/dist/agent-sdk/src/testing.d.ts.map +1 -0
- package/dist/agent-sdk/src/testing.js +243 -0
- package/dist/agent-sdk/src/testing.js.map +1 -0
- package/dist/agent-sdk/src/types.d.ts +202 -0
- package/dist/agent-sdk/src/types.d.ts.map +1 -0
- package/dist/agent-sdk/src/types.js +11 -0
- package/dist/agent-sdk/src/types.js.map +1 -0
- package/dist/agents/agent.d.ts +132 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +19 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/agents/context-gatherer.d.ts +42 -0
- package/dist/agents/agents/context-gatherer.d.ts.map +1 -0
- package/dist/agents/agents/context-gatherer.js +366 -0
- package/dist/agents/agents/context-gatherer.js.map +1 -0
- package/dist/agents/agents/debugger.d.ts +58 -0
- package/dist/agents/agents/debugger.d.ts.map +1 -0
- package/dist/agents/agents/debugger.js +257 -0
- package/dist/agents/agents/debugger.js.map +1 -0
- package/dist/agents/agents/git-agent.d.ts +34 -0
- package/dist/agents/agents/git-agent.d.ts.map +1 -0
- package/dist/agents/agents/git-agent.js +200 -0
- package/dist/agents/agents/git-agent.js.map +1 -0
- package/dist/agents/agents/github-release-agent.d.ts +65 -0
- package/dist/agents/agents/github-release-agent.d.ts.map +1 -0
- package/dist/agents/agents/github-release-agent.js +439 -0
- package/dist/agents/agents/github-release-agent.js.map +1 -0
- package/dist/agents/agents/package-agent.d.ts +33 -0
- package/dist/agents/agents/package-agent.d.ts.map +1 -0
- package/dist/agents/agents/package-agent.js +233 -0
- package/dist/agents/agents/package-agent.js.map +1 -0
- package/dist/agents/agents/planner.d.ts +26 -0
- package/dist/agents/agents/planner.d.ts.map +1 -0
- package/dist/agents/agents/planner.js +222 -0
- package/dist/agents/agents/planner.js.map +1 -0
- package/dist/agents/agents/reviewer.d.ts +34 -0
- package/dist/agents/agents/reviewer.d.ts.map +1 -0
- package/dist/agents/agents/reviewer.js +159 -0
- package/dist/agents/agents/reviewer.js.map +1 -0
- package/dist/agents/agents/runner.d.ts +73 -0
- package/dist/agents/agents/runner.d.ts.map +1 -0
- package/dist/agents/agents/runner.js +299 -0
- package/dist/agents/agents/runner.js.map +1 -0
- package/dist/agents/agents/security-agent.d.ts +33 -0
- package/dist/agents/agents/security-agent.d.ts.map +1 -0
- package/dist/agents/agents/security-agent.js +184 -0
- package/dist/agents/agents/security-agent.js.map +1 -0
- package/dist/agents/agents/tester.d.ts +96 -0
- package/dist/agents/agents/tester.d.ts.map +1 -0
- package/dist/agents/agents/tester.js +410 -0
- package/dist/agents/agents/tester.js.map +1 -0
- package/dist/agents/agents/writer.d.ts +51 -0
- package/dist/agents/agents/writer.d.ts.map +1 -0
- package/dist/agents/agents/writer.js +384 -0
- package/dist/agents/agents/writer.js.map +1 -0
- package/dist/agents/context-vault.d.ts +49 -0
- package/dist/agents/context-vault.d.ts.map +1 -0
- package/dist/agents/context-vault.js +134 -0
- package/dist/agents/context-vault.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +97 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +696 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/utils/file-tree.d.ts +28 -0
- package/dist/agents/utils/file-tree.d.ts.map +1 -0
- package/dist/agents/utils/file-tree.js +93 -0
- package/dist/agents/utils/file-tree.js.map +1 -0
- package/dist/cli/agent.d.ts +25 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +374 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/benchmark.d.ts +24 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +235 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/cache.d.ts +12 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +58 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/chat.d.ts +37 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +393 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/commands.d.ts +24 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +18 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/config.d.ts +19 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +162 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dashboard.d.ts +34 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +126 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/doctor.d.ts +68 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +585 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/edit.d.ts +11 -0
- package/dist/cli/edit.d.ts.map +1 -0
- package/dist/cli/edit.js +86 -0
- package/dist/cli/edit.js.map +1 -0
- package/dist/cli/execute.d.ts +25 -0
- package/dist/cli/execute.d.ts.map +1 -0
- package/dist/cli/execute.js +186 -0
- package/dist/cli/execute.js.map +1 -0
- package/dist/cli/federation.d.ts +31 -0
- package/dist/cli/federation.d.ts.map +1 -0
- package/dist/cli/federation.js +387 -0
- package/dist/cli/federation.js.map +1 -0
- package/dist/cli/history.d.ts +22 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +140 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/init.d.ts +49 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +423 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/learn.d.ts +31 -0
- package/dist/cli/learn.d.ts.map +1 -0
- package/dist/cli/learn.js +320 -0
- package/dist/cli/learn.js.map +1 -0
- package/dist/cli/memory.d.ts +38 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +295 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/model-picker.d.ts +18 -0
- package/dist/cli/model-picker.d.ts.map +1 -0
- package/dist/cli/model-picker.js +225 -0
- package/dist/cli/model-picker.js.map +1 -0
- package/dist/cli/models.d.ts +11 -0
- package/dist/cli/models.d.ts.map +1 -0
- package/dist/cli/models.js +132 -0
- package/dist/cli/models.js.map +1 -0
- package/dist/cli/plan.d.ts +11 -0
- package/dist/cli/plan.d.ts.map +1 -0
- package/dist/cli/plan.js +94 -0
- package/dist/cli/plan.js.map +1 -0
- package/dist/cli/plugins.d.ts +15 -0
- package/dist/cli/plugins.d.ts.map +1 -0
- package/dist/cli/plugins.js +123 -0
- package/dist/cli/plugins.js.map +1 -0
- package/dist/cli/router.d.ts +20 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +142 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/run.d.ts +22 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +110 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/sandbox.d.ts +27 -0
- package/dist/cli/sandbox.d.ts.map +1 -0
- package/dist/cli/sandbox.js +264 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/sdk.d.ts +27 -0
- package/dist/cli/sdk.d.ts.map +1 -0
- package/dist/cli/sdk.js +204 -0
- package/dist/cli/sdk.js.map +1 -0
- package/dist/cli/stats.d.ts +18 -0
- package/dist/cli/stats.d.ts.map +1 -0
- package/dist/cli/stats.js +78 -0
- package/dist/cli/stats.js.map +1 -0
- package/dist/cli/team.d.ts +42 -0
- package/dist/cli/team.d.ts.map +1 -0
- package/dist/cli/team.js +473 -0
- package/dist/cli/team.js.map +1 -0
- package/dist/cli/workflow.d.ts +27 -0
- package/dist/cli/workflow.d.ts.map +1 -0
- package/dist/cli/workflow.js +347 -0
- package/dist/cli/workflow.js.map +1 -0
- package/dist/config/manager.d.ts +37 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +147 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/types.d.ts +53 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/context/cache.d.ts +27 -0
- package/dist/context/cache.d.ts.map +1 -0
- package/dist/context/cache.js +116 -0
- package/dist/context/cache.js.map +1 -0
- package/dist/context/history.d.ts +87 -0
- package/dist/context/history.d.ts.map +1 -0
- package/dist/context/history.js +249 -0
- package/dist/context/history.js.map +1 -0
- package/dist/context/parser.d.ts +61 -0
- package/dist/context/parser.d.ts.map +1 -0
- package/dist/context/parser.js +194 -0
- package/dist/context/parser.js.map +1 -0
- package/dist/federation/client.d.ts +49 -0
- package/dist/federation/client.d.ts.map +1 -0
- package/dist/federation/client.js +239 -0
- package/dist/federation/client.js.map +1 -0
- package/dist/federation/protocol.d.ts +155 -0
- package/dist/federation/protocol.d.ts.map +1 -0
- package/dist/federation/protocol.js +57 -0
- package/dist/federation/protocol.js.map +1 -0
- package/dist/federation/server.d.ts +25 -0
- package/dist/federation/server.d.ts.map +1 -0
- package/dist/federation/server.js +401 -0
- package/dist/federation/server.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/factory.d.ts +20 -0
- package/dist/inference/factory.d.ts.map +1 -0
- package/dist/inference/factory.js +46 -0
- package/dist/inference/factory.js.map +1 -0
- package/dist/inference/gemini-adapter.d.ts +17 -0
- package/dist/inference/gemini-adapter.d.ts.map +1 -0
- package/dist/inference/gemini-adapter.js +176 -0
- package/dist/inference/gemini-adapter.js.map +1 -0
- package/dist/inference/groq-adapter.d.ts +17 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -0
- package/dist/inference/groq-adapter.js +103 -0
- package/dist/inference/groq-adapter.js.map +1 -0
- package/dist/inference/interface.d.ts +49 -0
- package/dist/inference/interface.d.ts.map +1 -0
- package/dist/inference/interface.js +2 -0
- package/dist/inference/interface.js.map +1 -0
- package/dist/inference/local-adapter.d.ts +35 -0
- package/dist/inference/local-adapter.d.ts.map +1 -0
- package/dist/inference/local-adapter.js +311 -0
- package/dist/inference/local-adapter.js.map +1 -0
- package/dist/inference/model-catalog.d.ts +53 -0
- package/dist/inference/model-catalog.d.ts.map +1 -0
- package/dist/inference/model-catalog.js +306 -0
- package/dist/inference/model-catalog.js.map +1 -0
- package/dist/inference/nim-adapter.d.ts +17 -0
- package/dist/inference/nim-adapter.d.ts.map +1 -0
- package/dist/inference/nim-adapter.js +103 -0
- package/dist/inference/nim-adapter.js.map +1 -0
- package/dist/inference/openrouter-adapter.d.ts +17 -0
- package/dist/inference/openrouter-adapter.d.ts.map +1 -0
- package/dist/inference/openrouter-adapter.js +105 -0
- package/dist/inference/openrouter-adapter.js.map +1 -0
- package/dist/inference/sse.d.ts +20 -0
- package/dist/inference/sse.d.ts.map +1 -0
- package/dist/inference/sse.js +91 -0
- package/dist/inference/sse.js.map +1 -0
- package/dist/learning/agent-stats.d.ts +109 -0
- package/dist/learning/agent-stats.d.ts.map +1 -0
- package/dist/learning/agent-stats.js +240 -0
- package/dist/learning/agent-stats.js.map +1 -0
- package/dist/learning/benchmark.d.ts +161 -0
- package/dist/learning/benchmark.d.ts.map +1 -0
- package/dist/learning/benchmark.js +589 -0
- package/dist/learning/benchmark.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts +101 -0
- package/dist/learning/cost-tracker.d.ts.map +1 -0
- package/dist/learning/cost-tracker.js +224 -0
- package/dist/learning/cost-tracker.js.map +1 -0
- package/dist/learning/feedback.d.ts +88 -0
- package/dist/learning/feedback.d.ts.map +1 -0
- package/dist/learning/feedback.js +169 -0
- package/dist/learning/feedback.js.map +1 -0
- package/dist/learning/hybrid-router.d.ts +201 -0
- package/dist/learning/hybrid-router.d.ts.map +1 -0
- package/dist/learning/hybrid-router.js +450 -0
- package/dist/learning/hybrid-router.js.map +1 -0
- package/dist/learning/model-compare.d.ts +76 -0
- package/dist/learning/model-compare.d.ts.map +1 -0
- package/dist/learning/model-compare.js +252 -0
- package/dist/learning/model-compare.js.map +1 -0
- package/dist/learning/model-router.d.ts +68 -0
- package/dist/learning/model-router.d.ts.map +1 -0
- package/dist/learning/model-router.js +140 -0
- package/dist/learning/model-router.js.map +1 -0
- package/dist/learning/pattern-extractor.d.ts +99 -0
- package/dist/learning/pattern-extractor.d.ts.map +1 -0
- package/dist/learning/pattern-extractor.js +310 -0
- package/dist/learning/pattern-extractor.js.map +1 -0
- package/dist/learning/scorer.d.ts +51 -0
- package/dist/learning/scorer.d.ts.map +1 -0
- package/dist/learning/scorer.js +64 -0
- package/dist/learning/scorer.js.map +1 -0
- package/dist/learning/self-improver.d.ts +48 -0
- package/dist/learning/self-improver.d.ts.map +1 -0
- package/dist/learning/self-improver.js +161 -0
- package/dist/learning/self-improver.js.map +1 -0
- package/dist/memory/embedder.d.ts +65 -0
- package/dist/memory/embedder.d.ts.map +1 -0
- package/dist/memory/embedder.js +424 -0
- package/dist/memory/embedder.js.map +1 -0
- package/dist/memory/memory-integration.d.ts +56 -0
- package/dist/memory/memory-integration.d.ts.map +1 -0
- package/dist/memory/memory-integration.js +95 -0
- package/dist/memory/memory-integration.js.map +1 -0
- package/dist/memory/trajectory-store.d.ts +149 -0
- package/dist/memory/trajectory-store.d.ts.map +1 -0
- package/dist/memory/trajectory-store.js +476 -0
- package/dist/memory/trajectory-store.js.map +1 -0
- package/dist/memory/vector-store.d.ts +78 -0
- package/dist/memory/vector-store.d.ts.map +1 -0
- package/dist/memory/vector-store.js +186 -0
- package/dist/memory/vector-store.js.map +1 -0
- package/dist/plugins/agent-plugin.d.ts +73 -0
- package/dist/plugins/agent-plugin.d.ts.map +1 -0
- package/dist/plugins/agent-plugin.js +199 -0
- package/dist/plugins/agent-plugin.js.map +1 -0
- package/dist/plugins/registry.d.ts +61 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +67 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/sandbox/images.d.ts +31 -0
- package/dist/sandbox/images.d.ts.map +1 -0
- package/dist/sandbox/images.js +129 -0
- package/dist/sandbox/images.js.map +1 -0
- package/dist/sandbox/manager.d.ts +134 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +470 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/types.d.ts +113 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +107 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/security/scanner.d.ts +53 -0
- package/dist/security/scanner.d.ts.map +1 -0
- package/dist/security/scanner.js +271 -0
- package/dist/security/scanner.js.map +1 -0
- package/dist/team/config.d.ts +50 -0
- package/dist/team/config.d.ts.map +1 -0
- package/dist/team/config.js +108 -0
- package/dist/team/config.js.map +1 -0
- package/dist/team/memory.d.ts +63 -0
- package/dist/team/memory.d.ts.map +1 -0
- package/dist/team/memory.js +282 -0
- package/dist/team/memory.js.map +1 -0
- package/dist/team/review.d.ts +123 -0
- package/dist/team/review.d.ts.map +1 -0
- package/dist/team/review.js +293 -0
- package/dist/team/review.js.map +1 -0
- package/dist/utils/env.d.ts +19 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +250 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +45 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/web-dashboard/server.d.ts +59 -0
- package/dist/web-dashboard/server.d.ts.map +1 -0
- package/dist/web-dashboard/server.js +418 -0
- package/dist/web-dashboard/server.js.map +1 -0
- package/dist/workflow/registry.d.ts +127 -0
- package/dist/workflow/registry.d.ts.map +1 -0
- package/dist/workflow/registry.js +482 -0
- package/dist/workflow/registry.js.map +1 -0
- package/dist/workflow/templates.d.ts +93 -0
- package/dist/workflow/templates.d.ts.map +1 -0
- package/dist/workflow/templates.js +481 -0
- package/dist/workflow/templates.js.map +1 -0
- package/package.json +78 -0
- package/src/web-dashboard/public/assets/index-B08nDkSB.css +1 -0
- package/src/web-dashboard/public/assets/index-BKL8YOFD.js +135 -0
- package/src/web-dashboard/public/assets/index-BKL8YOFD.js.map +1 -0
- package/src/web-dashboard/public/index.html +13 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecurityAgent — Detects security issues in agent prompts and generated code.
|
|
3
|
+
*
|
|
4
|
+
* Capabilities:
|
|
5
|
+
* - Scan LLM prompts for injection/jailbreak attempts before sending
|
|
6
|
+
* - Scan generated code changes for PII, dangerous patterns, vulnerabilities
|
|
7
|
+
* - Validate file paths for directory traversal attempts
|
|
8
|
+
* - Integrated with the orchestrator pipeline to block unsafe content
|
|
9
|
+
*
|
|
10
|
+
* Usage in task plans:
|
|
11
|
+
* ```json
|
|
12
|
+
* { "id": "step-security", "description": "Scan code for security issues", "agentType": "security", "dependsOn": ["step-write"] }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { Agent } from '../agent.js';
|
|
17
|
+
import { logger } from '../../utils/logger.js';
|
|
18
|
+
import { runAllScans, scanForInjections, formatScanReport, } from '../../security/scanner.js';
|
|
19
|
+
/** Default scan severity threshold: block on critical or high findings */
|
|
20
|
+
const DEFAULT_SEVERITY_THRESHOLD = ['critical', 'high'];
|
|
21
|
+
/** Paths that should never be modified (system files) */
|
|
22
|
+
const PROTECTED_PATHS = [
|
|
23
|
+
// Linux/Unix
|
|
24
|
+
'/etc/passwd',
|
|
25
|
+
'/etc/shadow',
|
|
26
|
+
'/etc/sudoers',
|
|
27
|
+
'/etc/ssh/',
|
|
28
|
+
// Windows
|
|
29
|
+
'C:\\Windows\\System32\\drivers\\etc\\hosts',
|
|
30
|
+
'C:\\Windows\\System32\\config\\',
|
|
31
|
+
'C:\\Windows\\System32\\drivers\\etc\\',
|
|
32
|
+
'C:\\Program Files\\',
|
|
33
|
+
// Cross-platform
|
|
34
|
+
'~/.ssh/',
|
|
35
|
+
'~/.aws/',
|
|
36
|
+
'~/.config/gcloud/',
|
|
37
|
+
'~/.npmrc',
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* SecurityAgent — Scans prompts and generated content for security issues.
|
|
41
|
+
*/
|
|
42
|
+
export class SecurityAgent extends Agent {
|
|
43
|
+
name = 'Security';
|
|
44
|
+
description = 'Scans for PII, prompt injection, and dangerous code patterns';
|
|
45
|
+
async execute(context, callLLM) {
|
|
46
|
+
try {
|
|
47
|
+
const taskDesc = context.taskPlan.find((s) => s.agentType === 'security' && s.status === 'running')?.description || context.goal;
|
|
48
|
+
const allFindings = [];
|
|
49
|
+
const details = [];
|
|
50
|
+
// Parse which scans to run from the task description
|
|
51
|
+
const scanTypes = this.parseScanTypes(taskDesc);
|
|
52
|
+
// ── 1. Scan all fileChanges for PII and dangerous code ────────────
|
|
53
|
+
if (scanTypes.code) {
|
|
54
|
+
for (const change of context.fileChanges) {
|
|
55
|
+
const content = change.newContent || change.originalContent;
|
|
56
|
+
if (!content)
|
|
57
|
+
continue;
|
|
58
|
+
const result = runAllScans(content, {
|
|
59
|
+
isGenerated: change.status === 'created' || change.status === 'modified',
|
|
60
|
+
filename: change.path,
|
|
61
|
+
});
|
|
62
|
+
allFindings.push(...result.findings);
|
|
63
|
+
if (result.findings.length > 0) {
|
|
64
|
+
details.push(`File: ${change.path}`);
|
|
65
|
+
details.push(formatScanReport(result));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ── 2. Scan artifacts for injected secrets ───────────────────────
|
|
70
|
+
if (scanTypes.secrets) {
|
|
71
|
+
for (const artifact of context.artifacts) {
|
|
72
|
+
const piiResult = runAllScans(artifact.content, { isGenerated: true });
|
|
73
|
+
const piiFindings = piiResult.findings.filter((f) => f.type === 'pii');
|
|
74
|
+
allFindings.push(...piiFindings);
|
|
75
|
+
if (piiFindings.length > 0) {
|
|
76
|
+
details.push(`Artifact: ${artifact.path}`);
|
|
77
|
+
details.push(formatScanReport({ passed: false, findings: piiFindings, summary: piiResult.summary }));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ── 3. Scan file paths for directory traversal ────────────────────
|
|
82
|
+
if (scanTypes.paths) {
|
|
83
|
+
for (const change of context.fileChanges) {
|
|
84
|
+
const pathIssue = this.checkPathSafety(change.path);
|
|
85
|
+
if (pathIssue) {
|
|
86
|
+
allFindings.push(pathIssue);
|
|
87
|
+
details.push(` 🔴 [critical] Path traversal: ${change.path}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// ── 4. Scan the goal/prompt for injection attempts ────────────────
|
|
92
|
+
if (scanTypes.prompt) {
|
|
93
|
+
const injectionFindings = scanForInjections(context.goal);
|
|
94
|
+
allFindings.push(...injectionFindings);
|
|
95
|
+
if (injectionFindings.length > 0) {
|
|
96
|
+
details.push('Prompt injection detected in user goal:');
|
|
97
|
+
details.push(formatScanReport({ passed: false, findings: injectionFindings, summary: 'Injection detected' }));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ── Assess results ───────────────────────────────────────────────
|
|
101
|
+
const blockedSeverities = DEFAULT_SEVERITY_THRESHOLD;
|
|
102
|
+
const blockedFindings = allFindings.filter((f) => blockedSeverities.includes(f.severity));
|
|
103
|
+
const result = {
|
|
104
|
+
passed: blockedFindings.length === 0,
|
|
105
|
+
findings: allFindings,
|
|
106
|
+
summary: allFindings.length === 0
|
|
107
|
+
? 'Security scan passed — no issues found'
|
|
108
|
+
: `Security scan found ${allFindings.length} issue(s) (${blockedFindings.length} blocking)`,
|
|
109
|
+
};
|
|
110
|
+
// Log results for visibility
|
|
111
|
+
if (details.length > 0) {
|
|
112
|
+
logger.info(details.join('\n'));
|
|
113
|
+
}
|
|
114
|
+
if (blockedFindings.length > 0) {
|
|
115
|
+
logger.warn(`Security: ${blockedFindings.length} blocking issue(s) found`);
|
|
116
|
+
}
|
|
117
|
+
// Store scan results in context metadata for downstream agents
|
|
118
|
+
context.metadata['securityScanResult'] = result;
|
|
119
|
+
return {
|
|
120
|
+
success: result.passed,
|
|
121
|
+
summary: result.summary,
|
|
122
|
+
details: details.length > 0 ? details.join('\n') : undefined,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
127
|
+
return { success: false, summary: 'Security scan failed', error: msg };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Parse which scan types to run based on the task description.
|
|
132
|
+
*/
|
|
133
|
+
parseScanTypes(description) {
|
|
134
|
+
const lower = description.toLowerCase();
|
|
135
|
+
// Check if the description mentions specific scan types
|
|
136
|
+
const hasCode = lower.includes('code') || lower.includes('dangerous') || lower.includes('vulnerability');
|
|
137
|
+
const hasSecrets = lower.includes('secret') || lower.includes('pii') || lower.includes('credential');
|
|
138
|
+
const hasPaths = lower.includes('path') || lower.includes('traversal');
|
|
139
|
+
const hasPrompt = lower.includes('injection') || lower.includes('prompt');
|
|
140
|
+
// If no specific scan type is mentioned, run all scans (default)
|
|
141
|
+
if (!hasCode && !hasSecrets && !hasPaths && !hasPrompt) {
|
|
142
|
+
return { code: true, secrets: true, paths: true, prompt: true };
|
|
143
|
+
}
|
|
144
|
+
// Otherwise, only run the requested scans
|
|
145
|
+
return {
|
|
146
|
+
code: hasCode,
|
|
147
|
+
secrets: hasSecrets,
|
|
148
|
+
paths: hasPaths,
|
|
149
|
+
prompt: hasPrompt,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Check if a file path is safe (no directory traversal, no protected paths).
|
|
154
|
+
*/
|
|
155
|
+
checkPathSafety(filePath) {
|
|
156
|
+
// Check for path traversal
|
|
157
|
+
if (filePath.includes('..')) {
|
|
158
|
+
return {
|
|
159
|
+
type: 'dangerous-code',
|
|
160
|
+
severity: 'critical',
|
|
161
|
+
category: 'path-traversal',
|
|
162
|
+
match: filePath,
|
|
163
|
+
recommendation: 'Prevent directory traversal — use path.resolve() with safe base',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Check for absolute paths to protected locations
|
|
167
|
+
const homeDir = homedir();
|
|
168
|
+
const normalized = filePath.replace(/^~/, homeDir);
|
|
169
|
+
for (const protectedPath of PROTECTED_PATHS) {
|
|
170
|
+
const expandedProtected = protectedPath.replace(/^~/, homeDir);
|
|
171
|
+
if (normalized.startsWith(expandedProtected)) {
|
|
172
|
+
return {
|
|
173
|
+
type: 'dangerous-code',
|
|
174
|
+
severity: 'critical',
|
|
175
|
+
category: 'protected-path',
|
|
176
|
+
match: filePath,
|
|
177
|
+
recommendation: `Do not modify protected system files: ${protectedPath}`,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=security-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-agent.js","sourceRoot":"","sources":["../../../src/agents/agents/security-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TesterAgent — Creates a sandboxed test environment, copies the project,
|
|
3
|
+
* installs dependencies, runs tests, and reports pass/fail results.
|
|
4
|
+
*
|
|
5
|
+
* The sandbox is created in a temp directory to avoid modifying the original project.
|
|
6
|
+
* Tests are run via `npm test` (or a custom command), and full stdout/stderr + exit
|
|
7
|
+
* code are captured and returned.
|
|
8
|
+
*/
|
|
9
|
+
import { Agent, type AgentContext, type AgentResult } from '../agent.js';
|
|
10
|
+
import type { LLMCallFn } from '../agent.js';
|
|
11
|
+
/**
|
|
12
|
+
* Result of running tests in the sandbox.
|
|
13
|
+
*/
|
|
14
|
+
export interface TestResult {
|
|
15
|
+
/** Whether all tests passed */
|
|
16
|
+
success: boolean;
|
|
17
|
+
/** Full test output (stdout + stderr) */
|
|
18
|
+
output: string;
|
|
19
|
+
/** Test exit code */
|
|
20
|
+
exitCode: number;
|
|
21
|
+
/** Path to the sandbox directory */
|
|
22
|
+
sandboxPath: string;
|
|
23
|
+
/** How many tests passed (parsed from output) */
|
|
24
|
+
passed?: number;
|
|
25
|
+
/** How many tests failed (parsed from output) */
|
|
26
|
+
failed?: number;
|
|
27
|
+
/** How many tests total (parsed from output) */
|
|
28
|
+
total?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* TesterAgent — Sandboxed test runner.
|
|
32
|
+
*
|
|
33
|
+
* Usage in task plans:
|
|
34
|
+
* ```json
|
|
35
|
+
* { "id": "step-05-test", "description": "Run tests to verify the changes", "agentType": "tester", "dependsOn": ["step-04-write"] }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare class TesterAgent extends Agent {
|
|
39
|
+
readonly name = "Tester";
|
|
40
|
+
readonly description = "Runs tests in a sandboxed environment";
|
|
41
|
+
/**
|
|
42
|
+
* Execute tests in a sandboxed copy of the project.
|
|
43
|
+
*
|
|
44
|
+
* Steps:
|
|
45
|
+
* 1. Create a temp directory
|
|
46
|
+
* 2. Copy project files (excluding node_modules, .git, etc.)
|
|
47
|
+
* 3. Run `npm install` in the sandbox
|
|
48
|
+
* 4. Run `npm test` in the sandbox
|
|
49
|
+
* 5. Parse and return the results
|
|
50
|
+
*/
|
|
51
|
+
execute(context: AgentContext, _callLLM: LLMCallFn): Promise<AgentResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Execute tests inside a Docker sandbox container.
|
|
54
|
+
* Falls back to filesystem sandbox if Docker is not available.
|
|
55
|
+
*/
|
|
56
|
+
private executeWithDocker;
|
|
57
|
+
/**
|
|
58
|
+
* Detect the test command from package.json scripts.
|
|
59
|
+
* Falls back to the default if not found.
|
|
60
|
+
*/
|
|
61
|
+
private detectTestCommand;
|
|
62
|
+
/**
|
|
63
|
+
* Copy project files to the sandbox directory, excluding large/generated dirs.
|
|
64
|
+
*/
|
|
65
|
+
private copyProject;
|
|
66
|
+
/**
|
|
67
|
+
* Get sorted directory entries to ensure deterministic copy order.
|
|
68
|
+
*/
|
|
69
|
+
private getDirectoryEntries;
|
|
70
|
+
/**
|
|
71
|
+
* Apply the file changes from the execution context to the sandbox.
|
|
72
|
+
*/
|
|
73
|
+
private applyChangesToSandbox;
|
|
74
|
+
/**
|
|
75
|
+
* Run npm install in the sandbox.
|
|
76
|
+
*/
|
|
77
|
+
private runInstall;
|
|
78
|
+
/**
|
|
79
|
+
* Run the test command and capture output.
|
|
80
|
+
*/
|
|
81
|
+
private runTests;
|
|
82
|
+
/**
|
|
83
|
+
* Parse test output to extract pass/fail/total counts.
|
|
84
|
+
* Supports common test runners: vitest, jest, mocha, etc.
|
|
85
|
+
*/
|
|
86
|
+
private parseTestOutput;
|
|
87
|
+
/**
|
|
88
|
+
* Truncate long output to avoid huge result strings.
|
|
89
|
+
*/
|
|
90
|
+
private truncateOutput;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Clean up a specific sandbox directory.
|
|
94
|
+
*/
|
|
95
|
+
export declare function cleanupSandbox(sandboxPath: string): void;
|
|
96
|
+
//# sourceMappingURL=tester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tester.d.ts","sourceRoot":"","sources":["../../../src/agents/agents/tester.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA6C7C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,2CAA2C;IAE/D;;;;;;;;;OASG;IACG,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IA8E/E;;;OAGG;YACW,iBAAiB;IA+G/B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsChB;;;OAGG;IACH,OAAO,CAAC,eAAe;IA6CvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAIvB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQxD"}
|