@harness-engineering/graph 0.3.1 → 0.3.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.
package/dist/index.d.mts CHANGED
@@ -248,6 +248,20 @@ declare class ContextQL {
248
248
 
249
249
  declare function project(nodes: readonly GraphNode[], spec: ProjectionSpec | undefined): Partial<GraphNode>[];
250
250
 
251
+ interface ImpactGroups {
252
+ readonly tests: readonly GraphNode[];
253
+ readonly docs: readonly GraphNode[];
254
+ readonly code: readonly GraphNode[];
255
+ readonly other: readonly GraphNode[];
256
+ }
257
+ /**
258
+ * Group graph nodes into impact categories (tests, docs, code, other).
259
+ * Excludes the root node from the results.
260
+ *
261
+ * Shared by both the NLQ orchestrator and the MCP get_impact handler.
262
+ */
263
+ declare function groupNodesByImpact(nodes: readonly GraphNode[], excludeId?: string): ImpactGroups;
264
+
251
265
  /**
252
266
  * Ingests TypeScript/JavaScript files into the graph via regex-based parsing.
253
267
  * Future: upgrade to tree-sitter for full AST parsing.
@@ -573,6 +587,161 @@ declare class GraphAnomalyAdapter {
573
587
  private computeRemovalImpact;
574
588
  }
575
589
 
590
+ /**
591
+ * All supported intent categories for natural language graph queries.
592
+ * Runtime-accessible array mirroring NODE_TYPES / EDGE_TYPES pattern.
593
+ */
594
+ declare const INTENTS: readonly ["impact", "find", "relationships", "explain", "anomaly"];
595
+ /**
596
+ * Intent categories for natural language graph queries.
597
+ */
598
+ type Intent = (typeof INTENTS)[number];
599
+ /**
600
+ * Result of classifying a natural language question into an intent.
601
+ */
602
+ interface ClassificationResult {
603
+ readonly intent: Intent;
604
+ readonly confidence: number;
605
+ readonly signals: Readonly<Record<string, number>>;
606
+ }
607
+ /**
608
+ * An entity mention from the query resolved to a graph node.
609
+ */
610
+ interface ResolvedEntity {
611
+ readonly raw: string;
612
+ readonly nodeId: string;
613
+ readonly node: GraphNode;
614
+ readonly confidence: number;
615
+ readonly method: 'exact' | 'fusion' | 'path';
616
+ }
617
+ /**
618
+ * Complete result from askGraph, including intent, entities, summary, and raw data.
619
+ */
620
+ interface AskGraphResult {
621
+ readonly intent: Intent;
622
+ readonly intentConfidence: number;
623
+ readonly entities: readonly ResolvedEntity[];
624
+ readonly summary: string;
625
+ readonly data: unknown;
626
+ readonly suggestions?: readonly string[];
627
+ }
628
+
629
+ /**
630
+ * Scored multi-signal intent classifier.
631
+ *
632
+ * Combines keyword presence, question-word matching, and verb-pattern matching
633
+ * to classify natural language questions into one of 5 intents with a confidence
634
+ * score between 0 and 1.
635
+ */
636
+ declare class IntentClassifier {
637
+ /**
638
+ * Classify a natural language question into an intent.
639
+ *
640
+ * @param question - The natural language question to classify
641
+ * @returns ClassificationResult with intent, confidence, and per-signal scores
642
+ */
643
+ classify(question: string): ClassificationResult;
644
+ /**
645
+ * Score individual signals for an intent against the normalized query.
646
+ */
647
+ private scoreIntent;
648
+ /**
649
+ * Score keyword signal: uses word-stem matching (checks if any word in the
650
+ * query starts with the keyword). Saturates at 2 matches to avoid penalizing
651
+ * intents with many keywords when only a few appear in the query.
652
+ */
653
+ private scoreKeywords;
654
+ /**
655
+ * Score question-word signal: 1.0 if the query starts with a matching
656
+ * question word, 0 otherwise.
657
+ */
658
+ private scoreQuestionWord;
659
+ /**
660
+ * Score verb-pattern signal: any matching pattern yields a strong score.
661
+ * Multiple matches increase score but saturate quickly.
662
+ */
663
+ private scoreVerbPatterns;
664
+ /**
665
+ * Combine individual signal scores into a single confidence score
666
+ * using additive weighted scoring. Each signal contributes weight * score,
667
+ * and the total weights sum to 1.0 so the result is naturally bounded [0, 1].
668
+ */
669
+ private combineSignals;
670
+ }
671
+
672
+ /**
673
+ * Pattern-based entity extractor.
674
+ *
675
+ * Extracts candidate entity mentions from natural language queries using
676
+ * four strategies in priority order:
677
+ * 1. Quoted strings
678
+ * 2. PascalCase/camelCase tokens
679
+ * 3. File paths
680
+ * 4. Remaining significant nouns (after stop-word and intent-keyword removal)
681
+ *
682
+ * Returns deduplicated raw strings. These are NOT resolved to graph nodes --
683
+ * that is the responsibility of EntityResolver (Phase 4).
684
+ */
685
+ declare class EntityExtractor {
686
+ /**
687
+ * Extract candidate entity mentions from a natural language query.
688
+ *
689
+ * @param query - The natural language query to extract entities from
690
+ * @returns Array of raw entity strings in priority order, deduplicated
691
+ */
692
+ extract(query: string): readonly string[];
693
+ }
694
+
695
+ /**
696
+ * Resolves raw entity strings to graph nodes using a 3-step fuzzy cascade:
697
+ *
698
+ * 1. Exact name match via store.findNodes({ name })
699
+ * 2. FusionLayer search (if provided), take top result if score > 0.5
700
+ * 3. Path match on file nodes via path.includes(raw)
701
+ *
702
+ * Each step tags its match with method and confidence.
703
+ * Unresolved entities are silently omitted from results.
704
+ */
705
+ declare class EntityResolver {
706
+ private readonly store;
707
+ private readonly fusion;
708
+ constructor(store: GraphStore, fusion?: FusionLayer);
709
+ /**
710
+ * Resolve an array of raw entity strings to graph nodes.
711
+ *
712
+ * @param raws - Raw entity strings from EntityExtractor
713
+ * @returns Array of ResolvedEntity for each successfully resolved raw string
714
+ */
715
+ resolve(raws: readonly string[]): readonly ResolvedEntity[];
716
+ private resolveOne;
717
+ }
718
+
719
+ /**
720
+ * Template-based response formatter that generates human-readable summaries
721
+ * from graph operation results, one template per intent.
722
+ */
723
+ declare class ResponseFormatter {
724
+ /**
725
+ * Format graph operation results into a human-readable summary.
726
+ *
727
+ * @param intent - The classified intent
728
+ * @param entities - Resolved entities from the query
729
+ * @param data - Raw result data (shape varies per intent)
730
+ * @param query - Original natural language query (optional)
731
+ * @returns Human-readable summary string
732
+ */
733
+ format(intent: Intent, entities: readonly ResolvedEntity[], data: unknown, query?: string): string;
734
+ private formatImpact;
735
+ private formatFind;
736
+ private formatRelationships;
737
+ private formatExplain;
738
+ private formatAnomaly;
739
+ private safeArrayLength;
740
+ private p;
741
+ }
742
+
743
+ declare function askGraph(store: GraphStore, question: string): Promise<AskGraphResult>;
744
+
576
745
  interface AssembledContext {
577
746
  readonly nodes: readonly GraphNode[];
578
747
  readonly edges: readonly GraphEdge[];
@@ -706,6 +875,80 @@ declare class GraphFeedbackAdapter {
706
875
  computeHarnessCheckData(): GraphHarnessCheckData;
707
876
  }
708
877
 
878
+ interface TaskDefinition {
879
+ readonly id: string;
880
+ readonly files: readonly string[];
881
+ }
882
+ interface IndependenceCheckParams {
883
+ readonly tasks: readonly TaskDefinition[];
884
+ readonly depth?: number;
885
+ readonly edgeTypes?: readonly string[];
886
+ }
887
+ interface OverlapDetail {
888
+ readonly file: string;
889
+ readonly type: 'direct' | 'transitive';
890
+ readonly via?: string;
891
+ }
892
+ interface PairResult {
893
+ readonly taskA: string;
894
+ readonly taskB: string;
895
+ readonly independent: boolean;
896
+ readonly overlaps: readonly OverlapDetail[];
897
+ }
898
+ interface IndependenceResult {
899
+ readonly tasks: readonly string[];
900
+ readonly analysisLevel: 'graph-expanded' | 'file-only';
901
+ readonly depth: number;
902
+ readonly pairs: readonly PairResult[];
903
+ readonly groups: readonly (readonly string[])[];
904
+ readonly verdict: string;
905
+ }
906
+ declare class TaskIndependenceAnalyzer {
907
+ private readonly store;
908
+ constructor(store?: GraphStore);
909
+ analyze(params: IndependenceCheckParams): IndependenceResult;
910
+ private validate;
911
+ private expandViaGraph;
912
+ private computePairOverlap;
913
+ private buildGroups;
914
+ private generateVerdict;
915
+ }
916
+
917
+ type ConflictSeverity = 'high' | 'medium' | 'low';
918
+ interface ConflictDetail {
919
+ readonly taskA: string;
920
+ readonly taskB: string;
921
+ readonly severity: ConflictSeverity;
922
+ readonly reason: string;
923
+ readonly mitigation: string;
924
+ readonly overlaps: readonly OverlapDetail[];
925
+ }
926
+ interface ConflictPrediction {
927
+ readonly tasks: readonly string[];
928
+ readonly analysisLevel: 'graph-expanded' | 'file-only';
929
+ readonly depth: number;
930
+ readonly conflicts: readonly ConflictDetail[];
931
+ readonly groups: readonly (readonly string[])[];
932
+ readonly summary: {
933
+ readonly high: number;
934
+ readonly medium: number;
935
+ readonly low: number;
936
+ readonly regrouped: boolean;
937
+ };
938
+ readonly verdict: string;
939
+ }
940
+ declare class ConflictPredictor {
941
+ private readonly store;
942
+ constructor(store?: GraphStore);
943
+ predict(params: IndependenceCheckParams): ConflictPrediction;
944
+ private classifyPair;
945
+ private severityRank;
946
+ private computePercentile;
947
+ private buildHighSeverityGroups;
948
+ private groupsEqual;
949
+ private generateVerdict;
950
+ }
951
+
709
952
  declare const VERSION = "0.2.0";
710
953
 
711
- export { type AnomalyDetectionOptions, type AnomalyReport, type ArticulationPoint, type AssembledContext, Assembler, CIConnector, CURRENT_SCHEMA_VERSION, CodeIngestor, ConfluenceConnector, type ConnectorConfig, ContextQL, type ContextQLParams, type ContextQLResult, DesignConstraintAdapter, DesignIngestor, type DesignStrictness, type DesignViolation, EDGE_TYPES, type EdgeQuery, type EdgeType, FusionLayer, type FusionResult, GitIngestor, type GitRunner, GraphAnomalyAdapter, type GraphBudget, GraphComplexityAdapter, type GraphComplexityHotspot, type GraphComplexityResult, type GraphConnector, GraphConstraintAdapter, GraphCouplingAdapter, type GraphCouplingFileData, type GraphCouplingResult, type GraphCoverageReport, type GraphDeadCodeData, type GraphDependencyData, type GraphDriftData, type GraphEdge, GraphEdgeSchema, GraphEntropyAdapter, GraphFeedbackAdapter, type GraphFilterResult, type GraphHarnessCheckData, type GraphImpactData, type GraphLayerViolation, type GraphMetadata, type GraphNode, GraphNodeSchema, type GraphSnapshotSummary, GraphStore, type HttpClient, type IngestResult, JiraConnector, KnowledgeIngestor, type LinkResult, NODE_TYPES, type NodeQuery, type NodeType, OBSERVABILITY_TYPES, type ProjectionSpec, SlackConnector, type SourceLocation, type StatisticalOutlier, SyncManager, type SyncMetadata, TopologicalLinker, VERSION, type VectorSearchResult, VectorStore, linkToCode, loadGraph, project, saveGraph };
954
+ export { type AnomalyDetectionOptions, type AnomalyReport, type ArticulationPoint, type AskGraphResult, type AssembledContext, Assembler, CIConnector, CURRENT_SCHEMA_VERSION, type ClassificationResult, CodeIngestor, type ConflictDetail, type ConflictPrediction, ConflictPredictor, type ConflictSeverity, ConfluenceConnector, type ConnectorConfig, ContextQL, type ContextQLParams, type ContextQLResult, DesignConstraintAdapter, DesignIngestor, type DesignStrictness, type DesignViolation, EDGE_TYPES, type EdgeQuery, type EdgeType, EntityExtractor, EntityResolver, FusionLayer, type FusionResult, GitIngestor, type GitRunner, GraphAnomalyAdapter, type GraphBudget, GraphComplexityAdapter, type GraphComplexityHotspot, type GraphComplexityResult, type GraphConnector, GraphConstraintAdapter, GraphCouplingAdapter, type GraphCouplingFileData, type GraphCouplingResult, type GraphCoverageReport, type GraphDeadCodeData, type GraphDependencyData, type GraphDriftData, type GraphEdge, GraphEdgeSchema, GraphEntropyAdapter, GraphFeedbackAdapter, type GraphFilterResult, type GraphHarnessCheckData, type GraphImpactData, type GraphLayerViolation, type GraphMetadata, type GraphNode, GraphNodeSchema, type GraphSnapshotSummary, GraphStore, type HttpClient, INTENTS, type ImpactGroups, type IndependenceCheckParams, type IndependenceResult, type IngestResult, type Intent, IntentClassifier, JiraConnector, KnowledgeIngestor, type LinkResult, NODE_TYPES, type NodeQuery, type NodeType, OBSERVABILITY_TYPES, type OverlapDetail, type PairResult, type ProjectionSpec, type ResolvedEntity, ResponseFormatter, SlackConnector, type SourceLocation, type StatisticalOutlier, SyncManager, type SyncMetadata, type TaskDefinition, TaskIndependenceAnalyzer, TopologicalLinker, VERSION, type VectorSearchResult, VectorStore, askGraph, groupNodesByImpact, linkToCode, loadGraph, project, saveGraph };
package/dist/index.d.ts CHANGED
@@ -248,6 +248,20 @@ declare class ContextQL {
248
248
 
249
249
  declare function project(nodes: readonly GraphNode[], spec: ProjectionSpec | undefined): Partial<GraphNode>[];
250
250
 
251
+ interface ImpactGroups {
252
+ readonly tests: readonly GraphNode[];
253
+ readonly docs: readonly GraphNode[];
254
+ readonly code: readonly GraphNode[];
255
+ readonly other: readonly GraphNode[];
256
+ }
257
+ /**
258
+ * Group graph nodes into impact categories (tests, docs, code, other).
259
+ * Excludes the root node from the results.
260
+ *
261
+ * Shared by both the NLQ orchestrator and the MCP get_impact handler.
262
+ */
263
+ declare function groupNodesByImpact(nodes: readonly GraphNode[], excludeId?: string): ImpactGroups;
264
+
251
265
  /**
252
266
  * Ingests TypeScript/JavaScript files into the graph via regex-based parsing.
253
267
  * Future: upgrade to tree-sitter for full AST parsing.
@@ -573,6 +587,161 @@ declare class GraphAnomalyAdapter {
573
587
  private computeRemovalImpact;
574
588
  }
575
589
 
590
+ /**
591
+ * All supported intent categories for natural language graph queries.
592
+ * Runtime-accessible array mirroring NODE_TYPES / EDGE_TYPES pattern.
593
+ */
594
+ declare const INTENTS: readonly ["impact", "find", "relationships", "explain", "anomaly"];
595
+ /**
596
+ * Intent categories for natural language graph queries.
597
+ */
598
+ type Intent = (typeof INTENTS)[number];
599
+ /**
600
+ * Result of classifying a natural language question into an intent.
601
+ */
602
+ interface ClassificationResult {
603
+ readonly intent: Intent;
604
+ readonly confidence: number;
605
+ readonly signals: Readonly<Record<string, number>>;
606
+ }
607
+ /**
608
+ * An entity mention from the query resolved to a graph node.
609
+ */
610
+ interface ResolvedEntity {
611
+ readonly raw: string;
612
+ readonly nodeId: string;
613
+ readonly node: GraphNode;
614
+ readonly confidence: number;
615
+ readonly method: 'exact' | 'fusion' | 'path';
616
+ }
617
+ /**
618
+ * Complete result from askGraph, including intent, entities, summary, and raw data.
619
+ */
620
+ interface AskGraphResult {
621
+ readonly intent: Intent;
622
+ readonly intentConfidence: number;
623
+ readonly entities: readonly ResolvedEntity[];
624
+ readonly summary: string;
625
+ readonly data: unknown;
626
+ readonly suggestions?: readonly string[];
627
+ }
628
+
629
+ /**
630
+ * Scored multi-signal intent classifier.
631
+ *
632
+ * Combines keyword presence, question-word matching, and verb-pattern matching
633
+ * to classify natural language questions into one of 5 intents with a confidence
634
+ * score between 0 and 1.
635
+ */
636
+ declare class IntentClassifier {
637
+ /**
638
+ * Classify a natural language question into an intent.
639
+ *
640
+ * @param question - The natural language question to classify
641
+ * @returns ClassificationResult with intent, confidence, and per-signal scores
642
+ */
643
+ classify(question: string): ClassificationResult;
644
+ /**
645
+ * Score individual signals for an intent against the normalized query.
646
+ */
647
+ private scoreIntent;
648
+ /**
649
+ * Score keyword signal: uses word-stem matching (checks if any word in the
650
+ * query starts with the keyword). Saturates at 2 matches to avoid penalizing
651
+ * intents with many keywords when only a few appear in the query.
652
+ */
653
+ private scoreKeywords;
654
+ /**
655
+ * Score question-word signal: 1.0 if the query starts with a matching
656
+ * question word, 0 otherwise.
657
+ */
658
+ private scoreQuestionWord;
659
+ /**
660
+ * Score verb-pattern signal: any matching pattern yields a strong score.
661
+ * Multiple matches increase score but saturate quickly.
662
+ */
663
+ private scoreVerbPatterns;
664
+ /**
665
+ * Combine individual signal scores into a single confidence score
666
+ * using additive weighted scoring. Each signal contributes weight * score,
667
+ * and the total weights sum to 1.0 so the result is naturally bounded [0, 1].
668
+ */
669
+ private combineSignals;
670
+ }
671
+
672
+ /**
673
+ * Pattern-based entity extractor.
674
+ *
675
+ * Extracts candidate entity mentions from natural language queries using
676
+ * four strategies in priority order:
677
+ * 1. Quoted strings
678
+ * 2. PascalCase/camelCase tokens
679
+ * 3. File paths
680
+ * 4. Remaining significant nouns (after stop-word and intent-keyword removal)
681
+ *
682
+ * Returns deduplicated raw strings. These are NOT resolved to graph nodes --
683
+ * that is the responsibility of EntityResolver (Phase 4).
684
+ */
685
+ declare class EntityExtractor {
686
+ /**
687
+ * Extract candidate entity mentions from a natural language query.
688
+ *
689
+ * @param query - The natural language query to extract entities from
690
+ * @returns Array of raw entity strings in priority order, deduplicated
691
+ */
692
+ extract(query: string): readonly string[];
693
+ }
694
+
695
+ /**
696
+ * Resolves raw entity strings to graph nodes using a 3-step fuzzy cascade:
697
+ *
698
+ * 1. Exact name match via store.findNodes({ name })
699
+ * 2. FusionLayer search (if provided), take top result if score > 0.5
700
+ * 3. Path match on file nodes via path.includes(raw)
701
+ *
702
+ * Each step tags its match with method and confidence.
703
+ * Unresolved entities are silently omitted from results.
704
+ */
705
+ declare class EntityResolver {
706
+ private readonly store;
707
+ private readonly fusion;
708
+ constructor(store: GraphStore, fusion?: FusionLayer);
709
+ /**
710
+ * Resolve an array of raw entity strings to graph nodes.
711
+ *
712
+ * @param raws - Raw entity strings from EntityExtractor
713
+ * @returns Array of ResolvedEntity for each successfully resolved raw string
714
+ */
715
+ resolve(raws: readonly string[]): readonly ResolvedEntity[];
716
+ private resolveOne;
717
+ }
718
+
719
+ /**
720
+ * Template-based response formatter that generates human-readable summaries
721
+ * from graph operation results, one template per intent.
722
+ */
723
+ declare class ResponseFormatter {
724
+ /**
725
+ * Format graph operation results into a human-readable summary.
726
+ *
727
+ * @param intent - The classified intent
728
+ * @param entities - Resolved entities from the query
729
+ * @param data - Raw result data (shape varies per intent)
730
+ * @param query - Original natural language query (optional)
731
+ * @returns Human-readable summary string
732
+ */
733
+ format(intent: Intent, entities: readonly ResolvedEntity[], data: unknown, query?: string): string;
734
+ private formatImpact;
735
+ private formatFind;
736
+ private formatRelationships;
737
+ private formatExplain;
738
+ private formatAnomaly;
739
+ private safeArrayLength;
740
+ private p;
741
+ }
742
+
743
+ declare function askGraph(store: GraphStore, question: string): Promise<AskGraphResult>;
744
+
576
745
  interface AssembledContext {
577
746
  readonly nodes: readonly GraphNode[];
578
747
  readonly edges: readonly GraphEdge[];
@@ -706,6 +875,80 @@ declare class GraphFeedbackAdapter {
706
875
  computeHarnessCheckData(): GraphHarnessCheckData;
707
876
  }
708
877
 
878
+ interface TaskDefinition {
879
+ readonly id: string;
880
+ readonly files: readonly string[];
881
+ }
882
+ interface IndependenceCheckParams {
883
+ readonly tasks: readonly TaskDefinition[];
884
+ readonly depth?: number;
885
+ readonly edgeTypes?: readonly string[];
886
+ }
887
+ interface OverlapDetail {
888
+ readonly file: string;
889
+ readonly type: 'direct' | 'transitive';
890
+ readonly via?: string;
891
+ }
892
+ interface PairResult {
893
+ readonly taskA: string;
894
+ readonly taskB: string;
895
+ readonly independent: boolean;
896
+ readonly overlaps: readonly OverlapDetail[];
897
+ }
898
+ interface IndependenceResult {
899
+ readonly tasks: readonly string[];
900
+ readonly analysisLevel: 'graph-expanded' | 'file-only';
901
+ readonly depth: number;
902
+ readonly pairs: readonly PairResult[];
903
+ readonly groups: readonly (readonly string[])[];
904
+ readonly verdict: string;
905
+ }
906
+ declare class TaskIndependenceAnalyzer {
907
+ private readonly store;
908
+ constructor(store?: GraphStore);
909
+ analyze(params: IndependenceCheckParams): IndependenceResult;
910
+ private validate;
911
+ private expandViaGraph;
912
+ private computePairOverlap;
913
+ private buildGroups;
914
+ private generateVerdict;
915
+ }
916
+
917
+ type ConflictSeverity = 'high' | 'medium' | 'low';
918
+ interface ConflictDetail {
919
+ readonly taskA: string;
920
+ readonly taskB: string;
921
+ readonly severity: ConflictSeverity;
922
+ readonly reason: string;
923
+ readonly mitigation: string;
924
+ readonly overlaps: readonly OverlapDetail[];
925
+ }
926
+ interface ConflictPrediction {
927
+ readonly tasks: readonly string[];
928
+ readonly analysisLevel: 'graph-expanded' | 'file-only';
929
+ readonly depth: number;
930
+ readonly conflicts: readonly ConflictDetail[];
931
+ readonly groups: readonly (readonly string[])[];
932
+ readonly summary: {
933
+ readonly high: number;
934
+ readonly medium: number;
935
+ readonly low: number;
936
+ readonly regrouped: boolean;
937
+ };
938
+ readonly verdict: string;
939
+ }
940
+ declare class ConflictPredictor {
941
+ private readonly store;
942
+ constructor(store?: GraphStore);
943
+ predict(params: IndependenceCheckParams): ConflictPrediction;
944
+ private classifyPair;
945
+ private severityRank;
946
+ private computePercentile;
947
+ private buildHighSeverityGroups;
948
+ private groupsEqual;
949
+ private generateVerdict;
950
+ }
951
+
709
952
  declare const VERSION = "0.2.0";
710
953
 
711
- export { type AnomalyDetectionOptions, type AnomalyReport, type ArticulationPoint, type AssembledContext, Assembler, CIConnector, CURRENT_SCHEMA_VERSION, CodeIngestor, ConfluenceConnector, type ConnectorConfig, ContextQL, type ContextQLParams, type ContextQLResult, DesignConstraintAdapter, DesignIngestor, type DesignStrictness, type DesignViolation, EDGE_TYPES, type EdgeQuery, type EdgeType, FusionLayer, type FusionResult, GitIngestor, type GitRunner, GraphAnomalyAdapter, type GraphBudget, GraphComplexityAdapter, type GraphComplexityHotspot, type GraphComplexityResult, type GraphConnector, GraphConstraintAdapter, GraphCouplingAdapter, type GraphCouplingFileData, type GraphCouplingResult, type GraphCoverageReport, type GraphDeadCodeData, type GraphDependencyData, type GraphDriftData, type GraphEdge, GraphEdgeSchema, GraphEntropyAdapter, GraphFeedbackAdapter, type GraphFilterResult, type GraphHarnessCheckData, type GraphImpactData, type GraphLayerViolation, type GraphMetadata, type GraphNode, GraphNodeSchema, type GraphSnapshotSummary, GraphStore, type HttpClient, type IngestResult, JiraConnector, KnowledgeIngestor, type LinkResult, NODE_TYPES, type NodeQuery, type NodeType, OBSERVABILITY_TYPES, type ProjectionSpec, SlackConnector, type SourceLocation, type StatisticalOutlier, SyncManager, type SyncMetadata, TopologicalLinker, VERSION, type VectorSearchResult, VectorStore, linkToCode, loadGraph, project, saveGraph };
954
+ export { type AnomalyDetectionOptions, type AnomalyReport, type ArticulationPoint, type AskGraphResult, type AssembledContext, Assembler, CIConnector, CURRENT_SCHEMA_VERSION, type ClassificationResult, CodeIngestor, type ConflictDetail, type ConflictPrediction, ConflictPredictor, type ConflictSeverity, ConfluenceConnector, type ConnectorConfig, ContextQL, type ContextQLParams, type ContextQLResult, DesignConstraintAdapter, DesignIngestor, type DesignStrictness, type DesignViolation, EDGE_TYPES, type EdgeQuery, type EdgeType, EntityExtractor, EntityResolver, FusionLayer, type FusionResult, GitIngestor, type GitRunner, GraphAnomalyAdapter, type GraphBudget, GraphComplexityAdapter, type GraphComplexityHotspot, type GraphComplexityResult, type GraphConnector, GraphConstraintAdapter, GraphCouplingAdapter, type GraphCouplingFileData, type GraphCouplingResult, type GraphCoverageReport, type GraphDeadCodeData, type GraphDependencyData, type GraphDriftData, type GraphEdge, GraphEdgeSchema, GraphEntropyAdapter, GraphFeedbackAdapter, type GraphFilterResult, type GraphHarnessCheckData, type GraphImpactData, type GraphLayerViolation, type GraphMetadata, type GraphNode, GraphNodeSchema, type GraphSnapshotSummary, GraphStore, type HttpClient, INTENTS, type ImpactGroups, type IndependenceCheckParams, type IndependenceResult, type IngestResult, type Intent, IntentClassifier, JiraConnector, KnowledgeIngestor, type LinkResult, NODE_TYPES, type NodeQuery, type NodeType, OBSERVABILITY_TYPES, type OverlapDetail, type PairResult, type ProjectionSpec, type ResolvedEntity, ResponseFormatter, SlackConnector, type SourceLocation, type StatisticalOutlier, SyncManager, type SyncMetadata, type TaskDefinition, TaskIndependenceAnalyzer, TopologicalLinker, VERSION, type VectorSearchResult, VectorStore, askGraph, groupNodesByImpact, linkToCode, loadGraph, project, saveGraph };