symbiote-cli 0.1.1 → 0.1.2

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 (195) hide show
  1. package/README.md +4 -3
  2. package/dist/bin/symbiote.js +0 -0
  3. package/dist/src/brain/health/constraint-checker.d.ts +2 -4
  4. package/dist/src/brain/health/constraint-checker.d.ts.map +1 -1
  5. package/dist/src/brain/health/constraint-checker.js +2 -9
  6. package/dist/src/brain/health/constraint-checker.js.map +1 -1
  7. package/dist/src/brain/health/coupling-analyzer.d.ts +1 -4
  8. package/dist/src/brain/health/coupling-analyzer.d.ts.map +1 -1
  9. package/dist/src/brain/health/coupling-analyzer.js +3 -6
  10. package/dist/src/brain/health/coupling-analyzer.js.map +1 -1
  11. package/dist/src/brain/health/cycle-detector.d.ts +2 -4
  12. package/dist/src/brain/health/cycle-detector.d.ts.map +1 -1
  13. package/dist/src/brain/health/cycle-detector.js +33 -48
  14. package/dist/src/brain/health/cycle-detector.js.map +1 -1
  15. package/dist/src/brain/health/dead-code-detector.d.ts +1 -4
  16. package/dist/src/brain/health/dead-code-detector.d.ts.map +1 -1
  17. package/dist/src/brain/health/dead-code-detector.js +13 -17
  18. package/dist/src/brain/health/dead-code-detector.js.map +1 -1
  19. package/dist/src/brain/health/index.d.ts +5 -9
  20. package/dist/src/brain/health/index.d.ts.map +1 -1
  21. package/dist/src/brain/health/index.js +56 -19
  22. package/dist/src/brain/health/index.js.map +1 -1
  23. package/dist/src/brain/intent.d.ts +2 -0
  24. package/dist/src/brain/intent.d.ts.map +1 -1
  25. package/dist/src/brain/intent.js.map +1 -1
  26. package/dist/src/brain/metrics.d.ts +45 -0
  27. package/dist/src/brain/metrics.d.ts.map +1 -0
  28. package/dist/src/brain/metrics.js +136 -0
  29. package/dist/src/brain/metrics.js.map +1 -0
  30. package/dist/src/commands/hooks.d.ts.map +1 -1
  31. package/dist/src/commands/hooks.js +16 -31
  32. package/dist/src/commands/hooks.js.map +1 -1
  33. package/dist/src/commands/mcp.d.ts.map +1 -1
  34. package/dist/src/commands/mcp.js +14 -3
  35. package/dist/src/commands/mcp.js.map +1 -1
  36. package/dist/src/commands/serve.d.ts.map +1 -1
  37. package/dist/src/commands/serve.js +2 -12
  38. package/dist/src/commands/serve.js.map +1 -1
  39. package/dist/src/commands/shared.d.ts +1 -0
  40. package/dist/src/commands/shared.d.ts.map +1 -1
  41. package/dist/src/commands/shared.js +34 -0
  42. package/dist/src/commands/shared.js.map +1 -1
  43. package/dist/src/core/search.d.ts +1 -0
  44. package/dist/src/core/search.d.ts.map +1 -1
  45. package/dist/src/core/search.js +18 -7
  46. package/dist/src/core/search.js.map +1 -1
  47. package/dist/src/cortex/repository.d.ts +2 -25
  48. package/dist/src/cortex/repository.d.ts.map +1 -1
  49. package/dist/src/cortex/repository.js +1 -112
  50. package/dist/src/cortex/repository.js.map +1 -1
  51. package/dist/src/cortex/schema.js +12 -12
  52. package/dist/src/dna/engine.d.ts +1 -1
  53. package/dist/src/dna/engine.d.ts.map +1 -1
  54. package/dist/src/dna/engine.js +4 -4
  55. package/dist/src/dna/engine.js.map +1 -1
  56. package/dist/src/dna/types.d.ts +1 -0
  57. package/dist/src/dna/types.d.ts.map +1 -1
  58. package/dist/src/dna/types.js +4 -0
  59. package/dist/src/dna/types.js.map +1 -1
  60. package/dist/src/events/types.d.ts +1 -1
  61. package/dist/src/events/types.d.ts.map +1 -1
  62. package/dist/src/events/types.js +4 -10
  63. package/dist/src/events/types.js.map +1 -1
  64. package/dist/src/hooks/attention.d.ts +19 -2
  65. package/dist/src/hooks/attention.d.ts.map +1 -1
  66. package/dist/src/hooks/attention.js +67 -5
  67. package/dist/src/hooks/attention.js.map +1 -1
  68. package/dist/src/hooks/dna-checker.d.ts +3 -0
  69. package/dist/src/hooks/dna-checker.d.ts.map +1 -0
  70. package/dist/src/hooks/dna-checker.js +22 -0
  71. package/dist/src/hooks/dna-checker.js.map +1 -0
  72. package/dist/src/hooks/handlers/post-tool-use.d.ts +14 -0
  73. package/dist/src/hooks/handlers/post-tool-use.d.ts.map +1 -1
  74. package/dist/src/hooks/handlers/post-tool-use.js +139 -9
  75. package/dist/src/hooks/handlers/post-tool-use.js.map +1 -1
  76. package/dist/src/hooks/handlers/pre-tool-use.d.ts +21 -0
  77. package/dist/src/hooks/handlers/pre-tool-use.d.ts.map +1 -1
  78. package/dist/src/hooks/handlers/pre-tool-use.js +153 -6
  79. package/dist/src/hooks/handlers/pre-tool-use.js.map +1 -1
  80. package/dist/src/hooks/handlers/session-start.d.ts +12 -4
  81. package/dist/src/hooks/handlers/session-start.d.ts.map +1 -1
  82. package/dist/src/hooks/handlers/session-start.js +77 -25
  83. package/dist/src/hooks/handlers/session-start.js.map +1 -1
  84. package/dist/src/hooks/handlers/user-prompt-submit.d.ts +8 -6
  85. package/dist/src/hooks/handlers/user-prompt-submit.d.ts.map +1 -1
  86. package/dist/src/hooks/handlers/user-prompt-submit.js +36 -20
  87. package/dist/src/hooks/handlers/user-prompt-submit.js.map +1 -1
  88. package/dist/src/hooks/symbol-cache.d.ts +18 -0
  89. package/dist/src/hooks/symbol-cache.d.ts.map +1 -0
  90. package/dist/src/hooks/symbol-cache.js +23 -0
  91. package/dist/src/hooks/symbol-cache.js.map +1 -0
  92. package/dist/src/init/agent-connector.d.ts +4 -0
  93. package/dist/src/init/agent-connector.d.ts.map +1 -1
  94. package/dist/src/init/agent-connector.js +17 -11
  95. package/dist/src/init/agent-connector.js.map +1 -1
  96. package/dist/src/mcp/context.d.ts +15 -0
  97. package/dist/src/mcp/context.d.ts.map +1 -1
  98. package/dist/src/mcp/context.js +55 -1
  99. package/dist/src/mcp/context.js.map +1 -1
  100. package/dist/src/mcp/http-api.d.ts.map +1 -1
  101. package/dist/src/mcp/http-api.js +27 -6
  102. package/dist/src/mcp/http-api.js.map +1 -1
  103. package/dist/src/mcp/proxy-handler.d.ts +4 -0
  104. package/dist/src/mcp/proxy-handler.d.ts.map +1 -0
  105. package/dist/src/mcp/proxy-handler.js +129 -0
  106. package/dist/src/mcp/proxy-handler.js.map +1 -0
  107. package/dist/src/mcp/proxy-server.d.ts +5 -0
  108. package/dist/src/mcp/proxy-server.d.ts.map +1 -0
  109. package/dist/src/mcp/proxy-server.js +206 -0
  110. package/dist/src/mcp/proxy-server.js.map +1 -0
  111. package/dist/src/mcp/server.d.ts.map +1 -1
  112. package/dist/src/mcp/server.js +32 -20
  113. package/dist/src/mcp/server.js.map +1 -1
  114. package/dist/src/mcp/tools/dna-tools.d.ts +1 -0
  115. package/dist/src/mcp/tools/dna-tools.d.ts.map +1 -1
  116. package/dist/src/mcp/tools/dna-tools.js +5 -1
  117. package/dist/src/mcp/tools/dna-tools.js.map +1 -1
  118. package/dist/src/mcp/tools/trace-tools.d.ts +34 -0
  119. package/dist/src/mcp/tools/trace-tools.d.ts.map +1 -1
  120. package/dist/src/mcp/tools/trace-tools.js +6 -6
  121. package/dist/src/mcp/tools/trace-tools.js.map +1 -1
  122. package/dist/src/storage/repository.d.ts +1 -0
  123. package/dist/src/storage/repository.d.ts.map +1 -1
  124. package/dist/src/storage/repository.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +1 -2
  127. package/LICENSE +0 -21
  128. package/dist/bin/synapse.d.ts +0 -3
  129. package/dist/bin/synapse.d.ts.map +0 -1
  130. package/dist/bin/synapse.js +0 -369
  131. package/dist/bin/synapse.js.map +0 -1
  132. package/dist/src/brain/embeddings.d.ts +0 -9
  133. package/dist/src/brain/embeddings.d.ts.map +0 -1
  134. package/dist/src/brain/embeddings.js +0 -24
  135. package/dist/src/brain/embeddings.js.map +0 -1
  136. package/dist/src/brain/health.d.ts +0 -30
  137. package/dist/src/brain/health.d.ts.map +0 -1
  138. package/dist/src/brain/health.js +0 -147
  139. package/dist/src/brain/health.js.map +0 -1
  140. package/dist/src/commands/init.d.ts +0 -2
  141. package/dist/src/commands/init.d.ts.map +0 -1
  142. package/dist/src/commands/init.js +0 -132
  143. package/dist/src/commands/init.js.map +0 -1
  144. package/dist/src/hooks/post-tool-use.d.ts +0 -12
  145. package/dist/src/hooks/post-tool-use.d.ts.map +0 -1
  146. package/dist/src/hooks/post-tool-use.js +0 -33
  147. package/dist/src/hooks/post-tool-use.js.map +0 -1
  148. package/dist/src/hooks/pre-tool-use.d.ts +0 -24
  149. package/dist/src/hooks/pre-tool-use.d.ts.map +0 -1
  150. package/dist/src/hooks/pre-tool-use.js +0 -117
  151. package/dist/src/hooks/pre-tool-use.js.map +0 -1
  152. package/dist/src/init/dna-bootstrap.d.ts +0 -10
  153. package/dist/src/init/dna-bootstrap.d.ts.map +0 -1
  154. package/dist/src/init/dna-bootstrap.js +0 -32
  155. package/dist/src/init/dna-bootstrap.js.map +0 -1
  156. package/dist/src/init/index.d.ts +0 -29
  157. package/dist/src/init/index.d.ts.map +0 -1
  158. package/dist/src/init/index.js +0 -81
  159. package/dist/src/init/index.js.map +0 -1
  160. package/dist/src/init/overview-generator.d.ts +0 -5
  161. package/dist/src/init/overview-generator.d.ts.map +0 -1
  162. package/dist/src/init/overview-generator.js +0 -85
  163. package/dist/src/init/overview-generator.js.map +0 -1
  164. package/dist/src/init/parsers/eslint-config.d.ts +0 -10
  165. package/dist/src/init/parsers/eslint-config.d.ts.map +0 -1
  166. package/dist/src/init/parsers/eslint-config.js +0 -50
  167. package/dist/src/init/parsers/eslint-config.js.map +0 -1
  168. package/dist/src/init/parsers/markdown-rules.d.ts +0 -3
  169. package/dist/src/init/parsers/markdown-rules.d.ts.map +0 -1
  170. package/dist/src/init/parsers/markdown-rules.js +0 -90
  171. package/dist/src/init/parsers/markdown-rules.js.map +0 -1
  172. package/dist/src/init/parsers/package-json.d.ts +0 -17
  173. package/dist/src/init/parsers/package-json.d.ts.map +0 -1
  174. package/dist/src/init/parsers/package-json.js +0 -75
  175. package/dist/src/init/parsers/package-json.js.map +0 -1
  176. package/dist/src/init/parsers/prettier-config.d.ts +0 -16
  177. package/dist/src/init/parsers/prettier-config.d.ts.map +0 -1
  178. package/dist/src/init/parsers/prettier-config.js +0 -30
  179. package/dist/src/init/parsers/prettier-config.js.map +0 -1
  180. package/dist/src/init/parsers/tsconfig.d.ts +0 -32
  181. package/dist/src/init/parsers/tsconfig.d.ts.map +0 -1
  182. package/dist/src/init/parsers/tsconfig.js +0 -64
  183. package/dist/src/init/parsers/tsconfig.js.map +0 -1
  184. package/dist/src/init/parsers/types.d.ts +0 -27
  185. package/dist/src/init/parsers/types.d.ts.map +0 -1
  186. package/dist/src/init/parsers/types.js +0 -2
  187. package/dist/src/init/parsers/types.js.map +0 -1
  188. package/dist/src/init/project-analyzer.d.ts +0 -3
  189. package/dist/src/init/project-analyzer.d.ts.map +0 -1
  190. package/dist/src/init/project-analyzer.js +0 -102
  191. package/dist/src/init/project-analyzer.js.map +0 -1
  192. package/dist/src/init/rule-importer.d.ts +0 -3
  193. package/dist/src/init/rule-importer.d.ts.map +0 -1
  194. package/dist/src/init/rule-importer.js +0 -101
  195. package/dist/src/init/rule-importer.js.map +0 -1
