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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import crypto from "crypto";
|
|
4
|
+
const STAGE_FILES = {
|
|
5
|
+
intake: "01-intake.md",
|
|
6
|
+
analysis: "02-analysis.md",
|
|
7
|
+
design: "03-design.md",
|
|
8
|
+
architecture: "04-architecture.md",
|
|
9
|
+
implementation: "05-implementation.md",
|
|
10
|
+
testing: "06-testing.md",
|
|
11
|
+
documentation: "07-documentation.md",
|
|
12
|
+
review: "08-review.md",
|
|
13
|
+
};
|
|
14
|
+
export class ArtifactStore {
|
|
15
|
+
baseDir;
|
|
16
|
+
constructor(baseDir) {
|
|
17
|
+
this.baseDir = baseDir;
|
|
18
|
+
fs.mkdirSync(baseDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
createRun(task) {
|
|
21
|
+
const runId = `run_${crypto.randomBytes(6).toString("hex")}`;
|
|
22
|
+
const runDir = path.join(this.baseDir, runId);
|
|
23
|
+
fs.mkdirSync(runDir, { recursive: true });
|
|
24
|
+
const meta = {
|
|
25
|
+
runId,
|
|
26
|
+
task,
|
|
27
|
+
status: "running",
|
|
28
|
+
createdAt: new Date().toISOString(),
|
|
29
|
+
stages: {},
|
|
30
|
+
};
|
|
31
|
+
fs.writeFileSync(path.join(runDir, "meta.json"), JSON.stringify(meta, null, 2));
|
|
32
|
+
return runId;
|
|
33
|
+
}
|
|
34
|
+
saveArtifact(runId, stage, content) {
|
|
35
|
+
const fileName = STAGE_FILES[stage] ?? `${stage}.md`;
|
|
36
|
+
const filePath = path.join(this.baseDir, runId, fileName);
|
|
37
|
+
fs.writeFileSync(filePath, content);
|
|
38
|
+
const meta = this.readMeta(runId);
|
|
39
|
+
meta.stages[stage] = { completedAt: new Date().toISOString() };
|
|
40
|
+
this.writeMeta(runId, meta);
|
|
41
|
+
}
|
|
42
|
+
readArtifact(runId, stage) {
|
|
43
|
+
const fileName = STAGE_FILES[stage] ?? `${stage}.md`;
|
|
44
|
+
const filePath = path.join(this.baseDir, runId, fileName);
|
|
45
|
+
try {
|
|
46
|
+
return fs.readFileSync(filePath, "utf-8");
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
readMeta(runId) {
|
|
53
|
+
const filePath = path.join(this.baseDir, runId, "meta.json");
|
|
54
|
+
return JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
55
|
+
}
|
|
56
|
+
updateStatus(runId, status) {
|
|
57
|
+
const meta = this.readMeta(runId);
|
|
58
|
+
meta.status = status;
|
|
59
|
+
this.writeMeta(runId, meta);
|
|
60
|
+
}
|
|
61
|
+
listRuns() {
|
|
62
|
+
const entries = fs.readdirSync(this.baseDir, { withFileTypes: true });
|
|
63
|
+
const runs = [];
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
if (!entry.isDirectory() || !entry.name.startsWith("run_"))
|
|
66
|
+
continue;
|
|
67
|
+
try {
|
|
68
|
+
runs.push(this.readMeta(entry.name));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// skip corrupt runs
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return runs.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
75
|
+
}
|
|
76
|
+
writeMeta(runId, meta) {
|
|
77
|
+
const filePath = path.join(this.baseDir, runId, "meta.json");
|
|
78
|
+
fs.writeFileSync(filePath, JSON.stringify(meta, null, 2));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/artifacts/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { findGitRepos, generateAgentriumMd, saveWorkspace } from "../../workspace/manager.js";
|
|
4
|
+
export function registerInitCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command("init")
|
|
7
|
+
.description("Initialize Agentrium workspace")
|
|
8
|
+
.option("-n, --name <name>", "Workspace name")
|
|
9
|
+
.option("-d, --dir <directory>", "Directory to scan for repos", ".")
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
const scanDir = path.resolve(options.dir);
|
|
12
|
+
console.log(chalk.blue(`Scanning ${scanDir} for git repositories...`));
|
|
13
|
+
const repoPaths = findGitRepos(scanDir);
|
|
14
|
+
if (repoPaths.length === 0) {
|
|
15
|
+
const { existsSync } = await import("fs");
|
|
16
|
+
if (existsSync(path.join(scanDir, ".git"))) {
|
|
17
|
+
repoPaths.push(scanDir);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.log(chalk.yellow("No git repositories found."));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
console.log(chalk.green(`Found ${repoPaths.length} repository(s):`));
|
|
25
|
+
for (const repo of repoPaths) {
|
|
26
|
+
console.log(` ${chalk.white(path.basename(repo))} — ${repo}`);
|
|
27
|
+
}
|
|
28
|
+
const workspaceName = options.name ?? path.basename(scanDir);
|
|
29
|
+
const repos = repoPaths.map((p) => ({
|
|
30
|
+
name: path.basename(p),
|
|
31
|
+
path: p,
|
|
32
|
+
description: "",
|
|
33
|
+
}));
|
|
34
|
+
const content = generateAgentriumMd(workspaceName, repos);
|
|
35
|
+
const savedPath = saveWorkspace(workspaceName, content);
|
|
36
|
+
console.log("");
|
|
37
|
+
console.log(chalk.green("Workspace created!"));
|
|
38
|
+
console.log(` Config: ${chalk.white(savedPath)}`);
|
|
39
|
+
console.log("");
|
|
40
|
+
console.log(`Edit ${chalk.white("AGENTRIUM.md")} to customize tech stack, conventions, and pipeline settings.`);
|
|
41
|
+
console.log(`Then run: ${chalk.cyan("agentrium run \"your task description\"")}`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE9F,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC7C,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,OAAuC,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,0BAA0B,CAAC,CAAC,CAAC;QAEvE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC;QACrE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,CAAC;YACP,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAExD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,+DAA+D,CAAC,CAAC;QAChH,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import { loadWorkspaceConfig, getWorkspacesDir } from "../../workspace/manager.js";
|
|
5
|
+
import { parseAgentriumMd } from "../../context/configParser.js";
|
|
6
|
+
import { analyzeRepo } from "../../context/repoAnalyzer.js";
|
|
7
|
+
import { buildContextPrompt } from "../../context/contextBuilder.js";
|
|
8
|
+
import { ArtifactStore } from "../../artifacts/store.js";
|
|
9
|
+
import { PipelineRunner } from "../../pipeline/runner.js";
|
|
10
|
+
import { detectWorkspace } from "../utils.js";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
export function registerRunCommand(program) {
|
|
13
|
+
program
|
|
14
|
+
.command("run")
|
|
15
|
+
.description("Run a task through the agent pipeline")
|
|
16
|
+
.argument("<task>", "Task description")
|
|
17
|
+
.option("-w, --workspace <name>", "Workspace name")
|
|
18
|
+
.option("--no-checkpoints", "Skip all checkpoints")
|
|
19
|
+
.option("--include <stages...>", "Include optional stages (design, documentation)")
|
|
20
|
+
.action(async (task, options) => {
|
|
21
|
+
// 1. Find workspace
|
|
22
|
+
const workspaceName = options.workspace ?? detectWorkspace();
|
|
23
|
+
if (!workspaceName) {
|
|
24
|
+
console.log(chalk.red("No workspace found. Run `agentrium init` first."));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
const configContent = loadWorkspaceConfig(workspaceName);
|
|
28
|
+
if (!configContent) {
|
|
29
|
+
console.log(chalk.red(`Workspace "${workspaceName}" not found.`));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
// 2. Parse config and analyze repos
|
|
33
|
+
const workspaceConfig = parseAgentriumMd(configContent);
|
|
34
|
+
const spinner = ora("Analyzing repositories...").start();
|
|
35
|
+
const repos = [];
|
|
36
|
+
for (const repoRef of workspaceConfig.repositories) {
|
|
37
|
+
const expandedPath = repoRef.path.replace(/^~/, process.env.HOME ?? "~");
|
|
38
|
+
if (fs.existsSync(expandedPath)) {
|
|
39
|
+
repos.push(await analyzeRepo(expandedPath));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
spinner.succeed("Repositories analyzed");
|
|
43
|
+
const fullContext = { workspace: workspaceConfig, repos };
|
|
44
|
+
const contextPrompt = buildContextPrompt(fullContext);
|
|
45
|
+
// 3. Create run and save intake
|
|
46
|
+
const store = new ArtifactStore(path.join(getWorkspacesDir(), workspaceName, "runs"));
|
|
47
|
+
const runId = store.createRun(task);
|
|
48
|
+
store.saveArtifact(runId, "intake", `# Task\n\n${task}\n\n# Context\n\n${contextPrompt}`);
|
|
49
|
+
console.log(chalk.blue(`Run: ${runId}`));
|
|
50
|
+
// 4. Build pipeline config
|
|
51
|
+
const pipelineConfig = {
|
|
52
|
+
checkpoints: options.checkpoints
|
|
53
|
+
? workspaceConfig.pipelineSettings.checkpoints
|
|
54
|
+
: "none",
|
|
55
|
+
skipStages: workspaceConfig.pipelineSettings.skipStages,
|
|
56
|
+
};
|
|
57
|
+
const includeOptional = (options.include ?? []);
|
|
58
|
+
// 5. Run pipeline
|
|
59
|
+
const rawIterations = workspaceConfig.pipelineSettings.maxReviewIterations;
|
|
60
|
+
const maxReviewIterations = Number.isFinite(rawIterations) && rawIterations >= 1
|
|
61
|
+
? Math.floor(rawIterations)
|
|
62
|
+
: 3;
|
|
63
|
+
const runner = new PipelineRunner(store, runId, contextPrompt, maxReviewIterations);
|
|
64
|
+
await runner.runPipeline(task, pipelineConfig, includeOptional);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { getWorkspacesDir } from "../../workspace/manager.js";
|
|
4
|
+
import { ArtifactStore } from "../../artifacts/store.js";
|
|
5
|
+
import { detectWorkspace } from "../utils.js";
|
|
6
|
+
export function registerRunsCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command("runs")
|
|
9
|
+
.description("List all runs for a workspace")
|
|
10
|
+
.option("-w, --workspace <name>", "Workspace name")
|
|
11
|
+
.action((options) => {
|
|
12
|
+
const workspaceName = options.workspace ?? detectWorkspace();
|
|
13
|
+
if (!workspaceName) {
|
|
14
|
+
console.log(chalk.red("No workspace found. Use --workspace to specify."));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const store = new ArtifactStore(path.join(getWorkspacesDir(), workspaceName, "runs"));
|
|
18
|
+
const runs = store.listRuns();
|
|
19
|
+
if (runs.length === 0) {
|
|
20
|
+
console.log(chalk.yellow("No runs found."));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
console.log(chalk.bold(`Workspace: ${workspaceName}\n`));
|
|
24
|
+
for (const run of runs) {
|
|
25
|
+
const stageCount = Object.keys(run.stages).length;
|
|
26
|
+
const statusColor = run.status === "completed" ? chalk.green :
|
|
27
|
+
run.status === "failed" ? chalk.red :
|
|
28
|
+
run.status === "aborted" ? chalk.yellow : chalk.blue;
|
|
29
|
+
const date = new Date(run.createdAt).toLocaleString();
|
|
30
|
+
const taskPreview = run.task.length > 48 ? run.task.slice(0, 48) + "…" : run.task;
|
|
31
|
+
console.log(`${chalk.bold(run.runId)} ${taskPreview.padEnd(50)} ` +
|
|
32
|
+
`${statusColor(run.status.padEnd(10))} ${chalk.gray(date)} ` +
|
|
33
|
+
`${chalk.gray(`${stageCount} stages`)}`);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/cli/commands/runs.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;SAClD,MAAM,CAAC,CAAC,OAA+B,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,aAAa,IAAI,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;YAClD,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1C,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACrC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAClF,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI;gBACvD,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC9D,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,CAAC,EAAE,CACxC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import { getWorkspacesDir, listWorkspaces } from "../../workspace/manager.js";
|
|
5
|
+
import { ArtifactStore } from "../../artifacts/store.js";
|
|
6
|
+
export function printRunDetails(meta) {
|
|
7
|
+
const statusColor = meta.status === "completed" ? chalk.green :
|
|
8
|
+
meta.status === "failed" ? chalk.red :
|
|
9
|
+
meta.status === "aborted" ? chalk.yellow : chalk.blue;
|
|
10
|
+
console.log(`${chalk.gray("Run:")} ${chalk.bold(meta.runId)}`);
|
|
11
|
+
console.log(`${chalk.gray("Task:")} ${meta.task}`);
|
|
12
|
+
console.log(`${chalk.gray("Status:")} ${statusColor(meta.status)}`);
|
|
13
|
+
console.log(`${chalk.gray("Created:")} ${new Date(meta.createdAt).toLocaleString()}`);
|
|
14
|
+
console.log();
|
|
15
|
+
console.log(chalk.bold("Stages:"));
|
|
16
|
+
for (const [stage, info] of Object.entries(meta.stages)) {
|
|
17
|
+
const time = new Date(info.completedAt).toLocaleTimeString();
|
|
18
|
+
console.log(` ${chalk.green("✓")} ${stage.padEnd(16)} ${chalk.gray(time)}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function findWorkspaceForRun(runId) {
|
|
22
|
+
for (const ws of listWorkspaces()) {
|
|
23
|
+
const runsDir = path.join(getWorkspacesDir(), ws, "runs");
|
|
24
|
+
const metaPath = path.join(runsDir, runId, "meta.json");
|
|
25
|
+
if (fs.existsSync(metaPath))
|
|
26
|
+
return ws;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
export function registerShowCommand(program) {
|
|
31
|
+
program
|
|
32
|
+
.command("show <run-id>")
|
|
33
|
+
.description("Show run details or a specific stage artifact")
|
|
34
|
+
.option("-w, --workspace <name>", "Workspace name")
|
|
35
|
+
.option("-s, --stage <stage>", "Show artifact for a specific stage (e.g. analysis, review)")
|
|
36
|
+
.action((runId, options) => {
|
|
37
|
+
const workspaceName = options.workspace ?? findWorkspaceForRun(runId);
|
|
38
|
+
if (!workspaceName) {
|
|
39
|
+
console.log(chalk.red(`Run "${runId}" not found.`));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
const store = new ArtifactStore(path.join(getWorkspacesDir(), workspaceName, "runs"));
|
|
43
|
+
if (options.stage) {
|
|
44
|
+
const artifact = store.readArtifact(runId, options.stage);
|
|
45
|
+
if (artifact === null) {
|
|
46
|
+
console.log(chalk.red(`Stage "${options.stage}" not found in run "${runId}".`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
console.log(artifact);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const meta = store.readMeta(runId);
|
|
53
|
+
printRunDetails(meta);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/cli/commands/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { getWorkspacesDir } from "../../workspace/manager.js";
|
|
4
|
+
import { ArtifactStore } from "../../artifacts/store.js";
|
|
5
|
+
import { detectWorkspace } from "../utils.js";
|
|
6
|
+
import { printRunDetails } from "./show.js";
|
|
7
|
+
export function registerStatusCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command("status")
|
|
10
|
+
.description("Show the latest run for the current workspace")
|
|
11
|
+
.option("-w, --workspace <name>", "Workspace name")
|
|
12
|
+
.action((options) => {
|
|
13
|
+
const workspaceName = options.workspace ?? detectWorkspace();
|
|
14
|
+
if (!workspaceName) {
|
|
15
|
+
console.log(chalk.red("No workspace found. Use --workspace to specify."));
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const store = new ArtifactStore(path.join(getWorkspacesDir(), workspaceName, "runs"));
|
|
19
|
+
const runs = store.listRuns();
|
|
20
|
+
if (runs.length === 0) {
|
|
21
|
+
console.log(chalk.yellow("No runs found."));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
console.log(chalk.bold(`Workspace: ${workspaceName}\n`));
|
|
25
|
+
printRunDetails(runs[0]);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;SAClD,MAAM,CAAC,CAAC,OAA+B,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,aAAa,IAAI,CAAC,CAAC,CAAC;QACzD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { listWorkspaces, loadWorkspaceConfig } from "../../workspace/manager.js";
|
|
3
|
+
import { parseAgentriumMd } from "../../context/configParser.js";
|
|
4
|
+
export function registerWorkspacesCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command("workspaces")
|
|
7
|
+
.description("List all configured workspaces")
|
|
8
|
+
.action(() => {
|
|
9
|
+
const workspaces = listWorkspaces();
|
|
10
|
+
if (workspaces.length === 0) {
|
|
11
|
+
console.log(chalk.yellow("No workspaces found. Run `agentrium init` first."));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
for (const name of workspaces) {
|
|
15
|
+
const content = loadWorkspaceConfig(name);
|
|
16
|
+
if (!content)
|
|
17
|
+
continue;
|
|
18
|
+
const config = parseAgentriumMd(content);
|
|
19
|
+
const repoCount = config.repositories.length;
|
|
20
|
+
console.log(`${chalk.bold(name)} ${chalk.gray(`(${repoCount} repo${repoCount !== 1 ? "s" : ""})`)}`);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;QACpC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YAC7C,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { registerInitCommand } from "./commands/init.js";
|
|
4
|
+
import { registerRunCommand } from "./commands/run.js";
|
|
5
|
+
import { registerWorkspacesCommand } from "./commands/workspaces.js";
|
|
6
|
+
import { registerRunsCommand } from "./commands/runs.js";
|
|
7
|
+
import { registerShowCommand } from "./commands/show.js";
|
|
8
|
+
import { registerStatusCommand } from "./commands/status.js";
|
|
9
|
+
export function createProgram() {
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name("agentrium")
|
|
13
|
+
.description("Multi-agent orchestrator for software development")
|
|
14
|
+
.version("0.3.0");
|
|
15
|
+
registerInitCommand(program);
|
|
16
|
+
registerRunCommand(program);
|
|
17
|
+
registerWorkspacesCommand(program);
|
|
18
|
+
registerRunsCommand(program);
|
|
19
|
+
registerShowCommand(program);
|
|
20
|
+
registerStatusCommand(program);
|
|
21
|
+
return program;
|
|
22
|
+
}
|
|
23
|
+
// Only parse when this file is the direct entrypoint, not when imported as a module.
|
|
24
|
+
const isMain = process.argv[1] != null &&
|
|
25
|
+
import.meta.url.endsWith(process.argv[1].replace(/\\/g, "/"));
|
|
26
|
+
if (isMain) {
|
|
27
|
+
const program = createProgram();
|
|
28
|
+
program.parse();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,mDAAmD,CAAC;SAChE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qFAAqF;AACrF,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;IACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhE,IAAI,MAAM,EAAE,CAAC;IACX,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function detectWorkspace(): string | null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/cli/utils.ts
|
|
2
|
+
import path from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { loadWorkspaceConfig, listWorkspaces } from "../workspace/manager.js";
|
|
5
|
+
import { parseAgentriumMd } from "../context/configParser.js";
|
|
6
|
+
export function detectWorkspace() {
|
|
7
|
+
const workspaces = listWorkspaces();
|
|
8
|
+
if (workspaces.length === 1)
|
|
9
|
+
return workspaces[0];
|
|
10
|
+
if (workspaces.length === 0)
|
|
11
|
+
return null;
|
|
12
|
+
const cwd = process.cwd();
|
|
13
|
+
for (const ws of workspaces) {
|
|
14
|
+
const configContent = loadWorkspaceConfig(ws);
|
|
15
|
+
if (!configContent)
|
|
16
|
+
continue;
|
|
17
|
+
const wsConfig = parseAgentriumMd(configContent);
|
|
18
|
+
const match = wsConfig.repositories.some((repo) => {
|
|
19
|
+
const expanded = repo.path.replace(/^~/, process.env.HOME ?? "~");
|
|
20
|
+
return cwd === expanded || cwd.startsWith(expanded + path.sep);
|
|
21
|
+
});
|
|
22
|
+
if (match)
|
|
23
|
+
return ws;
|
|
24
|
+
}
|
|
25
|
+
console.log(chalk.yellow(`Multiple workspaces found: ${workspaces.join(", ")}. Use --workspace to specify.`));
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,UAAU,eAAe;IAC7B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa;YAAE,SAAS;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YAClE,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC9G,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export function parseAgentriumMd(content) {
|
|
2
|
+
const name = parseWorkspaceName(content);
|
|
3
|
+
const repositories = parseRepositories(content);
|
|
4
|
+
const techStack = parseBulletList(content, "Tech Stack");
|
|
5
|
+
const conventions = parseConventions(content);
|
|
6
|
+
const pipelineSettings = parsePipelineSettings(content);
|
|
7
|
+
const knowledgeSources = parseKnowledgeSources(content);
|
|
8
|
+
return { name, repositories, techStack, conventions, pipelineSettings, knowledgeSources };
|
|
9
|
+
}
|
|
10
|
+
function parseWorkspaceName(content) {
|
|
11
|
+
const match = content.match(/^#\s+Workspace:\s+(.+)$/m);
|
|
12
|
+
return match ? match[1].trim() : "unnamed";
|
|
13
|
+
}
|
|
14
|
+
function parseRepositories(content) {
|
|
15
|
+
const section = extractSection(content, "Repositories");
|
|
16
|
+
if (!section)
|
|
17
|
+
return [];
|
|
18
|
+
const repoPattern = /^-\s+\[([^\]]+)\]\(([^)]+)\)\s*—\s*(.+)$/gm;
|
|
19
|
+
const repos = [];
|
|
20
|
+
let match;
|
|
21
|
+
while ((match = repoPattern.exec(section)) !== null) {
|
|
22
|
+
repos.push({ name: match[1], path: match[2], description: match[3].trim() });
|
|
23
|
+
}
|
|
24
|
+
return repos;
|
|
25
|
+
}
|
|
26
|
+
function parseBulletList(content, heading) {
|
|
27
|
+
const section = extractSection(content, heading);
|
|
28
|
+
if (!section)
|
|
29
|
+
return [];
|
|
30
|
+
return section
|
|
31
|
+
.split("\n")
|
|
32
|
+
.filter((line) => line.startsWith("- "))
|
|
33
|
+
.map((line) => line.slice(2).trim());
|
|
34
|
+
}
|
|
35
|
+
function parseConventions(content) {
|
|
36
|
+
const section = extractSection(content, "Conventions");
|
|
37
|
+
return section?.trim() || null;
|
|
38
|
+
}
|
|
39
|
+
function parsePipelineSettings(content) {
|
|
40
|
+
const section = extractSection(content, "Pipeline Settings");
|
|
41
|
+
const defaults = {
|
|
42
|
+
checkpoints: "all",
|
|
43
|
+
maxReviewIterations: 3,
|
|
44
|
+
skipStages: [],
|
|
45
|
+
};
|
|
46
|
+
if (!section)
|
|
47
|
+
return defaults;
|
|
48
|
+
const lines = section.split("\n").filter((l) => l.startsWith("- "));
|
|
49
|
+
for (const line of lines) {
|
|
50
|
+
const text = line.slice(2).trim();
|
|
51
|
+
if (text.toLowerCase().startsWith("checkpoints:")) {
|
|
52
|
+
const value = text.split(":")[1].trim();
|
|
53
|
+
if (value === "all" || value === "none") {
|
|
54
|
+
defaults.checkpoints = value;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
defaults.checkpoints = value.split(",").map((s) => s.trim());
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (text.toLowerCase().startsWith("max review iterations:")) {
|
|
61
|
+
defaults.maxReviewIterations = parseInt(text.split(":")[1].trim(), 10);
|
|
62
|
+
}
|
|
63
|
+
else if (text.toLowerCase().startsWith("skip stages:")) {
|
|
64
|
+
defaults.skipStages = text
|
|
65
|
+
.split(":")[1]
|
|
66
|
+
.trim()
|
|
67
|
+
.split(",")
|
|
68
|
+
.map((s) => s.trim());
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return defaults;
|
|
72
|
+
}
|
|
73
|
+
function parseKnowledgeSources(content) {
|
|
74
|
+
const section = extractSection(content, "Knowledge Sources");
|
|
75
|
+
if (!section)
|
|
76
|
+
return [];
|
|
77
|
+
const sources = [];
|
|
78
|
+
const lines = section.split("\n").filter((l) => l.startsWith("- "));
|
|
79
|
+
for (const line of lines) {
|
|
80
|
+
const text = line.slice(2).trim();
|
|
81
|
+
if (text.toLowerCase().startsWith("mcp:")) {
|
|
82
|
+
sources.push({ type: "mcp", description: text.slice(4).trim() });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const linkMatch = text.match(/^\[([^\]]+)\]\(([^)]+)\)$/);
|
|
86
|
+
if (linkMatch) {
|
|
87
|
+
sources.push({ type: "file", path: linkMatch[2], description: linkMatch[1] });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
sources.push({ type: "file", path: text, description: text });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return sources;
|
|
95
|
+
}
|
|
96
|
+
function extractSection(content, heading) {
|
|
97
|
+
const pattern = new RegExp(`^##\\s+${escapeRegex(heading)}\\s*$`, "m");
|
|
98
|
+
const match = pattern.exec(content);
|
|
99
|
+
if (!match)
|
|
100
|
+
return null;
|
|
101
|
+
const start = match.index + match[0].length;
|
|
102
|
+
const nextHeading = content.indexOf("\n## ", start);
|
|
103
|
+
const end = nextHeading === -1 ? content.length : nextHeading;
|
|
104
|
+
return content.slice(start, end).trim();
|
|
105
|
+
}
|
|
106
|
+
function escapeRegex(str) {
|
|
107
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=configParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configParser.js","sourceRoot":"","sources":["../../src/context/configParser.ts"],"names":[],"mappings":"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"}
|