@hham21/circe 0.4.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 +185 -0
- package/dist/agent.d.ts +73 -0
- package/dist/agent.js +334 -0
- package/dist/agent.js.map +1 -0
- package/dist/cli/agents-cmd.d.ts +2 -0
- package/dist/cli/agents-cmd.js +77 -0
- package/dist/cli/agents-cmd.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +20 -0
- package/dist/cli/output.js +136 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/run.d.ts +10 -0
- package/dist/cli/run.js +90 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/skills-cmd.d.ts +2 -0
- package/dist/cli/skills-cmd.js +95 -0
- package/dist/cli/skills-cmd.js.map +1 -0
- package/dist/cli/workflows-cmd.d.ts +2 -0
- package/dist/cli/workflows-cmd.js +61 -0
- package/dist/cli/workflows-cmd.js.map +1 -0
- package/dist/context.d.ts +8 -0
- package/dist/context.js +23 -0
- package/dist/context.js.map +1 -0
- package/dist/events.d.ts +134 -0
- package/dist/events.js +127 -0
- package/dist/events.js.map +1 -0
- package/dist/handoff.d.ts +153 -0
- package/dist/handoff.js +42 -0
- package/dist/handoff.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestration/contract.d.ts +27 -0
- package/dist/orchestration/contract.js +104 -0
- package/dist/orchestration/contract.js.map +1 -0
- package/dist/orchestration/index.d.ts +10 -0
- package/dist/orchestration/index.js +6 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/loop.d.ts +25 -0
- package/dist/orchestration/loop.js +81 -0
- package/dist/orchestration/loop.js.map +1 -0
- package/dist/orchestration/parallel.d.ts +27 -0
- package/dist/orchestration/parallel.js +78 -0
- package/dist/orchestration/parallel.js.map +1 -0
- package/dist/orchestration/pipeline.d.ts +23 -0
- package/dist/orchestration/pipeline.js +100 -0
- package/dist/orchestration/pipeline.js.map +1 -0
- package/dist/orchestration/sprint.d.ts +21 -0
- package/dist/orchestration/sprint.js +56 -0
- package/dist/orchestration/sprint.js.map +1 -0
- package/dist/presets/frontend.d.ts +8 -0
- package/dist/presets/frontend.js +113 -0
- package/dist/presets/frontend.js.map +1 -0
- package/dist/presets/fullstack.d.ts +9 -0
- package/dist/presets/fullstack.js +118 -0
- package/dist/presets/fullstack.js.map +1 -0
- package/dist/presets/index.d.ts +2 -0
- package/dist/presets/index.js +3 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/session/index.d.ts +1 -0
- package/dist/session/index.js +2 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +17 -0
- package/dist/session/manager.js +50 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/tools/custom.d.ts +5 -0
- package/dist/tools/custom.js +7 -0
- package/dist/tools/custom.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/skills.d.ts +18 -0
- package/dist/tools/skills.js +99 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +24 -0
- package/dist/utils.js +85 -0
- package/dist/utils.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { circeHome } from "../utils.js";
|
|
5
|
+
const AGENT_FILE_EXTENSION = ".json";
|
|
6
|
+
export const agentsCommand = new Command("agents").description("Manage agents");
|
|
7
|
+
agentsCommand
|
|
8
|
+
.command("create <name>")
|
|
9
|
+
.requiredOption("--prompt <prompt>", "Agent system prompt")
|
|
10
|
+
.option("--tools <tools>", "Comma-separated tools")
|
|
11
|
+
.option("--skills <skills>", "Comma-separated skills")
|
|
12
|
+
.action((name, opts) => {
|
|
13
|
+
const agentData = buildAgentData(name, opts);
|
|
14
|
+
saveAgentFile(name, agentData);
|
|
15
|
+
console.log(`Agent '${name}' created.`);
|
|
16
|
+
});
|
|
17
|
+
agentsCommand
|
|
18
|
+
.command("list")
|
|
19
|
+
.action(() => {
|
|
20
|
+
const dir = resolveAgentsDir();
|
|
21
|
+
const agentFiles = readdirSync(dir).filter((file) => file.endsWith(AGENT_FILE_EXTENSION));
|
|
22
|
+
if (agentFiles.length === 0) {
|
|
23
|
+
console.log("No agents found.");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
for (const file of agentFiles) {
|
|
27
|
+
const agent = readAgentFile(join(dir, file));
|
|
28
|
+
console.log(` ${agent.name}`);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
agentsCommand
|
|
32
|
+
.command("info <name>")
|
|
33
|
+
.action((name) => {
|
|
34
|
+
const filePath = resolveAgentFilePath(name);
|
|
35
|
+
if (!existsSync(filePath)) {
|
|
36
|
+
console.error(`Agent '${name}' not found.`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const agent = readAgentFile(filePath);
|
|
40
|
+
console.log(JSON.stringify(agent, null, 2));
|
|
41
|
+
});
|
|
42
|
+
agentsCommand
|
|
43
|
+
.command("delete <name>")
|
|
44
|
+
.action((name) => {
|
|
45
|
+
const filePath = resolveAgentFilePath(name);
|
|
46
|
+
if (!existsSync(filePath)) {
|
|
47
|
+
console.error(`Agent '${name}' not found.`);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
unlinkSync(filePath);
|
|
51
|
+
console.log(`Agent '${name}' deleted.`);
|
|
52
|
+
});
|
|
53
|
+
function resolveAgentsDir() {
|
|
54
|
+
const home = circeHome();
|
|
55
|
+
const dir = join(home, "agents");
|
|
56
|
+
if (!existsSync(dir))
|
|
57
|
+
mkdirSync(dir, { recursive: true });
|
|
58
|
+
return dir;
|
|
59
|
+
}
|
|
60
|
+
function resolveAgentFilePath(name) {
|
|
61
|
+
return join(resolveAgentsDir(), `${name}${AGENT_FILE_EXTENSION}`);
|
|
62
|
+
}
|
|
63
|
+
function buildAgentData(name, opts) {
|
|
64
|
+
return {
|
|
65
|
+
name,
|
|
66
|
+
prompt: opts.prompt,
|
|
67
|
+
tools: opts.tools?.split(",").map((t) => t.trim()) ?? null,
|
|
68
|
+
skills: opts.skills?.split(",").map((s) => s.trim()) ?? [],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function saveAgentFile(name, data) {
|
|
72
|
+
writeFileSync(resolveAgentFilePath(name), JSON.stringify(data, null, 2));
|
|
73
|
+
}
|
|
74
|
+
function readAgentFile(filePath) {
|
|
75
|
+
return JSON.parse(readFileSync(filePath, "utf-8"));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=agents-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-cmd.js","sourceRoot":"","sources":["../../src/cli/agents-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { executeWorkflow } from "./run.js";
|
|
4
|
+
import { skillsCommand } from "./skills-cmd.js";
|
|
5
|
+
const program = new Command();
|
|
6
|
+
program
|
|
7
|
+
.name("circe")
|
|
8
|
+
.description("GAN-style multi-agent framework for application generation")
|
|
9
|
+
.version("0.4.0");
|
|
10
|
+
program
|
|
11
|
+
.command("run <workflow>")
|
|
12
|
+
.description("Run a workflow file")
|
|
13
|
+
.requiredOption("-i, --input <input>", "User input or path to spec file")
|
|
14
|
+
.option("-o, --output <dir>", "Output directory")
|
|
15
|
+
.option("-r, --max-rounds <n>", "Maximum rounds", parseInt)
|
|
16
|
+
.option("-v, --verbose", "Verbose output")
|
|
17
|
+
.action(async (workflow, opts) => {
|
|
18
|
+
await executeWorkflow({
|
|
19
|
+
workflow,
|
|
20
|
+
input: opts.input,
|
|
21
|
+
outputDir: opts.output,
|
|
22
|
+
maxRounds: opts.maxRounds,
|
|
23
|
+
verbose: opts.verbose,
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
program.addCommand(skillsCommand);
|
|
27
|
+
export { program };
|
|
28
|
+
program.parse();
|
|
29
|
+
//# 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,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAShD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,qBAAqB,CAAC;KAClC,cAAc,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KACxE,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;KAChD,MAAM,CAAC,sBAAsB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;KAC1D,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,IAAgB,EAAE,EAAE;IACnD,MAAM,eAAe,CAAC;QACpB,QAAQ;QACR,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare class OutputFormatter {
|
|
2
|
+
private verbose;
|
|
3
|
+
private logPath;
|
|
4
|
+
constructor(verbose?: boolean);
|
|
5
|
+
setLogFile(path: string): void;
|
|
6
|
+
close(): void;
|
|
7
|
+
agentStart(name: string, _description: string): void;
|
|
8
|
+
agentDone(name: string, result?: string, tokens?: [number, number] | null, cost?: number | null): void;
|
|
9
|
+
logInfo(message: string): void;
|
|
10
|
+
logActivity(agentName: string, message: string): void;
|
|
11
|
+
logResult(result: string): void;
|
|
12
|
+
logRoundResult(result: unknown): void;
|
|
13
|
+
finalSummary(outputDir: string, totalDuration: number): void;
|
|
14
|
+
formatDuration(seconds: number): string;
|
|
15
|
+
private buildResultPreview;
|
|
16
|
+
private buildMetaParts;
|
|
17
|
+
private buildRoundResultParts;
|
|
18
|
+
private agentLabel;
|
|
19
|
+
private writeLog;
|
|
20
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { appendFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
const AGENT_COLORS = {
|
|
4
|
+
planner: chalk.cyan,
|
|
5
|
+
generator: chalk.yellow,
|
|
6
|
+
evaluator: chalk.red,
|
|
7
|
+
writer: chalk.green,
|
|
8
|
+
critic: chalk.magenta,
|
|
9
|
+
proposer: chalk.cyan,
|
|
10
|
+
reviewer: chalk.red,
|
|
11
|
+
default: chalk.blue,
|
|
12
|
+
};
|
|
13
|
+
const AGENT_LABEL_WIDTH = 14;
|
|
14
|
+
const RESULT_PREVIEW_MAX_LENGTH = 50;
|
|
15
|
+
const FEEDBACK_PREVIEW_MAX_LENGTH = 60;
|
|
16
|
+
const TOKEN_COMPACT_THRESHOLD = 1000;
|
|
17
|
+
function formatTokenCount(n) {
|
|
18
|
+
if (n >= TOKEN_COMPACT_THRESHOLD)
|
|
19
|
+
return `${(n / TOKEN_COMPACT_THRESHOLD).toFixed(1)}k`;
|
|
20
|
+
return String(n);
|
|
21
|
+
}
|
|
22
|
+
function truncate(text, maxLength, ellipsis) {
|
|
23
|
+
return text.length > maxLength ? text.slice(0, maxLength) + ellipsis : text;
|
|
24
|
+
}
|
|
25
|
+
export class OutputFormatter {
|
|
26
|
+
verbose;
|
|
27
|
+
logPath = null;
|
|
28
|
+
constructor(verbose = false) {
|
|
29
|
+
this.verbose = verbose;
|
|
30
|
+
}
|
|
31
|
+
setLogFile(path) {
|
|
32
|
+
this.logPath = path;
|
|
33
|
+
writeFileSync(path, "");
|
|
34
|
+
}
|
|
35
|
+
close() {
|
|
36
|
+
this.logPath = null;
|
|
37
|
+
}
|
|
38
|
+
agentStart(name, _description) {
|
|
39
|
+
this.writeLog(`[${name}] start`);
|
|
40
|
+
}
|
|
41
|
+
agentDone(name, result = "", tokens, cost) {
|
|
42
|
+
const label = this.agentLabel(name);
|
|
43
|
+
const preview = this.buildResultPreview(result);
|
|
44
|
+
const metaParts = this.buildMetaParts(tokens, cost);
|
|
45
|
+
console.log(`${label} ${chalk.white(preview)} ${metaParts.join(" ")}`);
|
|
46
|
+
this.writeLog(`[${name}] ${preview} | ${tokens?.[0]}/${tokens?.[1]} | $${cost?.toFixed(4)}`);
|
|
47
|
+
}
|
|
48
|
+
logInfo(message) {
|
|
49
|
+
console.log(chalk.gray(`\n── ${message} ──`));
|
|
50
|
+
this.writeLog(`[info] ${message}`);
|
|
51
|
+
}
|
|
52
|
+
logActivity(agentName, message) {
|
|
53
|
+
if (!this.verbose)
|
|
54
|
+
return;
|
|
55
|
+
const label = this.agentLabel(agentName);
|
|
56
|
+
console.log(chalk.dim(`${label} ${message}`));
|
|
57
|
+
this.writeLog(`[${agentName}] ${message}`);
|
|
58
|
+
}
|
|
59
|
+
logResult(result) {
|
|
60
|
+
console.log(chalk.green(`\nResult: ${result}`));
|
|
61
|
+
this.writeLog(`[result] ${result}`);
|
|
62
|
+
}
|
|
63
|
+
logRoundResult(result) {
|
|
64
|
+
if (result == null || typeof result !== "object")
|
|
65
|
+
return;
|
|
66
|
+
const r = result;
|
|
67
|
+
const roundParts = this.buildRoundResultParts(r);
|
|
68
|
+
if (roundParts.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
const line = ` → ${roundParts.join(" ")}`;
|
|
71
|
+
console.log(line);
|
|
72
|
+
this.writeLog(line);
|
|
73
|
+
}
|
|
74
|
+
finalSummary(outputDir, totalDuration) {
|
|
75
|
+
const duration = this.formatDuration(totalDuration);
|
|
76
|
+
console.log(chalk.bold(`\nOutput: ${outputDir}`));
|
|
77
|
+
console.log(chalk.bold(`Duration: ${duration}`));
|
|
78
|
+
this.writeLog(`\nOutput: ${outputDir}\nDuration: ${duration}`);
|
|
79
|
+
}
|
|
80
|
+
formatDuration(seconds) {
|
|
81
|
+
const h = Math.floor(seconds / 3600);
|
|
82
|
+
const m = Math.floor((seconds % 3600) / 60);
|
|
83
|
+
const s = Math.floor(seconds % 60);
|
|
84
|
+
const parts = [];
|
|
85
|
+
if (h > 0)
|
|
86
|
+
parts.push(`${h}h`);
|
|
87
|
+
if (m > 0)
|
|
88
|
+
parts.push(`${m}m`);
|
|
89
|
+
parts.push(`${s}s`);
|
|
90
|
+
return parts.join(" ");
|
|
91
|
+
}
|
|
92
|
+
buildResultPreview(result) {
|
|
93
|
+
const singleLine = result.replace(/\s+/g, " ").trim();
|
|
94
|
+
return truncate(singleLine, RESULT_PREVIEW_MAX_LENGTH, "…");
|
|
95
|
+
}
|
|
96
|
+
buildMetaParts(tokens, cost) {
|
|
97
|
+
const parts = [];
|
|
98
|
+
if (tokens) {
|
|
99
|
+
parts.push(chalk.gray(`${formatTokenCount(tokens[0])}/${formatTokenCount(tokens[1])}`));
|
|
100
|
+
}
|
|
101
|
+
if (cost != null) {
|
|
102
|
+
parts.push(chalk.yellow(`$${cost.toFixed(4)}`));
|
|
103
|
+
}
|
|
104
|
+
return parts;
|
|
105
|
+
}
|
|
106
|
+
buildRoundResultParts(r) {
|
|
107
|
+
const parts = [];
|
|
108
|
+
if ("passed" in r) {
|
|
109
|
+
parts.push(r.passed ? chalk.green("PASS") : chalk.red("FAIL"));
|
|
110
|
+
}
|
|
111
|
+
if ("accepted" in r) {
|
|
112
|
+
parts.push(r.accepted ? chalk.green("ACCEPTED") : chalk.red("REJECTED"));
|
|
113
|
+
}
|
|
114
|
+
if ("scores" in r && typeof r.scores === "object" && r.scores) {
|
|
115
|
+
const scores = Object.entries(r.scores)
|
|
116
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
117
|
+
.join(", ");
|
|
118
|
+
parts.push(chalk.gray(scores));
|
|
119
|
+
}
|
|
120
|
+
if ("feedback" in r && Array.isArray(r.feedback) && r.feedback.length > 0) {
|
|
121
|
+
const firstFeedback = String(r.feedback[0]);
|
|
122
|
+
parts.push(chalk.dim(truncate(firstFeedback, FEEDBACK_PREVIEW_MAX_LENGTH, "...")));
|
|
123
|
+
}
|
|
124
|
+
return parts;
|
|
125
|
+
}
|
|
126
|
+
agentLabel(name) {
|
|
127
|
+
const colorFn = AGENT_COLORS[name] ?? AGENT_COLORS.default;
|
|
128
|
+
return colorFn(`[${name}]`.padEnd(AGENT_LABEL_WIDTH));
|
|
129
|
+
}
|
|
130
|
+
writeLog(text) {
|
|
131
|
+
if (this.logPath) {
|
|
132
|
+
appendFileSync(this.logPath, text + "\n");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function executeWorkflow(options: {
|
|
2
|
+
workflow: string;
|
|
3
|
+
input: string;
|
|
4
|
+
outputDir?: string;
|
|
5
|
+
maxRounds?: number;
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function slugify(text: string): string;
|
|
9
|
+
export declare function resolveInput(input: string): string;
|
|
10
|
+
export declare function findUniqueOutputDir(base: string, slug: string): string;
|
package/dist/cli/run.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { existsSync, readFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { OutputFormatter } from "./output.js";
|
|
4
|
+
import { setFormatter, setWorkDir, setSkillRegistry } from "../context.js";
|
|
5
|
+
import { SkillRegistry } from "../tools/skills.js";
|
|
6
|
+
const SLUG_MAX_LENGTH = 50;
|
|
7
|
+
export async function executeWorkflow(options) {
|
|
8
|
+
const { workflow, input: rawInput, outputDir, maxRounds, verbose } = options;
|
|
9
|
+
const userInput = resolveInput(rawInput);
|
|
10
|
+
const workDir = resolveWorkDir(userInput, outputDir);
|
|
11
|
+
const formatter = initializeContext(workDir, verbose);
|
|
12
|
+
const startTime = Date.now();
|
|
13
|
+
try {
|
|
14
|
+
const runner = await loadWorkflowFile(workflow);
|
|
15
|
+
const result = await runner.run(userInput);
|
|
16
|
+
formatter.logResult(serializeResult(result));
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
const elapsedSeconds = (Date.now() - startTime) / 1000;
|
|
20
|
+
formatter.finalSummary(workDir, elapsedSeconds);
|
|
21
|
+
formatter.close();
|
|
22
|
+
teardownContext();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function slugify(text) {
|
|
26
|
+
return text
|
|
27
|
+
.toLowerCase()
|
|
28
|
+
.replace(/[^a-z0-9\s-]/g, "")
|
|
29
|
+
.replace(/\s+/g, "-")
|
|
30
|
+
.replace(/-+/g, "-")
|
|
31
|
+
.replace(/^-|-$/g, "")
|
|
32
|
+
.slice(0, SLUG_MAX_LENGTH);
|
|
33
|
+
}
|
|
34
|
+
export function resolveInput(input) {
|
|
35
|
+
if (existsSync(input)) {
|
|
36
|
+
return readFileSync(input, "utf-8");
|
|
37
|
+
}
|
|
38
|
+
return input;
|
|
39
|
+
}
|
|
40
|
+
export function findUniqueOutputDir(base, slug) {
|
|
41
|
+
const target = join(base, slug);
|
|
42
|
+
if (!existsSync(target))
|
|
43
|
+
return target;
|
|
44
|
+
let counter = 1;
|
|
45
|
+
while (existsSync(join(base, `${slug}-${counter}`))) {
|
|
46
|
+
counter++;
|
|
47
|
+
}
|
|
48
|
+
return join(base, `${slug}-${counter}`);
|
|
49
|
+
}
|
|
50
|
+
function resolveWorkDir(userInput, outputDir) {
|
|
51
|
+
const slug = slugify(userInput);
|
|
52
|
+
const baseOutput = outputDir ?? resolve("output");
|
|
53
|
+
const workDir = findUniqueOutputDir(baseOutput, slug);
|
|
54
|
+
mkdirSync(workDir, { recursive: true });
|
|
55
|
+
return workDir;
|
|
56
|
+
}
|
|
57
|
+
function initializeContext(workDir, verbose) {
|
|
58
|
+
const formatter = new OutputFormatter(verbose);
|
|
59
|
+
formatter.setLogFile(join(workDir, "circe.log"));
|
|
60
|
+
setFormatter(formatter);
|
|
61
|
+
setWorkDir(workDir);
|
|
62
|
+
setSkillRegistry(createSkillRegistry(workDir));
|
|
63
|
+
return formatter;
|
|
64
|
+
}
|
|
65
|
+
function createSkillRegistry(workDir) {
|
|
66
|
+
const skillDirs = [
|
|
67
|
+
join(workDir, ".circe", "skills"),
|
|
68
|
+
join(process.env.HOME, ".circe", "skills"),
|
|
69
|
+
];
|
|
70
|
+
return new SkillRegistry(skillDirs);
|
|
71
|
+
}
|
|
72
|
+
function teardownContext() {
|
|
73
|
+
setFormatter(null);
|
|
74
|
+
setWorkDir(null);
|
|
75
|
+
setSkillRegistry(null);
|
|
76
|
+
}
|
|
77
|
+
async function loadWorkflowFile(path) {
|
|
78
|
+
const mod = await import(resolve(path));
|
|
79
|
+
if (typeof mod.default?.run === "function")
|
|
80
|
+
return mod.default;
|
|
81
|
+
if (typeof mod.app?.run === "function")
|
|
82
|
+
return mod.app;
|
|
83
|
+
throw new Error(`Workflow file must export 'default' or 'app' with a run() method: ${path}`);
|
|
84
|
+
}
|
|
85
|
+
function serializeResult(result) {
|
|
86
|
+
if (typeof result === "string")
|
|
87
|
+
return result;
|
|
88
|
+
return JSON.stringify(result, null, 2);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { SkillRegistry } from "../tools/skills.js";
|
|
5
|
+
import { circeHome } from "../utils.js";
|
|
6
|
+
const SKILL_NAME_COL_WIDTH = 16;
|
|
7
|
+
const SKILL_DESC_COL_WIDTH = 40;
|
|
8
|
+
export const skillsCommand = new Command("skills").description("Manage skills");
|
|
9
|
+
skillsCommand
|
|
10
|
+
.command("list")
|
|
11
|
+
.description("List available skills")
|
|
12
|
+
.action(() => {
|
|
13
|
+
const registry = createRegistry();
|
|
14
|
+
const skills = registry.listSkills();
|
|
15
|
+
if (skills.length === 0) {
|
|
16
|
+
console.log("No skills found.");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log("Skills:");
|
|
20
|
+
for (const skill of skills) {
|
|
21
|
+
const scope = resolveSkillScope(skill.source);
|
|
22
|
+
console.log(` ${skill.name.padEnd(SKILL_NAME_COL_WIDTH)} ${skill.description.padEnd(SKILL_DESC_COL_WIDTH)} (${scope})`);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
skillsCommand
|
|
26
|
+
.command("info <name>")
|
|
27
|
+
.description("Show skill details")
|
|
28
|
+
.action((name) => {
|
|
29
|
+
const registry = createRegistry();
|
|
30
|
+
const info = registry.getSkillInfo(name);
|
|
31
|
+
if (!info) {
|
|
32
|
+
console.error(`Skill '${name}' not found.`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
printSkillInfo(info, registry.getSkill(name));
|
|
36
|
+
});
|
|
37
|
+
skillsCommand
|
|
38
|
+
.command("create <name>")
|
|
39
|
+
.description("Create a new skill from template")
|
|
40
|
+
.option("--global", "Create in global skills directory")
|
|
41
|
+
.action((name, options) => {
|
|
42
|
+
const baseDir = resolveBaseDir(options.global);
|
|
43
|
+
const skillDir = join(baseDir, name);
|
|
44
|
+
const skillFile = join(skillDir, "SKILL.md");
|
|
45
|
+
if (existsSync(skillFile)) {
|
|
46
|
+
console.error(`Skill '${name}' already exists at ${skillDir}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
mkdirSync(skillDir, { recursive: true });
|
|
50
|
+
writeFileSync(skillFile, buildSkillTemplate(name));
|
|
51
|
+
console.log(`Skill '${name}' created at ${skillFile}`);
|
|
52
|
+
});
|
|
53
|
+
skillsCommand
|
|
54
|
+
.command("delete <name>")
|
|
55
|
+
.description("Delete a skill")
|
|
56
|
+
.option("--global", "Delete from global skills directory")
|
|
57
|
+
.action((name, options) => {
|
|
58
|
+
const baseDir = resolveBaseDir(options.global);
|
|
59
|
+
const skillDir = join(baseDir, name);
|
|
60
|
+
if (!existsSync(skillDir)) {
|
|
61
|
+
console.error(`Skill '${name}' not found at ${baseDir}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
65
|
+
console.log(`Skill '${name}' deleted.`);
|
|
66
|
+
});
|
|
67
|
+
function createRegistry() {
|
|
68
|
+
return new SkillRegistry([localSkillsDir(), globalSkillsDir()]);
|
|
69
|
+
}
|
|
70
|
+
function resolveBaseDir(isGlobal) {
|
|
71
|
+
return isGlobal ? globalSkillsDir() : localSkillsDir();
|
|
72
|
+
}
|
|
73
|
+
function resolveSkillScope(sourceDir) {
|
|
74
|
+
return sourceDir === localSkillsDir() ? "local" : "global";
|
|
75
|
+
}
|
|
76
|
+
function printSkillInfo(info, content) {
|
|
77
|
+
const scope = resolveSkillScope(info.source);
|
|
78
|
+
console.log(`Name: ${info.name}`);
|
|
79
|
+
console.log(`Description: ${info.description}`);
|
|
80
|
+
console.log(`Source: ${info.source} (${scope})`);
|
|
81
|
+
console.log(`---`);
|
|
82
|
+
if (content)
|
|
83
|
+
console.log(content);
|
|
84
|
+
}
|
|
85
|
+
function buildSkillTemplate(name) {
|
|
86
|
+
return `---\nname: ${name}\ndescription: \n---\n\n# ${name}\n\n(Write your skill content here)\n`;
|
|
87
|
+
}
|
|
88
|
+
function localSkillsDir() {
|
|
89
|
+
return join(process.cwd(), ".circe", "skills");
|
|
90
|
+
}
|
|
91
|
+
function globalSkillsDir() {
|
|
92
|
+
const home = circeHome();
|
|
93
|
+
return join(home, "skills");
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=skills-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-cmd.js","sourceRoot":"","sources":["../../src/cli/skills-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
function workflowsDir() {
|
|
5
|
+
const home = process.env.CIRCE_HOME ?? join(process.env.HOME, ".circe");
|
|
6
|
+
const dir = join(home, "workflows");
|
|
7
|
+
if (!existsSync(dir))
|
|
8
|
+
mkdirSync(dir, { recursive: true });
|
|
9
|
+
return dir;
|
|
10
|
+
}
|
|
11
|
+
export const workflowsCommand = new Command("workflows").description("Manage workflows");
|
|
12
|
+
workflowsCommand
|
|
13
|
+
.command("create <name>")
|
|
14
|
+
.requiredOption("--agents <agents>", "Comma-separated agent names")
|
|
15
|
+
.option("--from <preset>", "Base preset")
|
|
16
|
+
.action((name, opts) => {
|
|
17
|
+
const data = {
|
|
18
|
+
name,
|
|
19
|
+
agents: opts.agents.split(",").map((a) => a.trim()),
|
|
20
|
+
basedOn: opts.from ?? null,
|
|
21
|
+
};
|
|
22
|
+
writeFileSync(join(workflowsDir(), `${name}.json`), JSON.stringify(data, null, 2));
|
|
23
|
+
console.log(`Workflow '${name}' created.`);
|
|
24
|
+
});
|
|
25
|
+
workflowsCommand
|
|
26
|
+
.command("list")
|
|
27
|
+
.action(() => {
|
|
28
|
+
const dir = workflowsDir();
|
|
29
|
+
const files = readdirSync(dir).filter((f) => f.endsWith(".json"));
|
|
30
|
+
if (files.length === 0) {
|
|
31
|
+
console.log("No workflows found.");
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
for (const f of files) {
|
|
35
|
+
const data = JSON.parse(readFileSync(join(dir, f), "utf-8"));
|
|
36
|
+
console.log(` ${data.name}`);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
workflowsCommand
|
|
40
|
+
.command("info <name>")
|
|
41
|
+
.action((name) => {
|
|
42
|
+
const path = join(workflowsDir(), `${name}.json`);
|
|
43
|
+
if (!existsSync(path)) {
|
|
44
|
+
console.error(`Workflow '${name}' not found.`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const data = JSON.parse(readFileSync(path, "utf-8"));
|
|
48
|
+
console.log(JSON.stringify(data, null, 2));
|
|
49
|
+
});
|
|
50
|
+
workflowsCommand
|
|
51
|
+
.command("delete <name>")
|
|
52
|
+
.action((name) => {
|
|
53
|
+
const path = join(workflowsDir(), `${name}.json`);
|
|
54
|
+
if (!existsSync(path)) {
|
|
55
|
+
console.error(`Workflow '${name}' not found.`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
unlinkSync(path);
|
|
59
|
+
console.log(`Workflow '${name}' deleted.`);
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=workflows-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows-cmd.js","sourceRoot":"","sources":["../../src/cli/workflows-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { OutputFormatter } from "./cli/output.js";
|
|
2
|
+
import type { SkillRegistry } from "./tools/skills.js";
|
|
3
|
+
export declare function setFormatter(value: OutputFormatter | null): void;
|
|
4
|
+
export declare function getFormatter(): OutputFormatter | null;
|
|
5
|
+
export declare function setWorkDir(value: string | null): void;
|
|
6
|
+
export declare function getWorkDir(): string | null;
|
|
7
|
+
export declare function setSkillRegistry(value: SkillRegistry | null): void;
|
|
8
|
+
export declare function getSkillRegistry(): SkillRegistry | null;
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Module-level singletons shared across the agent session
|
|
2
|
+
let formatter = null;
|
|
3
|
+
let workDir = null;
|
|
4
|
+
let skillRegistry = null;
|
|
5
|
+
export function setFormatter(value) {
|
|
6
|
+
formatter = value;
|
|
7
|
+
}
|
|
8
|
+
export function getFormatter() {
|
|
9
|
+
return formatter;
|
|
10
|
+
}
|
|
11
|
+
export function setWorkDir(value) {
|
|
12
|
+
workDir = value;
|
|
13
|
+
}
|
|
14
|
+
export function getWorkDir() {
|
|
15
|
+
return workDir;
|
|
16
|
+
}
|
|
17
|
+
export function setSkillRegistry(value) {
|
|
18
|
+
skillRegistry = value;
|
|
19
|
+
}
|
|
20
|
+
export function getSkillRegistry() {
|
|
21
|
+
return skillRegistry;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAGA,0DAA0D;AAC1D,IAAI,SAAS,GAA2B,IAAI,CAAC;AAC7C,IAAI,OAAO,GAAkB,IAAI,CAAC;AAClC,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,KAA6B;IACxD,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAoB;IAC7C,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA2B;IAC1D,aAAa,GAAG,KAAK,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC"}
|