@contorium/mcp 0.8.1

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 (187) hide show
  1. package/README.md +97 -0
  2. package/bin/contorium-mcp.js +34 -0
  3. package/dist/autoContext.d.ts +2 -0
  4. package/dist/autoContext.js +2 -0
  5. package/dist/bootstrapCli.d.ts +2 -0
  6. package/dist/bootstrapCli.js +21 -0
  7. package/dist/conflicts.d.ts +19 -0
  8. package/dist/conflicts.js +49 -0
  9. package/dist/dashboardEnsure.d.ts +10 -0
  10. package/dist/dashboardEnsure.js +41 -0
  11. package/dist/intelligence.d.ts +16 -0
  12. package/dist/intelligence.js +38 -0
  13. package/dist/intentGraph.d.ts +20 -0
  14. package/dist/intentGraph.js +51 -0
  15. package/dist/mcpBootstrap.d.ts +8 -0
  16. package/dist/mcpBootstrap.js +81 -0
  17. package/dist/memoryStore.d.ts +18 -0
  18. package/dist/memoryStore.js +57 -0
  19. package/dist/paths.d.ts +12 -0
  20. package/dist/paths.js +66 -0
  21. package/dist/runtimeState.d.ts +14 -0
  22. package/dist/runtimeState.js +36 -0
  23. package/dist/server.d.ts +3 -0
  24. package/dist/server.js +567 -0
  25. package/dist/stateBuilder.d.ts +16 -0
  26. package/dist/stateBuilder.js +40 -0
  27. package/dist/understanding.d.ts +1 -0
  28. package/dist/understanding.js +1 -0
  29. package/dist/workspace.d.ts +12 -0
  30. package/dist/workspace.js +40 -0
  31. package/dist/workspaceConfig.d.ts +14 -0
  32. package/dist/workspaceConfig.js +80 -0
  33. package/node_modules/@contora/state-core/dist/adapterSync.d.ts +29 -0
  34. package/node_modules/@contora/state-core/dist/adapterSync.d.ts.map +1 -0
  35. package/node_modules/@contora/state-core/dist/adapterSync.js +142 -0
  36. package/node_modules/@contora/state-core/dist/adapters.d.ts +20 -0
  37. package/node_modules/@contora/state-core/dist/adapters.d.ts.map +1 -0
  38. package/node_modules/@contora/state-core/dist/adapters.js +24 -0
  39. package/node_modules/@contora/state-core/dist/bootstrap/bootstrapState.d.ts +6 -0
  40. package/node_modules/@contora/state-core/dist/bootstrap/bootstrapState.d.ts.map +1 -0
  41. package/node_modules/@contora/state-core/dist/bootstrap/bootstrapState.js +116 -0
  42. package/node_modules/@contora/state-core/dist/bootstrapArtifacts.d.ts +18 -0
  43. package/node_modules/@contora/state-core/dist/bootstrapArtifacts.d.ts.map +1 -0
  44. package/node_modules/@contora/state-core/dist/bootstrapArtifacts.js +43 -0
  45. package/node_modules/@contora/state-core/dist/bootstrapState.d.ts +6 -0
  46. package/node_modules/@contora/state-core/dist/bootstrapState.d.ts.map +1 -0
  47. package/node_modules/@contora/state-core/dist/bootstrapState.js +60 -0
  48. package/node_modules/@contora/state-core/dist/dashboardActivity.d.ts +12 -0
  49. package/node_modules/@contora/state-core/dist/dashboardActivity.d.ts.map +1 -0
  50. package/node_modules/@contora/state-core/dist/dashboardActivity.js +58 -0
  51. package/node_modules/@contora/state-core/dist/dualMode.d.ts +11 -0
  52. package/node_modules/@contora/state-core/dist/dualMode.d.ts.map +1 -0
  53. package/node_modules/@contora/state-core/dist/dualMode.js +38 -0
  54. package/node_modules/@contora/state-core/dist/gitScan.d.ts +7 -0
  55. package/node_modules/@contora/state-core/dist/gitScan.d.ts.map +1 -0
  56. package/node_modules/@contora/state-core/dist/gitScan.js +39 -0
  57. package/node_modules/@contora/state-core/dist/index.d.ts +44 -0
  58. package/node_modules/@contora/state-core/dist/index.d.ts.map +1 -0
  59. package/node_modules/@contora/state-core/dist/index.js +141 -0
  60. package/node_modules/@contora/state-core/dist/minimalSnapshot.d.ts +4 -0
  61. package/node_modules/@contora/state-core/dist/minimalSnapshot.d.ts.map +1 -0
  62. package/node_modules/@contora/state-core/dist/minimalSnapshot.js +60 -0
  63. package/node_modules/@contora/state-core/dist/scanner/gitScan.d.ts +7 -0
  64. package/node_modules/@contora/state-core/dist/scanner/gitScan.d.ts.map +1 -0
  65. package/node_modules/@contora/state-core/dist/scanner/gitScan.js +42 -0
  66. package/node_modules/@contora/state-core/dist/scanner/workspaceScanner.d.ts +4 -0
  67. package/node_modules/@contora/state-core/dist/scanner/workspaceScanner.d.ts.map +1 -0
  68. package/node_modules/@contora/state-core/dist/scanner/workspaceScanner.js +148 -0
  69. package/node_modules/@contora/state-core/dist/semiAutoHandoff.d.ts +46 -0
  70. package/node_modules/@contora/state-core/dist/semiAutoHandoff.d.ts.map +1 -0
  71. package/node_modules/@contora/state-core/dist/semiAutoHandoff.js +227 -0
  72. package/node_modules/@contora/state-core/dist/sourceMetadata.d.ts +4 -0
  73. package/node_modules/@contora/state-core/dist/sourceMetadata.d.ts.map +1 -0
  74. package/node_modules/@contora/state-core/dist/sourceMetadata.js +27 -0
  75. package/node_modules/@contora/state-core/dist/state-builder/buildFromScan.d.ts +5 -0
  76. package/node_modules/@contora/state-core/dist/state-builder/buildFromScan.d.ts.map +1 -0
  77. package/node_modules/@contora/state-core/dist/state-builder/buildFromScan.js +33 -0
  78. package/node_modules/@contora/state-core/dist/state-builder/normalization.d.ts +5 -0
  79. package/node_modules/@contora/state-core/dist/state-builder/normalization.d.ts.map +1 -0
  80. package/node_modules/@contora/state-core/dist/state-builder/normalization.js +107 -0
  81. package/node_modules/@contora/state-core/dist/state-builder/rebuildFromScan.d.ts +4 -0
  82. package/node_modules/@contora/state-core/dist/state-builder/rebuildFromScan.d.ts.map +1 -0
  83. package/node_modules/@contora/state-core/dist/state-builder/rebuildFromScan.js +22 -0
  84. package/node_modules/@contora/state-core/dist/state-builder/snapshot.d.ts +5 -0
  85. package/node_modules/@contora/state-core/dist/state-builder/snapshot.d.ts.map +1 -0
  86. package/node_modules/@contora/state-core/dist/state-builder/snapshot.js +53 -0
  87. package/node_modules/@contora/state-core/dist/state-builder/store.d.ts +7 -0
  88. package/node_modules/@contora/state-core/dist/state-builder/store.d.ts.map +1 -0
  89. package/node_modules/@contora/state-core/dist/state-builder/store.js +99 -0
  90. package/node_modules/@contora/state-core/dist/state-builder/types.d.ts +18 -0
  91. package/node_modules/@contora/state-core/dist/state-builder/types.d.ts.map +1 -0
  92. package/node_modules/@contora/state-core/dist/state-builder/types.js +20 -0
  93. package/node_modules/@contora/state-core/dist/types.d.ts +42 -0
  94. package/node_modules/@contora/state-core/dist/types.d.ts.map +1 -0
  95. package/node_modules/@contora/state-core/dist/types.js +3 -0
  96. package/node_modules/@contora/state-core/dist/understanding/buildUnderstanding.d.ts +22 -0
  97. package/node_modules/@contora/state-core/dist/understanding/buildUnderstanding.d.ts.map +1 -0
  98. package/node_modules/@contora/state-core/dist/understanding/buildUnderstanding.js +87 -0
  99. package/node_modules/@contora/state-core/dist/understanding/changeDetector.d.ts +7 -0
  100. package/node_modules/@contora/state-core/dist/understanding/changeDetector.d.ts.map +1 -0
  101. package/node_modules/@contora/state-core/dist/understanding/changeDetector.js +68 -0
  102. package/node_modules/@contora/state-core/dist/understanding/chpHandoff.d.ts +49 -0
  103. package/node_modules/@contora/state-core/dist/understanding/chpHandoff.d.ts.map +1 -0
  104. package/node_modules/@contora/state-core/dist/understanding/chpHandoff.js +214 -0
  105. package/node_modules/@contora/state-core/dist/understanding/extractor.d.ts +21 -0
  106. package/node_modules/@contora/state-core/dist/understanding/extractor.d.ts.map +1 -0
  107. package/node_modules/@contora/state-core/dist/understanding/extractor.js +173 -0
  108. package/node_modules/@contora/state-core/dist/understanding/formatCanonicalExport.d.ts +30 -0
  109. package/node_modules/@contora/state-core/dist/understanding/formatCanonicalExport.d.ts.map +1 -0
  110. package/node_modules/@contora/state-core/dist/understanding/formatCanonicalExport.js +363 -0
  111. package/node_modules/@contora/state-core/dist/understanding/formatHandoff.d.ts +20 -0
  112. package/node_modules/@contora/state-core/dist/understanding/formatHandoff.d.ts.map +1 -0
  113. package/node_modules/@contora/state-core/dist/understanding/formatHandoff.js +57 -0
  114. package/node_modules/@contora/state-core/dist/understanding/graphBuilder.d.ts +9 -0
  115. package/node_modules/@contora/state-core/dist/understanding/graphBuilder.d.ts.map +1 -0
  116. package/node_modules/@contora/state-core/dist/understanding/graphBuilder.js +107 -0
  117. package/node_modules/@contora/state-core/dist/understanding/handoffBuilder.d.ts +12 -0
  118. package/node_modules/@contora/state-core/dist/understanding/handoffBuilder.d.ts.map +1 -0
  119. package/node_modules/@contora/state-core/dist/understanding/handoffBuilder.js +101 -0
  120. package/node_modules/@contora/state-core/dist/understanding/impactAnalyzer.d.ts +5 -0
  121. package/node_modules/@contora/state-core/dist/understanding/impactAnalyzer.d.ts.map +1 -0
  122. package/node_modules/@contora/state-core/dist/understanding/impactAnalyzer.js +58 -0
  123. package/node_modules/@contora/state-core/dist/understanding/intentFusion.d.ts +9 -0
  124. package/node_modules/@contora/state-core/dist/understanding/intentFusion.d.ts.map +1 -0
  125. package/node_modules/@contora/state-core/dist/understanding/intentFusion.js +54 -0
  126. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/closureConstants.d.ts +24 -0
  127. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/closureConstants.d.ts.map +1 -0
  128. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/closureConstants.js +33 -0
  129. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/confidence.d.ts +20 -0
  130. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/confidence.d.ts.map +1 -0
  131. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/confidence.js +53 -0
  132. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/gitFrequency.d.ts +5 -0
  133. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/gitFrequency.d.ts.map +1 -0
  134. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/gitFrequency.js +19 -0
  135. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/hotspotBuilder.d.ts +13 -0
  136. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/hotspotBuilder.d.ts.map +1 -0
  137. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/hotspotBuilder.js +101 -0
  138. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/intentFunctionMapper.d.ts +22 -0
  139. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/intentFunctionMapper.d.ts.map +1 -0
  140. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/intentFunctionMapper.js +106 -0
  141. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/knowledgeGraphBuilder.d.ts +23 -0
  142. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/knowledgeGraphBuilder.d.ts.map +1 -0
  143. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/knowledgeGraphBuilder.js +415 -0
  144. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/normalize.d.ts +11 -0
  145. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/normalize.d.ts.map +1 -0
  146. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/normalize.js +136 -0
  147. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/rebuildTrigger.d.ts +13 -0
  148. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/rebuildTrigger.d.ts.map +1 -0
  149. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/rebuildTrigger.js +34 -0
  150. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/snapshotBuilder.d.ts +17 -0
  151. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/snapshotBuilder.d.ts.map +1 -0
  152. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/snapshotBuilder.js +73 -0
  153. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/store.d.ts +7 -0
  154. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/store.d.ts.map +1 -0
  155. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/store.js +127 -0
  156. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/types.d.ts +116 -0
  157. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/types.d.ts.map +1 -0
  158. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/types.js +6 -0
  159. package/node_modules/@contora/state-core/dist/understanding/miniGraph.d.ts +4 -0
  160. package/node_modules/@contora/state-core/dist/understanding/miniGraph.d.ts.map +1 -0
  161. package/node_modules/@contora/state-core/dist/understanding/miniGraph.js +18 -0
  162. package/node_modules/@contora/state-core/dist/understanding/store.d.ts +24 -0
  163. package/node_modules/@contora/state-core/dist/understanding/store.d.ts.map +1 -0
  164. package/node_modules/@contora/state-core/dist/understanding/store.js +243 -0
  165. package/node_modules/@contora/state-core/dist/understanding/symbolValidator.d.ts +9 -0
  166. package/node_modules/@contora/state-core/dist/understanding/symbolValidator.d.ts.map +1 -0
  167. package/node_modules/@contora/state-core/dist/understanding/symbolValidator.js +51 -0
  168. package/node_modules/@contora/state-core/dist/understanding/timelineTracker.d.ts +3 -0
  169. package/node_modules/@contora/state-core/dist/understanding/timelineTracker.d.ts.map +1 -0
  170. package/node_modules/@contora/state-core/dist/understanding/timelineTracker.js +129 -0
  171. package/node_modules/@contora/state-core/dist/understanding/treeSitterParser.d.ts +24 -0
  172. package/node_modules/@contora/state-core/dist/understanding/treeSitterParser.d.ts.map +1 -0
  173. package/node_modules/@contora/state-core/dist/understanding/treeSitterParser.js +56 -0
  174. package/node_modules/@contora/state-core/dist/understanding/types.d.ts +136 -0
  175. package/node_modules/@contora/state-core/dist/understanding/types.d.ts.map +1 -0
  176. package/node_modules/@contora/state-core/dist/understanding/types.js +5 -0
  177. package/node_modules/@contora/state-core/dist/understanding/understandingGraphBuilder.d.ts +23 -0
  178. package/node_modules/@contora/state-core/dist/understanding/understandingGraphBuilder.d.ts.map +1 -0
  179. package/node_modules/@contora/state-core/dist/understanding/understandingGraphBuilder.js +67 -0
  180. package/node_modules/@contora/state-core/dist/version.d.ts +3 -0
  181. package/node_modules/@contora/state-core/dist/version.d.ts.map +1 -0
  182. package/node_modules/@contora/state-core/dist/version.js +21 -0
  183. package/node_modules/@contora/state-core/dist/workspaceScanner.d.ts +4 -0
  184. package/node_modules/@contora/state-core/dist/workspaceScanner.d.ts.map +1 -0
  185. package/node_modules/@contora/state-core/dist/workspaceScanner.js +112 -0
  186. package/node_modules/@contora/state-core/package.json +49 -0
  187. package/package.json +61 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildKnowledgeSnapshot = buildKnowledgeSnapshot;
