@remnic/core 1.1.4 → 1.1.5
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/dist/access-cli.js +16 -16
- package/dist/access-http.d.ts +7 -7
- package/dist/access-http.js +10 -10
- package/dist/access-mcp.d.ts +7 -7
- package/dist/access-mcp.js +9 -9
- package/dist/access-schema.d.ts +89 -4
- package/dist/access-schema.js +1 -1
- package/dist/{access-service-CtXFnprR.d.ts → access-service-CWYIkMwY.d.ts} +16 -12
- package/dist/access-service.d.ts +7 -7
- package/dist/access-service.js +7 -7
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +6 -6
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +3 -3
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/calibration.d.ts +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +2 -2
- package/dist/causal-consolidation.js +3 -3
- package/dist/{chunk-F5VQOQ2E.js → chunk-3YBRSJ52.js} +2 -2
- package/dist/{chunk-Y4A6M3B6.js → chunk-46AIFPQM.js} +2 -2
- package/dist/{chunk-CUI2STX6.js → chunk-4CVIF7UZ.js} +12 -6
- package/dist/chunk-4CVIF7UZ.js.map +1 -0
- package/dist/{chunk-MUELDH4F.js → chunk-57SNKQNS.js} +2 -2
- package/dist/{chunk-EGEPUGN4.js → chunk-5XVDDCMH.js} +2 -2
- package/dist/{chunk-NZS2BLTP.js → chunk-7NFZWXAY.js} +711 -22
- package/dist/chunk-7NFZWXAY.js.map +1 -0
- package/dist/{chunk-XRCYKJ3V.js → chunk-DKVEJTLC.js} +61 -18
- package/dist/chunk-DKVEJTLC.js.map +1 -0
- package/dist/{chunk-AEMBDV7M.js → chunk-DTDB6YS2.js} +13 -8
- package/dist/chunk-DTDB6YS2.js.map +1 -0
- package/dist/{chunk-AGZHRWPT.js → chunk-ERWKQVCX.js} +2 -2
- package/dist/{chunk-TIFRGAKO.js → chunk-FG5R5AQF.js} +5 -5
- package/dist/{chunk-52PDY6GD.js → chunk-FLHPNR5W.js} +2 -2
- package/dist/{chunk-JWSENLQI.js → chunk-H62HCANJ.js} +3 -1
- package/dist/{chunk-JWSENLQI.js.map → chunk-H62HCANJ.js.map} +1 -1
- package/dist/{chunk-W7WWT4FJ.js → chunk-HPJPGIGN.js} +2 -2
- package/dist/{chunk-ZIBOQULP.js → chunk-KCZZLFW5.js} +2 -2
- package/dist/{chunk-47WOM4YW.js → chunk-MJPNOMY4.js} +2 -2
- package/dist/{chunk-HIRKCQGF.js → chunk-OAIXBFAH.js} +17 -17
- package/dist/{chunk-HIRKCQGF.js.map → chunk-OAIXBFAH.js.map} +1 -1
- package/dist/{chunk-RILIVK4O.js → chunk-RICG4UNC.js} +28 -2
- package/dist/chunk-RICG4UNC.js.map +1 -0
- package/dist/{chunk-SMA4IMHV.js → chunk-SGTA3HJC.js} +3 -3
- package/dist/{chunk-VTJVUHRK.js → chunk-SRBJUAMP.js} +1 -1
- package/dist/chunk-SRBJUAMP.js.map +1 -0
- package/dist/{chunk-V7TEH5I2.js → chunk-TMPLRVHD.js} +2 -2
- package/dist/{chunk-43EKP2UK.js → chunk-TOC3VOOF.js} +1 -1
- package/dist/{chunk-43EKP2UK.js.map → chunk-TOC3VOOF.js.map} +1 -1
- package/dist/{chunk-USFPPRAF.js → chunk-WMK6YP7C.js} +5 -3
- package/dist/chunk-WMK6YP7C.js.map +1 -0
- package/dist/{chunk-LW2NMHDW.js → chunk-Y6EPN6XF.js} +2 -2
- package/dist/{chunk-XQ4EJLUD.js → chunk-Z665HFAD.js} +2 -2
- package/dist/{cli-lMql2FCr.d.ts → cli-CWLyGroU.d.ts} +4 -4
- package/dist/cli.d.ts +8 -8
- package/dist/cli.js +20 -20
- package/dist/{codex-materialize-CQlLTzke.d.ts → codex-materialize-XRen3WAz.d.ts} +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/{engine-O6YWKQM3.js → engine-WJ7K6AZ2.js} +4 -4
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +3 -3
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +6 -6
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.js +38 -24
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/{memory-governance-JZHZDOLN.js → memory-governance-KXMAURFF.js} +4 -4
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/{memory-projection-store-CY8TU40w.d.ts → memory-projection-store-ConH7gNj.d.ts} +1 -1
- package/dist/memory-projection-store.d.ts +2 -2
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +6 -6
- package/dist/{orchestrator-ChkesB8U.d.ts → orchestrator-BHkiEBbd.d.ts} +36 -11
- package/dist/orchestrator.d.ts +6 -6
- package/dist/orchestrator.js +11 -11
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/{port-hqGnoStS.d.ts → port-DZHdlUId.d.ts} +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -2
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -2
- package/dist/recall-xray.js +2 -2
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/schemas.d.ts +32 -32
- package/dist/{semantic-consolidation-ByBXb-sf.d.ts → semantic-consolidation-Cxj-inGC.d.ts} +2 -2
- package/dist/semantic-consolidation.d.ts +3 -3
- package/dist/semantic-consolidation.js +3 -3
- package/dist/semantic-rule-promotion.js +3 -3
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +3 -3
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +2 -2
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +3 -3
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/types-B49NzJ5q.d.ts +2707 -0
- package/dist/types.d.ts +1 -2668
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-AEMBDV7M.js.map +0 -1
- package/dist/chunk-CUI2STX6.js.map +0 -1
- package/dist/chunk-NZS2BLTP.js.map +0 -1
- package/dist/chunk-RILIVK4O.js.map +0 -1
- package/dist/chunk-USFPPRAF.js.map +0 -1
- package/dist/chunk-VTJVUHRK.js.map +0 -1
- package/dist/chunk-XRCYKJ3V.js.map +0 -1
- /package/dist/{chunk-F5VQOQ2E.js.map → chunk-3YBRSJ52.js.map} +0 -0
- /package/dist/{chunk-Y4A6M3B6.js.map → chunk-46AIFPQM.js.map} +0 -0
- /package/dist/{chunk-MUELDH4F.js.map → chunk-57SNKQNS.js.map} +0 -0
- /package/dist/{chunk-EGEPUGN4.js.map → chunk-5XVDDCMH.js.map} +0 -0
- /package/dist/{chunk-AGZHRWPT.js.map → chunk-ERWKQVCX.js.map} +0 -0
- /package/dist/{chunk-TIFRGAKO.js.map → chunk-FG5R5AQF.js.map} +0 -0
- /package/dist/{chunk-52PDY6GD.js.map → chunk-FLHPNR5W.js.map} +0 -0
- /package/dist/{chunk-W7WWT4FJ.js.map → chunk-HPJPGIGN.js.map} +0 -0
- /package/dist/{chunk-ZIBOQULP.js.map → chunk-KCZZLFW5.js.map} +0 -0
- /package/dist/{chunk-47WOM4YW.js.map → chunk-MJPNOMY4.js.map} +0 -0
- /package/dist/{chunk-SMA4IMHV.js.map → chunk-SGTA3HJC.js.map} +0 -0
- /package/dist/{chunk-V7TEH5I2.js.map → chunk-TMPLRVHD.js.map} +0 -0
- /package/dist/{chunk-LW2NMHDW.js.map → chunk-Y6EPN6XF.js.map} +0 -0
- /package/dist/{chunk-XQ4EJLUD.js.map → chunk-Z665HFAD.js.map} +0 -0
- /package/dist/{engine-O6YWKQM3.js.map → engine-WJ7K6AZ2.js.map} +0 -0
- /package/dist/{memory-governance-JZHZDOLN.js.map → memory-governance-KXMAURFF.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/access-mcp.ts"],"sourcesContent":["import type { Readable, Writable } from \"node:stream\";\nimport { readFile } from \"node:fs/promises\";\nimport { randomUUID } from \"node:crypto\";\nimport { EngramAccessInputError, type EngramAccessService, type EngramAccessRecallResponse } from \"./access-service.js\";\nimport {\n validateRequest,\n type CapsuleExportRequest,\n type CapsuleImportRequest,\n type CapsuleListRequest,\n type SchemaName,\n type SchemaTypeFor,\n} from \"./access-schema.js\";\nimport { readEnvVar } from \"./runtime/env.js\";\nimport type { RecallDisclosure, RecallPlanMode } from \"./types.js\";\nimport { validateBriefingFormat } from \"./briefing.js\";\nimport { buildCitationGuidance, type CitationMetadata } from \"./citations.js\";\nimport { expandTildePath } from \"./utils/path.js\";\n\ntype JsonRpcId = string | number | null;\n\ntype JsonRpcRequest = {\n jsonrpc?: string;\n id?: JsonRpcId;\n method?: string;\n params?: Record<string, unknown>;\n};\n\ntype McpTool = {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n};\n\nconst MCP_PROTOCOL_VERSION = \"2024-11-05\";\nconst LEGACY_MCP_PREFIX = \"engram.\";\nconst CANONICAL_MCP_PREFIX = \"remnic.\";\n\nfunction toCanonicalToolName(name: string): string {\n return name.startsWith(LEGACY_MCP_PREFIX)\n ? `${CANONICAL_MCP_PREFIX}${name.slice(LEGACY_MCP_PREFIX.length)}`\n : name;\n}\n\nfunction toLegacyToolName(name: string): string {\n return name.startsWith(CANONICAL_MCP_PREFIX)\n ? `${LEGACY_MCP_PREFIX}${name.slice(CANONICAL_MCP_PREFIX.length)}`\n : name;\n}\n\nfunction withToolAliases(tool: McpTool): McpTool[] {\n const canonicalName = toCanonicalToolName(tool.name);\n const canonicalTool = canonicalName === tool.name ? tool : { ...tool, name: canonicalName };\n if (canonicalName === tool.name) return [canonicalTool];\n return [canonicalTool, tool];\n}\n\nconst STRICT_MCP_SCHEMA_KEYS: Partial<Record<SchemaName, readonly string[]>> = {\n capsuleExport: [\n \"name\",\n \"namespace\",\n \"since\",\n \"includeKinds\",\n \"peerIds\",\n \"includeTranscripts\",\n \"encrypt\",\n ],\n capsuleImport: [\"archivePath\", \"namespace\", \"mode\"],\n capsuleList: [\"namespace\"],\n};\n\nfunction parseMcpRequest<N extends SchemaName>(\n schemaName: N,\n args: Record<string, unknown>,\n): SchemaTypeFor<N> {\n const allowedKeys = STRICT_MCP_SCHEMA_KEYS[schemaName];\n if (allowedKeys) {\n const allowed = new Set(allowedKeys);\n const unexpected = Object.keys(args).filter((key) => !allowed.has(key));\n if (unexpected.length > 0) {\n throw new EngramAccessInputError(\n `request validation failed: (root): Unrecognized key(s) in object: ${unexpected.join(\", \")}`,\n );\n }\n }\n const validation = validateRequest<SchemaTypeFor<N>>(schemaName, args);\n if (validation.success) return validation.data;\n const details = validation.error.details\n .map((detail) => `${detail.field}: ${detail.message}`)\n .join(\"; \");\n throw new EngramAccessInputError(\n details.length > 0\n ? `${validation.error.error}: ${details}`\n : validation.error.error,\n );\n}\n\nasync function getMcpServerVersion(): Promise<string> {\n const envVersion =\n readEnvVar(\"OPENCLAW_ENGRAM_VERSION\")?.trim() ||\n readEnvVar(\"npm_package_version\")?.trim();\n if (envVersion) return envVersion;\n try {\n const pkgPath = new URL(\"../package.json\", import.meta.url);\n const raw = await readFile(pkgPath, \"utf-8\");\n const parsed = JSON.parse(raw) as { version?: string };\n return parsed.version?.trim() || \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nexport class EngramMcpServer {\n private buffer = Buffer.alloc(0);\n private flushTask: Promise<void> | null = null;\n private readonly tools: McpTool[];\n private readonly authenticatedPrincipal?: string;\n /**\n * MCP client info keyed by server-assigned session ID. On each `initialize`\n * handshake the server generates a UUID, stores the client's clientInfo\n * against it, and returns the ID as `Mcp-Session-Id` in the response\n * metadata. Subsequent requests from the same client include this header,\n * allowing per-session clientInfo lookup without cross-session leaks.\n */\n private clientInfoBySession = new Map<string, { name: string; version?: string }>();\n /**\n * Session IDs generated during initialize, keyed by caller-supplied correlation\n * ID (unique per HTTP request) to avoid collisions when multiple clients send\n * initialize with the same JSON-RPC id concurrently.\n */\n private initSessionIds = new Map<string, string>();\n\n /** Whether oai-mem-citation guidance is explicitly enabled via config. */\n private readonly citationsEnabled: boolean;\n /** Whether to auto-enable citations for Codex adapter connections. */\n private readonly citationsAutoDetect: boolean;\n\n constructor(\n private readonly service: EngramAccessService,\n options: { principal?: string; citationsEnabled?: boolean; citationsAutoDetect?: boolean } = {},\n ) {\n this.citationsEnabled = options.citationsEnabled === true;\n this.citationsAutoDetect = options.citationsAutoDetect !== false;\n this.authenticatedPrincipal =\n options.principal?.trim() ||\n readEnvVar(\"OPENCLAW_ENGRAM_ACCESS_PRINCIPAL\")?.trim() ||\n undefined;\n this.tools = [\n {\n name: \"engram.recall\",\n description: \"Recall Engram context for a query.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n sessionKey: { type: \"string\" },\n namespace: { type: \"string\" },\n topK: { type: \"number\" },\n mode: { type: \"string\", enum: [\"auto\", \"no_recall\", \"minimal\", \"full\", \"graph_mode\"] },\n includeDebug: { type: \"boolean\" },\n // Recall disclosure depth (issue #677). Default `chunk` when\n // omitted. Section/raw payload shaping ships in PR 2; this PR\n // wires the field end-to-end so clients can already pass it\n // without it being silently dropped.\n disclosure: { type: \"string\", enum: [\"chunk\", \"section\", \"raw\"] },\n cwd: { type: \"string\", description: \"Working directory for auto git-context resolution.\" },\n projectTag: { type: \"string\", description: \"Project tag for non-git project scoping (e.g. 'blend-supply').\" },\n asOf: {\n type: \"string\",\n description:\n \"Historical recall pin (issue #680). ISO 8601 timestamp; when set, the recall returns the corpus as it existed at this instant.\",\n },\n tags: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Filter recall results to memories whose frontmatter tags match (issue #689).\",\n },\n tagMatch: {\n type: \"string\",\n enum: [\"any\", \"all\"],\n description: \"Tag-filter match mode. 'any' (default) admits results with at least one filter tag; 'all' requires every filter tag.\",\n },\n },\n required: [\"query\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.recall_explain\",\n description: \"Return the last recall snapshot for a session or the most recent one.\",\n inputSchema: {\n type: \"object\",\n properties: {\n sessionKey: { type: \"string\" },\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.set_coding_context\",\n description:\n \"Attach a coding-agent context (project / branch) to a session so recall routes to a project- / branch-scoped namespace (issue #569). For MCP clients that do not ship cwd automatically (Cursor, generic agents, etc.). Also aliased as remnic.set_coding_context. Pass codingContext: null to clear. Alternatively, pass just a projectTag for non-git project scoping (e.g. OpenClaw channels).\",\n inputSchema: {\n type: \"object\",\n properties: {\n sessionKey: {\n type: \"string\",\n description: \"Session identifier the context should attach to.\",\n },\n codingContext: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: {\n projectId: { type: \"string\", description: \"Stable project id (origin:<hex> or root:<hex>).\" },\n branch: { type: [\"string\", \"null\"], description: \"Current branch, or null in detached HEAD.\" },\n rootPath: { type: \"string\", description: \"Absolute path to the repo root.\" },\n defaultBranch: { type: [\"string\", \"null\"], description: \"Default branch (usually main/master), or null when unknown.\" },\n },\n required: [\"projectId\", \"branch\", \"rootPath\", \"defaultBranch\"],\n additionalProperties: false,\n },\n ],\n description: \"The context to attach, or null to clear. Omit when using projectTag instead.\",\n },\n projectTag: {\n type: \"string\",\n description:\n \"Arbitrary project tag for non-git project scoping (e.g. 'blend-supply'). \" +\n \"Creates a coding context with projectId 'tag:<projectTag>'. \" +\n \"Use instead of codingContext when the session isn't tied to a specific git repo.\",\n },\n },\n required: [\"sessionKey\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.recall_tier_explain\",\n description:\n \"Return a structured tier-explain payload for the last direct-answer-eligible recall (issue #518). Orthogonal to engram.recall_explain, which returns a graph-path explanation.\",\n inputSchema: {\n type: \"object\",\n properties: {\n sessionKey: {\n type: \"string\",\n description: \"Optional session key. Omit to read the most recent snapshot.\",\n },\n namespace: {\n type: \"string\",\n description: \"Optional namespace to scope the returned snapshot.\",\n },\n },\n additionalProperties: false,\n },\n },\n {\n // Registered as `engram.recall_xray`; `withToolAliases` below\n // emits the canonical `remnic.recall_xray` alias automatically\n // (dual-naming invariant for every new MCP tool).\n name: \"engram.recall_xray\",\n description:\n \"Run a recall with X-ray capture enabled and return the unified per-result attribution snapshot (tier + audit + MMR + filters in one view). Issue #570.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Query to recall against. Required; non-empty.\",\n },\n sessionKey: {\n type: \"string\",\n description: \"Optional session key to scope the recall.\",\n },\n namespace: {\n type: \"string\",\n description:\n \"Optional namespace. Enforced against the caller's principal; a mismatch yields snapshotFound:false.\",\n },\n budget: {\n type: \"integer\",\n minimum: 1,\n description:\n \"Optional positive-integer override for the recall character budget.\",\n },\n disclosure: {\n type: \"string\",\n enum: [\"chunk\", \"section\", \"raw\"],\n description:\n \"Optional disclosure depth for X-ray telemetry (issue #677). When set, populates the per-disclosure token-spend summary on each result.\",\n },\n },\n required: [\"query\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.day_summary\",\n description:\n \"Generate a structured end-of-day summary. When memories is omitted or empty, auto-gathers today's facts and hourly summaries from storage.\",\n inputSchema: {\n type: \"object\",\n properties: {\n memories: { type: \"string\" },\n sessionKey: { type: \"string\" },\n namespace: { type: \"string\" },\n },\n required: [],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.capsule_export\",\n description: \"Export a portable Remnic capsule archive from the namespace-scoped memory store.\",\n inputSchema: {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n description: \"Capsule id (alphanumeric with single dashes, max 64 characters).\",\n },\n namespace: { type: \"string\" },\n since: {\n type: \"string\",\n description: \"Only include files modified on or after this ISO 8601 timestamp.\",\n },\n includeKinds: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Optional top-level directory allow-list.\",\n },\n peerIds: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Optional peer id allow-list for the peers/ subtree.\",\n },\n includeTranscripts: { type: \"boolean\" },\n encrypt: { type: \"boolean\" },\n },\n required: [\"name\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.capsule_import\",\n description: \"Import a Remnic capsule archive into the namespace-scoped memory store.\",\n inputSchema: {\n type: \"object\",\n properties: {\n archivePath: {\n type: \"string\",\n description: \"Path to a .capsule.json.gz or .capsule.json.gz.enc archive.\",\n },\n namespace: { type: \"string\" },\n mode: {\n type: \"string\",\n enum: [\"skip\", \"overwrite\", \"fork\"],\n description: \"Conflict handling mode. Defaults to skip.\",\n },\n },\n required: [\"archivePath\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.capsule_list\",\n description: \"List capsule archives in the namespace-scoped capsule store.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_governance_run\",\n description: \"Run Remnic memory governance in a bounded shadow/apply pass.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n mode: { type: \"string\", enum: [\"shadow\", \"apply\"] },\n recentDays: { type: \"number\" },\n maxMemories: { type: \"number\" },\n batchSize: { type: \"number\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.procedure_mining_run\",\n description:\n \"Run procedural memory mining from causal trajectories (issue #519). Respects procedural.enabled; writes under procedures/ when clusters qualify.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.pattern_reinforcement_run\",\n description:\n \"Run the pattern-reinforcement maintenance job (issue #687 PR 2/4). Clusters duplicate non-procedural memories by normalized content, promotes the most-recent member to canonical, and supersedes the older duplicates. Gated on patternReinforcementEnabled and the patternReinforcementCadenceMs floor — pass force=true to bypass the cadence for an ad-hoc operator run.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n force: { type: \"boolean\" },\n },\n additionalProperties: false,\n },\n },\n {\n // The canonical `remnic.procedural_stats` alias is added automatically\n // by `withToolAliases` — the dual-naming invariant keeps both names\n // alive for the legacy surface.\n name: \"engram.procedural_stats\",\n description:\n \"Procedural memory stats (issue #567): counts by status, recent write activity, and the active procedural.* config. Read-only, namespace-scoped.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_get\",\n description: \"Fetch one Remnic memory by id.\",\n inputSchema: {\n type: \"object\",\n properties: {\n memoryId: { type: \"string\" },\n namespace: { type: \"string\" },\n },\n required: [\"memoryId\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_timeline\",\n description: \"Fetch one Remnic memory timeline by id.\",\n inputSchema: {\n type: \"object\",\n properties: {\n memoryId: { type: \"string\" },\n namespace: { type: \"string\" },\n limit: { type: \"number\" },\n },\n required: [\"memoryId\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_store\",\n description: \"Store an explicit Remnic memory through the access layer.\",\n inputSchema: {\n type: \"object\",\n properties: {\n schemaVersion: { type: \"number\" },\n idempotencyKey: { type: \"string\" },\n dryRun: { type: \"boolean\" },\n sessionKey: { type: \"string\" },\n content: { type: \"string\" },\n category: { type: \"string\" },\n confidence: { type: \"number\" },\n namespace: { type: \"string\" },\n tags: { type: \"array\", items: { type: \"string\" } },\n entityRef: { type: \"string\" },\n ttl: { type: \"string\" },\n sourceReason: { type: \"string\" },\n },\n required: [\"content\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.suggestion_submit\",\n description: \"Queue a suggested Remnic memory for review.\",\n inputSchema: {\n type: \"object\",\n properties: {\n schemaVersion: { type: \"number\" },\n idempotencyKey: { type: \"string\" },\n dryRun: { type: \"boolean\" },\n sessionKey: { type: \"string\" },\n content: { type: \"string\" },\n category: { type: \"string\" },\n confidence: { type: \"number\" },\n namespace: { type: \"string\" },\n tags: { type: \"array\", items: { type: \"string\" } },\n entityRef: { type: \"string\" },\n ttl: { type: \"string\" },\n sourceReason: { type: \"string\" },\n },\n required: [\"content\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.entity_get\",\n description: \"Fetch one Engram entity by name.\",\n inputSchema: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n namespace: { type: \"string\" },\n },\n required: [\"name\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.review_queue_list\",\n description: \"Fetch the latest Engram review queue artifact bundle.\",\n inputSchema: {\n type: \"object\",\n properties: {\n runId: { type: \"string\" },\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.observe\",\n description: \"Feed conversation messages into Engram's memory pipeline (LCM archive + extraction).\",\n inputSchema: {\n type: \"object\",\n properties: {\n sessionKey: { type: \"string\", description: \"Conversation session identifier\" },\n messages: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n role: { type: \"string\", enum: [\"user\", \"assistant\"] },\n content: { type: \"string\" },\n },\n required: [\"role\", \"content\"],\n },\n description: \"Conversation messages to observe\",\n },\n namespace: { type: \"string\" },\n skipExtraction: { type: \"boolean\" },\n cwd: { type: \"string\", description: \"Working directory for auto git-context resolution.\" },\n projectTag: { type: \"string\", description: \"Project tag for non-git project scoping (e.g. 'blend-supply').\" },\n },\n required: [\"sessionKey\", \"messages\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.lcm_search\",\n description: \"Search the LCM conversation archive for matching content.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"Search query\" },\n sessionKey: { type: \"string\", description: \"Optional session filter\" },\n namespace: { type: \"string\" },\n limit: { type: \"number\", description: \"Max results to return\" },\n },\n required: [\"query\"],\n additionalProperties: false,\n },\n },\n // ── Continuity / Identity tools ─────────────────────────────────────\n {\n name: \"engram.continuity_audit_generate\",\n description: \"Generate a deterministic identity continuity audit report (weekly/monthly).\",\n inputSchema: {\n type: \"object\",\n properties: {\n period: { type: \"string\", enum: [\"weekly\", \"monthly\"] },\n key: { type: \"string\", description: \"Period key (weekly: YYYY-Www, monthly: YYYY-MM). Defaults to current.\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.continuity_incident_open\",\n description: \"Create a new continuity incident record in append-only storage.\",\n inputSchema: {\n type: \"object\",\n properties: {\n symptom: { type: \"string\", description: \"Observed continuity failure symptom.\" },\n namespace: { type: \"string\" },\n triggerWindow: { type: \"string\", description: \"Time window when incident occurred.\" },\n suspectedCause: { type: \"string\" },\n },\n required: [\"symptom\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.continuity_incident_close\",\n description: \"Close an open continuity incident with verification details.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Incident ID to close.\" },\n namespace: { type: \"string\" },\n fixApplied: { type: \"string\", description: \"What fix was applied.\" },\n verificationResult: { type: \"string\", description: \"How closure was verified.\" },\n preventiveRule: { type: \"string\", description: \"Optional preventive follow-up rule.\" },\n },\n required: [\"id\", \"fixApplied\", \"verificationResult\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.continuity_incident_list\",\n description: \"List continuity incidents, optionally filtered by state.\",\n inputSchema: {\n type: \"object\",\n properties: {\n state: { type: \"string\", enum: [\"open\", \"closed\", \"all\"] },\n namespace: { type: \"string\" },\n limit: { type: \"number\", description: \"Max incidents (default 25, max 200).\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.continuity_loop_add_or_update\",\n description: \"Add or update a continuity improvement loop entry.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Stable loop identifier.\" },\n cadence: { type: \"string\", enum: [\"daily\", \"weekly\", \"monthly\", \"quarterly\"] },\n purpose: { type: \"string\", description: \"What this recurring loop improves.\" },\n status: { type: \"string\", enum: [\"active\", \"paused\", \"retired\"] },\n killCondition: { type: \"string\", description: \"Clear condition for retiring this loop.\" },\n namespace: { type: \"string\" },\n lastReviewed: { type: \"string\", description: \"ISO timestamp for last review.\" },\n notes: { type: \"string\" },\n },\n required: [\"id\", \"cadence\", \"purpose\", \"status\", \"killCondition\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.continuity_loop_review\",\n description: \"Update review metadata for an existing continuity improvement loop.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Loop ID to review.\" },\n namespace: { type: \"string\" },\n status: { type: \"string\", enum: [\"active\", \"paused\", \"retired\"] },\n notes: { type: \"string\" },\n reviewedAt: { type: \"string\", description: \"ISO timestamp for review event.\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.identity_anchor_get\",\n description: \"Read the identity continuity anchor document (recovery-safe identity context).\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.identity_anchor_update\",\n description: \"Conservatively merge identity anchor sections without overwriting existing material.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n identityTraits: { type: \"string\", description: \"Updates for 'Identity Traits' section.\" },\n communicationPreferences: { type: \"string\", description: \"Updates for 'Communication Preferences' section.\" },\n operatingPrinciples: { type: \"string\", description: \"Updates for 'Operating Principles' section.\" },\n continuityNotes: { type: \"string\", description: \"Updates for 'Continuity Notes' section.\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_identity\",\n description: \"Read the agent's identity reflections from the workspace IDENTITY.md file.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n // ── Work Layer tools ─────────────────────────────────────────────────\n {\n name: \"engram.work_task\",\n description: \"Manage work-layer tasks (create, get, list, update, transition, delete). Excluded from memory extraction.\",\n inputSchema: {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"create\", \"get\", \"list\", \"update\", \"transition\", \"delete\"] },\n id: { type: \"string\" },\n title: { type: \"string\" },\n description: { type: \"string\" },\n status: { type: \"string\", enum: [\"todo\", \"in_progress\", \"blocked\", \"done\", \"cancelled\"] },\n priority: { type: \"string\", enum: [\"low\", \"medium\", \"high\"] },\n owner: { type: \"string\" },\n assignee: { type: \"string\" },\n projectId: { type: \"string\" },\n tags: { type: \"array\", items: { type: \"string\" } },\n dueAt: { type: \"string\" },\n },\n required: [\"action\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.work_project\",\n description: \"Manage work-layer projects (create, get, list, update, delete, link_task). Excluded from memory extraction.\",\n inputSchema: {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"create\", \"get\", \"list\", \"update\", \"delete\", \"link_task\"] },\n id: { type: \"string\" },\n name: { type: \"string\" },\n description: { type: \"string\" },\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"completed\", \"archived\"] },\n owner: { type: \"string\" },\n tags: { type: \"array\", items: { type: \"string\" } },\n taskId: { type: \"string\", description: \"Task ID for link_task.\" },\n projectId: { type: \"string\", description: \"Project ID for link_task.\" },\n },\n required: [\"action\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.work_board\",\n description: \"Export/import work-layer board snapshots and markdown.\",\n inputSchema: {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"export_markdown\", \"export_snapshot\", \"import_snapshot\"] },\n projectId: { type: \"string\" },\n snapshotJson: { type: \"string\", description: \"Snapshot JSON for import_snapshot.\" },\n linkToMemory: { type: \"boolean\", description: \"If true, output can be retained as long-term memory.\" },\n },\n required: [\"action\"],\n additionalProperties: false,\n },\n },\n // ── Shared Context / Compounding tools ────────────────────────────\n {\n name: \"engram.shared_context_write_output\",\n description: \"Write agent work product into shared-context directory for cross-agent coordination.\",\n inputSchema: {\n type: \"object\",\n properties: {\n agentId: { type: \"string\", description: \"Agent ID producing this output.\" },\n title: { type: \"string\", description: \"Short title for the output.\" },\n content: { type: \"string\", description: \"Markdown content to write.\" },\n },\n required: [\"agentId\", \"title\", \"content\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.shared_feedback_record\",\n description: \"Append approval/rejection decision into shared-context feedback inbox for compounding learning.\",\n inputSchema: {\n type: \"object\",\n properties: {\n agent: { type: \"string\", description: \"Agent name that produced the output.\" },\n decision: { type: \"string\", enum: [\"approved\", \"approved_with_feedback\", \"rejected\"] },\n reason: { type: \"string\" },\n date: { type: \"string\", description: \"ISO timestamp. Defaults to now.\" },\n learning: { type: \"string\" },\n outcome: { type: \"string\" },\n severity: { type: \"string\", enum: [\"low\", \"medium\", \"high\"] },\n confidence: { type: \"number\", description: \"Confidence 0-1.\" },\n workflow: { type: \"string\" },\n tags: { type: \"array\", items: { type: \"string\" } },\n evidenceWindowStart: { type: \"string\" },\n evidenceWindowEnd: { type: \"string\" },\n refs: { type: \"array\", items: { type: \"string\" } },\n },\n required: [\"agent\", \"decision\", \"reason\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.shared_priorities_append\",\n description: \"Append priorities text into shared-context inbox for curator merge.\",\n inputSchema: {\n type: \"object\",\n properties: {\n agentId: { type: \"string\" },\n text: { type: \"string\", description: \"Priority notes (markdown).\" },\n },\n required: [\"agentId\", \"text\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.shared_context_cross_signals_run\",\n description: \"Generate cross-signal markdown + JSON artifacts from agent outputs and feedback.\",\n inputSchema: {\n type: \"object\",\n properties: {\n date: { type: \"string\", description: \"YYYY-MM-DD. Defaults to today.\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.shared_context_curate_daily\",\n description: \"Generate daily roundtable summary (deterministic baseline aggregation).\",\n inputSchema: {\n type: \"object\",\n properties: {\n date: { type: \"string\", description: \"YYYY-MM-DD. Defaults to today.\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.compounding_weekly_synthesize\",\n description: \"Generate weekly compounding outputs: reports, mistake registry, rubrics, and promotion candidates.\",\n inputSchema: {\n type: \"object\",\n properties: {\n weekId: { type: \"string\", description: \"ISO week ID (YYYY-Www). Defaults to current week.\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.compounding_promote_candidate\",\n description: \"Promote a compounding candidate from weekly report into durable rule/principle memory.\",\n inputSchema: {\n type: \"object\",\n properties: {\n weekId: { type: \"string\" },\n candidateId: { type: \"string\" },\n dryRun: { type: \"boolean\", description: \"Preview without writing.\" },\n },\n required: [\"weekId\", \"candidateId\"],\n additionalProperties: false,\n },\n },\n // ── Compression Guidelines tools ────────────────────────────────────\n {\n name: \"engram.compression_guidelines_optimize\",\n description: \"Run compression guideline optimizer, optionally persisting new guidelines.\",\n inputSchema: {\n type: \"object\",\n properties: {\n dryRun: { type: \"boolean\" },\n eventLimit: { type: \"number\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.compression_guidelines_activate\",\n description: \"Promote staged compression guideline draft to active (after review).\",\n inputSchema: {\n type: \"object\",\n properties: {\n expectedContentHash: { type: \"string\" },\n expectedGuidelineVersion: { type: \"number\" },\n },\n additionalProperties: false,\n },\n },\n // ── Memory search & debug tools ────────────────────────────────────\n {\n name: \"engram.memory_search\",\n description: \"Direct semantic search over memory files using the QMD index. Returns matching memories with relevance scores.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n namespace: { type: \"string\" },\n maxResults: { type: \"number\" },\n collection: { type: \"string\", description: \"QMD collection (omit for memory, 'global' for all)\" },\n },\n required: [\"query\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_profile\",\n description: \"Read the user's behavioral profile — a living document of their preferences, habits, and personality.\",\n inputSchema: {\n type: \"object\",\n properties: { namespace: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_entities_list\",\n description: \"List all tracked entities (people, projects, tools, companies).\",\n inputSchema: {\n type: \"object\",\n properties: { namespace: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_questions\",\n description: \"List open questions the system is curious about from past conversations.\",\n inputSchema: {\n type: \"object\",\n properties: { namespace: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_last_recall\",\n description: \"Return the last recall snapshot for a session (debug introspection).\",\n inputSchema: {\n type: \"object\",\n properties: { sessionKey: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_intent_debug\",\n description: \"Return the last intent classification debug snapshot.\",\n inputSchema: {\n type: \"object\",\n properties: { namespace: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_qmd_debug\",\n description: \"Return QMD search index debug information from the last recall.\",\n inputSchema: {\n type: \"object\",\n properties: { namespace: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_graph_explain\",\n description: \"Explain the last entity graph recall — which entities were activated and why.\",\n inputSchema: {\n type: \"object\",\n properties: { namespace: { type: \"string\" } },\n additionalProperties: false,\n },\n },\n {\n // Graph snapshot for the admin pane (issue #691 PR 2/5). Returns\n // a read-only `{ nodes, edges, generatedAt }` view of the\n // multi-graph adjacency, with the same filter knobs as the HTTP\n // surface so connectors / CLI clients can hit either endpoint\n // interchangeably.\n name: \"engram.graph_snapshot\",\n description: \"Return a read-only graph snapshot (nodes + edges) for the admin pane. Filters: limit (default 500, max 5000), since (ISO timestamp), focusNodeId (restricts to neighborhood), categories (allow-list of memory categories).\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n limit: { type: \"number\", description: \"Maximum number of edges to return (default 500, max 5000).\" },\n since: { type: \"string\", description: \"Inclusive lower bound on edge timestamp (ISO-8601).\" },\n focusNodeId: { type: \"string\", description: \"When set, restrict the snapshot to the focus node and its neighbors.\" },\n categories: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Optional category allow-list (e.g. ['fact', 'decision']).\",\n },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_feedback\",\n description: \"Record relevance feedback (thumbs up/down) for a specific memory.\",\n inputSchema: {\n type: \"object\",\n properties: {\n memoryId: { type: \"string\" },\n vote: { type: \"string\", enum: [\"up\", \"down\"] },\n note: { type: \"string\" },\n },\n required: [\"memoryId\", \"vote\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_promote\",\n description: \"Promote a memory's lifecycle state (e.g. from draft to active).\",\n inputSchema: {\n type: \"object\",\n properties: {\n memoryId: { type: \"string\" },\n namespace: { type: \"string\" },\n sessionKey: { type: \"string\" },\n },\n required: [\"memoryId\"],\n additionalProperties: false,\n },\n },\n // Memory Worth outcome signal (issue #560 PR 3). Callers record whether\n // a session that used a given memory ultimately succeeded or failed;\n // the counter is persisted in the memory's frontmatter (mw_success /\n // mw_fail) and will feed the recall-time filter added in PR 4.\n {\n name: \"engram.memory_outcome\",\n description: \"Record a Memory Worth outcome (success/failure) for a memory. Increments mw_success or mw_fail in the memory's frontmatter for use by the recall filter.\",\n inputSchema: {\n type: \"object\",\n properties: {\n memoryId: { type: \"string\" },\n outcome: { type: \"string\", enum: [\"success\", \"failure\"] },\n namespace: { type: \"string\" },\n sessionKey: { type: \"string\" },\n timestamp: { type: \"string\", description: \"Optional ISO-8601 timestamp of the observation.\" },\n },\n required: [\"memoryId\", \"outcome\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_action_apply\",\n description:\n \"Record a memory-action application event for policy-learning telemetry.\",\n inputSchema: {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n enum: [\n \"store_episode\",\n \"store_note\",\n \"update_note\",\n \"create_artifact\",\n \"summarize_node\",\n \"discard\",\n \"link_graph\",\n ],\n },\n category: { type: \"string\" },\n content: { type: \"string\" },\n outcome: { type: \"string\", enum: [\"applied\", \"skipped\", \"failed\"] },\n reason: { type: \"string\" },\n memoryId: { type: \"string\" },\n sessionKey: { type: \"string\" },\n linkTargetId: { type: \"string\" },\n linkType: { type: \"string\" },\n linkStrength: { type: \"number\" },\n artifactType: { type: \"string\" },\n execute: { type: \"boolean\" },\n sourcePrompt: { type: \"string\" },\n namespace: { type: \"string\" },\n dryRun: { type: \"boolean\" },\n },\n required: [\"action\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.context_checkpoint\",\n description: \"Save a structured context checkpoint for a session (preserves conversation state to disk).\",\n inputSchema: {\n type: \"object\",\n properties: {\n sessionKey: { type: \"string\" },\n context: { type: \"string\", description: \"Context content to checkpoint\" },\n namespace: { type: \"string\" },\n },\n required: [\"sessionKey\", \"context\"],\n additionalProperties: false,\n },\n },\n // ── Daily Context Briefing (#370) ───────────────────────────────────\n // Uses the legacy \"engram.*\" prefix like every other tool in this array;\n // withToolAliases (applied via .flatMap below) generates the canonical\n // \"remnic.briefing\" alias automatically.\n ...(service.briefingEnabled ? [{\n name: \"engram.briefing\",\n description: \"Generate a daily context briefing by cross-referencing active entities, recent facts, open commitments, and optional calendar events.\",\n inputSchema: {\n type: \"object\",\n properties: {\n since: { type: \"string\", description: \"Lookback window (e.g. 'yesterday', '3d', '1w', '24h').\" },\n focus: { type: \"string\", description: \"Optional focus filter (e.g. 'person:Jane Doe', 'project:remnic-core', 'topic:retrieval').\" },\n namespace: { type: \"string\" },\n format: { type: \"string\", enum: [\"markdown\", \"json\"] },\n maxFollowups: { type: \"number\", description: \"Maximum LLM-suggested follow-ups (0 disables that section).\" },\n },\n additionalProperties: false,\n },\n }] : []),\n // ── Contradiction Review (issue #520) ────────────────────────────────\n {\n name: \"engram.review_list\",\n description: \"List contradiction review items pending user resolution.\",\n inputSchema: {\n type: \"object\",\n properties: {\n filter: { type: \"string\", enum: [\"all\", \"unresolved\", \"contradicts\", \"independent\", \"duplicates\", \"needs-user\"], description: \"Filter by verdict type. Default: unresolved.\" },\n namespace: { type: \"string\" },\n limit: { type: \"number\", description: \"Max items to return (default 50).\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.review_resolve\",\n description: \"Resolve a contradiction pair with a chosen verb.\",\n inputSchema: {\n type: \"object\",\n properties: {\n pairId: { type: \"string\", description: \"The contradiction pair ID to resolve.\" },\n verb: { type: \"string\", enum: [\"keep-a\", \"keep-b\", \"merge\", \"both-valid\", \"needs-more-context\"], description: \"Resolution action.\" },\n },\n required: [\"pairId\", \"verb\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.contradiction_scan_run\",\n description: \"Run an on-demand contradiction scan over the memory corpus.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: { type: \"string\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.memory_summarize_hourly\",\n description: \"Generate hourly summaries for recent conversations.\",\n inputSchema: {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n },\n },\n {\n name: \"engram.conversation_index_update\",\n description: \"Chunk transcript history into conversation-index documents.\",\n inputSchema: {\n type: \"object\",\n properties: {\n sessionKey: { type: \"string\" },\n hours: { type: \"number\", description: \"How many hours of transcript history to include.\" },\n embed: { type: \"boolean\", description: \"If true, run QMD embed after update for this invocation.\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.profiling_report\",\n description:\n \"Return timing and performance data for Remnic recall and extraction pipelines. Requires profilingEnabled: true.\",\n inputSchema: {\n type: \"object\",\n properties: {\n format: {\n type: \"string\",\n enum: [\"ascii\", \"json\"],\n description: \"Output format. Defaults to ascii.\",\n },\n limit: {\n type: \"integer\",\n minimum: 1,\n maximum: 20,\n description: \"Number of recent traces to include. Defaults to 5.\",\n },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.graph_edge_decay_run\",\n description:\n \"Run the graph-edge-confidence decay maintenance pass (issue #681 PR 2/3). Respects graphEdgeDecayEnabled; writes a structured telemetry record to state/graph-edge-decay-status.json.\",\n inputSchema: {\n type: \"object\",\n properties: {\n dryRun: { type: \"boolean\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.live_connectors_run\",\n description:\n \"Run due live connectors once. Used by the live-connector cron and available for operator-triggered sync checks.\",\n inputSchema: {\n type: \"object\",\n properties: {\n force: {\n type: \"boolean\",\n description: \"When true, run enabled connectors even if their poll interval has not elapsed.\",\n },\n },\n additionalProperties: false,\n },\n },\n // ── Peer Registry tools (issue #679 PR 4/5) ─────────────────────────\n {\n name: \"engram.peer_list\",\n description:\n \"List all registered peers in the peer registry (issue #679). Returns an array of peer identity records sorted alphabetically by id.\",\n inputSchema: {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n },\n },\n {\n name: \"engram.peer_get\",\n description:\n \"Get a single peer by id. Returns the peer's identity record or { found: false } when not found (issue #679).\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Peer id to look up.\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.peer_set\",\n description:\n \"Create or update a peer identity record (issue #679). On first write, creates the peer with the given kind (default 'human'). On subsequent writes, updates displayName and/or notes; kind and createdAt are immutable.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Peer id — must match PEER_ID_PATTERN.\" },\n kind: {\n type: \"string\",\n enum: [\"self\", \"human\", \"agent\", \"integration\"],\n description: \"Kind of peer. Required on first write; ignored on updates.\",\n },\n displayName: { type: \"string\", description: \"Human-readable display name.\" },\n notes: { type: \"string\", description: \"Optional free-form markdown notes.\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.peer_delete\",\n description:\n \"Delete a peer's identity record (issue #679). Idempotent — succeeds even if the peer does not exist. The peer directory is preserved so profile and interaction-log data are not destroyed.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Peer id to delete.\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.peer_profile_get\",\n description:\n \"Get the evolving cognitive profile for a peer (issue #679). Returns the profile written by the async reasoner (PR 2/5), or { found: false } if no profile has been generated yet.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Peer id whose profile to retrieve.\" },\n },\n required: [\"id\"],\n additionalProperties: false,\n },\n },\n {\n name: \"engram.peer_forget\",\n description:\n \"DESTRUCTIVELY purge the entire peer directory (identity.md + profile.md + interactions.log.md and any companion files). \" +\n \"Requires confirm: 'yes'. Idempotent — safe to call twice. \" +\n \"Use engram.peer_delete when you only want to remove the identity record and preserve profile data.\",\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Peer id to purge.\" },\n confirm: {\n type: \"string\",\n enum: [\"yes\"],\n description: \"Must be exactly 'yes' to proceed. Guard against accidental invocation.\",\n },\n },\n required: [\"id\", \"confirm\"],\n additionalProperties: false,\n },\n },\n // ── Operator Console state (issue #688 PR 2/3) ─────────────────────────\n {\n name: \"engram.console_state\",\n description:\n \"Return a point-in-time ConsoleStateSnapshot of the engine's runtime state — buffer, extraction queue, dedup decisions, maintenance ledger tail, QMD probe, and daemon info (issue #688). Read-only; never mutates state.\",\n inputSchema: {\n type: \"object\",\n properties: {\n namespace: {\n type: \"string\",\n description: \"Optional namespace to scope the snapshot.\",\n },\n },\n additionalProperties: false,\n },\n },\n // ── Dreams telemetry (issue #678 PR 3+4) ─────────────────────────────\n {\n name: \"engram.dreams_status\",\n description:\n \"Return per-phase Dreams pipeline telemetry for the last N hours (default 24). Reports run count, total duration, and items processed for each phase: lightSleep, rem, deepSleep.\",\n inputSchema: {\n type: \"object\",\n properties: {\n windowHours: {\n type: \"number\",\n description: \"How many hours to look back (default 24, minimum 1).\",\n },\n namespace: {\n type: \"string\",\n description: \"Optional namespace to read Dreams telemetry from.\",\n },\n },\n additionalProperties: false,\n },\n },\n {\n name: \"engram.dreams_run\",\n description:\n \"Manually invoke a single Dreams pipeline phase (lightSleep, rem, or deepSleep). Returns the same telemetry shape as a scheduled run. Pass dryRun: true to preview without committing writes.\",\n inputSchema: {\n type: \"object\",\n properties: {\n phase: {\n type: \"string\",\n enum: [\"lightSleep\", \"rem\", \"deepSleep\"],\n description: \"Which phase to run.\",\n },\n dryRun: {\n type: \"boolean\",\n description: \"When true, report what would change without committing writes (default false).\",\n },\n namespace: {\n type: \"string\",\n description: \"Optional namespace to run the phase in.\",\n },\n },\n required: [\"phase\"],\n additionalProperties: false,\n },\n },\n ].flatMap((tool) => withToolAliases(tool));\n }\n\n /** Get clientInfo for a specific MCP session. Returns undefined for non-MCP requests. */\n getClientInfo(sessionId?: string): { name: string; version?: string } | undefined {\n if (sessionId) {\n return this.clientInfoBySession.get(sessionId);\n }\n return undefined;\n }\n\n /** Pop the session ID generated during an initialize handshake, keyed by correlation ID. */\n popInitSessionId(correlationId: string): string | undefined {\n const sid = this.initSessionIds.get(correlationId);\n if (sid !== undefined) this.initSessionIds.delete(correlationId);\n return sid;\n }\n\n async handleRequest(request: JsonRpcRequest, options?: { principalOverride?: string; sessionId?: string; correlationId?: string }): Promise<Record<string, unknown> | null> {\n const id = request.id ?? null;\n const method = request.method ?? \"\";\n\n if (method === \"notifications/initialized\") return null;\n if (method === \"ping\") {\n return { jsonrpc: \"2.0\", id, result: {} };\n }\n if (method === \"initialize\") {\n const params = request.params ?? {};\n const rawClientInfo = params.clientInfo as { name?: string; version?: string } | undefined;\n // Generate a server-side session ID for this MCP session.\n // The caller should send this back as Mcp-Session-Id on subsequent requests.\n const newSessionId = randomUUID();\n if (rawClientInfo && typeof rawClientInfo.name === \"string\") {\n const info = { name: rawClientInfo.name, version: rawClientInfo.version as string | undefined };\n this.clientInfoBySession.set(newSessionId, info);\n // Evict oldest sessions if map exceeds limit\n if (this.clientInfoBySession.size > 1000) {\n const firstKey = this.clientInfoBySession.keys().next().value;\n if (firstKey) this.clientInfoBySession.delete(firstKey);\n }\n }\n const version = await getMcpServerVersion();\n // Store session ID keyed by correlation ID (unique per HTTP request) so\n // concurrent initializes with the same JSON-RPC id don't collide.\n const corrId = options?.correlationId;\n if (corrId) this.initSessionIds.set(corrId, newSessionId);\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n protocolVersion: MCP_PROTOCOL_VERSION,\n capabilities: {\n tools: {},\n },\n serverInfo: {\n name: \"remnic\",\n version,\n },\n },\n };\n }\n if (method === \"tools/list\") {\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n tools: this.tools,\n },\n };\n }\n if (method === \"tools/call\") {\n const params = request.params ?? {};\n const name = typeof params.name === \"string\" ? params.name : \"\";\n\n try {\n let argumentsObject: Record<string, unknown> = {};\n if (\"arguments\" in params && params.arguments !== undefined) {\n if (params.arguments === null || typeof params.arguments !== \"object\" || Array.isArray(params.arguments)) {\n throw new EngramAccessInputError(\"tools/call arguments must be an object when provided\");\n }\n argumentsObject = params.arguments as Record<string, unknown>;\n }\n const effectivePrincipal = options?.principalOverride ?? this.authenticatedPrincipal;\n const result = await this.callTool(name, argumentsObject, effectivePrincipal, options?.sessionId);\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n content: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n structuredContent: result,\n isError: false,\n },\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n content: [{ type: \"text\", text: message }],\n isError: true,\n },\n };\n }\n }\n\n return {\n jsonrpc: \"2.0\",\n id,\n error: {\n code: -32601,\n message: `Method not found: ${method}`,\n },\n };\n }\n\n async runStdio(input: Readable, output: Writable): Promise<void> {\n input.on(\"data\", (chunk) => {\n this.buffer = Buffer.concat([this.buffer, Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)]);\n this.scheduleFlush(output);\n });\n await new Promise<void>((resolve, reject) => {\n input.on(\"end\", resolve);\n input.on(\"error\", reject);\n });\n while (this.flushTask) {\n await this.flushTask;\n }\n }\n\n private scheduleFlush(output: Writable): void {\n if (this.flushTask) return;\n const task = this.flushBuffer(output)\n .catch((err) => {\n this.writeMessage(output, {\n jsonrpc: \"2.0\",\n id: null,\n error: {\n code: -32700,\n message: err instanceof Error ? err.message : String(err),\n },\n });\n })\n .finally(() => {\n if (this.flushTask === task) {\n this.flushTask = null;\n }\n if (this.buffer.length > 0) {\n this.scheduleFlush(output);\n }\n });\n this.flushTask = task;\n }\n\n private async flushBuffer(output: Writable): Promise<void> {\n while (true) {\n const headerEnd = this.buffer.indexOf(\"\\r\\n\\r\\n\");\n if (headerEnd < 0) return;\n const headerText = this.buffer.slice(0, headerEnd).toString(\"utf-8\");\n const headers = headerText.split(\"\\r\\n\");\n const contentLengthHeader = headers.find((line) => line.toLowerCase().startsWith(\"content-length:\"));\n if (!contentLengthHeader) {\n this.buffer = Buffer.alloc(0);\n return;\n }\n const contentLength = parseInt(contentLengthHeader.split(\":\")[1]?.trim() ?? \"0\", 10);\n if (!Number.isFinite(contentLength) || contentLength < 0) {\n this.buffer = Buffer.alloc(0);\n return;\n }\n const messageStart = headerEnd + 4;\n const messageEnd = messageStart + contentLength;\n if (this.buffer.length < messageEnd) return;\n const body = this.buffer.slice(messageStart, messageEnd).toString(\"utf-8\");\n this.buffer = this.buffer.slice(messageEnd);\n\n let parsed: JsonRpcRequest;\n try {\n parsed = JSON.parse(body) as JsonRpcRequest;\n } catch {\n this.writeMessage(output, {\n jsonrpc: \"2.0\",\n id: null,\n error: {\n code: -32700,\n message: \"Parse error\",\n },\n });\n continue;\n }\n const response = await this.handleRequest(parsed);\n if (response) {\n this.writeMessage(output, response);\n }\n }\n }\n\n private writeMessage(output: Writable, payload: Record<string, unknown>): void {\n const body = JSON.stringify(payload);\n const message = `Content-Length: ${Buffer.byteLength(body, \"utf-8\")}\\r\\n\\r\\n${body}`;\n output.write(message);\n }\n\n /**\n * Determine whether oai-mem-citation guidance should be appended to recall.\n * Returns true when explicitly enabled via config OR when auto-detect is\n * active and the current MCP session belongs to a Codex adapter client.\n *\n * When no sessionId is provided (e.g., stdio transport where there are no\n * HTTP headers carrying mcp-session-id), fall back to checking if there is\n * exactly one known session whose clientInfo matches the Codex pattern.\n * This covers the common stdio case where a single client connection exists.\n */\n private shouldEmitCitations(mcpSessionId?: string): boolean {\n if (this.citationsEnabled) return true;\n if (!this.citationsAutoDetect) return false;\n\n // Direct session lookup (HTTP transport with mcp-session-id header).\n if (mcpSessionId) {\n const info = this.clientInfoBySession.get(mcpSessionId);\n if (!info) return false;\n return this.isCodexClient(info);\n }\n\n // Stdio fallback: no session ID available. If there is exactly one session\n // registered (the typical stdio pattern), check that session's clientInfo.\n if (this.clientInfoBySession.size === 1) {\n const [info] = [...this.clientInfoBySession.values()];\n if (info) return this.isCodexClient(info);\n }\n\n return false;\n }\n\n /** Check whether a clientInfo record identifies a Codex adapter client. */\n private isCodexClient(info: { name: string; version?: string }): boolean {\n const lowerName = info.name.toLowerCase();\n return lowerName === \"codex-mcp-client\" || lowerName.includes(\"codex\");\n }\n\n /**\n * Build citation metadata for each recall result that has a path.\n * Line range defaults to 1-1 when not determinable from the summary.\n */\n private buildRecallCitations(response: EngramAccessRecallResponse): CitationMetadata[] {\n return response.results\n .filter((r) => r.path && r.path.length > 0)\n .map((r) => ({\n memoryId: r.id,\n path: r.path,\n lineStart: 1,\n lineEnd: 1,\n noteDefault: r.preview?.slice(0, 60) || r.id,\n }));\n }\n\n private async callTool(name: string, args: Record<string, unknown>, effectivePrincipal?: string, mcpSessionId?: string): Promise<unknown> {\n switch (toLegacyToolName(name)) {\n case \"engram.recall\": {\n // Forward `disclosure` only when the caller actually supplied it,\n // so the service layer's default-application path stays the\n // single source of truth. We must distinguish \"absent\" from\n // \"present-but-wrong-type\": absence forwards as `undefined`\n // (service applies the chunk default), while a present-but-\n // non-string value (e.g. `1`, `true`) is rejected here as a\n // structured input error instead of silently being coerced to\n // `undefined`. CLAUDE.md rule 51: never silently default on\n // malformed input. String values are forwarded as-is; the\n // service's `isRecallDisclosure` guard rejects unknown enum\n // strings (e.g. `\"verbose\"`) with the same error class.\n let disclosure: RecallDisclosure | undefined;\n if (\"disclosure\" in args && args.disclosure !== undefined && args.disclosure !== null) {\n if (typeof args.disclosure !== \"string\") {\n throw new EngramAccessInputError(\n \"disclosure must be a string (one of: chunk, section, raw)\",\n );\n }\n disclosure = args.disclosure as RecallDisclosure;\n }\n // Reject non-string cwd/projectTag (CLAUDE.md #51) — these control\n // namespace routing so silent coercion to undefined would mix memories.\n if (\"cwd\" in args && args.cwd !== undefined && args.cwd !== null && typeof args.cwd !== \"string\") {\n throw new EngramAccessInputError(\"cwd must be a string\");\n }\n if (\"projectTag\" in args && args.projectTag !== undefined && args.projectTag !== null && typeof args.projectTag !== \"string\") {\n throw new EngramAccessInputError(\"projectTag must be a string\");\n }\n // Issue #680 — historical recall pin. Reject non-string asOf\n // values up-front so malformed payloads surface as structured\n // input errors. The service layer performs Date.parse on the\n // string value.\n if (\"asOf\" in args && args.asOf !== undefined && args.asOf !== null && typeof args.asOf !== \"string\") {\n throw new EngramAccessInputError(\"asOf must be a string (ISO 8601 timestamp)\");\n }\n // Tag filter (issue #689). Reject malformed tags / tagMatch\n // up front rather than silently dropping (CLAUDE.md rule 51).\n let tags: string[] | undefined;\n if (\"tags\" in args && args.tags !== undefined && args.tags !== null) {\n if (!Array.isArray(args.tags) || !args.tags.every((t) => typeof t === \"string\")) {\n throw new EngramAccessInputError(\"tags must be an array of strings\");\n }\n tags = args.tags;\n }\n let tagMatch: \"any\" | \"all\" | undefined;\n if (\"tagMatch\" in args && args.tagMatch !== undefined && args.tagMatch !== null) {\n if (typeof args.tagMatch !== \"string\" || (args.tagMatch !== \"any\" && args.tagMatch !== \"all\")) {\n throw new EngramAccessInputError(\n `tagMatch must be one of: any, all (got: ${String(args.tagMatch)})`,\n );\n }\n tagMatch = args.tagMatch;\n }\n const response = await this.service.recall({\n query: typeof args.query === \"string\" ? args.query : \"\",\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n topK: typeof args.topK === \"number\" && Number.isFinite(args.topK) ? args.topK : undefined,\n mode: typeof args.mode === \"string\" ? args.mode as RecallPlanMode | \"auto\" : undefined,\n includeDebug: args.includeDebug === true,\n disclosure,\n cwd: typeof args.cwd === \"string\" ? args.cwd : undefined,\n projectTag: typeof args.projectTag === \"string\" ? args.projectTag : undefined,\n asOf: typeof args.asOf === \"string\" ? args.asOf : undefined,\n ...(tags !== undefined ? { tags } : {}),\n ...(tagMatch !== undefined ? { tagMatch } : {}),\n });\n\n if (this.shouldEmitCitations(mcpSessionId)) {\n const citations = this.buildRecallCitations(response);\n const guidance = buildCitationGuidance(citations);\n if (guidance.length > 0) {\n return {\n ...response,\n context: response.context + guidance,\n citations,\n };\n }\n }\n return response;\n }\n case \"engram.recall_explain\":\n return this.service.recallExplain({\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n });\n case \"engram.set_coding_context\": {\n // Issue #569 PR 7 — MCP tool for clients that don't ship cwd.\n // Validation lives in EngramAccessService.setCodingContext; any\n // EngramAccessInputError surfaces as a structured tool-call error.\n const sessionKey = typeof args.sessionKey === \"string\" ? args.sessionKey : \"\";\n // Support projectTag as an alternative to full codingContext.\n // When projectTag is provided and codingContext is absent, create\n // a tag-based context (issue #569 wiring).\n const hasProjectTag = typeof args.projectTag === \"string\" && args.projectTag.trim().length > 0;\n const hasCodingContext = \"codingContext\" in args;\n if (!hasCodingContext && hasProjectTag) {\n const tag = (args.projectTag as string).trim();\n this.service.setCodingContext({\n sessionKey,\n codingContext: {\n projectId: `tag:${tag}`,\n branch: null,\n rootPath: `tag:${tag}`,\n defaultBranch: null,\n },\n });\n return { ok: true };\n }\n // Require at least one of codingContext or projectTag (CLAUDE.md #51).\n if (!hasCodingContext && !hasProjectTag) {\n throw new EngramAccessInputError(\n \"set_coding_context requires either codingContext or projectTag\",\n );\n }\n const rawCtx = args.codingContext;\n let codingContext: {\n projectId: string;\n branch: string | null;\n rootPath: string;\n defaultBranch: string | null;\n } | null = null;\n if (rawCtx !== null) {\n if (typeof rawCtx !== \"object\" || rawCtx === undefined) {\n throw new EngramAccessInputError(\"codingContext must be an object or null\");\n }\n const obj = rawCtx as Record<string, unknown>;\n const projectId = typeof obj.projectId === \"string\" ? obj.projectId : \"\";\n const rootPath = typeof obj.rootPath === \"string\" ? obj.rootPath : \"\";\n const branch = obj.branch === null\n ? null\n : typeof obj.branch === \"string\" ? obj.branch : undefined;\n const defaultBranch = obj.defaultBranch === null\n ? null\n : typeof obj.defaultBranch === \"string\" ? obj.defaultBranch : undefined;\n if (branch === undefined) {\n throw new EngramAccessInputError(\"codingContext.branch must be a string or null\");\n }\n if (defaultBranch === undefined) {\n throw new EngramAccessInputError(\"codingContext.defaultBranch must be a string or null\");\n }\n codingContext = { projectId, branch, rootPath, defaultBranch };\n }\n this.service.setCodingContext({ sessionKey, codingContext });\n return { ok: true };\n }\n case \"engram.recall_tier_explain\":\n return this.service.recallTierExplain(\n typeof args.sessionKey === \"string\" && args.sessionKey.length > 0\n ? args.sessionKey\n : undefined,\n typeof args.namespace === \"string\" && args.namespace.length > 0\n ? args.namespace\n : undefined,\n effectivePrincipal,\n );\n case \"engram.recall_xray\": {\n // `recallXray` throws on empty query / invalid budget; surface\n // those as MCP errors with a listed-options message rather\n // than silently returning `snapshotFound: false` (CLAUDE.md\n // rule 51). Namespace scope is enforced inside the service\n // via `canReadNamespace`.\n const query = typeof args.query === \"string\" ? args.query : \"\";\n const sessionKey =\n typeof args.sessionKey === \"string\" && args.sessionKey.length > 0\n ? args.sessionKey\n : undefined;\n const namespace =\n typeof args.namespace === \"string\" && args.namespace.length > 0\n ? args.namespace\n : undefined;\n // `budget` may arrive as a JSON number or a string ('4096')\n // from loosely-typed MCP clients; coerce + validate here so\n // the service sees a number. Reject booleans, objects, and\n // other non-string-non-number inputs explicitly — `Number()`\n // otherwise coerces `true` to `1`, which would silently force\n // an extremely small recall budget (CLAUDE.md rule 51).\n let budget: number | undefined;\n if (args.budget !== undefined && args.budget !== null) {\n if (typeof args.budget !== \"number\" && typeof args.budget !== \"string\") {\n throw new Error(\n `engram.recall_xray: budget expects a positive integer; got ${JSON.stringify(args.budget)}`,\n );\n }\n const parsed =\n typeof args.budget === \"number\"\n ? args.budget\n : Number(args.budget);\n if (\n !Number.isFinite(parsed)\n || parsed <= 0\n || !Number.isInteger(parsed)\n ) {\n throw new Error(\n `engram.recall_xray: budget expects a positive integer; got ${JSON.stringify(args.budget)}`,\n );\n }\n budget = parsed;\n }\n // Forward disclosure depth so the recallXray telemetry table is\n // populated for MCP callers (issue #677 PR 3/4). Reject\n // non-string types explicitly (matches the strict input\n // contract used elsewhere in this handler — see `budget` /\n // `disclosure` in engram.recall around line 1198 — and the\n // HTTP path's 400-on-bad-disclosure handling). Treat empty\n // string as absent so HTTP `?disclosure=` and MCP align on\n // the same observable contract for that pathological input.\n // Non-empty strings flow through to the service's strict\n // allow-list validator (which throws on unknown values).\n let disclosure: string | undefined;\n if (\n \"disclosure\" in args &&\n args.disclosure !== undefined &&\n args.disclosure !== null &&\n args.disclosure !== \"\"\n ) {\n if (typeof args.disclosure !== \"string\") {\n throw new Error(\n \"engram.recall_xray: disclosure must be a string (one of: chunk, section, raw)\",\n );\n }\n disclosure = args.disclosure;\n }\n return this.service.recallXray({\n query,\n sessionKey,\n namespace,\n budget,\n authenticatedPrincipal: effectivePrincipal,\n ...(disclosure !== undefined\n ? { disclosure: disclosure as import(\"./types.js\").RecallDisclosure }\n : {}),\n });\n }\n case \"engram.day_summary\":\n return this.service.daySummary({\n memories: typeof args.memories === \"string\" ? args.memories : \"\",\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n });\n case \"engram.capsule_export\": {\n const body: CapsuleExportRequest = parseMcpRequest(\"capsuleExport\", args);\n return this.service.capsuleExport({\n name: body.name,\n namespace: body.namespace,\n principal: effectivePrincipal,\n since: body.since,\n includeKinds: body.includeKinds,\n peerIds: body.peerIds,\n includeTranscripts: body.includeTranscripts,\n encrypt: body.encrypt,\n });\n }\n case \"engram.capsule_import\": {\n const body: CapsuleImportRequest = parseMcpRequest(\"capsuleImport\", args);\n return this.service.capsuleImport({\n archivePath: expandTildePath(body.archivePath),\n namespace: body.namespace,\n principal: effectivePrincipal,\n mode: body.mode,\n });\n }\n case \"engram.capsule_list\": {\n const body: CapsuleListRequest = parseMcpRequest(\"capsuleList\", args);\n return this.service.capsuleList({\n namespace: body.namespace,\n principal: effectivePrincipal,\n });\n }\n case \"engram.memory_governance_run\":\n return this.service.governanceRun({\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n mode: args.mode === \"apply\" ? \"apply\" : \"shadow\",\n recentDays: typeof args.recentDays === \"number\" && Number.isFinite(args.recentDays) ? args.recentDays : undefined,\n maxMemories: typeof args.maxMemories === \"number\" && Number.isFinite(args.maxMemories) ? args.maxMemories : undefined,\n batchSize: typeof args.batchSize === \"number\" && Number.isFinite(args.batchSize) ? args.batchSize : undefined,\n authenticatedPrincipal: effectivePrincipal,\n }, effectivePrincipal);\n case \"engram.procedure_mining_run\":\n return this.service.procedureMiningRun(\n {\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n authenticatedPrincipal: effectivePrincipal,\n },\n effectivePrincipal,\n );\n case \"engram.pattern_reinforcement_run\":\n return this.service.patternReinforcementRun(\n {\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n authenticatedPrincipal: effectivePrincipal,\n force: args.force === true,\n },\n effectivePrincipal,\n );\n case \"remnic.procedural_stats\":\n case \"engram.procedural_stats\":\n return this.service.procedureStats(\n {\n namespace:\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n },\n effectivePrincipal,\n );\n case \"engram.memory_get\":\n return this.service.memoryGet(\n typeof args.memoryId === \"string\" ? args.memoryId : \"\",\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n effectivePrincipal,\n );\n case \"engram.memory_timeline\": {\n const limit = typeof args.limit === \"number\" && Number.isFinite(args.limit) ? args.limit : 200;\n return this.service.memoryTimeline(\n typeof args.memoryId === \"string\" ? args.memoryId : \"\",\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n limit,\n effectivePrincipal,\n );\n }\n case \"engram.memory_store\":\n return this.service.memoryStore({\n schemaVersion: typeof args.schemaVersion === \"number\" ? args.schemaVersion : undefined,\n idempotencyKey: typeof args.idempotencyKey === \"string\" ? args.idempotencyKey : undefined,\n dryRun: args.dryRun === true,\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n authenticatedPrincipal: effectivePrincipal,\n content: typeof args.content === \"string\" ? args.content : \"\",\n category: typeof args.category === \"string\" ? args.category : undefined,\n confidence: typeof args.confidence === \"number\" ? args.confidence : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n tags: Array.isArray(args.tags) ? args.tags.filter((tag): tag is string => typeof tag === \"string\") : undefined,\n entityRef: typeof args.entityRef === \"string\" ? args.entityRef : undefined,\n ttl: typeof args.ttl === \"string\" ? args.ttl : undefined,\n sourceReason: typeof args.sourceReason === \"string\" ? args.sourceReason : undefined,\n });\n case \"engram.suggestion_submit\":\n return this.service.suggestionSubmit({\n schemaVersion: typeof args.schemaVersion === \"number\" ? args.schemaVersion : undefined,\n idempotencyKey: typeof args.idempotencyKey === \"string\" ? args.idempotencyKey : undefined,\n dryRun: args.dryRun === true,\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n authenticatedPrincipal: effectivePrincipal,\n content: typeof args.content === \"string\" ? args.content : \"\",\n category: typeof args.category === \"string\" ? args.category : undefined,\n confidence: typeof args.confidence === \"number\" ? args.confidence : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n tags: Array.isArray(args.tags) ? args.tags.filter((tag): tag is string => typeof tag === \"string\") : undefined,\n entityRef: typeof args.entityRef === \"string\" ? args.entityRef : undefined,\n ttl: typeof args.ttl === \"string\" ? args.ttl : undefined,\n sourceReason: typeof args.sourceReason === \"string\" ? args.sourceReason : undefined,\n });\n case \"engram.entity_get\":\n return this.service.entityGet(\n typeof args.name === \"string\" ? args.name : \"\",\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n );\n case \"engram.review_queue_list\":\n return this.service.reviewQueue(\n typeof args.runId === \"string\" ? args.runId : undefined,\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n effectivePrincipal,\n );\n case \"engram.observe\": {\n // Reject non-string cwd/projectTag (CLAUDE.md #51) — these control\n // namespace routing so silent coercion to undefined would mix memories.\n if (\"cwd\" in args && args.cwd !== undefined && args.cwd !== null && typeof args.cwd !== \"string\") {\n throw new EngramAccessInputError(\"cwd must be a string\");\n }\n if (\"projectTag\" in args && args.projectTag !== undefined && args.projectTag !== null && typeof args.projectTag !== \"string\") {\n throw new EngramAccessInputError(\"projectTag must be a string\");\n }\n return this.service.observe({\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : \"\",\n messages: Array.isArray(args.messages) ? args.messages : [],\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n authenticatedPrincipal: effectivePrincipal,\n skipExtraction: args.skipExtraction === true,\n cwd: typeof args.cwd === \"string\" ? args.cwd : undefined,\n projectTag: typeof args.projectTag === \"string\" ? args.projectTag : undefined,\n });\n }\n case \"engram.lcm_search\":\n return this.service.lcmSearch({\n query: typeof args.query === \"string\" ? args.query : \"\",\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n limit: typeof args.limit === \"number\" && Number.isFinite(args.limit) ? args.limit : undefined,\n authenticatedPrincipal: effectivePrincipal,\n });\n // ── Continuity / Identity tools ───────────────────────────────────\n case \"engram.continuity_audit_generate\":\n return this.service.continuityAuditGenerate({\n period: args.period === \"monthly\" ? \"monthly\" : args.period === \"weekly\" ? \"weekly\" : undefined,\n key: typeof args.key === \"string\" ? args.key : undefined,\n });\n case \"engram.continuity_incident_open\":\n return this.service.continuityIncidentOpen({\n symptom: typeof args.symptom === \"string\" ? args.symptom : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n triggerWindow: typeof args.triggerWindow === \"string\" ? args.triggerWindow : undefined,\n suspectedCause: typeof args.suspectedCause === \"string\" ? args.suspectedCause : undefined,\n });\n case \"engram.continuity_incident_close\":\n return this.service.continuityIncidentClose({\n id: typeof args.id === \"string\" ? args.id : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n fixApplied: typeof args.fixApplied === \"string\" ? args.fixApplied : \"\",\n verificationResult: typeof args.verificationResult === \"string\" ? args.verificationResult : \"\",\n preventiveRule: typeof args.preventiveRule === \"string\" ? args.preventiveRule : undefined,\n });\n case \"engram.continuity_incident_list\":\n return this.service.continuityIncidentList({\n state: args.state === \"closed\" ? \"closed\" : args.state === \"all\" ? \"all\" : args.state === \"open\" ? \"open\" : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n });\n case \"engram.continuity_loop_add_or_update\":\n return this.service.continuityLoopAddOrUpdate({\n id: typeof args.id === \"string\" ? args.id : \"\",\n cadence: (args.cadence as \"daily\" | \"weekly\" | \"monthly\" | \"quarterly\") ?? \"weekly\",\n purpose: typeof args.purpose === \"string\" ? args.purpose : \"\",\n status: (args.status as \"active\" | \"paused\" | \"retired\") ?? \"active\",\n killCondition: typeof args.killCondition === \"string\" ? args.killCondition : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n lastReviewed: typeof args.lastReviewed === \"string\" ? args.lastReviewed : undefined,\n notes: typeof args.notes === \"string\" ? args.notes : undefined,\n });\n case \"engram.continuity_loop_review\":\n return this.service.continuityLoopReview({\n id: typeof args.id === \"string\" ? args.id : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n status: args.status === \"active\" || args.status === \"paused\" || args.status === \"retired\" ? args.status : undefined,\n notes: typeof args.notes === \"string\" ? args.notes : undefined,\n reviewedAt: typeof args.reviewedAt === \"string\" ? args.reviewedAt : undefined,\n });\n case \"engram.identity_anchor_get\":\n return this.service.identityAnchorGet({\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n });\n case \"engram.identity_anchor_update\":\n return this.service.identityAnchorUpdate({\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n identityTraits: typeof args.identityTraits === \"string\" ? args.identityTraits : undefined,\n communicationPreferences: typeof args.communicationPreferences === \"string\" ? args.communicationPreferences : undefined,\n operatingPrinciples: typeof args.operatingPrinciples === \"string\" ? args.operatingPrinciples : undefined,\n continuityNotes: typeof args.continuityNotes === \"string\" ? args.continuityNotes : undefined,\n });\n case \"engram.memory_identity\":\n return this.service.memoryIdentity({\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n });\n // ── Work Layer tools ──────────────────────────────────────────────\n case \"engram.work_task\":\n return this.service.workTask({\n action: (args.action as any) ?? \"list\",\n id: typeof args.id === \"string\" ? args.id : undefined,\n title: typeof args.title === \"string\" ? args.title : undefined,\n description: typeof args.description === \"string\" ? args.description : undefined,\n status: typeof args.status === \"string\" ? args.status : undefined,\n priority: typeof args.priority === \"string\" ? args.priority : undefined,\n owner: typeof args.owner === \"string\" ? args.owner : undefined,\n assignee: typeof args.assignee === \"string\" ? args.assignee : undefined,\n projectId: typeof args.projectId === \"string\" ? args.projectId : undefined,\n tags: Array.isArray(args.tags) ? args.tags.filter((x: unknown): x is string => typeof x === \"string\") : undefined,\n dueAt: typeof args.dueAt === \"string\" ? args.dueAt : undefined,\n });\n case \"engram.work_project\":\n return this.service.workProject({\n action: (args.action as any) ?? \"list\",\n id: typeof args.id === \"string\" ? args.id : undefined,\n name: typeof args.name === \"string\" ? args.name : undefined,\n description: typeof args.description === \"string\" ? args.description : undefined,\n status: typeof args.status === \"string\" ? args.status : undefined,\n owner: typeof args.owner === \"string\" ? args.owner : undefined,\n tags: Array.isArray(args.tags) ? args.tags.filter((x: unknown): x is string => typeof x === \"string\") : undefined,\n taskId: typeof args.taskId === \"string\" ? args.taskId : undefined,\n projectId: typeof args.projectId === \"string\" ? args.projectId : undefined,\n });\n case \"engram.work_board\":\n return this.service.workBoard({\n action: (args.action as any) ?? \"export_markdown\",\n projectId: typeof args.projectId === \"string\" ? args.projectId : undefined,\n snapshotJson: typeof args.snapshotJson === \"string\" ? args.snapshotJson : undefined,\n linkToMemory: args.linkToMemory === true,\n });\n // ── Shared Context / Compounding tools ─────────────────────────\n case \"engram.shared_context_write_output\":\n return this.service.sharedContextWriteOutput({\n agentId: typeof args.agentId === \"string\" ? args.agentId : \"\",\n title: typeof args.title === \"string\" ? args.title : \"\",\n content: typeof args.content === \"string\" ? args.content : \"\",\n });\n case \"engram.shared_feedback_record\":\n return this.service.sharedFeedbackRecord({\n agent: typeof args.agent === \"string\" ? args.agent : \"\",\n decision: (args.decision as any) ?? \"approved\",\n reason: typeof args.reason === \"string\" ? args.reason : \"\",\n date: typeof args.date === \"string\" ? args.date : undefined,\n learning: typeof args.learning === \"string\" ? args.learning : undefined,\n outcome: typeof args.outcome === \"string\" ? args.outcome : undefined,\n severity: args.severity === \"low\" || args.severity === \"medium\" || args.severity === \"high\" ? args.severity : undefined,\n confidence: typeof args.confidence === \"number\" ? args.confidence : undefined,\n workflow: typeof args.workflow === \"string\" ? args.workflow : undefined,\n tags: Array.isArray(args.tags) ? args.tags.filter((x: unknown): x is string => typeof x === \"string\") : undefined,\n evidenceWindowStart: typeof args.evidenceWindowStart === \"string\" ? args.evidenceWindowStart : undefined,\n evidenceWindowEnd: typeof args.evidenceWindowEnd === \"string\" ? args.evidenceWindowEnd : undefined,\n refs: Array.isArray(args.refs) ? args.refs.filter((x: unknown): x is string => typeof x === \"string\") : undefined,\n });\n case \"engram.shared_priorities_append\":\n return this.service.sharedPrioritiesAppend({\n agentId: typeof args.agentId === \"string\" ? args.agentId : \"\",\n text: typeof args.text === \"string\" ? args.text : \"\",\n });\n case \"engram.shared_context_cross_signals_run\":\n return this.service.sharedContextCrossSignalsRun({\n date: typeof args.date === \"string\" ? args.date : undefined,\n });\n case \"engram.shared_context_curate_daily\":\n return this.service.sharedContextCurateDaily({\n date: typeof args.date === \"string\" ? args.date : undefined,\n });\n case \"engram.compounding_weekly_synthesize\":\n return this.service.compoundingWeeklySynthesize({\n weekId: typeof args.weekId === \"string\" ? args.weekId : undefined,\n });\n case \"engram.compounding_promote_candidate\":\n return this.service.compoundingPromoteCandidate({\n weekId: typeof args.weekId === \"string\" ? args.weekId : \"\",\n candidateId: typeof args.candidateId === \"string\" ? args.candidateId : \"\",\n dryRun: args.dryRun === true,\n });\n // ── Compression Guidelines tools ───────────────────────────────────\n case \"engram.compression_guidelines_optimize\":\n return this.service.compressionGuidelinesOptimize({\n dryRun: args.dryRun === true,\n eventLimit: typeof args.eventLimit === \"number\" ? args.eventLimit : undefined,\n });\n case \"engram.compression_guidelines_activate\":\n return this.service.compressionGuidelinesActivate({\n expectedContentHash: typeof args.expectedContentHash === \"string\" ? args.expectedContentHash : undefined,\n expectedGuidelineVersion: typeof args.expectedGuidelineVersion === \"number\" ? args.expectedGuidelineVersion : undefined,\n });\n // ── Memory search & debug tools ──────────────────────────────────\n case \"engram.memory_search\":\n return this.service.memorySearch({\n query: typeof args.query === \"string\" ? args.query : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n maxResults: typeof args.maxResults === \"number\" && Number.isFinite(args.maxResults) ? args.maxResults : undefined,\n collection: typeof args.collection === \"string\" ? args.collection : undefined,\n principal: effectivePrincipal,\n });\n case \"engram.memory_profile\":\n return this.service.memoryProfile(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n effectivePrincipal,\n );\n case \"engram.memory_entities_list\":\n return this.service.memoryEntitiesList(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n effectivePrincipal,\n );\n case \"engram.memory_questions\":\n return this.service.memoryQuestions(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n effectivePrincipal,\n );\n case \"engram.memory_last_recall\":\n return this.service.lastRecallSnapshot(\n typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n );\n case \"engram.memory_intent_debug\":\n return this.service.intentDebug(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n );\n case \"engram.memory_qmd_debug\":\n return this.service.qmdDebug(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n );\n case \"engram.memory_graph_explain\":\n return this.service.graphExplainLastRecall(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n );\n case \"engram.graph_snapshot\": {\n // Validate the typed inputs at the boundary — silently coercing\n // unknown shapes (e.g. `limit: \"200\"`) would defeat the access\n // service's tighter parser (CLAUDE.md rule 28 + 51).\n if (args.limit !== undefined && typeof args.limit !== \"number\") {\n throw new Error(\"engram.graph_snapshot: limit must be a number\");\n }\n if (args.since !== undefined && typeof args.since !== \"string\") {\n throw new Error(\"engram.graph_snapshot: since must be a string\");\n }\n if (\n args.focusNodeId !== undefined\n && typeof args.focusNodeId !== \"string\"\n ) {\n throw new Error(\"engram.graph_snapshot: focusNodeId must be a string\");\n }\n let categories: string[] | undefined;\n if (args.categories !== undefined) {\n if (!Array.isArray(args.categories)) {\n throw new Error(\n \"engram.graph_snapshot: categories must be an array of strings\",\n );\n }\n categories = args.categories.map((value, index) => {\n if (typeof value !== \"string\") {\n throw new Error(\n `engram.graph_snapshot: categories[${index}] must be a string`,\n );\n }\n return value;\n });\n }\n return this.service.graphSnapshot(\n {\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n since: typeof args.since === \"string\" ? args.since : undefined,\n focusNodeId: typeof args.focusNodeId === \"string\"\n ? args.focusNodeId\n : undefined,\n ...(categories !== undefined ? { categories } : {}),\n },\n effectivePrincipal,\n );\n }\n case \"engram.memory_feedback\":\n return this.service.memoryFeedback({\n memoryId: typeof args.memoryId === \"string\" ? args.memoryId : \"\",\n vote: args.vote === \"down\" ? \"down\" : \"up\",\n note: typeof args.note === \"string\" ? args.note : undefined,\n });\n case \"engram.memory_promote\":\n return this.service.memoryPromote({\n memoryId: typeof args.memoryId === \"string\" ? args.memoryId : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n });\n case \"engram.memory_outcome\": {\n // Validate `outcome` up front — silently defaulting unknown values\n // to \"success\" or \"failure\" would poison the counters a downstream\n // recall filter (PR 4) will trust.\n const outcome = args.outcome;\n if (outcome !== \"success\" && outcome !== \"failure\") {\n throw new Error(\n `engram.memory_outcome: outcome must be \"success\" or \"failure\"; got ${JSON.stringify(outcome)}`,\n );\n }\n return this.service.memoryOutcome({\n memoryId: typeof args.memoryId === \"string\" ? args.memoryId : \"\",\n outcome,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n timestamp: typeof args.timestamp === \"string\" ? args.timestamp : undefined,\n });\n }\n case \"engram.memory_action_apply\":\n return this.service.memoryActionApply({\n action: typeof args.action === \"string\" ? args.action : \"\",\n outcome: typeof args.outcome === \"string\" ? args.outcome : undefined,\n reason: typeof args.reason === \"string\" ? args.reason : undefined,\n memoryId: typeof args.memoryId === \"string\" ? args.memoryId : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : undefined,\n content: typeof args.content === \"string\" ? args.content : undefined,\n category: typeof args.category === \"string\" ? args.category : undefined,\n linkTargetId: typeof args.linkTargetId === \"string\" ? args.linkTargetId : undefined,\n linkType: typeof args.linkType === \"string\" ? args.linkType : undefined,\n linkStrength: typeof args.linkStrength === \"number\" ? args.linkStrength : undefined,\n artifactType: typeof args.artifactType === \"string\" ? args.artifactType : undefined,\n execute: typeof args.execute === \"boolean\" ? args.execute : undefined,\n sourcePrompt: typeof args.sourcePrompt === \"string\" ? args.sourcePrompt : undefined,\n dryRun: args.dryRun === true,\n });\n case \"engram.context_checkpoint\":\n return this.service.contextCheckpoint({\n sessionKey: typeof args.sessionKey === \"string\" ? args.sessionKey : \"\",\n context: typeof args.context === \"string\" ? args.context : \"\",\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n principal: effectivePrincipal,\n });\n // ── Daily Context Briefing (#370) ───────────────────────────────────\n case \"engram.briefing\": {\n // Validate the format value upfront — unsupported values (e.g. \"xml\")\n // must be rejected with a descriptive error rather than silently\n // falling back to the default format.\n const rawFormat = typeof args.format === \"string\" ? args.format : undefined;\n const formatErr = validateBriefingFormat(rawFormat);\n if (formatErr) throw new Error(formatErr);\n return this.service.briefing({\n since: typeof args.since === \"string\" ? args.since : undefined,\n focus: typeof args.focus === \"string\" ? args.focus : undefined,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n format: rawFormat as \"json\" | \"markdown\" | undefined,\n maxFollowups:\n typeof args.maxFollowups === \"number\" ? args.maxFollowups : undefined,\n principal: effectivePrincipal,\n });\n }\n // ── Contradiction Review (issue #520) ──────────────────────────────────\n case \"engram.review_list\":\n case \"remnic.review_list\": {\n const { listPairs } = await import(\"./contradiction/contradiction-review.js\");\n const VALID_REVIEW_FILTERS = new Set([\"all\", \"unresolved\", \"contradicts\", \"independent\", \"duplicates\", \"needs-user\"]);\n const rawFilter = typeof args.filter === \"string\" ? args.filter : \"unresolved\";\n if (!VALID_REVIEW_FILTERS.has(rawFilter)) {\n throw new Error(`Invalid filter '${rawFilter}'. Valid: ${[...VALID_REVIEW_FILTERS].join(\", \")}`);\n }\n const filter = rawFilter as \"all\" | \"unresolved\" | \"contradicts\" | \"independent\" | \"duplicates\" | \"needs-user\";\n const ns = typeof args.namespace === \"string\" ? args.namespace : undefined;\n const limit = typeof args.limit === \"number\" ? args.limit : 50;\n return listPairs(this.service.memoryDir, { filter, namespace: ns, limit });\n }\n case \"engram.review_resolve\":\n case \"remnic.review_resolve\": {\n const pairId = typeof args.pairId === \"string\" ? args.pairId : \"\";\n const verb = typeof args.verb === \"string\" ? args.verb : \"\";\n if (!pairId) throw new Error(\"pairId is required\");\n if (!verb) throw new Error(\"verb is required\");\n const { isValidResolutionVerb } = await import(\"./contradiction/resolution.js\");\n if (!isValidResolutionVerb(verb)) throw new Error(`Invalid verb: ${verb}. Must be one of: keep-a, keep-b, merge, both-valid, needs-more-context`);\n const { executeResolution } = await import(\"./contradiction/resolution.js\");\n return executeResolution(this.service.memoryDir, this.service.storageRef, pairId, verb);\n }\n case \"engram.contradiction_scan_run\":\n case \"remnic.contradiction_scan_run\": {\n const { runContradictionScan } = await import(\"./contradiction/contradiction-scan.js\");\n return runContradictionScan({\n storage: this.service.storageRef,\n config: this.service.configRef,\n memoryDir: this.service.memoryDir,\n embeddingLookupFactory: this.service.embeddingLookupFactoryRef,\n localLlm: this.service.localLlmRef,\n fallbackLlm: this.service.fallbackLlmRef,\n namespace: typeof args.namespace === \"string\" ? args.namespace : undefined,\n });\n }\n case \"engram.memory_summarize_hourly\":\n case \"remnic.memory_summarize_hourly\":\n return this.service.memorySummarizeHourly();\n case \"engram.conversation_index_update\":\n case \"remnic.conversation_index_update\": {\n if (\"sessionKey\" in args && args.sessionKey !== undefined && typeof args.sessionKey !== \"string\") {\n throw new Error(\"sessionKey must be a string when provided\");\n }\n const sessionKey = typeof args.sessionKey === \"string\" ? args.sessionKey : undefined;\n return this.service.conversationIndexUpdate({\n sessionKey,\n hours: typeof args.hours === \"number\" && Number.isFinite(args.hours) ? args.hours : undefined,\n embed: typeof args.embed === \"boolean\" ? args.embed : undefined,\n });\n }\n case \"engram.profiling_report\":\n case \"remnic.profiling_report\": {\n if (\"format\" in args && args.format !== undefined && typeof args.format !== \"string\") {\n throw new EngramAccessInputError(\"format must be a string when provided\");\n }\n if (\"limit\" in args && args.limit !== undefined && typeof args.limit !== \"number\") {\n throw new EngramAccessInputError(\"limit must be a number when provided\");\n }\n return this.service.profilingReport({\n format: typeof args.format === \"string\" ? args.format : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n });\n }\n case \"engram.graph_edge_decay_run\":\n case \"remnic.graph_edge_decay_run\": {\n // Issue #681 PR 2/3 — gated by config; tool always callable, but\n // the job is a no-op when disabled (and the response indicates it).\n const cfg = this.service.configRef;\n if (!cfg.graphEdgeDecayEnabled) {\n return {\n ranAt: new Date().toISOString(),\n disabled: true,\n reason: \"graphEdgeDecayEnabled is false\",\n };\n }\n const { runGraphEdgeDecayMaintenanceAcrossNamespaces } = await import(\n \"./maintenance/graph-edge-decay.js\"\n );\n const dryRun = args.dryRun === true;\n // Codex P2 / gotcha #42: enumerate every namespace storage root\n // so non-default namespaces (memoryDir/namespaces/<ns>) also get\n // confidence decay applied. Returns a list of per-namespace\n // results — each with telemetry or an error string.\n const results = await runGraphEdgeDecayMaintenanceAcrossNamespaces(\n this.service.memoryDir,\n {\n windowMs: cfg.graphEdgeDecayWindowMs,\n perWindow: cfg.graphEdgeDecayPerWindow,\n floor: cfg.graphEdgeDecayFloor,\n visibilityThreshold: cfg.graphEdgeDecayVisibilityThreshold,\n dryRun,\n namespacesEnabled: cfg.namespacesEnabled === true,\n defaultNamespace: cfg.defaultNamespace,\n },\n );\n return { results };\n }\n case \"engram.live_connectors_run\":\n case \"remnic.live_connectors_run\":\n return this.service.liveConnectorsRun(\n {\n authenticatedPrincipal: effectivePrincipal,\n force: args.force === true,\n },\n effectivePrincipal,\n );\n // ── Peer Registry dispatchers (issue #679 PR 4/5) ─────────────────\n case \"engram.peer_list\":\n case \"remnic.peer_list\":\n return this.service.peerList();\n case \"engram.peer_get\":\n case \"remnic.peer_get\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n if (!id) throw new Error(\"engram.peer_get: id is required\");\n return this.service.peerGet(id);\n }\n case \"engram.peer_set\":\n case \"remnic.peer_set\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n if (!id) throw new Error(\"engram.peer_set: id is required\");\n // Codex P2 (PR #756 round 2): mirror the HTTP surface — reject\n // non-string `kind`/`displayName`/`notes` rather than silently\n // coercing to `undefined` and letting peerSet fall back to its\n // \"human\" default. Symmetry across access surfaces (CLAUDE.md\n // rule 39) and no-silent-defaults on bad input (rule 51).\n if (args.kind !== undefined && typeof args.kind !== \"string\") {\n throw new Error(\"engram.peer_set: kind must be a string when provided\");\n }\n if (args.displayName !== undefined && typeof args.displayName !== \"string\") {\n throw new Error(\"engram.peer_set: displayName must be a string when provided\");\n }\n if (args.notes !== undefined && typeof args.notes !== \"string\") {\n throw new Error(\"engram.peer_set: notes must be a string when provided\");\n }\n return this.service.peerSet({\n id,\n kind: typeof args.kind === \"string\" ? args.kind : undefined,\n displayName: typeof args.displayName === \"string\" ? args.displayName : undefined,\n notes: typeof args.notes === \"string\" ? args.notes : undefined,\n });\n }\n case \"engram.peer_delete\":\n case \"remnic.peer_delete\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n if (!id) throw new Error(\"engram.peer_delete: id is required\");\n return this.service.peerDelete(id);\n }\n case \"engram.peer_profile_get\":\n case \"remnic.peer_profile_get\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n if (!id) throw new Error(\"engram.peer_profile_get: id is required\");\n return this.service.peerProfileGet(id);\n }\n case \"engram.peer_forget\":\n case \"remnic.peer_forget\": {\n const id = typeof args.id === \"string\" ? args.id : \"\";\n if (!id) throw new Error(\"engram.peer_forget: id is required\");\n const confirm = typeof args.confirm === \"string\" ? args.confirm : \"\";\n if (confirm !== \"yes\") {\n throw new Error(\n \"engram.peer_forget: confirm must be 'yes' to prevent accidental data loss\",\n );\n }\n return this.service.peerForget(id, { confirm: \"yes\" });\n }\n // ── Operator Console state (issue #688 PR 2/3) ──────────────────────────\n case \"engram.console_state\":\n case \"remnic.console_state\":\n return this.service.consoleState(\n typeof args.namespace === \"string\" ? args.namespace : undefined,\n effectivePrincipal,\n );\n // ── Dreams telemetry (issue #678 PR 3+4) ──────────────────────────────\n case \"engram.dreams_status\":\n case \"remnic.dreams_status\": {\n const { normalizeDreamsStatusWindowHours } = await import(\"./maintenance/dreams-ledger.js\");\n let windowHours = 24;\n try {\n windowHours = normalizeDreamsStatusWindowHours(args.windowHours);\n } catch {\n throw new Error(\n `engram.dreams_status: windowHours must be a positive integer (e.g. 24). Got: ${String(args.windowHours)}`,\n );\n }\n if (\n \"namespace\" in args &&\n args.namespace !== undefined &&\n typeof args.namespace !== \"string\"\n ) {\n throw new Error(\"engram.dreams_status: namespace must be a string when provided\");\n }\n const namespace =\n typeof args.namespace === \"string\" ? args.namespace : undefined;\n return this.service.dreamsStatus({\n windowHours,\n namespace,\n principal: effectivePrincipal,\n });\n }\n case \"engram.dreams_run\":\n case \"remnic.dreams_run\": {\n const VALID_PHASES = [\"lightSleep\", \"rem\", \"deepSleep\"];\n const phase = typeof args.phase === \"string\" ? args.phase : \"\";\n if (!phase || !VALID_PHASES.includes(phase)) {\n throw new Error(\n `engram.dreams_run: phase is required and must be one of: ${VALID_PHASES.join(\", \")}`,\n );\n }\n if (\n \"dryRun\" in args &&\n args.dryRun !== undefined &&\n typeof args.dryRun !== \"boolean\"\n ) {\n throw new Error(\"engram.dreams_run: dryRun must be a boolean when provided\");\n }\n if (\n \"namespace\" in args &&\n args.namespace !== undefined &&\n typeof args.namespace !== \"string\"\n ) {\n throw new Error(\"engram.dreams_run: namespace must be a string when provided\");\n }\n const namespace =\n typeof args.namespace === \"string\" ? args.namespace : undefined;\n const dryRun = args.dryRun === true;\n return this.service.dreamsRun({\n phase: phase as import(\"./types.js\").DreamsPhase,\n dryRun,\n namespace,\n authenticatedPrincipal: effectivePrincipal,\n });\n }\n default:\n throw new Error(`unknown tool: ${name}`);\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|