@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.th.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>ปลั๊กอินสำหรับ <a href="https://github.com/deepseek-ai/deepseek-harness">DeepSeek Harness</a>: ส่งงานให้ DSH agents จาก Claude Code / Codex โดยไม่ต้องสละ subagent UI ดั้งเดิมของโฮสต์</strong><br />
9
+ <sub>UI แสดงความคืบหน้าแบบเนทีฟ &bull; นโยบาย Tier และการยกระดับ &bull; เซสชัน DSH ในโฮสต์ &bull; การดูภาพและการสร้างภาพ &bull; ติดตั้งในคลิกเดียว</sub>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <sub>GitHub: <code>Ran-sh/dsh-crew</code> &middot; เวอร์ชันปลั๊กอินปัจจุบัน: <code>0.1.0-rc.1</code> &middot; ทดสอบกับ DSH <code>0.1.0-rc.6</code></sub>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <a href="./README.md"><b>English</b></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"><b>ไทย</b></a> &middot; <a href="./README.vi.md">Tiếng Việt</a> &middot; <a href="./README.id.md">Bahasa Indonesia</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>หน้า settings ของ DSH Crew — การเชื่อมต่อโฮสต์ นโยบายการส่งงาน การทำงาน และสะพาน multimodal</sub></p>
30
+
31
+ ## ทำไมต้อง DSH Crew
32
+
33
+ DSH Crew เป็นปลั๊กอินสำหรับ [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH) — agent harness แบบโอเพนซอร์ส มันทำให้ DSH agents ถูกสั่งงานจาก Claude Code และ Codex ได้: orchestrator คงใช้โมเดลของตัวเอง งานรันบน DSH agent จริงพร้อม tools, sandbox, presets และ session history ของ harness นั้น และโฮสต์ยังคงแสดงผลเป็น subagent แบบเนทีฟพร้อมความคืบหน้าแบบเรียลไทม์
34
+
35
+ สิ่งที่รันงานคือ DSH agent ไม่ใช่การเรียกโมเดลเปล่าๆ Tier (`flash` / `pro`) กำหนดว่า agent นั้นจะได้ capability มากแค่ไหนจาก roster โมเดลที่ตั้งค่าไว้ใน harness — ปัจจุบันคือ DeepSeek V4 Flash และ V4 Pro — ดังนั้นการเปลี่ยนโมเดลใน DSH ไม่ต้องแก้ไขอะไรที่นี่
36
+
37
+ <table>
38
+ <tr>
39
+ <td width="50%">
40
+
41
+ ### 🧵 UI แสดงความคืบหน้าแบบเนทีฟ
42
+
43
+ Workers ปรากฏเป็น subagent ปกติใน Claude Code / Codex — จำนวนงานที่ส่ง ขั้นตอนที่กำลังรัน การเรียก tool และการใช้ token แสดงทั้งหมดใน task panel ของโฮสต์เอง พร้อมด้วย claude-hud statusline segment: `⚙dsh 1▶pro 2m14s 21.7k/606 ✓3`
44
+
45
+ </td>
46
+ <td width="50%">
47
+
48
+ ### 🎚️ นโยบาย Tier และการยกระดับ
49
+
50
+ `flash` สำหรับงานเชิงกลไก `pro` สำหรับงานที่ต้องใช้เหตุผล `effort` ตั้งแต่ `off` ถึง `max` `tier_policy` บังคับให้ทุกการส่งงานใช้ tier เดียวที่ tool layer ได้ และ `escalate_on_failure` จะลองรัน flash ที่ล้มเหลวซ้ำบน pro อีกครั้ง — อิงจากหลักฐานจริง ไม่ใช่การเดาความยากล่วงหน้า
51
+
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td width="50%">
56
+
57
+ ### 🏛️ เซสชัน DSH ในโฮสต์
58
+
59
+ เมื่อติดตั้ง bundle ลงใน DSH profile แล้ว worker แต่ละตัวคือ DSH session ชั้นหนึ่ง: มองเห็นได้ใน Web UI จัดกลุ่มตาม working directory และติดตั้งด้วย Agent preset ที่คุณเลือกตาม tier หาก DSH ไม่ได้รันอยู่ การส่งงานจะ fallback ไปยัง DSH runtime แบบ standalone ทำให้ CI และสภาพแวดล้อมแบบ headless ยังทำงานได้
60
+
61
+ </td>
62
+ <td width="50%">
63
+
64
+ ### 👁️ การดูภาพและการสร้างภาพ
65
+
66
+ โมเดลของ DSH รองรับเฉพาะข้อความ `describe_image` และ `generate_image` ยืมตาและพู่กันจาก CLI ที่คุณมีอยู่แล้ว — Claude, Codex, Grok, Antigravity — หรือจาก OpenAI-compatible API ใดๆ ที่คุณตั้งค่าไว้ ภาพที่วางเข้ามายังมองเห็นได้ในบทสนทนาและไปถึงโมเดลในรูปของข้อความ
67
+
68
+ </td>
69
+ </tr>
70
+ <tr>
71
+ <td width="50%">
72
+
73
+ ### 🔌 ผู้ให้บริการแบบกำหนดเอง
74
+
75
+ นำ endpoint ของคุณเอง (Base URL + API key + models) หรือ command template ในเครื่องมาใช้ ผู้ให้บริการแต่ละรายมีการทดสอบการเชื่อมต่อที่ตรวจสอบการเข้าถึงและ auth จากนั้นส่งคำขอ vision จริงหนึ่งครั้ง เพื่อให้คุณรู้ผลทันที ไม่ใช่กลางคันของงาน
76
+
77
+ </td>
78
+ <td width="50%">
79
+
80
+ ### 📦 ติดตั้งในคลิกเดียว
81
+
82
+ หน้า settings ติดตั้งและอัปเดตปลั๊กอิน Claude Code และไฟล์ role ของ Codex ให้คุณ — การลงทะเบียน marketplace, allowlist สิทธิ์, การต่อสาย HUD, absolute path ที่สร้างสำหรับเครื่องนี้ — และกู้คืนได้ง่ายพอๆ กัน ไฟล์ settings ทุกไฟล์ถูกสำรองก่อนเสมอ
83
+
84
+ </td>
85
+ </tr>
86
+ </table>
87
+
88
+ ## วิธีการทำงาน
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
+ ## หนึ่งการรัน สองมุมมอง
100
+
101
+ การ dispatch ขยายออกได้กว้าง ด้านล่างมี worker สิบแปดตัวแปล README นี้พร้อมกัน: ฝั่ง host นับพวกมันเป็น subagent ของตัวเอง ส่วน harness รันพวกมันเป็นเซสชันจริง
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>ใน Claude Code worker ของ dsh-crew ปรากฏเป็น subagent ดั้งเดิม และส่วน statusline แสดง tier ที่กำลังทำงาน เวลาที่ใช้ และ 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>แผง DSH Crew แสดงการรันเดียวกันจากฝั่ง harness: host ใดส่งงานไหน tier และ effort ความคืบหน้าแบบเรียลไทม์ และการใช้ token</sub></p>
112
+
113
+ ## การติดตั้ง
114
+
115
+ ติดตั้งจาก GitHub ลงในโปรไฟล์ 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
+ หรือสำหรับการพัฒนาในเครื่องจากซอร์ส:
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
+ โปรโตคอล `link:` จะ symlink dependency ของโปรไฟล์มาที่รีโพนี้ ทำให้ผลการ rebuild เห็นได้ทันที
132
+
133
+ ### ตั้งค่าข้อมูลรับรองของ DeepSeek (เฉพาะ standalone)
134
+
135
+ ในโหมด hub — การติดตั้งข้างบน — worker รันภายใน DSH instance และใช้ข้อมูลรับรอง DeepSeek ที่มีการตั้งค่าไว้แล้ว ไม่ต้องตั้งค่าอะไรเพิ่มเติม
136
+
137
+ เฉพาะ standalone fallback เท่านั้นที่ต้องใช้ key ของตัวเอง: การส่งงานจาก Claude Code / Codex โดยไม่มี DSH instance ทำงานจะเปิดตัว worker runtime เป็นกระบวนการแยกต่างหาก ขอ API key จาก [platform.deepseek.com](https://platform.deepseek.com) และเขียนลงใน `~/.config/dsh-crew/.env`:
138
+
139
+ ```
140
+ DEEPSEEK_API_KEY=sk-...
141
+ ```
142
+
143
+ ### ตรวจสอบ
144
+
145
+ ```bash
146
+ node scripts/smoke.mjs
147
+ ```
148
+
149
+ smoke test ส่งงาน job หนึ่งอันราคาถูกผ่านเส้นทางใดๆ ที่มีอยู่ — hub เมื่อ DSH instance ทำงานอยู่ standalone ในกรณีอื่น — และพิมพ์เส้นทางที่ใช้ ภายในประมาณสิบวินาที คุณควรเห็น `smoke test passed — configuration OK` เมื่อล้มเหลว เหตุผลจะถูกพิมพ์ ซึ่งกำหนดไว้สำหรับเส้นทางที่ทดสอบ
150
+
151
+ จากนั้นเปิด การตั้งค่า → DSH Crew แล้วติดตั้งการเชื่อมต่อ Claude Code / Codex ได้ในคลิกเดียว
152
+
153
+ ## ความเป็นมาและคำศัพท์
154
+
155
+ - **DSH** (DeepSeek Harness): agent harness โอเพนซอร์สของ DeepSeek เป็น code agent ในรูปแบบ Web UI คล้ายกับ Claude Code แต่ขับเคลื่อนด้วยโมเดลของ DeepSeek
156
+ - **MCP** (Model Context Protocol): โปรโตคอลเชื่อมต่อเครื่องมือ AI ของ Anthropic ช่วยให้ LLM เรียกเครื่องมือภายนอกและแหล่งข้อมูลได้อย่างปลอดภัย
157
+ - **Cordis bundle**: รูปแบบปลั๊กอินของ DSH โปรเจกต์นี้รันแบบ standalone เป็น MCP service ได้ หรือติดตั้งลงใน DSH Web เป็นโหมด hub
158
+ - **tier**: ระดับ capability — worker จะได้รับช่องไหนจาก roster โมเดลที่ตั้งค่าไว้ใน DSH `flash` เร็วและถูก (งานง่าย) `pro` ใช้เหตุผลลึกกว่า (ปัญหาซับซ้อน) ปัจจุบันจับคู่กับ DeepSeek V4 Flash และ V4 Pro หากเปลี่ยนโมเดลใน DSH ที่นี่ก็ไม่ต้องแก้ไขอะไร
159
+ - **worker**: DSH agent ที่ทำงาน — เป็น session เต็มรูปแบบพร้อม tools, sandbox และ preset ของตัวเอง ไม่ใช่การเรียกโมเดลเปล่าๆ
160
+ - **effort**: ระดับความเข้มข้นของการใช้เหตุผล `off` = ไม่ใช้เหตุผล `high` = ลงทุนการใช้เหตุผลสูง `max` = ลงทุนการใช้เหตุผลสูงสุด
161
+
162
+ ## Claude Code
163
+
164
+ ### การติดตั้ง
165
+
166
+ ติดตั้งในคลิกเดียว (เลือกอย่างใดอย่างหนึ่ง):
167
+
168
+ - **หน้า settings ของ DSH** (เมื่อติดตั้งโหมด hub แล้ว): Settings → DSH Crew → "Install to Claude Code"
169
+ - **บรรทัดคำสั่ง**: `node src/install/cli.mjs all`
170
+
171
+ ทั้งสองวิธีทำสิ่งเดียวกัน: ลงทะเบียน marketplace ในเครื่อง (ไดเรกทอรีแม่ `dsh-plugins/` เป็น marketplace root) + `claude plugin install` + allowlist สิทธิ์ของ MCP tool + ตั้งค่า claude-hud worker status segment (สำรอง settings.json อัตโนมัติก่อนแก้ไข และรันซ้ำได้โดยปลอดภัย) **รีสตาร์ท session หลังติดตั้งเพื่อให้การเปลี่ยนแปลงมีผล**
172
+
173
+ ### วิธีใช้งาน
174
+
175
+ - ในบทสนทนาโดยตรง พูดว่า "dispatch X to ds-flash" หรือ "dispatch X to ds-pro" แล้ว subagent จะรันงานนั้น
176
+ - จำนวนงานที่ส่งและความคืบหน้าแบบเรียลไทม์แสดงใน task UI ของ Claude Code
177
+ - **HUD status line segment**: `⚙dsh 1▶pro 2m14s 21.7k/606 ✓3` (tier ปัจจุบัน / เวลาที่ผ่านไป / การใช้ token / จำนวนที่เสร็จ)
178
+ - สำหรับการพัฒนาในเครื่อง `statusline/statusline.sh` หรือ `statusline/worker-segment.sh` สามารถเชื่อมต่อแยกอิสระได้
179
+ - **งานที่รันนาน**: CC มีการจำกัด timeout ของการเรียก MCP (ปรับ `MCP_TOOL_TIMEOUT` ได้) งานที่ยาวสามารถให้ orchestrator ใช้ `dsh_spawn_worker` + `dsh_worker_result(wait_seconds)` เพื่อ polling ได้
180
+ - **การพัฒนาและดีบักในเครื่อง**: `claude --plugin-dir /path/to/dsh-crew` เพื่อโหลดชั่วคราว
181
+
182
+
183
+ ### คำสั่งระดับเซสชัน
184
+
185
+ แทนที่ค่าเริ่มต้นระดับ global เฉพาะเซสชันปัจจุบัน และบังคับใช้ที่ชั้นเครื่องมือ ไม่ใช่ด้วยพรอมป์ต์:
186
+
187
+ | คำสั่ง | ทำอะไร |
188
+ |---|---|
189
+ | `/dsh-crew:config` | ดูหรือตั้งค่าเริ่มต้นของเซสชัน: `tier=flash\|pro`, `effort=off\|high\|max`, `mode=auto\|hub\|standalone`, `timeout=<วินาที>`, `policy=auto\|flash-only\|pro-only`, `escalate=true\|false`, `reset` |
190
+ | `/dsh-crew:on` · `/dsh-crew:off` | เปิดหรือปิดการ dispatch ของเซสชันนี้ (ปิดคือสวิตช์แข็ง เครื่องมือจะปฏิเสธ) |
191
+ | `/dsh-crew:status` | สถานะสดของงาน worker: tier ความคืบหน้า tokens และเครื่องมือปัจจุบัน |
192
+
193
+ ## Codex
194
+
195
+ ### การติดตั้ง
196
+
197
+ แนะนำให้ใช้ตัวติดตั้ง (สร้าง path สำหรับเครื่องนี้โดยอัตโนมัติ และคัดลอกคำสั่ง `/dsh-config`, `/dsh-status`):
198
+
199
+ ```bash
200
+ node src/install/cli.mjs codex
201
+ ```
202
+
203
+ หรือคัดลอกด้วยตนเอง (ต้องแก้ไข path เองหลังคัดลอก):
204
+
205
+ ```bash
206
+ cp codex/agents/*.toml ~/.codex/agents/ # global or project-level .codex/agents/
207
+ ```
208
+
209
+ ไฟล์ role ถูกตั้งค่าไว้ล่วงหน้าด้วย:
210
+
211
+ - การตั้งค่าการ mount MCP server
212
+ - `default_tools_approval_mode = "approve"` (**จำเป็น** มิฉะนั้น tool calls จะถูกยกเลิกอัตโนมัติใน exec mode)
213
+ - `tool_timeout_sec = 3600`
214
+
215
+ **หมายเหตุ**: เมื่อคัดลอกด้วยตนเอง absolute path ในฟิลด์ `args` ต้องอัปเดตให้ตรงกับตำแหน่งติดตั้งจริง ตัวติดตั้งจัดการส่วนนี้ให้อัตโนมัติ
216
+
217
+ ### วิธีใช้งาน
218
+
219
+ - ใน TUI แบบอินเทอร์แอกทีฟ เลือก "spawn ds-pro to ..." เพื่อส่งงาน แผง Active/Done แสดงความคืบหน้า
220
+ - โหมด `codex exec` เรียก `dsh_run_worker` ได้โดยตรงเช่นกัน
221
+
222
+
223
+ ### คำสั่งระดับเซสชัน
224
+
225
+ ฝั่ง Codex ติดตั้งพรอมป์ต์สองตัวเดียวกัน:
226
+
227
+ | คำสั่ง | ทำอะไร |
228
+ |---|---|
229
+ | `/dsh-config` | ดูหรือตั้งค่าเริ่มต้นของเซสชัน: `tier=flash\|pro`, `effort=off\|high\|max`, `mode=auto\|hub\|standalone`, `timeout=<วินาที>`, `policy=auto\|flash-only\|pro-only`, `escalate=true\|false`, `reset` |
230
+ | `/dsh-status` | สถานะสดของงาน worker: tier ความคืบหน้า tokens และเครื่องมือปัจจุบัน |
231
+
232
+ ## เครื่องมือ MCP
233
+
234
+ | เครื่องมือ | คำอธิบาย |
235
+ |---|---|
236
+ | `dsh_run_worker` | ส่งงานแบบ synchronous (`tier`: flash/pro, `effort`: off/high/max, `cwd`) และรอผลลัพธ์ |
237
+ | `dsh_spawn_worker` | ส่งงานแบบ asynchronous คืน job id (สำหรับ fan-out แบบขนาน) |
238
+ | `dsh_worker_status` | สอบถามความคืบหน้าแบบเรียลไทม์ของทุก job (turn/step/tool ปัจจุบัน/token) |
239
+ | `dsh_worker_result` | ดึงผลลัพธ์ ระบุ `wait_seconds` เพื่อรอได้ |
240
+ | `dsh_worker_cancel` | ยกเลิก job ที่ระบุ พร้อมยุติ runtime process ของมัน |
241
+
242
+ ความคืบหน้าจะถูก mirror ไปยัง `~/.config/dsh-crew/status.d/` พร้อมกัน (หนึ่งไฟล์ shard ต่อผู้เขียนหนึ่งราย statusline / ระบบ monitoring ภายนอกอ่านได้)
243
+
244
+ ## Multimodal: การดูภาพและการสร้างภาพ
245
+
246
+ **DeepSeek เป็นโมเดลแบบข้อความล้วน** ไม่รองรับการรับภาพหรือการสร้างภาพ ปลั๊กอินนี้ดึง capability เหล่านี้จากภายนอกผ่าน MCP tools:
247
+
248
+ | เครื่องมือ | คำอธิบาย |
249
+ |---|---|
250
+ | `describe_image` | ตอบคำถามด้วยการดูภาพ (screenshots, ดีไซน์, แผนภูมิ ฯลฯ) ผลลัพธ์ถูกแคชตาม provider + model + image + question |
251
+ | `generate_image` | สร้างภาพจากคำอธิบายข้อความ บันทึกไปยัง absolute path ที่ระบุ ผลลัพธ์เป็น bitmap แบบแบน (ต้องใช้ OpenPencil เพื่อแก้ไขเลเยอร์) |
252
+
253
+ **การวางภาพใน session**: ใน DSH ให้สลับโมเดลเป็น `DeepSeek (vision) ◉` เพื่อวางภาพโดยตรง ภาพยังคงอยู่ใน session และแสดงผลตามปกติ ปลั๊กอินจะต่อท้ายข้อความที่ถอดความแล้วไว้หลังภาพและตัดภาพออกก่อนส่ง—คุณเห็นภาพ โมเดลอ่านข้อความ
254
+
255
+ ### การตั้งค่า
256
+
257
+ ใน **หน้า settings ของ DSH → DSH Crew → Multimodal** (หรือแก้ไข `~/.config/dsh-crew/config.json` โดยตรง):
258
+
259
+ **Vision provider** (การดูภาพ):
260
+
261
+ - `claude-code` (ค่าเริ่มต้น ใช้ haiku ราคาประหยัด)
262
+ - `codex` (ใช้ GPT ระบุโมเดลเฉพาะได้)
263
+ - `grok` (ใช้ Grok)
264
+ - `agy` (Antigravity)
265
+ - `custom` (OpenAI-compatible API หรือคำสั่งในเครื่อง)
266
+ - `off` (ปิดใช้งาน)
267
+
268
+ **Image generation provider** (การสร้างภาพ):
269
+
270
+ - `codex` (`$imagegen`, gpt-image-2)
271
+ - `agy` (Nano Banana)
272
+ - `grok` (Imagine)
273
+ - `custom` (OpenAI-compatible API หรือคำสั่งในเครื่อง)
274
+ - `off` (ปิดใช้งาน)
275
+
276
+ ### ผู้ให้บริการแบบกำหนดเอง
277
+
278
+ มีสองวิธีในการเชื่อมต่อ:
279
+
280
+ **API**: endpoint ที่รองรับ OpenAI ใดก็ได้
281
+ - กรอก Base URL, API Key และรายการ models
282
+ - Vision ใช้ `/chat/completions` พร้อมภาพ base64 แบบ inline
283
+ - การสร้างภาพใช้ `/images/generations`
284
+ - **ต้องระบุ "image generation model" จึงจะสร้างภาพได้** มิฉะนั้น provider จะปรากฏเฉพาะในตัวเลือก vision เท่านั้น
285
+
286
+ **CLI**: command template ในเครื่อง โดย placeholder จะถูกแทนที่ด้วยการอ้างอิงที่ปลอดภัย
287
+ - Vision: `{image} {question} {model}` → stdout เป็นคำตอบ
288
+ - การสร้างภาพ: `{prompt} {output} {size}` → คำสั่งต้องเขียนไฟล์ไปยัง `{output}`
289
+ - กรอกอย่างน้อยหนึ่งคำสั่ง คำสั่งไหนถูกกรอกจะเป็นตัวกำหนด capability
290
+
291
+ **การทดสอบการเชื่อมต่อ**: ผู้ให้บริการแบบกำหนดเองแต่ละรายมีปุ่มทดสอบ
292
+ - API: ตรวจสอบการเข้าถึง endpoint และ auth พร้อมส่งคำขอ vision จริงเพื่อยืนยัน
293
+ - CLI: ตรวจสอบไฟล์ปฏิบัติการ และรันคำสั่งจริงเพื่อยืนยัน
294
+ - การสร้างภาพ: ตรวจสอบ config เท่านั้น ไม่มีการสร้างภาพจริง
295
+
296
+ **CLI ที่ยืมมาจาก subscription** (claude / codex / grok / agy) กำหนดให้คุณต้องล็อกอินในเครื่องก่อน ปลั๊กอินจะไม่เลี่ยงการตรวจสอบสิทธิ์ของ CLI เหล่านั้นให้คุณ
297
+
298
+ ## โหมด Hub
299
+
300
+ แพ็กเกจนี้ยังเป็น DSH bundle ที่สมบูรณ์ด้วย (`dsh.bundle` + `cordis.patch.yml`) หลังจากติดตั้งลงใน DSH Web profile ด้วย `dsh plugin add dsh-crew`:
301
+
302
+ - **Worker sessions กลายเป็นพลเมืองชั้นหนึ่ง**: รันเป็น session ชั้นหนึ่งในโฮสต์ DSH (`agents.create` + model/effort waterfall ต่อ session + preset เริ่มต้น) ปรากฏในรายการ session ของ Web UI เปิดดูการทำงานทั้งหมดได้ทุกเมื่อ
303
+ - **จัดระเบียบตาม working directory**: จัดการ worker sessions ตาม cwd ใน Web UI
304
+ - **Loopback API**:
305
+ - `POST/GET /_dsh/dsh-crew/jobs`: สร้างงาน แสดงรายการ long-poll ผลลัพธ์ ยกเลิก
306
+ - `GET /_dsh/dsh-crew/ping`: ตรวจสุขภาพ (MCP shim ใช้ endpoint นี้ตรวจจับว่า hub ทำงานอยู่หรือไม่)
307
+ - `POST /_dsh/dsh-crew/install`: ติดตั้งการเชื่อมต่อ Claude Code / Codex ในคลิกเดียว (backend ของ `src/install/`)
308
+ - **การตรวจจับอัตโนมัติ**: MCP shim ของ CC/Codex ตรวจจับ hub โดยอัตโนมัติ (env var `DSH_CREW_HUB` ค่าเริ่มต้น `http://127.0.0.1:3080`)
309
+ - DSH Web ทำงานอยู่ → jobs เข้าสู่โหมด hub (`mode: "hub"`)
310
+ - ไม่ได้ทำงานอยู่ → fallback ไปยัง runtime แบบ standalone
311
+
312
+ ## การเลือกแนวทางและข้อจำกัด
313
+
314
+ ### ผู้ใช้แบบ subscription ทั่วไป → แนวทาง shell subagent (แนะนำ)
315
+
316
+ - **สถานะปัจจุบัน**: Claude Code subagent shell ใช้ haiku เป็นตัวกลาง การส่งงานแต่ละครั้งเพิ่ม token หลายร้อยถึงหลายพัน
317
+ - **ข้อแลกเปลี่ยน**: ใช้ Anthropic token จำนวนเล็กน้อย แลกกับ task UI แบบเนทีฟ การแสดงความคืบหน้าแบบเรียลไทม์ และไม่ต้องตั้งค่าเพิ่มเติม
318
+ - **ข้อแนะนำ**: หากคุณสมัคร Claude Pro อยู่แล้วหรือใช้ Claude Code อยู่ ให้ใช้แนวทางนี้—สะดวกและโปร่งใส
319
+
320
+ ### สภาพแวดล้อมแบบจ่ายตามการใช้งาน / CI → แนวทาง direct router
321
+
322
+ - **สถานะปัจจุบัน**: frontmatter ของ Claude Code subagent ไม่รองรับการเชื่อมต่อโมเดลบุคคลที่สามโดยตรง การทดลอง router ใน scratchpad ของ repo นี้ต้องใช้ credentials แบบ API-key สำหรับ Claude Code แต่ OAuth แบบ subscription ถูก Anthropic บล็อกไว้ต้นทางด้วย 403
323
+ - **ข้อแนะนำ**:
324
+ - หากใช้ credentials แบบ API-key (ไม่ใช่ OAuth) และต้องการประหยัด Anthropic token สามารถรัน router ในเครื่องเพื่อเชื่อมต่อ DeepSeek ได้โดยตรง
325
+ - สภาพแวดล้อม CI มักใช้ API keys เช่นกัน แนวทางนี้ประหยัดกว่า (ใช้ DeepSeek token ทั้งหมด)
326
+ - ต้องทดสอบการเชื่อมต่อ router ด้วยตนเอง (ไม่ได้รับการสนับสนุนอย่างเป็นทางการ)
327
+
328
+ ### เมื่อ DSH Web ทำงานอยู่ → โหมด hub เปิดใช้อัตโนมัติ
329
+
330
+ - **สถานะปัจจุบัน**: หากติดตั้ง `dsh plugin add dsh-crew` ลงใน DSH Web profile แล้ว jobs จะรันเป็น session ชั้นหนึ่งในโฮสต์และปรากฏในรายการ session ของ Web UI
331
+ - **ข้อแนะนำ**: ระหว่างการพัฒนาในเครื่อง แนะนำให้เปิดโหมด hub เพราะสามารถสังเกตความคืบหน้าของ worker ได้ครบถ้วนใน Web UI สำหรับการทำงานร่วมกันข้ามเครื่องหรือสภาพแวดล้อมที่ไม่มี Web UI ให้ใช้แนวทาง Claude Code / Codex shell
332
+
333
+ ### เรื่องที่ทราบอยู่แล้ว
334
+
335
+ - ในทางทฤษฎี Codex role สามารถลองชี้ `model_provider` ไปยัง DeepSeek ได้โดยตรง (ยังไม่ผ่านการตรวจสอบ) สะพานเชื่อมนี้ไม่ได้พึ่งพาสิ่งนั้น
336
+ - ผลลัพธ์ของการสร้างภาพเป็น bitmap แบบแบน การแก้ไขเลเยอร์ต้องใช้ OpenPencil
337
+ - **Runtime dependencies**: มีเพียง `@modelcontextprotocol/sdk` และ `zod` เท่านั้น `@deepseek-ai/*` เป็น peerDependencies (จัดหาโดย DSH host)
338
+ - **Codex ต้องตั้งค่า**: `default_tools_approval_mode = "approve"` มิฉะนั้น tool calls จะถูกยกเลิกอัตโนมัติ
339
+
340
+ ## การพัฒนา
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
+ Runtime dependencies มีเพียง `@modelcontextprotocol/sdk` และ `zod` เท่านั้น ทุกแพ็กเกจ `@deepseek-ai/*` เป็น peer dependency ที่ DSH host จัดหาให้ ซึ่งทำให้ปลั๊กอินอยู่ใน module realm เดียวกันของโฮสต์
351
+
352
+ ## ระบบนิเวศ
353
+
354
+ - [DSH Noema](https://github.com/ZSeven-W/dsh-noema) — หน่วยความจำระยะยาวสำหรับ DSH
355
+ - [DSH OpenPencil](https://github.com/ZSeven-W/dsh-openpencil) — ตรวจดูและแก้ไขเอกสารดีไซน์ `.op` ภายในบทสนทนา
356
+
357
+ ## สัญญาอนุญาต
358
+
359
+ MIT