@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,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"}