@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.
Files changed (94) hide show
  1. package/package.json +8 -3
  2. package/template/.claude/skills/create-app/SKILL.md +19 -4
  3. package/dist/agents/clarifier.d.ts +0 -16
  4. package/dist/agents/clarifier.d.ts.map +0 -1
  5. package/dist/agents/clarifier.js +0 -158
  6. package/dist/agents/clarifier.js.map +0 -1
  7. package/dist/agents/coder.d.ts +0 -14
  8. package/dist/agents/coder.d.ts.map +0 -1
  9. package/dist/agents/coder.js +0 -126
  10. package/dist/agents/coder.js.map +0 -1
  11. package/dist/agents/planner.d.ts +0 -6
  12. package/dist/agents/planner.d.ts.map +0 -1
  13. package/dist/agents/planner.js +0 -69
  14. package/dist/agents/planner.js.map +0 -1
  15. package/dist/agents/prompts.d.ts +0 -9
  16. package/dist/agents/prompts.d.ts.map +0 -1
  17. package/dist/agents/prompts.js +0 -231
  18. package/dist/agents/prompts.js.map +0 -1
  19. package/dist/cli/headless.d.ts +0 -9
  20. package/dist/cli/headless.d.ts.map +0 -1
  21. package/dist/cli/headless.js +0 -506
  22. package/dist/cli/headless.js.map +0 -1
  23. package/dist/engine/message-parser.d.ts +0 -8
  24. package/dist/engine/message-parser.d.ts.map +0 -1
  25. package/dist/engine/message-parser.js +0 -106
  26. package/dist/engine/message-parser.js.map +0 -1
  27. package/dist/engine/orchestrator.d.ts +0 -50
  28. package/dist/engine/orchestrator.d.ts.map +0 -1
  29. package/dist/engine/orchestrator.js +0 -492
  30. package/dist/engine/orchestrator.js.map +0 -1
  31. package/dist/engine/stdio-adapter.d.ts +0 -24
  32. package/dist/engine/stdio-adapter.d.ts.map +0 -1
  33. package/dist/engine/stdio-adapter.js +0 -139
  34. package/dist/engine/stdio-adapter.js.map +0 -1
  35. package/dist/engine/stream-adapter.d.ts +0 -45
  36. package/dist/engine/stream-adapter.d.ts.map +0 -1
  37. package/dist/engine/stream-adapter.js +0 -154
  38. package/dist/engine/stream-adapter.js.map +0 -1
  39. package/dist/hooks/block-bash.d.ts +0 -7
  40. package/dist/hooks/block-bash.d.ts.map +0 -1
  41. package/dist/hooks/block-bash.js +0 -15
  42. package/dist/hooks/block-bash.js.map +0 -1
  43. package/dist/hooks/dependency-guard.d.ts +0 -7
  44. package/dist/hooks/dependency-guard.d.ts.map +0 -1
  45. package/dist/hooks/dependency-guard.js +0 -43
  46. package/dist/hooks/dependency-guard.js.map +0 -1
  47. package/dist/hooks/guardrail-inject.d.ts +0 -17
  48. package/dist/hooks/guardrail-inject.d.ts.map +0 -1
  49. package/dist/hooks/guardrail-inject.js +0 -69
  50. package/dist/hooks/guardrail-inject.js.map +0 -1
  51. package/dist/hooks/import-validation.d.ts +0 -7
  52. package/dist/hooks/import-validation.d.ts.map +0 -1
  53. package/dist/hooks/import-validation.js +0 -192
  54. package/dist/hooks/import-validation.js.map +0 -1
  55. package/dist/hooks/index.d.ts +0 -15
  56. package/dist/hooks/index.d.ts.map +0 -1
  57. package/dist/hooks/index.js +0 -42
  58. package/dist/hooks/index.js.map +0 -1
  59. package/dist/hooks/migration-validation.d.ts +0 -9
  60. package/dist/hooks/migration-validation.d.ts.map +0 -1
  61. package/dist/hooks/migration-validation.js +0 -62
  62. package/dist/hooks/migration-validation.js.map +0 -1
  63. package/dist/hooks/schema-consistency.d.ts +0 -12
  64. package/dist/hooks/schema-consistency.d.ts.map +0 -1
  65. package/dist/hooks/schema-consistency.js +0 -72
  66. package/dist/hooks/schema-consistency.js.map +0 -1
  67. package/dist/hooks/write-protection.d.ts +0 -7
  68. package/dist/hooks/write-protection.d.ts.map +0 -1
  69. package/dist/hooks/write-protection.js +0 -33
  70. package/dist/hooks/write-protection.js.map +0 -1
  71. package/dist/progress/reporter.d.ts +0 -15
  72. package/dist/progress/reporter.d.ts.map +0 -1
  73. package/dist/progress/reporter.js +0 -133
  74. package/dist/progress/reporter.js.map +0 -1
  75. package/dist/tools/build.d.ts +0 -3
  76. package/dist/tools/build.d.ts.map +0 -1
  77. package/dist/tools/build.js +0 -84
  78. package/dist/tools/build.js.map +0 -1
  79. package/dist/tools/playbook.d.ts +0 -14
  80. package/dist/tools/playbook.d.ts.map +0 -1
  81. package/dist/tools/playbook.js +0 -239
  82. package/dist/tools/playbook.js.map +0 -1
  83. package/dist/tools/server.d.ts +0 -3
  84. package/dist/tools/server.d.ts.map +0 -1
  85. package/dist/tools/server.js +0 -13
  86. package/dist/tools/server.js.map +0 -1
  87. package/dist/working-memory/errors.d.ts +0 -14
  88. package/dist/working-memory/errors.d.ts.map +0 -1
  89. package/dist/working-memory/errors.js +0 -89
  90. package/dist/working-memory/errors.js.map +0 -1
  91. package/dist/working-memory/session.d.ts +0 -12
  92. package/dist/working-memory/session.d.ts.map +0 -1
  93. package/dist/working-memory/session.js +0 -71
  94. package/dist/working-memory/session.js.map +0 -1
