dsh-plugin-codemode
Verifieddsh-plugin-codemode · v0.1.1 · MIT · Web UI
Pi-style Code Mode for DeepSeek Harness: Programmatic Tool Calling via QuickJS-WASM sandbox
Install
dsh plugin add dsh-plugin-codemode Confirm the layer applied with dsh --profile default --dump-config â see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-plugin-codemode (äžæææ¡£)
English | äžæè¯Žæ
é¢å DeepSeek Harness (DSH) ç Pi 飿 Œ Code ModeïŒçšåºåå·¥å
·çŒæïŒæä»¶ã
å°äŒ ç»åæ¥ ReAct ç O(N) åé¿åŸè¿ïŒèœ¬æ¢äžºå蜮 O(1) åšé犻æ²ç®±äžæ§è¡ç JavaScript çŒæèæ¬ã
â¡ å®æµæ°æ®å¯¹æ¯ïŒæ¬ä» 17 䞪çå®ææ¡£å®æµïŒ
æµè¯æ ·æ¬äžºä»åº docs/ ç®åœäžå
šéš 17 䞪çå® Markdown ææ¡£ïŒå
å« 131 KB ç倧åè¿ç»Žå°èŽŠ known-issues.mdïŒåå§æ»ææ¬é 215,011 å笊ïŒã
æµè¯ä»»å¡ïŒå€æä»¶å¹¶åæ«æïŒæåå
å«âJEV/Polymarket/æ¶æ/è§åâå
³é®å åçç®æ ïŒåšæ²ç®±å
å®æè¡æ°ç»è®¡ãéŠæ®µæ 颿åäžéåºæåºïŒèŸåº Top 5 æèŠã
| è¯æµç»ŽåºŠ | äŒ ç»åæ¥ ReAct äº€äº | Code Mode (æ²ç®±çšåºåçŒæ) | 宿µäŒåå¹ åºŠ |
|---|---|---|---|
| æµå ¥äž»äžäžææ°æ®é | 215,011 å笊 | 676 å笊 | äœç§¯å猩 99.7% (æçŒæ¯ 318:1) |
| äŒ°ç®æ¶è Input Tokens | ~67,191 tokens | ~211 tokens | Token èç 99.7% (åèŽ 6.7 äž tokens) |
| 亀äºåŸè¿èœ®æ¬¡ (Turns) | 19 蜮åŸè¿ | 1 èœ®å®æ | 蜮次åå° 94.7% (æ¶é€ 18 蜮åŸè¿) |
| æ¬å°çº¯ I/O å计ç®èæ¶ | 3.94 ms | 2.76 ms | åºæ¬æå¹³ïŒæ¯«ç§çº§æéïŒ |
| 端å°ç«¯æ»å®æèæ¶ | ~47.5 ç§ (æå蜮æšç 2.5s 计) | ~2.5 ç§ | æé 19 å (èæ¶çŒ©ç 94.7%) |
| äžéŽè®¡ç®äžæåºåç¡®æ§ | 倧äžäžææç®æéæŒå¹»è§ | JS åç Array è¿æ»€æåº | 100% ç¡®å®æ§äž¥æ Œåç¡® |
æ¬å°å€ç°åœä»€ïŒ
node tests/benchmark-codemode-vs-react.mjs
ð¡ 䞺ä»ä¹éèŠ Code ModeïŒ
äŒ ç»å€§æš¡å Agent åšå·¥å ·è°çšäžååšäžå€§çç¹ïŒ
- äžäžæççžïŒæ¹é读å 20 䞪æä»¶ïŒäº§ç 20 äž Token åå§èæ°æ®å¡æ»¡ ContextïŒææåŒåæš¡åæ³šæåæŒç§»æåŒºå¶å猩ã
- é«äº€äºå»¶è¿ïŒæ¯äžäžªç»ç¢çå·¥å ·è°çšéœå¿ é¡»çåŸ äžæ¬¡çœç»äŒ èŸå宿Žçæš¡åæšçåŸè¿ã
- 计ç®å€±çïŒè®©æš¡ååšé¿åºå Prompt äžæ°è¡æ°ãæ¯å€§å°æåæåºïŒç»åžžåºç°æ°æ°å¹»è§äžé»èŸçæŒã
Code Mode çæ žå¿è®Ÿè®¡å²åŠäžå®æ¹èæ¯
âç¡®å®æ§é»èŸåœä»£ç ïŒäžç¡®å®æ§æèåœå€§æš¡åãâïŒPut deterministic things in code, non-deterministic in LLM â Hacker News 瀟åºå ±è¯ïŒ
深床对æ Pi 1.0 (Earendil) 宿¹ Code Mode æ¶æå Cloudflare ç产å®è·µïŒ
- Pi.dev 1.0 宿¹ Codemode ææ¡£ïŒç¡®ç«äºåºäºå åæ²ç®±äžå»¶è¿æŽé²ççšåºåå·¥å ·çŒæïŒProgrammatic Tool CallingïŒæ åã
- Cloudflare / CamelAI ç产æ¡äŸïŒå° Agent 仿²éç VM 容åšè¿ç§»è³ Pi Code Mode + Durable ObjectsïŒå®ç°ææ¬æ°é级äžéäžè¶ äœäº€äºå»¶è¿ã
- Hacker News æ žå¿ç 讚 (#49019301)ïŒå®æµåšå€å·¥å ·/å€æä»¶å·¥äœæµäžïŒæ²ç®±å代ç çŒæçžèŸäºäŒ ç» ReAct 对è¯åŸè¿æé«å¯å®ç° 99.2% çææ¬çŒ©åã
éè¿ Code ModeïŒæš¡ååªéèŠçŒåäžæ®µç®çç JavaScript åŒæ¥åœæ°ãèæ¬åšåæ§æ²ç®±å å¹¶è¡è°çšå类宿䞻å MCP å·¥å ·ïŒçŽæ¥åšå åå®æè¿æ»€ãæž æŽåæåºïŒä» å°æç»æçŒçç»æåæ°æ®è¿åäŒè¯åå²ã
ð æ¶æææ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â DeepSeek Harness (DSH) â
â â
â ââââââââââââââââââââââââ ââââââââââââââââââââââââ â
â â LLM äŒè¯äž»äžäžæ â â ctx.tools / MCP â â
â â (Main Context) â â (read, pwsh, mcp..) â â
â ââââââââââââ¬ââââââââââââ ââââââââââââ²ââââââââââââ â
â â script â â
â ⌠â invoke â
â âââââââââââââââââââââââââââââââââââââââââââŽâââââââââââ â
â â dsh-plugin-codemode (Cordis åšææä»¶) â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â åæ žé犻æ²ç®± (Dual-Engine Sandbox) â â â
â â â â â â
â â â ⢠V8 VM åŒæ (é»è®€): åçé«éãæ å
åäžé â â â
â â â ⢠QuickJS-WASM: WebAssembly 纯å
åé犻 â â â
â â â â â â
â â â - Proxy: åšææ å° tools.<tool_name>(args) â â â
â â â - æ¯æ Promise.all çæ£å¹¶å â â â
â â â - 60s 硬è¶
æ¶çææºå¶ â â â
â â â - æŠæªèªæéåœè°çš â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââ â â
â ââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââ â
â â ä»
è¿å粟çŒç»æ â
â ⌠â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â è¿åäž»äžäžæ: [Logs] + [Return Value] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âš æ žå¿ç¹æ§
- ð åæ žæ²ç®±æ¯æïŒ
- V8 VM åŒæ (
engine: 'vm', é»è®€)ïŒäž DSH 宿¹å·¥äœæµ PTC æ¶æå¯¹éœïŒ0 é¢å€å ååŒéïŒæ¯æä»»æå€§æä»¶ååäžé«å¹¶åã - QuickJS WASM åŒæ (
engine: 'quickjs')ïŒèœ»é级 WebAssembly 纯å åæ²ç®±ïŒé¶ Node/OS åçæŽé²ã
- V8 VM åŒæ (
- ð å
šå±éæå·¥å
·ä»£çäžé¶åŒéèªçïŒ
- åçæ å° DSH å
šéšå
眮工å
· (
read,edit,pwsh,glob) äž MCP å·¥å · (mcp__github__*,mcp__cua*,mcp__tavily__*)ã - é¶ Token æç€ºè¯åºåªæ¢æ¥ïŒæ éåšå¯¹è¯äžäžæå¡å
¥äžçŸäžªå·¥å
·çèè¿ SchemaïŒ
tools.list()ïŒç§çº§è·åå åäžå·²æèœœçå·¥å ·åç§°æ°ç»ãtools.help('namePattern')ïŒåšæ²ç®±å åéæéèªçåæ°å®ä¹äžè¯ŽæïŒèç 90% 以äžç³»ç»æç€ºè¯åºåªã
- åçæ å° DSH å
šéšå
眮工å
· (
- ð¡ ååºå®å
šé²æ€ïŒ
- 60 ç§ç¡¬è¶ æ¶çææºå¶ïŒæ»åŸªç¯èªåšéæ¯æ²ç®±ã
- éåœè°çšæŠæªïŒçŠæ¢åšèæ¬å
å¥åšè°çš
codemodeèªèº«ã - 50,000 å笊溢åºä¿æ€ïŒè¶ é¿èŸåºèªåšå®å šæªæã
- ðŠ é¶å ¥äŸµå¯åæ»ïŒäžæ¹åš DSH ä»»äœç³»ç»æ žå¿æä»¶ïŒçº¯é çœ®çº§å€ææä»¶ã
ð å žåèæ¬ç€ºäŸ
1. æ¹é倿件并快æäžæçŒ
// åæ¶æ«æ src ç®åœäžæææä»¶å¹¶æå富åºåœæ°
const files = await tools.glob({ path: 'src', pattern: '**/*.ts' });
const results = await Promise.all(files.slice(0, 10).map(async (file) => {
const code = await tools.read({ file_path: file });
const exportedFns = code.match(/export (?:async )?function \w+/g) || [];
return { file, count: exportedFns.length, functions: exportedFns };
}));
// æå¯Œåºæ°ééåºæåïŒä»
è¿åå 3 䞪
return results.sort((a, b) => b.count - a.count).slice(0, 3);
2. é¶ Token åšæèªçäžæé MCP çŒæ
// åšæ²ç®±å
åšææ¢æµå·¥å
·ïŒæ éåæš¡åæŽé² 140+ 䞪ç¹å€ç JSON Schema
const available = tools.list();
console.log(`åœå掻è·å·¥å
·æ°: ${available.length}`);
// ä»
åšéèŠæ¶æéæ¥é
æäžªå·¥å
·çå
¥åææ¡£
const prHelp = tools.help('github__list_pull_requests');
console.log(prHelp);
// éè¿ GitHub MCP æå PR å衚并åšå
åäžæçŒ
const prs = await tools.mcp__github__list_pull_requests({
owner: 'deepseek-ai',
repo: 'deepseek-harness',
state: 'open'
});
return prs.map(pr => ({
number: pr.number,
title: pr.title,
user: pr.user?.login
}));
ð å®è£ äžå¯çš
æ¹åŒ AïŒdsh plugin addïŒæšèïŒ
dsh plugin add dsh-plugin-codemode
å
å
声æäº dsh.bundle.patchïŒcordis.patch.ymlïŒïŒå®è£
åšäŒèªåšæå®¿äž»è¡æè¿äœ ç profileïŒ
æ éæå·¥çŒèŸãéå¯ DSH å codemode å·¥å
·å³åºç°ã
æ¹åŒ BïŒéè¿ npm æåšå®è£
è¿å
¥äœ ç DSH profile ç®åœïŒåŠ ~/.dsh/profiles/webïŒïŒ
pnpm add dsh-plugin-codemode
# æ: npm install dsh-plugin-codemode
ç¶åèªè¡ææèœœé¡¹å å° ~/.dsh/profiles/web/cordis.patch.ymlïŒ
- insert:
- id: plugin-codemode
name: 'dsh-plugin-codemode'
config: # å
šéšå¯éïŒçç¥å³çšé»è®€åŒ
toolName: 'codemode'
engine: 'vm' # 'vm' (é»è®€) æ 'quickjs'
maxResultChars: 50000
timeoutMs: 60000
injectGuidance: true
æ¹åŒ CïŒæºç æ¬å°åŒåå®è£
git clone https://github.com/Yum-wu/dsh-plugin-codemode.git
cd dsh-plugin-codemode
npm install
npm run build
åš DSH web profile äŸèµäžå£°æïŒ~/.dsh/profiles/web/package.jsonïŒïŒ
{
"dependencies": {
"dsh-plugin-codemode": "link:C:/Users/Yum/Desktop/dsh-plugin-codemode"
}
}
åæãæ¹åŒ Bãæ·»å æèœœé¡¹ã
éå¯ DSH
åšæ¡é¢éè¿ãæå¡ç®¡çå°ãç¹å»é坿å¡å³å¯ã倧暡åå°èªåšè·åŸ codemode å·¥å
·å对åºäœ¿çšæåŒã
âïž é çœ®é¡¹åæ°
| é çœ®åæ° | æ°æ®ç±»å | é»è®€åŒ | 诊ç»è¯Žæ |
|---|---|---|---|
toolName |
string |
'codemode' |
泚åå¹¶æŽé²ç»å€§æš¡åçå·¥å ·åç§°ã |
engine |
'vm' | 'quickjs' |
'vm' |
æ²ç®±åŒæéæ©ïŒé«é V8 åç VM æ WASM 纯å åæ²ç®±ã |
maxResultChars |
number |
50000 |
è¿åç»æš¡åäž»äžäžæçæå€§å笊äžéã |
timeoutMs |
number |
60000 |
èæ¬åæ¬¡æ§è¡çç¡¬è¶ æ¶çææ¶éïŒæ¯«ç§ïŒã |
injectGuidance |
boolean |
true |
æ¯åŠåæš¡åç³»ç»æç€ºè¯èªåšæ³šå ¥ Code Mode çŒææåã |
autoReasoning |
boolean |
false |
æ¯åŠæ¥ç®¡æèæ¡£äœ (Auto Reasoning Effort)ïŒå¿ é¡»æŸåŒåŒå¯ïŒè§äžèã |
ð§ èªéåºæèæ¡£äœ (Auto Reasoning Effort)
ææš¡åé
眮éç reasoningEffort åæåšå
µåŒ autoïŒå¹¶å𿬿件é
眮éæåŒ autoReasoning: trueïŒ
æä»¶äŒæåœåä»»å¡çå€æåºŠïŒåšè¯¥æš¡åç宿¯æçæ¡£äœé¶æ¢¯å
æåœ±åºäžäžªåæ³æ¡£äœåå请æ±ã
# cordis.patch.yml
- id: agent-default-model
name: "@deepseek-ai/dsh-agent-default-model"
config:
provider: opencodex
model: google-antigravity/gemini-3.8-flash
reasoningEffort: auto # <- åšå
µ
- id: plugin-codemode
name: 'dsh-plugin-codemode'
config:
autoReasoning: true # <- äžæåŒå°±å®å
šäžä»å
¥
䞀䞪æ¡ä»¶çŒºäžäžå¯ïŒåªå auto èäžåŒ autoReasoningïŒauto äŒåæ ·äº€ç»å®¿äž»å¹¶æ
UNSUPPORTED_REASONING_EFFORTïŒåªåŒ autoReasoning èæ¡£äœäžæ¯ autoïŒçšæ·æéè¿ã
æäŒè¯ header éå·²åçå
·äœåŒïŒïŒæä»¶äžåŸæŸè¡äžç¢°ã
| èŠç¹ | 诎æ |
|---|---|
| çæäœçœ® | æåš cordis ç agent/request waterfall äžïŒ{global, prepend}ïŒïŒè¿ååŒçŽæ¥åç» llm.prepareCallã |
䞺ä»ä¹äžèœæ llm/stream |
飿¡æµæ°Žçº¿ç options 对 agent-loop è¯·æ±æ¯ deepFreeze çïŒäž cordis ç next(x) 応ç¥å®åïŒæ¹äžåšã |
| æ¡£äœæ¥æº | ctx.llm.resolveModelInfo(provider, model).reasoning.effortsïŒå³æš¡åèªå·±çé¶æ¢¯ïŒäžç¡¬çŒç ã |
| è¯åå£åŸ | ç¡®å®æ§å
³é®è¯å级 1â10ïŒauto-reasoning.tsïŒïŒå¹¶å/æ»é/èµé飿§=9ïŒæšå¯Œ/éæ=7ïŒåžžè§åŒå=5ïŒæ¥åžžé®ç=2ã |
| å åº | æ¿äžå°é¶æ¢¯æ resolveModelInfo æéæ¶ïŒçç¥ reasoningEffort 让暡åçšèªå·±çé»è®€æ¡£ïŒç»äžæ auto 亀å宿䞻ã |
| ç¶æå¯è§ | åªè¯»è·¯ç± GET /api/codemode.auto-effort?sessionId=<id>ïŒèµ°å®¿äž»å
±äº« /api ééïŒååæºéŽæä¿æ€ïŒïŒèŸå
¥æ¡åºæ è¶åæ¯ 3s 蜮询ã |
| äŒè¯é犻 | å³çæ sessionId åœæ¡£ïŒLRUïŒäžé 50ïŒè§ AUTO_DECISION_CAPïŒãagent/request æ¯å
šå±çåžïŒæ©å
çšå䞪暡å级åéå"æè¿äžæ¡"ïŒå¯ŒèŽææäŒè¯çè¶åæŸç€ºåäžæ¡è®°åœãäŒè¯ id åèª payload.agent.idïŒåäžå°åéå ctx.get('agents').currentInitiator() ââ çå®å®¿äž»åå°ç蜜è·åªæ {turn, step, signal}ïŒæä»¥å®é
çæçæ¯ initiator 飿¡è·¯ïŒç«¯ç¹çš lastAgentSource åæ¥èµ°äºåªæ¡ïŒã |
è®©æš¡åæŸååšåºç° Auto
æŸååšçæ¡£äœèåå®å
šææš¡å声æç reasoningEfforts çæïŒæä»¥å¿
é¡»æ auto åè¿å»ïŒ
èåéæäŒæè¿äžé¡¹ïŒ
- id: google-antigravity/gemini-3.8-flash
reasoningEfforts:
auto: auto # <- æŸååšéå€åº "auto" è¿äžé¡¹
low: low
medium: medium
high: high
åš dsh-0.2.0-rc.2 äžå®æµïŒ2026-10-04ïŒïŒå£°æ auto: auto åæŸååšç¡®å®åºç° AutoïŒ
éäžåååŸ agent/request ç reasoningEffort å°±æ¯ 'auto'ïŒæä»¶åšè¯·æ±åºç«åæå®æ¢æåæ³æ¡£äœïŒ
è¶åé乿æåœ±ç»æå绿/é»/红/玫ã
â ïž
autoäžæ¯ DSH çæ¡£äœé®ïŒåæ³éè¿éååªæoff/minimal/low/medium/high/xhigh/maxïŒïŒ å®åšè¿éåªæ¯äžäžªæŸååšåšå µïŒå¿ é¡»ç±æ¬æä»¶æ¹åæãç»äžèœè®©autoççèœå°llm.prepareCallââ æä»¶çå åºè·¯åŸæ¯çç¥è¯¥å段ïŒèäžæ¯æå®äº€åå»ã
ð äžçº§é¶é£é©åæ»çç¥
| åæ»çº§å« | è§Šååºæ¯ | æäœæ¥éª€ | æ¢å€èæ¶ | 圱åé¢ |
|---|---|---|---|---|
| Level 1ïŒç§çº§èœ¯çŠçš - æšèïŒ | æš¡åè°çšäžçš³å®/颿å€è¡šç° | åš cordis.patch.yml 该æ¡ç®äžè®Ÿçœ® disabled: true å¹¶éå¯ DSHã |
< 15 ç§ | ç«å³æ³šé codemodeïŒæ çŒæ¢å€äŒ ç»åæ¥è°çšã |
| Level 2ïŒè¿è¡æ¶å蜚éçº§ïŒ | èæ¬è¯æ³éææ§è¡è¶ æ¶ | å šèªåšïŒæä»¶æè·æ¥éå¹¶è¿åæç€ºïŒæš¡åèªåšå®æ¶é级è³åæ¥ ReActã | 0 ç§ (宿¶) | åœåäŒè¯äžäžæïŒå®å šå¹³æ»è¿æž¡ã |
| Level 3ïŒç©ç圻åºç§»é€ïŒ | é¿æäžåéèŠ/æž çç¯å¢ | å é€ cordis.patch.yml äž package.json äžçé
眮æ¡ç®åæä»¶ç®åœã |
< 15 ç§ | 0 è¿è¡æ¶ç迹ïŒ0 æ®çé 眮ã |
𧪠èªåšåæµè¯éªè¯
npm test
æ§è¡å šéèªåšååå æµè¯ïŒ21 äŸïŒïŒ
Promise.allæ¹éå€å·¥å ·å¹¶åæ§è¡éªè¯ã- éåœè°çšèªèº«æŠæªéªè¯ã
- åçå®å šæ²ç®±éçŠ»æ§æ£éªïŒç»æ Node è¿çš/æä»¶ç宿䞻æéæ³é²ïŒã
- èŸåºé¿ææ¬å®å šæªæäžæ ŒåŒåã
- æ»åŸªç¯è¶ æ¶åŒºå¶äžæã
- çšçå® cordis è°åºŠåšéªè¯
autoåšå µæ¹åïŒé¶æ¢¯æåœ±ãprepend顺åºã䞀æ¡å åºè·¯åŸïŒã - äŒè¯çº§å³çé犻ãåœæ¡£äžéã以å
currentInitiator()éåè·¯åŸã
ð åŒæºåè®®
MIT © Yum-wu