@github/copilot 0.0.335-1 → 0.0.335-2
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.
- package/index.js +1 -1
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -1967,7 +1967,7 @@ Run `+al.cyan("{updateCommand}")+" to update",r=e.message||n;e.boxenOptions??={p
|
|
|
1967
1967
|
`:""}Error executing shell command: ${hc instanceof Error?hc.message:String(hc)}`,markdown:!1})}finally{A1=!1,o9=!1,Vp=null,ko(!1)}return}let De=await YYt(ke,()=>{e.clearHistory(),se([]),S()},qa,di.current.resetSessionToolApprovals,async()=>{let sn=ys.cwd();go(sn),sI&&await sI.setRootPath(sn)},T,async sn=>{await W(sn),S()},Hs);if(De.handled){if(De.addEntry&&Ka(e,De.addEntry),De.showLoginUI&&Mt(!0),De.logout){if(Ae.status==="LoggedIn"){let sn=await t.logout();Ka(e,{type:"info",text:"You have been logged out successfully."}),Wl(sn)}else Ka(e,{type:"error",text:"You are not logged in."});re({status:"NotLoggedIn"})}if(De.showMCPConfigUI&&(Tt(!0),De.mcpUIMode&&dI(De.mcpUIMode),De.mcpUIServerName&&tI(De.mcpUIServerName)),De.showModelPicker&&JI(!0),De.setModelDirectly&&(LP(),e.setSelectedModel(De.setModelDirectly),Ka(e,{type:"info",text:`Model changed to: ${De.setModelDirectly}. The new model will be used for the next conversation.`}),Cs(De.setModelDirectly)),De.showFeedbackForm&&Dn(!0),De.showSessionInfo&&ve(!0),De.showUsageInfo){let sn=e.getFormattedUsageOutput();e.addTimelineEntry({type:"info",text:sn})}if(De.exit){$a();return}switch(De.showUserAction){case"show":Ae.status==="LoggedIn"?Ka(e,{type:"info",text:kxe(Ae.authInfo)}):Ka(e,{type:"error",text:"You are not logged in."});break;case"list":{let sn=await nYt(t,Ae.status==="LoggedIn"?Ae.authInfo:void 0);if(sn.length===0){Ka(e,{type:"error",text:"No users are currently logged in."});return}Ka(e,{type:"info",text:`Available users:
|
|
1968
1968
|
|
|
1969
1969
|
${sn.join(`
|
|
1970
|
-
`)}`});break}case"switch":Wl(!0);break}return}if(Ae.status!=="LoggedIn"){Ka(e,{type:"error",text:"You must be logged in to send messages. Please run /login"});return}if(Ue!==1){Ka(e,{type:"error",text:"This folder is not trusted. Please confirm folder trust to continue."});return}let Et=Date.now(),{expandedText:qt,mentions:$t,syntheticToolCalls:Vl,imageAttachments:oI}=await aTt(ke,Bn.storedMentions,Yr,T),vn=oI.length>0?{text:qt,images:oI}:qt;Ka(e,{type:"user",text:ke,mentions:$t,expandedText:qt,imageAttachments:oI}),Fe(!0);try{let sn=await Wx(G,e,fd);await iTt(Et,vn,Vl,di.current,Ae.authInfo,Rs,te,le,e,T,qa,Yr,sn,r,Hs,u,D)}catch(sn){let ZI=sn instanceof Error?sn.message:String(sn);Ka(e,{type:"error",text:`Execution failed: ${ZI}`})}finally{Xi.current&&(Fe(!1),$l.beep!==!1&&ys.stdout.write(_b.beep),setTimeout(()=>void rd(),1e3))}})()},[qe,Rs,Hs,Ae,Ue,Bn.storedMentions]),vb=(0,Lt.useCallback)(()=>{Vt||(Bn.isActive?ms.navigateUp():!f2.isNavigating()&&ec.length?Sn(Math.max(0,jn-1)):f2.navigateUp(eI))},[Vt,Bn.isActive,ms,ec.length,jn,eI]),ad=(0,Lt.useCallback)(()=>{Vt||(Bn.isActive?ms.navigateDown():!f2.isNavigating()&&ec.length?Sn(Math.min(ec.length-1,jn+1)):f2.navigateDown(eI))},[Vt,Bn.isActive,ms,ec.length,jn,eI]);ks((ke,De)=>{if(De.ctrl&&ke==="d"){$a();return}if(De.ctrl&&ke==="c"){if((qe||A1)&&Vp&&!Vp.signal.aborted){o9=!0,Vp.abort(),e.handleAbortedOperation(),pc();return}if(eI.text.length>0){eI.clear(),f2.resetNavigation(),pc();return}if(!Or){pc();return}$a()}if(De.escape){(qe||A1)&&Vp&&!Vp.signal.aborted&&(o9=!0,Vp.abort(),e.handleAbortedOperation());return}if(De.ctrl&&ke==="r"){Ee();return}if(De.ctrl&&ke==="o"){oe();return}if(!(qe||A1||Vt)){if(De.tab||De.return){if(Bn.isActive){ms.complete();return}return}!De.leftArrow&&!De.rightArrow&&!De.upArrow&&!De.downArrow&&f2.setNavigating(!1)}}),(0,Lt.useEffect)(()=>{qm(eI.text.startsWith("!"))},[eI.text]);let Ua=wN(()=>{if(Ot)return il?Lt.default.createElement(zJt,{folderPath:Yr,onConfirm:ZI=>{let Cr=()=>{Ce(1),yl(!1)};ZI==="yes"?Cr():ZI==="remember"?rae.addTrustedFolder(Yr).then(()=>{Cr(),Ka(e,{type:"info",text:`Folder ${Yr} has been added to trusted folders.`})}).catch(es=>{Ka(e,{type:"error",text:`Failed to add folder to trusted list: ${es instanceof Error?es.message:String(es)}`})}):ys.exit(0)}}):Lt.default.createElement(Lt.default.Fragment,null);if(dl)return Lt.default.createElement($Lt,{sessionId:e.getCurrentSessionId(),onClose:()=>{ve(!1)}});if(wt)return Lt.default.createElement(XLt,{onLoginSuccess:(ZI,Cr)=>{wN(async()=>{await t.loginUser(ZI,Cr),Mt(!1),Ka(e,{type:"info",text:`Signed in successfully as ${jne({host:ZI,login:Cr})}! You can now use Copilot.`}),re({status:"LoggedIn",authInfo:{type:"user",host:ZI,login:Cr}})})},onLoginClose:()=>{Mt(!1)}});if(mt)return Lt.default.createElement(JLt,{initialMode:Dt,initialServerName:kI,onClose:()=>{Tt(!1),dI("list"),tI(void 0)},onConfigSaved:()=>{Fp().then(()=>{Ka(e,{type:"info",text:"MCP configuration saved successfully! Changes will take effect immediately."})}).catch(ZI=>{Ka(e,{type:"error",text:`Failed to reload MCP config. Error: ${ZI instanceof Error?ZI.message:String(ZI)}`})})}});if(cl)return Lt.default.createElement(kLt,{models:fd,cliModel:G,sessionManager:e,onClose:()=>{JI(!1)},onModelSelected:ZI=>{LP(),e.setSelectedModel(ZI),(async()=>{try{let es={...await Dr.load()||{},model:ZI};await Dr.write(es)}catch{}})(),Ka(e,{type:"info",text:`Model changed to: ${ZI}. The new model will be used for the next conversation.`}),Cs(ZI)}});if(Vt)return Lt.default.createElement(d3t,{authManager:t,initialAuth:Ae.status==="LoggedIn"?Ae.authInfo:null,onSelect:ZI=>{re({status:"LoggedIn",authInfo:ZI.authInfo}),Wl(!1),Ka(e,{type:"info",text:`Switched to ${Pne(ZI.authInfo)}`}),t.switchToAuth(ZI)},onCancel:()=>Wl(!1),onError:ZI=>{Ka(e,{type:"error",text:`Failed to switch user. Error: ${ZI}`})}});if(aI){let ZI=no.length;return Lt.default.createElement(et,{flexDirection:"column"},ZI>0&&Lt.default.createElement(et,{marginBottom:1},Lt.default.createElement(Qe,{color:h.FG},"Permission request (",ZI," remaining)")),Lt.default.createElement(qLt,{request:aI.request,onConfirm:Cr=>{aI.resolve(Cr),BI(null)}}))}if(ce){let ZI=nn.length;return Lt.default.createElement(et,{flexDirection:"column"},ZI>0&&Lt.default.createElement(et,{marginBottom:1},Lt.default.createElement(Qe,{color:h.FG},"Path confirmation (",ZI," remaining)")),Lt.default.createElement(LLt,{paths:ce.paths,onConfirm:Cr=>{ce.resolve(Cr),nt(null)}}))}let ke=qe||A1,De="Enter @ to mention files or / for commands",Et=ro.suggestion,qt=ro.isHint,$t=ke||o9,Vl=!f2.isNavigating()&&ec.length>0,oI=Bn.isActive,vn=!oI&&!Vl,sn=wN(()=>o9?"cancelling":hm?"executing":"thinking");return Lt.default.createElement(Lt.default.Fragment,null,Ae.status==="NotLoggedIn"&&Lt.default.createElement(Qe,{bold:!0,color:h.COPILOT},"Please use /login to sign in to use Copilot"),$t&&Lt.default.createElement(et,{paddingBottom:1},Lt.default.createElement(s3t,{mode:sn})),Lt.default.createElement(et,{flexDirection:"row",columnGap:1},Lt.default.createElement(et,{flexGrow:1},Lt.default.createElement(Qe,null,Jd),nI&&Lt.default.createElement(Qe,{color:h.MUTED},nI)),Lt.default.createElement(Qe,{color:h.MUTED},Bc),Lt.default.createElement(SJt,{metrics:we})),Lt.default.createElement(tkt,{terminalWidth:B.columns-sTt*2,onSubmit:Yn,textCursorLocation:eI,placeholder:De,inlineSuggestion:Et,inlineSuggestionIsHint:qt,onTabCompletion:Es,disableEnterSubmit:ke||o9||Bn.isActive,onUpArrow:vb,onDownArrow:ad}),Vl&&Lt.default.createElement(et,{paddingBottom:1},Lt.default.createElement(a3t,{options:ec,selectedIndex:jn,maxRows:10,showScrollHints:!0})),oI&&Lt.default.createElement(et,{paddingBottom:1},Lt.default.createElement(kJt,{files:Bn.suggestions.map(ZI=>ZI.relativePath),selectedIndex:Bn.selectedIndex,maxRows:10,showScrollHints:!0,query:Bn.query})),Lt.default.createElement(DJt,{indexingIndicator:Se}),vn&&Lt.default.createElement(rkt,{quotaSnapshots:U,isRecentTimelineExpanded:M!==null,isAllTimelineExpanded:ue,showControlCMessage:Or,inShellExecMode:XG}))}),Cb=ys.platform==="win32",tc=Lt.default.createElement(et,{key:"header",flexDirection:"column"},Lt.default.createElement(et,{flexDirection:"column"},Lt.default.createElement(LJt,{animationComplete:()=>vl(!0),completed:il,bannerConfig:n?"always":$l.banner,loggerOverride:T,version:V.version}),Lt.default.createElement(et,{flexDirection:"row",paddingX:1},Lt.default.createElement(Qe,{color:h.MUTED},"Version ",V.version),V.buildMetadata&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Qe,{color:h.MUTED}," \xB7 "),Lt.default.createElement(Qe,{color:h.MUTED},"Commit ",V.buildMetadata.gitCommit)))),Lt.default.createElement(et,{flexDirection:"column",padding:1,width:80,gap:1},Lt.default.createElement(Qe,{color:h.MUTED,wrap:"wrap"},"Copilot can write, test and debug code right from your terminal. Describe a task to get started or enter ? for help. Copilot uses AI, check for mistakes."),Cb&&Lt.default.createElement(Qe,{color:h.WARNING},"Windows support is experimental. If you encounter issues, consider running Copilot inside Windows Subsystem for Linux (WSL). Please report any issues using /feedback."))),Zm=ee.filter(ke=>!("isHidden"in ke&&ke.isHidden)),kd=Zm.findIndex(ke=>ke.type==="tool_call_requested");kd===-1&&(kd=Zm.length);let ie=Zm.slice(0,kd),de=Zm.slice(kd),xe=ie.map(ke=>Lt.default.createElement(MAe,{key:ke.id,entry:ke,expand:ae(ke),renderAsMarkdown:$l.render_markdown})),Ke=de.map(ke=>Lt.default.createElement(MAe,{key:ke.id,entry:ke,expand:ae(ke),renderAsMarkdown:$l.render_markdown})),dt=il&&y;return Lt.default.createElement($Se,{mode:"interactive"},e.isWaitingForSessionPicker()?Lt.default.createElement(et,{flexDirection:"column",paddingX:1},Lt.default.createElement(r3t,{onSessionSelected:ke=>{(async()=>{try{await e.selectSession(ke)}catch(De){e.addTimelineEntry({type:"error",text:`Failed to resume session: ${De instanceof Error?De.message:String(De)}`})}})()},onCancel:()=>{(async()=>{try{ys.exit(0)}catch(ke){e.addTimelineEntry({type:"error",text:`Failed to restart with new session: ${ke instanceof Error?ke.message:String(ke)}`})}})()}})):Lt.default.createElement(et,{flexDirection:"column"},dt&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Woe,{key:F,items:[tc,...xe]},ke=>ke),Ke),!dt&&tc,!gI&&Lt.default.createElement(et,{flexDirection:"column",paddingX:sTt},Dl?Lt.default.createElement(BJt,{onCancel:()=>Dn(!1)}):Ua),gI&&Lt.default.createElement(et,{flexDirection:"column",paddingX:1,rowGap:1},gI.usage&&Lt.default.createElement(Qe,{dimColor:!0},gI.usage),Lt.default.createElement(i3t,{packageName:V.name,checkUpdateResponse:ln}),gI.type==="routine"?Lt.default.createElement(Qe,{color:h.ACCENT,bold:!0},"Shutting down..."):Lt.default.createElement(Qe,{color:h.ERROR,bold:!0},`Shutting down: ${gI.reason}`))))};function mTt(t,e=!1){let l=Lt.default.createElement(iAe,{logger:new Xh,children:Lt.default.createElement($Se,{mode:"non-interactive",children:Lt.default.createElement(MAe,{entry:t,expand:e})})}),{lastFrame:I}=k$e(l),n=I();return n?n.trim():""}var GTt=IiI;c();function niI(t){return`session_${t.sessionId}_${t.startTime.getTime()}`}function bTt(t){let e=/^session_(.+)_(\d+)\.json$/,l=t.match(e);if(!l)return null;let[,I,n]=l;return{sessionId:I,startTime:new Date(parseInt(n,10))}}var zQ=class t{currentSession;onTimelineEntriesChangeCallback=null;debounceSave=null;logger;needsSessionPicker=!1;autoSaveEnabled=!1;usageMetrics={totalPremiumRequests:0,totalApiDurationMs:0,sessionStartTime:Date.now(),codeChanges:{linesAdded:0,linesRemoved:0,filesModified:new Set},modelMetrics:new Map};static async create(e){let l=new t;switch(e.kind){case"new":break;case"resume-last":await l.resumeLastSession();break;case"resume":await l.resumeSpecificSession(e.sessionId);break;case"resume-with-picker":l.needsSessionPicker=!0;break;default:{let I=e;throw new Error(`unexpected session kind: ${JSON.stringify(I)}`)}}return l}static async hasMultipleSessions(){try{return(await G1.directoryFiles()).length>1}catch{return!1}}constructor(){this.currentSession=this.generateSession(),this.logger=new Xh}setLogger(e){this.logger=e}getLogger(){return this.logger}isWaitingForSessionPicker(){return this.needsSessionPicker}async selectSession(e){this.needsSessionPicker=!1,await this.resumeSpecificSession(e)}setOnTimelineEntriesChangeCallback(e){this.onTimelineEntriesChangeCallback=e,this.notifyTimelineEntriesChange()}notifyTimelineEntriesChange(){this.onTimelineEntriesChangeCallback?.([...this.currentSession.timeline])}enableAutoSave(){this.autoSaveEnabled=!0}async forceSave(){await this.saveHistorySession(this.currentSession)}scheduleSave(){this.debounceSave&&clearTimeout(this.debounceSave);let e=this.currentSession;this.debounceSave=setTimeout(()=>{this.autoSaveEnabled&&this.saveHistorySession(e)},100)}getTimelineEntries(){return[...this.currentSession.timeline]}async loadHistorySession(e){try{let l=await G1.load(e);if(!l)return;let I={...l,startTime:new Date(l.startTime)};this.currentSession=I;for(let n of this.currentSession.timeline)n.timestamp=new Date(n.timestamp);this.currentSession.chatMessages=this.completeOrphanedToolCalls(this.currentSession.chatMessages),this.enableAutoSave(),this.notifyTimelineEntriesChange()}catch(l){throw this.logger.error(`Error loading history session: ${l}`),l}}async saveHistorySession(e){let l=niI(e);await G1.write(e,l)}getCurrentSessionId(){return this.currentSession?.sessionId}getCurrentSessionStartTime(){return this.currentSession?.startTime}getSelectedModel(){return this.currentSession?.selectedModel}getCurrentModel(e){return e||this.currentSession?.selectedModel||this.usageMetrics.currentModel||""}setSelectedModel(e){this.currentSession.selectedModel=e,this.scheduleSave()}addTimelineEntry(e){try{this.currentSession.timeline.push({id:IA(),timestamp:new Date,...e}),this.scheduleSave(),this.notifyTimelineEntriesChange()}catch(l){this.logger.error(`Error adding timeline entry: ${l}`)}}clearHistory(){this.currentSession.chatMessages=[],this.currentSession.timeline=[],this.scheduleSave(),this.notifyTimelineEntriesChange()}addChatMessage(e){this.currentSession.chatMessages.push(e),this.scheduleSave()}getChatContextMessages(){return this.currentSession.chatMessages.filter(e=>e.role!=="system")}getSystemContextMessages(){return this.currentSession.chatMessages.filter(e=>e.role==="system")}handleAbortedOperation(){this.currentSession.chatMessages=this.completeOrphanedToolCalls(this.currentSession.chatMessages),this.scheduleSave()}completeOrphanedToolCalls(e){if(e.length===0)return e;let l=[];for(let r=e.length-1;r>=0;r--){let a=e[r];if(a.role==="assistant"&&"tool_calls"in a&&a.tool_calls&&a.tool_calls.length>0)for(let s of a.tool_calls)l.push(s.id);else break}if(l.length===0)return e;let I="The execution of this tool, or a previous tool was interrupted.";this.logger.info(`Completing ${l.length} orphaned tool calls.`);let n=l.map(r=>({role:"tool",tool_call_id:r,content:I}));for(let r of l)this.updateToolCallTimelineEntryResult({callId:r,resultType:"rejected",log:I});return[...e,...n]}updateToolCallTimelineEntryResult(e){let l=this.currentSession.timeline.findLastIndex(r=>r.type==="tool_call_requested"&&r.callId===e.callId);if(l===-1){this.logger.error(`Pending tool call with ID ${e.callId} not found`);return}let I=this.currentSession.timeline[l];if(I.type==="tool_call_requested"&&I.name==="str_replace_editor"&&e.log){let s=I.arguments?.path;this.updateCodeChangeMetrics(e.log,s)}let n=this.currentSession.timeline[l];this.currentSession.timeline[l]={type:"tool_call_completed",id:n.id,timestamp:n.timestamp,callId:n.callId,name:n.name,toolTitle:n.toolTitle,intentionSummary:n.intentionSummary,arguments:n.arguments,result:{type:e.resultType,log:e.log,markdown:e.markdown},isAlwaysExpanded:n.isAlwaysExpanded,showNoContent:n.showNoContent},this.scheduleSave(),this.notifyTimelineEntriesChange()}updateToolCallTimelineEntryPartialOutput(e,l){let I=this.currentSession.timeline.findLastIndex(r=>r.type==="tool_call_requested"&&r.callId===e);if(I===-1){this.logger.error(`Pending tool call with ID ${e} not found`);return}let n=this.currentSession.timeline[I];this.currentSession.timeline[I]={type:"tool_call_requested",id:n.id,timestamp:n.timestamp,callId:n.callId,name:n.name,toolTitle:n.toolTitle,intentionSummary:n.intentionSummary,arguments:n.arguments,partialOutput:l,isAlwaysExpanded:n.isAlwaysExpanded,showNoContent:n.showNoContent},this.notifyTimelineEntriesChange()}async resumeSpecificSession(e){let l=await G1.directoryFiles();if(l.length===0)throw new Error(`Session not found: ${e}`);let I=null,n=[];for(let r of l){let a=bTt(r);if(a&&a.sessionId===e){I=r;break}}if(!I){for(let r of l){let a=bTt(r);a&&a.sessionId.startsWith(e)&&n.push({file:r,parsed:a})}n.length>0&&(n.sort((r,a)=>a.parsed.startTime.getTime()-r.parsed.startTime.getTime()),I=n[0].file)}if(!I)throw new Error(`Session not found: ${e}`);try{await this.loadHistorySession(I)}catch(r){throw new Error(`Failed to load session ${e}: ${r}`)}}async resumeLastSession(){let e=await G1.directoryFiles();if(e.length===0)throw new Error("No sessions found");let l=e[0];try{await this.loadHistorySession(l)}catch(I){throw new Error(`Failed to resume last session: ${I}`)}}generateSession(){return this.resetUsageMetrics(),{sessionId:this.generateSessionId(),startTime:new Date,chatMessages:[],timeline:[]}}generateSessionId(){return IA()}getUsageMetrics(){return this.usageMetrics}resetUsageMetrics(){this.usageMetrics={totalPremiumRequests:0,totalApiDurationMs:0,sessionStartTime:Date.now(),codeChanges:{linesAdded:0,linesRemoved:0,filesModified:new Set},modelMetrics:new Map}}getModelRequestMultiplier(e){return{"claude-sonnet-4":1,"gpt-5":1,"claude-sonnet-4.5":1}[e]??1}trackUserMessage(e){let l=e||"",n=1*this.getModelRequestMultiplier(l);this.usageMetrics.totalPremiumRequests+=n,this.usageMetrics.modelMetrics.has(l)||this.usageMetrics.modelMetrics.set(l,{requests:{count:0,cost:0},usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0}});let r=this.usageMetrics.modelMetrics.get(l);r.requests.count+=1,r.requests.cost+=n,this.usageMetrics.currentModel=l}updateModelUsageMetrics(e,l,I){let n=e||"";if(this.usageMetrics.totalApiDurationMs+=l,I){this.usageMetrics.modelMetrics.has(n)||this.usageMetrics.modelMetrics.set(n,{requests:{count:0,cost:0},usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0}});let r=this.usageMetrics.modelMetrics.get(n);if(r.usage.inputTokens+=I.prompt_tokens||0,r.usage.outputTokens+=I.completion_tokens||0,I.prompt_tokens_details?.cached_tokens){r.usage.cacheReadTokens+=I.prompt_tokens_details.cached_tokens;let a=(I.prompt_tokens||0)-I.prompt_tokens_details.cached_tokens;r.usage.cacheWriteTokens+=Math.max(0,a)}}}updateCodeChangeMetrics(e,l){if(!e||!e.includes("diff --git"))return;let I=e.split(`
|
|
1970
|
+
`)}`});break}case"switch":Wl(!0);break}return}if(Ae.status!=="LoggedIn"){Ka(e,{type:"error",text:"You must be logged in to send messages. Please run /login"});return}if(Ue!==1){Ka(e,{type:"error",text:"This folder is not trusted. Please confirm folder trust to continue."});return}let Et=Date.now(),{expandedText:qt,mentions:$t,syntheticToolCalls:Vl,imageAttachments:oI}=await aTt(ke,Bn.storedMentions,Yr,T),vn=oI.length>0?{text:qt,images:oI}:qt;Ka(e,{type:"user",text:ke,mentions:$t,expandedText:qt,imageAttachments:oI}),Fe(!0);try{let sn=await Wx(G,e,fd);await iTt(Et,vn,Vl,di.current,Ae.authInfo,Rs,te,le,e,T,qa,Yr,sn,r,Hs,u,D)}catch(sn){let ZI=sn instanceof Error?sn.message:String(sn);Ka(e,{type:"error",text:`Execution failed: ${ZI}`})}finally{Xi.current&&(Fe(!1),$l.beep!==!1&&ys.stdout.write(_b.beep),setTimeout(()=>void rd(),1e3))}})()},[qe,Rs,Hs,Ae,Ue,Bn.storedMentions]),vb=(0,Lt.useCallback)(()=>{Vt||(Bn.isActive?ms.navigateUp():!f2.isNavigating()&&ec.length?Sn(Math.max(0,jn-1)):f2.navigateUp(eI))},[Vt,Bn.isActive,ms,ec.length,jn,eI]),ad=(0,Lt.useCallback)(()=>{Vt||(Bn.isActive?ms.navigateDown():!f2.isNavigating()&&ec.length?Sn(Math.min(ec.length-1,jn+1)):f2.navigateDown(eI))},[Vt,Bn.isActive,ms,ec.length,jn,eI]);ks((ke,De)=>{if(De.ctrl&&ke==="d"){$a();return}if(De.ctrl&&ke==="c"){if((qe||A1)&&Vp&&!Vp.signal.aborted){o9=!0,Vp.abort(),e.handleAbortedOperation(),pc();return}if(eI.text.length>0){eI.clear(),f2.resetNavigation(),pc();return}if(!Or){pc();return}$a()}if(De.escape){(qe||A1)&&Vp&&!Vp.signal.aborted&&(o9=!0,Vp.abort(),e.handleAbortedOperation());return}if(De.ctrl&&ke==="r"){Ee();return}if(De.ctrl&&ke==="o"){oe();return}if(!(qe||A1||Vt)){if(De.tab||De.return){if(Bn.isActive){ms.complete();return}return}!De.leftArrow&&!De.rightArrow&&!De.upArrow&&!De.downArrow&&f2.setNavigating(!1)}}),(0,Lt.useEffect)(()=>{qm(eI.text.startsWith("!"))},[eI.text]);let Ua=wN(()=>{if(Ot)return il?Lt.default.createElement(zJt,{folderPath:Yr,onConfirm:ZI=>{let Cr=()=>{Ce(1),yl(!1)};ZI==="yes"?Cr():ZI==="remember"?rae.addTrustedFolder(Yr).then(()=>{Cr(),Ka(e,{type:"info",text:`Folder ${Yr} has been added to trusted folders.`})}).catch(es=>{Ka(e,{type:"error",text:`Failed to add folder to trusted list: ${es instanceof Error?es.message:String(es)}`})}):ys.exit(0)}}):Lt.default.createElement(Lt.default.Fragment,null);if(dl)return Lt.default.createElement($Lt,{sessionId:e.getCurrentSessionId(),onClose:()=>{ve(!1)}});if(wt)return Lt.default.createElement(XLt,{onLoginSuccess:(ZI,Cr)=>{wN(async()=>{await t.loginUser(ZI,Cr),Mt(!1),Ka(e,{type:"info",text:`Signed in successfully as ${jne({host:ZI,login:Cr})}! You can now use Copilot.`}),re({status:"LoggedIn",authInfo:{type:"user",host:ZI,login:Cr}})})},onLoginClose:()=>{Mt(!1)}});if(mt)return Lt.default.createElement(JLt,{initialMode:Dt,initialServerName:kI,onClose:()=>{Tt(!1),dI("list"),tI(void 0)},onConfigSaved:()=>{Fp().then(()=>{Ka(e,{type:"info",text:"MCP configuration saved successfully! Changes will take effect immediately."})}).catch(ZI=>{Ka(e,{type:"error",text:`Failed to reload MCP config. Error: ${ZI instanceof Error?ZI.message:String(ZI)}`})})}});if(cl)return Lt.default.createElement(kLt,{models:fd,cliModel:G,sessionManager:e,onClose:()=>{JI(!1)},onModelSelected:ZI=>{LP(),e.setSelectedModel(ZI),(async()=>{try{let es={...await Dr.load()||{},model:ZI};await Dr.write(es)}catch{}})(),Ka(e,{type:"info",text:`Model changed to: ${ZI}. The new model will be used for the next conversation.`}),Cs(ZI)}});if(Vt)return Lt.default.createElement(d3t,{authManager:t,initialAuth:Ae.status==="LoggedIn"?Ae.authInfo:null,onSelect:ZI=>{re({status:"LoggedIn",authInfo:ZI.authInfo}),Wl(!1),Ka(e,{type:"info",text:`Switched to ${Pne(ZI.authInfo)}`}),t.switchToAuth(ZI)},onCancel:()=>Wl(!1),onError:ZI=>{Ka(e,{type:"error",text:`Failed to switch user. Error: ${ZI}`})}});if(aI){let ZI=no.length;return Lt.default.createElement(et,{flexDirection:"column"},ZI>0&&Lt.default.createElement(et,{marginBottom:1},Lt.default.createElement(Qe,{color:h.FG},"Permission request (",ZI," remaining)")),Lt.default.createElement(qLt,{request:aI.request,onConfirm:Cr=>{aI.resolve(Cr),BI(null)}}))}if(ce){let ZI=nn.length;return Lt.default.createElement(et,{flexDirection:"column"},ZI>0&&Lt.default.createElement(et,{marginBottom:1},Lt.default.createElement(Qe,{color:h.FG},"Path confirmation (",ZI," remaining)")),Lt.default.createElement(LLt,{paths:ce.paths,onConfirm:Cr=>{ce.resolve(Cr),nt(null)}}))}let ke=qe||A1,De="Enter @ to mention files or / for commands",Et=ro.suggestion,qt=ro.isHint,$t=ke||o9,Vl=!f2.isNavigating()&&ec.length>0,oI=Bn.isActive,vn=!oI&&!Vl,sn=wN(()=>o9?"cancelling":hm?"executing":"thinking");return Lt.default.createElement(Lt.default.Fragment,null,Ae.status==="NotLoggedIn"&&Lt.default.createElement(Qe,{bold:!0,color:h.COPILOT},"Please use /login to sign in to use Copilot"),$t&&Lt.default.createElement(et,{paddingBottom:1},Lt.default.createElement(s3t,{mode:sn})),Lt.default.createElement(et,{flexDirection:"row",columnGap:1},Lt.default.createElement(et,{flexGrow:1},Lt.default.createElement(Qe,null,Jd),nI&&Lt.default.createElement(Qe,{color:h.MUTED},nI)),Lt.default.createElement(Qe,{color:h.MUTED},Bc),Lt.default.createElement(SJt,{metrics:we})),Lt.default.createElement(tkt,{terminalWidth:B.columns-sTt*2,onSubmit:Yn,textCursorLocation:eI,placeholder:De,inlineSuggestion:Et,inlineSuggestionIsHint:qt,onTabCompletion:Es,disableEnterSubmit:ke||o9||Bn.isActive,onUpArrow:vb,onDownArrow:ad}),Vl&&Lt.default.createElement(et,{paddingBottom:1},Lt.default.createElement(a3t,{options:ec,selectedIndex:jn,maxRows:10,showScrollHints:!0})),oI&&Lt.default.createElement(et,{paddingBottom:1},Lt.default.createElement(kJt,{files:Bn.suggestions.map(ZI=>ZI.relativePath),selectedIndex:Bn.selectedIndex,maxRows:10,showScrollHints:!0,query:Bn.query})),Lt.default.createElement(DJt,{indexingIndicator:Se}),vn&&Lt.default.createElement(rkt,{quotaSnapshots:U,isRecentTimelineExpanded:M!==null,isAllTimelineExpanded:ue,showControlCMessage:Or,inShellExecMode:XG}))}),Cb=ys.platform==="win32",tc=Lt.default.createElement(et,{key:"header",flexDirection:"column"},Lt.default.createElement(et,{flexDirection:"column"},Lt.default.createElement(LJt,{animationComplete:()=>vl(!0),completed:il,bannerConfig:n?"always":$l.banner,loggerOverride:T,version:V.version}),Lt.default.createElement(et,{flexDirection:"row",paddingX:1},Lt.default.createElement(Qe,{color:h.MUTED},"Version ",V.version),V.buildMetadata&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Qe,{color:h.MUTED}," \xB7 "),Lt.default.createElement(Qe,{color:h.MUTED},"Commit ",V.buildMetadata.gitCommit)))),Lt.default.createElement(et,{flexDirection:"column",padding:1,gap:1},Lt.default.createElement(Qe,{color:h.MUTED,wrap:"wrap"},"Copilot can write, test and debug code right from your terminal. Describe a task to get started or enter ? for help. Copilot uses AI, check for mistakes."),Cb&&Lt.default.createElement(Qe,{color:h.WARNING},"Windows support is experimental. If you encounter issues, consider running Copilot inside Windows Subsystem for Linux (WSL). Please report any issues using /feedback."))),Zm=ee.filter(ke=>!("isHidden"in ke&&ke.isHidden)),kd=Zm.findIndex(ke=>ke.type==="tool_call_requested");kd===-1&&(kd=Zm.length);let ie=Zm.slice(0,kd),de=Zm.slice(kd),xe=ie.map(ke=>Lt.default.createElement(MAe,{key:ke.id,entry:ke,expand:ae(ke),renderAsMarkdown:$l.render_markdown})),Ke=de.map(ke=>Lt.default.createElement(MAe,{key:ke.id,entry:ke,expand:ae(ke),renderAsMarkdown:$l.render_markdown})),dt=il&&y;return Lt.default.createElement($Se,{mode:"interactive"},e.isWaitingForSessionPicker()?Lt.default.createElement(et,{flexDirection:"column",paddingX:1},Lt.default.createElement(r3t,{onSessionSelected:ke=>{(async()=>{try{await e.selectSession(ke)}catch(De){e.addTimelineEntry({type:"error",text:`Failed to resume session: ${De instanceof Error?De.message:String(De)}`})}})()},onCancel:()=>{(async()=>{try{ys.exit(0)}catch(ke){e.addTimelineEntry({type:"error",text:`Failed to restart with new session: ${ke instanceof Error?ke.message:String(ke)}`})}})()}})):Lt.default.createElement(et,{flexDirection:"column"},dt&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Woe,{key:F,items:[tc,...xe]},ke=>ke),Ke),!dt&&tc,!gI&&Lt.default.createElement(et,{flexDirection:"column",paddingX:sTt},Dl?Lt.default.createElement(BJt,{onCancel:()=>Dn(!1)}):Ua),gI&&Lt.default.createElement(et,{flexDirection:"column",paddingX:1,rowGap:1},gI.usage&&Lt.default.createElement(Qe,{dimColor:!0},gI.usage),Lt.default.createElement(i3t,{packageName:V.name,checkUpdateResponse:ln}),gI.type==="routine"?Lt.default.createElement(Qe,{color:h.ACCENT,bold:!0},"Shutting down..."):Lt.default.createElement(Qe,{color:h.ERROR,bold:!0},`Shutting down: ${gI.reason}`))))};function mTt(t,e=!1){let l=Lt.default.createElement(iAe,{logger:new Xh,children:Lt.default.createElement($Se,{mode:"non-interactive",children:Lt.default.createElement(MAe,{entry:t,expand:e})})}),{lastFrame:I}=k$e(l),n=I();return n?n.trim():""}var GTt=IiI;c();function niI(t){return`session_${t.sessionId}_${t.startTime.getTime()}`}function bTt(t){let e=/^session_(.+)_(\d+)\.json$/,l=t.match(e);if(!l)return null;let[,I,n]=l;return{sessionId:I,startTime:new Date(parseInt(n,10))}}var zQ=class t{currentSession;onTimelineEntriesChangeCallback=null;debounceSave=null;logger;needsSessionPicker=!1;autoSaveEnabled=!1;usageMetrics={totalPremiumRequests:0,totalApiDurationMs:0,sessionStartTime:Date.now(),codeChanges:{linesAdded:0,linesRemoved:0,filesModified:new Set},modelMetrics:new Map};static async create(e){let l=new t;switch(e.kind){case"new":break;case"resume-last":await l.resumeLastSession();break;case"resume":await l.resumeSpecificSession(e.sessionId);break;case"resume-with-picker":l.needsSessionPicker=!0;break;default:{let I=e;throw new Error(`unexpected session kind: ${JSON.stringify(I)}`)}}return l}static async hasMultipleSessions(){try{return(await G1.directoryFiles()).length>1}catch{return!1}}constructor(){this.currentSession=this.generateSession(),this.logger=new Xh}setLogger(e){this.logger=e}getLogger(){return this.logger}isWaitingForSessionPicker(){return this.needsSessionPicker}async selectSession(e){this.needsSessionPicker=!1,await this.resumeSpecificSession(e)}setOnTimelineEntriesChangeCallback(e){this.onTimelineEntriesChangeCallback=e,this.notifyTimelineEntriesChange()}notifyTimelineEntriesChange(){this.onTimelineEntriesChangeCallback?.([...this.currentSession.timeline])}enableAutoSave(){this.autoSaveEnabled=!0}async forceSave(){await this.saveHistorySession(this.currentSession)}scheduleSave(){this.debounceSave&&clearTimeout(this.debounceSave);let e=this.currentSession;this.debounceSave=setTimeout(()=>{this.autoSaveEnabled&&this.saveHistorySession(e)},100)}getTimelineEntries(){return[...this.currentSession.timeline]}async loadHistorySession(e){try{let l=await G1.load(e);if(!l)return;let I={...l,startTime:new Date(l.startTime)};this.currentSession=I;for(let n of this.currentSession.timeline)n.timestamp=new Date(n.timestamp);this.currentSession.chatMessages=this.completeOrphanedToolCalls(this.currentSession.chatMessages),this.enableAutoSave(),this.notifyTimelineEntriesChange()}catch(l){throw this.logger.error(`Error loading history session: ${l}`),l}}async saveHistorySession(e){let l=niI(e);await G1.write(e,l)}getCurrentSessionId(){return this.currentSession?.sessionId}getCurrentSessionStartTime(){return this.currentSession?.startTime}getSelectedModel(){return this.currentSession?.selectedModel}getCurrentModel(e){return e||this.currentSession?.selectedModel||this.usageMetrics.currentModel||""}setSelectedModel(e){this.currentSession.selectedModel=e,this.scheduleSave()}addTimelineEntry(e){try{this.currentSession.timeline.push({id:IA(),timestamp:new Date,...e}),this.scheduleSave(),this.notifyTimelineEntriesChange()}catch(l){this.logger.error(`Error adding timeline entry: ${l}`)}}clearHistory(){this.currentSession.chatMessages=[],this.currentSession.timeline=[],this.scheduleSave(),this.notifyTimelineEntriesChange()}addChatMessage(e){this.currentSession.chatMessages.push(e),this.scheduleSave()}getChatContextMessages(){return this.currentSession.chatMessages.filter(e=>e.role!=="system")}getSystemContextMessages(){return this.currentSession.chatMessages.filter(e=>e.role==="system")}handleAbortedOperation(){this.currentSession.chatMessages=this.completeOrphanedToolCalls(this.currentSession.chatMessages),this.scheduleSave()}completeOrphanedToolCalls(e){if(e.length===0)return e;let l=[];for(let r=e.length-1;r>=0;r--){let a=e[r];if(a.role==="assistant"&&"tool_calls"in a&&a.tool_calls&&a.tool_calls.length>0)for(let s of a.tool_calls)l.push(s.id);else break}if(l.length===0)return e;let I="The execution of this tool, or a previous tool was interrupted.";this.logger.info(`Completing ${l.length} orphaned tool calls.`);let n=l.map(r=>({role:"tool",tool_call_id:r,content:I}));for(let r of l)this.updateToolCallTimelineEntryResult({callId:r,resultType:"rejected",log:I});return[...e,...n]}updateToolCallTimelineEntryResult(e){let l=this.currentSession.timeline.findLastIndex(r=>r.type==="tool_call_requested"&&r.callId===e.callId);if(l===-1){this.logger.error(`Pending tool call with ID ${e.callId} not found`);return}let I=this.currentSession.timeline[l];if(I.type==="tool_call_requested"&&I.name==="str_replace_editor"&&e.log){let s=I.arguments?.path;this.updateCodeChangeMetrics(e.log,s)}let n=this.currentSession.timeline[l];this.currentSession.timeline[l]={type:"tool_call_completed",id:n.id,timestamp:n.timestamp,callId:n.callId,name:n.name,toolTitle:n.toolTitle,intentionSummary:n.intentionSummary,arguments:n.arguments,result:{type:e.resultType,log:e.log,markdown:e.markdown},isAlwaysExpanded:n.isAlwaysExpanded,showNoContent:n.showNoContent},this.scheduleSave(),this.notifyTimelineEntriesChange()}updateToolCallTimelineEntryPartialOutput(e,l){let I=this.currentSession.timeline.findLastIndex(r=>r.type==="tool_call_requested"&&r.callId===e);if(I===-1){this.logger.error(`Pending tool call with ID ${e} not found`);return}let n=this.currentSession.timeline[I];this.currentSession.timeline[I]={type:"tool_call_requested",id:n.id,timestamp:n.timestamp,callId:n.callId,name:n.name,toolTitle:n.toolTitle,intentionSummary:n.intentionSummary,arguments:n.arguments,partialOutput:l,isAlwaysExpanded:n.isAlwaysExpanded,showNoContent:n.showNoContent},this.notifyTimelineEntriesChange()}async resumeSpecificSession(e){let l=await G1.directoryFiles();if(l.length===0)throw new Error(`Session not found: ${e}`);let I=null,n=[];for(let r of l){let a=bTt(r);if(a&&a.sessionId===e){I=r;break}}if(!I){for(let r of l){let a=bTt(r);a&&a.sessionId.startsWith(e)&&n.push({file:r,parsed:a})}n.length>0&&(n.sort((r,a)=>a.parsed.startTime.getTime()-r.parsed.startTime.getTime()),I=n[0].file)}if(!I)throw new Error(`Session not found: ${e}`);try{await this.loadHistorySession(I)}catch(r){throw new Error(`Failed to load session ${e}: ${r}`)}}async resumeLastSession(){let e=await G1.directoryFiles();if(e.length===0)throw new Error("No sessions found");let l=e[0];try{await this.loadHistorySession(l)}catch(I){throw new Error(`Failed to resume last session: ${I}`)}}generateSession(){return this.resetUsageMetrics(),{sessionId:this.generateSessionId(),startTime:new Date,chatMessages:[],timeline:[]}}generateSessionId(){return IA()}getUsageMetrics(){return this.usageMetrics}resetUsageMetrics(){this.usageMetrics={totalPremiumRequests:0,totalApiDurationMs:0,sessionStartTime:Date.now(),codeChanges:{linesAdded:0,linesRemoved:0,filesModified:new Set},modelMetrics:new Map}}getModelRequestMultiplier(e){return{"claude-sonnet-4":1,"gpt-5":1,"claude-sonnet-4.5":1}[e]??1}trackUserMessage(e){let l=e||"",n=1*this.getModelRequestMultiplier(l);this.usageMetrics.totalPremiumRequests+=n,this.usageMetrics.modelMetrics.has(l)||this.usageMetrics.modelMetrics.set(l,{requests:{count:0,cost:0},usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0}});let r=this.usageMetrics.modelMetrics.get(l);r.requests.count+=1,r.requests.cost+=n,this.usageMetrics.currentModel=l}updateModelUsageMetrics(e,l,I){let n=e||"";if(this.usageMetrics.totalApiDurationMs+=l,I){this.usageMetrics.modelMetrics.has(n)||this.usageMetrics.modelMetrics.set(n,{requests:{count:0,cost:0},usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0}});let r=this.usageMetrics.modelMetrics.get(n);if(r.usage.inputTokens+=I.prompt_tokens||0,r.usage.outputTokens+=I.completion_tokens||0,I.prompt_tokens_details?.cached_tokens){r.usage.cacheReadTokens+=I.prompt_tokens_details.cached_tokens;let a=(I.prompt_tokens||0)-I.prompt_tokens_details.cached_tokens;r.usage.cacheWriteTokens+=Math.max(0,a)}}}updateCodeChangeMetrics(e,l){if(!e||!e.includes("diff --git"))return;let I=e.split(`
|
|
1971
1971
|
`),n=0,r=0;for(let a of I)a.startsWith("+")&&!a.startsWith("+++")?n++:a.startsWith("-")&&!a.startsWith("---")&&r++;this.usageMetrics.codeChanges.linesAdded+=n,this.usageMetrics.codeChanges.linesRemoved+=r,l&&this.usageMetrics.codeChanges.filesModified.add(l)}formatTokenCount(e){return e===0?"0":e<1e3?e.toString():e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(1)}m`}formatDuration(e){let l=Math.floor(e/1e3),I=Math.floor(l/60),n=Math.floor(I/60);if(n>0){let r=I%60,a=e%6e4/1e3;return`${n}h ${r}m ${a.toFixed(1)}s`}else if(I>0){let r=e%6e4/1e3;return`${I}m ${r.toFixed(1)}s`}else return`${(e/1e3).toFixed(1)}s`}getFormattedUsageOutput(){let e=this.usageMetrics,l=this.formatDuration(Date.now()-e.sessionStartTime),I=this.formatDuration(e.totalApiDurationMs),n=Math.round(e.totalPremiumRequests),a=[`Total usage est: ${n} ${n===1?"Premium request":"Premium requests"}`,`Total duration (API): ${I}`,`Total duration (wall): ${l}`,`Total code changes: ${e.codeChanges.linesAdded} lines added, ${e.codeChanges.linesRemoved} lines removed`];if(e.modelMetrics.size>0){a.push("Usage by model:");for(let[s,o]of e.modelMetrics){let{requests:d,usage:G}=o,u=this.formatTokenCount(G.inputTokens),h=this.formatTokenCount(G.outputTokens),W=this.formatTokenCount(G.cacheReadTokens),y=this.formatTokenCount(G.cacheWriteTokens),R=Math.round(d.cost),V=R===1?"Premium request":"Premium requests",f=(s||"(unknown)").padEnd(20);a.push(` ${f} ${u} input, ${h} output, ${W} cache read, ${y} cache write (Est. ${R} ${V})`)}}return a.join(`
|
|
1972
1972
|
`)}};c();var c0e=class{constructor(e){this.logger=e;this.listenToErrors()}errorHandlers=[];formatError(e,l){if(l instanceof Error)return`${e}: ${l.message}
|
|
1973
1973
|
${l.stack}`;if(typeof l=="object"&&l!==null)try{return`${e}: ${JSON.stringify(l)}`}catch{return`${e}: [object with circular reference]`}else return`${e}: ${String(l)}`}addErrorHandler(e){this.errorHandlers.push(e)}listenToErrors(){process.on("uncaughtException",e=>{this.handleError("Uncaught Exception",e)}),process.on("unhandledRejection",e=>{this.handleError("Unhandled Rejection",e)})}handleError(e,l){this.logger.error(this.formatError(e,l)),this.errorHandlers.length===0&&(process.stderr.write(this.formatError(e,l)+`
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@github/copilot",
|
|
3
3
|
"description": "GitHub Copilot CLI brings the power of Copilot coding agent directly to your terminal.",
|
|
4
|
-
"version": "0.0.335-
|
|
4
|
+
"version": "0.0.335-2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"sdk/**/*"
|
|
34
34
|
],
|
|
35
35
|
"buildMetadata": {
|
|
36
|
-
"gitCommit": "
|
|
36
|
+
"gitCommit": "8f59b01"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"node-pty": "npm:@devm33/node-pty@^1.0.8",
|