在三台电脑之间进行切换操作时, 那些作为重度使用的用户, 察觉到 Skill、MCP, 还有对话历史这三者竟然全部都丢失不见, 哪怕文件实际上是完整的, 可这也起不到任何挽救的作用。此篇文章对四个路径方面存在的硬伤展开了极为深入细致的剖析, 并且分享讲述了应该怎样去进行启动器的开发工作, 从而达成实现完全便携化的一种情况, 让数据能够跟随使用者行动, 实现没有间隔的切换。
身为一名重度用户, 我于公司电脑、笔记本电脑、家里电脑这三台电脑之间来回进行切换, 每次更换电脑时, Skill、MCP、对话历史、项目记忆都会完全消失, 最为魔幻的是, 即便将整个文件夹拷贝过去, 打开之后依旧呈现空白状态, 本文记下了我怎样定位根本原因, 以及怎样写出这个便携化工具。
一、那个令人崩溃的瞬间
在某一个周一的早上, 我把存在 U 盘里的, 插入到公司的电脑之上, 然后双击那个 -.exe。
空白。
Skill列表呈现为空的状态存在, 存在MCP配置状态为空的情况, 存在对话历史为空有的情形。沉淀下来得几十条核心记忆规则, 现今一条没剩下呢。
我所做的头一件事, 是查检文件: 于.\\之下, 整整25个.文件俱在.\\之下, 几十条记忆文件同样也都在。而且, 在.json里边, MCP配置毫无差错。
文件全在,但 不认。
二、追根溯源:四个路径硬伤
翻了一遍的源码,找到了四个根因:
硬伤1:项目记忆按路径哈希命名
对工作区所具有的路径实施SHA1操作, 从中提取前16位当作项目用以记忆的目录名称。原本的路径是从C:\开始的, 然而现转变为D:\, 如此一来哈希值就发生了改变, 导致旧有的用以记忆的目录再也找寻不到了。
硬伤2:会话元数据存了旧路径
每一个.meta.json之中, 存在着一个字段。旧有的路径与新的工作区不相匹配, 这种情况下, 会将不匹配的会话全部都过滤掉, 如此一来, 侧边栏便自然而然地呈现为空白状态。
更让人觉得坑的是, 那些JSON文件当中的反斜杠没有进行转义, 呈现为(C:\\…)这个样子, 然后JSON.parse就直接出现问题了。它会吞掉异常并返回空对象, 字段变成了——过滤逻辑直接。
硬伤3:MCP路径硬编码盘符
. json之中, 有10个MCP, 它们全都写了C:\\\.exe这般的绝对路径, 一旦更换盘符, 便全部无法使用了。
硬伤4:默认指向C盘
运用~/./来存储数据, 其中~/展开之后是C:\Users\… , 即便你将整个文件夹拷贝至U盘, 它依旧会前往C盘去寻觅数据。
换言之, 你将整个文件夹挪至新电脑后, SKILL不存在, MCP不存在, 记忆不存在, 历史对话记录不存在;当你提及也把硬编码的C盘数据一同搬到新电脑, 这仅能让你的SKILL、MCP可见, 然而SKILL与MCP里的内容, 你在新电脑上仍需慢慢调整方可如之前那般使用。
但记忆和历史对话记录,想都不要想。
三、的设计思路
核心想法很简单:写一个启动器,在启动前修好一切。
双击 启动.bat
├─1.%~dp0
自动获取当前路径
├─2.设置HOME== 当前路径
先获取路径的 SHA1 值, 此值变为 项目哈希, 接着 创建目录, 并且 自动重命名旧哈希目录。
├─4. /XO融合本机数据(只复制更新的)
├─5.修补 .json路径
6.Node.js对所有会话元数据进行修复, 其中包括BOM, 还有JSON转义。
└─7.启动
总共 5 个文件,不到 300 行代码。
最难搞的环节是第6步, 完全没办法处理JSON反斜杠转义, 同时也处理不了UTF - 8 BOM, 最终借助Node.js编写了一个.js才将其解决。
四、效果
经历过一次bat启动后,整个文件夹变成完全便携的:
没有必要重新配置 API Key, 不必要重新安装 Skill , 不需要重新连接 MCP。
所有东西都在!这就是你原来最熟悉的!