🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Codex 组件化重建 songyang0603/dsh-codex

DeepSeek Harness
songyang060380 天前有提交已提供中文文档扫描:含敏感能力

把 Codex 拆成可独立安装的插件,按边界逐项复现行为

28.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add songyang0603/dsh-codex
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 80 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 144 处,展示前 119 条)
  • 读取本地文件
    conformance/apply-patch-engine/compare.mjs:293
    return parseJsonl(await readFile(absolute, "utf8"), absolute);
  • 写入本地文件
    conformance/apply-patch-engine/run-candidate.mjs:100
    await mkdir(path, { recursive: true });
  • 写入本地文件
    conformance/apply-patch-engine/run-candidate.mjs:102
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    conformance/apply-patch-engine/run-candidate.mjs:112
    await writeFile(path, Buffer.from(bytesHex, "hex"));
  • 写入本地文件
    conformance/apply-patch-engine/run-candidate.mjs:122
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    conformance/apply-patch-engine/run-candidate.mjs:131
    await chmod(path, Number.parseInt(fixture.mode, 8));
  • 写入本地文件
    conformance/apply-patch-engine/run-candidate.mjs:141
    mkdir(join(root, path)),
  • 读取本地文件
    conformance/apply-patch-engine/run-candidate.mjs:160
    const names = await readdir(directory);
  • 读取本地文件
    conformance/apply-patch-engine/run-candidate.mjs:164
    const stats = await lstat(path);
  • 读取本地文件
    conformance/apply-patch-engine/run-candidate.mjs:170
    target: await readlink(path),
  • 读取本地文件
    conformance/apply-patch-engine/run-candidate.mjs:179
    bytesHex: (await readFile(path)).toString("hex"),
  • 读取本地文件
    conformance/apply-patch-engine/run-candidate.mjs:262
    await readFile(corpusPath, "utf8"),
  • 删除本地文件递归
    conformance/apply-patch-engine/run-candidate.mjs:299
    roots.map((root) => rm(root, { recursive: true, force: true })),
  • 删除本地文件
    conformance/apply-patch-engine/run-candidate.mjs:301
    await rm(stagedOutput, { force: true });
  • 读取本地文件
    conformance/approval/compare-adapter-contract.mjs:23
    readFile(contractPath, "utf8").then((text) =>
  • 读取本地文件
    conformance/approval/compare-adapter-contract.mjs:26
    readFile(outputPath, "utf8").then((text) => parseJsonl(text, outputPath)),
  • 读取本地文件
    conformance/approval/compare.mjs:25
    const values = parseJsonl(await readFile(resolved, "utf8"), resolved);
  • 读取本地文件
    conformance/approval/compare.mjs:92
    readFile(resolve(corpusArg), "utf8").then((text) =>
  • 读取本地文件
    conformance/approval/lib.mjs:54
    return parseJsonl(await readFile(resolved, "utf8"), resolved);
  • 发起网络请求
    conformance/approval/run-adapter-contract.mjs:97
    const first = runtime.service.request(
  • 发起网络请求
    conformance/approval/run-adapter-contract.mjs:100
    const second = runtime.service.request(
  • 发起网络请求
    conformance/approval/run-adapter-contract.mjs:126
    const pending = runtime.service.request(
  • 发起网络请求
    conformance/approval/run-adapter-contract.mjs:148
    const pending = runtime.service.request(request());
  • 发起网络请求
    conformance/approval/run-adapter-contract.mjs:170
    const pending = runtime.service.request(request());
  • 发起网络请求
    conformance/approval/run-adapter-contract.mjs:195
    const resolution = await runtime.service.request(request());
  • 读取本地文件
    conformance/approval/run-adapter-contract.mjs:378
    const cases = parseJsonl(await readFile(args.corpus, "utf8"), args.corpus);
  • 写入本地文件
    conformance/approval/run-adapter-contract.mjs:393
    await mkdir(dirname(args.output), { recursive: true });
  • 写入本地文件
    conformance/approval/run-adapter-contract.mjs:394
    await writeFile(
  • 发起网络请求
    conformance/approval/run-candidate.mjs:210
    const resolution = await runtime.service.request({
  • 发起网络请求
    conformance/approval/run-candidate.mjs:282
    const resolution = await runtime.service.request({
  • 发起网络请求
    conformance/approval/run-candidate.mjs:352
    .request({
  • 读取本地文件
    conformance/approval/run-candidate.mjs:397
    .update(await readFile(resolve(packageDir, relativePath)))
  • 读取本地文件
    conformance/approval/run-candidate.mjs:404
    const corpusText = await readFile(args.corpus, "utf8");
  • 写入本地文件
    conformance/approval/run-candidate.mjs:477
    await mkdir(dirname(args.output), { recursive: true });
  • 写入本地文件
    conformance/approval/run-candidate.mjs:478
    await writeFile(
  • 读取本地文件
    conformance/config-stack/compare.mjs:194
    readFile(oraclePath, "utf8").then((text) => parseJsonl(text, oraclePath)),
  • 读取本地文件
    conformance/config-stack/compare.mjs:195
    readFile(candidatePath, "utf8").then((text) =>
  • 执行外部命令来自配置/变量
    conformance/config-stack/run-candidate.mjs:286
    this.#child = spawn(engine, [], { stdio: ["pipe", "pipe", "pipe"] });
  • 发起网络请求
    conformance/config-stack/run-candidate.mjs:393
    const response = await this.request(method, params);
  • 写入本地文件
    conformance/config-stack/run-candidate.mjs:480
    await mkdir(layerRoot, { recursive: true });
  • 写入本地文件
    conformance/config-stack/run-candidate.mjs:481
    await writeFile(
  • 写入本地文件
    conformance/config-stack/run-candidate.mjs:488
    await mkdir(rulesRoot, { recursive: true });
  • 写入本地文件
    conformance/config-stack/run-candidate.mjs:489
    await writeFile(join(rulesRoot, rule.name), rule.source, "utf8");
  • 写入本地文件
    conformance/config-stack/run-candidate.mjs:503
    await mkdir(requirementsRoot, { recursive: true });
  • 写入本地文件
    conformance/config-stack/run-candidate.mjs:505
    await writeFile(file, layer.toml, "utf8");
  • 发起网络请求
    conformance/config-stack/run-candidate.mjs:538
    const loadResponse = await sidecar.request("load_config_stack", params);
  • 读取本地文件
    conformance/config-stack/run-candidate.mjs:594
    const cases = parseJsonl(await readFile(args.corpus, "utf8"), args.corpus);
  • 删除本地文件递归
    conformance/config-stack/run-candidate.mjs:627
    await rm(tempRoot, { recursive: true, force: true });
  • 读取本地文件
    conformance/host-config/compare.mjs:196
    readFile(oraclePath, "utf8").then((text) => parseJsonl(text, oraclePath)),
  • 读取本地文件
    conformance/host-config/compare.mjs:197
    readFile(candidatePath, "utf8").then((text) =>
  • 执行外部命令来自配置/变量
    conformance/host-config/run-candidate.mjs:300
    this.#child = spawn(engine, [], { stdio: ["pipe", "pipe", "pipe"], env });
  • 发起网络请求
    conformance/host-config/run-candidate.mjs:406
    const response = await this.request(method, params);
  • 读取本地文件
    conformance/host-config/run-candidate.mjs:496
    const metadata = await lstat(path);
  • 读取本地文件
    conformance/host-config/run-candidate.mjs:498
    entries.push([relativePath, "symlink", await readlink(path)]);
  • 读取本地文件
    conformance/host-config/run-candidate.mjs:503
    const children = await readdir(path);
  • 读取本地文件
    conformance/host-config/run-candidate.mjs:515
    .update(await readFile(path))
  • 写入本地文件
    conformance/host-config/run-candidate.mjs:527
    await mkdir(join(caseRoot, "home"), { recursive: true });
  • 写入本地文件
    conformance/host-config/run-candidate.mjs:529
    await mkdir(join(caseRoot, directory), { recursive: true });
  • 写入本地文件
    conformance/host-config/run-candidate.mjs:533
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    conformance/host-config/run-candidate.mjs:534
    await writeFile(
  • 写入本地文件
    conformance/host-config/run-candidate.mjs:542
    await mkdir(dirname(path), { recursive: true });
  • 发起网络请求
    conformance/host-config/run-candidate.mjs:594
    const response = await sidecar.request(
  • 读取本地文件
    conformance/host-config/run-candidate.mjs:660
    await access(path);
  • 读取本地文件
    conformance/host-config/run-candidate.mjs:683
    const cases = parseJsonl(await readFile(args.corpus, "utf8"), args.corpus);
  • 写入本地文件
    conformance/host-config/run-candidate.mjs:685
    await mkdir(dirname(args.output), { recursive: true });
  • 执行外部命令来自配置/变量
    conformance/host-config/run-candidate.mjs:720
    const child = spawn(
  • 删除本地文件递归
    conformance/host-config/run-candidate.mjs:744
    await rm(tempRoot, { recursive: true, force: true });
  • 读取本地文件
    conformance/host-config/validate-output.mjs:125
    readFile(resolve(args.corpus), "utf8").then((text) =>
  • 读取本地文件
    conformance/host-config/validate-output.mjs:128
    readFile(resolve(args.output), "utf8").then((text) =>
  • 读取本地文件
    conformance/host-config/verify-bundled-output.mjs:77
    const text = await readFile(path, "utf8");
  • 读取本地文件
    conformance/persistence/lib.mjs:231
    const bytes = await readFile(path);
  • 执行外部命令来自配置/变量
    conformance/persistence/run-candidate.mjs:41
    this.#child = spawn(engine, [], { stdio: ["pipe", "pipe", "pipe"] });
  • 发起网络请求
    conformance/persistence/run-candidate.mjs:168
    await this.request("shutdown");
  • 读取本地文件
    conformance/persistence/run-candidate.mjs:239
    metadata = await lstat(path);
  • 读取本地文件
    conformance/persistence/run-candidate.mjs:248
    return { kind: "file", content: await readFile(path, "utf8") };
  • 写入本地文件
    conformance/persistence/run-candidate.mjs:262
    if (initial.home === "directory") await mkdir(home, { recursive: true });
  • 写入本地文件
    conformance/persistence/run-candidate.mjs:264
    await mkdir(join(home, "rules"), { recursive: true });
  • 写入本地文件
    conformance/persistence/run-candidate.mjs:265
    await writeFile(
  • 写入本地文件
    conformance/persistence/run-candidate.mjs:272
    await writeFile(
  • 发起网络请求
    conformance/persistence/run-candidate.mjs:300
    client.request("diagnostics"),
  • 发起网络请求
    conformance/persistence/run-candidate.mjs:301
    client.request("compile_network_domains"),
  • 发起网络请求
    conformance/persistence/run-candidate.mjs:369
    const hello = await client.request("hello");
  • 发起网络请求
    conformance/persistence/run-candidate.mjs:373
    const opened = await client.request(
  • 发起网络请求
    conformance/persistence/run-candidate.mjs:397
    const appended = await client.request("append_prefix_amendment", {
  • 写入本地文件
    conformance/persistence/run-candidate.mjs:431
    await mkdir(join(home, "rules"), { recursive: true });
  • 写入本地文件
    conformance/persistence/run-candidate.mjs:432
    await writeFile(
  • 删除本地文件递归
    conformance/persistence/run-candidate.mjs:449
    await rm(home, { recursive: true, force: true });
  • 删除本地文件递归
    conformance/persistence/run-candidate.mjs:453
    await rm(join(home, "rules"), { recursive: true, force: true });
  • 删除本地文件递归
    conformance/persistence/run-candidate.mjs:489
    rm(root, { recursive: true, force: true }),
  • 读取本地文件
    conformance/persistence/run-candidate.mjs:514
    .update(await readFile(args.engine))
  • 删除本地文件递归
    conformance/persistence/run-candidate.mjs:547
    rm(stagingDir, { recursive: true, force: true }),
  • 读取本地文件
    conformance/persistence/validate-output.mjs:242
    await readFile(outputPath, "utf8"),
  • 读取本地文件
    conformance/upstream-runtime/compare.mjs:82
    readFile(oraclePath, "utf8").then((text) => parseJsonl(text, oraclePath)),
  • 读取本地文件
    conformance/upstream-runtime/compare.mjs:83
    readFile(candidatePath, "utf8").then((text) =>
  • 执行外部命令来自配置/变量
    conformance/upstream-runtime/run-candidate.mjs:92
    this.#child = spawn(engine, [], { stdio: ["pipe", "pipe", "pipe"] });
  • 发起网络请求
    conformance/upstream-runtime/run-candidate.mjs:195
    await this.request("shutdown", {});
  • 执行外部命令来自配置/变量
    conformance/upstream-runtime/run-candidate.mjs:288
    const child = spawn(
  • 读取本地文件
    conformance/upstream-runtime/run-candidate.mjs:336
    const cases = parseJsonl(await readFile(args.corpus, "utf8"), args.corpus);
  • 发起网络请求
    conformance/upstream-runtime/run-candidate.mjs:340
    const hello = await sidecar.request("hello", {});
  • 发起网络请求
    conformance/upstream-runtime/run-candidate.mjs:350
    await sidecar.request("load", {
  • 发起网络请求
    conformance/upstream-runtime/run-candidate.mjs:358
    const result = await sidecar.request(
  • 写入本地文件
    conformance/upstream-runtime/run-candidate.mjs:376
    await mkdir(dirname(args.output), { recursive: true });
  • 写入本地文件
    conformance/upstream-runtime/run-candidate.mjs:377
    await writeFile(args.output, `${output.join("\n")}\n`, "utf8");
  • 读取本地文件
    packages/apply-patch-engine/src/client.ts:193
    if (!existsSync(candidate) || !statSync(candidate).isFile()) continue;
  • 读取本地文件
    packages/apply-patch-engine/src/client.ts:193
    if (!existsSync(candidate) || !statSync(candidate).isFile()) continue;
  • 读取本地文件
    packages/apply-patch-engine/src/client.ts:195
    const mode = statSync(candidate).mode;
  • 写入本地文件
    packages/apply-patch-engine/src/client.ts:196
    if ((mode & 0o111) === 0) chmodSync(candidate, mode | 0o100);
  • 执行外部命令来自配置/变量
    packages/apply-patch-engine/src/client.ts:270
    this.child = spawn(enginePath, [...(options.engineArgs ?? [])], {
  • 读取本地文件
    packages/approval/src/client.ts:155
    const mode = statSync(enginePath).mode & 0o777;
  • 写入本地文件
    packages/approval/src/client.ts:156
    if ((mode & 0o100) === 0) chmodSync(enginePath, mode | 0o100);
  • 读取本地文件
    packages/approval/src/client.ts:186
    const candidate = candidates.find((path) => existsSync(path));
  • 执行外部命令来自配置/变量
    packages/approval/src/client.ts:490
    this.child = spawn(enginePath, [...(options.engineArgs ?? [])], {
  • 发起网络请求
    packages/approval/src/dsh-compat.ts:44
    const outcome: DshOneShotApprovalOutcome = await options.request(prompt);
  • 发起网络请求
    packages/approval/src/service.ts:224
    return this.request({
  • 发起网络请求
    packages/approval/src/service.ts:522
    candidate = await backend.request(record.prompt);
  • 读取本地文件
    packages/execpolicy/src/client.ts:278
    const mode = statSync(enginePath).mode & 0o777;
  • 写入本地文件
    packages/execpolicy/src/client.ts:279
    if ((mode & 0o100) === 0) chmodSync(enginePath, mode | 0o100);
  • 读取本地文件
    packages/execpolicy/src/client.ts:309
    const candidate = candidates.find((path) => existsSync(path));
  • 执行外部命令来自配置/变量
    packages/execpolicy/src/client.ts:385
    this.child = spawn(enginePath, [...(options.engineArgs ?? [])], {
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拆分为可独立安装插件
  • 按边界逐项复现行为
  • 不调用原二进制

把 OpenAI Codex 重建成精确、可独立安装的 DeepSeek Harness 插件,不调用 Codex 二进制。

README

由 DeepSeek 最新模型翻译生成
dsh-codex 把 OpenAI Codex 重建为精确、可独立安装的 DeepSeek Harness 组件。 dsh-codex 将 Codex 拆成职责清晰的 DSH 插件,再把这些插件组合成 coding agent。运行时由 DSH 自己承载:组件不会调用 codex 二进制,也不会把 Codex 当成 subagent 委托任务。 每个已完成组件都复现 OpenAI Codex 固定提交 086396f 中一个定义明确的边界。原则很简单:组件可以小,但声明边界内的行为必须精确。 仓库仍在持续开发。目前有三个基础组件通过验证;只安装它们还不能得到完整 Codex agent。 💡 为什么做 dsh-codex? DeepSeek Harness 以可组合插件为核心。dsh-codex 利用这种架构,把 Codex 子系统变成拥有明确状态、生命周期、安装方式和 conformance 边界的 DSH 服务。 这样可以: - 一次安装、验证一个 Codex 能力; - 在不同 DSH coding-agent profile 中复用同一个组件; - 替换或组合组件,而不把行为藏进单体 wrapper; - 把每个已完成边界与固定上游实现逐项比较; - 最终构建 DSH 原生 coding agent,而不是原生 Codex 二进制的桥接器。
展开完整文档(README 剩余 1 节)
dsh-codex

把 OpenAI Codex 重建为精确、可独立安装的 DeepSeek Harness 组件。

dsh-codex 将 Codex 拆成职责清晰的 DSH 插件,再把这些插件组合成 coding agent。运行时由 DSH 自己承载:组件不会调用 codex 二进制,也不会把 Codex 当成 subagent 委托任务。

每个已完成组件都复现 OpenAI Codex 固定提交 086396f 中一个定义明确的边界。原则很简单:组件可以小,但声明边界内的行为必须精确。

仓库仍在持续开发。目前有三个基础组件通过验证;只安装它们还不能得到完整 Codex agent。

💡 为什么做 dsh-codex?

DeepSeek Harness 以可组合插件为核心。dsh-codex 利用这种架构,把 Codex 子系统变成拥有明确状态、生命周期、安装方式和 conformance 边界的 DSH 服务。

这样可以:

- 一次安装、验证一个 Codex 能力;
- 在不同 DSH coding-agent profile 中复用同一个组件;
- 替换或组合组件,而不把行为藏进单体 wrapper;
- 把每个已完成边界与固定上游实现逐项比较;
- 最终构建 DSH 原生 coding agent,而不是原生 Codex 二进制的桥接器。

🧩 已完成组件

| 组件 | 提供的能力 | 状态 |
| @songyang0603/dsh-codex-execpolicy | Codex policy/config 发现、命令分类、approval requirement 推导、迁移与规则持久化 | 0.1.0 · macOS arm64 源码 parity_verified |
| @songyang0603/dsh-codex-approval | 无损 rich approval 协议、pending 请求关联、取消和 live-session approval cache | 0.1.0 · macOS arm64 源码 parity_verified |
| @songyang0603/dsh-codex-apply-patch-engine | apply-patch 解析、调用识别、校验、本地变更与有序 committed delta | 0.1.0 · macOS arm64 源码 parity_verified |

Codex 的完整拆分见组件地图,parity_verified 的完成标准见精确性标准。

🚀 快速开始

需要 Node.js 22.19+、pnpm 10.19、Rust 1.95.0 和 DeepSeek Harness 0.1.0-rc.6。

git clone https://github.com/songyang0603/dsh-codex.git
cd dsh-codex
pnpm install
pnpm native:stage
pnpm build

把三个已完成组件安装到同一个本地 DSH profile:

dsh plugin --profile codex-dev add ./packages/execpolicy
dsh plugin --profile codex-dev add ./packages/approval
dsh plugin --profile codex-dev add ./packages/apply-patch-engine
dsh --profile codex-dev --dump-config

这些 bundle 会挂载三个 Cordis 服务:

ctx.codexExecPolicy
ctx.codexApproval
ctx.codexApplyPatch

native:stage 会编译当前平台的 Rust sidecar,核对协议和固定上游源码身份,再写入包内二进制与 SHA-256 文件。生成的二进制不会提交到 Git。

目前组件只从源码使用;尚未宣称发布 npm 包或 GitHub native binary。

⚙️ 工作方式

固定 Codex 源码 │ ├── 原生语义引擎(Rust) │ └── 精确上游类型与行为 │ ├── DSH 组件包(TypeScript + Cordis) │ └── 生命周期、IPC、校验与服务所有权 │ ├── canonical composition profile(开发中) │ └── shell、sandbox、network、provider、session 与 UI │ └── 独立 conformance 套件 └── 固定上游 oracle ↔ 生产组件

当 TypeScript 重写容易引入语义漂移时,组件使用 native sidecar。DSH 包负责进程生命周期并暴露类型化 Cordis 服务;approval、sandbox、network 和执行顺序由独立消费者组件拥有,避免双重提示或隐藏 bypass。

每个可安装包都有自己的 dsh.bundle.patch、profile row、编译入口、说明、许可声明和精确 peer。仓库根目录是组件 workspace,不是一个可安装的全家桶 bundle。

✅ 当前精确性证据

| 边界 | 独立比较 | 包与运行时检查 |
| Execpolicy | runtime 68/68;config stack 6/6;host discovery 11/11;migration/persistence 16/16 | 18 个 TypeScript/native/真实 Loader 测试,以及全新 DSH rc.6 归档 smoke test |
| Approval | 上游/固定源码 43/43;DSH adapter contract 10/10 | 49 个包测试,以及全新 DSH rc.6 add/activate/remove profile 测试 |
| Apply-patch 语义引擎 | 固定上游 96 个测试全部通过;差分 oracle 23/23 | 10 个 native 测试、6 个 TypeScript/native/真实 Loader 测试和全新归档 mutation 测试 |

Oracle 由固定上游源码编译,候选输出不会充当自己的 oracle。精确命令、身份、哈希、失败记录和排除范围位于 conformance/*/STATUS.md 与 upstreams.lock.json。

🌍 平台边界

| 平台 | 当前处理 |
| macOS arm64 | parity_verified;当前源码与打包目标 |
| macOS x64 | planned / unverified;保留兼容性 CI,但不声明 parity |
| Linux x64/arm64 | planned / unverified;保留上游源码、corpus 与非阻断 CI,不发布 binary |
| Windows x64 | planned / unverified;保留上游 cfg(windows)、PowerShell corpus 与非阻断 CI,不发布 binary |

在 macOS 上运行 Windows/Linux 风格输入,不构成对应操作系统的证据。平台 parity 必须让固定上游 oracle 与 candidate 在同一个真实平台执行。项目保留上游平台分支和 conformance 入口,避免未来重新研究;但不会发布猜测性兼容代码或未经验证的 native binary。

精确策略见平台支持与证据。

📁 仓库内容

crates/ 原生语义引擎 packages// 可独立安装的 DSH 插件 conformance// 独立上游 oracle 与小型 corpus docs/ 架构、包契约与精确性边界 research/ 固定版本的 DSH 生态插件实现研究 scripts/ pin 校验、打包与 native staging upstreams.lock.json 机器可读的 Git/npm 身份

临时 JSONL、Cargo target、包构建产物和 native binary 不会提交。小型 corpus 与只用于测试的上游 instrumentation 会保留,让贡献者能够复现 parity 声明。

🛠️ 开发

pnpm check

重量级 conformance workflow 会单独运行,因为它们需要编译固定的 Codex 上游 crate。每个组件的命令和 API 见:

- Execpolicy
- Approval
- Apply-patch 语义引擎

🤝 参与贡献

欢迎提交 Issue 和 Pull Request。新组件应拥有一个清晰子系统边界,可以独立安装,遵守 DSH 生命周期语义,固定上游身份,并在声明 parity 前提供可复现的 conformance 证据。

建议先阅读组件包契约、组件地图和 DSH 生态兼容性研究。

🔗 上游与独立性

本项目是独立社区项目,与 OpenAI 或 DeepSeek 不存在隶属、背书或赞助关系。

OpenAI Codex 与 DeepSeek Harness 是彼此独立的上游项目。这里使用它们的名称,是为了标识研究和集成对象,并不表示官方身份。

📄 许可

Apache-2.0。参见 LICENSE、NOTICE、THIRD_PARTY_NOTICES.md 与 UPSTREAMS.md。
预览分享卡片长什么样 ↓songyang0603/dsh-codex
分享 · DeepSeek Harness Hub
songyang0603/dsh-codex

把 Codex 拆成可独立安装的插件,按边界逐项复现行为

这是你的仓库?认领条目

回到顶部