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.
Files changed (104) hide show
  1. package/README.md +181 -0
  2. package/dist/agents/architect.d.ts +2 -0
  3. package/dist/agents/architect.js +23 -0
  4. package/dist/agents/architect.js.map +1 -0
  5. package/dist/agents/base.d.ts +10 -0
  6. package/dist/agents/base.js +37 -0
  7. package/dist/agents/base.js.map +1 -0
  8. package/dist/agents/codeReviewer.d.ts +3 -0
  9. package/dist/agents/codeReviewer.js +32 -0
  10. package/dist/agents/codeReviewer.js.map +1 -0
  11. package/dist/agents/productManager.d.ts +2 -0
  12. package/dist/agents/productManager.js +23 -0
  13. package/dist/agents/productManager.js.map +1 -0
  14. package/dist/agents/qaEngineer.d.ts +2 -0
  15. package/dist/agents/qaEngineer.js +23 -0
  16. package/dist/agents/qaEngineer.js.map +1 -0
  17. package/dist/agents/registry.d.ts +3 -0
  18. package/dist/agents/registry.js +30 -0
  19. package/dist/agents/registry.js.map +1 -0
  20. package/dist/agents/reviewArbiter.d.ts +2 -0
  21. package/dist/agents/reviewArbiter.js +24 -0
  22. package/dist/agents/reviewArbiter.js.map +1 -0
  23. package/dist/agents/softwareEngineer.d.ts +2 -0
  24. package/dist/agents/softwareEngineer.js +23 -0
  25. package/dist/agents/softwareEngineer.js.map +1 -0
  26. package/dist/agents/technicalWriter.d.ts +2 -0
  27. package/dist/agents/technicalWriter.js +24 -0
  28. package/dist/agents/technicalWriter.js.map +1 -0
  29. package/dist/agents/types.d.ts +10 -0
  30. package/dist/agents/types.js +2 -0
  31. package/dist/agents/types.js.map +1 -0
  32. package/dist/agents/uxDesigner.d.ts +2 -0
  33. package/dist/agents/uxDesigner.js +23 -0
  34. package/dist/agents/uxDesigner.js.map +1 -0
  35. package/dist/artifacts/store.d.ts +20 -0
  36. package/dist/artifacts/store.js +81 -0
  37. package/dist/artifacts/store.js.map +1 -0
  38. package/dist/cli/commands/init.d.ts +2 -0
  39. package/dist/cli/commands/init.js +44 -0
  40. package/dist/cli/commands/init.js.map +1 -0
  41. package/dist/cli/commands/run.d.ts +2 -0
  42. package/dist/cli/commands/run.js +67 -0
  43. package/dist/cli/commands/run.js.map +1 -0
  44. package/dist/cli/commands/runs.d.ts +2 -0
  45. package/dist/cli/commands/runs.js +37 -0
  46. package/dist/cli/commands/runs.js.map +1 -0
  47. package/dist/cli/commands/show.d.ts +4 -0
  48. package/dist/cli/commands/show.js +56 -0
  49. package/dist/cli/commands/show.js.map +1 -0
  50. package/dist/cli/commands/status.d.ts +2 -0
  51. package/dist/cli/commands/status.js +28 -0
  52. package/dist/cli/commands/status.js.map +1 -0
  53. package/dist/cli/commands/workspaces.d.ts +2 -0
  54. package/dist/cli/commands/workspaces.js +24 -0
  55. package/dist/cli/commands/workspaces.js.map +1 -0
  56. package/dist/cli/index.d.ts +3 -0
  57. package/dist/cli/index.js +30 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/utils.d.ts +1 -0
  60. package/dist/cli/utils.js +28 -0
  61. package/dist/cli/utils.js.map +1 -0
  62. package/dist/context/configParser.d.ts +2 -0
  63. package/dist/context/configParser.js +109 -0
  64. package/dist/context/configParser.js.map +1 -0
  65. package/dist/context/contextBuilder.d.ts +2 -0
  66. package/dist/context/contextBuilder.js +39 -0
  67. package/dist/context/contextBuilder.js.map +1 -0
  68. package/dist/context/repoAnalyzer.d.ts +4 -0
  69. package/dist/context/repoAnalyzer.js +84 -0
  70. package/dist/context/repoAnalyzer.js.map +1 -0
  71. package/dist/context/types.d.ts +35 -0
  72. package/dist/context/types.js +2 -0
  73. package/dist/context/types.js.map +1 -0
  74. package/dist/pipeline/checkpoint.d.ts +4 -0
  75. package/dist/pipeline/checkpoint.js +62 -0
  76. package/dist/pipeline/checkpoint.js.map +1 -0
  77. package/dist/pipeline/pipeline.d.ts +7 -0
  78. package/dist/pipeline/pipeline.js +33 -0
  79. package/dist/pipeline/pipeline.js.map +1 -0
  80. package/dist/pipeline/runner.d.ts +15 -0
  81. package/dist/pipeline/runner.js +127 -0
  82. package/dist/pipeline/runner.js.map +1 -0
  83. package/dist/pipeline/types.d.ts +14 -0
  84. package/dist/pipeline/types.js +14 -0
  85. package/dist/pipeline/types.js.map +1 -0
  86. package/dist/review/process.d.ts +15 -0
  87. package/dist/review/process.js +149 -0
  88. package/dist/review/process.js.map +1 -0
  89. package/dist/review/types.d.ts +9 -0
  90. package/dist/review/types.js +16 -0
  91. package/dist/review/types.js.map +1 -0
  92. package/dist/workspace/manager.d.ts +7 -0
  93. package/dist/workspace/manager.js +63 -0
  94. package/dist/workspace/manager.js.map +1 -0
  95. package/package.json +51 -0
  96. package/prompts/architect.md +40 -0
  97. package/prompts/codeReviewerLogic.md +43 -0
  98. package/prompts/codeReviewerSecurity.md +43 -0
  99. package/prompts/productManager.md +29 -0
  100. package/prompts/qaEngineer.md +49 -0
  101. package/prompts/reviewArbiter.md +45 -0
  102. package/prompts/softwareEngineer.md +43 -0
  103. package/prompts/technicalWriter.md +40 -0
  104. 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,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createArchitect(): BaseAgent;
@@ -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,3 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createLogicReviewer(): BaseAgent;
3
+ export declare function createSecurityReviewer(): BaseAgent;
@@ -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,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createProductManager(): BaseAgent;
@@ -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,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createQAEngineer(): BaseAgent;
@@ -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,3 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createAgentByName(name: string): BaseAgent;
3
+ export declare function getRegisteredAgentNames(): string[];
@@ -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,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createReviewArbiter(): BaseAgent;
@@ -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,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createSoftwareEngineer(): BaseAgent;
@@ -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,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createTechnicalWriter(): BaseAgent;
@@ -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,10 @@
1
+ export interface AgentConfig {
2
+ name: string;
3
+ description: string;
4
+ systemPrompt: string;
5
+ tools: string[];
6
+ }
7
+ export interface AgentResult {
8
+ artifact: string;
9
+ metadata: Record<string, unknown>;
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { BaseAgent } from "./base.js";
2
+ export declare function createUxDesigner(): BaseAgent;
@@ -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
+ }