@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/package.json ADDED
@@ -0,0 +1,101 @@
1
+ {
2
+ "name": "@crowdedkingdoms/crowdy-dsh",
3
+ "version": "0.2.0-dev.1",
4
+ "private": false,
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/CrowdedKingdoms/crowdy-dsh.git"
9
+ },
10
+ "homepage": "https://github.com/CrowdedKingdoms/crowdy-dsh#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/CrowdedKingdoms/crowdy-dsh/issues"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "type": "module",
18
+ "description": "DeepSeek Harness plugins whose filesystem is a Crowdy Studio project (GitHub-bound when possible), plus the packed in-browser harness image Crowdy Studio embeds.",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./lib/types/index.d.ts",
22
+ "default": "./lib/index.js"
23
+ },
24
+ "./fs": {
25
+ "types": "./lib/types/fs/crowdy-file-system.d.ts",
26
+ "default": "./lib/fs/crowdy-file-system.js"
27
+ },
28
+ "./search": {
29
+ "types": "./lib/types/search/search-tools.d.ts",
30
+ "default": "./lib/search/search-tools.js"
31
+ },
32
+ "./sdk-index": {
33
+ "types": "./lib/types/sdk-index/index.d.ts",
34
+ "default": "./lib/sdk-index/index.js"
35
+ },
36
+ "./tools": {
37
+ "types": "./lib/types/tools/index.d.ts",
38
+ "default": "./lib/tools/index.js"
39
+ },
40
+ "./attachments": {
41
+ "types": "./lib/types/attachments/crowdy-attachment-store.d.ts",
42
+ "default": "./lib/attachments/crowdy-attachment-store.js"
43
+ },
44
+ "./persist": {
45
+ "types": "./lib/types/persist/index.d.ts",
46
+ "default": "./lib/persist/index.js"
47
+ },
48
+ "./bridge": {
49
+ "types": "./lib/types/bridge/index.d.ts",
50
+ "default": "./lib/bridge/index.js"
51
+ },
52
+ "./bridge-protocol": {
53
+ "types": "./lib/types/bridge/protocol.d.ts",
54
+ "default": "./lib/bridge/protocol.js"
55
+ },
56
+ "./package.json": "./package.json"
57
+ },
58
+ "main": "./lib/index.js",
59
+ "files": [
60
+ "lib",
61
+ "presets",
62
+ "profile",
63
+ "dist/dsh-web",
64
+ "upstream.json",
65
+ "THIRD_PARTY_NOTICES.md",
66
+ "LICENSE"
67
+ ],
68
+ "scripts": {
69
+ "build": "tsc -p tsconfig.json && node scripts/bundle-sdk.mjs",
70
+ "typecheck": "tsc -p tsconfig.json --noEmit",
71
+ "test": "node --test \"lib/**/*.test.js\"",
72
+ "cockpit": "dsh --profile web --patch ./profile/crowdy-node.patch.yml",
73
+ "image": "bash ./scripts/build-image.sh",
74
+ "check:content-policy": "node scripts/check-content-policy.mjs",
75
+ "check:release-tier-gate": "bash scripts/ci/resolve-release-tier.test.sh"
76
+ },
77
+ "dependencies": {
78
+ "@deepseek-ai/cordis": "workspace:*",
79
+ "@deepseek-ai/dsh-attachment": "workspace:*",
80
+ "@deepseek-ai/dsh-fs": "workspace:*",
81
+ "@deepseek-ai/dsh-llm": "workspace:*",
82
+ "@deepseek-ai/dsh-tools": "workspace:*",
83
+ "@deepseek-ai/dsh-user-approval": "workspace:*",
84
+ "@deepseek-ai/schemastery": "workspace:*"
85
+ },
86
+ "devDependencies": {
87
+ "@crowdedkingdoms/crowdyjs": "16.0.0-dev.1",
88
+ "@deepseek-ai/dsh-agent": "workspace:*",
89
+ "@deepseek-ai/dsh-api-session-controller": "workspace:*",
90
+ "@deepseek-ai/dsh-system-prompt": "workspace:*",
91
+ "@types/node": "^22.0.0",
92
+ "esbuild": "^0.25.0",
93
+ "typescript": "^5.6.0"
94
+ },
95
+ "engines": {
96
+ "node": ">=22.19"
97
+ },
98
+ "crowdyDsh": {
99
+ "sdkSourceBranch": "feat/dsh-pane"
100
+ }
101
+ }
@@ -0,0 +1,140 @@
1
+ # The `crowdy` agent preset: a coding agent whose filesystem is a Crowdy Studio
2
+ # project rather than this machine's disk, and whose only way to run code is
3
+ # the Studio draft/deploy loop.
4
+ #
5
+ # Derived from the shipped `standard` preset. What matters here is mostly what
6
+ # is ABSENT: the host composition mounts `@crowdedkingdoms/crowdy-dsh/fs` as
7
+ # `ctx.fs`, and any tool that reaches the real disk by another route would show
8
+ # the agent a world its edits cannot touch.
9
+ #
10
+ # tool-bash / tool-pwsh — there is no shell; a Crowdy project is compiled by
11
+ # the platform, never on the machine running this.
12
+ # tool-fs-search — glob/grep spawn ripgrep through `ctx.subprocess`,
13
+ # deliberately NOT through `ctx.fs`. The Crowdy
14
+ # search plugin registers the same names in memory.
15
+ # tool-jobs, skill-* — background jobs and skill discovery walk local roots.
16
+ # tool-web — the platform's model endpoint forbids provider web
17
+ # plugins; the harness gets no browser either.
18
+ # delegation — subagents are a later cut (each one costs the
19
+ # player's wallet).
20
+
21
+ # ── identity ────────────────────────────────────────────────────────────────
22
+
23
+ - id: persona
24
+ name: '@deepseek-ai/dsh-persona'
25
+ config:
26
+ suffix: The project is mounted at {{cwd}}; `server/` and `client/` are its two targets.
27
+ prefix: >-
28
+ You are the Crowdy Studio agent, powered by the {{model}} model. You help a
29
+ player write, test and deploy a mod for a Crowded Kingdoms game by editing
30
+ their Crowdy Studio project.
31
+
32
+ The filesystem your tools see is that project only, mounted at `{{cwd}}`:
33
+ `server/` is the SERVER target (Rust compiled to WebAssembly, run on the
34
+ player's grid by the platform) and `client/` is the CLIENT target (Rust to
35
+ WebAssembly, run in the player's browser). Each target holds `Cargo.toml`
36
+ and `.rs` files under `src/`; nothing else can be stored, so create no other
37
+ paths. `captures/` holds screenshots of the game and `context/` holds game
38
+ observations, client logs and the latest build diagnostics; both are
39
+ read-only and refreshed by Crowdy Studio.
40
+
41
+ When the project is bound to a GitHub repository, GitHub is the source of
42
+ truth: every write commits to the bound branch and Studio mirrors it. Say
43
+ so when it matters (for example, the player can review commits on GitHub).
44
+
45
+ You have no shell. To compile and run what you wrote, call `draft_test`;
46
+ read the diagnostics it returns, fix them, and run it again. Use
47
+ `screenshot` (or the capture `draft_test` takes) to see the game, and
48
+ `game_observe` for exact coordinates. `deploy_live` publishes to other
49
+ players and always asks the player to approve; never call it unless the
50
+ player asked for a live deploy and the draft passed.
51
+
52
+ Use `sdk_lookup` before calling any `crowdy::` host function you are not
53
+ certain exists; never invent one. Read a file before you change it. Keep
54
+ edits small and explain what you changed in one or two sentences.
55
+
56
+ - id: agent-instructions
57
+ name: '@deepseek-ai/dsh-agent-instructions'
58
+ config:
59
+ maxBytes: 65536
60
+
61
+ # ── filesystem and project tools ────────────────────────────────────────────
62
+
63
+ # Registers read/write/edit/read_image into the host `tools` registry against
64
+ # whatever backend the host mounted on `ctx.fs` — here, the Crowdy project.
65
+ - id: tool-fs
66
+ name: '@deepseek-ai/dsh-tool-fs'
67
+
68
+ # In-memory glob/grep over the same project snapshot the fs backend serves.
69
+ - id: tool-fs-search-crowdy
70
+ name: '@crowdedkingdoms/crowdy-dsh/search'
71
+ config:
72
+ globMaxResults: 100
73
+ grepMaxMatches: 250
74
+ grepMaxLineBytes: 2000
75
+
76
+ # Closed-world crowdy-compute-sdk index + `sdk_lookup`.
77
+ - id: sdk-index-crowdy
78
+ name: '@crowdedkingdoms/crowdy-dsh/sdk-index'
79
+
80
+ # draft_test / deploy_live / screenshot / runtime_status / client_logs /
81
+ # game_observe / project_* — everything the Studio page executes for the model.
82
+ - id: crowdy-tools
83
+ name: '@crowdedkingdoms/crowdy-dsh/tools'
84
+ config:
85
+ buildTimeoutMs: 180000
86
+ screenshotTimeoutMs: 15000
87
+ autoScreenshot: true
88
+
89
+ # ── plan mode ───────────────────────────────────────────────────────────────
90
+
91
+ - id: planning
92
+ name: cordis:group
93
+ group: true
94
+ isolate:
95
+ planMode: true
96
+ config:
97
+ - id: plan-mode
98
+ name: '@deepseek-ai/dsh-plan-mode'
99
+ config:
100
+ section: |
101
+ You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or the player switches the session mode. Imperative language to implement changes means plan the implementation, not execute it.
102
+
103
+ Explore first: read the project files and `context/` to ground the plan in the actual source and the latest diagnostics. Do not write or edit files, and do not run draft_test or deploy_live while planning.
104
+
105
+ When ready, call exit_plan_mode with the complete plan markdown, starting with a # title, as the only and final tool call in that response.
106
+
107
+ # ── compaction ──────────────────────────────────────────────────────────────
108
+
109
+ - id: compaction
110
+ name: cordis:group
111
+ group: true
112
+ isolate:
113
+ compaction: true
114
+ toolResultPruner: true
115
+ config:
116
+ - id: compaction-basic
117
+ name: '@deepseek-ai/dsh-compaction-basic'
118
+
119
+ - id: command-compact
120
+ name: '@deepseek-ai/dsh-command-compact'
121
+
122
+ - id: tool-result-pruner
123
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
124
+ config:
125
+ thresholdChars: 8192
126
+ headChars: 4096
127
+ tailChars: 1024
128
+
129
+ # ── remaining model-facing rows ─────────────────────────────────────────────
130
+
131
+ - id: tool-ask-user
132
+ name: '@deepseek-ai/dsh-tool-ask-user'
133
+
134
+ - id: tool-todo
135
+ name: '@deepseek-ai/dsh-tool-todo'
136
+ config:
137
+ allowParallelInProgress: true
138
+
139
+ - id: present
140
+ name: '@deepseek-ai/dsh-tool-present'
@@ -0,0 +1,3 @@
1
+ name: Crowdy Studio
2
+ description: Edits the open Crowdy Studio project (GitHub-bound when possible), runs draft tests, reads screenshots and game context. No shell and no disk access, because the project is not on this machine.
3
+ order: 0
@@ -0,0 +1,34 @@
1
+ # Developer cockpit overlay: run the same plugins under a Node 22 `dsh web`
2
+ # from a checkout of deepseek-harness that has this package in its workspace:
3
+ #
4
+ # dsh --profile web --patch profile/crowdy-node.patch.yml
5
+ #
6
+ # Connection settings come from CROWDY_* environment variables (see
7
+ # .env.example) or `$DSH_HOME/crowdy.json`. The mount must be a real (empty)
8
+ # directory so the workspace picker accepts it: `CROWDY_MOUNT`, default
9
+ # `$HOME/crowdy-mount`.
10
+ #
11
+ # Page-executed tools (draft_test, screenshot, ...) are registered but answer
12
+ # "not connected": there is no Studio page in the cockpit.
13
+
14
+ - id: fs-sandbox
15
+ disabled: true
16
+
17
+ - id: file-reference-local
18
+ disabled: true
19
+
20
+ - id: agent-presets
21
+ config:
22
+ default: crowdy
23
+ roots:
24
+ - path: !!js require('node:path').resolve(__dirname, '../presets')
25
+ trust: user
26
+
27
+ - insert:
28
+ - id: crowdy-fs
29
+ name: '@crowdedkingdoms/crowdy-dsh/fs'
30
+ config:
31
+ root: !!js process.env.CROWDY_MOUNT ?? require('node:os').homedir() + '/crowdy-mount'
32
+
33
+ - id: crowdy-bridge
34
+ name: '@crowdedkingdoms/crowdy-dsh/bridge'
@@ -0,0 +1,97 @@
1
+ # Crowdy Studio overlay for the browser-worker image, applied over the shipped
2
+ # `web` profile at pack time:
3
+ #
4
+ # dsh --profile web --patch profile/crowdy-web.patch.yml --dump-config
5
+ #
6
+ # The composed tree is what `scripts/pack-image.ts` hands to the packer.
7
+ #
8
+ # Three changes to the stock web composition:
9
+ # 1. the disk-backed filesystem is replaced by the Crowdy Studio backend, so
10
+ # the unmodified read/write/edit/read_image tools operate on the project;
11
+ # 2. the sharp-backed attachment store is replaced by an in-memory one that
12
+ # works without native modules, so screenshots reach the model;
13
+ # 3. the page bridge joins, and the `crowdy` preset becomes the default.
14
+ #
15
+ # Connection settings arrive at boot as `$DSH_HOME/crowdy.json` (an overlay the
16
+ # Studio page writes), never from this file.
17
+
18
+ - id: fs-sandbox
19
+ disabled: true
20
+
21
+ - id: attachment-local
22
+ disabled: true
23
+
24
+ # The `@file` reference source walks the host disk; our files are not there.
25
+ - id: file-reference-local
26
+ disabled: true
27
+
28
+ # Native directory picking has no meaning in a worker; the project is the
29
+ # only workspace and the page registers it.
30
+ - id: directory-picker
31
+ disabled: true
32
+
33
+ # "Open in app" probes the host machine for editors; there is none.
34
+ - id: open-in-app
35
+ disabled: true
36
+ - id: ui-open-in-app
37
+ disabled: true
38
+
39
+ # Host web tools stay disabled (the base already does so); nothing here should
40
+ # fetch arbitrary URLs from the player's browser.
41
+ - id: web
42
+ disabled: true
43
+
44
+ # No telemetry leaves the player's browser. The base composition ships the
45
+ # OTLP exporter pointed at DeepSeek's collector in FEEDBACK_ONLY mode; the
46
+ # host CSP would block the request, but a disabled plugin does not try, and
47
+ # finish-artifact.mjs refuses an image that so much as names the endpoint.
48
+ - id: session-telemetry-otel
49
+ disabled: true
50
+ config:
51
+ mode: DISABLED
52
+ exporter:
53
+ url: ''
54
+
55
+ - id: web-search-deepseek
56
+ disabled: true
57
+ - id: web-fetch-http
58
+ disabled: true
59
+
60
+ # Sandbox policy: the whole mount is the workspace, and the Crowdy backend does
61
+ # not confine, so `workspace-write` reads as "the project".
62
+ - id: sandbox-policy
63
+ config:
64
+ mode: workspace-write
65
+ workspaceRoot: /dsh/workspace
66
+
67
+ - id: agent-presets
68
+ config:
69
+ default: crowdy
70
+
71
+ - insert:
72
+ - id: crowdy-fs
73
+ name: '@crowdedkingdoms/crowdy-dsh/fs'
74
+ config:
75
+ # The image root is /dsh; the stock workspace directory becomes the
76
+ # project mount so a session's cwd IS the project.
77
+ root: /dsh/workspace
78
+ githubFirst: true
79
+
80
+ - id: attachment-crowdy
81
+ name: '@crowdedkingdoms/crowdy-dsh/attachments'
82
+ config:
83
+ maxImageBytes: 4194304
84
+ maxImageDimension: 8192
85
+
86
+ - id: crowdy-bridge
87
+ name: '@crowdedkingdoms/crowdy-dsh/bridge'
88
+ config:
89
+ timeoutMs: 15000
90
+
91
+ # Mirror sessions, projection caches and settings into the origin-private
92
+ # file system; the page restores them as an overlay on the next boot.
93
+ - id: crowdy-persist
94
+ name: '@crowdedkingdoms/crowdy-dsh/persist'
95
+ config:
96
+ intervalMs: 3000
97
+ maxBytes: 50331648
package/upstream.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "$comment": "The DeepSeek Harness this package builds against. Not a submodule (this wrapper carries none, see AGENTS.md): scripts/checkout-upstream.sh clones this tag into UPSTREAM_DIR, and scripts/build-image.sh refuses a checkout at any other commit. Bump deliberately; the plugin APIs are experimental.",
3
+ "repository": "https://github.com/deepseek-ai/deepseek-harness.git",
4
+ "tag": "dsh-v0.1.5-rc.2",
5
+ "commit": "fb2c4b9e698e30edb738bca4cf0618587db7d203",
6
+ "license": "MIT"
7
+ }