opencode-fractal-memory 0.6.12 → 0.6.13

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.
@@ -2,7 +2,7 @@ import { memLog, memLogSimple, setSessionId } from "../logging";
2
2
  import { generateFileSummary, generateFileLabel, SOURCE_FILE_EXTENSIONS } from "../file-summary";
3
3
  import { distillRules, predictiveRateToolCall, applyScoreDecay } from "../hooks";
4
4
  import * as fs from "node:fs";
5
- export function createHookHandlers(store, client, memConfig, ruleCache, ruleCacheDirty, sessionInjectionLock, latestUserMessage) {
5
+ export function createHookHandlers(store, client, memConfig, ruleCache, ruleCacheDirty, sessionInjectionLock, latestUserMessage, managementServer) {
6
6
  return {
7
7
  "experimental.chat.system.transform": async (input, output) => {
8
8
  const sessionId = input.sessionID ?? `session-${Date.now()}`;
@@ -149,19 +149,26 @@ export function createHookHandlers(store, client, memConfig, ruleCache, ruleCach
149
149
  memLog("warn", "file-summary", "Failed to store file memory", { error: String(err) });
150
150
  }
151
151
  },
152
- "session.created": async (event) => {
153
- const sessionId = event.properties?.info?.id ?? "unknown";
154
- await store.createSessionMetrics(sessionId);
155
- setSessionId(sessionId);
156
- },
157
- "session.idle": async (event) => {
158
- const sessionId = event.properties?.sessionID ?? "unknown";
159
- await store.updateSessionMetrics(sessionId, { endedAt: Date.now(), status: "completed" });
160
- if (memConfig?.autoDistill?.enabled) {
161
- distillRules(store, memConfig.autoDistill, sessionId, client).then(msg => memLog("info", "auto-distill", msg)).catch(err => memLog("error", "auto-distill", "Failed", { error: String(err) }));
152
+ event: async (input) => {
153
+ const { type, properties } = input.event;
154
+ if (type === "session.created") {
155
+ const sessionId = properties.info?.id ?? "unknown";
156
+ await store.createSessionMetrics(sessionId);
157
+ setSessionId(sessionId);
158
+ managementServer.start();
159
+ }
160
+ else if (type === "session.idle") {
161
+ const sessionId = properties.sessionID ?? "unknown";
162
+ await store.updateSessionMetrics(sessionId, { endedAt: Date.now(), status: "completed" });
163
+ if (memConfig?.autoDistill?.enabled) {
164
+ distillRules(store, memConfig.autoDistill, sessionId, client).then(msg => memLog("info", "auto-distill", msg)).catch(err => memLog("error", "auto-distill", "Failed", { error: String(err) }));
165
+ }
166
+ if (memConfig?.predictiveRating?.enabled) {
167
+ applyScoreDecay(store, memConfig.predictiveRating).then(msg => memLog("info", "predictive-rating", msg)).catch(err => memLog("error", "predictive-rating", "Decay failed", { error: String(err) }));
168
+ }
162
169
  }
163
- if (memConfig?.predictiveRating?.enabled) {
164
- applyScoreDecay(store, memConfig.predictiveRating).then(msg => memLog("info", "predictive-rating", msg)).catch(err => memLog("error", "predictive-rating", "Decay failed", { error: String(err) }));
170
+ else if (type === "session.deleted") {
171
+ managementServer.stop();
165
172
  }
166
173
  },
167
174
  };
@@ -33,22 +33,16 @@ export const MemoryPlugin = async (ctx) => {
33
33
  const sessionInjectionLock = new Map();
34
34
  const latestUserMessage = { value: "" };
35
35
  const autoRetrieveHook = createAutoRetrieveIfEnabled(store, memConfig);
36
- const handlers = createHookHandlers(store, client, memConfig, ruleCache, ruleCacheDirty, sessionInjectionLock, latestUserMessage);
36
+ const handlers = createHookHandlers(store, client, memConfig, ruleCache, ruleCacheDirty, sessionInjectionLock, latestUserMessage, { start: ensureManagementServer, stop: stopManagementServer });
37
37
  const toolMap = createToolMap(store, journalTools, client);
38
38
  memLog("info", "init", "Plugin initialization completed", { totalDurationMs: perfNow() - t0 });
39
39
  return {
40
40
  ...handlers,
41
41
  ...(autoRetrieveHook || {}),
42
42
  tool: toolMap,
43
- "session.created": async (event) => {
44
- const existing = handlers["session.created"];
45
- if (existing) {
46
- await existing(event);
47
- }
48
- ensureManagementServer();
49
- },
50
- "session.deleted": async () => {
43
+ dispose: async () => {
51
44
  stopManagementServer();
45
+ await store.close();
52
46
  },
53
47
  };
54
48
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-fractal-memory",
3
- "version": "0.6.12",
3
+ "version": "0.6.13",
4
4
  "description": "Fractal memory system for OpenCode with semantic search and automatic compression.",
5
5
  "main": "dist/plugin.js",
6
6
  "exports": {