@ran-sh/dsh-crew 0.3.0

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 (85) hide show
  1. package/.claude-plugin/marketplace.json +17 -0
  2. package/.claude-plugin/plugin.json +8 -0
  3. package/.mcp.json +8 -0
  4. package/LICENSE +21 -0
  5. package/README.de.md +359 -0
  6. package/README.es.md +359 -0
  7. package/README.fr.md +359 -0
  8. package/README.hi.md +359 -0
  9. package/README.id.md +359 -0
  10. package/README.ja.md +359 -0
  11. package/README.ko.md +359 -0
  12. package/README.md +360 -0
  13. package/README.pt.md +359 -0
  14. package/README.ru.md +359 -0
  15. package/README.th.md +359 -0
  16. package/README.tr.md +359 -0
  17. package/README.vi.md +359 -0
  18. package/README.zh-TW.md +359 -0
  19. package/README.zh.md +305 -0
  20. package/agents/ds-flash.md +26 -0
  21. package/agents/ds-pro.md +32 -0
  22. package/agents/ds-reviewer.md +23 -0
  23. package/agents/ds-worker.md +22 -0
  24. package/codex/agents/ds-flash.toml +30 -0
  25. package/codex/agents/ds-pro.toml +31 -0
  26. package/codex/agents/ds-reviewer.toml +28 -0
  27. package/codex/agents/ds-worker.toml +28 -0
  28. package/codex/prompts/dsh-config.md +3 -0
  29. package/codex/prompts/dsh-status.md +1 -0
  30. package/commands/config.md +11 -0
  31. package/commands/off.md +5 -0
  32. package/commands/on.md +5 -0
  33. package/commands/status.md +5 -0
  34. package/cordis.patch.yml +4 -0
  35. package/docs/images/dsh-crew-host.png +0 -0
  36. package/docs/images/dsh-crew-jobs.png +0 -0
  37. package/docs/images/dsh-crew-logo.png +0 -0
  38. package/docs/images/dsh-crew-overview.png +0 -0
  39. package/lib/client.js +2765 -0
  40. package/package.json +125 -0
  41. package/scripts/build-client.mjs +28 -0
  42. package/scripts/live-crew-smoke.mjs +39 -0
  43. package/scripts/live-policy-matrix.mjs +177 -0
  44. package/scripts/policy-probe.mjs +101 -0
  45. package/scripts/setup.mjs +294 -0
  46. package/scripts/smoke-real.mjs +110 -0
  47. package/scripts/smoke.mjs +78 -0
  48. package/scripts/verify-installer-fix.mjs +26 -0
  49. package/src/adaptive-routing.mjs +260 -0
  50. package/src/client/activation-summary.tsx +64 -0
  51. package/src/client/entry.tsx +236 -0
  52. package/src/client/index.tsx +1120 -0
  53. package/src/config-readiness.mjs +59 -0
  54. package/src/delivery.mjs +205 -0
  55. package/src/dsh-cli-runtime.mjs +251 -0
  56. package/src/failure-classification.mjs +172 -0
  57. package/src/hub/entry.mjs +98 -0
  58. package/src/hub/index.mjs +757 -0
  59. package/src/hub-client.mjs +132 -0
  60. package/src/hub-compatibility.mjs +49 -0
  61. package/src/i18n.mjs +19 -0
  62. package/src/install/cli.mjs +28 -0
  63. package/src/install/install-legacy.mjs +460 -0
  64. package/src/install/install.mjs +451 -0
  65. package/src/jobs.mjs +275 -0
  66. package/src/mcp-runtime.mjs +257 -0
  67. package/src/model-catalog.mjs +173 -0
  68. package/src/model-routing.mjs +391 -0
  69. package/src/multimodal.mjs +0 -0
  70. package/src/policy-legacy.mjs +830 -0
  71. package/src/policy.mjs +197 -0
  72. package/src/readiness-matrix.mjs +169 -0
  73. package/src/runtime-controls.mjs +90 -0
  74. package/src/runtime-identity.mjs +108 -0
  75. package/src/server.mjs +477 -0
  76. package/src/status-shard.mjs +52 -0
  77. package/src/structured-error-code.mjs +39 -0
  78. package/src/vision-route.mjs +138 -0
  79. package/src/workflow-runtime.mjs +567 -0
  80. package/src/workflow.mjs +160 -0
  81. package/src/workspace-audit.mjs +231 -0
  82. package/src/workspace-isolation.mjs +306 -0
  83. package/statusline/statusline.sh +14 -0
  84. package/statusline/worker-segment.sh +35 -0
  85. package/worker.cordis.yml +77 -0
