Tacrine/oh-my-dsh-omo-fork-chs ↗★ 0

@tacrine_f/oh-my-dsh-omo-fork-chs

The unofficial Simplified Chinese fork of the tri-agent agent preset (Atlas orchestration plus Prometheus planning), packaged for DeepSeek Harness as a Cordis bundle; the vendored upstream content is licensed under SUL-1.0. 适合需要使用中文版tri-agent预设进行任务编排的用户。

パッケージ
@tacrine_f/oh-my-dsh-omo-fork-chs
互換性
未検証
Harness ピア範囲
>=0.1.7-rc.2 <0.2.0
Cordis ピア範囲
^4.0.1
バージョン
0.1.0
ライセンス
NOASSERTION
最終更新
2026/10/11

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Tacrine/oh-my-dsh-omo-fork-chs

ドキュメント

README 全文を読む ↗

oh-my-dsh-omo-fork-chs

npm version license: SUL-1.0 (content) + MIT (packaging) node

The Simplified-Chinese unofficial fork of the tri-agent agent preset, packaged for DeepSeek Harness as a publishable Cordis bundle. Its preset id is omo-fork-chs and its order is 11, so it sits beside tri-agent rather than replacing it: this package does not change the default preset and does not change which preset a session picks. Only the persona prose is translated; the toolchain composition and the orchestration doctrine are the upstream design.

The preset gives an agent a two-mode identity and a full coding toolchain:

  • Atlas is the standing orchestrator. It does not implement, verify, or review; it reads the plan, the notepad and the evidence, does the bookkeeping, and delegates every unit of work to a named subagent.
  • Prometheus is the planning doctrine. While a session is in plan mode (/plan), the identity swaps to Prometheus for the whole planning session and then swaps back. A single plugin, plan-aware-persona.mjs, owns the one deployment:persona-prefix slot and chooses the text per assembly by reading the public plan session projection. The planMode service is deliberately not injected: it lives inside the isolate: { planMode: true } realm, so injecting it from outside would never resolve.

Around that identity the preset mounts the coding toolchain: filesystem and shell tools, background jobs, skills, goals, plan mode, compaction, delegation and workflows. The declaration carries 40 - id: rows, of which 9 are anchored subagent rows (explore, librarian, oracle, momus, multimodal-looker, sisyphus-junior, metis, hephaestus, sisyphus). The package ships 11 persona files; the plugin reads atlas.md and prometheus.md itself, and the other 9 are anchored to the subagent rows.

What ships

FilePurpose
cordis.patch.ymlThe published bundle patch: the preset declaration (id: preset-omo-fork-chs, config.id: omo-fork-chs, config.name: 'Oh My DSH Chs - OMO Fork', order: 11) and its plugins: list. 540 lines, 11 rewritten sites.
plan-aware-persona.mjsThe package entry that registers the plan-aware persona prefix and the configured suffix. Exported as ./persona.
index.jsThe package root. It is intentionally empty: the bundle's behaviour lives in cordis.patch.yml and in ./persona.
personas/11 persona documents, translated into Simplified Chinese.
baseline/A frozen snapshot of the pre-port patch plus a sidecar that explains what it does and does not prove.
tools/The port, verification, baseline and package-check CLIs.
test/The zero-dependency test suite, run with node --test.
LICENSE-MIT.mdThe MIT terms that cover our own work.
LICENSE-SUL-1.0.mdThe verbatim upstream Sustainable Use License 1.0 terms, which cover the upstream-derived content.
NOTICE.mdThe modification notice, the upstream attribution, and the machine-readable license scope mapping.

The patch mounts the following peer packages, which DSH provides:

@deepseek-ai/dsh-agent-preset, dsh-agent-instructions, dsh-tool-bash, dsh-tool-pwsh, dsh-tool-fs, dsh-tool-fs-search, dsh-tool-jobs, dsh-skill-filesystem, dsh-tool-skill, dsh-command-goal, dsh-tool-goal, dsh-plan-mode, dsh-compaction-basic, dsh-command-compact, dsh-compaction-tool-result-pruner, dsh-tool-subagent-control, dsh-tool-subagent, dsh-workflow-ptc, dsh-tool-workflow, dsh-tool-ralph, dsh-tool-ask-user, dsh-tool-todo, dsh-tool-web, dsh-tool-present, plus @deepseek-ai/cordis. That is 25 peer dependencies in total.

Install

Installation is two explicit steps. Step 1 installs the dependency; step 2 tells the profile to load it. Both are required, and dsh is not assumed to be on your PATH.

Step 1: install the package into the profile

Point the CLI at your DSH checkout's bin file, and forward the install to the profile:

node "" plugin --profile 
 add -w @tacrine_f/oh-my-dsh-omo-fork-chs

For example, on a checkout whose runtime is , is \@deepseek-ai\dsh\lib\bin.js, so:

