@earendil-works/pi-session-后端-sqlite-node
节点 node:sqlite 会话后端 @earendil-works/pi-agent-core。 。 。 .
import { BACKGROUND_CONTEXT } from "@earendil-works/pi-agent-core";
import {
createNodeSqliteFactory,
SqliteSessionRepo,
} from "@earendil-works/pi-session-backend-sqlite-node";
const repository = new SqliteSessionRepo({
directory: "/var/lib/pi/sessions",
databaseFactory: createNodeSqliteFactory(),
});
const session = await repository.create({}, BACKGROUND_CONTEXT);
const main = await session.createBranch("main", null, BACKGROUND_CONTEXT);
await main.appendMessage(
{ role: "user", content: "hello", timestamp: Date.now() },
BACKGROUND_CONTEXT,
);
await session.close(BACKGROUND_CONTEXT);
await repository.close(BACKGROUND_CONTEXT);
默认布局每个会话创建一个文件 directory仅包含 ASCII 字母,数字, _,以及 - 保留 {sessionId}.sqlite;每个其它ID使用一个 ~- 其UTF-16编码单元的前置基底64url编码. 耐用ID不变,返回/列出的元数据包含犬形物理路径. 过 databasePath 将多个会话放置在一个支持的共享容器中;其母部分在需要时被创建.
数据库厂区分了有意创作,不创作读写开放,不创作只读开放. 会议 open() 并删除在配置的存储器外拒绝元数据,从不创建缺失的数据库。 列表为只读和最优. 伪造故意允许一个外源元数据路径:它读取的是准确的已存在的容器只读,从不以相同的ID来替代一个活跃的本地会话.
东道主的生命周期,而不是这个后端,保证每个会话有一个可写所有者. 在另一个进程中直接打开同一会话写入是不支持的 。 该寄存器拒绝一个ID的重叠本地创建/开/叉/删除所有权,但不会执行跨进程租赁,锁定,栅栏,心跳,或接管. 主机在删除前必须关闭工人.
同一寄存器库中打开的源的叉子会将它的快照放在源的承诺队列上. 其他任何来源,包括由现场会议工作人员持有的渠道,都使用独立的只读连接和推迟的WAL交易;后来的工人承诺可能完成,而快照仍然开放。 共享容器删除只删除选定的会话行 。 仓库关闭等待每次公开会话清理尝试,然后报告出错 。 软件包不导出搜索服务或FTS索引;搜索是单独的S3投影.