@brad-frost-web/eddie-brain 0.32.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 (239) hide show
  1. package/README.md +109 -0
  2. package/dist/analyze/drift-detector.d.ts +30 -0
  3. package/dist/analyze/drift-detector.d.ts.map +1 -0
  4. package/dist/analyze/drift-detector.js +310 -0
  5. package/dist/analyze/drift-detector.js.map +1 -0
  6. package/dist/analyze/health-scorer.d.ts +71 -0
  7. package/dist/analyze/health-scorer.d.ts.map +1 -0
  8. package/dist/analyze/health-scorer.js +420 -0
  9. package/dist/analyze/health-scorer.js.map +1 -0
  10. package/dist/analyze/index.d.ts +11 -0
  11. package/dist/analyze/index.d.ts.map +1 -0
  12. package/dist/analyze/index.js +11 -0
  13. package/dist/analyze/index.js.map +1 -0
  14. package/dist/analyze/naming-validator.d.ts +99 -0
  15. package/dist/analyze/naming-validator.d.ts.map +1 -0
  16. package/dist/analyze/naming-validator.js +430 -0
  17. package/dist/analyze/naming-validator.js.map +1 -0
  18. package/dist/analyze/slot-contract-validator.d.ts +68 -0
  19. package/dist/analyze/slot-contract-validator.d.ts.map +1 -0
  20. package/dist/analyze/slot-contract-validator.js +232 -0
  21. package/dist/analyze/slot-contract-validator.js.map +1 -0
  22. package/dist/analyze/token-validator.d.ts +62 -0
  23. package/dist/analyze/token-validator.d.ts.map +1 -0
  24. package/dist/analyze/token-validator.js +348 -0
  25. package/dist/analyze/token-validator.js.map +1 -0
  26. package/dist/cli/brain.d.ts +12 -0
  27. package/dist/cli/brain.d.ts.map +1 -0
  28. package/dist/cli/brain.js +641 -0
  29. package/dist/cli/brain.js.map +1 -0
  30. package/dist/cli/formatters/json.d.ts +15 -0
  31. package/dist/cli/formatters/json.d.ts.map +1 -0
  32. package/dist/cli/formatters/json.js +18 -0
  33. package/dist/cli/formatters/json.js.map +1 -0
  34. package/dist/cli/formatters/terminal.d.ts +19 -0
  35. package/dist/cli/formatters/terminal.d.ts.map +1 -0
  36. package/dist/cli/formatters/terminal.js +125 -0
  37. package/dist/cli/formatters/terminal.js.map +1 -0
  38. package/dist/cli/index.d.ts +7 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +7 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/data/governance-rules.json +94 -0
  43. package/dist/governance/audit-log.d.ts +17 -0
  44. package/dist/governance/audit-log.d.ts.map +1 -0
  45. package/dist/governance/audit-log.js +44 -0
  46. package/dist/governance/audit-log.js.map +1 -0
  47. package/dist/governance/index.d.ts +8 -0
  48. package/dist/governance/index.d.ts.map +1 -0
  49. package/dist/governance/index.js +8 -0
  50. package/dist/governance/index.js.map +1 -0
  51. package/dist/governance/permissions.d.ts +26 -0
  52. package/dist/governance/permissions.d.ts.map +1 -0
  53. package/dist/governance/permissions.js +75 -0
  54. package/dist/governance/permissions.js.map +1 -0
  55. package/dist/governance/rules-engine.d.ts +24 -0
  56. package/dist/governance/rules-engine.d.ts.map +1 -0
  57. package/dist/governance/rules-engine.js +111 -0
  58. package/dist/governance/rules-engine.js.map +1 -0
  59. package/dist/governance/trust-manager.d.ts +34 -0
  60. package/dist/governance/trust-manager.d.ts.map +1 -0
  61. package/dist/governance/trust-manager.js +148 -0
  62. package/dist/governance/trust-manager.js.map +1 -0
  63. package/dist/index.d.ts +23 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +28 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/knowledge-graph/component-index.d.ts +320 -0
  68. package/dist/knowledge-graph/component-index.d.ts.map +1 -0
  69. package/dist/knowledge-graph/component-index.js +1033 -0
  70. package/dist/knowledge-graph/component-index.js.map +1 -0
  71. package/dist/knowledge-graph/index.d.ts +134 -0
  72. package/dist/knowledge-graph/index.d.ts.map +1 -0
  73. package/dist/knowledge-graph/index.js +249 -0
  74. package/dist/knowledge-graph/index.js.map +1 -0
  75. package/dist/knowledge-graph/learning-history.d.ts +77 -0
  76. package/dist/knowledge-graph/learning-history.d.ts.map +1 -0
  77. package/dist/knowledge-graph/learning-history.js +187 -0
  78. package/dist/knowledge-graph/learning-history.js.map +1 -0
  79. package/dist/knowledge-graph/relationship-map.d.ts +55 -0
  80. package/dist/knowledge-graph/relationship-map.d.ts.map +1 -0
  81. package/dist/knowledge-graph/relationship-map.js +238 -0
  82. package/dist/knowledge-graph/relationship-map.js.map +1 -0
  83. package/dist/knowledge-graph/token-taxonomy.d.ts +127 -0
  84. package/dist/knowledge-graph/token-taxonomy.d.ts.map +1 -0
  85. package/dist/knowledge-graph/token-taxonomy.js +357 -0
  86. package/dist/knowledge-graph/token-taxonomy.js.map +1 -0
  87. package/dist/loop/fix-agent.d.ts +55 -0
  88. package/dist/loop/fix-agent.d.ts.map +1 -0
  89. package/dist/loop/fix-agent.js +344 -0
  90. package/dist/loop/fix-agent.js.map +1 -0
  91. package/dist/loop/index.d.ts +8 -0
  92. package/dist/loop/index.d.ts.map +1 -0
  93. package/dist/loop/index.js +8 -0
  94. package/dist/loop/index.js.map +1 -0
  95. package/dist/loop/issue-fetcher.d.ts +51 -0
  96. package/dist/loop/issue-fetcher.d.ts.map +1 -0
  97. package/dist/loop/issue-fetcher.js +188 -0
  98. package/dist/loop/issue-fetcher.js.map +1 -0
  99. package/dist/loop/observer.d.ts +42 -0
  100. package/dist/loop/observer.d.ts.map +1 -0
  101. package/dist/loop/observer.js +220 -0
  102. package/dist/loop/observer.js.map +1 -0
  103. package/dist/loop/pacer.d.ts +44 -0
  104. package/dist/loop/pacer.d.ts.map +1 -0
  105. package/dist/loop/pacer.js +90 -0
  106. package/dist/loop/pacer.js.map +1 -0
  107. package/dist/loop/reporter.d.ts +9 -0
  108. package/dist/loop/reporter.d.ts.map +1 -0
  109. package/dist/loop/reporter.js +119 -0
  110. package/dist/loop/reporter.js.map +1 -0
  111. package/dist/loop/runner.d.ts +57 -0
  112. package/dist/loop/runner.d.ts.map +1 -0
  113. package/dist/loop/runner.js +390 -0
  114. package/dist/loop/runner.js.map +1 -0
  115. package/dist/loop/types.d.ts +151 -0
  116. package/dist/loop/types.d.ts.map +1 -0
  117. package/dist/loop/types.js +22 -0
  118. package/dist/loop/types.js.map +1 -0
  119. package/dist/mcp/index.d.ts +7 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +7 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/server.d.ts +12 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +618 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/pipeline/agent-runner.d.ts +34 -0
  128. package/dist/pipeline/agent-runner.d.ts.map +1 -0
  129. package/dist/pipeline/agent-runner.js +323 -0
  130. package/dist/pipeline/agent-runner.js.map +1 -0
  131. package/dist/pipeline/agents/accessibility-auditor.d.ts +10 -0
  132. package/dist/pipeline/agents/accessibility-auditor.d.ts.map +1 -0
  133. package/dist/pipeline/agents/accessibility-auditor.js +69 -0
  134. package/dist/pipeline/agents/accessibility-auditor.js.map +1 -0
  135. package/dist/pipeline/agents/code-reviewer.d.ts +10 -0
  136. package/dist/pipeline/agents/code-reviewer.d.ts.map +1 -0
  137. package/dist/pipeline/agents/code-reviewer.js +75 -0
  138. package/dist/pipeline/agents/code-reviewer.js.map +1 -0
  139. package/dist/pipeline/agents/code-writer.d.ts +10 -0
  140. package/dist/pipeline/agents/code-writer.d.ts.map +1 -0
  141. package/dist/pipeline/agents/code-writer.js +103 -0
  142. package/dist/pipeline/agents/code-writer.js.map +1 -0
  143. package/dist/pipeline/agents/component-architect.d.ts +13 -0
  144. package/dist/pipeline/agents/component-architect.d.ts.map +1 -0
  145. package/dist/pipeline/agents/component-architect.js +81 -0
  146. package/dist/pipeline/agents/component-architect.js.map +1 -0
  147. package/dist/pipeline/agents/index.d.ts +16 -0
  148. package/dist/pipeline/agents/index.d.ts.map +1 -0
  149. package/dist/pipeline/agents/index.js +24 -0
  150. package/dist/pipeline/agents/index.js.map +1 -0
  151. package/dist/pipeline/agents/library-researcher.d.ts +12 -0
  152. package/dist/pipeline/agents/library-researcher.d.ts.map +1 -0
  153. package/dist/pipeline/agents/library-researcher.js +85 -0
  154. package/dist/pipeline/agents/library-researcher.js.map +1 -0
  155. package/dist/pipeline/agents/quality-gate.d.ts +9 -0
  156. package/dist/pipeline/agents/quality-gate.d.ts.map +1 -0
  157. package/dist/pipeline/agents/quality-gate.js +71 -0
  158. package/dist/pipeline/agents/quality-gate.js.map +1 -0
  159. package/dist/pipeline/agents/spec-analyst.d.ts +10 -0
  160. package/dist/pipeline/agents/spec-analyst.d.ts.map +1 -0
  161. package/dist/pipeline/agents/spec-analyst.js +72 -0
  162. package/dist/pipeline/agents/spec-analyst.js.map +1 -0
  163. package/dist/pipeline/agents/story-author.d.ts +9 -0
  164. package/dist/pipeline/agents/story-author.d.ts.map +1 -0
  165. package/dist/pipeline/agents/story-author.js +65 -0
  166. package/dist/pipeline/agents/story-author.js.map +1 -0
  167. package/dist/pipeline/artifact-store.d.ts +27 -0
  168. package/dist/pipeline/artifact-store.d.ts.map +1 -0
  169. package/dist/pipeline/artifact-store.js +77 -0
  170. package/dist/pipeline/artifact-store.js.map +1 -0
  171. package/dist/pipeline/conversational-gate.d.ts +26 -0
  172. package/dist/pipeline/conversational-gate.d.ts.map +1 -0
  173. package/dist/pipeline/conversational-gate.js +122 -0
  174. package/dist/pipeline/conversational-gate.js.map +1 -0
  175. package/dist/pipeline/index.d.ts +14 -0
  176. package/dist/pipeline/index.d.ts.map +1 -0
  177. package/dist/pipeline/index.js +17 -0
  178. package/dist/pipeline/index.js.map +1 -0
  179. package/dist/pipeline/iteration-tracker.d.ts +29 -0
  180. package/dist/pipeline/iteration-tracker.d.ts.map +1 -0
  181. package/dist/pipeline/iteration-tracker.js +102 -0
  182. package/dist/pipeline/iteration-tracker.js.map +1 -0
  183. package/dist/pipeline/learning-bridge.d.ts +37 -0
  184. package/dist/pipeline/learning-bridge.d.ts.map +1 -0
  185. package/dist/pipeline/learning-bridge.js +118 -0
  186. package/dist/pipeline/learning-bridge.js.map +1 -0
  187. package/dist/pipeline/orchestrator.d.ts +45 -0
  188. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  189. package/dist/pipeline/orchestrator.js +473 -0
  190. package/dist/pipeline/orchestrator.js.map +1 -0
  191. package/dist/pipeline/templates/architecture.d.ts +27 -0
  192. package/dist/pipeline/templates/architecture.d.ts.map +1 -0
  193. package/dist/pipeline/templates/architecture.js +111 -0
  194. package/dist/pipeline/templates/architecture.js.map +1 -0
  195. package/dist/pipeline/templates/brief.d.ts +22 -0
  196. package/dist/pipeline/templates/brief.d.ts.map +1 -0
  197. package/dist/pipeline/templates/brief.js +121 -0
  198. package/dist/pipeline/templates/brief.js.map +1 -0
  199. package/dist/pipeline/templates/component-rules.d.ts +25 -0
  200. package/dist/pipeline/templates/component-rules.d.ts.map +1 -0
  201. package/dist/pipeline/templates/component-rules.js +93 -0
  202. package/dist/pipeline/templates/component-rules.js.map +1 -0
  203. package/dist/pipeline/templates/index.d.ts +9 -0
  204. package/dist/pipeline/templates/index.d.ts.map +1 -0
  205. package/dist/pipeline/templates/index.js +7 -0
  206. package/dist/pipeline/templates/index.js.map +1 -0
  207. package/dist/pipeline/tool-handler.d.ts +25 -0
  208. package/dist/pipeline/tool-handler.d.ts.map +1 -0
  209. package/dist/pipeline/tool-handler.js +392 -0
  210. package/dist/pipeline/tool-handler.js.map +1 -0
  211. package/dist/pipeline/types.d.ts +146 -0
  212. package/dist/pipeline/types.d.ts.map +1 -0
  213. package/dist/pipeline/types.js +27 -0
  214. package/dist/pipeline/types.js.map +1 -0
  215. package/dist/plan/action-types.d.ts +31 -0
  216. package/dist/plan/action-types.d.ts.map +1 -0
  217. package/dist/plan/action-types.js +83 -0
  218. package/dist/plan/action-types.js.map +1 -0
  219. package/dist/plan/decision-engine.d.ts +57 -0
  220. package/dist/plan/decision-engine.d.ts.map +1 -0
  221. package/dist/plan/decision-engine.js +162 -0
  222. package/dist/plan/decision-engine.js.map +1 -0
  223. package/dist/plan/index.d.ts +6 -0
  224. package/dist/plan/index.d.ts.map +1 -0
  225. package/dist/plan/index.js +6 -0
  226. package/dist/plan/index.js.map +1 -0
  227. package/dist/types.d.ts +351 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +26 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/utils/anthropic.d.ts +15 -0
  232. package/dist/utils/anthropic.d.ts.map +1 -0
  233. package/dist/utils/anthropic.js +40 -0
  234. package/dist/utils/anthropic.js.map +1 -0
  235. package/dist/utils/id.d.ts +8 -0
  236. package/dist/utils/id.d.ts.map +1 -0
  237. package/dist/utils/id.js +14 -0
  238. package/dist/utils/id.js.map +1 -0
  239. package/package.json +80 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * PipelineOrchestrator — Sequential pipeline runner
