@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.
Files changed (83) hide show
  1. package/README.md +185 -0
  2. package/dist/agent.d.ts +73 -0
  3. package/dist/agent.js +334 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/cli/agents-cmd.d.ts +2 -0
  6. package/dist/cli/agents-cmd.js +77 -0
  7. package/dist/cli/agents-cmd.js.map +1 -0
  8. package/dist/cli/index.d.ts +4 -0
  9. package/dist/cli/index.js +29 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/output.d.ts +20 -0
  12. package/dist/cli/output.js +136 -0
  13. package/dist/cli/output.js.map +1 -0
  14. package/dist/cli/run.d.ts +10 -0
  15. package/dist/cli/run.js +90 -0
  16. package/dist/cli/run.js.map +1 -0
  17. package/dist/cli/skills-cmd.d.ts +2 -0
  18. package/dist/cli/skills-cmd.js +95 -0
  19. package/dist/cli/skills-cmd.js.map +1 -0
  20. package/dist/cli/workflows-cmd.d.ts +2 -0
  21. package/dist/cli/workflows-cmd.js +61 -0
  22. package/dist/cli/workflows-cmd.js.map +1 -0
  23. package/dist/context.d.ts +8 -0
  24. package/dist/context.js +23 -0
  25. package/dist/context.js.map +1 -0
  26. package/dist/events.d.ts +134 -0
  27. package/dist/events.js +127 -0
  28. package/dist/events.js.map +1 -0
  29. package/dist/handoff.d.ts +153 -0
  30. package/dist/handoff.js +42 -0
  31. package/dist/handoff.js.map +1 -0
  32. package/dist/index.d.ts +9 -0
  33. package/dist/index.js +10 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/orchestration/contract.d.ts +27 -0
  36. package/dist/orchestration/contract.js +104 -0
  37. package/dist/orchestration/contract.js.map +1 -0
  38. package/dist/orchestration/index.d.ts +10 -0
  39. package/dist/orchestration/index.js +6 -0
  40. package/dist/orchestration/index.js.map +1 -0
  41. package/dist/orchestration/loop.d.ts +25 -0
  42. package/dist/orchestration/loop.js +81 -0
  43. package/dist/orchestration/loop.js.map +1 -0
  44. package/dist/orchestration/parallel.d.ts +27 -0
  45. package/dist/orchestration/parallel.js +78 -0
  46. package/dist/orchestration/parallel.js.map +1 -0
  47. package/dist/orchestration/pipeline.d.ts +23 -0
  48. package/dist/orchestration/pipeline.js +100 -0
  49. package/dist/orchestration/pipeline.js.map +1 -0
  50. package/dist/orchestration/sprint.d.ts +21 -0
  51. package/dist/orchestration/sprint.js +56 -0
  52. package/dist/orchestration/sprint.js.map +1 -0
  53. package/dist/presets/frontend.d.ts +8 -0
  54. package/dist/presets/frontend.js +113 -0
  55. package/dist/presets/frontend.js.map +1 -0
  56. package/dist/presets/fullstack.d.ts +9 -0
  57. package/dist/presets/fullstack.js +118 -0
  58. package/dist/presets/fullstack.js.map +1 -0
  59. package/dist/presets/index.d.ts +2 -0
  60. package/dist/presets/index.js +3 -0
  61. package/dist/presets/index.js.map +1 -0
  62. package/dist/session/index.d.ts +1 -0
  63. package/dist/session/index.js +2 -0
  64. package/dist/session/index.js.map +1 -0
  65. package/dist/session/manager.d.ts +17 -0
  66. package/dist/session/manager.js +50 -0
  67. package/dist/session/manager.js.map +1 -0
  68. package/dist/tools/custom.d.ts +5 -0
  69. package/dist/tools/custom.js +7 -0
  70. package/dist/tools/custom.js.map +1 -0
  71. package/dist/tools/index.d.ts +1 -0
  72. package/dist/tools/index.js +2 -0
  73. package/dist/tools/index.js.map +1 -0
  74. package/dist/tools/skills.d.ts +18 -0
  75. package/dist/tools/skills.js +99 -0
  76. package/dist/tools/skills.js.map +1 -0
  77. package/dist/types.d.ts +36 -0
  78. package/dist/types.js +12 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/utils.d.ts +24 -0
  81. package/dist/utils.js +85 -0
  82. package/dist/utils.js.map +1 -0
  83. 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,4 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ declare const program: Command;
4
+ export { program };
@@ -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;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare const skillsCommand: Command;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare const workflowsCommand: Command;
@@ -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;
@@ -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"}