@egentica/codemap 0.1.5
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/LICENSE.md +165 -0
- package/README.md +479 -0
- package/dist/adapters/EgenticaMcpAdapter.d.ts +128 -0
- package/dist/adapters/EgenticaMcpAdapter.d.ts.map +1 -0
- package/dist/adapters/EgenticaMcpAdapter.js +218 -0
- package/dist/adapters/EgenticaMcpAdapter.js.map +1 -0
- package/dist/assist/AssistEngine.d.ts +107 -0
- package/dist/assist/AssistEngine.d.ts.map +1 -0
- package/dist/assist/AssistEngine.js +188 -0
- package/dist/assist/AssistEngine.js.map +1 -0
- package/dist/assist/AssistScorer.d.ts +91 -0
- package/dist/assist/AssistScorer.d.ts.map +1 -0
- package/dist/assist/AssistScorer.js +254 -0
- package/dist/assist/AssistScorer.js.map +1 -0
- package/dist/assist/PatternAggregator.d.ts +116 -0
- package/dist/assist/PatternAggregator.d.ts.map +1 -0
- package/dist/assist/PatternAggregator.js +311 -0
- package/dist/assist/PatternAggregator.js.map +1 -0
- package/dist/assist/RelevanceScorer.d.ts +104 -0
- package/dist/assist/RelevanceScorer.d.ts.map +1 -0
- package/dist/assist/RelevanceScorer.js +240 -0
- package/dist/assist/RelevanceScorer.js.map +1 -0
- package/dist/assist/index.d.ts +6 -0
- package/dist/assist/index.d.ts.map +1 -0
- package/dist/assist/index.js +9 -0
- package/dist/assist/index.js.map +1 -0
- package/dist/core/AnnotationStore.d.ts +101 -0
- package/dist/core/AnnotationStore.d.ts.map +1 -0
- package/dist/core/AnnotationStore.js +236 -0
- package/dist/core/AnnotationStore.js.map +1 -0
- package/dist/core/BackupManager.d.ts +92 -0
- package/dist/core/BackupManager.d.ts.map +1 -0
- package/dist/core/BackupManager.js +311 -0
- package/dist/core/BackupManager.js.map +1 -0
- package/dist/core/ChecklistStore.d.ts +66 -0
- package/dist/core/ChecklistStore.d.ts.map +1 -0
- package/dist/core/ChecklistStore.js +199 -0
- package/dist/core/ChecklistStore.js.map +1 -0
- package/dist/core/CodeMap.d.ts +614 -0
- package/dist/core/CodeMap.d.ts.map +1 -0
- package/dist/core/CodeMap.js +880 -0
- package/dist/core/CodeMap.js.map +1 -0
- package/dist/core/DisplayFilter.d.ts +83 -0
- package/dist/core/DisplayFilter.d.ts.map +1 -0
- package/dist/core/DisplayFilter.js +228 -0
- package/dist/core/DisplayFilter.js.map +1 -0
- package/dist/core/EventBus.d.ts +114 -0
- package/dist/core/EventBus.d.ts.map +1 -0
- package/dist/core/EventBus.js +192 -0
- package/dist/core/EventBus.js.map +1 -0
- package/dist/core/ExperienceStore.d.ts +170 -0
- package/dist/core/ExperienceStore.d.ts.map +1 -0
- package/dist/core/ExperienceStore.js +292 -0
- package/dist/core/ExperienceStore.js.map +1 -0
- package/dist/core/ExperienceTracker.d.ts +110 -0
- package/dist/core/ExperienceTracker.d.ts.map +1 -0
- package/dist/core/ExperienceTracker.js +291 -0
- package/dist/core/ExperienceTracker.js.map +1 -0
- package/dist/core/FileSystemGraph.d.ts +157 -0
- package/dist/core/FileSystemGraph.d.ts.map +1 -0
- package/dist/core/FileSystemGraph.js +316 -0
- package/dist/core/FileSystemGraph.js.map +1 -0
- package/dist/core/FileSystemIO.d.ts +222 -0
- package/dist/core/FileSystemIO.d.ts.map +1 -0
- package/dist/core/FileSystemIO.js +403 -0
- package/dist/core/FileSystemIO.js.map +1 -0
- package/dist/core/FuzzyMatcher.d.ts +51 -0
- package/dist/core/FuzzyMatcher.d.ts.map +1 -0
- package/dist/core/FuzzyMatcher.js +280 -0
- package/dist/core/FuzzyMatcher.js.map +1 -0
- package/dist/core/GroupStore.d.ts +114 -0
- package/dist/core/GroupStore.d.ts.map +1 -0
- package/dist/core/GroupStore.js +246 -0
- package/dist/core/GroupStore.js.map +1 -0
- package/dist/core/HelpRegistry.d.ts +116 -0
- package/dist/core/HelpRegistry.d.ts.map +1 -0
- package/dist/core/HelpRegistry.js +160 -0
- package/dist/core/HelpRegistry.js.map +1 -0
- package/dist/core/HintRegistry.d.ts +49 -0
- package/dist/core/HintRegistry.d.ts.map +1 -0
- package/dist/core/HintRegistry.js +81 -0
- package/dist/core/HintRegistry.js.map +1 -0
- package/dist/core/LabelStore.d.ts +88 -0
- package/dist/core/LabelStore.d.ts.map +1 -0
- package/dist/core/LabelStore.js +520 -0
- package/dist/core/LabelStore.js.map +1 -0
- package/dist/core/LineRangeWriter.d.ts +63 -0
- package/dist/core/LineRangeWriter.d.ts.map +1 -0
- package/dist/core/LineRangeWriter.js +179 -0
- package/dist/core/LineRangeWriter.js.map +1 -0
- package/dist/core/ParserRegistry.d.ts +70 -0
- package/dist/core/ParserRegistry.d.ts.map +1 -0
- package/dist/core/ParserRegistry.js +109 -0
- package/dist/core/ParserRegistry.js.map +1 -0
- package/dist/core/PluginRegistry.d.ts +120 -0
- package/dist/core/PluginRegistry.d.ts.map +1 -0
- package/dist/core/PluginRegistry.js +230 -0
- package/dist/core/PluginRegistry.js.map +1 -0
- package/dist/core/QueryEngine.d.ts +134 -0
- package/dist/core/QueryEngine.d.ts.map +1 -0
- package/dist/core/QueryEngine.js +211 -0
- package/dist/core/QueryEngine.js.map +1 -0
- package/dist/core/Scanner.d.ts +84 -0
- package/dist/core/Scanner.d.ts.map +1 -0
- package/dist/core/Scanner.js +184 -0
- package/dist/core/Scanner.js.map +1 -0
- package/dist/core/SessionTransactionLog.d.ts +138 -0
- package/dist/core/SessionTransactionLog.d.ts.map +1 -0
- package/dist/core/SessionTransactionLog.js +397 -0
- package/dist/core/SessionTransactionLog.js.map +1 -0
- package/dist/core/TargetParser.d.ts +85 -0
- package/dist/core/TargetParser.d.ts.map +1 -0
- package/dist/core/TargetParser.js +167 -0
- package/dist/core/TargetParser.js.map +1 -0
- package/dist/core/TargetResolver.d.ts +115 -0
- package/dist/core/TargetResolver.d.ts.map +1 -0
- package/dist/core/TargetResolver.js +237 -0
- package/dist/core/TargetResolver.js.map +1 -0
- package/dist/core/WriteSafetyGuard.d.ts +101 -0
- package/dist/core/WriteSafetyGuard.d.ts.map +1 -0
- package/dist/core/WriteSafetyGuard.js +265 -0
- package/dist/core/WriteSafetyGuard.js.map +1 -0
- package/dist/core/index.d.ts +38 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +51 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/query/DependencyTraversal.d.ts +23 -0
- package/dist/core/query/DependencyTraversal.d.ts.map +1 -0
- package/dist/core/query/DependencyTraversal.js +55 -0
- package/dist/core/query/DependencyTraversal.js.map +1 -0
- package/dist/core/query/ResultProcessor.d.ts +20 -0
- package/dist/core/query/ResultProcessor.d.ts.map +1 -0
- package/dist/core/query/ResultProcessor.js +99 -0
- package/dist/core/query/ResultProcessor.js.map +1 -0
- package/dist/core/query/SymbolSearchEngine.d.ts +20 -0
- package/dist/core/query/SymbolSearchEngine.d.ts.map +1 -0
- package/dist/core/query/SymbolSearchEngine.js +109 -0
- package/dist/core/query/SymbolSearchEngine.js.map +1 -0
- package/dist/core/query/TextSearchEngine.d.ts +23 -0
- package/dist/core/query/TextSearchEngine.d.ts.map +1 -0
- package/dist/core/query/TextSearchEngine.js +69 -0
- package/dist/core/query/TextSearchEngine.js.map +1 -0
- package/dist/core/query/index.d.ts +11 -0
- package/dist/core/query/index.d.ts.map +1 -0
- package/dist/core/query/index.js +18 -0
- package/dist/core/query/index.js.map +1 -0
- package/dist/core/scan/DependencyResolver.d.ts +26 -0
- package/dist/core/scan/DependencyResolver.d.ts.map +1 -0
- package/dist/core/scan/DependencyResolver.js +81 -0
- package/dist/core/scan/DependencyResolver.js.map +1 -0
- package/dist/core/scan/DirectoryWalker.d.ts +39 -0
- package/dist/core/scan/DirectoryWalker.d.ts.map +1 -0
- package/dist/core/scan/DirectoryWalker.js +136 -0
- package/dist/core/scan/DirectoryWalker.js.map +1 -0
- package/dist/core/scan/IgnorePatternMatcher.d.ts +32 -0
- package/dist/core/scan/IgnorePatternMatcher.d.ts.map +1 -0
- package/dist/core/scan/IgnorePatternMatcher.js +120 -0
- package/dist/core/scan/IgnorePatternMatcher.js.map +1 -0
- package/dist/core/scan/index.d.ts +10 -0
- package/dist/core/scan/index.d.ts.map +1 -0
- package/dist/core/scan/index.js +16 -0
- package/dist/core/scan/index.js.map +1 -0
- package/dist/core/utils/packageDiscovery.d.ts +24 -0
- package/dist/core/utils/packageDiscovery.d.ts.map +1 -0
- package/dist/core/utils/packageDiscovery.js +37 -0
- package/dist/core/utils/packageDiscovery.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/operations/annotations.d.ts +9 -0
- package/dist/mcp/operations/annotations.d.ts.map +1 -0
- package/dist/mcp/operations/annotations.js +66 -0
- package/dist/mcp/operations/annotations.js.map +1 -0
- package/dist/mcp/operations/files.d.ts +13 -0
- package/dist/mcp/operations/files.d.ts.map +1 -0
- package/dist/mcp/operations/files.js +173 -0
- package/dist/mcp/operations/files.js.map +1 -0
- package/dist/mcp/operations/graph.d.ts +10 -0
- package/dist/mcp/operations/graph.d.ts.map +1 -0
- package/dist/mcp/operations/graph.js +69 -0
- package/dist/mcp/operations/graph.js.map +1 -0
- package/dist/mcp/operations/groups.d.ts +55 -0
- package/dist/mcp/operations/groups.d.ts.map +1 -0
- package/dist/mcp/operations/groups.js +233 -0
- package/dist/mcp/operations/groups.js.map +1 -0
- package/dist/mcp/operations/help.d.ts +36 -0
- package/dist/mcp/operations/help.d.ts.map +1 -0
- package/dist/mcp/operations/help.js +322 -0
- package/dist/mcp/operations/help.js.map +1 -0
- package/dist/mcp/operations/session.d.ts +13 -0
- package/dist/mcp/operations/session.d.ts.map +1 -0
- package/dist/mcp/operations/session.js +169 -0
- package/dist/mcp/operations/session.js.map +1 -0
- package/dist/mcp/operations/writes.d.ts +14 -0
- package/dist/mcp/operations/writes.d.ts.map +1 -0
- package/dist/mcp/operations/writes.js +287 -0
- package/dist/mcp/operations/writes.js.map +1 -0
- package/dist/mcp/registry/ToolRegistry.d.ts +54 -0
- package/dist/mcp/registry/ToolRegistry.d.ts.map +1 -0
- package/dist/mcp/registry/ToolRegistry.js +219 -0
- package/dist/mcp/registry/ToolRegistry.js.map +1 -0
- package/dist/mcp/registry/context-guard.d.ts +13 -0
- package/dist/mcp/registry/context-guard.d.ts.map +1 -0
- package/dist/mcp/registry/context-guard.js +19 -0
- package/dist/mcp/registry/context-guard.js.map +1 -0
- package/dist/mcp/registry/schemas.d.ts +221 -0
- package/dist/mcp/registry/schemas.d.ts.map +1 -0
- package/dist/mcp/registry/schemas.js +217 -0
- package/dist/mcp/registry/schemas.js.map +1 -0
- package/dist/mcp/registry/types.d.ts +50 -0
- package/dist/mcp/registry/types.d.ts.map +1 -0
- package/dist/mcp/registry/types.js +5 -0
- package/dist/mcp/registry/types.js.map +1 -0
- package/dist/mcp/server.d.ts +35 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +264 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/annotations/add.tool.d.ts +10 -0
- package/dist/mcp/tools/annotations/add.tool.d.ts.map +1 -0
- package/dist/mcp/tools/annotations/add.tool.js +88 -0
- package/dist/mcp/tools/annotations/add.tool.js.map +1 -0
- package/dist/mcp/tools/annotations/edit.tool.d.ts +10 -0
- package/dist/mcp/tools/annotations/edit.tool.d.ts.map +1 -0
- package/dist/mcp/tools/annotations/edit.tool.js +92 -0
- package/dist/mcp/tools/annotations/edit.tool.js.map +1 -0
- package/dist/mcp/tools/annotations/remove.tool.d.ts +9 -0
- package/dist/mcp/tools/annotations/remove.tool.d.ts.map +1 -0
- package/dist/mcp/tools/annotations/remove.tool.js +87 -0
- package/dist/mcp/tools/annotations/remove.tool.js.map +1 -0
- package/dist/mcp/tools/annotations/search-annotations.tool.d.ts +11 -0
- package/dist/mcp/tools/annotations/search-annotations.tool.d.ts.map +1 -0
- package/dist/mcp/tools/annotations/search-annotations.tool.js +91 -0
- package/dist/mcp/tools/annotations/search-annotations.tool.js.map +1 -0
- package/dist/mcp/tools/backup/list.tool.d.ts +16 -0
- package/dist/mcp/tools/backup/list.tool.d.ts.map +1 -0
- package/dist/mcp/tools/backup/list.tool.js +48 -0
- package/dist/mcp/tools/backup/list.tool.js.map +1 -0
- package/dist/mcp/tools/backup/restore.tool.d.ts +15 -0
- package/dist/mcp/tools/backup/restore.tool.d.ts.map +1 -0
- package/dist/mcp/tools/backup/restore.tool.js +138 -0
- package/dist/mcp/tools/backup/restore.tool.js.map +1 -0
- package/dist/mcp/tools/checklist/add.tool.d.ts +17 -0
- package/dist/mcp/tools/checklist/add.tool.d.ts.map +1 -0
- package/dist/mcp/tools/checklist/add.tool.js +53 -0
- package/dist/mcp/tools/checklist/add.tool.js.map +1 -0
- package/dist/mcp/tools/checklist/list.tool.d.ts +11 -0
- package/dist/mcp/tools/checklist/list.tool.d.ts.map +1 -0
- package/dist/mcp/tools/checklist/list.tool.js +53 -0
- package/dist/mcp/tools/checklist/list.tool.js.map +1 -0
- package/dist/mcp/tools/checklist/remove.tool.d.ts +9 -0
- package/dist/mcp/tools/checklist/remove.tool.d.ts.map +1 -0
- package/dist/mcp/tools/checklist/remove.tool.js +63 -0
- package/dist/mcp/tools/checklist/remove.tool.js.map +1 -0
- package/dist/mcp/tools/graph/get-dependencies.tool.d.ts +8 -0
- package/dist/mcp/tools/graph/get-dependencies.tool.d.ts.map +1 -0
- package/dist/mcp/tools/graph/get-dependencies.tool.js +58 -0
- package/dist/mcp/tools/graph/get-dependencies.tool.js.map +1 -0
- package/dist/mcp/tools/graph/get-related.tool.d.ts +9 -0
- package/dist/mcp/tools/graph/get-related.tool.d.ts.map +1 -0
- package/dist/mcp/tools/graph/get-related.tool.js +63 -0
- package/dist/mcp/tools/graph/get-related.tool.js.map +1 -0
- package/dist/mcp/tools/graph/impact-analysis.tool.d.ts +9 -0
- package/dist/mcp/tools/graph/impact-analysis.tool.d.ts.map +1 -0
- package/dist/mcp/tools/graph/impact-analysis.tool.js +61 -0
- package/dist/mcp/tools/graph/impact-analysis.tool.js.map +1 -0
- package/dist/mcp/tools/graph/traverse.tool.d.ts +13 -0
- package/dist/mcp/tools/graph/traverse.tool.d.ts.map +1 -0
- package/dist/mcp/tools/graph/traverse.tool.js +59 -0
- package/dist/mcp/tools/graph/traverse.tool.js.map +1 -0
- package/dist/mcp/tools/groups/add.tool.d.ts +10 -0
- package/dist/mcp/tools/groups/add.tool.d.ts.map +1 -0
- package/dist/mcp/tools/groups/add.tool.js +85 -0
- package/dist/mcp/tools/groups/add.tool.js.map +1 -0
- package/dist/mcp/tools/groups/notate.tool.d.ts +11 -0
- package/dist/mcp/tools/groups/notate.tool.d.ts.map +1 -0
- package/dist/mcp/tools/groups/notate.tool.js +86 -0
- package/dist/mcp/tools/groups/notate.tool.js.map +1 -0
- package/dist/mcp/tools/groups/search.tool.d.ts +8 -0
- package/dist/mcp/tools/groups/search.tool.d.ts.map +1 -0
- package/dist/mcp/tools/groups/search.tool.js +81 -0
- package/dist/mcp/tools/groups/search.tool.js.map +1 -0
- package/dist/mcp/tools/io/append.tool.d.ts +10 -0
- package/dist/mcp/tools/io/append.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/append.tool.js +103 -0
- package/dist/mcp/tools/io/append.tool.js.map +1 -0
- package/dist/mcp/tools/io/create.tool.d.ts +11 -0
- package/dist/mcp/tools/io/create.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/create.tool.js +119 -0
- package/dist/mcp/tools/io/create.tool.js.map +1 -0
- package/dist/mcp/tools/io/delete.tool.d.ts +9 -0
- package/dist/mcp/tools/io/delete.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/delete.tool.js +129 -0
- package/dist/mcp/tools/io/delete.tool.js.map +1 -0
- package/dist/mcp/tools/io/get-annotations.tool.d.ts +10 -0
- package/dist/mcp/tools/io/get-annotations.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/get-annotations.tool.js +97 -0
- package/dist/mcp/tools/io/get-annotations.tool.js.map +1 -0
- package/dist/mcp/tools/io/get-symbols.tool.d.ts +9 -0
- package/dist/mcp/tools/io/get-symbols.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/get-symbols.tool.js +63 -0
- package/dist/mcp/tools/io/get-symbols.tool.js.map +1 -0
- package/dist/mcp/tools/io/list.tool.d.ts +8 -0
- package/dist/mcp/tools/io/list.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/list.tool.js +68 -0
- package/dist/mcp/tools/io/list.tool.js.map +1 -0
- package/dist/mcp/tools/io/peek.tool.d.ts +11 -0
- package/dist/mcp/tools/io/peek.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/peek.tool.js +74 -0
- package/dist/mcp/tools/io/peek.tool.js.map +1 -0
- package/dist/mcp/tools/io/read-multiple.tool.d.ts +9 -0
- package/dist/mcp/tools/io/read-multiple.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/read-multiple.tool.js +72 -0
- package/dist/mcp/tools/io/read-multiple.tool.js.map +1 -0
- package/dist/mcp/tools/io/read.tool.d.ts +13 -0
- package/dist/mcp/tools/io/read.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/read.tool.js +132 -0
- package/dist/mcp/tools/io/read.tool.js.map +1 -0
- package/dist/mcp/tools/io/rename.tool.d.ts +9 -0
- package/dist/mcp/tools/io/rename.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/rename.tool.js +101 -0
- package/dist/mcp/tools/io/rename.tool.js.map +1 -0
- package/dist/mcp/tools/io/replace-many.tool.d.ts +10 -0
- package/dist/mcp/tools/io/replace-many.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/replace-many.tool.js +114 -0
- package/dist/mcp/tools/io/replace-many.tool.js.map +1 -0
- package/dist/mcp/tools/io/replace-text.tool.d.ts +12 -0
- package/dist/mcp/tools/io/replace-text.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/replace-text.tool.js +213 -0
- package/dist/mcp/tools/io/replace-text.tool.js.map +1 -0
- package/dist/mcp/tools/io/write.tool.d.ts +10 -0
- package/dist/mcp/tools/io/write.tool.d.ts.map +1 -0
- package/dist/mcp/tools/io/write.tool.js +103 -0
- package/dist/mcp/tools/io/write.tool.js.map +1 -0
- package/dist/mcp/tools/labels/assign.tool.d.ts +16 -0
- package/dist/mcp/tools/labels/assign.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/assign.tool.js +52 -0
- package/dist/mcp/tools/labels/assign.tool.js.map +1 -0
- package/dist/mcp/tools/labels/create.tool.d.ts +12 -0
- package/dist/mcp/tools/labels/create.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/create.tool.js +51 -0
- package/dist/mcp/tools/labels/create.tool.js.map +1 -0
- package/dist/mcp/tools/labels/delete.tool.d.ts +9 -0
- package/dist/mcp/tools/labels/delete.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/delete.tool.js +48 -0
- package/dist/mcp/tools/labels/delete.tool.js.map +1 -0
- package/dist/mcp/tools/labels/edit.tool.d.ts +13 -0
- package/dist/mcp/tools/labels/edit.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/edit.tool.js +58 -0
- package/dist/mcp/tools/labels/edit.tool.js.map +1 -0
- package/dist/mcp/tools/labels/list.tool.d.ts +11 -0
- package/dist/mcp/tools/labels/list.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/list.tool.js +47 -0
- package/dist/mcp/tools/labels/list.tool.js.map +1 -0
- package/dist/mcp/tools/labels/migrate.tool.d.ts +10 -0
- package/dist/mcp/tools/labels/migrate.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/migrate.tool.js +50 -0
- package/dist/mcp/tools/labels/migrate.tool.js.map +1 -0
- package/dist/mcp/tools/labels/search.tool.d.ts +16 -0
- package/dist/mcp/tools/labels/search.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/search.tool.js +55 -0
- package/dist/mcp/tools/labels/search.tool.js.map +1 -0
- package/dist/mcp/tools/labels/unassign.tool.d.ts +9 -0
- package/dist/mcp/tools/labels/unassign.tool.d.ts.map +1 -0
- package/dist/mcp/tools/labels/unassign.tool.js +49 -0
- package/dist/mcp/tools/labels/unassign.tool.js.map +1 -0
- package/dist/mcp/tools/search/find-by-name.tool.d.ts +8 -0
- package/dist/mcp/tools/search/find-by-name.tool.d.ts.map +1 -0
- package/dist/mcp/tools/search/find-by-name.tool.js +57 -0
- package/dist/mcp/tools/search/find-by-name.tool.js.map +1 -0
- package/dist/mcp/tools/search/find-relevant.tool.d.ts +9 -0
- package/dist/mcp/tools/search/find-relevant.tool.d.ts.map +1 -0
- package/dist/mcp/tools/search/find-relevant.tool.js +71 -0
- package/dist/mcp/tools/search/find-relevant.tool.js.map +1 -0
- package/dist/mcp/tools/search/scan.tool.d.ts +8 -0
- package/dist/mcp/tools/search/scan.tool.d.ts.map +1 -0
- package/dist/mcp/tools/search/scan.tool.js +103 -0
- package/dist/mcp/tools/search/scan.tool.js.map +1 -0
- package/dist/mcp/tools/search/search-elements.tool.d.ts +11 -0
- package/dist/mcp/tools/search/search-elements.tool.d.ts.map +1 -0
- package/dist/mcp/tools/search/search-elements.tool.js +71 -0
- package/dist/mcp/tools/search/search-elements.tool.js.map +1 -0
- package/dist/mcp/tools/search/search-in-files.tool.d.ts +14 -0
- package/dist/mcp/tools/search/search-in-files.tool.d.ts.map +1 -0
- package/dist/mcp/tools/search/search-in-files.tool.js +204 -0
- package/dist/mcp/tools/search/search-in-files.tool.js.map +1 -0
- package/dist/mcp/tools/search/search.tool.d.ts +25 -0
- package/dist/mcp/tools/search/search.tool.d.ts.map +1 -0
- package/dist/mcp/tools/search/search.tool.js +109 -0
- package/dist/mcp/tools/search/search.tool.js.map +1 -0
- package/dist/mcp/tools/session/audit.tool.d.ts +6 -0
- package/dist/mcp/tools/session/audit.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/audit.tool.js +64 -0
- package/dist/mcp/tools/session/audit.tool.js.map +1 -0
- package/dist/mcp/tools/session/close.tool.d.ts +11 -0
- package/dist/mcp/tools/session/close.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/close.tool.js +79 -0
- package/dist/mcp/tools/session/close.tool.js.map +1 -0
- package/dist/mcp/tools/session/execute-shell.tool.d.ts +11 -0
- package/dist/mcp/tools/session/execute-shell.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/execute-shell.tool.js +87 -0
- package/dist/mcp/tools/session/execute-shell.tool.js.map +1 -0
- package/dist/mcp/tools/session/help.tool.d.ts +8 -0
- package/dist/mcp/tools/session/help.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/help.tool.js +84 -0
- package/dist/mcp/tools/session/help.tool.js.map +1 -0
- package/dist/mcp/tools/session/list.tool.d.ts +9 -0
- package/dist/mcp/tools/session/list.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/list.tool.js +49 -0
- package/dist/mcp/tools/session/list.tool.js.map +1 -0
- package/dist/mcp/tools/session/next-session.tool.d.ts +8 -0
- package/dist/mcp/tools/session/next-session.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/next-session.tool.js +87 -0
- package/dist/mcp/tools/session/next-session.tool.js.map +1 -0
- package/dist/mcp/tools/session/orient.tool.d.ts +11 -0
- package/dist/mcp/tools/session/orient.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/orient.tool.js +239 -0
- package/dist/mcp/tools/session/orient.tool.js.map +1 -0
- package/dist/mcp/tools/session/read.tool.d.ts +8 -0
- package/dist/mcp/tools/session/read.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/read.tool.js +63 -0
- package/dist/mcp/tools/session/read.tool.js.map +1 -0
- package/dist/mcp/tools/session/reindex.tool.d.ts +6 -0
- package/dist/mcp/tools/session/reindex.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/reindex.tool.js +59 -0
- package/dist/mcp/tools/session/reindex.tool.js.map +1 -0
- package/dist/mcp/tools/session/start.tool.d.ts +8 -0
- package/dist/mcp/tools/session/start.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/start.tool.js +170 -0
- package/dist/mcp/tools/session/start.tool.js.map +1 -0
- package/dist/mcp/tools/session/stats.tool.d.ts +6 -0
- package/dist/mcp/tools/session/stats.tool.d.ts.map +1 -0
- package/dist/mcp/tools/session/stats.tool.js +46 -0
- package/dist/mcp/tools/session/stats.tool.js.map +1 -0
- package/dist/plugins/parser-typescript/index.d.ts +80 -0
- package/dist/plugins/parser-typescript/index.d.ts.map +1 -0
- package/dist/plugins/parser-typescript/index.js +467 -0
- package/dist/plugins/parser-typescript/index.js.map +1 -0
- package/dist/plugins/parser-vue/index.d.ts +20 -0
- package/dist/plugins/parser-vue/index.d.ts.map +1 -0
- package/dist/plugins/parser-vue/index.js +88 -0
- package/dist/plugins/parser-vue/index.js.map +1 -0
- package/dist/plugins/parser-vue/script-parser.d.ts +18 -0
- package/dist/plugins/parser-vue/script-parser.d.ts.map +1 -0
- package/dist/plugins/parser-vue/script-parser.js +100 -0
- package/dist/plugins/parser-vue/script-parser.js.map +1 -0
- package/dist/plugins/parser-vue/template-parser.d.ts +14 -0
- package/dist/plugins/parser-vue/template-parser.d.ts.map +1 -0
- package/dist/plugins/parser-vue/template-parser.js +95 -0
- package/dist/plugins/parser-vue/template-parser.js.map +1 -0
- package/dist/query/SymbolSearch.d.ts +56 -0
- package/dist/query/SymbolSearch.d.ts.map +1 -0
- package/dist/query/SymbolSearch.js +132 -0
- package/dist/query/SymbolSearch.js.map +1 -0
- package/dist/query/TextSearch.d.ts +47 -0
- package/dist/query/TextSearch.d.ts.map +1 -0
- package/dist/query/TextSearch.js +110 -0
- package/dist/query/TextSearch.js.map +1 -0
- package/dist/storage/NodeFsProvider.d.ts +148 -0
- package/dist/storage/NodeFsProvider.d.ts.map +1 -0
- package/dist/storage/NodeFsProvider.js +264 -0
- package/dist/storage/NodeFsProvider.js.map +1 -0
- package/dist/types/annotation.d.ts +79 -0
- package/dist/types/annotation.d.ts.map +1 -0
- package/dist/types/annotation.js +10 -0
- package/dist/types/annotation.js.map +1 -0
- package/dist/types/assist.d.ts +147 -0
- package/dist/types/assist.d.ts.map +1 -0
- package/dist/types/assist.js +12 -0
- package/dist/types/assist.js.map +1 -0
- package/dist/types/contracts/FileSystemProvider.d.ts +24 -0
- package/dist/types/contracts/FileSystemProvider.d.ts.map +1 -0
- package/dist/types/contracts/FileSystemProvider.js +9 -0
- package/dist/types/contracts/FileSystemProvider.js.map +1 -0
- package/dist/types/contracts/LanguageParser.d.ts +146 -0
- package/dist/types/contracts/LanguageParser.d.ts.map +1 -0
- package/dist/types/contracts/LanguageParser.js +43 -0
- package/dist/types/contracts/LanguageParser.js.map +1 -0
- package/dist/types/contracts/Plugin.d.ts +226 -0
- package/dist/types/contracts/Plugin.d.ts.map +1 -0
- package/dist/types/contracts/Plugin.js +21 -0
- package/dist/types/contracts/Plugin.js.map +1 -0
- package/dist/types/contracts/index.d.ts +10 -0
- package/dist/types/contracts/index.d.ts.map +1 -0
- package/dist/types/contracts/index.js +26 -0
- package/dist/types/contracts/index.js.map +1 -0
- package/dist/types/core.d.ts +170 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +10 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/events.d.ts +29 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +18 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/experience.d.ts +153 -0
- package/dist/types/experience.d.ts.map +1 -0
- package/dist/types/experience.js +9 -0
- package/dist/types/experience.js.map +1 -0
- package/dist/types/graph.d.ts +35 -0
- package/dist/types/graph.d.ts.map +1 -0
- package/dist/types/graph.js +8 -0
- package/dist/types/graph.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +33 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/label.d.ts +150 -0
- package/dist/types/label.d.ts.map +1 -0
- package/dist/types/label.js +9 -0
- package/dist/types/label.js.map +1 -0
- package/dist/types/query.d.ts +104 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +11 -0
- package/dist/types/query.js.map +1 -0
- package/dist/types/response.d.ts +133 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +60 -0
- package/dist/types/response.js.map +1 -0
- package/dist/types/target.d.ts +68 -0
- package/dist/types/target.d.ts.map +1 -0
- package/dist/types/target.js +11 -0
- package/dist/types/target.js.map +1 -0
- package/dist/utils/version.d.ts +9 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +30 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PatternAggregator - Analyzes experience data to extract scoring patterns.
|
|
4
|
+
*
|
|
5
|
+
* Reads from ExperienceStore and provides:
|
|
6
|
+
* - Query pattern matching (which queries led to which files)
|
|
7
|
+
* - Usage metadata matching (curated usage phrases)
|
|
8
|
+
* - Anti-result penalties (learn from mistakes)
|
|
9
|
+
* - File experience metrics (success rate, recency, heat)
|
|
10
|
+
* - Symbol experience metrics (edit history, keywords)
|
|
11
|
+
*
|
|
12
|
+
* This is the intelligence layer that powers AssistMap's experience scoring.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const aggregator = new PatternAggregator(experienceStore);
|
|
17
|
+
*
|
|
18
|
+
* // Get query pattern matches
|
|
19
|
+
* const matches = await aggregator.getQueryPatternMatches('file.ts', 'make cards draggable');
|
|
20
|
+
* // → Returns matching queries + confidence score
|
|
21
|
+
*
|
|
22
|
+
* // Get usage metadata matches
|
|
23
|
+
* const usageMatches = await aggregator.getUsageMatches('make cards draggable');
|
|
24
|
+
* // → Returns files with matching usage phrases
|
|
25
|
+
*
|
|
26
|
+
* // Get anti-result penalty
|
|
27
|
+
* const penalty = await aggregator.getAntiResultPenalty('file.ts', 'drag drop');
|
|
28
|
+
* // → Returns negative score if this file was previously rejected
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.PatternAggregator = void 0;
|
|
33
|
+
class PatternAggregator {
|
|
34
|
+
store;
|
|
35
|
+
constructor(store) {
|
|
36
|
+
this.store = store;
|
|
37
|
+
}
|
|
38
|
+
// ── Query Pattern Matching ─────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Get query pattern matches for a file.
|
|
41
|
+
*
|
|
42
|
+
* Finds successful queries from journey history that led to this file.
|
|
43
|
+
*
|
|
44
|
+
* @param filePath - Target file path
|
|
45
|
+
* @param currentQuery - Current query to compare against
|
|
46
|
+
* @returns Query pattern match result
|
|
47
|
+
*/
|
|
48
|
+
async getQueryPatternMatches(filePath, currentQuery) {
|
|
49
|
+
// Get journeys that ended with this file
|
|
50
|
+
const journeys = await this.store.getJourneysForFile(filePath);
|
|
51
|
+
if (journeys.length === 0) {
|
|
52
|
+
return {
|
|
53
|
+
file: filePath,
|
|
54
|
+
matchingQueries: [],
|
|
55
|
+
score: 0
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// Extract queries that led to this file
|
|
59
|
+
const matchingQueries = [];
|
|
60
|
+
const currentKeywords = this.extractKeywords(currentQuery);
|
|
61
|
+
for (const journey of journeys) {
|
|
62
|
+
for (const step of journey.searchPath) {
|
|
63
|
+
// Check if this step's query is similar to current query
|
|
64
|
+
const stepKeywords = this.extractKeywords(step.query);
|
|
65
|
+
const overlap = this.calculateKeywordOverlap(currentKeywords, stepKeywords);
|
|
66
|
+
if (overlap >= 0.5) { // 50% keyword overlap threshold
|
|
67
|
+
matchingQueries.push({
|
|
68
|
+
query: step.query,
|
|
69
|
+
timestamp: step.timestamp
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Calculate confidence score
|
|
75
|
+
const score = Math.min(matchingQueries.length / 5, 1.0); // Cap at 5 matches
|
|
76
|
+
return {
|
|
77
|
+
file: filePath,
|
|
78
|
+
matchingQueries,
|
|
79
|
+
score
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// ── Usage Metadata Matching ────────────────────────────────────────────────
|
|
83
|
+
/**
|
|
84
|
+
* Get usage metadata matches for a query.
|
|
85
|
+
*
|
|
86
|
+
* Finds files with usage phrases matching the query.
|
|
87
|
+
*
|
|
88
|
+
* @param query - Search query
|
|
89
|
+
* @returns Array of usage matches
|
|
90
|
+
*/
|
|
91
|
+
async getUsageMatches(query) {
|
|
92
|
+
const allMetadata = await this.store.getAllUsageMetadata();
|
|
93
|
+
const matches = [];
|
|
94
|
+
const queryKeywords = this.extractKeywords(query);
|
|
95
|
+
for (const metadata of allMetadata) {
|
|
96
|
+
const matchingUsages = [];
|
|
97
|
+
for (const usage of metadata.usages) {
|
|
98
|
+
const usageKeywords = this.extractKeywords(usage);
|
|
99
|
+
const overlap = this.calculateKeywordOverlap(queryKeywords, usageKeywords);
|
|
100
|
+
if (overlap >= 0.4) { // 40% threshold for usage matches
|
|
101
|
+
matchingUsages.push(usage);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (matchingUsages.length > 0) {
|
|
105
|
+
matches.push({
|
|
106
|
+
file: metadata.target,
|
|
107
|
+
matchingUsages,
|
|
108
|
+
score: Math.min(matchingUsages.length / 3, 1.0) // Cap at 3 matches
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return matches;
|
|
113
|
+
}
|
|
114
|
+
// ── Anti-Result Penalties ──────────────────────────────────────────────────
|
|
115
|
+
/**
|
|
116
|
+
* Get anti-result penalty for a file.
|
|
117
|
+
*
|
|
118
|
+
* Returns negative score if this file was previously shown but rejected
|
|
119
|
+
* or abandoned for similar queries.
|
|
120
|
+
*
|
|
121
|
+
* @param filePath - File path
|
|
122
|
+
* @param currentQuery - Current query
|
|
123
|
+
* @returns Anti-result penalty
|
|
124
|
+
*/
|
|
125
|
+
async getAntiResultPenalty(filePath, currentQuery) {
|
|
126
|
+
const antiResults = await this.store.getAntiResults(filePath);
|
|
127
|
+
if (antiResults.length === 0) {
|
|
128
|
+
return {
|
|
129
|
+
file: filePath,
|
|
130
|
+
penalty: 0,
|
|
131
|
+
reason: 'no_anti_results'
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
let penalty = 0;
|
|
135
|
+
const queryKeywords = this.extractKeywords(currentQuery);
|
|
136
|
+
for (const anti of antiResults) {
|
|
137
|
+
const antiKeywords = this.extractKeywords(anti.query);
|
|
138
|
+
const overlap = this.calculateKeywordOverlap(queryKeywords, antiKeywords);
|
|
139
|
+
if (overlap >= 0.5) { // 50% overlap with failed query
|
|
140
|
+
const basePenalty = anti.reason === 'read_but_abandoned' ? -3 : -1;
|
|
141
|
+
penalty += basePenalty;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Cap penalty at -10
|
|
145
|
+
penalty = Math.max(penalty, -10);
|
|
146
|
+
return {
|
|
147
|
+
file: filePath,
|
|
148
|
+
penalty,
|
|
149
|
+
reason: penalty < 0 ? 'similar_to_failed_queries' : 'no_relevant_anti_results'
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// ── File Experience Metrics ────────────────────────────────────────────────
|
|
153
|
+
/**
|
|
154
|
+
* Get experience metrics for a file.
|
|
155
|
+
*
|
|
156
|
+
* @param filePath - File path
|
|
157
|
+
* @returns File experience metrics
|
|
158
|
+
*/
|
|
159
|
+
async getFileMetrics(filePath) {
|
|
160
|
+
const events = await this.getEventsForFile(filePath);
|
|
161
|
+
if (events.length === 0) {
|
|
162
|
+
return {
|
|
163
|
+
successRate: 0,
|
|
164
|
+
totalOps: 0,
|
|
165
|
+
successfulOps: 0,
|
|
166
|
+
heatScore: 0
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const successfulOps = events.filter(e => e.outcome === 'success').length;
|
|
170
|
+
const successRate = successfulOps / events.length;
|
|
171
|
+
// Find most recent event
|
|
172
|
+
const sortedEvents = events.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
173
|
+
const lastAccessed = sortedEvents[0]?.timestamp;
|
|
174
|
+
// Calculate days since last access
|
|
175
|
+
const daysSinceAccess = lastAccessed
|
|
176
|
+
? (Date.now() - new Date(lastAccessed).getTime()) / (1000 * 60 * 60 * 24)
|
|
177
|
+
: undefined;
|
|
178
|
+
// Calculate heat score (decays over time)
|
|
179
|
+
const heatScore = this.calculateHeatScore(events);
|
|
180
|
+
return {
|
|
181
|
+
successRate,
|
|
182
|
+
totalOps: events.length,
|
|
183
|
+
successfulOps,
|
|
184
|
+
lastAccessed,
|
|
185
|
+
daysSinceAccess,
|
|
186
|
+
heatScore
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// ── Symbol Experience Metrics ──────────────────────────────────────────────
|
|
190
|
+
/**
|
|
191
|
+
* Get symbol experience metrics for a file.
|
|
192
|
+
*
|
|
193
|
+
* @param filePath - File path
|
|
194
|
+
* @returns Array of symbol metrics
|
|
195
|
+
*/
|
|
196
|
+
async getSymbolMetrics(filePath) {
|
|
197
|
+
const events = await this.getEventsForFile(filePath);
|
|
198
|
+
const symbolMap = new Map();
|
|
199
|
+
for (const event of events) {
|
|
200
|
+
if (event.symbolMetadata) {
|
|
201
|
+
const { symbolRef } = event.symbolMetadata;
|
|
202
|
+
const existing = symbolMap.get(symbolRef) || { editCount: 0, successes: 0 };
|
|
203
|
+
existing.editCount++;
|
|
204
|
+
if (event.outcome === 'success') {
|
|
205
|
+
existing.successes++;
|
|
206
|
+
}
|
|
207
|
+
symbolMap.set(symbolRef, existing);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const metrics = [];
|
|
211
|
+
for (const [symbolRef, stats] of symbolMap.entries()) {
|
|
212
|
+
// Extract domain keywords from symbolRef
|
|
213
|
+
// e.g., "src/renderer/components/TaskCard.vue$handleDragStart"
|
|
214
|
+
const domainKeywords = this.extractDomainKeywords(symbolRef);
|
|
215
|
+
metrics.push({
|
|
216
|
+
symbolRef,
|
|
217
|
+
editCount: stats.editCount,
|
|
218
|
+
successRate: stats.successes / stats.editCount,
|
|
219
|
+
domainKeywords
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return metrics;
|
|
223
|
+
}
|
|
224
|
+
// ── Utilities ──────────────────────────────────────────────────────────────
|
|
225
|
+
/**
|
|
226
|
+
* Get all events for a specific file.
|
|
227
|
+
*
|
|
228
|
+
* @param filePath - File path
|
|
229
|
+
* @returns Array of events
|
|
230
|
+
*/
|
|
231
|
+
async getEventsForFile(filePath) {
|
|
232
|
+
// Get current session events
|
|
233
|
+
const events = await this.store.getCurrentSessionEvents();
|
|
234
|
+
// Filter to this file
|
|
235
|
+
return events.filter(e => e.target === filePath);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Extract keywords from a query string.
|
|
239
|
+
*
|
|
240
|
+
* @param text - Query text
|
|
241
|
+
* @returns Array of keywords
|
|
242
|
+
*/
|
|
243
|
+
extractKeywords(text) {
|
|
244
|
+
// Convert to lowercase, split on non-alphanumeric
|
|
245
|
+
const words = text.toLowerCase().split(/[^a-z0-9]+/);
|
|
246
|
+
// Filter out stop words and short words
|
|
247
|
+
const stopWords = new Set(['a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'to', 'of', 'in', 'on', 'at']);
|
|
248
|
+
return words
|
|
249
|
+
.filter(w => w.length > 2 && !stopWords.has(w))
|
|
250
|
+
.filter((w, i, arr) => arr.indexOf(w) === i); // Deduplicate
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Calculate keyword overlap between two keyword sets.
|
|
254
|
+
*
|
|
255
|
+
* @param keywords1 - First set
|
|
256
|
+
* @param keywords2 - Second set
|
|
257
|
+
* @returns Overlap ratio (0-1)
|
|
258
|
+
*/
|
|
259
|
+
calculateKeywordOverlap(keywords1, keywords2) {
|
|
260
|
+
if (keywords1.length === 0 || keywords2.length === 0) {
|
|
261
|
+
return 0;
|
|
262
|
+
}
|
|
263
|
+
const set1 = new Set(keywords1);
|
|
264
|
+
const set2 = new Set(keywords2);
|
|
265
|
+
let overlap = 0;
|
|
266
|
+
for (const keyword of set1) {
|
|
267
|
+
if (set2.has(keyword)) {
|
|
268
|
+
overlap++;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return overlap / Math.max(keywords1.length, keywords2.length);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Calculate heat score based on recent activity.
|
|
275
|
+
*
|
|
276
|
+
* @param events - Events for a file
|
|
277
|
+
* @returns Heat score (0-1)
|
|
278
|
+
*/
|
|
279
|
+
calculateHeatScore(events) {
|
|
280
|
+
if (events.length === 0)
|
|
281
|
+
return 0;
|
|
282
|
+
const now = Date.now();
|
|
283
|
+
const sevenDaysAgo = now - (7 * 24 * 60 * 60 * 1000);
|
|
284
|
+
// Count events in last 7 days
|
|
285
|
+
const recentEvents = events.filter((e) => new Date(e.timestamp).getTime() > sevenDaysAgo);
|
|
286
|
+
// Heat score: 0.1 per recent event, capped at 1.0
|
|
287
|
+
return Math.min(recentEvents.length * 0.1, 1.0);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Extract domain keywords from a symbol reference.
|
|
291
|
+
*
|
|
292
|
+
* @param symbolRef - Symbol reference (e.g., "src/renderer/components/TaskCard.vue$handleDragStart")
|
|
293
|
+
* @returns Array of domain keywords
|
|
294
|
+
*/
|
|
295
|
+
extractDomainKeywords(symbolRef) {
|
|
296
|
+
// Split on $ to separate path from symbol name
|
|
297
|
+
const [path, symbolName] = symbolRef.split('$');
|
|
298
|
+
// Split path on slashes and dots to extract meaningful parts
|
|
299
|
+
const parts = [...path.split('/'), ...(symbolName ? [symbolName] : [])];
|
|
300
|
+
// Extract camelCase/PascalCase words
|
|
301
|
+
const keywords = [];
|
|
302
|
+
for (const part of parts) {
|
|
303
|
+
// Split camelCase: handleDragStart → [handle, drag, start]
|
|
304
|
+
const camelWords = part.replace(/([A-Z])/g, ' $1').trim().split(/\s+/);
|
|
305
|
+
keywords.push(...camelWords.map(w => w.toLowerCase()));
|
|
306
|
+
}
|
|
307
|
+
return keywords.filter(k => k.length > 2);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.PatternAggregator = PatternAggregator;
|
|
311
|
+
//# sourceMappingURL=PatternAggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternAggregator.js","sourceRoot":"","sources":["../../src/assist/PatternAggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RelevanceScorer — Search-engine-quality file ranking.
|
|
3
|
+
*
|
|
4
|
+
* Deep-dives every file to score relevance based on multiple factors:
|
|
5
|
+
* - Domain annotations (@codemap.domain.*)
|
|
6
|
+
* - Usage metadata (@codemap.meta.usage, keywords)
|
|
7
|
+
* - Core annotations (policy, systempolicy, note, warning)
|
|
8
|
+
* - Symbol names (functions, classes, exports)
|
|
9
|
+
* - File path keywords
|
|
10
|
+
* - Word matching with frequency weighting
|
|
11
|
+
*
|
|
12
|
+
* Best-ranked files bubble to the top like a real search engine.
|
|
13
|
+
*/
|
|
14
|
+
import type { FileEntry } from '../types';
|
|
15
|
+
/**
|
|
16
|
+
* Scored file result.
|
|
17
|
+
*/
|
|
18
|
+
export interface ScoredFile {
|
|
19
|
+
file: FileEntry;
|
|
20
|
+
score: number;
|
|
21
|
+
breakdown: ScoreBreakdown;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Score breakdown for debugging.
|
|
25
|
+
*/
|
|
26
|
+
export interface ScoreBreakdown {
|
|
27
|
+
domainScore: number;
|
|
28
|
+
usageScore: number;
|
|
29
|
+
policyScore: number;
|
|
30
|
+
symbolScore: number;
|
|
31
|
+
pathScore: number;
|
|
32
|
+
wordMatchScore: number;
|
|
33
|
+
totalMatches: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Scoring weights (tunable).
|
|
37
|
+
*/
|
|
38
|
+
export interface ScoringWeights {
|
|
39
|
+
domain: number;
|
|
40
|
+
usage: number;
|
|
41
|
+
policy: number;
|
|
42
|
+
symbol: number;
|
|
43
|
+
path: number;
|
|
44
|
+
wordMatch: number;
|
|
45
|
+
}
|
|
46
|
+
export declare class RelevanceScorer {
|
|
47
|
+
private weights;
|
|
48
|
+
private queryTokens;
|
|
49
|
+
constructor(weights?: ScoringWeights);
|
|
50
|
+
/**
|
|
51
|
+
* Score all files for a given goal/query.
|
|
52
|
+
*
|
|
53
|
+
* @param files - All files to score
|
|
54
|
+
* @param goal - User's goal/query
|
|
55
|
+
* @param topN - Number of top results to return
|
|
56
|
+
* @returns Top N scored files
|
|
57
|
+
*/
|
|
58
|
+
scoreFiles(files: FileEntry[], goal: string, topN?: number): ScoredFile[];
|
|
59
|
+
/**
|
|
60
|
+
* Score a single file.
|
|
61
|
+
*/
|
|
62
|
+
private scoreFile;
|
|
63
|
+
/**
|
|
64
|
+
* Score domain annotations.
|
|
65
|
+
* Domain is the STRONGEST signal — explicit project vocabulary.
|
|
66
|
+
*/
|
|
67
|
+
private scoreDomains;
|
|
68
|
+
/**
|
|
69
|
+
* Score usage metadata.
|
|
70
|
+
* Usage is explicit — tells us WHEN to use this file.
|
|
71
|
+
*/
|
|
72
|
+
private scoreUsage;
|
|
73
|
+
/**
|
|
74
|
+
* Score policy annotations.
|
|
75
|
+
* Policies contain architectural keywords and constraints.
|
|
76
|
+
*/
|
|
77
|
+
private scorePolicies;
|
|
78
|
+
/**
|
|
79
|
+
* Score symbol names.
|
|
80
|
+
* Function/class names are strong intent signals.
|
|
81
|
+
*/
|
|
82
|
+
private scoreSymbols;
|
|
83
|
+
/**
|
|
84
|
+
* Score file path keywords.
|
|
85
|
+
* Path structure reveals intent (e.g., src/auth/login.ts).
|
|
86
|
+
*/
|
|
87
|
+
private scorePath;
|
|
88
|
+
/**
|
|
89
|
+
* Generic word matching across all text.
|
|
90
|
+
* Weakest signal but catches everything else.
|
|
91
|
+
*/
|
|
92
|
+
private scoreWordMatch;
|
|
93
|
+
/**
|
|
94
|
+
* Count how many query tokens appear in target tokens.
|
|
95
|
+
* Uses TF-like weighting — more occurrences = higher score.
|
|
96
|
+
*/
|
|
97
|
+
private countMatches;
|
|
98
|
+
/**
|
|
99
|
+
* Tokenize text into words.
|
|
100
|
+
* Handles camelCase, PascalCase, snake_case, kebab-case.
|
|
101
|
+
*/
|
|
102
|
+
private tokenize;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=RelevanceScorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelevanceScorer.d.ts","sourceRoot":"","sources":["../../src/assist/RelevanceScorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,qBAAa,eAAe;IAE1B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAW;gBAElB,OAAO,GAAE,cAAgC;IAKrD;;;;;;;OAOG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,UAAU,EAAE;IAc7E;;OAEG;IACH,OAAO,CAAC,SAAS;IAyCjB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAyBpB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAuBlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAmBrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAyBpB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA0BtB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwBpB;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAQjB"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RelevanceScorer — Search-engine-quality file ranking.
|
|
4
|
+
*
|
|
5
|
+
* Deep-dives every file to score relevance based on multiple factors:
|
|
6
|
+
* - Domain annotations (@codemap.domain.*)
|
|
7
|
+
* - Usage metadata (@codemap.meta.usage, keywords)
|
|
8
|
+
* - Core annotations (policy, systempolicy, note, warning)
|
|
9
|
+
* - Symbol names (functions, classes, exports)
|
|
10
|
+
* - File path keywords
|
|
11
|
+
* - Word matching with frequency weighting
|
|
12
|
+
*
|
|
13
|
+
* Best-ranked files bubble to the top like a real search engine.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.RelevanceScorer = void 0;
|
|
17
|
+
const DEFAULT_WEIGHTS = {
|
|
18
|
+
domain: 10.0, // Highest weight — domain is THE relevance signal
|
|
19
|
+
usage: 8.0, // Usage metadata is explicit intent
|
|
20
|
+
policy: 5.0, // Policies contain architectural keywords
|
|
21
|
+
symbol: 4.0, // Symbol names are strong signals
|
|
22
|
+
path: 3.0, // Path keywords are moderate signals
|
|
23
|
+
wordMatch: 1.0, // Base word matching
|
|
24
|
+
};
|
|
25
|
+
class RelevanceScorer {
|
|
26
|
+
weights;
|
|
27
|
+
queryTokens;
|
|
28
|
+
constructor(weights = DEFAULT_WEIGHTS) {
|
|
29
|
+
this.weights = weights;
|
|
30
|
+
this.queryTokens = [];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Score all files for a given goal/query.
|
|
34
|
+
*
|
|
35
|
+
* @param files - All files to score
|
|
36
|
+
* @param goal - User's goal/query
|
|
37
|
+
* @param topN - Number of top results to return
|
|
38
|
+
* @returns Top N scored files
|
|
39
|
+
*/
|
|
40
|
+
scoreFiles(files, goal, topN = 10) {
|
|
41
|
+
// Tokenize query
|
|
42
|
+
this.queryTokens = this.tokenize(goal);
|
|
43
|
+
// Score all files
|
|
44
|
+
const scored = files.map(file => this.scoreFile(file));
|
|
45
|
+
// Sort by score descending
|
|
46
|
+
scored.sort((a, b) => b.score - a.score);
|
|
47
|
+
// Return top N
|
|
48
|
+
return scored.slice(0, topN);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Score a single file.
|
|
52
|
+
*/
|
|
53
|
+
scoreFile(file) {
|
|
54
|
+
const breakdown = {
|
|
55
|
+
domainScore: 0,
|
|
56
|
+
usageScore: 0,
|
|
57
|
+
policyScore: 0,
|
|
58
|
+
symbolScore: 0,
|
|
59
|
+
pathScore: 0,
|
|
60
|
+
wordMatchScore: 0,
|
|
61
|
+
totalMatches: 0,
|
|
62
|
+
};
|
|
63
|
+
// 1. Domain annotations (@codemap.domain.*)
|
|
64
|
+
breakdown.domainScore = this.scoreDomains(file);
|
|
65
|
+
// 2. Usage metadata (@codemap.meta.usage, keywords)
|
|
66
|
+
breakdown.usageScore = this.scoreUsage(file);
|
|
67
|
+
// 3. Policy annotations
|
|
68
|
+
breakdown.policyScore = this.scorePolicies(file);
|
|
69
|
+
// 4. Symbol names
|
|
70
|
+
breakdown.symbolScore = this.scoreSymbols(file);
|
|
71
|
+
// 5. File path keywords
|
|
72
|
+
breakdown.pathScore = this.scorePath(file);
|
|
73
|
+
// 6. Generic word matching
|
|
74
|
+
breakdown.wordMatchScore = this.scoreWordMatch(file);
|
|
75
|
+
// Calculate total score
|
|
76
|
+
const score = breakdown.domainScore * this.weights.domain +
|
|
77
|
+
breakdown.usageScore * this.weights.usage +
|
|
78
|
+
breakdown.policyScore * this.weights.policy +
|
|
79
|
+
breakdown.symbolScore * this.weights.symbol +
|
|
80
|
+
breakdown.pathScore * this.weights.path +
|
|
81
|
+
breakdown.wordMatchScore * this.weights.wordMatch;
|
|
82
|
+
return { file, score, breakdown };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Score domain annotations.
|
|
86
|
+
* Domain is the STRONGEST signal — explicit project vocabulary.
|
|
87
|
+
*/
|
|
88
|
+
scoreDomains(file) {
|
|
89
|
+
if (!file.categorizedAnnotations)
|
|
90
|
+
return 0;
|
|
91
|
+
const domainAnnotations = file.categorizedAnnotations.filter(ann => ann.category === 'domain');
|
|
92
|
+
if (domainAnnotations.length === 0)
|
|
93
|
+
return 0;
|
|
94
|
+
let score = 0;
|
|
95
|
+
for (const ann of domainAnnotations) {
|
|
96
|
+
// Check if annotation value matches query tokens
|
|
97
|
+
const annTokens = this.tokenize(ann.value);
|
|
98
|
+
const matches = this.countMatches(this.queryTokens, annTokens);
|
|
99
|
+
score += matches;
|
|
100
|
+
// Bonus for path matches (e.g., domain.medical.diagnosis)
|
|
101
|
+
const pathTokens = this.tokenize(ann.path);
|
|
102
|
+
const pathMatches = this.countMatches(this.queryTokens, pathTokens);
|
|
103
|
+
score += pathMatches * 0.5;
|
|
104
|
+
}
|
|
105
|
+
return score;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Score usage metadata.
|
|
109
|
+
* Usage is explicit — tells us WHEN to use this file.
|
|
110
|
+
*/
|
|
111
|
+
scoreUsage(file) {
|
|
112
|
+
if (!file.categorizedAnnotations)
|
|
113
|
+
return 0;
|
|
114
|
+
const usageAnnotations = file.categorizedAnnotations.filter(ann => ann.category === 'meta' && (ann.path.includes('usage') ||
|
|
115
|
+
ann.path.includes('keyword') ||
|
|
116
|
+
ann.path.includes('tag')));
|
|
117
|
+
if (usageAnnotations.length === 0)
|
|
118
|
+
return 0;
|
|
119
|
+
let score = 0;
|
|
120
|
+
for (const ann of usageAnnotations) {
|
|
121
|
+
const annTokens = this.tokenize(ann.value);
|
|
122
|
+
const matches = this.countMatches(this.queryTokens, annTokens);
|
|
123
|
+
score += matches * 1.5; // Boost usage matches
|
|
124
|
+
}
|
|
125
|
+
return score;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Score policy annotations.
|
|
129
|
+
* Policies contain architectural keywords and constraints.
|
|
130
|
+
*/
|
|
131
|
+
scorePolicies(file) {
|
|
132
|
+
if (!file.annotations)
|
|
133
|
+
return 0;
|
|
134
|
+
const policyAnnotations = file.annotations.filter(ann => ann.type === 'policy' || ann.type === 'systempolicy');
|
|
135
|
+
if (policyAnnotations.length === 0)
|
|
136
|
+
return 0;
|
|
137
|
+
let score = 0;
|
|
138
|
+
for (const ann of policyAnnotations) {
|
|
139
|
+
const annTokens = this.tokenize(ann.message);
|
|
140
|
+
const matches = this.countMatches(this.queryTokens, annTokens);
|
|
141
|
+
score += matches * 0.8; // Policy matches are good but not strongest
|
|
142
|
+
}
|
|
143
|
+
return score;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Score symbol names.
|
|
147
|
+
* Function/class names are strong intent signals.
|
|
148
|
+
*/
|
|
149
|
+
scoreSymbols(file) {
|
|
150
|
+
if (!file.symbols || file.symbols.length === 0)
|
|
151
|
+
return 0;
|
|
152
|
+
let score = 0;
|
|
153
|
+
for (const symbol of file.symbols) {
|
|
154
|
+
// Check symbol name
|
|
155
|
+
const nameTokens = this.tokenize(symbol.name);
|
|
156
|
+
const nameMatches = this.countMatches(this.queryTokens, nameTokens);
|
|
157
|
+
score += nameMatches;
|
|
158
|
+
// Bonus for exported symbols (public API)
|
|
159
|
+
if (symbol.exported) {
|
|
160
|
+
score += nameMatches * 0.3;
|
|
161
|
+
}
|
|
162
|
+
// Check symbol kind matches
|
|
163
|
+
const kindMatch = this.queryTokens.some(t => symbol.kind.toLowerCase().includes(t.toLowerCase()));
|
|
164
|
+
if (kindMatch)
|
|
165
|
+
score += 0.5;
|
|
166
|
+
}
|
|
167
|
+
return score;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Score file path keywords.
|
|
171
|
+
* Path structure reveals intent (e.g., src/auth/login.ts).
|
|
172
|
+
*/
|
|
173
|
+
scorePath(file) {
|
|
174
|
+
const pathParts = file.relativePath.split(/[\/\\]/);
|
|
175
|
+
const pathTokens = pathParts.flatMap(part => this.tokenize(part));
|
|
176
|
+
const matches = this.countMatches(this.queryTokens, pathTokens);
|
|
177
|
+
return matches;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Generic word matching across all text.
|
|
181
|
+
* Weakest signal but catches everything else.
|
|
182
|
+
*/
|
|
183
|
+
scoreWordMatch(file) {
|
|
184
|
+
// Collect all text from file
|
|
185
|
+
const allText = [];
|
|
186
|
+
// Add relative path
|
|
187
|
+
allText.push(file.relativePath);
|
|
188
|
+
// Add all annotation text
|
|
189
|
+
if (file.annotations) {
|
|
190
|
+
allText.push(...file.annotations.map(a => a.message));
|
|
191
|
+
}
|
|
192
|
+
if (file.categorizedAnnotations) {
|
|
193
|
+
allText.push(...file.categorizedAnnotations.map(a => `${a.path} ${a.value}`));
|
|
194
|
+
}
|
|
195
|
+
// Add all symbol names
|
|
196
|
+
if (file.symbols) {
|
|
197
|
+
allText.push(...file.symbols.map(s => s.name));
|
|
198
|
+
}
|
|
199
|
+
// Tokenize and count matches
|
|
200
|
+
const allTokens = allText.flatMap(text => this.tokenize(text));
|
|
201
|
+
return this.countMatches(this.queryTokens, allTokens);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Count how many query tokens appear in target tokens.
|
|
205
|
+
* Uses TF-like weighting — more occurrences = higher score.
|
|
206
|
+
*/
|
|
207
|
+
countMatches(queryTokens, targetTokens) {
|
|
208
|
+
const targetSet = new Map();
|
|
209
|
+
// Count frequency of each token in target
|
|
210
|
+
for (const token of targetTokens) {
|
|
211
|
+
const lower = token.toLowerCase();
|
|
212
|
+
targetSet.set(lower, (targetSet.get(lower) || 0) + 1);
|
|
213
|
+
}
|
|
214
|
+
// Sum matches with frequency weighting
|
|
215
|
+
let score = 0;
|
|
216
|
+
for (const queryToken of queryTokens) {
|
|
217
|
+
const lower = queryToken.toLowerCase();
|
|
218
|
+
const freq = targetSet.get(lower) || 0;
|
|
219
|
+
// Score: 1 for first occurrence, +0.2 for each additional
|
|
220
|
+
if (freq > 0) {
|
|
221
|
+
score += 1 + (freq - 1) * 0.2;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return score;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Tokenize text into words.
|
|
228
|
+
* Handles camelCase, PascalCase, snake_case, kebab-case.
|
|
229
|
+
*/
|
|
230
|
+
tokenize(text) {
|
|
231
|
+
return text
|
|
232
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2') // camelCase → camel Case
|
|
233
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2') // XMLParser → XML Parser
|
|
234
|
+
.split(/[\s_\-\.\/\\]+/) // Split on whitespace, _, -, ., /, \
|
|
235
|
+
.filter(t => t.length > 2) // Filter out short tokens
|
|
236
|
+
.map(t => t.toLowerCase());
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
exports.RelevanceScorer = RelevanceScorer;
|
|
240
|
+
//# sourceMappingURL=RelevanceScorer.js.map
|