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
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutation Handler
|
|
3
|
+
* Task 3.1: Mutation intents — handleUpdateMemory, handleDeleteMemory
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { HandlerContext, BrainExtractedEntities, BrainResponse } from './types'
|
|
7
|
+
import { DEFAULT_PROJECT, UPDATE_MIN_SIMILARITY, DELETE_MIN_SIMILARITY } from './types'
|
|
8
|
+
import { servicesNotReady, storeAsNew, hasDescriptiveContent } from './shared'
|
|
9
|
+
import { getMemoryService, isServicesInitialized } from '@/server/services'
|
|
10
|
+
|
|
11
|
+
/** Shape of raw search results from MemoryManager.searchRaw() */
|
|
12
|
+
interface RawSearchResult {
|
|
13
|
+
id?: string
|
|
14
|
+
content?: string
|
|
15
|
+
similarity?: number
|
|
16
|
+
memory?: { id?: string; content?: string }
|
|
17
|
+
decision?: { id?: string; decision?: string }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Phase 19 D4: Update with higher similarity threshold
|
|
22
|
+
*/
|
|
23
|
+
export async function handleUpdateMemory(
|
|
24
|
+
ctx: HandlerContext,
|
|
25
|
+
message: string,
|
|
26
|
+
project: string | undefined,
|
|
27
|
+
entities: BrainExtractedEntities
|
|
28
|
+
): Promise<BrainResponse> {
|
|
29
|
+
const effectiveProject = project || ctx.lastStoredProject || DEFAULT_PROJECT
|
|
30
|
+
|
|
31
|
+
if (!isServicesInitialized()) {
|
|
32
|
+
return servicesNotReady()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const memory = getMemoryService()
|
|
36
|
+
const topic = entities.topic || message
|
|
37
|
+
const hasSpecific = hasDescriptiveContent(message)
|
|
38
|
+
|
|
39
|
+
if (hasSpecific) {
|
|
40
|
+
try {
|
|
41
|
+
const results = await memory.searchRaw(topic, {
|
|
42
|
+
project: effectiveProject,
|
|
43
|
+
limit: 1,
|
|
44
|
+
minSimilarity: UPDATE_MIN_SIMILARITY
|
|
45
|
+
}) as RawSearchResult[]
|
|
46
|
+
|
|
47
|
+
const first = results[0]
|
|
48
|
+
const matchId = first?.memory?.id || first?.decision?.id || first?.id
|
|
49
|
+
const matchSimilarity = first?.similarity || 0
|
|
50
|
+
|
|
51
|
+
if (results.length > 0 && matchId && matchSimilarity >= UPDATE_MIN_SIMILARITY) {
|
|
52
|
+
const oldId = matchId
|
|
53
|
+
const newId = await memory.updateDecision(
|
|
54
|
+
oldId,
|
|
55
|
+
effectiveProject,
|
|
56
|
+
`Updated: ${topic.slice(0, 200)}`,
|
|
57
|
+
message,
|
|
58
|
+
entities.reasoning || 'Updated via brain tool',
|
|
59
|
+
{ tags: entities.technologies.length > 0 ? entities.technologies : ['updated'] }
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
ctx.setLastStored(newId, effectiveProject)
|
|
63
|
+
|
|
64
|
+
// Invalidate cache
|
|
65
|
+
ctx.searchEngine.invalidateCache(effectiveProject)
|
|
66
|
+
|
|
67
|
+
const oldContent = first?.decision?.decision || first?.memory?.content?.slice(0, 100) || first?.content?.slice(0, 100) || ''
|
|
68
|
+
return {
|
|
69
|
+
action: 'stored',
|
|
70
|
+
summary: `Updated decision`,
|
|
71
|
+
content: `Replaced: "${oldContent.slice(0, 80)}"\n\nWith:\n**New content:** ${message}`,
|
|
72
|
+
relevantItems: 1
|
|
73
|
+
}
|
|
74
|
+
} else if (results.length > 0 && matchSimilarity < UPDATE_MIN_SIMILARITY) {
|
|
75
|
+
// D4: No confident match — store as new instead of updating wrong memory
|
|
76
|
+
return storeAsNew(ctx, memory, effectiveProject, message, topic, entities, 'No confident match to update (similarity too low)')
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
// Search failed, fall through
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Generic update — use lastStoredId
|
|
84
|
+
if (ctx.lastStoredId) {
|
|
85
|
+
const newId = await memory.updateDecision(
|
|
86
|
+
ctx.lastStoredId,
|
|
87
|
+
effectiveProject,
|
|
88
|
+
`Updated: ${topic.slice(0, 200)}`,
|
|
89
|
+
message,
|
|
90
|
+
entities.reasoning || 'Updated via brain tool',
|
|
91
|
+
{ tags: entities.technologies.length > 0 ? entities.technologies : ['updated'] }
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
ctx.setLastStored(newId, effectiveProject)
|
|
95
|
+
ctx.searchEngine.invalidateCache(effectiveProject)
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
action: 'stored',
|
|
99
|
+
summary: `Updated decision`,
|
|
100
|
+
content: `Previous decision replaced with:\n\n**Project:** ${effectiveProject}\n**New content:** ${message}`,
|
|
101
|
+
relevantItems: 1
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Fallback: store as new decision
|
|
106
|
+
return storeAsNew(ctx, memory, effectiveProject, message, topic, entities, 'No matching decision found to update')
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Phase 19 D4: Delete with higher similarity threshold
|
|
111
|
+
*/
|
|
112
|
+
export async function handleDeleteMemory(
|
|
113
|
+
ctx: HandlerContext,
|
|
114
|
+
message: string,
|
|
115
|
+
project: string | undefined,
|
|
116
|
+
entities: BrainExtractedEntities
|
|
117
|
+
): Promise<BrainResponse> {
|
|
118
|
+
const effectiveProject = project || ctx.lastStoredProject || DEFAULT_PROJECT
|
|
119
|
+
|
|
120
|
+
if (!isServicesInitialized()) {
|
|
121
|
+
return servicesNotReady()
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const memory = getMemoryService()
|
|
125
|
+
const topic = entities.topic || message
|
|
126
|
+
const hasSpecific = hasDescriptiveContent(message)
|
|
127
|
+
const lower = message.toLowerCase()
|
|
128
|
+
|
|
129
|
+
// BUG-006 T6: Bulk delete — "delete all memories for project X"
|
|
130
|
+
if (lower.includes('delete all') || lower.includes('remove all') || lower.includes('clear all')) {
|
|
131
|
+
const bulkProject = entities.project || project || ctx.lastStoredProject
|
|
132
|
+
if (bulkProject) {
|
|
133
|
+
try {
|
|
134
|
+
const decisions = await memory.chroma.store.getDecisionsByProject(bulkProject)
|
|
135
|
+
if (decisions.length === 0) {
|
|
136
|
+
return {
|
|
137
|
+
action: 'none',
|
|
138
|
+
summary: 'No memories found',
|
|
139
|
+
content: `No memories found for project "${bulkProject}".`,
|
|
140
|
+
relevantItems: 0
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
for (const d of decisions) {
|
|
144
|
+
await memory.deleteDecision(d.id)
|
|
145
|
+
}
|
|
146
|
+
ctx.searchEngine.invalidateCache(bulkProject)
|
|
147
|
+
return {
|
|
148
|
+
action: 'stored',
|
|
149
|
+
summary: `Bulk deleted ${decisions.length} memories`,
|
|
150
|
+
content: `Deleted all ${decisions.length} memories for project "${bulkProject}".`,
|
|
151
|
+
relevantItems: 0
|
|
152
|
+
}
|
|
153
|
+
} catch {
|
|
154
|
+
// Bulk delete failed, fall through to single-item delete
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (hasSpecific) {
|
|
160
|
+
try {
|
|
161
|
+
const results = await memory.searchRaw(topic, {
|
|
162
|
+
project: effectiveProject,
|
|
163
|
+
limit: 3,
|
|
164
|
+
minSimilarity: DELETE_MIN_SIMILARITY
|
|
165
|
+
}) as RawSearchResult[]
|
|
166
|
+
|
|
167
|
+
const first = results[0]
|
|
168
|
+
const matchId = first?.memory?.id || first?.decision?.id || first?.id
|
|
169
|
+
const matchSimilarity = first?.similarity || 0
|
|
170
|
+
|
|
171
|
+
if (results.length > 0 && matchId && matchSimilarity >= DELETE_MIN_SIMILARITY) {
|
|
172
|
+
const targetId = matchId
|
|
173
|
+
const content = first?.decision?.decision || first?.memory?.content?.slice(0, 100) || first?.content?.slice(0, 100) || ''
|
|
174
|
+
|
|
175
|
+
await memory.deleteDecision(targetId)
|
|
176
|
+
if (ctx.lastStoredId === targetId) ctx.setLastStored('', '')
|
|
177
|
+
|
|
178
|
+
// Invalidate cache
|
|
179
|
+
ctx.searchEngine.invalidateCache(effectiveProject)
|
|
180
|
+
|
|
181
|
+
return {
|
|
182
|
+
action: 'stored',
|
|
183
|
+
summary: `Deleted memory`,
|
|
184
|
+
content: `Deleted: "${content.slice(0, 100)}" (ID: ${targetId})`,
|
|
185
|
+
relevantItems: 0
|
|
186
|
+
}
|
|
187
|
+
} else if (results.length > 0 && matchSimilarity < DELETE_MIN_SIMILARITY) {
|
|
188
|
+
// D4: No confident match — try direct FTS5 content search as fallback
|
|
189
|
+
const memory = getMemoryService()
|
|
190
|
+
if (memory.fts5) {
|
|
191
|
+
const ftsResults = memory.fts5.search(topic, effectiveProject, 3)
|
|
192
|
+
if (ftsResults.length > 0) {
|
|
193
|
+
const ftsTarget = ftsResults[0]!
|
|
194
|
+
await memory.deleteDecision(ftsTarget.id)
|
|
195
|
+
if (ctx.lastStoredId === ftsTarget.id) ctx.setLastStored('', '')
|
|
196
|
+
ctx.searchEngine.invalidateCache(effectiveProject)
|
|
197
|
+
return {
|
|
198
|
+
action: 'stored',
|
|
199
|
+
summary: `Deleted memory`,
|
|
200
|
+
content: `Deleted: "${ftsTarget.content.slice(0, 100)}" (ID: ${ftsTarget.id})`,
|
|
201
|
+
relevantItems: 0
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
action: 'none',
|
|
207
|
+
summary: 'No confident match to delete',
|
|
208
|
+
content: `Found a possible match but similarity (${Math.round(matchSimilarity * 100)}%) is too low for safe deletion. Try being more specific about what to delete.`,
|
|
209
|
+
relevantItems: 0
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
} catch {
|
|
213
|
+
// Search failed, fall through
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Generic request — use lastStoredId
|
|
218
|
+
if (ctx.lastStoredId) {
|
|
219
|
+
try {
|
|
220
|
+
await memory.deleteDecision(ctx.lastStoredId)
|
|
221
|
+
const deletedId = ctx.lastStoredId
|
|
222
|
+
ctx.setLastStored('', '')
|
|
223
|
+
ctx.searchEngine.invalidateCache(effectiveProject)
|
|
224
|
+
return {
|
|
225
|
+
action: 'stored',
|
|
226
|
+
summary: `Deleted most recent memory`,
|
|
227
|
+
content: `Deleted memory (ID: ${deletedId})`,
|
|
228
|
+
relevantItems: 0
|
|
229
|
+
}
|
|
230
|
+
} catch {
|
|
231
|
+
// Deletion failed
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return {
|
|
236
|
+
action: 'none',
|
|
237
|
+
summary: 'No matching memory found to delete',
|
|
238
|
+
content: 'Could not find a memory matching your request. Try being more specific about what to delete.',
|
|
239
|
+
relevantItems: 0
|
|
240
|
+
}
|
|
241
|
+
}
|