@crowdedkingdoms/crowdy-dsh 0.2.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +175 -0
  3. package/dist/dsh-web/BUILD.json +118 -0
  4. package/dist/dsh-web/LICENSE.deepseek-harness +21 -0
  5. package/dist/dsh-web/THIRD_PARTY_NOTICES.md +226 -0
  6. package/dist/dsh-web/assets/client-Dbm2RGSD.js +159 -0
  7. package/dist/dsh-web/assets/fonts/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  8. package/dist/dsh-web/assets/fonts/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  9. package/dist/dsh-web/assets/fonts/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  10. package/dist/dsh-web/assets/fonts/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  11. package/dist/dsh-web/assets/fonts/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  12. package/dist/dsh-web/assets/fonts/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  13. package/dist/dsh-web/assets/fonts/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  14. package/dist/dsh-web/assets/fonts/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  15. package/dist/dsh-web/assets/fonts/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  16. package/dist/dsh-web/assets/fonts/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  17. package/dist/dsh-web/assets/fonts/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  18. package/dist/dsh-web/assets/fonts/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  19. package/dist/dsh-web/assets/fonts/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  20. package/dist/dsh-web/assets/fonts/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  21. package/dist/dsh-web/assets/fonts/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  22. package/dist/dsh-web/assets/fonts/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  23. package/dist/dsh-web/assets/fonts/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  24. package/dist/dsh-web/assets/fonts/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  25. package/dist/dsh-web/assets/fonts/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  26. package/dist/dsh-web/assets/fonts/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  27. package/dist/dsh-web/assets/fonts/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  28. package/dist/dsh-web/assets/fonts/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  29. package/dist/dsh-web/assets/fonts/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  30. package/dist/dsh-web/assets/fonts/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  31. package/dist/dsh-web/assets/fonts/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  32. package/dist/dsh-web/assets/fonts/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  33. package/dist/dsh-web/assets/fonts/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  34. package/dist/dsh-web/assets/fonts/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  35. package/dist/dsh-web/assets/fonts/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  36. package/dist/dsh-web/assets/fonts/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  37. package/dist/dsh-web/assets/fonts/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  38. package/dist/dsh-web/assets/fonts/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  39. package/dist/dsh-web/assets/fonts/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  40. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  41. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  42. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  43. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  44. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  45. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  46. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  47. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  48. package/dist/dsh-web/assets/fonts/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  49. package/dist/dsh-web/assets/fonts/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  50. package/dist/dsh-web/assets/fonts/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  51. package/dist/dsh-web/assets/fonts/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  52. package/dist/dsh-web/assets/fonts/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  53. package/dist/dsh-web/assets/fonts/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  54. package/dist/dsh-web/assets/fonts/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  55. package/dist/dsh-web/assets/fonts/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  56. package/dist/dsh-web/assets/fonts/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  57. package/dist/dsh-web/assets/fonts/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  58. package/dist/dsh-web/assets/fonts/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  59. package/dist/dsh-web/assets/fonts/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  60. package/dist/dsh-web/assets/fonts/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  61. package/dist/dsh-web/assets/fonts/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  62. package/dist/dsh-web/assets/fonts/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  63. package/dist/dsh-web/assets/fonts/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  64. package/dist/dsh-web/assets/fonts/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  65. package/dist/dsh-web/assets/fonts/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  66. package/dist/dsh-web/assets/index-BKQ_L1z6.js +117 -0
  67. package/dist/dsh-web/assets/index-DPX2bQLO.css +1 -0
  68. package/dist/dsh-web/assets/langs/c-BIGW1oBm.js +2 -0
  69. package/dist/dsh-web/assets/langs/cpp-DIPi6g--.js +2 -0
  70. package/dist/dsh-web/assets/langs/csharp-DSvCPggb.js +2 -0
  71. package/dist/dsh-web/assets/langs/css-CLj8gQPS.js +2 -0
  72. package/dist/dsh-web/assets/langs/go-C27-OAKa.js +2 -0
  73. package/dist/dsh-web/assets/langs/html-CfGypltT.js +2 -0
  74. package/dist/dsh-web/assets/langs/ini-BEwlwnbL.js +2 -0
  75. package/dist/dsh-web/assets/langs/java-CylS5w8V.js +2 -0
  76. package/dist/dsh-web/assets/langs/kotlin-BdnUsdx6.js +2 -0
  77. package/dist/dsh-web/assets/langs/less-B1dDrJ26.js +2 -0
  78. package/dist/dsh-web/assets/langs/lua-BaeVxFsk.js +2 -0
  79. package/dist/dsh-web/assets/langs/markdown-Cvjx9yec.js +2 -0
  80. package/dist/dsh-web/assets/langs/mdx-Cmh6b_Ma.js +2 -0
  81. package/dist/dsh-web/assets/langs/php-DJl5gRdb.js +2 -0
  82. package/dist/dsh-web/assets/langs/python-B6aJPvgy.js +2 -0
  83. package/dist/dsh-web/assets/langs/ruby-5eNB0pDK.js +2 -0
  84. package/dist/dsh-web/assets/langs/rust-B1yitclQ.js +2 -0
  85. package/dist/dsh-web/assets/langs/scss-D5BDwBP9.js +2 -0
  86. package/dist/dsh-web/assets/langs/sql-CRqJ_cUM.js +2 -0
  87. package/dist/dsh-web/assets/langs/swift-D82vCrfD.js +2 -0
  88. package/dist/dsh-web/assets/langs/toml-vGWfd6FD.js +2 -0
  89. package/dist/dsh-web/assets/langs/xml-sdJ4AIDG.js +2 -0
  90. package/dist/dsh-web/assets/langs/yaml-Buea-lGh.js +2 -0
  91. package/dist/dsh-web/assets/vendor-BNsW4eBh.css +1 -0
  92. package/dist/dsh-web/assets/vendor-CCJJTK99.js +411 -0
  93. package/dist/dsh-web/crowdy.html +17 -0
  94. package/dist/dsh-web/favicon.svg +8 -0
  95. package/dist/dsh-web/index.html +17 -0
  96. package/dist/dsh-web/manifest.webmanifest +16 -0
  97. package/dist/dsh-web/preview/bootstrap-CYECZNXt.js +2 -0
  98. package/dist/dsh-web/preview/crowdy-boot-D0e56jZN.js +2 -0
  99. package/dist/dsh-web/preview/vfs-image.tar.gz +0 -0
  100. package/dist/dsh-web/preview/worker-C8-_ANaz.js +109 -0
  101. package/package.json +101 -0
  102. package/presets/crowdy/agent.cordis.yml +140 -0
  103. package/presets/crowdy/preset.yml +3 -0
  104. package/profile/crowdy-node.patch.yml +34 -0
  105. package/profile/crowdy-web.patch.yml +97 -0
  106. package/upstream.json +7 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CrowdedKingdoms
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,175 @@
1
+ # `@crowdedkingdoms/crowdy-dsh`
2
+
3
+ [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (`dsh`)
4
+ plugins whose filesystem is a **Crowdy Studio project**, plus the build that
5
+ packs them — with the stock harness web UI — into a static artifact that runs
6
+ **entirely in the player's browser**. Crowdy Studio embeds that artifact as the
7
+ agent pane; the harness edits the project through the game API exactly as the
8
+ Studio editor does, and calls the model through the tier's metered model
9
+ endpoint with the player's own app token.
10
+
11
+ Replaces the Crowdy Agent orchestrator in the CK API and the CrowdyJS agent
12
+ dock (CrowdyJS 16). The page side of the bridge lives in CrowdyJS
13
+ (`@crowdedkingdoms/crowdyjs/crowdy-dsh`); [`src/bridge/protocol.ts`](src/bridge/protocol.ts)
14
+ and its CrowdyJS mirror must stay in step.
15
+
16
+ ## How it fits together
17
+
18
+ ```text
19
+ game page (the-construct) iframe /dsh/index.html Web Worker
20
+ ┌──────────────────────────┐ postMessage ┌──────────────────┐ tunnel ┌─────────────────────────┐
21
+ │ CrowdyJS Studio panel │ ─────────────► │ crowdy-boot.ts │ ────────► │ dsh plugin tree │
22
+ │ DshPane + bridge (page) │ boot files │ + stock web UI │ │ crowdy-fs (ctx.fs) │
23
+ │ screenshots, draft test │ ◄──────────── │ │ │ crowdy-bridge │
24
+ │ game observe, projects │ BroadcastChannel ────────────────────────────►│ crowdy-tools, search │
25
+ └──────────────────────────┘ └──────────────────┘ │ attachment-crowdy │
26
+ │ fetch (app token) │ crowdy-persist (OPFS) │
27
+ ▼ └──────────┬──────────────┘
28
+ ck-api: crowdyStudio* / crowdyStudioGitHub* ◄───────────────────────────────────┘ fetch (app token)
29
+ ck-api: POST /v1/model/chat/completions (metered, fronts OpenRouter) ◄──────────┘
30
+ ```
31
+
32
+ | Seam | Stock | Here |
33
+ |---|---|---|
34
+ | `ctx.fs` | `dsh-fs-sandbox` over the local disk | [`./fs`](src/fs/crowdy-file-system.ts): the project. GitHub-bound projects read/write the bound repository (SHA-guarded) and mirror to Studio; unbound projects use Studio files (`expectedRevision`). `captures/` and `context/` are in-memory scratch dirs the page fills. |
35
+ | `ctx.attachments` | `dsh-attachment-local` (sharp) | [`./attachments`](src/attachments/crowdy-attachment-store.ts): in-memory, header-sniffed dimensions; the browser worker has no native image codec. |
36
+ | agent preset | `standard` | [`presets/crowdy`](presets/crowdy/agent.cordis.yml): file tools, in-memory `glob`/`grep`, `sdk_lookup`, and the Studio tools below. No shell, no web, no subagents. |
37
+ | page link | — | [`./bridge`](src/bridge/index.ts): `ctx.crowdyBridge`, a `BroadcastChannel` to the Studio page ([protocol](src/bridge/protocol.ts)). |
38
+ | tools | — | [`./tools`](src/tools/index.ts): `draft_test`, `deploy_live` (approval-gated), `screenshot`, `runtime_status`, `client_logs`, `game_observe`, `project_list/open/create`. The page executes them with the player's authority. |
39
+ | model route | pi-ai | `llm-deepseek` (direct fetch; pi-ai is a stub in the worker) pointed at the tier model endpoint via `settings.yaml`. |
40
+ | persistence | disk | [`./persist`](src/persist/index.ts): mirrors `home/sessions`, `home/storages`, `settings.yaml` to OPFS; the page restores them as a boot overlay. |
41
+
42
+ ## Boot contract (what the embedding page provides)
43
+
44
+ The iframe posts `{type:'crowdy-dsh:ready'}`; the page answers with:
45
+
46
+ ```ts
47
+ iframe.contentWindow.postMessage({
48
+ type: 'crowdy-dsh:boot',
49
+ files: {
50
+ 'crowdy.json': JSON.stringify({ graphqlUrl, appId, projectId, bridgeChannel, bridgeNonce, githubFirst: true, root: '/dsh/workspace', persistScope }),
51
+ 'settings.yaml': `llm-deepseek:\n apiKeyEnv: CROWDY_APP_TOKEN\n baseURL: ${modelBaseUrl}\n thinking: disabled\n models: [...]\nagent-default-model:\n provider: deepseek-official\n model: ${defaultModel}\n`,
52
+ },
53
+ nonce: bridgeNonce, // one-time secret; every bridge frame carries it
54
+ persistScope, // OPFS directory, e.g. `${appId}/${userId}`
55
+ mount: '/dsh/workspace',
56
+ }, location.origin)
57
+ ```
58
+
59
+ then joins `new BroadcastChannel(bridgeChannel)` as the `page` side and answers
60
+ the requests in [`protocol.ts`](src/bridge/protocol.ts). The app token is NOT
61
+ in the seed files: the page sends it in `page.hello` and again in `page.token`
62
+ when it refreshes, the worker holds it in memory as `CROWDY_APP_TOKEN` (which
63
+ the model route reads per request), and the first project load waits up to 5 s
64
+ for it. Nothing writes it to the virtual filesystem or OPFS, and the Crowdy
65
+ filesystem backend serves only the project mount, so `read_file` cannot reach
66
+ the environment. `page.project` switches projects, `page.saved` invalidates
67
+ cached files. Both sides drop frames without the boot nonce: a
68
+ `BroadcastChannel` is reachable by every same-origin script. CrowdyJS
69
+ implements the page side in `src/crowdy-dsh/`; it also confirms a live deploy
70
+ with the player on the page before running it.
71
+
72
+ Headers the host must send (verified with `crossOriginIsolated === true`):
73
+ game page CSP unchanged except `frame-src 'self'`; every `/dsh/*` response
74
+ carries `script-src 'self' 'unsafe-eval' 'unsafe-inline' blob:`,
75
+ `connect-src 'self' blob:`, `worker-src 'self' blob:`, `frame-ancestors 'self'`
76
+ (the worker compiles pre-lowered module bodies with `new Function`; the harness
77
+ document runs its own client module system). The API and model endpoints must
78
+ be same-origin or in `connect-src`.
79
+
80
+ ## Building the artifact
81
+
82
+ Requires Node **22.19+** and pnpm (corepack). The upstream DeepSeek Harness is a
83
+ **sibling checkout** at the tag pinned in [`upstream.json`](upstream.json)
84
+ (`dsh-v0.1.5-rc.2`), not a submodule; this repo carries none.
85
+
86
+ ```bash
87
+ nvm use 22
88
+ bash scripts/checkout-upstream.sh # clones ../deepseek-harness at the pin, or verifies it
89
+ bash scripts/build-image.sh # ~6 min first time (builds upstream), then ~30 s
90
+ # SKIP_UPSTREAM=1 to reuse a built upstream; UPSTREAM_DIR=... to point elsewhere
91
+ # CROWDYJS_DIST=../CrowdyJS/dist to bundle a local, not-yet-published SDK
92
+ ```
93
+
94
+ CI does the same when the declared `@crowdedkingdoms/crowdyjs` pin is not on
95
+ the registry yet: it builds the SDK from the branch named by
96
+ `crowdyDsh.sdkSourceBranch` in `package.json` (falling back to a CrowdyJS
97
+ branch of the same name, then the target branch, then `dev`) and bundles that.
98
+ `build-image.sh` refuses a local SDK whose version differs from the pin
99
+ (prerelease suffix aside; `CROWDYJS_ALLOW_MISMATCH=1` for a local experiment).
100
+ Once the pin publishes, the hint is inert; drop it with the next SDK bump.
101
+
102
+ `dist/dsh-web/` is the artifact: `index.html` (the stock web client plus
103
+ `web/crowdy-boot.ts`), `assets/`, `preview/` (worker bundle + the packed
104
+ `vfs-image.tar.gz`, ~7 MB), `BUILD.json` (package version, this repo's commit,
105
+ upstream tag and commit, the CrowdyJS the worker bundles, sha256 of every file),
106
+ `LICENSE.deepseek-harness` and `THIRD_PARTY_NOTICES.md`. Serve it under
107
+ `/dsh/` of the game origin.
108
+
109
+ The build refuses an artifact that names the builder's home directory or the
110
+ upstream checkout path (`//#region` markers and `patched by` comments are
111
+ rewritten to `<upstream>`), a tier API host (the bundled SDK slice replaces the
112
+ generated `default-origin` with empty origins; the page always supplies
113
+ `graphqlUrl`), or the DeepSeek telemetry collector (the plugin is disabled in
114
+ the profile). Source maps are not shipped.
115
+
116
+ What the script does: copies this package into `<upstream>/packages/crowdy/`,
117
+ copies `presets/crowdy` into the shipped preset root, `pnpm install`, builds
118
+ and runs the tests, bundles the CrowdyJS slice
119
+ ([`scripts/bundle-sdk.mjs`](scripts/bundle-sdk.mjs) — the package root would
120
+ drag Monaco and tree-sitter into the image), builds the page with
121
+ [`web/vite.crowdy.config.ts`](web/vite.crowdy.config.ts), packs `web` +
122
+ [`profile/crowdy-web.patch.yml`](profile/crowdy-web.patch.yml) with
123
+ [`scripts/pack-image.ts`](scripts/pack-image.ts), then scrubs, checks and stamps
124
+ with [`scripts/finish-artifact.mjs`](scripts/finish-artifact.mjs) and stages
125
+ the npm package in `dist/npm/` with [`scripts/stage-npm.mjs`](scripts/stage-npm.mjs).
126
+
127
+ ## Shipping it
128
+
129
+ `@crowdedkingdoms/crowdy-dsh` is published to npm by
130
+ [`.github/workflows/publish.yml`](.github/workflows/publish.yml) on an
131
+ environment-prefixed tag on one of the three long-lived branches, the
132
+ CrowdyJS convention: `dev/v0.2.0` publishes `0.2.0-dev.N` under `@dev`,
133
+ `test/v0.2.0` publishes `0.2.0-test.N` under `@test`, `prod/v0.2.0` publishes
134
+ `0.2.0` under `@latest`. The `guard` job refuses a tag whose commit is not on
135
+ the branch the prefix names (`scripts/ci/resolve-release-tier.sh`). Publishing
136
+ uses npm Trusted Publishing (OIDC) with provenance; there is no token. Every
137
+ push and pull request builds and tests ([`ci.yml`](.github/workflows/ci.yml));
138
+ only a tag publishes. The published
139
+ manifest has no runtime dependencies (the `@deepseek-ai` workspace siblings
140
+ become optional peers) because a game installs it for `dist/dsh-web/` alone:
141
+
142
+ ```bash
143
+ npm i -D @crowdedkingdoms/crowdy-dsh@dev
144
+ # prebuild: copy node_modules/@crowdedkingdoms/crowdy-dsh/dist/dsh-web -> public/dsh (gitignored)
145
+ ```
146
+
147
+ The CrowdyJS major the worker bundles must match the one the page runs;
148
+ `bundle-sdk.mjs` refuses otherwise. Bump the `@crowdedkingdoms/crowdyjs`
149
+ devDependency together with the game pins.
150
+
151
+ ## Developing
152
+
153
+ Inside the upstream workspace (after one `build-image.sh`):
154
+
155
+ ```bash
156
+ cd ../deepseek-harness/packages/crowdy/crowdy-dsh
157
+ pnpm run build && pnpm run test # node:test, 82 tests: fs semantics, GitHub store, bridge, attachments, search
158
+ ```
159
+
160
+ Developer cockpit on Node (no browser, no page tools):
161
+
162
+ ```bash
163
+ cp .env.example .env && set -a && . ./.env && set +a
164
+ node lib/scripts/probe.js # connectivity: store choice, files, guarded write with --write
165
+ dsh --profile web --patch ./profile/crowdy-node.patch.yml
166
+ ```
167
+
168
+ ## Known limitations
169
+
170
+ - Experimental upstream packages (`webworker-runtime`, `webworker-packer`) are
171
+ private and may change; the tag is pinned and the build fails loud.
172
+ - Attachments are in memory: a reload keeps the session text but not the pixels.
173
+ - GitHub-bound projects cannot delete files from here (the Contents API path
174
+ is not wrapped); the Studio panel or GitHub can.
175
+ - The developer cockpit needs a real, empty mount directory (`CROWDY_MOUNT`).
@@ -0,0 +1,118 @@
1
+ {
2
+ "package": "@crowdedkingdoms/crowdy-dsh",
3
+ "version": "0.2.0",
4
+ "builtAt": "2026-09-12T12:57:06.868Z",
5
+ "source": {
6
+ "repository": "CrowdedKingdoms/crowdy-dsh",
7
+ "commit": "8d2c72733bb269e518515d6df0997d618c6f8457",
8
+ "dirty": false
9
+ },
10
+ "upstream": {
11
+ "repository": "https://github.com/deepseek-ai/deepseek-harness.git",
12
+ "tag": "dsh-v0.1.5-rc.2",
13
+ "commit": "fb2c4b9e698e30edb738bca4cf0618587db7d203",
14
+ "license": "MIT"
15
+ },
16
+ "crowdyjs": {
17
+ "name": "@crowdedkingdoms/crowdyjs",
18
+ "version": "16.0.0",
19
+ "source": "CROWDYJS_DIST"
20
+ },
21
+ "files": {
22
+ "assets/client-Dbm2RGSD.js": "sha256:61fac496cef7bb89d3ac9d248943a7789c7ddfedc76c242aa635620b8ae80047",
23
+ "assets/fonts/KaTeX_AMS-Regular-BQhdFMY1.woff2": "sha256:0cdd387c9590a1a9f9794560022dbb59654a7d86f187aa0c81495ad42d3a7308",
24
+ "assets/fonts/KaTeX_AMS-Regular-DMm9YOAa.woff": "sha256:30da91e84c893f875e252689faebdc590b2871145e8adc7f9a9d4dbd8ce0b251",
25
+ "assets/fonts/KaTeX_AMS-Regular-DRggAlZN.ttf": "sha256:68534840bcfdd2bffb6f0e8deb48684dd01e7f04ea2813267577afb906de1d13",
26
+ "assets/fonts/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf": "sha256:07d8e303ce4fc12b4bb54f1004170dd190a1f3db45d400fe68060df3e0897268",
27
+ "assets/fonts/KaTeX_Caligraphic-Bold-BEiXGLvX.woff": "sha256:1ae6bd7475590e97e7f145a89e09ccde322f7a6bc0b91607b1c8b8ee28290fed",
28
+ "assets/fonts/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2": "sha256:de7701e42cf1f4cf0b766c03fb27977207eee2f4fd5d76fa82188406da43ea4c",
29
+ "assets/fonts/KaTeX_Caligraphic-Regular-CTRA-rTL.woff": "sha256:3398dd02302557a793f2863f88e02d96ce10df2abffa07c8e9fa90775116e65c",
30
+ "assets/fonts/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2": "sha256:5d53e70ad607c2352162dec9e0923fb54ecdafaccbf604cd8dcf7d00facb989b",
31
+ "assets/fonts/KaTeX_Caligraphic-Regular-wX97UBjC.ttf": "sha256:ed0b74372feefcbb9c0666b2e210da37b7e49fa7fbbf3eeb11db5f693dacfbb7",
32
+ "assets/fonts/KaTeX_Fraktur-Bold-BdnERNNW.ttf": "sha256:9163df9c7122432e6495b4229fa9071cf9ae86a758ae5efc4924ec2e1a6dbce1",
33
+ "assets/fonts/KaTeX_Fraktur-Bold-BsDP51OF.woff": "sha256:9be7ceb88004ab8ad124082246fbfcca4091e36385d4ec6ed1df67375dad50fb",
34
+ "assets/fonts/KaTeX_Fraktur-Bold-CL6g_b3V.woff2": "sha256:74444efd593c005e3f4573b44524704c0af0a937fe911cca9e94068d0d140d3f",
35
+ "assets/fonts/KaTeX_Fraktur-Regular-CB_wures.ttf": "sha256:1e6f9579e90e2cac37f8f60a597c436e075c114385652b7cbeb0dec0421291b3",
36
+ "assets/fonts/KaTeX_Fraktur-Regular-CTYiF6lA.woff2": "sha256:51814d270d06ff0255dba0799994fa4d8c84d11f09951d47595f4abb1f3602dc",
37
+ "assets/fonts/KaTeX_Fraktur-Regular-Dxdc4cR9.woff": "sha256:5e28753be717dac97f559f49bc10be9cf3c124ddcabda6659d11cb68febc6463",
38
+ "assets/fonts/KaTeX_Main-Bold-Cx986IdX.woff2": "sha256:0f60d1b897938ec918c8ce073092411baf9438f6739465693ff18b0f9d20b021",
39
+ "assets/fonts/KaTeX_Main-Bold-Jm3AIy58.woff": "sha256:c76c5d696297d51b9cb1639c7da4334f0e7dec81b42b11213b5e25ef671bb822",
40
+ "assets/fonts/KaTeX_Main-Bold-waoOVXN0.ttf": "sha256:138ac28d1663b3037e9c5f52371fa5c63d8324f4a38d22cd573e6ea3a3fd0cf8",
41
+ "assets/fonts/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2": "sha256:99cd42a3c072d918f2f44984a807cf7aa16e13545fd0875fc07c6c65f99e715b",
42
+ "assets/fonts/KaTeX_Main-BoldItalic-DzxPMmG6.ttf": "sha256:70ee1f64a20f2048c21940ef46d0144fd215baa953ca69afd1e31e98544f708f",
43
+ "assets/fonts/KaTeX_Main-BoldItalic-SpSLRI95.woff": "sha256:a6f7ec0d846ac7ad975adb8959c37ed49b94acbc4ae436db9ce9e20287e4a64c",
44
+ "assets/fonts/KaTeX_Main-Italic-3WenGoN9.ttf": "sha256:0d85ae7cc30f23790a7f1a58c4a112fdca8aae769b6ba11429af1d98b1b6cb3a",
45
+ "assets/fonts/KaTeX_Main-Italic-BMLOBm91.woff": "sha256:f1d6ef86f3b11a528bd5185199bd2443ecb2b0dead96d88674b5a2c12be24bdf",
46
+ "assets/fonts/KaTeX_Main-Italic-NWA7e6Wa.woff2": "sha256:97479ca6cce906abc961ecac96faa5f9ca2e61b8e7670d475826bcdee9a7c267",
47
+ "assets/fonts/KaTeX_Main-Regular-B22Nviop.woff2": "sha256:c2342cd8b869e01752a9321dc17213fc40d4d04c79688c1d43f2cf316abd7866",
48
+ "assets/fonts/KaTeX_Main-Regular-Dr94JaBh.woff": "sha256:c6368d87e8a1a3a5d337623d83d8dc4b868f242a9ad476237d6f8d1e0f168cdc",
49
+ "assets/fonts/KaTeX_Main-Regular-ypZvNtVU.ttf": "sha256:d0332f52868370fd83ae7fa46470f90c8f2eab2fcf12bc4f88080b340c95a830",
50
+ "assets/fonts/KaTeX_Math-BoldItalic-B3XSjfu4.ttf": "sha256:f9377ab0271cda59af24bcffbd46a4d0c8a3572ffafdbb38de2ad5ea7b0d5ee5",
51
+ "assets/fonts/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2": "sha256:dc47344dbb6cb5b655c8460d561f4df5f501b90c804ad3c6cec65fe322351ab1",
52
+ "assets/fonts/KaTeX_Math-BoldItalic-iY-2wyZ7.woff": "sha256:850c0af5c2238497febaf5e461d880bf458c341f42f4f330f1b1ab5698b1998e",
53
+ "assets/fonts/KaTeX_Math-Italic-DA0__PXp.woff": "sha256:8a8d244581371912b8f3f5a23e2437cb2a59cd9bcaebb0346e722c05737a2571",
54
+ "assets/fonts/KaTeX_Math-Italic-flOr_0UB.ttf": "sha256:08ce98e51b04d58945a301e639e02b6998af29fdfd61a7b8afdd07bbfc479d4a",
55
+ "assets/fonts/KaTeX_Math-Italic-t53AETM-.woff2": "sha256:7af58c5ec8f132a2ddde9027c6d7814decce4d3b822a11192a42a20e2e973264",
56
+ "assets/fonts/KaTeX_SansSerif-Bold-CFMepnvq.ttf": "sha256:1ece03f79f95277d57dc7f6b435a74e1379b0d46104a8530286b60ff49369ea0",
57
+ "assets/fonts/KaTeX_SansSerif-Bold-D1sUS0GD.woff2": "sha256:e99ae51144bf1232efcc1bfe5add36262c6866b0faab24fa75740e1b98577a62",
58
+ "assets/fonts/KaTeX_SansSerif-Bold-DbIhKOiC.woff": "sha256:ece03cfd83e22c212cdef66feb8442d25a083beb988db3f1883f3f9738d750ba",
59
+ "assets/fonts/KaTeX_SansSerif-Italic-C3H0VqGB.woff2": "sha256:00b26ac825e2095056396e0553b8ac26d3f8ad158c3826e28b4c45b385c4714a",
60
+ "assets/fonts/KaTeX_SansSerif-Italic-DN2j7dab.woff": "sha256:91ee67500cc0129aa0ace3ac5c61ff1692102f0f31d02b69347fba35dcb75bf2",
61
+ "assets/fonts/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf": "sha256:3931dd81faed86ba021bb2bbdc36f5bed9a38d6b4f4077aca59b265aa1b02083",
62
+ "assets/fonts/KaTeX_SansSerif-Regular-BNo7hRIc.ttf": "sha256:f36ea897e19f4a2e571d1e900e4e3710e438deb05a842486045ba0a3e616a4ad",
63
+ "assets/fonts/KaTeX_SansSerif-Regular-CS6fqUqJ.woff": "sha256:11e4dc8a6471ff6d6ee561d53d10fde8f7489e798257ff449c5d37c197435605",
64
+ "assets/fonts/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2": "sha256:68e8c73ef42afd3ccec58bf0fba302cce448938e7fc020a5e31f8a952eee1342",
65
+ "assets/fonts/KaTeX_Script-Regular-C5JkGWo-.ttf": "sha256:1c67f068fea8bb09bf099c088b1cf64bd27516a6e07f4684344873564bb66a67",
66
+ "assets/fonts/KaTeX_Script-Regular-D3wIWfF6.woff2": "sha256:036d4e95149b69ff9bcc0cd55771efeb25ffa3947293e69acd78d5ac328c684b",
67
+ "assets/fonts/KaTeX_Script-Regular-D5yQViql.woff": "sha256:d96cdf2b3bdd4d64a8fd5f74a4c467f123a8a73931cd435889f08ffaf9bf947a",
68
+ "assets/fonts/KaTeX_Size1-Regular-C195tn64.woff": "sha256:c943cc986384f59e86bea5fd7dc50a9c4dfe567a7c05eb40d6790720dead97c9",
69
+ "assets/fonts/KaTeX_Size1-Regular-Dbsnue_I.ttf": "sha256:95b6d2f1a50173bfedb8c63e1d1c99b10427d0a4df4201cb44513b226951a22b",
70
+ "assets/fonts/KaTeX_Size1-Regular-mCD8mA8B.woff2": "sha256:6b47c40166b6dbe21a5dfca7718413f2147fd2399be1ba605d8ad39cedf25dfe",
71
+ "assets/fonts/KaTeX_Size2-Regular-B7gKUWhC.ttf": "sha256:a6b2099fb555c60e3a0db3a08842ebf1d732c6eb4e4bf44913613bed4fc4e39b",
72
+ "assets/fonts/KaTeX_Size2-Regular-Dy4dx90m.woff2": "sha256:d04c54219f9eaec6d4d4fd42dfb28785975a4794d6b2fc71e566b9cd6db842dd",
73
+ "assets/fonts/KaTeX_Size2-Regular-oD1tc_U0.woff": "sha256:2014c523c3210bcc166648c4d4cc57f05b747df07a24277bf71c51e67dc79e3d",
74
+ "assets/fonts/KaTeX_Size3-Regular-CTq5MqoE.woff": "sha256:6ab6b62e9b62dae2c00dd90f791bd10950be0ecc3490d7d6045f51c2e8fe0949",
75
+ "assets/fonts/KaTeX_Size3-Regular-DgpXs0kz.ttf": "sha256:500e04d54f0d51666332c9d2089aa803be22aa878eca539e59fa53c6e522b082",
76
+ "assets/fonts/KaTeX_Size4-Regular-BF-4gkZK.woff": "sha256:99f9c6750b489c9462bf04900bd3f939df9b829339daaaaa99ef5495cdddea58",
77
+ "assets/fonts/KaTeX_Size4-Regular-Dl5lxZxV.woff2": "sha256:a4af7d414440a1c1790825cfb700cf9cf43b0f2c4b04f0ebc523011ad9853ec0",
78
+ "assets/fonts/KaTeX_Size4-Regular-DWFBv043.ttf": "sha256:c647367d1dd4e162468717d020e1fc0f1dc5c26ebfdffbe55261713bf88c5877",
79
+ "assets/fonts/KaTeX_Typewriter-Regular-C0xS9mPB.woff": "sha256:e14fed02b1aba7ce9f5afd5844b5d0321b22351febc720e0de8b8723527609f7",
80
+ "assets/fonts/KaTeX_Typewriter-Regular-CO6r4hn1.woff2": "sha256:71d517d67827787cfabdf186914cc3358eda539e37931941f2b2fd4a21f68c0b",
81
+ "assets/fonts/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf": "sha256:f01f3e87d9c6a61c0c081ceb577abd864eb00a612f7ac1620dd6915fad2ef5aa",
82
+ "assets/index-BKQ_L1z6.js": "sha256:ae6b5df63da1ac26890eeb1847272005ab3860048d8fb46de1d08732861703c3",
83
+ "assets/index-DPX2bQLO.css": "sha256:655002ec23f62f51efeed3e3a5fd612ae57f04597de7b00ddfd4c17238749454",
84
+ "assets/langs/c-BIGW1oBm.js": "sha256:9c06263922b97a0e5890b832e23d44f3c0da54430ac6f971aa0ede8f4c2b8b66",
85
+ "assets/langs/cpp-DIPi6g--.js": "sha256:e8e90a01d5632251be2784ecea9b061cf05f962db1c8684a8bae6480eba88823",
86
+ "assets/langs/csharp-DSvCPggb.js": "sha256:8443ef70cc6fec2de601c15c548ab1890e9bbc71a21ba9c216de77481c3cb6d6",
87
+ "assets/langs/css-CLj8gQPS.js": "sha256:69ee0204c2c40a92b8368049da700f0d08d40f5274809cfb624fd09e73eb32ee",
88
+ "assets/langs/go-C27-OAKa.js": "sha256:a6c3f73f1abb778ef3f5e489db1942542dc88ddac5b111ff55813fa1655dd23c",
89
+ "assets/langs/html-CfGypltT.js": "sha256:15ce12410bda36a36fe67290bd2ed65ab32f90c9624554f129632613843e43d0",
90
+ "assets/langs/ini-BEwlwnbL.js": "sha256:d72bde3de42bb1ef3268bd65afedecf54747c208ac24335f7c6b4456924091c1",
91
+ "assets/langs/java-CylS5w8V.js": "sha256:934a0e63cf4cefb991100f15c42fdc60aaee3c7036a7ba6cb10ce5a6322a7ae9",
92
+ "assets/langs/kotlin-BdnUsdx6.js": "sha256:99d81f485d9366a1f3f8c84b0fc5cee69b0d28d6c8f7f1e8dac29e554e80d24f",
93
+ "assets/langs/less-B1dDrJ26.js": "sha256:50c4bace8838379b74e0a22dab369c3cb81b57ba1b5b17ea5af8668f8290e8bf",
94
+ "assets/langs/lua-BaeVxFsk.js": "sha256:b218901041a92a152f51a7f3f74f26120e931e258abb1c73bcee551721015f67",
95
+ "assets/langs/markdown-Cvjx9yec.js": "sha256:d9a83df9f57287a1f3594d5231480ea90a14adf7a8550c7a57930c3cf5b3f47d",
96
+ "assets/langs/mdx-Cmh6b_Ma.js": "sha256:8b88c45af52bcc95513e479bfce5b068d91f60a811acf8bb614bbb071d0e1151",
97
+ "assets/langs/php-DJl5gRdb.js": "sha256:c2f5205e0694b71750105b62bc4cd03699d4e458d2eb7e45a21788687736a986",
98
+ "assets/langs/python-B6aJPvgy.js": "sha256:1c6725168b498ade965cf0d8723c600fc9bf0de74988b6191106b304b571aaae",
99
+ "assets/langs/ruby-5eNB0pDK.js": "sha256:e9e3739ee4458e3f2d7522cf1f64a0e3d103d77b09c6ed500ea0e886a2b0904c",
100
+ "assets/langs/rust-B1yitclQ.js": "sha256:c02d27696b07c37fa2cac9de826a967a30401a33959cd891ebbf11d5bf245ce3",
101
+ "assets/langs/scss-D5BDwBP9.js": "sha256:d873165bb797f0547966aa681ade9af96c06ec17c2b0c12708303d9ace461753",
102
+ "assets/langs/sql-CRqJ_cUM.js": "sha256:60e00dca0f03a580d3717adbb9c730772e750909dc8c78408051091278eda6c0",
103
+ "assets/langs/swift-D82vCrfD.js": "sha256:db1c1476b58bc8b4ed86fe585ad9191fcb55b7ad851144e7d60af1836f49c26a",
104
+ "assets/langs/toml-vGWfd6FD.js": "sha256:aeb916b96e9eb064aa87c8f765abfded0ab0d53aefa3aa9b90cc1af4d1ad75d2",
105
+ "assets/langs/xml-sdJ4AIDG.js": "sha256:d41d94621a62727ad56943d2d7e04e820c2642c3a9c246eb10e7d6e6e89d1fed",
106
+ "assets/langs/yaml-Buea-lGh.js": "sha256:8aad9cddbe3602b06b194e66d021aa63d715df01cf94e8ffcac810e48f0529e3",
107
+ "assets/vendor-BNsW4eBh.css": "sha256:9860041e810431da5a6b83e63f883ab8ff4fc49b4af3fc76681b46f778783a9f",
108
+ "assets/vendor-CCJJTK99.js": "sha256:38f95ea3ff85b49dc4d8f237db208bbaedd2cb8c31611215c246dde41786ff21",
109
+ "crowdy.html": "sha256:e8d7dc25b4f49bcd37ee293317516aa1aa234e64321e824f44f0eca69935acfe",
110
+ "favicon.svg": "sha256:c61a62a9d47d8660f9cfe08aac6775ff0476f7d6c5053f7659c1f8493fd6d814",
111
+ "index.html": "sha256:e8d7dc25b4f49bcd37ee293317516aa1aa234e64321e824f44f0eca69935acfe",
112
+ "manifest.webmanifest": "sha256:9b54d57eea00f2fdd1affe6e7999a4209a515755f12ac1a3299da2d55e178d4c",
113
+ "preview/bootstrap-CYECZNXt.js": "sha256:9f303a0485c0badfdd19fad0c357ef050c5b9a343744ab5bf0c70015e7d95092",
114
+ "preview/crowdy-boot-D0e56jZN.js": "sha256:b08fc35fb3a549662388c88fa99dd0dbbc7e553e6d6cccac74c50a6967af88ef",
115
+ "preview/vfs-image.tar.gz": "sha256:1e8d03ad47b957b074a0b68a575d64f69a76e62c1f6da32ff23051ba4128554c",
116
+ "preview/worker-C8-_ANaz.js": "sha256:81099e5732dfe0c32bacd5897316b7956c5a0a22da01b4a0c6e21d0a3b9d9aa1"
117
+ }
118
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DeepSeek
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,226 @@
1
+ <!-- Generated by scripts/gen-third-party-notices.ts — do not edit by hand.
2
+ Run `pnpm run gen-third-party-notices` to regenerate. -->
3
+
4
+ # Third-Party Notices
5
+
6
+ DeepSeek Harness is licensed under [MIT](LICENSE). It depends on the third-party software listed below. Each project remains under its own license; nothing in this file changes those terms.
7
+
8
+ This file lists **direct** dependencies declared by the workspace and the explicitly disclosed official Claude Code platform payload closure. 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.
9
+
10
+ The complete npm transitive closure, including the Landlock launcher workspace, is recorded with exact pinned versions in [`pnpm-lock.yaml`](pnpm-lock.yaml) — inspect it with `pnpm licenses list`. The Python closure is recorded separately in [`python/sdk/uv.lock`](python/sdk/uv.lock).
11
+
12
+ ## Vendored source (`vendor/`)
13
+
14
+ The Cordis framework and its foundation libraries are source-vendored into this repository rather than consumed from npm, and republished under the `@deepseek-ai` scope. All are MIT-licensed; each directory preserves its upstream `LICENSE` file. Exact upstream commits and local modifications are recorded in [`vendor/README.md`](vendor/README.md).
15
+
16
+ | Package | Upstream name | Upstream | License |
17
+ | --- | --- | --- | --- |
18
+ | `@deepseek-ai/cosmokit` | `cosmokit` | [github.com/deepseek-harness/cosmokit](https://github.com/deepseek-harness/cosmokit) | MIT |
19
+ | `@deepseek-ai/schemastery` | `schemastery` | [github.com/deepseek-harness/schemastery](https://github.com/deepseek-harness/schemastery) | MIT |
20
+ | `@deepseek-ai/cordis` | `cordis` | [github.com/cordiverse/cordis](https://github.com/cordiverse/cordis) | MIT |
21
+ | `@deepseek-ai/cordis-plugin-loader` | `@cordisjs/plugin-loader` | [github.com/cordiverse/cordis](https://github.com/cordiverse/cordis) | MIT |
22
+ | `@deepseek-ai/cordis-plugin-include` | `@cordisjs/plugin-include` | [github.com/deepseek-harness/cordis](https://github.com/deepseek-harness/cordis) | MIT |
23
+ | `@deepseek-ai/cordis-plugin-group` | `@cordisjs/plugin-group` | [github.com/deepseek-harness/cordis](https://github.com/deepseek-harness/cordis) | MIT |
24
+ | `@deepseek-ai/cordis-plugin-timer` | `@cordisjs/plugin-timer` | [github.com/deepseek-harness/cordis](https://github.com/deepseek-harness/cordis) | MIT |
25
+ | `@deepseek-ai/cordis-plugin-hmr` | `@cordisjs/plugin-hmr` | [github.com/deepseek-harness/cordis](https://github.com/deepseek-harness/cordis) | MIT |
26
+ | `@deepseek-ai/cordis-plugin-logger-console` | `@cordisjs/plugin-logger-console` | [github.com/deepseek-harness/cordis](https://github.com/deepseek-harness/cordis) | MIT |
27
+
28
+ ## Runtime npm dependencies
29
+
30
+ External packages installed for runtime use or distributed inside the prebuilt browser artifacts. Browser inputs are resolved through the shipping tsdown and Vite configurations, independently of npm dependency sections. The tier covers every plugin a user can mount from `cordis.yml` — not only what the `dsh` CLI, Web UI, and Python SDK runtime load by default.
31
+
32
+ | Package | License |
33
+ | --- | --- |
34
+ | [`@agentclientprotocol/sdk`](https://github.com/agentclientprotocol/typescript-sdk) | Apache-2.0 |
35
+ | [`@anthropic-ai/claude-agent-sdk`](https://github.com/anthropics/claude-agent-sdk-typescript) | SEE LICENSE IN README.md |
36
+ | [`@anthropic-ai/sdk`](https://github.com/anthropics/anthropic-sdk-typescript) | MIT |
37
+ | [`@babel/code-frame`](https://github.com/babel/babel) | MIT |
38
+ | [`@earendil-works/pi-ai`](https://github.com/earendil-works/pi) | MIT |
39
+ | [`@joplin/turndown-plugin-gfm`](https://github.com/laurent22/joplin-turndown-plugin-gfm) | MIT |
40
+ | [`@jridgewell/gen-mapping`](https://github.com/jridgewell/sourcemaps) | MIT |
41
+ | [`@lexical/history`](https://github.com/facebook/lexical) | MIT |
42
+ | [`@lexical/plain-text`](https://github.com/facebook/lexical) | MIT |
43
+ | [`@lexical/text`](https://github.com/facebook/lexical) | MIT |
44
+ | [`@lexical/utils`](https://github.com/facebook/lexical) | MIT |
45
+ | [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) | MIT |
46
+ | [`@noble/hashes`](https://github.com/paulmillr/noble-hashes) | MIT |
47
+ | [`@octokit/webhooks`](https://github.com/octokit/webhooks.js) | MIT |
48
+ | [`@openai/codex`](https://github.com/openai/codex) | Apache-2.0 |
49
+ | [`@opentelemetry/api`](https://github.com/open-telemetry/opentelemetry-js) | Apache-2.0 |
50
+ | [`@opentelemetry/api-logs`](https://github.com/open-telemetry/opentelemetry-js) | Apache-2.0 |
51
+ | [`@opentelemetry/exporter-logs-otlp-http`](https://github.com/open-telemetry/opentelemetry-js) | Apache-2.0 |
52
+ | [`@opentelemetry/otlp-exporter-base`](https://github.com/open-telemetry/opentelemetry-js) | Apache-2.0 |
53
+ | [`@opentelemetry/resources`](https://github.com/open-telemetry/opentelemetry-js) | Apache-2.0 |
54
+ | [`@opentelemetry/sdk-logs`](https://github.com/open-telemetry/opentelemetry-js) | Apache-2.0 |
55
+ | [`@shikijs/langs`](https://github.com/shikijs/shiki) | MIT |
56
+ | [`@standard-schema/spec`](https://github.com/standard-schema/standard-schema) | MIT |
57
+ | [`@tanstack/react-virtual`](https://github.com/TanStack/virtual) | MIT |
58
+ | [`@vscode/ripgrep`](https://github.com/microsoft/vscode-ripgrep) | MIT |
59
+ | [`@xterm/headless`](https://github.com/xtermjs/xterm.js) | MIT |
60
+ | [`@yarnpkg/parsers`](https://github.com/yarnpkg/berry) | BSD-2-Clause |
61
+ | [`acorn`](https://github.com/acornjs/acorn) | MIT |
62
+ | [`anser`](https://github.com/IonicaBizau/anser) | MIT |
63
+ | [`buffer`](https://github.com/feross/buffer) | MIT |
64
+ | [`chokidar`](https://github.com/paulmillr/chokidar) | MIT |
65
+ | [`clsx`](https://github.com/lukeed/clsx) | MIT |
66
+ | [`commander`](https://github.com/tj/commander.js) | MIT |
67
+ | [`compression`](https://github.com/expressjs/compression) | MIT |
68
+ | [`diff`](https://github.com/kpdecker/jsdiff) | BSD-3-Clause |
69
+ | [`e2b`](https://github.com/e2b-dev/e2b) | MIT |
70
+ | [`electron-updater`](https://github.com/electron-userland/electron-builder) | MIT |
71
+ | [`eventsource-parser`](https://github.com/rexxars/eventsource-parser) | MIT |
72
+ | [`fflate`](https://github.com/101arrowz/fflate) | MIT |
73
+ | [`immer`](https://github.com/immerjs/immer) | MIT |
74
+ | [`ipaddr.js`](https://github.com/whitequark/ipaddr.js) | MIT |
75
+ | [`js-yaml`](https://github.com/nodeca/js-yaml) | MIT |
76
+ | [`katex`](https://github.com/KaTeX/KaTeX) | MIT |
77
+ | [`koffi`](https://github.com/Koromix/koffi) | MIT |
78
+ | [`lexical`](https://github.com/facebook/lexical) | MIT |
79
+ | [`mdast-util-from-markdown`](https://github.com/syntax-tree/mdast-util-from-markdown) | MIT |
80
+ | [`mdast-util-gfm`](https://github.com/syntax-tree/mdast-util-gfm) | MIT |
81
+ | [`mdast-util-math`](https://github.com/syntax-tree/mdast-util-math) | MIT |
82
+ | [`micromark-core-commonmark`](https://github.com/micromark/micromark/tree/main/packages/micromark-core-commonmark) | MIT |
83
+ | [`micromark-extension-gfm`](https://github.com/micromark/micromark-extension-gfm) | MIT |
84
+ | [`micromark-extension-math`](https://github.com/micromark/micromark-extension-math) | MIT |
85
+ | [`micromark-factory-space`](https://github.com/micromark/micromark/tree/main/packages/micromark-factory-space) | MIT |
86
+ | [`micromark-util-character`](https://github.com/micromark/micromark/tree/main/packages/micromark-util-character) | MIT |
87
+ | [`micromark-util-classify-character`](https://github.com/micromark/micromark/tree/main/packages/micromark-util-classify-character) | MIT |
88
+ | [`micromark-util-sanitize-uri`](https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri) | MIT |
89
+ | [`micromark-util-symbol`](https://github.com/micromark/micromark/tree/main/packages/micromark-util-symbol) | MIT |
90
+ | [`mime-types`](https://github.com/jshttp/mime-types) | MIT |
91
+ | [`negotiator`](https://github.com/jshttp/negotiator) | MIT |
92
+ | [`node-addon-require-builtin`](https://www.npmjs.com/package/node-addon-require-builtin) | MIT |
93
+ | [`node-pty`](https://github.com/microsoft/node-pty) | MIT |
94
+ | [`open`](https://github.com/sindresorhus/open) | MIT |
95
+ | [`pdfjs-dist`](https://github.com/mozilla/pdf.js) | Apache-2.0 |
96
+ | [`picomatch`](https://github.com/micromatch/picomatch) | MIT |
97
+ | [`react`](https://github.com/facebook/react) | MIT |
98
+ | [`react-dom`](https://github.com/facebook/react) | MIT |
99
+ | [`readable-stream`](https://github.com/nodejs/readable-stream) | MIT |
100
+ | [`resolve.exports`](https://github.com/lukeed/resolve.exports) | MIT |
101
+ | [`semver`](https://github.com/npm/node-semver) | ISC |
102
+ | [`sharp`](https://github.com/lovell/sharp) | Apache-2.0 |
103
+ | [`shiki`](https://github.com/shikijs/shiki) | MIT |
104
+ | [`supports-color`](https://github.com/chalk/supports-color) | MIT |
105
+ | [`tsx`](https://github.com/privatenumber/tsx) | MIT |
106
+ | [`turndown`](https://github.com/mixmark-io/turndown) | MIT |
107
+ | [`typescript`](https://github.com/microsoft/TypeScript) | Apache-2.0 |
108
+ | [`undici`](https://github.com/nodejs/undici) | MIT |
109
+ | [`use-sync-external-store`](https://github.com/facebook/react) | MIT |
110
+ | [`ws`](https://github.com/websockets/ws) | MIT |
111
+ | [`yaml`](https://github.com/eemeli/yaml) | ISC |
112
+ | [`zod`](https://github.com/colinhacks/zod) | MIT |
113
+ | [`zustand`](https://github.com/pmndrs/zustand) | MIT |
114
+
115
+ 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:
116
+
117
+ - `@yao-pkg/pkg@6.21.0` — [`patches/@yao-pkg__pkg@6.21.0.patch`](patches/@yao-pkg__pkg@6.21.0.patch)
118
+ - `node-pty@1.2.0-beta.15` — [`patches/node-pty@1.2.0-beta.15.patch`](patches/node-pty@1.2.0-beta.15.patch)
119
+
120
+ ## Official Claude Code platform payloads
121
+
122
+ The project owner authorizes distribution of every version of the official `@anthropic-ai/claude-agent-sdk` package and the official Claude Code CLI/platform payloads that each version declares through `optionalDependencies`. This identity-scoped authorization does not classify their declared terms as permissive and does not cover any unrelated runtime package; version, declared-license, and payload-set changes still require the ordinary dependency, lockfile, compatibility, terms, and notices review.
123
+
124
+ The installed SDK 0.3.263 declares the following optional platform packages. Each carries the official Claude Code 2.1.263 executable; the package identities and versions come from the SDK manifest, while the declared license field is verified against the platform payload installed for the current host.
125
+
126
+ | Optional platform package | Version | Declared license |
127
+ | --- | --- | --- |
128
+ | [`@anthropic-ai/claude-agent-sdk-darwin-arm64`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-darwin-arm64) | 0.3.263 | SEE LICENSE IN LICENSE.md |
129
+ | [`@anthropic-ai/claude-agent-sdk-darwin-x64`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-darwin-x64) | 0.3.263 | SEE LICENSE IN LICENSE.md |
130
+ | [`@anthropic-ai/claude-agent-sdk-linux-arm64`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-linux-arm64) | 0.3.263 | SEE LICENSE IN LICENSE.md |
131
+ | [`@anthropic-ai/claude-agent-sdk-linux-arm64-musl`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-linux-arm64-musl) | 0.3.263 | SEE LICENSE IN LICENSE.md |
132
+ | [`@anthropic-ai/claude-agent-sdk-linux-x64`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-linux-x64) | 0.3.263 | SEE LICENSE IN LICENSE.md |
133
+ | [`@anthropic-ai/claude-agent-sdk-linux-x64-musl`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-linux-x64-musl) | 0.3.263 | SEE LICENSE IN LICENSE.md |
134
+ | [`@anthropic-ai/claude-agent-sdk-win32-arm64`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-win32-arm64) | 0.3.263 | SEE LICENSE IN LICENSE.md |
135
+ | [`@anthropic-ai/claude-agent-sdk-win32-x64`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk-win32-x64) | 0.3.263 | SEE LICENSE IN LICENSE.md |
136
+
137
+
138
+ ## Development-only npm dependencies
139
+
140
+ External packages **directly declared** for development, tests, types, or tooling, without a runtime installation or browser-build relationship. A package here may still be pulled in transitively by a runtime dependency — `pnpm-lock.yaml` is the authority on that full closure.
141
+
142
+ | Package | License |
143
+ | --- | --- |
144
+ | [`@aws-sdk/client-s3`](https://github.com/aws/aws-sdk-js-v3) | Apache-2.0 |
145
+ | [`@braintree/sanitize-url`](https://github.com/braintree/sanitize-url) | MIT |
146
+ | [`@electron/notarize`](https://github.com/electron/notarize) | MIT |
147
+ | [`@lexical/headless`](https://github.com/facebook/lexical) | MIT |
148
+ | [`@modelcontextprotocol/server-everything`](https://github.com/modelcontextprotocol/servers) | MIT / Apache-2.0 |
149
+ | [`@modelcontextprotocol/server-filesystem`](https://github.com/modelcontextprotocol/servers) | MIT / Apache-2.0 |
150
+ | [`@stylistic/eslint-plugin`](https://github.com/eslint-stylistic/eslint-stylistic) | MIT |
151
+ | [`@testing-library/dom`](https://github.com/testing-library/dom-testing-library) | MIT |
152
+ | [`@testing-library/react`](https://github.com/testing-library/react-testing-library) | MIT |
153
+ | [`@types/babel__code-frame`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
154
+ | [`@types/compression`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
155
+ | [`@types/js-yaml`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
156
+ | [`@types/jsdom`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
157
+ | [`@types/mdast`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
158
+ | [`@types/mime-types`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
159
+ | [`@types/negotiator`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
160
+ | [`@types/node`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
161
+ | [`@types/picomatch`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
162
+ | [`@types/react`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
163
+ | [`@types/react-dom`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
164
+ | [`@types/readable-stream`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
165
+ | [`@types/semver`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
166
+ | [`@types/spdx-expression-parse`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
167
+ | [`@types/turndown`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
168
+ | [`@types/use-sync-external-store`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
169
+ | [`@types/ws`](https://github.com/DefinitelyTyped/DefinitelyTyped) | MIT |
170
+ | [`@vitejs/plugin-react`](https://github.com/vitejs/vite-plugin-react) | MIT |
171
+ | [`@vitest/coverage-v8`](https://github.com/vitest-dev/vitest) | MIT |
172
+ | [`@yao-pkg/pkg`](https://github.com/yao-pkg/pkg) | MIT |
173
+ | [`@yarnpkg/cli-dist`](https://github.com/yarnpkg/berry) | BSD-2-Clause |
174
+ | [`app-builder-lib`](https://github.com/electron-userland/electron-builder) | MIT |
175
+ | [`cytoscape`](https://github.com/cytoscape/cytoscape.js) | MIT |
176
+ | [`cytoscape-cose-bilkent`](https://github.com/cytoscape/cytoscape.js-cose-bilkent) | MIT |
177
+ | [`dayjs`](https://github.com/iamkun/dayjs) | MIT |
178
+ | [`debug`](https://github.com/debug-js/debug) | MIT |
179
+ | [`electron`](https://github.com/electron/electron) | MIT |
180
+ | [`electron-builder`](https://github.com/electron-userland/electron-builder) | MIT |
181
+ | [`esbuild`](https://github.com/evanw/esbuild) | MIT |
182
+ | [`eslint-plugin-sonarjs`](https://github.com/SonarSource/SonarJS) | LGPL-3.0-only |
183
+ | [`execa`](https://github.com/sindresorhus/execa) | MIT |
184
+ | [`extract-zip`](https://github.com/maxogden/extract-zip) | BSD-2-Clause |
185
+ | [`fast-check`](https://github.com/dubzzz/fast-check) | MIT |
186
+ | [`http-server`](https://github.com/http-party/http-server) | MIT |
187
+ | [`istanbul-lib-report`](https://github.com/istanbuljs/istanbuljs) | BSD-3-Clause |
188
+ | [`jscpd`](https://github.com/kucherenko/jscpd) | MIT |
189
+ | [`jsdom`](https://github.com/jsdom/jsdom) | MIT |
190
+ | [`lefthook`](https://github.com/evilmartians/lefthook) | MIT |
191
+ | [`lightningcss`](https://github.com/parcel-bundler/lightningcss) | MPL-2.0 |
192
+ | [`mermaid`](https://github.com/mermaid-js/mermaid) | MIT |
193
+ | [`micromark-util-types`](https://github.com/micromark/micromark/tree/main/packages/micromark-util-types) | MIT |
194
+ | [`msgpackr`](http://github.com/kriszyp/msgpackr) | MIT |
195
+ | [`oxlint`](https://github.com/oxc-project/oxc) | MIT |
196
+ | [`oxlint-tsgolint`](https://github.com/oxc-project/tsgolint) | MIT |
197
+ | [`playwright`](https://github.com/microsoft/playwright) | Apache-2.0 |
198
+ | [`pnpm`](https://github.com/pnpm/pnpm) | MIT |
199
+ | [`publint`](https://github.com/publint/publint) | MIT |
200
+ | [`smol-toml`](https://github.com/squirrelchat/smol-toml) | BSD-3-Clause |
201
+ | [`spdx-expression-parse`](https://github.com/jslicense/spdx-expression-parse.js) | MIT |
202
+ | [`tar`](https://github.com/isaacs/node-tar) | BlueOak-1.0.0 |
203
+ | [`tsdown`](https://github.com/rolldown/tsdown) | MIT |
204
+ | [`typescript-language-server`](https://github.com/typescript-language-server/typescript-language-server) | Apache-2.0 |
205
+ | [`vite`](https://github.com/vitejs/vite) | MIT |
206
+ | [`vite-tsconfig-paths`](https://github.com/aleclarson/vite-tsconfig-paths) | MIT |
207
+ | [`vitepress`](https://github.com/vuejs/vitepress) | MIT |
208
+ | [`vitepress-plugin-mermaid`](https://github.com/emersonbottero/vitepress-plugin-mermaid) | MIT |
209
+ | [`vitest`](https://github.com/vitest-dev/vitest) | MIT |
210
+
211
+ `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.
212
+
213
+ ## Python SDK dependencies (`python/`)
214
+
215
+ Direct dependencies of the `pyproject.toml` manifests, plus `uv` as the development workflow tool.
216
+
217
+ | Package | License | Role |
218
+ | --- | --- | --- |
219
+ | [`hatchling`](https://github.com/pypa/hatch) | MIT | build backend |
220
+ | [`pydantic`](https://github.com/pydantic/pydantic) | MIT | runtime dependency of `deepseek-harness-sdk` |
221
+ | [`pytest`](https://github.com/pytest-dev/pytest) | MIT | test-only |
222
+ | [`uv`](https://github.com/astral-sh/uv) | MIT / Apache-2.0 | development workflow tool |
223
+
224
+ ## First-party native packages
225
+
226
+ `@deepseek-ai/node-addon-system` (and its platform packages) is built and released from this repository under BSD 3-Clause. It is listed here for completeness; it is first-party, not third-party.