package/README.md CHANGED
@@ -40,7 +40,8 @@ They're complementary. Use CLAUDE.md for explicit instructions your AI should al
40
40
  ## Quick Start
41
41
 
42
42
  ```bash
43
- npx symbiote-cli install
43
+ npm install -g symbiote-cli
44
+ symbiote install
44
45
  ```
45
46
 
46
47
  One command. Auto-detects your installed editors (Claude Code, Cursor, Windsurf, Copilot, OpenCode), registers the MCP server globally for each, and sets up 9 Claude Code hooks + the `/symbiote-init` skill. Run it once.
@@ -205,7 +206,7 @@ Every tool call is observed and correlated with the code graph — not raw text
205
206
  symbiote serve
206
207
  ```
207
208
 
208
- Open `localhost:3333`. Your project's brain — a 3D neural graph of your entire codebase. Nodes are files, functions, classes. Edges are calls, imports, dependencies. Color-coded by module cluster. Sized by PageRank importance.
209
+ Open the URL printed in your terminal. Your project's brain — a 3D neural graph of your entire codebase. Nodes are files, functions, classes. Edges are calls, imports, dependencies. Color-coded by module cluster. Sized by PageRank importance.
209
210
 
210
211
  **It reacts in real time.** When your AI reads a file, the node glows. When it edits, the node pulses bright. When it navigates between files, impulses fire along the edges. You're watching your AI think.
211
212
 
@@ -368,7 +369,7 @@ Symbiote uses Tree-sitter for precise code parsing. **Bundled** languages ship w
368
369
  | `symbiote install` | One-time global setup for all detected editors |
369
370
  | `symbiote scan` | Rescan codebase (incremental) |
370
371
  | `symbiote scan --force` | Full rescan, ignore cache |
371
- | `symbiote serve` | MCP server + web UI at localhost:3333 |
372
+ | `symbiote serve` | MCP server + web UI (port auto-assigned) |
372
373
  | `symbiote mcp` | MCP server only (stdio, for editors) |
373
374
  | `symbiote dna` | View and manage developer DNA |
374
375
  | `symbiote impact` | Analyze impact of working changes |
File without changes
@@ -1,4 +1,3 @@
1
- import type { Repository } from '#storage/repository.js';
2
1
  import type { IntentStore } from '../intent.js';
3
2
  import type { ConstraintViolation, DescriptiveConstraint } from './types.js';
4
3
  export interface ConstraintCheckResult {
@@ -6,10 +5,9 @@ export interface ConstraintCheckResult {
6
5
  descriptive: DescriptiveConstraint[];
7
6
  }
8
7
  export declare class ConstraintChecker {
9
- private repo;
10
8
  private intent;
11
- constructor(repo: Repository, intent: IntentStore);
12
- check(): Promise<ConstraintCheckResult>;
9
+ constructor(intent: IntentStore);
10
+ check(allFilePaths: Set<string>): Promise<ConstraintCheckResult>;
13
11
  private checkWithPattern;
14
12
  private getFilesInScope;
15
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-checker.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAK7E,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,qBAAa,iBAAiB;IAEtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;gBADN,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,WAAW;IAGzB,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;YA6B/B,gBAAgB;IAuD9B,OAAO,CAAC,eAAe;CAS1B"}
1
+ {"version":3,"file":"constraint-checker.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAK7E,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,qBAAa,iBAAiB;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEjC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAuBxD,gBAAgB;IAuD9B,OAAO,CAAC,eAAe;CAS1B"}
@@ -4,23 +4,16 @@ import { detectLanguage, getGrammar } from '#core/languages.js';
4
4
  const require = createRequire(import.meta.url);
5
5
  const Parser = require('tree-sitter');
6
6
  export class ConstraintChecker {
7
- repo;
8
7
  intent;
9
- constructor(repo, intent) {
10
- this.repo = repo;
8
+ constructor(intent) {
11
9
  this.intent = intent;
12
10
  }
13
- async check() {
11
+ async check(allFilePaths) {
14
12
  const constraints = await this.intent.listEntries('constraint', {
15
13
  status: 'active',
16
14
  });
17
15
  const violations = [];
18
16
  const descriptive = [];
19
- const allNodes = await this.repo.getAllNodes();
20
- const allFilePaths = new Set();
21
- for (const node of allNodes) {
22
- allFilePaths.add(node.filePath);
23
- }
24
17
  for (const constraint of constraints) {
25
18
  if (constraint.frontmatter.pattern) {
26
19
  const found = await this.checkWithPattern(constraint, allFilePaths);
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-checker.js","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constraint-checker.js","sourceRoot":"","sources":["../../../../src/brain/health/constraint-checker.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- import type { Repository } from '#storage/repository.js';
2
1
  import type { CouplingHotspot } from './types.js';
3
2
  import type { PreFetchedData } from './cycle-detector.js';
4
3
  export declare class CouplingAnalyzer {
5
- private repo;
6
- constructor(repo: Repository);
7
- detect(preFetched?: PreFetchedData): Promise<CouplingHotspot[]>;
4
+ detect(preFetched: PreFetchedData): Promise<CouplingHotspot[]>;
8
5
  }
9
6
  //# sourceMappingURL=coupling-analyzer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coupling-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwB1D,qBAAa,gBAAgB;IACb,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE9B,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA6FxE"}
1
+ {"version":3,"file":"coupling-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwB1D,qBAAa,gBAAgB;IACnB,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA8FvE"}
@@ -18,13 +18,8 @@ function computeThreshold(weightedCounts) {
18
18
  return Math.max(p90, MIN_THRESHOLD);
19
19
  }
20
20
  export class CouplingAnalyzer {
21
- repo;
22
- constructor(repo) {
23
- this.repo = repo;
24
- }
25
21
  async detect(preFetched) {
26
- const allNodes = preFetched?.nodes ?? (await this.repo.getAllNodes());
27
- const allEdges = preFetched?.edges ?? (await this.repo.getAllEdges());
22
+ const { nodes: allNodes, edges: allEdges } = preFetched;
28
23
  if (allEdges.length === 0)
29
24
  return [];
30
25
  const nodeToFile = new Map();
@@ -36,6 +31,8 @@ export class CouplingAnalyzer {
36
31
  const fileFanIn = new Map();
37
32
  const fileFanOut = new Map();
38
33
  for (const edge of allEdges) {
34
+ if (edge.type === 'contains')
35
+ continue;
39
36
  const sourceFile = nodeToFile.get(edge.sourceId);
40
37
  const targetFile = nodeToFile.get(edge.targetId);
41
38
  if (!sourceFile || !targetFile || sourceFile === targetFile) {
@@ -1 +1 @@
1
- {"version":3,"file":"coupling-analyzer.js","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coupling-analyzer.js","sourceRoot":"","sources":["../../../../src/brain/health/coupling-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
1
- import type { Repository, NodeRecord, EdgeRecord } from '#storage/repository.js';
1
+ import type { NodeRecord, EdgeRecord } from '#storage/repository.js';
2
2
  import type { CircularDep } from './types.js';
3
3
  export interface PreFetchedData {
4
4
  nodes: NodeRecord[];
5
5
  edges: EdgeRecord[];
6
6
  }
7
7
  export declare class CycleDetector {
8
- private repo;
9
- constructor(repo: Repository);
10
- detect(preFetched?: PreFetchedData): Promise<CircularDep[]>;
8
+ detect(preFetched: PreFetchedData): Promise<CircularDep[]>;
11
9
  }
12
10
  //# sourceMappingURL=cycle-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-detector.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/cycle-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,aAAa;IACV,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE9B,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CA8EpE"}
1
+ {"version":3,"file":"cycle-detector.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/cycle-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,aAAa;IAChB,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAqEnE"}
@@ -1,76 +1,61 @@
1
1
  export class CycleDetector {
2
- repo;
3
- constructor(repo) {
4
- this.repo = repo;
5
- }
6
2
  async detect(preFetched) {
7
- const allEdges = preFetched?.edges ?? (await this.repo.getAllEdges());
8
- if (allEdges.length === 0)
3
+ const { nodes, edges } = preFetched;
4
+ if (edges.length === 0)
9
5
  return [];
10
- const nodeMap = preFetched ? new Map(preFetched.nodes.map((n) => [n.id, n])) : undefined;
11
- const adjacency = new Map();
12
- for (const edge of allEdges) {
13
- if (edge.sourceId === edge.targetId)
6
+ const nodeToFile = new Map();
7
+ for (const node of nodes) {
8
+ nodeToFile.set(node.id, node.filePath);
9
+ }
10
+ const fileGraph = new Map();
11
+ const DEP_EDGE_TYPES = new Set(['imports', 'calls', 'extends']);
12
+ for (const edge of edges) {
13
+ if (!DEP_EDGE_TYPES.has(edge.type))
14
+ continue;
15
+ const sourceFile = nodeToFile.get(edge.sourceId);
16
+ const targetFile = nodeToFile.get(edge.targetId);
17
+ if (!sourceFile || !targetFile || sourceFile === targetFile)
14
18
  continue;
15
- if (!adjacency.has(edge.sourceId)) {
16
- adjacency.set(edge.sourceId, []);
19
+ if (!fileGraph.has(sourceFile)) {
20
+ fileGraph.set(sourceFile, new Set());
17
21
  }
18
- adjacency.get(edge.sourceId).push(edge.targetId);
22
+ fileGraph.get(sourceFile).add(targetFile);
19
23
  }
20
24
  const cycles = [];
21
25
  const visited = new Set();
22
26
  const inStack = new Set();
23
27
  const seen = new Set();
24
- const resolveFilePaths = async (chain) => {
25
- const filePaths = new Set();
26
- for (const id of chain) {
27
- if (nodeMap) {
28
- const node = nodeMap.get(id);
29
- if (node)
30
- filePaths.add(node.filePath);
31
- }
32
- else {
33
- const node = await this.repo.getNodeById(id);
34
- if (node)
35
- filePaths.add(node.filePath);
36
- }
37
- }
38
- return filePaths;
39
- };
40
- const dfs = async (nodeId, nodePath) => {
41
- if (inStack.has(nodeId)) {
42
- const cycleStart = nodePath.indexOf(nodeId);
28
+ const dfs = (file, path) => {
29
+ if (inStack.has(file)) {
30
+ const cycleStart = path.indexOf(file);
43
31
  if (cycleStart < 0)
44
32
  return;
45
- const chain = nodePath.slice(cycleStart);
46
- const filePaths = await resolveFilePaths(chain);
47
- if (filePaths.size <= 1)
48
- return;
33
+ const chain = path.slice(cycleStart);
49
34
  const key = [...chain].sort().join(',');
50
35
  if (seen.has(key))
51
36
  return;
52
37
  seen.add(key);
53
38
  cycles.push({
54
39
  chain,
55
- filePaths: [...filePaths],
40
+ filePaths: chain,
56
41
  });
57
42
  return;
58
43
  }
59
- if (visited.has(nodeId))
44
+ if (visited.has(file))
60
45
  return;
61
- visited.add(nodeId);
62
- inStack.add(nodeId);
63
- const neighbors = adjacency.get(nodeId) ?? [];
64
- nodePath.push(nodeId);
46
+ visited.add(file);
47
+ inStack.add(file);
48
+ const neighbors = fileGraph.get(file) ?? new Set();
49
+ path.push(file);
65
50
  for (const neighbor of neighbors) {
66
- await dfs(neighbor, nodePath);
51
+ dfs(neighbor, path);
67
52
  }
68
- nodePath.pop();
69
- inStack.delete(nodeId);
53
+ path.pop();
54
+ inStack.delete(file);
70
55
  };
71
- for (const nodeId of adjacency.keys()) {
72
- if (!visited.has(nodeId)) {
73
- await dfs(nodeId, []);
56
+ for (const file of fileGraph.keys()) {
57
+ if (!visited.has(file)) {
58
+ dfs(file, []);
74
59
  }
75
60
  }
76
61
  return cycles;
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-detector.js","sourceRoot":"","sources":["../../../../src/brain/health/cycle-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cycle-detector.js","sourceRoot":"","sources":["../../../../src/brain/health/cycle-detector.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,aAAa;IACtB,KAAK,CAAC,MAAM,CAAC,UAA0B;QACnC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE7C,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,UAAU;gBAAE,SAAS;YAEtE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,IAAc,EAAQ,EAAE;YAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,UAAU,GAAG,CAAC;oBAAE,OAAO;gBAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACrC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEd,MAAM,CAAC,IAAI,CAAC;oBACR,KAAK;oBACL,SAAS,EAAE,KAAK;iBACnB,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAE9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAElB,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,CAAC;YAEX,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
@@ -1,9 +1,6 @@
1
- import type { Repository } from '#storage/repository.js';
2
1
  import type { DeadCodeEntry } from './types.js';
3
2
  import type { PreFetchedData } from './cycle-detector.js';
4
3
  export declare class DeadCodeDetector {
5
- private repo;
6
- constructor(repo: Repository);
7
- detect(preFetched?: PreFetchedData): Promise<DeadCodeEntry[]>;
4
+ detect(preFetched: PreFetchedData): Promise<DeadCodeEntry[]>;
8
5
  }
9
6
  //# sourceMappingURL=dead-code-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dead-code-detector.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/dead-code-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAU1D,qBAAa,gBAAgB;IACb,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE9B,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAiEtE"}
1
+ {"version":3,"file":"dead-code-detector.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/dead-code-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAU1D,qBAAa,gBAAgB;IACnB,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CA0DrE"}
@@ -1,31 +1,19 @@
1
- const TRACKABLE_KINDS = new Set(['function', 'class', 'method', 'type', 'interface', 'variable']);
1
+ const TRACKABLE_KINDS = new Set(['function', 'class']);
2
2
  const ENTRY_POINT_NAMES = new Set(['main', 'cli', 'handler', 'run', 'start', 'app', 'server']);
3
- function isTestFile(filePath) {
4
- return /\/test\/|\.test\.|\.spec\./.test(filePath);
3
+ function isReactComponent(node) {
4
+ return /\.tsx$/.test(node.filePath) && /^[A-Z]/.test(node.name);
5
5
  }
6
6
  export class DeadCodeDetector {
7
- repo;
8
- constructor(repo) {
9
- this.repo = repo;
10
- }
11
7
  async detect(preFetched) {
12
- const allNodes = preFetched?.nodes ?? (await this.repo.getAllNodes());
8
+ const { nodes: allNodes, edges: allEdges } = preFetched;
13
9
  if (allNodes.length === 0)
14
10
  return [];
15
- const allEdges = preFetched?.edges ?? (await this.repo.getAllEdges());
16
- const nodeById = new Map(allNodes.map((n) => [n.id, n]));
17
11
  const productionInbound = new Set();
18
12
  const callerMap = new Map();
19
13
  for (const edge of allEdges) {
20
14
  if (edge.type === 'contains')
21
15
  continue;
22
- const sourceNode = nodeById.get(edge.sourceId);
23
- const fromTest = sourceNode
24
- ? isTestFile(sourceNode.filePath)
25
- : isTestFile(edge.sourceId);
26
- if (!fromTest) {
27
- productionInbound.add(edge.targetId);
28
- }
16
+ productionInbound.add(edge.targetId);
29
17
  let callers = callerMap.get(edge.targetId);
30
18
  if (!callers) {
31
19
  callers = new Set();
@@ -42,6 +30,10 @@ export class DeadCodeDetector {
42
30
  continue;
43
31
  if (ENTRY_POINT_NAMES.has(node.name))
44
32
  continue;
33
+ if (node.isExported)
34
+ continue;
35
+ if (isReactComponent(node))
36
+ continue;
45
37
  deadSet.add(node.id);
46
38
  dead.push({ node, reason: 'No dependents found' });
47
39
  }
@@ -55,6 +47,10 @@ export class DeadCodeDetector {
55
47
  continue;
56
48
  if (ENTRY_POINT_NAMES.has(node.name))
57
49
  continue;
50
+ if (node.isExported)
51
+ continue;
52
+ if (isReactComponent(node))
53
+ continue;
58
54
  const callers = callerMap.get(node.id);
59
55
  if (!callers)
60
56
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"dead-code-detector.js","sourceRoot":"","sources":["../../../../src/brain/health/dead-code-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dead-code-detector.js","sourceRoot":"","sources":["../../../../src/brain/health/dead-code-detector.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,21 @@
1
- import type { Repository } from '#storage/repository.js';
2
1
  import type { SymbioteDB } from '#storage/db.js';
2
+ import type { CortexRepository } from '#cortex/repository.js';
3
3
  import type { IntentStore } from '../intent.js';
4
4
  import type { HealthReport, HealthSnapshot } from './types.js';
5
5
  export declare class HealthEngine {
6
- private repo;
6
+ private cortexRepo;
7
+ private db;
7
8
  private cycleDetector;
8
9
  private deadCodeDetector;
9
10
  private couplingAnalyzer;
10
11
  private constraintChecker;
11
12
  private history;
12
- constructor(repo: Repository, intent: IntentStore, db: SymbioteDB);
13
+ constructor(cortexRepo: CortexRepository, intent: IntentStore, db: SymbioteDB);
13
14
  analyze(): Promise<HealthReport>;
14
15
  saveSnapshot(report: HealthReport): Promise<void>;
15
16
  getHistory(limit: number): Promise<HealthSnapshot[]>;
16
17
  getLatestSnapshot(): Promise<HealthSnapshot | null>;
18
+ private fetchGraphData;
17
19
  }
18
20
  export type { HealthReport, HealthSnapshot, ConstraintViolation, DescriptiveConstraint, CircularDep, DeadCodeEntry, CouplingHotspot, CategoryScore, } from './types.js';
19
- export { CycleDetector } from './cycle-detector.js';
20
- export { DeadCodeDetector } from './dead-code-detector.js';
21
- export { CouplingAnalyzer } from './coupling-analyzer.js';
22
- export { ConstraintChecker, type ConstraintCheckResult } from './constraint-checker.js';
23
- export { computeHealthScore, computeCategoryScore } from './scorer.js';
24
- export { HealthHistory, type SaveSnapshotInput } from './history.js';
25
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQ/D,qBAAa,YAAY;IACrB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAgB;gBAEnB,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU;IAS3D,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IA+BhC,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIpD,iBAAiB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAG5D;AAED,YAAY,EACR,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/brain/health/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4B/D,qBAAa,YAAY;IACrB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAgB;gBAEnB,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU;IAUvE,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAuChC,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIpD,iBAAiB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YAI3C,cAAc;CA0B/B;AAED,YAAY,EACR,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,GAChB,MAAM,YAAY,CAAC"}
@@ -4,28 +4,47 @@ import { CouplingAnalyzer } from './coupling-analyzer.js';
4
4
  import { ConstraintChecker } from './constraint-checker.js';
5
5
  import { computeHealthScore } from './scorer.js';
6
6
  import { HealthHistory } from './history.js';
7
+ function isNonProductionFile(filePath) {
8
+ return /(^|\/)(?:test|dist|build|coverage|node_modules)\/|\.test\.|\.spec\./.test(filePath);
9
+ }
10
+ const EDGE_TABLES = [
11
+ { table: 'edges_calls', type: 'calls' },
12
+ { table: 'edges_imports', type: 'imports' },
13
+ { table: 'edges_extends', type: 'extends' },
14
+ { table: 'edges_implements', type: 'implements' },
15
+ { table: 'edges_contains', type: 'contains' },
16
+ { table: 'edges_reads', type: 'reads' },
17
+ { table: 'edges_writes', type: 'writes' },
18
+ { table: 'edges_returns', type: 'returns' },
19
+ ];
7
20
  export class HealthEngine {
8
- repo;
21
+ cortexRepo;
22
+ db;
9
23
  cycleDetector;
10
24
  deadCodeDetector;
11
25
  couplingAnalyzer;
12
26
  constraintChecker;
13
27
  history;
14
- constructor(repo, intent, db) {
15
- this.repo = repo;
16
- this.cycleDetector = new CycleDetector(repo);
17
- this.deadCodeDetector = new DeadCodeDetector(repo);
18
- this.couplingAnalyzer = new CouplingAnalyzer(repo);
19
- this.constraintChecker = new ConstraintChecker(repo, intent);
28
+ constructor(cortexRepo, intent, db) {
29
+ this.cortexRepo = cortexRepo;
30
+ this.db = db;
31
+ this.cycleDetector = new CycleDetector();
32
+ this.deadCodeDetector = new DeadCodeDetector();
33
+ this.couplingAnalyzer = new CouplingAnalyzer();
34
+ this.constraintChecker = new ConstraintChecker(intent);
20
35
  this.history = new HealthHistory(db);
21
36
  }
22
37
  async analyze() {
23
- const [allNodes, allEdges] = await Promise.all([
24
- this.repo.getAllNodes(),
25
- this.repo.getAllEdges(),
26
- ]);
27
- const preFetched = { nodes: allNodes, edges: allEdges };
28
- const constraintResult = await this.constraintChecker.check();
38
+ const [rawNodes, rawEdges] = await this.fetchGraphData();
39
+ const prodNodes = rawNodes.filter((n) => !isNonProductionFile(n.filePath));
40
+ const prodNodeIds = new Set(prodNodes.map((n) => n.id));
41
+ const prodEdges = rawEdges.filter((e) => prodNodeIds.has(e.sourceId) && prodNodeIds.has(e.targetId));
42
+ const preFetched = { nodes: prodNodes, edges: prodEdges };
43
+ const allFilePaths = new Set();
44
+ for (const node of prodNodes) {
45
+ allFilePaths.add(node.filePath);
46
+ }
47
+ const constraintResult = await this.constraintChecker.check(allFilePaths);
29
48
  const circularDeps = await this.cycleDetector.detect(preFetched);
30
49
  const deadCode = await this.deadCodeDetector.detect(preFetched);
31
50
  const couplingHotspots = await this.couplingAnalyzer.detect(preFetched);
@@ -66,11 +85,29 @@ export class HealthEngine {
66
85
  async getLatestSnapshot() {
67
86
  return this.history.latest();
68
87
  }
88
+ async fetchGraphData() {
89
+ const symbols = await this.cortexRepo.getAllSymbols();
90
+ const nodes = symbols.map((s) => ({
91
+ id: s.id,
92
+ type: s.kind,
93
+ name: s.name,
94
+ filePath: s.filePath,
95
+ lineStart: s.lineStart,
96
+ lineEnd: s.lineEnd,
97
+ isExported: s.isExported,
98
+ }));
99
+ const edges = [];
100
+ for (const { table, type } of EDGE_TABLES) {
101
+ const rows = await this.db.all(`SELECT source_id, target_id FROM ${table}`);
102
+ for (const row of rows) {
103
+ edges.push({
104
+ sourceId: row.source_id,
105
+ targetId: row.target_id,
106
+ type,
107
+ });
108
+ }
109
+ }
110
+ return [nodes, edges];
111
+ }
69
112
  }
70
- export { CycleDetector } from './cycle-detector.js';
71
- export { DeadCodeDetector } from './dead-code-detector.js';
72
- export { CouplingAnalyzer } from './coupling-analyzer.js';
73
- export { ConstraintChecker } from './constraint-checker.js';
74
- export { computeHealthScore, computeCategoryScore } from './scorer.js';
75
- export { HealthHistory } from './history.js';
76
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/brain/health/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/brain/health/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export type IntentType = 'decision' | 'constraint';
2
2
  export type IntentStatus = 'active' | 'proposed' | 'rejected' | 'superseded';
3
+ export type IntentEnforcement = 'strict' | 'warn';
3
4
  export interface IntentFrontmatter {
4
5
  id: string;
5
6
  type: IntentType;
@@ -8,6 +9,7 @@ export interface IntentFrontmatter {
8
9
  author: string;
9
10
  createdAt: string;
10
11
  pattern?: string;
12
+ enforcement?: IntentEnforcement;
11
13
  }
12
14
  export interface IntentEntry {
13
15
  frontmatter: IntentFrontmatter;
@@ -1 +1 @@
1
- {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/brain/intent.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7E,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,EAAE,MAAM;IAItB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBlF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoBxD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAUpC,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;CAGvB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAuCtE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgB/D"}
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/brain/intent.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,EAAE,MAAM;IAItB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBlF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoBxD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAUpC,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;CAGvB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAuCtE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgB/D"}