Radial Memory Lab 0.1.0
本网站作者原创 · 包子海梦
实验性离线库，MIT授权，完整文本见LICENSE.txt。

它做什么
将明确的打字偏好、改口和指定偏好的撤回，组织成带原始来源键的有限记忆状态。
生成由中心、当前事实和来源记录组成的径向图数据，便于研究和可视化。
不调用模型或网络，不读取本机聊天，不默认写入磁盘，不发送消息。

快速开始
准备Node.js 22或更高版本，解压后在本目录打开终端。
检查全部合成测试：
node --test --test-reporter=tap test-radial-memory.mjs typed-extractor.test.mjs demo.test.mjs
查看完整合成演示：
node demo.mjs
不需要npm install。

文件
radial-memory-core.mjs：记忆状态、更正、撤回、校验、有限召回与图投影。
typed-extractor.mjs：仅从明确短句提取assert/retract候选，不赋予调用者信任或权限。
test-radial-memory.mjs、typed-extractor.test.mjs：对应原创合成测试。
demo.mjs、demo.test.mjs：4帧确定性演示及其组合验证。
frames.json：由demo.mjs调用真实core API产生的4帧合成图数据。
demo-projection.json：correct帧的原始图投影，方便独立绘图。
CREDITS.txt：出处研究与原创范围说明。

接入API的最小流程
import { extractTypedFacts } from './typed-extractor.mjs';
import { createRadialMemory, applyRadialFacts, recallRadialMemory, projectRadialMemory } from './radial-memory-core.mjs';
调用者先建立可信来源，再传入短typed段落；本包不提供聊天平台鉴权。
extractTypedFacts(segments)产生facts；applyRadialFacts(state,{companionId,scopeHash,facts})返回新状态与逐项results。
createRadialMemory要求companionId为local-deepseek，scopeHash为64位小写十六进制，fictionalBackground显式提供，可为空数组。
demo.mjs展示准确的输入形状与合成scope构造。scope摘要本身不是身份认证。

文字提取的范围
segments为最多32项的严格纯数据数组。每项exact shape：
{messageId,itemIndex,kind,text,at}
messageId仅ASCII [A-Za-z0-9][A-Za-z0-9_.:-]{0,127}；itemIndex为0..31；at为可信接入者提供的安全整数毫秒时间。
kind为typed、asr或image；只有typed生成候选。text最多1000个UTF-16码元；主题最多32个Unicode码点。
支持“我喜欢X”“我不喜欢X”“我讨厌X”“记住我喜欢X”“我现在不喜欢X了”等整条短句。
明确的“忘记我喜欢X”“忘记我不喜欢X”等产生对应极性的retract。
引用、反讽、条件、第三人称、提问、多行与混合指令不自动存成个人事实。
这是窄规则，不是通用语言理解；未匹配的文字仍应由外部系统作为普通聊天处理。

去重、更正与撤回
同一原始messageId加itemIndex生成稳定sourceKey，不用合并包ID替代原消息ID。
同源相同事实忽略，同源冲突拒绝；较早来源不会覆盖较新当前事实。
匹配当前极性的撤回移除派生详情，保留最小哈希墓碑防止重放复活。
撤回只作用于本状态，不会删除外部原始日志或备份。哈希不是加密或可靠匿名化。
每批可部分成功，必须检查所有results；达到容量后返回拒绝，不静默丢弃旧去重证据。

容量与召回
最多128个来源、32个主题、状态JSON UTF-8 64KiB；没有自动冷归档或待审队列。
recallRadialMemory的query最多2048个Unicode码点，maxChars为0..240。
明确主题用字面匹配；另支持“你记住了什么”“你还记得我喜欢什么吗”等窄完整偏好问句。
context使用[m1]短引用；完整来源信息在facts里。240限制按context的Unicode码点计，不是token上限，也不约束整个返回JSON。
不要把整个metadata、fictionalCore或图数据当成已受240字符限制的模型提示词。

给浏览器图展示的数据
frames.json顶层schema为xiaobu-radial-memory-demo-frames-v1；frames为initial、remember、correct、retract。
每帧含id、title、message、projection和recall。所有内容明确synthetic:true，没有真实用户数据。
projection.schema为dafeiyu-radial-projection-v1，直接读取nodes和edges；不要另造节点冒充真实状态。
fictional_background不是共同经历，owned_source_record边不是当前事实的证明；hash_tombstone不含撤回正文。
JSON仅提供数据，本包不含浏览器球形UI或浏览器直接执行的Node模块。

尚未完成或未提供
真实微信/其他平台接入、持久化、加密备份、跨进程并发、账号鉴权、关系成长计算、自动语义抽取、向量搜索、冷归档、球形UI均不在本包。
relationship为not_computed，真实相处计数0；角色设定不会伪造熟悉度。
合成测试通过不等于真实聊天质量、模型永不失忆、任何节省token比例或生产安全保证。
将本包用于真实数据前，需独立实现最少采集、访问授权、加密、保留期、删除与恢复流程，并按实际场景验收。
