Two had real security consequences: The bootstrap rejection ran on npm dotenv's parser while process.loadEnvFile applied the file with Node's own. Two independently maintained dialects meant the check and the thing it guards could disagree: a name Node accepts but the checker misses would reach process.env unchecked, and BASH_ENV there runs a file of the project's choosing on every `bash -c` the bash tool issues. Parse once with node:util's parseEnv — the same engine loadEnvFile uses — and assign the entries already checked, which also drops the dotenv dependency. llm-pi-ai still returned a literal profile.apiKey ahead of everything, and it registers a settings namespace, so the defect removed from llm-deepseek survived intact in its design twin. The field is gone from the profile schema, the resolution path, and the tests. The rest are consistency and documentation defects the review named: - verify-config-source-ownership did not scan the Python runtime's bundled cordis.yml, which still inlined apiKey and baseURL. Both are covered now, and the line-anchored INLINE_DENY documents that it is a tripwire, not a parser. - The deny list missed NODE_TLS_REJECT_UNAUTHORIZED, the askpass hooks, the GIT_CONFIG_* redirections, and PYTHONHOME — all implied by its own stated rule about what a variable does. - Snapshot lookups folded case on Windows, where environment names are case-insensitive and an exact-match Map could miss a higher-ranked layer. - The credentials note claimed a read-time permission check was "not taken" while this PR implemented it; the credentials-local README still described two layers, live process.env reads, dotenv-era limitations, and a renamed anchor; the llm-deepseek README still advertised the removed literal apiKey; and web.ts and base.cordis.yml kept personal-overlay wording. - The ownership note's literal-apiKey claim now names its scope: the web-search providers keep a literal field but register no settings namespace, so nothing can shadow a stored credential through them.
12 KiB
Third-Party Notices
DeepSeek Harness is licensed under BSD 3-Clause. It depends on the third-party open-source software listed below. Each project remains under its own license; nothing in this file changes those terms.
This file lists direct dependencies declared by the workspace. It is generated from the workspace manifests by scripts/gen-third-party-notices.ts: a pre-commit hook regenerates it whenever a staged file changes one of its inputs, and scripts/gen-third-party-notices.spec.ts asserts in the test lane that the committed bytes match. Deleting a manifest runs no hook, so that case is caught by the assertion instead. Run pnpm run verify-third-party-notices for the standalone check.
The complete npm transitive closure, with exact pinned versions, is recorded in pnpm-lock.yaml — inspect it with pnpm licenses list. The Python closure is recorded in python/sdk/uv.lock, and the Landlock launcher workspace keeps its own in native/landlock-run/pnpm-lock.yaml.
Vendored source (vendor/)
The Cordis framework and its foundation libraries are source-vendored into this repository rather than consumed from npm. All are MIT-licensed; each directory preserves its upstream LICENSE file. Exact upstream commits and local modifications are recorded in vendor/README.md.
| Package | Upstream | License |
|---|---|---|
cosmokit |
github.com/deepseek-harness/cosmokit | MIT |
schemastery |
github.com/deepseek-harness/schemastery | MIT |
cordis |
github.com/cordiverse/cordis | MIT |
@cordisjs/plugin-loader |
github.com/cordiverse/cordis | MIT |
@cordisjs/plugin-include |
github.com/deepseek-harness/cordis | MIT |
@cordisjs/plugin-group |
github.com/deepseek-harness/cordis | MIT |
@cordisjs/plugin-timer |
github.com/deepseek-harness/cordis | MIT |
@cordisjs/plugin-hmr |
github.com/deepseek-harness/cordis | MIT |
@cordisjs/plugin-logger-console |
github.com/deepseek-harness/cordis | MIT |
Runtime npm dependencies
External packages that a workspace package resolves at runtime. scripts/install.sh installs this repository itself, so the tier covers every plugin a user can mount from cordis.yml — not only what the dsh CLI/TUI, the Web UI, and the Python SDK runtime load by default.
pnpm applies local patches to the following packages at install time, so shipped artifacts carry modified copies; each patch file is the complete record of the modification:
node-pty@1.1.0—patches/node-pty@1.1.0.patch
Development-only npm dependencies
External packages directly declared only by repository tooling, test infrastructure, the documentation site, the demo leaves, or the native launcher's build workspace. No shipped surface names them itself. A package here may still be pulled in transitively by a runtime dependency — pnpm-lock.yaml is the authority on the full closure — so this tier records who declares a package, not what a build ultimately bundles.
eslint-plugin-sonarjs (LGPL-3.0-only) and lightningcss (MPL-2.0) run only as development tooling; their code is not linked into or distributed with any DeepSeek Harness artifact.
Python SDK dependencies (python/)
Direct dependencies of the pyproject.toml manifests, plus uv as the development workflow tool.
| Package | License | Role |
|---|---|---|
hatchling |
MIT | build backend |
pydantic |
MIT | runtime dependency of deepseek-harness |
pytest |
MIT | test-only |
uv |
MIT / Apache-2.0 | development workflow tool |
Fetched at build time
| Package | License | Role |
|---|---|---|
@yao-pkg/pkg |
MIT | invoked by scripts/build-exe-for-python-sdk.ts to assemble the single-file SDK runtime executable |
First-party sibling releases
node-addon-landlock-run (and its platform packages) is released from a DeepSeek Harness sibling repository under BSD 3-Clause. It is listed here for completeness; it is first-party, not third-party.