4
+ exports.filterMappingsByConfidence = filterMappingsByConfidence;
5
+ const closureConstants_js_1 = require("./closureConstants.js");
6
+ /** Derive next actions from intent gaps when L2 next_actions absent (Closure §9.2). */
7
+ function deriveSnapshotNextActions(nodes, mappings, builtNextActions) {
8
+ if (builtNextActions.length) {
9
+ return builtNextActions.slice(0, closureConstants_js_1.SNAPSHOT_TOP_NEXT_ACTIONS);
10
+ }
11
+ const mappedIntents = new Set(mappings.map((m) => m.intentId));
12
+ const gaps = nodes
13
+ .filter((n) => n.type === 'intent' && !mappedIntents.has(n.id))
14
+ .map((n) => `close intent gap: ${n.name}`);
15
+ return gaps.slice(0, closureConstants_js_1.SNAPSHOT_TOP_NEXT_ACTIONS);
16
+ }
17
+ /**
18
+ * Snapshot Layer — compression projection from canonical graph only (Closure §9).
19
+ * snapshot = compression(graph, weight); never a second truth source.
20
+ */
21
+ function buildKnowledgeSnapshot(input) {
22
+ const intentScores = new Map();
23
+ for (const m of input.intentMappings) {
24
+ const intent = input.nodes.find((n) => n.id === m.intentId && n.type === 'intent');
25
+ if (!intent) {
26
+ continue;
27
+ }
28
+ intentScores.set(intent.name, Math.max(intentScores.get(intent.name) ?? 0, m.confidence));
29
+ }
30
+ const topIntents = [...intentScores.entries()]
31
+ .sort((a, b) => b[1] - a[1])
32
+ .slice(0, closureConstants_js_1.SNAPSHOT_TOP_INTENTS)
33
+ .map(([name]) => name);
34
+ const topHotspots = input.hotspots
35
+ .filter((h) => h.lifecycle !== 'stale')
36
+ .slice(0, closureConstants_js_1.SNAPSHOT_TOP_HOTSPOTS)
37
+ .map((h) => h.targetName);
38
+ const fnById = new Map(input.nodes.filter((n) => n.type === 'function').map((n) => [n.id, n]));
39
+ const fnScores = new Map();
40
+ for (const m of input.intentMappings) {
41
+ const fn = fnById.get(m.functionId);
42
+ if (!fn) {
43
+ continue;
44
+ }
45
+ const hot = input.hotspots.find((h) => h.targetId === fn.id)?.score ?? 0;
46
+ fnScores.set(fn.name, Math.max(fnScores.get(fn.name) ?? 0, m.confidence * Math.max(hot, 0.05)));
47
+ }
48
+ const topFunctions = [...fnScores.entries()]
49
+ .sort((a, b) => b[1] - a[1])
50
+ .slice(0, closureConstants_js_1.SNAPSHOT_TOP_FUNCTIONS)
51
+ .map(([name]) => name);
52
+ const confidences = input.intentMappings.map((m) => m.confidence);
53
+ const avgConfidence = confidences.length
54
+ ? Math.round((confidences.reduce((a, b) => a + b, 0) / confidences.length) * 100) / 100
55
+ : 0;
56
+ return {
57
+ generatedAt: input.now,
58
+ topIntents,
59
+ topHotspots,
60
+ topFunctions,
61
+ nextActions: deriveSnapshotNextActions(input.nodes, input.intentMappings, input.nextActions),
62
+ graphSummary: {
63
+ nodeCount: input.nodes.length,
64
+ edgeCount: input.edges.length,
65
+ mappingCount: input.intentMappings.length,
66
+ avgConfidence,
67
+ },
68
+ };
69
+ }
70
+ /** Filter graph relations by minimum confidence (MCP / export projection). */
71
+ function filterMappingsByConfidence(mappings, minConfidence) {
72
+ return mappings.filter((m) => m.confidence >= minConfidence);
73
+ }
@@ -0,0 +1,7 @@
1
+ import type { KnowledgeSnapshot, ProjectKnowledgeGraph } from './types.js';
2
+ export declare function readProjectKnowledgeGraph(workspaceRoot: string): Promise<ProjectKnowledgeGraph | undefined>;
3
+ /** Snapshot Layer — compact graph summary for Handoff / MCP. */
4
+ export declare function readKnowledgeSnapshot(workspaceRoot: string): Promise<KnowledgeSnapshot | undefined>;
5
+ export declare function writeProjectKnowledgeGraph(workspaceRoot: string, graph: ProjectKnowledgeGraph): Promise<void>;
6
+ export declare function deleteProjectKnowledgeGraph(workspaceRoot: string): Promise<void>;
7
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/understanding/knowledgeGraph/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA4BpB,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAI5C;AAED,gEAAgE;AAChE,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAQxC;AAED,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAIf;AA4BD,wBAAsB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtF"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.readProjectKnowledgeGraph = readProjectKnowledgeGraph;
37
+ exports.readKnowledgeSnapshot = readKnowledgeSnapshot;
38
+ exports.writeProjectKnowledgeGraph = writeProjectKnowledgeGraph;
39
+ exports.deleteProjectKnowledgeGraph = deleteProjectKnowledgeGraph;
40
+ const fs = __importStar(require("node:fs/promises"));
41
+ const path = __importStar(require("node:path"));
42
+ const normalize_js_1 = require("./normalize.js");
43
+ function graphDir(workspaceRoot) {
44
+ return path.join(workspaceRoot, '.contora', 'graph');
45
+ }
46
+ function knowledgePath(workspaceRoot) {
47
+ return path.join(graphDir(workspaceRoot), 'knowledge.json');
48
+ }
49
+ function snapshotPath(workspaceRoot) {
50
+ return path.join(graphDir(workspaceRoot), 'snapshot.json');
51
+ }
52
+ async function readJson(filePath) {
53
+ try {
54
+ const text = await fs.readFile(filePath, 'utf8');
55
+ return JSON.parse(text);
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ }
61
+ async function writeJson(filePath, data) {
62
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
63
+ await fs.writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
64
+ }
65
+ async function readProjectKnowledgeGraph(workspaceRoot) {
66
+ const root = path.resolve(workspaceRoot);
67
+ const kg = await readJson(knowledgePath(root));
68
+ return (0, normalize_js_1.normalizeKnowledgeGraph)(kg, root);
69
+ }
70
+ /** Snapshot Layer — compact graph summary for Handoff / MCP. */
71
+ async function readKnowledgeSnapshot(workspaceRoot) {
72
+ const root = path.resolve(workspaceRoot);
73
+ const snap = await readJson(snapshotPath(root));
74
+ if (snap?.topIntents) {
75
+ return snap;
76
+ }
77
+ const kg = await readProjectKnowledgeGraph(root);
78
+ return kg?.snapshot;
79
+ }
80
+ async function writeProjectKnowledgeGraph(workspaceRoot, graph) {
81
+ const root = path.resolve(workspaceRoot);
82
+ await writeJson(knowledgePath(root), graph);
83
+ await writeGraphShards(root, graph);
84
+ }
85
+ /** Split shards for MCP / tooling (mirrors V3.1 doc layout). */
86
+ async function writeGraphShards(root, kg) {
87
+ const dir = graphDir(root);
88
+ const intents = kg.nodes.filter((n) => n.type === 'intent');
89
+ const functions = kg.nodes.filter((n) => n.type === 'function' || n.type === 'class');
90
+ const shardMeta = {
91
+ schemaVersion: kg.meta.schemaVersion,
92
+ generatedAt: kg.meta.generatedAt,
93
+ graphBuildId: kg.meta.graphBuildId,
94
+ };
95
+ await Promise.all([
96
+ writeJson(path.join(dir, 'metadata.json'), kg.meta),
97
+ writeJson(path.join(dir, 'snapshot.json'), kg.snapshot),
98
+ writeJson(path.join(dir, 'hotspots.json'), {
99
+ ...shardMeta,
100
+ hotspots: kg.hotspots,
101
+ }),
102
+ writeJson(path.join(dir, 'nodes.json'), { ...shardMeta, nodes: kg.nodes }),
103
+ writeJson(path.join(dir, 'intents.json'), { ...shardMeta, nodes: intents }),
104
+ writeJson(path.join(dir, 'functions.json'), { ...shardMeta, nodes: functions }),
105
+ writeJson(path.join(dir, 'edges.json'), { ...shardMeta, edges: kg.edges }),
106
+ ]);
107
+ }
108
+ async function deleteProjectKnowledgeGraph(workspaceRoot) {
109
+ const dir = graphDir(workspaceRoot);
110
+ for (const name of [
111
+ 'knowledge.json',
112
+ 'metadata.json',
113
+ 'snapshot.json',
114
+ 'hotspots.json',
115
+ 'nodes.json',
116
+ 'intents.json',
117
+ 'functions.json',
118
+ 'edges.json',
119
+ ]) {
120
+ try {
121
+ await fs.unlink(path.join(dir, name));
122
+ }
123
+ catch {
124
+ /* absent */
125
+ }
126
+ }
127
+ }
@@ -0,0 +1,116 @@
1
+ /** V3.1 Project Cognitive Graph — Intent → Module → File → Function */
2
+ export declare const KNOWLEDGE_SCHEMA_VERSION = "1";
3
+ export declare const KNOWLEDGE_ENGINE_VERSION = "3.1.0";
4
+ export type KnowledgeNodeType = 'intent' | 'module' | 'file' | 'function' | 'class';
5
+ /** Version Layer — backward/forward compatible graph metadata. */
6
+ export interface GraphMetadata {
7
+ version: string;
8
+ schemaVersion: string;
9
+ closureVersion?: string;
10
+ generatedAt: number;
11
+ workspaceId: string;
12
+ graphBuildId: string;
13
+ sourceVersion: string;
14
+ rebuildTrigger?: string;
15
+ lastCommitHash?: string;
16
+ }
17
+ export interface KnowledgeNode {
18
+ id: string;
19
+ type: KnowledgeNodeType;
20
+ name: string;
21
+ path?: string;
22
+ metadata?: Record<string, unknown>;
23
+ updatedAt: number;
24
+ }
25
+ export type KnowledgeEdgeType = 'contains' | 'calls' | 'depends_on' | 'implements' | 'supports_intent';
26
+ /** Confidence Layer — every edge carries AI-trust score. */
27
+ export interface KnowledgeEdge {
28
+ source: string;
29
+ target: string;
30
+ type: KnowledgeEdgeType;
31
+ weight: number;
32
+ confidence: number;
33
+ }
34
+ export interface IntentFunctionMapping {
35
+ intentId: string;
36
+ functionId: string;
37
+ score: number;
38
+ confidence: number;
39
+ signals: string[];
40
+ }
41
+ export interface ReasonTraceItem {
42
+ targetId: string;
43
+ targetName: string;
44
+ targetType: KnowledgeNodeType;
45
+ reasons: string[];
46
+ editCount: number;
47
+ dependencyCount: number;
48
+ linkedIntent?: string;
49
+ confidence?: number;
50
+ }
51
+ /** Hotspot Layer — activity (not importance). Lifecycle: active → cooling → stale. */
52
+ export type HotspotLifecycle = 'active' | 'cooling' | 'stale';
53
+ export interface HotspotNode {
54
+ id: string;
55
+ type: 'hotspot';
56
+ targetId: string;
57
+ targetName: string;
58
+ targetKind: 'file' | 'function';
59
+ score: number;
60
+ lifecycle: HotspotLifecycle;
61
+ editFrequency: number;
62
+ gitActivity: number;
63
+ intentLinks: number;
64
+ dependencyCount: number;
65
+ }
66
+ /** Snapshot Layer — compact cognitive summary for AI Handoff. */
67
+ export interface KnowledgeSnapshot {
68
+ generatedAt: number;
69
+ topIntents: string[];
70
+ topHotspots: string[];
71
+ topFunctions: string[];
72
+ nextActions: string[];
73
+ graphSummary: {
74
+ nodeCount: number;
75
+ edgeCount: number;
76
+ mappingCount: number;
77
+ avgConfidence: number;
78
+ };
79
+ }
80
+ export interface KnowledgeGraphTreeNode {
81
+ id: string;
82
+ type: KnowledgeNodeType;
83
+ name: string;
84
+ path?: string;
85
+ confidence?: number;
86
+ expanded?: boolean;
87
+ children: KnowledgeGraphTreeNode[];
88
+ }
89
+ export interface ProjectKnowledgeGraph {
90
+ meta: GraphMetadata;
91
+ nodes: KnowledgeNode[];
92
+ edges: KnowledgeEdge[];
93
+ /** Canonical mappings only (confidence >= 0.7). */
94
+ intentMappings: IntentFunctionMapping[];
95
+ /** Cortex-only weak mappings (confidence < 0.7) — never in snapshot/handoff. */
96
+ inferenceMappings: IntentFunctionMapping[];
97
+ reasonTraces: ReasonTraceItem[];
98
+ intentTrees: KnowledgeGraphTreeNode[];
99
+ hotspots: HotspotNode[];
100
+ snapshot: KnowledgeSnapshot;
101
+ }
102
+ /** Legacy shape (pre meta) — normalized on read. */
103
+ export interface LegacyProjectKnowledgeGraph {
104
+ version: 1;
105
+ generatedAt: number;
106
+ nodes: KnowledgeNode[];
107
+ edges: Array<Omit<KnowledgeEdge, 'confidence'> & {
108
+ confidence?: number;
109
+ }>;
110
+ intentMappings: Array<Omit<IntentFunctionMapping, 'confidence'> & {
111
+ confidence?: number;
112
+ }>;
113
+ reasonTraces: ReasonTraceItem[];
114
+ intentTrees: KnowledgeGraphTreeNode[];
115
+ }
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/understanding/knowledgeGraph/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /** V3.1 Project Cognitive Graph — Intent → Module → File → Function */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.KNOWLEDGE_ENGINE_VERSION = exports.KNOWLEDGE_SCHEMA_VERSION = void 0;
5
+ exports.KNOWLEDGE_SCHEMA_VERSION = '1';
6
+ exports.KNOWLEDGE_ENGINE_VERSION = '3.1.0';
@@ -0,0 +1,4 @@
1
+ import type { UnderstandingGraph } from './understandingGraphBuilder.js';
2
+ /** Compact ASCII call chain for Passive status bar (optional mini-graph). */
3
+ export declare function formatUnderstandingMiniGraph(graph: UnderstandingGraph | undefined, maxWidth?: number): string | undefined;
4
+ //# sourceMappingURL=miniGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miniGraph.d.ts","sourceRoot":"","sources":["../../src/understanding/miniGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,QAAQ,SAAK,GACZ,MAAM,GAAG,SAAS,CAapB"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatUnderstandingMiniGraph = formatUnderstandingMiniGraph;
4
+ /** Compact ASCII call chain for Passive status bar (optional mini-graph). */
5
+ function formatUnderstandingMiniGraph(graph, maxWidth = 40) {
6
+ if (!graph?.call_chain?.length) {
7
+ return undefined;
8
+ }
9
+ const chain = graph.call_chain
10
+ .slice(0, 4)
11
+ .map((s) => s.replace(/\(\)$/, ''))
12
+ .join('→');
13
+ const text = `⤷ ${chain}`;
14
+ if (text.length <= maxWidth) {
15
+ return text;
16
+ }
17
+ return `${text.slice(0, Math.max(8, maxWidth - 1))}…`;
18
+ }
@@ -0,0 +1,24 @@
1
+ import type { AnyHandoffArtifact, ChangeArtifact, HandoffArtifact, ImpactArtifact, IntentArtifact, ProjectGraph, ProjectTimeline } from './types.js';
2
+ import type { UnderstandingGraph } from './understandingGraphBuilder.js';
3
+ /** Normalize V3.0 handoff → V3.1 shape on read. */
4
+ export declare function normalizeHandoff(raw: AnyHandoffArtifact | undefined): HandoffArtifact | undefined;
5
+ /** Normalize V3.0 change.json on read. */
6
+ export declare function normalizeChange(raw: unknown): ChangeArtifact | undefined;
7
+ export declare function readProjectGraph(workspaceRoot: string): Promise<ProjectGraph | undefined>;
8
+ export declare function readChangeArtifact(workspaceRoot: string): Promise<ChangeArtifact | undefined>;
9
+ export declare function readHandoffArtifact(workspaceRoot: string): Promise<HandoffArtifact | undefined>;
10
+ export declare function readProjectTimeline(workspaceRoot: string): Promise<ProjectTimeline | undefined>;
11
+ /** @deprecated V3.1 — impact merged into handoff.json */
12
+ export declare function readImpactArtifact(workspaceRoot: string): Promise<ImpactArtifact | undefined>;
13
+ /** @deprecated V3.1 — intent merged into handoff.json */
14
+ export declare function readIntentArtifact(workspaceRoot: string): Promise<IntentArtifact | undefined>;
15
+ export declare function readUnderstandingGraph(workspaceRoot: string): Promise<UnderstandingGraph | undefined>;
16
+ export declare function writeUnderstandingArtifacts(workspaceRoot: string, artifacts: {
17
+ graph: ProjectGraph;
18
+ change: ChangeArtifact;
19
+ handoff: HandoffArtifact;
20
+ timeline: ProjectTimeline;
21
+ understandingGraph?: UnderstandingGraph;
22
+ }): Promise<void>;
23
+ export declare function deleteUnderstandingArtifacts(workspaceRoot: string): Promise<void>;
24
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/understanding/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EAEf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AA+BzE,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CA4CjG;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAkCxE;AAED,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAM/F;AAED,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAGnG;AAED,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAGrG;AAED,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAErG;AAED,yDAAyD;AACzD,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAkBnG;AAaD,yDAAyD;AACzD,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAoBnG;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAEzC;AAED,wBAAsB,2BAA2B,CAC/C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE;IACT,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,GACA,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,4BAA4B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvF"}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.normalizeHandoff = normalizeHandoff;
37
+ exports.normalizeChange = normalizeChange;
38
+ exports.readProjectGraph = readProjectGraph;
39
+ exports.readChangeArtifact = readChangeArtifact;
40
+ exports.readHandoffArtifact = readHandoffArtifact;
41
+ exports.readProjectTimeline = readProjectTimeline;
42
+ exports.readImpactArtifact = readImpactArtifact;
43
+ exports.readIntentArtifact = readIntentArtifact;
44
+ exports.readUnderstandingGraph = readUnderstandingGraph;
45
+ exports.writeUnderstandingArtifacts = writeUnderstandingArtifacts;
46
+ exports.deleteUnderstandingArtifacts = deleteUnderstandingArtifacts;
47
+ const fs = __importStar(require("node:fs/promises"));
48
+ const path = __importStar(require("node:path"));
49
+ const store_js_1 = require("./knowledgeGraph/store.js");
50
+ const LEGACY_ARTIFACTS = ['impact.json', 'intent.json'];
51
+ function contoraPath(workspaceRoot, name) {
52
+ return path.join(workspaceRoot, '.contora', name);
53
+ }
54
+ async function readJson(filePath) {
55
+ try {
56
+ const text = await fs.readFile(filePath, 'utf8');
57
+ return JSON.parse(text);
58
+ }
59
+ catch {
60
+ return undefined;
61
+ }
62
+ }
63
+ async function writeJson(filePath, data) {
64
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
65
+ await fs.writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
66
+ }
67
+ async function unlinkQuiet(filePath) {
68
+ try {
69
+ await fs.unlink(filePath);
70
+ }
71
+ catch {
72
+ /* absent */
73
+ }
74
+ }
75
+ /** Normalize V3.0 handoff → V3.1 shape on read. */
76
+ function normalizeHandoff(raw) {
77
+ if (!raw) {
78
+ return undefined;
79
+ }
80
+ if (raw.version === 2 && 'current_focus' in raw) {
81
+ return raw;
82
+ }
83
+ const v1 = raw;
84
+ return {
85
+ version: 2,
86
+ generatedAt: v1.generatedAt,
87
+ goal: v1.goal,
88
+ current_focus: v1.intent,
89
+ key_changes: [
90
+ ...v1.changed.changedFiles.map((f) => ({
91
+ symbol: f,
92
+ kind: 'file',
93
+ change_type: 'modified',
94
+ })),
95
+ ...v1.changed.changed_functions.map((s) => ({
96
+ symbol: s,
97
+ kind: 'function',
98
+ change_type: 'modified',
99
+ })),
100
+ ...v1.changed.changed_classes.map((s) => ({
101
+ symbol: s,
102
+ kind: 'class',
103
+ change_type: 'modified',
104
+ })),
105
+ ],
106
+ impact_summary: {
107
+ risk: v1.impact.risk_level,
108
+ affected_modules: v1.impact.affected_modules,
109
+ affected_functions: v1.impact.affected_functions,
110
+ details: v1.impact.details,
111
+ },
112
+ next_actions: v1.next_actions.map((line) => ({
113
+ action: 'continue',
114
+ target: line.slice(0, 48),
115
+ reason: line,
116
+ })),
117
+ context_graph_refs: [],
118
+ summary: v1.summary,
119
+ };
120
+ }
121
+ /** Normalize V3.0 change.json on read. */
122
+ function normalizeChange(raw) {
123
+ if (!raw || typeof raw !== 'object') {
124
+ return undefined;
125
+ }
126
+ const r = raw;
127
+ if (r.version === 2 && Array.isArray(r.key_changes)) {
128
+ return raw;
129
+ }
130
+ const legacy = raw;
131
+ const files = legacy.changedFiles ?? [];
132
+ return {
133
+ version: 2,
134
+ generatedAt: legacy.generatedAt ?? Date.now(),
135
+ changed_files: files,
136
+ key_changes: [
137
+ ...files.map((f) => ({ symbol: f, kind: 'file', change_type: 'modified' })),
138
+ ...(legacy.changed_functions ?? []).map((s) => ({
139
+ symbol: s,
140
+ kind: 'function',
141
+ change_type: 'modified',
142
+ })),
143
+ ...(legacy.changed_classes ?? []).map((s) => ({
144
+ symbol: s,
145
+ kind: 'class',
146
+ change_type: 'modified',
147
+ })),
148
+ ],
149
+ };
150
+ }
151
+ async function readProjectGraph(workspaceRoot) {
152
+ const g = await readJson(contoraPath(workspaceRoot, 'graph.json'));
153
+ if (!g) {
154
+ return undefined;
155
+ }
156
+ return { ...g, version: 2 };
157
+ }
158
+ async function readChangeArtifact(workspaceRoot) {
159
+ const raw = await readJson(contoraPath(workspaceRoot, 'change.json'));
160
+ return normalizeChange(raw);
161
+ }
162
+ async function readHandoffArtifact(workspaceRoot) {
163
+ const raw = await readJson(contoraPath(workspaceRoot, 'handoff.json'));
164
+ return normalizeHandoff(raw);
165
+ }
166
+ async function readProjectTimeline(workspaceRoot) {
167
+ return readJson(contoraPath(workspaceRoot, 'timeline.json'));
168
+ }
169
+ /** @deprecated V3.1 — impact merged into handoff.json */
170
+ async function readImpactArtifact(workspaceRoot) {
171
+ const legacy = await readJson(contoraPath(workspaceRoot, 'impact.json'));
172
+ if (legacy) {
173
+ return legacy;
174
+ }
175
+ const handoff = await readHandoffArtifact(workspaceRoot);
176
+ if (!handoff) {
177
+ return undefined;
178
+ }
179
+ return {
180
+ version: 1,
181
+ generatedAt: handoff.generatedAt,
182
+ affected_functions: handoff.impact_summary.affected_functions,
183
+ affected_modules: handoff.impact_summary.affected_modules,
184
+ risk: handoff.impact_summary.risk,
185
+ risk_level: handoff.impact_summary.risk,
186
+ details: handoff.impact_summary.details,
187
+ };
188
+ }
189
+ function confidenceFromHandoff(handoff) {
190
+ switch (handoff.impact_summary.risk) {
191
+ case 'high':
192
+ return 0.88;
193
+ case 'medium':
194
+ return 0.72;
195
+ default:
196
+ return 0.58;
197
+ }
198
+ }
199
+ /** @deprecated V3.1 — intent merged into handoff.json */
200
+ async function readIntentArtifact(workspaceRoot) {
201
+ const legacy = await readJson(contoraPath(workspaceRoot, 'intent.json'));
202
+ if (legacy) {
203
+ return legacy;
204
+ }
205
+ const handoff = await readHandoffArtifact(workspaceRoot);
206
+ if (!handoff) {
207
+ return undefined;
208
+ }
209
+ const kg = await (0, store_js_1.readProjectKnowledgeGraph)(workspaceRoot);
210
+ const fromGraph = kg?.snapshot?.graphSummary?.avgConfidence;
211
+ const confidence = fromGraph && fromGraph > 0 ? fromGraph : confidenceFromHandoff(handoff);
212
+ return {
213
+ version: 1,
214
+ generatedAt: handoff.generatedAt,
215
+ intent: handoff.current_focus,
216
+ confidence,
217
+ signals: handoff.key_changes.slice(0, 4).map((k) => k.symbol),
218
+ };
219
+ }
220
+ async function readUnderstandingGraph(workspaceRoot) {
221
+ return readJson(contoraPath(workspaceRoot, 'understanding_graph.json'));
222
+ }
223
+ async function writeUnderstandingArtifacts(workspaceRoot, artifacts) {
224
+ const root = path.resolve(workspaceRoot);
225
+ const writes = [
226
+ writeJson(contoraPath(root, 'graph.json'), artifacts.graph),
227
+ writeJson(contoraPath(root, 'change.json'), artifacts.change),
228
+ writeJson(contoraPath(root, 'handoff.json'), artifacts.handoff),
229
+ writeJson(contoraPath(root, 'timeline.json'), artifacts.timeline),
230
+ ...LEGACY_ARTIFACTS.map((name) => unlinkQuiet(contoraPath(root, name))),
231
+ ];
232
+ if (artifacts.understandingGraph) {
233
+ writes.push(writeJson(contoraPath(root, 'understanding_graph.json'), artifacts.understandingGraph));
234
+ }
235
+ await Promise.all(writes);
236
+ }
237
+ async function deleteUnderstandingArtifacts(workspaceRoot) {
238
+ const names = ['graph.json', 'change.json', 'handoff.json', 'timeline.json', 'understanding_graph.json', ...LEGACY_ARTIFACTS];
239
+ await Promise.all([
240
+ ...names.map((name) => unlinkQuiet(contoraPath(workspaceRoot, name))),
241
+ (0, store_js_1.deleteProjectKnowledgeGraph)(workspaceRoot),
242
+ ]);
243
+ }
@@ -0,0 +1,9 @@
1
+ import type { ExtractedSymbol, FileExtraction } from './extractor.js';
2
+ /**
3
+ * Hybrid precision layer (V3.1) — post-filters regex noise.
4
+ * Tree-sitter can replace/enhance this module later without changing the pipeline.
5
+ */
6
+ export declare function validateSymbols(symbols: ExtractedSymbol[]): ExtractedSymbol[];
7
+ export declare function validateCalls(calls: string[], symbols: ExtractedSymbol[]): string[];
8
+ export declare function refineExtraction(ext: FileExtraction): FileExtraction;
9
+ //# sourceMappingURL=symbolValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolValidator.d.ts","sourceRoot":"","sources":["../../src/understanding/symbolValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAStE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAwB7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAGnF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAOpE"}