3
+ *
4
+ * Sequences 8 agents through three phases (UNDERSTAND → BUILD → VERIFY),
5
+ * manages artifact handoffs, enforces iteration budgets, handles the
6
+ * conversational gate, and persists state to disk for resumability.
7
+ */
8
+ import type { KnowledgeGraph } from '../knowledge-graph/index.js';
9
+ import type { PipelineConfig, PipelineState } from './types.js';
10
+ export declare class PipelineOrchestrator {
11
+ private config;
12
+ private knowledgeGraph;
13
+ private store;
14
+ private learningBridge;
15
+ constructor(config: PipelineConfig, knowledgeGraph: KnowledgeGraph);
16
+ /**
17
+ * Load code guidelines and docs into the artifact store as context.
18
+ */
19
+ private loadCodeContext;
20
+ /**
21
+ * If an existing component matches componentName, load its source files
22
+ * as input artifacts so agents can modify rather than rewrite.
23
+ */
24
+ private loadExistingComponent;
25
+ /**
26
+ * Run the full pipeline from a text brief.
27
+ */
28
+ run(brief: string, componentName: string): Promise<PipelineState>;
29
+ /**
30
+ * Resume a pipeline paused at a conversational gate.
31
+ */
32
+ resume(stateId: string, gateDecision?: {
33
+ approved: boolean;
34
+ modifications?: string;
35
+ }): Promise<PipelineState>;
36
+ /** Create the initial pipeline state */
37
+ private createInitialState;
38
+ /** Save pipeline state to disk */
39
+ private saveState;
40
+ /** Load pipeline state from disk */
41
+ private loadState;
42
+ /** Write final output files to the output directory */
43
+ private writeOutputFiles;
44
+ }
45
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/pipeline/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAIV,cAAc,EACd,aAAa,EAEd,MAAM,YAAY,CAAC;AAYpB,qBAAa,oBAAoB;IAK7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IALxB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,cAAc,CAAiB;gBAG7B,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,cAAc;IAMxC;;OAEG;YACW,eAAe;IAgC7B;;;OAGG;YACW,qBAAqB;IAuFnC;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0MvE;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3D,OAAO,CAAC,aAAa,CAAC;IAgGzB,wCAAwC;IACxC,OAAO,CAAC,kBAAkB;IA8B1B,kCAAkC;YACpB,SAAS;IAWvB,oCAAoC;YACtB,SAAS;IAWvB,uDAAuD;YACzC,gBAAgB;CA0B/B"}
@@ -0,0 +1,473 @@
1
+ /**
2
+ * PipelineOrchestrator — Sequential pipeline runner
3
+ *
4
+ * Sequences 8 agents through three phases (UNDERSTAND → BUILD → VERIFY),
5
+ * manages artifact handoffs, enforces iteration budgets, handles the
6
+ * conversational gate, and persists state to disk for resumability.
7
+ */
8
+ import { randomUUID } from 'crypto';
9
+ import { writeFile, readFile, mkdir } from 'fs/promises';
10
+ import { join } from 'path';
11
+ import { existsSync, readFileSync } from 'fs';
12
+ import chalk from 'chalk';
13
+ import fg from 'fast-glob';
14
+ const { glob } = fg;
15
+ import { PIPELINE_AGENT_ORDER } from './types.js';
16
+ import { ArtifactStore } from './artifact-store.js';
17
+ import { IterationTracker } from './iteration-tracker.js';
18
+ import { presentGate, parsePushBacks } from './conversational-gate.js';
19
+ import { LearningBridge } from './learning-bridge.js';
20
+ import { AGENT_CONFIGS } from './agents/index.js';
21
+ import { runAgent } from './agent-runner.js';
22
+ /** Directory for pipeline state persistence */
23
+ const PIPELINES_DIR = 'pipelines';
24
+ export class PipelineOrchestrator {
25
+ config;
26
+ knowledgeGraph;
27
+ store;
28
+ learningBridge;
29
+ constructor(config, knowledgeGraph) {
30
+ this.config = config;
31
+ this.knowledgeGraph = knowledgeGraph;
32
+ this.store = new ArtifactStore();
33
+ this.learningBridge = new LearningBridge(knowledgeGraph.learningHistory);
34
+ }
35
+ /**
36
+ * Load code guidelines and docs into the artifact store as context.
37
+ */
38
+ async loadCodeContext() {
39
+ const rootDir = this.config.rootDir;
40
+ // Load CODE_GUIDELINES.md
41
+ const guidelinesPath = join(rootDir, 'docs/CODE_GUIDELINES.md');
42
+ if (existsSync(guidelinesPath)) {
43
+ const content = readFileSync(guidelinesPath, 'utf-8');
44
+ this.store.set({
45
+ name: 'code-guidelines.md',
46
+ content,
47
+ producedBy: 'spec-analyst', // placeholder
48
+ timestamp: new Date().toISOString(),
49
+ version: 1,
50
+ });
51
+ }
52
+ // Load other docs
53
+ for (const docFile of ['TOKENS.md', 'THEMING.md']) {
54
+ const docPath = join(rootDir, 'docs', docFile);
55
+ if (existsSync(docPath)) {
56
+ const content = readFileSync(docPath, 'utf-8');
57
+ this.store.set({
58
+ name: `docs-${docFile.toLowerCase()}`,
59
+ content,
60
+ producedBy: 'spec-analyst',
61
+ timestamp: new Date().toISOString(),
62
+ version: 1,
63
+ });
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * If an existing component matches componentName, load its source files
69
+ * as input artifacts so agents can modify rather than rewrite.
70
+ */
71
+ async loadExistingComponent(componentName) {
72
+ const rootDir = this.config.rootDir;
73
+ const shortName = componentName.replace(/^ed-/, '');
74
+ // Search in eddie-web-components and eddie-recipes
75
+ const searchPaths = [
76
+ join(rootDir, 'packages/eddie-web-components/components', shortName),
77
+ join(rootDir, 'packages/eddie-recipes/recipes'),
78
+ ];
79
+ for (const searchPath of searchPaths) {
80
+ const tsPath = join(searchPath, `${shortName}.ts`);
81
+ if (existsSync(tsPath)) {
82
+ console.log(chalk.cyan(` Loading existing component from ${searchPath}`));
83
+ // Load .ts
84
+ this.store.set({
85
+ name: 'existing-component.ts',
86
+ content: readFileSync(tsPath, 'utf-8'),
87
+ producedBy: 'spec-analyst',
88
+ timestamp: new Date().toISOString(),
89
+ version: 1,
90
+ });
91
+ // Load .scss
92
+ const scssPath = join(searchPath, `${shortName}.scss`);
93
+ if (existsSync(scssPath)) {
94
+ this.store.set({
95
+ name: 'existing-component.scss',
96
+ content: readFileSync(scssPath, 'utf-8'),
97
+ producedBy: 'spec-analyst',
98
+ timestamp: new Date().toISOString(),
99
+ version: 1,
100
+ });
101
+ }
102
+ // Load .stories.ts
103
+ const storiesPath = join(searchPath, `${shortName}.stories.ts`);
104
+ if (existsSync(storiesPath)) {
105
+ this.store.set({
106
+ name: 'existing-component.stories.ts',
107
+ content: readFileSync(storiesPath, 'utf-8'),
108
+ producedBy: 'spec-analyst',
109
+ timestamp: new Date().toISOString(),
110
+ version: 1,
111
+ });
112
+ }
113
+ return true;
114
+ }
115
+ }
116
+ // Also load a reference component (button) for new components to follow as an example
117
+ const buttonPath = join(rootDir, 'packages/eddie-web-components/components/button/button.ts');
118
+ if (existsSync(buttonPath)) {
119
+ this.store.set({
120
+ name: 'reference-component.ts',
121
+ content: readFileSync(buttonPath, 'utf-8'),
122
+ producedBy: 'spec-analyst',
123
+ timestamp: new Date().toISOString(),
124
+ version: 1,
125
+ });
126
+ const buttonScss = join(rootDir, 'packages/eddie-web-components/components/button/button.scss');
127
+ if (existsSync(buttonScss)) {
128
+ this.store.set({
129
+ name: 'reference-component.scss',
130
+ content: readFileSync(buttonScss, 'utf-8'),
131
+ producedBy: 'spec-analyst',
132
+ timestamp: new Date().toISOString(),
133
+ version: 1,
134
+ });
135
+ }
136
+ const buttonStories = join(rootDir, 'packages/eddie-web-components/components/button/button.stories.ts');
137
+ if (existsSync(buttonStories)) {
138
+ this.store.set({
139
+ name: 'reference-component.stories.ts',
140
+ content: readFileSync(buttonStories, 'utf-8'),
141
+ producedBy: 'spec-analyst',
142
+ timestamp: new Date().toISOString(),
143
+ version: 1,
144
+ });
145
+ }
146
+ }
147
+ return false;
148
+ }
149
+ /**
150
+ * Run the full pipeline from a text brief.
151
+ */
152
+ async run(brief, componentName) {
153
+ const state = this.createInitialState(brief, componentName);
154
+ console.log(chalk.magenta.bold('\n🧠 Eddie Component Pipeline\n'));
155
+ console.log(chalk.gray(` Component: ${componentName}`));
156
+ console.log(chalk.gray(` Pipeline ID: ${state.id}`));
157
+ console.log(chalk.gray(` Model: ${this.config.model}\n`));
158
+ // Pre-load code guidelines and docs
159
+ await this.loadCodeContext();
160
+ // Check if this is a modification to an existing component
161
+ const isModification = await this.loadExistingComponent(componentName);
162
+ if (isModification) {
163
+ console.log(chalk.cyan(` Mode: Modify existing component\n`));
164
+ }
165
+ else {
166
+ console.log(chalk.cyan(` Mode: Create new component\n`));
167
+ }
168
+ try {
169
+ for (const agentId of PIPELINE_AGENT_ORDER) {
170
+ const agentConfig = AGENT_CONFIGS[agentId];
171
+ const agentState = state.agents[agentId];
172
+ // Update state
173
+ state.currentAgent = agentId;
174
+ state.currentPhase = agentConfig.phase;
175
+ agentState.status = 'running';
176
+ agentState.startedAt = new Date().toISOString();
177
+ const phaseName = agentConfig.phase.toUpperCase();
178
+ console.log(chalk.bold(`\n[${phaseName}] ${agentConfig.name}`));
179
+ console.log(chalk.gray('─'.repeat(60)));
180
+ // Determine the user message for this agent
181
+ const isExisting = this.store.has('existing-component.ts');
182
+ const userMessage = agentId === 'spec-analyst'
183
+ ? `Create a component brief for: ${brief}\n\nComponent name: ${componentName}` +
184
+ (isExisting ? '\n\nIMPORTANT: This is a MODIFICATION to an existing component. The existing source code is provided. Make targeted changes only — do not rewrite from scratch.' : '')
185
+ : `Process the component: ${componentName}` +
186
+ (isExisting ? '\n\nIMPORTANT: This is a MODIFICATION to an existing component. The existing source code is provided. Preserve the existing code structure, imports, patterns, and conventions. Make only the minimal changes needed.' : '');
187
+ // Run with iteration support
188
+ const maxIterations = this.config.iterationBudgets?.[agentId] ?? agentConfig.maxIterations;
189
+ const tracker = new IterationTracker(maxIterations, this.config.diminishingReturnsThreshold);
190
+ let lastResult = await runAgent(agentConfig, this.store, this.knowledgeGraph, this.config, userMessage);
191
+ if (lastResult.error) {
192
+ agentState.status = 'failed';
193
+ agentState.error = lastResult.error;
194
+ agentState.completedAt = new Date().toISOString();
195
+ state.status = 'failed';
196
+ await this.saveState(state);
197
+ break;
198
+ }
199
+ // Store artifacts from this run
200
+ for (const artifact of lastResult.artifacts) {
201
+ this.store.set(artifact);
202
+ }
203
+ // Fallback: if code-writer produced no code artifacts but existing source exists,
204
+ // seed the code artifacts from existing source so downstream agents can work
205
+ if (agentId === 'code-writer' && lastResult.artifacts.length === 0) {
206
+ console.log(chalk.yellow(` Warning: Code writer produced no artifact output.`));
207
+ const existingTs = this.store.get('existing-component.ts');
208
+ const existingScss = this.store.get('existing-component.scss');
209
+ const existingStories = this.store.get('existing-component.stories.ts');
210
+ if (existingTs) {
211
+ console.log(chalk.yellow(` Seeding component artifacts from existing source.`));
212
+ this.store.set({ name: 'component.ts', content: existingTs.content, producedBy: 'code-writer', timestamp: new Date().toISOString(), version: 1 });
213
+ }
214
+ if (existingScss) {
215
+ this.store.set({ name: 'component.scss', content: existingScss.content, producedBy: 'code-writer', timestamp: new Date().toISOString(), version: 1 });
216
+ }
217
+ if (existingStories) {
218
+ this.store.set({ name: 'component.stories.ts', content: existingStories.content, producedBy: 'code-writer', timestamp: new Date().toISOString(), version: 1 });
219
+ }
220
+ }
221
+ // Handle iteration loops for agents with maxIterations > 1
222
+ if (maxIterations > 1 && lastResult.artifacts.length > 0) {
223
+ const issueCount = 0; // First iteration baseline
224
+ tracker.recordIteration(100 - issueCount, []);
225
+ // Additional iterations if warranted
226
+ for (let i = 1; i < maxIterations; i++) {
227
+ if (!tracker.shouldContinue()) {
228
+ console.log(chalk.yellow(` Stopping early (diminishing returns or budget exhausted)`));
229
+ break;
230
+ }
231
+ // Quality gate: bail if same error twice
232
+ if (agentId === 'quality-gate' && tracker.hasSameErrorTwice()) {
233
+ console.log(chalk.red(` Same error twice — bailing.`));
234
+ agentState.error = 'Same error appeared in consecutive iterations';
235
+ break;
236
+ }
237
+ console.log(chalk.gray(` Iteration ${i + 1}/${maxIterations}...`));
238
+ const iterResult = await runAgent(agentConfig, this.store, this.knowledgeGraph, this.config, userMessage);
239
+ if (iterResult.error) {
240
+ agentState.error = iterResult.error;
241
+ break;
242
+ }
243
+ for (const artifact of iterResult.artifacts) {
244
+ this.store.set(artifact);
245
+ }
246
+ tracker.recordIteration(100, []);
247
+ }
248
+ agentState.iterations = tracker.getSummary(agentId);
249
+ }
250
+ // Handle conversational gate
251
+ if (agentConfig.hasConversationalGate) {
252
+ const architectureArtifact = this.store.get('architecture.md');
253
+ if (architectureArtifact) {
254
+ const pushBacks = parsePushBacks(architectureArtifact.content);
255
+ agentState.pushBacks = pushBacks;
256
+ const decision = await presentGate(architectureArtifact.content, pushBacks, this.config.interactive);
257
+ if (decision.saveForLater) {
258
+ agentState.status = 'gated';
259
+ state.status = 'gated';
260
+ await this.saveState(state);
261
+ console.log(chalk.yellow(`\n Pipeline paused. Resume with: eddie-brain pipeline resume ${state.id}\n`));
262
+ return state;
263
+ }
264
+ if (!decision.approved) {
265
+ agentState.status = 'failed';
266
+ agentState.error = 'Architecture rejected at conversational gate';
267
+ state.status = 'failed';
268
+ await this.saveState(state);
269
+ return state;
270
+ }
271
+ if (decision.modifications) {
272
+ // Apply modifications to the architecture artifact
273
+ this.store.set({
274
+ name: 'architecture.md',
275
+ content: decision.modifications,
276
+ producedBy: 'component-architect',
277
+ timestamp: new Date().toISOString(),
278
+ version: (architectureArtifact.version ?? 1) + 1,
279
+ });
280
+ }
281
+ }
282
+ }
283
+ // Mark agent complete
284
+ agentState.status = agentState.error ? 'failed' : 'completed';
285
+ agentState.completedAt = new Date().toISOString();
286
+ // Save artifacts to pipeline state
287
+ state.artifacts = this.store.toJSON();
288
+ await this.saveState(state);
289
+ // If agent failed, stop the pipeline
290
+ if (agentState.status === 'failed') {
291
+ state.status = 'failed';
292
+ await this.saveState(state);
293
+ break;
294
+ }
295
+ }
296
+ // Pipeline complete
297
+ if (state.status !== 'failed' && state.status !== 'gated') {
298
+ state.status = 'completed';
299
+ state.completedAt = new Date().toISOString();
300
+ // Write output files
301
+ await this.writeOutputFiles(state);
302
+ // Record learnings
303
+ this.learningBridge.recordPipelineOutcome(state);
304
+ console.log(chalk.green.bold(`\n✓ Pipeline complete! Output written to ${this.config.outputDir}\n`));
305
+ }
306
+ await this.saveState(state);
307
+ return state;
308
+ }
309
+ catch (err) {
310
+ state.status = 'failed';
311
+ const errorMsg = err instanceof Error ? err.message : String(err);
312
+ console.error(chalk.red(`\n✗ Pipeline failed: ${errorMsg}\n`));
313
+ await this.saveState(state);
314
+ return state;
315
+ }
316
+ }
317
+ /**
318
+ * Resume a pipeline paused at a conversational gate.
319
+ */
320
+ async resume(stateId, gateDecision) {
321
+ const state = await this.loadState(stateId);
322
+ if (state.status !== 'gated') {
323
+ throw new Error(`Pipeline ${stateId} is not gated (status: ${state.status})`);
324
+ }
325
+ // Restore the artifact store
326
+ this.store = ArtifactStore.fromJSON(state.artifacts);
327
+ // Apply gate decision
328
+ if (gateDecision) {
329
+ const architectState = state.agents['component-architect'];
330
+ if (gateDecision.approved) {
331
+ architectState.status = 'completed';
332
+ architectState.completedAt = new Date().toISOString();
333
+ if (gateDecision.modifications) {
334
+ this.store.set({
335
+ name: 'architecture.md',
336
+ content: gateDecision.modifications,
337
+ producedBy: 'component-architect',
338
+ timestamp: new Date().toISOString(),
339
+ version: 2,
340
+ });
341
+ }
342
+ }
343
+ else {
344
+ architectState.status = 'failed';
345
+ architectState.error = 'Architecture rejected on resume';
346
+ state.status = 'failed';
347
+ await this.saveState(state);
348
+ return state;
349
+ }
350
+ }
351
+ // Find where to resume (first non-completed agent after the gated one)
352
+ state.status = 'running';
353
+ let resumeFrom = false;
354
+ for (const agentId of PIPELINE_AGENT_ORDER) {
355
+ const agentState = state.agents[agentId];
356
+ if (agentState.status === 'gated') {
357
+ agentState.status = 'completed';
358
+ agentState.completedAt = new Date().toISOString();
359
+ resumeFrom = true;
360
+ continue;
361
+ }
362
+ if (!resumeFrom)
363
+ continue;
364
+ if (agentState.status === 'completed')
365
+ continue;
366
+ // Run this agent
367
+ const agentConfig = AGENT_CONFIGS[agentId];
368
+ state.currentAgent = agentId;
369
+ state.currentPhase = agentConfig.phase;
370
+ agentState.status = 'running';
371
+ agentState.startedAt = new Date().toISOString();
372
+ const phaseName = agentConfig.phase.toUpperCase();
373
+ console.log(chalk.bold(`\n[${phaseName}] ${agentConfig.name}`));
374
+ console.log(chalk.gray('─'.repeat(60)));
375
+ const userMessage = `Process the component: ${state.componentName}`;
376
+ const result = await runAgent(agentConfig, this.store, this.knowledgeGraph, this.config, userMessage);
377
+ if (result.error) {
378
+ agentState.status = 'failed';
379
+ agentState.error = result.error;
380
+ state.status = 'failed';
381
+ break;
382
+ }
383
+ for (const artifact of result.artifacts) {
384
+ this.store.set(artifact);
385
+ }
386
+ agentState.status = 'completed';
387
+ agentState.completedAt = new Date().toISOString();
388
+ state.artifacts = this.store.toJSON();
389
+ await this.saveState(state);
390
+ }
391
+ if (state.status !== 'failed') {
392
+ state.status = 'completed';
393
+ state.completedAt = new Date().toISOString();
394
+ await this.writeOutputFiles(state);
395
+ this.learningBridge.recordPipelineOutcome(state);
396
+ console.log(chalk.green.bold(`\n✓ Pipeline complete! Output written to ${this.config.outputDir}\n`));
397
+ }
398
+ await this.saveState(state);
399
+ return state;
400
+ }
401
+ /** Create the initial pipeline state */
402
+ createInitialState(brief, componentName) {
403
+ const agents = {};
404
+ for (const agentId of PIPELINE_AGENT_ORDER) {
405
+ agents[agentId] = {
406
+ agentId,
407
+ status: 'pending',
408
+ startedAt: null,
409
+ completedAt: null,
410
+ iterations: null,
411
+ pushBacks: [],
412
+ error: null,
413
+ };
414
+ }
415
+ return {
416
+ id: randomUUID(),
417
+ status: 'running',
418
+ brief,
419
+ componentName,
420
+ currentPhase: 'understand',
421
+ currentAgent: null,
422
+ agents,
423
+ artifacts: {},
424
+ startedAt: new Date().toISOString(),
425
+ completedAt: null,
426
+ learnings: [],
427
+ };
428
+ }
429
+ /** Save pipeline state to disk */
430
+ async saveState(state) {
431
+ const dir = join(this.config.rootDir, '.eddie-brain', PIPELINES_DIR, state.id);
432
+ if (!existsSync(dir)) {
433
+ await mkdir(dir, { recursive: true });
434
+ }
435
+ await writeFile(join(dir, 'state.json'), JSON.stringify(state, null, 2), 'utf-8');
436
+ // Also save artifacts to disk for easy browsing
437
+ await this.store.saveToDisk(join(dir, 'artifacts'));
438
+ }
439
+ /** Load pipeline state from disk */
440
+ async loadState(stateId) {
441
+ const statePath = join(this.config.rootDir, '.eddie-brain', PIPELINES_DIR, stateId, 'state.json');
442
+ if (!existsSync(statePath)) {
443
+ throw new Error(`Pipeline state not found: ${stateId}`);
444
+ }
445
+ const data = await readFile(statePath, 'utf-8');
446
+ return JSON.parse(data);
447
+ }
448
+ /** Write final output files to the output directory */
449
+ async writeOutputFiles(state) {
450
+ const outputDir = this.config.outputDir;
451
+ if (!existsSync(outputDir)) {
452
+ await mkdir(outputDir, { recursive: true });
453
+ }
454
+ // Derive the short name from the component name (e.g., "ed-progress-bar" → "progress-bar")
455
+ const shortName = state.componentName.replace(/^ed-/, '');
456
+ // Map artifact names to actual file names
457
+ const fileMap = {
458
+ 'component.ts': `${shortName}.ts`,
459
+ 'component.scss': `${shortName}.scss`,
460
+ 'component.stories.ts': `${shortName}.stories.ts`,
461
+ 'brief.md': 'brief.md',
462
+ 'component-rules.md': 'component-rules.md',
463
+ 'architecture.md': 'architecture.md',
464
+ };
465
+ for (const [artifactName, fileName] of Object.entries(fileMap)) {
466
+ const artifact = this.store.get(artifactName);
467
+ if (artifact) {
468
+ await writeFile(join(outputDir, fileName), artifact.content, 'utf-8');
469
+ }
470
+ }
471
+ }
472
+ }
473
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/pipeline/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Architecture Template — Structured template for the component architect's output
3
+ *
4
+ * The architecture.md artifact is the blueprint for the code writer.
5
+ * It includes a push-back section with [BLOCKING]/[OVERRIDE]/[SUGGESTION] markers.
6
+ */
7
+ export declare const ARCHITECTURE_TEMPLATE = "# Architecture: {{componentName}}\n\n## Class Hierarchy\n<!-- Which base class, what it extends, why. -->\n```\n{{componentName}} extends EdElement (LitElement)\n```\n\n## TypeScript Interface\n<!-- All @property decorators with types and defaults. -->\n```typescript\n@property({ type: String }) variant: string = 'default';\n@property({ type: String }) size: string = 'md';\n```\n\n## Slots\n<!-- Named slots with descriptions. -->\n| Slot | Description | Required |\n|------|-------------|----------|\n| (default) | Main content | Yes |\n\n## Events\n<!-- Custom events dispatched by this component. -->\n| Event | Detail | When |\n|-------|--------|------|\n<!-- None by default -->\n\n## Internal State\n<!-- @state() properties for internal rendering logic. -->\n\n## Render Structure\n<!-- Shadow DOM template outline in pseudocode/HTML. -->\n```html\n<div class=\"ed-c-{{shortName}}\">\n <slot></slot>\n</div>\n```\n\n## SCSS Structure\n<!-- BEM class map and token usage plan. -->\n```scss\n.ed-c-{{shortName}} {\n // Token usage plan:\n // background: var(--ed-theme-color-background-default);\n // padding: var(--ed-spacing-md);\n}\n```\n\n## Compound Component Split\n<!-- If this needs child components, list them here. -->\n<!-- e.g., ed-{{shortName}}-item, ed-{{shortName}}-header -->\n\n## Accessibility Plan\n<!-- ARIA roles, keyboard navigation, focus management. -->\n- Role:\n- Keyboard:\n- Focus management:\n- Screen reader:\n\n## Handoff Notes\n<!-- Anything the code writer needs to know that isn't obvious from the structure. -->\n\n## Push-Backs\n<!-- Issues found during architecture design. -->\n<!-- Format: [BLOCKING|OVERRIDE|SUGGESTION] Category: Message. Recommendation: ... -->\n";
8
+ /** Parsed architecture property */
9
+ export interface ArchitectureProperty {
10
+ name: string;
11
+ type: string;
12
+ default: string;
13
+ decorator: string;
14
+ }
15
+ /**
16
+ * Extract the TypeScript interface from architecture.md.
17
+ */
18
+ export declare function extractProperties(content: string): ArchitectureProperty[];
19
+ /**
20
+ * Extract the render structure HTML from architecture.md.
21
+ */
22
+ export declare function extractRenderStructure(content: string): string | null;
23
+ /**
24
+ * Extract the SCSS structure from architecture.md.
25
+ */
26
+ export declare function extractScssStructure(content: string): string | null;
27
+ //# sourceMappingURL=architecture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../../src/pipeline/templates/architecture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,qBAAqB,yrDAiEjC,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAqBzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInE"}