@zhushanwen/zcode-subagent-cli 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,362 @@
1
+ import { EnginePort, ReverseRequestClock, EngineCapabilities, ProbeReport, EngineAgentCallOpts, RunContext, EngineRunResult, EngineHandle, InteractAction, InteractResult, SessionView } from '@zhushanwen/subagent-engine-sdk';
2
+
3
+ /** 出站帧写入面(main.ts 注入 process.stdout;测试注入内存缓冲)。 */
4
+ type FrameWriter = (frame: unknown) => void;
5
+ /** 入站帧来源( readline 已拆行的请求帧 + 反向请求应答帧混流)。 */
6
+ interface EngineProtocolServerOptions {
7
+ /** stdout 写入面(每帧一行 JSON)。 */
8
+ write: FrameWriter;
9
+ /** 引擎实例(缺省 createDefaultZcodeEngine——测试注入 fake/DI 实例)。 */
10
+ engine?: EnginePort;
11
+ /** 反向请求计时面(armEngineSelfDestruct 产物;缺省不计时——测试用)。 */
12
+ reverseClock?: ReverseRequestClock;
13
+ /** 应答等待缺省超时(反向请求两阶段等待上限兜底;默认 REVERSE_TIMEOUT_DEFAULT_MS)。 */
14
+ reverseTimeoutMs?: number;
15
+ }
16
+ /**
17
+ * 引擎协议服务器。生命周期 = 进程生命周期(单引擎实例,无重建面——崩溃重建归
18
+ * core EngineClient:杀进程再 spawn)。dispose 方法释放引擎常驻资源但进程不退出
19
+ * (后续请求仍可服务——引擎进程退出归宿主 / 自灭守卫)。
20
+ */
21
+ declare class EngineProtocolServer {
22
+ private readonly write;
23
+ private readonly engine;
24
+ private readonly reverseClock;
25
+ private readonly reverseTimeoutMs;
26
+ private readonly activeRuns;
27
+ private readonly reversePending;
28
+ private revSeq;
29
+ private initialized;
30
+ constructor(opts: EngineProtocolServerOptions);
31
+ /** 入站帧消费(请求帧 + 反向请求应答帧;main.ts 的行解析器拆行后喂入)。 */
32
+ handleFrame(frame: unknown): void;
33
+ /** 10 正向方法分发(表驱动:method → 处理器;未知方法 → engine_protocol_unknown_method)。 */
34
+ private dispatch;
35
+ /**
36
+ * 10 正向方法 → 处理器映射(每个处理器消费原始 params 并自行收敛类型——
37
+ * 与原 switch case 表达式一一对应)。
38
+ */
39
+ private readonly methodHandlers;
40
+ private initialize;
41
+ private run;
42
+ private cancel;
43
+ private interact;
44
+ private read;
45
+ private validateModel;
46
+ private emitEvent;
47
+ /**
48
+ * 发反向请求并等应答(帧④必须应答)。计时面登记:发出 → clock.started;收到
49
+ * ack 形态应答 → clock.acked(两阶段第一段,等待不计超时);终结 → clock.settled。
50
+ * 应答超时兜底 reject——数据面通道(host/log 等)core 10s 应答,reject 由调用方
51
+ * 吞掉留痕(数据面丢失不拖死主链路)。
52
+ */
53
+ /** 反向请求发送(公开面:main.ts 的 host/log 桥接消费;内部 run 通道同路)。 */
54
+ reverseRequest(method: string, params: unknown): Promise<unknown>;
55
+ private reverseRequestInternal;
56
+ /** 反向请求应答落位(ack 两阶段:{ack:true}/{unsupported:true}/{ok:true} 均先 ack 计时面)。 */
57
+ private settleReverse;
58
+ }
59
+
60
+ interface ZcodeSourcePaths {
61
+ /** 桌面登录态 config(唯一凭据源)。缺省 ~/.zcode/v2/config.json。 */
62
+ v2ConfigPath?: string;
63
+ }
64
+
65
+ /** ZcodeEngine 构造依赖(全部可注入——测试不依赖真机 CLI/真凭据)。 */
66
+ interface ZcodeEngineDeps {
67
+ /**
68
+ * 引擎数据目录(journal 分组根 <dir>/engines/zcode/shared/ 与 stderr 日志落点)。
69
+ * 来源通道(宿主 dataDir)见 registration.ts 缺省解析。
70
+ */
71
+ engineDataDir: () => string;
72
+ /** zcode CLI 路径;缺省 ZCODE_CLI_DEFAULT_PATH。 */
73
+ cliPath?: string;
74
+ /** 源 config 路径覆盖(测试注入临时源;缺省读 ~/.zcode)。 */
75
+ sources?: ZcodeSourcePaths;
76
+ /** 版本探测执行器(probe check "version";测试注入 fake 防真实子进程)。 */
77
+ probeVersion?: (cliPath: string) => Promise<string | undefined>;
78
+ /** env 基底(测试注入;缺省 process.env——app-server env 组装经它)。 */
79
+ processEnv?: NodeJS.ProcessEnv;
80
+ }
81
+ /** zcode 引擎适配器。 */
82
+ declare class ZcodeEngine implements EnginePort {
83
+ readonly id = "zcode";
84
+ private readonly deps;
85
+ private probeCache;
86
+ private appserverRuntime;
87
+ /**
88
+ * [P0-1 U4] 引擎停机标志(dispose 置位,不重置——dispose 后首个 run 走重建路径
89
+ * 不受影响):瞬时重试判定据此排除 dispose 收割引发的崩溃形态——停机后的重试轮
90
+ * 会经 ensureAppServerRuntime 惰性重建进程(复活已停机引擎),违背 dispose 防泄漏
91
+ * 语义。
92
+ */
93
+ private disposed;
94
+ constructor(deps: ZcodeEngineDeps);
95
+ /**
96
+ * zcode 链路实际接通的能力(D3 链路口径。声明升级必须先改链路再改声明(C4 原则)。
97
+ */
98
+ capabilities(): EngineCapabilities;
99
+ /** 探针(D7):二进制存在 + 版本解析(zcode 无公开契约,版本漂移的入口信号)。 */
100
+ probe(opts?: {
101
+ force?: boolean;
102
+ }): Promise<ProbeReport>;
103
+ /** check 1:二进制存在性(isFile 才算——同名目录不是可执行入口)。 */
104
+ private probeBinaryCheck;
105
+ /** check 2:`--version` 解析(probeVersion 可注入——测试 fake 防真实子进程)。 */
106
+ private probeVersionCheck;
107
+ /** 探针失败的恢复指引(§3.3.3 终态四:版本确认命令 + 探针重跑 + 调研文档路径)。 */
108
+ private probeFailureRecovery;
109
+ /** D1 主语义:唯一通道 = app-server 常驻连接(spawn 降级链已删除)。 */
110
+ run(task: EngineAgentCallOpts, ctx: RunContext): Promise<EngineRunResult>;
111
+ /**
112
+ * 常驻路径主编排:模型解析(v2 单源校验)→ 惰性连接 + runTurn(事件时序前移:
113
+ * text_delta 流式、终态后 message_end/turn_end)→ schema 仿真重试 → outcome/handle。
114
+ * poolKey 固定 'shared'(共享宿主 HOME,无池),onPoolResolved 在 prepare 期、
115
+ * onHandleReady 在 create 应答后(§3.4 不变量 3)。
116
+ */
117
+ private runViaAppServer;
118
+ /** pre-aborted 短路收口:合成中止 outcome + 'shared' 锚定 handle。 */
119
+ private abortedAppServerRun;
120
+ /**
121
+ * 首轮执行 + 双重试编排(常驻路径):
122
+ * - **schema 仿真重试**(既有语义):parsed 但校验失败时重试一次(强化 JSON 输出
123
+ * 指令——与 structured-output 的重试语义对齐)。
124
+ * - **瞬时失败自动重试一次**([P0-1 U4/D6]):末次 attempt 为 timeout 类(idle/
125
+ * ceiling)或连接崩溃类失败且非用户 abort → 用新会话重跑一次(attempt 本就每次
126
+ * 新建会话)。重试轮 prompt 用 basePrompt 原样重跑(失败形态非 schema),文案补
127
+ * 「已自动重试一次」句(retried 标记仅对真实发生的重试生效)。
128
+ *
129
+ * 两次重试一次封顶各自独立(D6 被否①:多次重试/指数退避不做——重跑一轮=整任务
130
+ * 重算,一次封顶)。组合序:瞬时重试在前、schema 重试在后——瞬时重试轮 parsed 且
131
+ * 校验失败时仍进 schema 重试(末次 attempt 语义,schema 重试编排保持现状不动)。
132
+ *
133
+ * 重试轮是独立会话的独立 LLM 调用:token 计入 outcome.usage 总量;事件面
134
+ * text_delta 按实际流出(含失败轮——journal 记录真实流水),message_end/turn_end
135
+ * 只在最终轮终态后合成(不变量 2/5)。
136
+ */
137
+ private runAppServerAttemptsWithRetry;
138
+ /**
139
+ * 常驻路径的 handle 合成(poolKey 固定 'shared';dbPath = 隔离会话库绝对路径——
140
+ * 2026-09 会话库隔离,与 spawn env 同源 zcodeSessionDbPath(engineDataDir),设计 D1)。
141
+ */
142
+ private appServerHandle;
143
+ /**
144
+ * 单轮常驻执行:runTurn 组合面 + D3 abort 链 + 事件前移(text_delta 实时流出;
145
+ * 终态数据经 read 兜底收口后才 resolve——不变量 1/2)。
146
+ *
147
+ * @param opts turnTimeoutMs:显式总上界传参面(D2 内部传参点)——U4/D6 预算继承
148
+ * 向重试轮传剩余值;缺省不传(channel 走 env→默认,首轮行为)。
149
+ * retried:瞬时重试轮标记——失败文案补「已自动重试一次」句(F-1/F-4)。
150
+ */
151
+ private attemptAppServerTurn;
152
+ /**
153
+ * killChain 后等待连接 finalize 实际完成(child 置空 + onClose 广播)再宣告链终局:
154
+ * shutdown resolve 于 `exit` 事件,而 finalize 挂 `close`(stdio 排空)——两者之间的
155
+ * 事件窗口内 conn.child 仍非 null,紧接的下一任务 request 会复用垂死进程(写入成功
156
+ * 但必败,走崩溃路径)而非触发重建。与 shutdownRuntimeAndDisposeChannel 的
157
+ * HARVEST_GRACE 同款 race 形态(close 永不到达不挂死)。超时入口的 await 链终局
158
+ * 语义(D6 重试时序依据)因此是「进程收割确认完成」而非「SIGTERM 已发出」。
159
+ */
160
+ private awaitConnFinalized;
161
+ /**
162
+ * D3 abort 链执行体(双入口分岔,P0-1 U2 参数化——设计
163
+ * timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
164
+ * - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
165
+ * 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
166
+ * grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
167
+ * SIGTERM→grace→SIGKILL)。turn 的最终落定由 attempt 主路径 await 收口,本链不
168
+ * 直接产出终态。abort 与 create 竞态(signal 先到、session 未建立):等会话建立
169
+ * (带上限)再发 stop——否则 stop 永远发不出,直接连坐杀共享进程。
170
+ * - **超时入口**(`escalateOn: "stop-outcome"`,channel 判死后由 catch await 链终局):
171
+ * turn 已 reject,对它 race 恒真不可用(v1 击穿点)——升级判据改挂在 **stop 应答
172
+ * 三态**:①成功应答 → 服务端接受停 turn,止损确认,链终止;②协议性 error 应答
173
+ * (有 error 帧即控制面活的证据,多因 runTurn finally 的 closeSession 先行关会话,
174
+ * 健康形态竞态)→ 链终止**不升级**(止损由 close 回收 + 服务端自治承担;把
175
+ * 「stop 报错」一律升级会误杀健康共享进程并连坐并发任务);③超时/写入失败/进程
176
+ * 死等连接级失败(控制面死)→ killChain 升级。判据实现依据:error 应答帧 reject
177
+ * 携带 number code(isAppServerRpcError);连接级失败是无 code 的新 Error
178
+ * (connection.request 三态 reject 形态)。返回值即止损路径(超时入口的 outcome
179
+ * 文案素材——D3 强制可观测面)。
180
+ */
181
+ private appServerAbortChain;
182
+ /**
183
+ * 惰性获取常驻运行时(D1:每引擎实例一条连接,全任务共享;连接自身的崩溃重建在
184
+ * connection 层内部完成——同一条代码路径,§3.4 不变量 4)。常驻进程不进宿主
185
+ * spawnedChildren、不调 onChildSpawned(D6——生命周期归 dispose)。进程级 --cwd
186
+ * 用引擎数据目录(连接跨任务共享的中性位置,工作区由 create 的
187
+ * workspace.workspacePath 按任务传递——D10 基线不预设任务级进程 cwd)。
188
+ * spawn 经 fs 拦截 wrapper(appserver-launcher:cli config 读取重定向为
189
+ * 「真实文件 + v2 provider 注入」——CLI 形态 app-server 在共享宿主 HOME 下的
190
+ * 唯一凭据供数通路,机制与漂移面见该文件头注)。
191
+ */
192
+ private ensureAppServerRuntime;
193
+ /**
194
+ * [R5 修复 R4 既有竞态] shutdown → 等崩溃收割实际发生 → channel 退订。killChain 在
195
+ * `exit` 事件 resolve,而连接 finalize(onClose → channel 的 failAllTurns)挂
196
+ * `close` 事件——两者之间有一个事件循环窗口:shutdown resolve 后立即退订,在途
197
+ * turn 会错过收割、挂到 turnTimeoutMs(300s)。退订前等 onClose 触发(本方法先于
198
+ * shutdown 订阅;channel 的订阅在构造期更早——其 failAllTurns 先于本 promise
199
+ * resolve 执行);ZCODE_APPSERVER_HARVEST_GRACE_MS 兜底防 `close` 永不到达时挂死。
200
+ * [P0-1 U5/D7] grace race 输掉(close 迟到/永不到达——stdio 被孙进程持有排空不
201
+ * 尽等病态形态)时,channel.dispose() 内置的 dispose 收割(failAllTurns 先于退订,
202
+ * SessionChannel.dispose)兜底在途 turn——退化终点从「挂满 turn 自身 idle/总上界
203
+ * 预算」收敛为「grace 窗口内明确失败」(设计 §3.4 退化路径闭合);race 窗口与
204
+ * awaitConnFinalized 同源同量级(ZCODE_APPSERVER_HARVEST_GRACE_MS)。正常 close
205
+ * 先到时 onClose 收割先行,dispose 收割幂等 no-op(零回归)。
206
+ */
207
+ private shutdownRuntimeAndDisposeChannel;
208
+ /**
209
+ * [R1 D6 主体] 引擎停机面:①fire 全部在途会话的 session/close 帧(不等待
210
+ * 应答——D6① 顺序规定:close 帧必须先于 SIGTERM,否则对面来不及处理即被杀)→
211
+ * ②同步 SIGTERM(conn.shutdown 调用内 killChain 前缀同步执行——同步面在返回
212
+ * Promise 前完成)→ ③grace → SIGKILL(异步面,Promise resolve 于进程退出)。
213
+ * 幂等:运行时字段取走即置空,二次调用零副作用;dispose 后首个 run 经
214
+ * ensureAppServerRuntime 自动重建(与崩溃重建同一代码路径,不变量 4)。
215
+ */
216
+ dispose(): Promise<void>;
217
+ /** 终态合成(extension-conventions 函数 80 行上限,从 run 提取):aborted / run-failed / parsed 三分支。 */
218
+ private finalizeOutcome;
219
+ /** abort 合成终态:exitCode=null(record 正常收尾,不留僵尸)。 */
220
+ private applyAbortedOutcome;
221
+ /**
222
+ * run-failed 合成终态:错误信息由 buildAppServerRunFailedMessage 产出(已含恢复
223
+ * 指引)直接透传;附带的会话 id 落 outcome.sessionId(错误规格表 -32004 行「含会话
224
+ * id」——appServerHandle 据此写 handle.sessionRef,run-failed 不再恒缺)。
225
+ */
226
+ private applyRunFailedOutcome;
227
+ /** parsed 合成终态:content/sessionId/usage 落位 + schema 校验分流 + coarse 事件。 */
228
+ private applyParsedOutcome;
229
+ /**
230
+ * D1 可选面:zcode 首期不支持 conversation(capabilities 声明)——同步拒绝、
231
+ * 不创建进程,文案给可操作建议(A11)。
232
+ */
233
+ interact(_handle: EngineHandle, _action: InteractAction): Promise<InteractResult>;
234
+ /** [U7] 模型可发现性:v2 桌面登录态聚合(带凭据 provider × models),失败安全返回清单本身可能为空。 */
235
+ listModels(): Array<{
236
+ id: string;
237
+ name?: string;
238
+ }>;
239
+ /**
240
+ * [u-h2 D2-2] 派发同步期 model 校验:委托 resolveZcodeModelRef(与 run prepare 期
241
+ * 同一函数——canonicalRef 归一化、短名缺省 provider、凭据与清单校验单一权威,无双实现)。
242
+ * modelRef undefined = 返回引擎缺省模型 canonical 全名(ZCODE_FALLBACK_DEFAULT_MODEL,
243
+ * D2-1 ctxModel 不透传的承接面)。校验失败原样抛 ZcodePrepareError,由编排层
244
+ * (engine/model-validation.ts)包装成「引擎与模型不配套」文案。
245
+ */
246
+ validateModel(modelRef: string | undefined): {
247
+ canonicalRef: string;
248
+ };
249
+ /**
250
+ * D6 read 三级降级:①sqlite 原生读取 → ②宿主 event journal 重放(对齐点①接线:
251
+ * replayJournalToSessionView 复用 live reducer,重放等价性见 §3.3.6)→ ③outcome-only。
252
+ * sessionId 缺失(解析失败的 run 无法定位 session)跳过①级;②级依赖
253
+ * handle.journalPath(宿主 run 后回填)。dbPath:新 handle 恒为隔离库绝对路径
254
+ * (zcodeSessionDbPath(engineDataDir),tier1 白名单集合见方法体——宿主路径仅
255
+ * 「共享 HOME 时代」存量兼容);旧 records(池时代)的相对路径仍按 poolKey
256
+ * 锚定解析(read 兼容旧数据,池目录不存在时自然落②级 journal 降级)。
257
+ */
258
+ read(handle: EngineHandle): Promise<SessionView>;
259
+ /**
260
+ * [RX2-F1] appserver 路径的非常见档位提示:thinkingLevel → thoughtLevel 恒等透传
261
+ * (F15a),全 7 档放行不拦截——但部分档位(off/minimal/medium/xhigh 等)不在部分
262
+ * 模型的合法值域内(如 GLM-5.3 仅接受 low/high/max),app-server 侧对不支持的档位
263
+ * warn-skip(会话照常但档位静默失效),调用方无从察觉。此处仅对
264
+ * COMMON_THOUGHT_LEVELS 之外的档位出声一行提示(措辞是「若不支持将被忽略/回落」的
265
+ * 或然警告,非无效断言);是否真不支持由目标模型决定,core 不做权威校验(引擎层
266
+ * 不掌握各模型值域)。
267
+ */
268
+ private warnThoughtLevelUncommon;
269
+ /**
270
+ * [F16b] ctxModel 忽略留痕:ctxModel 是 pi 链路的第三层兜底(port.ts 契约——
271
+ * 依赖 pi resolveModel 链的引擎才消费它),zcode 自带 provider 体系与缺省模型
272
+ * (resolveZcodeModelRef:requested > ZCODE_FALLBACK_DEFAULT_MODEL),不消费
273
+ * ctxModel。「调用方给了 ctxModel 但 task.model 未显式指定」时出声一行,说明
274
+ * 实际落引擎缺省模型(含实际 model id)——防静默降档无据可查。只在「ctx 有模型
275
+ * 但被忽略」场景输出:显式 task.model 走正常解析链、ctx 本就无模型属预期缺省,
276
+ * 均不出声(避免噪音)。
277
+ */
278
+ private warnIgnoredCtxModel;
279
+ /**
280
+ * persona 拼接后的完整 prompt(personaInjection: 'prompt'——zcode 无 flag 通道):
281
+ * appendSystemPrompt 段在前(人设/约束语境——D6 合流后 persona≡skillPath+
282
+ * appendSystemPrompt 平铺,由上游解析进 appendSystemPrompt),task 正文居中,
283
+ * schema 仿真段尾置(common/schema-emulation 公共层产出)。
284
+ */
285
+ private buildPrompt;
286
+ }
287
+
288
+ /** zcode 引擎的 registry key。 */
289
+ declare const ZCODE_ENGINE_ID = "zcode";
290
+ /** zcode 适配器版本(handle.adapterVersion 数据源——golden 样本对齐排查锚点)。 */
291
+ declare const ZCODE_ADAPTER_VERSION = "2.0.0";
292
+
293
+ /** 引擎数据根缺省解析(env 权威通道;见文件头)。 */
294
+ declare function defaultEngineDataDir(): string;
295
+ /** 构造 ZcodeEngine(DI 工厂——测试/宿主注入 deps)。 */
296
+ declare function createZcodeEngine(deps: ZcodeEngineDeps): ZcodeEngine;
297
+ /**
298
+ * 缺省 deps 组合:engineDataDir 走 env 解析,cliPath 支持 XYZ_ZCODE_CLI 覆盖
299
+ * (spawn-env-contract 出站白名单既有条目,随包迁移锚点改指本包——W12 回写项)。
300
+ */
301
+ declare function createDefaultZcodeEngine(): ZcodeEngine;
302
+
303
+ /**
304
+ * 隔离会话库绝对路径(单一构造函数,唯一权威):
305
+ * `<engineDataDir>/engines/zcode/session-db/db.sqlite`。
306
+ *
307
+ * 选址在池目录之外(不落 `engines/zcode/shared/`——那是 journal 池目录,被
308
+ * `deletePoolNativeState` 覆盖,设计 D1/F11);journal 路径不变(仍
309
+ * `engines/zcode/shared/journal-<taskId>.jsonl`)。`cleanupExpiredPoolRefs` 会把
310
+ * `engines/<engineId>/` 下每个子目录当池枚举,`session-db/` 中的 `db.sqlite*`
311
+ * 不匹配任何删除条件(池 GC 守卫 = 验收场景 A9)。
312
+ *
313
+ * @param engineDataDir 引擎数据目录(`deps.engineDataDir()`;禁硬编码,一律由入参推导)
314
+ */
315
+ declare function zcodeSessionDbPath(engineDataDir: string): string;
316
+ /**
317
+ * 存量兼容锚点:宿主 HOME 下 zcode 会话 db 的绝对路径
318
+ * (`~/.zcode/cli/db/db.sqlite`)。
319
+ *
320
+ * 隔离改造(D3)后定位降级:仅用于放行「共享 HOME 时代」(2026-09–本次改造)record
321
+ * 里已落盘的宿主绝对路径 dbPath(不迁移、不删除),出现在白名单集合第二项与兼容
322
+ * 测试里;新写入一律走 zcodeSessionDbPath(W2 起 handle 回填与读取判定切换)。
323
+ */
324
+ declare function hostZcodeDbPath(): string;
325
+ /**
326
+ * 会话 db 白名单集合(①级读取的唯一放行来源,封闭集合——设计 D2/不变量 3):
327
+ * `[隔离库(现役), 宿主库(仅存量兼容)]`。
328
+ *
329
+ * record/handle 来自 append-only JSONL(不可信面),两读取站点只做「集合成员判定」,
330
+ * 只放行集合内精确绝对路径,其余拒绝①级、降 journal——防任意文件读。集合形态
331
+ * (而非 `||` 列表)使未来第三个合法路径只需改本函数。
332
+ *
333
+ * @param dataDir 构造集合所用 dataDir(两站点各用它打开数据库时的同一个 dataDir;
334
+ * dataDir 权威源与传播前提见设计 D2——勿当同源事实)
335
+ */
336
+ declare function zcodeDbPathAllowlist(dataDir: string): readonly string[];
337
+
338
+ /**
339
+ * 读取 zcode session 的引擎中立视图(read 第①级)。
340
+ *
341
+ * @param dbPath db.sqlite 绝对路径(引擎 read() 由 handle 解析后传入)
342
+ * @param sessionId 目标 session;缺省取池内最新(time_created DESC 首行)
343
+ * @throws ZcodeReaderError db 缺失/表漂移/node:sqlite 不可用/session 不存在——
344
+ * 结构化错误供调用方走降级链②③级
345
+ */
346
+ declare function readZcodeSessionView(dbPath: string, sessionId?: string): Promise<SessionView>;
347
+
348
+ /** 四类样本的结构(与 zcode-golden-appserver.json 的 frames 字段一一对应)。 */
349
+ interface AppServerGoldenFrames {
350
+ /** ① session/create 应答帧(NDJSON 单行;projection.sessionId 恒 "unknown" 勿用)。 */
351
+ createResponse: string;
352
+ /** ④ 推送流帧(NDJSON 逐行:state.updated / stream.chunk 无文本 / session/event delta 有文本)。 */
353
+ pushStream: string[];
354
+ /** ⑤ 终态帧(NDJSON 逐行:v4 telemetry turn.terminal 权威 + session/event 收尾帧全文/usage)。 */
355
+ terminal: string[];
356
+ /** ⑥ session/read 应答帧(NDJSON 单行:messages[].parts[],text 全文 + step-finish tokens)。 */
357
+ readResponse: string;
358
+ }
359
+ /** [②app-server] golden 帧序列内嵌副本(采集 SSOT = zcode-golden-appserver.json,双副本 diff 防漂移)。 */
360
+ declare const ZCODE_APPSERVER_GOLDEN: AppServerGoldenFrames;
361
+
362
+ export { EngineProtocolServer, type EngineProtocolServerOptions, ZCODE_ADAPTER_VERSION, ZCODE_APPSERVER_GOLDEN, ZCODE_ENGINE_ID, ZcodeEngine, type ZcodeEngineDeps, createDefaultZcodeEngine, createZcodeEngine, defaultEngineDataDir, hostZcodeDbPath, readZcodeSessionView, zcodeDbPathAllowlist, zcodeSessionDbPath };
package/dist/index.js ADDED
@@ -0,0 +1,45 @@
1
+ import {
2
+ EngineProtocolServer,
3
+ ZCODE_ADAPTER_VERSION,
4
+ ZCODE_ENGINE_ID,
5
+ ZcodeEngine,
6
+ createDefaultZcodeEngine,
7
+ createZcodeEngine,
8
+ defaultEngineDataDir,
9
+ hostZcodeDbPath,
10
+ readZcodeSessionView,
11
+ zcodeDbPathAllowlist,
12
+ zcodeSessionDbPath
13
+ } from "./chunk-IIAABOER.js";
14
+
15
+ // src/golden-sample.ts
16
+ var ZCODE_APPSERVER_GOLDEN = {
17
+ createResponse: '{"session":{"sessionId":"sess_golden_r3_01"},"projection":{"sessionId":"unknown","status":"idle","turnCount":0,"totalTokenCount":0,"contextUsed":0,"contextWindow":1000000}}',
18
+ pushStream: [
19
+ '{"method":"state.updated","params":{"sessionId":"sess_golden_r3_01","patch":{"status":"running"},"reason":"prompt_started"}}',
20
+ '{"method":"v4/telemetry/event","params":{"kind":"stream.chunk","channel":"text","chunkLength":6,"firstChunk":true,"assistantMessageId":"msg_golden_r3_01"}}',
21
+ '{"method":"session/event","params":{"sessionId":"sess_golden_r3_01","payload":{"delta":"\u4F60\u597D","assistantMessageId":"msg_golden_r3_01"}}}',
22
+ '{"method":"v4/telemetry/event","params":{"kind":"stream.chunk","channel":"text","chunkLength":1,"firstChunk":false,"assistantMessageId":"msg_golden_r3_01"}}',
23
+ '{"method":"session/event","params":{"sessionId":"sess_golden_r3_01","payload":{"delta":"\uFF0C","assistantMessageId":"msg_golden_r3_01"}}}',
24
+ '{"method":"session/event","params":{"sessionId":"sess_golden_r3_01","payload":{"delta":"\u4EFB\u52A1\u5B8C\u6210","assistantMessageId":"msg_golden_r3_01"}}}'
25
+ ],
26
+ terminal: [
27
+ '{"method":"v4/telemetry/event","params":{"kind":"turn.terminal","status":"success"}}',
28
+ '{"method":"session/event","params":{"sessionId":"sess_golden_r3_01","payload":{"response":"\u4F60\u597D\uFF0C\u4EFB\u52A1\u5B8C\u6210","usage":{"inputTokens":12599,"outputTokens":17}}}}'
29
+ ],
30
+ readResponse: '{"messages":[{"info":{"role":"user"},"parts":[{"type":"text","text":"\u505A\u70B9\u4EC0\u4E48"}]},{"info":{"role":"assistant"},"parts":[{"type":"text","text":"\u4F60\u597D"},{"type":"text","text":"\uFF0C\u4EFB\u52A1\u5B8C\u6210"},{"type":"step-finish","tokens":{"input":12599,"output":17,"reasoning":0,"cache":512,"total":12616}}]}]}'
31
+ };
32
+ export {
33
+ EngineProtocolServer,
34
+ ZCODE_ADAPTER_VERSION,
35
+ ZCODE_APPSERVER_GOLDEN,
36
+ ZCODE_ENGINE_ID,
37
+ ZcodeEngine,
38
+ createDefaultZcodeEngine,
39
+ createZcodeEngine,
40
+ defaultEngineDataDir,
41
+ hostZcodeDbPath,
42
+ readZcodeSessionView,
43
+ zcodeDbPathAllowlist,
44
+ zcodeSessionDbPath
45
+ };