@timmeck/brain 1.8.1 → 1.8.3

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 (164) hide show
  1. package/BRAIN_PLAN.md +3324 -3324
  2. package/LICENSE +21 -21
  3. package/dist/cli/commands/dashboard.js +595 -595
  4. package/dist/cli/commands/doctor.js +6 -1
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/dashboard/server.js +25 -25
  7. package/dist/db/migrations/001_core_schema.js +115 -115
  8. package/dist/db/migrations/002_learning_schema.js +33 -33
  9. package/dist/db/migrations/003_code_schema.js +48 -48
  10. package/dist/db/migrations/004_synapses_schema.js +52 -52
  11. package/dist/db/migrations/005_fts_indexes.js +73 -73
  12. package/dist/db/migrations/007_feedback.js +8 -8
  13. package/dist/db/migrations/008_git_integration.js +33 -33
  14. package/dist/db/migrations/009_embeddings.js +3 -3
  15. package/dist/db/repositories/antipattern.repository.js +3 -3
  16. package/dist/db/repositories/code-module.repository.js +32 -32
  17. package/dist/db/repositories/notification.repository.js +3 -3
  18. package/dist/db/repositories/project.repository.js +21 -21
  19. package/dist/db/repositories/rule.repository.js +24 -24
  20. package/dist/db/repositories/solution.repository.js +50 -50
  21. package/dist/db/repositories/synapse.repository.js +18 -18
  22. package/dist/db/repositories/terminal.repository.js +24 -24
  23. package/dist/ipc/server.d.ts +8 -0
  24. package/dist/ipc/server.js +67 -1
  25. package/dist/ipc/server.js.map +1 -1
  26. package/dist/matching/error-matcher.js +5 -5
  27. package/dist/matching/fingerprint.js +6 -1
  28. package/dist/matching/fingerprint.js.map +1 -1
  29. package/dist/services/error.service.js +4 -3
  30. package/dist/services/error.service.js.map +1 -1
  31. package/dist/services/git.service.js +14 -14
  32. package/package.json +49 -49
  33. package/src/api/server.ts +395 -395
  34. package/src/brain.ts +266 -266
  35. package/src/cli/colors.ts +116 -116
  36. package/src/cli/commands/config.ts +169 -169
  37. package/src/cli/commands/dashboard.ts +755 -755
  38. package/src/cli/commands/doctor.ts +124 -118
  39. package/src/cli/commands/explain.ts +83 -83
  40. package/src/cli/commands/export.ts +31 -31
  41. package/src/cli/commands/import.ts +199 -199
  42. package/src/cli/commands/insights.ts +65 -65
  43. package/src/cli/commands/learn.ts +24 -24
  44. package/src/cli/commands/modules.ts +53 -53
  45. package/src/cli/commands/network.ts +67 -67
  46. package/src/cli/commands/projects.ts +42 -42
  47. package/src/cli/commands/query.ts +120 -120
  48. package/src/cli/commands/start.ts +62 -62
  49. package/src/cli/commands/status.ts +75 -75
  50. package/src/cli/commands/stop.ts +34 -34
  51. package/src/cli/ipc-helper.ts +22 -22
  52. package/src/cli/update-check.ts +63 -63
  53. package/src/code/fingerprint.ts +87 -87
  54. package/src/code/parsers/generic.ts +29 -29
  55. package/src/code/parsers/python.ts +54 -54
  56. package/src/code/parsers/typescript.ts +65 -65
  57. package/src/code/registry.ts +60 -60
  58. package/src/dashboard/server.ts +142 -142
  59. package/src/db/connection.ts +22 -22
  60. package/src/db/migrations/001_core_schema.ts +120 -120
  61. package/src/db/migrations/002_learning_schema.ts +38 -38
  62. package/src/db/migrations/003_code_schema.ts +53 -53
  63. package/src/db/migrations/004_synapses_schema.ts +57 -57
  64. package/src/db/migrations/005_fts_indexes.ts +78 -78
  65. package/src/db/migrations/006_synapses_phase3.ts +17 -17
  66. package/src/db/migrations/007_feedback.ts +13 -13
  67. package/src/db/migrations/008_git_integration.ts +38 -38
  68. package/src/db/migrations/009_embeddings.ts +8 -8
  69. package/src/db/repositories/antipattern.repository.ts +66 -66
  70. package/src/db/repositories/code-module.repository.ts +142 -142
  71. package/src/db/repositories/notification.repository.ts +66 -66
  72. package/src/db/repositories/project.repository.ts +93 -93
  73. package/src/db/repositories/rule.repository.ts +108 -108
  74. package/src/db/repositories/solution.repository.ts +154 -154
  75. package/src/db/repositories/synapse.repository.ts +153 -153
  76. package/src/db/repositories/terminal.repository.ts +101 -101
  77. package/src/embeddings/engine.ts +238 -238
  78. package/src/index.ts +63 -63
  79. package/src/ipc/client.ts +118 -118
  80. package/src/ipc/protocol.ts +35 -35
  81. package/src/ipc/router.ts +133 -133
  82. package/src/ipc/server.ts +176 -110
  83. package/src/learning/decay.ts +46 -46
  84. package/src/learning/pattern-extractor.ts +90 -90
  85. package/src/learning/rule-generator.ts +74 -74
  86. package/src/matching/error-matcher.ts +5 -5
  87. package/src/matching/fingerprint.ts +34 -29
  88. package/src/matching/similarity.ts +61 -61
  89. package/src/matching/tfidf.ts +74 -74
  90. package/src/matching/tokenizer.ts +41 -41
  91. package/src/mcp/auto-detect.ts +93 -93
  92. package/src/mcp/http-server.ts +140 -140
  93. package/src/mcp/server.ts +73 -73
  94. package/src/parsing/error-parser.ts +28 -28
  95. package/src/parsing/parsers/compiler.ts +93 -93
  96. package/src/parsing/parsers/generic.ts +28 -28
  97. package/src/parsing/parsers/go.ts +97 -97
  98. package/src/parsing/parsers/node.ts +69 -69
  99. package/src/parsing/parsers/python.ts +62 -62
  100. package/src/parsing/parsers/rust.ts +50 -50
  101. package/src/parsing/parsers/shell.ts +42 -42
  102. package/src/parsing/types.ts +47 -47
  103. package/src/research/gap-analyzer.ts +135 -135
  104. package/src/research/insight-generator.ts +123 -123
  105. package/src/research/research-engine.ts +116 -116
  106. package/src/research/synergy-detector.ts +126 -126
  107. package/src/research/template-extractor.ts +130 -130
  108. package/src/research/trend-analyzer.ts +127 -127
  109. package/src/services/code.service.ts +271 -271
  110. package/src/services/error.service.ts +4 -3
  111. package/src/services/git.service.ts +132 -132
  112. package/src/services/notification.service.ts +41 -41
  113. package/src/services/synapse.service.ts +59 -59
  114. package/src/services/terminal.service.ts +81 -81
  115. package/src/synapses/activation.ts +80 -80
  116. package/src/synapses/decay.ts +38 -38
  117. package/src/synapses/hebbian.ts +69 -69
  118. package/src/synapses/pathfinder.ts +81 -81
  119. package/src/synapses/synapse-manager.ts +109 -109
  120. package/src/types/code.types.ts +52 -52
  121. package/src/types/error.types.ts +67 -67
  122. package/src/types/ipc.types.ts +8 -8
  123. package/src/types/mcp.types.ts +53 -53
  124. package/src/types/research.types.ts +28 -28
  125. package/src/types/solution.types.ts +30 -30
  126. package/src/utils/events.ts +45 -45
  127. package/src/utils/hash.ts +5 -5
  128. package/src/utils/logger.ts +48 -48
  129. package/src/utils/paths.ts +19 -19
  130. package/tests/e2e/test_code_intelligence.py +1015 -0
  131. package/tests/e2e/test_error_memory.py +451 -0
  132. package/tests/e2e/test_full_integration.py +534 -0
  133. package/tests/fixtures/code-modules/modules.ts +83 -83
  134. package/tests/fixtures/errors/go.ts +9 -9
  135. package/tests/fixtures/errors/node.ts +24 -24
  136. package/tests/fixtures/errors/python.ts +21 -21
  137. package/tests/fixtures/errors/rust.ts +25 -25
  138. package/tests/fixtures/errors/shell.ts +15 -15
  139. package/tests/fixtures/solutions/solutions.ts +27 -27
  140. package/tests/helpers/setup-db.ts +52 -52
  141. package/tests/integration/code-flow.test.ts +86 -86
  142. package/tests/integration/error-flow.test.ts +83 -83
  143. package/tests/integration/ipc-flow.test.ts +166 -166
  144. package/tests/integration/learning-cycle.test.ts +82 -82
  145. package/tests/integration/synapse-flow.test.ts +117 -117
  146. package/tests/unit/code/analyzer.test.ts +58 -58
  147. package/tests/unit/code/fingerprint.test.ts +51 -51
  148. package/tests/unit/code/scorer.test.ts +55 -55
  149. package/tests/unit/learning/confidence-scorer.test.ts +60 -60
  150. package/tests/unit/learning/decay.test.ts +45 -45
  151. package/tests/unit/learning/pattern-extractor.test.ts +50 -50
  152. package/tests/unit/matching/error-matcher.test.ts +69 -69
  153. package/tests/unit/matching/fingerprint.test.ts +47 -47
  154. package/tests/unit/matching/similarity.test.ts +65 -65
  155. package/tests/unit/matching/tfidf.test.ts +71 -71
  156. package/tests/unit/matching/tokenizer.test.ts +83 -83
  157. package/tests/unit/parsing/parsers.test.ts +113 -113
  158. package/tests/unit/research/gap-analyzer.test.ts +45 -45
  159. package/tests/unit/research/trend-analyzer.test.ts +45 -45
  160. package/tests/unit/synapses/activation.test.ts +80 -80
  161. package/tests/unit/synapses/decay.test.ts +27 -27
  162. package/tests/unit/synapses/hebbian.test.ts +96 -96
  163. package/tests/unit/synapses/pathfinder.test.ts +72 -72
  164. package/tsconfig.json +18 -18
