Files
DevFlow/tests/useOffloadedResult.test.mjs
T
lxy b37279f3a2 新增: 待发箱/唤醒原语/预算随窗口 + 治理门禁与场景护栏
- 待发箱地基: V51 ai_outbox 表 + 手写 OutboxRepo(claim CAS/崩溃残留复位/瞬时失败保留) + outbox.rs 调度器(KV 默认关/Notify 唤醒/会话忙跳过不丢)
- Wake 异步唤醒原语: 三条件(delay/file-appear/process-exit)+纯判定+注入走正典 spawn_agentic_session,默认关
- 上下文预算随模型窗口: model_context.rs 三级优先(池显式>预设表>回退 128K);上界取 1M 而非 128K——max_tokens 仅裁剪预算,卡 128K 等于不治根因
- 文件租约补纯函数与单测(未另造双轨:LEASE 早随 cb260ab 落地) / 跨会话召回补纯函数单测(主体早已落地)
- 子代理: 完整卡已消化 + 子会话压缩层 + P3 批量
- 隧道/中继: 指令离线不丢 + Hello proto 版本 + 心跳与 runbook
- df-mcp: 写工具后落 KV 变更标记(供 GUI 轮询兜底,补独立 stdio 进程无感知)
- 迁移链顶点改单一真值常量 LATEST_SCHEMA_VERSION(修 2 处因 V51 失效的断言)
- 治理: i18n 特殊字符提交门禁(含反引号覆盖 + 10 自测) / 根目录卫生门禁 / 看板归档器 / 单一 lockfile(bun) / swap-install 落 temp/ 且兼容无 Get-FileHash
- 场景护栏: 流式正文可见性 e2e(playwright 免真机事件回放) + 列表续写/外置句柄 node 测试
2026-10-10 08:09:17 +08:00

51 lines
2.4 KiB
JavaScript

// D2a 外置句柄解析单测 —— 仓库无 vitest,走 node 内置测试(零第三方依赖):
// node --test tests/useOffloadedResult.test.mjs
// Node ≥22.6 原生剥离类型,可直接 import .ts(显式带 .ts 后缀)。
// 覆盖:完整句柄(对象/JSON 字符串)、截断句柄(审计 result_brief,JSON 非法)正则兜底、
// 标记真值校验、非句柄/无 path 的否定用例。
import test from 'node:test'
import assert from 'node:assert/strict'
import { parseOffloadHandle, hasOffloadMark } from '../src/composables/ai/useOffloadedResult.ts'
const PATH = 'C:\\Users\\me\\AppData\\tool-results\\2026-10\\abc.txt'
test('parseOffloadHandle: 完整句柄对象取全字段', () => {
const h = parseOffloadHandle({ __offloaded__: true, path: PATH, size_bytes: 9000, tool: 'read_file', head: 'x', hint: '...' })
assert.equal(h.path, PATH)
assert.equal(h.sizeBytes, 9000)
assert.equal(h.tool, 'read_file')
})
test('parseOffloadHandle: 完整句柄 JSON 字符串', () => {
const s = JSON.stringify({ __offloaded__: true, path: PATH, size_bytes: 12345, tool: 'grep' })
const h = parseOffloadHandle(s)
assert.equal(h.path, PATH)
assert.equal(h.sizeBytes, 12345)
})
test('parseOffloadHandle: 截断句柄(JSON 非法)正则兜底抽 path 并反转义', () => {
// 模拟后端 truncate_chars_ellipsis 截断:JSON 不闭合、尾部省略号
const brief = `{"__offloaded__":true,"path":"${PATH.replace(/\\/g, '\\\\')}","size_bytes":9000,"head":"hhh`
const h = parseOffloadHandle(brief)
assert.equal(h.path, PATH)
// 截断态仅能拿到 path,size/tool 缺失不报错
assert.equal(h.sizeBytes, undefined)
})
test('parseOffloadHandle: 标记非 true / 非句柄 / 无 path 一律 null', () => {
assert.equal(parseOffloadHandle({ __offloaded__: false, path: PATH }), null)
assert.equal(parseOffloadHandle({ __offloaded__: true }), null)
assert.equal(parseOffloadHandle('{"a":1}'), null)
assert.equal(parseOffloadHandle('plain text'), null)
assert.equal(parseOffloadHandle(null), null)
assert.equal(parseOffloadHandle([1, 2]), null)
})
test('hasOffloadMark: 字符串严格匹配标记,对象看布尔真值', () => {
assert.equal(hasOffloadMark('x "__offloaded__":true y'), true)
assert.equal(hasOffloadMark('just __offloaded__ word'), false)
assert.equal(hasOffloadMark({ __offloaded__: true }), true)
assert.equal(hasOffloadMark({ __offloaded__: false }), false)
assert.equal(hasOffloadMark(null), false)
})