@remnic/core 9.3.642 → 9.3.644

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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mcp-memory-inspector-app.ts"],"sourcesContent":["import type { EngramAccessRecallResponse } from \"./access-service.js\";\nimport type { ActionConfidenceRequest } from \"./access-schema.js\";\nimport type { RecallXrayResult, RecallXraySnapshot } from \"./recall-xray.js\";\nimport type { ActionConfidenceResult } from \"./action-confidence.js\";\nimport type { RetrievedMemoryProvenance } from \"./memory-provenance.js\";\n\nexport const REMNIC_CHATGPT_MEMORY_INSPECTOR_TOOL =\n \"engram.chatgpt_memory_inspector\" as const;\nexport const REMNIC_CHATGPT_MEMORY_INSPECTOR_CANONICAL_TOOL =\n \"remnic.chatgpt_memory_inspector\" as const;\nexport const REMNIC_CHATGPT_MEMORY_INSPECTOR_WIDGET_URI =\n \"ui://remnic/memory-inspector.v1.html\" as const;\nexport const REMNIC_CHATGPT_MEMORY_INSPECTOR_MIME_TYPE =\n \"text/html;profile=mcp-app\" as const;\n\nexport interface RemnicChatGptMemoryInspectorInput {\n query: string;\n sessionKey?: string;\n namespace?: string;\n currentContextScopes?: string[];\n}\n\nexport interface RemnicChatGptMemoryCard {\n id: string;\n path?: string;\n category?: string;\n status?: string;\n preview?: string;\n servedBy?: string;\n score?: number;\n source?: string;\n scope?: string;\n retrievalReason?: string;\n confidence?: number;\n stale?: boolean;\n corrected?: boolean;\n safeToUse?: boolean;\n safety?: string;\n safetyReasons: string[];\n userContextScopes: string[];\n}\n\nexport interface RemnicChatGptMemoryInspectorResult {\n app: {\n name: \"Remnic Memory Inspector\";\n resourceUri: typeof REMNIC_CHATGPT_MEMORY_INSPECTOR_WIDGET_URI;\n archetype: \"vanilla-widget\";\n };\n query: string;\n sessionKey?: string;\n namespace: string;\n safeRecallPreview: string;\n memoryCount: number;\n memoryIds: string[];\n memories: RemnicChatGptMemoryCard[];\n actionConfidence: ActionConfidenceResult;\n affordances: Array<{\n id: \"why\" | \"correct\" | \"forget\" | \"scope\";\n label: string;\n followUpPrompt: string;\n }>;\n guidance: {\n correctionTool: \"remnic.suggestion_submit\";\n forgetTool: \"remnic.memory_action_apply\";\n scopeTool: \"remnic.memory_action_apply\";\n note: string;\n };\n}\n\nexport function buildChatGptMemoryInspectorActionRequest(\n input: RemnicChatGptMemoryInspectorInput,\n recall: EngramAccessRecallResponse,\n xray: RecallXraySnapshot | null,\n): ActionConfidenceRequest {\n const provenances = buildRecallProvenances(recall, xray);\n const hasUnsafeOrMissingProvenance = provenances.some(\n (provenance) => provenance.safeToUse === false || provenance.safety === \"blocked\",\n ) || provenances.length < recall.count;\n\n const request: ActionConfidenceRequest = {\n intendedAction: `Use Remnic memory to answer: ${input.query}`,\n risk: \"medium\",\n contextReadiness:\n recall.count > 0 && !hasUnsafeOrMissingProvenance ? \"sufficient\" : \"partial\",\n retrievedMemories: provenances.map((provenance) => ({\n source: provenance.source,\n created: provenance.created,\n updated: provenance.updated,\n scope: provenance.scope,\n userContextScopes: provenance.userContextScopes,\n retrievalReason: provenance.retrievalReason,\n confidence: provenance.confidence,\n stale: provenance.stale,\n corrected: provenance.corrected,\n correctionState: provenance.correctionState,\n safeToUse: provenance.safeToUse,\n safety: provenance.safety,\n safetyReasons: provenance.safetyReasons,\n })),\n };\n const confidence = provenances.length > 0\n ? average(provenances.map((provenance) => provenance.confidence ?? 0.5))\n : undefined;\n if (confidence !== undefined) request.confidence = confidence;\n if (input.currentContextScopes !== undefined) {\n request.currentContextScopes = input.currentContextScopes;\n }\n return request;\n}\n\nexport function buildChatGptMemoryInspectorResult(\n input: RemnicChatGptMemoryInspectorInput,\n recall: EngramAccessRecallResponse,\n xray: RecallXraySnapshot | null,\n actionConfidence: ActionConfidenceResult,\n): RemnicChatGptMemoryInspectorResult {\n const xrayUnavailable = xray === null;\n const matchXrayResult = buildXrayResultMatcher(xray);\n const matchedXrayResults = recall.results.map(matchXrayResult);\n\n const memories = recall.results.slice(0, 8).map((summary) => {\n const xrayResult = matchXrayResult(summary);\n const provenance = xrayResult?.provenance;\n const unverified = !xrayUnavailable && provenance === undefined;\n const blocked = provenance?.safety === \"blocked\";\n const preview = xrayUnavailable\n ? \"Preview withheld: X-ray provenance was unavailable for this recall.\"\n : unverified\n ? \"Preview withheld: X-ray provenance was missing for this memory.\"\n : blocked\n ? \"Preview withheld: this memory is blocked in the current context.\"\n : summary.preview;\n return {\n id: summary.id,\n path: summary.path,\n category: summary.category,\n status: summary.status,\n preview,\n servedBy: xrayResult?.servedBy,\n score: xrayResult?.scoreDecomposition.final,\n source: provenance?.source,\n scope: provenance?.scope,\n retrievalReason: provenance?.retrievalReason,\n confidence: provenance?.confidence,\n stale: provenance?.stale,\n corrected: provenance?.corrected,\n safeToUse: provenance?.safeToUse ?? (unverified ? false : undefined),\n safety: provenance?.safety ?? (unverified ? \"blocked\" : undefined),\n safetyReasons: provenance?.safetyReasons\n ?? (unverified ? [\"X-ray provenance was missing for this memory.\"] : []),\n userContextScopes: provenance?.userContextScopes ?? [],\n };\n });\n const blockedCount = matchedXrayResults\n .filter((result) => result?.provenance?.safety === \"blocked\")\n .length;\n const missingProvenanceCount = xrayUnavailable\n ? 0\n : matchedXrayResults\n .filter((result) => result?.provenance === undefined)\n .length;\n const safeRecallPreview = xrayUnavailable\n ? \"Recall preview withheld: X-ray provenance was unavailable, so memory safety could not be verified.\"\n : blockedCount > 0 || missingProvenanceCount > 0\n ? formatUnsafeRecallPreview(blockedCount, missingProvenanceCount)\n : truncate(recall.context, 1_500);\n\n const primaryMemoryId = memories[0]?.id ?? \"<memory-id>\";\n return {\n app: {\n name: \"Remnic Memory Inspector\",\n resourceUri: REMNIC_CHATGPT_MEMORY_INSPECTOR_WIDGET_URI,\n archetype: \"vanilla-widget\",\n },\n query: recall.query || input.query,\n ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),\n namespace: recall.namespace,\n safeRecallPreview,\n memoryCount: recall.count,\n memoryIds: recall.memoryIds,\n memories,\n actionConfidence,\n affordances: [\n {\n id: \"why\",\n label: \"Why retrieved\",\n followUpPrompt:\n `Explain why Remnic retrieved memory ${primaryMemoryId} for \"${input.query}\" using its provenance, score, safety, and retrieval reason.`,\n },\n {\n id: \"correct\",\n label: \"Correct\",\n followUpPrompt:\n `Help me correct memory ${primaryMemoryId}. Draft a replacement or correction and use remnic.suggestion_submit with dryRun first.`,\n },\n {\n id: \"forget\",\n label: \"Forget\",\n followUpPrompt:\n `Help me forget or quarantine memory ${primaryMemoryId}. Ask me to confirm before using any destructive or persistent Remnic action.`,\n },\n {\n id: \"scope\",\n label: \"Scope\",\n followUpPrompt:\n `Help me scope memory ${primaryMemoryId} so it is only used in the right context. Prefer a dry-run Remnic action before any persistent change.`,\n },\n ],\n guidance: {\n correctionTool: \"remnic.suggestion_submit\",\n forgetTool: \"remnic.memory_action_apply\",\n scopeTool: \"remnic.memory_action_apply\",\n note:\n \"The demo only proposes correction, forget, and scoping flows. The widget sends follow-up prompts; persistent changes still require an explicit tool call and user confirmation.\",\n },\n };\n}\n\nexport const REMNIC_CHATGPT_MEMORY_INSPECTOR_WIDGET_HTML = `\n<div id=\"root\" class=\"remnic-app\">Loading Remnic memory inspector...</div>\n<style>\n :root {\n color-scheme: light dark;\n --bg: #f8faf8;\n --panel: #ffffff;\n --text: #17201b;\n --muted: #56635b;\n --line: #d8e0da;\n --accent: #2f7d57;\n --warn: #9a5b14;\n --bad: #9c2b2b;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #101512;\n --panel: #18201b;\n --text: #edf4ef;\n --muted: #a8b6ad;\n --line: #304036;\n --accent: #75c79a;\n --warn: #e0ad63;\n --bad: #f08a8a;\n }\n }\n body { margin: 0; background: var(--bg); color: var(--text); font: 14px/1.45 system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n .remnic-app { padding: 14px; display: grid; gap: 12px; }\n .header, .section, .memory { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 12px; }\n .title { font-size: 16px; font-weight: 650; margin: 0; }\n .muted { color: var(--muted); }\n .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 8px; }\n .pill { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--line); border-radius: 999px; padding: 2px 8px; margin: 2px 4px 2px 0; color: var(--muted); }\n .safe { color: var(--accent); }\n .review { color: var(--warn); }\n .blocked { color: var(--bad); }\n .memory { display: grid; gap: 8px; }\n .memory-title { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; font-weight: 650; }\n .preview { white-space: pre-wrap; overflow-wrap: anywhere; }\n .actions { display: flex; flex-wrap: wrap; gap: 8px; }\n button { border: 1px solid var(--line); background: transparent; color: var(--text); border-radius: 6px; padding: 6px 9px; font: inherit; cursor: pointer; }\n button:hover { border-color: var(--accent); }\n pre { white-space: pre-wrap; overflow-wrap: anywhere; margin: 0; color: var(--muted); }\n</style>\n<script>\n const root = document.getElementById(\"root\");\n\n function escapeHtml(value) {\n return String(value ?? \"\").replace(/[&<>\"']/g, (char) => ({\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#39;\",\n }[char]));\n }\n\n function statusClass(value) {\n if (value === \"blocked\" || value === false) return \"blocked\";\n if (value === \"requires-review\") return \"review\";\n return \"safe\";\n }\n\n function followUp(prompt) {\n if (window.openai?.sendFollowUpMessage) {\n window.openai.sendFollowUpMessage({ prompt, scrollToBottom: true });\n return;\n }\n window.parent.postMessage({\n jsonrpc: \"2.0\",\n method: \"ui/message\",\n params: {\n role: \"user\",\n content: [{ type: \"text\", text: prompt }],\n },\n }, \"*\");\n }\n\n function actionButtons(actions) {\n return (actions ?? []).map((action) =>\n '<button type=\"button\" data-prompt=\"' + escapeHtml(action.followUpPrompt) + '\">' +\n escapeHtml(action.label) +\n '</button>'\n ).join(\"\");\n }\n\n function render(payload) {\n const data = payload?.structuredContent ?? payload ?? window.openai?.toolOutput ?? {};\n const confidence = data.actionConfidence ?? {};\n const memories = Array.isArray(data.memories) ? data.memories : [];\n root.innerHTML = [\n '<section class=\"header\">',\n '<p class=\"title\">Remnic Memory Inspector</p>',\n '<div class=\"muted\">' + escapeHtml(data.query ?? \"No query\") + '</div>',\n '<div class=\"grid\">',\n '<div><strong>Namespace</strong><br><span class=\"muted\">' + escapeHtml(data.namespace ?? \"default\") + '</span></div>',\n '<div><strong>Decision</strong><br><span class=\"' + statusClass(confidence.decision) + '\">' + escapeHtml(confidence.decision ?? \"unknown\") + '</span></div>',\n '<div><strong>Memories</strong><br><span class=\"muted\">' + escapeHtml(data.memoryCount ?? memories.length) + '</span></div>',\n '</div>',\n '</section>',\n '<section class=\"section\">',\n '<strong>Safe recall preview</strong>',\n '<pre>' + escapeHtml(data.safeRecallPreview ?? \"\") + '</pre>',\n '</section>',\n '<section class=\"section actions\">',\n actionButtons(data.affordances),\n '</section>',\n memories.map((memory) => [\n '<article class=\"memory\">',\n '<div class=\"memory-title\"><span>' + escapeHtml(memory.id) + '</span><span class=\"' + statusClass(memory.safety) + '\">' + escapeHtml(memory.safety ?? \"safe\") + '</span></div>',\n '<div class=\"preview\">' + escapeHtml(memory.preview ?? \"\") + '</div>',\n '<div>',\n '<span class=\"pill\">source ' + escapeHtml(memory.source ?? \"unknown\") + '</span>',\n '<span class=\"pill\">scope ' + escapeHtml(memory.scope ?? \"unknown\") + '</span>',\n '<span class=\"pill\">reason ' + escapeHtml(memory.retrievalReason ?? memory.servedBy ?? \"unknown\") + '</span>',\n '<span class=\"pill\">confidence ' + escapeHtml(memory.confidence ?? \"n/a\") + '</span>',\n '</div>',\n '<div class=\"muted\">' + escapeHtml((memory.safetyReasons ?? []).join(\"; \")) + '</div>',\n '</article>',\n ].join(\"\")).join(\"\"),\n ].join(\"\");\n\n root.querySelectorAll(\"button[data-prompt]\").forEach((button) => {\n button.addEventListener(\"click\", () => followUp(button.getAttribute(\"data-prompt\") ?? \"\"));\n });\n }\n\n render(window.openai?.toolOutput);\n\n window.addEventListener(\"message\", (event) => {\n if (event.source !== window.parent) return;\n const message = event.data;\n if (!message || message.jsonrpc !== \"2.0\") return;\n if (message.method === \"ui/notifications/tool-result\") {\n render(message.params);\n }\n }, { passive: true });\n\n window.addEventListener(\"openai:set_globals\", (event) => {\n render(event.detail?.globals?.toolOutput ?? window.openai?.toolOutput);\n }, { passive: true });\n</script>\n`.trim();\n\nfunction average(values: number[]): number | undefined {\n if (values.length === 0) return undefined;\n return values.reduce((sum, value) => sum + value, 0) / values.length;\n}\n\nfunction buildRecallProvenances(\n recall: EngramAccessRecallResponse,\n xray: RecallXraySnapshot | null,\n): RetrievedMemoryProvenance[] {\n if (xray === null) {\n return recall.results.map(missingRecallProvenance);\n }\n const matchXrayResult = buildXrayResultMatcher(xray);\n return recall.results.map((summary) => {\n const result = matchXrayResult(summary);\n if (result === undefined) {\n return missingXrayResultProvenance(summary);\n }\n return result.provenance ?? missingProvenance(result);\n });\n}\n\nfunction buildXrayResultMatcher(\n xray: RecallXraySnapshot | null,\n): (summary: EngramAccessRecallResponse[\"results\"][number]) => RecallXrayResult | undefined {\n const xrayById = new Map<string, RecallXrayResult>();\n const xrayByPath = new Map<string, RecallXrayResult>();\n for (const result of xray?.results ?? []) {\n xrayById.set(result.memoryId, result);\n xrayByPath.set(result.path, result);\n }\n return (summary) => {\n if (summary.path) {\n return xrayByPath.get(summary.path);\n }\n return xrayById.get(summary.id);\n };\n}\n\nfunction missingProvenance(result: RecallXrayResult): RetrievedMemoryProvenance {\n return {\n source: \"unknown\",\n scope: \"unknown\",\n userContextScopes: [],\n retrievalReason: `X-ray provenance missing for ${result.memoryId || result.path}`,\n confidence: 0,\n stale: false,\n corrected: false,\n correctionState: \"none\",\n safeToUse: false,\n safety: \"blocked\",\n safetyReasons: [\"X-ray provenance was missing for this memory.\"],\n };\n}\n\nfunction missingXrayResultProvenance(\n summary: EngramAccessRecallResponse[\"results\"][number],\n): RetrievedMemoryProvenance {\n return {\n source: \"unknown\",\n scope: \"unknown\",\n userContextScopes: [],\n retrievalReason: `X-ray result missing for ${summary.path || summary.id}`,\n confidence: 0,\n stale: false,\n corrected: false,\n correctionState: \"none\",\n safeToUse: false,\n safety: \"blocked\",\n safetyReasons: [\"X-ray result was missing for this recalled memory.\"],\n };\n}\n\nfunction missingRecallProvenance(\n summary: EngramAccessRecallResponse[\"results\"][number],\n): RetrievedMemoryProvenance {\n return {\n source: \"unknown\",\n scope: \"unknown\",\n userContextScopes: [],\n retrievalReason: `X-ray provenance unavailable for ${summary.id || summary.path}`,\n confidence: 0,\n stale: false,\n corrected: false,\n correctionState: \"none\",\n safeToUse: false,\n safety: \"blocked\",\n safetyReasons: [\"X-ray provenance was unavailable for this recall.\"],\n };\n}\n\nfunction formatUnsafeRecallPreview(\n blockedCount: number,\n missingProvenanceCount: number,\n): string {\n const reasons: string[] = [];\n if (blockedCount > 0) {\n reasons.push(`${blockedCount} retrieved ${memoryNoun(blockedCount)} ${isAre(blockedCount)} blocked`);\n }\n if (missingProvenanceCount > 0) {\n reasons.push(\n `${missingProvenanceCount} retrieved ${memoryNoun(missingProvenanceCount)} ${isAre(missingProvenanceCount)} missing X-ray provenance`,\n );\n }\n return `Recall preview withheld: ${joinReasons(reasons)} in the current context.`;\n}\n\nfunction memoryNoun(count: number): string {\n return count === 1 ? \"memory\" : \"memories\";\n}\n\nfunction isAre(count: number): string {\n return count === 1 ? \"is\" : \"are\";\n}\n\nfunction joinReasons(reasons: string[]): string {\n if (reasons.length <= 1) return reasons[0] ?? \"memory safety could not be verified\";\n return `${reasons.slice(0, -1).join(\", \")} and ${reasons[reasons.length - 1]}`;\n}\n\nfunction truncate(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, Math.max(0, maxChars - 3))}...`;\n}\n"],"mappings":"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","names":[]}