@tetherline/core
v0.1.1
Published
牵星 Tetherline 核心:SPI、领域模型、出站渲染管道与 contract test kits
Downloads
432
Readme
@tetherline/core
SPI 与领域模型:SessionKey、UnifiedMessage、ImChannel、OutboundIntent、AgentBackend/AgentSession、存储 SPI,以及 channel/backend 两套 contract test kits。冻结区:WS-0 出口后只许增量扩展(见 ../../CONTRIBUTING.md §1)。
入口
@tetherline/core:类型/SPI + 纯函数管线(chunkMarkdown/convertMarkdown/downgradeIntents)。零运行时依赖。@tetherline/core/testing:defineChannelContractTests/defineBackendContractTests+ 内存版FakeChannel/FakeBackend。仅在测试中使用,vitest声明为 optional peer。
与 docs/architecture.md §4 基线的差异(已同步回文档)
SendReceipt基线未定义字段,实现为{ messageIds: string[] }(分片时一片一个 id)。ImChannel.send实现为send(target: SessionKey, intent: ResolvedIntent):基线只有 intent,而一个 channel 同时服务多个会话,channel 只能从流状态或上一条消息推断目标,多会话下会发错地方。2026-08-30 经人类批准做此冻结区签名扩展(docs/open-items.md第 3 条)。契约同时要求:target.channel 与 channel.id 不符必须 fail loud。ResolvedIntent实现为text | stream-open/append/close | approval-card;方言转换统一在downgradeIntents完成,channel 收到的 markdown 已是目标方言,不再各自转换。BackendCapabilities定义为{ approvals; streaming; questions };StartSessionRequest定义为{ key; cwd; resumeSessionId? }。SessionBinding/PendingApproval字段按 §6 表结构补全。- contract kit 签名扩展为
makeSubject()返回被测对象或带测试钩子的 harness(channel 的injectInbound、backend 的approvalTrigger/echoExpectation),入站/审批类断言在钩子缺省时显式跳过。 - 编号审批文本协议:无按钮渠道回复纯数字 n,channel 解析为
action(actionId = options[n-1].actionId),详见downgradeIntentsJSDoc。
现状 / 已完成 / 下一步
- 现状:WS-0 完成,
pnpm -r build && pnpm test && pnpm -r typecheck全绿(core 63 用例:60 pass / 3 skip,skip 均为 harness 钩子缺省的显式跳过)。 - 已完成:§4.1–4.5 全部 SPI;
chunkMarkdown(段落/代码块边界分片,超长代码块补全围栏);convertMarkdown(feishu 子集 + plain,wecom/dingtalk 暂映射 feishu);downgradeIntents(buttons/streaming 矩阵 + 分片);两套 contract kit 及 Fake 自测。 - 下一步:wecom/dingtalk 方言差异由对应 channel 工作流细化
convertMarkdown;后续冻结区改动仍须人类批准并同步全部工作流。
