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
@@ -0,0 +1,39 @@
1
+ export function buildContextPrompt(context) {
2
+ const sections = [];
3
+ sections.push(`# Workspace: ${context.workspace.name}`);
4
+ sections.push("");
5
+ if (context.workspace.techStack.length > 0) {
6
+ sections.push("## Tech Stack");
7
+ for (const tech of context.workspace.techStack) {
8
+ sections.push(`- ${tech}`);
9
+ }
10
+ sections.push("");
11
+ }
12
+ for (const repo of context.repos) {
13
+ sections.push(`## Repository: ${repo.name}`);
14
+ sections.push(`Path: ${repo.path}`);
15
+ if (repo.stack.length > 0) {
16
+ sections.push(`Detected stack: ${repo.stack.join(", ")}`);
17
+ }
18
+ sections.push("");
19
+ sections.push("### Directory Structure");
20
+ sections.push("```");
21
+ sections.push(repo.structure);
22
+ sections.push("```");
23
+ sections.push("");
24
+ if (repo.conventions) {
25
+ sections.push("### Conventions");
26
+ sections.push(repo.conventions);
27
+ sections.push("");
28
+ }
29
+ if (repo.recentCommits.length > 0) {
30
+ sections.push("### Recent Commits");
31
+ for (const commit of repo.recentCommits) {
32
+ sections.push(`- ${commit}`);
33
+ }
34
+ sections.push("");
35
+ }
36
+ }
37
+ return sections.join("\n");
38
+ }
39
+ //# sourceMappingURL=contextBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextBuilder.js","sourceRoot":"","sources":["../../src/context/contextBuilder.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,OAAoB;IACrD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { RepoContext } from "./types.js";
2
+ export declare function detectStack(repoPath: string): string[];
3
+ export declare function getDirectoryTree(repoPath: string, maxDepth?: number): string;
4
+ export declare function analyzeRepo(repoPath: string): Promise<RepoContext>;
@@ -0,0 +1,84 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ const STACK_MARKERS = [
4
+ { file: "tsconfig.json", stack: ["typescript"] },
5
+ { file: "package.json", stack: ["node"] },
6
+ { file: "uv.lock", stack: ["python", "uv"] },
7
+ { file: "pyproject.toml", stack: ["python"] },
8
+ { file: "requirements.txt", stack: ["python"] },
9
+ { file: "Pipfile", stack: ["python"] },
10
+ { file: "go.mod", stack: ["go"] },
11
+ { file: "Cargo.toml", stack: ["rust"] },
12
+ { file: "pom.xml", stack: ["java"] },
13
+ { file: "build.gradle", stack: ["java"] },
14
+ { file: "build.gradle.kts", stack: ["kotlin"] },
15
+ ];
16
+ export function detectStack(repoPath) {
17
+ const detected = new Set();
18
+ const entries = fs.readdirSync(repoPath);
19
+ for (const marker of STACK_MARKERS) {
20
+ if (entries.includes(marker.file)) {
21
+ for (const s of marker.stack)
22
+ detected.add(s);
23
+ }
24
+ }
25
+ if (entries.some((e) => e.endsWith(".csproj") || e.endsWith(".sln"))) {
26
+ detected.add("dotnet");
27
+ }
28
+ return [...detected];
29
+ }
30
+ export function getDirectoryTree(repoPath, maxDepth = 3) {
31
+ const lines = [];
32
+ buildTree(repoPath, "", 0, maxDepth, lines);
33
+ return lines.join("\n");
34
+ }
35
+ function buildTree(dir, prefix, depth, maxDepth, lines) {
36
+ if (depth >= maxDepth)
37
+ return;
38
+ const entries = fs.readdirSync(dir, { withFileTypes: true })
39
+ .filter((e) => !e.name.startsWith(".") && e.name !== "node_modules" && e.name !== "dist")
40
+ .sort((a, b) => {
41
+ if (a.isDirectory() && !b.isDirectory())
42
+ return -1;
43
+ if (!a.isDirectory() && b.isDirectory())
44
+ return 1;
45
+ return a.name.localeCompare(b.name);
46
+ });
47
+ for (let i = 0; i < entries.length; i++) {
48
+ const entry = entries[i];
49
+ const isLast = i === entries.length - 1;
50
+ const connector = isLast ? "└── " : "├── ";
51
+ const childPrefix = isLast ? " " : "│ ";
52
+ lines.push(`${prefix}${connector}${entry.name}${entry.isDirectory() ? "/" : ""}`);
53
+ if (entry.isDirectory()) {
54
+ buildTree(path.join(dir, entry.name), prefix + childPrefix, depth + 1, maxDepth, lines);
55
+ }
56
+ }
57
+ }
58
+ function readFileIfExists(filePath) {
59
+ try {
60
+ return fs.readFileSync(filePath, "utf-8");
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ export async function analyzeRepo(repoPath) {
67
+ const name = path.basename(repoPath);
68
+ const stack = detectStack(repoPath);
69
+ const structure = getDirectoryTree(repoPath);
70
+ const conventions = readFileIfExists(path.join(repoPath, "CLAUDE.md"))
71
+ ?? readFileIfExists(path.join(repoPath, "CONVENTIONS.md"));
72
+ let recentCommits = [];
73
+ try {
74
+ const { simpleGit } = await import("simple-git");
75
+ const git = simpleGit(repoPath);
76
+ const log = await git.log({ maxCount: 10 });
77
+ recentCommits = log.all.map((c) => `${c.hash.slice(0, 7)} ${c.message}`);
78
+ }
79
+ catch {
80
+ // Not a git repo or git not available
81
+ }
82
+ return { name, path: repoPath, stack, structure, conventions, recentCommits };
83
+ }
84
+ //# sourceMappingURL=repoAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoAnalyzer.js","sourceRoot":"","sources":["../../src/context/repoAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface WorkspaceConfig {
2
+ name: string;
3
+ repositories: RepositoryRef[];
4
+ techStack: string[];
5
+ conventions: string | null;
6
+ pipelineSettings: PipelineSettings;
7
+ knowledgeSources: KnowledgeSource[];
8
+ }
9
+ export interface RepositoryRef {
10
+ name: string;
11
+ path: string;
12
+ description: string;
13
+ }
14
+ export interface PipelineSettings {
15
+ checkpoints: "all" | "none" | string[];
16
+ maxReviewIterations: number;
17
+ skipStages: string[];
18
+ }
19
+ export interface KnowledgeSource {
20
+ type: "file" | "mcp";
21
+ path?: string;
22
+ description?: string;
23
+ }
24
+ export interface RepoContext {
25
+ name: string;
26
+ path: string;
27
+ stack: string[];
28
+ structure: string;
29
+ conventions: string | null;
30
+ recentCommits: string[];
31
+ }
32
+ export interface FullContext {
33
+ workspace: WorkspaceConfig;
34
+ repos: RepoContext[];
35
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { CheckpointDecision, Stage } from "./types.js";
2
+ import type { ArtifactStore } from "../artifacts/store.js";
3
+ export declare function parseCheckpointInput(input: string): CheckpointDecision | null;
4
+ export declare function promptCheckpoint(stage: Stage, artifactPreview: string, store: ArtifactStore, runId: string): Promise<CheckpointDecision>;
@@ -0,0 +1,62 @@
1
+ import readline from "readline";
2
+ import chalk from "chalk";
3
+ export function parseCheckpointInput(input) {
4
+ const normalized = input.trim().toLowerCase();
5
+ const map = {
6
+ a: "approve",
7
+ approve: "approve",
8
+ r: "reject",
9
+ reject: "reject",
10
+ s: "skip",
11
+ skip: "skip",
12
+ v: "view",
13
+ view: "view",
14
+ };
15
+ return map[normalized] ?? null;
16
+ }
17
+ export async function promptCheckpoint(stage, artifactPreview, store, runId) {
18
+ console.log("");
19
+ console.log(chalk.yellow(`── Checkpoint: ${stage} ──`));
20
+ console.log("");
21
+ console.log(artifactPreview.slice(0, 2000));
22
+ if (artifactPreview.length > 2000) {
23
+ console.log(chalk.gray(`... (${artifactPreview.length - 2000} more characters)`));
24
+ }
25
+ console.log("");
26
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
27
+ const askOnce = () => new Promise((resolve) => {
28
+ rl.question(chalk.cyan("[a]pprove [r]eject [s]kip [v]iew previous > "), (answer) => {
29
+ const decision = parseCheckpointInput(answer);
30
+ if (!decision) {
31
+ console.log(chalk.red("Invalid input. Try again."));
32
+ resolve(askOnce());
33
+ return;
34
+ }
35
+ if (decision === "view") {
36
+ const meta = store.readMeta(runId);
37
+ const completedStages = Object.keys(meta.stages);
38
+ if (completedStages.length === 0) {
39
+ console.log(chalk.gray("No previous stages to view."));
40
+ }
41
+ else {
42
+ for (const s of completedStages) {
43
+ const content = store.readArtifact(runId, s);
44
+ if (content) {
45
+ console.log(chalk.blue(`\n── ${s} ──`));
46
+ console.log(content.slice(0, 1000));
47
+ if (content.length > 1000) {
48
+ console.log(chalk.gray(`... (truncated)`));
49
+ }
50
+ }
51
+ }
52
+ }
53
+ resolve(askOnce());
54
+ return;
55
+ }
56
+ rl.close();
57
+ resolve(decision);
58
+ });
59
+ });
60
+ return askOnce();
61
+ }
62
+ //# sourceMappingURL=checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/pipeline/checkpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type Stage, type PipelineConfig } from "./types.js";
2
+ export interface PlannedStage {
3
+ stage: Stage;
4
+ agentName: string;
5
+ hasCheckpoint: boolean;
6
+ }
7
+ export declare function buildPipelineStages(config: PipelineConfig, includeOptional?: Stage[]): PlannedStage[];
@@ -0,0 +1,33 @@
1
+ import { STAGE_ORDER, isOptionalStage } from "./types.js";
2
+ const STAGE_AGENT_MAP = {
3
+ analysis: "product-manager",
4
+ design: "ux-designer",
5
+ architecture: "architect",
6
+ implementation: "software-engineer",
7
+ testing: "qa-engineer",
8
+ documentation: "technical-writer",
9
+ review: "code-reviewer",
10
+ };
11
+ export function buildPipelineStages(config, includeOptional = []) {
12
+ const includeSet = new Set(includeOptional);
13
+ const stages = STAGE_ORDER.filter((stage) => {
14
+ if (config.skipStages.includes(stage))
15
+ return false;
16
+ if (isOptionalStage(stage) && !includeSet.has(stage))
17
+ return false;
18
+ return true;
19
+ });
20
+ return stages.map((stage) => ({
21
+ stage,
22
+ agentName: STAGE_AGENT_MAP[stage],
23
+ hasCheckpoint: resolveCheckpoint(config, stage),
24
+ }));
25
+ }
26
+ function resolveCheckpoint(config, stage) {
27
+ if (config.checkpoints === "all")
28
+ return true;
29
+ if (config.checkpoints === "none")
30
+ return false;
31
+ return config.checkpoints.includes(stage);
32
+ }
33
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAQ3F,MAAM,eAAe,GAA0B;IAC7C,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,aAAa;IACrB,YAAY,EAAE,WAAW;IACzB,cAAc,EAAE,mBAAmB;IACnC,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,kBAAkB;IACjC,MAAM,EAAE,eAAe;CACxB,CAAC;AAEF,MAAM,UAAU,mBAAmB,CACjC,MAAsB,EACtB,kBAA2B,EAAE;IAE7B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,KAAK;QACL,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC;QACjC,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC;KAChD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAsB,EAAE,KAAY;IAC7D,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Stage, PipelineConfig } from "./types.js";
2
+ import { ArtifactStore } from "../artifacts/store.js";
3
+ export declare class PipelineRunner {
4
+ private readonly store;
5
+ private readonly runId;
6
+ private readonly workspaceContext;
7
+ private readonly maxReviewIterations;
8
+ constructor(store: ArtifactStore, runId: string, workspaceContext: string, maxReviewIterations: number);
9
+ assembleAgentContext(currentStage: Stage): string;
10
+ buildTaskDescription(currentStage: Stage, originalTask: string): string;
11
+ isReviewStage(stage: string): boolean;
12
+ runPipeline(task: string, config: PipelineConfig, includeOptional?: Stage[]): Promise<void>;
13
+ private runStage;
14
+ private runReviewStage;
15
+ }
@@ -0,0 +1,127 @@
1
+ // src/pipeline/runner.ts
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { STAGE_ORDER } from "./types.js";
5
+ import { buildPipelineStages } from "./pipeline.js";
6
+ import { promptCheckpoint } from "./checkpoint.js";
7
+ import { createAgentByName } from "../agents/registry.js";
8
+ import { ReviewProcess } from "../review/process.js";
9
+ const ARTIFACT_STAGES = ["intake", ...STAGE_ORDER];
10
+ export class PipelineRunner {
11
+ store;
12
+ runId;
13
+ workspaceContext;
14
+ maxReviewIterations;
15
+ constructor(store, runId, workspaceContext, maxReviewIterations) {
16
+ this.store = store;
17
+ this.runId = runId;
18
+ this.workspaceContext = workspaceContext;
19
+ this.maxReviewIterations = maxReviewIterations;
20
+ }
21
+ assembleAgentContext(currentStage) {
22
+ const sections = [this.workspaceContext];
23
+ for (const stage of ARTIFACT_STAGES) {
24
+ if (stage === currentStage)
25
+ break;
26
+ const artifact = this.store.readArtifact(this.runId, stage);
27
+ if (artifact) {
28
+ sections.push(`\n---\n\n## Previous Stage: ${stage}\n\n${artifact}`);
29
+ }
30
+ }
31
+ return sections.join("\n");
32
+ }
33
+ buildTaskDescription(currentStage, originalTask) {
34
+ const meta = this.store.readMeta(this.runId);
35
+ const completedStages = Object.keys(meta.stages);
36
+ let desc = `Original task: ${originalTask}\n\n`;
37
+ desc += `Current stage: ${currentStage}\n\n`;
38
+ if (completedStages.length > 0) {
39
+ desc += `Completed stages: ${completedStages.join(", ")}\n\n`;
40
+ desc += `Review the outputs from previous stages (provided in your context) and produce your deliverable for the "${currentStage}" stage.`;
41
+ }
42
+ else {
43
+ desc += `This is the first stage. Analyze the task and produce your deliverable.`;
44
+ }
45
+ return desc;
46
+ }
47
+ isReviewStage(stage) {
48
+ return stage === "review";
49
+ }
50
+ async runPipeline(task, config, includeOptional = []) {
51
+ const stages = buildPipelineStages(config, includeOptional);
52
+ console.log(chalk.blue(`Pipeline: ${stages.map((s) => s.stage).join(" → ")}`));
53
+ console.log("");
54
+ for (const planned of stages) {
55
+ let result;
56
+ if (this.isReviewStage(planned.stage)) {
57
+ result = await this.runReviewStage(planned, task);
58
+ }
59
+ else {
60
+ result = await this.runStage(planned, task);
61
+ }
62
+ if (!result) {
63
+ console.log(chalk.yellow(`Stage "${planned.stage}" was skipped.`));
64
+ continue;
65
+ }
66
+ if (planned.hasCheckpoint) {
67
+ const decision = await promptCheckpoint(planned.stage, result.artifact, this.store, this.runId);
68
+ if (decision === "reject") {
69
+ console.log(chalk.red(`Stage "${planned.stage}" rejected. Aborting pipeline.`));
70
+ this.store.updateStatus(this.runId, "aborted");
71
+ return;
72
+ }
73
+ if (decision === "skip") {
74
+ console.log(chalk.yellow(`Skipping to next stage.`));
75
+ }
76
+ }
77
+ }
78
+ this.store.updateStatus(this.runId, "completed");
79
+ console.log(chalk.green(`\nPipeline completed for run ${this.runId}.`));
80
+ }
81
+ async runStage(planned, task) {
82
+ const spinner = ora(`${planned.agentName} working on ${planned.stage}...`).start();
83
+ const startTime = Date.now();
84
+ try {
85
+ const agent = createAgentByName(planned.agentName);
86
+ const context = this.assembleAgentContext(planned.stage);
87
+ const taskDesc = this.buildTaskDescription(planned.stage, task);
88
+ const result = await agent.run(context, taskDesc);
89
+ this.store.saveArtifact(this.runId, planned.stage, result.artifact);
90
+ const durationMs = Date.now() - startTime;
91
+ spinner.succeed(`${planned.stage} complete (${(durationMs / 1000).toFixed(1)}s)`);
92
+ return {
93
+ stage: planned.stage,
94
+ artifact: result.artifact,
95
+ agentName: planned.agentName,
96
+ durationMs,
97
+ };
98
+ }
99
+ catch (error) {
100
+ spinner.fail(`${planned.stage} failed`);
101
+ this.store.updateStatus(this.runId, "failed");
102
+ throw error;
103
+ }
104
+ }
105
+ async runReviewStage(planned, task) {
106
+ const startTime = Date.now();
107
+ try {
108
+ const reviewProcess = new ReviewProcess(this.store, this.runId, this.workspaceContext, this.maxReviewIterations);
109
+ const verdict = await reviewProcess.run(task);
110
+ const durationMs = Date.now() - startTime;
111
+ console.log(chalk.green(`Review complete: ${verdict} (${(durationMs / 1000).toFixed(1)}s)`));
112
+ const artifact = this.store.readArtifact(this.runId, "review") ?? "";
113
+ return {
114
+ stage: planned.stage,
115
+ artifact,
116
+ agentName: "review-process",
117
+ durationMs,
118
+ };
119
+ }
120
+ catch (error) {
121
+ console.log(chalk.red("Review stage failed"));
122
+ this.store.updateStatus(this.runId, "failed");
123
+ throw error;
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type Stage = "analysis" | "design" | "architecture" | "implementation" | "testing" | "documentation" | "review";
2
+ export declare const STAGE_ORDER: Stage[];
3
+ export declare function isOptionalStage(stage: Stage): boolean;
4
+ export type CheckpointDecision = "approve" | "reject" | "skip" | "view";
5
+ export interface StageResult {
6
+ stage: Stage;
7
+ artifact: string;
8
+ agentName: string;
9
+ durationMs: number;
10
+ }
11
+ export interface PipelineConfig {
12
+ checkpoints: "all" | "none" | Stage[];
13
+ skipStages: Stage[];
14
+ }
@@ -0,0 +1,14 @@
1
+ export const STAGE_ORDER = [
2
+ "analysis",
3
+ "design",
4
+ "architecture",
5
+ "implementation",
6
+ "testing",
7
+ "documentation",
8
+ "review",
9
+ ];
10
+ const OPTIONAL_STAGES = new Set(["design", "documentation"]);
11
+ export function isOptionalStage(stage) {
12
+ return OPTIONAL_STAGES.has(stage);
13
+ }
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,UAAU;IACV,QAAQ;IACR,cAAc;IACd,gBAAgB;IAChB,SAAS;IACT,eAAe;IACf,QAAQ;CACT,CAAC;AAEF,MAAM,eAAe,GAAe,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;AAEzE,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { ArtifactStore } from "../artifacts/store.js";
2
+ import { type ReviewVerdict } from "./types.js";
3
+ export declare class ReviewProcess {
4
+ private readonly store;
5
+ private readonly runId;
6
+ private readonly workspaceContext;
7
+ private readonly maxIterations;
8
+ constructor(store: ArtifactStore, runId: string, workspaceContext: string, maxIterations: number);
9
+ buildReviewContext(): string;
10
+ buildReviewTaskDescription(originalTask: string): string;
11
+ buildArbiterTaskDescription(logicFindings: string, securityFindings: string, originalTask: string): string;
12
+ buildReworkTaskDescription(arbiterOutput: string, originalTask: string, reworkIteration: number): string;
13
+ private buildContextForIteration;
14
+ run(originalTask: string): Promise<ReviewVerdict>;
15
+ }