Skip to content

feat: v2.0 TypeScript 全量移植(ts/,对齐上游 Node 22 + TS 技术栈) - #14

Merged
H2Rhan merged 1 commit into
masterfrom
feat/ts-port
Sep 9, 2026
Merged

H2Rhan merged 1 commit into
masterfrom
feat/ts-port

Conversation

@H2Rhan

@H2Rhan H2Rhan commented Sep 9, 2026

Copy link
Copy Markdown
Owner

目的

上游 TencentDB-Agent-Memory 是 Node 22 + TypeScript 技术栈——Python 实现无法直接合入。本 PR 在 ts/ 目录做功能等价的全量移植,为后续向上游 MemoryProxy 提 PR 铺路;Python 版保留为参考实现,docs/ 契约与实验文档对两个实现同样适用。

范围(功能对齐 Python v1.7)

  • IR 三层契约 / 三对 adapter(降级记录、assistantFromUpstream)
  • 状态层:SessionStore(node:sqlite,表结构与惰性淘汰语义一致)+ ToolIdMap + SessionConfig
  • 网关:convert / finalizeTurn / 预热校验 / 记忆注入 / 限流 / SSE 三条路径(chat←anthropic 逐块转换 + 同协议透传 + 未实现方向显式 501)
  • 5 项埋点 / max_tokens:0 预热 / mock backend / 冒烟脚本

测试(与 Python 版用例一一镜像)

  • 56 项离线单测(node:test)全过 + 25 项端到端冒烟全过(含逐块到达实测 ~50ms)
  • strict + erasableSyntaxOnly 类型检查全过;运行零第三方依赖(Node 22 类型擦除,无需编译),开发依赖仅 typescript(含 package-lock)
  • CI 新增 unittest-ts job(npm ci → typecheck → 单测 → 冒烟)

差异清单(有意为之,详见 ts/README.md)

  1. 不读系统代理(Node 恒直连 ≡ Python 版 PB_DIRECT=1);2. node:sqlite 的 experimental warning 属正常;3. property 测试 PRNG 换 mulberry32(种子固定,四条性质不变);4. webui / verify_cache / experiments 未移植(后续 PR 补)

验证

Node v22.22.2:npm test 56/56、npm run smoke 25/25、npm run typecheck 0 error

- ts/ 全量移植:IR 契约 / 三对 adapter / 状态层(node:sqlite)/ 网关 / SSE 流式(转换+透传+501)/ 埋点 / 预热 / mock / 冒烟,功能对齐 Python 版 v1.7
- 测试镜像:56 项离线单测(node:test)+ 25 项端到端冒烟全过,用例与 Python 版逐条对应;strict + erasableSyntaxOnly 类型检查全过
- 运行零第三方依赖(Node 22 类型擦除);开发依赖仅 typescript(含 package-lock)
- 差异清单见 ts/README.md(恒直连 / node:sqlite / PRNG 更换);webui、verify_cache、experiments 未移植(后续 PR)
- CI 加 unittest-ts job(typecheck + 单测 + 冒烟);README/CHANGELOG/.gitignore 同步
@H2Rhan
H2Rhan merged commit 5654ebc into master Sep 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant