@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,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Type Utilities — Constants and helpers for action planning
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Map signal types to their default risk levels
|
|
6
|
+
*/
|
|
7
|
+
export const ACTION_RISK_MAP = {
|
|
8
|
+
'component-delete': 'critical',
|
|
9
|
+
'breaking-change': 'critical',
|
|
10
|
+
'component-rename': 'high',
|
|
11
|
+
'token-rename': 'medium',
|
|
12
|
+
'component-modify': 'medium',
|
|
13
|
+
'component-accessibility-issue': 'medium',
|
|
14
|
+
'token-deprecation': 'medium',
|
|
15
|
+
'component-missing-docs': 'low',
|
|
16
|
+
'documentation-outdated': 'low',
|
|
17
|
+
'token-orphaned': 'low',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Get default risk level for a signal type
|
|
21
|
+
*/
|
|
22
|
+
export function getDefaultRiskForSignal(signalType) {
|
|
23
|
+
return ACTION_RISK_MAP[signalType] || 'low';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Generate human-readable description of a planned action
|
|
27
|
+
*/
|
|
28
|
+
export function describeAction(action) {
|
|
29
|
+
const riskLabel = action.risk === 'critical' ? '[CRITICAL] ' : action.risk === 'high' ? '[HIGH] ' : '';
|
|
30
|
+
switch (action.actionType) {
|
|
31
|
+
case 'suggest':
|
|
32
|
+
return `${riskLabel}Suggest review for ${action.signal.target}: ${action.signal.message}`;
|
|
33
|
+
case 'notify':
|
|
34
|
+
return `${riskLabel}Send notification about ${action.signal.target}: ${action.signal.message}`;
|
|
35
|
+
case 'draft_pr':
|
|
36
|
+
return `Create draft PR to fix ${action.signal.target}: ${action.signal.message}`;
|
|
37
|
+
case 'create_pr':
|
|
38
|
+
return `Create ready-for-review PR to fix ${action.signal.target}: ${action.signal.message}`;
|
|
39
|
+
case 'auto_fix':
|
|
40
|
+
return `${riskLabel}Auto-fix ${action.signal.target}: ${action.signal.message}`;
|
|
41
|
+
case 'auto_merge':
|
|
42
|
+
return `${riskLabel}Auto-fix and merge for ${action.signal.target}: ${action.signal.message}`;
|
|
43
|
+
case 'update_docs':
|
|
44
|
+
return `Update documentation for ${action.signal.target}: ${action.signal.message}`;
|
|
45
|
+
case 'escalate':
|
|
46
|
+
return `${riskLabel}ESCALATE to human review for ${action.signal.target}: ${action.signal.message}`;
|
|
47
|
+
default:
|
|
48
|
+
return action.signal.message;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if an action can be automatically executed without human approval
|
|
53
|
+
*
|
|
54
|
+
* Auto-executable actions:
|
|
55
|
+
* - suggest: no, needs review
|
|
56
|
+
* - notify: yes, just information
|
|
57
|
+
* - draft_pr: no, needs review
|
|
58
|
+
* - create_pr: no, needs review
|
|
59
|
+
* - auto_fix: yes, but recorded
|
|
60
|
+
* - auto_merge: yes, but recorded
|
|
61
|
+
* - update_docs: yes, but recorded
|
|
62
|
+
* - escalate: no, by definition requires human
|
|
63
|
+
*/
|
|
64
|
+
export function canAutoExecute(action) {
|
|
65
|
+
if (!action.permitted) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
switch (action.actionType) {
|
|
69
|
+
case 'notify':
|
|
70
|
+
case 'auto_fix':
|
|
71
|
+
case 'auto_merge':
|
|
72
|
+
case 'update_docs':
|
|
73
|
+
return true;
|
|
74
|
+
case 'suggest':
|
|
75
|
+
case 'draft_pr':
|
|
76
|
+
case 'create_pr':
|
|
77
|
+
case 'escalate':
|
|
78
|
+
return false;
|
|
79
|
+
default:
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=action-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-types.js","sourceRoot":"","sources":["../../src/plan/action-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA8B;IACxD,kBAAkB,EAAE,UAAU;IAC9B,iBAAiB,EAAE,UAAU;IAC7B,kBAAkB,EAAE,MAAM;IAC1B,cAAc,EAAE,QAAQ;IACxB,kBAAkB,EAAE,QAAQ;IAC5B,+BAA+B,EAAE,QAAQ;IACzC,mBAAmB,EAAE,QAAQ;IAC7B,wBAAwB,EAAE,KAAK;IAC/B,wBAAwB,EAAE,KAAK;IAC/B,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,SAAS,GACb,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvF,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,GAAG,SAAS,sBAAsB,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAE5F,KAAK,QAAQ;YACX,OAAO,GAAG,SAAS,2BAA2B,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjG,KAAK,UAAU;YACb,OAAO,0BAA0B,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEpF,KAAK,WAAW;YACd,OAAO,qCAAqC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAE/F,KAAK,UAAU;YACb,OAAO,GAAG,SAAS,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAElF,KAAK,YAAY;YACf,OAAO,GAAG,SAAS,0BAA0B,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEhG,KAAK,aAAa;YAChB,OAAO,4BAA4B,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEtF,KAAK,UAAU;YACb,OAAO,GAAG,SAAS,gCAAgC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEtG;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY,CAAC;QAClB,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC;QAEd,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC;QAEf;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DecisionEngine — Evaluates signals and plans actions
|
|
3
|
+
*
|
|
4
|
+
* Given a signal, determines the appropriate action considering:
|
|
5
|
+
* - Signal severity and target type (affects risk)
|
|
6
|
+
* - Historical success rate (affects confidence)
|
|
7
|
+
* - Current trust level and permissions
|
|
8
|
+
* - Governance rules
|
|
9
|
+
*/
|
|
10
|
+
import { Signal, PlannedAction } from '../types.js';
|
|
11
|
+
import { TrustManager } from '../governance/trust-manager.js';
|
|
12
|
+
import { RulesEngine } from '../governance/rules-engine.js';
|
|
13
|
+
export declare class DecisionEngine {
|
|
14
|
+
private trustManager;
|
|
15
|
+
private rulesEngine;
|
|
16
|
+
constructor(trustManager: TrustManager, rulesEngine: RulesEngine);
|
|
17
|
+
/**
|
|
18
|
+
* Evaluate a signal and plan an action
|
|
19
|
+
*
|
|
20
|
+
* Returns a PlannedAction that:
|
|
21
|
+
* 1. Has a recommended action from the rules engine
|
|
22
|
+
* 2. Calculates risk based on signal and target type
|
|
23
|
+
* 3. Calculates confidence from success history
|
|
24
|
+
* 4. Checks if the action is permitted at current trust level
|
|
25
|
+
* 5. Downgrades action if not permitted
|
|
26
|
+
*/
|
|
27
|
+
evaluate(signal: Signal): Promise<PlannedAction>;
|
|
28
|
+
/**
|
|
29
|
+
* Calculate risk level based on signal severity and target type
|
|
30
|
+
*
|
|
31
|
+
* - Component deletion = critical
|
|
32
|
+
* - Breaking changes = critical
|
|
33
|
+
* - Token renames = medium
|
|
34
|
+
* - Documentation changes = low
|
|
35
|
+
* - Default = based on signal severity
|
|
36
|
+
*/
|
|
37
|
+
private calculateRisk;
|
|
38
|
+
/**
|
|
39
|
+
* Calculate confidence score (0-1) based on trust manager's success rate
|
|
40
|
+
*
|
|
41
|
+
* Confidence = accepted / total completions
|
|
42
|
+
* Caps at 0.95 to leave room for humility
|
|
43
|
+
*/
|
|
44
|
+
private calculateConfidence;
|
|
45
|
+
/**
|
|
46
|
+
* Downgrade an action to the highest permitted action at the current trust level
|
|
47
|
+
*
|
|
48
|
+
* Downgrade hierarchy (in order of permission):
|
|
49
|
+
* escalate > auto_merge > auto_fix > create_pr > draft_pr > suggest > notify
|
|
50
|
+
*/
|
|
51
|
+
private downgradeAction;
|
|
52
|
+
/**
|
|
53
|
+
* Generate human-readable description of the planned action
|
|
54
|
+
*/
|
|
55
|
+
private describeAction;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=decision-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-engine.d.ts","sourceRoot":"","sources":["../../src/plan/decision-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAqC,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAK5D,qBAAa,cAAc;IACb,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,WAAW;gBAA/C,YAAY,EAAE,YAAY,EAAU,WAAW,EAAE,WAAW;IAEhF;;;;;;;;;OASG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA+BtD;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAmCrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAwBvB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DecisionEngine — Evaluates signals and plans actions
|
|
3
|
+
*
|
|
4
|
+
* Given a signal, determines the appropriate action considering:
|
|
5
|
+
* - Signal severity and target type (affects risk)
|
|
6
|
+
* - Historical success rate (affects confidence)
|
|
7
|
+
* - Current trust level and permissions
|
|
8
|
+
* - Governance rules
|
|
9
|
+
*/
|
|
10
|
+
import { canPerform } from '../governance/permissions.js';
|
|
11
|
+
import { generateId } from '../utils/id.js';
|
|
12
|
+
export class DecisionEngine {
|
|
13
|
+
trustManager;
|
|
14
|
+
rulesEngine;
|
|
15
|
+
constructor(trustManager, rulesEngine) {
|
|
16
|
+
this.trustManager = trustManager;
|
|
17
|
+
this.rulesEngine = rulesEngine;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Evaluate a signal and plan an action
|
|
21
|
+
*
|
|
22
|
+
* Returns a PlannedAction that:
|
|
23
|
+
* 1. Has a recommended action from the rules engine
|
|
24
|
+
* 2. Calculates risk based on signal and target type
|
|
25
|
+
* 3. Calculates confidence from success history
|
|
26
|
+
* 4. Checks if the action is permitted at current trust level
|
|
27
|
+
* 5. Downgrades action if not permitted
|
|
28
|
+
*/
|
|
29
|
+
async evaluate(signal) {
|
|
30
|
+
const trustLevel = this.trustManager.getCurrentLevel();
|
|
31
|
+
const risk = this.calculateRisk(signal);
|
|
32
|
+
const confidence = this.calculateConfidence();
|
|
33
|
+
// Get recommended action from rules engine
|
|
34
|
+
let actionType = this.rulesEngine.evaluate(signal, trustLevel);
|
|
35
|
+
// Check if action is permitted at current trust level
|
|
36
|
+
const permitted = canPerform(trustLevel, actionType, risk);
|
|
37
|
+
// If not permitted, downgrade to the highest permitted action
|
|
38
|
+
if (!permitted) {
|
|
39
|
+
actionType = this.downgradeAction(actionType, trustLevel, risk);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
id: generateId(),
|
|
43
|
+
timestamp: new Date().toISOString(),
|
|
44
|
+
signal,
|
|
45
|
+
actionType,
|
|
46
|
+
risk,
|
|
47
|
+
confidence,
|
|
48
|
+
trustLevel,
|
|
49
|
+
permitted,
|
|
50
|
+
description: this.describeAction(signal, actionType, risk),
|
|
51
|
+
changes: [],
|
|
52
|
+
status: 'pending',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Calculate risk level based on signal severity and target type
|
|
57
|
+
*
|
|
58
|
+
* - Component deletion = critical
|
|
59
|
+
* - Breaking changes = critical
|
|
60
|
+
* - Token renames = medium
|
|
61
|
+
* - Documentation changes = low
|
|
62
|
+
* - Default = based on signal severity
|
|
63
|
+
*/
|
|
64
|
+
calculateRisk(signal) {
|
|
65
|
+
// Map signal types to risk levels
|
|
66
|
+
const riskMap = {
|
|
67
|
+
'component-delete': 'critical',
|
|
68
|
+
'breaking-change': 'critical',
|
|
69
|
+
'component-rename': 'high',
|
|
70
|
+
'token-rename': 'medium',
|
|
71
|
+
'component-modify': 'medium',
|
|
72
|
+
'component-missing-docs': 'low',
|
|
73
|
+
'documentation-outdated': 'low',
|
|
74
|
+
'component-accessibility-issue': 'medium',
|
|
75
|
+
'token-deprecation': 'medium',
|
|
76
|
+
'token-orphaned': 'low',
|
|
77
|
+
};
|
|
78
|
+
// Check for explicit mapping
|
|
79
|
+
if (riskMap[signal.type]) {
|
|
80
|
+
return riskMap[signal.type];
|
|
81
|
+
}
|
|
82
|
+
// Fall back to severity-based risk
|
|
83
|
+
switch (signal.severity) {
|
|
84
|
+
case 'critical':
|
|
85
|
+
return 'critical';
|
|
86
|
+
case 'error':
|
|
87
|
+
return 'high';
|
|
88
|
+
case 'warning':
|
|
89
|
+
return 'medium';
|
|
90
|
+
case 'info':
|
|
91
|
+
return 'low';
|
|
92
|
+
default:
|
|
93
|
+
return 'low';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Calculate confidence score (0-1) based on trust manager's success rate
|
|
98
|
+
*
|
|
99
|
+
* Confidence = accepted / total completions
|
|
100
|
+
* Caps at 0.95 to leave room for humility
|
|
101
|
+
*/
|
|
102
|
+
calculateConfidence() {
|
|
103
|
+
const stats = this.trustManager.getStats();
|
|
104
|
+
if (stats.totalActions === 0) {
|
|
105
|
+
return 0.5; // Default for brand new agent
|
|
106
|
+
}
|
|
107
|
+
const confidence = stats.accepted / stats.totalActions;
|
|
108
|
+
return Math.min(confidence, 0.95);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Downgrade an action to the highest permitted action at the current trust level
|
|
112
|
+
*
|
|
113
|
+
* Downgrade hierarchy (in order of permission):
|
|
114
|
+
* escalate > auto_merge > auto_fix > create_pr > draft_pr > suggest > notify
|
|
115
|
+
*/
|
|
116
|
+
downgradeAction(action, trustLevel, risk) {
|
|
117
|
+
const downgradeHierarchy = [
|
|
118
|
+
'escalate',
|
|
119
|
+
'auto_merge',
|
|
120
|
+
'auto_fix',
|
|
121
|
+
'create_pr',
|
|
122
|
+
'draft_pr',
|
|
123
|
+
'suggest',
|
|
124
|
+
'notify',
|
|
125
|
+
];
|
|
126
|
+
// Start from the highest permitted and work down
|
|
127
|
+
for (const candidate of downgradeHierarchy) {
|
|
128
|
+
if (canPerform(trustLevel, candidate, risk)) {
|
|
129
|
+
return candidate;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Always safe fallback
|
|
133
|
+
return 'notify';
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Generate human-readable description of the planned action
|
|
137
|
+
*/
|
|
138
|
+
describeAction(signal, action, risk) {
|
|
139
|
+
const riskLabel = risk === 'critical' ? '[CRITICAL]' : risk === 'high' ? '[HIGH]' : '';
|
|
140
|
+
switch (action) {
|
|
141
|
+
case 'suggest':
|
|
142
|
+
return `${riskLabel} Suggest review: ${signal.message}`;
|
|
143
|
+
case 'notify':
|
|
144
|
+
return `${riskLabel} Notify about: ${signal.message}`;
|
|
145
|
+
case 'draft_pr':
|
|
146
|
+
return `Create draft PR for: ${signal.message}`;
|
|
147
|
+
case 'create_pr':
|
|
148
|
+
return `Create PR to fix: ${signal.message}`;
|
|
149
|
+
case 'auto_fix':
|
|
150
|
+
return `Auto-fix: ${signal.message}`;
|
|
151
|
+
case 'auto_merge':
|
|
152
|
+
return `Auto-fix and merge: ${signal.message}`;
|
|
153
|
+
case 'update_docs':
|
|
154
|
+
return `Update documentation: ${signal.message}`;
|
|
155
|
+
case 'escalate':
|
|
156
|
+
return `${riskLabel} ESCALATE: ${signal.message}`;
|
|
157
|
+
default:
|
|
158
|
+
return signal.message;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=decision-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-engine.js","sourceRoot":"","sources":["../../src/plan/decision-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Layer — Action planning, risk assessment, and execution readiness
|
|
3
|
+
*/
|
|
4
|
+
export { DecisionEngine } from './decision-engine.js';
|
|
5
|
+
export { ACTION_RISK_MAP, getDefaultRiskForSignal, describeAction, canAutoExecute } from './action-types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Layer — Action planning, risk assessment, and execution readiness
|
|
3
|
+
*/
|
|
4
|
+
export { DecisionEngine } from './decision-engine.js';
|
|
5
|
+
export { ACTION_RISK_MAP, getDefaultRiskForSignal, describeAction, canAutoExecute } from './action-types.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|