@panda-agent/panda-cli 0.1.25 → 0.1.26
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.
|
@@ -1990,9 +1990,9 @@ ${s.content}`;if(r+l.length>FJ){i=!0;break}r+=l.length,n.push(l),o.push({path:s.
|
|
|
1990
1990
|
`)}function E7(){let t=new Map;return{recordFirstChunk(e,n){e&&t.set(e,n)},shouldSkipDuplicate(e,n){if(!e)return!1;let o=t.get(e);return o===void 0?!1:(t.delete(e),n===o)}}}function SY(t,e){return new Promise((n,o)=>{let r=Date.now(),i=t.on(P.TURN_COMPLETED,a=>{a.conversationId===e&&(i(),s(),n({durationMs:typeof a.duration=="number"?a.duration:Date.now()-r}))}),s=t.on(P.TURN_FAILED,a=>{a.conversationId===e&&(i(),s(),o(a.error instanceof Error?a.error:new Error(String(a.error))))})})}async function P7(t){t.outputFormat==="stream-json"&&oE();let e=await TY(t),n=await gy({...t,eagerMaterializeConversation:!0}),o=n.getConversationId(),r=t.initialModelId??n.getSelectedModelId(),i=n.getModelLabelById(r),s=Date.now(),a=0,l=0,c=0,u=[];if(t.outputFormat==="stream-json"){let d=E7(),p=E7();oo({type:"init",timestamp:new Date().toISOString(),conversation_id:o,model:i}),oo({type:"message",timestamp:new Date().toISOString(),role:"user",content:e}),u.push(n.eventBus.on(P.TOOL_CALL_REQUESTED,f=>{f.conversationId===o&&oo({type:"tool_use",timestamp:new Date().toISOString(),tool_name:String(f.toolName??"tool"),tool_id:String(f.toolCallId??""),parameters:f.args??{}})}),n.eventBus.on(P.TOOL_CALL_EXECUTED,f=>{f.conversationId===o&&oo({type:"tool_result",timestamp:new Date().toISOString(),tool_id:String(f.toolCallId??""),status:"success",output:_Y(f.result??f)})}),n.eventBus.on(P.TOOL_CALL_FAILED,f=>{if(f.conversationId!==o)return;let m=f.error instanceof Error?f.error.message:String(f.error?.message??f.error);oo({type:"tool_result",timestamp:new Date().toISOString(),tool_id:String(f.toolCallId??""),status:"error",error:m})}),n.eventBus.on(P.ASSISTANT_MESSAGE_STARTED,f=>{if(f.conversationId!==o)return;let m=typeof f.chunk=="string"?f.chunk:"";if(!m)return;let g=typeof f.messageId=="string"?f.messageId:"";d.recordFirstChunk(g,m),oo({type:"message",timestamp:new Date().toISOString(),role:"assistant",content:m,delta:!0})}),n.eventBus.on(P.THINKING_STARTED,f=>{if(f.conversationId!==o)return;let m=typeof f.chunk=="string"?f.chunk:"";if(!m)return;let g=typeof f.messageId=="string"?f.messageId:"",h=typeof f.workId=="string"?f.workId:void 0,y=f.isSubAgentWork===!0;p.recordFirstChunk(g,m),oo({type:"thinking",timestamp:new Date().toISOString(),content:m,delta:!0,message_id:g||void 0,work_id:h,is_sub_agent_work:y})}),n.eventBus.subscribeStreaming(P.MESSAGE_STREAMING,f=>{if(f.conversationId!==o)return;let m=typeof f.chunk=="string"?f.chunk:"";if(!m)return;let g=typeof f.messageId=="string"?f.messageId:"";d.shouldSkipDuplicate(g,m)||oo({type:"message",timestamp:new Date().toISOString(),role:"assistant",content:m,delta:!0})}),n.eventBus.subscribeStreaming(P.THINKING_STREAMING,f=>{if(f.conversationId!==o)return;let m=typeof f.chunk=="string"?f.chunk:"";if(!m)return;let g=typeof f.messageId=="string"?f.messageId:"",h=typeof f.workId=="string"?f.workId:void 0,y=f.isSubAgentWork===!0;p.shouldSkipDuplicate(g,m)||oo({type:"thinking",timestamp:new Date().toISOString(),content:m,delta:!0,message_id:g||void 0,work_id:h,is_sub_agent_work:y})}))}u.push(n.eventBus.on(P.TOOL_CALL_EXECUTED,d=>{d.conversationId===o&&(a+=1,l+=1)}),n.eventBus.on(P.TOOL_CALL_FAILED,d=>{d.conversationId===o&&(a+=1,c+=1)}));try{n.submit(e,r);let d=await SY(n.eventBus,o),f=[...n.getCurrentConversationMessages()].reverse().find(y=>y.role==="assistant"),m=f?bY(f.content):"",g=d.durationMs||Date.now()-s,h={response:m,conversationId:o,model:i,durationMs:g,toolCalls:a,toolSuccess:l,toolFail:c};if(t.outputFormat==="json"){process.stdout.write(`${JSON.stringify(vY(h))}
|
|
1991
1991
|
`);return}if(t.outputFormat==="stream-json"){oo({type:"result",timestamp:new Date().toISOString(),status:"success",duration_ms:h.durationMs,tool_calls:h.toolCalls});return}process.stdout.write(h.response.endsWith(`
|
|
1992
1992
|
`)?h.response:`${h.response}
|
|
1993
|
-
`)}finally{for(let d of u)d()}}hy();import{spawn as EY}from"node:child_process";import{createRequire as CY}from"node:module";function M7(){try{let e=CY(import.meta.url)("../package.json");return(typeof e?.version=="string"?e.version.trim():"")||"unknown"}catch{return"unknown"}}var Bs="@panda-agent/panda-cli",vy=process.platform==="win32"?"npm.cmd":"npm",PY=8e3,RY=5*6e4,yy=null,Rk=null;function No(t,e){t.onInfo?.(e)}function Ak(t,e){t.onError?.(e)}function D7(t,e,n={}){return new Promise(o=>{let r=EY(t,e,{stdio:["ignore","pipe","pipe"],shell
|
|
1994
|
-
${String(d)}`.trim(),timedOut:!1})}),
|
|
1995
|
-
\u547D\u4EE4\u8D85\u65F6\uFF08${u}ms \u5DF2\u7EC8\u6B62\uFF09`.trim(),timedOut:!0})},u),
|
|
1993
|
+
`)}finally{for(let d of u)d()}}hy();import{spawn as EY}from"node:child_process";import{createRequire as CY}from"node:module";function M7(){try{let e=CY(import.meta.url)("../package.json");return(typeof e?.version=="string"?e.version.trim():"")||"unknown"}catch{return"unknown"}}var Bs="@panda-agent/panda-cli",vy=process.platform==="win32"?"npm.cmd":"npm",PY=8e3,RY=5*6e4,yy=null,Rk=null;function No(t,e){t.onInfo?.(e)}function Ak(t,e){t.onError?.(e)}function D7(t,e,n={}){return new Promise(o=>{let r="",i="",s=!1,a=null,l;try{l=EY(t,e,{stdio:["ignore","pipe","pipe"],shell:process.platform==="win32",env:process.env})}catch(d){o({exitCode:1,stdout:"",stderr:String(d instanceof Error?d.message:d),timedOut:!1});return}let c=d=>{s||(s=!0,a&&(clearTimeout(a),a=null),o(d))};l.stdout?.on("data",d=>{r+=String(d)}),l.stderr?.on("data",d=>{i+=String(d)}),l.on("error",d=>{c({exitCode:1,stdout:r,stderr:`${i}
|
|
1994
|
+
${String(d)}`.trim(),timedOut:!1})}),l.on("close",d=>{c({exitCode:typeof d=="number"?d:1,stdout:r,stderr:i,timedOut:!1})});let u=n.timeoutMs??0;u>0&&(a=setTimeout(()=>{try{l.kill("SIGTERM")}catch{}c({exitCode:124,stdout:r,stderr:`${i}
|
|
1995
|
+
\u547D\u4EE4\u8D85\u65F6\uFF08${u}ms \u5DF2\u7EC8\u6B62\uFF09`.trim(),timedOut:!0})},u),a.unref?.())})}async function AY(){let t=await D7(vy,["view",`${Bs}@latest`,"version"],{timeoutMs:PY});return t.exitCode!==0?null:t.stdout.trim()||null}function MY(){return!!process.stdin?.isTTY}function DY(t){return new Promise(e=>{process.stdout.write(t),process.stdin.resume(),process.stdin.once("data",n=>{let o=String(n).trim().toLowerCase();e(o==="y"||o==="yes")})})}function OY(t,e){let n=`${t.stderr}
|
|
1996
1996
|
${t.stdout}`,o=t.stderr.trim()||t.stdout.trim()||"\u672A\u77E5\u9519\u8BEF",r=`${vy} install -g ${Bs}@${e}`;return t.timedOut?`\u5347\u7EA7\u8D85\u65F6\uFF1A\u7F51\u7EDC\u6216\u5168\u5C40\u5B89\u88C5\u76EE\u5F55\u65E0\u54CD\u5E94\u3002\u5EFA\u8BAE\uFF1A\u68C0\u67E5 npm registry \u914D\u7F6E\u540E\u91CD\u8BD5 \`${r}\`\u3002`:/EACCES|permission denied|operation not permitted/i.test(n)?["\u5347\u7EA7\u5931\u8D25\uFF1A\u5F53\u524D\u7528\u6237\u5BF9 npm \u5168\u5C40\u76EE\u5F55\u65E0\u5199\u6743\u9650\u3002",`\u5EFA\u8BAE\uFF1A\u4F7F\u7528\u5177\u5907\u6743\u9650\u7684\u8D26\u53F7\u6267\u884C \`sudo ${r}\`\uFF0C\u6216\u5C06 \`npm prefix\` \u6539\u5230\u7528\u6237\u76EE\u5F55\u540E\u91CD\u8BD5\u3002`].join(`
|
|
1997
1997
|
`):/ENOTFOUND|ETIMEDOUT|ECONNREFUSED|getaddrinfo|network|tunneling socket/i.test(n)?["\u5347\u7EA7\u5931\u8D25\uFF1A\u65E0\u6CD5\u8BBF\u95EE npm registry\uFF08\u7F51\u7EDC\u6216\u4EE3\u7406\u5F02\u5E38\uFF09\u3002","\u5EFA\u8BAE\uFF1A\u68C0\u67E5 `npm config get registry` \u4E0E\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002"].join(`
|
|
1998
1998
|
`):/E404|404 Not Found|not found in this registry/i.test(n)?[`\u5347\u7EA7\u5931\u8D25\uFF1Aregistry \u672A\u63D0\u4F9B ${Bs} \u7684\u6307\u5B9A\u7248\u672C\u3002`,"\u5EFA\u8BAE\uFF1A\u786E\u8BA4\u5F53\u524D `npm config get registry` \u6307\u5411\u6B63\u786E\u7684 registry\u3002"].join(`
|
|
@@ -2096,5 +2096,5 @@ end try
|
|
|
2096
2096
|
`)},[fc,xn.active,g.length,w1.renderedValue]);fd("Chat",fc);let r3=Jt(()=>{let L=Ht.current;return!L||!Ok(r)&&!L.isConversationCoreBusy()?!1:(L.interruptCurrentTurn({inputEmptyAtCancel:da.current.length===0,restorePrompt:sp.current||void 0}).catch(q=>i({type:"APPEND_ERROR",text:q instanceof Error?q.message:String(q)})),v1(),x(!1),!0)},[v1,i,r]),_1=sN(md,r3,void 0,!0),o3=Rr(()=>({"chat:toggleVimMode":()=>{RC(L=>{let q=!L;return i({type:"APPEND_INFO",text:q?"Vim \u952E\u4F4D\u5DF2\u5F00\u542F\uFF08Ctrl+Shift+Y \u6216 /vim \u5207\u6362\uFF09\u3002":"Vim \u952E\u4F4D\u5DF2\u5173\u95ED\u3002"}),q})},"chat:toggleOperationMode":()=>{let L=Ht.current;if(!L)return;let q=q5(L.getInteractionMode());L.setInteractionMode(q),ln(q)},"chat:openTeamRolesPicker":()=>{let L=Ht.current;!L||L.getInteractionMode()!=="team"||(z(L.getEnabledTeamRoles()),O(0),Ar(!0))},"chat:openModelPicker":()=>{A.length>0&&(N(!0),E(Math.max(0,A.findIndex(L=>L.id===j))))},"chat:imagePaste":()=>{y1({notifyWhenEmpty:!0})}}),[i,A,j,y1]);md(o3,{context:"Chat",isActive:fc});let i3=Rr(()=>({"app:toggleTranscript":d}),[d]);md(i3,{context:"Global"}),fd("Transcript",u);let s3=Rr(()=>({"transcript:toggleShowAll":()=>{c(null)},"transcript:exit":p}),[p]);md(s3,{context:"Transcript",isActive:u}),ho(()=>{if(!DC.current)return DC.current=!0,(async()=>{try{let L=await gy(e);Ht.current=L,R(L.getConversationId()),await sa(L,i),os();let q=L.listModelOptions();U(q);let X=L.getSelectedModelId()??q[0]?.id;_(X),E(Math.max(0,q.findIndex(ge=>ge.id===X))),await L.getCurrentUser().catch(()=>{})||(i({type:"APPEND_INFO",text:"\u5F53\u524D\u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u767B\u5F55 Panda \u8D26\u53F7\u3002"}),is()),e.initialPrompt&&e.initialPrompt.trim()&&(L.submit(e.initialPrompt.trim()),R(L.getConversationId()))}catch(L){i({type:"APPEND_ERROR",text:Yo(L)})}})(),()=>{dc.current?.()}},[e,is,os]);let UC=Jt(async(L,q)=>{let X=Ht.current;if(!X)return;let ie=X.getConversationId();if(!(ie===En||g1.current.has(ie)||X.isCurrentConversationEphemeral()||X.getCurrentConversationTurnCount()>1)){g1.current.add(ie);try{await X.runRegisteredActionImmediate("rename_conversation",void 0,X.getSelectedModelId()??void 0,L)}catch{g1.current.delete(ie)}}},[]);if(ho(()=>{let L=Ht.current;if(!L||!b)return;let q=MC.current;MC.current=b,dc.current?.(),aN(q,b)&&i({type:"RESET_STREAMING_STATE"}),pc.current.targetChars=0,pc.current.turnStartedAt=Date.now();let X=process.env.PANDA_CLI_UI_FREEZE_UNTIL_TURN_END==="1";return dc.current=DN({eventBus:L.eventBus,getConversationId:()=>Ht.current?.getConversationId()??En,dispatch:i,streamingApproxRef:pc,onTurnStarted:UC,onTurnFailed:ie=>{cp(ie)},onTurnCancelled:({revertApplied:ie,restorePrompt:ge})=>{if(!ie)return;let St=Ht.current;if(!St)return;sa(St,i);let Ot=EF(ge);Ot.length>0&&(h(Ot),v(Ot.length)),sp.current=""},onConversationUiMessagesUpdated:()=>{let ie=Ht.current;ie&&sa(ie,i)},freezeUiUntilTurnEnd:X,onFreezeTurnEndHydrate:()=>{let ie=Ht.current;ie&&sa(ie,i)}}),()=>{dc.current?.(),dc.current=null}},[b,UC,i,cp]),ho(()=>{if(!ne||We.length===0)return;let L=ns.conversationPickerViewportSize;Q(q=>Math.max(0,Math.min(q,Math.max(0,We.length-L))))},[ne,ns.conversationPickerViewportSize,We.length]),Bie((L,q,X)=>{let ie=Ht.current;if(!ie)return;let ge=q,St=String(ge.sequence??L??""),Ot=!!(ge.upArrow||ge.name==="up"||St==="\x1B[A"||St.endsWith("[A")),le=!!(ge.downArrow||ge.name==="down"||St==="\x1B[B"||St.endsWith("[B")),Ie=!!(ge.return||ge.name==="return"||ge.name==="enter"),oe=!!(ge.escape||ge.name==="escape"),Je=Ie&&!!ge.shift,tt=!!(ge.pageUp||ge.name==="pageup"),Xo=!!(ge.pageDown||ge.name==="pagedown"),BC=!!(ge.wheelUp||ge.name==="wheelup"),pa=!!(ge.wheelDown||ge.name==="wheeldown"),cn=q;if(vC){let we=["email","code","password","confirmPassword","displayName"],ve=q,be=!!(ve.backspace||ve.name==="backspace"||L==="\b"||L==="\x7F"),ce=!!((ve.ctrl||ve.meta)&&L.toLowerCase()==="g");if(oe&&!Qi){rp(!1),vn(void 0),Qo(void 0);return}if((Ot||le)&&!Qi){let re=we.indexOf(rr),dt=Ot?re<=0?we.length-1:re-1:re>=we.length-1?0:re+1;yo(we[dt]);return}if(be&&!Qi){vn(void 0),Qo(void 0),rr==="email"&&i1(re=>re.slice(0,-1)),rr==="code"&&s1(re=>re.slice(0,-1)),rr==="password"&&a1(re=>re.slice(0,-1)),rr==="confirmPassword"&&l1(re=>re.slice(0,-1)),rr==="displayName"&&c1(re=>re.slice(0,-1));return}if(ce&&!Qi){if(!lc.trim()){vn("\u8BF7\u8F93\u5165\u90AE\u7BB1\u3002"),yo("email");return}if(!PF(lc)){vn("\u8BF7\u8F93\u5165\u6709\u6548\u7684\u90AE\u7BB1\u5730\u5740\u3002"),yo("email");return}cc(!0),vn(void 0),Qo(void 0),(async()=>{try{await ie.sendRegisterVerificationCode(lc.trim()),Qo("\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001\u5230\u60A8\u7684\u90AE\u7BB1\uFF0C\u8BF7\u67E5\u6536\u3002")}catch(re){vn(re instanceof Error?re.message:String(re))}finally{cc(!1)}})().catch(()=>{});return}if(Ie&&!Qi){let re=lc.trim(),dt=bC.trim(),at=xC,ss=TC,un=wC.trim();if(!re){vn("\u8BF7\u8F93\u5165\u90AE\u7BB1\u3002"),yo("email");return}if(!PF(re)){vn("\u8BF7\u8F93\u5165\u6709\u6548\u7684\u90AE\u7BB1\u5730\u5740\u3002"),yo("email");return}if(!dt){vn("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801\u3002"),yo("code");return}if(!at||at.length<Qie){vn("\u5BC6\u7801\u81F3\u5C11 8 \u4F4D\u3002"),yo("password");return}if(at!==ss){vn("\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4\u3002"),yo("confirmPassword");return}cc(!0),vn(void 0),Qo(void 0),(async()=>{try{await ie.register(re,dt,at,ss,un||void 0),rp(!1),Qo(void 0),ic(!0),ac(re),la(""),ca("password"),Yi(void 0),i({type:"APPEND_INFO",text:"\u6CE8\u518C\u6210\u529F\uFF0C\u8BF7\u767B\u5F55\u3002"})}catch(qn){vn(qn instanceof Error?qn.message:String(qn))}finally{cc(!1)}})().catch(()=>{});return}let fe=L.replace(/[\r\n]/g,"");if(!Qi&&fe.length>0){vn(void 0),Qo(void 0),rr==="email"&&i1(re=>re+fe),rr==="code"&&s1(re=>re+fe),rr==="password"&&a1(re=>re+fe),rr==="confirmPassword"&&l1(re=>re+fe),rr==="displayName"&&c1(re=>re+fe);return}return}if(yC){if(oe&&!ua){ic(!1),Yi(void 0),la("");return}if((Ot||le)&&!ua){ca(ce=>ce==="email"?"password":"email");return}let we=q;if(!!(we.backspace||we.name==="backspace"||L==="\b"||L==="\x7F")&&!ua){r1==="email"?ac(ce=>ce.slice(0,-1)):la(ce=>ce.slice(0,-1));return}if(Ie&&!ua){if(!sc.trim()||!n1){Yi("\u8BF7\u8F93\u5165\u90AE\u7BB1\u548C\u5BC6\u7801\u3002"),sc.trim()?ca("password"):ca("email");return}o1(!0),Yi(void 0),(async()=>{try{let ce=await ie.login(sc.trim(),n1);i({type:"APPEND_INFO",text:`\u767B\u5F55\u6210\u529F\uFF1A${ce.username||ce.email||sc.trim()}`});let fe=await ie.refreshModelOptions();U(fe.options),_(fe.selectedModelId),ic(!1),ac(""),la(""),ca("email")}catch(ce){Yi(ce instanceof Error?ce.message:String(ce))}finally{o1(!1)}})().catch(()=>{});return}let be=L.replace(/[\r\n]/g,"");if(!ua&&be.length>0){Yi(void 0),r1==="email"?ac(ce=>ce+be):la(ce=>ce+be);return}return}if(ne){let we=Math.max(0,We.length-1),ve=ns.conversationPickerViewportSize,be=fe=>{let re=ue;fe<re?re=fe:fe>=re+ve&&(re=fe-ve+1),Q(Math.max(0,Math.min(re,Math.max(0,We.length-ve))))};if(oe){Pe(!1),H(!1);return}if(Zo(L,cn)){let fe=te<=0?we:te-1;ee(fe),be(fe);return}if(Go(L,cn)){let fe=te>=we?0:te+1;ee(fe),be(fe);return}if(tt){let fe=Math.max(0,te-ve);ee(fe),be(fe);return}if(Xo){let fe=Math.min(we,te+ve);ee(fe),be(fe);return}let ce=Number(L);if(!Number.isNaN(ce)&&ce>=1&&ce<=We.length){let fe=ce-1;ee(fe),be(fe);return}if(Ie){let fe=We[te],re=de;if(!fe){Pe(!1),H(!1);return}(async()=>{if(!await ie.switchConversation(fe.conversationId)){i({type:"APPEND_ERROR",text:`Failed to switch conversation: ${fe.conversationId}`});return}R(fe.conversationId),await sa(ie,i),os();let at=ie.getCurrentConversationSummary();i({type:"APPEND_INFO",text:`${re?"\u5DF2\u6062\u590D\u4F1A\u8BDD":"\u5DF2\u5207\u6362\u4F1A\u8BDD"}\uFF1A${at.title||"\uFF08\u65E0\u6807\u9898\uFF09"} [${at.conversationId}]`})})().catch(dt=>{i({type:"APPEND_ERROR",text:dt instanceof Error?dt.message:String(dt)})}),Pe(!1),H(!1);return}}if(D){let we=Math.max(0,ye.length-1);if(oe){pe(!1);return}if(Zo(L,cn)){st(ve=>ve<=0?we:ve-1);return}if(Go(L,cn)){st(ve=>ve>=we?0:ve+1);return}if(Ie){let ve=ye[Se];ve&&(ie.getTodoStore().removeItem(Se).then(()=>{Re(ce=>ce.filter((fe,re)=>re!==Se))}),h(ve.prompt),v(ve.prompt.length),pe(!1));return}}if(xn.active){let we=Ht.current;if(!we){xn.close();return}return xn.handleInput({inputChar:L,isEscape:oe,isEnter:Ie,isShiftEnter:Je,isPageUp:tt,isPageDown:Xo,isWheelUp:BC,isWheelDown:pa,isPickerListUp:Zo(L,cn),isPickerListDown:Go(L,cn),ctrlOrMeta:!!(ge.ctrl||ge.meta),session:we}),void 0}if(V){let we=Math.max(0,$l.length-1);if(oe){ae(!1);return}if(Zo(L,cn)){me(be=>be<=0?we:be-1);return}if(Go(L,cn)){me(be=>be>=we?0:be+1);return}let ve=Number(L);if(!Number.isNaN(ve)&&ve>=1&&ve<=$l.length){me(ve-1);return}if(Ie){let be=$l[Te]?.id;be&&(ie.setInteractionMode(be),ln(be),i({type:"APPEND_INFO",text:`\u5DF2\u5207\u6362\u5230 ${be} \u6A21\u5F0F\u3002`})),ae(!1);return}return}if(en){let we=Ht.current;if(!we)return;let ve=Math.max(0,qi.length-1);if(oe){Ar(!1);return}if(Zo(L,cn)){O(ce=>ce<=0?ve:ce-1);return}if(Go(L,cn)){O(ce=>ce>=ve?0:ce+1);return}let be=Number(L);if(!Number.isNaN(be)&&be>=1&&be<=qi.length){O(be-1);return}if(L===" "){let ce=qi[nr];if(!ce)return;z(fe=>{let re=new Set(fe);if(re.has(ce.id)){if(re.size<=1)return fe;re.delete(ce.id)}else re.add(ce.id);return qi.filter(dt=>re.has(dt.id)).map(dt=>dt.id)});return}if(Ie){we.setEnabledTeamRoles(w),Ar(!1);return}}if($){let we=Math.max(0,A.length-1);if(oe){N(!1);return}if(Zo(L,cn)){E(be=>be<=0?we:be-1);return}if(Go(L,cn)){E(be=>be>=we?0:be+1);return}let ve=Number(L);if(!Number.isNaN(ve)&&ve>=1&&ve<=A.length){E(ve-1);return}if(Ie){let ce=A[K]?.id;ce&&(ie.setSelectedModelId(ce).catch(()=>{}),_(ce)),N(!1);return}}if(gt){if(t1){let re=ge,dt=!!(re.backspace||re.name==="backspace"||L==="\b"||L==="\x7F");if(oe){aa(null);return}if(dt){aa(at=>at?{...at,text:at.text.slice(0,-1)}:null);return}if(Ie){let at=t1,ss=at.text.trim();e1(un=>{let qn={...un[at.questionId]??{}};return ss?qn[at.optionId]=ss:delete qn[at.optionId],{...un,[at.questionId]:qn}}),aa(null);return}if(L&&!ge.ctrl&&!ge.meta){aa(at=>at?{...at,text:at.text+L}:null);return}return}if(oe){gt.allowSkipAll&&ie.answerAskQuestion(gt.toolCallId,[]).catch(()=>{});return}let we=Math.max(0,gt.questions.length-1);if(L==="["&&!ge.shift){Ke(re=>Math.max(0,re-1)),_t(0);return}if(L==="]"){Ke(re=>Math.min(we,re+1)),_t(0);return}let ve=gt.questions[Ae]??gt.questions[0];if(!ve)return;let be=cg(ve.options),ce=Math.max(0,be.length-1);if(L==="n"&&!ge.ctrl&&!ge.meta&&!ge.shift){let re=be[He]??be[0];if(re&&Ti(re.id)){let dt=oc[ve.id]?.[Eo]??"";aa({questionId:ve.id,optionId:Eo,text:dt})}return}if(Zo(L,cn)){_t(re=>re<=0?ce:re-1);return}if(Go(L,cn)){_t(re=>re>=ce?0:re+1);return}let fe=Number(L);if(!Number.isNaN(fe)&&fe>=1&&fe<=be.length){_t(fe-1);return}if(ve.allowMultiple&&L===" "){let re=be[He]??be[0];if(!re)return;Ji(dt=>{let at=new Set(dt[ve.id]??[]);return at.has(re.id)?at.delete(re.id):at.add(re.id),{...dt,[ve.id]:Array.from(at)}});return}if(Ie){let re=be[He]??be[0],dt=xt;if(!ve.allowMultiple&&re&&(dt={...xt,[ve.id]:[re.id]},Ji(dt),e1(un=>{let qn={...un[ve.id]??{}},up={};return qn[re.id]&&(up[re.id]=qn[re.id]),{...un,[ve.id]:up}})),Ae<gt.questions.length-1){Ke(un=>un+1),_t(0);return}let at=gt.questions.map(un=>{let qn=dt[un.id]??[],up=oc[un.id]??{},S1={};for(let jC of qn){let zC=up[jC]?.trim();zC&&(S1[jC]=zC)}return{questionId:un.id,selectedOptionIds:qn,...Object.keys(S1).length>0?{optionNotes:S1}:{}}});if(gt.questions.some(un=>un.required&&(dt[un.id]??[]).length===0))return;ie.answerAskQuestion(gt.toolCallId,at).catch(()=>{});return}return}if(d1){let we=Math.max(0,Zv.length-1),ve=$C,be=ce=>{let fe=kC;ce<fe?fe=ce:ce>=fe+ve&&(fe=ce-ve+1),IC(Math.max(0,Math.min(fe,Math.max(0,Zv.length-ve))))};if(oe){SC(!1);return}if(Zo(L,cn)){let ce=Xi<=0?we:Xi-1;uc(ce),be(ce);return}if(Go(L,cn)){let ce=Xi>=we?0:Xi+1;uc(ce),be(ce);return}if(tt){let ce=Math.max(0,Xi-ve);uc(ce),be(ce);return}if(Xo){let ce=Math.min(we,Xi+ve);uc(ce),be(ce);return}return}if(CC){if(oe){Kt.mode==="tool-detail"?(ts({mode:"tool-list",serverIndex:Kt.serverIndex}),Mr(Kt.toolIndex)):Kt.mode==="tool-list"?(ts({mode:"server-detail",serverIndex:Kt.serverIndex}),Mr(0)):Kt.mode==="server-detail"?(ts({mode:"server-list"}),Mr(Kt.serverIndex)):EC(!1);return}if(Ie&&Kt.mode==="server-list"){let we=op;es[we]&&(ts({mode:"server-detail",serverIndex:we}),Mr(0));return}if(Ie&&Kt.mode==="server-detail"){let we=es[Kt.serverIndex];we&&we.status.status==="connected"&&we.tools.length>0&&(ts({mode:"tool-list",serverIndex:Kt.serverIndex}),Mr(0));return}if(Ie&&Kt.mode==="tool-list"){let we=es[Kt.serverIndex];we&&we.tools[op]&&ts({mode:"tool-detail",serverIndex:Kt.serverIndex,toolIndex:op});return}if(Kt.mode==="server-list"){if(Ot){Mr(we=>we<=0?Math.max(0,es.length-1):we-1);return}if(le){Mr(we=>we>=es.length-1?0:we+1);return}}if(Kt.mode==="tool-list"){let we=es[Kt.serverIndex],ve=we?we.tools.length:0;if(Ot){Mr(be=>be<=0?Math.max(0,ve-1):be-1);return}if(le){Mr(be=>be>=ve-1?0:be+1);return}}return}let bo=q;if(!ne&&!en&&!V&&!$&&!D&&!xn.active&&!gt){if(S){let ce=Math.max(0,vo.length-1);if(oe){x(!1);return}if(Ot){W(fe=>fe<=0?ce:fe-1);return}if(le){W(fe=>fe>=ce?0:fe+1);return}if(Ie){let fe=Math.max(0,Math.min(T,ce));Je?ie.removePendingUserMessage(fe):ie.sendPendingUserMessageImmediately(fe).catch(re=>{i({type:"APPEND_ERROR",text:Yo(re)})}),B(re=>re+1);return}}if((Ok(r)||ie.isConversationCoreBusy())&&oe&&da.current.length===0){if(_C){v1(),ie.interruptCurrentTurn({inputEmptyAtCancel:da.current.length===0,restorePrompt:sp.current||void 0}).catch(ce=>i({type:"APPEND_ERROR",text:ce instanceof Error?ce.message:String(ce)}));return}u1(!0),Dr.current&&clearTimeout(Dr.current),Dr.current=setTimeout(()=>{Dr.current=null,u1(!1)},ese);return}let ve=X,be=new Uie(ve.keypress);if(T1.handleKeyDown(be),be.didStopImmediatePropagation()){ve.stopImmediatePropagation();return}if(bo.shift&&(bo.ctrl||bo.super)&&Sr(L,bo)==="c"){m1.current=g,Wie(g);return}if(bo.shift&&(bo.ctrl||bo.super)&&Sr(L,bo)==="v"&&m1.current){let ce=m1.current,fe=lp.current,re=g.slice(0,fe),dt=g.slice(fe);h(re+ce+dt),v(fe+ce.length);return}if(process.platform==="darwin"&&ve.keypress?.isPasted===!0&&L.length===0&&y1({notifyWhenEmpty:!1}))return}w1.onInput(L,bo)}),u){let L=Math.max(20,ns.cols-6),q=l?.streamingState??"Idle",ie=tv({historyItems:f,pendingAssistant:"",pendingToolCalls:[],streamingState:q,contentWidth:L,transcriptMode:!0}).blocks;return Qv(jie,{mouseTracking:!0,children:Qv(n$,{messages:ie,contentWidth:L,streamingState:q,conversationId:b,streamingApproxRef:pc})})}return Qv(sF,{appendInfo:m,children:Qv(e$,{uiState:r,inputValue:g,inputCursorOffset:y,wrappedRenderedLines:n3,inputTransientHint:UF,vimBindingsEnabled:PC,vimInputMode:VF,workspacePath:e.workspacePath,conversationId:b,contentWidth:Math.max(20,ns.cols-6),conversationTitle:Ht.current?.getCurrentConversationSummary().title,modelLabel:Ht.current?.getModelLabelById(j)??"-- \u8BF7\u767B\u5F55\u5237\u65B0\u6A21\u578B",modeLabel:tse(Xt),interactionMode:Xt,contextMetrics:r.contextMetrics,streamingApproxRef:pc,askQuestionActive:!!gt,askQuestionAllowSkipAll:gt?.allowSkipAll??!1,askQuestionHint:gt?(()=>{let L=gt.questions.length,X=!!gt.questions[Ae]?.allowMultiple,ie=Ae>=L-1,ge=X?ie?"Enter \u63D0\u4EA4":"Enter \u4E0B\u4E00\u9898":ie?"Enter \u9009\u4E2D\u5E76\u63D0\u4EA4":"Enter \u9009\u4E2D\u5E76\u4E0B\u4E00\u9898",St=X?" \xB7 Space \u52FE\u9009\u9879":"",Ot=gt.allowSkipAll?" \xB7 Esc \u8DF3\u8FC7":"";return`Q${Ae+1}/${L} \xB7 \u2191/\u2193 \u9009\u9879${St} \xB7 \u805A\u7126\u300C\u5176\u4ED6\u300D\u540E n \u5199\u8BF4\u660E \xB7 ${ge} \xB7 [ ] \u4E0A/\u4E0B\u9898${Ot}`})():"",askQuestionUiState:QF,askQuestionPopup:gt?{title:gt.title,allowSkipAll:gt.allowSkipAll,questions:gt.questions,questionIndex:Ae,optionIndex:He,selectedByQuestion:xt,optionNotesByQuestion:oc,noteCapture:t1}:void 0,loginPopup:yC?{email:sc,password:n1,focusedField:r1,submitting:ua,error:jF}:void 0,registerPopup:vC?{email:lc,code:bC,password:xC,confirmPassword:TC,displayName:wC,focusedField:rr,submitting:Qi,error:zF,success:WF}:void 0,modePickerActive:V,modePickerHint:V?"\u4EA4\u4E92\u6A21\u5F0F":"",modePickerState:V?{entries:[...$l],highlightedIndex:Te,selectedMode:Xt}:void 0,modelPickerActive:$,modelPickerHint:$?`Pick model (${A.length}) -> ${A[K]?.displayName??""}`:"",modelPickerState:$?{options:A,highlightedIndex:K,selectedModelId:j}:void 0,teamRolesPickerActive:en,teamRolesPickerHint:en?`\u5B50 Agent\uFF08${qi.length}\uFF09\u2192 ${qi[nr]?.label??""}`:"",teamRolesPickerState:en?{entries:qi,highlightedIndex:nr,selectedRoleIds:w}:void 0,conversationPickerActive:ne,conversationPickerHeading:ne?de?"@ \u6062\u590D\u4F1A\u8BDD":"@ \u4F1A\u8BDD\u5217\u8868":void 0,conversationPickerHint:ne?de?`\u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD\uFF08\u5171 ${We.length} \u4E2A\uFF09`:`\u9009\u62E9\u4F1A\u8BDD\uFF08\u5171 ${We.length} \u4E2A\uFF09`:"",conversationPickerForResume:de,conversationPickerState:ne?{options:We,highlightedIndex:te,offset:ue,viewportSize:ns.conversationPickerViewportSize,selectedConversationId:b??void 0,groupTitleForTimestamp:Jie}:void 0,exitPendingHint:_C?"\u518D\u6309 Esc \u4E00\u6B21\u4E2D\u65AD":_1.pending&&_1.keyName?`\u518D\u6309 ${_1.keyName} \u4E00\u6B21\u9000\u51FA`:"",typeaheadSuggestions:ip.suggestions,typeaheadSelectedSuggestion:ip.selectedSuggestion,typeaheadMaxColumnWidth:T1.maxColumnWidth,typeaheadCommandArgumentHint:ip.commandArgumentHint,pendingUserMessageCount:vo.length,queueSelectionActive:S,queueSelectionIndex:T,queuedUserLines:vo,helpPopupActive:d1,helpTipsData:Zv,helpTipsIndex:Xi,helpTipsOffset:kC,helpTipsViewportSize:$C,mcpPanelActive:CC,mcpServers:es,mcpViewState:Kt,mcpHighlightedIndex:op,todoPickerActive:D,todoPickerState:D?{items:ye,highlightedIndex:Se}:void 0,debugPickerActive:xn.active,debugPickerHint:xn.hint,debugPickerState:xn.active?{lines:xn.lines,offset:xn.offset,viewportSize:xn.viewportSize,logPath:xn.logPath}:void 0})})}var Xv=class{frameCount=0;flickerCount=0;reasons=new Map;onFrame(e){this.frameCount+=1;let n=e;if(!(!n||!Array.isArray(n.flickers)||n.flickers.length===0)){this.flickerCount+=n.flickers.length;for(let o of n.flickers){let r=typeof o?.reason=="string"&&o.reason.trim()?o.reason:"unknown";this.reasons.set(r,(this.reasons.get(r)??0)+1)}}}snapshot(){let e={};for(let[n,o]of this.reasons.entries())e[n]=o;return{frameCount:this.frameCount,flickerCount:this.flickerCount,reasons:e}}};function gC(t,e){let n=Object.entries(e.reasons).sort((r,i)=>i[1]-r[1]),o=n.length===0?"reasons=none":`reasons=${n.map(([r,i])=>`${r}:${i}`).join(",")}`;return`${t} frames=${e.frameCount} flickers=${e.flickerCount} ${o}`}function ose(t){if(typeof t=="boolean")return t;if(typeof t!="string")return!1;let e=t.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"||e==="on"}async function DF(t){let e=ose(process.env.PANDA_CLI_FLICKER_STATS),n=e?new Xv:null,{options:o,stdin:r,ownership:i}=Y7(t,!1);X7(r);let s;try{let a=await rse({...o,onFrame:e?l=>n?.onFrame(l):void 0});n&&(process.stderr?.write?.(`[panda-flicker] enabled, sampling every 2s
|
|
2097
2097
|
`),s=setInterval(()=>{process.stderr?.write?.(`${gC("[panda-flicker]",n.snapshot())}
|
|
2098
2098
|
`)},2e3)),process.stdout?.write?.(nse),a.render(MF.createElement(J7,null,MF.createElement(AF,{args:t}))),await a.waitUntilExit()}finally{s&&clearInterval(s),n&&process.stderr?.write?.(`${gC("[panda-flicker][final]",n.snapshot())}
|
|
2099
|
-
`),eN(r,i)}}import{readFileSync as OF}from"node:fs";import{dirname as ise,join as hC}from"node:path";import{fileURLToPath as sse}from"node:url";var LF=!1;function ase(){try{let t=ise(sse(import.meta.url)),e=hC(t,"..",".."),n=hC(e,"product.json"),o=OF(n,"utf-8"),r=JSON.parse(o),i=hC(e,"package.json"),s=JSON.parse(OF(i,"utf-8")),a=r.pandacliVersion?.trim();if(!a)return null;let l=r.pandaVersion?.trim()??r.version?.trim()??String(s.version??"").trim()??"0.0.0";return{pandacliVersion:a,pandaProductVersion:l}}catch{return null}}function NF(){let t=ase();return t?(LF||(LF=!0,console.warn("[panda-cli] \u4F7F\u7528\u4ED3\u5E93\u6839 product.json \u7248\u672C\uFF08\u672A\u68C0\u6D4B\u5230\u6784\u5EFA\u671F\u6CE8\u5165\u5E38\u91CF\uFF09")),t):{pandacliVersion:"0.0.0-dev",pandaProductVersion:"0.0.0-dev"}}function lse(){return"0.1.
|
|
2099
|
+
`),eN(r,i)}}import{readFileSync as OF}from"node:fs";import{dirname as ise,join as hC}from"node:path";import{fileURLToPath as sse}from"node:url";var LF=!1;function ase(){try{let t=ise(sse(import.meta.url)),e=hC(t,"..",".."),n=hC(e,"product.json"),o=OF(n,"utf-8"),r=JSON.parse(o),i=hC(e,"package.json"),s=JSON.parse(OF(i,"utf-8")),a=r.pandacliVersion?.trim();if(!a)return null;let l=r.pandaVersion?.trim()??r.version?.trim()??String(s.version??"").trim()??"0.0.0";return{pandacliVersion:a,pandaProductVersion:l}}catch{return null}}function NF(){let t=ase();return t?(LF||(LF=!0,console.warn("[panda-cli] \u4F7F\u7528\u4ED3\u5E93\u6839 product.json \u7248\u672C\uFF08\u672A\u68C0\u6D4B\u5230\u6784\u5EFA\u671F\u6CE8\u5165\u5E38\u91CF\uFF09")),t):{pandacliVersion:"0.0.0-dev",pandaProductVersion:"0.0.0-dev"}}function lse(){return"0.1.26"}function cse(){return"0.9.9"}function use(t,e){return`pandacli ${t} (panda ${e})`}function $F(){return use(lse(),cse())}function mse(){if(process.platform==="win32")return!1;try{let t=pse("/dev/tty","r");return dse(t),!0}catch{return!1}}function gse(){let t=["Panda CLI \u547D\u4EE4\u884C\u52A9\u624B","","\u7528\u6CD5\uFF1A"," panda [\u9009\u9879] [prompt]",' panda --print [\u9009\u9879] "\u4F60\u7684\u95EE\u9898"'," panda mcp <subcommand> [\u53C2\u6570]"," panda update [\u9009\u9879]","","\u8BF4\u660E\uFF1A"," \u9ED8\u8BA4\u8FDB\u5165\u4EA4\u4E92\u6A21\u5F0F\uFF1B\u4F7F\u7528 --print \u8FDB\u5165\u975E\u4EA4\u4E92\u4E00\u6B21\u6027\u6267\u884C\u6A21\u5F0F\u3002","","\u5E38\u7528\u9009\u9879\uFF1A"," -h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F"," -V, --version \u663E\u793A CLI \u4E0E Panda \u4EA7\u54C1\u7248\u672C"," --workspace <path> \u6307\u5B9A\u5DE5\u4F5C\u533A\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"," --prompt <text> \u6307\u5B9A\u8F93\u5165\u6587\u672C\uFF08\u53EF\u4E0E\u4F4D\u7F6E\u53C2\u6570\u4E8C\u9009\u4E00\uFF09"," --print \u542F\u7528\u975E\u4EA4\u4E92\u6A21\u5F0F"," --output-format <text|json|stream-json> \u975E\u4EA4\u4E92\u8F93\u51FA\u683C\u5F0F\uFF08\u9ED8\u8BA4 text\uFF09"," --render-mode <auto|incremental|safe|full> \u6E32\u67D3\u6A21\u5F0F\uFF08\u9ED8\u8BA4 auto\uFF09"," --mode <agent|ask|plan|office|team> \u6307\u5B9A\u4F1A\u8BDD\u6A21\u5F0F"," --model <modelId> \u6307\u5B9A\u672C\u6B21\u6267\u884C\u6A21\u578B\uFF08\u4E0D\u6539\u5DE5\u4F5C\u533A\u9ED8\u8BA4\uFF09"," --conversation <id> \u6307\u5B9A\u4F1A\u8BDD ID\uFF08\u5B58\u5728\u5219\u6062\u590D\uFF0C\u4E0D\u5B58\u5728\u5219\u6309\u8BE5 ID \u521B\u5EFA\uFF09"," --resume-latest \u542F\u52A8\u65F6\u81EA\u52A8\u6062\u590D\u6700\u8FD1\u66F4\u65B0\u7684\u5DF2\u4FDD\u5B58\u4F1A\u8BDD\uFF08\u9ED8\u8BA4\u4E0D\u6062\u590D\uFF09"," --pack <id> \u9ED8\u8BA4\u5207\u6362\u5230\u6307\u5B9A pack \u6A21\u5F0F","","\u4E92\u65A5\u5173\u7CFB\uFF1A",...I7.map(e=>` - ${e}`),"","\u6A21\u5F0F\u53EF\u9009\u503C\uFF1A",` ${k7.join(", ")}`,"","\u793A\u4F8B\uFF1A",' panda --print --mode plan --model gpt-4.1 "\u8BF7\u5148\u7ED9\u5B9E\u73B0\u8BA1\u5212"',' panda --print --conversation my-conv-id "\u7EE7\u7EED\u4E0A\u6B21\u4EFB\u52A1"',' panda --print --pack backend "\u68C0\u67E5\u63A5\u53E3\u6743\u9650"'," panda mcp --help","","\u5B50\u547D\u4EE4\uFF1A"," mcp \u7BA1\u7406 MCP \u670D\u52A1\u5668\u914D\u7F6E"," update \u68C0\u67E5\u5E76\u5347\u7EA7\u5230\u6700\u65B0\u7248\u672C","","\u4EA4\u4E92\u6A21\u5F0F\u5E38\u7528\u659C\u6760\u547D\u4EE4\uFF1A"," /login \u767B\u5F55 Panda \u8D26\u53F7\uFF08\u7528\u6237\u540D/\u90AE\u7BB1 + \u5BC6\u7801\uFF09"," /logout \u9000\u51FA\u5F53\u524D\u767B\u5F55"," /whoami \u663E\u793A\u5F53\u524D\u767B\u5F55\u7528\u6237"," /model [modelId] \u5148\u5237\u65B0\u6A21\u578B\u5217\u8868\uFF0C\u518D\u6253\u5F00\u9009\u62E9\u5668\u6216\u76F4\u63A5\u5207\u6362\u6A21\u578B"];console.log(t.join(`
|
|
2100
2100
|
`))}async function hse(){let t=process.argv.slice(2);if(t.includes("--version")||t.includes("-V")){console.log($F());return}if(t[0]==="mcp"){let o=await Ek(t.slice(1),process.cwd());o!==0&&process.exit(o);return}if(t[0]==="update"){let o=await O7(t.slice(1));o!==0&&process.exit(o);return}if(t.includes("--help")||t.includes("-h")){gse();return}let e=C7(process.argv.slice(2));if(e.print){await P7(e);return}process.stdin?.isTTY||mse()||(console.error("[panda-cli] stdin is not a TTY and /dev/tty is unavailable. Run in a real terminal, or pass --print for non-interactive mode."),process.exit(1)),await DF(e)}function yse(){let t=process.argv[1];if(!t)return!1;try{let e=FF(fse(import.meta.url)),n=FF(t);return process.platform==="win32"?e.toLowerCase()===n.toLowerCase():e===n}catch{return!1}}yse()&&hse().catch(t=>{console.error(t instanceof Error?t.message:String(t)),process.exit(1)});export{hse as main};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panda-agent/panda-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Panda CLI (Ink). pandacli;cwd 为工作区默认。发版前 npm run release:pack(含 vendor/panda-ink 内 build + bundle;rg 由 optional @panda-agent/ripgrep-* 或 PATH)。",
|
|
6
6
|
"type": "module",
|