@chatpanel/events

中文文档
0.374.0发布于 2026/10/31SEE LICENSE IN LICENSEES Module零依赖近 30 天下载 3437

ChatPanal ChatPanel事件记录和能力合同——打入可持久的事实、无时钟决定线性化、计划上架、以及重播机所声称的不定因素。 ChatPannel扩展共享的纯、无依赖的无害环境管理,网关

中文使用文档
文档目录11 节
  1. 为什么它存在
  2. 无时钟订购
  3. 持久性事实,而不是流派
  4. 只有元数据
  5. 能力签名
  6. 存储器 — 持久性是一个主机适配器
  7. 登记册——效果和被动提供
  8. 变化因素
  9. 重放带
  10. 安装
  11. 许可证

@chatpanel/活动

峡谷聊天小组 事件日志 财务报告和审定财务报表 能力 合同。 纯,无依赖性 无害环境管理——相同的代码在扩展(浏览器、MV3/CSP安全)、网关和 桥,同样的方式 @chatpanel/pii 已经.

两份合同 其他所有继承:

  • 活动计划 ——仅附件,永久版本,仅元数据,并订购 无时钟。 。 。 .
  • 能力签名 ——一个呼叫会塑造规则,时间表,用户或模型 都一样.

为什么它存在

聊天小组运行应该可以重建: 组装了什么样的环境, 什么样的能力 运行,在哪个班级和运行时间, 什么被编辑, 和什么留下的设备. 那张唱片是值得信赖的 可核对,所以这个包裹 船 与类型并列的变异物.

无时钟订购

import { linearize } from '@chatpanel/events'

按地形类型重放命令事件 causes断开关系 (host, seq) 以词典 id 顺序显示主机. 墙壁时间从不咨询.

一旦两个主机同时附加一个时间戳不是命令——时钟sskew,以及两个 主机可以印出同样的毫秒. at 具有咨询性并向人类展示; (host, seq) 财务报告和审定财务报表 causes 是权威. linearize() 因此是事件的一个函数 设定没有 它的数组.

持久性事实,而不是流派

市场滴答、直播字幕和DOM变异 没有 事件。 他们生活在一个 in-memory 环缓冲; 只有输入模型请求的窗口集合或 跨越设备边界得到推广。 这是结构性的,没有事件类型 它可以接受一个每条小字串的项目——因为持久地记录一个标题流大约是 每次会议3 MB,每年5.5 GB.

只有元数据

活动 Ref和数,永远不满足:

makeRef({ kind: 'note', id: 'n_88', hash: 'sha256:…', range: { from: 10, to: 40 } })

重放决定 Ref 按散列:匹配 = 精确重建; 不存在或加密 → verified-but-unavailable它从未默默地取代今天的音符版本. privacy.redacted 包含每个实体类型中有多少个被修改,而从未 值——所编辑内容的日志本身不得包含所编辑的数据.

能力签名

validateCapability({
  id: 'page.actions', version: '1.0.0', class: 'R',
  requires: ['tab'], provides: ['page.tools'],
  reads: ['page'], writes: ['page'],
  egress: 'none', effects: 'non-replayable',
  disclose: () => ({ name: 'page.actions', gist: 'Act on the current web page' }),
  output: { schema: …, render: (v) => … },
  invoke: async (input, ctx) => …,
})

actor 援引是使能力变得独立的原因. requirements (单位:千美元)maxLatencyMs, (中文(简体) ), deterministic, (中文(简体) ), egress, (中文(简体) ), maxCostUsd路由器发送到.. 一定是事实没有 哪个型号 - 和 canSatisfy() 拒绝 而不是说 沉默地超过预算.

类是内在的(一种确定性的保证);耐久性是宿主的. 两人从不 融为一表.

toModelSchema() 是一个 允许列表 从三个字段建起,从不省略列表——所以 invoke, (中文(简体) ), effects, (中文(简体) ), cost, (中文(简体) ), writes 财务报告和审定财务报表 egress 无法泄露到模型请求中.

存储器 — 持久性是一个主机适配器

const log   = createLogStore(adapter)    // append-only events
const blobs = createBlobStore(adapter)   // content-addressed, deduped

这个 语义 住在这里; 每一个主机都提供下面的存储器 — IndexedDB in the 扩展名, SQLite 在网关或守护进程上, 一个被封装的环式缓冲。 记忆 用于测试的适配器船,合用主机和回放带.

append() 实值 事件编号,所以复制到温暖的层次可以重试 安全地——一能键能力的日志级对应机载. 以下各项 移动 倒转 对一个主机来说,它被排斥为一位腐败的作家; 漏洞被允许,因为 驱逐不得破坏日志. cursor() 财务报告和审定财务报表 since() 是复制对.

两家店是分开的 加密- 刷新 工作内容 : blobs.shred(hash) 丢弃 有效载荷和留下一块墓碑, 所以"删除这个会议"可以被尊为.. 仅附加日志, 而每个引用它的事件, 以及因果关系链, 保留 完好无损 重放然后报告 verified-but-unavailable。 。 。 .

