Skip to content
签到签到

3. 技术栈与工程系统

3.1 技术栈表

技术或依赖在项目中的用途核心依赖对应配置或源码位置学习优先级建议掌握程度
TypeScript全部源码、typed events、declaration mergingtsconfig.base.jsonpackage.json能读高级泛型和 declaration merging
Node.jsHost 运行时、子进程、FS、HTTP、PTYpackage.json.engines理解事件循环、stream、AbortSignal
pnpm workspacesMonorepo 包管理pnpm-workspace.yaml、根 package.json会用 filter/workspace
Cordis插件运行时、Context、fiber、events、effectvendor/docs/cordis-primer.md理解五思想和四种派发
schemastery配置 schema 校验packages/core/agent-loop/src/index.ts:300-311能读 Config
Typert类型图、生成 RPC 契约packages/typert/docs/subsystems/typert.md进阶知道它解决什么
tsxsource launch ESMpackage.jsondsh script知道 source/build 差异
tsdown / tsc构建 Host/Client libpackage.json build scripts知道 build 阶段
ViteWeb shell / 前端构建apps/webpackages/client/web能调试前端
Vitest测试运行器vitest.config.ts、根 scripts会跑单测
React + useSyncExternalStoreWeb UI 渲染packages/client/ui-rendererapps/web理解外部 store 订阅
SQLite/JSONL会话持久化与检索核心辅助packages/session/session-persistence-*session-query-sqlite理解 append log 与查询
OpenTelemetry会话遥测辅助packages/session/session-telemetry-otel知道边界

3.2 包管理和依赖管理

package.jsonpnpm@11.7.0,workspaces 覆盖 vendor/*packages/*/*native/landlock-runapps/*website。所有 npm 包使用 @deepseek-ai/dsh-*,vendored 包 rescope。扩展插件依赖 Service Definition,不依赖 concrete provider,见 packages/README.md#dependencies

3.3 构建流程

根脚本显示:

text
build
  build:lib
    build:lib:host
    build:lib:client
  build:web

Host 和 Client 是两个独立 TypeScript aggregate,不能压成一个 program,否则两端对 Context 的 declaration merging 会冲突。typert 只在 Host tsdown 阶段生成类型图。

依据:package.jsondocs/development.md#typescript-project-layout

3.4 开发模式

source launch 使用:

sh
pnpm dsh --profile headless "task"

根 script 实际是 node --import tsx/esm apps/cli/src/bin.ts。源码运行必须保持 ESM。Web HMR 由 pnpm run dev:web 重建客户端 bundle,client-hmr 行保持挂载但空闲。

3.5 测试体系

  • pnpm run test:Vitest 单测。
  • pnpm run test:coverage:CI 覆盖率门禁,packages/*/*/src 每文件 100%。
  • pnpm run test:e2e:真实 API e2e,无 key 自动跳过。
  • pnpm run test:snapshot:无 key 的 ACP/headless 回放对比。
  • pnpm run test:web:浏览器快照,需要构建。

这些命令来自根 package.json,本次未执行。

3.6 配置与环境变量

cordis.ymlconfig 支持 !!js 表达式。真实 API 读取 DEEPSEEK_API_KEY,可选 DEEPSEEK_BASE_URL。权限相关可读 DSH_PERMISSION_MODE;遥测可读 DSH_TELEMETRY_MODEDSH_TELEMETRY_DISABLED。这些在 packages/bundle/base/cordis.patch.yml 有体现。

3.7 发布和部署方式

从仓库声明看,存在 release:dshrelease:packrelease:publishpublish:npm-baseline。产品安装后由 apps/cli/lib/bin.js 启动。本教程未执行发布流程。

3.8 开发与生产差异

source launch 依赖 tsx ESM;built launch 依赖 lib/ 产物。测试默认解析 source plane,只有 built artifact smoke 显式运行 lib/。开发模式还有配置 patch 热更新,生产或安装形式仍以配置组合为基础。