claude-brain 0.30.2 → 0.30.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +241 -191
- package/VERSION +1 -1
- package/assets/CLAUDE-unified.md +11 -11
- package/assets/CLAUDE.md +29 -29
- package/package.json +7 -3
- package/packs/backend/node.json +173 -173
- package/packs/core/javascript.json +176 -176
- package/packs/core/typescript.json +222 -222
- package/packs/frontend/react.json +254 -254
- package/packs/meta/testing.json +172 -172
- package/scripts/postinstall.mjs +531 -531
- package/src/automation/decision-detector.ts +452 -452
- package/src/automation/phase12-manager.ts +456 -456
- package/src/automation/proactive-recall.ts +373 -373
- package/src/automation/project-detector.ts +310 -310
- package/src/automation/repo-scanner.ts +210 -205
- package/src/cli/auto-setup.ts +75 -75
- package/src/cli/auto-start.ts +266 -266
- package/src/cli/bin.ts +264 -264
- package/src/cli/commands/autostart.ts +90 -90
- package/src/cli/commands/chroma.ts +578 -577
- package/src/cli/commands/export-training.ts +70 -70
- package/src/cli/commands/export.ts +130 -130
- package/src/cli/commands/git-hook.ts +183 -183
- package/src/cli/commands/hooks.ts +217 -217
- package/src/cli/commands/init.ts +123 -123
- package/src/cli/commands/install-mcp.ts +122 -111
- package/src/cli/commands/models.ts +979 -979
- package/src/cli/commands/pack.ts +200 -200
- package/src/cli/commands/refresh.ts +344 -339
- package/src/cli/commands/reindex.ts +120 -120
- package/src/cli/commands/serve.ts +466 -463
- package/src/cli/commands/start.ts +44 -44
- package/src/cli/commands/status.ts +220 -203
- package/src/cli/commands/uninstall-mcp.ts +45 -41
- package/src/cli/commands/update.ts +130 -124
- package/src/cli/migrate-chroma.ts +106 -106
- package/src/cli/ui/animations.ts +80 -80
- package/src/cli/ui/components.ts +82 -82
- package/src/cli/ui/index.ts +4 -4
- package/src/cli/ui/logo.ts +36 -36
- package/src/cli/ui/theme.ts +55 -55
- package/src/code-intelligence/indexer.ts +352 -352
- package/src/code-intelligence/linker.ts +178 -178
- package/src/code-intelligence/parser.ts +484 -484
- package/src/code-intelligence/query.ts +291 -291
- package/src/code-intelligence/schema.ts +83 -83
- package/src/code-intelligence/types.ts +95 -95
- package/src/config/defaults.ts +52 -52
- package/src/config/home.ts +56 -56
- package/src/config/index.ts +5 -5
- package/src/config/loader.ts +192 -192
- package/src/config/schema.ts +446 -415
- package/src/config/validator.ts +182 -182
- package/src/context/assembler.ts +407 -400
- package/src/context/index.ts +79 -79
- package/src/context/progress-tracker.ts +174 -174
- package/src/context/standards-manager.ts +287 -287
- package/src/context/validator.ts +58 -58
- package/src/diagnostics/index.ts +122 -121
- package/src/health/index.ts +233 -232
- package/src/hooks/brain-hook.ts +134 -131
- package/src/hooks/capture.ts +168 -168
- package/src/hooks/claude-code-mastery.md +112 -112
- package/src/hooks/context-hook.ts +260 -245
- package/src/hooks/deduplicator.ts +72 -72
- package/src/hooks/git-capture.ts +109 -109
- package/src/hooks/git-hook-installer.ts +211 -207
- package/src/hooks/index.ts +20 -20
- package/src/hooks/installer.ts +306 -288
- package/src/hooks/interceptor-hook.ts +204 -201
- package/src/hooks/passive-classifier.ts +397 -397
- package/src/hooks/queue.ts +160 -129
- package/src/hooks/session-tracker.ts +312 -312
- package/src/hooks/types.ts +52 -52
- package/src/index.ts +7 -7
- package/src/intelligence/cross-project/generalizer.ts +283 -283
- package/src/intelligence/cross-project/index.ts +7 -7
- package/src/intelligence/hf-downloader.ts +222 -222
- package/src/intelligence/hf-manifest.json +78 -78
- package/src/intelligence/index.ts +24 -24
- package/src/intelligence/inference-router.ts +762 -762
- package/src/intelligence/model-manager.ts +263 -245
- package/src/intelligence/optimization/index.ts +10 -10
- package/src/intelligence/optimization/precompute.ts +202 -202
- package/src/intelligence/optimization/semantic-cache.ts +213 -207
- package/src/intelligence/prediction/index.ts +7 -7
- package/src/intelligence/prediction/recommender.ts +276 -268
- package/src/intelligence/reasoning/chain-retrieval.ts +243 -247
- package/src/intelligence/reasoning/index.ts +7 -7
- package/src/intelligence/temporal/evolution.ts +193 -197
- package/src/intelligence/temporal/index.ts +16 -16
- package/src/intelligence/temporal/query-processor.ts +190 -190
- package/src/intelligence/temporal/timeline.ts +272 -259
- package/src/intelligence/temporal/trends.ts +263 -263
- package/src/intelligence/tokenizer.ts +118 -118
- package/src/knowledge/entity-extractor.ts +447 -443
- package/src/knowledge/graph/builder.ts +185 -185
- package/src/knowledge/graph/linker.ts +201 -201
- package/src/knowledge/graph/memory-graph.ts +359 -359
- package/src/knowledge/graph/schema.ts +99 -99
- package/src/knowledge/graph/search.ts +166 -166
- package/src/knowledge/relationship-extractor.ts +108 -108
- package/src/memory/chroma/client.ts +211 -192
- package/src/memory/chroma/collection-manager.ts +92 -92
- package/src/memory/chroma/config.ts +57 -57
- package/src/memory/chroma/embeddings.ts +177 -175
- package/src/memory/chroma/index.ts +82 -82
- package/src/memory/chroma/migration.ts +270 -270
- package/src/memory/chroma/schemas.ts +69 -69
- package/src/memory/chroma/search.ts +319 -315
- package/src/memory/chroma/store.ts +755 -747
- package/src/memory/compression.ts +121 -121
- package/src/memory/consolidation/archiver.ts +162 -165
- package/src/memory/consolidation/merger.ts +182 -186
- package/src/memory/consolidation/scorer.ts +136 -136
- package/src/memory/database.ts +9 -0
- package/src/memory/dual-write.ts +145 -0
- package/src/memory/embeddings.ts +226 -226
- package/src/memory/episodic/detector.ts +108 -108
- package/src/memory/episodic/manager.ts +347 -351
- package/src/memory/episodic/summarizer.ts +179 -179
- package/src/memory/episodic/types.ts +52 -52
- package/src/memory/fts5-search.ts +692 -633
- package/src/memory/index.ts +943 -1060
- package/src/memory/migrations/add-fts5.ts +118 -108
- package/src/memory/patterns.ts +438 -438
- package/src/memory/pruning.ts +60 -60
- package/src/memory/schema.ts +88 -88
- package/src/memory/store.ts +911 -787
- package/src/orchestrator/handlers/decision-handler.ts +204 -204
- package/src/packs/index.ts +9 -9
- package/src/packs/loader.ts +134 -134
- package/src/packs/manager.ts +204 -204
- package/src/packs/ranker.ts +78 -78
- package/src/packs/types.ts +81 -81
- package/src/phase12/index.ts +5 -5
- package/src/retrieval/bm25/index.ts +300 -297
- package/src/retrieval/bm25/tokenizer.ts +184 -184
- package/src/retrieval/feedback/adaptive.ts +221 -221
- package/src/retrieval/feedback/index.ts +16 -16
- package/src/retrieval/feedback/metrics.ts +221 -221
- package/src/retrieval/feedback/store.ts +283 -283
- package/src/retrieval/fusion/index.ts +194 -194
- package/src/retrieval/fusion/rrf.ts +165 -165
- package/src/retrieval/index.ts +12 -12
- package/src/retrieval/pipeline.ts +375 -375
- package/src/retrieval/query/expander.ts +203 -203
- package/src/retrieval/query/index.ts +27 -27
- package/src/retrieval/query/intent-classifier.ts +252 -252
- package/src/retrieval/query/temporal-parser.ts +295 -295
- package/src/retrieval/reranker/index.ts +189 -188
- package/src/retrieval/reranker/model.ts +99 -95
- package/src/retrieval/service.ts +125 -125
- package/src/retrieval/types.ts +162 -162
- package/src/routing/entity-extractor.ts +454 -454
- package/src/routing/handlers/exploration-handler.ts +369 -0
- package/src/routing/handlers/index.ts +19 -0
- package/src/routing/handlers/memory-handler.ts +273 -0
- package/src/routing/handlers/mutation-handler.ts +241 -0
- package/src/routing/handlers/recall-handler.ts +642 -0
- package/src/routing/handlers/shared.ts +515 -0
- package/src/routing/handlers/types.ts +48 -0
- package/src/routing/intent-classifier.ts +552 -552
- package/src/routing/response-filter.ts +399 -391
- package/src/routing/router.ts +245 -2193
- package/src/routing/search-engine.ts +521 -514
- package/src/routing/types.ts +104 -94
- package/src/scripts/health-check.ts +118 -118
- package/src/scripts/setup.ts +122 -122
- package/src/server/auto-updater.ts +283 -276
- package/src/server/handlers/call-tool.ts +159 -159
- package/src/server/handlers/list-tools.ts +35 -35
- package/src/server/handlers/tools/auto-remember.ts +165 -165
- package/src/server/handlers/tools/brain.ts +86 -86
- package/src/server/handlers/tools/create-project.ts +135 -135
- package/src/server/handlers/tools/get-code-standards.ts +123 -123
- package/src/server/handlers/tools/get-corrections.ts +152 -152
- package/src/server/handlers/tools/get-patterns.ts +156 -156
- package/src/server/handlers/tools/get-project-context.ts +75 -75
- package/src/server/handlers/tools/index.ts +30 -30
- package/src/server/handlers/tools/init-project.ts +756 -756
- package/src/server/handlers/tools/list-projects.ts +126 -126
- package/src/server/handlers/tools/recall-similar.ts +87 -87
- package/src/server/handlers/tools/recognize-pattern.ts +132 -132
- package/src/server/handlers/tools/record-correction.ts +131 -131
- package/src/server/handlers/tools/remember-decision.ts +168 -168
- package/src/server/handlers/tools/schemas.ts +179 -179
- package/src/server/handlers/tools/search-code.ts +122 -122
- package/src/server/handlers/tools/smart-context.ts +146 -146
- package/src/server/handlers/tools/update-progress.ts +131 -131
- package/src/server/http-api.ts +215 -1229
- package/src/server/mcp-proxy.ts +85 -84
- package/src/server/mcp-server.ts +285 -284
- package/src/server/middleware/auth.ts +39 -0
- package/src/server/middleware/error-handler.ts +37 -0
- package/src/server/middleware/rate-limit.ts +53 -0
- package/src/server/middleware/validate.ts +42 -0
- package/src/server/pid-manager.ts +137 -136
- package/src/server/providers/resources.ts +581 -581
- package/src/server/routes/code.ts +228 -0
- package/src/server/routes/context.ts +26 -0
- package/src/server/routes/health.ts +19 -0
- package/src/server/routes/helpers.ts +100 -0
- package/src/server/routes/hooks.ts +197 -0
- package/src/server/routes/mcp.ts +47 -0
- package/src/server/routes/memory.ts +397 -0
- package/src/server/routes/models.ts +96 -0
- package/src/server/routes/projects.ts +89 -0
- package/src/server/routes/types.ts +21 -0
- package/src/server/schemas/api-schemas.ts +202 -0
- package/src/server/services.ts +720 -720
- package/src/server/utils/memory-indicator.ts +84 -84
- package/src/server/utils/response-formatter.ts +129 -129
- package/src/server/web-viewer.ts +1145 -1115
- package/src/setup/index.ts +38 -38
- package/src/tools/registry.ts +115 -115
- package/src/tools/schemas.ts +666 -666
- package/src/tools/types.ts +412 -412
- package/src/training/data-store.ts +320 -298
- package/src/training/retrain-pipeline.ts +399 -394
- package/src/utils/error-handler.ts +136 -136
- package/src/utils/index.ts +58 -58
- package/src/utils/kill-port.ts +55 -53
- package/src/utils/phase12-helper.ts +56 -56
- package/src/utils/safe-path.ts +43 -0
- package/src/utils/timing.ts +47 -47
- package/src/utils/transaction.ts +63 -63
- package/src/vault/index.ts +4 -3
- package/src/vault/paths.ts +106 -106
- package/src/vault/query.ts +4 -1
- package/src/vault/reader.ts +44 -1
- package/src/vault/watcher.ts +24 -1
- package/src/vault/writer.ts +487 -413
- package/skills/persistent-memory/SKILL.md +0 -148
- package/skills/persistent-memory/references/tool-reference.md +0 -90
|
@@ -1,203 +1,203 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Query Expander
|
|
3
|
-
* Expands queries with synonyms and related terms
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ExpandedQuery } from '../types'
|
|
7
|
-
|
|
8
|
-
/** Domain-specific synonym mappings */
|
|
9
|
-
const SYNONYMS: Record<string, string[]> = {
|
|
10
|
-
// Database terms
|
|
11
|
-
database: ['db', 'datastore', 'storage', 'persistence'],
|
|
12
|
-
sql: ['query', 'relational', 'postgresql', 'mysql', 'sqlite'],
|
|
13
|
-
nosql: ['mongodb', 'dynamodb', 'document store', 'key-value'],
|
|
14
|
-
|
|
15
|
-
// API terms
|
|
16
|
-
api: ['endpoint', 'rest', 'graphql', 'interface', 'service'],
|
|
17
|
-
authentication: ['auth', 'login', 'signin', 'identity', 'credential'],
|
|
18
|
-
authorization: ['permission', 'access control', 'rbac', 'acl'],
|
|
19
|
-
|
|
20
|
-
// Architecture terms
|
|
21
|
-
architecture: ['design', 'structure', 'pattern', 'system design'],
|
|
22
|
-
microservice: ['service', 'distributed', 'soa'],
|
|
23
|
-
monolith: ['monolithic', 'single service'],
|
|
24
|
-
|
|
25
|
-
// Frontend terms
|
|
26
|
-
frontend: ['ui', 'client', 'web', 'interface', 'view'],
|
|
27
|
-
component: ['widget', 'element', 'module'],
|
|
28
|
-
state: ['store', 'data', 'context', 'redux'],
|
|
29
|
-
|
|
30
|
-
// Backend terms
|
|
31
|
-
backend: ['server', 'service', 'api', 'serverside'],
|
|
32
|
-
server: ['backend', 'service', 'host'],
|
|
33
|
-
|
|
34
|
-
// Testing terms
|
|
35
|
-
test: ['testing', 'spec', 'unit test', 'integration test'],
|
|
36
|
-
mock: ['stub', 'fake', 'spy', 'double'],
|
|
37
|
-
|
|
38
|
-
// Error terms
|
|
39
|
-
error: ['exception', 'failure', 'bug', 'issue', 'problem'],
|
|
40
|
-
fix: ['resolve', 'repair', 'patch', 'correct', 'solve'],
|
|
41
|
-
|
|
42
|
-
// Performance terms
|
|
43
|
-
performance: ['speed', 'optimization', 'efficiency', 'latency'],
|
|
44
|
-
cache: ['caching', 'memoization', 'store', 'buffer'],
|
|
45
|
-
|
|
46
|
-
// Security terms
|
|
47
|
-
security: ['secure', 'protection', 'safety', 'vulnerability'],
|
|
48
|
-
encrypt: ['encryption', 'cipher', 'hash', 'secure'],
|
|
49
|
-
|
|
50
|
-
// Configuration terms
|
|
51
|
-
config: ['configuration', 'settings', 'options', 'preferences'],
|
|
52
|
-
environment: ['env', 'environment variables', 'config'],
|
|
53
|
-
|
|
54
|
-
// Data terms
|
|
55
|
-
data: ['information', 'payload', 'content', 'record'],
|
|
56
|
-
schema: ['model', 'structure', 'type', 'definition'],
|
|
57
|
-
|
|
58
|
-
// Process terms
|
|
59
|
-
deploy: ['deployment', 'release', 'ship', 'publish'],
|
|
60
|
-
build: ['compile', 'bundle', 'package'],
|
|
61
|
-
|
|
62
|
-
// Memory terms
|
|
63
|
-
memory: ['storage', 'store', 'cache', 'array'],
|
|
64
|
-
|
|
65
|
-
// Common verbs
|
|
66
|
-
create: ['add', 'new', 'generate', 'make'],
|
|
67
|
-
update: ['modify', 'change', 'edit', 'patch'],
|
|
68
|
-
delete: ['remove', 'destroy', 'drop'],
|
|
69
|
-
get: ['fetch', 'retrieve', 'read', 'query'],
|
|
70
|
-
choose: ['select', 'pick', 'decide', 'opt', 'chose'],
|
|
71
|
-
chose: ['choose', 'select', 'pick', 'decide', 'opted'],
|
|
72
|
-
|
|
73
|
-
// Framework terms
|
|
74
|
-
react: ['reactjs', 'react.js', 'component'],
|
|
75
|
-
vue: ['vuejs', 'vue.js'],
|
|
76
|
-
angular: ['angularjs', 'ng'],
|
|
77
|
-
node: ['nodejs', 'node.js'],
|
|
78
|
-
typescript: ['ts', 'typed javascript'],
|
|
79
|
-
javascript: ['js', 'ecmascript']
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/** Concept expansions (broader than synonyms) */
|
|
83
|
-
const CONCEPT_EXPANSIONS: Record<string, string[]> = {
|
|
84
|
-
database: ['query', 'migration', 'schema', 'orm', 'connection'],
|
|
85
|
-
authentication: ['jwt', 'oauth', 'session', 'token', 'password'],
|
|
86
|
-
frontend: ['react', 'vue', 'angular', 'css', 'html'],
|
|
87
|
-
backend: ['express', 'fastify', 'nest', 'koa'],
|
|
88
|
-
testing: ['jest', 'vitest', 'mocha', 'cypress', 'playwright'],
|
|
89
|
-
deployment: ['docker', 'kubernetes', 'ci/cd', 'vercel', 'aws']
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export interface QueryExpanderConfig {
|
|
93
|
-
/** Use synonyms */
|
|
94
|
-
useSynonyms?: boolean
|
|
95
|
-
/** Use concept expansions */
|
|
96
|
-
useConceptExpansions?: boolean
|
|
97
|
-
/** Maximum expansion terms */
|
|
98
|
-
maxExpansions?: number
|
|
99
|
-
/** Weight for original query (0-1) */
|
|
100
|
-
originalWeight?: number
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const DEFAULT_CONFIG: QueryExpanderConfig = {
|
|
104
|
-
useSynonyms: true,
|
|
105
|
-
useConceptExpansions: false, // Off by default to avoid over-expansion
|
|
106
|
-
maxExpansions: 5,
|
|
107
|
-
originalWeight: 0.8
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Expand a query with synonyms and related terms
|
|
112
|
-
*/
|
|
113
|
-
export function expandQuery(
|
|
114
|
-
query: string,
|
|
115
|
-
config: QueryExpanderConfig = {}
|
|
116
|
-
): ExpandedQuery {
|
|
117
|
-
const opts = { ...DEFAULT_CONFIG, ...config }
|
|
118
|
-
|
|
119
|
-
// Tokenize query
|
|
120
|
-
const words = query.toLowerCase().split(/\s+/)
|
|
121
|
-
const expansions: string[] = []
|
|
122
|
-
|
|
123
|
-
for (const word of words) {
|
|
124
|
-
// Check synonyms
|
|
125
|
-
if (opts.useSynonyms && SYNONYMS[word]) {
|
|
126
|
-
expansions.push(...SYNONYMS[word].slice(0, 3))
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Check concept expansions
|
|
130
|
-
if (opts.useConceptExpansions && CONCEPT_EXPANSIONS[word]) {
|
|
131
|
-
expansions.push(...CONCEPT_EXPANSIONS[word].slice(0, 2))
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Deduplicate and limit expansions
|
|
136
|
-
const uniqueExpansions = [...new Set(expansions)]
|
|
137
|
-
.filter(term => !query.toLowerCase().includes(term))
|
|
138
|
-
.slice(0, opts.maxExpansions!)
|
|
139
|
-
|
|
140
|
-
// Create combined query
|
|
141
|
-
const combined = uniqueExpansions.length > 0
|
|
142
|
-
? `${query} ${uniqueExpansions.join(' ')}`
|
|
143
|
-
: query
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
original: query,
|
|
147
|
-
expansions: uniqueExpansions,
|
|
148
|
-
combined,
|
|
149
|
-
originalWeight: opts.originalWeight!
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Get synonyms for a term
|
|
155
|
-
*/
|
|
156
|
-
export function getSynonyms(term: string): string[] {
|
|
157
|
-
const normalized = term.toLowerCase()
|
|
158
|
-
return SYNONYMS[normalized] || []
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Get concept expansions for a term
|
|
163
|
-
*/
|
|
164
|
-
export function getConceptExpansions(term: string): string[] {
|
|
165
|
-
const normalized = term.toLowerCase()
|
|
166
|
-
return CONCEPT_EXPANSIONS[normalized] || []
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Add custom synonym mapping
|
|
171
|
-
*/
|
|
172
|
-
export function addSynonym(term: string, synonyms: string[]): void {
|
|
173
|
-
const normalized = term.toLowerCase()
|
|
174
|
-
SYNONYMS[normalized] = [...(SYNONYMS[normalized] || []), ...synonyms]
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Add custom concept expansion
|
|
179
|
-
*/
|
|
180
|
-
export function addConceptExpansion(term: string, expansions: string[]): void {
|
|
181
|
-
const normalized = term.toLowerCase()
|
|
182
|
-
CONCEPT_EXPANSIONS[normalized] = [...(CONCEPT_EXPANSIONS[normalized] || []), ...expansions]
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export class QueryExpander {
|
|
186
|
-
private config: QueryExpanderConfig
|
|
187
|
-
|
|
188
|
-
constructor(config: QueryExpanderConfig = {}) {
|
|
189
|
-
this.config = { ...DEFAULT_CONFIG, ...config }
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
expand(query: string): ExpandedQuery {
|
|
193
|
-
return expandQuery(query, this.config)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
getSynonyms(term: string): string[] {
|
|
197
|
-
return getSynonyms(term)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
getConceptExpansions(term: string): string[] {
|
|
201
|
-
return getConceptExpansions(term)
|
|
202
|
-
}
|
|
203
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Query Expander
|
|
3
|
+
* Expands queries with synonyms and related terms
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ExpandedQuery } from '../types'
|
|
7
|
+
|
|
8
|
+
/** Domain-specific synonym mappings */
|
|
9
|
+
const SYNONYMS: Record<string, string[]> = {
|
|
10
|
+
// Database terms
|
|
11
|
+
database: ['db', 'datastore', 'storage', 'persistence'],
|
|
12
|
+
sql: ['query', 'relational', 'postgresql', 'mysql', 'sqlite'],
|
|
13
|
+
nosql: ['mongodb', 'dynamodb', 'document store', 'key-value'],
|
|
14
|
+
|
|
15
|
+
// API terms
|
|
16
|
+
api: ['endpoint', 'rest', 'graphql', 'interface', 'service'],
|
|
17
|
+
authentication: ['auth', 'login', 'signin', 'identity', 'credential'],
|
|
18
|
+
authorization: ['permission', 'access control', 'rbac', 'acl'],
|
|
19
|
+
|
|
20
|
+
// Architecture terms
|
|
21
|
+
architecture: ['design', 'structure', 'pattern', 'system design'],
|
|
22
|
+
microservice: ['service', 'distributed', 'soa'],
|
|
23
|
+
monolith: ['monolithic', 'single service'],
|
|
24
|
+
|
|
25
|
+
// Frontend terms
|
|
26
|
+
frontend: ['ui', 'client', 'web', 'interface', 'view'],
|
|
27
|
+
component: ['widget', 'element', 'module'],
|
|
28
|
+
state: ['store', 'data', 'context', 'redux'],
|
|
29
|
+
|
|
30
|
+
// Backend terms
|
|
31
|
+
backend: ['server', 'service', 'api', 'serverside'],
|
|
32
|
+
server: ['backend', 'service', 'host'],
|
|
33
|
+
|
|
34
|
+
// Testing terms
|
|
35
|
+
test: ['testing', 'spec', 'unit test', 'integration test'],
|
|
36
|
+
mock: ['stub', 'fake', 'spy', 'double'],
|
|
37
|
+
|
|
38
|
+
// Error terms
|
|
39
|
+
error: ['exception', 'failure', 'bug', 'issue', 'problem'],
|
|
40
|
+
fix: ['resolve', 'repair', 'patch', 'correct', 'solve'],
|
|
41
|
+
|
|
42
|
+
// Performance terms
|
|
43
|
+
performance: ['speed', 'optimization', 'efficiency', 'latency'],
|
|
44
|
+
cache: ['caching', 'memoization', 'store', 'buffer'],
|
|
45
|
+
|
|
46
|
+
// Security terms
|
|
47
|
+
security: ['secure', 'protection', 'safety', 'vulnerability'],
|
|
48
|
+
encrypt: ['encryption', 'cipher', 'hash', 'secure'],
|
|
49
|
+
|
|
50
|
+
// Configuration terms
|
|
51
|
+
config: ['configuration', 'settings', 'options', 'preferences'],
|
|
52
|
+
environment: ['env', 'environment variables', 'config'],
|
|
53
|
+
|
|
54
|
+
// Data terms
|
|
55
|
+
data: ['information', 'payload', 'content', 'record'],
|
|
56
|
+
schema: ['model', 'structure', 'type', 'definition'],
|
|
57
|
+
|
|
58
|
+
// Process terms
|
|
59
|
+
deploy: ['deployment', 'release', 'ship', 'publish'],
|
|
60
|
+
build: ['compile', 'bundle', 'package'],
|
|
61
|
+
|
|
62
|
+
// Memory terms
|
|
63
|
+
memory: ['storage', 'store', 'cache', 'array'],
|
|
64
|
+
|
|
65
|
+
// Common verbs
|
|
66
|
+
create: ['add', 'new', 'generate', 'make'],
|
|
67
|
+
update: ['modify', 'change', 'edit', 'patch'],
|
|
68
|
+
delete: ['remove', 'destroy', 'drop'],
|
|
69
|
+
get: ['fetch', 'retrieve', 'read', 'query'],
|
|
70
|
+
choose: ['select', 'pick', 'decide', 'opt', 'chose'],
|
|
71
|
+
chose: ['choose', 'select', 'pick', 'decide', 'opted'],
|
|
72
|
+
|
|
73
|
+
// Framework terms
|
|
74
|
+
react: ['reactjs', 'react.js', 'component'],
|
|
75
|
+
vue: ['vuejs', 'vue.js'],
|
|
76
|
+
angular: ['angularjs', 'ng'],
|
|
77
|
+
node: ['nodejs', 'node.js'],
|
|
78
|
+
typescript: ['ts', 'typed javascript'],
|
|
79
|
+
javascript: ['js', 'ecmascript']
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Concept expansions (broader than synonyms) */
|
|
83
|
+
const CONCEPT_EXPANSIONS: Record<string, string[]> = {
|
|
84
|
+
database: ['query', 'migration', 'schema', 'orm', 'connection'],
|
|
85
|
+
authentication: ['jwt', 'oauth', 'session', 'token', 'password'],
|
|
86
|
+
frontend: ['react', 'vue', 'angular', 'css', 'html'],
|
|
87
|
+
backend: ['express', 'fastify', 'nest', 'koa'],
|
|
88
|
+
testing: ['jest', 'vitest', 'mocha', 'cypress', 'playwright'],
|
|
89
|
+
deployment: ['docker', 'kubernetes', 'ci/cd', 'vercel', 'aws']
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface QueryExpanderConfig {
|
|
93
|
+
/** Use synonyms */
|
|
94
|
+
useSynonyms?: boolean
|
|
95
|
+
/** Use concept expansions */
|
|
96
|
+
useConceptExpansions?: boolean
|
|
97
|
+
/** Maximum expansion terms */
|
|
98
|
+
maxExpansions?: number
|
|
99
|
+
/** Weight for original query (0-1) */
|
|
100
|
+
originalWeight?: number
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const DEFAULT_CONFIG: QueryExpanderConfig = {
|
|
104
|
+
useSynonyms: true,
|
|
105
|
+
useConceptExpansions: false, // Off by default to avoid over-expansion
|
|
106
|
+
maxExpansions: 5,
|
|
107
|
+
originalWeight: 0.8
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Expand a query with synonyms and related terms
|
|
112
|
+
*/
|
|
113
|
+
export function expandQuery(
|
|
114
|
+
query: string,
|
|
115
|
+
config: QueryExpanderConfig = {}
|
|
116
|
+
): ExpandedQuery {
|
|
117
|
+
const opts = { ...DEFAULT_CONFIG, ...config }
|
|
118
|
+
|
|
119
|
+
// Tokenize query
|
|
120
|
+
const words = query.toLowerCase().split(/\s+/)
|
|
121
|
+
const expansions: string[] = []
|
|
122
|
+
|
|
123
|
+
for (const word of words) {
|
|
124
|
+
// Check synonyms
|
|
125
|
+
if (opts.useSynonyms && SYNONYMS[word]) {
|
|
126
|
+
expansions.push(...SYNONYMS[word].slice(0, 3))
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Check concept expansions
|
|
130
|
+
if (opts.useConceptExpansions && CONCEPT_EXPANSIONS[word]) {
|
|
131
|
+
expansions.push(...CONCEPT_EXPANSIONS[word].slice(0, 2))
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Deduplicate and limit expansions
|
|
136
|
+
const uniqueExpansions = [...new Set(expansions)]
|
|
137
|
+
.filter(term => !query.toLowerCase().includes(term))
|
|
138
|
+
.slice(0, opts.maxExpansions!)
|
|
139
|
+
|
|
140
|
+
// Create combined query
|
|
141
|
+
const combined = uniqueExpansions.length > 0
|
|
142
|
+
? `${query} ${uniqueExpansions.join(' ')}`
|
|
143
|
+
: query
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
original: query,
|
|
147
|
+
expansions: uniqueExpansions,
|
|
148
|
+
combined,
|
|
149
|
+
originalWeight: opts.originalWeight!
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Get synonyms for a term
|
|
155
|
+
*/
|
|
156
|
+
export function getSynonyms(term: string): string[] {
|
|
157
|
+
const normalized = term.toLowerCase()
|
|
158
|
+
return SYNONYMS[normalized] || []
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get concept expansions for a term
|
|
163
|
+
*/
|
|
164
|
+
export function getConceptExpansions(term: string): string[] {
|
|
165
|
+
const normalized = term.toLowerCase()
|
|
166
|
+
return CONCEPT_EXPANSIONS[normalized] || []
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Add custom synonym mapping
|
|
171
|
+
*/
|
|
172
|
+
export function addSynonym(term: string, synonyms: string[]): void {
|
|
173
|
+
const normalized = term.toLowerCase()
|
|
174
|
+
SYNONYMS[normalized] = [...(SYNONYMS[normalized] || []), ...synonyms]
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Add custom concept expansion
|
|
179
|
+
*/
|
|
180
|
+
export function addConceptExpansion(term: string, expansions: string[]): void {
|
|
181
|
+
const normalized = term.toLowerCase()
|
|
182
|
+
CONCEPT_EXPANSIONS[normalized] = [...(CONCEPT_EXPANSIONS[normalized] || []), ...expansions]
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export class QueryExpander {
|
|
186
|
+
private config: QueryExpanderConfig
|
|
187
|
+
|
|
188
|
+
constructor(config: QueryExpanderConfig = {}) {
|
|
189
|
+
this.config = { ...DEFAULT_CONFIG, ...config }
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
expand(query: string): ExpandedQuery {
|
|
193
|
+
return expandQuery(query, this.config)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
getSynonyms(term: string): string[] {
|
|
197
|
+
return getSynonyms(term)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
getConceptExpansions(term: string): string[] {
|
|
201
|
+
return getConceptExpansions(term)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Query Understanding Module
|
|
3
|
-
* Exports intent classification, query expansion, and temporal parsing
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
IntentClassifier,
|
|
8
|
-
classifyIntent,
|
|
9
|
-
hasIntent,
|
|
10
|
-
getIntents
|
|
11
|
-
} from './intent-classifier'
|
|
12
|
-
|
|
13
|
-
export {
|
|
14
|
-
QueryExpander,
|
|
15
|
-
expandQuery,
|
|
16
|
-
getSynonyms,
|
|
17
|
-
getConceptExpansions,
|
|
18
|
-
addSynonym,
|
|
19
|
-
addConceptExpansion
|
|
20
|
-
} from './expander'
|
|
21
|
-
|
|
22
|
-
export {
|
|
23
|
-
TemporalParser,
|
|
24
|
-
parseTemporal,
|
|
25
|
-
parseTemporalAdvanced,
|
|
26
|
-
formatDateRangeForQuery
|
|
27
|
-
} from './temporal-parser'
|
|
1
|
+
/**
|
|
2
|
+
* Query Understanding Module
|
|
3
|
+
* Exports intent classification, query expansion, and temporal parsing
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
IntentClassifier,
|
|
8
|
+
classifyIntent,
|
|
9
|
+
hasIntent,
|
|
10
|
+
getIntents
|
|
11
|
+
} from './intent-classifier'
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
QueryExpander,
|
|
15
|
+
expandQuery,
|
|
16
|
+
getSynonyms,
|
|
17
|
+
getConceptExpansions,
|
|
18
|
+
addSynonym,
|
|
19
|
+
addConceptExpansion
|
|
20
|
+
} from './expander'
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
TemporalParser,
|
|
24
|
+
parseTemporal,
|
|
25
|
+
parseTemporalAdvanced,
|
|
26
|
+
formatDateRangeForQuery
|
|
27
|
+
} from './temporal-parser'
|