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,132 +1,132 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Recognize Pattern Handler
|
|
3
|
-
* Stores recognized patterns (solution, anti-pattern, best-practice, common-issue)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { Logger } from 'pino'
|
|
7
|
-
import type { ToolResponse } from '@/tools/types'
|
|
8
|
-
import { getMemoryService, getVaultService, isServicesInitialized } from '@/server/services'
|
|
9
|
-
import { ToolValidator } from '@/server/utils/validators'
|
|
10
|
-
import { ResponseFormatter } from '@/server/utils/response-formatter'
|
|
11
|
-
import { ErrorHandler } from '@/server/utils/error-handler'
|
|
12
|
-
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'
|
|
13
|
-
import { RecognizePatternSchema } from './schemas'
|
|
14
|
-
|
|
15
|
-
export async function handleRecognizePattern(
|
|
16
|
-
args: unknown,
|
|
17
|
-
logger: Logger
|
|
18
|
-
): Promise<ToolResponse> {
|
|
19
|
-
try {
|
|
20
|
-
const input = ToolValidator.validate(args, RecognizePatternSchema)
|
|
21
|
-
const {
|
|
22
|
-
project_name,
|
|
23
|
-
pattern_type,
|
|
24
|
-
description,
|
|
25
|
-
example,
|
|
26
|
-
confidence,
|
|
27
|
-
context
|
|
28
|
-
} = input
|
|
29
|
-
|
|
30
|
-
logger.debug(
|
|
31
|
-
{
|
|
32
|
-
project_name,
|
|
33
|
-
pattern_type,
|
|
34
|
-
description_length: description.length,
|
|
35
|
-
confidence
|
|
36
|
-
},
|
|
37
|
-
'Recognizing pattern'
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
if (!isServicesInitialized()) {
|
|
41
|
-
throw new McpError(
|
|
42
|
-
ErrorCode.InternalError,
|
|
43
|
-
'Memory service not initialized. The server may still be starting up.'
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const memory = getMemoryService()
|
|
48
|
-
const vault = getVaultService()
|
|
49
|
-
|
|
50
|
-
const patternId = await memory.storePattern({
|
|
51
|
-
project: project_name,
|
|
52
|
-
pattern_type,
|
|
53
|
-
description,
|
|
54
|
-
example,
|
|
55
|
-
confidence: confidence || 0.8,
|
|
56
|
-
context: context || ''
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
const projectPaths = vault.getProjectPaths(project_name)
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
await vault.writer.appendContent(
|
|
63
|
-
projectPaths.patterns,
|
|
64
|
-
`\n## ${pattern_type}: ${description}\n\n**ID:** ${patternId}\n\n**Confidence:** ${confidence}\n\n**Context:** ${context || 'N/A'}\n\n${example ? `**Example:**\n\`\`\`\n${example}\n\`\`\`\n\n` : ''}---\n`,
|
|
65
|
-
'\n'
|
|
66
|
-
)
|
|
67
|
-
} catch {
|
|
68
|
-
throw new McpError(
|
|
69
|
-
ErrorCode.InvalidParams,
|
|
70
|
-
`Project "${project_name}" not found. Use list_projects to see available projects.`
|
|
71
|
-
)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const patternsFile = await vault.reader.readMarkdownFile(projectPaths.patterns)
|
|
75
|
-
const currentCount = (patternsFile.frontmatter?.pattern_count as number) || 0
|
|
76
|
-
|
|
77
|
-
await vault.writer.updateFrontmatter(projectPaths.patterns, {
|
|
78
|
-
pattern_count: currentCount + 1,
|
|
79
|
-
last_updated: new Date().toISOString().split('T')[0]
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
logger.info(
|
|
83
|
-
{ projectName: project_name, patternId, pattern_type },
|
|
84
|
-
'Pattern recognized and stored'
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
return ResponseFormatter.text(
|
|
88
|
-
`✅ Pattern recognized successfully!\n\n` +
|
|
89
|
-
`**Type:** ${pattern_type}\n` +
|
|
90
|
-
`**ID:** ${patternId}\n` +
|
|
91
|
-
`**Project:** ${project_name}\n` +
|
|
92
|
-
`**Confidence:** ${confidence || 0.8}\n\n` +
|
|
93
|
-
`This pattern has been:\n` +
|
|
94
|
-
`- Stored in semantic memory for pattern recognition\n` +
|
|
95
|
-
`- Added to ${project_name}/patterns.md in your vault\n` +
|
|
96
|
-
`- Can be retrieved via \`get_patterns\` or semantic search\n`
|
|
97
|
-
)
|
|
98
|
-
} catch (error) {
|
|
99
|
-
ErrorHandler.logError(logger, error, { tool: 'recognize_pattern', args })
|
|
100
|
-
|
|
101
|
-
// Provide detailed error messages based on error type
|
|
102
|
-
if (error instanceof Error) {
|
|
103
|
-
if (error.message.includes('ChromaDB') || error.message.includes('collection')) {
|
|
104
|
-
throw new McpError(
|
|
105
|
-
ErrorCode.InternalError,
|
|
106
|
-
`ChromaDB pattern storage failed: ${error.message}\n\n` +
|
|
107
|
-
`This may be caused by:\n` +
|
|
108
|
-
`- ChromaDB not running (check if ChromaDB server is started)\n` +
|
|
109
|
-
`- Collections not initialized (try restarting the MCP server)\n` +
|
|
110
|
-
`- Connection issues (verify ChromaDB configuration)\n\n` +
|
|
111
|
-
`Error details: ${error.stack || error.message}`
|
|
112
|
-
)
|
|
113
|
-
}
|
|
114
|
-
if (error.message.includes('not initialized')) {
|
|
115
|
-
throw new McpError(
|
|
116
|
-
ErrorCode.InternalError,
|
|
117
|
-
`Memory service not initialized properly.\n\n` +
|
|
118
|
-
`The server may still be starting up. Please wait a moment and try again.\n` +
|
|
119
|
-
`If the issue persists, restart the MCP server.`
|
|
120
|
-
)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (error instanceof McpError) {
|
|
125
|
-
throw error
|
|
126
|
-
}
|
|
127
|
-
throw new McpError(
|
|
128
|
-
ErrorCode.InternalError,
|
|
129
|
-
`Tool failed: ${error instanceof Error ? error.message : String(error)}`
|
|
130
|
-
)
|
|
131
|
-
}
|
|
132
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Recognize Pattern Handler
|
|
3
|
+
* Stores recognized patterns (solution, anti-pattern, best-practice, common-issue)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Logger } from 'pino'
|
|
7
|
+
import type { ToolResponse } from '@/tools/types'
|
|
8
|
+
import { getMemoryService, getVaultService, isServicesInitialized } from '@/server/services'
|
|
9
|
+
import { ToolValidator } from '@/server/utils/validators'
|
|
10
|
+
import { ResponseFormatter } from '@/server/utils/response-formatter'
|
|
11
|
+
import { ErrorHandler } from '@/server/utils/error-handler'
|
|
12
|
+
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'
|
|
13
|
+
import { RecognizePatternSchema } from './schemas'
|
|
14
|
+
|
|
15
|
+
export async function handleRecognizePattern(
|
|
16
|
+
args: unknown,
|
|
17
|
+
logger: Logger
|
|
18
|
+
): Promise<ToolResponse> {
|
|
19
|
+
try {
|
|
20
|
+
const input = ToolValidator.validate(args, RecognizePatternSchema)
|
|
21
|
+
const {
|
|
22
|
+
project_name,
|
|
23
|
+
pattern_type,
|
|
24
|
+
description,
|
|
25
|
+
example,
|
|
26
|
+
confidence,
|
|
27
|
+
context
|
|
28
|
+
} = input
|
|
29
|
+
|
|
30
|
+
logger.debug(
|
|
31
|
+
{
|
|
32
|
+
project_name,
|
|
33
|
+
pattern_type,
|
|
34
|
+
description_length: description.length,
|
|
35
|
+
confidence
|
|
36
|
+
},
|
|
37
|
+
'Recognizing pattern'
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
if (!isServicesInitialized()) {
|
|
41
|
+
throw new McpError(
|
|
42
|
+
ErrorCode.InternalError,
|
|
43
|
+
'Memory service not initialized. The server may still be starting up.'
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const memory = getMemoryService()
|
|
48
|
+
const vault = getVaultService()
|
|
49
|
+
|
|
50
|
+
const patternId = await memory.storePattern({
|
|
51
|
+
project: project_name,
|
|
52
|
+
pattern_type,
|
|
53
|
+
description,
|
|
54
|
+
example,
|
|
55
|
+
confidence: confidence || 0.8,
|
|
56
|
+
context: context || ''
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
const projectPaths = vault.getProjectPaths(project_name)
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
await vault.writer.appendContent(
|
|
63
|
+
projectPaths.patterns,
|
|
64
|
+
`\n## ${pattern_type}: ${description}\n\n**ID:** ${patternId}\n\n**Confidence:** ${confidence}\n\n**Context:** ${context || 'N/A'}\n\n${example ? `**Example:**\n\`\`\`\n${example}\n\`\`\`\n\n` : ''}---\n`,
|
|
65
|
+
'\n'
|
|
66
|
+
)
|
|
67
|
+
} catch {
|
|
68
|
+
throw new McpError(
|
|
69
|
+
ErrorCode.InvalidParams,
|
|
70
|
+
`Project "${project_name}" not found. Use list_projects to see available projects.`
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const patternsFile = await vault.reader.readMarkdownFile(projectPaths.patterns)
|
|
75
|
+
const currentCount = (patternsFile.frontmatter?.pattern_count as number) || 0
|
|
76
|
+
|
|
77
|
+
await vault.writer.updateFrontmatter(projectPaths.patterns, {
|
|
78
|
+
pattern_count: currentCount + 1,
|
|
79
|
+
last_updated: new Date().toISOString().split('T')[0]
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
logger.info(
|
|
83
|
+
{ projectName: project_name, patternId, pattern_type },
|
|
84
|
+
'Pattern recognized and stored'
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
return ResponseFormatter.text(
|
|
88
|
+
`✅ Pattern recognized successfully!\n\n` +
|
|
89
|
+
`**Type:** ${pattern_type}\n` +
|
|
90
|
+
`**ID:** ${patternId}\n` +
|
|
91
|
+
`**Project:** ${project_name}\n` +
|
|
92
|
+
`**Confidence:** ${confidence || 0.8}\n\n` +
|
|
93
|
+
`This pattern has been:\n` +
|
|
94
|
+
`- Stored in semantic memory for pattern recognition\n` +
|
|
95
|
+
`- Added to ${project_name}/patterns.md in your vault\n` +
|
|
96
|
+
`- Can be retrieved via \`get_patterns\` or semantic search\n`
|
|
97
|
+
)
|
|
98
|
+
} catch (error) {
|
|
99
|
+
ErrorHandler.logError(logger, error, { tool: 'recognize_pattern', args })
|
|
100
|
+
|
|
101
|
+
// Provide detailed error messages based on error type
|
|
102
|
+
if (error instanceof Error) {
|
|
103
|
+
if (error.message.includes('ChromaDB') || error.message.includes('collection')) {
|
|
104
|
+
throw new McpError(
|
|
105
|
+
ErrorCode.InternalError,
|
|
106
|
+
`ChromaDB pattern storage failed: ${error.message}\n\n` +
|
|
107
|
+
`This may be caused by:\n` +
|
|
108
|
+
`- ChromaDB not running (check if ChromaDB server is started)\n` +
|
|
109
|
+
`- Collections not initialized (try restarting the MCP server)\n` +
|
|
110
|
+
`- Connection issues (verify ChromaDB configuration)\n\n` +
|
|
111
|
+
`Error details: ${error.stack || error.message}`
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
if (error.message.includes('not initialized')) {
|
|
115
|
+
throw new McpError(
|
|
116
|
+
ErrorCode.InternalError,
|
|
117
|
+
`Memory service not initialized properly.\n\n` +
|
|
118
|
+
`The server may still be starting up. Please wait a moment and try again.\n` +
|
|
119
|
+
`If the issue persists, restart the MCP server.`
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (error instanceof McpError) {
|
|
125
|
+
throw error
|
|
126
|
+
}
|
|
127
|
+
throw new McpError(
|
|
128
|
+
ErrorCode.InternalError,
|
|
129
|
+
`Tool failed: ${error instanceof Error ? error.message : String(error)}`
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Record Correction Handler
|
|
3
|
-
* Stores corrections and lessons learned in long-term memory
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { Logger } from 'pino'
|
|
7
|
-
import type { ToolResponse } from '@/tools/types'
|
|
8
|
-
import { getMemoryService, getVaultService, isServicesInitialized } from '@/server/services'
|
|
9
|
-
import { ToolValidator } from '@/server/utils/validators'
|
|
10
|
-
import { ResponseFormatter } from '@/server/utils/response-formatter'
|
|
11
|
-
import { ErrorHandler } from '@/server/utils/error-handler'
|
|
12
|
-
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'
|
|
13
|
-
import { RecordCorrectionSchema } from './schemas'
|
|
14
|
-
|
|
15
|
-
export async function handleRecordCorrection(
|
|
16
|
-
args: unknown,
|
|
17
|
-
logger: Logger
|
|
18
|
-
): Promise<ToolResponse> {
|
|
19
|
-
try {
|
|
20
|
-
const input = ToolValidator.validate(args, RecordCorrectionSchema)
|
|
21
|
-
const {
|
|
22
|
-
project_name,
|
|
23
|
-
original,
|
|
24
|
-
correction,
|
|
25
|
-
reasoning,
|
|
26
|
-
context,
|
|
27
|
-
confidence
|
|
28
|
-
} = input
|
|
29
|
-
|
|
30
|
-
logger.debug(
|
|
31
|
-
{
|
|
32
|
-
project_name,
|
|
33
|
-
original_length: original.length,
|
|
34
|
-
correction_length: correction.length
|
|
35
|
-
},
|
|
36
|
-
'Recording correction'
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
if (!isServicesInitialized()) {
|
|
40
|
-
throw new McpError(
|
|
41
|
-
ErrorCode.InternalError,
|
|
42
|
-
'Memory service not initialized. The server may still be starting up.'
|
|
43
|
-
)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const memory = getMemoryService()
|
|
47
|
-
const vault = getVaultService()
|
|
48
|
-
|
|
49
|
-
const correctionId = await memory.storeCorrection({
|
|
50
|
-
project: project_name,
|
|
51
|
-
original,
|
|
52
|
-
correction,
|
|
53
|
-
reasoning,
|
|
54
|
-
context: context || '',
|
|
55
|
-
confidence: confidence || 0.9
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
const projectPaths = vault.getProjectPaths(project_name)
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
await vault.writer.appendContent(
|
|
62
|
-
projectPaths.corrections,
|
|
63
|
-
`\n## Correction: ${original.substring(0, 50)}...\n\n**ID:** ${correctionId}\n\n**What was wrong:**\n${original}\n\n**Fix:**\n${correction}\n\n**Reasoning:**\n${reasoning}\n\n**Context:** ${context || 'N/A'}\n\n---\n`,
|
|
64
|
-
'\n'
|
|
65
|
-
)
|
|
66
|
-
} catch {
|
|
67
|
-
throw new McpError(
|
|
68
|
-
ErrorCode.InvalidParams,
|
|
69
|
-
`Project "${project_name}" not found. Corrections file does not exist. Use list_projects to see available projects.`
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const correctionsFile = await vault.reader.readMarkdownFile(projectPaths.corrections)
|
|
74
|
-
const currentCount = (correctionsFile.frontmatter?.correction_count as number) || 0
|
|
75
|
-
|
|
76
|
-
await vault.writer.updateFrontmatter(projectPaths.corrections, {
|
|
77
|
-
correction_count: currentCount + 1,
|
|
78
|
-
last_updated: new Date().toISOString().split('T')[0]
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
logger.info(
|
|
82
|
-
{ projectName: project_name, correctionId },
|
|
83
|
-
'Correction stored successfully'
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
return ResponseFormatter.text(
|
|
87
|
-
`✅ Correction recorded successfully!\n\n` +
|
|
88
|
-
`**ID:** ${correctionId}\n\n` +
|
|
89
|
-
`**Project:** ${project_name}\n\n` +
|
|
90
|
-
`**Original:** ${original}\n\n` +
|
|
91
|
-
`**Correction:** ${correction}\n\n` +
|
|
92
|
-
`This correction has been:\n` +
|
|
93
|
-
`- Stored in semantic memory for learning from mistakes\n` +
|
|
94
|
-
`- Added to ${project_name}/corrections.md in your vault\n` +
|
|
95
|
-
`- Can be retrieved via \`get_corrections\` or semantic search\n`
|
|
96
|
-
)
|
|
97
|
-
} catch (error) {
|
|
98
|
-
ErrorHandler.logError(logger, error, { tool: 'record_correction', args })
|
|
99
|
-
|
|
100
|
-
// Provide detailed error messages based on error type
|
|
101
|
-
if (error instanceof Error) {
|
|
102
|
-
if (error.message.includes('ChromaDB') || error.message.includes('collection')) {
|
|
103
|
-
throw new McpError(
|
|
104
|
-
ErrorCode.InternalError,
|
|
105
|
-
`ChromaDB correction storage failed: ${error.message}\n\n` +
|
|
106
|
-
`This may be caused by:\n` +
|
|
107
|
-
`- ChromaDB not running (check if ChromaDB server is started)\n` +
|
|
108
|
-
`- Collections not initialized (try restarting the MCP server)\n` +
|
|
109
|
-
`- Connection issues (verify ChromaDB configuration)\n\n` +
|
|
110
|
-
`Error details: ${error.stack || error.message}`
|
|
111
|
-
)
|
|
112
|
-
}
|
|
113
|
-
if (error.message.includes('not initialized')) {
|
|
114
|
-
throw new McpError(
|
|
115
|
-
ErrorCode.InternalError,
|
|
116
|
-
`Memory service not initialized properly.\n\n` +
|
|
117
|
-
`The server may still be starting up. Please wait a moment and try again.\n` +
|
|
118
|
-
`If the issue persists, restart the MCP server.`
|
|
119
|
-
)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (error instanceof McpError) {
|
|
124
|
-
throw error
|
|
125
|
-
}
|
|
126
|
-
throw new McpError(
|
|
127
|
-
ErrorCode.InternalError,
|
|
128
|
-
`Tool failed: ${error instanceof Error ? error.message : String(error)}`
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Record Correction Handler
|
|
3
|
+
* Stores corrections and lessons learned in long-term memory
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Logger } from 'pino'
|
|
7
|
+
import type { ToolResponse } from '@/tools/types'
|
|
8
|
+
import { getMemoryService, getVaultService, isServicesInitialized } from '@/server/services'
|
|
9
|
+
import { ToolValidator } from '@/server/utils/validators'
|
|
10
|
+
import { ResponseFormatter } from '@/server/utils/response-formatter'
|
|
11
|
+
import { ErrorHandler } from '@/server/utils/error-handler'
|
|
12
|
+
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'
|
|
13
|
+
import { RecordCorrectionSchema } from './schemas'
|
|
14
|
+
|
|
15
|
+
export async function handleRecordCorrection(
|
|
16
|
+
args: unknown,
|
|
17
|
+
logger: Logger
|
|
18
|
+
): Promise<ToolResponse> {
|
|
19
|
+
try {
|
|
20
|
+
const input = ToolValidator.validate(args, RecordCorrectionSchema)
|
|
21
|
+
const {
|
|
22
|
+
project_name,
|
|
23
|
+
original,
|
|
24
|
+
correction,
|
|
25
|
+
reasoning,
|
|
26
|
+
context,
|
|
27
|
+
confidence
|
|
28
|
+
} = input
|
|
29
|
+
|
|
30
|
+
logger.debug(
|
|
31
|
+
{
|
|
32
|
+
project_name,
|
|
33
|
+
original_length: original.length,
|
|
34
|
+
correction_length: correction.length
|
|
35
|
+
},
|
|
36
|
+
'Recording correction'
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
if (!isServicesInitialized()) {
|
|
40
|
+
throw new McpError(
|
|
41
|
+
ErrorCode.InternalError,
|
|
42
|
+
'Memory service not initialized. The server may still be starting up.'
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const memory = getMemoryService()
|
|
47
|
+
const vault = getVaultService()
|
|
48
|
+
|
|
49
|
+
const correctionId = await memory.storeCorrection({
|
|
50
|
+
project: project_name,
|
|
51
|
+
original,
|
|
52
|
+
correction,
|
|
53
|
+
reasoning,
|
|
54
|
+
context: context || '',
|
|
55
|
+
confidence: confidence || 0.9
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const projectPaths = vault.getProjectPaths(project_name)
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
await vault.writer.appendContent(
|
|
62
|
+
projectPaths.corrections,
|
|
63
|
+
`\n## Correction: ${original.substring(0, 50)}...\n\n**ID:** ${correctionId}\n\n**What was wrong:**\n${original}\n\n**Fix:**\n${correction}\n\n**Reasoning:**\n${reasoning}\n\n**Context:** ${context || 'N/A'}\n\n---\n`,
|
|
64
|
+
'\n'
|
|
65
|
+
)
|
|
66
|
+
} catch {
|
|
67
|
+
throw new McpError(
|
|
68
|
+
ErrorCode.InvalidParams,
|
|
69
|
+
`Project "${project_name}" not found. Corrections file does not exist. Use list_projects to see available projects.`
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const correctionsFile = await vault.reader.readMarkdownFile(projectPaths.corrections)
|
|
74
|
+
const currentCount = (correctionsFile.frontmatter?.correction_count as number) || 0
|
|
75
|
+
|
|
76
|
+
await vault.writer.updateFrontmatter(projectPaths.corrections, {
|
|
77
|
+
correction_count: currentCount + 1,
|
|
78
|
+
last_updated: new Date().toISOString().split('T')[0]
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
logger.info(
|
|
82
|
+
{ projectName: project_name, correctionId },
|
|
83
|
+
'Correction stored successfully'
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
return ResponseFormatter.text(
|
|
87
|
+
`✅ Correction recorded successfully!\n\n` +
|
|
88
|
+
`**ID:** ${correctionId}\n\n` +
|
|
89
|
+
`**Project:** ${project_name}\n\n` +
|
|
90
|
+
`**Original:** ${original}\n\n` +
|
|
91
|
+
`**Correction:** ${correction}\n\n` +
|
|
92
|
+
`This correction has been:\n` +
|
|
93
|
+
`- Stored in semantic memory for learning from mistakes\n` +
|
|
94
|
+
`- Added to ${project_name}/corrections.md in your vault\n` +
|
|
95
|
+
`- Can be retrieved via \`get_corrections\` or semantic search\n`
|
|
96
|
+
)
|
|
97
|
+
} catch (error) {
|
|
98
|
+
ErrorHandler.logError(logger, error, { tool: 'record_correction', args })
|
|
99
|
+
|
|
100
|
+
// Provide detailed error messages based on error type
|
|
101
|
+
if (error instanceof Error) {
|
|
102
|
+
if (error.message.includes('ChromaDB') || error.message.includes('collection')) {
|
|
103
|
+
throw new McpError(
|
|
104
|
+
ErrorCode.InternalError,
|
|
105
|
+
`ChromaDB correction storage failed: ${error.message}\n\n` +
|
|
106
|
+
`This may be caused by:\n` +
|
|
107
|
+
`- ChromaDB not running (check if ChromaDB server is started)\n` +
|
|
108
|
+
`- Collections not initialized (try restarting the MCP server)\n` +
|
|
109
|
+
`- Connection issues (verify ChromaDB configuration)\n\n` +
|
|
110
|
+
`Error details: ${error.stack || error.message}`
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
if (error.message.includes('not initialized')) {
|
|
114
|
+
throw new McpError(
|
|
115
|
+
ErrorCode.InternalError,
|
|
116
|
+
`Memory service not initialized properly.\n\n` +
|
|
117
|
+
`The server may still be starting up. Please wait a moment and try again.\n` +
|
|
118
|
+
`If the issue persists, restart the MCP server.`
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (error instanceof McpError) {
|
|
124
|
+
throw error
|
|
125
|
+
}
|
|
126
|
+
throw new McpError(
|
|
127
|
+
ErrorCode.InternalError,
|
|
128
|
+
`Tool failed: ${error instanceof Error ? error.message : String(error)}`
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
}
|