@@ -1,109 +1,109 @@
1
- import type { SynapsesConfig } from '../types/config.types.js';
2
- import type { NodeType, SynapseType, SynapseRecord, NetworkStats } from '../types/synapse.types.js';
3
- import type { SynapseRepository } from '../db/repositories/synapse.repository.js';
4
- import { strengthen, weaken, type NodeRef } from './hebbian.js';
5
- import { decayAll } from './decay.js';
6
- import { spreadingActivation, type ActivationResult } from './activation.js';
7
- import { findPath, type SynapsePath } from './pathfinder.js';
8
- import { getLogger } from '../utils/logger.js';
9
-
10
- export class SynapseManager {
11
- private logger = getLogger();
12
-
13
- constructor(
14
- private repo: SynapseRepository,
15
- private config: SynapsesConfig,
16
- ) {}
17
-
18
- strengthen(
19
- source: NodeRef,
20
- target: NodeRef,
21
- synapseType: SynapseType,
22
- context?: Record<string, unknown>,
23
- ): SynapseRecord {
24
- this.logger.debug(`Strengthening synapse ${source.type}:${source.id} --${synapseType}--> ${target.type}:${target.id}`);
25
- return strengthen(this.repo, source, target, synapseType, {
26
- initialWeight: this.config.initialWeight,
27
- learningRate: this.config.learningRate,
28
- pruneThreshold: this.config.pruneThreshold,
29
- }, context);
30
- }
31
-
32
- weaken(synapseId: number, factor: number = 0.5): void {
33
- this.logger.debug(`Weakening synapse ${synapseId} by factor ${factor}`);
34
- weaken(this.repo, synapseId, {
35
- initialWeight: this.config.initialWeight,
36
- learningRate: this.config.learningRate,
37
- pruneThreshold: this.config.pruneThreshold,
38
- }, factor);
39
- }
40
-
41
- find(
42
- source: NodeRef,
43
- target: NodeRef,
44
- synapseType: SynapseType,
45
- ): SynapseRecord | undefined {
46
- return this.repo.findBySourceTarget(
47
- source.type, source.id, target.type, target.id, synapseType,
48
- );
49
- }
50
-
51
- activate(
52
- startNode: NodeRef,
53
- maxDepth?: number,
54
- minWeight?: number,
55
- ): ActivationResult[] {
56
- return spreadingActivation(
57
- this.repo,
58
- startNode,
59
- maxDepth ?? this.config.maxDepth,
60
- minWeight ?? this.config.minActivationWeight,
61
- );
62
- }
63
-
64
- findPath(from: NodeRef, to: NodeRef, maxDepth?: number): SynapsePath | null {
65
- return findPath(this.repo, from, to, maxDepth ?? this.config.maxDepth + 2);
66
- }
67
-
68
- runDecay(): { decayed: number; pruned: number } {
69
- this.logger.info('Running synapse decay cycle');
70
- const result = decayAll(this.repo, {
71
- decayHalfLifeDays: this.config.decayHalfLifeDays,
72
- decayAfterDays: this.config.decayAfterDays,
73
- pruneThreshold: this.config.pruneThreshold,
74
- });
75
- this.logger.info(`Decay complete: ${result.decayed} decayed, ${result.pruned} pruned`);
76
- return result;
77
- }
78
-
79
- getErrorContext(errorId: number): {
80
- solutions: ActivationResult[];
81
- relatedErrors: ActivationResult[];
82
- relevantModules: ActivationResult[];
83
- preventionRules: ActivationResult[];
84
- insights: ActivationResult[];
85
- } {
86
- const all = this.activate({ type: 'error', id: errorId });
87
- return {
88
- solutions: all.filter(a => a.node.type === 'solution'),
89
- relatedErrors: all.filter(a => a.node.type === 'error'),
90
- relevantModules: all.filter(a => a.node.type === 'code_module'),
91
- preventionRules: all.filter(a => a.node.type === 'rule'),
92
- insights: all.filter(a => a.node.type === 'insight'),
93
- };
94
- }
95
-
96
- getStrongestSynapses(limit: number = 20): SynapseRecord[] {
97
- return this.repo.topByWeight(limit);
98
- }
99
-
100
- getNetworkStats(): NetworkStats {
101
- return {
102
- totalNodes: this.repo.countNodes(),
103
- totalSynapses: this.repo.totalCount(),
104
- avgWeight: this.repo.avgWeight(),
105
- nodesByType: {} as Record<NodeType, number>,
106
- synapsesByType: this.repo.countByType() as Record<SynapseType, number>,
107
- };
108
- }
109
- }
1
+ import type { SynapsesConfig } from '../types/config.types.js';
2
+ import type { NodeType, SynapseType, SynapseRecord, NetworkStats } from '../types/synapse.types.js';
3
+ import type { SynapseRepository } from '../db/repositories/synapse.repository.js';
4
+ import { strengthen, weaken, type NodeRef } from './hebbian.js';
5
+ import { decayAll } from './decay.js';
6
+ import { spreadingActivation, type ActivationResult } from './activation.js';
7
+ import { findPath, type SynapsePath } from './pathfinder.js';
8
+ import { getLogger } from '../utils/logger.js';
9
+
10
+ export class SynapseManager {
11
+ private logger = getLogger();
12
+
13
+ constructor(
14
+ private repo: SynapseRepository,
15
+ private config: SynapsesConfig,
16
+ ) {}
17
+
18
+ strengthen(
19
+ source: NodeRef,
20
+ target: NodeRef,
21
+ synapseType: SynapseType,
22
+ context?: Record<string, unknown>,
23
+ ): SynapseRecord {
24
+ this.logger.debug(`Strengthening synapse ${source.type}:${source.id} --${synapseType}--> ${target.type}:${target.id}`);
25
+ return strengthen(this.repo, source, target, synapseType, {
26
+ initialWeight: this.config.initialWeight,
27
+ learningRate: this.config.learningRate,
28
+ pruneThreshold: this.config.pruneThreshold,
29
+ }, context);
30
+ }
31
+
32
+ weaken(synapseId: number, factor: number = 0.5): void {
33
+ this.logger.debug(`Weakening synapse ${synapseId} by factor ${factor}`);
34
+ weaken(this.repo, synapseId, {
35
+ initialWeight: this.config.initialWeight,
36
+ learningRate: this.config.learningRate,
37
+ pruneThreshold: this.config.pruneThreshold,
38
+ }, factor);
39
+ }
40
+
41
+ find(
42
+ source: NodeRef,
43
+ target: NodeRef,
44
+ synapseType: SynapseType,
45
+ ): SynapseRecord | undefined {
46
+ return this.repo.findBySourceTarget(
47
+ source.type, source.id, target.type, target.id, synapseType,
48
+ );
49
+ }
50
+
51
+ activate(
52
+ startNode: NodeRef,
53
+ maxDepth?: number,
54
+ minWeight?: number,
55
+ ): ActivationResult[] {
56
+ return spreadingActivation(
57
+ this.repo,
58
+ startNode,
59
+ maxDepth ?? this.config.maxDepth,
60
+ minWeight ?? this.config.minActivationWeight,
61
+ );
62
+ }
63
+
64
+ findPath(from: NodeRef, to: NodeRef, maxDepth?: number): SynapsePath | null {
65
+ return findPath(this.repo, from, to, maxDepth ?? this.config.maxDepth + 2);
66
+ }
67
+
68
+ runDecay(): { decayed: number; pruned: number } {
69
+ this.logger.info('Running synapse decay cycle');
70
+ const result = decayAll(this.repo, {
71
+ decayHalfLifeDays: this.config.decayHalfLifeDays,
72
+ decayAfterDays: this.config.decayAfterDays,
73
+ pruneThreshold: this.config.pruneThreshold,
74
+ });
75
+ this.logger.info(`Decay complete: ${result.decayed} decayed, ${result.pruned} pruned`);
76
+ return result;
77
+ }
78
+
79
+ getErrorContext(errorId: number): {
80
+ solutions: ActivationResult[];
81
+ relatedErrors: ActivationResult[];
82
+ relevantModules: ActivationResult[];
83
+ preventionRules: ActivationResult[];
84
+ insights: ActivationResult[];
85
+ } {
86
+ const all = this.activate({ type: 'error', id: errorId });
87
+ return {
88
+ solutions: all.filter(a => a.node.type === 'solution'),
89
+ relatedErrors: all.filter(a => a.node.type === 'error'),
90
+ relevantModules: all.filter(a => a.node.type === 'code_module'),
91
+ preventionRules: all.filter(a => a.node.type === 'rule'),
92
+ insights: all.filter(a => a.node.type === 'insight'),
93
+ };
94
+ }
95
+
96
+ getStrongestSynapses(limit: number = 20): SynapseRecord[] {
97
+ return this.repo.topByWeight(limit);
98
+ }
99
+
100
+ getNetworkStats(): NetworkStats {
101
+ return {
102
+ totalNodes: this.repo.countNodes(),
103
+ totalSynapses: this.repo.totalCount(),
104
+ avgWeight: this.repo.avgWeight(),
105
+ nodesByType: {} as Record<NodeType, number>,
106
+ synapsesByType: this.repo.countByType() as Record<SynapseType, number>,
107
+ };
108
+ }
109
+ }
@@ -1,52 +1,52 @@
1
- export interface CodeModuleRecord {
2
- id: number;
3
- project_id: number;
4
- name: string;
5
- file_path: string;
6
- language: string;
7
- fingerprint: string;
8
- description: string | null;
9
- source_hash: string;
10
- lines_of_code: number;
11
- complexity: number | null;
12
- reusability_score: number;
13
- created_at: string;
14
- updated_at: string;
15
- }
16
-
17
- export interface ModuleUsage {
18
- id: number;
19
- module_id: number;
20
- used_in_project_id: number;
21
- used_in_file: string;
22
- usage_type: string;
23
- first_used: string;
24
- last_used: string;
25
- }
26
-
27
- export interface ModuleSimilarity {
28
- id: number;
29
- module_a_id: number;
30
- module_b_id: number;
31
- similarity_score: number;
32
- computed_at: string;
33
- }
34
-
35
- export interface CodeUnit {
36
- name: string;
37
- filePath: string;
38
- language: string;
39
- source: string;
40
- exports: ExportInfo[];
41
- }
42
-
43
- export interface ExportInfo {
44
- name: string;
45
- type: 'function' | 'class' | 'constant' | 'type' | 'interface' | 'variable';
46
- }
47
-
48
- export interface ReusabilitySignal {
49
- name: string;
50
- score: number;
51
- reason: string;
52
- }
1
+ export interface CodeModuleRecord {
2
+ id: number;
3
+ project_id: number;
4
+ name: string;
5
+ file_path: string;
6
+ language: string;
7
+ fingerprint: string;
8
+ description: string | null;
9
+ source_hash: string;
10
+ lines_of_code: number;
11
+ complexity: number | null;
12
+ reusability_score: number;
13
+ created_at: string;
14
+ updated_at: string;
15
+ }
16
+
17
+ export interface ModuleUsage {
18
+ id: number;
19
+ module_id: number;
20
+ used_in_project_id: number;
21
+ used_in_file: string;
22
+ usage_type: string;
23
+ first_used: string;
24
+ last_used: string;
25
+ }
26
+
27
+ export interface ModuleSimilarity {
28
+ id: number;
29
+ module_a_id: number;
30
+ module_b_id: number;
31
+ similarity_score: number;
32
+ computed_at: string;
33
+ }
34
+
35
+ export interface CodeUnit {
36
+ name: string;
37
+ filePath: string;
38
+ language: string;
39
+ source: string;
40
+ exports: ExportInfo[];
41
+ }
42
+
43
+ export interface ExportInfo {
44
+ name: string;
45
+ type: 'function' | 'class' | 'constant' | 'type' | 'interface' | 'variable';
46
+ }
47
+
48
+ export interface ReusabilitySignal {
49
+ name: string;
50
+ score: number;
51
+ reason: string;
52
+ }
@@ -1,67 +1,67 @@
1
- export interface ErrorRecord {
2
- id: number;
3
- project_id: number;
4
- terminal_id: number | null;
5
- fingerprint: string;
6
- type: string;
7
- message: string;
8
- raw_output: string;
9
- context: string | null;
10
- file_path: string | null;
11
- line_number: number | null;
12
- column_number: number | null;
13
- occurrence_count: number;
14
- first_seen: string;
15
- last_seen: string;
16
- resolved: number;
17
- resolved_at: string | null;
18
- }
19
-
20
- export interface StackFrame {
21
- file: string;
22
- line: number;
23
- column: number | null;
24
- function_name: string | null;
25
- source: string | null;
26
- }
27
-
28
- export interface ParsedError {
29
- type: string;
30
- message: string;
31
- fingerprint: string;
32
- stackFrames: StackFrame[];
33
- filePath: string | null;
34
- lineNumber: number | null;
35
- columnNumber: number | null;
36
- context: string | null;
37
- }
38
-
39
- export interface ErrorParser {
40
- name: string;
41
- canParse(raw: string): boolean;
42
- parse(raw: string): ParsedError | null;
43
- }
44
-
45
- export interface MatchSignal {
46
- field: string;
47
- similarity: number;
48
- weight: number;
49
- }
50
-
51
- export interface MatchResult {
52
- errorId: number;
53
- score: number;
54
- signals: MatchSignal[];
55
- }
56
-
57
- export interface ErrorSolutionPair {
58
- error: ErrorRecord;
59
- solutionIds: number[];
60
- }
61
-
62
- export interface Pattern {
63
- type: string;
64
- message: string;
65
- count: number;
66
- lastSeen: string;
67
- }
1
+ export interface ErrorRecord {
2
+ id: number;
3
+ project_id: number;
4
+ terminal_id: number | null;
5
+ fingerprint: string;
6
+ type: string;
7
+ message: string;
8
+ raw_output: string;
9
+ context: string | null;
10
+ file_path: string | null;
11
+ line_number: number | null;
12
+ column_number: number | null;
13
+ occurrence_count: number;
14
+ first_seen: string;
15
+ last_seen: string;
16
+ resolved: number;
17
+ resolved_at: string | null;
18
+ }
19
+
20
+ export interface StackFrame {
21
+ file: string;
22
+ line: number;
23
+ column: number | null;
24
+ function_name: string | null;
25
+ source: string | null;
26
+ }
27
+
28
+ export interface ParsedError {
29
+ type: string;
30
+ message: string;
31
+ fingerprint: string;
32
+ stackFrames: StackFrame[];
33
+ filePath: string | null;
34
+ lineNumber: number | null;
35
+ columnNumber: number | null;
36
+ context: string | null;
37
+ }
38
+
39
+ export interface ErrorParser {
40
+ name: string;
41
+ canParse(raw: string): boolean;
42
+ parse(raw: string): ParsedError | null;
43
+ }
44
+
45
+ export interface MatchSignal {
46
+ field: string;
47
+ similarity: number;
48
+ weight: number;
49
+ }
50
+
51
+ export interface MatchResult {
52
+ errorId: number;
53
+ score: number;
54
+ signals: MatchSignal[];
55
+ }
56
+
57
+ export interface ErrorSolutionPair {
58
+ error: ErrorRecord;
59
+ solutionIds: number[];
60
+ }
61
+
62
+ export interface Pattern {
63
+ type: string;
64
+ message: string;
65
+ count: number;
66
+ lastSeen: string;
67
+ }
@@ -1,8 +1,8 @@
1
- export interface IpcMessage {
2
- id: string;
3
- type: 'request' | 'response' | 'notification';
4
- method?: string;
5
- params?: unknown;
6
- result?: unknown;
7
- error?: { code: number; message: string };
8
- }
1
+ export interface IpcMessage {
2
+ id: string;
3
+ type: 'request' | 'response' | 'notification';
4
+ method?: string;
5
+ params?: unknown;
6
+ result?: unknown;
7
+ error?: { code: number; message: string };
8
+ }
@@ -1,53 +1,53 @@
1
- export interface HookInput {
2
- tool: string;
3
- arguments: Record<string, unknown>;
4
- }
5
-
6
- export interface ReportErrorParams {
7
- project: string;
8
- error_output: string;
9
- file_path?: string;
10
- terminal_id?: string;
11
- }
12
-
13
- export interface GetSolutionsParams {
14
- error_output?: string;
15
- error_id?: number;
16
- project?: string;
17
- }
18
-
19
- export interface ApplySolutionParams {
20
- error_id: number;
21
- solution_id: number;
22
- terminal_id?: string;
23
- }
24
-
25
- export interface RegisterModuleParams {
26
- project: string;
27
- name: string;
28
- file_path: string;
29
- language: string;
30
- source: string;
31
- description?: string;
32
- }
33
-
34
- export interface SearchModulesParams {
35
- query: string;
36
- language?: string;
37
- project?: string;
38
- limit?: number;
39
- }
40
-
41
- export interface GetInsightsParams {
42
- project?: string;
43
- type?: string;
44
- active_only?: boolean;
45
- limit?: number;
46
- }
47
-
48
- export interface GetNetworkParams {
49
- node_type: string;
50
- node_id: number;
51
- depth?: number;
52
- min_weight?: number;
53
- }
1
+ export interface HookInput {
2
+ tool: string;
3
+ arguments: Record<string, unknown>;
4
+ }
5
+
6
+ export interface ReportErrorParams {
7
+ project: string;
8
+ error_output: string;
9
+ file_path?: string;
10
+ terminal_id?: string;
11
+ }
12
+
13
+ export interface GetSolutionsParams {
14
+ error_output?: string;
15
+ error_id?: number;
16
+ project?: string;
17
+ }
18
+
19
+ export interface ApplySolutionParams {
20
+ error_id: number;
21
+ solution_id: number;
22
+ terminal_id?: string;
23
+ }
24
+
25
+ export interface RegisterModuleParams {
26
+ project: string;
27
+ name: string;
28
+ file_path: string;
29
+ language: string;
30
+ source: string;
31
+ description?: string;
32
+ }
33
+
34
+ export interface SearchModulesParams {
35
+ query: string;
36
+ language?: string;
37
+ project?: string;
38
+ limit?: number;
39
+ }
40
+
41
+ export interface GetInsightsParams {
42
+ project?: string;
43
+ type?: string;
44
+ active_only?: boolean;
45
+ limit?: number;
46
+ }
47
+
48
+ export interface GetNetworkParams {
49
+ node_type: string;
50
+ node_id: number;
51
+ depth?: number;
52
+ min_weight?: number;
53
+ }
@@ -1,28 +1,28 @@
1
- export type InsightType = 'pattern' | 'correlation' | 'suggestion' | 'warning' | 'optimization' | 'trend' | 'gap' | 'synergy' | 'template_candidate' | 'project_suggestion';
2
-
3
- export interface InsightRecord {
4
- id: number;
5
- type: InsightType;
6
- title: string;
7
- description: string;
8
- evidence: string;
9
- priority: number;
10
- project_id: number | null;
11
- active: number;
12
- expires_at: string | null;
13
- created_at: string;
14
- }
15
-
16
- export interface ResearchCycleResult {
17
- insightsGenerated: number;
18
- patternsFound: number;
19
- correlationsFound: number;
20
- duration: number;
21
- }
22
-
23
- export interface ProjectTemplateSuggestion {
24
- name: string;
25
- description: string;
26
- basedOn: string[];
27
- confidence: number;
28
- }
1
+ export type InsightType = 'pattern' | 'correlation' | 'suggestion' | 'warning' | 'optimization' | 'trend' | 'gap' | 'synergy' | 'template_candidate' | 'project_suggestion';
2
+
3
+ export interface InsightRecord {
4
+ id: number;
5
+ type: InsightType;
6
+ title: string;
7
+ description: string;
8
+ evidence: string;
9
+ priority: number;
10
+ project_id: number | null;
11
+ active: number;
12
+ expires_at: string | null;
13
+ created_at: string;
14
+ }
15
+
16
+ export interface ResearchCycleResult {
17
+ insightsGenerated: number;
18
+ patternsFound: number;
19
+ correlationsFound: number;
20
+ duration: number;
21
+ }
22
+
23
+ export interface ProjectTemplateSuggestion {
24
+ name: string;
25
+ description: string;
26
+ basedOn: string[];
27
+ confidence: number;
28
+ }