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,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PackageAgent — Manages npm package operations for the publishing pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Capabilities:
|
|
5
|
+
* - Bump version (patch, minor, major)
|
|
6
|
+
* - Build project
|
|
7
|
+
* - Generate changelog from git log
|
|
8
|
+
* - Publish to npm
|
|
9
|
+
*
|
|
10
|
+
* Usage in task plans:
|
|
11
|
+
* ```json
|
|
12
|
+
* { "id": "step-publish", "description": "Bump version and publish to npm", "agentType": "package", "dependsOn": ["step-test"] }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
import { execSync } from 'node:child_process';
|
|
18
|
+
import { Agent } from '../agent.js';
|
|
19
|
+
const CHANGELOG_PROMPT = `You are generating a changelog entry.
|
|
20
|
+
|
|
21
|
+
Given the following git log between two tags/revisions, write a concise changelog entry.
|
|
22
|
+
|
|
23
|
+
Format:
|
|
24
|
+
## [version] - YYYY-MM-DD
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- new features
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- changes in existing functionality
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- bug fixes
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
- removed features
|
|
37
|
+
|
|
38
|
+
Group commits by type. Use present tense, be specific. Return ONLY the changelog entry.`;
|
|
39
|
+
/**
|
|
40
|
+
* PackageAgent — Manages npm package versioning, building, and publishing.
|
|
41
|
+
*/
|
|
42
|
+
export class PackageAgent extends Agent {
|
|
43
|
+
name = 'Package';
|
|
44
|
+
description = 'Manages package version, build, and npm publish';
|
|
45
|
+
async execute(context, callLLM) {
|
|
46
|
+
try {
|
|
47
|
+
const taskDesc = context.taskPlan.find((s) => s.agentType === 'package' && s.status === 'running')?.description || context.goal;
|
|
48
|
+
const operation = this.detectOperation(taskDesc);
|
|
49
|
+
switch (operation) {
|
|
50
|
+
case 'version':
|
|
51
|
+
return this.bumpVersion(context, taskDesc);
|
|
52
|
+
case 'build':
|
|
53
|
+
return this.build();
|
|
54
|
+
case 'publish':
|
|
55
|
+
return this.publish();
|
|
56
|
+
case 'changelog':
|
|
57
|
+
return this.generateChangelog(callLLM);
|
|
58
|
+
default:
|
|
59
|
+
return this.bumpVersion(context, taskDesc);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
64
|
+
return { success: false, summary: 'Package operation failed', error: msg };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
detectOperation(description) {
|
|
68
|
+
const lower = description.toLowerCase();
|
|
69
|
+
if (lower.includes('version') || lower.includes('bump') || lower.includes('patch') || lower.includes('minor') || lower.includes('major'))
|
|
70
|
+
return 'version';
|
|
71
|
+
if (lower.includes('build') || lower.includes('compile') || lower.includes('dist'))
|
|
72
|
+
return 'build';
|
|
73
|
+
if (lower.includes('publish') || lower.includes('release') || lower.includes('deploy'))
|
|
74
|
+
return 'publish';
|
|
75
|
+
if (lower.includes('changelog') || lower.includes('change log') || lower.includes('log'))
|
|
76
|
+
return 'changelog';
|
|
77
|
+
return 'version';
|
|
78
|
+
}
|
|
79
|
+
detectBumpType(description) {
|
|
80
|
+
const lower = description.toLowerCase();
|
|
81
|
+
if (lower.includes('major'))
|
|
82
|
+
return 'major';
|
|
83
|
+
if (lower.includes('minor'))
|
|
84
|
+
return 'minor';
|
|
85
|
+
return 'patch';
|
|
86
|
+
}
|
|
87
|
+
async bumpVersion(context, description) {
|
|
88
|
+
const pkgPath = join(context.workingDirectory, 'package.json');
|
|
89
|
+
if (!existsSync(pkgPath)) {
|
|
90
|
+
return { success: false, summary: 'No package.json found', error: 'Cannot bump version without package.json' };
|
|
91
|
+
}
|
|
92
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
93
|
+
const currentVersion = pkg.version || '0.0.0';
|
|
94
|
+
const parts = currentVersion.split('.').map(Number);
|
|
95
|
+
const bumpType = this.detectBumpType(description);
|
|
96
|
+
// Bump version
|
|
97
|
+
switch (bumpType) {
|
|
98
|
+
case 'major':
|
|
99
|
+
parts[0] = (parts[0] || 0) + 1;
|
|
100
|
+
parts[1] = 0;
|
|
101
|
+
parts[2] = 0;
|
|
102
|
+
break;
|
|
103
|
+
case 'minor':
|
|
104
|
+
parts[1] = (parts[1] || 0) + 1;
|
|
105
|
+
parts[2] = 0;
|
|
106
|
+
break;
|
|
107
|
+
case 'patch':
|
|
108
|
+
parts[2] = (parts[2] || 0) + 1;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
const newVersion = parts.join('.');
|
|
112
|
+
pkg.version = newVersion;
|
|
113
|
+
// Write updated package.json
|
|
114
|
+
writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
|
|
115
|
+
return {
|
|
116
|
+
success: true,
|
|
117
|
+
summary: `Bumped version: ${currentVersion} → ${newVersion} (${bumpType})`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async build() {
|
|
121
|
+
try {
|
|
122
|
+
const output = execSync('npm run build 2>&1', {
|
|
123
|
+
cwd: process.cwd(),
|
|
124
|
+
timeout: 120_000,
|
|
125
|
+
encoding: 'utf-8',
|
|
126
|
+
stdio: 'pipe',
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
success: true,
|
|
130
|
+
summary: 'Build completed successfully',
|
|
131
|
+
details: output.slice(0, 1000),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
const error = err;
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
summary: 'Build failed',
|
|
139
|
+
error: error.stderr || error.message || 'Unknown build error',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async publish() {
|
|
144
|
+
try {
|
|
145
|
+
const output = execSync('npm publish 2>&1', {
|
|
146
|
+
cwd: process.cwd(),
|
|
147
|
+
timeout: 120_000,
|
|
148
|
+
encoding: 'utf-8',
|
|
149
|
+
stdio: 'pipe',
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
success: true,
|
|
153
|
+
summary: 'Published to npm successfully',
|
|
154
|
+
details: output,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
const error = err;
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
summary: 'npm publish failed',
|
|
162
|
+
error: this.parseNpmError(error),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async generateChangelog(callLLM) {
|
|
167
|
+
try {
|
|
168
|
+
// Get git log since last tag
|
|
169
|
+
const log = this.exec('git log --oneline --no-decorate $(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)..HEAD 2>&1');
|
|
170
|
+
const logLines = log.trim().split('\n').filter(Boolean);
|
|
171
|
+
if (logLines.length === 0) {
|
|
172
|
+
return { success: true, summary: 'No new commits since last tag', details: 'Changelog is empty' };
|
|
173
|
+
}
|
|
174
|
+
const prompt = `${CHANGELOG_PROMPT}\n\n## Git Log\n${log}`;
|
|
175
|
+
let changelogEntry;
|
|
176
|
+
try {
|
|
177
|
+
changelogEntry = await callLLM(prompt, { temperature: 0.3, maxTokens: 1000 });
|
|
178
|
+
changelogEntry = changelogEntry.trim().replace(/^```[\s\S]*?\n|```$/g, '').trim();
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
changelogEntry = `## [Unreleased]\n${logLines.map((l) => `- ${l}`).join('\n')}`;
|
|
182
|
+
}
|
|
183
|
+
// Try to prepend to CHANGELOG.md
|
|
184
|
+
const changelogPath = join(process.cwd(), 'CHANGELOG.md');
|
|
185
|
+
let existingContent = '';
|
|
186
|
+
if (existsSync(changelogPath)) {
|
|
187
|
+
existingContent = readFileSync(changelogPath, 'utf-8');
|
|
188
|
+
}
|
|
189
|
+
const newContent = changelogEntry + '\n\n' + existingContent;
|
|
190
|
+
writeFileSync(changelogPath, newContent, 'utf-8');
|
|
191
|
+
return {
|
|
192
|
+
success: true,
|
|
193
|
+
summary: `Generated changelog with ${logLines.length} commit(s)`,
|
|
194
|
+
details: changelogEntry,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
199
|
+
return { success: false, summary: 'Changelog generation failed', error: msg };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
parseNpmError(error) {
|
|
203
|
+
const msg = error.stderr || error.message || '';
|
|
204
|
+
if (msg.includes('E403'))
|
|
205
|
+
return 'Not authorized — check npm login and token';
|
|
206
|
+
if (msg.includes('E404'))
|
|
207
|
+
return 'Package not found — check package name';
|
|
208
|
+
if (msg.includes('E402'))
|
|
209
|
+
return 'Payment required — check npm account';
|
|
210
|
+
if (msg.includes('unpaid'))
|
|
211
|
+
return 'Unpaid account — complete npm payment setup';
|
|
212
|
+
return msg.slice(0, 300);
|
|
213
|
+
}
|
|
214
|
+
exec(command, cwd) {
|
|
215
|
+
try {
|
|
216
|
+
return execSync(command, {
|
|
217
|
+
cwd: cwd || process.cwd(),
|
|
218
|
+
timeout: 30_000,
|
|
219
|
+
encoding: 'utf-8',
|
|
220
|
+
stdio: 'pipe',
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
const error = err;
|
|
225
|
+
const msg = error.stderr || error.message || '';
|
|
226
|
+
if (msg.includes('Command failed') || msg.includes('not found')) {
|
|
227
|
+
throw new Error(msg.slice(0, 200));
|
|
228
|
+
}
|
|
229
|
+
return error.stdout || msg;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=package-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-agent.js","sourceRoot":"","sources":["../../../src/agents/agents/package-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlannerAgent — Analyzes a user goal and produces an ordered, dependency-aware
|
|
3
|
+
* execution plan consisting of TaskSteps for other agents to execute.
|
|
4
|
+
*
|
|
5
|
+
* The planner is the first agent to run in every orchestration session.
|
|
6
|
+
* It now receives the project file tree (injected by the Orchestrator via
|
|
7
|
+
* context.metadata.projectFileTree) so it can make informed decisions about
|
|
8
|
+
* which files to create, modify, or reference in its plan.
|
|
9
|
+
*/
|
|
10
|
+
import { Agent, type AgentContext, type AgentResult } from '../agent.js';
|
|
11
|
+
import type { LLMCallFn } from '../agent.js';
|
|
12
|
+
/**
|
|
13
|
+
* PlannerAgent — Decomposes user goals into ordered task plans.
|
|
14
|
+
* Now accepts `projectFileTree` from context.metadata to make informed plans.
|
|
15
|
+
*/
|
|
16
|
+
export declare class PlannerAgent extends Agent {
|
|
17
|
+
readonly name = "Planner";
|
|
18
|
+
readonly description = "Analyzes user goals and creates detailed execution plans";
|
|
19
|
+
execute(context: AgentContext, callLLM: LLMCallFn): Promise<AgentResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Extract the task plan from the LLM response.
|
|
22
|
+
* Tries JSON.parse first, then falls back to extracting from code blocks.
|
|
23
|
+
*/
|
|
24
|
+
private parsePlan;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../../src/agents/agents/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AACxF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA4E7C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,8DAA8D;IAE5E,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IA4G9E;;;OAGG;IACH,OAAO,CAAC,SAAS;CAkClB"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlannerAgent — Analyzes a user goal and produces an ordered, dependency-aware
|
|
3
|
+
* execution plan consisting of TaskSteps for other agents to execute.
|
|
4
|
+
*
|
|
5
|
+
* The planner is the first agent to run in every orchestration session.
|
|
6
|
+
* It now receives the project file tree (injected by the Orchestrator via
|
|
7
|
+
* context.metadata.projectFileTree) so it can make informed decisions about
|
|
8
|
+
* which files to create, modify, or reference in its plan.
|
|
9
|
+
*/
|
|
10
|
+
import { Agent } from '../agent.js';
|
|
11
|
+
const PLANNER_SYSTEM_PROMPT = [
|
|
12
|
+
'You are a senior software architect. Your job is to decompose a user\'s goal into a detailed, ordered execution plan.',
|
|
13
|
+
'',
|
|
14
|
+
'For each step, specify:',
|
|
15
|
+
'- id: A short unique identifier (e.g., "step-01-gather-context")',
|
|
16
|
+
'- description: What needs to be done in clear language',
|
|
17
|
+
'- agentType: One of "context-gatherer", "writer", "reviewer", "tester", "debugger", "runner", "security"',
|
|
18
|
+
'- dependsOn: Array of step IDs that must complete before this one (empty array for first steps)',
|
|
19
|
+
'',
|
|
20
|
+
'Rules:',
|
|
21
|
+
'1. Start with a "context-gatherer" step to understand the codebase (if files exist)',
|
|
22
|
+
'2. Add one or more "writer" steps to implement changes (max 2-3 files per step)',
|
|
23
|
+
'3. If the project is EMPTY or the goal is to CREATE something from scratch,',
|
|
24
|
+
' skip the context-gatherer step and go straight to writer steps.',
|
|
25
|
+
'4. For goals that require running something (like "create a Python script and run it"),',
|
|
26
|
+
' add a "runner" step AFTER the writer step(s).',
|
|
27
|
+
' Use the description to specify the command: "Run: python hello.py" or "Run `npm test`"',
|
|
28
|
+
'5. End with a "reviewer" step to validate the work',
|
|
29
|
+
'6. Set dependsOn correctly so steps run in the right order',
|
|
30
|
+
'7. Keep steps granular — each step should change at most 2-3 files',
|
|
31
|
+
'8. Maximum 12 steps total',
|
|
32
|
+
'',
|
|
33
|
+
'Return ONLY a valid JSON array. No markdown, no explanations.',
|
|
34
|
+
'',
|
|
35
|
+
'Example (modifying existing project):',
|
|
36
|
+
'[',
|
|
37
|
+
' {',
|
|
38
|
+
' "id": "step-01-understand",',
|
|
39
|
+
' "description": "Scan the codebase to understand the current project structure and identify files related to authentication",',
|
|
40
|
+
' "agentType": "context-gatherer",',
|
|
41
|
+
' "dependsOn": []',
|
|
42
|
+
' },',
|
|
43
|
+
' {',
|
|
44
|
+
' "id": "step-02-add-routes",',
|
|
45
|
+
' "description": "Create JWT authentication routes in src/routes/auth.ts with login, register, and refresh endpoints",',
|
|
46
|
+
' "agentType": "writer",',
|
|
47
|
+
' "dependsOn": ["step-01-understand"]',
|
|
48
|
+
' },',
|
|
49
|
+
' {',
|
|
50
|
+
' "id": "step-03-add-middleware",',
|
|
51
|
+
' "description": "Add JWT verification middleware in src/middleware/auth.ts",',
|
|
52
|
+
' "agentType": "writer",',
|
|
53
|
+
' "dependsOn": ["step-01-understand"]',
|
|
54
|
+
' },',
|
|
55
|
+
' {',
|
|
56
|
+
' "id": "step-04-review",',
|
|
57
|
+
' "description": "Review all changes for security vulnerabilities, correctness, and code quality",',
|
|
58
|
+
' "agentType": "reviewer",',
|
|
59
|
+
' "dependsOn": ["step-02-add-routes", "step-03-add-middleware"]',
|
|
60
|
+
' }',
|
|
61
|
+
']',
|
|
62
|
+
'',
|
|
63
|
+
'Example (creating from scratch + running):',
|
|
64
|
+
'[',
|
|
65
|
+
' {',
|
|
66
|
+
' "id": "step-01-create-script",',
|
|
67
|
+
' "description": "Create a Python script hello.py that prints Hello, World!",',
|
|
68
|
+
' "agentType": "writer",',
|
|
69
|
+
' "dependsOn": []',
|
|
70
|
+
' },',
|
|
71
|
+
' {',
|
|
72
|
+
' "id": "step-02-run-script",',
|
|
73
|
+
' "description": "Run: python hello.py', ' "agentType": "runner",',
|
|
74
|
+
' "dependsOn": ["step-01-create-script"]',
|
|
75
|
+
' },',
|
|
76
|
+
' {',
|
|
77
|
+
' "id": "step-03-review",',
|
|
78
|
+
' "description": "Verify the output is correct",',
|
|
79
|
+
' "agentType": "reviewer",',
|
|
80
|
+
' "dependsOn": ["step-02-run-script"]',
|
|
81
|
+
' }',
|
|
82
|
+
']',
|
|
83
|
+
].join('\n');
|
|
84
|
+
/**
|
|
85
|
+
* PlannerAgent — Decomposes user goals into ordered task plans.
|
|
86
|
+
* Now accepts `projectFileTree` from context.metadata to make informed plans.
|
|
87
|
+
*/
|
|
88
|
+
export class PlannerAgent extends Agent {
|
|
89
|
+
name = 'Planner';
|
|
90
|
+
description = 'Analyzes user goals and creates detailed execution plans';
|
|
91
|
+
async execute(context, callLLM) {
|
|
92
|
+
try {
|
|
93
|
+
// Check for file tree (injected by Orchestrator) and memory context
|
|
94
|
+
const fileTree = context.metadata.projectFileTree;
|
|
95
|
+
const memoryContext = context.metadata.memoryContext;
|
|
96
|
+
const promptParts = [
|
|
97
|
+
PLANNER_SYSTEM_PROMPT,
|
|
98
|
+
'',
|
|
99
|
+
'## User Goal',
|
|
100
|
+
context.goal,
|
|
101
|
+
'',
|
|
102
|
+
'## Working Directory',
|
|
103
|
+
context.workingDirectory,
|
|
104
|
+
];
|
|
105
|
+
// Inject the project file tree so the planner knows what exists
|
|
106
|
+
if (fileTree) {
|
|
107
|
+
const treeLines = fileTree.split('\n').length;
|
|
108
|
+
promptParts.push('', '## Current Project Structure', fileTree || '(empty directory — no source files found)', treeLines > 1 ? `\n(${treeLines} files/directories visible)` : ' (empty)');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
promptParts.push('', '## Current Project Structure', '(unknown — file tree not available)');
|
|
112
|
+
}
|
|
113
|
+
// Append memory/few-shot examples if available
|
|
114
|
+
if (memoryContext) {
|
|
115
|
+
promptParts.push('', memoryContext);
|
|
116
|
+
}
|
|
117
|
+
promptParts.push('', 'Create an execution plan for this goal. Return ONLY a valid JSON array of task steps.');
|
|
118
|
+
const prompt = promptParts.join('\n');
|
|
119
|
+
const response = await callLLM(prompt, {
|
|
120
|
+
temperature: 0.3, // Low temperature for structured output
|
|
121
|
+
maxTokens: 4096,
|
|
122
|
+
});
|
|
123
|
+
const rawPlan = this.parsePlan(response);
|
|
124
|
+
// Normalize and validate each step
|
|
125
|
+
// LLMs often return numbers for id, null for dependsOn, or different formats
|
|
126
|
+
const plan = [];
|
|
127
|
+
for (const step of rawPlan) {
|
|
128
|
+
if (!step || typeof step !== 'object')
|
|
129
|
+
continue;
|
|
130
|
+
if (!step.description || !step.agentType)
|
|
131
|
+
continue;
|
|
132
|
+
// Normalize: convert id to string if it's a number
|
|
133
|
+
const id = String(step.id ?? `step-${plan.length + 1}`);
|
|
134
|
+
// Normalize: dependsOn can be null, undefined, a single string, or an array
|
|
135
|
+
let dependsOn = [];
|
|
136
|
+
if (Array.isArray(step.dependsOn)) {
|
|
137
|
+
dependsOn = step.dependsOn.map((d) => String(d));
|
|
138
|
+
}
|
|
139
|
+
else if (typeof step.dependsOn === 'string' || typeof step.dependsOn === 'number') {
|
|
140
|
+
dependsOn = [String(step.dependsOn)];
|
|
141
|
+
}
|
|
142
|
+
plan.push({
|
|
143
|
+
id,
|
|
144
|
+
description: String(step.description),
|
|
145
|
+
agentType: String(step.agentType),
|
|
146
|
+
dependsOn,
|
|
147
|
+
status: 'pending',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (plan.length === 0) {
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
summary: 'Planner produced an empty or invalid plan',
|
|
154
|
+
details: response,
|
|
155
|
+
error: 'The LLM returned a plan with no valid task steps',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// Store the parsed plan directly in the shared context for the orchestrator
|
|
159
|
+
context.taskPlan.push(...plan);
|
|
160
|
+
return {
|
|
161
|
+
success: true,
|
|
162
|
+
summary: `Created ${plan.length} task steps`,
|
|
163
|
+
details: plan.map((s) => ` [${s.agentType}] ${s.description}`).join('\n'),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
168
|
+
// Detect non-chat-model errors and provide helpful suggestions
|
|
169
|
+
let summary = 'Planner failed';
|
|
170
|
+
if (msg.includes('does not support chat completions')) {
|
|
171
|
+
summary = 'Planner failed — selected model does not support text chat. Use a text model like llama-3.3-70b-versatile or llama-3.1-8b-instant';
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
success: false,
|
|
175
|
+
summary,
|
|
176
|
+
error: msg,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Extract the task plan from the LLM response.
|
|
182
|
+
* Tries JSON.parse first, then falls back to extracting from code blocks.
|
|
183
|
+
*/
|
|
184
|
+
parsePlan(response) {
|
|
185
|
+
// Try direct JSON parse
|
|
186
|
+
const trimmed = response.trim();
|
|
187
|
+
try {
|
|
188
|
+
const parsed = JSON.parse(trimmed);
|
|
189
|
+
if (Array.isArray(parsed))
|
|
190
|
+
return parsed;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Not direct JSON — try extracting from code block
|
|
194
|
+
}
|
|
195
|
+
// Try extracting from ```json ... ``` block
|
|
196
|
+
const jsonMatch = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
197
|
+
if (jsonMatch) {
|
|
198
|
+
try {
|
|
199
|
+
const parsed = JSON.parse(jsonMatch[1].trim());
|
|
200
|
+
if (Array.isArray(parsed))
|
|
201
|
+
return parsed;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// Fall through
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Try finding a JSON array anywhere in the response
|
|
208
|
+
const arrayMatch = trimmed.match(/\[[\s\S]*\]/);
|
|
209
|
+
if (arrayMatch) {
|
|
210
|
+
try {
|
|
211
|
+
const parsed = JSON.parse(arrayMatch[0]);
|
|
212
|
+
if (Array.isArray(parsed))
|
|
213
|
+
return parsed;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Fall through
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return [];
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/agents/agents/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReviewerAgent — Validates code changes produced by the WriterAgent.
|
|
3
|
+
*
|
|
4
|
+
* The reviewer checks for:
|
|
5
|
+
* - Syntax errors and type mismatches
|
|
6
|
+
* - Security vulnerabilities (SQL injection, XSS, etc.)
|
|
7
|
+
* - Code style and conventions
|
|
8
|
+
* - Correctness of the implementation against the task description
|
|
9
|
+
* - Missing edge cases and error handling
|
|
10
|
+
*
|
|
11
|
+
* Output is stored in the shared context bus as conversation messages.
|
|
12
|
+
*/
|
|
13
|
+
import { Agent, type AgentContext, type AgentResult } from '../agent.js';
|
|
14
|
+
import type { LLMCallFn } from '../agent.js';
|
|
15
|
+
/**
|
|
16
|
+
* ReviewerAgent — Validates code changes produced by WriterAgent.
|
|
17
|
+
*/
|
|
18
|
+
export declare class ReviewerAgent extends Agent {
|
|
19
|
+
readonly name = "Reviewer";
|
|
20
|
+
readonly description = "Validates code changes for correctness, security, and quality";
|
|
21
|
+
execute(context: AgentContext, callLLM: LLMCallFn): Promise<AgentResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Build the review prompt from the task plan, relevant context, and changes.
|
|
24
|
+
*/
|
|
25
|
+
private buildPrompt;
|
|
26
|
+
/**
|
|
27
|
+
* Check if the review response contains any critical issues.
|
|
28
|
+
* Looks for "CRITICAL:" (with colon) at the start of a bullet or line.
|
|
29
|
+
* This avoids false positives from LLMs that say things like
|
|
30
|
+
* "No critical issues found" (which lacks the colon prefix).
|
|
31
|
+
*/
|
|
32
|
+
private hasCriticalIssues;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=reviewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../../src/agents/agents/reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwC7C;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,mEAAmE;IAEjF,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAqE9E;;OAEG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;CAe1B"}
|