agentrium 0.3.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/README.md +181 -0
- package/dist/agents/architect.d.ts +2 -0
- package/dist/agents/architect.js +23 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/base.d.ts +10 -0
- package/dist/agents/base.js +37 -0
- package/dist/agents/base.js.map +1 -0
- package/dist/agents/codeReviewer.d.ts +3 -0
- package/dist/agents/codeReviewer.js +32 -0
- package/dist/agents/codeReviewer.js.map +1 -0
- package/dist/agents/productManager.d.ts +2 -0
- package/dist/agents/productManager.js +23 -0
- package/dist/agents/productManager.js.map +1 -0
- package/dist/agents/qaEngineer.d.ts +2 -0
- package/dist/agents/qaEngineer.js +23 -0
- package/dist/agents/qaEngineer.js.map +1 -0
- package/dist/agents/registry.d.ts +3 -0
- package/dist/agents/registry.js +30 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/reviewArbiter.d.ts +2 -0
- package/dist/agents/reviewArbiter.js +24 -0
- package/dist/agents/reviewArbiter.js.map +1 -0
- package/dist/agents/softwareEngineer.d.ts +2 -0
- package/dist/agents/softwareEngineer.js +23 -0
- package/dist/agents/softwareEngineer.js.map +1 -0
- package/dist/agents/technicalWriter.d.ts +2 -0
- package/dist/agents/technicalWriter.js +24 -0
- package/dist/agents/technicalWriter.js.map +1 -0
- package/dist/agents/types.d.ts +10 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/uxDesigner.d.ts +2 -0
- package/dist/agents/uxDesigner.js +23 -0
- package/dist/agents/uxDesigner.js.map +1 -0
- package/dist/artifacts/store.d.ts +20 -0
- package/dist/artifacts/store.js +81 -0
- package/dist/artifacts/store.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.js +44 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +2 -0
- package/dist/cli/commands/run.js +67 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/runs.d.ts +2 -0
- package/dist/cli/commands/runs.js +37 -0
- package/dist/cli/commands/runs.js.map +1 -0
- package/dist/cli/commands/show.d.ts +4 -0
- package/dist/cli/commands/show.js +56 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.js +28 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/workspaces.d.ts +2 -0
- package/dist/cli/commands/workspaces.js +24 -0
- package/dist/cli/commands/workspaces.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +30 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils.d.ts +1 -0
- package/dist/cli/utils.js +28 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/context/configParser.d.ts +2 -0
- package/dist/context/configParser.js +109 -0
- package/dist/context/configParser.js.map +1 -0
- package/dist/context/contextBuilder.d.ts +2 -0
- package/dist/context/contextBuilder.js +39 -0
- package/dist/context/contextBuilder.js.map +1 -0
- package/dist/context/repoAnalyzer.d.ts +4 -0
- package/dist/context/repoAnalyzer.js +84 -0
- package/dist/context/repoAnalyzer.js.map +1 -0
- package/dist/context/types.d.ts +35 -0
- package/dist/context/types.js +2 -0
- package/dist/context/types.js.map +1 -0
- package/dist/pipeline/checkpoint.d.ts +4 -0
- package/dist/pipeline/checkpoint.js +62 -0
- package/dist/pipeline/checkpoint.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +7 -0
- package/dist/pipeline/pipeline.js +33 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/pipeline/runner.d.ts +15 -0
- package/dist/pipeline/runner.js +127 -0
- package/dist/pipeline/runner.js.map +1 -0
- package/dist/pipeline/types.d.ts +14 -0
- package/dist/pipeline/types.js +14 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/review/process.d.ts +15 -0
- package/dist/review/process.js +149 -0
- package/dist/review/process.js.map +1 -0
- package/dist/review/types.d.ts +9 -0
- package/dist/review/types.js +16 -0
- package/dist/review/types.js.map +1 -0
- package/dist/workspace/manager.d.ts +7 -0
- package/dist/workspace/manager.js +63 -0
- package/dist/workspace/manager.js.map +1 -0
- package/package.json +51 -0
- package/prompts/architect.md +40 -0
- package/prompts/codeReviewerLogic.md +43 -0
- package/prompts/codeReviewerSecurity.md +43 -0
- package/prompts/productManager.md +29 -0
- package/prompts/qaEngineer.md +49 -0
- package/prompts/reviewArbiter.md +45 -0
- package/prompts/softwareEngineer.md +43 -0
- package/prompts/technicalWriter.md +40 -0
- package/prompts/uxDesigner.md +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Agentrium
|
|
2
|
+
|
|
3
|
+
Multi-agent orchestrator for software development. Runs a task through a pipeline of specialized AI agents — from requirements analysis to code review — with human checkpoints between stages.
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
- Node.js 22+
|
|
8
|
+
- [Claude Code](https://claude.ai/code) subscription (used for agent authentication)
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install -g agentrium
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 1. Initialize a workspace in your project directory
|
|
20
|
+
cd ~/workspace/my-project
|
|
21
|
+
agentrium init
|
|
22
|
+
|
|
23
|
+
# 2. Run a task
|
|
24
|
+
agentrium run "Add user authentication with JWT"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## How It Works
|
|
28
|
+
|
|
29
|
+
Each task runs through a pipeline of specialized agents:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
analysis → architecture → implementation → testing → review
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Optional stages can be included on demand:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
analysis → design → architecture → implementation → testing → documentation → review
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
At each checkpoint (configurable), you can approve, reject, skip, or view the agent's output before proceeding.
|
|
42
|
+
|
|
43
|
+
The **review** stage runs two agents in parallel (Logic Reviewer + Security Reviewer), then a Review Arbiter merges their findings into a final verdict. If changes are requested, a rework cycle runs automatically (Software Engineer fixes → QA re-verifies → re-review), up to a configurable maximum.
|
|
44
|
+
|
|
45
|
+
## Commands
|
|
46
|
+
|
|
47
|
+
### `agentrium init`
|
|
48
|
+
|
|
49
|
+
Scan a directory for git repositories and create a workspace config.
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
agentrium init
|
|
53
|
+
agentrium init --name my-ws --dir ~/projects
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
After init, edit `~/.agentrium/workspaces/<name>/AGENTRIUM.md` to configure your workspace:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# Workspace: my-project
|
|
60
|
+
|
|
61
|
+
## Repositories
|
|
62
|
+
- [my-project](~/workspace/my-project) — main application
|
|
63
|
+
|
|
64
|
+
## Tech Stack
|
|
65
|
+
- TypeScript, Node.js 22, PostgreSQL
|
|
66
|
+
|
|
67
|
+
## Conventions
|
|
68
|
+
See CLAUDE.md
|
|
69
|
+
|
|
70
|
+
## Pipeline Settings
|
|
71
|
+
- Checkpoints: analysis, architecture, review
|
|
72
|
+
- Max review iterations: 3
|
|
73
|
+
- Skip stages: design, documentation
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### `agentrium run <task>`
|
|
77
|
+
|
|
78
|
+
Run a task through the agent pipeline.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
agentrium run "Add password reset flow"
|
|
82
|
+
agentrium run "Fix null pointer in auth middleware"
|
|
83
|
+
agentrium run "Add login page" --include design
|
|
84
|
+
agentrium run "Add API docs" --include documentation
|
|
85
|
+
agentrium run "Quick fix" --no-checkpoints
|
|
86
|
+
agentrium run "Fix bug" --workspace my-other-ws
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Checkpoint controls** (shown at each checkpoint):
|
|
90
|
+
- `[a]` Approve — continue to next stage
|
|
91
|
+
- `[r]` Reject — abort the pipeline
|
|
92
|
+
- `[s]` Skip — skip to the next stage (current stage artifact is still saved)
|
|
93
|
+
- `[v]` View — print the saved artifact for the current stage
|
|
94
|
+
|
|
95
|
+
### `agentrium workspaces`
|
|
96
|
+
|
|
97
|
+
List all configured workspaces.
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
agentrium workspaces
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### `agentrium runs`
|
|
104
|
+
|
|
105
|
+
List all runs for the current workspace.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
agentrium runs
|
|
109
|
+
agentrium runs --workspace my-ws
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### `agentrium show <run-id>`
|
|
113
|
+
|
|
114
|
+
Show run details or a specific stage artifact.
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
agentrium show run_abc123
|
|
118
|
+
agentrium show run_abc123 --stage analysis
|
|
119
|
+
agentrium show run_abc123 --stage implementation
|
|
120
|
+
agentrium show run_abc123 --stage review
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### `agentrium status`
|
|
124
|
+
|
|
125
|
+
Show the latest run for the current workspace.
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
agentrium status
|
|
129
|
+
agentrium status --workspace my-ws
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Agents
|
|
133
|
+
|
|
134
|
+
| Stage | Agent | Optional |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| `analysis` | Product Manager | no |
|
|
137
|
+
| `design` | UX Designer | yes (`--include design`) |
|
|
138
|
+
| `architecture` | Architect | no |
|
|
139
|
+
| `implementation` | Software Engineer | no |
|
|
140
|
+
| `testing` | QA Engineer | no |
|
|
141
|
+
| `documentation` | Technical Writer | yes (`--include documentation`) |
|
|
142
|
+
| `review` | Logic Reviewer + Security Reviewer + Arbiter | no |
|
|
143
|
+
|
|
144
|
+
## Artifacts
|
|
145
|
+
|
|
146
|
+
All run artifacts are saved to:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
~/.agentrium/workspaces/<name>/runs/<run-id>/
|
|
150
|
+
01-intake.md
|
|
151
|
+
02-analysis.md
|
|
152
|
+
03-design.md
|
|
153
|
+
04-architecture.md
|
|
154
|
+
05-implementation.md
|
|
155
|
+
06-testing.md
|
|
156
|
+
07-documentation.md
|
|
157
|
+
08-review.md
|
|
158
|
+
meta.json
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Development
|
|
162
|
+
|
|
163
|
+
To build and run from source:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
git clone https://github.com/Dis1092006/agentrium.git
|
|
167
|
+
cd agentrium
|
|
168
|
+
npm install
|
|
169
|
+
npm run build
|
|
170
|
+
npm link
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
After `npm link`, the `agentrium` command points to your local build. Run tests with:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
npm test
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## License
|
|
180
|
+
|
|
181
|
+
ISC
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
function loadPrompt() {
|
|
7
|
+
const promptPath = path.resolve(__dirname, "../../prompts/architect.md");
|
|
8
|
+
try {
|
|
9
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "You are an Architect agent. Design the technical approach for the given requirements.";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function createArchitect() {
|
|
16
|
+
return new BaseAgent({
|
|
17
|
+
name: "architect",
|
|
18
|
+
description: "Designs technical approach and implementation plan",
|
|
19
|
+
systemPrompt: loadPrompt(),
|
|
20
|
+
tools: ["Read", "Glob", "Grep"],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=architect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,uFAAuF,CAAC;IACjG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,oDAAoD;QACjE,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AgentConfig, AgentResult } from "./types.js";
|
|
2
|
+
export declare class BaseAgent {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
readonly tools: string[];
|
|
6
|
+
private readonly systemPrompt;
|
|
7
|
+
constructor(config: AgentConfig);
|
|
8
|
+
buildSystemPrompt(contextPrompt: string): string;
|
|
9
|
+
run(contextPrompt: string, taskDescription: string): Promise<AgentResult>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export class BaseAgent {
|
|
2
|
+
name;
|
|
3
|
+
description;
|
|
4
|
+
tools;
|
|
5
|
+
systemPrompt;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.name = config.name;
|
|
8
|
+
this.description = config.description;
|
|
9
|
+
this.systemPrompt = config.systemPrompt;
|
|
10
|
+
this.tools = config.tools;
|
|
11
|
+
}
|
|
12
|
+
buildSystemPrompt(contextPrompt) {
|
|
13
|
+
return `${this.systemPrompt}\n\n---\n\n# Project Context\n\n${contextPrompt}`;
|
|
14
|
+
}
|
|
15
|
+
async run(contextPrompt, taskDescription) {
|
|
16
|
+
const { query } = await import("@anthropic-ai/claude-agent-sdk");
|
|
17
|
+
const fullPrompt = this.buildSystemPrompt(contextPrompt);
|
|
18
|
+
let result = "";
|
|
19
|
+
for await (const message of query({
|
|
20
|
+
prompt: taskDescription,
|
|
21
|
+
options: {
|
|
22
|
+
systemPrompt: fullPrompt,
|
|
23
|
+
allowedTools: this.tools,
|
|
24
|
+
permissionMode: "default",
|
|
25
|
+
},
|
|
26
|
+
})) {
|
|
27
|
+
if ("result" in message) {
|
|
28
|
+
result = message.result;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!result) {
|
|
32
|
+
throw new Error(`Agent "${this.name}" produced no output for task: ${taskDescription.slice(0, 100)}`);
|
|
33
|
+
}
|
|
34
|
+
return { artifact: result, metadata: { agent: this.name } };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;IACX,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,KAAK,CAAW;IACR,YAAY,CAAS;IAEtC,YAAY,MAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,aAAqB;QACrC,OAAO,GAAG,IAAI,CAAC,YAAY,mCAAmC,aAAa,EAAE,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,aAAqB,EAAE,eAAuB;QACtD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,KAAK,CAAC;YAChC,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE;gBACP,YAAY,EAAE,UAAU;gBACxB,YAAY,EAAE,IAAI,CAAC,KAAK;gBACxB,cAAc,EAAE,SAAS;aAC1B;SACF,CAAC,EAAE,CAAC;YACH,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,kCAAkC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// src/agents/codeReviewer.ts
|
|
2
|
+
import { BaseAgent } from "./base.js";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
function loadPrompt(filename, fallback) {
|
|
8
|
+
const promptPath = path.resolve(__dirname, "../../prompts", filename);
|
|
9
|
+
try {
|
|
10
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return fallback;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function createLogicReviewer() {
|
|
17
|
+
return new BaseAgent({
|
|
18
|
+
name: "code-reviewer-logic",
|
|
19
|
+
description: "Reviews code for logic errors, bugs, edge cases, and performance",
|
|
20
|
+
systemPrompt: loadPrompt("codeReviewerLogic.md", "You are a Code Reviewer focused on logic, correctness, and performance."),
|
|
21
|
+
tools: ["Read", "Glob", "Grep"],
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function createSecurityReviewer() {
|
|
25
|
+
return new BaseAgent({
|
|
26
|
+
name: "code-reviewer-security",
|
|
27
|
+
description: "Reviews code for security vulnerabilities and convention adherence",
|
|
28
|
+
systemPrompt: loadPrompt("codeReviewerSecurity.md", "You are a Code Reviewer focused on security and project conventions."),
|
|
29
|
+
tools: ["Read", "Glob", "Grep"],
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=codeReviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeReviewer.js","sourceRoot":"","sources":["../../src/agents/codeReviewer.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU,CAAC,QAAgB,EAAE,QAAgB;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,kEAAkE;QAC/E,YAAY,EAAE,UAAU,CACtB,sBAAsB,EACtB,yEAAyE,CAC1E;QACD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,oEAAoE;QACjF,YAAY,EAAE,UAAU,CACtB,yBAAyB,EACzB,sEAAsE,CACvE;QACD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
function loadPrompt() {
|
|
7
|
+
const promptPath = path.resolve(__dirname, "../../prompts/productManager.md");
|
|
8
|
+
try {
|
|
9
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "You are a Product Manager agent. Analyze the task and produce requirements.";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function createProductManager() {
|
|
16
|
+
return new BaseAgent({
|
|
17
|
+
name: "product-manager",
|
|
18
|
+
description: "Analyzes tasks and produces requirements with acceptance criteria",
|
|
19
|
+
systemPrompt: loadPrompt(),
|
|
20
|
+
tools: ["Read", "Glob", "Grep", "WebSearch"],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=productManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"productManager.js","sourceRoot":"","sources":["../../src/agents/productManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6EAA6E,CAAC;IACvF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mEAAmE;QAChF,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
function loadPrompt() {
|
|
7
|
+
const promptPath = path.resolve(__dirname, "../../prompts/qaEngineer.md");
|
|
8
|
+
try {
|
|
9
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "You are a QA Engineer agent. Write and run tests to verify the implementation.";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function createQAEngineer() {
|
|
16
|
+
return new BaseAgent({
|
|
17
|
+
name: "qa-engineer",
|
|
18
|
+
description: "Writes and runs tests to verify implementation meets requirements",
|
|
19
|
+
systemPrompt: loadPrompt(),
|
|
20
|
+
tools: ["Read", "Write", "Edit", "Glob", "Grep", "Bash"],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=qaEngineer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qaEngineer.js","sourceRoot":"","sources":["../../src/agents/qaEngineer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gFAAgF,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mEAAmE;QAChF,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createProductManager } from "./productManager.js";
|
|
2
|
+
import { createArchitect } from "./architect.js";
|
|
3
|
+
import { createSoftwareEngineer } from "./softwareEngineer.js";
|
|
4
|
+
import { createQAEngineer } from "./qaEngineer.js";
|
|
5
|
+
import { createLogicReviewer, createSecurityReviewer } from "./codeReviewer.js";
|
|
6
|
+
import { createReviewArbiter } from "./reviewArbiter.js";
|
|
7
|
+
import { createUxDesigner } from "./uxDesigner.js";
|
|
8
|
+
import { createTechnicalWriter } from "./technicalWriter.js";
|
|
9
|
+
const AGENT_FACTORIES = {
|
|
10
|
+
"product-manager": createProductManager,
|
|
11
|
+
"architect": createArchitect,
|
|
12
|
+
"software-engineer": createSoftwareEngineer,
|
|
13
|
+
"qa-engineer": createQAEngineer,
|
|
14
|
+
"code-reviewer-logic": createLogicReviewer,
|
|
15
|
+
"code-reviewer-security": createSecurityReviewer,
|
|
16
|
+
"review-arbiter": createReviewArbiter,
|
|
17
|
+
"ux-designer": createUxDesigner,
|
|
18
|
+
"technical-writer": createTechnicalWriter,
|
|
19
|
+
};
|
|
20
|
+
export function createAgentByName(name) {
|
|
21
|
+
const factory = AGENT_FACTORIES[name];
|
|
22
|
+
if (!factory) {
|
|
23
|
+
throw new Error(`Unknown agent: "${name}"`);
|
|
24
|
+
}
|
|
25
|
+
return factory();
|
|
26
|
+
}
|
|
27
|
+
export function getRegisteredAgentNames() {
|
|
28
|
+
return Object.keys(AGENT_FACTORIES);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,MAAM,eAAe,GAAiC;IACpD,iBAAiB,EAAE,oBAAoB;IACvC,WAAW,EAAE,eAAe;IAC5B,mBAAmB,EAAE,sBAAsB;IAC3C,aAAa,EAAE,gBAAgB;IAC/B,qBAAqB,EAAE,mBAAmB;IAC1C,wBAAwB,EAAE,sBAAsB;IAChD,gBAAgB,EAAE,mBAAmB;IACrC,aAAa,EAAE,gBAAgB;IAC/B,kBAAkB,EAAE,qBAAqB;CAC1C,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/agents/reviewArbiter.ts
|
|
2
|
+
import { BaseAgent } from "./base.js";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
function loadPrompt() {
|
|
8
|
+
const promptPath = path.resolve(__dirname, "../../prompts/reviewArbiter.md");
|
|
9
|
+
try {
|
|
10
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return "You are a Review Arbiter. Deduplicate findings, resolve conflicts, and produce a verdict.";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function createReviewArbiter() {
|
|
17
|
+
return new BaseAgent({
|
|
18
|
+
name: "review-arbiter",
|
|
19
|
+
description: "Deduplicates review findings, resolves conflicts, and produces final verdict",
|
|
20
|
+
systemPrompt: loadPrompt(),
|
|
21
|
+
tools: ["Read"],
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=reviewArbiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewArbiter.js","sourceRoot":"","sources":["../../src/agents/reviewArbiter.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,2FAA2F,CAAC;IACrG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8EAA8E;QAC3F,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,CAAC;KAChB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
function loadPrompt() {
|
|
7
|
+
const promptPath = path.resolve(__dirname, "../../prompts/softwareEngineer.md");
|
|
8
|
+
try {
|
|
9
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "You are a Software Engineer agent. Implement the code changes from the Architect's plan.";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function createSoftwareEngineer() {
|
|
16
|
+
return new BaseAgent({
|
|
17
|
+
name: "software-engineer",
|
|
18
|
+
description: "Implements code changes following the Architect's design",
|
|
19
|
+
systemPrompt: loadPrompt(),
|
|
20
|
+
tools: ["Read", "Write", "Edit", "Glob", "Grep", "Bash"],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=softwareEngineer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"softwareEngineer.js","sourceRoot":"","sources":["../../src/agents/softwareEngineer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;IAChF,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,0FAA0F,CAAC;IACpG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0DAA0D;QACvE,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/agents/technicalWriter.ts
|
|
2
|
+
import { BaseAgent } from "./base.js";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
function loadPrompt() {
|
|
8
|
+
const promptPath = path.resolve(__dirname, "../../prompts/technicalWriter.md");
|
|
9
|
+
try {
|
|
10
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return "You are a Technical Writer. Produce developer-facing documentation for completed features.";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function createTechnicalWriter() {
|
|
17
|
+
return new BaseAgent({
|
|
18
|
+
name: "technical-writer",
|
|
19
|
+
description: "Produces developer-facing documentation: README updates, API docs, changelog",
|
|
20
|
+
systemPrompt: loadPrompt(),
|
|
21
|
+
tools: ["Read", "Write", "Edit", "Glob"],
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=technicalWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technicalWriter.js","sourceRoot":"","sources":["../../src/agents/technicalWriter.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;IAC/E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,4FAA4F,CAAC;IACtG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,8EAA8E;QAC3F,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;KACzC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
function loadPrompt() {
|
|
7
|
+
const promptPath = path.resolve(__dirname, "../../prompts/uxDesigner.md");
|
|
8
|
+
try {
|
|
9
|
+
return fs.readFileSync(promptPath, "utf-8");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "You are a UX Designer. Produce UI/UX design specifications for frontend tasks.";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function createUxDesigner() {
|
|
16
|
+
return new BaseAgent({
|
|
17
|
+
name: "ux-designer",
|
|
18
|
+
description: "Produces UI/UX design specifications: user flows, screen layouts, interactions",
|
|
19
|
+
systemPrompt: loadPrompt(),
|
|
20
|
+
tools: ["Read", "Glob", "WebSearch"],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=uxDesigner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uxDesigner.js","sourceRoot":"","sources":["../../src/agents/uxDesigner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gFAAgF,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gFAAgF;QAC7F,YAAY,EAAE,UAAU,EAAE;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface RunMeta {
|
|
2
|
+
runId: string;
|
|
3
|
+
task: string;
|
|
4
|
+
status: "running" | "completed" | "failed" | "aborted";
|
|
5
|
+
createdAt: string;
|
|
6
|
+
stages: Record<string, {
|
|
7
|
+
completedAt: string;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export declare class ArtifactStore {
|
|
11
|
+
private readonly baseDir;
|
|
12
|
+
constructor(baseDir: string);
|
|
13
|
+
createRun(task: string): string;
|
|
14
|
+
saveArtifact(runId: string, stage: string, content: string): void;
|
|
15
|
+
readArtifact(runId: string, stage: string): string | null;
|
|
16
|
+
readMeta(runId: string): RunMeta;
|
|
17
|
+
updateStatus(runId: string, status: RunMeta["status"]): void;
|
|
18
|
+
listRuns(): RunMeta[];
|
|
19
|
+
private writeMeta;
|
|
20
|
+
}
|