claude-brain 0.29.0 → 0.29.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.29.0
1
+ 0.29.2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-brain",
3
- "version": "0.29.0",
3
+ "version": "0.29.2",
4
4
  "description": "Local development assistant bridging Obsidian vaults with Claude Code via MCP",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -148,7 +148,7 @@ export async function loadConfig(basePath: string = process.cwd()): Promise<Conf
148
148
  const fileConfig = loadFromFile(basePath)
149
149
  const envConfig = loadFromEnv()
150
150
 
151
- const merged = mergeConfigs(defaultConfig as Partial<Config>, envConfig, fileConfig)
151
+ const merged = mergeConfigs(defaultConfig as Partial<Config>, fileConfig, envConfig)
152
152
 
153
153
  const result = ConfigSchema.safeParse(merged)
154
154
 
@@ -211,7 +211,7 @@ export class PassiveClassifier {
211
211
  const packages = match[1]?.trim()
212
212
  if (packages) {
213
213
  return {
214
- type: 'progress',
214
+ type: 'decision',
215
215
  confidence: 0.85,
216
216
  content: `Installed package(s): ${packages}`,
217
217
  project: this.extractProjectFromCwd(input.cwd),
@@ -213,9 +213,32 @@ export class ModelManager {
213
213
  }
214
214
 
215
215
  /**
216
- * Unload all models (for cleanup/testing)
216
+ * Unload a single model, releasing its ONNX session to free native memory.
217
217
  */
218
- unloadAll(): void {
218
+ async unloadModel(task: ModelTask): Promise<void> {
219
+ const loaded = this.loadedModels.get(task)
220
+ if (!loaded) return
221
+
222
+ try {
223
+ await loaded.session?.release?.()
224
+ } catch (err) {
225
+ this.logger.warn({ error: err, task }, 'Failed to release ONNX session')
226
+ }
227
+ this.loadedModels.delete(task)
228
+ this.logger.debug({ task }, 'Model unloaded')
229
+ }
230
+
231
+ /**
232
+ * Unload all models, releasing ONNX sessions to free native memory.
233
+ */
234
+ async unloadAll(): Promise<void> {
235
+ for (const [task, loaded] of this.loadedModels) {
236
+ try {
237
+ await loaded.session?.release?.()
238
+ } catch (err) {
239
+ this.logger.warn({ error: err, task }, 'Failed to release ONNX session during unloadAll')
240
+ }
241
+ }
219
242
  this.loadedModels.clear()
220
243
  this.logger.debug('All models unloaded')
221
244
  }
@@ -30,7 +30,7 @@ export class McpProxyServer {
30
30
 
31
31
  this.server = new Server(
32
32
  { name: opts.serverName, version: opts.serverVersion },
33
- { capabilities: { tools: {} } }
33
+ { capabilities: { tools: {}, prompts: {}, resources: {} } }
34
34
  )
35
35
 
36
36
  this.setupHandlers()
@@ -697,9 +697,9 @@ export async function shutdownServices(): Promise<void> {
697
697
  }
698
698
  }
699
699
 
700
- // Unload SLM models
700
+ // Unload SLM models (releases ONNX sessions)
701
701
  if (services.modelManager) {
702
- services.modelManager.unloadAll()
702
+ await services.modelManager.unloadAll()
703
703
  serviceLogger.info('SLM models unloaded')
704
704
  }
705
705