{"record":{"id":"97df036d35e05071","repo":"can1357/oh-my-pi","slug":"mnemopi-backend-is-not-initialised-for-this-sessio-97df03","errorCode":null,"errorMessage":"Mnemopi backend is not initialised for this session.","messagePattern":"Mnemopi backend is not initialised for this session\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/tools/memory-edit.ts","lineNumber":37,"sourceCode":"\treadonly label = \"Memory Edit\";\n\treadonly description = memoryEditDescription;\n\treadonly parameters = memoryEditSchema;\n\treadonly strict = true;\n\treadonly loadMode = \"discoverable\";\n\treadonly summary = \"Update, forget, or invalidate Mnemopi memories\";\n\n\tconstructor(private readonly session: ToolSession) {}\n\n\tstatic createIf(session: ToolSession): MemoryEditTool | null {\n\t\tconst backend = session.settings.get(\"memory.backend\");\n\t\tif (backend !== \"mnemopi\") return null;\n\t\treturn new MemoryEditTool(session);\n\t}\n\n\tasync execute(_id: string, params: MemoryEditParams): Promise<AgentToolResult> {\n\t\tconst state = this.session.getMnemopiSessionState?.();\n\t\tif (!state) {\n\t\t\tthrow new Error(\"Mnemopi backend is not initialised for this session.\");\n\t\t}\n\t\tif (params.op === \"update\" && params.content === undefined && params.importance === undefined) {\n\t\t\tthrow new Error(\"memory_edit update requires content or importance.\");\n\t\t}\n\n\t\tconst importance = params.importance === undefined ? undefined : Math.max(0, Math.min(1, params.importance));\n\t\tconst result = state.editScopedMemory(params.op, params.id, {\n\t\t\tcontent: params.content,\n\t\t\timportance,\n\t\t\treplacementId: params.replacement_id,\n\t\t});\n\t\tconst location = result.bank ? ` in bank ${result.bank}${result.store ? ` (${result.store})` : \"\"}` : \"\";\n\t\tconst text =\n\t\t\tresult.status === \"not_found\"\n\t\t\t\t? `Memory ${params.id} was not found${location}.`\n\t\t\t\t: result.status === \"not_editable\"\n\t\t\t\t\t? `Memory ${params.id} is a read-only fact${location}; it cannot be edited. Read it with memory://${params.id}.`\n\t\t\t\t\t: `Memory ${params.id} ${result.status}${location}.`;","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/tools/memory-edit.ts#L19-L55","documentation":"The memory_edit tool operates exclusively on the Mnemopi memory store: execute() immediately fetches session.getMnemopiSessionState() and throws this Error if it is absent. The tool is only instantiated when memory.backend === \"mnemopi\", so hitting this means the backend was configured but the session state was never successfully initialized (or was torn down).","triggerScenarios":"Executing memory_edit in a session where memory.backend === \"mnemopi\" but getMnemopiSessionState() returns undefined/null — Mnemopi init failed at startup, the backend was closed, or a custom session object lacks the accessor.","commonSituations":"Mnemopi DB unavailable/locked at session start while the setting remained \"mnemopi\"; backend crash mid-session; SDK embedding with a session that doesn't implement getMnemopiSessionState.","solutions":["Check logs for the Mnemopi initialization failure and fix it (config, DB path, permissions), then restart the session.","Switch memory.backend to \"local\" if you don't run Mnemopi (memory_edit is mnemopi-only anyway).","Re-open the Mnemopi store if it was closed mid-session.","If embedding, provide getMnemopiSessionState returning initialized state."],"exampleFix":"// before: setting says mnemopi but backend init failed\n\"memory.backend\": \"mnemopi\" // -> state undefined\n// after: repair Mnemopi startup or fall back to a working backend\n\"memory.backend\": \"local\"","handlingStrategy":"validation","validationCode":"if (settings.get(\"memory.backend\") === \"mnemopi\" && !session.getMnemopiSessionState?.()) {\n  throw new Error(\"memory_edit requires an initialised Mnemopi backend.\");\n}","typeGuard":"function hasMnemopiState(session: ToolSession): boolean {\n  return typeof session.getMnemopiSessionState === \"function\" &&\n    Boolean(session.getMnemopiSessionState());\n}","tryCatchPattern":"try {\n  await memoryEditTool.execute(id, params);\n} catch (err) {\n  if (err instanceof Error && err.message.includes(\"Mnemopi backend is not initialised\")) {\n    // re-init Mnemopi or surface a degraded-memory-mode message\n  } else {\n    throw err;\n  }\n}","preventionTips":["Confirm Mnemopi initialized before registering/invoking memory tools.","Watch for mid-session backend shutdowns and restart the session if needed.","Align memory.backend with deployed infrastructure."],"tags":["memory-backend","mnemopi","initialization","configuration"],"backgroundTag":"backend-not-initialised","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}