登记册——效果和被动提供

const reg = createRegistry({ onEvent })
reg.register({ name: 'page-tools', requires: ['tab'], apply(ctx) {
  ctx.effect(() => { const off = arm(); return () => off() })   // unwinds automatically
}})
const withdraw = reg.provide('tab', tab)   // page-tools activates
withdraw()                                  // page-tools deactivates and unwinds

这是一半的能力合同运行时间: requires编号 :provides 在一个 宣言只是因为有东西把他们绑在这里 有两条规则, ,每个都防止特定错误类:

  1. LIFO 处置 - 逆向按登记顺序逆向运行,因此,每个逆向均符合 说明自己生产的应用程序.
  2. 依赖性失效 在此之前 提供者的绑定被删除 - 一个组成部分 因为它的供应商要离开 经常被拆掉 需求 正在撤销的能力(关闭池意味着移交连接) 回来 先去掉捆绑物 然后拆掉的东西就不见了.

失败的组件被记录在自己身上, 打开它注册的任何东西, 然后离开 它的兄弟姐妹们在奔跑 依赖周期只是永久离开其组成部分 不活动——而且与依时间表而定的僵局不同,从宣言中可以看出这一点 一个人,所以 pending() 可以在负载时报告.

无依赖性 决议: 此绑定可用性, 它不会解决版本 .

变化因素

checkInvariants(events) // → [] when the log is sound
页:1模式可见输入可以从日志重建
页:1每一起事件都有记录(controlled: false 授权代理人)
分类非纯粹的援引带有一等之能
一级每次激活都有反向记录
第5条永生之流从不成为长久的事实
编号重放是决定性的

I3是额外的结构:非纯度 capability.invoked 没有键失败 validateEvent,因此完全无法输入日志.

A 类 中继转弯 一个对接的电话或伙伴服务器 穿过这台电脑的网关 是一个 turn.ended 网关在主机下写入 gateway 与 relayed: true (单位:千美元) surface 联 合 国 partner:<name> 或者说 phone:<name>: 只计数、 id 和名称 (link-activity.js 拥有完整的外观和阅读器“活动”页面。 其背景汇编于 调用器设备,所以I1不会为此询问网关的日志.

重放带

const report = replay(parseJsonl(log), { blobs })
if (!report.ok) { console.error(formatReport(report)); process.exit(1) }

在CI中运行,决定论的说法不再是评论. 它重现了从 (host, seq) 财务报告和审定财务报表 causes,检查 I1-I6,解决每个居民 Ref 以大麻为原料.

有两个结果值得区分,因为它们看起来相似,而相反 东西:

  • 一个blob,即 不见了 (crypto-shreed或被逐出)报告 已核实但无法获取 财务报告和审定财务报表 通过 - 粉碎是一种特征,原木仍能证明寄出的东西;
  • 来源 已更改 报告 漂流着 财务报告和审定财务报表 失败,因为另一种选择是 悄悄地用今天的笔记来代替实际发送的笔记.

安装

npm install @chatpanel/events

节点20。 无依取相. node --test tests/*.test.js。 。 。 .

默认 digest 并使用 全球 WebCrypto, 每个浏览器都有它 并且节点从19起就暴露在没有旗帜的情况下——因此20起而不是18起(EOL) (自2025年4月起)。 两者都是可注射的,所以一个拥有自己密码的宿主从不接触 默认.

许可证

见 自由主义。 。 。 .

版本与发布记录

@chatpanel/events 共发布 168 个版本,首次发布于 2026/08/18;过去 12 个月发布了 168 个版本。

版本发布日期距今
0.374.0latest2026/10/319 天前
0.372.02026/10/3010 天前
0.371.22026/10/3010 天前
0.371.12026/10/3010 天前
0.362.02026/10/2416 天前
0.361.12026/10/2218 天前

关于 @chatpanel/events 的常见问题

@chatpanel/events 是什么?

ChatPanal ChatPanel事件记录和能力合同——打入可持久的事实、无时钟决定线性化、计划上架、以及重播机所声称的不定因素。 ChatPannel扩展共享的纯、无依赖的无害环境管理,网关

如何安装 @chatpanel/events?

在项目目录运行 npm install @chatpanel/events,或使用 pnpm add / yarn add / bun add。

@chatpanel/events 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/chatpanel__events 是否存在。

@chatpanel/events 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@chatpanel/events 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@chatpanel/events 可以商用吗?

@chatpanel/events 使用 SEE LICENSE IN LICENSE 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@chatpanel/events 的下载量有多少?

根据 npm 官方下载统计,@chatpanel/events 在 2026/10/10 – 2026/11/08 这 30 天内被下载 3,437 次,日均约 115 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chatpanel/events 还在维护吗?

最新版本 0.374.0 发布于 2026/10/31(9 天前);至今共发布 168 个版本,其中过去 12 个月发布了 168 个;首次发布于 2026/08/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。