@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.
- package/README.md +109 -0
- package/dist/analyze/drift-detector.d.ts +30 -0
- package/dist/analyze/drift-detector.d.ts.map +1 -0
- package/dist/analyze/drift-detector.js +310 -0
- package/dist/analyze/drift-detector.js.map +1 -0
- package/dist/analyze/health-scorer.d.ts +71 -0
- package/dist/analyze/health-scorer.d.ts.map +1 -0
- package/dist/analyze/health-scorer.js +420 -0
- package/dist/analyze/health-scorer.js.map +1 -0
- package/dist/analyze/index.d.ts +11 -0
- package/dist/analyze/index.d.ts.map +1 -0
- package/dist/analyze/index.js +11 -0
- package/dist/analyze/index.js.map +1 -0
- package/dist/analyze/naming-validator.d.ts +99 -0
- package/dist/analyze/naming-validator.d.ts.map +1 -0
- package/dist/analyze/naming-validator.js +430 -0
- package/dist/analyze/naming-validator.js.map +1 -0
- package/dist/analyze/slot-contract-validator.d.ts +68 -0
- package/dist/analyze/slot-contract-validator.d.ts.map +1 -0
- package/dist/analyze/slot-contract-validator.js +232 -0
- package/dist/analyze/slot-contract-validator.js.map +1 -0
- package/dist/analyze/token-validator.d.ts +62 -0
- package/dist/analyze/token-validator.d.ts.map +1 -0
- package/dist/analyze/token-validator.js +348 -0
- package/dist/analyze/token-validator.js.map +1 -0
- package/dist/cli/brain.d.ts +12 -0
- package/dist/cli/brain.d.ts.map +1 -0
- package/dist/cli/brain.js +641 -0
- package/dist/cli/brain.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +15 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +18 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/terminal.d.ts +19 -0
- package/dist/cli/formatters/terminal.d.ts.map +1 -0
- package/dist/cli/formatters/terminal.js +125 -0
- package/dist/cli/formatters/terminal.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/data/governance-rules.json +94 -0
- package/dist/governance/audit-log.d.ts +17 -0
- package/dist/governance/audit-log.d.ts.map +1 -0
- package/dist/governance/audit-log.js +44 -0
- package/dist/governance/audit-log.js.map +1 -0
- package/dist/governance/index.d.ts +8 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +8 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/permissions.d.ts +26 -0
- package/dist/governance/permissions.d.ts.map +1 -0
- package/dist/governance/permissions.js +75 -0
- package/dist/governance/permissions.js.map +1 -0
- package/dist/governance/rules-engine.d.ts +24 -0
- package/dist/governance/rules-engine.d.ts.map +1 -0
- package/dist/governance/rules-engine.js +111 -0
- package/dist/governance/rules-engine.js.map +1 -0
- package/dist/governance/trust-manager.d.ts +34 -0
- package/dist/governance/trust-manager.d.ts.map +1 -0
- package/dist/governance/trust-manager.js +148 -0
- package/dist/governance/trust-manager.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-graph/component-index.d.ts +320 -0
- package/dist/knowledge-graph/component-index.d.ts.map +1 -0
- package/dist/knowledge-graph/component-index.js +1033 -0
- package/dist/knowledge-graph/component-index.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +134 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +249 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/learning-history.d.ts +77 -0
- package/dist/knowledge-graph/learning-history.d.ts.map +1 -0
- package/dist/knowledge-graph/learning-history.js +187 -0
- package/dist/knowledge-graph/learning-history.js.map +1 -0
- package/dist/knowledge-graph/relationship-map.d.ts +55 -0
- package/dist/knowledge-graph/relationship-map.d.ts.map +1 -0
- package/dist/knowledge-graph/relationship-map.js +238 -0
- package/dist/knowledge-graph/relationship-map.js.map +1 -0
- package/dist/knowledge-graph/token-taxonomy.d.ts +127 -0
- package/dist/knowledge-graph/token-taxonomy.d.ts.map +1 -0
- package/dist/knowledge-graph/token-taxonomy.js +357 -0
- package/dist/knowledge-graph/token-taxonomy.js.map +1 -0
- package/dist/loop/fix-agent.d.ts +55 -0
- package/dist/loop/fix-agent.d.ts.map +1 -0
- package/dist/loop/fix-agent.js +344 -0
- package/dist/loop/fix-agent.js.map +1 -0
- package/dist/loop/index.d.ts +8 -0
- package/dist/loop/index.d.ts.map +1 -0
- package/dist/loop/index.js +8 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/issue-fetcher.d.ts +51 -0
- package/dist/loop/issue-fetcher.d.ts.map +1 -0
- package/dist/loop/issue-fetcher.js +188 -0
- package/dist/loop/issue-fetcher.js.map +1 -0
- package/dist/loop/observer.d.ts +42 -0
- package/dist/loop/observer.d.ts.map +1 -0
- package/dist/loop/observer.js +220 -0
- package/dist/loop/observer.js.map +1 -0
- package/dist/loop/pacer.d.ts +44 -0
- package/dist/loop/pacer.d.ts.map +1 -0
- package/dist/loop/pacer.js +90 -0
- package/dist/loop/pacer.js.map +1 -0
- package/dist/loop/reporter.d.ts +9 -0
- package/dist/loop/reporter.d.ts.map +1 -0
- package/dist/loop/reporter.js +119 -0
- package/dist/loop/reporter.js.map +1 -0
- package/dist/loop/runner.d.ts +57 -0
- package/dist/loop/runner.d.ts.map +1 -0
- package/dist/loop/runner.js +390 -0
- package/dist/loop/runner.js.map +1 -0
- package/dist/loop/types.d.ts +151 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/types.js +22 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +618 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/pipeline/agent-runner.d.ts +34 -0
- package/dist/pipeline/agent-runner.d.ts.map +1 -0
- package/dist/pipeline/agent-runner.js +323 -0
- package/dist/pipeline/agent-runner.js.map +1 -0
- package/dist/pipeline/agents/accessibility-auditor.d.ts +10 -0
- package/dist/pipeline/agents/accessibility-auditor.d.ts.map +1 -0
- package/dist/pipeline/agents/accessibility-auditor.js +69 -0
- package/dist/pipeline/agents/accessibility-auditor.js.map +1 -0
- package/dist/pipeline/agents/code-reviewer.d.ts +10 -0
- package/dist/pipeline/agents/code-reviewer.d.ts.map +1 -0
- package/dist/pipeline/agents/code-reviewer.js +75 -0
- package/dist/pipeline/agents/code-reviewer.js.map +1 -0
- package/dist/pipeline/agents/code-writer.d.ts +10 -0
- package/dist/pipeline/agents/code-writer.d.ts.map +1 -0
- package/dist/pipeline/agents/code-writer.js +103 -0
- package/dist/pipeline/agents/code-writer.js.map +1 -0
- package/dist/pipeline/agents/component-architect.d.ts +13 -0
- package/dist/pipeline/agents/component-architect.d.ts.map +1 -0
- package/dist/pipeline/agents/component-architect.js +81 -0
- package/dist/pipeline/agents/component-architect.js.map +1 -0
- package/dist/pipeline/agents/index.d.ts +16 -0
- package/dist/pipeline/agents/index.d.ts.map +1 -0
- package/dist/pipeline/agents/index.js +24 -0
- package/dist/pipeline/agents/index.js.map +1 -0
- package/dist/pipeline/agents/library-researcher.d.ts +12 -0
- package/dist/pipeline/agents/library-researcher.d.ts.map +1 -0
- package/dist/pipeline/agents/library-researcher.js +85 -0
- package/dist/pipeline/agents/library-researcher.js.map +1 -0
- package/dist/pipeline/agents/quality-gate.d.ts +9 -0
- package/dist/pipeline/agents/quality-gate.d.ts.map +1 -0
- package/dist/pipeline/agents/quality-gate.js +71 -0
- package/dist/pipeline/agents/quality-gate.js.map +1 -0
- package/dist/pipeline/agents/spec-analyst.d.ts +10 -0
- package/dist/pipeline/agents/spec-analyst.d.ts.map +1 -0
- package/dist/pipeline/agents/spec-analyst.js +72 -0
- package/dist/pipeline/agents/spec-analyst.js.map +1 -0
- package/dist/pipeline/agents/story-author.d.ts +9 -0
- package/dist/pipeline/agents/story-author.d.ts.map +1 -0
- package/dist/pipeline/agents/story-author.js +65 -0
- package/dist/pipeline/agents/story-author.js.map +1 -0
- package/dist/pipeline/artifact-store.d.ts +27 -0
- package/dist/pipeline/artifact-store.d.ts.map +1 -0
- package/dist/pipeline/artifact-store.js +77 -0
- package/dist/pipeline/artifact-store.js.map +1 -0
- package/dist/pipeline/conversational-gate.d.ts +26 -0
- package/dist/pipeline/conversational-gate.d.ts.map +1 -0
- package/dist/pipeline/conversational-gate.js +122 -0
- package/dist/pipeline/conversational-gate.js.map +1 -0
- package/dist/pipeline/index.d.ts +14 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +17 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/iteration-tracker.d.ts +29 -0
- package/dist/pipeline/iteration-tracker.d.ts.map +1 -0
- package/dist/pipeline/iteration-tracker.js +102 -0
- package/dist/pipeline/iteration-tracker.js.map +1 -0
- package/dist/pipeline/learning-bridge.d.ts +37 -0
- package/dist/pipeline/learning-bridge.d.ts.map +1 -0
- package/dist/pipeline/learning-bridge.js +118 -0
- package/dist/pipeline/learning-bridge.js.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +45 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.js +473 -0
- package/dist/pipeline/orchestrator.js.map +1 -0
- package/dist/pipeline/templates/architecture.d.ts +27 -0
- package/dist/pipeline/templates/architecture.d.ts.map +1 -0
- package/dist/pipeline/templates/architecture.js +111 -0
- package/dist/pipeline/templates/architecture.js.map +1 -0
- package/dist/pipeline/templates/brief.d.ts +22 -0
- package/dist/pipeline/templates/brief.d.ts.map +1 -0
- package/dist/pipeline/templates/brief.js +121 -0
- package/dist/pipeline/templates/brief.js.map +1 -0
- package/dist/pipeline/templates/component-rules.d.ts +25 -0
- package/dist/pipeline/templates/component-rules.d.ts.map +1 -0
- package/dist/pipeline/templates/component-rules.js +93 -0
- package/dist/pipeline/templates/component-rules.js.map +1 -0
- package/dist/pipeline/templates/index.d.ts +9 -0
- package/dist/pipeline/templates/index.d.ts.map +1 -0
- package/dist/pipeline/templates/index.js +7 -0
- package/dist/pipeline/templates/index.js.map +1 -0
- package/dist/pipeline/tool-handler.d.ts +25 -0
- package/dist/pipeline/tool-handler.d.ts.map +1 -0
- package/dist/pipeline/tool-handler.js +392 -0
- package/dist/pipeline/tool-handler.js.map +1 -0
- package/dist/pipeline/types.d.ts +146 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +27 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/plan/action-types.d.ts +31 -0
- package/dist/plan/action-types.d.ts.map +1 -0
- package/dist/plan/action-types.js +83 -0
- package/dist/plan/action-types.js.map +1 -0
- package/dist/plan/decision-engine.d.ts +57 -0
- package/dist/plan/decision-engine.d.ts.map +1 -0
- package/dist/plan/decision-engine.js +162 -0
- package/dist/plan/decision-engine.js.map +1 -0
- package/dist/plan/index.d.ts +6 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +6 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/types.d.ts +351 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/anthropic.d.ts +15 -0
- package/dist/utils/anthropic.d.ts.map +1 -0
- package/dist/utils/anthropic.js +40 -0
- package/dist/utils/anthropic.js.map +1 -0
- package/dist/utils/id.d.ts +8 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +14 -0
- package/dist/utils/id.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArtifactStore — In-memory + disk-backed artifact storage
|
|
3
|
+
*
|
|
4
|
+
* Manages the pipeline artifacts that flow between agents. Each artifact
|
|
5
|
+
* is versioned so agents can revise earlier outputs.
|
|
6
|
+
*/
|
|
7
|
+
import type { PipelineArtifact } from './types.js';
|
|
8
|
+
export declare class ArtifactStore {
|
|
9
|
+
private artifacts;
|
|
10
|
+
/** Store an artifact, incrementing version if one exists with the same name */
|
|
11
|
+
set(artifact: PipelineArtifact): void;
|
|
12
|
+
/** Get the latest version of an artifact by name */
|
|
13
|
+
get(name: string): PipelineArtifact | undefined;
|
|
14
|
+
/** Get all artifacts */
|
|
15
|
+
getAll(): PipelineArtifact[];
|
|
16
|
+
/** Check if an artifact exists */
|
|
17
|
+
has(name: string): boolean;
|
|
18
|
+
/** Save all artifacts to a directory on disk */
|
|
19
|
+
saveToDisk(dir: string): Promise<void>;
|
|
20
|
+
/** Load artifacts from a directory on disk */
|
|
21
|
+
static loadFromDisk(dir: string): Promise<ArtifactStore>;
|
|
22
|
+
/** Serialize to JSON for pipeline state persistence */
|
|
23
|
+
toJSON(): Record<string, PipelineArtifact>;
|
|
24
|
+
/** Deserialize from JSON */
|
|
25
|
+
static fromJSON(data: Record<string, PipelineArtifact>): ArtifactStore;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=artifact-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../../src/pipeline/artifact-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA4C;IAE7D,+EAA+E;IAC/E,GAAG,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAMrC,oDAAoD;IACpD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/C,wBAAwB;IACxB,MAAM,IAAI,gBAAgB,EAAE;IAI5B,kCAAkC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,gDAAgD;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB5C,8CAA8C;WACjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwB9D,uDAAuD;IACvD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAI1C,4BAA4B;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,aAAa;CAOvE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArtifactStore — In-memory + disk-backed artifact storage
|
|
3
|
+
*
|
|
4
|
+
* Manages the pipeline artifacts that flow between agents. Each artifact
|
|
5
|
+
* is versioned so agents can revise earlier outputs.
|
|
6
|
+
*/
|
|
7
|
+
import { writeFile, readFile, mkdir } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
export class ArtifactStore {
|
|
11
|
+
artifacts = new Map();
|
|
12
|
+
/** Store an artifact, incrementing version if one exists with the same name */
|
|
13
|
+
set(artifact) {
|
|
14
|
+
const existing = this.artifacts.get(artifact.name);
|
|
15
|
+
const version = existing ? existing.version + 1 : 1;
|
|
16
|
+
this.artifacts.set(artifact.name, { ...artifact, version });
|
|
17
|
+
}
|
|
18
|
+
/** Get the latest version of an artifact by name */
|
|
19
|
+
get(name) {
|
|
20
|
+
return this.artifacts.get(name);
|
|
21
|
+
}
|
|
22
|
+
/** Get all artifacts */
|
|
23
|
+
getAll() {
|
|
24
|
+
return Array.from(this.artifacts.values());
|
|
25
|
+
}
|
|
26
|
+
/** Check if an artifact exists */
|
|
27
|
+
has(name) {
|
|
28
|
+
return this.artifacts.has(name);
|
|
29
|
+
}
|
|
30
|
+
/** Save all artifacts to a directory on disk */
|
|
31
|
+
async saveToDisk(dir) {
|
|
32
|
+
if (!existsSync(dir)) {
|
|
33
|
+
await mkdir(dir, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
for (const [name, artifact] of this.artifacts) {
|
|
36
|
+
const filePath = join(dir, name);
|
|
37
|
+
await mkdir(join(dir, ...name.split('/').slice(0, -1)), { recursive: true }).catch(() => undefined);
|
|
38
|
+
await writeFile(filePath, artifact.content, 'utf-8');
|
|
39
|
+
}
|
|
40
|
+
// Also write the metadata
|
|
41
|
+
const metadata = Object.fromEntries(Array.from(this.artifacts.entries()).map(([key, val]) => [
|
|
42
|
+
key,
|
|
43
|
+
{ ...val, content: undefined },
|
|
44
|
+
]));
|
|
45
|
+
await writeFile(join(dir, '_artifacts.json'), JSON.stringify(metadata, null, 2), 'utf-8');
|
|
46
|
+
}
|
|
47
|
+
/** Load artifacts from a directory on disk */
|
|
48
|
+
static async loadFromDisk(dir) {
|
|
49
|
+
const store = new ArtifactStore();
|
|
50
|
+
const metadataPath = join(dir, '_artifacts.json');
|
|
51
|
+
if (!existsSync(metadataPath)) {
|
|
52
|
+
return store;
|
|
53
|
+
}
|
|
54
|
+
const metadata = JSON.parse(await readFile(metadataPath, 'utf-8'));
|
|
55
|
+
for (const [name, meta] of Object.entries(metadata)) {
|
|
56
|
+
const contentPath = join(dir, name);
|
|
57
|
+
if (existsSync(contentPath)) {
|
|
58
|
+
const content = await readFile(contentPath, 'utf-8');
|
|
59
|
+
store.artifacts.set(name, { ...meta, content, name });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return store;
|
|
63
|
+
}
|
|
64
|
+
/** Serialize to JSON for pipeline state persistence */
|
|
65
|
+
toJSON() {
|
|
66
|
+
return Object.fromEntries(this.artifacts);
|
|
67
|
+
}
|
|
68
|
+
/** Deserialize from JSON */
|
|
69
|
+
static fromJSON(data) {
|
|
70
|
+
const store = new ArtifactStore();
|
|
71
|
+
for (const [key, val] of Object.entries(data)) {
|
|
72
|
+
store.artifacts.set(key, val);
|
|
73
|
+
}
|
|
74
|
+
return store;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=artifact-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../../src/pipeline/artifact-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationalGate — CLI-based pause mechanism for human review
|
|
3
|
+
*
|
|
4
|
+
* When Agent 3 (component-architect) produces architecture.md, the pipeline
|
|
5
|
+
* pauses and presents the artifact + any push-backs for human review.
|
|
6
|
+
*/
|
|
7
|
+
import type { PushBackItem } from './types.js';
|
|
8
|
+
export interface GateDecision {
|
|
9
|
+
approved: boolean;
|
|
10
|
+
modifications: string | null;
|
|
11
|
+
saveForLater: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse push-back markers from architecture.md content.
|
|
15
|
+
*
|
|
16
|
+
* Markers follow the format:
|
|
17
|
+
* [BLOCKING] Category: Message. Recommendation: ...
|
|
18
|
+
* [OVERRIDE] Category: Message. Rationale: ...
|
|
19
|
+
* [SUGGESTION] Category: Message.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parsePushBacks(content: string): PushBackItem[];
|
|
22
|
+
/**
|
|
23
|
+
* Present an artifact for human review in the CLI.
|
|
24
|
+
*/
|
|
25
|
+
export declare function presentGate(artifactContent: string, pushBacks: PushBackItem[], interactive: boolean): Promise<GateDecision>;
|
|
26
|
+
//# sourceMappingURL=conversational-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversational-gate.d.ts","sourceRoot":"","sources":["../../src/pipeline/conversational-gate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAe9D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,YAAY,CAAC,CAwGvB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationalGate — CLI-based pause mechanism for human review
|
|
3
|
+
*
|
|
4
|
+
* When Agent 3 (component-architect) produces architecture.md, the pipeline
|
|
5
|
+
* pauses and presents the artifact + any push-backs for human review.
|
|
6
|
+
*/
|
|
7
|
+
import { createInterface } from 'readline';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
/**
|
|
10
|
+
* Parse push-back markers from architecture.md content.
|
|
11
|
+
*
|
|
12
|
+
* Markers follow the format:
|
|
13
|
+
* [BLOCKING] Category: Message. Recommendation: ...
|
|
14
|
+
* [OVERRIDE] Category: Message. Rationale: ...
|
|
15
|
+
* [SUGGESTION] Category: Message.
|
|
16
|
+
*/
|
|
17
|
+
export function parsePushBacks(content) {
|
|
18
|
+
const pushBacks = [];
|
|
19
|
+
const regex = /\[(BLOCKING|OVERRIDE|SUGGESTION)\]\s*([^:]+):\s*(.+?)(?:\.\s*(?:Recommendation|Rationale):\s*(.+?))?$/gm;
|
|
20
|
+
let match;
|
|
21
|
+
while ((match = regex.exec(content)) !== null) {
|
|
22
|
+
pushBacks.push({
|
|
23
|
+
level: match[1],
|
|
24
|
+
category: match[2].trim(),
|
|
25
|
+
message: match[3].trim().replace(/\.$/, ''),
|
|
26
|
+
recommendation: match[4]?.trim().replace(/\.$/, '') ?? '',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return pushBacks;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Present an artifact for human review in the CLI.
|
|
33
|
+
*/
|
|
34
|
+
export async function presentGate(artifactContent, pushBacks, interactive) {
|
|
35
|
+
// Non-interactive mode
|
|
36
|
+
if (!interactive) {
|
|
37
|
+
const hasBlocking = pushBacks.some(pb => pb.level === 'BLOCKING');
|
|
38
|
+
if (hasBlocking) {
|
|
39
|
+
console.log(chalk.red('\n[PIPELINE] Architecture has BLOCKING issues. Failing in non-interactive mode.\n'));
|
|
40
|
+
return { approved: false, modifications: null, saveForLater: false };
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.yellow('\n[PIPELINE] Auto-approving architecture (non-interactive mode).\n'));
|
|
43
|
+
return { approved: true, modifications: null, saveForLater: false };
|
|
44
|
+
}
|
|
45
|
+
// Display the artifact
|
|
46
|
+
console.log(chalk.bold.cyan('\n' + '='.repeat(80)));
|
|
47
|
+
console.log(chalk.bold.cyan(' CONVERSATIONAL GATE — Architecture Review'));
|
|
48
|
+
console.log(chalk.bold.cyan('='.repeat(80) + '\n'));
|
|
49
|
+
console.log(artifactContent);
|
|
50
|
+
console.log('');
|
|
51
|
+
// Display push-backs
|
|
52
|
+
if (pushBacks.length > 0) {
|
|
53
|
+
console.log(chalk.bold('\nPush-Backs:\n'));
|
|
54
|
+
for (const pb of pushBacks) {
|
|
55
|
+
const color = pb.level === 'BLOCKING' ? chalk.red
|
|
56
|
+
: pb.level === 'OVERRIDE' ? chalk.yellow
|
|
57
|
+
: chalk.cyan;
|
|
58
|
+
console.log(color(` [${pb.level}] ${pb.category}: ${pb.message}`));
|
|
59
|
+
if (pb.recommendation) {
|
|
60
|
+
console.log(chalk.gray(` → ${pb.recommendation}`));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
console.log('');
|
|
64
|
+
const blockingCount = pushBacks.filter(pb => pb.level === 'BLOCKING').length;
|
|
65
|
+
if (blockingCount > 0) {
|
|
66
|
+
console.log(chalk.red.bold(` ⚠ ${blockingCount} BLOCKING issue(s) require resolution before proceeding.\n`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Prompt for decision
|
|
70
|
+
const rl = createInterface({
|
|
71
|
+
input: process.stdin,
|
|
72
|
+
output: process.stdout,
|
|
73
|
+
});
|
|
74
|
+
return new Promise((resolve) => {
|
|
75
|
+
rl.question(chalk.bold(' [A]pprove / [M]odify / [R]eject / [S]ave for later? '), (answer) => {
|
|
76
|
+
rl.close();
|
|
77
|
+
const choice = answer.trim().toLowerCase();
|
|
78
|
+
switch (choice) {
|
|
79
|
+
case 'a':
|
|
80
|
+
case 'approve':
|
|
81
|
+
resolve({ approved: true, modifications: null, saveForLater: false });
|
|
82
|
+
break;
|
|
83
|
+
case 'm':
|
|
84
|
+
case 'modify': {
|
|
85
|
+
// For modify, we collect modifications inline
|
|
86
|
+
const modRl = createInterface({
|
|
87
|
+
input: process.stdin,
|
|
88
|
+
output: process.stdout,
|
|
89
|
+
});
|
|
90
|
+
console.log(chalk.gray('\n Enter modifications (press Enter twice to finish):\n'));
|
|
91
|
+
let modifications = '';
|
|
92
|
+
let emptyLines = 0;
|
|
93
|
+
modRl.on('line', (line) => {
|
|
94
|
+
if (line === '') {
|
|
95
|
+
emptyLines++;
|
|
96
|
+
if (emptyLines >= 2) {
|
|
97
|
+
modRl.close();
|
|
98
|
+
resolve({ approved: true, modifications, saveForLater: false });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
emptyLines = 0;
|
|
104
|
+
}
|
|
105
|
+
modifications += line + '\n';
|
|
106
|
+
});
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case 's':
|
|
110
|
+
case 'save':
|
|
111
|
+
resolve({ approved: false, modifications: null, saveForLater: true });
|
|
112
|
+
break;
|
|
113
|
+
case 'r':
|
|
114
|
+
case 'reject':
|
|
115
|
+
default:
|
|
116
|
+
resolve({ approved: false, modifications: null, saveForLater: false });
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=conversational-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversational-gate.js","sourceRoot":"","sources":["../../src/pipeline/conversational-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline — Public API for the multi-agent component generation pipeline
|
|
3
|
+
*/
|
|
4
|
+
export { PipelineOrchestrator } from './orchestrator.js';
|
|
5
|
+
export type { AgentConfig, AgentId, AgentRunResult, AgentState, AgentStatus, ArtifactName, EddieTool, IterationRecord, IterationSummary, PipelineArtifact, PipelineConfig, PipelinePhase, PipelineState, PipelineStatus, PushBackItem, PushBackLevel, } from './types.js';
|
|
6
|
+
export { DEFAULT_PIPELINE_CONFIG, PIPELINE_AGENT_ORDER } from './types.js';
|
|
7
|
+
export { ArtifactStore } from './artifact-store.js';
|
|
8
|
+
export { IterationTracker } from './iteration-tracker.js';
|
|
9
|
+
export { LearningBridge } from './learning-bridge.js';
|
|
10
|
+
export type { GateDecision } from './conversational-gate.js';
|
|
11
|
+
export { AGENT_CONFIGS } from './agents/index.js';
|
|
12
|
+
export { setDesignSystemsMcpHandler } from './tool-handler.js';
|
|
13
|
+
export { BRIEF_TEMPLATE, COMPONENT_RULES_TEMPLATE, ARCHITECTURE_TEMPLATE, parseBrief, parseRules, extractBaseClass, extractProperties, extractRenderStructure, extractScssStructure, hasPendingItems, extractPendingItems, } from './templates/index.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,YAAY,EACV,WAAW,EACX,OAAO,EACP,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline — Public API for the multi-agent component generation pipeline
|
|
3
|
+
*/
|
|
4
|
+
// Core orchestrator
|
|
5
|
+
export { PipelineOrchestrator } from './orchestrator.js';
|
|
6
|
+
export { DEFAULT_PIPELINE_CONFIG, PIPELINE_AGENT_ORDER } from './types.js';
|
|
7
|
+
// Infrastructure
|
|
8
|
+
export { ArtifactStore } from './artifact-store.js';
|
|
9
|
+
export { IterationTracker } from './iteration-tracker.js';
|
|
10
|
+
export { LearningBridge } from './learning-bridge.js';
|
|
11
|
+
// Agent configs
|
|
12
|
+
export { AGENT_CONFIGS } from './agents/index.js';
|
|
13
|
+
// Tool handler (for design-systems MCP wiring)
|
|
14
|
+
export { setDesignSystemsMcpHandler } from './tool-handler.js';
|
|
15
|
+
// Templates
|
|
16
|
+
export { BRIEF_TEMPLATE, COMPONENT_RULES_TEMPLATE, ARCHITECTURE_TEMPLATE, parseBrief, parseRules, extractBaseClass, extractProperties, extractRenderStructure, extractScssStructure, hasPendingItems, extractPendingItems, } from './templates/index.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAqBzD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE3E,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,+CAA+C;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,YAAY;AACZ,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IterationTracker — Manages per-agent iteration budgets and diminishing returns
|
|
3
|
+
*
|
|
4
|
+
* Each agent has a maximum number of iterations. For agents like the
|
|
5
|
+
* code reviewer (Agent 7), we also track whether improvements are
|
|
6
|
+
* diminishing — if iteration N improves less than the threshold over N-1,
|
|
7
|
+
* we stop early.
|
|
8
|
+
*/
|
|
9
|
+
import type { HealthIssue } from '../types.js';
|
|
10
|
+
import type { AgentId, IterationSummary } from './types.js';
|
|
11
|
+
export declare class IterationTracker {
|
|
12
|
+
private readonly maxIterations;
|
|
13
|
+
private readonly diminishingReturnsThreshold;
|
|
14
|
+
private records;
|
|
15
|
+
private currentIteration;
|
|
16
|
+
constructor(maxIterations: number, diminishingReturnsThreshold?: number);
|
|
17
|
+
/**
|
|
18
|
+
* Record the result of an iteration.
|
|
19
|
+
* @returns Whether another iteration is warranted.
|
|
20
|
+
*/
|
|
21
|
+
recordIteration(score: number, issues: HealthIssue[]): boolean;
|
|
22
|
+
/** Check if we should continue iterating */
|
|
23
|
+
shouldContinue(): boolean;
|
|
24
|
+
/** Get the summary of all iterations */
|
|
25
|
+
getSummary(agentId: AgentId): IterationSummary;
|
|
26
|
+
/** Check if the same error appeared in the last two iterations (for quality gate bail) */
|
|
27
|
+
hasSameErrorTwice(): boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=iteration-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iteration-tracker.d.ts","sourceRoot":"","sources":["../../src/pipeline/iteration-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAmB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7E,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAL9C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,gBAAgB,CAAK;gBAGV,aAAa,EAAE,MAAM,EACrB,2BAA2B,GAAE,MAAU;IAG1D;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;IAoB9D,4CAA4C;IAC5C,cAAc,IAAI,OAAO;IAgCzB,wCAAwC;IACxC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;IAmB9C,0FAA0F;IAC1F,iBAAiB,IAAI,OAAO;CAmB7B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IterationTracker — Manages per-agent iteration budgets and diminishing returns
|
|
3
|
+
*
|
|
4
|
+
* Each agent has a maximum number of iterations. For agents like the
|
|
5
|
+
* code reviewer (Agent 7), we also track whether improvements are
|
|
6
|
+
* diminishing — if iteration N improves less than the threshold over N-1,
|
|
7
|
+
* we stop early.
|
|
8
|
+
*/
|
|
9
|
+
export class IterationTracker {
|
|
10
|
+
maxIterations;
|
|
11
|
+
diminishingReturnsThreshold;
|
|
12
|
+
records = [];
|
|
13
|
+
currentIteration = 0;
|
|
14
|
+
constructor(maxIterations, diminishingReturnsThreshold = 2) {
|
|
15
|
+
this.maxIterations = maxIterations;
|
|
16
|
+
this.diminishingReturnsThreshold = diminishingReturnsThreshold;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Record the result of an iteration.
|
|
20
|
+
* @returns Whether another iteration is warranted.
|
|
21
|
+
*/
|
|
22
|
+
recordIteration(score, issues) {
|
|
23
|
+
const previousScore = this.records.length > 0
|
|
24
|
+
? this.records[this.records.length - 1].score
|
|
25
|
+
: 0;
|
|
26
|
+
const delta = this.currentIteration === 0 ? score : score - previousScore;
|
|
27
|
+
this.records.push({
|
|
28
|
+
iteration: this.currentIteration,
|
|
29
|
+
timestamp: new Date().toISOString(),
|
|
30
|
+
score,
|
|
31
|
+
delta,
|
|
32
|
+
issues,
|
|
33
|
+
stoppedEarly: false,
|
|
34
|
+
});
|
|
35
|
+
this.currentIteration++;
|
|
36
|
+
return this.shouldContinue();
|
|
37
|
+
}
|
|
38
|
+
/** Check if we should continue iterating */
|
|
39
|
+
shouldContinue() {
|
|
40
|
+
// Haven't started yet
|
|
41
|
+
if (this.records.length === 0) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
// Hit the budget
|
|
45
|
+
if (this.currentIteration >= this.maxIterations) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// First iteration always runs
|
|
49
|
+
if (this.records.length === 1) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Check diminishing returns: improvement less than threshold percentage
|
|
53
|
+
const latest = this.records[this.records.length - 1];
|
|
54
|
+
const previous = this.records[this.records.length - 2];
|
|
55
|
+
if (previous.score > 0) {
|
|
56
|
+
const improvementPct = ((latest.score - previous.score) / previous.score) * 100;
|
|
57
|
+
if (improvementPct < this.diminishingReturnsThreshold) {
|
|
58
|
+
// Mark the last record as stopped early
|
|
59
|
+
latest.stoppedEarly = true;
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/** Get the summary of all iterations */
|
|
66
|
+
getSummary(agentId) {
|
|
67
|
+
const startScore = this.records.length > 0 ? this.records[0].score : 0;
|
|
68
|
+
const endScore = this.records.length > 0 ? this.records[this.records.length - 1].score : 0;
|
|
69
|
+
const stoppedEarly = this.records.length > 0
|
|
70
|
+
? this.records[this.records.length - 1].stoppedEarly
|
|
71
|
+
: false;
|
|
72
|
+
return {
|
|
73
|
+
agentId,
|
|
74
|
+
totalIterations: this.records.length,
|
|
75
|
+
maxIterations: this.maxIterations,
|
|
76
|
+
startScore,
|
|
77
|
+
endScore,
|
|
78
|
+
totalImprovement: endScore - startScore,
|
|
79
|
+
stoppedEarly,
|
|
80
|
+
records: [...this.records],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Check if the same error appeared in the last two iterations (for quality gate bail) */
|
|
84
|
+
hasSameErrorTwice() {
|
|
85
|
+
if (this.records.length < 2)
|
|
86
|
+
return false;
|
|
87
|
+
const latest = this.records[this.records.length - 1];
|
|
88
|
+
const previous = this.records[this.records.length - 2];
|
|
89
|
+
if (latest.issues.length === 0 || previous.issues.length === 0)
|
|
90
|
+
return false;
|
|
91
|
+
// Compare issue messages
|
|
92
|
+
const latestMessages = new Set(latest.issues.map(i => i.message));
|
|
93
|
+
const previousMessages = new Set(previous.issues.map(i => i.message));
|
|
94
|
+
// If any message appears in both iterations, bail
|
|
95
|
+
for (const msg of latestMessages) {
|
|
96
|
+
if (previousMessages.has(msg))
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=iteration-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iteration-tracker.js","sourceRoot":"","sources":["../../src/pipeline/iteration-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LearningBridge — Connects pipeline outcomes to the LearningHistory flywheel
|
|
3
|
+
*
|
|
4
|
+
* Creates LearningEntry records from pipeline outcomes so the trust manager
|
|
5
|
+
* can track agent performance and promote trust levels over time.
|
|
6
|
+
*/
|
|
7
|
+
import type { LearningEntry } from '../types.js';
|
|
8
|
+
import type { LearningHistory } from '../knowledge-graph/learning-history.js';
|
|
9
|
+
import type { PipelineState } from './types.js';
|
|
10
|
+
export declare class LearningBridge {
|
|
11
|
+
private learningHistory;
|
|
12
|
+
constructor(learningHistory: LearningHistory);
|
|
13
|
+
/**
|
|
14
|
+
* Record the outcome of a complete pipeline run.
|
|
15
|
+
*
|
|
16
|
+
* Creates LearningEntry records for:
|
|
17
|
+
* - Each push-back decision (accepted/rejected/modified at the gate)
|
|
18
|
+
* - Code reviewer iterations (improvement patterns)
|
|
19
|
+
* - Quality gate pass/fail
|
|
20
|
+
* - Overall pipeline completion
|
|
21
|
+
*/
|
|
22
|
+
recordPipelineOutcome(state: PipelineState): void;
|
|
23
|
+
/** Record push-back gate decisions */
|
|
24
|
+
private recordGateDecisions;
|
|
25
|
+
/** Record code review iteration outcomes */
|
|
26
|
+
private recordReviewOutcome;
|
|
27
|
+
/** Record quality gate pass/fail */
|
|
28
|
+
private recordQualityGateOutcome;
|
|
29
|
+
/** Record overall pipeline result */
|
|
30
|
+
private recordPipelineCompletion;
|
|
31
|
+
/**
|
|
32
|
+
* Get learning insights relevant to a component being built.
|
|
33
|
+
* Queries LearningHistory for entries tagged with 'pipeline'.
|
|
34
|
+
*/
|
|
35
|
+
getRelevantLearnings(componentName: string): LearningEntry[];
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=learning-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-bridge.d.ts","sourceRoot":"","sources":["../../src/pipeline/learning-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAC;AAE9D,qBAAa,cAAc;IACb,OAAO,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAEpD;;;;;;;;OAQG;IACH,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAuBjD,sCAAsC;IACtC,OAAO,CAAC,mBAAmB;IAwB3B,4CAA4C;IAC5C,OAAO,CAAC,mBAAmB;IAmB3B,oCAAoC;IACpC,OAAO,CAAC,wBAAwB;IAoBhC,qCAAqC;IACrC,OAAO,CAAC,wBAAwB;IAkBhC;;;OAGG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE;CAG7D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LearningBridge — Connects pipeline outcomes to the LearningHistory flywheel
|
|
3
|
+
*
|
|
4
|
+
* Creates LearningEntry records from pipeline outcomes so the trust manager
|
|
5
|
+
* can track agent performance and promote trust levels over time.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
export class LearningBridge {
|
|
9
|
+
learningHistory;
|
|
10
|
+
constructor(learningHistory) {
|
|
11
|
+
this.learningHistory = learningHistory;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Record the outcome of a complete pipeline run.
|
|
15
|
+
*
|
|
16
|
+
* Creates LearningEntry records for:
|
|
17
|
+
* - Each push-back decision (accepted/rejected/modified at the gate)
|
|
18
|
+
* - Code reviewer iterations (improvement patterns)
|
|
19
|
+
* - Quality gate pass/fail
|
|
20
|
+
* - Overall pipeline completion
|
|
21
|
+
*/
|
|
22
|
+
recordPipelineOutcome(state) {
|
|
23
|
+
// Record gate decisions from Component Architect
|
|
24
|
+
const architectState = state.agents['component-architect'];
|
|
25
|
+
if (architectState?.pushBacks.length > 0) {
|
|
26
|
+
this.recordGateDecisions(state.componentName, architectState.pushBacks, architectState.status);
|
|
27
|
+
}
|
|
28
|
+
// Record code review outcome
|
|
29
|
+
const reviewerState = state.agents['code-reviewer'];
|
|
30
|
+
if (reviewerState?.iterations) {
|
|
31
|
+
this.recordReviewOutcome(state.componentName, reviewerState.iterations);
|
|
32
|
+
}
|
|
33
|
+
// Record quality gate outcome
|
|
34
|
+
const gateState = state.agents['quality-gate'];
|
|
35
|
+
if (gateState) {
|
|
36
|
+
this.recordQualityGateOutcome(state.componentName, gateState.status, gateState.error);
|
|
37
|
+
}
|
|
38
|
+
// Record overall pipeline result
|
|
39
|
+
this.recordPipelineCompletion(state);
|
|
40
|
+
}
|
|
41
|
+
/** Record push-back gate decisions */
|
|
42
|
+
recordGateDecisions(componentName, pushBacks, architectStatus) {
|
|
43
|
+
const wasApproved = architectStatus === 'completed';
|
|
44
|
+
for (const pb of pushBacks) {
|
|
45
|
+
const entry = {
|
|
46
|
+
id: randomUUID(),
|
|
47
|
+
timestamp: new Date().toISOString(),
|
|
48
|
+
suggestion: {
|
|
49
|
+
type: `push-back-${pb.level.toLowerCase()}`,
|
|
50
|
+
target: componentName,
|
|
51
|
+
proposed: `${pb.category}: ${pb.message}`,
|
|
52
|
+
},
|
|
53
|
+
decision: wasApproved ? 'accepted' : 'rejected',
|
|
54
|
+
reason: pb.recommendation || undefined,
|
|
55
|
+
tags: ['pipeline', 'architecture-gate', pb.level.toLowerCase()],
|
|
56
|
+
};
|
|
57
|
+
this.learningHistory.record(entry);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Record code review iteration outcomes */
|
|
61
|
+
recordReviewOutcome(componentName, iterations) {
|
|
62
|
+
const entry = {
|
|
63
|
+
id: randomUUID(),
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
suggestion: {
|
|
66
|
+
type: 'code-review',
|
|
67
|
+
target: componentName,
|
|
68
|
+
proposed: `${iterations.totalIterations} review iterations, score ${iterations.startScore} → ${iterations.endScore}`,
|
|
69
|
+
},
|
|
70
|
+
decision: iterations.endScore > iterations.startScore ? 'accepted' : 'modified',
|
|
71
|
+
modification: iterations.stoppedEarly ? 'Stopped early due to diminishing returns' : undefined,
|
|
72
|
+
tags: ['pipeline', 'code-review'],
|
|
73
|
+
};
|
|
74
|
+
this.learningHistory.record(entry);
|
|
75
|
+
}
|
|
76
|
+
/** Record quality gate pass/fail */
|
|
77
|
+
recordQualityGateOutcome(componentName, status, error) {
|
|
78
|
+
const entry = {
|
|
79
|
+
id: randomUUID(),
|
|
80
|
+
timestamp: new Date().toISOString(),
|
|
81
|
+
suggestion: {
|
|
82
|
+
type: 'quality-gate',
|
|
83
|
+
target: componentName,
|
|
84
|
+
proposed: `Quality gate ${status}`,
|
|
85
|
+
},
|
|
86
|
+
decision: status === 'completed' ? 'accepted' : 'rejected',
|
|
87
|
+
reason: error ?? undefined,
|
|
88
|
+
tags: ['pipeline', 'quality-gate'],
|
|
89
|
+
};
|
|
90
|
+
this.learningHistory.record(entry);
|
|
91
|
+
}
|
|
92
|
+
/** Record overall pipeline result */
|
|
93
|
+
recordPipelineCompletion(state) {
|
|
94
|
+
const entry = {
|
|
95
|
+
id: randomUUID(),
|
|
96
|
+
timestamp: new Date().toISOString(),
|
|
97
|
+
suggestion: {
|
|
98
|
+
type: 'pipeline-completion',
|
|
99
|
+
target: state.componentName,
|
|
100
|
+
proposed: `Full pipeline for ${state.componentName}`,
|
|
101
|
+
},
|
|
102
|
+
decision: state.status === 'completed' ? 'accepted' : 'rejected',
|
|
103
|
+
reason: state.status === 'failed'
|
|
104
|
+
? `Pipeline failed at ${state.currentAgent}`
|
|
105
|
+
: undefined,
|
|
106
|
+
tags: ['pipeline', 'completion', state.status],
|
|
107
|
+
};
|
|
108
|
+
this.learningHistory.record(entry);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get learning insights relevant to a component being built.
|
|
112
|
+
* Queries LearningHistory for entries tagged with 'pipeline'.
|
|
113
|
+
*/
|
|
114
|
+
getRelevantLearnings(componentName) {
|
|
115
|
+
return this.learningHistory.getByTag('pipeline');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=learning-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-bridge.js","sourceRoot":"","sources":["../../src/pipeline/learning-bridge.ts"],"names":[],"mappings":"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"}
|