@hermenics/deepseek-code 0.2.9 → 0.2.10

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 (2) hide show
  1. package/dist/cli.mjs +2 -2
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -1120,7 +1120,7 @@ ${i}`,M++}else Ja0(k,E,b)?A=k.slice(k.charCodeAt(E+6)===$X?E+7:E+6,f)||void 0:B(
1120
1120
  `,E),S=-1;if(f!==-1&&b!==-1?S=f<b?f:b:f!==-1?f===k.length-1?S=-1:S=f:b!==-1&&(S=b),S===-1)break;B(k,E,S),E=S+1,k.charCodeAt(E-1)===aG6&&k.charCodeAt(E)===Da0&&E++}return k.slice(E)}function B(k,E,f){if(E===f){I();return}let b=k.charCodeAt(E);if(Ka0(k,E,b)){let y0=k.charCodeAt(E+5)===$X?E+6:E+5,d=k.slice(y0,f);O=M===0?d:`${O}
1121
1121
  ${d}`,M++;return}if(Ja0(k,E,b)){A=k.slice(k.charCodeAt(E+6)===$X?E+7:E+6,f)||void 0;return}if(b===105&&k.charCodeAt(E+1)===100&&k.charCodeAt(E+2)===58){let y0=k.slice(k.charCodeAt(E+3)===$X?E+4:E+3,f);G=y0.includes("\x00")?void 0:y0;return}if(b===58){if(Y){let y0=k.slice(E,f);Y(y0.slice(k.charCodeAt(E+1)===$X?2:1))}return}let S=k.slice(E,f),i=S.indexOf(":");if(i===-1){j(S,"",S);return}let y=S.slice(0,i),l=S.charCodeAt(i+1)===$X?2:1,P0=S.slice(i+l);j(y,P0,S)}function j(k,E,f){switch(k){case"event":A=E||void 0;break;case"data":O=M===0?E:`${O}
1122
1122
  ${E}`,M++;break;case"id":G=E.includes("\x00")?void 0:E;break;case"retry":/^\d+$/.test(E)?J(parseInt(E,10)):K(new QI(`Invalid \`retry\` value: "${E}"`,{type:"invalid-retry",value:E,line:f}));break;default:K(new QI(`Unknown field "${k.length>20?`${k.slice(0,20)}\u2026`:k}"`,{type:"unknown-field",field:k,value:E,line:f}));break}}function I(){M>0&&D({id:G,event:A,data:O}),G=void 0,O="",M=0,A=void 0}function v(k={}){if(k.consume&&q.length>0){let E=q.join("");B(E,0,E.length)}W=!0,G=void 0,O="",M=0,A=void 0,q.length=0,H=0,P=!1}return{feed:N,reset:v}}function Ka0($,D,K){return K===100&&$.charCodeAt(D+1)===97&&$.charCodeAt(D+2)===116&&$.charCodeAt(D+3)===97&&$.charCodeAt(D+4)===58}function Ja0($,D,K){return K===101&&$.charCodeAt(D+1)===118&&$.charCodeAt(D+2)===101&&$.charCodeAt(D+3)===110&&$.charCodeAt(D+4)===116&&$.charCodeAt(D+5)===58}var QI,Da0=10,aG6=13,$X=32;var za0=R(()=>{QI=class QI extends Error{constructor($,D){super($),this.name="ParseError",this.type=D.type,this.field=D.field,this.value=D.value,this.line=D.line}}});var _80;var qa0=R(()=>{za0();_80=class _80 extends TransformStream{constructor({onError:$,onRetry:D,onComment:K,maxBufferSize:J}={}){let Y;super({start(z){Y=Ya0({onEvent:(q)=>{z.enqueue(q)},onError(q){typeof $=="function"&&$(q),($==="terminate"||q.type==="max-buffer-size-exceeded")&&z.error(q)},onRetry:D,onComment:K,maxBufferSize:J})},transform(z){Y.feed(z)}})}}});class F80{constructor($,D){this._hasCompletedAuthFlow=!1,this._url=$,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=D?.requestInit,this._authProvider=D?.authProvider,this._fetch=D?.fetch,this._fetchWithInit=yo0(D?.fetch,D?.requestInit),this._sessionId=D?.sessionId,this._reconnectionOptions=D?.reconnectionOptions??tG6}async _authThenStart(){if(!this._authProvider)throw new qY("No auth provider");let $;try{$=await MN(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(D){throw this.onerror?.(D),D}if($!=="AUTHORIZED")throw new qY;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let $={};if(this._authProvider){let K=await this._authProvider.tokens();if(K)$.Authorization=`Bearer ${K.access_token}`}if(this._sessionId)$["mcp-session-id"]=this._sessionId;if(this._protocolVersion)$["mcp-protocol-version"]=this._protocolVersion;let D=wI(this._requestInit?.headers);return new Headers({...$,...D})}async _startOrAuthSse($){let{resumptionToken:D}=$;try{let K=await this._commonHeaders();if(K.set("Accept","text/event-stream"),D)K.set("last-event-id",D);let J=await(this._fetch??fetch)(this._url,{method:"GET",headers:K,signal:this._abortController?.signal});if(!J.ok){if(await J.body?.cancel(),J.status===401&&this._authProvider)return await this._authThenStart();if(J.status===405)return;throw new DX(J.status,`Failed to open SSE stream: ${J.statusText}`)}this._handleSseStream(J.body,$,!0)}catch(K){throw this.onerror?.(K),K}}_getNextReconnectionDelay($){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let D=this._reconnectionOptions.initialReconnectionDelay,K=this._reconnectionOptions.reconnectionDelayGrowFactor,J=this._reconnectionOptions.maxReconnectionDelay;return Math.min(D*Math.pow(K,$),J)}_scheduleReconnection($,D=0){let K=this._reconnectionOptions.maxRetries;if(D>=K){this.onerror?.(Error(`Maximum reconnection attempts (${K}) exceeded.`));return}let J=this._getNextReconnectionDelay(D);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse($).catch((Y)=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${Y instanceof Error?Y.message:String(Y)}`)),this._scheduleReconnection($,D+1)})},J)}_handleSseStream($,D,K){if(!$)return;let{onresumptiontoken:J,replayMessageId:Y}=D,z,q=!1,H=!1;(async()=>{try{let G=$.pipeThrough(new TextDecoderStream).pipeThrough(new _80({onRetry:(A)=>{this._serverRetryMs=A}})).getReader();while(!0){let{value:A,done:P}=await G.read();if(P)break;if(A.id)z=A.id,q=!0,J?.(A.id);if(!A.data)continue;if(!A.event||A.event==="message")try{let N=lW.parse(JSON.parse(A.data));if(dq(N)){if(H=!0,Y!==void 0)N.id=Y}this.onmessage?.(N)}catch(N){this.onerror?.(N)}}if((K||q)&&!H&&this._abortController&&!this._abortController.signal.aborted)this._scheduleReconnection({resumptionToken:z,onresumptiontoken:J,replayMessageId:Y},0)}catch(G){if(this.onerror?.(Error(`SSE stream disconnected: ${G}`)),(K||q)&&!H&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:z,onresumptiontoken:J,replayMessageId:Y},0)}catch(A){this.onerror?.(Error(`Failed to reconnect: ${A instanceof Error?A.message:String(A)}`))}}})()}async start(){if(this._abortController)throw Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth($){if(!this._authProvider)throw new qY("No auth provider");if(await MN(this._authProvider,{serverUrl:this._url,authorizationCode:$,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new qY("Failed to authorize")}async close(){if(this._reconnectionTimeout)clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0;this._abortController?.abort(),this.onclose?.()}async send($,D){try{let{resumptionToken:K,onresumptiontoken:J}=D||{};if(K){this._startOrAuthSse({resumptionToken:K,replayMessageId:yP($)?$.id:void 0}).catch((M)=>this.onerror?.(M));return}let Y=await this._commonHeaders();Y.set("content-type","application/json"),Y.set("accept","application/json, text/event-stream");let z={...this._requestInit,method:"POST",headers:Y,body:JSON.stringify($),signal:this._abortController?.signal},q=await(this._fetch??fetch)(this._url,z),H=q.headers.get("mcp-session-id");if(H)this._sessionId=H;if(!q.ok){let M=await q.text().catch(()=>null);if(q.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new DX(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:A,scope:P}=P80(q);if(this._resourceMetadataUrl=A,this._scope=P,await MN(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new qY;return this._hasCompletedAuthFlow=!0,this.send($)}if(q.status===403&&this._authProvider){let{resourceMetadataUrl:A,scope:P,error:N}=P80(q);if(N==="insufficient_scope"){let F=q.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===F)throw new DX(403,"Server returned 403 after trying upscoping");if(P)this._scope=P;if(A)this._resourceMetadataUrl=A;if(this._lastUpscopingHeader=F??void 0,await MN(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!=="AUTHORIZED")throw new qY;return this.send($)}}throw new DX(q.status,`Error POSTing to endpoint: ${M}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,q.status===202){if(await q.body?.cancel(),Cp0($))this._startOrAuthSse({resumptionToken:void 0}).catch((M)=>this.onerror?.(M));return}let G=(Array.isArray($)?$:[$]).filter((M)=>("method"in M)&&("id"in M)&&M.id!==void 0).length>0,O=q.headers.get("content-type");if(G)if(O?.includes("text/event-stream"))this._handleSseStream(q.body,{onresumptiontoken:J},!1);else if(O?.includes("application/json")){let M=await q.json(),A=Array.isArray(M)?M.map((P)=>lW.parse(P)):[lW.parse(M)];for(let P of A)this.onmessage?.(P)}else throw await q.body?.cancel(),new DX(-1,`Unexpected content type: ${O}`);else await q.body?.cancel()}catch(K){throw this.onerror?.(K),K}}get sessionId(){return this._sessionId}async terminateSession(){if(!this._sessionId)return;try{let $=await this._commonHeaders(),D={...this._requestInit,method:"DELETE",headers:$,signal:this._abortController?.signal},K=await(this._fetch??fetch)(this._url,D);if(await K.body?.cancel(),!K.ok&&K.status!==405)throw new DX(K.status,`Failed to terminate session: ${K.statusText}`);this._sessionId=void 0}catch($){throw this.onerror?.($),$}}setProtocolVersion($){this._protocolVersion=$}get protocolVersion(){return this._protocolVersion}async resumeStream($,D){await this._startOrAuthSse({resumptionToken:$,onresumptiontoken:D?.onresumptiontoken})}}var tG6,DX;var Xa0=R(()=>{iq();$a0();qa0();tG6={initialReconnectionDelay:1000,maxReconnectionDelay:30000,reconnectionDelayGrowFactor:1.5,maxRetries:2};DX=class DX extends Error{constructor($,D){super(`Streamable HTTP error: ${D}`);this.code=$}}});import{readFile as sG6,writeFile as Za0,readdir as eG6}from"fs/promises";async function f4($){return JSON.parse(await sG6($,"utf-8"))}async function GG($,D){await Za0($,JSON.stringify(D,null,2),"utf-8")}async function XY($,D){await Za0($,D,"utf-8")}async function jI($,D){try{return(await eG6(D)).filter((J)=>$.test(J))}catch{return[]}}var N$=()=>{};import{join as Wa0}from"path";import{homedir as $w6}from"os";import{mkdir as Dw6,appendFile as Kw6}from"fs/promises";import{randomBytes as Jw6}from"crypto";async function qw6(){if(Ha0)return;await Dw6(Ga0,{recursive:!0}),Ha0=!0}async function p7($){try{await qw6();let D=JSON.stringify({ts:new Date().toISOString(),...$})+`
1123
- `;await Kw6(zw6,D,"utf-8")}catch{}}var Ga0,Yw6,zw6,Ha0=!1;var T80=R(()=>{Ga0=Wa0($w6(),".deepseek","logs"),Yw6=`${Date.now()}-${Jw6(3).toString("hex")}`,zw6=Wa0(Ga0,`session-${Yw6}.jsonl`)});var _7;var wG=R(()=>{_7={name:"@hermenics/deepseek-code",version:"0.2.9",description:"An AI-powered coding assistant that lives in your terminal",keywords:["ai","cli","deepseek","coding-assistant","terminal","tui"],license:"Apache-2.0",type:"module",bin:{deepseek:"dist/deepseek"},files:["dist/","README.md","LICENSE"],repository:{type:"git",url:"git+https://github.com/Hermenics/deepseek-code.git"},bugs:{url:"https://github.com/Hermenics/deepseek-code/issues"},homepage:"https://github.com/Hermenics/deepseek-code#readme",publishConfig:{access:"public"},engines:{node:">=18",bun:">=1.0"},scripts:{start:"NODE_ENV=development bun src/index.tsx",dev:"NODE_ENV=development bun --watch src/index.tsx",build:"bun run build.ts",typecheck:"bunx tsc --noEmit",test:"bun test"},dependencies:{"@alcalzone/ansi-tokenize":"^0.3.0","@aws-crypto/sha256-js":"^5.2.0","@aws-sdk/client-bedrock":"^3.1048.0","@aws-sdk/credential-providers":"^3.1048.0","@modelcontextprotocol/sdk":"^1.29.0","@smithy/protocol-http":"^5.3.14","@smithy/signature-v4":"^5.3.14","@types/semver":"^7.7.1","auto-bind":"^5.0.1","bidi-js":"^1.0.3",chalk:"^5.6.2","cli-boxes":"^4.0.1","code-excerpt":"^4.0.0","emoji-regex":"^10.6.0",execa:"^9.6.1","fast-glob":"^3.3.3","fuse.js":"^7.0.0","get-east-asian-width":"^1.6.0","google-auth-library":"^10.6.2","indent-string":"^5.0.0","lodash-es":"^4.18.1",openai:"^6.34.0",react:"^19.2.0","react-reconciler":"^0.33.0",semver:"^7.8.1","signal-exit":"^4.1.0","stack-utils":"^2.0.6","strip-ansi":"^7.2.0","supports-hyperlinks":"^4.4.0","type-fest":"^5.6.0","usehooks-ts":"^3.1.1","wrap-ansi":"^10.0.0"},overrides:{"node-fetch":"npm:undici@^7.0.0"},devDependencies:{"@types/bun":"^1.3.12","@types/react":"^19.2.0","@types/stack-utils":"^2.0.3","react-devtools-core":"^7.0.1",typescript:"^5.9.3",vitest:"^4.1.6"}}});import{join as Zw6}from"path";function ww6($,D){let K={...$};for(let[J,Y]of Object.entries(D)){if(Hw6.has(J))continue;K[J]=Y}return K}function Ow6($){if($.trim()==="")throw Error("MCP command cannot be empty");if(Gw6.test($))throw Error(`MCP command contains path traversal: ${$}`);if(Ww6.test($))throw Error(`MCP command contains shell injection characters: ${$}`)}function Mw6($,D){return{type:"mcp_server_load",serverName:$,transport:D}}async function Aw6(){let $=Zw6(process.cwd(),".deepseek","mcp.json");try{return await f4($)}catch{return null}}async function wa0(){let $=await Aw6();if(!$?.servers)return{tools:[],errors:[]};let D=[],K=[];for(let[J,Y]of Object.entries($.servers))try{if(Y.transport==="stdio")Ow6(Y.command);let z=new z80({name:"deepseek-code",version:_7.version}),q=Y.transport==="stdio"?new Z80({command:Y.command,args:Y.args??[],env:ww6(Object.fromEntries(Object.entries(process.env).filter((W)=>W[1]!==void 0)),Y.env??{})}):new F80(new URL(Y.url));await z.connect(q),await p7(Mw6(J,Y.transport));let{tools:H}=await z.listTools();for(let W of H)D.push({name:`${J}__${W.name}`,description:`[MCP:${J}] ${W.description??""}`,parameters:W.inputSchema,async execute(G){return(await Promise.race([z.callTool({name:W.name,arguments:G}),new Promise((P,N)=>setTimeout(()=>N(Error(`MCP tool '${W.name}' timed out after 30s`)),30000))])).content.filter((P)=>P.type==="text"&&P.text).map((P)=>P.text).join(`
1123
+ `;await Kw6(zw6,D,"utf-8")}catch{}}var Ga0,Yw6,zw6,Ha0=!1;var T80=R(()=>{Ga0=Wa0($w6(),".deepseek","logs"),Yw6=`${Date.now()}-${Jw6(3).toString("hex")}`,zw6=Wa0(Ga0,`session-${Yw6}.jsonl`)});var _7;var wG=R(()=>{_7={name:"@hermenics/deepseek-code",version:"0.2.10",description:"An AI-powered coding assistant that lives in your terminal",keywords:["ai","cli","deepseek","coding-assistant","terminal","tui"],license:"Apache-2.0",type:"module",bin:{deepseek:"dist/deepseek"},files:["dist/","README.md","LICENSE"],repository:{type:"git",url:"git+https://github.com/Hermenics/deepseek-code.git"},bugs:{url:"https://github.com/Hermenics/deepseek-code/issues"},homepage:"https://github.com/Hermenics/deepseek-code#readme",publishConfig:{access:"public"},engines:{node:">=18",bun:">=1.0"},scripts:{start:"NODE_ENV=development bun src/index.tsx",dev:"NODE_ENV=development bun --watch src/index.tsx",build:"bun run build.ts",typecheck:"bunx tsc --noEmit",test:"bun test"},dependencies:{"@alcalzone/ansi-tokenize":"^0.3.0","@aws-crypto/sha256-js":"^5.2.0","@aws-sdk/client-bedrock":"^3.1048.0","@aws-sdk/credential-providers":"^3.1048.0","@modelcontextprotocol/sdk":"^1.29.0","@smithy/protocol-http":"^5.3.14","@smithy/signature-v4":"^5.3.14","@types/semver":"^7.7.1","auto-bind":"^5.0.1","bidi-js":"^1.0.3",chalk:"^5.6.2","cli-boxes":"^4.0.1","code-excerpt":"^4.0.0","emoji-regex":"^10.6.0",execa:"^9.6.1","fast-glob":"^3.3.3","fuse.js":"^7.0.0","get-east-asian-width":"^1.6.0","google-auth-library":"^10.6.2","indent-string":"^5.0.0","lodash-es":"^4.18.1",openai:"^6.34.0",react:"^19.2.0","react-reconciler":"^0.33.0",semver:"^7.8.1","signal-exit":"^4.1.0","stack-utils":"^2.0.6","strip-ansi":"^7.2.0","supports-hyperlinks":"^4.4.0","type-fest":"^5.6.0","usehooks-ts":"^3.1.1","wrap-ansi":"^10.0.0"},overrides:{"node-fetch":"npm:undici@^7.0.0"},devDependencies:{"@types/bun":"^1.3.12","@types/react":"^19.2.0","@types/stack-utils":"^2.0.3","react-devtools-core":"^7.0.1",typescript:"^5.9.3",vitest:"^4.1.6"}}});import{join as Zw6}from"path";function ww6($,D){let K={...$};for(let[J,Y]of Object.entries(D)){if(Hw6.has(J))continue;K[J]=Y}return K}function Ow6($){if($.trim()==="")throw Error("MCP command cannot be empty");if(Gw6.test($))throw Error(`MCP command contains path traversal: ${$}`);if(Ww6.test($))throw Error(`MCP command contains shell injection characters: ${$}`)}function Mw6($,D){return{type:"mcp_server_load",serverName:$,transport:D}}async function Aw6(){let $=Zw6(process.cwd(),".deepseek","mcp.json");try{return await f4($)}catch{return null}}async function wa0(){let $=await Aw6();if(!$?.servers)return{tools:[],errors:[]};let D=[],K=[];for(let[J,Y]of Object.entries($.servers))try{if(Y.transport==="stdio")Ow6(Y.command);let z=new z80({name:"deepseek-code",version:_7.version}),q=Y.transport==="stdio"?new Z80({command:Y.command,args:Y.args??[],env:ww6(Object.fromEntries(Object.entries(process.env).filter((W)=>W[1]!==void 0)),Y.env??{})}):new F80(new URL(Y.url));await z.connect(q),await p7(Mw6(J,Y.transport));let{tools:H}=await z.listTools();for(let W of H)D.push({name:`${J}__${W.name}`,description:`[MCP:${J}] ${W.description??""}`,parameters:W.inputSchema,async execute(G){return(await Promise.race([z.callTool({name:W.name,arguments:G}),new Promise((P,N)=>setTimeout(()=>N(Error(`MCP tool '${W.name}' timed out after 30s`)),30000))])).content.filter((P)=>P.type==="text"&&P.text).map((P)=>P.text).join(`
1124
1124
  `)}})}catch(z){let q=`MCP server '${J}': ${z.message}`;K.push(q)}return{tools:D,errors:K}}var Hw6,Ww6,Gw6;var Oa0=R(()=>{So0();vo0();Xa0();N$();T80();wG();Hw6=new Set(["PATH","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","HOME","USER","SHELL","PYTHONPATH","NODE_OPTIONS","NODE_PATH","BUN_INSTALL"]),Ww6=/[;|`<>]|&&|\|\||\$\(|>>|<</,Gw6=/\.\.[/\\]/});import{readFile as Vw6}from"fs/promises";async function Aa0($){if(!$.length)return"";let D=await Ma0.default($,{cwd:process.cwd(),ignore:["**/node_modules/**","**/.git/**"],dot:!0,absolute:!0}),K=[];for(let J of D)try{let Y=await Vw6(J,"utf-8"),q=Y.length>B80?Y.slice(0,B80)+`
1125
1125
 
1126
1126
  ...(truncated \u2014 file exceeds ${B80} chars)`:Y;K.push(`// File: ${J}
@@ -1427,7 +1427,7 @@ ${a0.join(`
1427
1427
  /plugin update <name> update a plugin to latest`}]);else if(j0.action==="error")T((X0)=>[...X0,{role:"assistant",content:`Error: ${j0.message}`}]);else if(j0.action==="list"){b(!0);try{let{loadInstalledPlugins:X0}=await Promise.resolve().then(() => (bN(),xN)),M0=X0();if(!M0.length)T((x0)=>[...x0,{role:"assistant",content:"No plugins installed. Use /plugin install <owner/repo> to add one."}]);else{let x0=M0.map((a0)=>{let n0=a0.entry.components,t0=[];if(n0.commands.length)t0.push(`${n0.commands.length} cmd`);if(n0.agents.length)t0.push(`${n0.agents.length} agents`);if(n0.skills.length)t0.push(`${n0.skills.length} skills`);if(n0.hasHooks)t0.push("hooks");return` ${a0.entry.name} (${a0.entry.repo}) [${t0.join(", ")}]`});T((a0)=>[...a0,{role:"assistant",content:`Installed plugins:
1428
1428
  ${x0.join(`
1429
1429
  `)}`}])}}catch(X0){T((M0)=>[...M0,{role:"assistant",content:`\u2717 ${X0.message}`}])}finally{b(!1)}}else if(j0.action==="install"){T((X0)=>[...X0,{role:"assistant",content:`Installing plugin from ${j0.repo}...`}]),b(!0);try{let{installPlugin:X0}=await Promise.resolve().then(() => (bN(),xN)),M0=await X0(j0.repo);if(M0.ok)T((x0)=>[...x0,{role:"assistant",content:`\u2713 Plugin '${M0.name}' installed successfully.`}]);else T((x0)=>[...x0,{role:"assistant",content:`\u2717 ${M0.error}`}])}catch(X0){T((M0)=>[...M0,{role:"assistant",content:`\u2717 ${X0.message}`}])}finally{b(!1)}}else if(j0.action==="remove"){b(!0);try{let{removePlugin:X0}=await Promise.resolve().then(() => (bN(),xN)),M0=await X0(j0.name);if(M0.ok)T((x0)=>[...x0,{role:"assistant",content:`\u2713 Plugin '${M0.name}' removed.`}]);else T((x0)=>[...x0,{role:"assistant",content:`\u2717 ${M0.error}`}])}catch(X0){T((M0)=>[...M0,{role:"assistant",content:`\u2717 ${X0.message}`}])}finally{b(!1)}}else if(j0.action==="update"){T((X0)=>[...X0,{role:"assistant",content:`Updating plugin '${j0.name}'...`}]),b(!0);try{let{updatePlugin:X0}=await Promise.resolve().then(() => (bN(),xN)),M0=await X0(j0.name);if(M0.ok)T((x0)=>[...x0,{role:"assistant",content:`\u2713 Plugin '${M0.name}' updated.`}]);else T((x0)=>[...x0,{role:"assistant",content:`\u2717 ${M0.error}`}])}catch(X0){T((M0)=>[...M0,{role:"assistant",content:`\u2717 ${X0.message}`}])}finally{b(!1)}}return}case"unknown":T((X0)=>[...X0,{role:"assistant",content:j0.input}]);return}if(await Qt0(r0),r0.trimStart().startsWith("!")){let X0=r0.trimStart().slice(1).trim();if(!X0)return;T((x0)=>[...x0,{role:"user",content:r0}]),b(!0),E("terminal"),j("");let M0="";try{let x0=l5("sh",["-c",X0],{reject:!1});Y6.current=x0;let a0=(V8)=>{M0+=V8,j(M0)};x0.stdout?.on("data",(V8)=>a0(V8.toString())),x0.stderr?.on("data",(V8)=>a0(V8.toString()));let n0=await x0;Y6.current=null;let t0=n0.exitCode!==0?`
1430
- [exited with code ${n0.exitCode}]`:"";T((V8)=>[...V8,{role:"terminal",content:(M0||"(no output)")+t0}])}catch(x0){Y6.current=null,T((a0)=>[...a0,{role:"terminal",content:`Error: ${x0.message}`}])}j(""),E("assistant"),b(!1);return}T((X0)=>[...X0,{role:"user",content:r0}]),b(!0),G8("refining"),j(""),await C(r0)},[m0,f,a,C]);M.current=B0;let S0=process.stdout.rows||24,F8=p||z0||g||N0||i0?0:Math.max(0,S0-5);return P6.jsxDEV(A0,{flexDirection:"column",width:"100%",children:[P6.jsxDEV(A0,{minHeight:F8,children:P6.jsxDEV(A0,{flexDirection:"column",children:[P6.jsxDEV(Pt0,{messages:F,streamText:B,thinkingText:I,streamRole:k,theme:P8,activeAgent:d,headerProvider:W,headerAgent:G},void 0,!1,void 0,this),S&&P6.jsxDEV(_t0,{tool:S},void 0,!1,void 0,this),t.current.agents.length>0&&P6.jsxDEV(d80,{agents:t.current.agents,theme:P8},void 0,!1,void 0,this),P6.jsxDEV(Nt0,{},void 0,!1,void 0,this),f&&P6.jsxDEV(L60,{toolCallCount:K8,phase:I0},void 0,!1,void 0,this),r8.length>0&&P6.jsxDEV(Ss0,{messages:r8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),P6.jsxDEV(A0,{flexDirection:"column",flexShrink:0,children:[g?P6.jsxDEV(hs0,{currentTheme:P8,onSelect:(r0)=>{x(r0),Y?.(r0),u(!1)},onCancel:()=>u(!1)},void 0,!1,void 0,this):z0?P6.jsxDEV(us0,{currentModel:m0.model,models:s,onSelect:(r0)=>{m0.setModel(r0),T((j0)=>[...j0,{role:"assistant",content:`Model switched to ${r0}`}]),W0(!1)},onCancel:()=>W0(!1)},void 0,!1,void 0,this):p?P6.jsxDEV(ms0,{currentLevel:m0.effortLevel,onSelect:(r0)=>{let j0={low:"Quick, straightforward responses",high:"Comprehensive responses with extensive thinking",max:"Maximum reasoning depth (best with deepseek-reasoner)"};m0.setEffortLevel(r0),T((X0)=>[...X0,{role:"assistant",content:`Effort: ${r0} \u2014 ${j0[r0]}`}]),G0(!1)},onCancel:()=>G0(!1)},void 0,!1,void 0,this):N0?P6.jsxDEV(ds0,{currentLanguage:z??null,onDone:(r0)=>{m0.setLanguage(r0),T60({LANGUAGE:r0}),T((j0)=>[...j0,{role:"assistant",content:`Language set to ${r0}`}]),L0(!1)},onCancel:()=>L0(!1)},void 0,!1,void 0,this):i0?P6.jsxDEV(ps0,{currentlyEnabled:m0.promptRefinerEnabled,onConfirm:(r0)=>{m0.setPromptRefinerEnabled(r0),d0(!1),T((j0)=>[...j0,{role:"assistant",content:`Prompt enchantment ${r0?"enabled":"disabled"}.`}])}},void 0,!1,void 0,this):z8?P6.jsxDEV(dA6,{toolName:z8.toolName,args:z8.args,onDecide:j8},void 0,!1,void 0,this):o0?P6.jsxDEV(cA6,{message:o0.message,onConfirm:C8},void 0,!1,void 0,this):P6.jsxDEV(Is0,{onSubmit:B0,isLoading:f,toolCallCount:K8,onAbort:c6,onQueue:F6,phase:I0,contextPct:P0,agentLabel:d??"deepseek",agentColor:g0,interactionMode:F0,onModeChange:a8,sessionId:q,vimEnabled:w8},void 0,!1,void 0,this),P6.jsxDEV(bs0,{tokenCount:y,model:m0.model,activeAgent:d,provider:m0.provider,contextPct:P0,interactionMode:F0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function cA6({message:$,onConfirm:D}){return Y7((K,J)=>{if(J.ctrl&&K==="c"){D(!1);return}if(K==="y")D(!0);else if(K==="n"||J.escape)D(!1)}),P6.jsxDEV(A0,{flexDirection:"column",marginTop:1,marginBottom:1,children:[P6.jsxDEV(A0,{border:!0,borderStyle:"rounded",borderColor:"yellow",paddingLeft:1,paddingRight:1,children:P6.jsxDEV(c,{color:"yellow",children:"\u26A0 "+$},void 0,!1,void 0,this)},void 0,!1,void 0,this),P6.jsxDEV(c,{color:"#888888",children:" [y] confirm [n/Esc] cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var vN=[{key:"1",label:"Allow this time",result:"once"},{key:"2",label:"Allow for all session",result:"session"},{key:"3",label:"Deny (say what DeepSeek should do instead)",result:"deny"}];function dA6({toolName:$,args:D,onDecide:K}){let[J,Y]=k8.useState(0);Y7((W,G)=>{if(G.ctrl&&W==="c"){K("deny");return}if(W==="1"){K("once");return}if(W==="2"){K("session");return}if(W==="3"){K("deny");return}if(G.upArrow){Y((O)=>(O-1+vN.length)%vN.length);return}if(G.downArrow){Y((O)=>(O+1)%vN.length);return}if(G.return){K(vN[J].result);return}if(G.escape){K("deny");return}});let z=JSON.stringify(D,null,0),q=Math.max((process.stdout.columns??80)-10,30),H=z.length>q?z.slice(0,q)+"\u2026":z;return P6.jsxDEV(A0,{flexDirection:"column",marginTop:1,marginBottom:1,children:[P6.jsxDEV(A0,{border:!0,borderStyle:"rounded",borderColor:"cyan",paddingLeft:2,paddingRight:2,flexDirection:"column",children:[P6.jsxDEV(c,{color:"cyan",children:"\u25C6 Tool permission"},void 0,!1,void 0,this),P6.jsxDEV(A0,{marginTop:1,flexDirection:"row",gap:1,children:[P6.jsxDEV(c,{color:"#888888",children:"tool:"},void 0,!1,void 0,this),P6.jsxDEV(c,{color:"yellow",children:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P6.jsxDEV(A0,{flexDirection:"row",gap:1,children:[P6.jsxDEV(c,{color:"#888888",children:"args:"},void 0,!1,void 0,this),P6.jsxDEV(c,{color:"#888888",children:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),P6.jsxDEV(A0,{flexDirection:"column",marginTop:1,marginLeft:2,children:vN.map((W,G)=>P6.jsxDEV(A0,{flexDirection:"row",gap:2,children:[P6.jsxDEV(c,{color:G===J?"cyan":"white",children:[G===J?"\u276F":" "," [",W.key,"]"]},void 0,!0,void 0,this),P6.jsxDEV(c,{color:G===J?"cyan":"#888888",children:W.label},void 0,!1,void 0,this)]},W.key,!0,void 0,this))},void 0,!1,void 0,this),P6.jsxDEV(A0,{marginLeft:2,children:P6.jsxDEV(c,{color:"#888888",children:" \u2191\u2193 navigate \xB7 Enter confirm \xB7 Esc deny \xB7 [3] aborts agent"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}N1();C1();qk();Jk();Zk();wG();var OY=o(N8(),1);if(process.argv.includes("--pipe")){let{default:$}=await Promise.resolve().then(() => (Ie0(),Ce0));await $(),process.exit(Number(process.exitCode??0))}var sA6=console.error.bind(console),eA6=console.warn.bind(console),m60=["Encountered two children with the same key","Each child in a list should have a unique","Raw mode is not supported"];console.error=(...$)=>{let D=String($[0]??"");if(m60.some((K)=>D.includes(K)))return;sA6(...$)};console.warn=(...$)=>{let D=String($[0]??"");if(m60.some((K)=>D.includes(K)))return;eA6(...$)};{let{createWriteStream:$}=await import("fs"),{mkdirSync:D}=await import("fs"),{join:K}=await import("path"),{homedir:J}=await import("os"),Y=K(J(),".deepseek","logs");D(Y,{recursive:!0});let z=$(K(Y,"dev.log"),{flags:"w"}),q=(W)=>z.write(`[${new Date().toISOString()}] ${String(W)}
1430
+ [exited with code ${n0.exitCode}]`:"";T((V8)=>[...V8,{role:"terminal",content:(M0||"(no output)")+t0}])}catch(x0){Y6.current=null,T((a0)=>[...a0,{role:"terminal",content:`Error: ${x0.message}`}])}j(""),E("assistant"),b(!1);return}T((X0)=>[...X0,{role:"user",content:r0}]),b(!0),G8("refining"),j(""),await C(r0)},[m0,f,a,C]);M.current=B0;let S0=process.stdout.rows||24,F8=p||z0||g||N0||i0?0:Math.max(0,S0-4);return P6.jsxDEV(A0,{flexDirection:"column",width:"100%",children:[P6.jsxDEV(A0,{minHeight:F8,children:P6.jsxDEV(A0,{flexDirection:"column",children:[P6.jsxDEV(Pt0,{messages:F,streamText:B,thinkingText:I,streamRole:k,theme:P8,activeAgent:d,headerProvider:W,headerAgent:G},void 0,!1,void 0,this),S&&P6.jsxDEV(_t0,{tool:S},void 0,!1,void 0,this),t.current.agents.length>0&&P6.jsxDEV(d80,{agents:t.current.agents,theme:P8},void 0,!1,void 0,this),P6.jsxDEV(Nt0,{},void 0,!1,void 0,this),f&&P6.jsxDEV(L60,{toolCallCount:K8,phase:I0},void 0,!1,void 0,this),r8.length>0&&P6.jsxDEV(Ss0,{messages:r8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),P6.jsxDEV(A0,{flexDirection:"column",flexShrink:0,children:[g?P6.jsxDEV(hs0,{currentTheme:P8,onSelect:(r0)=>{x(r0),Y?.(r0),u(!1)},onCancel:()=>u(!1)},void 0,!1,void 0,this):z0?P6.jsxDEV(us0,{currentModel:m0.model,models:s,onSelect:(r0)=>{m0.setModel(r0),T((j0)=>[...j0,{role:"assistant",content:`Model switched to ${r0}`}]),W0(!1)},onCancel:()=>W0(!1)},void 0,!1,void 0,this):p?P6.jsxDEV(ms0,{currentLevel:m0.effortLevel,onSelect:(r0)=>{let j0={low:"Quick, straightforward responses",high:"Comprehensive responses with extensive thinking",max:"Maximum reasoning depth (best with deepseek-reasoner)"};m0.setEffortLevel(r0),T((X0)=>[...X0,{role:"assistant",content:`Effort: ${r0} \u2014 ${j0[r0]}`}]),G0(!1)},onCancel:()=>G0(!1)},void 0,!1,void 0,this):N0?P6.jsxDEV(ds0,{currentLanguage:z??null,onDone:(r0)=>{m0.setLanguage(r0),T60({LANGUAGE:r0}),T((j0)=>[...j0,{role:"assistant",content:`Language set to ${r0}`}]),L0(!1)},onCancel:()=>L0(!1)},void 0,!1,void 0,this):i0?P6.jsxDEV(ps0,{currentlyEnabled:m0.promptRefinerEnabled,onConfirm:(r0)=>{m0.setPromptRefinerEnabled(r0),d0(!1),T((j0)=>[...j0,{role:"assistant",content:`Prompt enchantment ${r0?"enabled":"disabled"}.`}])}},void 0,!1,void 0,this):z8?P6.jsxDEV(dA6,{toolName:z8.toolName,args:z8.args,onDecide:j8},void 0,!1,void 0,this):o0?P6.jsxDEV(cA6,{message:o0.message,onConfirm:C8},void 0,!1,void 0,this):P6.jsxDEV(Is0,{onSubmit:B0,isLoading:f,toolCallCount:K8,onAbort:c6,onQueue:F6,phase:I0,contextPct:P0,agentLabel:d??"deepseek",agentColor:g0,interactionMode:F0,onModeChange:a8,sessionId:q,vimEnabled:w8},void 0,!1,void 0,this),P6.jsxDEV(bs0,{tokenCount:y,model:m0.model,activeAgent:d,provider:m0.provider,contextPct:P0,interactionMode:F0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function cA6({message:$,onConfirm:D}){return Y7((K,J)=>{if(J.ctrl&&K==="c"){D(!1);return}if(K==="y")D(!0);else if(K==="n"||J.escape)D(!1)}),P6.jsxDEV(A0,{flexDirection:"column",marginTop:1,marginBottom:1,children:[P6.jsxDEV(A0,{border:!0,borderStyle:"rounded",borderColor:"yellow",paddingLeft:1,paddingRight:1,children:P6.jsxDEV(c,{color:"yellow",children:"\u26A0 "+$},void 0,!1,void 0,this)},void 0,!1,void 0,this),P6.jsxDEV(c,{color:"#888888",children:" [y] confirm [n/Esc] cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var vN=[{key:"1",label:"Allow this time",result:"once"},{key:"2",label:"Allow for all session",result:"session"},{key:"3",label:"Deny (say what DeepSeek should do instead)",result:"deny"}];function dA6({toolName:$,args:D,onDecide:K}){let[J,Y]=k8.useState(0);Y7((W,G)=>{if(G.ctrl&&W==="c"){K("deny");return}if(W==="1"){K("once");return}if(W==="2"){K("session");return}if(W==="3"){K("deny");return}if(G.upArrow){Y((O)=>(O-1+vN.length)%vN.length);return}if(G.downArrow){Y((O)=>(O+1)%vN.length);return}if(G.return){K(vN[J].result);return}if(G.escape){K("deny");return}});let z=JSON.stringify(D,null,0),q=Math.max((process.stdout.columns??80)-10,30),H=z.length>q?z.slice(0,q)+"\u2026":z;return P6.jsxDEV(A0,{flexDirection:"column",marginTop:1,marginBottom:1,children:[P6.jsxDEV(A0,{border:!0,borderStyle:"rounded",borderColor:"cyan",paddingLeft:2,paddingRight:2,flexDirection:"column",children:[P6.jsxDEV(c,{color:"cyan",children:"\u25C6 Tool permission"},void 0,!1,void 0,this),P6.jsxDEV(A0,{marginTop:1,flexDirection:"row",gap:1,children:[P6.jsxDEV(c,{color:"#888888",children:"tool:"},void 0,!1,void 0,this),P6.jsxDEV(c,{color:"yellow",children:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P6.jsxDEV(A0,{flexDirection:"row",gap:1,children:[P6.jsxDEV(c,{color:"#888888",children:"args:"},void 0,!1,void 0,this),P6.jsxDEV(c,{color:"#888888",children:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),P6.jsxDEV(A0,{flexDirection:"column",marginTop:1,marginLeft:2,children:vN.map((W,G)=>P6.jsxDEV(A0,{flexDirection:"row",gap:2,children:[P6.jsxDEV(c,{color:G===J?"cyan":"white",children:[G===J?"\u276F":" "," [",W.key,"]"]},void 0,!0,void 0,this),P6.jsxDEV(c,{color:G===J?"cyan":"#888888",children:W.label},void 0,!1,void 0,this)]},W.key,!0,void 0,this))},void 0,!1,void 0,this),P6.jsxDEV(A0,{marginLeft:2,children:P6.jsxDEV(c,{color:"#888888",children:" \u2191\u2193 navigate \xB7 Enter confirm \xB7 Esc deny \xB7 [3] aborts agent"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}N1();C1();qk();Jk();Zk();wG();var OY=o(N8(),1);if(process.argv.includes("--pipe")){let{default:$}=await Promise.resolve().then(() => (Ie0(),Ce0));await $(),process.exit(Number(process.exitCode??0))}var sA6=console.error.bind(console),eA6=console.warn.bind(console),m60=["Encountered two children with the same key","Each child in a list should have a unique","Raw mode is not supported"];console.error=(...$)=>{let D=String($[0]??"");if(m60.some((K)=>D.includes(K)))return;sA6(...$)};console.warn=(...$)=>{let D=String($[0]??"");if(m60.some((K)=>D.includes(K)))return;eA6(...$)};{let{createWriteStream:$}=await import("fs"),{mkdirSync:D}=await import("fs"),{join:K}=await import("path"),{homedir:J}=await import("os"),Y=K(J(),".deepseek","logs");D(Y,{recursive:!0});let z=$(K(Y,"dev.log"),{flags:"w"}),q=(W)=>z.write(`[${new Date().toISOString()}] ${String(W)}
1431
1431
  `),H=process.stderr.write.bind(process.stderr);process.stderr.write=(W,...G)=>{let O=String(W);if(m60.some((M)=>O.includes(M)))return q(W),!0;return q(W),H(W,...G)},process.on("uncaughtException",(W)=>q(`uncaughtException: ${W.stack??W}`)),process.on("unhandledRejection",(W)=>q(`unhandledRejection: ${W}`))}{let{default:$}=await Promise.resolve().then(() => (h_(),g50));if($.level===0){let D=process.env.COLORTERM,K=process.env.TERM??"";if(D==="truecolor"||D==="24bit")$.level=3;else if(D==="ansi256"||K.includes("256color"))$.level=2;else if(process.stdout.isTTY||K!=="")$.level=1}}process.title="deepseek";process.stdout.write("\x1B]0;DeepSeek\x07");function $V6(){let $=process.argv.slice(2).filter((K)=>K!=="--pipe"&&K!=="--json");if($[0]==="update")return{agentName:null,initialMessage:null,resumeId:null,update:!0,logout:!1,help:!1,version:!1};if($[0]==="logout")return{agentName:null,initialMessage:null,resumeId:null,update:!1,logout:!0,help:!1,version:!1};if($[0]==="help"||$[0]==="--help"||$[0]==="-h")return{agentName:null,initialMessage:null,resumeId:null,update:!1,logout:!1,help:!0,version:!1};if($[0]==="version"||$[0]==="v"||$[0]==="--version"||$[0]==="-v")return{agentName:null,initialMessage:null,resumeId:null,update:!1,logout:!1,help:!1,version:!0};let D=$.indexOf("--resume");if(D!==-1)return{agentName:null,initialMessage:null,resumeId:$[D+1]??null,update:!1,logout:!1,help:!1,version:!1};if($[0]==="agent")return{agentName:$[1]??null,initialMessage:$[2]??null,resumeId:null,update:!1,logout:!1,help:!1,version:!1};return{agentName:null,initialMessage:$[0]??null,resumeId:null,update:!1,logout:!1,help:!1,version:!1}}var yN=$V6(),{update:DV6,logout:KV6}=yN;if(yN.version)process.stdout.write(`${_7.version}
1432
1432
  `),process.exit(0);if(yN.help)process.stdout.write(`
1433
1433
  DeepSeek Code v${_7.version} \u2014 AI coding agent for the terminal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hermenics/deepseek-code",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "An AI-powered coding assistant that lives in your terminal",
5
5
  "keywords": [
6
6
  "ai",