{"version":3,"file":"memorySearchTool.mjs","sources":["../../../../src/tools/memory/memorySearchTool.ts"],"sourcesContent":["/**\n * `memory_search` — the mandatory-recall tool.\n *\n * Port of upstream `createMemorySearchTool` at\n * `upstream reference`. The tool description\n * is verbatim \"Mandatory recall step...\" from upstream — this is the load-\n * bearing line that turns \"the agent may recall\" into \"the agent will recall\".\n */\nimport { tool } from '@langchain/core/tools';\nimport {\n  MEMORY_SEARCH_DESCRIPTION,\n  MEMORY_SEARCH_TOOL_NAME,\n} from '@/memory/constants';\nimport {\n  buildMemorySearchUnavailableResult,\n  clampResultsByInjectedChars,\n  MemorySearchSchema,\n  type MemorySearchToolResult,\n  type MemoryToolBinding,\n} from './shared';\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function createMemorySearchTool(binding: MemoryToolBinding) {\n  return tool(\n    async (args): Promise<string> => {\n      try {\n        const entries = await binding.backend.search(\n          binding.scope,\n          args.query,\n          {\n            maxResults: args.maxResults,\n            minScore: args.minScore,\n            mmr: binding.searchOptions?.mmr,\n            temporalDecay: binding.searchOptions?.temporalDecay,\n            citations: binding.searchOptions?.citations,\n          }\n        );\n        const clamped = clampResultsByInjectedChars(\n          entries,\n          binding.maxInjectedChars\n        );\n\n        // [phase2-recall-tracking] debug: fire-and-forget best-effort record\n        if (binding.recallTracker && clamped.length > 0) {\n          void binding.recallTracker\n            .record({\n              agentId: binding.scope.agentId,\n              query: args.query,\n              hits: clamped.map((e) => ({\n                id: e.id,\n                path: e.path,\n                score: e.score,\n              })),\n            })\n            .catch(() => undefined);\n        }\n\n        const payload: MemorySearchToolResult = {\n          results: clamped.map((entry) => ({\n            id: entry.id,\n            path: entry.path,\n            content: entry.content,\n            score: entry.score,\n            createdAt: entry.createdAt,\n            citation: entry.citation,\n          })),\n        };\n        return JSON.stringify(payload);\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err);\n        return JSON.stringify(buildMemorySearchUnavailableResult(message));\n      }\n    },\n    {\n      name: MEMORY_SEARCH_TOOL_NAME,\n      description: MEMORY_SEARCH_DESCRIPTION,\n      schema: MemorySearchSchema,\n    }\n  );\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;AAOG;AAcH;AACM,SAAU,sBAAsB,CAAC,OAA0B,EAAA;AAC/D,IAAA,OAAO,IAAI,CACT,OAAO,IAAI,KAAqB;AAC9B,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAC1C,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,KAAK,EACV;gBACE,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,GAAG,EAAE,OAAO,CAAC,aAAa,EAAE,GAAG;AAC/B,gBAAA,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,aAAa;AACnD,gBAAA,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS;AAC5C,aAAA,CACF;YACD,MAAM,OAAO,GAAG,2BAA2B,CACzC,OAAO,EACP,OAAO,CAAC,gBAAgB,CACzB;;YAGD,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,KAAK,OAAO,CAAC;AACV,qBAAA,MAAM,CAAC;AACN,oBAAA,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;oBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;wBACxB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;AACf,qBAAA,CAAC,CAAC;iBACJ;AACA,qBAAA,KAAK,CAAC,MAAM,SAAS,CAAC;YAC3B;AAEA,YAAA,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;oBAC/B,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,iBAAA,CAAC,CAAC;aACJ;AACD,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YAChE,OAAO,IAAI,CAAC,SAAS,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;QACpE;AACF,IAAA,CAAC,EACD;AACE,QAAA,IAAI,EAAE,uBAAuB;AAC7B,QAAA,WAAW,EAAE,yBAAyB;AACtC,QAAA,MAAM,EAAE,kBAAkB;AAC3B,KAAA,CACF;AACH;;;;"}