node "\@deepseek-ai\dsh\lib\bin.js" plugin --profile web add -w @tacrine_f/oh-my-dsh-omo-fork-chs

This runs pnpm inside $DSH_HOME\profiles\ \, so it writes a dependencies entry. It does not touch dsh.profile.bundles.

Step 2: add the package to dsh.profile.bundles and restart

Open $DSH_HOME\profiles\ \package.json and add the package name to the profile's dsh.profile.bundles array:

{
  "dsh": {
    "profile": {
      "bundles": [
        // ...your existing bundles...
        "@tacrine_f/oh-my-dsh-omo-fork-chs"
      ]
    }
  }
}

Then restart the Host and start a new session. A live agent keeps the composition it booted with, so an already-running session will not pick the preset up; a new session is required.

Verify the install composed

$env:DSH_HOME = ""
node "" --profile 
 --dump-config

The output should contain a preset-omo-fork-chs row whose name is @deepseek-ai/dsh-agent-preset, whose config.id is omo-fork-chs, whose config.name is 'Oh My DSH Chs - OMO Fork' and whose config.order is 11, plus nine personas expressions resolving through this package. --dump-config prints the raw !!js expression text, so the nine anchors appear as the resolve(' /package.json') form rather than as resolved filesystem paths.

Post-install edits you may need

The published patch ships only the portable preset declaration. Two things that were local to the machine this fork came from are deliberately not shipped, so you may want to re-add them yourself:

  1. Making omo-fork-chs your default preset. The published patch does not set a default preset, and this package never forces one. If you want this preset to be the default, set the registry row yourself in your own profile or overlay patch:

    - id: agent-preset-registry
      config:
        default: omo-fork-chs
    

    (@deepseek-ai/dsh-web-app inserts that row with default: standard; the row above replaces the whole config, so only the default changes.)

  2. Giving subagent_multimodal_looker a model route. The bundle this fork was derived from carried a machine-specific provider and model route for that row, and that route is not portable, so the published patch carries no agentOptions row at all. Without one the multimodal subagent inherits the deployment's route. To pin one, add an agentOptions block to that row in your own overlay:

    - id: tool-subagent-multimodal-looker
      name: '@deepseek-ai/dsh-tool-subagent'
      config:
        # ...the shipped config...
        agentOptions:
          provider: 
          model: 
    

Failure mode: it fails loud on purpose

plan-aware-persona.mjs reads its persona prose from disk at mount time. A missing or empty persona file fails the mount, naming the file in the error:

plan-aware-persona: cannot read persona "file:///.../personas/atlas.md"
plan-aware-persona: persona "file:///.../personas/atlas.md" is empty

That is deliberate. An empty persona prefix would silently strip the agent's identity, so a mount error that names the file is far easier to act on than an agent that quietly lost its instructions.

Peer model