@@ -1,50 +0,0 @@
1
- import type { EngineEvent } from "@electric-agent/protocol";
2
- export interface OrchestratorCallbacks {
3
- onEvent: (event: EngineEvent) => void | Promise<void>;
4
- onClarificationNeeded: (questions: string[], summary: string) => Promise<string[]>;
5
- onPlanReady: (plan: string) => Promise<"approve" | "revise" | "cancel">;
6
- onRevisionRequested: () => Promise<string>;
7
- onContinueNeeded: () => Promise<boolean>;
8
- }
9
- /**
10
- * Check if the target directory already exists. If so, append a random 4-char hex suffix.
11
- */
12
- export declare function resolveProjectDir(baseDir: string, name: string): {
13
- projectName: string;
14
- projectDir: string;
15
- };
16
- /**
17
- * Run the full "new project" flow.
18
- */
19
- export declare function runNew(opts: {
20
- description: string;
21
- projectName?: string;
22
- baseDir?: string;
23
- verbose?: boolean;
24
- autoApprove?: boolean;
25
- initGit?: boolean;
26
- callbacks: OrchestratorCallbacks;
27
- abortController?: AbortController;
28
- /** If provided, create a GitHub repo and push the scaffold before planning */
29
- gitRepoName?: string;
30
- gitRepoVisibility?: "public" | "private";
31
- }): Promise<{
32
- sessionId?: string;
33
- projectDir?: string;
34
- }>;
35
- /**
36
- * Run a single iteration on an existing project.
37
- */
38
- export declare function runIterate(opts: {
39
- projectDir: string;
40
- userRequest: string;
41
- verbose?: boolean;
42
- callbacks: OrchestratorCallbacks;
43
- abortController?: AbortController;
44
- resumeSessionId?: string;
45
- }): Promise<{
46
- success: boolean;
47
- errors: string[];
48
- sessionId?: string;
49
- }>;
50
- //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/engine/orchestrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAW3D,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAGrD,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAClF,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAA;IACvE,mBAAmB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACxC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACV;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAQ7C;AAuCD;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,qBAAqB,CAAA;IAChC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CACxC,GAAG,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyTvD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,qBAAqB,CAAA;IAChC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmFtE"}
@@ -1,492 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import crypto from "node:crypto";
3
- import fs from "node:fs";
4
- import path from "node:path";
5
- import { ts } from "@electric-agent/protocol";
6
- import { evaluateDescription, inferProjectName } from "../agents/clarifier.js";
7
- import { runCoder } from "../agents/coder.js";
8
- import { runPlanner } from "../agents/planner.js";
9
- import { createProgressReporter } from "../progress/reporter.js";
10
- import { scaffold } from "../scaffold/index.js";
11
- import { validatePlaybooks } from "../tools/playbook.js";
12
- import { updateSession } from "../working-memory/session.js";
13
- import { sdkMessageToEvents } from "./message-parser.js";
14
- /**
15
- * Check if the target directory already exists. If so, append a random 4-char hex suffix.
16
- */
17
- export function resolveProjectDir(baseDir, name) {
18
- const candidate = path.resolve(baseDir, name);
19
- if (!fs.existsSync(candidate)) {
20
- return { projectName: name, projectDir: candidate };
21
- }
22
- const suffix = crypto.randomBytes(2).toString("hex");
23
- const uniqueName = `${name}-${suffix}`;
24
- return { projectName: uniqueName, projectDir: path.resolve(baseDir, uniqueName) };
25
- }
26
- function buildEnhancedDescription(original, questions, answers) {
27
- let enhanced = original;
28
- if (questions.length > 0) {
29
- enhanced += "\n\nAdditional details:";
30
- for (let i = 0; i < questions.length; i++) {
31
- if (answers[i]) {
32
- enhanced += `\n- ${questions[i]} ${answers[i]}`;
33
- }
34
- }
35
- }
36
- // Extra free-text answer beyond the numbered questions
37
- const extra = answers[questions.length];
38
- if (extra) {
39
- enhanced += `\n\nExtra context from the user:\n${extra}`;
40
- }
41
- return enhanced;
42
- }
43
- /**
44
- * Create an onMessage callback that parses SDK messages into EngineEvents.
45
- */
46
- function createMessageForwarder(callbacks, agent) {
47
- return (msg) => {
48
- const events = sdkMessageToEvents(msg, agent);
49
- for (const event of events) {
50
- callbacks.onEvent(event);
51
- }
52
- };
53
- }
54
- /**
55
- * Run the full "new project" flow.
56
- */
57
- export async function runNew(opts) {
58
- const { callbacks } = opts;
59
- const emit = (event) => callbacks.onEvent(event);
60
- const reporter = createReporterFromCallbacks(callbacks, opts.verbose);
61
- // Step 0: Evaluate confidence, clarify if needed, and infer project name
62
- // Run evaluation and name inference in parallel to save time
63
- let description = opts.description;
64
- let inferredName = opts.projectName || "";
65
- emit({ type: "log", level: "plan", message: "Analyzing your description...", ts: ts() });
66
- try {
67
- // Run evaluation and name inference concurrently — both use the original description
68
- const [evaluation, earlyName] = await Promise.all([
69
- evaluateDescription(opts.description),
70
- inferredName || inferProjectName(opts.description),
71
- ]);
72
- if (!inferredName)
73
- inferredName = earlyName;
74
- if (evaluation.confidence < 70) {
75
- emit({
76
- type: "log",
77
- level: "plan",
78
- message: `Confidence: ${evaluation.confidence}% — need more details before planning`,
79
- ts: ts(),
80
- });
81
- emit({
82
- type: "clarification_needed",
83
- questions: evaluation.questions,
84
- confidence: evaluation.confidence,
85
- summary: evaluation.summary,
86
- ts: ts(),
87
- });
88
- const answers = await callbacks.onClarificationNeeded(evaluation.questions, evaluation.summary);
89
- description = buildEnhancedDescription(opts.description, evaluation.questions, answers);
90
- emit({
91
- type: "log",
92
- level: "plan",
93
- message: "Description enriched with your answers",
94
- ts: ts(),
95
- });
96
- }
97
- else {
98
- emit({
99
- type: "log",
100
- level: "plan",
101
- message: `Confidence: ${evaluation.confidence}% — description is clear`,
102
- ts: ts(),
103
- });
104
- }
105
- }
106
- catch {
107
- emit({ type: "log", level: "plan", message: "Skipping clarification step", ts: ts() });
108
- if (!inferredName)
109
- inferredName = await inferProjectName(description);
110
- }
111
- const baseDir = opts.baseDir || process.cwd();
112
- // When the caller provides an explicit projectName (e.g. server/sandbox),
113
- // use it as-is — no dedup suffix. A sprite has exactly one project, and
114
- // the server-sent name is used for the GitHub repo. Only add entropy
115
- // when the name was inferred and might collide on a developer's machine.
116
- const { projectName, projectDir } = opts.projectName
117
- ? { projectName: inferredName, projectDir: path.resolve(baseDir, inferredName) }
118
- : resolveProjectDir(baseDir, inferredName);
119
- emit({ type: "log", level: "plan", message: `Creating project: ${projectName}`, ts: ts() });
120
- emit({ type: "log", level: "plan", message: `Description: ${description}`, ts: ts() });
121
- // Step 1: Scaffold
122
- emit({
123
- type: "log",
124
- level: "task",
125
- message: "Scaffolding project from KPB template...",
126
- ts: ts(),
127
- });
128
- const skipGit = opts.initGit === false;
129
- const scaffoldResult = await scaffold(projectDir, { projectName, reporter, skipGit });
130
- if (scaffoldResult.errors.length > 0) {
131
- for (const err of scaffoldResult.errors) {
132
- emit({ type: "log", level: "error", message: err, ts: ts() });
133
- }
134
- }
135
- if (scaffoldResult.skippedInstall) {
136
- emit({
137
- type: "log",
138
- level: "error",
139
- message: "Dependency install failed. You may need to run 'pnpm install' manually.",
140
- ts: ts(),
141
- });
142
- }
143
- // Validate critical project structure before proceeding to planner/coder
144
- const pkgExists = fs.existsSync(path.join(projectDir, "package.json"));
145
- if (!pkgExists) {
146
- emit({
147
- type: "log",
148
- level: "error",
149
- message: "Critical: package.json missing after scaffold — cannot proceed",
150
- ts: ts(),
151
- });
152
- emit({
153
- type: "phase_complete",
154
- phase: "scaffold",
155
- success: false,
156
- errors: ["package.json missing after scaffold"],
157
- ts: ts(),
158
- });
159
- return { projectDir };
160
- }
161
- emit({ type: "log", level: "done", message: "Scaffold complete", ts: ts() });
162
- // Step 1b: Validate playbooks
163
- try {
164
- validatePlaybooks(projectDir);
165
- }
166
- catch (e) {
167
- emit({
168
- type: "log",
169
- level: "error",
170
- message: e instanceof Error ? e.message : "Playbook validation failed",
171
- ts: ts(),
172
- });
173
- emit({
174
- type: "phase_complete",
175
- phase: "scaffold",
176
- success: false,
177
- errors: ["Playbook validation failed"],
178
- ts: ts(),
179
- });
180
- return { projectDir };
181
- }
182
- // Step 1c: Create GitHub repo and push scaffold (if repo config provided)
183
- if (opts.gitRepoName) {
184
- emit({
185
- type: "log",
186
- level: "task",
187
- message: "Creating GitHub repo and pushing scaffold...",
188
- ts: ts(),
189
- });
190
- gitAutoCommit(projectDir, "chore: initial scaffold", emit);
191
- try {
192
- const vis = opts.gitRepoVisibility || "private";
193
- execSync(`gh repo create "${opts.gitRepoName}" --${vis} --source . --remote origin --push`, {
194
- cwd: projectDir,
195
- stdio: "pipe",
196
- timeout: 60_000,
197
- env: { ...process.env },
198
- });
199
- emit({
200
- type: "log",
201
- level: "done",
202
- message: `GitHub repo created: ${opts.gitRepoName} (${vis})`,
203
- ts: ts(),
204
- });
205
- }
206
- catch (err) {
207
- const msg = err instanceof Error ? err.message : "unknown error";
208
- emit({ type: "log", level: "error", message: `Repo creation failed: ${msg}`, ts: ts() });
209
- emit({ type: "session_end", success: false, ts: ts() });
210
- return { projectDir };
211
- }
212
- }
213
- // Step 2: Plan
214
- emit({ type: "log", level: "plan", message: "Running planner agent...", ts: ts() });
215
- const plannerForwarder = createMessageForwarder(callbacks, "planner");
216
- let plan = await runPlanner(description, projectDir, reporter, plannerForwarder, opts.abortController);
217
- // Step 3: Approve
218
- if (!opts.autoApprove) {
219
- emit({ type: "plan_ready", plan, ts: ts() });
220
- let decision = await callbacks.onPlanReady(plan);
221
- while (decision === "revise") {
222
- const feedback = await callbacks.onRevisionRequested();
223
- emit({
224
- type: "log",
225
- level: "plan",
226
- message: "Re-running planner with feedback...",
227
- ts: ts(),
228
- });
229
- plan = await runPlanner(`${description}\n\nRevision feedback: ${feedback}`, projectDir, reporter, plannerForwarder, opts.abortController);
230
- emit({ type: "plan_ready", plan, ts: ts() });
231
- decision = await callbacks.onPlanReady(plan);
232
- }
233
- if (decision === "cancel") {
234
- emit({ type: "log", level: "error", message: "Cancelled by user", ts: ts() });
235
- emit({
236
- type: "session_end",
237
- success: false,
238
- ts: ts(),
239
- });
240
- return { projectDir };
241
- }
242
- }
243
- // Step 4: Write plan and initialize session (parallel — independent operations)
244
- const fsPromises = await import("node:fs/promises");
245
- await Promise.all([
246
- fsPromises.writeFile(path.join(projectDir, "PLAN.md"), plan, "utf-8"),
247
- updateSession(projectDir, {
248
- appName: projectName,
249
- currentPhase: "generation",
250
- currentTask: "Starting code generation",
251
- buildStatus: "pending",
252
- totalBuilds: 0,
253
- totalErrors: 0,
254
- escalations: 0,
255
- }),
256
- ]);
257
- // Step 5: Run coder (with continuation on max turns / max budget)
258
- emit({ type: "log", level: "task", message: "Running coder agent...", ts: ts() });
259
- const coderForwarder = createMessageForwarder(callbacks, "coder");
260
- let result = await runCoder(projectDir, undefined, reporter, coderForwarder, undefined, opts.abortController);
261
- while (result.stopReason === "max_turns" || result.stopReason === "max_budget") {
262
- emit({
263
- type: "continue_needed",
264
- reason: result.stopReason,
265
- ts: ts(),
266
- });
267
- const shouldContinue = await callbacks.onContinueNeeded();
268
- if (!shouldContinue) {
269
- emit({
270
- type: "log",
271
- level: "done",
272
- message: "Stopped by user. Run 'electric-agent iterate' to continue later.",
273
- ts: ts(),
274
- });
275
- emit({ type: "session_end", success: true, ts: ts() });
276
- return { sessionId: result.sessionId, projectDir };
277
- }
278
- emit({ type: "log", level: "task", message: "Continuing coder agent...", ts: ts() });
279
- result = await runCoder(projectDir, "Continue where you left off. Keep working on the remaining unchecked tasks in PLAN.md.", reporter, coderForwarder, result.sessionId, opts.abortController);
280
- }
281
- if (result.success) {
282
- // Auto-commit after successful generation
283
- emit({ type: "log", level: "task", message: "Creating git commit...", ts: ts() });
284
- const commitResult = gitAutoCommit(projectDir, "feat: initial app generation", emit);
285
- if (commitResult) {
286
- emit({
287
- type: "git_checkpoint",
288
- commitHash: commitResult,
289
- message: "feat: initial app generation",
290
- ts: ts(),
291
- });
292
- // Push to remote if one exists (e.g. repo was created during scaffold)
293
- gitAutoPush(projectDir, emit);
294
- }
295
- emit({
296
- type: "log",
297
- level: "done",
298
- message: `Project ${projectName} created successfully!`,
299
- ts: ts(),
300
- });
301
- emit({ type: "log", level: "done", message: ` cd ${projectName}`, ts: ts() });
302
- emit({ type: "log", level: "done", message: " electric-agent up", ts: ts() });
303
- }
304
- else {
305
- emit({
306
- type: "log",
307
- level: "error",
308
- message: `Generation completed with errors: ${result.errors.join(", ")}`,
309
- ts: ts(),
310
- });
311
- emit({
312
- type: "log",
313
- level: "error",
314
- message: "Run 'electric-agent iterate' to continue fixing issues",
315
- ts: ts(),
316
- });
317
- }
318
- emit({
319
- type: "phase_complete",
320
- phase: "generation",
321
- success: result.success,
322
- errors: result.errors,
323
- ts: ts(),
324
- });
325
- emit({ type: "session_end", success: result.success, ts: ts() });
326
- return { sessionId: result.sessionId, projectDir };
327
- }
328
- /**
329
- * Run a single iteration on an existing project.
330
- */
331
- export async function runIterate(opts) {
332
- const { callbacks, projectDir, userRequest } = opts;
333
- const emit = (event) => callbacks.onEvent(event);
334
- const reporter = createReporterFromCallbacks(callbacks, opts.verbose);
335
- const messageForwarder = createMessageForwarder(callbacks, "coder");
336
- const iterationPrompt = `The user wants the following change to the existing app:
337
-
338
- ${userRequest}
339
-
340
- Instructions:
341
- 1. Consult ARCHITECTURE.md (injected into your context as <app-architecture>) to understand the app structure — do NOT scan the filesystem
342
- 2. Read PLAN.md to see what was built and previous iterations
343
- 3. Read "electric-app-guardrails" playbook FIRST for critical integration rules
344
- 4. Use list_playbooks to discover relevant skills, then read only what you need for this change
345
- 5. Add a new "## Iteration: ${userRequest.slice(0, 60)}" section to the bottom of PLAN.md with tasks for this change
346
- 6. Read ONLY the specific source files you need to modify (consult ARCHITECTURE.md for exact paths)
347
- 7. Implement the changes immediately — write the actual code, following the Drizzle Workflow order
348
- 8. If schema changes are needed, run drizzle-kit generate && drizzle-kit migrate
349
- 9. Mark tasks as done in PLAN.md after completing them
350
- 10. Update ARCHITECTURE.md to reflect any changes (new entities, routes, components, styles, or contexts)
351
- 11. Run the build tool ONCE after all changes are complete — not after each file
352
-
353
- Do NOT just write a plan — implement the changes directly.`;
354
- emit({ type: "log", level: "task", message: "Running coder with your request...", ts: ts() });
355
- let result = await runCoder(projectDir, iterationPrompt, reporter, messageForwarder, opts.resumeSessionId, opts.abortController);
356
- while (result.stopReason === "max_turns" || result.stopReason === "max_budget") {
357
- emit({ type: "continue_needed", reason: result.stopReason, ts: ts() });
358
- const shouldContinue = await callbacks.onContinueNeeded();
359
- if (!shouldContinue) {
360
- emit({
361
- type: "log",
362
- level: "done",
363
- message: "Paused. You can continue this work in the next iteration.",
364
- ts: ts(),
365
- });
366
- return { success: true, errors: [], sessionId: result.sessionId };
367
- }
368
- emit({ type: "log", level: "task", message: "Continuing coder agent...", ts: ts() });
369
- result = await runCoder(projectDir, "Continue where you left off. Keep implementing the remaining changes.", reporter, messageForwarder, result.sessionId, opts.abortController);
370
- }
371
- if (result.success) {
372
- // Auto-commit after successful iteration
373
- emit({ type: "log", level: "task", message: "Creating git commit...", ts: ts() });
374
- const commitMsg = `feat: ${userRequest.slice(0, 70)}`;
375
- const commitResult = gitAutoCommit(projectDir, commitMsg, emit);
376
- if (commitResult) {
377
- emit({
378
- type: "git_checkpoint",
379
- commitHash: commitResult,
380
- message: commitMsg,
381
- ts: ts(),
382
- });
383
- }
384
- emit({ type: "log", level: "done", message: "Changes applied successfully", ts: ts() });
385
- }
386
- else {
387
- emit({
388
- type: "log",
389
- level: "error",
390
- message: `Issues: ${result.errors.join(", ")}`,
391
- ts: ts(),
392
- });
393
- }
394
- return { success: result.success, errors: result.errors, sessionId: result.sessionId };
395
- }
396
- /**
397
- * Stage all changes and commit. Returns the commit hash, or null if there were no changes.
398
- */
399
- function gitAutoCommit(projectDir, message, emit) {
400
- // Check for .git directory before attempting git operations
401
- if (!fs.existsSync(path.join(projectDir, ".git"))) {
402
- emit({
403
- type: "log",
404
- level: "error",
405
- message: "Skipping git commit — no .git directory found (git init may have failed during scaffold)",
406
- ts: ts(),
407
- });
408
- return null;
409
- }
410
- try {
411
- execSync("git add -A", { cwd: projectDir, stdio: "pipe" });
412
- try {
413
- execSync("git diff --cached --quiet", { cwd: projectDir, stdio: "pipe" });
414
- emit({ type: "log", level: "done", message: "No changes to commit", ts: ts() });
415
- return null;
416
- }
417
- catch {
418
- // There are staged changes — proceed
419
- }
420
- const safeMsg = message.replace(/"/g, '\\"');
421
- execSync(`git commit -m "${safeMsg}"`, { cwd: projectDir, stdio: "pipe" });
422
- const hash = execSync("git rev-parse HEAD", {
423
- cwd: projectDir,
424
- encoding: "utf-8",
425
- stdio: "pipe",
426
- }).trim();
427
- emit({ type: "log", level: "done", message: `Committed: ${message}`, ts: ts() });
428
- return hash;
429
- }
430
- catch (err) {
431
- const msg = err instanceof Error ? err.message : "unknown error";
432
- emit({ type: "log", level: "error", message: `Git commit failed: ${msg}`, ts: ts() });
433
- return null;
434
- }
435
- }
436
- /**
437
- * Push to remote origin if configured. Silently skips if no remote exists.
438
- */
439
- function gitAutoPush(projectDir, emit) {
440
- try {
441
- // Check if a remote origin exists
442
- const remote = execSync("git remote get-url origin", {
443
- cwd: projectDir,
444
- encoding: "utf-8",
445
- stdio: "pipe",
446
- }).trim();
447
- if (!remote) {
448
- emit({
449
- type: "log",
450
- level: "verbose",
451
- message: "No remote configured — skipping push",
452
- ts: ts(),
453
- });
454
- return;
455
- }
456
- const branch = execSync("git branch --show-current", {
457
- cwd: projectDir,
458
- encoding: "utf-8",
459
- stdio: "pipe",
460
- }).trim();
461
- emit({ type: "log", level: "task", message: `Pushing to origin/${branch}...`, ts: ts() });
462
- const pushOutput = execSync(`git push -u origin ${branch} 2>&1`, {
463
- cwd: projectDir,
464
- encoding: "utf-8",
465
- timeout: 60_000,
466
- env: { ...process.env },
467
- }).trim();
468
- if (pushOutput) {
469
- emit({ type: "log", level: "verbose", message: pushOutput, ts: ts() });
470
- }
471
- emit({ type: "log", level: "done", message: `Pushed to origin/${branch}`, ts: ts() });
472
- }
473
- catch (err) {
474
- const detail = err?.stderr ||
475
- err?.stdout ||
476
- (err instanceof Error ? err.message : "Push failed");
477
- emit({
478
- type: "log",
479
- level: "error",
480
- message: `Git push failed: ${detail}`,
481
- ts: ts(),
482
- });
483
- }
484
- }
485
- /**
486
- * Create a ProgressReporter that works for both CLI and web by forwarding to the engine callback.
487
- * The reporter is used by scaffold and other components that need it directly.
488
- */
489
- function createReporterFromCallbacks(_callbacks, verbose) {
490
- return createProgressReporter({ verbose });
491
- }
492
- //# sourceMappingURL=orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/engine/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Headless adapter that communicates via stdin/stdout NDJSON.
3
- *
4
- * Each line is a JSON object terminated by `\n`.
5
- *
6
- * Server → Agent (stdin):
7
- * { type: "command", command: "new", description: "...", ... }
8
- * { type: "gate_response", gate: "approval", decision: "approve" }
9
- *
10
- * Agent → Server (stdout):
11
- * { type: "log", level: "task", message: "...", ts: "..." }
12
- * { type: "session_end", success: true, ts: "..." }
13
- *
14
- * Stderr is used for non-protocol diagnostics only.
15
- */
16
- import type { OrchestratorCallbacks } from "./orchestrator.js";
17
- import type { HeadlessConfig } from "./stream-adapter.js";
18
- export declare function createStdioAdapter(): {
19
- readConfig: () => Promise<HeadlessConfig>;
20
- waitForCommand: () => Promise<HeadlessConfig>;
21
- callbacks: OrchestratorCallbacks;
22
- close: () => void;
23
- };
24
- //# sourceMappingURL=stdio-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stdio-adapter.d.ts","sourceRoot":"","sources":["../../src/engine/stdio-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,wBAAgB,kBAAkB;sBAgFV,OAAO,CAAC,cAAc,CAAC;0BASnB,OAAO,CAAC,cAAc,CAAC;;iBAqChC,IAAI;EAWtB"}