@electric-agent/agent 1.4.3 → 1.4.8
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/package.json +8 -3
- package/template/.claude/skills/create-app/SKILL.md +19 -4
- package/dist/agents/clarifier.d.ts +0 -16
- package/dist/agents/clarifier.d.ts.map +0 -1
- package/dist/agents/clarifier.js +0 -158
- package/dist/agents/clarifier.js.map +0 -1
- package/dist/agents/coder.d.ts +0 -14
- package/dist/agents/coder.d.ts.map +0 -1
- package/dist/agents/coder.js +0 -126
- package/dist/agents/coder.js.map +0 -1
- package/dist/agents/planner.d.ts +0 -6
- package/dist/agents/planner.d.ts.map +0 -1
- package/dist/agents/planner.js +0 -69
- package/dist/agents/planner.js.map +0 -1
- package/dist/agents/prompts.d.ts +0 -9
- package/dist/agents/prompts.d.ts.map +0 -1
- package/dist/agents/prompts.js +0 -231
- package/dist/agents/prompts.js.map +0 -1
- package/dist/cli/headless.d.ts +0 -9
- package/dist/cli/headless.d.ts.map +0 -1
- package/dist/cli/headless.js +0 -506
- package/dist/cli/headless.js.map +0 -1
- package/dist/engine/message-parser.d.ts +0 -8
- package/dist/engine/message-parser.d.ts.map +0 -1
- package/dist/engine/message-parser.js +0 -106
- package/dist/engine/message-parser.js.map +0 -1
- package/dist/engine/orchestrator.d.ts +0 -50
- package/dist/engine/orchestrator.d.ts.map +0 -1
- package/dist/engine/orchestrator.js +0 -492
- package/dist/engine/orchestrator.js.map +0 -1
- package/dist/engine/stdio-adapter.d.ts +0 -24
- package/dist/engine/stdio-adapter.d.ts.map +0 -1
- package/dist/engine/stdio-adapter.js +0 -139
- package/dist/engine/stdio-adapter.js.map +0 -1
- package/dist/engine/stream-adapter.d.ts +0 -45
- package/dist/engine/stream-adapter.d.ts.map +0 -1
- package/dist/engine/stream-adapter.js +0 -154
- package/dist/engine/stream-adapter.js.map +0 -1
- package/dist/hooks/block-bash.d.ts +0 -7
- package/dist/hooks/block-bash.d.ts.map +0 -1
- package/dist/hooks/block-bash.js +0 -15
- package/dist/hooks/block-bash.js.map +0 -1
- package/dist/hooks/dependency-guard.d.ts +0 -7
- package/dist/hooks/dependency-guard.d.ts.map +0 -1
- package/dist/hooks/dependency-guard.js +0 -43
- package/dist/hooks/dependency-guard.js.map +0 -1
- package/dist/hooks/guardrail-inject.d.ts +0 -17
- package/dist/hooks/guardrail-inject.d.ts.map +0 -1
- package/dist/hooks/guardrail-inject.js +0 -69
- package/dist/hooks/guardrail-inject.js.map +0 -1
- package/dist/hooks/import-validation.d.ts +0 -7
- package/dist/hooks/import-validation.d.ts.map +0 -1
- package/dist/hooks/import-validation.js +0 -192
- package/dist/hooks/import-validation.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -15
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -42
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/migration-validation.d.ts +0 -9
- package/dist/hooks/migration-validation.d.ts.map +0 -1
- package/dist/hooks/migration-validation.js +0 -62
- package/dist/hooks/migration-validation.js.map +0 -1
- package/dist/hooks/schema-consistency.d.ts +0 -12
- package/dist/hooks/schema-consistency.d.ts.map +0 -1
- package/dist/hooks/schema-consistency.js +0 -72
- package/dist/hooks/schema-consistency.js.map +0 -1
- package/dist/hooks/write-protection.d.ts +0 -7
- package/dist/hooks/write-protection.d.ts.map +0 -1
- package/dist/hooks/write-protection.js +0 -33
- package/dist/hooks/write-protection.js.map +0 -1
- package/dist/progress/reporter.d.ts +0 -15
- package/dist/progress/reporter.d.ts.map +0 -1
- package/dist/progress/reporter.js +0 -133
- package/dist/progress/reporter.js.map +0 -1
- package/dist/tools/build.d.ts +0 -3
- package/dist/tools/build.d.ts.map +0 -1
- package/dist/tools/build.js +0 -84
- package/dist/tools/build.js.map +0 -1
- package/dist/tools/playbook.d.ts +0 -14
- package/dist/tools/playbook.d.ts.map +0 -1
- package/dist/tools/playbook.js +0 -239
- package/dist/tools/playbook.js.map +0 -1
- package/dist/tools/server.d.ts +0 -3
- package/dist/tools/server.d.ts.map +0 -1
- package/dist/tools/server.js +0 -13
- package/dist/tools/server.js.map +0 -1
- package/dist/working-memory/errors.d.ts +0 -14
- package/dist/working-memory/errors.d.ts.map +0 -1
- package/dist/working-memory/errors.js +0 -89
- package/dist/working-memory/errors.js.map +0 -1
- package/dist/working-memory/session.d.ts +0 -12
- package/dist/working-memory/session.d.ts.map +0 -1
- package/dist/working-memory/session.js +0 -71
- package/dist/working-memory/session.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/progress/reporter.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/build.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,qEAsF9E"}
|
package/dist/tools/build.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { tool } from "@anthropic-ai/claude-agent-sdk";
|
|
5
|
-
export function createBuildTool(projectDir, reporter) {
|
|
6
|
-
return tool("build", "Run pnpm build and pnpm check (Biome lint) in the project. Returns build output including any TypeScript or lint errors.", {}, async () => {
|
|
7
|
-
let buildOutput = "";
|
|
8
|
-
let checkOutput = "";
|
|
9
|
-
let success = true;
|
|
10
|
-
const errors = [];
|
|
11
|
-
try {
|
|
12
|
-
buildOutput = execSync("pnpm run build 2>&1", {
|
|
13
|
-
encoding: "utf-8",
|
|
14
|
-
timeout: 120_000,
|
|
15
|
-
cwd: projectDir,
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
catch (e) {
|
|
19
|
-
success = false;
|
|
20
|
-
buildOutput =
|
|
21
|
-
e?.stdout || (e instanceof Error ? e.message : "Build failed");
|
|
22
|
-
errors.push("build");
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
checkOutput = execSync("pnpm run check 2>&1", {
|
|
26
|
-
encoding: "utf-8",
|
|
27
|
-
timeout: 60_000,
|
|
28
|
-
cwd: projectDir,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
catch (e) {
|
|
32
|
-
success = false;
|
|
33
|
-
checkOutput =
|
|
34
|
-
e?.stdout || (e instanceof Error ? e.message : "Check failed");
|
|
35
|
-
errors.push("check");
|
|
36
|
-
}
|
|
37
|
-
// Run smoke tests if tests/ directory exists
|
|
38
|
-
let testOutput = "";
|
|
39
|
-
const testsDir = path.join(projectDir, "tests");
|
|
40
|
-
if (fs.existsSync(testsDir)) {
|
|
41
|
-
try {
|
|
42
|
-
testOutput = execSync("pnpm test 2>&1", {
|
|
43
|
-
encoding: "utf-8",
|
|
44
|
-
timeout: 120_000,
|
|
45
|
-
cwd: projectDir,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
catch (e) {
|
|
49
|
-
success = false;
|
|
50
|
-
testOutput =
|
|
51
|
-
e?.stdout ||
|
|
52
|
-
(e instanceof Error ? e.message : "Tests failed");
|
|
53
|
-
errors.push("test");
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const outputParts = [
|
|
57
|
-
"=== pnpm run build ===",
|
|
58
|
-
buildOutput.trim(),
|
|
59
|
-
"",
|
|
60
|
-
"=== pnpm run check ===",
|
|
61
|
-
checkOutput.trim(),
|
|
62
|
-
];
|
|
63
|
-
if (testOutput) {
|
|
64
|
-
outputParts.push("", "=== pnpm test ===", testOutput.trim());
|
|
65
|
-
}
|
|
66
|
-
const output = outputParts.join("\n");
|
|
67
|
-
if (reporter?.verboseMode) {
|
|
68
|
-
reporter.log("verbose", `[build output]\n${output}`);
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
content: [
|
|
72
|
-
{
|
|
73
|
-
type: "text",
|
|
74
|
-
text: JSON.stringify({
|
|
75
|
-
success,
|
|
76
|
-
output: output.slice(0, 10_000),
|
|
77
|
-
errors: errors.join(", ") || "none",
|
|
78
|
-
}),
|
|
79
|
-
},
|
|
80
|
-
],
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=build.js.map
|
package/dist/tools/build.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/playbook.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
/**
|
|
3
|
-
* Validate that all required playbook skills are installed in the project.
|
|
4
|
-
* Throws if any are missing so generation fails fast.
|
|
5
|
-
*/
|
|
6
|
-
export declare function validatePlaybooks(projectDir: string): void;
|
|
7
|
-
export declare function createPlaybookTools(projectDir: string): {
|
|
8
|
-
readPlaybookTool: import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
|
|
9
|
-
name: z.ZodString;
|
|
10
|
-
include_references: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
-
}>;
|
|
12
|
-
listPlaybooksTool: import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{}>;
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=playbook.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playbook.d.ts","sourceRoot":"","sources":["../../src/tools/playbook.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAwGvB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA2B1D;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM;;;;;;EAsJrD"}
|
package/dist/tools/playbook.js
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { tool } from "@anthropic-ai/claude-agent-sdk";
|
|
5
|
-
import { z } from "zod";
|
|
6
|
-
/**
|
|
7
|
-
* Parse YAML frontmatter from a SKILL.md file.
|
|
8
|
-
* Extracts name, description, and triggers without a YAML library.
|
|
9
|
-
*/
|
|
10
|
-
function parseFrontmatter(content) {
|
|
11
|
-
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
12
|
-
if (!match)
|
|
13
|
-
return {};
|
|
14
|
-
const yaml = match[1];
|
|
15
|
-
const result = {};
|
|
16
|
-
// Extract description (handles both single-line and multi-line block scalar)
|
|
17
|
-
const descMatch = yaml.match(/description:\s*\|?\s*\n([\s\S]*?)(?=\n\w|\n---|\ntriggers:|\nmetadata:)/s);
|
|
18
|
-
if (descMatch) {
|
|
19
|
-
result.description = descMatch[1]
|
|
20
|
-
.split("\n")
|
|
21
|
-
.map((line) => line.trim())
|
|
22
|
-
.filter(Boolean)
|
|
23
|
-
.join(" ");
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
const inlineDesc = yaml.match(/description:\s*(.+)/);
|
|
27
|
-
if (inlineDesc) {
|
|
28
|
-
result.description = inlineDesc[1].trim();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// Extract triggers (YAML list)
|
|
32
|
-
const triggersMatch = yaml.match(/triggers:\s*\n((?:\s+-\s+.+\n?)*)/);
|
|
33
|
-
if (triggersMatch) {
|
|
34
|
-
result.triggers = triggersMatch[1]
|
|
35
|
-
.split("\n")
|
|
36
|
-
.map((line) => line.replace(/^\s*-\s*/, "").trim())
|
|
37
|
-
.filter(Boolean);
|
|
38
|
-
}
|
|
39
|
-
return result;
|
|
40
|
-
}
|
|
41
|
-
const PLAYBOOK_PACKAGES = [
|
|
42
|
-
{ pkg: "@electric-sql/playbook", prefix: "electric" },
|
|
43
|
-
{ pkg: "@tanstack/db-playbook", prefix: "tanstack-db" },
|
|
44
|
-
{ pkg: "@durable-streams/playbook", prefix: "durable-streams" },
|
|
45
|
-
];
|
|
46
|
-
/**
|
|
47
|
-
* Resolve the bundled playbook directory that ships with electric-agent.
|
|
48
|
-
* Contains project-specific patterns not covered by external playbook packages.
|
|
49
|
-
*/
|
|
50
|
-
function getBundledPlaybookDir() {
|
|
51
|
-
// Try compiled path first, then source path
|
|
52
|
-
const compiled = path.resolve(__dirname, "../../playbooks");
|
|
53
|
-
if (fs.existsSync(compiled))
|
|
54
|
-
return compiled;
|
|
55
|
-
const source = path.resolve(__dirname, "../playbooks");
|
|
56
|
-
if (fs.existsSync(source))
|
|
57
|
-
return source;
|
|
58
|
-
return compiled; // fallback
|
|
59
|
-
}
|
|
60
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
61
|
-
/**
|
|
62
|
-
* Find a skill directory by name. Supports:
|
|
63
|
-
* - Direct match: skills/<name>/SKILL.md
|
|
64
|
-
* - Nested match: skills/<parent>/<name>/SKILL.md (e.g., tanstack-db/collections)
|
|
65
|
-
* - Bundled skills: playbooks/<name>/SKILL.md (shipped with electric-agent)
|
|
66
|
-
*/
|
|
67
|
-
function findPlaybookSkillDir(skillName, projectDir) {
|
|
68
|
-
for (const { pkg } of PLAYBOOK_PACKAGES) {
|
|
69
|
-
const skillsDir = path.join(projectDir, "node_modules", pkg, "skills");
|
|
70
|
-
if (!fs.existsSync(skillsDir))
|
|
71
|
-
continue;
|
|
72
|
-
// Direct match
|
|
73
|
-
const direct = path.join(skillsDir, skillName);
|
|
74
|
-
if (fs.existsSync(path.join(direct, "SKILL.md")))
|
|
75
|
-
return direct;
|
|
76
|
-
// Nested one level: skills/<parent>/<name>
|
|
77
|
-
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
78
|
-
if (entry.isDirectory()) {
|
|
79
|
-
const nested = path.join(skillsDir, entry.name, skillName);
|
|
80
|
-
if (fs.existsSync(path.join(nested, "SKILL.md")))
|
|
81
|
-
return nested;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Check bundled playbooks
|
|
86
|
-
const bundledDir = getBundledPlaybookDir();
|
|
87
|
-
const bundled = path.join(bundledDir, skillName);
|
|
88
|
-
if (fs.existsSync(path.join(bundled, "SKILL.md")))
|
|
89
|
-
return bundled;
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Required playbook skills that must be present for code generation to work.
|
|
94
|
-
* Each entry is a skill name that must be findable via findPlaybookSkillDir.
|
|
95
|
-
*/
|
|
96
|
-
const REQUIRED_SKILLS = ["live-queries", "collections", "mutations", "schemas"];
|
|
97
|
-
/**
|
|
98
|
-
* Validate that all required playbook skills are installed in the project.
|
|
99
|
-
* Throws if any are missing so generation fails fast.
|
|
100
|
-
*/
|
|
101
|
-
export function validatePlaybooks(projectDir) {
|
|
102
|
-
const missing = [];
|
|
103
|
-
for (const skill of REQUIRED_SKILLS) {
|
|
104
|
-
if (!findPlaybookSkillDir(skill, projectDir)) {
|
|
105
|
-
missing.push(skill);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (missing.length > 0) {
|
|
109
|
-
const installed = PLAYBOOK_PACKAGES.filter(({ pkg }) => fs.existsSync(path.join(projectDir, "node_modules", pkg, "skills"))).map(({ pkg }) => pkg);
|
|
110
|
-
const notInstalled = PLAYBOOK_PACKAGES.filter(({ pkg }) => !fs.existsSync(path.join(projectDir, "node_modules", pkg, "skills"))).map(({ pkg }) => pkg);
|
|
111
|
-
const lines = [
|
|
112
|
-
`Required playbook skills missing: ${missing.join(", ")}`,
|
|
113
|
-
installed.length > 0 ? `Installed playbook packages: ${installed.join(", ")}` : "",
|
|
114
|
-
notInstalled.length > 0 ? `Missing playbook packages: ${notInstalled.join(", ")}` : "",
|
|
115
|
-
"Run 'pnpm install' in the project directory to install playbook packages.",
|
|
116
|
-
].filter(Boolean);
|
|
117
|
-
throw new Error(lines.join("\n"));
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
export function createPlaybookTools(projectDir) {
|
|
121
|
-
const readPlaybookTool = tool("read_playbook", "Read a playbook skill file (SKILL.md) and optionally its reference files. Use list_playbooks first to see available skill names.", {
|
|
122
|
-
name: z
|
|
123
|
-
.string()
|
|
124
|
-
.describe("Name of the playbook skill to read (e.g., 'collections', 'mutations', 'electric-quickstart')"),
|
|
125
|
-
include_references: z
|
|
126
|
-
.boolean()
|
|
127
|
-
.optional()
|
|
128
|
-
.describe("Whether to include reference files from the references/ subdirectory"),
|
|
129
|
-
}, async (args) => {
|
|
130
|
-
const skillDir = findPlaybookSkillDir(args.name, projectDir);
|
|
131
|
-
if (!skillDir) {
|
|
132
|
-
return {
|
|
133
|
-
content: [
|
|
134
|
-
{
|
|
135
|
-
type: "text",
|
|
136
|
-
text: `Playbook skill "${args.name}" not found. Use list_playbooks to see available skills.`,
|
|
137
|
-
},
|
|
138
|
-
],
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
const parts = [];
|
|
142
|
-
// Read SKILL.md
|
|
143
|
-
const skillFile = path.join(skillDir, "SKILL.md");
|
|
144
|
-
if (fs.existsSync(skillFile)) {
|
|
145
|
-
parts.push(`# ${args.name}\n\n${fs.readFileSync(skillFile, "utf-8")}`);
|
|
146
|
-
}
|
|
147
|
-
// Read references if requested
|
|
148
|
-
if (args.include_references) {
|
|
149
|
-
const refsDir = path.join(skillDir, "references");
|
|
150
|
-
if (fs.existsSync(refsDir)) {
|
|
151
|
-
for (const entry of fs.readdirSync(refsDir, { withFileTypes: true })) {
|
|
152
|
-
if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
153
|
-
const refContent = fs.readFileSync(path.join(refsDir, entry.name), "utf-8");
|
|
154
|
-
parts.push(`\n## Reference: ${entry.name}\n\n${refContent}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return {
|
|
160
|
-
content: [
|
|
161
|
-
{
|
|
162
|
-
type: "text",
|
|
163
|
-
text: parts.join("\n\n---\n\n") || `No content found for skill "${args.name}"`,
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
};
|
|
167
|
-
});
|
|
168
|
-
const listPlaybooksTool = tool("list_playbooks", "List all available playbook skills with descriptions and triggers. Router skills (no parent) contain routing tables — read them first to discover which sub-skill you need.", {}, async () => {
|
|
169
|
-
const skills = [];
|
|
170
|
-
for (const { pkg } of PLAYBOOK_PACKAGES) {
|
|
171
|
-
const skillsDir = path.join(projectDir, "node_modules", pkg, "skills");
|
|
172
|
-
if (!fs.existsSync(skillsDir))
|
|
173
|
-
continue;
|
|
174
|
-
const scanDir = (dir, parent) => {
|
|
175
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
176
|
-
if (entry.isDirectory()) {
|
|
177
|
-
const entryDir = path.join(dir, entry.name);
|
|
178
|
-
const skillFile = path.join(entryDir, "SKILL.md");
|
|
179
|
-
if (fs.existsSync(skillFile)) {
|
|
180
|
-
const refsDir = path.join(entryDir, "references");
|
|
181
|
-
const frontmatter = parseFrontmatter(fs.readFileSync(skillFile, "utf-8"));
|
|
182
|
-
skills.push({
|
|
183
|
-
name: entry.name,
|
|
184
|
-
pkg,
|
|
185
|
-
parent,
|
|
186
|
-
hasReferences: fs.existsSync(refsDir),
|
|
187
|
-
description: frontmatter.description,
|
|
188
|
-
triggers: frontmatter.triggers,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
// Always recurse to find nested skills
|
|
192
|
-
scanDir(entryDir, entry.name);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
scanDir(skillsDir);
|
|
197
|
-
}
|
|
198
|
-
// Scan bundled playbooks (shipped with electric-agent)
|
|
199
|
-
const bundledDir = getBundledPlaybookDir();
|
|
200
|
-
if (fs.existsSync(bundledDir)) {
|
|
201
|
-
for (const entry of fs.readdirSync(bundledDir, { withFileTypes: true })) {
|
|
202
|
-
if (entry.isDirectory()) {
|
|
203
|
-
const entryDir = path.join(bundledDir, entry.name);
|
|
204
|
-
const skillFile = path.join(entryDir, "SKILL.md");
|
|
205
|
-
if (fs.existsSync(skillFile)) {
|
|
206
|
-
const refsDir = path.join(entryDir, "references");
|
|
207
|
-
const frontmatter = parseFrontmatter(fs.readFileSync(skillFile, "utf-8"));
|
|
208
|
-
skills.push({
|
|
209
|
-
name: entry.name,
|
|
210
|
-
pkg: "electric-agent (built-in)",
|
|
211
|
-
hasReferences: fs.existsSync(refsDir),
|
|
212
|
-
description: frontmatter.description,
|
|
213
|
-
triggers: frontmatter.triggers,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
const output = skills
|
|
220
|
-
.map((s) => {
|
|
221
|
-
const indent = s.parent ? " " : "";
|
|
222
|
-
const refs = s.hasReferences ? " [has references]" : "";
|
|
223
|
-
const desc = s.description ? ` — ${s.description}` : "";
|
|
224
|
-
const triggers = s.triggers && s.triggers.length > 0 ? ` (triggers: ${s.triggers.join(", ")})` : "";
|
|
225
|
-
return `${indent}- ${s.name}${desc}${triggers}${refs}`;
|
|
226
|
-
})
|
|
227
|
-
.join("\n");
|
|
228
|
-
return {
|
|
229
|
-
content: [
|
|
230
|
-
{
|
|
231
|
-
type: "text",
|
|
232
|
-
text: output || "No playbook skills found. Ensure playbook packages are installed.",
|
|
233
|
-
},
|
|
234
|
-
],
|
|
235
|
-
};
|
|
236
|
-
});
|
|
237
|
-
return { readPlaybookTool, listPlaybooksTool };
|
|
238
|
-
}
|
|
239
|
-
//# sourceMappingURL=playbook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playbook.js","sourceRoot":"","sources":["../../src/tools/playbook.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/server.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/tools/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAI/D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,2EAS/E"}
|
package/dist/tools/server.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
-
import { createBuildTool } from "./build.js";
|
|
3
|
-
import { createPlaybookTools } from "./playbook.js";
|
|
4
|
-
export function createToolServer(projectDir, reporter) {
|
|
5
|
-
const buildTool = createBuildTool(projectDir, reporter);
|
|
6
|
-
const { readPlaybookTool, listPlaybooksTool } = createPlaybookTools(projectDir);
|
|
7
|
-
return createSdkMcpServer({
|
|
8
|
-
name: "electric-agent-tools",
|
|
9
|
-
version: "1.0.0",
|
|
10
|
-
tools: [buildTool, readPlaybookTool, listPlaybooksTool],
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=server.js.map
|
package/dist/tools/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/tools/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,QAA2B;IAC/E,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACvD,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAE/E,OAAO,kBAAkB,CAAC;QACzB,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;KACvD,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface ErrorEntry {
|
|
2
|
-
timestamp: string;
|
|
3
|
-
errorClass: string;
|
|
4
|
-
file: string;
|
|
5
|
-
message: string;
|
|
6
|
-
attemptedFix: string;
|
|
7
|
-
outcome?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare function readErrors(projectDir: string): ErrorEntry[];
|
|
10
|
-
export declare function logError(projectDir: string, entry: Omit<ErrorEntry, "timestamp">): void;
|
|
11
|
-
export declare function logOutcome(projectDir: string, entryIndex: number, outcome: string): void;
|
|
12
|
-
export declare function hasFailedAttempt(projectDir: string, errorClass: string, file: string, message: string): boolean;
|
|
13
|
-
export declare function consecutiveIdenticalFailures(projectDir: string): boolean;
|
|
14
|
-
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/working-memory/errors.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAQD,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CA+B3D;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI,CAgBvF;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmBxF;AAED,wBAAgB,gBAAgB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACb,OAAO,CAST;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAcxE"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const ERRORS_FILE = "_agent/errors.md";
|
|
4
|
-
function errorsPath(projectDir) {
|
|
5
|
-
return path.join(projectDir, ERRORS_FILE);
|
|
6
|
-
}
|
|
7
|
-
export function readErrors(projectDir) {
|
|
8
|
-
const filePath = errorsPath(projectDir);
|
|
9
|
-
if (!fs.existsSync(filePath))
|
|
10
|
-
return [];
|
|
11
|
-
const content = fs.readFileSync(filePath, "utf-8");
|
|
12
|
-
const entries = [];
|
|
13
|
-
const blocks = content.split("\n## Error ");
|
|
14
|
-
for (const block of blocks.slice(1)) {
|
|
15
|
-
const lines = block.trim().split("\n");
|
|
16
|
-
const entry = {};
|
|
17
|
-
for (const line of lines) {
|
|
18
|
-
if (line.startsWith("- **Timestamp:**"))
|
|
19
|
-
entry.timestamp = line.replace("- **Timestamp:**", "").trim();
|
|
20
|
-
if (line.startsWith("- **Class:**"))
|
|
21
|
-
entry.errorClass = line.replace("- **Class:**", "").trim();
|
|
22
|
-
if (line.startsWith("- **File:**"))
|
|
23
|
-
entry.file = line.replace("- **File:**", "").trim();
|
|
24
|
-
if (line.startsWith("- **Message:**"))
|
|
25
|
-
entry.message = line.replace("- **Message:**", "").trim();
|
|
26
|
-
if (line.startsWith("- **Fix:**"))
|
|
27
|
-
entry.attemptedFix = line.replace("- **Fix:**", "").trim();
|
|
28
|
-
if (line.startsWith("- **Outcome:**"))
|
|
29
|
-
entry.outcome = line.replace("- **Outcome:**", "").trim();
|
|
30
|
-
}
|
|
31
|
-
if (entry.errorClass && entry.message) {
|
|
32
|
-
entries.push(entry);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return entries;
|
|
36
|
-
}
|
|
37
|
-
export function logError(projectDir, entry) {
|
|
38
|
-
const filePath = errorsPath(projectDir);
|
|
39
|
-
const errors = readErrors(projectDir);
|
|
40
|
-
const index = errors.length + 1;
|
|
41
|
-
const timestamp = new Date().toISOString();
|
|
42
|
-
const block = `
|
|
43
|
-
## Error ${index}
|
|
44
|
-
- **Timestamp:** ${timestamp}
|
|
45
|
-
- **Class:** ${entry.errorClass}
|
|
46
|
-
- **File:** ${entry.file}
|
|
47
|
-
- **Message:** ${entry.message}
|
|
48
|
-
- **Fix:** ${entry.attemptedFix}
|
|
49
|
-
`;
|
|
50
|
-
fs.appendFileSync(filePath, block, "utf-8");
|
|
51
|
-
}
|
|
52
|
-
export function logOutcome(projectDir, entryIndex, outcome) {
|
|
53
|
-
const filePath = errorsPath(projectDir);
|
|
54
|
-
if (!fs.existsSync(filePath))
|
|
55
|
-
return;
|
|
56
|
-
let content = fs.readFileSync(filePath, "utf-8");
|
|
57
|
-
const marker = `## Error ${entryIndex}`;
|
|
58
|
-
const idx = content.indexOf(marker);
|
|
59
|
-
if (idx === -1)
|
|
60
|
-
return;
|
|
61
|
-
// Find the next error block or end of file
|
|
62
|
-
const nextIdx = content.indexOf("\n## Error ", idx + marker.length);
|
|
63
|
-
const insertPos = nextIdx === -1 ? content.length : nextIdx;
|
|
64
|
-
content =
|
|
65
|
-
content.slice(0, insertPos).trimEnd() +
|
|
66
|
-
`\n- **Outcome:** ${outcome}\n` +
|
|
67
|
-
content.slice(insertPos);
|
|
68
|
-
fs.writeFileSync(filePath, content, "utf-8");
|
|
69
|
-
}
|
|
70
|
-
export function hasFailedAttempt(projectDir, errorClass, file, message) {
|
|
71
|
-
const errors = readErrors(projectDir);
|
|
72
|
-
return errors.some((e) => e.errorClass === errorClass &&
|
|
73
|
-
e.file === file &&
|
|
74
|
-
e.message === message &&
|
|
75
|
-
e.outcome !== "resolved");
|
|
76
|
-
}
|
|
77
|
-
export function consecutiveIdenticalFailures(projectDir) {
|
|
78
|
-
const errors = readErrors(projectDir);
|
|
79
|
-
if (errors.length < 2)
|
|
80
|
-
return false;
|
|
81
|
-
const last = errors[errors.length - 1];
|
|
82
|
-
const prev = errors[errors.length - 2];
|
|
83
|
-
return (last.errorClass === prev.errorClass &&
|
|
84
|
-
last.file === prev.file &&
|
|
85
|
-
last.message === prev.message &&
|
|
86
|
-
last.outcome !== "resolved" &&
|
|
87
|
-
prev.outcome !== "resolved");
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/working-memory/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface SessionState {
|
|
2
|
-
appName: string;
|
|
3
|
-
currentPhase: string;
|
|
4
|
-
currentTask: string;
|
|
5
|
-
buildStatus: string;
|
|
6
|
-
totalBuilds: number;
|
|
7
|
-
totalErrors: number;
|
|
8
|
-
escalations: number;
|
|
9
|
-
}
|
|
10
|
-
export declare function readSession(projectDir: string): Promise<SessionState>;
|
|
11
|
-
export declare function updateSession(projectDir: string, data: Partial<SessionState>): Promise<void>;
|
|
12
|
-
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/working-memory/session.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACnB;AAkBD,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAwC3E;AAED,wBAAsB,aAAa,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GACzB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const SESSION_FILE = "_agent/session.md";
|
|
4
|
-
const DEFAULTS = {
|
|
5
|
-
appName: "unknown",
|
|
6
|
-
currentPhase: "init",
|
|
7
|
-
currentTask: "none",
|
|
8
|
-
buildStatus: "pending",
|
|
9
|
-
totalBuilds: 0,
|
|
10
|
-
totalErrors: 0,
|
|
11
|
-
escalations: 0,
|
|
12
|
-
};
|
|
13
|
-
function sessionPath(projectDir) {
|
|
14
|
-
return path.join(projectDir, SESSION_FILE);
|
|
15
|
-
}
|
|
16
|
-
export async function readSession(projectDir) {
|
|
17
|
-
const filePath = sessionPath(projectDir);
|
|
18
|
-
if (!fs.existsSync(filePath))
|
|
19
|
-
return { ...DEFAULTS };
|
|
20
|
-
const content = fs.readFileSync(filePath, "utf-8");
|
|
21
|
-
const state = { ...DEFAULTS };
|
|
22
|
-
for (const line of content.split("\n")) {
|
|
23
|
-
const match = line.match(/^- \*\*(.+?):\*\*\s*(.+)$/);
|
|
24
|
-
if (match) {
|
|
25
|
-
const key = match[1];
|
|
26
|
-
const value = match[2].trim();
|
|
27
|
-
switch (key) {
|
|
28
|
-
case "App Name":
|
|
29
|
-
state.appName = value;
|
|
30
|
-
break;
|
|
31
|
-
case "Current Phase":
|
|
32
|
-
state.currentPhase = value;
|
|
33
|
-
break;
|
|
34
|
-
case "Current Task":
|
|
35
|
-
state.currentTask = value;
|
|
36
|
-
break;
|
|
37
|
-
case "Build Status":
|
|
38
|
-
state.buildStatus = value;
|
|
39
|
-
break;
|
|
40
|
-
case "Total Builds":
|
|
41
|
-
state.totalBuilds = parseInt(value, 10) || 0;
|
|
42
|
-
break;
|
|
43
|
-
case "Total Errors":
|
|
44
|
-
state.totalErrors = parseInt(value, 10) || 0;
|
|
45
|
-
break;
|
|
46
|
-
case "Escalations":
|
|
47
|
-
state.escalations = parseInt(value, 10) || 0;
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return state;
|
|
53
|
-
}
|
|
54
|
-
export async function updateSession(projectDir, data) {
|
|
55
|
-
const current = await readSession(projectDir);
|
|
56
|
-
const updated = { ...current, ...data };
|
|
57
|
-
const content = `# Session State
|
|
58
|
-
|
|
59
|
-
- **App Name:** ${updated.appName}
|
|
60
|
-
- **Current Phase:** ${updated.currentPhase}
|
|
61
|
-
- **Current Task:** ${updated.currentTask}
|
|
62
|
-
- **Build Status:** ${updated.buildStatus}
|
|
63
|
-
- **Total Builds:** ${updated.totalBuilds}
|
|
64
|
-
- **Total Errors:** ${updated.totalErrors}
|
|
65
|
-
- **Escalations:** ${updated.escalations}
|
|
66
|
-
`;
|
|
67
|
-
const filePath = sessionPath(projectDir);
|
|
68
|
-
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
69
|
-
fs.writeFileSync(filePath, content, "utf-8");
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/working-memory/session.ts"],"names":[],"mappings":"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"}
|