Every @deepseek-ai/* package the patch mounts is declared as a peerDependency, never as a regular dependency. DSH provides them; the bundle must not install its own copies. Peer ranges are pinned as `>=0.1.7-rc.2 " npm run check:full

4. Regenerate the frozen baseline from the published patch and check it.

npm run baseline npm run baseline -- --check

5. Re-port the published patch from a source patch directory.

npm run port -- --src


What each one proves:

- **`npm run test`** runs the `node:test` suite: the three forward rewrites, the inverse rewrites
  and their round trip, the argument parsers, the machine-path pattern from both sides, the
  zero-byte guard, and the package check's negative paths. It is 55 tests and it needs nothing
  installed.
- **`npm run check`** is `node tools/check-package.mjs && node tools/verify-patch.mjs`. The first
  runs 19 structural and license assertions (manifest identity, the four `exports`, the single
  self-reference row, the nine persona anchors and their files, the `files[]` coverage, the eleven
  persona byte counts, the license pointers, the three license documents, the paths that must never
  ship, the untracked-file check over every directory `files[]` lists and the untracked root files
  npm auto-includes, the upstream fingerprint
  when one is supplied, the modification-notice claims, the license scope mapping and the per-entry
  anchors
  that pin each scope block to the content it claims, the machine-path
  scan and the classes that govern where the pre-port package name may appear, and the patch's
  shape). The second proves the published patch
  still equals what the three documented rewrites compute from the frozen baseline, and reports
  `verdict: "IDENTICAL"` with 11 rewrite sites. Both are **zero-dependency**, so they pass in a
  clean clone with no install.
- **`npm run check:full`** is `node tools/verify-patch.mjs` on its own. With `DSH_RUNTIME` pointing
  at an absolute `node_modules` that holds `js-yaml` and `@deepseek-ai/cordis-plugin-include`, the
  verifier parses both documents with the real entry-list dialect and compares them structurally,
  reporting `yamlCompare: "ok"` and `sites.length` of 11. **Without a runtime it reports
  `yamlCompare: "skipped"` and still exits 0**, which is why the exit code alone is not evidence
  here: assert on the field. That is also why this step is separate from `check`, and why
  `npm run setup:verify` exists: it installs the runtime into `.dsh-verify/` without adding a
  dependency to this package. The tool reads `DSH_RUNTIME` itself rather than taking a `--runtime`
  flag, because Windows npm runs scripts through `cmd.exe` and POSIX shells expand variables
  differently, so one script string would behave differently on the two platforms.
- **`npm run baseline`** re-derives `baseline/cordis.patch.yml` from the published patch by
  applying the inverse of the three rewrites, and `-- --check` compares the committed baseline
  against a freshly derived copy, printing the differing lines and exiting non-zero on drift.
- **`npm run port -- --src `** applies the three rewrites to the `cordis.patch.yml` in ``
  and writes the result. `--src` has **no default**, because the only honest default would be a
  machine-local directory; the error message names the baseline directory as the alternative
  source, and `npm run port -- --src baseline` reproduces the committed patch byte for byte.

> **`npm run check` and `npm test` must run inside a git checkout.** Three of the package check's
> assertions (the license scope
> mapping, the machine-path scan, and the classes that govern where the pre-port package name may
> appear) are defined over the set of **tracked**
> files, so the tool asks `git ls-files` for that set. If git cannot answer, the tool fails with
> `run inside a git checkout` rather than silently skipping those three. `npm test` needs the same
> checkout for the same reason: its last case runs the package check against the real tree, so
> unpacking the tarball outside a repository fails there too. A consumer who unpacks the
> published tarball outside a repository will therefore see that error, and it is deliberate: a
> mapping check that reports success for work it never did is worse than no check at all. The
> published package includes the tools and the test suite so the chain can be re-run from a clone.

## License

This repository is **dual-licensed**, and the two licenses are not alternatives you may choose
between: each file is covered by exactly one of them. It is **not** MIT-only.

The scope mapping, matching the two blocks in [`NOTICE.md`](https://github.com/Tacrine/oh-my-dsh-omo-fork-chs/blob/ab041f51bf755f1d1788eafc33cf381939f056ea/NOTICE.md):

- [`LICENSE-SUL-1.0.md`](https://github.com/Tacrine/oh-my-dsh-omo-fork-chs/blob/ab041f51bf755f1d1788eafc33cf381939f056ea/LICENSE-SUL-1.0.md) covers the upstream-derived content:
  `personas/`, `cordis.patch.yml`, `plan-aware-persona.mjs`, `index.js` and
  `baseline/cordis.patch.yml`.
- [`LICENSE-MIT.md`](https://github.com/Tacrine/oh-my-dsh-omo-fork-chs/blob/ab041f51bf755f1d1788eafc33cf381939f056ea/LICENSE-MIT.md) covers our own work: `tools/`, `test/`, `.github/`,
  `baseline/README.md`, `package.json`, `.gitignore`, `.gitattributes`, `README.md`, `README.zh.md`,
  `CHANGELOG.md`
  and `NOTICE.md`.
- [`NOTICE.md`](https://github.com/Tacrine/oh-my-dsh-omo-fork-chs/blob/ab041f51bf755f1d1788eafc33cf381939f056ea/NOTICE.md) is the authoritative declaration: the modification notice, the upstream
  attribution, and the machine-readable scope mapping, including the match rule that decides which
  block covers each tracked path. In any disagreement between this README and `NOTICE.md`, the
  notice wins.

The upstream terms are the **Sustainable Use License 1.0**, held verbatim in
[`LICENSE-SUL-1.0.md`](https://github.com/Tacrine/oh-my-dsh-omo-fork-chs/blob/ab041f51bf755f1d1788eafc33cf381939f056ea/LICENSE-SUL-1.0.md). SUL-1.0 is a **source-available** license. It is
**not** an OSI-approved open source license, and this repository does not claim otherwise.

The upstream terms permit use, copying, distribution and derivative works only for your own
internal business purposes, or for non-commercial or personal use, and they permit distribution
only if you do so **free of charge** and for **non-commercial** purposes. This package is
distributed under exactly those terms: free of charge, non-commercial, and not for resale. The
upstream license is **not sublicensable**, which is why the MIT license covering our own files
cannot be extended over the upstream-derived ones, and why `LICENSE-SUL-1.0.md` must travel with
every copy.

One carve-out applies to the MIT scope: the files under `tools/` and `test/` are our own work and
are licensed under MIT, but they embed verbatim fragments of the upstream bundle patch expressions,
quoted so that the patch can be generated and verified. Those **quoted fragments** remain subject to
the upstream SUL-1.0 terms and are not relicensed by the MIT license that covers the surrounding
code. The same carve-out is stated in `NOTICE.md`, and the two documents agree.

This repository is an **unofficial fork**. It is **not affiliated** with, endorsed by, or sponsored
by the upstream project or its author, and nothing here implies any affiliation or endorsement.
Upstream names and trademarks belong to their owner