package/README.id.md ADDED
@@ -0,0 +1,359 @@
1
+ <p align="center">
2
+ <img src="./docs/images/dsh-crew-logo.png" alt="DSH Crew" width="120" />
3
+ </p>
4
+
5
+ <h1 align="center">DSH Crew</h1>
6
+
7
+ <p align="center">
8
+ <strong>Plugin <a href="https://github.com/deepseek-ai/deepseek-harness">DeepSeek Harness</a>: dispatch pekerjaan ke agen DSH dari Claude Code / Codex, tanpa kehilangan UI subagent bawaan host.</strong><br />
9
+ <sub>UI Progres Bawaan &bull; Kebijakan Tier &amp; Eskalasi &bull; Sesi DSH di Dalam Host &bull; Vision &amp; Pembuatan Gambar &bull; Instalasi Sekali Klik</sub>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <sub>GitHub: <code>Ran-sh/dsh-crew</code> &middot; Rilis plugin saat ini: <code>0.1.0-rc.1</code> &middot; Diuji dengan DSH <code>0.1.0-rc.6</code></sub>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <a href="./README.md">English</a> &middot; <a href="./README.zh.md">简体中文</a> &middot; <a href="./README.zh-TW.md">繁體中文</a> &middot; <a href="./README.ja.md">日本語</a> &middot; <a href="./README.ko.md">한국어</a> &middot; <a href="./README.fr.md">Français</a> &middot; <a href="./README.es.md">Español</a> &middot; <a href="./README.de.md">Deutsch</a> &middot; <a href="./README.pt.md">Português</a> &middot; <a href="./README.ru.md">Русский</a> &middot; <a href="./README.hi.md">हिन्दी</a> &middot; <a href="./README.tr.md">Türkçe</a> &middot; <a href="./README.th.md">ไทย</a> &middot; <a href="./README.vi.md">Tiếng Việt</a> &middot; <a href="./README.id.md"><b>Bahasa Indonesia</b></a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://github.com/Ran-sh/dsh-crew/blob/main/LICENSE"><img src="https://img.shields.io/github/license/Ran-sh/dsh-crew?color=64748b" alt="License" /></a>
22
+ </p>
23
+
24
+ <br />
25
+
26
+ <p align="center">
27
+ <img src="./docs/images/dsh-crew-overview.png" alt="DSH Crew — settings page" width="100%" />
28
+ </p>
29
+ <p align="center"><sub>Halaman pengaturan DSH Crew — integrasi host, kebijakan dispatch, eksekusi, dan jembatan multimodal</sub></p>
30
+
31
+ ## Mengapa DSH Crew
32
+
33
+ DSH Crew adalah plugin untuk [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH) — harness agen sumber terbuka. Plugin ini membuat agen DSH dapat di-dispatch dari Claude Code dan Codex: orchestrator tetap memakai modelnya sendiri, pekerjaan berjalan pada agen DSH sungguhan dengan tools, sandbox, preset, dan riwayat sesi milik harness tersebut, dan host tetap menampilkannya sebagai subagent bawaan dengan progres langsung.
34
+
35
+ Yang menjalankan pekerjaan adalah agen DSH, bukan panggilan model biasa. Tier (`flash` / `pro`) menentukan seberapa besar kapabilitas yang didapat agen tersebut dari roster yang dikonfigurasi di harness — saat ini DeepSeek V4 Flash dan V4 Pro — sehingga pergantian model di DSH tidak memerlukan perubahan apa pun di sini.
36
+
37
+ <table>
38
+ <tr>
39
+ <td width="50%">
40
+
41
+ ### 🧵 UI Progres Bawaan
42
+
43
+ Worker tampil sebagai subagent biasa di Claude Code / Codex — jumlah dispatch, langkah yang sedang berjalan, panggilan tool, dan penggunaan token semuanya tampil di panel tugas milik host, plus segmen statusline claude-hud: `⚙dsh 1▶pro 2m14s 21.7k/606 ✓3`.
44
+
45
+ </td>
46
+ <td width="50%">
47
+
48
+ ### 🎚️ Kebijakan Tier dan Eskalasi
49
+
50
+ `flash` untuk pekerjaan mekanis, `pro` untuk penalaran, `effort` dari `off` sampai `max`. `tier_policy` dapat membatasi setiap dispatch ke satu tier di lapisan tool, dan `escalate_on_failure` mencoba ulang sekali run flash yang gagal di pro — berdasarkan bukti, bukan menebak tingkat kesulitan di awal.
51
+
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td width="50%">
56
+
57
+ ### 🏛️ Sesi DSH di Dalam Host
58
+
59
+ Dengan bundle terpasang di profil DSH, setiap worker adalah sesi DSH kelas satu: terlihat di Web UI, dikelompokkan menurut direktori kerja, dipasangi preset Agent yang Anda pilih per tier. Tanpa DSH berjalan, dispatch melakukan fallback ke runtime DSH standalone, sehingga lingkungan CI dan headless tetap berfungsi.
60
+
61
+ </td>
62
+ <td width="50%">
63
+
64
+ ### 👁️ Vision dan Pembuatan Gambar
65
+
66
+ Model DSH hanya mendukung teks. `describe_image` dan `generate_image` meminjam mata dan kuas dari CLI yang sudah Anda miliki — Claude, Codex, Grok, Antigravity — atau dari API apa pun yang kompatibel dengan OpenAI yang Anda konfigurasi. Gambar yang ditempel tetap terlihat di percakapan dan sampai ke model sebagai teks.
67
+
68
+ </td>
69
+ </tr>
70
+ <tr>
71
+ <td width="50%">
72
+
73
+ ### 🔌 Provider Kustom
74
+
75
+ Bawa endpoint Anda sendiri (Base URL + API key + model) atau template perintah lokal. Setiap provider punya uji konektivitas yang memeriksa keterjangkauan dan autentikasi, lalu melakukan satu panggilan vision sungguhan sehingga Anda langsung tahu sekarang, bukan di tengah tugas.
76
+
77
+ </td>
78
+ <td width="50%">
79
+
80
+ ### 📦 Instalasi Sekali Klik
81
+
82
+ Halaman pengaturan memasang dan memperbarui plugin Claude Code dan file role Codex untuk Anda — registrasi marketplace, daftar izin (allowlist), pemasangan HUD, path absolut yang dirender untuk mesin ini — dan memulihkannya semudah itu. Setiap file pengaturan dicadangkan terlebih dahulu.
83
+
84
+ </td>
85
+ </tr>
86
+ </table>
87
+
88
+ ## Cara Kerja
89
+
90
+ ```
91
+ Claude Code / Codex (orchestrator, keeps its own model)
92
+ └─ ds-flash / ds-pro ← native subagent shell (progress shows in the host's task UI)
93
+ └─ MCP: dsh_run_worker(tier, effort, cwd)
94
+ ├─ hub reachable → session inside DSH (visible in the Web UI, grouped by cwd)
95
+ └─ otherwise → dsh-jsonrpc-agent runtime (worker.cordis.yml)
96
+ └─ DeepSeek V4 Flash / Pro (DSH SDK, event stream → progress and token stats)
97
+ ```
98
+
99
+ ## Satu eksekusi, dua sudut pandang
100
+
101
+ Dispatch bisa melebar. Di bawah ini delapan belas worker menerjemahkan README ini secara paralel: host menghitungnya sebagai subagent miliknya, sementara harness menjalankannya sebagai sesi nyata.
102
+
103
+ <p align="center">
104
+ <img src="./docs/images/dsh-crew-host.png" alt="Claude Code" width="100%" />
105
+ </p>
106
+ <p align="center"><sub>Di Claude Code, worker dsh-crew tampil sebagai subagent native; segmen statusline menampilkan tier yang berjalan, waktu berjalan, dan token.</sub></p>
107
+
108
+ <p align="center">
109
+ <img src="./docs/images/dsh-crew-jobs.png" alt="DSH Crew" width="100%" />
110
+ </p>
111
+ <p align="center"><sub>Panel DSH Crew melihat eksekusi yang sama dari sisi harness: host mana yang mengirim setiap job, tier dan effort-nya, progres langsung, dan pemakaian token.</sub></p>
112
+
113
+ ## Instalasi
114
+
115
+ Pasang dari GitHub ke sebuah profil DSH:
116
+
117
+ ```bash
118
+ node scripts/setup.mjs install # Safe install: see the canonical Install section of README.md (dedicated Crew home/profile; official web profile is never modified).
119
+ Repository source: github:Ran-sh/dsh-crew
120
+ npx -y @deepseek-ai/dsh web
121
+ ```
122
+
123
+ Atau, untuk pengembangan lokal langsung dari kode sumber:
124
+
125
+ ```bash
126
+ node scripts/setup.mjs install # Safe install: see the canonical Install section of README.md (dedicated Crew home/profile; official web profile is never modified).
127
+ Repository source: github:Ran-sh/dsh-crew
128
+ npx -y @deepseek-ai/dsh web
129
+ ```
130
+
131
+ Protokol `link:` menautkan dependensi profil ke repositori ini, sehingga hasil rebuild langsung terlihat.
132
+
133
+ ### Konfigurasikan kredensial DeepSeek (hanya standalone)
134
+
135
+ Dalam hub mode — instalasi di atas — worker berjalan di dalam instance DSH dan menggunakan kredensial DeepSeek yang sudah dikonfigurasi. Tidak perlu setup apa pun.
136
+
137
+ Hanya fallback standalone yang memerlukan key sendiri: ketika dispatch dari Claude Code / Codex tanpa instance DSH yang berjalan, worker runtime diluncurkan sebagai proses terpisah. Ambil API key di [platform.deepseek.com](https://platform.deepseek.com) lalu tulis ke `~/.config/dsh-crew/.env`:
138
+
139
+ ```
140
+ DEEPSEEK_API_KEY=sk-...
141
+ ```
142
+
143
+ ### Verifikasi
144
+
145
+ ```bash
146
+ node scripts/smoke.mjs
147
+ ```
148
+
149
+ Smoke test mengirim satu job murah melalui path yang tersedia — hub saat instance DSH sedang berjalan, standalone sebaliknya — dan mencetak path mana yang digunakan. Dalam sekitar sepuluh detik akan muncul `smoke test passed — configuration OK`. Jika gagal, alasannya dicetak dan dibatasi pada path yang diuji.
150
+
151
+ Lalu buka Pengaturan → DSH Crew dan pasang integrasi Claude Code / Codex dengan sekali klik.
152
+
153
+ ## Latar Belakang dan Terminologi
154
+
155
+ - **DSH** (DeepSeek Harness): harness agen sumber terbuka dari DeepSeek, agen kode dalam bentuk Web UI, mirip Claude Code tetapi menggerakkan model DeepSeek.
156
+ - **MCP** (Model Context Protocol): protokol integrasi tool AI dari Anthropic, memungkinkan LLM memanggil tool eksternal dan sumber data secara aman.
157
+ - **Cordis bundle**: format plugin DSH; proyek ini dapat berjalan standalone sebagai layanan MCP atau dipasang ke DSH Web sebagai mode hub.
158
+ - **tier**: tier kapabilitas — slot mana dari roster model DSH yang dikonfigurasi yang didapat seorang worker. `flash` cepat dan murah (tugas sederhana), `pro` menalar lebih dalam (masalah kompleks). Saat ini keduanya dipetakan ke DeepSeek V4 Flash dan V4 Pro; ganti model di DSH dan tidak ada yang berubah di sini.
159
+ - **worker**: agen DSH yang mengerjakan pekerjaan — sesi penuh dengan tools, sandbox, dan preset sendiri, bukan panggilan model biasa.
160
+ - **effort**: kekuatan penalaran, `off` = tanpa penalaran, `high` = investasi penalaran tinggi, `max` = investasi penalaran maksimum.
161
+
162
+ ## Claude Code
163
+
164
+ ### Instalasi
165
+
166
+ Instalasi sekali klik (pilih salah satu):
167
+
168
+ - **Halaman pengaturan DSH** (saat mode hub terpasang): Settings → DSH Crew → "Install to Claude Code"
169
+ - **Baris perintah**: `node src/install/cli.mjs all`
170
+
171
+ Keduanya melakukan hal yang sama: mendaftarkan marketplace lokal (direktori induk `dsh-plugins/` sebagai root marketplace) + `claude plugin install` + daftar izin tool MCP + konfigurasi segmen status worker claude-hud (mencadangkan settings.json otomatis sebelum perubahan, idempotent). **Mulai ulang sesi setelah instalasi agar perubahan diterapkan.**
172
+
173
+ ### Penggunaan
174
+
175
+ - Langsung di percakapan, katakan "dispatch X to ds-flash" atau "dispatch X to ds-pro", dan subagent menjalankan tugasnya
176
+ - Jumlah dispatch dan progres waktu nyata ditampilkan di UI tugas Claude Code
177
+ - **Segmen status line HUD**: `⚙dsh 1▶pro 2m14s 21.7k/606 ✓3` (tier saat ini / waktu berjalan / penggunaan token / jumlah selesai)
178
+ - Untuk pengembangan lokal, `statusline/statusline.sh` atau `statusline/worker-segment.sh` dapat diintegrasikan secara terpisah
179
+ - **Tugas berdurasi panjang**: CC punya batas timeout pada panggilan MCP (`MCP_TOOL_TIMEOUT` dapat disesuaikan), untuk tugas panjang orchestrator dapat memakai polling `dsh_spawn_worker` + `dsh_worker_result(wait_seconds)`
180
+ - **Pengembangan dan debugging lokal**: `claude --plugin-dir /path/to/dsh-crew` untuk memuat sementara
181
+
182
+
183
+ ### Perintah sesi
184
+
185
+ Hanya menimpa nilai default global untuk sesi saat ini, dan ditegakkan di lapisan tool, bukan lewat prompt:
186
+
187
+ | Perintah | Fungsinya |
188
+ |---|---|
189
+ | `/dsh-crew:config` | Tampilkan atau setel default sesi: `tier=flash\|pro`, `effort=off\|high\|max`, `mode=auto\|hub\|standalone`, `timeout=<detik>`, `policy=auto\|flash-only\|pro-only`, `escalate=true\|false`, `reset` |
190
+ | `/dsh-crew:on` · `/dsh-crew:off` | Nyalakan atau matikan dispatch untuk sesi ini (mati adalah saklar keras: tool menolak) |
191
+ | `/dsh-crew:status` | Status langsung job worker: tier, progres, token, tool saat ini |
192
+
193
+ ## Codex
194
+
195
+ ### Instalasi
196
+
197
+ Disarankan memakai installer (merender path otomatis untuk mesin ini, menyalin perintah `/dsh-config`, `/dsh-status`):
198
+
199
+ ```bash
200
+ node src/install/cli.mjs codex
201
+ ```
202
+
203
+ Atau salin manual (memerlukan modifikasi path manual setelah menyalin):
204
+
205
+ ```bash
206
+ cp codex/agents/*.toml ~/.codex/agents/ # global or project-level .codex/agents/
207
+ ```
208
+
209
+ File role sudah dikonfigurasi sebelumnya dengan:
210
+
211
+ - Konfigurasi pemasangan server MCP
212
+ - `default_tools_approval_mode = "approve"` (**wajib**, jika tidak, panggilan tool otomatis dibatalkan dalam mode exec)
213
+ - `tool_timeout_sec = 3600`
214
+
215
+ **Catatan**: Saat menyalin manual, path absolut di kolom `args` harus diperbarui agar sesuai dengan lokasi instalasi sebenarnya; installer menanganinya secara otomatis.
216
+
217
+ ### Penggunaan
218
+
219
+ - Di TUI interaktif, pilih "spawn ds-pro to ..." untuk mengirim tugas; panel Active/Done menampilkan progres
220
+ - Mode `codex exec` juga dapat memanggil `dsh_run_worker` secara langsung
221
+
222
+
223
+ ### Perintah sesi
224
+
225
+ Untuk Codex dipasang dua prompt yang sama:
226
+
227
+ | Perintah | Fungsinya |
228
+ |---|---|
229
+ | `/dsh-config` | Tampilkan atau setel default sesi: `tier=flash\|pro`, `effort=off\|high\|max`, `mode=auto\|hub\|standalone`, `timeout=<detik>`, `policy=auto\|flash-only\|pro-only`, `escalate=true\|false`, `reset` |
230
+ | `/dsh-status` | Status langsung job worker: tier, progres, token, tool saat ini |
231
+
232
+ ## Tool MCP
233
+
234
+ | Tool | Deskripsi |
235
+ |---|---|
236
+ | `dsh_run_worker` | Dispatch tugas sinkron (`tier`: flash/pro, `effort`: off/high/max, `cwd`), menunggu hasil |
237
+ | `dsh_spawn_worker` | Dispatch tugas asinkron, mengembalikan job id (untuk fan-out paralel) |
238
+ | `dsh_worker_status` | Kueri progres waktu nyata semua job (turn/langkah/tool saat ini/token) |
239
+ | `dsh_worker_result` | Ambil hasil, dapat menentukan `wait_seconds` untuk menunggu |
240
+ | `dsh_worker_cancel` | Batalkan job tertentu, hentikan proses runtime-nya |
241
+
242
+ Progres secara bersamaan dicerminkan ke `~/.config/dsh-crew/status.d/` (satu file shard per penulis, dapat dibaca oleh statusline / pemantauan eksternal).
243
+
244
+ ## Multimodal: Vision dan Pembuatan Gambar
245
+
246
+ **DeepSeek adalah model khusus teks** dan tidak mendukung input maupun pembuatan gambar. Plugin ini memperoleh kapabilitas tersebut secara eksternal melalui tool MCP:
247
+
248
+ | Tool | Deskripsi |
249
+ |---|---|
250
+ | `describe_image` | Menjawab pertanyaan dengan melihat gambar (screenshot, desain, bagan, dll.), hasil di-cache berdasarkan provider + model + gambar + pertanyaan |
251
+ | `generate_image` | Membuat gambar dari deskripsi teks, menyimpan ke path absolut yang ditentukan; output berupa bitmap datar (memerlukan OpenPencil untuk pengeditan layer) |
252
+
253
+ **Menempel gambar di sesi**: Di DSH, ganti model ke `DeepSeek (vision) ◉` untuk menempel gambar secara langsung. Gambar tetap ada di sesi dan tampil normal; plugin menambahkan teks hasil transkripsi setelahnya dan menghapus gambar sebelum dikirim—Anda melihat gambarnya, model membaca teksnya.
254
+
255
+ ### Konfigurasi
256
+
257
+ Di **halaman pengaturan DSH → DSH Crew → Multimodal** (atau langsung edit `~/.config/dsh-crew/config.json`):
258
+
259
+ **Provider vision** (melihat gambar):
260
+
261
+ - `claude-code` (default, memakai haiku, murah)
262
+ - `codex` (memakai GPT, dapat menentukan model spesifik)
263
+ - `grok` (memakai Grok)
264
+ - `agy` (Antigravity)
265
+ - `custom` (API kompatibel OpenAI atau perintah lokal)
266
+ - `off` (nonaktif)
267
+
268
+ **Provider pembuatan gambar** (pembuatan gambar):
269
+
270
+ - `codex` (`$imagegen`, gpt-image-2)
271
+ - `agy` (Nano Banana)
272
+ - `grok` (Imagine)
273
+ - `custom` (API kompatibel OpenAI atau perintah lokal)
274
+ - `off` (nonaktif)
275
+
276
+ ### Provider Kustom
277
+
278
+ Dua metode integrasi:
279
+
280
+ **API**: Endpoint apa pun yang kompatibel dengan OpenAI
281
+ - Isi Base URL, API Key, daftar model
282
+ - Vision memakai `/chat/completions` dengan gambar base64 inline
283
+ - Pembuatan gambar memakai `/images/generations`
284
+ - **Harus menentukan "model pembuatan gambar" agar punya kapabilitas pembuatan**, jika tidak provider hanya muncul di pilihan vision
285
+
286
+ **CLI**: Template perintah lokal, placeholder diganti dengan referensi yang aman
287
+ - Vision: `{image} {question} {model}` → stdout sebagai jawaban
288
+ - Pembuatan gambar: `{prompt} {output} {size}` → perintah harus menulis file ke `{output}`
289
+ - Isi minimal satu perintah; mana pun yang diisi menentukan kapabilitas
290
+
291
+ **Uji konektivitas**: Setiap provider kustom punya tombol uji
292
+ - API: Periksa keterjangkauan endpoint dan autentikasi, kirim permintaan vision sungguhan untuk verifikasi
293
+ - CLI: Periksa file eksekutabel, jalankan perintah sungguhan untuk verifikasi
294
+ - Pembuatan gambar: Hanya validasi konfigurasi, tanpa output gambar sungguhan
295
+
296
+ **CLI langganan yang dipinjam** (claude / codex / grok / agy) mengharuskan Anda login secara lokal; plugin tidak akan menerobos izin mereka untuk Anda.
297
+
298
+ ## Mode Hub
299
+
300
+ Paket ini juga merupakan DSH bundle yang valid (`dsh.bundle` + `cordis.patch.yml`). Setelah dipasang ke profil DSH Web dengan `dsh plugin add dsh-crew`:
301
+
302
+ - **Sesi worker menjadi warga kelas satu**: berjalan sebagai sesi kelas satu di host DSH (`agents.create` + waterfall model/effort per sesi + preset default), muncul di daftar sesi Web UI, dapat dibuka kapan saja untuk melihat eksekusi lengkap
303
+ - **Kelompokkan menurut direktori kerja**: kelola sesi worker berdasarkan cwd di Web UI
304
+ - **Loopback API**:
305
+ - `POST/GET /_dsh/dsh-crew/jobs`: memulai tugas, daftar, long-poll hasil, membatalkan
306
+ - `GET /_dsh/dsh-crew/ping`: pemeriksaan kesehatan (shim MCP memakai ini untuk mendeteksi apakah hub berjalan)
307
+ - `POST /_dsh/dsh-crew/install`: instalasi sekali klik integrasi Claude Code / Codex (backend dari `src/install/`)
308
+ - **Deteksi otomatis**: shim MCP CC/Codex mendeteksi hub secara otomatis (env var `DSH_CREW_HUB`, default `http://127.0.0.1:3080`)
309
+ - DSH Web berjalan → job masuk mode hub (`mode: "hub"`)
310
+ - Tidak berjalan → fallback ke runtime standalone
311
+
312
+ ## Pemilihan Solusi dan Keterbatasan
313
+
314
+ ### Pelanggan reguler → pendekatan subagent shell (disarankan)
315
+
316
+ - **Kondisi saat ini**: shell subagent Claude Code memakai haiku sebagai perantara; setiap dispatch menambah ratusan hingga ribuan token
317
+ - **Trade-off**: Memakai sedikit token Anthropic sebagai ganti UI tugas bawaan, tampilan progres waktu nyata, tanpa konfigurasi tambahan
318
+ - **Rekomendasi**: Jika Anda sudah berlangganan Claude Pro atau memakai Claude Code, gunakan pendekatan ini—praktis dan transparan
319
+
320
+ ### Lingkungan pay-as-you-go / CI → pendekatan router langsung
321
+
322
+ - **Kondisi saat ini**: frontmatter subagent Claude Code tidak mendukung koneksi model pihak ketiga secara langsung; eksperimen router di scratchpad repo ini memerlukan kredensial API-key untuk Claude Code, tetapi OAuth langganan diblokir di sisi upstream oleh Anthropic dengan 403
323
+ - **Rekomendasi**:
324
+ - Jika memakai kredensial API-key (bukan OAuth) dan ingin menghemat token Anthropic, dapat menjalankan router lokal untuk koneksi DeepSeek langsung
325
+ - Lingkungan CI biasanya juga memakai API key; pendekatan ini lebih ekonomis (semua token DeepSeek)
326
+ - Memerlukan pengujian sendiri untuk integrasi router (tidak didukung secara resmi)
327
+
328
+ ### Menjalankan DSH Web → mode hub aktif otomatis
329
+
330
+ - **Kondisi saat ini**: Jika `dsh plugin add dsh-crew` dipasang ke profil DSH Web, job berjalan sebagai sesi kelas satu di host, muncul di daftar sesi Web UI
331
+ - **Rekomendasi**: Selama iterasi pengembangan lokal, disarankan mengaktifkan mode hub; progres worker dapat diamati sepenuhnya di Web UI; untuk kolaborasi lintas mesin atau lingkungan tanpa Web UI, gunakan pendekatan shell Claude Code / Codex
332
+
333
+ ### Hal yang Diketahui
334
+
335
+ - Role Codex secara teoretis dapat mencoba `model_provider` yang mengarah langsung ke DeepSeek (belum diverifikasi); jembatan ini tidak bergantung padanya
336
+ - Output pembuatan gambar berupa bitmap datar; pengeditan layer memerlukan OpenPencil
337
+ - **Dependensi runtime**: Hanya `@modelcontextprotocol/sdk` dan `zod`; `@deepseek-ai/*` adalah peerDependencies (disediakan oleh host DSH)
338
+ - **Codex wajib dikonfigurasi**: `default_tools_approval_mode = "approve"`, jika tidak panggilan tool otomatis dibatalkan
339
+
340
+ ## Pengembangan
341
+
342
+ ```bash
343
+ pnpm install
344
+ node_modules/.bin/tsdown src/client/index.tsx --format cjs --platform browser \
345
+ --target es2022 --tsconfig tsconfig.client.json --out-dir .client-build --clean
346
+ node scripts/build-client.mjs # wraps the bundle for the DSH module loader
347
+ node scripts/smoke.mjs # dispatches one real flash task end to end
348
+ ```
349
+
350
+ Dependensi runtime hanya `@modelcontextprotocol/sdk` dan `zod`; setiap paket `@deepseek-ai/*` adalah peer dependency yang disediakan oleh host DSH, yang menjaga plugin tetap berada di dalam satu realm modul milik host.
351
+
352
+ ## Ekosistem
353
+
354
+ - [DSH Noema](https://github.com/ZSeven-W/dsh-noema) — memori jangka panjang untuk DSH
355
+ - [DSH OpenPencil](https://github.com/ZSeven-W/dsh-openpencil) — memeriksa dan mengedit dokumen desain `.op` di dalam percakapan
356
+
357
+ ## Lisensi
358
+
359
+ MIT