blade-code 0.8.1 → 0.8.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.
Files changed (75) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-hjx5n3dw.js → chunk-0g9cb41d.js} +2 -2
  3. package/dist/{chunk-ctqf59q1.js → chunk-0z5qe4m2.js} +1 -1
  4. package/dist/{chunk-d4ex0qvs.js → chunk-11s7t9dp.js} +2 -2
  5. package/dist/{chunk-6yqzfz8t.js → chunk-1evg2hdd.js} +2 -2
  6. package/dist/{chunk-xhnyy54e.js → chunk-1x3846v7.js} +1 -1
  7. package/dist/chunk-3wghk9bp.js +1 -0
  8. package/dist/{chunk-twem6p0g.js → chunk-4fye39a8.js} +2 -2
  9. package/dist/chunk-510rwhx6.js +1 -0
  10. package/dist/{chunk-kawv31m3.js → chunk-5ad4qmfj.js} +1 -1
  11. package/dist/{chunk-0dj326ms.js → chunk-5fw9k1ff.js} +2 -2
  12. package/dist/{chunk-1pt090dg.js → chunk-6avkjdjc.js} +3 -3
  13. package/dist/{chunk-k47ssv3b.js → chunk-6jq8h5s9.js} +2 -2
  14. package/dist/{chunk-1smf2dj3.js → chunk-6x6zqjcs.js} +1 -1
  15. package/dist/{chunk-jt62ctz7.js → chunk-81p4kz0b.js} +1 -1
  16. package/dist/chunk-83dkggbx.js +1 -0
  17. package/dist/{chunk-pdydx73a.js → chunk-887qxhn5.js} +2 -2
  18. package/dist/{chunk-syj3anec.js → chunk-8epvwyg8.js} +2 -2
  19. package/dist/{chunk-tv4r86ez.js → chunk-8fp3q919.js} +2 -2
  20. package/dist/{chunk-yhpm9azy.js → chunk-9b297mzh.js} +1 -1
  21. package/dist/chunk-9jkbykwq.js +1 -0
  22. package/dist/{chunk-34pdtz4q.js → chunk-9xvnrq7m.js} +2 -2
  23. package/dist/chunk-a83s9mww.js +1 -0
  24. package/dist/{chunk-06h100e2.js → chunk-a90mfxv9.js} +1 -1
  25. package/dist/chunk-btst30by.js +6 -0
  26. package/dist/chunk-e9t5ga1b.js +1 -0
  27. package/dist/chunk-eycs00af.js +1577 -0
  28. package/dist/{chunk-49g067ek.js → chunk-f3pvwxp8.js} +3 -3
  29. package/dist/{chunk-neenhtxw.js → chunk-fkaebj8c.js} +1 -1
  30. package/dist/{chunk-bm8vwfez.js → chunk-fpdqvnmq.js} +2 -2
  31. package/dist/chunk-gvf4gff0.js +9 -0
  32. package/dist/{chunk-qwdbqjh7.js → chunk-j14rn2dx.js} +2 -2
  33. package/dist/{chunk-61952mn3.js → chunk-j77gyhpf.js} +1 -1
  34. package/dist/chunk-kcjgbbec.js +1 -0
  35. package/dist/{chunk-9ad7tt9s.js → chunk-kne7h7p5.js} +1 -1
  36. package/dist/{chunk-9xkjb87h.js → chunk-p4yrmzyr.js} +1 -1
  37. package/dist/chunk-q223bq79.js +1 -0
  38. package/dist/chunk-qwfqp465.js +2 -0
  39. package/dist/{chunk-gsfkrr25.js → chunk-rxjt7ma7.js} +1 -1
  40. package/dist/{chunk-wmes2tt9.js → chunk-s1y8w68s.js} +1 -1
  41. package/dist/{chunk-sr3bzb95.js → chunk-w11ht6f9.js} +2 -2
  42. package/dist/{chunk-dr06x0cw.js → chunk-w4xcmzjm.js} +1 -1
  43. package/dist/chunk-x83a97eh.js +1 -0
  44. package/dist/{chunk-x6gt63vz.js → chunk-y08szyf9.js} +28 -28
  45. package/dist/chunk-yfcfx0zk.js +6 -0
  46. package/dist/chunk-zns65xsy.js +2 -0
  47. package/dist/web/assets/FilePreview-60E51igH.js +7 -0
  48. package/dist/web/assets/{MarkdownRenderer-JJScfgAO.js → MarkdownRenderer-DU7jPn9K.js} +1 -1
  49. package/dist/web/assets/{McpModal-CiCuIUxC.js → McpModal-CAMU6yrS.js} +2 -2
  50. package/dist/web/assets/{SettingsModal-Bew818xl.js → SettingsModal-Cjj8NUQy.js} +1 -1
  51. package/dist/web/assets/{SettingsStore-B_4zN-c-.js → SettingsStore-CjvkbtuZ.js} +1 -1
  52. package/dist/web/assets/{SkillsModal-Cot4Rb89.js → SkillsModal-Cyc2JAFj.js} +1 -1
  53. package/dist/web/assets/{TerminalPanel-DxB67ObY.js → TerminalPanel-DI-Ls-U8.js} +1 -1
  54. package/dist/web/assets/index-BC0ssrep.js +16 -0
  55. package/dist/web/assets/index-Ci6gCUjf.css +1 -0
  56. package/dist/web/assets/{vendor-icons-DqO8ishN.js → vendor-icons-DBM55KTG.js} +70 -40
  57. package/dist/web/index.html +2 -2
  58. package/package.json +1 -1
  59. package/dist/chunk-04920kz2.js +0 -1570
  60. package/dist/chunk-07jvw0kn.js +0 -1
  61. package/dist/chunk-14erxdhd.js +0 -1
  62. package/dist/chunk-42ch5zg4.js +0 -1
  63. package/dist/chunk-7j6rxyt8.js +0 -9
  64. package/dist/chunk-a12tmmfr.js +0 -1
  65. package/dist/chunk-cnftrx3g.js +0 -1
  66. package/dist/chunk-epp5jx5f.js +0 -6
  67. package/dist/chunk-j39q2kx7.js +0 -1
  68. package/dist/chunk-j6hpzkpq.js +0 -6
  69. package/dist/chunk-n4f8tseg.js +0 -2
  70. package/dist/chunk-nc4kfwef.js +0 -1
  71. package/dist/chunk-v3ctg84r.js +0 -1
  72. package/dist/chunk-v5rn5r1h.js +0 -1
  73. package/dist/web/assets/FilePreview-Chqi7chf.js +0 -7
  74. package/dist/web/assets/index-B-b3Yc5H.css +0 -1
  75. package/dist/web/assets/index-B3dW1Scg.js +0 -16
@@ -1,7 +1,7 @@
1
- import{e as g9,f as c9}from"./chunk-xhnyy54e.js";import{h as bJ,i as AJ,j as yJ}from"./chunk-1smf2dj3.js";import{l as V$,m as Y8,o as O1}from"./chunk-wmes2tt9.js";import{y as SJ}from"./chunk-twem6p0g.js";import{$ as _2,C as XQ,D as $Q,E as J2,F as CJ,L as k1,M as S1,N as l1,O as j6,P as E6,S as S$,T as D8,U as fJ,V as A2,W as y2,X as c6,Y as DJ,Z as x6,z as z2}from"./chunk-04920kz2.js";import"./chunk-9ad7tt9s.js";import{ca as TJ}from"./chunk-k47ssv3b.js";import"./chunk-bm8vwfez.js";import{Ca as m0,ga as X$,ha as E0,ia as D1,ja as SQ,ka as K$,la as e$,ma as s2,na as oQ,oa as E9,pa as e2,qa as U$,ra as r0,sa as MJ,ta as z1,ua as BJ,wa as D$}from"./chunk-tv4r86ez.js";import{Da as PJ,Fa as IJ}from"./chunk-qwdbqjh7.js";import{Ia as iQ}from"./chunk-d4ex0qvs.js";import{Oa as k9}from"./chunk-pdydx73a.js";import{Sa as KJ,Ta as kJ,ab as a6}from"./chunk-1pt090dg.js";import{sb as n8}from"./chunk-9xkjb87h.js";import{tb as VQ,vb as q1}from"./chunk-49g067ek.js";import"./chunk-ctqf59q1.js";import"./chunk-jt62ctz7.js";import{Fb as R2,Ib as t}from"./chunk-gsfkrr25.js";import"./chunk-0dj326ms.js";import{Qb as RJ,Tb as T1}from"./chunk-34pdtz4q.js";import{dc as z$}from"./chunk-hjx5n3dw.js";import{ec as DQ}from"./chunk-dr06x0cw.js";import{useMemoizedFn as J6}from"ahooks";import{useEffect as oZ,useState as Y6}from"react";import{useMemoizedFn as j0}from"ahooks";import{Box as c1}from"ink";import{useEffect as x1,useRef as j8}from"react";import{useShallow as lJ}from"zustand/react/shallow";import{useStore as dJ}from"zustand";function $0($){return dJ(U$,$)}var rJ=[],r$=()=>$0(($)=>$.session.sessionId),K6=()=>$0(($)=>$.session.messages),O6=()=>$0(($)=>$.session.clearCount),z6=()=>$0(($)=>$.session.isCompacting),_6=()=>$0(($)=>$.session.tokenUsage.estimatedCostUsd),P1=()=>$0(($)=>$.session.actions),N6=()=>$0(($)=>{let{inputTokens:Q,maxContextTokens:Y}=$.session.tokenUsage;if(Y<=0)return 100;let J=Math.max(0,100-Q/Y*100);return Math.round(J)}),H6=()=>$0(($)=>$.app.initializationStatus),W6=()=>$0(($)=>$.app.initializationError),a$=()=>$0(($)=>$.app.activeModal),F6=()=>$0(($)=>$.app.tasks),L6=()=>$0(($)=>$.app.modelEditorTarget),B6=()=>$0(($)=>$.app.sessionSelectorData),w6=()=>$0(($)=>$.app.awaitingSecondCtrlC),I1=()=>$0(($)=>$.app.actions),o$=()=>$0(($)=>$.app.initializationStatus==="ready"),b6=()=>$0(($)=>$.app.tasks.length>0),G$=()=>$0(($)=>$.config.config?.permissionMode||"default"),A6=()=>$0(($)=>$.config.config?.models??rJ),i$=()=>$0(($)=>{let Q=$.config.config;if(!Q)return;let Y=Q.currentModelId;return Q.models.find((Z)=>Z.id===Y)??Q.models[0]}),y6=()=>$0(($)=>$.config.config?.currentModelId),W0=()=>$0(($)=>{return E0.getTheme()}),v6=()=>$0(($)=>$.config.config?.theme??"default"),l0=()=>$0(($)=>$.focus.currentFocus),R6=()=>$0(($)=>$.focus.actions),M1=()=>$0(($)=>$.command.isProcessing),P6=()=>$0(($)=>$.command.actions),n$=()=>$0(($)=>$.command.pendingCommands),I6=()=>$0(($)=>$.command.recoveredSteeringCount),t$=()=>$0(($)=>$.app.thinkingModeEnabled),M6=()=>$0(($)=>$.session.currentThinkingContent),T6=()=>$0(($)=>$.session.thinkingExpanded),k6=()=>$0(($)=>$.session.currentStreamingMessageId),C6=()=>$0(lJ(($)=>({lines:$.session.currentStreamingLines,tail:$.session.currentStreamingTail,lineCount:$.session.currentStreamingLineCount,version:$.session.currentStreamingVersion}))),S6=()=>$0(($)=>$.session.finalizingStreamingMessageId),f6=()=>$0(($)=>$.session.historyExpanded),D6=()=>$0(($)=>$.session.expandedMessageCount);import{useMemoizedFn as f$}from"ahooks";import{useEffect as o8,useRef as r6}from"react";function aJ($){if(!($ instanceof Error))return"未知错误";let J=$.lastError??$;if(J.responseBody)try{let q=JSON.parse(J.responseBody)?.error?.message;if(q){let U=J.statusCode?` (HTTP ${J.statusCode})`:"";return`${q}${U}`}}catch{}let Z=$.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return $.message}function oJ($){if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.includes("aborted")}function iJ($){if(!($ instanceof Error))return!1;let Q=$.message;return Q.includes("can only concatenate str")||Q.includes("image_url")||Q.includes("multimodal")||Q.includes("vision")||Q.includes("does not support images")}function s$($){let Q=oJ($),Y=iJ($),J;if(Y)J="当前模型不支持图片理解功能。请切换到支持视觉能力的模型(如 Claude 4.5、GPT-5.2、Gemini 3 Pro、Qwen3-VL-Plus 等)后重试。";else J=aJ($);return{displayMessage:J,isAbort:Q,isVisionNotSupported:Y}}import{appendFileSync as nJ,mkdirSync as tJ,writeFileSync as sJ}from"node:fs";import eJ from"node:os";import c8 from"node:path";var V6=null;function $4(){let $=process.env.BLADE_STORAGE_ROOT||c8.join(eJ.homedir(),".blade");return c8.join($,"logs","stream-debug.log")}function Q4($){if(V6===$)return;let Q=c8.dirname($);tJ(Q,{recursive:!0,mode:493}),sJ($,`=== Stream Debug Log Started: ${new Date().toISOString()} ===
1
+ import{e as g9,f as c9}from"./chunk-1x3846v7.js";import{h as bJ,i as AJ,j as yJ}from"./chunk-6x6zqjcs.js";import{l as V$,m as Y8,o as O1}from"./chunk-s1y8w68s.js";import{z as SJ}from"./chunk-4fye39a8.js";import{$ as x6,A as z2,D as XQ,E as $Q,F as J2,G as CJ,M as k1,O as S1,P as l1,Q as j6,R as E6,U as S$,V as D8,W as fJ,X as A2,Y as y2,Z as c6,_ as DJ,ba as _2}from"./chunk-eycs00af.js";import"./chunk-kne7h7p5.js";import{ea as TJ}from"./chunk-6jq8h5s9.js";import"./chunk-fpdqvnmq.js";import{Ea as m0,ia as X$,ja as E0,ka as D1,la as SQ,ma as K$,na as e$,oa as s2,pa as oQ,qa as E9,ra as e2,sa as U$,ta as r0,ua as MJ,va as z1,wa as BJ,ya as D$}from"./chunk-8fp3q919.js";import{Fa as PJ,Ha as IJ}from"./chunk-j14rn2dx.js";import{Ka as iQ}from"./chunk-11s7t9dp.js";import{Qa as k9}from"./chunk-887qxhn5.js";import{Ua as KJ,Va as kJ,cb as a6}from"./chunk-6avkjdjc.js";import{ub as n8}from"./chunk-p4yrmzyr.js";import{vb as VQ,xb as q1}from"./chunk-f3pvwxp8.js";import"./chunk-0z5qe4m2.js";import"./chunk-81p4kz0b.js";import{Hb as R2,Kb as t}from"./chunk-rxjt7ma7.js";import"./chunk-5fw9k1ff.js";import{Sb as RJ,Vb as T1}from"./chunk-9xvnrq7m.js";import{fc as z$}from"./chunk-0g9cb41d.js";import{gc as DQ}from"./chunk-w4xcmzjm.js";import{useMemoizedFn as J6}from"ahooks";import{useEffect as oZ,useState as Y6}from"react";import{useMemoizedFn as j0}from"ahooks";import{Box as c1}from"ink";import{useEffect as x1,useRef as j8}from"react";import{useShallow as lJ}from"zustand/react/shallow";import{useStore as dJ}from"zustand";function $0($){return dJ(U$,$)}var rJ=[],r$=()=>$0(($)=>$.session.sessionId),K6=()=>$0(($)=>$.session.messages),O6=()=>$0(($)=>$.session.clearCount),z6=()=>$0(($)=>$.session.isCompacting),_6=()=>$0(($)=>$.session.tokenUsage.estimatedCostUsd),P1=()=>$0(($)=>$.session.actions),N6=()=>$0(($)=>{let{inputTokens:Q,maxContextTokens:Y}=$.session.tokenUsage;if(Y<=0)return 100;let J=Math.max(0,100-Q/Y*100);return Math.round(J)}),H6=()=>$0(($)=>$.app.initializationStatus),W6=()=>$0(($)=>$.app.initializationError),a$=()=>$0(($)=>$.app.activeModal),F6=()=>$0(($)=>$.app.tasks),L6=()=>$0(($)=>$.app.modelEditorTarget),B6=()=>$0(($)=>$.app.sessionSelectorData),w6=()=>$0(($)=>$.app.awaitingSecondCtrlC),I1=()=>$0(($)=>$.app.actions),o$=()=>$0(($)=>$.app.initializationStatus==="ready"),b6=()=>$0(($)=>$.app.tasks.length>0),G$=()=>$0(($)=>$.config.config?.permissionMode||"default"),A6=()=>$0(($)=>$.config.config?.models??rJ),i$=()=>$0(($)=>{let Q=$.config.config;if(!Q)return;let Y=Q.currentModelId;return Q.models.find((Z)=>Z.id===Y)??Q.models[0]}),y6=()=>$0(($)=>$.config.config?.currentModelId),W0=()=>$0(($)=>{return E0.getTheme()}),v6=()=>$0(($)=>$.config.config?.theme??"default"),l0=()=>$0(($)=>$.focus.currentFocus),R6=()=>$0(($)=>$.focus.actions),M1=()=>$0(($)=>$.command.isProcessing),P6=()=>$0(($)=>$.command.actions),n$=()=>$0(($)=>$.command.pendingCommands),I6=()=>$0(($)=>$.command.recoveredSteeringCount),t$=()=>$0(($)=>$.app.thinkingModeEnabled),M6=()=>$0(($)=>$.session.currentThinkingContent),T6=()=>$0(($)=>$.session.thinkingExpanded),k6=()=>$0(($)=>$.session.currentStreamingMessageId),C6=()=>$0(lJ(($)=>({lines:$.session.currentStreamingLines,tail:$.session.currentStreamingTail,lineCount:$.session.currentStreamingLineCount,version:$.session.currentStreamingVersion}))),S6=()=>$0(($)=>$.session.finalizingStreamingMessageId),f6=()=>$0(($)=>$.session.historyExpanded),D6=()=>$0(($)=>$.session.expandedMessageCount);import{useMemoizedFn as f$}from"ahooks";import{useEffect as o8,useRef as r6}from"react";function aJ($){if(!($ instanceof Error))return"未知错误";let J=$.lastError??$;if(J.responseBody)try{let q=JSON.parse(J.responseBody)?.error?.message;if(q){let U=J.statusCode?` (HTTP ${J.statusCode})`:"";return`${q}${U}`}}catch{}let Z=$.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return $.message}function oJ($){if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.includes("aborted")}function iJ($){if(!($ instanceof Error))return!1;let Q=$.message;return Q.includes("can only concatenate str")||Q.includes("image_url")||Q.includes("multimodal")||Q.includes("vision")||Q.includes("does not support images")}function s$($){let Q=oJ($),Y=iJ($),J;if(Y)J="当前模型不支持图片理解功能。请切换到支持视觉能力的模型(如 Claude 4.5、GPT-5.2、Gemini 3 Pro、Qwen3-VL-Plus 等)后重试。";else J=aJ($);return{displayMessage:J,isAbort:Q,isVisionNotSupported:Y}}import{appendFileSync as nJ,mkdirSync as tJ,writeFileSync as sJ}from"node:fs";import eJ from"node:os";import c8 from"node:path";var V6=null;function $4(){let $=process.env.BLADE_STORAGE_ROOT||c8.join(eJ.homedir(),".blade");return c8.join($,"logs","stream-debug.log")}function Q4($){if(V6===$)return;let Q=c8.dirname($);tJ(Q,{recursive:!0,mode:493}),sJ($,`=== Stream Debug Log Started: ${new Date().toISOString()} ===
2
2
  `),V6=$}function x8($,Q,Y){try{let J=$4();Q4(J);let Z=new Date().toISOString(),X=Y?` | ${JSON.stringify(Y)}`:"",q=`[${Z}] [${$}] ${Q}${X}
3
3
  `;nJ(J,q)}catch{}}var C$=T1("UI");function h6($,Q){let Y=!1;return(J)=>{switch(J.kind){case"content_delta":if(Y||$.signal.aborted)break;Q.contentDeltaCount++,Q.contentDeltaTotalLen+=J.delta.length,x8("loopEventHandler","onContentDelta",{callCount:Q.contentDeltaCount,deltaLen:J.delta.length,totalLen:Q.contentDeltaTotalLen}),$.streamingBuffer.batchAppendContent(J.delta);break;case"thinking_delta":if(Y||$.signal.aborted)break;if($.thinkingModeEnabled)$.streamingBuffer.batchAppendThinking(J.delta);break;case"stream_end":{if(C$.debug("[loopEventHandler] stream_end",{contentDeltaCount:Q.contentDeltaCount,contentDeltaTotalLen:Q.contentDeltaTotalLen,streamFinalized:Y,signalAborted:$.signal.aborted}),x8("loopEventHandler","onStreamEnd",{contentDeltaCallCount:Q.contentDeltaCount,contentDeltaTotalLen:Q.contentDeltaTotalLen,streamFinalized:Y,signalAborted:$.signal.aborted}),Y||$.signal.aborted){Y=!0;break}let{extraContent:Z,extraThinking:X}=$.streamingBuffer.drainPendingBuffers(),q=$.getStreamingMessageId();if(q){if(Z)K$(q,Z);e$(q)}$.sessionActions.finalizeStreamingMessage(Z,X),Y=!0;break}case"model_fallback":Y=!0,$.streamingBuffer.resetStreamingBuffers(),$.sessionActions.discardStreamingMessage(),$.sessionActions.setCurrentThinkingContent(null);break;case"tool_start":{let Z=J.toolCall;if(!("function"in Z))break;if(C$.debug("[loopEventHandler] tool_start",{toolName:Z.function.name,toolKind:J.toolKind}),["TaskCreate","TaskUpdate","TaskList"].includes(Z.function.name))break;try{let X=JSON.parse(Z.function.arguments),q=j6(Z.function.name,X);$.sessionActions.addToolMessage(q,{toolName:Z.function.name,phase:"start",summary:q,params:X})}catch(X){C$.error("[loopEventHandler] onToolStart error:",X)}break}case"tool_result":{let Z=J.toolCall;if(!("function"in Z))break;C$.debug("[loopEventHandler] tool_result",{toolName:Z.function.name,success:J.result.success});let X=E6(Z.function.name,J.result);$.sessionActions.addToolMessage(X.summary,{toolName:Z.function.name,phase:"complete",summary:X.summary,detail:X.detail});break}case"token_usage":$.sessionActions.updateTokenUsage(J.usage);break;case"compaction":if($.sessionActions.setCompacting(J.phase==="start"),J.phase==="end")$.sessionActions.resetContextUsage();break;case"turn_start":C$.debug("[loopEventHandler] turn_start",{turn:J.turn,maxTurns:J.maxTurns}),$.sessionActions.updateTokenUsage({turnCount:J.turn}),Y=!1;break;case"task_update":$.appActions.setTasks(J.tasks);break;case"steering_applied":for(let Z=0;Z<J.count;Z++)$.commandActions.dequeueCommand();if(J.recovered>0)$.commandActions.setRecoveredSteeringCount(J.recovered);break;case"follow_up_started":for(let Z of J.messages){if(!Z.recovered||Z.persisted)continue;let X=typeof Z.content==="string"?Z.content:Z.content.map((q)=>q.type==="text"?q.text:"[Image]").join(`
4
- `);$.sessionActions.addUserMessage(X)}if(J.recovered>0)$.commandActions.setRecoveredSteeringCount(J.recovered);break;case"goal_updated":case"goal_continuation_started":break;case"subagent_spawned":case"subagent_completed":break;default:{let Z=J}}}}function d8($){let{text:Q,images:Y,parts:J}=$;if(Y.length===0)return Q;let Z=[];for(let X of J)if(X.type==="text")Z.push({type:"text",text:X.text});else Z.push({type:"image_url",image_url:{url:`data:${X.mimeType};base64,${X.base64}`}});return Z}function m6($){return{role:$.role,content:$.content}}function $8($){if(!$.restoredContextMessages||$.restoredVisibleMessageCount<=0)return $.messages.map(m6);let Q=$.messages.slice($.restoredVisibleMessageCount).map(m6);return[...$.restoredContextMessages,...Q]}import J4 from"node:path";function p6($){if($.length<=8)return $;return`${$.slice(0,8)}…`}function l8($){return J4.resolve($)}async function Q8($,Q){return k1.listSessions({cwd:l8(Q),includeSubagents:!1})}async function J8($,Q,Y,J){let{intent:Z,session:X,newSessionId:q,announceFork:U}=$,z=l8(Q);if(l8(X.projectPath)!==z)throw Error("Interactive session activation is limited to the current workspace");if(Z==="fork"){let _=await k1.forkSession(X.sessionId,{...q?{newSessionId:q}:{},sourceProjectPath:z,targetProjectPath:z}),O=[...k1.toUISafeMessages(_.messages)];if(U!==!1){let N=Date.parse(_.metadata.lastMessageTime);O.push({id:"fork-announcement-"+_.sessionId,role:"assistant",content:"Forked "+p6(X.sessionId)+" → "+p6(_.sessionId),timestamp:Number.isNaN(N)?0:N})}return await J(),Y.restoreSession(_.sessionId,O,_.messages),{sessionId:_.sessionId,messages:_.messages}}let F=await k1.loadSession(X.sessionId,X.projectPath),G=k1.toUISafeMessages(F);return await J(),Y.restoreSession(X.sessionId,G,F),{sessionId:X.sessionId,messages:F}}function g6($){return typeof $==="object"&&$!==null&&typeof $.sessionId==="string"&&typeof $.projectPath==="string"&&typeof $.rootId==="string"&&typeof $.messageCount==="number"&&typeof $.firstMessageTime==="string"&&typeof $.lastMessageTime==="string"&&typeof $.hasErrors==="boolean"}function Y4($){return typeof $==="object"&&$!==null&&$.action==="invoke_skill"&&typeof $.skillName==="string"}function Z4($){return typeof $==="object"&&$!==null&&$.action==="invoke_custom_command"&&typeof $.commandName==="string"&&typeof $.processedContent==="string"}function X4($){return typeof $==="object"&&$!==null&&$.action==="invoke_plugin_command"&&typeof $.commandName==="string"&&typeof $.processedContent==="string"}function q4($){return typeof $==="object"&&$!==null&&$.action==="invoke_once_model"&&typeof $.modelId==="string"&&typeof $.prompt==="string"}function U4($){return typeof $==="object"&&$!==null&&["start_goal","resume_goal"].includes(String($.action))&&typeof $.goal?.objective==="string"}function G4($){return typeof $==="object"&&$!==null&&$.action==="rewind_session"&&typeof $.sessionId==="string"&&Array.isArray($.messages)&&Array.isArray($.visibleMessages)}function K4($){if(typeof $!=="object"||$===null)return!1;let Q=$.intent;if(Q!=="resume"&&Q!=="fork")return!1;let Y=$.action;if(Y==="select_session"){let J=$.sessions;return Array.isArray(J)&&J.every((Z)=>g6(Z))}if(Y==="activate_session")return g6($.session);return!1}function O4($,Q,Y,J){switch($){case"show_theme_selector":return Y.setActiveModal("themeSelector"),!0;case"show_model_selector":return Y.setActiveModal("modelSelector"),!0;case"show_model_add_wizard":return Y.setActiveModal("modelAddWizard"),!0;case"show_permissions_manager":return Y.setActiveModal("permissionsManager"),!0;case"show_agents_manager":return Y.setActiveModal("agentsManager"),!0;case"show_skills_manager":return Y.setActiveModal("skillsManager"),!0;case"show_hooks_manager":return Y.setActiveModal("hooksManager"),!0;case"show_plugins_manager":return Y.setActiveModal("pluginsManager"),!0;case"show_agent_creation_wizard":return Y.setActiveModal("agentCreationWizard"),!0;case"show_session_selector":{let Z=Q?.sessions;return Y.showSessionSelector(Z??[],"resume"),!0}case"session_forked":{let Z=Q;if(Z?.action!=="restore_forked_session"||!Z.sessionId||!Array.isArray(Z.messages)||!Array.isArray(Z.visibleMessages))return!1;return J.restoreSession(Z.sessionId,Z.visibleMessages,Z.messages),!0}case"clear_screen":return J.clearMessages(),J.setError(null),J.resetTokenUsage(),Y.setTasks([]),!0;case"compact_completed":case"compact_fallback":{let Z=Q,X=Z?.compactedMessages;if(X)J.setCompactedContext(X);if(Z?.usage)J.updateTokenUsage({inputTokens:Z.usage.promptTokens,outputTokens:Z.usage.completionTokens,totalTokens:Z.usage.totalTokens,maxContextTokens:Z.maxContextTokens,cacheReadTokens:Z.usage.cacheReadInputTokens??0,cacheWriteTokens:Z.usage.cacheCreationInputTokens??0,costUsd:Z.usage.costUsd});return J.resetContextUsage(),!0}case"exit_application":return O1(0),!0;default:return!1}}async function r8($,Q,Y,J,Z,X,q,U,z){let{text:K}=$;if(!c6(K))return{type:"not_slash"};let F={cwd:t(),workspaceRoot:t(),sessionId:X,messages:q,rewind:U,subagents:z,signal:J},G=await x6(K,F);if(G.success&&K4(G.data)){if(G.data.action==="select_session")return Q.showSessionSelector(G.data.sessions,G.data.intent),{type:"handled",commandResult:{success:!0}};return await J8(G.data,t(),Y,Z),{type:"handled",commandResult:{success:!0}}}if(G.success&&G4(G.data))return Y.restoreSession(G.data.sessionId,G.data.visibleMessages,G.data.messages),Q.setTasks([]),{type:"handled",commandResult:{success:!0}};if(G.message){if(O4(G.message,G.data,Q,Y))return{type:"handled",commandResult:{success:!0}}}if(Y4(G.data)){let{skillName:O,skillArgs:N}=G.data,H=N?`Please use the "${O}" skill to help me with: ${N}`:`Please use the "${O}" skill.`;return Y.addUserMessage(H),{type:"continue_as_agent",result:{userDisplayMessage:H,agentInput:{displayText:H,text:H,images:[],parts:[{type:"text",text:H}]},userMessageAlreadyAdded:!0}}}if(Z4(G.data)){let{commandName:O,processedContent:N}=G.data;Y.addUserMessage(K);let H=`# Custom Command: /${O}
4
+ `);$.sessionActions.addUserMessage(X)}if(J.recovered>0)$.commandActions.setRecoveredSteeringCount(J.recovered);break;case"goal_updated":case"goal_continuation_started":break;case"subagent_spawned":case"subagent_completed":break;default:{let Z=J}}}}function d8($){let{text:Q,images:Y,parts:J}=$;if(Y.length===0)return Q;let Z=[];for(let X of J)if(X.type==="text")Z.push({type:"text",text:X.text});else Z.push({type:"image_url",image_url:{url:`data:${X.mimeType};base64,${X.base64}`}});return Z}function m6($){return{role:$.role,content:$.content}}function $8($){if(!$.restoredContextMessages||$.restoredVisibleMessageCount<=0)return $.messages.map(m6);let Q=$.messages.slice($.restoredVisibleMessageCount).map(m6);return[...$.restoredContextMessages,...Q]}import J4 from"node:path";function p6($){if($.length<=8)return $;return`${$.slice(0,8)}…`}function l8($){return J4.resolve($)}async function Q8($,Q){return k1.listSessions({cwd:l8(Q),includeSubagents:!1})}async function J8($,Q,Y,J){let{intent:Z,session:X,newSessionId:q,announceFork:U}=$,z=l8(Q);if(l8(X.projectPath)!==z)throw Error("Interactive session activation is limited to the current workspace");if(Z==="fork"){let _=await k1.forkSession(X.sessionId,{...q?{newSessionId:q}:{},sourceProjectPath:z,targetProjectPath:z}),O=[...k1.toUISafeMessages(_.messages)];if(U!==!1){let N=Date.parse(_.metadata.lastMessageTime);O.push({id:"fork-announcement-"+_.sessionId,role:"assistant",content:"Forked "+p6(X.sessionId)+" → "+p6(_.sessionId),timestamp:Number.isNaN(N)?0:N})}return await J(),Y.restoreSession(_.sessionId,O,_.messages),{sessionId:_.sessionId,messages:_.messages}}let F=await k1.loadSession(X.sessionId,X.projectPath),G=k1.toUISafeMessages(F);return await J(),Y.restoreSession(X.sessionId,G,F),{sessionId:X.sessionId,messages:F}}function g6($){return typeof $==="object"&&$!==null&&typeof $.sessionId==="string"&&typeof $.projectPath==="string"&&typeof $.rootId==="string"&&typeof $.messageCount==="number"&&typeof $.firstMessageTime==="string"&&typeof $.lastMessageTime==="string"&&typeof $.hasErrors==="boolean"}function Y4($){return typeof $==="object"&&$!==null&&$.action==="invoke_skill"&&typeof $.skillName==="string"}function Z4($){return typeof $==="object"&&$!==null&&$.action==="invoke_custom_command"&&typeof $.commandName==="string"&&typeof $.processedContent==="string"}function X4($){return typeof $==="object"&&$!==null&&$.action==="invoke_plugin_command"&&typeof $.commandName==="string"&&typeof $.processedContent==="string"}function q4($){return typeof $==="object"&&$!==null&&$.action==="invoke_once_model"&&typeof $.modelId==="string"&&typeof $.prompt==="string"}function U4($){return typeof $==="object"&&$!==null&&["start_goal","resume_goal"].includes(String($.action))&&typeof $.goal?.objective==="string"}function G4($){return typeof $==="object"&&$!==null&&$.action==="rewind_session"&&typeof $.sessionId==="string"&&Array.isArray($.messages)&&Array.isArray($.visibleMessages)}function K4($){if(typeof $!=="object"||$===null)return!1;let Q=$.intent;if(Q!=="resume"&&Q!=="fork")return!1;let Y=$.action;if(Y==="select_session"){let J=$.sessions;return Array.isArray(J)&&J.every((Z)=>g6(Z))}if(Y==="activate_session")return g6($.session);return!1}function O4($,Q,Y,J){switch($){case"show_theme_selector":return Y.setActiveModal("themeSelector"),!0;case"show_model_selector":return Y.setActiveModal("modelSelector"),!0;case"show_model_add_wizard":return Y.setActiveModal("modelAddWizard"),!0;case"show_permissions_manager":return Y.setActiveModal("permissionsManager"),!0;case"show_agents_manager":return Y.setActiveModal("agentsManager"),!0;case"show_skills_manager":return Y.setActiveModal("skillsManager"),!0;case"show_hooks_manager":return Y.setActiveModal("hooksManager"),!0;case"show_plugins_manager":return Y.setActiveModal("pluginsManager"),!0;case"show_agent_creation_wizard":return Y.setActiveModal("agentCreationWizard"),!0;case"show_session_selector":{let Z=Q?.sessions;return Y.showSessionSelector(Z??[],"resume"),!0}case"session_forked":{let Z=Q;if(Z?.action!=="restore_forked_session"||!Z.sessionId||!Array.isArray(Z.messages)||!Array.isArray(Z.visibleMessages))return!1;return J.restoreSession(Z.sessionId,Z.visibleMessages,Z.messages),!0}case"clear_screen":return J.clearMessages(),J.setError(null),J.resetTokenUsage(),Y.setTasks([]),!0;case"compact_completed":case"compact_fallback":{let Z=Q,X=Z?.compactedMessages;if(X)J.setCompactedContext(X);if(Z?.usage)J.updateTokenUsage({inputTokens:Z.usage.promptTokens,outputTokens:Z.usage.completionTokens,totalTokens:Z.usage.totalTokens,maxContextTokens:Z.maxContextTokens,cacheReadTokens:Z.usage.cacheReadInputTokens??0,cacheWriteTokens:Z.usage.cacheCreationInputTokens??0,costUsd:Z.usage.costUsd});return J.resetContextUsage(),!0}case"exit_application":return O1(0),!0;default:return!1}}async function r8($,Q,Y,J,Z,X,q,U,z){let{text:K}=$;if(!c6(K))return{type:"not_slash"};let F={cwd:t(),workspaceRoot:t(),sessionId:X,messages:q,rewind:U,subagents:z,signal:J},G=await x6(K,F);if(G.success&&K4(G.data)){if(G.data.action==="select_session")return Q.showSessionSelector(G.data.sessions,G.data.intent),{type:"handled",commandResult:{success:!0}};return await J8(G.data,t(),Y,Z),{type:"handled",commandResult:{success:!0}}}if(G.success&&G4(G.data))return Y.restoreSession(G.data.sessionId,G.data.visibleMessages,G.data.messages),Q.setTasks([]),{type:"handled",commandResult:{success:!0}};if(G.message){if(O4(G.message,G.data,Q,Y))return{type:"handled",commandResult:{success:!0}}}if(Y4(G.data)){let{skillName:O,skillArgs:N}=G.data,W=N?`Please use the "${O}" skill to help me with: ${N}`:`Please use the "${O}" skill.`;return Y.addUserMessage(W),{type:"continue_as_agent",result:{userDisplayMessage:W,agentInput:{displayText:W,text:W,images:[],parts:[{type:"text",text:W}]},userMessageAlreadyAdded:!0}}}if(Z4(G.data)){let{commandName:O,processedContent:N}=G.data;Y.addUserMessage(K);let W=`# Custom Command: /${O}
5
5
 
6
6
  The user has invoked the custom command "/${O}". Follow the instructions below to complete the task.
7
7
 
@@ -11,26 +11,26 @@ ${N}
11
11
 
12
12
  ---
13
13
 
14
- Remember: Follow the above instructions carefully to complete the user's request.`;return{type:"continue_as_agent",result:{userDisplayMessage:K,agentInput:{displayText:K,text:H,images:[],parts:[{type:"text",text:H}]},userMessageAlreadyAdded:!0}}}if(X4(G.data)){let{commandName:O,pluginName:N,processedContent:H}=G.data;Y.addUserMessage(K);let B=`# Plugin Command: /${O}
14
+ Remember: Follow the above instructions carefully to complete the user's request.`;return{type:"continue_as_agent",result:{userDisplayMessage:K,agentInput:{displayText:K,text:W,images:[],parts:[{type:"text",text:W}]},userMessageAlreadyAdded:!0}}}if(X4(G.data)){let{commandName:O,pluginName:N,processedContent:W}=G.data;Y.addUserMessage(K);let B=`# Plugin Command: /${O}
15
15
 
16
16
  The user has invoked the plugin command "/${O}" from plugin "${N}". Follow the instructions below to complete the task.
17
17
 
18
18
  ---
19
19
 
20
- ${H}
20
+ ${W}
21
21
 
22
22
  ---
23
23
 
24
- Remember: Follow the above instructions carefully to complete the user's request.`;return{type:"continue_as_agent",result:{userDisplayMessage:K,agentInput:{displayText:K,text:B,images:[],parts:[{type:"text",text:B}]},userMessageAlreadyAdded:!0}}}if(q4(G.data)){let{modelId:O,prompt:N}=G.data;return Y.addUserMessage(N),{type:"continue_as_agent",result:{userDisplayMessage:N,agentInput:{displayText:N,text:N,images:[],parts:[{type:"text",text:N}]},userMessageAlreadyAdded:!0,onceModelId:O}}}if(U4(G.data)){let O=G.data.goal.objective;return Y.addUserMessage(K),{type:"continue_as_agent",result:{userDisplayMessage:K,agentInput:{displayText:K,text:O,images:[],parts:[{type:"text",text:O}]},userMessageAlreadyAdded:!0,goalContinuationOnly:!0}}}if(!G.success&&G.error)return Y.addAssistantMessage(`${G.error}`),{type:"handled",commandResult:{success:G.success,output:G.message,error:G.error,metadata:G.data}};let _=G.message;if(G.success&&typeof _==="string"&&_.trim()!=="")Y.addAssistantMessage(_);return{type:"handled",commandResult:{success:G.success,output:G.message,error:G.error,metadata:G.data}}}import{useMemoizedFn as C1}from"ahooks";import{useEffect as z4,useRef as a8}from"react";function u6($){let Q=a8(void 0),Y=a8(void 0),J=a8(void 0),Z=C1(async()=>{if(J.current)return J.current;let _=Q.current,O=Y.current;if(!_&&!O)return;Q.current=void 0,Y.current=void 0;let N=(async()=>{try{await _?.destroy()}finally{await O?.dispose()}})();J.current=N;try{await N}finally{if(J.current===N)J.current=void 0}}),X=C1(async(_)=>{if(Y.current&&Y.current.sessionId!==_)await Z();if(!Y.current)Y.current=await l1.create({sessionId:_,workspaceRoot:t(),modelId:$.modelId});return Y.current}),q=C1(async(_)=>{let O=_?.sessionId??$.sessionId,N=!!_?.modelId&&_.modelId!==$.modelId,H;if(!N&&O){let B=await X(O);await B.refresh({modelId:_?.modelId??$.modelId}),H=await S$.createWithRuntime(B,{sessionId:O,systemPrompt:_?.systemPrompt??$.systemPrompt,appendSystemPrompt:_?.appendSystemPrompt??$.appendSystemPrompt,maxTurns:_?.maxTurns??$.maxTurns,modelId:_?.modelId??$.modelId})}else H=await S$.create({systemPrompt:_?.systemPrompt??$.systemPrompt,appendSystemPrompt:_?.appendSystemPrompt??$.appendSystemPrompt,maxTurns:_?.maxTurns??$.maxTurns,modelId:_?.modelId??$.modelId});return Q.current=H,H}),U=C1(async()=>{if(!$.sessionId)throw Error("No active session to rewind");return(await X($.sessionId)).listRewindCheckpoints()}),z=C1(async(_)=>{if(!$.sessionId)throw Error("No active session to rewind");let N=await(await X($.sessionId)).rewindSession(_);return await Z(),N}),K=C1(async()=>{if(!$.sessionId)throw Error("No active session for subagent control");return(await X($.sessionId)).listSubagents()}),F=C1(async(_,O)=>{if(!$.sessionId)throw Error("No active session for subagent control");let N=await X($.sessionId),H=!1,B,L=(I)=>{U$.getState().app.actions.completeSubagentProgress(I.status==="completed")},w=N.resumeSubagent({agentId:_,prompt:O,onEvent:(I)=>{if(I.kind==="tool_start"&&"function"in I.toolCall)U$.getState().app.actions.updateSubagentTool(I.toolCall.function.name)},onCompleted:(I)=>{if(H)L(I);else B=I}});if(U$.getState().app.actions.startSubagentProgress(w.session.id,w.session.subagentType,`Resumed from ${w.source.id}: ${w.session.description}`),H=!0,B)L(B);return w}),G=C1(async(_)=>{if(!Y.current)return{accepted:!1,queued:0,reason:"no_active_turn"};return Y.current.enqueueSteering(_,{allowBeforeTurn:!0})});return z4(()=>{let _=Y8(Z);return()=>{_(),Z().catch(()=>{return})}},[Z]),{agentRef:Q,createAgent:q,cleanupAgent:Z,steerActiveTurn:G,listRewindCheckpoints:U,rewindSession:z,listSubagents:K,resumeSubagent:F}}import{useMemoizedFn as O$}from"ahooks";import{useEffect as _4,useRef as Z8}from"react";function d6($){let Q=0;for(let Y of $)if(Y===`
25
- `)Q++;return Q}function l6($,Q){let Y=Q?.flushTimeout??300,J=Q?.minLinesToFlush??5,Z=Q?.minCharsToFlush??400,X=Z8(""),q=Z8(null),U=Z8(""),z=Z8(null),K=O$(()=>{if(X.current){let H=X.current,B=$.appendAssistantContent(H);K$(B,H),X.current=""}if(q.current)clearTimeout(q.current),q.current=null}),F=O$(()=>{if(U.current)$.appendThinkingContent(U.current),U.current="";if(z.current)clearTimeout(z.current),z.current=null}),G=O$((H)=>{X.current+=H;let B=X.current;if(d6(B)>=J||B.length>=Z){K();return}if(!q.current)q.current=setTimeout(K,Y)}),_=O$((H)=>{U.current+=H;let B=U.current;if(d6(B)>=J||B.length>=Z){F();return}if(!z.current)z.current=setTimeout(F,Y)}),O=O$(()=>{if(X.current="",q.current)clearTimeout(q.current),q.current=null;if(U.current="",z.current)clearTimeout(z.current),z.current=null}),N=O$(()=>{if(q.current)clearTimeout(q.current),q.current=null;if(z.current)clearTimeout(z.current),z.current=null;let H=X.current,B=U.current;return X.current="",U.current="",{extraContent:H,extraThinking:B}});return _4(()=>{return()=>{O()}},[O]),{batchAppendContent:G,batchAppendThinking:_,flushContentBuffer:K,flushThinkingBuffer:F,resetStreamingBuffers:O,drainPendingBuffers:N}}var i8=T1("UI"),o6=($,Q,Y,J,Z)=>{let X=M1(),q=r$(),U=G$(),z=t$(),K=P1(),F=I1(),G=P6(),_=r6(!1),O=r6(!1),{createAgent:N,cleanupAgent:H,steerActiveTurn:B,listRewindCheckpoints:L,rewindSession:w,listSubagents:I,resumeSubagent:k}=u6({sessionId:q,systemPrompt:$,appendSystemPrompt:Q,maxTurns:J}),v=l6(K);o8(()=>{return()=>{v.resetStreamingBuffers()}},[v.resetStreamingBuffers]),o8(()=>{if(!z)K.setCurrentThinkingContent(null)},[z,K]);let A=f$(()=>{if(!X)return;Z?.();let{extraContent:E,extraThinking:p}=v.drainPendingBuffers();G.abort("user-cancel"),F.setTasks([]);let V=r0().session.currentStreamingMessageId;if(V){if(E)K$(V,E);e$(V)}if(K.finalizeStreamingMessage(E,p),!_.current)K.addAssistantMessage("任务已停止"),_.current=!0}),b=f$(async(E,p)=>{let V={contentDeltaCount:0,contentDeltaTotalLen:0},u=h6({sessionActions:K,appActions:F,commandActions:G,streamingBuffer:v,thinkingModeEnabled:z,getStreamingMessageId:()=>r0().session.currentStreamingMessageId,signal:p.signal},V);return{loopResult:await a6(E,u),stats:V}}),W=f$(async(E)=>{let p=!1,V,u=!1,T=E;try{await D$();let P=G.getAbortController()??G.createAbortController(),y=await r8(E,F,K,P.signal,H,q,$8(r0().session),{listCheckpoints:L,execute:w},{list:I,resume:k});if(y.type==="handled")return y.commandResult;if(y.type==="continue_as_agent")p=y.result.userMessageAlreadyAdded,V=y.result.onceModelId,u=y.result.goalContinuationOnly===!0,T=y.result.agentInput;let Y0=q1.getInstance(),r;if(!u){let s=await Y0.executeUserPromptSubmitHooks(T.text,{projectDir:t(),sessionId:q,permissionMode:U,hasImages:T.images.length>0,imageCount:T.images.length});if(!s.proceed){if(s.warning)K.addAssistantMessage(`${s.warning}`);return{success:!1,error:"blocked by hook"}}if(s.updatedPrompt)T={...T,text:s.updatedPrompt,displayText:s.updatedPrompt,parts:[{type:"text",text:s.updatedPrompt},...T.parts.filter((_0)=>_0.type==="image")]};if(s.contextInjection)r=s.contextInjection}if(!p)K.addUserMessage(T.displayText);let S=d8(T),G0=await N(V?{modelId:V}:void 0);if(P.signal.aborted)return i8.info("[handleCommandSubmit] Agent 创建期间已被中止"),{success:!1,error:"aborted"};let f=$8(r0().session);if(r)f.push({role:"system",content:`<user-prompt-submit-hook>
24
+ Remember: Follow the above instructions carefully to complete the user's request.`;return{type:"continue_as_agent",result:{userDisplayMessage:K,agentInput:{displayText:K,text:B,images:[],parts:[{type:"text",text:B}]},userMessageAlreadyAdded:!0}}}if(q4(G.data)){let{modelId:O,prompt:N}=G.data;return Y.addUserMessage(N),{type:"continue_as_agent",result:{userDisplayMessage:N,agentInput:{displayText:N,text:N,images:[],parts:[{type:"text",text:N}]},userMessageAlreadyAdded:!0,onceModelId:O}}}if(U4(G.data)){let O=G.data.goal.objective;return Y.addUserMessage(K),{type:"continue_as_agent",result:{userDisplayMessage:K,agentInput:{displayText:K,text:O,images:[],parts:[{type:"text",text:O}]},userMessageAlreadyAdded:!0,goalContinuationOnly:!0}}}if(!G.success&&G.error)return Y.addAssistantMessage(`${G.error}`),{type:"handled",commandResult:{success:G.success,output:G.message,error:G.error,metadata:G.data}};let _=G.message;if(G.success&&typeof _==="string"&&_.trim()!=="")Y.addAssistantMessage(_);return{type:"handled",commandResult:{success:G.success,output:G.message,error:G.error,metadata:G.data}}}import{useMemoizedFn as C1}from"ahooks";import{useEffect as z4,useRef as a8}from"react";function u6($){let Q=a8(void 0),Y=a8(void 0),J=a8(void 0),Z=C1(async()=>{if(J.current)return J.current;let _=Q.current,O=Y.current;if(!_&&!O)return;Q.current=void 0,Y.current=void 0;let N=(async()=>{try{await _?.destroy()}finally{await O?.dispose()}})();J.current=N;try{await N}finally{if(J.current===N)J.current=void 0}}),X=C1(async(_)=>{if(Y.current&&Y.current.sessionId!==_)await Z();if(!Y.current)Y.current=await l1.create({sessionId:_,workspaceRoot:t(),modelId:$.modelId});return Y.current}),q=C1(async(_)=>{let O=_?.sessionId??$.sessionId,N=!!_?.modelId&&_.modelId!==$.modelId,W;if(!N&&O){let B=await X(O);await B.refresh({modelId:_?.modelId??$.modelId}),W=await S$.createWithRuntime(B,{sessionId:O,systemPrompt:_?.systemPrompt??$.systemPrompt,appendSystemPrompt:_?.appendSystemPrompt??$.appendSystemPrompt,maxTurns:_?.maxTurns??$.maxTurns,modelId:_?.modelId??$.modelId})}else W=await S$.create({systemPrompt:_?.systemPrompt??$.systemPrompt,appendSystemPrompt:_?.appendSystemPrompt??$.appendSystemPrompt,maxTurns:_?.maxTurns??$.maxTurns,modelId:_?.modelId??$.modelId});return Q.current=W,W}),U=C1(async()=>{if(!$.sessionId)throw Error("No active session to rewind");return(await X($.sessionId)).listRewindCheckpoints()}),z=C1(async(_)=>{if(!$.sessionId)throw Error("No active session to rewind");let N=await(await X($.sessionId)).rewindSession(_);return await Z(),N}),K=C1(async()=>{if(!$.sessionId)throw Error("No active session for subagent control");return(await X($.sessionId)).listSubagents()}),F=C1(async(_,O)=>{if(!$.sessionId)throw Error("No active session for subagent control");let N=await X($.sessionId),W=!1,B,L=(I)=>{U$.getState().app.actions.completeSubagentProgress(I.status==="completed")},w=N.resumeSubagent({agentId:_,prompt:O,onEvent:(I)=>{if(I.kind==="tool_start"&&"function"in I.toolCall)U$.getState().app.actions.updateSubagentTool(I.toolCall.function.name)},onCompleted:(I)=>{if(W)L(I);else B=I}});if(U$.getState().app.actions.startSubagentProgress(w.session.id,w.session.subagentType,`Resumed from ${w.source.id}: ${w.session.description}`),W=!0,B)L(B);return w}),G=C1(async(_)=>{if(!Y.current)return{accepted:!1,queued:0,reason:"no_active_turn"};return Y.current.enqueueSteering(_,{allowBeforeTurn:!0})});return z4(()=>{let _=Y8(Z);return()=>{_(),Z().catch(()=>{return})}},[Z]),{agentRef:Q,createAgent:q,cleanupAgent:Z,steerActiveTurn:G,listRewindCheckpoints:U,rewindSession:z,listSubagents:K,resumeSubagent:F}}import{useMemoizedFn as O$}from"ahooks";import{useEffect as _4,useRef as Z8}from"react";function d6($){let Q=0;for(let Y of $)if(Y===`
25
+ `)Q++;return Q}function l6($,Q){let Y=Q?.flushTimeout??300,J=Q?.minLinesToFlush??5,Z=Q?.minCharsToFlush??400,X=Z8(""),q=Z8(null),U=Z8(""),z=Z8(null),K=O$(()=>{if(X.current){let W=X.current,B=$.appendAssistantContent(W);K$(B,W),X.current=""}if(q.current)clearTimeout(q.current),q.current=null}),F=O$(()=>{if(U.current)$.appendThinkingContent(U.current),U.current="";if(z.current)clearTimeout(z.current),z.current=null}),G=O$((W)=>{X.current+=W;let B=X.current;if(d6(B)>=J||B.length>=Z){K();return}if(!q.current)q.current=setTimeout(K,Y)}),_=O$((W)=>{U.current+=W;let B=U.current;if(d6(B)>=J||B.length>=Z){F();return}if(!z.current)z.current=setTimeout(F,Y)}),O=O$(()=>{if(X.current="",q.current)clearTimeout(q.current),q.current=null;if(U.current="",z.current)clearTimeout(z.current),z.current=null}),N=O$(()=>{if(q.current)clearTimeout(q.current),q.current=null;if(z.current)clearTimeout(z.current),z.current=null;let W=X.current,B=U.current;return X.current="",U.current="",{extraContent:W,extraThinking:B}});return _4(()=>{return()=>{O()}},[O]),{batchAppendContent:G,batchAppendThinking:_,flushContentBuffer:K,flushThinkingBuffer:F,resetStreamingBuffers:O,drainPendingBuffers:N}}var i8=T1("UI"),o6=($,Q,Y,J,Z)=>{let X=M1(),q=r$(),U=G$(),z=t$(),K=P1(),F=I1(),G=P6(),_=r6(!1),O=r6(!1),{createAgent:N,cleanupAgent:W,steerActiveTurn:B,listRewindCheckpoints:L,rewindSession:w,listSubagents:I,resumeSubagent:k}=u6({sessionId:q,systemPrompt:$,appendSystemPrompt:Q,maxTurns:J}),v=l6(K);o8(()=>{return()=>{v.resetStreamingBuffers()}},[v.resetStreamingBuffers]),o8(()=>{if(!z)K.setCurrentThinkingContent(null)},[z,K]);let A=f$(()=>{if(!X)return;Z?.();let{extraContent:E,extraThinking:p}=v.drainPendingBuffers();G.abort("user-cancel"),F.setTasks([]);let V=r0().session.currentStreamingMessageId;if(V){if(E)K$(V,E);e$(V)}if(K.finalizeStreamingMessage(E,p),!_.current)K.addAssistantMessage("任务已停止"),_.current=!0}),b=f$(async(E,p)=>{let V={contentDeltaCount:0,contentDeltaTotalLen:0},u=h6({sessionActions:K,appActions:F,commandActions:G,streamingBuffer:v,thinkingModeEnabled:z,getStreamingMessageId:()=>r0().session.currentStreamingMessageId,signal:p.signal},V);return{loopResult:await a6(E,u),stats:V}}),H=f$(async(E)=>{let p=!1,V,u=!1,T=E;try{await D$();let P=G.getAbortController()??G.createAbortController(),y=await r8(E,F,K,P.signal,W,q,$8(r0().session),{listCheckpoints:L,execute:w},{list:I,resume:k});if(y.type==="handled")return y.commandResult;if(y.type==="continue_as_agent")p=y.result.userMessageAlreadyAdded,V=y.result.onceModelId,u=y.result.goalContinuationOnly===!0,T=y.result.agentInput;let Y0=q1.getInstance(),r;if(!u){let s=await Y0.executeUserPromptSubmitHooks(T.text,{projectDir:t(),sessionId:q,permissionMode:U,hasImages:T.images.length>0,imageCount:T.images.length});if(!s.proceed){if(s.warning)K.addAssistantMessage(`${s.warning}`);return{success:!1,error:"blocked by hook"}}if(s.updatedPrompt)T={...T,text:s.updatedPrompt,displayText:s.updatedPrompt,parts:[{type:"text",text:s.updatedPrompt},...T.parts.filter((_0)=>_0.type==="image")]};if(s.contextInjection)r=s.contextInjection}if(!p)K.addUserMessage(T.displayText);let S=d8(T),G0=await N(V?{modelId:V}:void 0);if(P.signal.aborted)return i8.info("[handleCommandSubmit] Agent 创建期间已被中止"),{success:!1,error:"aborted"};let f=$8(r0().session);if(r)f.push({role:"system",content:`<user-prompt-submit-hook>
26
26
  ${r}
27
- </user-prompt-submit-hook>`});let x={messages:f,userId:"cli-user",sessionId:q,workspaceRoot:t(),signal:P.signal,confirmationHandler:Y,permissionMode:U},{loopResult:C,stats:J0}=await b(G0.chatStream(S,x,{stream:!0,goalContinuationOnly:u,onTurnLimitReached:Y?async(s)=>{let _0=await Y.requestConfirmation({type:"maxTurnsExceeded",message:`已进行 ${s.turnsCount} 轮对话。是否继续?`,risks:["继续执行可能导致更长的等待时间","可能产生更多的 API 费用"]});return{continue:_0.approved,reason:_0.reason}}:void 0}),P);if(C.metadata?.outputTruncated)K.addAssistantMessage("输出因达到 token 上限被截断,部分内容可能不完整。");let F0=C.finalMessage||"";if(i8.debug("[handleCommandSubmit] final reply",{success:C.success,outputLength:F0.length,turnsCount:C.metadata?.turnsCount,toolCallsCount:C.metadata?.toolCallsCount}),!C.success&&C.error?.type==="api_error"){let s=C.error.message||"请求失败,请检查网络连接和 API 配置";return K.addAssistantMessage(s),{success:!1,error:s}}if(!F0||F0.trim()===""){let s=C.metadata?.abortReason;if(!_.current&&J0.contentDeltaCount===0&&s!=="interrupt")return K.addAssistantMessage("已取消"),{success:!0,output:"已取消"};return{success:!0,output:F0??""}}return{success:!0,output:F0}}catch(P){if(_.current)return{success:!1,error:"aborted"};let y=s$(P);return K.addAssistantMessage(`${y.displayMessage}`),{success:!1,error:y.displayMessage}}}),R=f$(async()=>{if(r0().command.isProcessing){O.current=!0;return}let E=await l1.hasPendingInbox(t(),q),p=!E&&await l1.hasActiveGoal(t(),q);if(!E&&!p){O.current=!1;return}if(r0().command.isProcessing){O.current=!0;return}O.current=!1,await D$();let V=G.createAbortController();v.resetStreamingBuffers(),K.clearFinalizingStreamingMessageId(),G.setProcessing(!0);try{let u=await N();if(V.signal.aborted)return;let T={messages:$8(r0().session),userId:"cli-user",sessionId:q,workspaceRoot:t(),signal:V.signal,confirmationHandler:Y,permissionMode:U},{loopResult:P}=await b(u.chatStream("",T,{stream:!0,pendingInputOnly:E,goalContinuationOnly:p}),V);if(P.metadata?.outputTruncated)K.addAssistantMessage("输出因达到 token 上限被截断,部分内容可能不完整。");if(!P.success&&P.error?.type==="api_error")K.addAssistantMessage(P.error.message||"恢复排队指令失败,请检查网络和 API 配置")}catch(u){let T=s$(u);if(!T.isAbort)K.setError(`恢复排队指令失败: ${T.displayMessage}`)}finally{if(G.getAbortController()===V)G.setProcessing(!1),G.clearAbortController(V),K.setCurrentThinkingContent(null);if(O.current)queueMicrotask(()=>{R()})}}),j=f$(async(E)=>{if(!E.text.trim()&&E.images.length===0)return;if(X){if(E.text.trimStart().startsWith("/")){if(/^\/goal(?:\s|$)/i.test(E.text.trim())){await D$();let y=G.getAbortController()??G.createAbortController();await r8(E,F,K,y.signal,H,q);return}K.addAssistantMessage("活动回合中不能执行 slash command;请先停止任务或等待完成。");return}await D$();let V=await q1.getInstance().executeUserPromptSubmitHooks(E.text,{projectDir:t(),sessionId:q,permissionMode:U,hasImages:E.images.length>0,imageCount:E.images.length});if(!V.proceed){if(V.warning)K.addAssistantMessage(V.warning);return}let u=E;if(V.updatedPrompt)u={...E,text:V.updatedPrompt,parts:[{type:"text",text:V.updatedPrompt},...E.parts.filter((y)=>y.type==="image")]};if(V.contextInjection){let y=`<user-prompt-submit-hook>
27
+ </user-prompt-submit-hook>`});let x={messages:f,userId:"cli-user",sessionId:q,workspaceRoot:t(),signal:P.signal,confirmationHandler:Y,permissionMode:U},{loopResult:C,stats:J0}=await b(G0.chatStream(S,x,{stream:!0,goalContinuationOnly:u,onTurnLimitReached:Y?async(s)=>{let _0=await Y.requestConfirmation({type:"maxTurnsExceeded",message:`已进行 ${s.turnsCount} 轮对话。是否继续?`,risks:["继续执行可能导致更长的等待时间","可能产生更多的 API 费用"]});return{continue:_0.approved,reason:_0.reason}}:void 0}),P);if(C.metadata?.outputTruncated)K.addAssistantMessage("输出因达到 token 上限被截断,部分内容可能不完整。");let F0=C.finalMessage||"";if(i8.debug("[handleCommandSubmit] final reply",{success:C.success,outputLength:F0.length,turnsCount:C.metadata?.turnsCount,toolCallsCount:C.metadata?.toolCallsCount}),!C.success&&C.error?.type==="api_error"){let s=C.error.message||"请求失败,请检查网络连接和 API 配置";return K.addAssistantMessage(s),{success:!1,error:s}}if(!F0||F0.trim()===""){let s=C.metadata?.abortReason;if(!_.current&&J0.contentDeltaCount===0&&s!=="interrupt")return K.addAssistantMessage("已取消"),{success:!0,output:"已取消"};return{success:!0,output:F0??""}}return{success:!0,output:F0}}catch(P){if(_.current)return{success:!1,error:"aborted"};let y=s$(P);return K.addAssistantMessage(`${y.displayMessage}`),{success:!1,error:y.displayMessage}}}),R=f$(async()=>{if(r0().command.isProcessing){O.current=!0;return}let E=await l1.hasPendingInbox(t(),q),p=!E&&await l1.hasActiveGoal(t(),q);if(!E&&!p){O.current=!1;return}if(r0().command.isProcessing){O.current=!0;return}O.current=!1,await D$();let V=G.createAbortController();v.resetStreamingBuffers(),K.clearFinalizingStreamingMessageId(),G.setProcessing(!0);try{let u=await N();if(V.signal.aborted)return;let T={messages:$8(r0().session),userId:"cli-user",sessionId:q,workspaceRoot:t(),signal:V.signal,confirmationHandler:Y,permissionMode:U},{loopResult:P}=await b(u.chatStream("",T,{stream:!0,pendingInputOnly:E,goalContinuationOnly:p}),V);if(P.metadata?.outputTruncated)K.addAssistantMessage("输出因达到 token 上限被截断,部分内容可能不完整。");if(!P.success&&P.error?.type==="api_error")K.addAssistantMessage(P.error.message||"恢复排队指令失败,请检查网络和 API 配置")}catch(u){let T=s$(u);if(!T.isAbort)K.setError(`恢复排队指令失败: ${T.displayMessage}`)}finally{if(G.getAbortController()===V)G.setProcessing(!1),G.clearAbortController(V),K.setCurrentThinkingContent(null);if(O.current)queueMicrotask(()=>{R()})}}),j=f$(async(E)=>{if(!E.text.trim()&&E.images.length===0)return;if(X){if(E.text.trimStart().startsWith("/")){if(/^\/goal(?:\s|$)/i.test(E.text.trim())){await D$();let y=G.getAbortController()??G.createAbortController();await r8(E,F,K,y.signal,W,q);return}K.addAssistantMessage("活动回合中不能执行 slash command;请先停止任务或等待完成。");return}await D$();let V=await q1.getInstance().executeUserPromptSubmitHooks(E.text,{projectDir:t(),sessionId:q,permissionMode:U,hasImages:E.images.length>0,imageCount:E.images.length});if(!V.proceed){if(V.warning)K.addAssistantMessage(V.warning);return}let u=E;if(V.updatedPrompt)u={...E,text:V.updatedPrompt,parts:[{type:"text",text:V.updatedPrompt},...E.parts.filter((y)=>y.type==="image")]};if(V.contextInjection){let y=`<user-prompt-submit-hook>
28
28
  ${V.contextInjection}
29
29
  </user-prompt-submit-hook>`;u={...u,text:`${u.text}
30
30
 
31
31
  ${y}`,parts:[...u.parts,{type:"text",text:`
32
32
 
33
- ${y}`}]}}let T=d8(u),P=await B(T);if(!P.accepted){let y=P.reason==="queue_full"?"补充指令队列已满,请等待当前任务处理后重试。":"当前任务正在结束,补充指令未入队,请稍后重试。";K.addAssistantMessage(y);return}if(G.enqueueCommand(E),K.addUserMessage(E.displayText),P.delivery==="next_turn"){if(O.current=!0,!r0().command.isProcessing)queueMicrotask(()=>{R()})}return}F.setTasks([]),G.setRecoveredSteeringCount(0),_.current=!1;let p=G.createAbortController();v.resetStreamingBuffers(),K.clearFinalizingStreamingMessageId(),G.setProcessing(!0);try{let V=await W(E);if(!V.success&&V.error&&V.error!=="aborted")K.setError(V.error)}catch(V){let u=s$(V);if(u.isAbort);else K.setError(`执行失败: ${u.displayMessage}`)}finally{if(G.getAbortController()===p){if(G.setProcessing(!1),G.clearAbortController(p),K.setCurrentThinkingContent(null),O.current)queueMicrotask(()=>{R()})}}});return o8(()=>{let E=!1;return Promise.all([l1.hasPendingInbox(t(),q),l1.hasActiveGoal(t(),q)]).then(([p,V])=>{if(!E&&(p||V))return R()}).catch((p)=>{if(!E)i8.warn("[useCommandHandler] Failed to inspect pending inbox",p)}),()=>{E=!0}},[R,q]),{executeCommand:j,handleAbort:A,isProcessing:X,cleanupAgent:H}};import{useMemoizedFn as X8}from"ahooks";import{useState as i6}from"react";var n6=()=>{let[$,Q]=i6([]),[Y,J]=i6(-1),Z=X8((z,K)=>{let F={display:z,pasteMappings:K?new Map(K):new Map};Q((G)=>[...G,F]),J(-1)}),X=X8(()=>{if($.length===0)return null;let z=Y===-1?$.length-1:Math.max(0,Y-1);return J(z),$[z]||null}),q=X8(()=>{if(Y===-1)return null;let z=Y+1;if(z>=$.length)return J(-1),null;else return J(z),$[z]||null}),U=X8(()=>{J(-1)});return{commandHistory:$,historyIndex:Y,addToHistory:Z,getPreviousCommand:X,getNextCommand:q,resetHistoryIndex:U}};import{useMemoizedFn as q8}from"ahooks";import{useMemo as N4,useRef as t6,useState as H4}from"react";var s6=()=>{let[$,Q]=H4({isVisible:!1,details:null,resolver:null}),Y=t6(null),J=t6([]),Z=q8((K)=>{Y.current=K,Q({isVisible:Boolean(K),details:K?.details??null,resolver:K?.resolve??null})}),X=q8((K)=>{return new Promise((F)=>{let G={details:K,resolve:F};if(!Y.current){Z(G);return}J.current.push(G)})}),q=q8((K)=>{if(Y.current)Y.current.resolve(K);let F=J.current.shift()??null;Z(F)}),U=q8(()=>{if(Y.current)Y.current.resolve({approved:!1,reason:n8});for(let K of J.current)K.resolve({approved:!1,reason:n8});J.current=[],Z(null)}),z=N4(()=>({requestConfirmation:X}),[X]);return{confirmationState:$,confirmationHandler:z,handleResponse:q,dismissAll:U}};import{useMemoizedFn as r1}from"ahooks";import{useRef as e6,useState as W4}from"react";var U8="␞",G8="␟";function K8($){return`${U8}PASTE:${$}:`}function t8(){return G8}var _X=new RegExp(`${U8}PASTE:(\\d+):[\\s\\S]*?${G8}`,"g");function F4($){return $.includes(U8)&&$.includes(G8)}function $2($="",Q=0){let[Y,J]=W4({value:$,cursorPosition:Q}),Z=e6(0),X=e6(new Map),q=r1((O)=>{J((N)=>({value:O,cursorPosition:N.cursorPosition}));for(let N of X.current.keys()){let H=K8(N);if(!O.includes(H))X.current.delete(N)}}),U=r1((O)=>{J((N)=>({...N,cursorPosition:Math.max(0,Math.min(O,N.value.length))}))}),z=r1(()=>{J({value:"",cursorPosition:0}),X.current.clear()}),K=r1((O)=>{Z.current+=1;let N=Z.current;return X.current.set(N,{type:"text",data:O}),N}),F=r1((O,N)=>{Z.current+=1;let H=Z.current;return X.current.set(H,{type:"image",data:O,mimeType:N}),H}),G=r1((O)=>{for(let[N,H]of O)if(X.current.set(N,H),N>=Z.current)Z.current=N}),_=r1((O)=>{let N=[],H=[];if(!F4(O)){let R=O.trim();if(R)H.push({type:"text",text:R});return{displayText:O,text:O,images:N,parts:H}}let B=new RegExp(`${U8}PASTE:(\\d+):[\\s\\S]*?${G8}`,"g"),L=Array.from(O.matchAll(B)),w=0,I="",k="";for(let R of L){let j=R.index,E=j+R[0].length,p=parseInt(R[1],10),V=X.current.get(p);if(j>w){let u=O.slice(w,j);H.push({type:"text",text:u}),I+=u,k+=u}if(!V)I+=R[0],k+=R[0],H.push({type:"text",text:R[0]});else if(V.type==="text")I+=V.data,k+=V.data,H.push({type:"text",text:V.data});else{let u={id:p,base64:V.data,mimeType:V.mimeType};N.push(u),H.push({type:"image",...u}),k+=`[Image #${p}]`}w=E}if(w<O.length){let R=O.slice(w);H.push({type:"text",text:R}),I+=R,k+=R}let v=[];for(let R of H)if(R.type==="text"&&v.length>0&&v[v.length-1].type==="text")v[v.length-1].text+=R.text;else v.push(R);let A=0,b=v.length;while(A<v.length&&v[A].type==="text"&&v[A].text.trim()==="")A++;while(b>A&&v[b-1].type==="text"&&v[b-1].text.trim()==="")b--;let W=v.slice(A,b);return{displayText:k.trim(),text:I.trim(),images:N,parts:W}});return{value:Y.value,cursorPosition:Y.cursorPosition,setValue:q,setCursorPosition:U,clear:z,pasteMap:X.current,addPasteMapping:K,addImagePasteMapping:F,restorePasteMappings:G,resolveInput:_}}import{useMemoizedFn as G2}from"ahooks";import{useInput as R4}from"ink";import{useEffect as K2,useRef as O2,useState as QQ}from"react";function L4($){return{supportsThinking:z$().resolveConfig($).reasoning}}function O8($){return L4($).supportsThinking}import B4 from"fast-glob";import w4 from"fuse.js";import{useEffect as Q2,useMemo as s8,useState as e8}from"react";var _$=null,b4=5000;function A4($,Q){let Y=[...$.matchAll(/(?:^|\s)(@(?:"[^"]*"|(?:[^\\ ]|\\ )*))/g)];for(let J of Y){let Z=J[1],X=J.index+(J[0].length-Z.length),q=X+Z.length;if(Q>=X&&Q<=q){let U=Z.slice(1),z=!1;if(U.startsWith('"')){if(z=!0,U=U.slice(1),U.endsWith('"'))U=U.slice(0,-1)}return{hasQuery:!0,query:U,startIndex:X,endIndex:q,quoted:z}}}return{hasQuery:!1,query:"",startIndex:-1,endIndex:-1,quoted:!1}}var y4=[...$Q.map(($)=>`${$}/**`),...$Q,...J2.map(($)=>`**/${$}`)];function Y2($,Q,Y={}){let{cwd:J=t(),maxSuggestions:Z=15,ignorePatterns:X=y4,debounceDelay:q=300,fuzzyMatch:U=!0}=Y,[z,K]=e8([]),[F,G]=e8(!1),[_,O]=e8(0),N=s8(()=>JSON.stringify(X),[X]),H=s8(()=>{if(Q===void 0)return{hasQuery:!1,query:"",startIndex:-1,endIndex:-1,quoted:!1};return A4($,Q)},[$,Q]);Q2(()=>{if(!$.includes("@")){K([]),G(!1);return}let L=Date.now();if(_$&&_$.cwd===J&&_$.ignoreKey===N&&L-_$.timestamp<b4){K(_$.files),G(!1);return}let w=!1,k=setTimeout(async()=>{G(!0);try{let A=(await B4("**/*",{cwd:J,dot:!1,followSymbolicLinks:!1,onlyFiles:!1,markDirectories:!0,unique:!0,ignore:X})).map((b)=>b.replace(/\\/g,"/"));if(!w)K(A),_$={cwd:J,ignoreKey:N,files:A,timestamp:L}}catch(v){if(console.error("Failed to load files for @ completion:",v),!w)K([])}finally{if(!w)G(!1)}},q);return()=>{w=!0,clearTimeout(k)}},[$,J,q,N]);let B=s8(()=>{if(!H.hasQuery||z.length===0)return[];let L=H.query.toLowerCase();if(L==="")return z.slice(0,Z);if(U)return new w4(z,{threshold:0.4,ignoreLocation:!0,minMatchCharLength:1}).search(L).slice(0,Z).map((k)=>k.item);return z.filter((w)=>w.toLowerCase().includes(L)).slice(0,Z)},[H,z,Z,U]);return Q2(()=>{O(0)},[B]),{...H,suggestions:B,selectedIndex:_,loading:F}}function v4($,Q=!1){if($.includes(" ")||Q)return`@"${$}"`;return`@${$}`}function Z2($,Q,Y){if(!Q.hasQuery)return{newInput:$,newCursorPos:$.length};let J=v4(Y,Q.quoted),Z=$.slice(0,Q.startIndex),X=$.slice(Q.endIndex),q=Z+J+" "+X,U=Q.startIndex+J.length+1;return{newInput:q,newCursorPos:U}}import{useMemoizedFn as X2}from"ahooks";import{useEffect as q2,useRef as U2}from"react";var P0=($,Q)=>{let Y=U2(!1),J=U2(null),Z=X2(()=>{if(J.current)clearTimeout(J.current);J.current=setTimeout(()=>{z1().setAwaitingSecondCtrlC(!1),Y.current=!1,J.current=null},3000)}),X=()=>{V$().shutdown("SIGINT",0)},q=X2(()=>{if(!Y.current){if(Y.current=!0,$&&Q)Q();z1().setAwaitingSecondCtrlC(!0),Z()}else{if(J.current)clearTimeout(J.current),J.current=null;z1().setAwaitingSecondCtrlC(!1),X()}});return q2(()=>{if($){if(z1().setAwaitingSecondCtrlC(!1),Y.current=!1,J.current)clearTimeout(J.current),J.current=null}},[$]),q2(()=>{return()=>{if(J.current)clearTimeout(J.current)}},[]),q};var z8=T1("UI"),N2=($,Q,Y,J,Z,X,q,U,z,K)=>{let G=l0()==="main-input",_=$.value,O=$.setValue,N=$.cursorPosition,H=P1(),B=I1(),L=i$(),w=L?O8(L):!1,[I,k]=QQ(!1),[v,A]=QQ([]),[b,W]=QQ(0),R=Y2(_,N,{cwd:t(),maxSuggestions:10}),j=P0(q||!1,X),E=O2(0),p=500,V=O2(!1);K2(()=>{if(q)V.current=!1},[q]),K2(()=>{if(R.hasQuery&&R.suggestions.length>0){let P=R.suggestions.map((y)=>({command:y,description:z2(y)?`Directory: ${y}`:`File: ${y}`,matchScore:1}));A(P),k(!0),W(0)}else if(_.startsWith("/"))if(_.includes(" "))k(!1),A([]);else{let y=_2(_);A(y),k(y.length>0),W(0)}else k(!1),A([])},[_,R.hasQuery,R.suggestions]);let u=G2(()=>{H.clearMessages(),H.setError(null)}),T=G2(()=>{z8.debug("[DIAG] handleSubmit called:",{input:_,showSuggestions:I});let P=_.trim();if(P){let y=$.resolveInput(P);z8.debug("[DIAG] Submitting command:",{displayText:P,textLength:y.text.length,imageCount:y.images.length}),k(!1),A([]);let Y0=$.pasteMap.size>0?new Map($.pasteMap):new Map;Z(P,Y0),$.clear(),Q(y),z8.debug("[DIAG] Command submitted to onSubmit callback")}else z8.debug("[DIAG] Empty command, not submitting")});return R4((P,y)=>{if(P==="?"&&!_){z?.(),setTimeout(()=>$.clear(),0);return}if(y.backspace||y.delete||y.leftArrow||y.rightArrow||y.pageUp||y.pageDown||!y.ctrl&&!y.meta&&!y.escape&&!y.tab&&!y.upArrow&&!y.downArrow&&!y.return&&!(P==="?"&&!_))return;if(y.ctrl&&P==="c"||y.meta&&P==="c"||y.ctrl&&P==="d"||y.meta&&P==="d"){j();return}if(y.ctrl&&P==="l"||y.meta&&P==="l"){u();return}if(y.ctrl&&P==="t"||y.meta&&P==="t"){H.toggleThinkingExpanded();return}if(y.ctrl&&P==="o"||y.meta&&P==="o"){H.toggleHistoryExpanded();return}if(y.escape){if(K)z?.();else if(q&&X){if(V.current)return;V.current=!0,X()}else if(I)k(!1),A([]);else if(_){let r=Date.now();if(r-E.current<500)$.clear(),E.current=0;else E.current=r}return}if(y.tab&&y.shift){U?.();return}if(y.tab){if(I&&v.length>0){let r=v[b].command;if(R.hasQuery&&R.suggestions.includes(r)){let{newInput:S,newCursorPos:G0}=Z2(_,R,r);O(S),$.setCursorPosition(G0)}else{let S=r+" ";O(S),$.setCursorPosition(S.length)}k(!1),A([])}else if(w)B.toggleThinkingMode();return}if(y.return){T();return}if(y.upArrow){if(I&&v.length>0){let r=v.length-1;W((S)=>S>0?S-1:r)}else{let r=Y();if(r){if(r.pasteMappings.size>0)$.restorePasteMappings(r.pasteMappings);O(r.display),$.setCursorPosition(r.display.length)}}return}if(y.downArrow){if(I&&v.length>0){let r=v.length-1;W((S)=>S<r?S+1:0)}else{let r=J();if(r){if(r.pasteMappings.size>0)$.restorePasteMappings(r.pasteMappings);O(r.display),$.setCursorPosition(r.display.length)}}return}},{isActive:G}),{handleSubmit:T,showSuggestions:I,suggestions:v,selectedSuggestionIndex:b}};import k4 from"ansi-escapes";import{useStdout as C4}from"ink";import{useCallback as S4,useEffect as f4,useRef as D4}from"react";import{useStdout as P4}from"ink";import{debounce as I4}from"lodash-es";import{useEffect as M4,useState as T4}from"react";function N$($=200){let{stdout:Q}=P4(),[Y,J]=T4(Q.columns||80);return M4(()=>{let Z=I4(()=>{J(Q.columns||80)},$);return Z(),Q.on("resize",Z),()=>{Q.off("resize",Z),Z.cancel()}},[Q,$]),Y}function H2(){let{stdout:$}=C4(),Q=N$(),Y=D4(!0),J=$0((X)=>X.session.actions.incrementClearCount),Z=S4(()=>{if($)$.write(k4.clearTerminal);J()},[$,J]);return f4(()=>{if(Y.current){Y.current=!1;return}let X=setTimeout(()=>{Z()},300);return()=>{clearTimeout(X)}},[Q,Z]),{refreshStatic:Z}}import W2 from"node:fs";import V4 from"node:os";import JQ from"node:path";import{MultiSelect as j4}from"@inkjs/ui";import{useMemoizedFn as _8}from"ahooks";import{Box as i,Text as a,useFocus as E4,useFocusManager as h4,useInput as L2}from"ink";import N8 from"ink-select-input";import m4 from"ink-spinner";import j$ from"ink-text-input";import{useEffect as F2,useState as H$}from"react";import{jsxDEV as M}from"react/jsx-dev-runtime";var p4=[{label:"Glob - 文件搜索",value:"Glob"},{label:"Grep - 内容搜索",value:"Grep"},{label:"Read - 读取文件",value:"Read"},{label:"Write - 写入文件",value:"Write"},{label:"Edit - 编辑文件",value:"Edit"},{label:"Bash - 执行命令",value:"Bash"},{label:"所有工具 (不限制)",value:"all"}],g4=[{label:"红色 (red)",value:"red"},{label:"蓝色 (blue)",value:"blue"},{label:"绿色 (green)",value:"green"},{label:"黄色 (yellow)",value:"yellow"},{label:"紫色 (purple)",value:"purple"},{label:"橙色 (orange)",value:"orange"},{label:"粉色 (pink)",value:"pink"},{label:"青色 (cyan)",value:"cyan"},{label:"不设置颜色",value:"none"}];function c4($){if(!$||$.trim()==="")return"名称不能为空";if(!/^[a-z0-9-]+$/.test($))return"名称只能包含小写字母、数字和连字符";if($.startsWith("-")||$.endsWith("-"))return"名称不能以连字符开头或结尾";return null}function E$({onComplete:$,onCancel:Q,initialConfig:Y}){let[J,Z]=H$(Y?"name":"mode"),[X,q]=H$({name:Y?.name||"",description:Y?.description||"",tools:Y?.tools||[],color:Y?.color,location:Y?.location||"project",systemPrompt:Y?.systemPrompt||""}),[U,z]=H$(""),[K,F]=H$(!1),[G,_]=H$(""),[O,N]=H$(Y?"edit":"manual"),{focus:H}=h4(),L={manual:["mode","name","description","tools","color","location","systemPrompt","confirm"],ai:["mode","aiPrompt","aiGenerating","confirm"],edit:["name","description","tools","color","location","systemPrompt","confirm"]}[O];F2(()=>{if(J==="name"||J==="description"||J==="systemPrompt"||J==="aiPrompt")return;H(`step-${J}`)},[J,H]);let w=_8(()=>{let b=L.indexOf(J);if(b<L.length-1)Z(L[b+1])}),I=_8(()=>{if(G)_("");if(J==="confirm"&&O==="ai"){Z("aiPrompt");return}let b=L.indexOf(J);if(b>0)Z(L[b-1]);else Q()}),k=_8(async()=>{F(!0),_("");try{let b=await S$.create(),W=`你是一个 Subagent 配置生成专家。用户会描述他们想要创建的 agent,你需要根据描述生成一个完整的 agent 配置。
33
+ ${y}`}]}}let T=d8(u),P=await B(T);if(!P.accepted){let y=P.reason==="queue_full"?"补充指令队列已满,请等待当前任务处理后重试。":"当前任务正在结束,补充指令未入队,请稍后重试。";K.addAssistantMessage(y);return}if(G.enqueueCommand(E),K.addUserMessage(E.displayText),P.delivery==="next_turn"){if(O.current=!0,!r0().command.isProcessing)queueMicrotask(()=>{R()})}return}F.setTasks([]),G.setRecoveredSteeringCount(0),_.current=!1;let p=G.createAbortController();v.resetStreamingBuffers(),K.clearFinalizingStreamingMessageId(),G.setProcessing(!0);try{let V=await H(E);if(!V.success&&V.error&&V.error!=="aborted")K.setError(V.error)}catch(V){let u=s$(V);if(u.isAbort);else K.setError(`执行失败: ${u.displayMessage}`)}finally{if(G.getAbortController()===p){if(G.setProcessing(!1),G.clearAbortController(p),K.setCurrentThinkingContent(null),O.current)queueMicrotask(()=>{R()})}}});return o8(()=>{let E=!1;return Promise.all([l1.hasPendingInbox(t(),q),l1.hasActiveGoal(t(),q)]).then(([p,V])=>{if(!E&&(p||V))return R()}).catch((p)=>{if(!E)i8.warn("[useCommandHandler] Failed to inspect pending inbox",p)}),()=>{E=!0}},[R,q]),{executeCommand:j,handleAbort:A,isProcessing:X,cleanupAgent:W}};import{useMemoizedFn as X8}from"ahooks";import{useState as i6}from"react";var n6=()=>{let[$,Q]=i6([]),[Y,J]=i6(-1),Z=X8((z,K)=>{let F={display:z,pasteMappings:K?new Map(K):new Map};Q((G)=>[...G,F]),J(-1)}),X=X8(()=>{if($.length===0)return null;let z=Y===-1?$.length-1:Math.max(0,Y-1);return J(z),$[z]||null}),q=X8(()=>{if(Y===-1)return null;let z=Y+1;if(z>=$.length)return J(-1),null;else return J(z),$[z]||null}),U=X8(()=>{J(-1)});return{commandHistory:$,historyIndex:Y,addToHistory:Z,getPreviousCommand:X,getNextCommand:q,resetHistoryIndex:U}};import{useMemoizedFn as q8}from"ahooks";import{useMemo as N4,useRef as t6,useState as H4}from"react";var s6=()=>{let[$,Q]=H4({isVisible:!1,details:null,resolver:null}),Y=t6(null),J=t6([]),Z=q8((K)=>{Y.current=K,Q({isVisible:Boolean(K),details:K?.details??null,resolver:K?.resolve??null})}),X=q8((K)=>{return new Promise((F)=>{let G={details:K,resolve:F};if(!Y.current){Z(G);return}J.current.push(G)})}),q=q8((K)=>{if(Y.current)Y.current.resolve(K);let F=J.current.shift()??null;Z(F)}),U=q8(()=>{if(Y.current)Y.current.resolve({approved:!1,reason:n8});for(let K of J.current)K.resolve({approved:!1,reason:n8});J.current=[],Z(null)}),z=N4(()=>({requestConfirmation:X}),[X]);return{confirmationState:$,confirmationHandler:z,handleResponse:q,dismissAll:U}};import{useMemoizedFn as r1}from"ahooks";import{useRef as e6,useState as W4}from"react";var U8="␞",G8="␟";function K8($){return`${U8}PASTE:${$}:`}function t8(){return G8}var _X=new RegExp(`${U8}PASTE:(\\d+):[\\s\\S]*?${G8}`,"g");function F4($){return $.includes(U8)&&$.includes(G8)}function $2($="",Q=0){let[Y,J]=W4({value:$,cursorPosition:Q}),Z=e6(0),X=e6(new Map),q=r1((O)=>{J((N)=>({value:O,cursorPosition:N.cursorPosition}));for(let N of X.current.keys()){let W=K8(N);if(!O.includes(W))X.current.delete(N)}}),U=r1((O)=>{J((N)=>({...N,cursorPosition:Math.max(0,Math.min(O,N.value.length))}))}),z=r1(()=>{J({value:"",cursorPosition:0}),X.current.clear()}),K=r1((O)=>{Z.current+=1;let N=Z.current;return X.current.set(N,{type:"text",data:O}),N}),F=r1((O,N)=>{Z.current+=1;let W=Z.current;return X.current.set(W,{type:"image",data:O,mimeType:N}),W}),G=r1((O)=>{for(let[N,W]of O)if(X.current.set(N,W),N>=Z.current)Z.current=N}),_=r1((O)=>{let N=[],W=[];if(!F4(O)){let R=O.trim();if(R)W.push({type:"text",text:R});return{displayText:O,text:O,images:N,parts:W}}let B=new RegExp(`${U8}PASTE:(\\d+):[\\s\\S]*?${G8}`,"g"),L=Array.from(O.matchAll(B)),w=0,I="",k="";for(let R of L){let j=R.index,E=j+R[0].length,p=parseInt(R[1],10),V=X.current.get(p);if(j>w){let u=O.slice(w,j);W.push({type:"text",text:u}),I+=u,k+=u}if(!V)I+=R[0],k+=R[0],W.push({type:"text",text:R[0]});else if(V.type==="text")I+=V.data,k+=V.data,W.push({type:"text",text:V.data});else{let u={id:p,base64:V.data,mimeType:V.mimeType};N.push(u),W.push({type:"image",...u}),k+=`[Image #${p}]`}w=E}if(w<O.length){let R=O.slice(w);W.push({type:"text",text:R}),I+=R,k+=R}let v=[];for(let R of W)if(R.type==="text"&&v.length>0&&v[v.length-1].type==="text")v[v.length-1].text+=R.text;else v.push(R);let A=0,b=v.length;while(A<v.length&&v[A].type==="text"&&v[A].text.trim()==="")A++;while(b>A&&v[b-1].type==="text"&&v[b-1].text.trim()==="")b--;let H=v.slice(A,b);return{displayText:k.trim(),text:I.trim(),images:N,parts:H}});return{value:Y.value,cursorPosition:Y.cursorPosition,setValue:q,setCursorPosition:U,clear:z,pasteMap:X.current,addPasteMapping:K,addImagePasteMapping:F,restorePasteMappings:G,resolveInput:_}}import{useMemoizedFn as G2}from"ahooks";import{useInput as R4}from"ink";import{useEffect as K2,useRef as O2,useState as QQ}from"react";function L4($){return{supportsThinking:z$().resolveConfig($).reasoning}}function O8($){return L4($).supportsThinking}import B4 from"fast-glob";import w4 from"fuse.js";import{useEffect as Q2,useMemo as s8,useState as e8}from"react";var _$=null,b4=5000;function A4($,Q){let Y=[...$.matchAll(/(?:^|\s)(@(?:"[^"]*"|(?:[^\\ ]|\\ )*))/g)];for(let J of Y){let Z=J[1],X=J.index+(J[0].length-Z.length),q=X+Z.length;if(Q>=X&&Q<=q){let U=Z.slice(1),z=!1;if(U.startsWith('"')){if(z=!0,U=U.slice(1),U.endsWith('"'))U=U.slice(0,-1)}return{hasQuery:!0,query:U,startIndex:X,endIndex:q,quoted:z}}}return{hasQuery:!1,query:"",startIndex:-1,endIndex:-1,quoted:!1}}var y4=[...$Q.map(($)=>`${$}/**`),...$Q,...J2.map(($)=>`**/${$}`)];function Y2($,Q,Y={}){let{cwd:J=t(),maxSuggestions:Z=15,ignorePatterns:X=y4,debounceDelay:q=300,fuzzyMatch:U=!0}=Y,[z,K]=e8([]),[F,G]=e8(!1),[_,O]=e8(0),N=s8(()=>JSON.stringify(X),[X]),W=s8(()=>{if(Q===void 0)return{hasQuery:!1,query:"",startIndex:-1,endIndex:-1,quoted:!1};return A4($,Q)},[$,Q]);Q2(()=>{if(!$.includes("@")){K([]),G(!1);return}let L=Date.now();if(_$&&_$.cwd===J&&_$.ignoreKey===N&&L-_$.timestamp<b4){K(_$.files),G(!1);return}let w=!1,k=setTimeout(async()=>{G(!0);try{let A=(await B4("**/*",{cwd:J,dot:!1,followSymbolicLinks:!1,onlyFiles:!1,markDirectories:!0,unique:!0,ignore:X})).map((b)=>b.replace(/\\/g,"/"));if(!w)K(A),_$={cwd:J,ignoreKey:N,files:A,timestamp:L}}catch(v){if(console.error("Failed to load files for @ completion:",v),!w)K([])}finally{if(!w)G(!1)}},q);return()=>{w=!0,clearTimeout(k)}},[$,J,q,N]);let B=s8(()=>{if(!W.hasQuery||z.length===0)return[];let L=W.query.toLowerCase();if(L==="")return z.slice(0,Z);if(U)return new w4(z,{threshold:0.4,ignoreLocation:!0,minMatchCharLength:1}).search(L).slice(0,Z).map((k)=>k.item);return z.filter((w)=>w.toLowerCase().includes(L)).slice(0,Z)},[W,z,Z,U]);return Q2(()=>{O(0)},[B]),{...W,suggestions:B,selectedIndex:_,loading:F}}function v4($,Q=!1){if($.includes(" ")||Q)return`@"${$}"`;return`@${$}`}function Z2($,Q,Y){if(!Q.hasQuery)return{newInput:$,newCursorPos:$.length};let J=v4(Y,Q.quoted),Z=$.slice(0,Q.startIndex),X=$.slice(Q.endIndex),q=Z+J+" "+X,U=Q.startIndex+J.length+1;return{newInput:q,newCursorPos:U}}import{useMemoizedFn as X2}from"ahooks";import{useEffect as q2,useRef as U2}from"react";var P0=($,Q)=>{let Y=U2(!1),J=U2(null),Z=X2(()=>{if(J.current)clearTimeout(J.current);J.current=setTimeout(()=>{z1().setAwaitingSecondCtrlC(!1),Y.current=!1,J.current=null},3000)}),X=()=>{V$().shutdown("SIGINT",0)},q=X2(()=>{if(!Y.current){if(Y.current=!0,$&&Q)Q();z1().setAwaitingSecondCtrlC(!0),Z()}else{if(J.current)clearTimeout(J.current),J.current=null;z1().setAwaitingSecondCtrlC(!1),X()}});return q2(()=>{if($){if(z1().setAwaitingSecondCtrlC(!1),Y.current=!1,J.current)clearTimeout(J.current),J.current=null}},[$]),q2(()=>{return()=>{if(J.current)clearTimeout(J.current)}},[]),q};var z8=T1("UI"),N2=($,Q,Y,J,Z,X,q,U,z,K)=>{let G=l0()==="main-input",_=$.value,O=$.setValue,N=$.cursorPosition,W=P1(),B=I1(),L=i$(),w=L?O8(L):!1,[I,k]=QQ(!1),[v,A]=QQ([]),[b,H]=QQ(0),R=Y2(_,N,{cwd:t(),maxSuggestions:10}),j=P0(q||!1,X),E=O2(0),p=500,V=O2(!1);K2(()=>{if(q)V.current=!1},[q]),K2(()=>{if(R.hasQuery&&R.suggestions.length>0){let P=R.suggestions.map((y)=>({command:y,description:z2(y)?`Directory: ${y}`:`File: ${y}`,matchScore:1}));A(P),k(!0),H(0)}else if(_.startsWith("/"))if(_.includes(" "))k(!1),A([]);else{let y=_2(_);A(y),k(y.length>0),H(0)}else k(!1),A([])},[_,R.hasQuery,R.suggestions]);let u=G2(()=>{W.clearMessages(),W.setError(null)}),T=G2(()=>{z8.debug("[DIAG] handleSubmit called:",{input:_,showSuggestions:I});let P=_.trim();if(P){let y=$.resolveInput(P);z8.debug("[DIAG] Submitting command:",{displayText:P,textLength:y.text.length,imageCount:y.images.length}),k(!1),A([]);let Y0=$.pasteMap.size>0?new Map($.pasteMap):new Map;Z(P,Y0),$.clear(),Q(y),z8.debug("[DIAG] Command submitted to onSubmit callback")}else z8.debug("[DIAG] Empty command, not submitting")});return R4((P,y)=>{if(P==="?"&&!_){z?.(),setTimeout(()=>$.clear(),0);return}if(y.backspace||y.delete||y.leftArrow||y.rightArrow||y.pageUp||y.pageDown||!y.ctrl&&!y.meta&&!y.escape&&!y.tab&&!y.upArrow&&!y.downArrow&&!y.return&&!(P==="?"&&!_))return;if(y.ctrl&&P==="c"||y.meta&&P==="c"||y.ctrl&&P==="d"||y.meta&&P==="d"){j();return}if(y.ctrl&&P==="l"||y.meta&&P==="l"){u();return}if(y.ctrl&&P==="t"||y.meta&&P==="t"){W.toggleThinkingExpanded();return}if(y.ctrl&&P==="o"||y.meta&&P==="o"){W.toggleHistoryExpanded();return}if(y.escape){if(K)z?.();else if(q&&X){if(V.current)return;V.current=!0,X()}else if(I)k(!1),A([]);else if(_){let r=Date.now();if(r-E.current<500)$.clear(),E.current=0;else E.current=r}return}if(y.tab&&y.shift){U?.();return}if(y.tab){if(I&&v.length>0){let r=v[b].command;if(R.hasQuery&&R.suggestions.includes(r)){let{newInput:S,newCursorPos:G0}=Z2(_,R,r);O(S),$.setCursorPosition(G0)}else{let S=r+" ";O(S),$.setCursorPosition(S.length)}k(!1),A([])}else if(w)B.toggleThinkingMode();return}if(y.return){T();return}if(y.upArrow){if(I&&v.length>0){let r=v.length-1;H((S)=>S>0?S-1:r)}else{let r=Y();if(r){if(r.pasteMappings.size>0)$.restorePasteMappings(r.pasteMappings);O(r.display),$.setCursorPosition(r.display.length)}}return}if(y.downArrow){if(I&&v.length>0){let r=v.length-1;H((S)=>S<r?S+1:0)}else{let r=J();if(r){if(r.pasteMappings.size>0)$.restorePasteMappings(r.pasteMappings);O(r.display),$.setCursorPosition(r.display.length)}}return}},{isActive:G}),{handleSubmit:T,showSuggestions:I,suggestions:v,selectedSuggestionIndex:b}};import k4 from"ansi-escapes";import{useStdout as C4}from"ink";import{useCallback as S4,useEffect as f4,useRef as D4}from"react";import{useStdout as P4}from"ink";import{debounce as I4}from"lodash-es";import{useEffect as M4,useState as T4}from"react";function N$($=200){let{stdout:Q}=P4(),[Y,J]=T4(Q.columns||80);return M4(()=>{let Z=I4(()=>{J(Q.columns||80)},$);return Z(),Q.on("resize",Z),()=>{Q.off("resize",Z),Z.cancel()}},[Q,$]),Y}function H2(){let{stdout:$}=C4(),Q=N$(),Y=D4(!0),J=$0((X)=>X.session.actions.incrementClearCount),Z=S4(()=>{if($)$.write(k4.clearTerminal);J()},[$,J]);return f4(()=>{if(Y.current){Y.current=!1;return}let X=setTimeout(()=>{Z()},300);return()=>{clearTimeout(X)}},[Q,Z]),{refreshStatic:Z}}import W2 from"node:fs";import V4 from"node:os";import JQ from"node:path";import{MultiSelect as j4}from"@inkjs/ui";import{useMemoizedFn as _8}from"ahooks";import{Box as i,Text as a,useFocus as E4,useFocusManager as h4,useInput as L2}from"ink";import N8 from"ink-select-input";import m4 from"ink-spinner";import j$ from"ink-text-input";import{useEffect as F2,useState as H$}from"react";import{jsxDEV as M}from"react/jsx-dev-runtime";var p4=[{label:"Glob - 文件搜索",value:"Glob"},{label:"Grep - 内容搜索",value:"Grep"},{label:"Read - 读取文件",value:"Read"},{label:"Write - 写入文件",value:"Write"},{label:"Edit - 编辑文件",value:"Edit"},{label:"Bash - 执行命令",value:"Bash"},{label:"所有工具 (不限制)",value:"all"}],g4=[{label:"红色 (red)",value:"red"},{label:"蓝色 (blue)",value:"blue"},{label:"绿色 (green)",value:"green"},{label:"黄色 (yellow)",value:"yellow"},{label:"紫色 (purple)",value:"purple"},{label:"橙色 (orange)",value:"orange"},{label:"粉色 (pink)",value:"pink"},{label:"青色 (cyan)",value:"cyan"},{label:"不设置颜色",value:"none"}];function c4($){if(!$||$.trim()==="")return"名称不能为空";if(!/^[a-z0-9-]+$/.test($))return"名称只能包含小写字母、数字和连字符";if($.startsWith("-")||$.endsWith("-"))return"名称不能以连字符开头或结尾";return null}function E$({onComplete:$,onCancel:Q,initialConfig:Y}){let[J,Z]=H$(Y?"name":"mode"),[X,q]=H$({name:Y?.name||"",description:Y?.description||"",tools:Y?.tools||[],color:Y?.color,location:Y?.location||"project",systemPrompt:Y?.systemPrompt||""}),[U,z]=H$(""),[K,F]=H$(!1),[G,_]=H$(""),[O,N]=H$(Y?"edit":"manual"),{focus:W}=h4(),L={manual:["mode","name","description","tools","color","location","systemPrompt","confirm"],ai:["mode","aiPrompt","aiGenerating","confirm"],edit:["name","description","tools","color","location","systemPrompt","confirm"]}[O];F2(()=>{if(J==="name"||J==="description"||J==="systemPrompt"||J==="aiPrompt")return;W(`step-${J}`)},[J,W]);let w=_8(()=>{let b=L.indexOf(J);if(b<L.length-1)Z(L[b+1])}),I=_8(()=>{if(G)_("");if(J==="confirm"&&O==="ai"){Z("aiPrompt");return}let b=L.indexOf(J);if(b>0)Z(L[b-1]);else Q()}),k=_8(async()=>{F(!0),_("");try{let b=await S$.create(),H=`你是一个 Subagent 配置生成专家。用户会描述他们想要创建的 agent,你需要根据描述生成一个完整的 agent 配置。
34
34
 
35
35
  ## 可用工具列表
36
36
 
@@ -104,25 +104,25 @@ ${y}`}]}}let T=d8(u),P=await B(T);if(!P.accepted){let y=P.reason==="queue_full"?
104
104
  4. **color**: 选择一个合适的颜色用于 UI 区分
105
105
  5. **systemPrompt**: 详细说明 agent 的职责、使用的工具、输出格式等,使用 Markdown 格式
106
106
 
107
- **重要**:请直接返回 JSON,不要添加任何额外的解释或文字。`,U)).trim(),E=j.match(/```(?:json)?\s*\n([\s\S]*?)\n```/);if(E)j=E[1];let p=JSON.parse(j);if(!p.name||!p.description||!p.systemPrompt)throw Error("Missing required fields: name, description, or systemPrompt");if(!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(p.name))throw Error("Invalid name format. Must be kebab-case (lowercase, numbers, hyphens only)");q({name:p.name,description:p.description,tools:Array.isArray(p.tools)?p.tools:[],color:p.color||"blue",location:"project",systemPrompt:p.systemPrompt}),Z("confirm")}catch(b){_(b instanceof Error?b.message:String(b))}finally{F(!1)}});F2(()=>{if(J==="aiGenerating"&&!K&&!G)k()},[J,K,G,k]);let v=_8(async()=>{try{let b=X.location==="project"?JQ.join(t(),".blade","agents"):JQ.join(V4.homedir(),".blade","agents");await W2.promises.mkdir(b,{recursive:!0});let W=["---",`name: ${X.name}`,`description: ${X.description}`];if(X.tools.length>0&&!X.tools.includes("all")){W.push("tools:");for(let E of X.tools)W.push(` - ${E}`)}if(X.color)W.push(`color: ${X.color}`);W.push("---");let R=[W.join(`
107
+ **重要**:请直接返回 JSON,不要添加任何额外的解释或文字。`,U)).trim(),E=j.match(/```(?:json)?\s*\n([\s\S]*?)\n```/);if(E)j=E[1];let p=JSON.parse(j);if(!p.name||!p.description||!p.systemPrompt)throw Error("Missing required fields: name, description, or systemPrompt");if(!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(p.name))throw Error("Invalid name format. Must be kebab-case (lowercase, numbers, hyphens only)");q({name:p.name,description:p.description,tools:Array.isArray(p.tools)?p.tools:[],color:p.color||"blue",location:"project",systemPrompt:p.systemPrompt}),Z("confirm")}catch(b){_(b instanceof Error?b.message:String(b))}finally{F(!1)}});F2(()=>{if(J==="aiGenerating"&&!K&&!G)k()},[J,K,G,k]);let v=_8(async()=>{try{let b=X.location==="project"?JQ.join(t(),".blade","agents"):JQ.join(V4.homedir(),".blade","agents");await W2.promises.mkdir(b,{recursive:!0});let H=["---",`name: ${X.name}`,`description: ${X.description}`];if(X.tools.length>0&&!X.tools.includes("all")){H.push("tools:");for(let E of X.tools)H.push(` - ${E}`)}if(X.color)H.push(`color: ${X.color}`);H.push("---");let R=[H.join(`
108
108
  `),"",`# ${X.name} Subagent`,"",X.systemPrompt||"你是一个专门的代理,负责执行特定任务。",""].join(`
109
- `),j=JQ.join(b,`${X.name}.md`);await W2.promises.writeFile(j,R,"utf-8"),$()}catch(b){console.error("保存配置失败:",b)}}),A=P0(!1,Q);if(L2((b,W)=>{if(W.escape)I();else if(W.ctrl&&b==="c"||W.meta&&b==="c")A()},{isActive:J!=="tools"}),J==="mode")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"选择创建方式"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"你可以手动配置每个细节,或让 AI 根据你的描述自动生成配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(N8,{items:[{label:"AI 智能生成 - 根据描述自动生成完整配置",value:"ai"},{label:"手动配置 - 逐步配置每个选项",value:"manual"}],onSelect:(b)=>{if(b.value==="ai")N("ai"),Z("aiPrompt");else N("manual"),Z("name")}},void 0,!1,void 0,this),M(i,{marginTop:1,children:M(a,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 取消"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="aiPrompt")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"AI 智能生成"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:'描述你想要创建的 Agent(例如:"一个专门用于代码审查的 agent,能够分析代码质量和潜在bug")'},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"描述: "},void 0,!1,void 0,this),M(j$,{value:U,onChange:z,onSubmit:(b)=>{if(!b.trim())return;Z("aiGenerating")}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:"按 Enter 开始生成 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="aiGenerating"){if(G)return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"red",children:"AI 生成失败"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{color:"red",children:G},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"按 ESC 返回修改描述"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"yellow",children:[M(m4,{type:"dots"},void 0,!1,void 0,this)," AI 正在生成配置..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:['根据你的描述:"',U,'"']},void 0,!0,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{color:"gray",children:"正在调用 LLM 生成 agent 配置,请稍候..."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}if(J==="name"){let b=O==="edit";return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:["Step 1/7: ",b?"Agent 名称(不可修改)":"输入 Agent 名称"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:b?"编辑模式下名称不可修改(修改名称相当于创建新 Agent)":"名称只能包含小写字母、数字和连字符(例如:code-reviewer)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"名称: "},void 0,!1,void 0,this),b?M(a,{children:X.name},void 0,!1,void 0,this):M(j$,{value:X.name,onChange:(W)=>q({...X,name:W}),onSubmit:(W)=>{if(c4(W))return;w()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:b?"按 Enter 继续 | ESC 返回":"按 Enter 继续 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this),b&&M(j$,{value:"",onChange:()=>{},onSubmit:w,showCursor:!1},"edit-mode-dummy-input",!1,void 0,this)]},void 0,!0,void 0,this)}if(J==="description")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 2/7: 输入描述信息"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"简短描述这个 Agent 的用途和使用场景(这将帮助主 Agent 决定何时使用它)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"描述: "},void 0,!1,void 0,this),M(j$,{value:X.description,onChange:(b)=>q({...X,description:b}),onSubmit:(b)=>{if(!b.trim())return;w()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:"按 Enter 继续 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="tools")return M(x4,{config:X,setConfig:q,onNext:w,onPrev:I},void 0,!1,void 0,this);if(J==="color")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 4/7: 选择背景颜色"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"为 Agent 选择一个颜色标识(用于在 UI 中区分不同的 Agents)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(N8,{items:g4,onSelect:(b)=>{let W=b.value==="none"?void 0:b.value;q({...X,color:W}),w()}},void 0,!1,void 0,this),M(i,{marginTop:1,children:M(a,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="location")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 5/7: 选择保存位置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"项目级配置仅在当前项目生效,用户级配置全局可用"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(N8,{items:[{label:"项目级 (.blade/agents/) - 仅当前项目",value:"project"},{label:"用户级 (~/.blade/agents/) - 全局可用",value:"user"}],onSelect:(b)=>{q({...X,location:b.value}),w()}},void 0,!1,void 0,this),M(i,{marginTop:1,children:M(a,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="systemPrompt")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 6/7: 输入系统提示词"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"定义 Agent 的行为和职责(可选,留空将使用默认提示)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"提示词: "},void 0,!1,void 0,this),M(j$,{value:X.systemPrompt,onChange:(b)=>q({...X,systemPrompt:b}),onSubmit:()=>w()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:"按 Enter 继续 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="confirm")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 7/7: 确认配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{flexDirection:"column",paddingLeft:2,marginBottom:1,children:[M(a,{children:[M(a,{bold:!0,color:"green",children:["名称:"," "]},void 0,!0,void 0,this),M(a,{children:X.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["描述:"," "]},void 0,!0,void 0,this),M(a,{children:X.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["工具:"," "]},void 0,!0,void 0,this),M(a,{children:X.tools.includes("all")?"所有工具":X.tools.join(", ")||"所有工具"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["颜色:"," "]},void 0,!0,void 0,this),M(a,{children:X.color||"默认"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["位置:"," "]},void 0,!0,void 0,this),M(a,{children:X.location==="project"?"项目级":"用户级"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["提示词:"," "]},void 0,!0,void 0,this),M(a,{children:X.systemPrompt||"(使用默认)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),M(N8,{items:[{label:"确认并保存",value:"save"},{label:"返回上一步",value:"back"},{label:"取消",value:"cancel"}],onSelect:(b)=>{if(b.value==="save")v();else if(b.value==="back")I();else Q()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return null}function x4({config:$,setConfig:Q,onNext:Y,onPrev:J}){let{isFocused:Z}=E4({id:"step-tools"});L2((q,U)=>{if(U.escape)J()},{isActive:Z});let X=(q)=>{if(q.includes("all"))Q({...$,tools:["all"]});else Q({...$,tools:q});Y()};return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 3/7: 选择可用工具"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"方向键导航,空格切换勾选,Enter 确认进入下一步 | ESC 返回上一步"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(j4,{options:p4,defaultValue:$.tools,onSubmit:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import u4 from"node:fs";import{useMemoizedFn as o1}from"ahooks";import{Box as L0,Text as A0,useInput as d4}from"ink";import YQ from"ink-select-input";import{useEffect as l4,useMemo as B2,useState as H8}from"react";import{jsxDEV as d}from"react/jsx-dev-runtime";var ZQ=10;function w2({initialMode:$="menu",onComplete:Q,onCancel:Y}){let[J,Z]=H8($),[X,q]=H8(null),[U,z]=H8(0),[K,F]=H8(0),G=o1(()=>{S1.clear(),S1.loadFromStandardLocations(),z((W)=>W+1)}),_=B2(()=>{return S1.getAllSubagents()},[U]),O=Math.ceil(_.length/ZQ)||1,N=B2(()=>{let W=K*ZQ;return _.slice(W,W+ZQ)},[_,K]);l4(()=>{let W=Math.max(0,O-1);if(K>W)F(W)},[O,K]);let H=o1(()=>{if(K<O-1)F((W)=>W+1)}),B=o1(()=>{if(K>0)F((W)=>W-1)}),L=[{key:"list",label:"查看所有 Agents",value:"list"},{key:"create",label:"创建新 Agent",value:"create"},{key:"edit",label:"编辑 Agent",value:"edit"},{key:"delete",label:"删除 Agent",value:"delete"},{key:"cancel",label:"取消",value:"cancel"}],w=o1((W)=>{if(W.value==="cancel"){Y?.();return}Z(W.value)}),I=o1((W)=>{if(q(W.value),J==="edit")Z("editWizard");else if(J==="delete")Z("deleteConfirm")}),k=o1(async()=>{if(!X?.configPath)return;try{await u4.promises.unlink(X.configPath),G(),v()}catch(W){console.error("删除失败:",W)}}),v=o1(()=>{Z("menu"),q(null)}),A=P0(!1,Y);if(d4((W,R)=>{if(R.escape){if(J==="menu")Y?.();else if(J==="list"||J==="edit"||J==="delete")F(0),v();else if(J==="deleteConfirm")v()}else if(R.ctrl&&W==="c"||R.meta&&W==="c")A();else if(J==="list"){if(R.leftArrow||W==="h")B();else if(R.rightArrow||W==="l")H()}},{isActive:J!=="create"&&J!=="editWizard"}),J==="menu")return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:"Agents 管理"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(YQ,{items:L,onSelect:w},void 0,!1,void 0,this),d(L0,{marginTop:1,children:d(A0,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 退出"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="list"){if(_.length===0)return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:"所有 Agents"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{paddingLeft:2,children:d(A0,{color:"gray",children:"没有找到任何 agent 配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginTop:1,paddingLeft:2,children:d(A0,{color:"gray",children:"配置文件位置: .blade/agents/ 或 ~/.blade/agents/"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginTop:1,paddingLeft:2,children:d(A0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:[d(A0,{bold:!0,color:"cyan",children:"所有 Agents"},void 0,!1,void 0,this),d(A0,{color:"gray",children:[" (共 ",_.length," 个)"]},void 0,!0,void 0,this),O>1&&d(A0,{color:"yellow",children:[" ","第 ",K+1,"/",O," 页"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),N.map((W)=>d(L0,{flexDirection:"column",paddingLeft:2,children:[d(L0,{children:d(A0,{children:[d(A0,{bold:!0,color:W.color||"white",children:["• ",W.name]},void 0,!0,void 0,this),d(A0,{color:"gray",children:[" - ",W.description]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),W.tools&&W.tools.length>0&&d(L0,{paddingLeft:2,children:d(A0,{color:"gray",children:["工具: ",W.tools.join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),W.configPath&&d(L0,{paddingLeft:2,children:d(A0,{color:"gray",dimColor:!0,children:W.configPath},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},W.name,!0,void 0,this)),d(L0,{marginTop:1,paddingLeft:2,children:O>1?d(A0,{dimColor:!0,children:"Left/Right to page | ESC 返回菜单"},void 0,!1,void 0,this):d(A0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}let b=(W)=>{if(_.length===0)return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:W},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{paddingLeft:2,children:d(A0,{color:"gray",children:"没有找到任何 agent 配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginTop:1,paddingLeft:2,children:d(A0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);let R=_.map((j)=>({key:j.name,label:`${j.name} - ${j.description}`,value:j}));return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:W},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(YQ,{items:R,onSelect:I},void 0,!1,void 0,this),d(L0,{marginTop:1,children:d(A0,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};if(J==="create")return d(E$,{onComplete:()=>{G(),v()},onCancel:v},void 0,!1,void 0,this);if(J==="edit")return b("编辑 Agent");if(J==="editWizard"&&X){let W={name:X.name,description:X.description,tools:X.tools||[],color:X.color,location:X.configPath?.includes(".blade/agents")?"project":"user",systemPrompt:X.systemPrompt||""};return d(E$,{initialConfig:W,onComplete:()=>{G(),v()},onCancel:v},void 0,!1,void 0,this)}if(J==="delete")return b("删除 Agent");if(J==="deleteConfirm"&&X)return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"red",children:"确认删除"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginBottom:1,paddingLeft:2,children:d(A0,{children:["你确定要删除 Agent"," ",d(A0,{bold:!0,color:"yellow",children:X.name},void 0,!1,void 0,this)," ","吗?"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),d(L0,{marginBottom:1,paddingLeft:2,children:d(A0,{dimColor:!0,children:["文件路径: ",X.configPath]},void 0,!0,void 0,this)},void 0,!1,void 0,this),d(L0,{marginBottom:1,paddingLeft:2,children:d(A0,{color:"red",children:"此操作无法撤销!"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(YQ,{items:[{label:"确认删除",value:"confirm"},{label:"取消",value:"cancel"}],onSelect:(W)=>{if(W.value==="confirm")k();else v()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return null}import{Box as W$,Text as N0}from"ink";import a4,{useEffect as o4,useState as i4}from"react";import{useEffect as r4,useState as b2}from"react";function v2($=t(),Q=5000){let[Y,J]=b2(null),[Z,X]=b2(!0);return r4(()=>{let q=!0,U=async()=>{try{let K=await A2($);if(!q)return;if(!K){J(null),X(!1);return}let F=await y2($);if(!q)return;J(F)}catch{if(q)J(null)}finally{if(q)X(!1)}};U();let z=null;if(Q>0)z=setInterval(U,Q);return()=>{if(q=!1,z)clearInterval(z)}},[$,Q]),{branch:Y,loading:Z}}import{jsxDEV as n,Fragment as f1}from"react/jsx-dev-runtime";var P2=a4.memo(()=>{let $=o$(),Q=G$(),J=a$()==="shortcuts",Z=w6(),{branch:X}=v2(R2()),q=i$(),U=N6(),z=z6(),K=t$(),F=_6(),G=n$(),_=I6(),O=r$(),[N,H]=i4(null);o4(()=>{let v=!1;new XQ(t(),O).get().then((W)=>{if(!v)H(W)}).catch(()=>{if(!v)H(null)});let b=XQ.subscribe((W)=>{if(!v&&W.sessionId===O&&W.workspaceRoot===t())H(W.goal)});return()=>{v=!0,b()}},[O]);let B=q?O8(q):!1,w=(()=>{if(Q==="default")return null;if(Q==="autoEdit")return n(N0,{color:"magenta",children:[">> ","auto edit on ",n(N0,{color:"gray",children:"(shift+tab to cycle)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(Q==="plan")return n(N0,{color:"cyan",children:["‖ plan mode on ",n(N0,{color:"gray",children:"(shift+tab to cycle)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(Q==="yolo")return n(N0,{color:"red",children:["yolo mode on ",n(N0,{color:"gray",children:"(all tools auto-approved)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return null})(),I=w!==null,k=[["Enter:发送","Shift+Enter:换行","Esc:中止"],["Shift+Tab:切换模式","Up/Down:历史","Tab:补全"],["Ctrl+A:行首","Ctrl+E:行尾","Ctrl+K:删到尾"],["Ctrl+U:删到首","Ctrl+W:删单词","Ctrl+C:退出"]];return n(W$,{flexDirection:"row",justifyContent:"space-between",paddingX:2,paddingY:0,children:[J?n(W$,{flexDirection:"column",gap:0,children:k.map((v,A)=>n(W$,{flexDirection:"row",children:[v.map((b,W)=>{let[R,j]=b.split(":");return n(W$,{flexDirection:"row",width:20,children:[n(N0,{color:"yellow",children:R},void 0,!1,void 0,this),n(N0,{color:"gray",children:":"},void 0,!1,void 0,this),n(N0,{color:"white",children:j},void 0,!1,void 0,this)]},W,!0,void 0,this)}),A===k.length-1&&n(N0,{color:"cyan",children:" ? 关闭"},void 0,!1,void 0,this)]},A,!0,void 0,this))},void 0,!1,void 0,this):n(W$,{flexDirection:"row",gap:1,children:[X&&n(f1,{children:[n(N0,{color:"gray",children:[" ",X]},void 0,!0,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w,I&&n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),N&&n(f1,{children:[n(N0,{color:N.status==="active"?"green":N.status==="blocked"||N.status==="budget_limited"?"yellow":"gray",children:["goal:",N.status," ",N.objective.slice(0,32)]},void 0,!0,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),n(N0,{color:"gray",children:"? for shortcuts"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),n(W$,{flexDirection:"row",gap:1,children:!$?n(N0,{color:"red",children:"[WARN] API 密钥未配置"},void 0,!1,void 0,this):n(f1,{children:[B&&n(f1,{children:[K?n(N0,{color:"cyan",children:"Thinking on"},void 0,!1,void 0,this):n(N0,{color:"gray",children:"Tab:Thinking"},void 0,!1,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q&&n(N0,{color:"gray",children:q.model},void 0,!1,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),z?n(N0,{color:"yellow",children:"压缩中..."},void 0,!1,void 0,this):n(N0,{color:U<20?"red":U<50?"yellow":"gray",children:[U,"%"]},void 0,!0,void 0,this),F>0.001&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"green",children:["$",F<0.01?F.toFixed(4):F.toFixed(3)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.length>0&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"yellow",children:["已排队 ",G.length]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_>0&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"cyan",children:["已恢复 ",_," 条指令"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Z&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"yellow",children:"再按一次 Ctrl+C 退出"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as qQ,Text as UQ}from"ink";import n4 from"react";import{jsxDEV as F$}from"react/jsx-dev-runtime";var I2=n4.memo(({suggestions:$,selectedIndex:Q,visible:Y,maxDisplay:J=8})=>{if(!Y||$.length===0)return null;let Z=0,X=Math.min(J,$.length),q=Q>=$.length;if(Q>=J&&!q)Z=Q-J+1,X=Q+1;let U=$.slice(Z,X),z=$.length>J;return F$(qQ,{flexDirection:"column",paddingX:2,paddingY:0,children:[U.map((K,F)=>{let _=Z+F===Q;return F$(qQ,{flexDirection:"row",paddingX:1,gap:2,children:[F$(UQ,{color:_?"cyan":"white",bold:_,children:K.command},void 0,!1,void 0,this),F$(UQ,{color:_?"cyan":"gray",dimColor:!_,children:["- ",K.description]},void 0,!0,void 0,this)]},K.command,!0,void 0,this)}),z&&F$(qQ,{paddingX:1,children:F$(UQ,{color:q?"cyan":"gray",bold:q,dimColor:!q,children:["... and ",$.length-J," more"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as t0,Text as U1,useInput as x3,useStdout as u3}from"ink";import d3 from"ink-select-input";import fQ,{useMemo as $9}from"react";import{Box as Z0,Text as H0}from"ink";import t1,{useEffect as CQ,useMemo as n1,useRef as t2}from"react";import{Box as wQ,Text as m2}from"ink";import O3 from"react";import{Text as J1}from"ink";import U3 from"react";import j2 from"string-width";import h$ from"string-width";function GQ({onlyFirst:$=!1}={}){return new RegExp("(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]",$?void 0:"g")}var t4=GQ();function KQ($){if(typeof $!=="string")throw TypeError(`Expected a \`string\`, got \`${typeof $}\``);if(!$.includes("\x1B")&&!$.includes("›"))return $;return $.replace(t4,"")}var M2=($=0)=>(Q)=>`\x1B[${Q+$}m`,T2=($=0)=>(Q)=>`\x1B[${38+$};5;${Q}m`,k2=($=0)=>(Q,Y,J)=>`\x1B[${38+$};2;${Q};${Y};${J}m`,I0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},u7=Object.keys(I0.modifier),s4=Object.keys(I0.color),e4=Object.keys(I0.bgColor),d7=[...s4,...e4];function $3(){let $=new Map;for(let[Q,Y]of Object.entries(I0)){for(let[J,Z]of Object.entries(Y))I0[J]={open:`\x1B[${Z[0]}m`,close:`\x1B[${Z[1]}m`},Y[J]=I0[J],$.set(Z[0],Z[1]);Object.defineProperty(I0,Q,{value:Y,enumerable:!1})}return Object.defineProperty(I0,"codes",{value:$,enumerable:!1}),I0.color.close="\x1B[39m",I0.bgColor.close="\x1B[49m",I0.color.ansi=M2(),I0.color.ansi256=T2(),I0.color.ansi16m=k2(),I0.bgColor.ansi=M2(10),I0.bgColor.ansi256=T2(10),I0.bgColor.ansi16m=k2(10),Object.defineProperties(I0,{rgbToAnsi256:{value(Q,Y,J){if(Q===Y&&Y===J){if(Q<8)return 16;if(Q>248)return 231;return Math.round((Q-8)/247*24)+232}return 16+36*Math.round(Q/255*5)+6*Math.round(Y/255*5)+Math.round(J/255*5)},enumerable:!1},hexToRgb:{value(Q){let Y=/[a-f\d]{6}|[a-f\d]{3}/i.exec(Q.toString(16));if(!Y)return[0,0,0];let[J]=Y;if(J.length===3)J=[...J].map((X)=>X+X).join("");let Z=Number.parseInt(J,16);return[Z>>16&255,Z>>8&255,Z&255]},enumerable:!1},hexToAnsi256:{value:(Q)=>I0.rgbToAnsi256(...I0.hexToRgb(Q)),enumerable:!1},ansi256ToAnsi:{value(Q){if(Q<8)return 30+Q;if(Q<16)return 90+(Q-8);let Y,J,Z;if(Q>=232)Y=((Q-232)*10+8)/255,J=Y,Z=Y;else{Q-=16;let U=Q%36;Y=Math.floor(Q/36)/5,J=Math.floor(U/6)/5,Z=U%6/5}let X=Math.max(Y,J,Z)*2;if(X===0)return 30;let q=30+(Math.round(Z)<<2|Math.round(J)<<1|Math.round(Y));if(X===2)q+=60;return q},enumerable:!1},rgbToAnsi:{value:(Q,Y,J)=>I0.ansi256ToAnsi(I0.rgbToAnsi256(Q,Y,J)),enumerable:!1},hexToAnsi:{value:(Q)=>I0.ansi256ToAnsi(I0.hexToAnsi256(Q)),enumerable:!1}}),I0}var Q3=$3(),C2=Q3;var F8=new Set(["\x1B","›"]),J3=39,zQ="\x07",D2="[",Y3="]",V2="m",W8=`${Y3}8;;`,S2=($)=>`${F8.values().next().value}${D2}${$}${V2}`,f2=($)=>`${F8.values().next().value}${W8}${$}${zQ}`,Z3=($)=>$.split(" ").map((Q)=>h$(Q)),OQ=($,Q,Y)=>{let J=[...Q],Z=!1,X=!1,q=h$(KQ($.at(-1)));for(let[U,z]of J.entries()){let K=h$(z);if(q+K<=Y)$[$.length-1]+=z;else $.push(z),q=0;if(F8.has(z))Z=!0,X=J.slice(U+1,U+1+W8.length).join("")===W8;if(Z){if(X){if(z===zQ)Z=!1,X=!1}else if(z===V2)Z=!1;continue}if(q+=K,q===Y&&U<J.length-1)$.push(""),q=0}if(!q&&$.at(-1).length>0&&$.length>1)$[$.length-2]+=$.pop()},X3=($)=>{let Q=$.split(" "),Y=Q.length;while(Y>0){if(h$(Q[Y-1])>0)break;Y--}if(Y===Q.length)return $;return Q.slice(0,Y).join(" ")+Q.slice(Y).join("")},q3=($,Q,Y={})=>{if(Y.trim!==!1&&$.trim()==="")return"";let J="",Z,X,q=Z3($),U=[""];for(let[G,_]of $.split(" ").entries()){if(Y.trim!==!1)U[U.length-1]=U.at(-1).trimStart();let O=h$(U.at(-1));if(G!==0){if(O>=Q&&(Y.wordWrap===!1||Y.trim===!1))U.push(""),O=0;if(O>0||Y.trim===!1)U[U.length-1]+=" ",O++}if(Y.hard&&q[G]>Q){let N=Q-O,H=1+Math.floor((q[G]-N-1)/Q);if(Math.floor((q[G]-1)/Q)<H)U.push("");OQ(U,_,Q);continue}if(O+q[G]>Q&&O>0&&q[G]>0){if(Y.wordWrap===!1&&O<Q){OQ(U,_,Q);continue}U.push("")}if(O+q[G]>Q&&Y.wordWrap===!1){OQ(U,_,Q);continue}U[U.length-1]+=_}if(Y.trim!==!1)U=U.map((G)=>X3(G));let z=U.join(`
110
- `),K=[...z],F=0;for(let[G,_]of K.entries()){if(J+=_,F8.has(_)){let{groups:N}=new RegExp(`(?:\\${D2}(?<code>\\d+)m|\\${W8}(?<uri>.*)${zQ})`).exec(z.slice(F))||{groups:{}};if(N.code!==void 0){let H=Number.parseFloat(N.code);Z=H===J3?void 0:H}else if(N.uri!==void 0)X=N.uri.length===0?void 0:N.uri}let O=C2.codes.get(Number(Z));if(K[G+1]===`
109
+ `),j=JQ.join(b,`${X.name}.md`);await W2.promises.writeFile(j,R,"utf-8"),$()}catch(b){console.error("保存配置失败:",b)}}),A=P0(!1,Q);if(L2((b,H)=>{if(H.escape)I();else if(H.ctrl&&b==="c"||H.meta&&b==="c")A()},{isActive:J!=="tools"}),J==="mode")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"选择创建方式"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"你可以手动配置每个细节,或让 AI 根据你的描述自动生成配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(N8,{items:[{label:"AI 智能生成 - 根据描述自动生成完整配置",value:"ai"},{label:"手动配置 - 逐步配置每个选项",value:"manual"}],onSelect:(b)=>{if(b.value==="ai")N("ai"),Z("aiPrompt");else N("manual"),Z("name")}},void 0,!1,void 0,this),M(i,{marginTop:1,children:M(a,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 取消"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="aiPrompt")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"AI 智能生成"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:'描述你想要创建的 Agent(例如:"一个专门用于代码审查的 agent,能够分析代码质量和潜在bug")'},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"描述: "},void 0,!1,void 0,this),M(j$,{value:U,onChange:z,onSubmit:(b)=>{if(!b.trim())return;Z("aiGenerating")}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:"按 Enter 开始生成 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="aiGenerating"){if(G)return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"red",children:"AI 生成失败"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{color:"red",children:G},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"按 ESC 返回修改描述"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"yellow",children:[M(m4,{type:"dots"},void 0,!1,void 0,this)," AI 正在生成配置..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:['根据你的描述:"',U,'"']},void 0,!0,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{color:"gray",children:"正在调用 LLM 生成 agent 配置,请稍候..."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}if(J==="name"){let b=O==="edit";return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:["Step 1/7: ",b?"Agent 名称(不可修改)":"输入 Agent 名称"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:b?"编辑模式下名称不可修改(修改名称相当于创建新 Agent)":"名称只能包含小写字母、数字和连字符(例如:code-reviewer)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"名称: "},void 0,!1,void 0,this),b?M(a,{children:X.name},void 0,!1,void 0,this):M(j$,{value:X.name,onChange:(H)=>q({...X,name:H}),onSubmit:(H)=>{if(c4(H))return;w()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:b?"按 Enter 继续 | ESC 返回":"按 Enter 继续 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this),b&&M(j$,{value:"",onChange:()=>{},onSubmit:w,showCursor:!1},"edit-mode-dummy-input",!1,void 0,this)]},void 0,!0,void 0,this)}if(J==="description")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 2/7: 输入描述信息"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"简短描述这个 Agent 的用途和使用场景(这将帮助主 Agent 决定何时使用它)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"描述: "},void 0,!1,void 0,this),M(j$,{value:X.description,onChange:(b)=>q({...X,description:b}),onSubmit:(b)=>{if(!b.trim())return;w()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:"按 Enter 继续 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="tools")return M(x4,{config:X,setConfig:q,onNext:w,onPrev:I},void 0,!1,void 0,this);if(J==="color")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 4/7: 选择背景颜色"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"为 Agent 选择一个颜色标识(用于在 UI 中区分不同的 Agents)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(N8,{items:g4,onSelect:(b)=>{let H=b.value==="none"?void 0:b.value;q({...X,color:H}),w()}},void 0,!1,void 0,this),M(i,{marginTop:1,children:M(a,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="location")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 5/7: 选择保存位置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"项目级配置仅在当前项目生效,用户级配置全局可用"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(N8,{items:[{label:"项目级 (.blade/agents/) - 仅当前项目",value:"project"},{label:"用户级 (~/.blade/agents/) - 全局可用",value:"user"}],onSelect:(b)=>{q({...X,location:b.value}),w()}},void 0,!1,void 0,this),M(i,{marginTop:1,children:M(a,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="systemPrompt")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 6/7: 输入系统提示词"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"定义 Agent 的行为和职责(可选,留空将使用默认提示)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:[M(a,{color:"green",children:"提示词: "},void 0,!1,void 0,this),M(j$,{value:X.systemPrompt,onChange:(b)=>q({...X,systemPrompt:b}),onSubmit:()=>w()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(i,{children:M(a,{dimColor:!0,children:"按 Enter 继续 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="confirm")return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 7/7: 确认配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{flexDirection:"column",paddingLeft:2,marginBottom:1,children:[M(a,{children:[M(a,{bold:!0,color:"green",children:["名称:"," "]},void 0,!0,void 0,this),M(a,{children:X.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["描述:"," "]},void 0,!0,void 0,this),M(a,{children:X.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["工具:"," "]},void 0,!0,void 0,this),M(a,{children:X.tools.includes("all")?"所有工具":X.tools.join(", ")||"所有工具"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["颜色:"," "]},void 0,!0,void 0,this),M(a,{children:X.color||"默认"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["位置:"," "]},void 0,!0,void 0,this),M(a,{children:X.location==="project"?"项目级":"用户级"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M(a,{children:[M(a,{bold:!0,color:"green",children:["提示词:"," "]},void 0,!0,void 0,this),M(a,{children:X.systemPrompt||"(使用默认)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),M(N8,{items:[{label:"确认并保存",value:"save"},{label:"返回上一步",value:"back"},{label:"取消",value:"cancel"}],onSelect:(b)=>{if(b.value==="save")v();else if(b.value==="back")I();else Q()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return null}function x4({config:$,setConfig:Q,onNext:Y,onPrev:J}){let{isFocused:Z}=E4({id:"step-tools"});L2((q,U)=>{if(U.escape)J()},{isActive:Z});let X=(q)=>{if(q.includes("all"))Q({...$,tools:["all"]});else Q({...$,tools:q});Y()};return M(i,{flexDirection:"column",paddingY:1,children:[M(i,{marginBottom:1,children:M(a,{bold:!0,color:"cyan",children:"Step 3/7: 选择可用工具"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(i,{marginBottom:1,children:M(a,{dimColor:!0,children:"方向键导航,空格切换勾选,Enter 确认进入下一步 | ESC 返回上一步"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M(j4,{options:p4,defaultValue:$.tools,onSubmit:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import u4 from"node:fs";import{useMemoizedFn as o1}from"ahooks";import{Box as L0,Text as A0,useInput as d4}from"ink";import YQ from"ink-select-input";import{useEffect as l4,useMemo as B2,useState as H8}from"react";import{jsxDEV as d}from"react/jsx-dev-runtime";var ZQ=10;function w2({initialMode:$="menu",onComplete:Q,onCancel:Y}){let[J,Z]=H8($),[X,q]=H8(null),[U,z]=H8(0),[K,F]=H8(0),G=o1(()=>{S1.clear(),S1.loadFromStandardLocations(),z((H)=>H+1)}),_=B2(()=>{return S1.getAllSubagents()},[U]),O=Math.ceil(_.length/ZQ)||1,N=B2(()=>{let H=K*ZQ;return _.slice(H,H+ZQ)},[_,K]);l4(()=>{let H=Math.max(0,O-1);if(K>H)F(H)},[O,K]);let W=o1(()=>{if(K<O-1)F((H)=>H+1)}),B=o1(()=>{if(K>0)F((H)=>H-1)}),L=[{key:"list",label:"查看所有 Agents",value:"list"},{key:"create",label:"创建新 Agent",value:"create"},{key:"edit",label:"编辑 Agent",value:"edit"},{key:"delete",label:"删除 Agent",value:"delete"},{key:"cancel",label:"取消",value:"cancel"}],w=o1((H)=>{if(H.value==="cancel"){Y?.();return}Z(H.value)}),I=o1((H)=>{if(q(H.value),J==="edit")Z("editWizard");else if(J==="delete")Z("deleteConfirm")}),k=o1(async()=>{if(!X?.configPath)return;try{await u4.promises.unlink(X.configPath),G(),v()}catch(H){console.error("删除失败:",H)}}),v=o1(()=>{Z("menu"),q(null)}),A=P0(!1,Y);if(d4((H,R)=>{if(R.escape){if(J==="menu")Y?.();else if(J==="list"||J==="edit"||J==="delete")F(0),v();else if(J==="deleteConfirm")v()}else if(R.ctrl&&H==="c"||R.meta&&H==="c")A();else if(J==="list"){if(R.leftArrow||H==="h")B();else if(R.rightArrow||H==="l")W()}},{isActive:J!=="create"&&J!=="editWizard"}),J==="menu")return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:"Agents 管理"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(YQ,{items:L,onSelect:w},void 0,!1,void 0,this),d(L0,{marginTop:1,children:d(A0,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 退出"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(J==="list"){if(_.length===0)return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:"所有 Agents"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{paddingLeft:2,children:d(A0,{color:"gray",children:"没有找到任何 agent 配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginTop:1,paddingLeft:2,children:d(A0,{color:"gray",children:"配置文件位置: .blade/agents/ 或 ~/.blade/agents/"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginTop:1,paddingLeft:2,children:d(A0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:[d(A0,{bold:!0,color:"cyan",children:"所有 Agents"},void 0,!1,void 0,this),d(A0,{color:"gray",children:[" (共 ",_.length," 个)"]},void 0,!0,void 0,this),O>1&&d(A0,{color:"yellow",children:[" ","第 ",K+1,"/",O," 页"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),N.map((H)=>d(L0,{flexDirection:"column",paddingLeft:2,children:[d(L0,{children:d(A0,{children:[d(A0,{bold:!0,color:H.color||"white",children:["• ",H.name]},void 0,!0,void 0,this),d(A0,{color:"gray",children:[" - ",H.description]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H.tools&&H.tools.length>0&&d(L0,{paddingLeft:2,children:d(A0,{color:"gray",children:["工具: ",H.tools.join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H.configPath&&d(L0,{paddingLeft:2,children:d(A0,{color:"gray",dimColor:!0,children:H.configPath},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},H.name,!0,void 0,this)),d(L0,{marginTop:1,paddingLeft:2,children:O>1?d(A0,{dimColor:!0,children:"Left/Right to page | ESC 返回菜单"},void 0,!1,void 0,this):d(A0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}let b=(H)=>{if(_.length===0)return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:H},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{paddingLeft:2,children:d(A0,{color:"gray",children:"没有找到任何 agent 配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginTop:1,paddingLeft:2,children:d(A0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);let R=_.map((j)=>({key:j.name,label:`${j.name} - ${j.description}`,value:j}));return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"cyan",children:H},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(YQ,{items:R,onSelect:I},void 0,!1,void 0,this),d(L0,{marginTop:1,children:d(A0,{dimColor:!0,children:"使用方向键选择 | Enter 确认 | ESC 返回"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};if(J==="create")return d(E$,{onComplete:()=>{G(),v()},onCancel:v},void 0,!1,void 0,this);if(J==="edit")return b("编辑 Agent");if(J==="editWizard"&&X){let H={name:X.name,description:X.description,tools:X.tools||[],color:X.color,location:X.configPath?.includes(".blade/agents")?"project":"user",systemPrompt:X.systemPrompt||""};return d(E$,{initialConfig:H,onComplete:()=>{G(),v()},onCancel:v},void 0,!1,void 0,this)}if(J==="delete")return b("删除 Agent");if(J==="deleteConfirm"&&X)return d(L0,{flexDirection:"column",paddingY:1,children:[d(L0,{marginBottom:1,children:d(A0,{bold:!0,color:"red",children:"确认删除"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(L0,{marginBottom:1,paddingLeft:2,children:d(A0,{children:["你确定要删除 Agent"," ",d(A0,{bold:!0,color:"yellow",children:X.name},void 0,!1,void 0,this)," ","吗?"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),d(L0,{marginBottom:1,paddingLeft:2,children:d(A0,{dimColor:!0,children:["文件路径: ",X.configPath]},void 0,!0,void 0,this)},void 0,!1,void 0,this),d(L0,{marginBottom:1,paddingLeft:2,children:d(A0,{color:"red",children:"此操作无法撤销!"},void 0,!1,void 0,this)},void 0,!1,void 0,this),d(YQ,{items:[{label:"确认删除",value:"confirm"},{label:"取消",value:"cancel"}],onSelect:(H)=>{if(H.value==="confirm")k();else v()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return null}import{Box as W$,Text as N0}from"ink";import a4,{useEffect as o4,useState as i4}from"react";import{useEffect as r4,useState as b2}from"react";function v2($=t(),Q=5000){let[Y,J]=b2(null),[Z,X]=b2(!0);return r4(()=>{let q=!0,U=async()=>{try{let K=await A2($);if(!q)return;if(!K){J(null),X(!1);return}let F=await y2($);if(!q)return;J(F)}catch{if(q)J(null)}finally{if(q)X(!1)}};U();let z=null;if(Q>0)z=setInterval(U,Q);return()=>{if(q=!1,z)clearInterval(z)}},[$,Q]),{branch:Y,loading:Z}}import{jsxDEV as n,Fragment as f1}from"react/jsx-dev-runtime";var P2=a4.memo(()=>{let $=o$(),Q=G$(),J=a$()==="shortcuts",Z=w6(),{branch:X}=v2(R2()),q=i$(),U=N6(),z=z6(),K=t$(),F=_6(),G=n$(),_=I6(),O=r$(),[N,W]=i4(null);o4(()=>{let v=!1;new XQ(t(),O).get().then((H)=>{if(!v)W(H)}).catch(()=>{if(!v)W(null)});let b=XQ.subscribe((H)=>{if(!v&&H.sessionId===O&&H.workspaceRoot===t())W(H.goal)});return()=>{v=!0,b()}},[O]);let B=q?O8(q):!1,w=(()=>{if(Q==="default")return null;if(Q==="autoEdit")return n(N0,{color:"magenta",children:[">> ","auto edit on ",n(N0,{color:"gray",children:"(shift+tab to cycle)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(Q==="plan")return n(N0,{color:"cyan",children:["‖ plan mode on ",n(N0,{color:"gray",children:"(shift+tab to cycle)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(Q==="yolo")return n(N0,{color:"red",children:["yolo mode on ",n(N0,{color:"gray",children:"(all tools auto-approved)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return null})(),I=w!==null,k=[["Enter:发送","Shift+Enter:换行","Esc:中止"],["Shift+Tab:切换模式","Up/Down:历史","Tab:补全"],["Ctrl+A:行首","Ctrl+E:行尾","Ctrl+K:删到尾"],["Ctrl+U:删到首","Ctrl+W:删单词","Ctrl+C:退出"]];return n(W$,{flexDirection:"row",justifyContent:"space-between",paddingX:2,paddingY:0,children:[J?n(W$,{flexDirection:"column",gap:0,children:k.map((v,A)=>n(W$,{flexDirection:"row",children:[v.map((b,H)=>{let[R,j]=b.split(":");return n(W$,{flexDirection:"row",width:20,children:[n(N0,{color:"yellow",children:R},void 0,!1,void 0,this),n(N0,{color:"gray",children:":"},void 0,!1,void 0,this),n(N0,{color:"white",children:j},void 0,!1,void 0,this)]},H,!0,void 0,this)}),A===k.length-1&&n(N0,{color:"cyan",children:" ? 关闭"},void 0,!1,void 0,this)]},A,!0,void 0,this))},void 0,!1,void 0,this):n(W$,{flexDirection:"row",gap:1,children:[X&&n(f1,{children:[n(N0,{color:"gray",children:[" ",X]},void 0,!0,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w,I&&n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),N&&n(f1,{children:[n(N0,{color:N.status==="active"?"green":N.status==="blocked"||N.status==="budget_limited"?"yellow":"gray",children:["goal:",N.status," ",N.objective.slice(0,32)]},void 0,!0,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),n(N0,{color:"gray",children:"? for shortcuts"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),n(W$,{flexDirection:"row",gap:1,children:!$?n(N0,{color:"red",children:"[WARN] API 密钥未配置"},void 0,!1,void 0,this):n(f1,{children:[B&&n(f1,{children:[K?n(N0,{color:"cyan",children:"Thinking on"},void 0,!1,void 0,this):n(N0,{color:"gray",children:"Tab:Thinking"},void 0,!1,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q&&n(N0,{color:"gray",children:q.model},void 0,!1,void 0,this),n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),z?n(N0,{color:"yellow",children:"压缩中..."},void 0,!1,void 0,this):n(N0,{color:U<20?"red":U<50?"yellow":"gray",children:[U,"%"]},void 0,!0,void 0,this),F>0.001&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"green",children:["$",F<0.01?F.toFixed(4):F.toFixed(3)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.length>0&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"yellow",children:["已排队 ",G.length]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_>0&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"cyan",children:["已恢复 ",_," 条指令"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Z&&n(f1,{children:[n(N0,{color:"gray",children:"·"},void 0,!1,void 0,this),n(N0,{color:"yellow",children:"再按一次 Ctrl+C 退出"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as qQ,Text as UQ}from"ink";import n4 from"react";import{jsxDEV as F$}from"react/jsx-dev-runtime";var I2=n4.memo(({suggestions:$,selectedIndex:Q,visible:Y,maxDisplay:J=8})=>{if(!Y||$.length===0)return null;let Z=0,X=Math.min(J,$.length),q=Q>=$.length;if(Q>=J&&!q)Z=Q-J+1,X=Q+1;let U=$.slice(Z,X),z=$.length>J;return F$(qQ,{flexDirection:"column",paddingX:2,paddingY:0,children:[U.map((K,F)=>{let _=Z+F===Q;return F$(qQ,{flexDirection:"row",paddingX:1,gap:2,children:[F$(UQ,{color:_?"cyan":"white",bold:_,children:K.command},void 0,!1,void 0,this),F$(UQ,{color:_?"cyan":"gray",dimColor:!_,children:["- ",K.description]},void 0,!0,void 0,this)]},K.command,!0,void 0,this)}),z&&F$(qQ,{paddingX:1,children:F$(UQ,{color:q?"cyan":"gray",bold:q,dimColor:!q,children:["... and ",$.length-J," more"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as t0,Text as U1,useInput as x3,useStdout as u3}from"ink";import d3 from"ink-select-input";import fQ,{useMemo as $9}from"react";import{Box as Z0,Text as H0}from"ink";import t1,{useEffect as CQ,useMemo as n1,useRef as t2}from"react";import{Box as wQ,Text as m2}from"ink";import O3 from"react";import{Text as J1}from"ink";import U3 from"react";import j2 from"string-width";import h$ from"string-width";function GQ({onlyFirst:$=!1}={}){return new RegExp("(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]",$?void 0:"g")}var t4=GQ();function KQ($){if(typeof $!=="string")throw TypeError(`Expected a \`string\`, got \`${typeof $}\``);if(!$.includes("\x1B")&&!$.includes("›"))return $;return $.replace(t4,"")}var M2=($=0)=>(Q)=>`\x1B[${Q+$}m`,T2=($=0)=>(Q)=>`\x1B[${38+$};5;${Q}m`,k2=($=0)=>(Q,Y,J)=>`\x1B[${38+$};2;${Q};${Y};${J}m`,I0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},u7=Object.keys(I0.modifier),s4=Object.keys(I0.color),e4=Object.keys(I0.bgColor),d7=[...s4,...e4];function $3(){let $=new Map;for(let[Q,Y]of Object.entries(I0)){for(let[J,Z]of Object.entries(Y))I0[J]={open:`\x1B[${Z[0]}m`,close:`\x1B[${Z[1]}m`},Y[J]=I0[J],$.set(Z[0],Z[1]);Object.defineProperty(I0,Q,{value:Y,enumerable:!1})}return Object.defineProperty(I0,"codes",{value:$,enumerable:!1}),I0.color.close="\x1B[39m",I0.bgColor.close="\x1B[49m",I0.color.ansi=M2(),I0.color.ansi256=T2(),I0.color.ansi16m=k2(),I0.bgColor.ansi=M2(10),I0.bgColor.ansi256=T2(10),I0.bgColor.ansi16m=k2(10),Object.defineProperties(I0,{rgbToAnsi256:{value(Q,Y,J){if(Q===Y&&Y===J){if(Q<8)return 16;if(Q>248)return 231;return Math.round((Q-8)/247*24)+232}return 16+36*Math.round(Q/255*5)+6*Math.round(Y/255*5)+Math.round(J/255*5)},enumerable:!1},hexToRgb:{value(Q){let Y=/[a-f\d]{6}|[a-f\d]{3}/i.exec(Q.toString(16));if(!Y)return[0,0,0];let[J]=Y;if(J.length===3)J=[...J].map((X)=>X+X).join("");let Z=Number.parseInt(J,16);return[Z>>16&255,Z>>8&255,Z&255]},enumerable:!1},hexToAnsi256:{value:(Q)=>I0.rgbToAnsi256(...I0.hexToRgb(Q)),enumerable:!1},ansi256ToAnsi:{value(Q){if(Q<8)return 30+Q;if(Q<16)return 90+(Q-8);let Y,J,Z;if(Q>=232)Y=((Q-232)*10+8)/255,J=Y,Z=Y;else{Q-=16;let U=Q%36;Y=Math.floor(Q/36)/5,J=Math.floor(U/6)/5,Z=U%6/5}let X=Math.max(Y,J,Z)*2;if(X===0)return 30;let q=30+(Math.round(Z)<<2|Math.round(J)<<1|Math.round(Y));if(X===2)q+=60;return q},enumerable:!1},rgbToAnsi:{value:(Q,Y,J)=>I0.ansi256ToAnsi(I0.rgbToAnsi256(Q,Y,J)),enumerable:!1},hexToAnsi:{value:(Q)=>I0.ansi256ToAnsi(I0.hexToAnsi256(Q)),enumerable:!1}}),I0}var Q3=$3(),C2=Q3;var F8=new Set(["\x1B","›"]),J3=39,zQ="\x07",D2="[",Y3="]",V2="m",W8=`${Y3}8;;`,S2=($)=>`${F8.values().next().value}${D2}${$}${V2}`,f2=($)=>`${F8.values().next().value}${W8}${$}${zQ}`,Z3=($)=>$.split(" ").map((Q)=>h$(Q)),OQ=($,Q,Y)=>{let J=[...Q],Z=!1,X=!1,q=h$(KQ($.at(-1)));for(let[U,z]of J.entries()){let K=h$(z);if(q+K<=Y)$[$.length-1]+=z;else $.push(z),q=0;if(F8.has(z))Z=!0,X=J.slice(U+1,U+1+W8.length).join("")===W8;if(Z){if(X){if(z===zQ)Z=!1,X=!1}else if(z===V2)Z=!1;continue}if(q+=K,q===Y&&U<J.length-1)$.push(""),q=0}if(!q&&$.at(-1).length>0&&$.length>1)$[$.length-2]+=$.pop()},X3=($)=>{let Q=$.split(" "),Y=Q.length;while(Y>0){if(h$(Q[Y-1])>0)break;Y--}if(Y===Q.length)return $;return Q.slice(0,Y).join(" ")+Q.slice(Y).join("")},q3=($,Q,Y={})=>{if(Y.trim!==!1&&$.trim()==="")return"";let J="",Z,X,q=Z3($),U=[""];for(let[G,_]of $.split(" ").entries()){if(Y.trim!==!1)U[U.length-1]=U.at(-1).trimStart();let O=h$(U.at(-1));if(G!==0){if(O>=Q&&(Y.wordWrap===!1||Y.trim===!1))U.push(""),O=0;if(O>0||Y.trim===!1)U[U.length-1]+=" ",O++}if(Y.hard&&q[G]>Q){let N=Q-O,W=1+Math.floor((q[G]-N-1)/Q);if(Math.floor((q[G]-1)/Q)<W)U.push("");OQ(U,_,Q);continue}if(O+q[G]>Q&&O>0&&q[G]>0){if(Y.wordWrap===!1&&O<Q){OQ(U,_,Q);continue}U.push("")}if(O+q[G]>Q&&Y.wordWrap===!1){OQ(U,_,Q);continue}U[U.length-1]+=_}if(Y.trim!==!1)U=U.map((G)=>X3(G));let z=U.join(`
110
+ `),K=[...z],F=0;for(let[G,_]of K.entries()){if(J+=_,F8.has(_)){let{groups:N}=new RegExp(`(?:\\${D2}(?<code>\\d+)m|\\${W8}(?<uri>.*)${zQ})`).exec(z.slice(F))||{groups:{}};if(N.code!==void 0){let W=Number.parseFloat(N.code);Z=W===J3?void 0:W}else if(N.uri!==void 0)X=N.uri.length===0?void 0:N.uri}let O=C2.codes.get(Number(Z));if(K[G+1]===`
111
111
  `){if(X)J+=f2("");if(Z&&O)J+=S2(O)}else if(_===`
112
112
  `){if(Z&&O)J+=S2(Z);if(X)J+=f2(X)}F+=_.length}return J};function _Q($,Q,Y){return String($).normalize().replaceAll(`\r
113
113
  `,`
114
114
  `).split(`
115
115
  `).map((J)=>q3(J,Q,Y)).join(`
116
116
  `)}var NQ=($)=>{let Q=$.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/~~(.*?)~~/g,"$1").replace(/`(.*?)`/g,"$1").replace(/<u>(.*?)<\/u>/g,"$1").replace(/\[(.*?)\]\(.*?\)/g,"$1");return j2(Q)};var E2=($)=>{return/[*_~`<[\]https?:]/.test($)},HQ=($)=>{let Y=$.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/~~(.*?)~~/g,"$1").replace(/`(.*?)`/g,"$1").replace(/<u>(.*?)<\/u>/g,"$1").replace(/\[(.*?)\]\(.*?\)/g,"$1").split(/\s+/).filter((J)=>J.length>0);if(Y.length===0)return 0;return Math.max(...Y.map((J)=>j2(J)))},L8=($,Q,Y=!1)=>{if(Q<=0)return[$];let J=$.trimEnd(),X=_Q(J,Q,{hard:Y,trim:!1,wordWrap:!0}).split(`
117
- `).filter((q)=>q.length>0);return X.length>0?X:[""]},h2=($,Q,Y,J)=>{let Z=Math.max(0,Y-Q);if(J==="center"){let X=Math.floor(Z/2);return" ".repeat(X)+$+" ".repeat(Z-X)}if(J==="right")return" ".repeat(Z)+$;return $+" ".repeat(Z)};import{jsxDEV as n0,Fragment as K3}from"react/jsx-dev-runtime";var WQ=2,FQ=1,LQ=2;function BQ($,Q){return`inline-${$}-${Q}`}var G3=({text:$})=>{let Q=W0();if(!E2($))return n0(J1,{children:$},void 0,!1,void 0,this);let Y=[],J=0,Z=0,X=0,q=/(\*\*.*?\*\*|\*(?!\s).*?(?<!\s)\*|_(?!\s).*?(?<!\s)_|~~.*?~~|`+[^`]+`+|\[.*?\]\(.*?\)|https?:\/\/\S+)/g,U;while((U=q.exec($))!==null){if(U.index>J){let G=$.slice(J,U.index);Y.push(n0(J1,{children:G},BQ("text",Z++),!1,void 0,this))}let z=U[0],K=null,F=BQ("match",X++);try{if(z.startsWith("**")&&z.endsWith("**")&&z.length>WQ*2)K=n0(J1,{bold:!0,children:z.slice(WQ,-WQ)},F,!1,void 0,this);else if(z.length>FQ*2&&(z.startsWith("*")&&z.endsWith("*")||z.startsWith("_")&&z.endsWith("_"))){let G=$.substring(U.index-1,U.index),_=$.substring(q.lastIndex,q.lastIndex+1);if(!(/\w/.test(G)||/\w/.test(_)||/[./\\]/.test(G+_)))K=n0(J1,{italic:!0,children:z.slice(FQ,-FQ)},F,!1,void 0,this)}else if(z.startsWith("~~")&&z.endsWith("~~")&&z.length>LQ*2)K=n0(J1,{strikethrough:!0,children:z.slice(LQ,-LQ)},F,!1,void 0,this);else if(z.startsWith("`")&&z.endsWith("`")){let G=z.match(/^(`+)([^`]+)\1$/);if(G&&G[2])K=n0(J1,{color:Q.colors.syntax.keyword,backgroundColor:Q.colors.background.secondary,bold:!0,children:` ${G[2]} `},F,!1,void 0,this)}else if(z.startsWith("[")&&z.includes("](")&&z.endsWith(")")){let G=z.match(/\[(.*?)\]\((.*?)\)/);if(G){let _=G[1],O=G[2];K=n0(J1,{children:[_,n0(J1,{color:Q.colors.info,children:[" (",O,")"]},void 0,!0,void 0,this)]},F,!0,void 0,this)}}else if(z.match(/^https?:\/\//))K=n0(J1,{color:Q.colors.info,children:z},F,!1,void 0,this)}catch(G){console.error("InlineRenderer 解析错误:",z,G),K=null}Y.push(K??n0(J1,{children:z},F,!1,void 0,this)),J=q.lastIndex}if(J<$.length){let z=$.slice(J);Y.push(n0(J1,{children:z},BQ("text",Z++),!1,void 0,this))}return n0(K3,{children:Y.filter((z)=>z!==null)},void 0,!1,void 0,this)},Y1=U3.memo(G3);import{jsxDEV as L$}from"react/jsx-dev-runtime";var z3="▎",p2=O3.memo(({lines:$,level:Q})=>{let Y=W0(),J=z3.repeat(Q);return L$(wQ,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.trim()==="")return L$(wQ,{height:1},X,!1,void 0,this);return L$(wQ,{flexDirection:"row",children:[L$(m2,{dimColor:!0,color:Y.colors.text.muted,children:[J," "]},void 0,!0,void 0,this),L$(m2,{italic:!0,wrap:"wrap",children:L$(Y1,{text:Z},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},X,!0,void 0,this)})},void 0,!1,void 0,this)});import{Box as w8,Text as H1}from"ink";import{isPlainObject as RQ}from"lodash-es";import{common as F3,createLowlight as L3}from"lowlight";import d2 from"react";import{Box as B8,Text as m$}from"ink";import N1,{Fragment as x2}from"react";import _3 from"string-width";var g2=new Map,c2=1000;function AQ($){let Q=!0;for(let J=0;J<$.length;J++)if($.charCodeAt(J)>127){Q=!1;break}if(Q)return $.split("");if($.length<=c2){let J=g2.get($);if(J)return J}let Y=Array.from($);if($.length<=c2)g2.set($,Y);return Y}var bQ=new Map;function _1($){if(/^[\x20-\x7E]*$/.test($))return $.length;if(bQ.has($))return bQ.get($);let Q=_3($);return bQ.set($,Q),Q}import{jsxDEV as B$}from"react/jsx-dev-runtime";var yQ=2,u2=N1.memo(({children:$,maxWidth:Q,maxHeight:Y,overflowDirection:J="top",additionalHiddenLinesCount:Z=0})=>{let X=W0(),q=[],U=Math.max(Math.round(Y??Number.MAX_SAFE_INTEGER),yQ);function z(H){if(!N1.isValidElement(H))return;if(H.type===x2){N1.Children.forEach(H.props.children,z);return}if(H.type===B8){H3(H,Q,q);return}}N1.Children.forEach($,z);let F=q.length>U||Z>0?U-1:U,G=F!==void 0?Math.max(0,q.length-F):0,_=G+Z,N=(G>0?J==="top"?q.slice(G):q.slice(0,F):q).map((H,B)=>B$(B8,{children:H.length>0?H.map((L,w)=>B$(m$,{...L.props,children:L.text},w,!1,void 0,this)):B$(m$,{children:" "},void 0,!1,void 0,this)},B,!1,void 0,this));return B$(B8,{flexDirection:"column",width:Q,flexShrink:0,children:[_>0&&J==="top"&&B$(m$,{color:X.colors.text.muted,dimColor:!0,children:["... ",_," line",_===1?"":"s"," hidden ..."]},void 0,!0,void 0,this),N,_>0&&J==="bottom"&&B$(m$,{color:X.colors.text.muted,dimColor:!0,children:["... ",_," line",_===1?"":"s"," hidden ..."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});function N3($){if(!N1.isValidElement($)||$.type!==B8)return{noWrapSegments:[],segments:[]};let Q={noWrapSegments:[],segments:[]},Y=!1;function J(Z,X){if(Z===null||Z===void 0)return;if(typeof Z==="string"||typeof Z==="number"){let K=String(Z);if(!K)return;let F={text:K,props:X??{}};if(X===void 0||X.wrap==="wrap")Y=!0,Q.segments.push(F);else if(!Y)Q.noWrapSegments.push(F);else Q.segments.push(F);return}if(!N1.isValidElement(Z))return;if(Z.type===x2){N1.Children.forEach(Z.props.children,(K)=>J(K,X));return}if(Z.type!==m$)return;let{children:q,...U}=Z.props,z=X===void 0?U:{...X,...U};N1.Children.forEach(q,(K)=>J(K,z))}return N1.Children.forEach($.props.children,(Z)=>J(Z,void 0)),Q}function H3($,Q,Y){let J=N3($);if(J.segments.length===0&&J.noWrapSegments.length===0){Y.push([]);return}let Z=0;for(let G of J.noWrapSegments)Z+=_1(G.text);if(J.segments.length===0){let G=[],_=[];for(let O of J.noWrapSegments){let N=O.text.split(`
118
- `);for(let H=0;H<N.length;H++){if(H>0)G.push(_),_=[];if(N[H])_.push({text:N[H],props:O.props})}}if(_.length>0)G.push(_);for(let O of G)Y.push(O);return}let X=Q-Z;if(X<1){W3(J.noWrapSegments,Q,Y);return}let q=[],U=[],z=0;function K(){if(q.length===0)q.push([...J.noWrapSegments,...U]);else if(Z>0)q.push([{text:" ".repeat(Z),props:{}},...U]);else q.push(U);U=[],z=0}function F(G,_){if(U.length>0&&U[U.length-1].props===_)U[U.length-1].text+=G;else U.push({text:G,props:_})}for(let G of J.segments){let _=G.text.split(`
119
- `);for(let O=0;O<_.length;O++){if(O>0)K();let H=_[O].split(/(\s+)/);for(let B of H){if(!B)continue;let L=_1(B);if(z+L>X&&z>0){if(K(),/^\s+$/.test(B))continue}if(L>X){let I=AQ(B);while(I.length>0){let k=0,v=0;for(let A of I){let b=_1(A);if(z+v+b>X)break;v+=b,k++}if(k>0){let A=I.slice(0,k).join("");F(A,G.props),z+=_1(A),I=I.slice(k)}if(I.length>0)K()}}else F(B,G.props),z+=L}}if(G.text.endsWith(`
117
+ `).filter((q)=>q.length>0);return X.length>0?X:[""]},h2=($,Q,Y,J)=>{let Z=Math.max(0,Y-Q);if(J==="center"){let X=Math.floor(Z/2);return" ".repeat(X)+$+" ".repeat(Z-X)}if(J==="right")return" ".repeat(Z)+$;return $+" ".repeat(Z)};import{jsxDEV as n0,Fragment as K3}from"react/jsx-dev-runtime";var WQ=2,FQ=1,LQ=2;function BQ($,Q){return`inline-${$}-${Q}`}var G3=({text:$})=>{let Q=W0();if(!E2($))return n0(J1,{children:$},void 0,!1,void 0,this);let Y=[],J=0,Z=0,X=0,q=/(\*\*.*?\*\*|\*(?!\s).*?(?<!\s)\*|_(?!\s).*?(?<!\s)_|~~.*?~~|`+[^`]+`+|\[.*?\]\(.*?\)|https?:\/\/\S+)/g,U;while((U=q.exec($))!==null){if(U.index>J){let G=$.slice(J,U.index);Y.push(n0(J1,{children:G},BQ("text",Z++),!1,void 0,this))}let z=U[0],K=null,F=BQ("match",X++);try{if(z.startsWith("**")&&z.endsWith("**")&&z.length>WQ*2)K=n0(J1,{bold:!0,children:z.slice(WQ,-WQ)},F,!1,void 0,this);else if(z.length>FQ*2&&(z.startsWith("*")&&z.endsWith("*")||z.startsWith("_")&&z.endsWith("_"))){let G=$.substring(U.index-1,U.index),_=$.substring(q.lastIndex,q.lastIndex+1);if(!(/\w/.test(G)||/\w/.test(_)||/[./\\]/.test(G+_)))K=n0(J1,{italic:!0,children:z.slice(FQ,-FQ)},F,!1,void 0,this)}else if(z.startsWith("~~")&&z.endsWith("~~")&&z.length>LQ*2)K=n0(J1,{strikethrough:!0,children:z.slice(LQ,-LQ)},F,!1,void 0,this);else if(z.startsWith("`")&&z.endsWith("`")){let G=z.match(/^(`+)([^`]+)\1$/);if(G&&G[2])K=n0(J1,{color:Q.colors.syntax.keyword,backgroundColor:Q.colors.background.secondary,bold:!0,children:` ${G[2]} `},F,!1,void 0,this)}else if(z.startsWith("[")&&z.includes("](")&&z.endsWith(")")){let G=z.match(/\[(.*?)\]\((.*?)\)/);if(G){let _=G[1],O=G[2];K=n0(J1,{children:[_,n0(J1,{color:Q.colors.info,children:[" (",O,")"]},void 0,!0,void 0,this)]},F,!0,void 0,this)}}else if(z.match(/^https?:\/\//))K=n0(J1,{color:Q.colors.info,children:z},F,!1,void 0,this)}catch(G){console.error("InlineRenderer 解析错误:",z,G),K=null}Y.push(K??n0(J1,{children:z},F,!1,void 0,this)),J=q.lastIndex}if(J<$.length){let z=$.slice(J);Y.push(n0(J1,{children:z},BQ("text",Z++),!1,void 0,this))}return n0(K3,{children:Y.filter((z)=>z!==null)},void 0,!1,void 0,this)},Y1=U3.memo(G3);import{jsxDEV as L$}from"react/jsx-dev-runtime";var z3="▎",p2=O3.memo(({lines:$,level:Q})=>{let Y=W0(),J=z3.repeat(Q);return L$(wQ,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.trim()==="")return L$(wQ,{height:1},X,!1,void 0,this);return L$(wQ,{flexDirection:"row",children:[L$(m2,{dimColor:!0,color:Y.colors.text.muted,children:[J," "]},void 0,!0,void 0,this),L$(m2,{italic:!0,wrap:"wrap",children:L$(Y1,{text:Z},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},X,!0,void 0,this)})},void 0,!1,void 0,this)});import{Box as w8,Text as H1}from"ink";import{isPlainObject as RQ}from"lodash-es";import{common as F3,createLowlight as L3}from"lowlight";import d2 from"react";import{Box as B8,Text as m$}from"ink";import N1,{Fragment as x2}from"react";import _3 from"string-width";var g2=new Map,c2=1000;function AQ($){let Q=!0;for(let J=0;J<$.length;J++)if($.charCodeAt(J)>127){Q=!1;break}if(Q)return $.split("");if($.length<=c2){let J=g2.get($);if(J)return J}let Y=Array.from($);if($.length<=c2)g2.set($,Y);return Y}var bQ=new Map;function _1($){if(/^[\x20-\x7E]*$/.test($))return $.length;if(bQ.has($))return bQ.get($);let Q=_3($);return bQ.set($,Q),Q}import{jsxDEV as B$}from"react/jsx-dev-runtime";var yQ=2,u2=N1.memo(({children:$,maxWidth:Q,maxHeight:Y,overflowDirection:J="top",additionalHiddenLinesCount:Z=0})=>{let X=W0(),q=[],U=Math.max(Math.round(Y??Number.MAX_SAFE_INTEGER),yQ);function z(W){if(!N1.isValidElement(W))return;if(W.type===x2){N1.Children.forEach(W.props.children,z);return}if(W.type===B8){H3(W,Q,q);return}}N1.Children.forEach($,z);let F=q.length>U||Z>0?U-1:U,G=F!==void 0?Math.max(0,q.length-F):0,_=G+Z,N=(G>0?J==="top"?q.slice(G):q.slice(0,F):q).map((W,B)=>B$(B8,{children:W.length>0?W.map((L,w)=>B$(m$,{...L.props,children:L.text},w,!1,void 0,this)):B$(m$,{children:" "},void 0,!1,void 0,this)},B,!1,void 0,this));return B$(B8,{flexDirection:"column",width:Q,flexShrink:0,children:[_>0&&J==="top"&&B$(m$,{color:X.colors.text.muted,dimColor:!0,children:["... ",_," line",_===1?"":"s"," hidden ..."]},void 0,!0,void 0,this),N,_>0&&J==="bottom"&&B$(m$,{color:X.colors.text.muted,dimColor:!0,children:["... ",_," line",_===1?"":"s"," hidden ..."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});function N3($){if(!N1.isValidElement($)||$.type!==B8)return{noWrapSegments:[],segments:[]};let Q={noWrapSegments:[],segments:[]},Y=!1;function J(Z,X){if(Z===null||Z===void 0)return;if(typeof Z==="string"||typeof Z==="number"){let K=String(Z);if(!K)return;let F={text:K,props:X??{}};if(X===void 0||X.wrap==="wrap")Y=!0,Q.segments.push(F);else if(!Y)Q.noWrapSegments.push(F);else Q.segments.push(F);return}if(!N1.isValidElement(Z))return;if(Z.type===x2){N1.Children.forEach(Z.props.children,(K)=>J(K,X));return}if(Z.type!==m$)return;let{children:q,...U}=Z.props,z=X===void 0?U:{...X,...U};N1.Children.forEach(q,(K)=>J(K,z))}return N1.Children.forEach($.props.children,(Z)=>J(Z,void 0)),Q}function H3($,Q,Y){let J=N3($);if(J.segments.length===0&&J.noWrapSegments.length===0){Y.push([]);return}let Z=0;for(let G of J.noWrapSegments)Z+=_1(G.text);if(J.segments.length===0){let G=[],_=[];for(let O of J.noWrapSegments){let N=O.text.split(`
118
+ `);for(let W=0;W<N.length;W++){if(W>0)G.push(_),_=[];if(N[W])_.push({text:N[W],props:O.props})}}if(_.length>0)G.push(_);for(let O of G)Y.push(O);return}let X=Q-Z;if(X<1){W3(J.noWrapSegments,Q,Y);return}let q=[],U=[],z=0;function K(){if(q.length===0)q.push([...J.noWrapSegments,...U]);else if(Z>0)q.push([{text:" ".repeat(Z),props:{}},...U]);else q.push(U);U=[],z=0}function F(G,_){if(U.length>0&&U[U.length-1].props===_)U[U.length-1].text+=G;else U.push({text:G,props:_})}for(let G of J.segments){let _=G.text.split(`
119
+ `);for(let O=0;O<_.length;O++){if(O>0)K();let W=_[O].split(/(\s+)/);for(let B of W){if(!B)continue;let L=_1(B);if(z+L>X&&z>0){if(K(),/^\s+$/.test(B))continue}if(L>X){let I=AQ(B);while(I.length>0){let k=0,v=0;for(let A of I){let b=_1(A);if(z+v+b>X)break;v+=b,k++}if(k>0){let A=I.slice(0,k).join("");F(A,G.props),z+=_1(A),I=I.slice(k)}if(I.length>0)K()}}else F(B,G.props),z+=L}}if(G.text.endsWith(`
120
120
  `))K()}if(U.length>0)K();for(let G of q)Y.push(G)}function W3($,Q,Y){let J=[],Z=[],X=0;for(let q of $){let U=q.text.split(`
121
- `);for(let z=0;z<U.length;z++){if(z>0)J.push(Z),Z=[],X=0;let K=U[z];if(!K)continue;let F=_1(K),G=Math.max(0,Q-_1("…"));if(F<=G&&X===0)Z.push({text:K,props:q.props}),X+=F;else{let _=AQ(K),O=X,N=0;for(let B of _){let L=_1(B);if(O+L>G)break;O+=L,N++}let H=_.slice(0,N).join("");if(H)Z.push({text:H,props:q.props});Z.push({text:"…",props:{}}),X=O+_1("…")}}}if(Z.length>0)J.push(Z);if(J.length===0)J.push([{text:"…",props:{}}]);for(let q of J)Y.push(q)}import{jsxDEV as x0}from"react/jsx-dev-runtime";var vQ=L3(F3),B3=200,i1=new Map;function w3($,Q){let Y=`${Q??"__auto__"}:${$}`,J=i1.get(Y);if(J!==void 0)i1.delete(Y),i1.set(Y,J);return J}function b3($,Q,Y){let J=`${Q??"__auto__"}:${$}`;if(i1.size>=B3){let Z=i1.keys().next().value;if(Z!==void 0)i1.delete(Z)}i1.set(J,Y)}function A3($){return RQ($)&&$.type==="text"&&typeof $.value==="string"}function y3($){return RQ($)&&$.type==="element"}function v3($){return RQ($)&&$.type==="root"&&Array.isArray($.children)}function b8($,Q,Y=0){if(A3($))return x0(H1,{wrap:"wrap",children:$.value},Y,!1,void 0,this);if(y3($)){let J=$.properties?.className?.[0]||"",Z=Q.default;if(J.includes("comment"))Z=Q.comment;else if(J.includes("string"))Z=Q.string;else if(J.includes("number"))Z=Q.number;else if(J.includes("keyword"))Z=Q.keyword;else if(J.includes("function"))Z=Q.function;else if(J.includes("variable"))Z=Q.variable;else if(J.includes("operator"))Z=Q.operator;else if(J.includes("type"))Z=Q.type;else if(J.includes("tag"))Z=Q.tag;else if(J.includes("attr"))Z=Q.attr;let X=$.children?.map((q,U)=>b8(q,Q,U));return x0(H1,{color:Z,wrap:"wrap",children:X},Y,!1,void 0,this)}if(v3($))return x0(d2.Fragment,{children:$.children.map((J,Z)=>b8(J,Q,Z))},Y,!1,void 0,this);return x0(H1,{},Y,!1,void 0,this)}function R3($,Q,Y){let J=Y||E0.getTheme().colors.syntax;try{let Z=w3($,Q);if(Z)return b8(Z,J);let X;if(!Q||!vQ.registered(Q))X=vQ.highlightAuto($);else X=vQ.highlight(Q,$);let q=X;if(!q.children||q.children.length===0)return x0(H1,{color:J.default,wrap:"wrap",children:$},void 0,!1,void 0,this);return b3($,Q,X),b8(X,J)}catch(Z){return x0(H1,{color:J.default,wrap:"wrap",children:$},void 0,!1,void 0,this)}}var A8=d2.memo(({content:$,language:Q,showLineNumbers:Y=!0,terminalWidth:J,availableHeight:Z})=>{let X=W0(),q=$.split(`
121
+ `);for(let z=0;z<U.length;z++){if(z>0)J.push(Z),Z=[],X=0;let K=U[z];if(!K)continue;let F=_1(K),G=Math.max(0,Q-_1("…"));if(F<=G&&X===0)Z.push({text:K,props:q.props}),X+=F;else{let _=AQ(K),O=X,N=0;for(let B of _){let L=_1(B);if(O+L>G)break;O+=L,N++}let W=_.slice(0,N).join("");if(W)Z.push({text:W,props:q.props});Z.push({text:"…",props:{}}),X=O+_1("…")}}}if(Z.length>0)J.push(Z);if(J.length===0)J.push([{text:"…",props:{}}]);for(let q of J)Y.push(q)}import{jsxDEV as x0}from"react/jsx-dev-runtime";var vQ=L3(F3),B3=200,i1=new Map;function w3($,Q){let Y=`${Q??"__auto__"}:${$}`,J=i1.get(Y);if(J!==void 0)i1.delete(Y),i1.set(Y,J);return J}function b3($,Q,Y){let J=`${Q??"__auto__"}:${$}`;if(i1.size>=B3){let Z=i1.keys().next().value;if(Z!==void 0)i1.delete(Z)}i1.set(J,Y)}function A3($){return RQ($)&&$.type==="text"&&typeof $.value==="string"}function y3($){return RQ($)&&$.type==="element"}function v3($){return RQ($)&&$.type==="root"&&Array.isArray($.children)}function b8($,Q,Y=0){if(A3($))return x0(H1,{wrap:"wrap",children:$.value},Y,!1,void 0,this);if(y3($)){let J=$.properties?.className?.[0]||"",Z=Q.default;if(J.includes("comment"))Z=Q.comment;else if(J.includes("string"))Z=Q.string;else if(J.includes("number"))Z=Q.number;else if(J.includes("keyword"))Z=Q.keyword;else if(J.includes("function"))Z=Q.function;else if(J.includes("variable"))Z=Q.variable;else if(J.includes("operator"))Z=Q.operator;else if(J.includes("type"))Z=Q.type;else if(J.includes("tag"))Z=Q.tag;else if(J.includes("attr"))Z=Q.attr;let X=$.children?.map((q,U)=>b8(q,Q,U));return x0(H1,{color:Z,wrap:"wrap",children:X},Y,!1,void 0,this)}if(v3($))return x0(d2.Fragment,{children:$.children.map((J,Z)=>b8(J,Q,Z))},Y,!1,void 0,this);return x0(H1,{},Y,!1,void 0,this)}function R3($,Q,Y){let J=Y||E0.getTheme().colors.syntax;try{let Z=w3($,Q);if(Z)return b8(Z,J);let X;if(!Q||!vQ.registered(Q))X=vQ.highlightAuto($);else X=vQ.highlight(Q,$);let q=X;if(!q.children||q.children.length===0)return x0(H1,{color:J.default,wrap:"wrap",children:$},void 0,!1,void 0,this);return b3($,Q,X),b8(X,J)}catch(Z){return x0(H1,{color:J.default,wrap:"wrap",children:$},void 0,!1,void 0,this)}}var A8=d2.memo(({content:$,language:Q,showLineNumbers:Y=!0,terminalWidth:J,availableHeight:Z})=>{let X=W0(),q=$.split(`
122
122
  `),U=0;if(Z&&q.length>Z){let G=Math.max(Z,yQ);if(q.length>G)U=q.length-G,q=q.slice(U)}let z=q.length+U,K=String(z).length+1,F=Math.max(20,J-4);return x0(w8,{borderStyle:"round",borderColor:X.colors.border.light,paddingX:1,paddingY:0,marginY:1,flexDirection:"column",children:[Q&&x0(w8,{marginBottom:0,children:x0(H1,{color:X.colors.text.secondary,children:Q},void 0,!1,void 0,this)},void 0,!1,void 0,this),U>0&&x0(w8,{marginBottom:0,children:x0(H1,{color:X.colors.text.muted,dimColor:!0,children:["... ",U," lines hidden ..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this),x0(u2,{maxWidth:F,maxHeight:Z,children:q.map((G,_)=>{let O=_+U+1;return x0(w8,{flexDirection:"row",children:[Y&&x0(H1,{color:X.colors.text.muted,dimColor:!0,wrap:"truncate",children:[String(O).padStart(K-1," ")," "]},void 0,!0,void 0,this),G.trim()===""?x0(H1,{wrap:"wrap",children:" "},void 0,!1,void 0,this):R3(G,Q,X.colors.syntax)]},_,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as l2,Text as a0,useInput as P3}from"ink";import I3,{useState as M3}from"react";import{jsxDEV as u0}from"react/jsx-dev-runtime";var r2=400;function T3($){let Q=$.split(`
123
- `),Y=[],J=0,Z=0;for(let X of Q){if(X.startsWith("---")||X.startsWith("+++"))continue;if(X.startsWith("@@")){let q=X.match(/@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@/);if(q)J=parseInt(q[1],10),Z=parseInt(q[3],10);Y.push({type:"header",content:X});continue}if(X.startsWith("-")){Y.push({type:"remove",content:X.substring(1),lineNumber:J}),J++;continue}if(X.startsWith("+")){Y.push({type:"add",content:X.substring(1),lineNumber:Z}),Z++;continue}if(X.startsWith(" ")||X===""){Y.push({type:"context",content:X.substring(1),lineNumber:Z}),J++,Z++;continue}}return Y}var PQ=I3.memo(({patch:$,startLine:Q,matchLine:Y,terminalWidth:J,maxLines:Z=20,isFocused:X=!1})=>{let q=W0(),U=T3($),[z,K]=M3(!1);P3((w)=>{if(w.toLowerCase()==="e")K((I)=>!I)},{isActive:X&&U.length>Z});let G=Math.max(...U.map((w)=>w.lineNumber||0)).toString().length+1,_=U.filter((w)=>w.type==="add").length,O=U.filter((w)=>w.type==="remove").length,N=U.length,H=N>Z,B;if(!H)B=U;else if(z)B=U.slice(0,r2);else B=U.slice(0,Z);let L=N-B.length;return u0(l2,{flexDirection:"column",marginTop:1,marginBottom:1,children:[u0(a0,{color:q.colors.muted,children:"─".repeat(Math.max(0,Math.min(60,J)))},void 0,!1,void 0,this),H&&u0(a0,{color:q.colors.info,children:[z?`已展开 ${B.length}/${N} 行`:`显示前 ${Z} 行,共 ${N} 行`," · ",u0(a0,{color:q.colors.success,children:["+",_]},void 0,!0,void 0,this)," ",u0(a0,{color:q.colors.error,children:["-",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H&&u0(a0,{color:q.colors.muted,children:"─".repeat(Math.max(0,Math.min(60,J)))},void 0,!1,void 0,this),B.map((w,I)=>{if(w.type==="header")return u0(a0,{color:q.colors.muted,dimColor:!0,children:w.content},I,!1,void 0,this);let k=w.lineNumber?w.lineNumber.toString().padStart(G," "):" ".repeat(G),v=" ",A,b;if(w.type==="add")v="+",b=q.colors.success,A=void 0;else if(w.type==="remove")v="-",b=q.colors.error,A=void 0;else b=q.colors.text.primary;let W=Math.max(0,J-G-2),R=w.content;if(R.length>W)R=R.substring(0,W-3)+"...";return u0(a0,{color:b,backgroundColor:A,children:[u0(a0,{dimColor:!0,children:k},void 0,!1,void 0,this),u0(a0,{children:v},void 0,!1,void 0,this),u0(a0,{children:[" ",R]},void 0,!0,void 0,this)]},I,!0,void 0,this)}),H&&u0(l2,{marginTop:1,children:z?u0(a0,{color:q.colors.info,dimColor:!0,children:[L>0?`已达显示上限 ${r2} 行,仍有 ${L} 行未显示`:"已显示全部内容",X?" · 按 E 折叠":""]},void 0,!0,void 0,this):u0(a0,{color:q.colors.info,dimColor:!0,children:["已隐藏剩余 ",L," 行",X?" · 按 E 展开全部":""]},void 0,!0,void 0,this)},void 0,!1,void 0,this),u0(a0,{color:q.colors.muted,children:"─".repeat(Math.max(0,Math.min(60,J)))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as IQ,Text as a2}from"ink";import k3 from"react";import{jsxDEV as w$}from"react/jsx-dev-runtime";var C3=({itemText:$,type:Q,marker:Y,leadingWhitespace:J=""})=>{let Z=Q==="ol"?`${Y}. `:`${Y} `,X=Z.length,q=J.length;return w$(IQ,{paddingLeft:q+1,flexDirection:"row",children:[w$(IQ,{width:X,children:w$(a2,{children:Z},void 0,!1,void 0,this)},void 0,!1,void 0,this),w$(IQ,{flexGrow:1,children:w$(a2,{wrap:"wrap",children:w$(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},MQ=k3.memo(C3);import{Text as TQ}from"ink";import S3,{useMemo as f3}from"react";import o2 from"string-width";import{jsxDEV as kQ}from"react/jsx-dev-runtime";var i2=4,b$=3,D3=4,n2=S3.memo(({headers:$,rows:Q,terminalWidth:Y})=>{let J=W0(),Z=f3(()=>{if($.length===0||Q.length===0)return null;let G=$.length,_=$.map((b,W)=>{let R=Math.max(HQ(b),b$);for(let j of Q)R=Math.max(R,HQ(j[W]||""));return R}),O=$.map((b,W)=>{let R=Math.max(NQ(b),b$);for(let j of Q)R=Math.max(R,NQ(j[W]||""));return R}),N=1+G*3,H=Math.max(Y-N-i2,G*b$),B=_.reduce((b,W)=>b+W,0),L=O.reduce((b,W)=>b+W,0),w=!1,I;if(L<=H)I=O;else if(B<=H){let b=H-B,W=O.map((j,E)=>j-_[E]),R=W.reduce((j,E)=>j+E,0);I=_.map((j,E)=>{if(R===0)return j;let p=Math.floor(W[E]/R*b);return j+p})}else{w=!0;let b=H/B;I=_.map((W)=>Math.max(Math.floor(W*b),b$))}function k(){let b=1;for(let W=0;W<$.length;W++){let R=L8($[W],I[W],w);b=Math.max(b,R.length)}for(let W of Q)for(let R=0;R<W.length;R++){let j=L8(W[R]||"",I[R],w);b=Math.max(b,j.length)}return b}if(k()>D3)return{type:"vertical",columnWidths:I,needsHardWrap:w};return{type:"horizontal",columnWidths:I,needsHardWrap:w}},[$,Q,Y]);if(!Z)return null;if(Z.type==="vertical"){let G=Math.min(Y-1,40),_="─".repeat(G);return kQ(TQ,{children:Q.map((O,N)=>{let H=[];if(N>0)H.push(_);return O.forEach((B,L)=>{let w=$[L]||`Column ${L+1}`,I=(B||"").replace(/\n+/g," ").trim();H.push(`\x1B[1m${w}:\x1B[22m ${I}`)}),H.join(`
123
+ `),Y=[],J=0,Z=0;for(let X of Q){if(X.startsWith("---")||X.startsWith("+++"))continue;if(X.startsWith("@@")){let q=X.match(/@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@/);if(q)J=parseInt(q[1],10),Z=parseInt(q[3],10);Y.push({type:"header",content:X});continue}if(X.startsWith("-")){Y.push({type:"remove",content:X.substring(1),lineNumber:J}),J++;continue}if(X.startsWith("+")){Y.push({type:"add",content:X.substring(1),lineNumber:Z}),Z++;continue}if(X.startsWith(" ")||X===""){Y.push({type:"context",content:X.substring(1),lineNumber:Z}),J++,Z++;continue}}return Y}var PQ=I3.memo(({patch:$,startLine:Q,matchLine:Y,terminalWidth:J,maxLines:Z=20,isFocused:X=!1})=>{let q=W0(),U=T3($),[z,K]=M3(!1);P3((w)=>{if(w.toLowerCase()==="e")K((I)=>!I)},{isActive:X&&U.length>Z});let G=Math.max(...U.map((w)=>w.lineNumber||0)).toString().length+1,_=U.filter((w)=>w.type==="add").length,O=U.filter((w)=>w.type==="remove").length,N=U.length,W=N>Z,B;if(!W)B=U;else if(z)B=U.slice(0,r2);else B=U.slice(0,Z);let L=N-B.length;return u0(l2,{flexDirection:"column",marginTop:1,marginBottom:1,children:[u0(a0,{color:q.colors.muted,children:"─".repeat(Math.max(0,Math.min(60,J)))},void 0,!1,void 0,this),W&&u0(a0,{color:q.colors.info,children:[z?`已展开 ${B.length}/${N} 行`:`显示前 ${Z} 行,共 ${N} 行`," · ",u0(a0,{color:q.colors.success,children:["+",_]},void 0,!0,void 0,this)," ",u0(a0,{color:q.colors.error,children:["-",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),W&&u0(a0,{color:q.colors.muted,children:"─".repeat(Math.max(0,Math.min(60,J)))},void 0,!1,void 0,this),B.map((w,I)=>{if(w.type==="header")return u0(a0,{color:q.colors.muted,dimColor:!0,children:w.content},I,!1,void 0,this);let k=w.lineNumber?w.lineNumber.toString().padStart(G," "):" ".repeat(G),v=" ",A,b;if(w.type==="add")v="+",b=q.colors.success,A=void 0;else if(w.type==="remove")v="-",b=q.colors.error,A=void 0;else b=q.colors.text.primary;let H=Math.max(0,J-G-2),R=w.content;if(R.length>H)R=R.substring(0,H-3)+"...";return u0(a0,{color:b,backgroundColor:A,children:[u0(a0,{dimColor:!0,children:k},void 0,!1,void 0,this),u0(a0,{children:v},void 0,!1,void 0,this),u0(a0,{children:[" ",R]},void 0,!0,void 0,this)]},I,!0,void 0,this)}),W&&u0(l2,{marginTop:1,children:z?u0(a0,{color:q.colors.info,dimColor:!0,children:[L>0?`已达显示上限 ${r2} 行,仍有 ${L} 行未显示`:"已显示全部内容",X?" · 按 E 折叠":""]},void 0,!0,void 0,this):u0(a0,{color:q.colors.info,dimColor:!0,children:["已隐藏剩余 ",L," 行",X?" · 按 E 展开全部":""]},void 0,!0,void 0,this)},void 0,!1,void 0,this),u0(a0,{color:q.colors.muted,children:"─".repeat(Math.max(0,Math.min(60,J)))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as IQ,Text as a2}from"ink";import k3 from"react";import{jsxDEV as w$}from"react/jsx-dev-runtime";var C3=({itemText:$,type:Q,marker:Y,leadingWhitespace:J=""})=>{let Z=Q==="ol"?`${Y}. `:`${Y} `,X=Z.length,q=J.length;return w$(IQ,{paddingLeft:q+1,flexDirection:"row",children:[w$(IQ,{width:X,children:w$(a2,{children:Z},void 0,!1,void 0,this)},void 0,!1,void 0,this),w$(IQ,{flexGrow:1,children:w$(a2,{wrap:"wrap",children:w$(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},MQ=k3.memo(C3);import{Text as TQ}from"ink";import S3,{useMemo as f3}from"react";import o2 from"string-width";import{jsxDEV as kQ}from"react/jsx-dev-runtime";var i2=4,b$=3,D3=4,n2=S3.memo(({headers:$,rows:Q,terminalWidth:Y})=>{let J=W0(),Z=f3(()=>{if($.length===0||Q.length===0)return null;let G=$.length,_=$.map((b,H)=>{let R=Math.max(HQ(b),b$);for(let j of Q)R=Math.max(R,HQ(j[H]||""));return R}),O=$.map((b,H)=>{let R=Math.max(NQ(b),b$);for(let j of Q)R=Math.max(R,NQ(j[H]||""));return R}),N=1+G*3,W=Math.max(Y-N-i2,G*b$),B=_.reduce((b,H)=>b+H,0),L=O.reduce((b,H)=>b+H,0),w=!1,I;if(L<=W)I=O;else if(B<=W){let b=W-B,H=O.map((j,E)=>j-_[E]),R=H.reduce((j,E)=>j+E,0);I=_.map((j,E)=>{if(R===0)return j;let p=Math.floor(H[E]/R*b);return j+p})}else{w=!0;let b=W/B;I=_.map((H)=>Math.max(Math.floor(H*b),b$))}function k(){let b=1;for(let H=0;H<$.length;H++){let R=L8($[H],I[H],w);b=Math.max(b,R.length)}for(let H of Q)for(let R=0;R<H.length;R++){let j=L8(H[R]||"",I[R],w);b=Math.max(b,j.length)}return b}if(k()>D3)return{type:"vertical",columnWidths:I,needsHardWrap:w};return{type:"horizontal",columnWidths:I,needsHardWrap:w}},[$,Q,Y]);if(!Z)return null;if(Z.type==="vertical"){let G=Math.min(Y-1,40),_="─".repeat(G);return kQ(TQ,{children:Q.map((O,N)=>{let W=[];if(N>0)W.push(_);return O.forEach((B,L)=>{let w=$[L]||`Column ${L+1}`,I=(B||"").replace(/\n+/g," ").trim();W.push(`\x1B[1m${w}:\x1B[22m ${I}`)}),W.join(`
124
124
  `)}).join(`
125
- `)},void 0,!1,void 0,this)}let{columnWidths:X,needsHardWrap:q}=Z;function U(G){let O={top:{left:"┌",mid:"┬",right:"┐",h:"─"},middle:{left:"├",mid:"┼",right:"┤",h:"─"},bottom:{left:"└",mid:"┴",right:"┘",h:"─"}}[G],N=O.left;return X.forEach((H,B)=>{N+=O.h.repeat(H+2),N+=B<X.length-1?O.mid:O.right}),N}function z(G,_){let O=G.map((L,w)=>{let I=X[w]||b$;return L8(L||"",I,q)}),N=Math.max(...O.map((L)=>L.length),1),H=O.map((L)=>Math.floor((N-L.length)/2)),B=[];for(let L=0;L<N;L++){let w="│";for(let I=0;I<G.length;I++){let k=O[I],v=H[I],A=L-v,b=A>=0&&A<k.length?k[A]:"",W=X[I]||b$,R=o2(b),j=h2(_?`\x1B[1m${b}\x1B[22m`:b,R,W,_?"center":"left");w+=` ${j} │`}B.push(w)}return B}let K=[];if(K.push(U("top")),K.push(...z($,!0)),K.push(U("middle")),Q.forEach((G,_)=>{if(K.push(...z(G,!1)),_<Q.length-1)K.push(U("middle"))}),K.push(U("bottom")),Math.max(...K.map((G)=>o2(G)))>Y-i2){let G=Math.min(Y-1,40),_="─".repeat(G);return kQ(TQ,{children:Q.map((O,N)=>{let H=[];if(N>0)H.push(_);return O.forEach((B,L)=>{let w=$[L]||`Column ${L+1}`,I=(B||"").replace(/\n+/g," ").trim();H.push(`\x1B[1m${w}:\x1B[22m ${I}`)}),H.join(`
125
+ `)},void 0,!1,void 0,this)}let{columnWidths:X,needsHardWrap:q}=Z;function U(G){let O={top:{left:"┌",mid:"┬",right:"┐",h:"─"},middle:{left:"├",mid:"┼",right:"┤",h:"─"},bottom:{left:"└",mid:"┴",right:"┘",h:"─"}}[G],N=O.left;return X.forEach((W,B)=>{N+=O.h.repeat(W+2),N+=B<X.length-1?O.mid:O.right}),N}function z(G,_){let O=G.map((L,w)=>{let I=X[w]||b$;return L8(L||"",I,q)}),N=Math.max(...O.map((L)=>L.length),1),W=O.map((L)=>Math.floor((N-L.length)/2)),B=[];for(let L=0;L<N;L++){let w="│";for(let I=0;I<G.length;I++){let k=O[I],v=W[I],A=L-v,b=A>=0&&A<k.length?k[A]:"",H=X[I]||b$,R=o2(b),j=h2(_?`\x1B[1m${b}\x1B[22m`:b,R,H,_?"center":"left");w+=` ${j} │`}B.push(w)}return B}let K=[];if(K.push(U("top")),K.push(...z($,!0)),K.push(U("middle")),Q.forEach((G,_)=>{if(K.push(...z(G,!1)),_<Q.length-1)K.push(U("middle"))}),K.push(U("bottom")),Math.max(...K.map((G)=>o2(G)))>Y-i2){let G=Math.min(Y-1,40),_="─".repeat(G);return kQ(TQ,{children:Q.map((O,N)=>{let W=[];if(N>0)W.push(_);return O.forEach((B,L)=>{let w=$[L]||`Column ${L+1}`,I=(B||"").replace(/\n+/g," ").trim();W.push(`\x1B[1m${w}:\x1B[22m ${I}`)}),W.join(`
126
126
  `)}).join(`
127
127
  `)},void 0,!1,void 0,this)}return kQ(TQ,{color:J.colors.text.primary,children:K.join(`
128
128
  `)},void 0,!1,void 0,this)});import{jsxDEV as D}from"react/jsx-dev-runtime";var V3=($,Q,Y)=>{switch($){case"user":return{color:Q.info,prefix:"> "};case"assistant":return{color:Q.success,prefix:"• "};case"system":return{color:Q.warning,prefix:" "};case"tool":{let J=Y&&"phase"in Y?Y.phase:void 0;return{color:Q.text.secondary,prefix:J==="start"?"• ":J==="complete"?" └ ":" "}}default:return{color:Q.text.primary,prefix:" "}}},j3=t1.memo(({content:$,language:Q,terminalWidth:Y,isPending:J=!1,availableHeight:Z})=>{let X=W0();if(J&&Z!==void 0){let q=$.split(`
@@ -130,22 +130,22 @@ ${y}`}]}}let T=d8(u),P=await B(T);if(!P.accepted){let y=P.reason==="queue_full"?
130
130
  `);return D(Z0,{flexDirection:"column",flexShrink:0,children:[D(A8,{content:K,language:Q,showLineNumbers:!0,terminalWidth:Y},void 0,!1,void 0,this),D(H0,{color:X.colors.text.muted,dimColor:!0,children:"... generating more code ..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}}return D(A8,{content:$,language:Q,showLineNumbers:!0,terminalWidth:Y},void 0,!1,void 0,this)}),E3=t1.memo(({content:$,level:Q})=>{let Y=W0();switch(Q){case 1:return D(H0,{bold:!0,color:Y.colors.primary,children:D(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this);case 2:return D(H0,{bold:!0,color:Y.colors.primary,children:D(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this);case 3:return D(H0,{bold:!0,color:Y.colors.text.primary,children:D(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this);case 4:return D(H0,{italic:!0,color:Y.colors.text.muted,children:D(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this);default:return D(H0,{children:D(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)}}),h3=t1.memo(({terminalWidth:$})=>{let Q=W0(),Y=Math.max(0,Math.min($-4,80));return D(H0,{dimColor:!0,color:Q.colors.text.muted,children:"─".repeat(Y)},void 0,!1,void 0,this)}),m3=t1.memo(({content:$})=>{return D(H0,{wrap:"wrap",children:D(Y1,{text:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)}),p3=t1.memo(({content:$})=>{let Q=W0();return D(Z0,{flexDirection:"row",gap:1,children:[D(H0,{color:Q.colors.info,children:" "},void 0,!1,void 0,this),D(H0,{color:Q.colors.text.muted,italic:!0,children:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}),g3=t1.memo(({detail:$,terminalWidth:Q})=>{let Y=W0(),J=50,Z=$.split(`
131
131
  `);while(Z.length>0&&Z[0].trim()==="")Z.shift();while(Z.length>0&&Z[Z.length-1].trim()==="")Z.pop();let X=Z.length>50,q=X?Z.slice(0,50):Z,U=q.join(`
132
132
  `),z=U.includes("<<<DIFF>>>"),K=U.includes("```");if(z){let F=U.match(/<<<DIFF>>>\s*({[\s\S]*?})\s*<<<\/DIFF>>>/);if(F)try{let G=JSON.parse(F[1]);return D(Z0,{flexDirection:"column",children:[D(PQ,{patch:G.patch,startLine:G.startLine,matchLine:G.matchLine,terminalWidth:Q},void 0,!1,void 0,this),X&&D(Z0,{marginTop:1,children:D(H0,{dimColor:!0,color:Y.colors.text.muted,children:["... 省略 ",Z.length-50," 行 ..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}catch{}}if(K){let F=U.match(/```(\w+)?\s*\n([\s\S]*?)\n```/);if(F){let G=F[1]||"text",_=F[2];return D(Z0,{flexDirection:"column",children:[D(A8,{content:_,language:G,showLineNumbers:!1,terminalWidth:Q},void 0,!1,void 0,this),X&&D(Z0,{marginTop:1,children:D(H0,{dimColor:!0,color:Y.colors.text.muted,children:["... 省略 ",Z.length-50," 行 ..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}}return D(Z0,{flexDirection:"column",children:[q.map((F,G)=>D(H0,{color:Y.colors.text.primary,children:F},G,!1,void 0,this)),X&&D(Z0,{marginTop:1,children:D(H0,{dimColor:!0,color:Y.colors.text.muted,children:["... 省略 ",Z.length-50," 行 ..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});function c3($,Q,Y,J=80){if(!Y||Q===void 0||Q<=0)return{content:$,isTruncated:!1,hiddenLines:0};let X=Math.max(1,Q-8),q=Math.max(40,J*0.8),U=X*q;if($.length<=U)return{content:$,isTruncated:!1,hiddenLines:0};let z=Math.floor(U*0.9),K=$.length-z,F=K,G=$.indexOf(`
133
- `,K);if(G!==-1&&G-K<q)F=G+1;let _=$.slice(F),N=($.slice(0,F).match(/\n/g)||[]).length+1;return{content:_,isTruncated:!0,hiddenLines:N}}var V1=t1.memo(({content:$,role:Q,terminalWidth:Y,metadata:J,isPending:Z=!1,availableTerminalHeight:X,hidePrefix:q=!1,noMargin:U=!1,renderPlainTextOnly:z=!1,streamingLines:K,streamingHiddenLines:F,messageId:G,blocksOverride:_,currentLineOverride:O,streamingMode:N="text",renderCodeBlocksAsPlainText:H=!1})=>{let B=W0(),L=_!==void 0,w=n1(()=>V3(Q,B.colors,J),[Q,B.colors,J]),{color:I,prefix:k}=w,v=k.length+1,A=n1(()=>{if(!J||typeof J!=="object")return null;if(!("subtaskRef"in J))return null;let S=J.subtaskRef;if(!S||typeof S!=="object")return null;return S},[J]),b=Q==="tool"&&J?.phase==="start",W=!U&&!b,R=n1(()=>{if(!z)return[];return $.split(/\r?\n/)},[$,z]);if(!L&&Z){let S=K??$.split(/\r?\n/),G0=F??0,f=!1,x=!1,C=!1;if(N!=="text")f=N==="code",x=N==="diff",C=N==="table";return D(Z0,{flexDirection:"column",marginBottom:W?1:0,flexShrink:0,children:[G0>0&&D(Z0,{flexDirection:"row",flexShrink:0,children:[D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(H0,{color:B.colors.text.muted,dimColor:!0,children:["^ ",G0," lines above (streaming...)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),S.map((J0,F0)=>{if(N==="text"){if(J0.match(D1.codeBlock))f=!f;else if(J0.match(D1.diffStart))x=!0;else if(J0.match(D1.diffEnd))x=!1;else if(J0.match(D1.table))C=!0;else if(C&&!J0.match(D1.table))C=!1}let s=N==="text"&&!f&&!x&&!C,_0=s?J0.match(D1.ulItem):null,k0=s?J0.match(D1.olItem):null,i0=_0??k0;return D(Z0,{flexDirection:"row",flexShrink:0,children:[F0===0&&!q?D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this):D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:i0?D(MQ,{type:_0?"ul":"ol",marker:i0[2],itemText:i0[3],leadingWhitespace:i0[1]},void 0,!1,void 0,this):D(H0,{wrap:"wrap",children:J0===""?" ":J0},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},F0,!0,void 0,this)})]},void 0,!0,void 0,this)}if(!L&&z)return D(Z0,{flexDirection:"column",marginBottom:W?1:0,flexShrink:0,children:R.map((S,G0)=>D(Z0,{flexDirection:"row",flexShrink:0,children:[G0===0&&!q?D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this):D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:D(H0,{wrap:"wrap",children:S===""?" ":S},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},G0,!0,void 0,this))},void 0,!1,void 0,this);let j=t2(null);CQ(()=>{j.current=null},[G]);let E=n1(()=>{if(L)return null;if(!G)return null;return s2(G)},[G,L]);CQ(()=>{if(L)return;if(!E||!G)return;j.current={messageId:G,blocks:E}},[E,G,L]),CQ(()=>{if(L)return;if(!E||!G)return;e2(G)},[E,G,L]);let p=n1(()=>L?{content:$,isTruncated:!1,hiddenLines:0}:c3($,X,Z,Y),[$,X,Z,Y,L]),{content:V,isTruncated:u,hiddenLines:T}=p;if(!L&&Q==="tool"&&J&&"detail"in J){let S=J;if(S.detail)return D(Z0,{flexDirection:"column",marginBottom:U?0:1,children:[D(Z0,{flexDirection:"row",children:[D(Z0,{marginRight:1,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this),D(H0,{color:I,children:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D(Z0,{marginLeft:k.length+1,children:D(g3,{detail:S.detail,terminalWidth:Y-(k.length+1)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}let{completedContent:P,currentLine:y}=n1(()=>{if(L)return{completedContent:"",currentLine:O??""};if(!Z)return{completedContent:V,currentLine:""};let S=V.lastIndexOf(`
134
- `);if(S===-1)return{completedContent:"",currentLine:V};return{completedContent:V.slice(0,S+1),currentLine:V.slice(S+1)}},[V,Z,L,O]),Y0=t2({content:"",blocks:[]}),r=n1(()=>{if(L)return _??[];if(E)return E;if(j.current&&j.current.messageId===G)return j.current.blocks;let S=Y0.current;if(!Z||!P.startsWith(S.content)){let C=SQ(P);return Y0.current={content:P,blocks:C},C}if(P===S.content)return S.blocks;let G0=P.slice(S.content.length),f=SQ(G0),x=[...S.blocks,...f];return Y0.current={content:P,blocks:x},x},[P,Z,L,_]);return D(Z0,{flexDirection:"column",marginBottom:W?1:0,flexShrink:0,children:[u&&D(Z0,{flexDirection:"row",flexShrink:0,children:[D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(H0,{color:B.colors.text.muted,dimColor:!0,children:["^ ",T," lines above (streaming...)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),r.map((S,G0)=>{if(S.type==="empty")return D(Z0,{height:1,flexShrink:0},G0,!1,void 0,this);return D(Z0,{flexDirection:"row",flexShrink:0,children:[G0===0&&!q&&D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this),(G0>0||q)&&D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:S.type==="code"?H?D(H0,{wrap:"wrap",children:S.content},void 0,!1,void 0,this):D(j3,{content:S.content,language:S.language,terminalWidth:Y-v,isPending:Z,availableHeight:X},void 0,!1,void 0,this):S.type==="table"&&S.tableData?D(n2,{headers:S.tableData.headers,rows:S.tableData.rows,terminalWidth:Y-v},void 0,!1,void 0,this):S.type==="heading"?D(E3,{content:S.content,level:S.level||1},void 0,!1,void 0,this):S.type==="list"?D(MQ,{type:S.listType||"ul",marker:S.marker||"-",itemText:S.content,leadingWhitespace:" ".repeat(S.indentation||0)},void 0,!1,void 0,this):S.type==="hr"?D(h3,{terminalWidth:Y-v},void 0,!1,void 0,this):S.type==="diff"&&S.diffData?D(PQ,{patch:S.diffData.patch,startLine:S.diffData.startLine,matchLine:S.diffData.matchLine,terminalWidth:Y-v},void 0,!1,void 0,this):S.type==="command-message"?D(p3,{content:S.content},void 0,!1,void 0,this):S.type==="blockquote"&&S.blockquoteLines?D(p2,{lines:S.blockquoteLines,level:S.blockquoteLevel||1},void 0,!1,void 0,this):D(m3,{content:S.content},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},G0,!0,void 0,this)}),y&&D(Z0,{flexDirection:"row",flexShrink:0,children:[r.length===0&&!q?D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this):D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:D(H0,{wrap:"wrap",children:y},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),A&&D(Z0,{flexDirection:"row",flexShrink:0,children:[D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexDirection:"column",flexGrow:1,flexShrink:0,children:[D(H0,{color:B.colors.text.muted,children:["Subtask"," ",typeof A.agentType==="string"?`@${A.agentType}`:"",typeof A.status==="string"?` · ${A.status}`:""]},void 0,!0,void 0,this),typeof A.summary==="string"&&A.summary.trim()!==""&&D(H0,{wrap:"wrap",children:A.summary},void 0,!1,void 0,this),typeof A.childSessionId==="string"&&D(H0,{color:B.colors.text.muted,children:["Session ",A.childSessionId]},void 0,!0,void 0,this),typeof A.resumedFrom==="string"&&D(H0,{color:B.colors.text.muted,children:["Resumed from ",A.resumedFrom,typeof A.resumeDepth==="number"?` · depth ${A.resumeDepth}`:""]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},($,Q)=>{return $.content===Q.content&&$.role===Q.role&&$.terminalWidth===Q.terminalWidth&&$.isPending===Q.isPending&&$.availableTerminalHeight===Q.availableTerminalHeight&&$.hidePrefix===Q.hidePrefix&&$.noMargin===Q.noMargin&&$.renderPlainTextOnly===Q.renderPlainTextOnly&&$.streamingHiddenLines===Q.streamingHiddenLines&&$.streamingLines===Q.streamingLines&&$.messageId===Q.messageId&&$.metadata===Q.metadata&&$.blocksOverride===Q.blocksOverride&&$.currentLineOverride===Q.currentLineOverride&&$.streamingMode===Q.streamingMode&&$.renderCodeBlocksAsPlainText===Q.renderCodeBlocksAsPlainText});import{jsxDEV as B0,Fragment as o3}from"react/jsx-dev-runtime";var l3=fQ.memo(({label:$,isSelected:Q})=>B0(U1,{color:Q?"yellow":void 0,children:$},void 0,!1,void 0,this)),r3=fQ.memo(({details:$,headerColor:Q,isPlanModeExit:Y,isPlanModeEnter:J,terminalWidth:Z})=>B0(o3,{children:[B0(t0,{marginBottom:1,children:B0(U1,{children:$.message},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.planContent&&B0(t0,{flexDirection:"column",marginBottom:1,borderStyle:"single",borderColor:Q,padding:1,children:[B0(U1,{bold:!0,color:Q,children:"实施方案"},void 0,!1,void 0,this),B0(t0,{marginTop:1,children:B0(V1,{content:$.planContent,role:"assistant",terminalWidth:Z-4},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!$.planContent&&$.details&&B0(t0,{flexDirection:"column",marginBottom:1,children:B0(V1,{content:$.details,role:"assistant",terminalWidth:Z},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.risks&&$.risks.length>0&&B0(t0,{flexDirection:"column",marginBottom:1,children:[B0(U1,{color:"red",bold:!0,children:"风险提示:"},void 0,!1,void 0,this),$.risks.map((X,q)=>B0(t0,{marginLeft:2,children:B0(U1,{color:"red",children:["• ",X]},void 0,!0,void 0,this)},q,!1,void 0,this))]},void 0,!0,void 0,this),$.affectedFiles&&$.affectedFiles.length>0&&B0(t0,{flexDirection:"column",marginBottom:1,children:[B0(U1,{color:"yellow",children:"影响的文件:"},void 0,!1,void 0,this),$.affectedFiles.slice(0,3).map((X,q)=>B0(t0,{marginLeft:2,children:B0(U1,{children:["• ",X]},void 0,!0,void 0,this)},q,!1,void 0,this)),$.affectedFiles.length>3&&B0(t0,{marginLeft:2,children:B0(U1,{color:"gray",children:["...还有 ",$.affectedFiles.length-3," 个文件"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this));function a3($,Q,Y){return`使用 ↑↓ 选择,回车确认 · ${Q||Y?"Y/N":$?"Y/S/N":"Y/S/P/N"} 快捷键 · Esc 取消`}var Q9=fQ.memo(({details:$,onResponse:Q})=>{let{stdout:Y}=u3(),J=Y.columns||80,X=l0()==="confirmation-prompt",q=P0(!1),U=$.type==="exitPlanMode",z=$.type==="enterPlanMode",K=$.type==="maxTurnsExceeded";x3((_,O)=>{if(O.ctrl&&_==="c"||O.meta&&_==="c"){q();return}if(O.escape){Q({approved:!1,reason:"用户取消"});return}let N=_.toLowerCase();if(U){if(N==="y"){Q({approved:!0,targetMode:"autoEdit"});return}if(N==="s"){Q({approved:!0,targetMode:"default"});return}if(N==="n"){Q({approved:!1,reason:"方案需要改进"});return}}else if(z){if(N==="y"){Q({approved:!0});return}if(N==="n"){Q({approved:!1,reason:"用户拒绝进入 Plan 模式"});return}}else if(K){if(N==="y"){Q({approved:!0});return}if(N==="n"){Q({approved:!1,reason:"用户选择停止"});return}}else{if(N==="y"){Q({approved:!0,scope:"once"});return}if(N==="s"){Q({approved:!0,scope:"session"});return}if(N==="p"){Q({approved:!0,scope:"project"});return}if(N==="n"){Q({approved:!1,reason:"用户拒绝"});return}}},{isActive:X});let F=$9(()=>{if(U)return[{key:"approve-auto",label:"[Y] 批准,自动执行",value:{approved:!0,targetMode:"autoEdit"}},{key:"approve-default",label:"[S] 批准,逐步确认",value:{approved:!0,targetMode:"default"}},{key:"reject",label:"[N] 继续优化方案",value:{approved:!1,reason:"方案需要改进"}}];if(z)return[{key:"approve",label:"[Y] 进入规划模式",value:{approved:!0}},{key:"reject",label:"[N] 直接执行",value:{approved:!1,reason:"用户拒绝进入 Plan 模式"}}];if(K)return[{key:"continue",label:"[Y] 继续执行",value:{approved:!0}},{key:"stop",label:"[N] 停止",value:{approved:!1,reason:"用户选择停止"}}];return[{key:"approve-once",label:"[Y] 允许(仅本次)",value:{approved:!0,scope:"once"}},{key:"approve-session",label:"[S] 允许(本次会话)",value:{approved:!0,scope:"session"}},{key:"approve-project",label:"[P] 允许并记住(本项目)",value:{approved:!0,scope:"project"}},{key:"reject",label:"[N] 拒绝",value:{approved:!1,reason:"用户拒绝"}}]},[U,z,K]),G=$9(()=>{if(U)return{color:"cyan",title:"方案审核"};if(z)return{color:"magenta",title:"进入规划模式"};if(K)return{color:"yellow",title:"已达最大轮次"};return{color:"yellow",title:$.title||"操作确认"}},[U,z,K,$.title]);return B0(t0,{flexDirection:"column",borderStyle:"round",borderColor:X?G.color:"gray",padding:1,children:[B0(t0,{marginBottom:1,children:B0(U1,{bold:!0,color:G.color,children:G.title},void 0,!1,void 0,this)},void 0,!1,void 0,this),B0(r3,{details:$,headerColor:G.color,isPlanModeExit:U,isPlanModeEnter:z,terminalWidth:J},void 0,!1,void 0,this),B0(t0,{flexDirection:"column",children:[B0(U1,{color:"gray",children:a3(U,z,K)},void 0,!1,void 0,this),B0(d3,{items:F,isFocused:X,itemComponent:l3,onSelect:(_)=>{Q(_.value)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import{Box as O0,Text as e,useInput as i3}from"ink";import J9 from"ink-text-input";import{useState as W1}from"react";import{jsxDEV as h}from"react/jsx-dev-runtime";var p$=[{action:"add",description:"Add a new hook"},{action:"status",description:"Show hooks status"},{action:"list",description:"List all configured hooks"}],y8=[{location:"local",name:"Project settings (local)",description:"Saved in .blade/settings.local.json"},{location:"project",name:"Project settings",description:"Checked in at .blade/settings.json"},{location:"user",name:"User settings",description:"Saved in at ~/.blade/settings.json"}],v8=[{event:"PreToolUse",description:"Before tool execution"},{event:"PostToolUse",description:"After tool execution"},{event:"PostToolUseFailure",description:"After tool execution fails"},{event:"PermissionRequest",description:"When permission is requested"},{event:"UserPromptSubmit",description:"Before processing user prompt"},{event:"Stop",description:"When Claude stops responding"},{event:"SubagentStop",description:"When subagent stops"},{event:"SessionStart",description:"When session starts"},{event:"SessionEnd",description:"When session ends"},{event:"Notification",description:"When notification is sent"},{event:"Compaction",description:"Before context compaction"}],n3=[`jq -r '.tool_input.file_path | select(endswith(".go"))' | xargs -r gofmt -w`,`jq -r '"\\(.tool_input.command) - \\(.tool_input.description // "No description")"' >> ~/.blade/bash-command-log.txt`,"/usr/local/bin/security_check.sh","python3 ~/hooks/validate_changes.py"],Y9=({onClose:$,onSave:Q})=>{let Y=E0.getTheme(),[J,Z]=W1("action"),[X,q]=W1(0),[U,z]=W1(0),[K,F]=W1(0),[G,_]=W1(""),[O,N]=W1(""),[H,B]=W1(null),[L,w]=W1(!1),[I,k]=W1(null),v=p$[X],A=v8[U],b=y8[K],W=()=>{if(I){k(null);return}switch(J){case"action":$();break;case"event":Z("action");break;case"matcher":Z("event");break;case"command":Z("matcher");break;case"location":Z("command");break;case"confirm":Z("location");break}};i3((T,P)=>{if(P.escape){W();return}if(J==="action"){if(P.upArrow)q((y)=>y>0?y-1:p$.length-1);else if(P.downArrow)q((y)=>y<p$.length-1?y+1:0);else if(P.return)R()}else if(J==="event"){if(P.upArrow)z((y)=>y>0?y-1:v8.length-1);else if(P.downArrow)z((y)=>y<v8.length-1?y+1:0);else if(P.return)Z("matcher")}else if(J==="location"){if(P.upArrow)F((y)=>y>0?y-1:y8.length-1);else if(P.downArrow)F((y)=>y<y8.length-1?y+1:0);else if(P.return)Z("confirm")}else if(J==="confirm"){if(P.return)u()}});let R=()=>{let T=p$[X].action;if(T==="add")Z("event");else if(T==="status")j();else if(T==="list")E()},j=()=>{let T=q1.getInstance(),P=T.isEnabled(),y=T.getConfig(),Y0={};for(let S of Object.values(VQ)){let G0=y[S];if(G0&&Array.isArray(G0)){let f=G0.reduce((x,C)=>x+(C.hooks?.length||0),0);if(f>0)Y0[S]=f}}let r=[`Status: ${P?"Enabled":"Disabled"}`,""];if(Object.keys(Y0).length>0){r.push("Configured hooks:");for(let[S,G0]of Object.entries(Y0))r.push(` ${S}: ${G0} hook(s)`)}else r.push("No hooks configured");k(r.join(`
133
+ `,K);if(G!==-1&&G-K<q)F=G+1;let _=$.slice(F),N=($.slice(0,F).match(/\n/g)||[]).length+1;return{content:_,isTruncated:!0,hiddenLines:N}}var V1=t1.memo(({content:$,role:Q,terminalWidth:Y,metadata:J,isPending:Z=!1,availableTerminalHeight:X,hidePrefix:q=!1,noMargin:U=!1,renderPlainTextOnly:z=!1,streamingLines:K,streamingHiddenLines:F,messageId:G,blocksOverride:_,currentLineOverride:O,streamingMode:N="text",renderCodeBlocksAsPlainText:W=!1})=>{let B=W0(),L=_!==void 0,w=n1(()=>V3(Q,B.colors,J),[Q,B.colors,J]),{color:I,prefix:k}=w,v=k.length+1,A=n1(()=>{if(!J||typeof J!=="object")return null;if(!("subtaskRef"in J))return null;let S=J.subtaskRef;if(!S||typeof S!=="object")return null;return S},[J]),b=Q==="tool"&&J?.phase==="start",H=!U&&!b,R=n1(()=>{if(!z)return[];return $.split(/\r?\n/)},[$,z]);if(!L&&Z){let S=K??$.split(/\r?\n/),G0=F??0,f=!1,x=!1,C=!1;if(N!=="text")f=N==="code",x=N==="diff",C=N==="table";return D(Z0,{flexDirection:"column",marginBottom:H?1:0,flexShrink:0,children:[G0>0&&D(Z0,{flexDirection:"row",flexShrink:0,children:[D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(H0,{color:B.colors.text.muted,dimColor:!0,children:["^ ",G0," lines above (streaming...)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),S.map((J0,F0)=>{if(N==="text"){if(J0.match(D1.codeBlock))f=!f;else if(J0.match(D1.diffStart))x=!0;else if(J0.match(D1.diffEnd))x=!1;else if(J0.match(D1.table))C=!0;else if(C&&!J0.match(D1.table))C=!1}let s=N==="text"&&!f&&!x&&!C,_0=s?J0.match(D1.ulItem):null,k0=s?J0.match(D1.olItem):null,i0=_0??k0;return D(Z0,{flexDirection:"row",flexShrink:0,children:[F0===0&&!q?D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this):D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:i0?D(MQ,{type:_0?"ul":"ol",marker:i0[2],itemText:i0[3],leadingWhitespace:i0[1]},void 0,!1,void 0,this):D(H0,{wrap:"wrap",children:J0===""?" ":J0},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},F0,!0,void 0,this)})]},void 0,!0,void 0,this)}if(!L&&z)return D(Z0,{flexDirection:"column",marginBottom:H?1:0,flexShrink:0,children:R.map((S,G0)=>D(Z0,{flexDirection:"row",flexShrink:0,children:[G0===0&&!q?D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this):D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:D(H0,{wrap:"wrap",children:S===""?" ":S},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},G0,!0,void 0,this))},void 0,!1,void 0,this);let j=t2(null);CQ(()=>{j.current=null},[G]);let E=n1(()=>{if(L)return null;if(!G)return null;return s2(G)},[G,L]);CQ(()=>{if(L)return;if(!E||!G)return;j.current={messageId:G,blocks:E}},[E,G,L]),CQ(()=>{if(L)return;if(!E||!G)return;e2(G)},[E,G,L]);let p=n1(()=>L?{content:$,isTruncated:!1,hiddenLines:0}:c3($,X,Z,Y),[$,X,Z,Y,L]),{content:V,isTruncated:u,hiddenLines:T}=p;if(!L&&Q==="tool"&&J&&"detail"in J){let S=J;if(S.detail)return D(Z0,{flexDirection:"column",marginBottom:U?0:1,children:[D(Z0,{flexDirection:"row",children:[D(Z0,{marginRight:1,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this),D(H0,{color:I,children:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D(Z0,{marginLeft:k.length+1,children:D(g3,{detail:S.detail,terminalWidth:Y-(k.length+1)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}let{completedContent:P,currentLine:y}=n1(()=>{if(L)return{completedContent:"",currentLine:O??""};if(!Z)return{completedContent:V,currentLine:""};let S=V.lastIndexOf(`
134
+ `);if(S===-1)return{completedContent:"",currentLine:V};return{completedContent:V.slice(0,S+1),currentLine:V.slice(S+1)}},[V,Z,L,O]),Y0=t2({content:"",blocks:[]}),r=n1(()=>{if(L)return _??[];if(E)return E;if(j.current&&j.current.messageId===G)return j.current.blocks;let S=Y0.current;if(!Z||!P.startsWith(S.content)){let C=SQ(P);return Y0.current={content:P,blocks:C},C}if(P===S.content)return S.blocks;let G0=P.slice(S.content.length),f=SQ(G0),x=[...S.blocks,...f];return Y0.current={content:P,blocks:x},x},[P,Z,L,_]);return D(Z0,{flexDirection:"column",marginBottom:H?1:0,flexShrink:0,children:[u&&D(Z0,{flexDirection:"row",flexShrink:0,children:[D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(H0,{color:B.colors.text.muted,dimColor:!0,children:["^ ",T," lines above (streaming...)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),r.map((S,G0)=>{if(S.type==="empty")return D(Z0,{height:1,flexShrink:0},G0,!1,void 0,this);return D(Z0,{flexDirection:"row",flexShrink:0,children:[G0===0&&!q&&D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this),(G0>0||q)&&D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:S.type==="code"?W?D(H0,{wrap:"wrap",children:S.content},void 0,!1,void 0,this):D(j3,{content:S.content,language:S.language,terminalWidth:Y-v,isPending:Z,availableHeight:X},void 0,!1,void 0,this):S.type==="table"&&S.tableData?D(n2,{headers:S.tableData.headers,rows:S.tableData.rows,terminalWidth:Y-v},void 0,!1,void 0,this):S.type==="heading"?D(E3,{content:S.content,level:S.level||1},void 0,!1,void 0,this):S.type==="list"?D(MQ,{type:S.listType||"ul",marker:S.marker||"-",itemText:S.content,leadingWhitespace:" ".repeat(S.indentation||0)},void 0,!1,void 0,this):S.type==="hr"?D(h3,{terminalWidth:Y-v},void 0,!1,void 0,this):S.type==="diff"&&S.diffData?D(PQ,{patch:S.diffData.patch,startLine:S.diffData.startLine,matchLine:S.diffData.matchLine,terminalWidth:Y-v},void 0,!1,void 0,this):S.type==="command-message"?D(p3,{content:S.content},void 0,!1,void 0,this):S.type==="blockquote"&&S.blockquoteLines?D(p2,{lines:S.blockquoteLines,level:S.blockquoteLevel||1},void 0,!1,void 0,this):D(m3,{content:S.content},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},G0,!0,void 0,this)}),y&&D(Z0,{flexDirection:"row",flexShrink:0,children:[r.length===0&&!q?D(Z0,{marginRight:1,flexShrink:0,children:D(H0,{color:I,bold:!0,children:k},void 0,!1,void 0,this)},void 0,!1,void 0,this):D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexGrow:1,flexShrink:0,children:D(H0,{wrap:"wrap",children:y},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),A&&D(Z0,{flexDirection:"row",flexShrink:0,children:[D(Z0,{width:v,flexShrink:0},void 0,!1,void 0,this),D(Z0,{flexDirection:"column",flexGrow:1,flexShrink:0,children:[D(H0,{color:B.colors.text.muted,children:["Subtask"," ",typeof A.agentType==="string"?`@${A.agentType}`:"",typeof A.status==="string"?` · ${A.status}`:""]},void 0,!0,void 0,this),typeof A.summary==="string"&&A.summary.trim()!==""&&D(H0,{wrap:"wrap",children:A.summary},void 0,!1,void 0,this),typeof A.childSessionId==="string"&&D(H0,{color:B.colors.text.muted,children:["Session ",A.childSessionId]},void 0,!0,void 0,this),typeof A.resumedFrom==="string"&&D(H0,{color:B.colors.text.muted,children:["Resumed from ",A.resumedFrom,typeof A.resumeDepth==="number"?` · depth ${A.resumeDepth}`:""]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},($,Q)=>{return $.content===Q.content&&$.role===Q.role&&$.terminalWidth===Q.terminalWidth&&$.isPending===Q.isPending&&$.availableTerminalHeight===Q.availableTerminalHeight&&$.hidePrefix===Q.hidePrefix&&$.noMargin===Q.noMargin&&$.renderPlainTextOnly===Q.renderPlainTextOnly&&$.streamingHiddenLines===Q.streamingHiddenLines&&$.streamingLines===Q.streamingLines&&$.messageId===Q.messageId&&$.metadata===Q.metadata&&$.blocksOverride===Q.blocksOverride&&$.currentLineOverride===Q.currentLineOverride&&$.streamingMode===Q.streamingMode&&$.renderCodeBlocksAsPlainText===Q.renderCodeBlocksAsPlainText});import{jsxDEV as B0,Fragment as o3}from"react/jsx-dev-runtime";var l3=fQ.memo(({label:$,isSelected:Q})=>B0(U1,{color:Q?"yellow":void 0,children:$},void 0,!1,void 0,this)),r3=fQ.memo(({details:$,headerColor:Q,isPlanModeExit:Y,isPlanModeEnter:J,terminalWidth:Z})=>B0(o3,{children:[B0(t0,{marginBottom:1,children:B0(U1,{children:$.message},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.planContent&&B0(t0,{flexDirection:"column",marginBottom:1,borderStyle:"single",borderColor:Q,padding:1,children:[B0(U1,{bold:!0,color:Q,children:"实施方案"},void 0,!1,void 0,this),B0(t0,{marginTop:1,children:B0(V1,{content:$.planContent,role:"assistant",terminalWidth:Z-4},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!$.planContent&&$.details&&B0(t0,{flexDirection:"column",marginBottom:1,children:B0(V1,{content:$.details,role:"assistant",terminalWidth:Z},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.risks&&$.risks.length>0&&B0(t0,{flexDirection:"column",marginBottom:1,children:[B0(U1,{color:"red",bold:!0,children:"风险提示:"},void 0,!1,void 0,this),$.risks.map((X,q)=>B0(t0,{marginLeft:2,children:B0(U1,{color:"red",children:["• ",X]},void 0,!0,void 0,this)},q,!1,void 0,this))]},void 0,!0,void 0,this),$.affectedFiles&&$.affectedFiles.length>0&&B0(t0,{flexDirection:"column",marginBottom:1,children:[B0(U1,{color:"yellow",children:"影响的文件:"},void 0,!1,void 0,this),$.affectedFiles.slice(0,3).map((X,q)=>B0(t0,{marginLeft:2,children:B0(U1,{children:["• ",X]},void 0,!0,void 0,this)},q,!1,void 0,this)),$.affectedFiles.length>3&&B0(t0,{marginLeft:2,children:B0(U1,{color:"gray",children:["...还有 ",$.affectedFiles.length-3," 个文件"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this));function a3($,Q,Y){return`使用 ↑↓ 选择,回车确认 · ${Q||Y?"Y/N":$?"Y/S/N":"Y/S/P/N"} 快捷键 · Esc 取消`}var Q9=fQ.memo(({details:$,onResponse:Q})=>{let{stdout:Y}=u3(),J=Y.columns||80,X=l0()==="confirmation-prompt",q=P0(!1),U=$.type==="exitPlanMode",z=$.type==="enterPlanMode",K=$.type==="maxTurnsExceeded";x3((_,O)=>{if(O.ctrl&&_==="c"||O.meta&&_==="c"){q();return}if(O.escape){Q({approved:!1,reason:"用户取消"});return}let N=_.toLowerCase();if(U){if(N==="y"){Q({approved:!0,targetMode:"autoEdit"});return}if(N==="s"){Q({approved:!0,targetMode:"default"});return}if(N==="n"){Q({approved:!1,reason:"方案需要改进"});return}}else if(z){if(N==="y"){Q({approved:!0});return}if(N==="n"){Q({approved:!1,reason:"用户拒绝进入 Plan 模式"});return}}else if(K){if(N==="y"){Q({approved:!0});return}if(N==="n"){Q({approved:!1,reason:"用户选择停止"});return}}else{if(N==="y"){Q({approved:!0,scope:"once"});return}if(N==="s"){Q({approved:!0,scope:"session"});return}if(N==="p"){Q({approved:!0,scope:"project"});return}if(N==="n"){Q({approved:!1,reason:"用户拒绝"});return}}},{isActive:X});let F=$9(()=>{if(U)return[{key:"approve-auto",label:"[Y] 批准,自动执行",value:{approved:!0,targetMode:"autoEdit"}},{key:"approve-default",label:"[S] 批准,逐步确认",value:{approved:!0,targetMode:"default"}},{key:"reject",label:"[N] 继续优化方案",value:{approved:!1,reason:"方案需要改进"}}];if(z)return[{key:"approve",label:"[Y] 进入规划模式",value:{approved:!0}},{key:"reject",label:"[N] 直接执行",value:{approved:!1,reason:"用户拒绝进入 Plan 模式"}}];if(K)return[{key:"continue",label:"[Y] 继续执行",value:{approved:!0}},{key:"stop",label:"[N] 停止",value:{approved:!1,reason:"用户选择停止"}}];return[{key:"approve-once",label:"[Y] 允许(仅本次)",value:{approved:!0,scope:"once"}},{key:"approve-session",label:"[S] 允许(本次会话)",value:{approved:!0,scope:"session"}},{key:"approve-project",label:"[P] 允许并记住(本项目)",value:{approved:!0,scope:"project"}},{key:"reject",label:"[N] 拒绝",value:{approved:!1,reason:"用户拒绝"}}]},[U,z,K]),G=$9(()=>{if(U)return{color:"cyan",title:"方案审核"};if(z)return{color:"magenta",title:"进入规划模式"};if(K)return{color:"yellow",title:"已达最大轮次"};return{color:"yellow",title:$.title||"操作确认"}},[U,z,K,$.title]);return B0(t0,{flexDirection:"column",borderStyle:"round",borderColor:X?G.color:"gray",padding:1,children:[B0(t0,{marginBottom:1,children:B0(U1,{bold:!0,color:G.color,children:G.title},void 0,!1,void 0,this)},void 0,!1,void 0,this),B0(r3,{details:$,headerColor:G.color,isPlanModeExit:U,isPlanModeEnter:z,terminalWidth:J},void 0,!1,void 0,this),B0(t0,{flexDirection:"column",children:[B0(U1,{color:"gray",children:a3(U,z,K)},void 0,!1,void 0,this),B0(d3,{items:F,isFocused:X,itemComponent:l3,onSelect:(_)=>{Q(_.value)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import{Box as O0,Text as e,useInput as i3}from"ink";import J9 from"ink-text-input";import{useState as W1}from"react";import{jsxDEV as h}from"react/jsx-dev-runtime";var p$=[{action:"add",description:"Add a new hook"},{action:"status",description:"Show hooks status"},{action:"list",description:"List all configured hooks"}],y8=[{location:"local",name:"Project settings (local)",description:"Saved in .blade/settings.local.json"},{location:"project",name:"Project settings",description:"Checked in at .blade/settings.json"},{location:"user",name:"User settings",description:"Saved in at ~/.blade/settings.json"}],v8=[{event:"PreToolUse",description:"Before tool execution"},{event:"PostToolUse",description:"After tool execution"},{event:"PostToolUseFailure",description:"After tool execution fails"},{event:"PermissionRequest",description:"When permission is requested"},{event:"UserPromptSubmit",description:"Before processing user prompt"},{event:"Stop",description:"When Claude stops responding"},{event:"SubagentStop",description:"When subagent stops"},{event:"SessionStart",description:"When session starts"},{event:"SessionEnd",description:"When session ends"},{event:"Notification",description:"When notification is sent"},{event:"Compaction",description:"Before context compaction"}],n3=[`jq -r '.tool_input.file_path | select(endswith(".go"))' | xargs -r gofmt -w`,`jq -r '"\\(.tool_input.command) - \\(.tool_input.description // "No description")"' >> ~/.blade/bash-command-log.txt`,"/usr/local/bin/security_check.sh","python3 ~/hooks/validate_changes.py"],Y9=({onClose:$,onSave:Q})=>{let Y=E0.getTheme(),[J,Z]=W1("action"),[X,q]=W1(0),[U,z]=W1(0),[K,F]=W1(0),[G,_]=W1(""),[O,N]=W1(""),[W,B]=W1(null),[L,w]=W1(!1),[I,k]=W1(null),v=p$[X],A=v8[U],b=y8[K],H=()=>{if(I){k(null);return}switch(J){case"action":$();break;case"event":Z("action");break;case"matcher":Z("event");break;case"command":Z("matcher");break;case"location":Z("command");break;case"confirm":Z("location");break}};i3((T,P)=>{if(P.escape){H();return}if(J==="action"){if(P.upArrow)q((y)=>y>0?y-1:p$.length-1);else if(P.downArrow)q((y)=>y<p$.length-1?y+1:0);else if(P.return)R()}else if(J==="event"){if(P.upArrow)z((y)=>y>0?y-1:v8.length-1);else if(P.downArrow)z((y)=>y<v8.length-1?y+1:0);else if(P.return)Z("matcher")}else if(J==="location"){if(P.upArrow)F((y)=>y>0?y-1:y8.length-1);else if(P.downArrow)F((y)=>y<y8.length-1?y+1:0);else if(P.return)Z("confirm")}else if(J==="confirm"){if(P.return)u()}});let R=()=>{let T=p$[X].action;if(T==="add")Z("event");else if(T==="status")j();else if(T==="list")E()},j=()=>{let T=q1.getInstance(),P=T.isEnabled(),y=T.getConfig(),Y0={};for(let S of Object.values(VQ)){let G0=y[S];if(G0&&Array.isArray(G0)){let f=G0.reduce((x,C)=>x+(C.hooks?.length||0),0);if(f>0)Y0[S]=f}}let r=[`Status: ${P?"Enabled":"Disabled"}`,""];if(Object.keys(Y0).length>0){r.push("Configured hooks:");for(let[S,G0]of Object.entries(Y0))r.push(` ${S}: ${G0} hook(s)`)}else r.push("No hooks configured");k(r.join(`
135
135
  `))},E=()=>{let P=q1.getInstance().getConfig(),y=[],Y0=!1;for(let r of Object.values(VQ)){let S=P[r];if(!S||!Array.isArray(S)||S.length===0)continue;Y0=!0,y.push(`${r}:`);for(let G0 of S){let f=G0.matcher,x="all";if(f?.tools)x=`tools: ${Array.isArray(f.tools)?f.tools.join(", "):f.tools}`;y.push(` [${x}]`);for(let C of G0.hooks||[])if(C.type==="command")y.push(` -> ${C.command}`)}y.push("")}if(!Y0)y.push("No hooks configured"),y.push(""),y.push("Configure hooks in .blade/settings.local.json");k(y.join(`
136
- `))},p=()=>{Z("command")},V=()=>{if(!O.trim()){B("Command cannot be empty");return}B(null),Z("location")},u=async()=>{w(!0),B(null);try{let T=q1.getInstance(),P=await import("node:fs/promises"),y=await import("node:path"),Y0=await import("node:os"),r={matcher:G.trim()?{tools:G.trim()}:{},hooks:[{type:"command",command:O.trim()}]},S;switch(b.location){case"local":S=y.join(t(),".blade","settings.local.json");break;case"project":S=y.join(t(),".blade","settings.json");break;case"user":S=y.join(Y0.homedir(),".blade","settings.json");break}await P.mkdir(y.dirname(S),{recursive:!0});let G0={};try{let J0=await P.readFile(S,"utf-8");G0=JSON.parse(J0)}catch{}let f=G0.hooks||{},x=f[A.event]||[],C={...f,enabled:!0,[A.event]:[...x,r]};if(G0.hooks=C,await P.writeFile(S,JSON.stringify(G0,null,2),"utf-8"),await T.reloadConfig(),Q)Q({event:A.event,matcher:G.trim(),command:O.trim()});$()}catch(T){B(`Failed to save hook: ${T instanceof Error?T.message:"Unknown error"}`),w(!1)}};return h(O0,{flexDirection:"column",padding:1,children:[h(O0,{marginBottom:1,children:h(e,{bold:!0,color:Y.colors.success,children:"Hooks Manager"},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{marginBottom:1,children:h(e,{color:Y.colors.warning,children:"[WARN] Hooks execute shell commands with your full user permissions. Only use hooks from trusted sources."},void 0,!1,void 0,this)},void 0,!1,void 0,this),I&&h(O0,{flexDirection:"column",marginBottom:1,children:[h(e,{children:I},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="action"&&!I&&h(O0,{flexDirection:"column",children:[h(O0,{flexDirection:"column",marginTop:1,children:p$.map((T,P)=>h(O0,{children:[h(e,{color:P===X?Y.colors.primary:void 0,bold:P===X,children:[P===X?"> ":" ",T.action]},void 0,!0,void 0,this),h(e,{color:Y.colors.muted,children:[" - ",T.description]},void 0,!0,void 0,this)]},T.action,!0,void 0,this))},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Up/Down to select · Enter to continue · Esc to close"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="event"&&h(O0,{flexDirection:"column",children:[h(e,{bold:!0,children:"Select Event:"},void 0,!1,void 0,this),h(O0,{flexDirection:"column",marginTop:1,children:v8.map((T,P)=>h(O0,{children:[h(e,{color:P===U?Y.colors.primary:void 0,bold:P===U,children:[P===U?"> ":" ",T.event]},void 0,!0,void 0,this),h(e,{color:Y.colors.muted,children:[" - ",T.description]},void 0,!0,void 0,this)]},T.event,!0,void 0,this))},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Up/Down to select · Enter to continue · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J!=="event"&&h(O0,{marginBottom:1,children:h(e,{children:["Event:"," ",h(e,{bold:!0,color:Y.colors.primary,children:A.event},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:[" - ",A.description]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),(J==="matcher"||J==="command"||J==="confirm")&&h(O0,{flexDirection:"column",marginBottom:1,children:[h(e,{color:Y.colors.muted,children:"Input to command is JSON of tool call arguments."},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:"Exit code 0 - stdout/stderr not shown"},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:"Exit code 2 - show stderr to model and block tool call"},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:"Other exit codes - show stderr to user only but continue with tool call"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="matcher"&&h(O0,{flexDirection:"column",children:[h(O0,{children:[h(e,{bold:!0,children:"Matcher: "},void 0,!1,void 0,this),h(J9,{value:G,onChange:_,onSubmit:p,placeholder:"e.g., Read, Bash, Edit|Write (empty = all tools)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Tool name pattern (supports | for multiple). Leave empty to match all."},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Enter to continue · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(J==="command"||J==="confirm")&&h(O0,{marginBottom:1,children:h(e,{children:["Matcher: ",h(e,{bold:!0,children:G||"(all tools)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),J==="command"&&h(O0,{flexDirection:"column",children:[h(O0,{children:h(e,{bold:!0,children:"Command: "},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{borderStyle:"single",borderColor:Y.colors.border.light,paddingX:1,marginTop:1,children:h(J9,{value:O,onChange:N,onSubmit:V,placeholder:"Enter shell command..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{flexDirection:"column",marginTop:1,children:[h(e,{bold:!0,children:"Examples:"},void 0,!1,void 0,this),n3.map((T,P)=>h(e,{color:Y.colors.muted,children:["• ",T]},P,!0,void 0,this))]},void 0,!0,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Enter to continue · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="location"&&h(O0,{flexDirection:"column",children:[h(O0,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.border.light,paddingX:2,paddingY:1,marginBottom:1,children:[h(e,{bold:!0,color:Y.colors.primary,children:"Save hook configuration"},void 0,!1,void 0,this),h(e,{children:" "},void 0,!1,void 0,this),h(e,{children:[" ","Event: ",A.event," - ",A.description]},void 0,!0,void 0,this),h(e,{children:[" Matcher: ",G||"(all)"]},void 0,!0,void 0,this),h(e,{children:[" Command: ",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h(e,{bold:!0,children:"Where should this hook be saved?"},void 0,!1,void 0,this),h(O0,{flexDirection:"column",marginTop:1,children:y8.map((T,P)=>h(O0,{children:[h(e,{color:P===K?Y.colors.primary:void 0,bold:P===K,children:[P===K?"> ":" ",P+1,". ",T.name]},void 0,!0,void 0,this),h(e,{color:Y.colors.muted,children:[" ",T.description]},void 0,!0,void 0,this)]},T.location,!0,void 0,this))},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Enter to confirm · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="confirm"&&h(O0,{flexDirection:"column",children:[h(O0,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.success,paddingX:2,paddingY:1,children:[h(e,{bold:!0,children:["Saving hook to ",b.description,"..."]},void 0,!0,void 0,this),h(e,{children:" "},void 0,!1,void 0,this),h(e,{children:["Event: ",A.event]},void 0,!0,void 0,this),h(e,{children:["Matcher: ",G||"(all tools)"]},void 0,!0,void 0,this),h(e,{children:["Command: ",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:L?"Saving...":"Enter to confirm · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H&&h(O0,{marginTop:1,children:h(e,{color:Y.colors.error,children:H},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useMemoizedFn as N9}from"ahooks";import{Box as UY,Text as GY}from"ink";import KY from"react";import{useMemoizedFn as QY}from"ahooks";import s1 from"chalk";import{Text as JY,useInput as YY}from"ink";import{useEffect as hQ,useRef as mQ}from"react";var F1={TIMEOUT_MS:100,RAPID_INPUT_THRESHOLD_MS:150,LARGE_INPUT_THRESHOLD:300,MEDIUM_SIZE_MULTI_CHUNK_THRESHOLD:200};import{execSync as A$}from"node:child_process";import{existsSync as t3,readFileSync as jQ}from"node:fs";import{basename as Z9,isAbsolute as s3}from"node:path";function X9($){try{let Q=Buffer.from($,"base64");if(Q.length<4)return"image/png";if(Q[0]===137&&Q[1]===80&&Q[2]===78&&Q[3]===71)return"image/png";if(Q[0]===255&&Q[1]===216&&Q[2]===255)return"image/jpeg";if(Q[0]===71&&Q[1]===73&&Q[2]===70)return"image/gif";if(Q[0]===82&&Q[1]===73&&Q[2]===70&&Q[3]===70){if(Q.length>=12&&Q[8]===87&&Q[9]===69&&Q[10]===66&&Q[11]===80)return"image/webp"}return"image/png"}catch{return"image/png"}}function q9(){let $=process.platform,Q={darwin:"/tmp/blade_cli_latest_screenshot.png",linux:"/tmp/blade_cli_latest_screenshot.png",win32:process.env.TEMP?`${process.env.TEMP}\\blade_cli_latest_screenshot.png`:"C:\\Temp\\blade_cli_latest_screenshot.png"},Y={darwin:{checkImage:"osascript -e 'the clipboard as «class PNGf»'",saveImage:(J)=>`osascript -e 'set png_data to (the clipboard as «class PNGf»)' -e 'set fp to open for access POSIX file "${J}" with write permission' -e 'write png_data to fp' -e 'close access fp'`,getPath:"osascript -e 'get POSIX path of (the clipboard as «class furl»)'",deleteFile:(J)=>`rm -f "${J}"`},linux:{checkImage:'xclip -selection clipboard -t TARGETS -o | grep -E "image/(png|jpeg|jpg|gif|webp)"',saveImage:(J)=>`xclip -selection clipboard -t image/png -o > "${J}" || wl-paste --type image/png > "${J}"`,getPath:"xclip -selection clipboard -t text/plain -o",deleteFile:(J)=>`rm -f "${J}"`},win32:{checkImage:'powershell -Command "(Get-Clipboard -Format Image) -ne $null"',saveImage:(J)=>`powershell -Command "$img = Get-Clipboard -Format Image; if ($img) { $img.Save('${J.replace(/\\/g,"\\\\")}', [System.Drawing.Imaging.ImageFormat]::Png) }"`,getPath:'powershell -Command "Get-Clipboard"',deleteFile:(J)=>`del /f "${J}"`}};return{commands:Y[$]||Y.linux,screenshotPath:Q[$]||Q.linux}}function e3(){let{commands:$}=q9();try{return A$($.getPath,{encoding:"utf-8"}).trim()}catch(Q){return console.error("Failed to get clipboard path:",Q),null}}function U9($){if($.startsWith('"')&&$.endsWith('"')||$.startsWith("'")&&$.endsWith("'"))return $.slice(1,-1);return $}function G9($){if(process.platform==="win32")return $;let Q="__DOUBLE_BACKSLASH__";return $.replace(/\\\\/g,Q).replace(/\\(.)/g,"$1").replace(new RegExp(Q,"g"),"\\")}function EQ($){let Q=U9($.trim()),Y=G9(Q);return/\.(png|jpe?g|gif|webp)$/i.test(Y)}function $Y($){let Q=U9($.trim()),Y=G9(Q);if(EQ(Y))return Y;return null}async function K9($){let Q=$Y($);if(!Q)return null;let Y;try{if(s3(Q))Y=jQ(Q);else{let q=e3();if(q&&Q===Z9(q))Y=jQ(q);else return null}}catch(q){return console.error("Failed to read image file:",q),null}let J=Y.toString("base64"),Z=X9(J),X=Z9(Q);return{path:Q,base64:J,mediaType:Z,filename:X}}async function O9(){let $=process.platform,Q={darwin:"pbpaste",linux:"xclip -selection clipboard -o || wl-paste",win32:'powershell -Command "Get-Clipboard"'},Y=Q[$]||Q.linux;try{return A$(Y,{encoding:"utf-8"})||null}catch{return null}}async function z9(){let{commands:$,screenshotPath:Q}=q9();try{if(A$($.checkImage,{stdio:"ignore"}),A$($.saveImage(Q),{stdio:"ignore"}),!t3(Q))return null;let J=jQ(Q).toString("base64"),Z=X9(J);return A$($.deleteFile(Q),{stdio:"ignore"}),{base64:J,mediaType:Z}}catch(Y){try{A$($.deleteFile(Q),{stdio:"ignore"})}catch{}return null}}import{jsxDEV as qY}from"react/jsx-dev-runtime";var ZY=/\r\n/g,XY=/\r/g;function e1($){if(!$.includes("\r"))return $;return $.replace(ZY,`
136
+ `))},p=()=>{Z("command")},V=()=>{if(!O.trim()){B("Command cannot be empty");return}B(null),Z("location")},u=async()=>{w(!0),B(null);try{let T=q1.getInstance(),P=await import("node:fs/promises"),y=await import("node:path"),Y0=await import("node:os"),r={matcher:G.trim()?{tools:G.trim()}:{},hooks:[{type:"command",command:O.trim()}]},S;switch(b.location){case"local":S=y.join(t(),".blade","settings.local.json");break;case"project":S=y.join(t(),".blade","settings.json");break;case"user":S=y.join(Y0.homedir(),".blade","settings.json");break}await P.mkdir(y.dirname(S),{recursive:!0});let G0={};try{let J0=await P.readFile(S,"utf-8");G0=JSON.parse(J0)}catch{}let f=G0.hooks||{},x=f[A.event]||[],C={...f,enabled:!0,[A.event]:[...x,r]};if(G0.hooks=C,await P.writeFile(S,JSON.stringify(G0,null,2),"utf-8"),await T.reloadConfig(),Q)Q({event:A.event,matcher:G.trim(),command:O.trim()});$()}catch(T){B(`Failed to save hook: ${T instanceof Error?T.message:"Unknown error"}`),w(!1)}};return h(O0,{flexDirection:"column",padding:1,children:[h(O0,{marginBottom:1,children:h(e,{bold:!0,color:Y.colors.success,children:"Hooks Manager"},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{marginBottom:1,children:h(e,{color:Y.colors.warning,children:"[WARN] Hooks execute shell commands with your full user permissions. Only use hooks from trusted sources."},void 0,!1,void 0,this)},void 0,!1,void 0,this),I&&h(O0,{flexDirection:"column",marginBottom:1,children:[h(e,{children:I},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="action"&&!I&&h(O0,{flexDirection:"column",children:[h(O0,{flexDirection:"column",marginTop:1,children:p$.map((T,P)=>h(O0,{children:[h(e,{color:P===X?Y.colors.primary:void 0,bold:P===X,children:[P===X?"> ":" ",T.action]},void 0,!0,void 0,this),h(e,{color:Y.colors.muted,children:[" - ",T.description]},void 0,!0,void 0,this)]},T.action,!0,void 0,this))},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Up/Down to select · Enter to continue · Esc to close"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="event"&&h(O0,{flexDirection:"column",children:[h(e,{bold:!0,children:"Select Event:"},void 0,!1,void 0,this),h(O0,{flexDirection:"column",marginTop:1,children:v8.map((T,P)=>h(O0,{children:[h(e,{color:P===U?Y.colors.primary:void 0,bold:P===U,children:[P===U?"> ":" ",T.event]},void 0,!0,void 0,this),h(e,{color:Y.colors.muted,children:[" - ",T.description]},void 0,!0,void 0,this)]},T.event,!0,void 0,this))},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Up/Down to select · Enter to continue · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J!=="event"&&h(O0,{marginBottom:1,children:h(e,{children:["Event:"," ",h(e,{bold:!0,color:Y.colors.primary,children:A.event},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:[" - ",A.description]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),(J==="matcher"||J==="command"||J==="confirm")&&h(O0,{flexDirection:"column",marginBottom:1,children:[h(e,{color:Y.colors.muted,children:"Input to command is JSON of tool call arguments."},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:"Exit code 0 - stdout/stderr not shown"},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:"Exit code 2 - show stderr to model and block tool call"},void 0,!1,void 0,this),h(e,{color:Y.colors.muted,children:"Other exit codes - show stderr to user only but continue with tool call"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="matcher"&&h(O0,{flexDirection:"column",children:[h(O0,{children:[h(e,{bold:!0,children:"Matcher: "},void 0,!1,void 0,this),h(J9,{value:G,onChange:_,onSubmit:p,placeholder:"e.g., Read, Bash, Edit|Write (empty = all tools)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Tool name pattern (supports | for multiple). Leave empty to match all."},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Enter to continue · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(J==="command"||J==="confirm")&&h(O0,{marginBottom:1,children:h(e,{children:["Matcher: ",h(e,{bold:!0,children:G||"(all tools)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),J==="command"&&h(O0,{flexDirection:"column",children:[h(O0,{children:h(e,{bold:!0,children:"Command: "},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{borderStyle:"single",borderColor:Y.colors.border.light,paddingX:1,marginTop:1,children:h(J9,{value:O,onChange:N,onSubmit:V,placeholder:"Enter shell command..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(O0,{flexDirection:"column",marginTop:1,children:[h(e,{bold:!0,children:"Examples:"},void 0,!1,void 0,this),n3.map((T,P)=>h(e,{color:Y.colors.muted,children:["• ",T]},P,!0,void 0,this))]},void 0,!0,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Enter to continue · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="location"&&h(O0,{flexDirection:"column",children:[h(O0,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.border.light,paddingX:2,paddingY:1,marginBottom:1,children:[h(e,{bold:!0,color:Y.colors.primary,children:"Save hook configuration"},void 0,!1,void 0,this),h(e,{children:" "},void 0,!1,void 0,this),h(e,{children:[" ","Event: ",A.event," - ",A.description]},void 0,!0,void 0,this),h(e,{children:[" Matcher: ",G||"(all)"]},void 0,!0,void 0,this),h(e,{children:[" Command: ",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h(e,{bold:!0,children:"Where should this hook be saved?"},void 0,!1,void 0,this),h(O0,{flexDirection:"column",marginTop:1,children:y8.map((T,P)=>h(O0,{children:[h(e,{color:P===K?Y.colors.primary:void 0,bold:P===K,children:[P===K?"> ":" ",P+1,". ",T.name]},void 0,!0,void 0,this),h(e,{color:Y.colors.muted,children:[" ",T.description]},void 0,!0,void 0,this)]},T.location,!0,void 0,this))},void 0,!1,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:"Enter to confirm · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="confirm"&&h(O0,{flexDirection:"column",children:[h(O0,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.success,paddingX:2,paddingY:1,children:[h(e,{bold:!0,children:["Saving hook to ",b.description,"..."]},void 0,!0,void 0,this),h(e,{children:" "},void 0,!1,void 0,this),h(e,{children:["Event: ",A.event]},void 0,!0,void 0,this),h(e,{children:["Matcher: ",G||"(all tools)"]},void 0,!0,void 0,this),h(e,{children:["Command: ",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h(O0,{marginTop:1,children:h(e,{color:Y.colors.muted,children:L?"Saving...":"Enter to confirm · Esc to go back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W&&h(O0,{marginTop:1,children:h(e,{color:Y.colors.error,children:W},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useMemoizedFn as N9}from"ahooks";import{Box as UY,Text as GY}from"ink";import KY from"react";import{useMemoizedFn as QY}from"ahooks";import s1 from"chalk";import{Text as JY,useInput as YY}from"ink";import{useEffect as hQ,useRef as mQ}from"react";var F1={TIMEOUT_MS:100,RAPID_INPUT_THRESHOLD_MS:150,LARGE_INPUT_THRESHOLD:300,MEDIUM_SIZE_MULTI_CHUNK_THRESHOLD:200};import{execSync as A$}from"node:child_process";import{existsSync as t3,readFileSync as jQ}from"node:fs";import{basename as Z9,isAbsolute as s3}from"node:path";function X9($){try{let Q=Buffer.from($,"base64");if(Q.length<4)return"image/png";if(Q[0]===137&&Q[1]===80&&Q[2]===78&&Q[3]===71)return"image/png";if(Q[0]===255&&Q[1]===216&&Q[2]===255)return"image/jpeg";if(Q[0]===71&&Q[1]===73&&Q[2]===70)return"image/gif";if(Q[0]===82&&Q[1]===73&&Q[2]===70&&Q[3]===70){if(Q.length>=12&&Q[8]===87&&Q[9]===69&&Q[10]===66&&Q[11]===80)return"image/webp"}return"image/png"}catch{return"image/png"}}function q9(){let $=process.platform,Q={darwin:"/tmp/blade_cli_latest_screenshot.png",linux:"/tmp/blade_cli_latest_screenshot.png",win32:process.env.TEMP?`${process.env.TEMP}\\blade_cli_latest_screenshot.png`:"C:\\Temp\\blade_cli_latest_screenshot.png"},Y={darwin:{checkImage:"osascript -e 'the clipboard as «class PNGf»'",saveImage:(J)=>`osascript -e 'set png_data to (the clipboard as «class PNGf»)' -e 'set fp to open for access POSIX file "${J}" with write permission' -e 'write png_data to fp' -e 'close access fp'`,getPath:"osascript -e 'get POSIX path of (the clipboard as «class furl»)'",deleteFile:(J)=>`rm -f "${J}"`},linux:{checkImage:'xclip -selection clipboard -t TARGETS -o | grep -E "image/(png|jpeg|jpg|gif|webp)"',saveImage:(J)=>`xclip -selection clipboard -t image/png -o > "${J}" || wl-paste --type image/png > "${J}"`,getPath:"xclip -selection clipboard -t text/plain -o",deleteFile:(J)=>`rm -f "${J}"`},win32:{checkImage:'powershell -Command "(Get-Clipboard -Format Image) -ne $null"',saveImage:(J)=>`powershell -Command "$img = Get-Clipboard -Format Image; if ($img) { $img.Save('${J.replace(/\\/g,"\\\\")}', [System.Drawing.Imaging.ImageFormat]::Png) }"`,getPath:'powershell -Command "Get-Clipboard"',deleteFile:(J)=>`del /f "${J}"`}};return{commands:Y[$]||Y.linux,screenshotPath:Q[$]||Q.linux}}function e3(){let{commands:$}=q9();try{return A$($.getPath,{encoding:"utf-8"}).trim()}catch(Q){return console.error("Failed to get clipboard path:",Q),null}}function U9($){if($.startsWith('"')&&$.endsWith('"')||$.startsWith("'")&&$.endsWith("'"))return $.slice(1,-1);return $}function G9($){if(process.platform==="win32")return $;let Q="__DOUBLE_BACKSLASH__";return $.replace(/\\\\/g,Q).replace(/\\(.)/g,"$1").replace(new RegExp(Q,"g"),"\\")}function EQ($){let Q=U9($.trim()),Y=G9(Q);return/\.(png|jpe?g|gif|webp)$/i.test(Y)}function $Y($){let Q=U9($.trim()),Y=G9(Q);if(EQ(Y))return Y;return null}async function K9($){let Q=$Y($);if(!Q)return null;let Y;try{if(s3(Q))Y=jQ(Q);else{let q=e3();if(q&&Q===Z9(q))Y=jQ(q);else return null}}catch(q){return console.error("Failed to read image file:",q),null}let J=Y.toString("base64"),Z=X9(J),X=Z9(Q);return{path:Q,base64:J,mediaType:Z,filename:X}}async function O9(){let $=process.platform,Q={darwin:"pbpaste",linux:"xclip -selection clipboard -o || wl-paste",win32:'powershell -Command "Get-Clipboard"'},Y=Q[$]||Q.linux;try{return A$(Y,{encoding:"utf-8"})||null}catch{return null}}async function z9(){let{commands:$,screenshotPath:Q}=q9();try{if(A$($.checkImage,{stdio:"ignore"}),A$($.saveImage(Q),{stdio:"ignore"}),!t3(Q))return null;let J=jQ(Q).toString("base64"),Z=X9(J);return A$($.deleteFile(Q),{stdio:"ignore"}),{base64:J,mediaType:Z}}catch(Y){try{A$($.deleteFile(Q),{stdio:"ignore"})}catch{}return null}}import{jsxDEV as qY}from"react/jsx-dev-runtime";var ZY=/\r\n/g,XY=/\r/g;function e1($){if(!$.includes("\r"))return $;return $.replace(ZY,`
137
137
  `).replace(XY,`
138
138
  `)}function $$($,Q,Y){let J=Math.max(0,Math.min(Y,Q.length)),Z=Q.slice(0,J),X=Q.slice(J);return{newValue:Z+$+X,newCursorPosition:J+$.length}}function _9({value:$,placeholder:Q="",focus:Y=!0,onChange:J,cursorPosition:Z,onChangeCursorPosition:X,onPaste:q,onImagePaste:U,disabledKeys:z=[]}){let K=mQ({chunks:[],timeoutId:null,firstInputTime:null,lastInputTime:null,totalLength:0}),F=mQ($),G=mQ(Z);hQ(()=>{F.current=$,G.current=Z},[$,Z]),hQ(()=>{return()=>{if(K.current.timeoutId)clearTimeout(K.current.timeoutId)}},[]),hQ(()=>{if(Z>$.length)X($.length)},[$,Z,X]);let _=QY(()=>{let B=K.current;if(B.timeoutId)clearTimeout(B.timeoutId);let L=setTimeout(async()=>{let w=K.current.chunks,I=K.current.totalLength;if(w.length===0)return;let k=e1(w.join(""));K.current={chunks:[],timeoutId:null,firstInputTime:null,lastInputTime:null,totalLength:0};let v=F.current,A=G.current;if(U&&EQ(k))try{let p=await K9(k);if(p){let V=await U(p.base64,p.mediaType,p.filename);if(V?.prompt){let u=e1(V.prompt),{newValue:T,newCursorPosition:P}=$$(u,v,A);J(T),X(P)}return}}catch(p){console.error("Failed to process image path:",p)}let b=k.includes(`
139
- `),W=I>F1.MEDIUM_SIZE_MULTI_CHUNK_THRESHOLD&&w.length>3;if((I>F1.LARGE_INPUT_THRESHOLD||b||W)&&q){let p=await q(k);if(p?.prompt){let V=e1(p.prompt),{newValue:u,newCursorPosition:T}=$$(V,v,A);J(u),X(T);return}}let{newValue:j,newCursorPosition:E}=$$(k,v,A);J(j),X(E)},F1.TIMEOUT_MS);K.current.timeoutId=L});YY((B,L)=>{let w=e1(B);if(z.some((W)=>L[W])||L.ctrl&&B==="c"||L.ctrl&&B==="l"||L.ctrl&&B==="t"||L.ctrl&&B==="o"||L.meta&&B==="l"||L.meta&&B==="t"||L.meta&&B==="o"||L.shift&&L.tab||w==="?"&&$==="")return;let k=Date.now(),v=K.current,A=Z,b=$;if(L.leftArrow)A--;else if(L.rightArrow)A++;else if(L.backspace||L.delete){if(B===""){if(Z>0)b=$.slice(0,Z-1)+$.slice(Z,$.length),A--}else if(Z<$.length)b=$.slice(0,Z)+$.slice(Z+1,$.length)}else if(L.ctrl&&w==="a")A=0;else if(L.ctrl&&w==="e")A=$.length;else if(L.ctrl&&w==="k")b=$.slice(0,Z);else if(L.ctrl&&w==="u")b=$.slice(Z),A=0;else if(L.ctrl&&w==="w"){let R=$.slice(0,Z).match(/\s*\S+\s*$/);if(R){let j=R[0].length;b=$.slice(0,Z-j)+$.slice(Z),A-=j}}else if(L.ctrl&&w==="v"){let W=process.platform==="darwin";(async()=>{if(U){let j=await z9();if(j){let E=await U(j.base64,j.mediaType,"clipboard.png");if(E?.prompt){let p=e1(E.prompt),{newValue:V,newCursorPosition:u}=$$(p,F.current,G.current);J(V),X(u)}return}}if(W)return;let R=await O9();if(R){let j=e1(R),E=j.includes(`
139
+ `),H=I>F1.MEDIUM_SIZE_MULTI_CHUNK_THRESHOLD&&w.length>3;if((I>F1.LARGE_INPUT_THRESHOLD||b||H)&&q){let p=await q(k);if(p?.prompt){let V=e1(p.prompt),{newValue:u,newCursorPosition:T}=$$(V,v,A);J(u),X(T);return}}let{newValue:j,newCursorPosition:E}=$$(k,v,A);J(j),X(E)},F1.TIMEOUT_MS);K.current.timeoutId=L});YY((B,L)=>{let w=e1(B);if(z.some((H)=>L[H])||L.ctrl&&B==="c"||L.ctrl&&B==="l"||L.ctrl&&B==="t"||L.ctrl&&B==="o"||L.meta&&B==="l"||L.meta&&B==="t"||L.meta&&B==="o"||L.shift&&L.tab||w==="?"&&$==="")return;let k=Date.now(),v=K.current,A=Z,b=$;if(L.leftArrow)A--;else if(L.rightArrow)A++;else if(L.backspace||L.delete){if(B===""){if(Z>0)b=$.slice(0,Z-1)+$.slice(Z,$.length),A--}else if(Z<$.length)b=$.slice(0,Z)+$.slice(Z+1,$.length)}else if(L.ctrl&&w==="a")A=0;else if(L.ctrl&&w==="e")A=$.length;else if(L.ctrl&&w==="k")b=$.slice(0,Z);else if(L.ctrl&&w==="u")b=$.slice(Z),A=0;else if(L.ctrl&&w==="w"){let R=$.slice(0,Z).match(/\s*\S+\s*$/);if(R){let j=R[0].length;b=$.slice(0,Z-j)+$.slice(Z),A-=j}}else if(L.ctrl&&w==="v"){let H=process.platform==="darwin";(async()=>{if(U){let j=await z9();if(j){let E=await U(j.base64,j.mediaType,"clipboard.png");if(E?.prompt){let p=e1(E.prompt),{newValue:V,newCursorPosition:u}=$$(p,F.current,G.current);J(V),X(u)}return}}if(H)return;let R=await O9();if(R){let j=e1(R),E=j.includes(`
140
140
  `),p=j.length>F1.LARGE_INPUT_THRESHOLD;if((E||p)&&q){let T=await q(j);if(T?.prompt){let P=e1(T.prompt),{newValue:y,newCursorPosition:Y0}=$$(P,F.current,G.current);J(y),X(Y0);return}}let{newValue:V,newCursorPosition:u}=$$(j,F.current,G.current);J(V),X(u)}})().catch(()=>{});return}else if(L.pageUp)A=0;else if(L.pageDown)A=$.length;else if(w===`
141
- `&&(L.shift||L.meta)){let{newValue:W,newCursorPosition:R}=$$(w,$,Z);J(W),X(R);return}else if(!L.ctrl&&!L.meta){if(!v.firstInputTime)v.firstInputTime=k;v.lastInputTime=k;let W=k-(v.firstInputTime||k),R=w.length>F1.LARGE_INPUT_THRESHOLD,j=w.includes(`
142
- `)&&w.length>1,E=W<F1.RAPID_INPUT_THRESHOLD_MS&&v.chunks.length>0,p=W<F1.RAPID_INPUT_THRESHOLD_MS&&w.length>10,V=v.timeoutId!==null;if(q&&(R||j||E||p||V)){v.chunks.push(w),v.totalLength+=w.length,_();return}if(w.length===1&&!v.timeoutId)v.chunks=[],v.firstInputTime=null,v.lastInputTime=null,v.totalLength=0;b=$.slice(0,Z)+w+$.slice(Z,$.length),A+=w.length}if(A<0)A=0;if(A>b.length)A=b.length;if(b!==$)J(b);if(A!==Z)X(A)},{isActive:Y});let O=Y,N=$,H=Q?s1.grey(Q):void 0;if(O)if(H=Q.length>0?s1.inverse(Q[0])+s1.grey(Q.slice(1)):s1.inverse(" "),$.length===0)N=s1.inverse(" ");else{N="";for(let B=0;B<$.length;B++)if(B===Z&&Z<$.length)N+=s1.inverse($[B]);else N+=$[B];if(Z>=$.length)N+=s1.inverse(" ")}return qY(JY,{children:Q?$.length>0?N:H:N},void 0,!1,void 0,this)}import{jsxDEV as pQ}from"react/jsx-dev-runtime";var H9=KY.memo(({input:$,cursorPosition:Q,onChange:Y,onChangeCursorPosition:J,onAddPasteMapping:Z,onAddImagePasteMapping:X})=>{let U=l0()==="main-input",z=N9((F)=>{let G=F.split(`
143
- `).length,_=F.length,O=500,N=10;if(_>500||G>10){let H=Z(F),B=F.slice(0,30).replace(/\n/g," "),L=`${_} chars, ${G} lines: ${B}...`;return{prompt:`${K8(H)}${L}${t8()}`}}return{}}),K=N9(async(F,G,_)=>{try{let O=X(F,G);return{prompt:`${K8(O)}[Image #${O}]${t8()}`}}catch(O){return console.error("[Image Paste] Failed to process image:",O),{prompt:`[Image paste failed: ${O instanceof Error?O.message:"Unknown error"}] `}}});return pQ(UY,{flexDirection:"row",width:"100%",paddingX:2,paddingY:0,flexShrink:0,flexGrow:0,overflow:"hidden",borderStyle:"round",borderColor:"gray",children:[pQ(GY,{color:"blue",bold:!0,children:"> "},void 0,!1,void 0,this),pQ(_9,{value:$,cursorPosition:Q,onChange:Y,onChangeCursorPosition:J,onPaste:z,onImagePaste:K,placeholder:" 输入命令...",focus:U,disabledKeys:["upArrow","downArrow","tab","return","escape"]},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as R8,Text as Z1}from"ink";import HY,{useEffect as WY,useState as FY}from"react";import{useEffect as NY,useState as B9}from"react";import{useEffect as OY,useState as zY}from"react";var _Y=15000,W9=["思考中","构思中","推理中","琢磨中","分析中","斟酌中","酝酿中","推敲中","揣摩中","审视中","处理中","编排中","打磨中","编织中","拼装中","调配中","组装中","搭建中","铸造中","雕琢中","搜寻中","梳理中","排查中","勘探中","钻研中","翻阅中","遍历中","扫描中","检索中","追踪中","计算中","编译中","解析中","运算中","推演中","迭代中","收敛中","演绎中","归纳中","求解中","生成中","编写中","起草中","绘制中","勾勒中","渲染中","合成中","调和中","编曲中","烹制中","施工中","酿造中","发酵中","煎熬中","折腾中","捣鼓中","鼓捣中","腾挪中","筹备中","蓄力中"],F9=["Esc - 中止任务 / 隐藏建议 / 双击清空输入","Shift+Tab - 切换模式 (DEFAULT → AUTO_EDIT → PLAN)","Tab - 选中建议 / 切换 thinking 模式","Up/Down - 浏览建议或输入历史","? - 显示快捷键帮助(输入框为空时)","Ctrl+C - 停止任务(双击退出)","Ctrl+L - 清屏","Ctrl+T - 展开/折叠 thinking 内容","Ctrl+O - 展开/折叠历史消息","Ctrl+A / Ctrl+E - 光标跳到行首/行尾","Ctrl+U / Ctrl+K - 删到行首/行尾","Ctrl+W - 删除前一个单词","Shift+Enter - 插入换行","/help - 显示所有可用命令","/init - 分析项目并生成 BLADE.md","/resume - 恢复历史会话","/compact - 压缩上下文,节省 token","/theme - 切换主题","/model - 管理和切换模型","/permissions - 管理权限规则","/mcp - 查看 MCP 服务器状态","/agents - 管理 subagent 配置","/clear - 清除对话历史","/status - 查看当前配置","/context - 可视化 token 使用情况","/git - Git 查询和 AI 辅助","/git review - AI Code Review","/git commit - AI 生成 commit message","/hooks - 管理 Hook 配置","/tasks - 查看后台任务","/skills - 查看可用 Skills","/plugins - 管理插件","/memory - 管理项目记忆","/ide - 管理 IDE 集成","@ 文件路径 - 附加文件到上下文","@dir/ - 附加整个目录","@file.ts:10-20 - 附加指定行范围","Plan 模式 - 先规划后编码(Shift+Tab 切换)","Auto Edit 模式 - 自动批准工具调用","MCP 协议 - 扩展外部工具集成","Subagents - 并行执行子任务","Hooks - 自定义工具执行流程","Skills - 可复用的技能模板","Plugins - 扩展功能插件","提示:/init 让 AI 理解你的项目结构","提示:Plan 模式适合复杂多步骤任务","提示:Auto Edit 可加速重复性操作","提示:@ 引用可提供更精准的上下文","提示:定期 /compact 节省 token","提示:Esc 可随时中断任务","提示:/resume 继续未完成的对话","提示:/model once 临时切换模型"];function L9($,Q,Y=!1){let[J,Z]=zY("");return OY(()=>{if(Q){Z("等待用户确认...");return}if(!$){Z("");return}if(Y)return;let X=()=>{if(Math.random()<0.25){let K=Math.floor(Math.random()*F9.length);return F9[K]}let z=Math.floor(Math.random()*W9.length);return W9[z]};Z(X());let q=setInterval(()=>{Z(X())},_Y);return()=>{clearInterval(q)}},[$,Q,Y]),J}function w9($,Q=!1,Y=!1){let[J,Z]=B9(0),[X,q]=B9(null),U=L9($,Q,Y);return NY(()=>{if(!$){Z(0),q(null);return}if(Y)return;if(X===null)q(Date.now());let z=setInterval(()=>{if(X!==null){let K=Math.floor((Date.now()-X)/1000);Z(K)}},1000);return()=>{clearInterval(z)}},[$,X,Y]),{currentPhrase:U,elapsedTime:J}}import{jsxDEV as h0,Fragment as BY}from"react/jsx-dev-runtime";var gQ=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],LY=80;function b9($){if($<60)return`${$}s`;let Q=Math.floor($/60),Y=$%60;return`${Q}m ${Y}s`}var A9=HY.memo(({message:$,paused:Q=!1})=>{let Y=M1(),J=o$(),Z=Y||!J,[X,q]=FY(0),U=W0(),K=N$()>=LY,{currentPhrase:F,elapsedTime:G}=w9(Z,!1,Q);if(WY(()=>{if(!Z||Q){q(0);return}let O=setInterval(()=>{q((N)=>(N+1)%gQ.length)},150);return()=>clearInterval(O)},[Z,Q]),!Z)return null;let _=$||F||"正在思考中...";if(K)return h0(R8,{paddingX:2,paddingBottom:1,flexDirection:"row",gap:1,children:[h0(Z1,{color:U.colors.warning,bold:!0,children:gQ[X]},void 0,!1,void 0,this),h0(Z1,{color:U.colors.text.primary,children:_},void 0,!1,void 0,this),G>0&&h0(BY,{children:[h0(Z1,{color:U.colors.muted,children:"|"},void 0,!1,void 0,this),h0(Z1,{color:U.colors.info,children:["已用时: ",b9(G)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h0(Z1,{color:U.colors.muted,children:"|"},void 0,!1,void 0,this),h0(Z1,{color:U.colors.secondary,children:"Esc 取消"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return h0(R8,{paddingX:2,paddingBottom:1,flexDirection:"column",children:[h0(R8,{flexDirection:"row",gap:1,children:[h0(Z1,{color:U.colors.warning,bold:!0,children:gQ[X]},void 0,!1,void 0,this),h0(Z1,{color:U.colors.text.primary,children:_},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G>0&&h0(R8,{marginLeft:2,flexDirection:"row",gap:1,children:[h0(Z1,{color:U.colors.info,children:["已用时: ",b9(G)]},void 0,!0,void 0,this),h0(Z1,{color:U.colors.muted,children:"|"},void 0,!1,void 0,this),h0(Z1,{color:U.colors.secondary,children:"Esc 取消"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import T8 from"ansi-escapes";import{Box as E1,Static as V9,useStdout as DY}from"ink";import VY,{useEffect as w1,useMemo as j9,useRef as h1,useState as aQ}from"react";import{useStdout as wY}from"ink";import{debounce as bY}from"lodash-es";import{useEffect as AY,useState as yY}from"react";function y9($=200){let{stdout:Q}=wY(),[Y,J]=yY(Q.rows||24);return AY(()=>{let Z=bY(()=>{J(Q.rows||24)},$);return Z(),Q.on("resize",Z),()=>{Q.off("resize",Z),Z.cancel()}},[Q,$]),Y}import Q$ from"chalk";import vY from"string-width";var U0={active:!1,renderedLineCount:0,lastRenderedLines:[],terminalWidth:process.stdout.columns||80,terminalHeight:process.stdout.rows||24,prefixIndent:4,isFirstRender:!0},I8="\x1B",cQ=`${I8}[2K`,P8=($)=>$>0?`${I8}[${$}A`:"",v9=`${I8}[?25l`,R9=`${I8}[?25h`;function P9($,Q){U0.active=!0,U0.renderedLineCount=0,U0.lastRenderedLines=[],U0.terminalWidth=$,U0.terminalHeight=Q,U0.isFirstRender=!0}function I9($,Q){U0.terminalWidth=$,U0.terminalHeight=Q}function M9($,Q,Y,J){if(!U0.active)return;let Z=8,X=Math.max(1,U0.terminalHeight-Z),q=[],U=E0.getTheme(),z=" ".repeat(U0.prefixIndent),K=Q$.dim.hex(U.colors.border.light);if(Q>0)q.push(`${z}${Q$.dim.hex(U.colors.text.muted)(`^ ${Q} lines above (streaming...)`)}`);let F=Y==="code",G=Y==="diff",_="",O=$;if(F&&$.length>0)_=$[0].match(/^```(\w+)?/)?.[1]||"",O=$.slice(1);else if(G&&$.length>0&&$[0]==="<<<DIFF>>>")O=$.slice(1);let N=O.slice(-X);if(F&&Q===0){let B=_?` ${Q$.hex(U.colors.text.secondary)(_)}`:"";q.push(`${z}${K("╭─")}${B}`)}for(let B=0;B<N.length;B++){let L=N[B],w=z;if(B===0&&!J&&U0.isFirstRender&&!F&&!G)w=Q$.bold.hex(U.colors.success)("• ")+" ",U0.isFirstRender=!1;let I=F?4:0,k=U0.terminalWidth-U0.prefixIndent-2-I,v=L;if(vY(L)>k)v=L.slice(0,k);if(F)q.push(`${z}${K("│")} ${v}`);else if(G){let A=v;if(A.startsWith("+"))q.push(`${w}${Q$.green(v)}`);else if(A.startsWith("-"))q.push(`${w}${Q$.red(v)}`);else if(A.startsWith("@@"))q.push(`${w}${Q$.dim(v)}`);else q.push(`${w}${v}`)}else q.push(`${w}${v}`);if(B===0&&!J&&U0.isFirstRender)U0.isFirstRender=!1}let H=[];if(H.push(v9),U0.renderedLineCount>0)H.push(P8(U0.renderedLineCount)),H.push("\r");for(let B=0;B<q.length;B++){let L=q[B],w=U0.lastRenderedLines[B];if(L!==w)H.push(cQ),H.push(L);if(B<q.length-1)H.push(`
144
- `)}if(q.length<U0.renderedLineCount){for(let L=q.length;L<U0.renderedLineCount;L++)H.push(`
145
- `),H.push(cQ);let B=U0.renderedLineCount-q.length;H.push(P8(B))}H.push(R9),process.stdout.write(H.join("")),U0.renderedLineCount=q.length,U0.lastRenderedLines=q}function L1(){if(!U0.active)return;if(U0.renderedLineCount>0){let $=[];$.push(v9),$.push(P8(U0.renderedLineCount)),$.push("\r");for(let Q=0;Q<U0.renderedLineCount;Q++)if($.push(cQ),Q<U0.renderedLineCount-1)$.push(`
141
+ `&&(L.shift||L.meta)){let{newValue:H,newCursorPosition:R}=$$(w,$,Z);J(H),X(R);return}else if(!L.ctrl&&!L.meta){if(!v.firstInputTime)v.firstInputTime=k;v.lastInputTime=k;let H=k-(v.firstInputTime||k),R=w.length>F1.LARGE_INPUT_THRESHOLD,j=w.includes(`
142
+ `)&&w.length>1,E=H<F1.RAPID_INPUT_THRESHOLD_MS&&v.chunks.length>0,p=H<F1.RAPID_INPUT_THRESHOLD_MS&&w.length>10,V=v.timeoutId!==null;if(q&&(R||j||E||p||V)){v.chunks.push(w),v.totalLength+=w.length,_();return}if(w.length===1&&!v.timeoutId)v.chunks=[],v.firstInputTime=null,v.lastInputTime=null,v.totalLength=0;b=$.slice(0,Z)+w+$.slice(Z,$.length),A+=w.length}if(A<0)A=0;if(A>b.length)A=b.length;if(b!==$)J(b);if(A!==Z)X(A)},{isActive:Y});let O=Y,N=$,W=Q?s1.grey(Q):void 0;if(O)if(W=Q.length>0?s1.inverse(Q[0])+s1.grey(Q.slice(1)):s1.inverse(" "),$.length===0)N=s1.inverse(" ");else{N="";for(let B=0;B<$.length;B++)if(B===Z&&Z<$.length)N+=s1.inverse($[B]);else N+=$[B];if(Z>=$.length)N+=s1.inverse(" ")}return qY(JY,{children:Q?$.length>0?N:W:N},void 0,!1,void 0,this)}import{jsxDEV as pQ}from"react/jsx-dev-runtime";var H9=KY.memo(({input:$,cursorPosition:Q,onChange:Y,onChangeCursorPosition:J,onAddPasteMapping:Z,onAddImagePasteMapping:X})=>{let U=l0()==="main-input",z=N9((F)=>{let G=F.split(`
143
+ `).length,_=F.length,O=500,N=10;if(_>500||G>10){let W=Z(F),B=F.slice(0,30).replace(/\n/g," "),L=`${_} chars, ${G} lines: ${B}...`;return{prompt:`${K8(W)}${L}${t8()}`}}return{}}),K=N9(async(F,G,_)=>{try{let O=X(F,G);return{prompt:`${K8(O)}[Image #${O}]${t8()}`}}catch(O){return console.error("[Image Paste] Failed to process image:",O),{prompt:`[Image paste failed: ${O instanceof Error?O.message:"Unknown error"}] `}}});return pQ(UY,{flexDirection:"row",width:"100%",paddingX:2,paddingY:0,flexShrink:0,flexGrow:0,overflow:"hidden",borderStyle:"round",borderColor:"gray",children:[pQ(GY,{color:"blue",bold:!0,children:"> "},void 0,!1,void 0,this),pQ(_9,{value:$,cursorPosition:Q,onChange:Y,onChangeCursorPosition:J,onPaste:z,onImagePaste:K,placeholder:" 输入命令...",focus:U,disabledKeys:["upArrow","downArrow","tab","return","escape"]},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{Box as R8,Text as Z1}from"ink";import HY,{useEffect as WY,useState as FY}from"react";import{useEffect as NY,useState as B9}from"react";import{useEffect as OY,useState as zY}from"react";var _Y=15000,W9=["思考中","构思中","推理中","琢磨中","分析中","斟酌中","酝酿中","推敲中","揣摩中","审视中","处理中","编排中","打磨中","编织中","拼装中","调配中","组装中","搭建中","铸造中","雕琢中","搜寻中","梳理中","排查中","勘探中","钻研中","翻阅中","遍历中","扫描中","检索中","追踪中","计算中","编译中","解析中","运算中","推演中","迭代中","收敛中","演绎中","归纳中","求解中","生成中","编写中","起草中","绘制中","勾勒中","渲染中","合成中","调和中","编曲中","烹制中","施工中","酿造中","发酵中","煎熬中","折腾中","捣鼓中","鼓捣中","腾挪中","筹备中","蓄力中"],F9=["Esc - 中止任务 / 隐藏建议 / 双击清空输入","Shift+Tab - 切换模式 (DEFAULT → AUTO_EDIT → PLAN)","Tab - 选中建议 / 切换 thinking 模式","Up/Down - 浏览建议或输入历史","? - 显示快捷键帮助(输入框为空时)","Ctrl+C - 停止任务(双击退出)","Ctrl+L - 清屏","Ctrl+T - 展开/折叠 thinking 内容","Ctrl+O - 展开/折叠历史消息","Ctrl+A / Ctrl+E - 光标跳到行首/行尾","Ctrl+U / Ctrl+K - 删到行首/行尾","Ctrl+W - 删除前一个单词","Shift+Enter - 插入换行","/help - 显示所有可用命令","/init - 分析项目并生成 BLADE.md","/resume - 恢复历史会话","/compact - 压缩上下文,节省 token","/theme - 切换主题","/model - 管理和切换模型","/permissions - 管理权限规则","/mcp - 查看 MCP 服务器状态","/agents - 管理 subagent 配置","/clear - 清除对话历史","/status - 查看当前配置","/context - 可视化 token 使用情况","/git - Git 查询和 AI 辅助","/git review - AI Code Review","/git commit - AI 生成 commit message","/hooks - 管理 Hook 配置","/tasks - 查看后台任务","/skills - 查看可用 Skills","/plugins - 管理插件","/memory - 管理项目记忆","/ide - 管理 IDE 集成","@ 文件路径 - 附加文件到上下文","@dir/ - 附加整个目录","@file.ts:10-20 - 附加指定行范围","Plan 模式 - 先规划后编码(Shift+Tab 切换)","Auto Edit 模式 - 自动批准工具调用","MCP 协议 - 扩展外部工具集成","Subagents - 并行执行子任务","Hooks - 自定义工具执行流程","Skills - 可复用的技能模板","Plugins - 扩展功能插件","提示:/init 让 AI 理解你的项目结构","提示:Plan 模式适合复杂多步骤任务","提示:Auto Edit 可加速重复性操作","提示:@ 引用可提供更精准的上下文","提示:定期 /compact 节省 token","提示:Esc 可随时中断任务","提示:/resume 继续未完成的对话","提示:/model once 临时切换模型"];function L9($,Q,Y=!1){let[J,Z]=zY("");return OY(()=>{if(Q){Z("等待用户确认...");return}if(!$){Z("");return}if(Y)return;let X=()=>{if(Math.random()<0.25){let K=Math.floor(Math.random()*F9.length);return F9[K]}let z=Math.floor(Math.random()*W9.length);return W9[z]};Z(X());let q=setInterval(()=>{Z(X())},_Y);return()=>{clearInterval(q)}},[$,Q,Y]),J}function w9($,Q=!1,Y=!1){let[J,Z]=B9(0),[X,q]=B9(null),U=L9($,Q,Y);return NY(()=>{if(!$){Z(0),q(null);return}if(Y)return;if(X===null)q(Date.now());let z=setInterval(()=>{if(X!==null){let K=Math.floor((Date.now()-X)/1000);Z(K)}},1000);return()=>{clearInterval(z)}},[$,X,Y]),{currentPhrase:U,elapsedTime:J}}import{jsxDEV as h0,Fragment as BY}from"react/jsx-dev-runtime";var gQ=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],LY=80;function b9($){if($<60)return`${$}s`;let Q=Math.floor($/60),Y=$%60;return`${Q}m ${Y}s`}var A9=HY.memo(({message:$,paused:Q=!1})=>{let Y=M1(),J=o$(),Z=Y||!J,[X,q]=FY(0),U=W0(),K=N$()>=LY,{currentPhrase:F,elapsedTime:G}=w9(Z,!1,Q);if(WY(()=>{if(!Z||Q){q(0);return}let O=setInterval(()=>{q((N)=>(N+1)%gQ.length)},150);return()=>clearInterval(O)},[Z,Q]),!Z)return null;let _=$||F||"正在思考中...";if(K)return h0(R8,{paddingX:2,paddingBottom:1,flexDirection:"row",gap:1,children:[h0(Z1,{color:U.colors.warning,bold:!0,children:gQ[X]},void 0,!1,void 0,this),h0(Z1,{color:U.colors.text.primary,children:_},void 0,!1,void 0,this),G>0&&h0(BY,{children:[h0(Z1,{color:U.colors.muted,children:"|"},void 0,!1,void 0,this),h0(Z1,{color:U.colors.info,children:["已用时: ",b9(G)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h0(Z1,{color:U.colors.muted,children:"|"},void 0,!1,void 0,this),h0(Z1,{color:U.colors.secondary,children:"Esc 取消"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return h0(R8,{paddingX:2,paddingBottom:1,flexDirection:"column",children:[h0(R8,{flexDirection:"row",gap:1,children:[h0(Z1,{color:U.colors.warning,bold:!0,children:gQ[X]},void 0,!1,void 0,this),h0(Z1,{color:U.colors.text.primary,children:_},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G>0&&h0(R8,{marginLeft:2,flexDirection:"row",gap:1,children:[h0(Z1,{color:U.colors.info,children:["已用时: ",b9(G)]},void 0,!0,void 0,this),h0(Z1,{color:U.colors.muted,children:"|"},void 0,!1,void 0,this),h0(Z1,{color:U.colors.secondary,children:"Esc 取消"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import T8 from"ansi-escapes";import{Box as E1,Static as V9,useStdout as DY}from"ink";import VY,{useEffect as w1,useMemo as j9,useRef as h1,useState as aQ}from"react";import{useStdout as wY}from"ink";import{debounce as bY}from"lodash-es";import{useEffect as AY,useState as yY}from"react";function y9($=200){let{stdout:Q}=wY(),[Y,J]=yY(Q.rows||24);return AY(()=>{let Z=bY(()=>{J(Q.rows||24)},$);return Z(),Q.on("resize",Z),()=>{Q.off("resize",Z),Z.cancel()}},[Q,$]),Y}import Q$ from"chalk";import vY from"string-width";var U0={active:!1,renderedLineCount:0,lastRenderedLines:[],terminalWidth:process.stdout.columns||80,terminalHeight:process.stdout.rows||24,prefixIndent:4,isFirstRender:!0},I8="\x1B",cQ=`${I8}[2K`,P8=($)=>$>0?`${I8}[${$}A`:"",v9=`${I8}[?25l`,R9=`${I8}[?25h`;function P9($,Q){U0.active=!0,U0.renderedLineCount=0,U0.lastRenderedLines=[],U0.terminalWidth=$,U0.terminalHeight=Q,U0.isFirstRender=!0}function I9($,Q){U0.terminalWidth=$,U0.terminalHeight=Q}function M9($,Q,Y,J){if(!U0.active)return;let Z=8,X=Math.max(1,U0.terminalHeight-Z),q=[],U=E0.getTheme(),z=" ".repeat(U0.prefixIndent),K=Q$.dim.hex(U.colors.border.light);if(Q>0)q.push(`${z}${Q$.dim.hex(U.colors.text.muted)(`^ ${Q} lines above (streaming...)`)}`);let F=Y==="code",G=Y==="diff",_="",O=$;if(F&&$.length>0)_=$[0].match(/^```(\w+)?/)?.[1]||"",O=$.slice(1);else if(G&&$.length>0&&$[0]==="<<<DIFF>>>")O=$.slice(1);let N=O.slice(-X);if(F&&Q===0){let B=_?` ${Q$.hex(U.colors.text.secondary)(_)}`:"";q.push(`${z}${K("╭─")}${B}`)}for(let B=0;B<N.length;B++){let L=N[B],w=z;if(B===0&&!J&&U0.isFirstRender&&!F&&!G)w=Q$.bold.hex(U.colors.success)("• ")+" ",U0.isFirstRender=!1;let I=F?4:0,k=U0.terminalWidth-U0.prefixIndent-2-I,v=L;if(vY(L)>k)v=L.slice(0,k);if(F)q.push(`${z}${K("│")} ${v}`);else if(G){let A=v;if(A.startsWith("+"))q.push(`${w}${Q$.green(v)}`);else if(A.startsWith("-"))q.push(`${w}${Q$.red(v)}`);else if(A.startsWith("@@"))q.push(`${w}${Q$.dim(v)}`);else q.push(`${w}${v}`)}else q.push(`${w}${v}`);if(B===0&&!J&&U0.isFirstRender)U0.isFirstRender=!1}let W=[];if(W.push(v9),U0.renderedLineCount>0)W.push(P8(U0.renderedLineCount)),W.push("\r");for(let B=0;B<q.length;B++){let L=q[B],w=U0.lastRenderedLines[B];if(L!==w)W.push(cQ),W.push(L);if(B<q.length-1)W.push(`
144
+ `)}if(q.length<U0.renderedLineCount){for(let L=q.length;L<U0.renderedLineCount;L++)W.push(`
145
+ `),W.push(cQ);let B=U0.renderedLineCount-q.length;W.push(P8(B))}W.push(R9),process.stdout.write(W.join("")),U0.renderedLineCount=q.length,U0.lastRenderedLines=q}function L1(){if(!U0.active)return;if(U0.renderedLineCount>0){let $=[];$.push(v9),$.push(P8(U0.renderedLineCount)),$.push("\r");for(let Q=0;Q<U0.renderedLineCount;Q++)if($.push(cQ),Q<U0.renderedLineCount-1)$.push(`
146
146
  `);if(U0.renderedLineCount>1)$.push(P8(U0.renderedLineCount-1)),$.push("\r");$.push(R9),process.stdout.write($.join(""))}U0.active=!1,U0.renderedLineCount=0,U0.lastRenderedLines=[],U0.isFirstRender=!0}function G1(){return U0.active}import{Box as RY,Text as T9}from"ink";import PY from"react";import{jsxDEV as xQ}from"react/jsx-dev-runtime";var uQ=PY.memo(({collapsedCount:$})=>{let Q=W0();if($<=0)return null;let Y=Q.colors.text.muted;return xQ(RY,{flexDirection:"row",marginBottom:1,children:[xQ(T9,{color:Y,children:[">"," ",$," 条历史消息"]},void 0,!0,void 0,this),xQ(T9,{color:Y,children:" [Ctrl+O 展开]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});uQ.displayName="CollapsedHistorySummary";import{Box as g$,Text as c$}from"ink";import IY from"ink-big-text";import MY from"ink-gradient";import TY from"react";import{jsxDEV as s0}from"react/jsx-dev-runtime";var C9=TY.memo(()=>{return s0(g$,{flexDirection:"column",paddingX:2,paddingTop:1,paddingBottom:1,children:[s0(g$,{flexDirection:"column",children:s0(MY,{name:"pastel",children:s0(IY,{text:"BLADE",font:"block"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),s0(g$,{marginBottom:1,children:s0(c$,{color:"white",dimColor:!0,children:k9()},void 0,!1,void 0,this)},void 0,!1,void 0,this),s0(g$,{flexDirection:"column",marginBottom:1,children:[s0(g$,{marginBottom:1,children:s0(c$,{color:"white",bold:!0,children:"使用指南:"},void 0,!1,void 0,this)},void 0,!1,void 0,this),s0(c$,{color:"white",children:"1. 输入问题、编辑文件或运行命令"},void 0,!1,void 0,this),s0(c$,{color:"white",children:"2. 使用 /init 创建项目配置文件"},void 0,!1,void 0,this),s0(c$,{color:"white",children:"3. 输入 /help 查看所有 slash 命令"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import{Box as dQ,Text as y$}from"ink";import kY,{useMemo as S9}from"react";import{jsxDEV as B1}from"react/jsx-dev-runtime";function CY($,Q=60){if(!$)return"";let Y=$.split(`
147
147
  `)[0]||"";if(Y.length<=Q)return Y;return`${Y.slice(0,Q)}...`}function SY($){if(!$)return 0;return $.split(`
148
- `).length}var lQ=kY.memo(({content:$,isStreaming:Q=!1,isExpanded:Y})=>{let J=W0(),Z=S9(()=>SY($),[$]),X=S9(()=>CY($),[$]),q=J.colors.info,U=J.colors.muted;return B1(dQ,{flexDirection:"column",marginBottom:1,children:[B1(dQ,{flexDirection:"row",children:[B1(y$,{color:q,children:Y?"v":">"},void 0,!1,void 0,this),B1(y$,{children:" "},void 0,!1,void 0,this),B1(y$,{color:U,children:["Thinking",Q?"...":` (${Z} lines)`]},void 0,!0,void 0,this),!Y&&!Q&&X&&B1(y$,{color:U,children:[" - ",X]},void 0,!0,void 0,this),B1(y$,{color:U,dimColor:!0,children:[" ","[Ctrl+T]"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y&&$&&B1(dQ,{marginLeft:2,marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,paddingY:0,children:B1(y$,{color:U,children:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});lQ.displayName="ThinkingBlock";import{Box as M8,Text as rQ}from"ink";import f9 from"react";import{jsxDEV as j1}from"react/jsx-dev-runtime";var D9=f9.memo(({tasks:$,visible:Q=!0,compact:Y=!1})=>{let{colors:J}=W0();if(!Q||$.length===0)return null;let Z={total:$.length,completed:$.filter((X)=>X.status==="completed").length,inProgress:$.filter((X)=>X.status==="in_progress").length};return j1(M8,{flexDirection:"column",borderStyle:"single",borderColor:J.border.light,paddingX:1,paddingY:Y?0:1,marginBottom:1,children:[j1(M8,{marginBottom:Y?0:1,children:[j1(rQ,{dimColor:!0,children:"Tasks "},void 0,!1,void 0,this),j1(rQ,{color:J.text.muted,children:[Z.completed,"/",Z.total]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j1(M8,{flexDirection:"column",children:$.map((X,q)=>j1(fY,{task:X,compact:Y},X.id||q,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}),fY=f9.memo(({task:$,compact:Q})=>{let Y,J=!1,Z;switch($.status){case"completed":Y="[OK]",J=!0,Z=$.subject;break;case"in_progress":Y=">",J=!1,Z=$.activeForm||$.subject;break;case"pending":default:Y="-",J=!0,Z=$.subject;break}return j1(M8,{paddingY:Q?0:0,children:j1(rQ,{dimColor:J,children:[Y," ",Z]},void 0,!0,void 0,this)},void 0,!1,void 0,this)});import{jsxDEV as S0}from"react/jsx-dev-runtime";var h9=VY.memo(()=>{let $=K6(),Q=k6(),Y=C6(),J=S6(),Z=M1(),X=F6(),q=b6(),U=n$(),z=M6(),K=T6(),F=O6(),G=D6(),_=f6(),O=N$(),N=y9(),{stdout:H}=DY(),B=P1(),[L,w]=aQ(null),[I,k]=aQ([]),[v,A]=aQ(new Set),b=h1(_),W=h1(null),R=h1(0),j=h1(0),E=h1(new Set),p=h1(new Set),V=h1([]),u=h1(null);w1(()=>{if(b.current!==_){if(G1())L1();if(H)H.write(T8.clearTerminal);B.incrementClearCount(),b.current=_}},[_,H,B]);let T=$,P=J;w1(()=>{if(!J||Z){u.current=null;return}if(u.current===J)return;if(u.current=J,G1())L1();if(H)H.write(T8.eraseScreen+T8.cursorTo(0,0));E.current=new Set,p.current=new Set(T.filter((f)=>f.role==="tool").map((f)=>f.id)),W.current=null,R.current=0,j.current=0,V.current=[],k([]),A(new Set),B.incrementClearCount(),B.clearFinalizingStreamingMessageId()},[J,Z,H,B,T]);let y=Q??J;w1(()=>{if(G1())L1();W.current=null,R.current=0,j.current=0,E.current=new Set,p.current=new Set(T.filter((f)=>f.role==="tool").map((f)=>f.id)),V.current=[],k([]),A(new Set)},[F]),w1(()=>{if(!y)return;if(W.current===y)return;W.current=y,R.current=0,j.current=0,p.current=new Set(T.filter((f)=>f.role==="tool").map((f)=>f.id)),V.current=[],k([])},[y,T]),w1(()=>{if(!y)return;let f=oQ(y);if(!f||f.length<=R.current)return;let x=f.slice(R.current);R.current=f.length;let C=x,J0=V.current;if(J0.length>0)if(C.some((k0)=>k0.type!=="empty"))C=[...J0,...C],V.current=[];else{V.current=[...J0,...C];return}let F0=C.length;while(F0>0&&C[F0-1].type==="empty")F0-=1;if(F0!==C.length)V.current=C.slice(F0),C=C.slice(0,F0);if(C.length===0)return;let s=j.current;j.current+=1;let _0=s>0;if(G1())L1();A((k0)=>{if(!y||k0.has(y))return k0;let i0=new Set(k0);return i0.add(y),i0}),k((k0)=>[...k0,S0(E1,{flexDirection:"column",children:S0(V1,{content:"",role:"assistant",terminalWidth:O,isPending:!1,hidePrefix:_0,noMargin:!0,blocksOverride:C,renderCodeBlocksAsPlainText:!1},void 0,!1,void 0,this)},`streaming-${y}-${s}`,!1,void 0,this)])},[y,Y.version,O,F]),w1(()=>{if(!y)return;let f=p.current,x=T.filter((C)=>C.role==="tool"&&!f.has(C.id)&&!E.current.has(C.id));if(x.length===0)return;if(G1())L1();for(let C of x)E.current.add(C.id);k((C)=>[...C,...x.map((J0)=>S0(E1,{flexDirection:"column",children:S0(V1,{content:J0.content,role:J0.role,terminalWidth:O,metadata:J0.metadata,isPending:!1,messageId:J0.id},void 0,!1,void 0,this)},`streaming-tool-${J0.id}`,!1,void 0,this))])},[y,T,O]),w1(()=>{if(!y){if(G1())L1();return}if(!G1())P9(O,N);else I9(O,N);let f=E9(y);if(!f||f.lines.length===0)return;let C=Math.max(1,N-8),J0=Math.max(0,f.lines.length-C),F0=f.lines.slice(-C),s=(oQ(y)?.length??0)>0;M9(F0,J0,f.mode,s)},[y,Y.version,N,O]),w1(()=>{if(!y&&G1())L1()},[y]),w1(()=>{if(L===null&&T.length>G){if(w(T.length),G1())L1();if(H)H.write(T8.clearTerminal);B.incrementClearCount()}},[T.length,G,L,H,B]);let Y0=j9(()=>{return X.some((f)=>f.status==="pending"||f.status==="in_progress")},[X]),r=_?0:L??0,S=r,G0=j9(()=>{let f=[];if(f.push(S0(C9,{},"header",!1,void 0,this)),S>0)f.push(S0(uQ,{collapsedCount:S},"collapsed-summary",!1,void 0,this));for(let x=r;x<T.length;x++){let C=T[x];if(P&&C.id===P)continue;if(C.role==="tool"&&E.current.has(C.id))continue;if(C.role==="assistant"&&v.has(C.id))continue;f.push(S0(E1,{flexDirection:"column",children:S0(V1,{content:C.content,role:C.role,terminalWidth:O,metadata:C.metadata,isPending:!1,messageId:C.id},void 0,!1,void 0,this)},C.id,!1,void 0,this))}return f},[T,r,S,O,P,v]);return S0(E1,{flexDirection:"column",paddingX:2,children:S0(E1,{flexDirection:"column",children:[S0(V9,{items:G0,children:(f)=>f},F,!1,void 0,this),z&&S0(E1,{marginBottom:1,children:S0(lQ,{content:z,isStreaming:Z,isExpanded:K},void 0,!1,void 0,this)},void 0,!1,void 0,this),I.length>0&&S0(V9,{items:I,children:(f)=>f},`streaming-${F}`,!1,void 0,this),q&&Y0&&S0(E1,{marginTop:1,children:S0(D9,{tasks:X,visible:!0,compact:!1},void 0,!1,void 0,this)},void 0,!1,void 0,this),U.map((f,x)=>S0(E1,{flexDirection:"column",children:S0(V1,{content:f.displayText,role:"user",terminalWidth:O},void 0,!1,void 0,this)},`pending-${x}`,!1,void 0,this))]},void 0,!0,void 0,this)},void 0,!1,void 0,this)});import{useMemoizedFn as k8,useMount as jY}from"ahooks";import{Box as e0,Text as y0,useFocus as EY,useFocusManager as hY,useInput as mY}from"ink";import pY from"ink-select-input";import{memo as gY,useMemo as cY,useState as C8}from"react";import{jsxDEV as X0}from"react/jsx-dev-runtime";var xY=({isSelected:$})=>X0(e0,{marginRight:1,children:X0(y0,{color:$?"yellow":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),uY=({isSelected:$,label:Q})=>X0(y0,{bold:$,color:$?"yellow":void 0,children:Q},void 0,!1,void 0,this),m9=gY(({onClose:$,onEdit:Q})=>{let Y=A6(),J=y6()??"",{isFocused:Z}=EY({id:"model-selector"}),X=hY(),[q,U]=C8(""),[z,K]=C8(!1),[F,G]=C8(null),_=P0(!1),[O]=C8(()=>{let A=process.stdout?.columns||80;return Math.max(20,A-8)});jY(()=>{if(X?.focus("model-selector"),Y.length>0)U(Y[0].id)}),mY((A,b)=>{if(z)return;if(b.ctrl&&A==="c"||b.meta&&A==="c"){_();return}if(b.escape){$();return}if(!Z)return;if(A==="d"||A==="D"){H();return}if((A==="e"||A==="E")&&Q)B()},{isActive:!0});let N=k8(async(A)=>{if(z)return;let b=A.value;if(b===J){$();return}K(!0),G(null);try{await m0().setCurrentModel(b),$()}catch(W){G(W.message),K(!1)}}),H=k8(async()=>{if(z||q===J)return;K(!0),G(null);try{if(await m0().removeModel(q),Y.length<=1)$()}catch(A){G(A.message)}finally{K(!1)}}),B=k8(()=>{if(z||!Q)return;let A=Y.find((b)=>b.id===q);if(!A)return;Q(A)}),L=k8((A)=>{U(A.value)}),w=cY(()=>{return Y.find((A)=>A.id===q)},[Y,q]),I=Y.map((A)=>{let b=A.id===J?" (当前)":"";return{label:iQ(A)+b,value:A.id}}),k=q===J;return X0(e0,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,width:"100%",children:[X0(e0,{flexDirection:"row",justifyContent:"space-between",marginBottom:1,children:[X0(y0,{bold:!0,color:"cyan",children:"模型管理"},void 0,!1,void 0,this),X0(y0,{dimColor:!0,children:[z?"处理中...":k?"Enter=关闭 • E=编辑 • Esc=取消":"Enter=切换 • D=删除 • E=编辑 • Esc=取消"," • Ctrl+C=退出"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X0(e0,{flexDirection:"row",children:[X0(e0,{flexDirection:"column",flexGrow:2,marginRight:2,borderStyle:"single",borderColor:"gray",padding:1,children:[X0(y0,{dimColor:!0,children:["已配置模型 (",Y.length,")"]},void 0,!0,void 0,this),X0(e0,{marginTop:1,children:X0(pY,{items:I,onSelect:N,onHighlight:L,indicatorComponent:xY,itemComponent:uY},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(e0,{flexDirection:"column",flexGrow:3,borderStyle:"single",borderColor:"gray",padding:1,children:[X0(y0,{dimColor:!0,children:"模型详情"},void 0,!1,void 0,this),X0(e0,{marginY:1,children:X0(y0,{color:k?"green":"yellow",children:k?"* 当前使用":"* 可切换"},void 0,!1,void 0,this)},void 0,!1,void 0,this),w?X0(e0,{flexDirection:"column",children:[X0(y0,{children:[X0(y0,{dimColor:!0,children:"名称: "},void 0,!1,void 0,this),X0(y0,{bold:!0,color:"cyan",children:iQ(w)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(y0,{children:[X0(y0,{dimColor:!0,children:"Provider: "},void 0,!1,void 0,this),X0(y0,{bold:!0,children:w.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(y0,{children:[X0(y0,{dimColor:!0,children:"Model: "},void 0,!1,void 0,this),X0(y0,{bold:!0,children:w.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.overrides?.baseUrl&&X0(y0,{children:[X0(y0,{dimColor:!0,children:"Base URL override: "},void 0,!1,void 0,this),X0(y0,{color:"blueBright",children:w.overrides.baseUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(y0,{children:[X0(y0,{dimColor:!0,children:"Context Window: "},void 0,!1,void 0,this),X0(y0,{children:z$().resolveConfig(w).contextWindow},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):X0(y0,{dimColor:!0,children:"请选择一个模型查看详情"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F&&X0(e0,{marginTop:1,children:X0(y0,{color:"red",children:F},void 0,!1,void 0,this)},void 0,!1,void 0,this),X0(e0,{justifyContent:"center",marginTop:1,children:X0(y0,{dimColor:!0,children:"─".repeat(O)},void 0,!1,void 0,this)},void 0,!1,void 0,this),X0(e0,{justifyContent:"center",children:X0(y0,{dimColor:!0,children:"提示:D=删除 * E=编辑 * Up/Down=移动 * Enter/ESC=确认"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{useMemoizedFn as nQ}from"ahooks";import{Box as qZ,Text as tQ,useInput as UZ}from"ink";import{useState as R$}from"react";import{Box as J$,Text as b1,useInput as dY}from"ink";import lY from"ink-text-input";import{jsxDEV as D0}from"react/jsx-dev-runtime";var p9=({provider:$,value:Q,onChange:Y,onSubmit:J,onCancel:Z,error:X})=>{return dY((q,U)=>{if(U.escape)Z()}),D0(J$,{flexDirection:"column",children:[D0(J$,{marginBottom:1,children:D0(b1,{bold:!0,color:"blue",children:"Step 2: 输入 API Key"},void 0,!1,void 0,this)},void 0,!1,void 0,this),D0(J$,{marginBottom:1,children:D0(b1,{children:["Provider: ",D0(b1,{bold:!0,children:$.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),D0(J$,{marginBottom:1,children:D0(b1,{dimColor:!0,children:"API 密钥将存储在 ~/.blade/auth.json(权限 600),不会写入模型配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),D0(J$,{children:[D0(b1,{bold:!0,color:"cyan",children:[">"," "]},void 0,!0,void 0,this),D0(lY,{value:Q,onChange:Y,onSubmit:J,placeholder:"sk-...",mask:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&D0(J$,{marginTop:1,children:D0(b1,{color:"red",children:X},void 0,!1,void 0,this)},void 0,!1,void 0,this),D0(J$,{marginTop:1,children:D0(b1,{dimColor:!0,children:["输入完成后按 ",D0(b1,{bold:!0,children:"Enter"},void 0,!1,void 0,this),",",D0(b1,{bold:!0,children:"Esc"},void 0,!1,void 0,this)," 返回"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useEffect as x9,useState as v$}from"react";var u9=()=>{let[$,Q]=v$([]),[Y,J]=v$(!0),[Z,X]=v$(null);return x9(()=>{(async()=>{try{Q(await g9())}catch(U){X(U instanceof Error?U.message:"加载 Provider 列表失败")}finally{J(!1)}})()},[]),{providers:$,isLoading:Y,error:Z}},d9=($)=>{let[Q,Y]=v$([]),[J,Z]=v$(!1),[X,q]=v$(null);return x9(()=>{if(!$){Y([]);return}(async()=>{Z(!0),q(null);try{Y(await c9($))}catch(z){q(z instanceof Error?z.message:"加载模型列表失败")}finally{Z(!1)}})()},[$]),{models:Q,isLoading:J,error:X}};import{Box as A1,Text as X1,useInput as rY}from"ink";import aY from"ink-select-input";import oY from"ink-text-input";import{useMemo as l9,useState as iY}from"react";import{jsxDEV as M0,Fragment as eY}from"react/jsx-dev-runtime";var nY=({isSelected:$})=>M0(A1,{marginRight:1,children:M0(X1,{color:$?"yellow":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),tY=($)=>{let Q=[$.name];if($.contextWindow){let Y=$.contextWindow>=1e6?`${($.contextWindow/1e6).toFixed(1)}M`:$.contextWindow>=1000?`${Math.round($.contextWindow/1000)}K`:`${$.contextWindow}`;Q.push(`[${Y} ctx]`)}if($.reasoning)Q.push("[reasoning]");if($.input.includes("image"))Q.push("[vision]");if($.cost.input||$.cost.output)Q.push(`[$${$.cost.input}/$${$.cost.output}]`);return Q.join(" ")},sY=({isSelected:$,label:Q})=>M0(X1,{bold:$,color:$?"yellow":void 0,children:Q},void 0,!1,void 0,this),r9=({provider:$,models:Q,isLoading:Y,error:J,onSelect:Z,onCancel:X})=>{let[q,U]=iY("");rY((F,G)=>{if(G.escape)if(q)U("");else X()});let z=l9(()=>{if(!q)return Q;let F=q.toLowerCase();return Q.filter((G)=>G.name.toLowerCase().includes(F)||G.id.toLowerCase().includes(F))},[Q,q]),K=l9(()=>z.map((F)=>({key:F.id,label:tY(F),value:F})),[z]);if(Y)return M0(A1,{flexDirection:"column",children:M0(X1,{color:"yellow",children:["正在加载 ",$.name," 模型列表..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this);if(J)return M0(A1,{flexDirection:"column",children:[M0(X1,{color:"red",children:J},void 0,!1,void 0,this),M0(X1,{dimColor:!0,children:"按 Esc 返回"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return M0(A1,{flexDirection:"column",children:[M0(A1,{marginBottom:1,children:M0(X1,{bold:!0,color:"blue",children:"Step 3: 选择模型"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M0(A1,{marginBottom:1,children:M0(X1,{children:["Provider: ",M0(X1,{bold:!0,children:$.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M0(eY,{children:[M0(A1,{marginBottom:1,children:[M0(X1,{color:"cyan",children:"> "},void 0,!1,void 0,this),M0(oY,{value:q,onChange:U,placeholder:`搜索 ${Q.length} 个模型...`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M0(A1,{marginBottom:1,children:M0(X1,{dimColor:!0,children:"模型元数据来自内置 catalog"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M0(A1,{flexDirection:"column",height:12,children:M0(aY,{items:K,onSelect:(F)=>Z(F.value),indicatorComponent:nY,itemComponent:sY,limit:10},void 0,!1,void 0,this)},void 0,!1,void 0,this),z.length===0&&M0(X1,{color:"yellow",children:"内置 catalog 中没有匹配模型"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Box as Y$,Text as m1,useInput as $Z}from"ink";import QZ from"ink-select-input";import JZ from"ink-text-input";import{useMemo as a9,useState as YZ}from"react";import{jsxDEV as V0}from"react/jsx-dev-runtime";var ZZ=({isSelected:$})=>V0(Y$,{marginRight:1,children:V0(m1,{color:$?"yellow":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),XZ=({isSelected:$,label:Q})=>V0(m1,{bold:$,color:$?"yellow":void 0,children:Q},void 0,!1,void 0,this),o9=({providers:$,isLoading:Q,error:Y,onSelect:J,onCancel:Z})=>{let[X,q]=YZ("");$Z((K,F)=>{if(F.escape)if(X)q("");else Z()});let U=a9(()=>{if(!X)return $;let K=X.toLowerCase();return $.filter((F)=>F.name.toLowerCase().includes(K)||F.id.toLowerCase().includes(K))},[$,X]),z=a9(()=>U.map((K)=>({key:K.id,label:`${K.name} - ${K.modelCount} models${K.configured?" [configured]":""}`,value:K})),[U]);if(Q)return V0(Y$,{flexDirection:"column",children:V0(m1,{color:"yellow",children:"正在加载 Provider 列表..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(Y)return V0(Y$,{flexDirection:"column",children:[V0(m1,{color:"red",children:Y},void 0,!1,void 0,this),V0(m1,{dimColor:!0,children:"按 Esc 返回"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return V0(Y$,{flexDirection:"column",children:[V0(Y$,{marginBottom:1,children:V0(m1,{bold:!0,color:"blue",children:"Step 1: 选择 API 提供商"},void 0,!1,void 0,this)},void 0,!1,void 0,this),V0(Y$,{marginBottom:1,children:[V0(m1,{color:"cyan",children:"> "},void 0,!1,void 0,this),V0(JZ,{value:X,onChange:q,placeholder:`搜索 ${$.length} 个 Provider...`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),V0(Y$,{flexDirection:"column",height:12,children:V0(QZ,{items:z,onSelect:(K)=>J(K.value),indicatorComponent:ZZ,itemComponent:XZ,limit:10},void 0,!1,void 0,this)},void 0,!1,void 0,this),U.length===0&&V0(m1,{color:"yellow",children:"未找到匹配的 Provider,按 Esc 清除搜索"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};function i9($){if($==="model")return"provider";if($==="credential")return"model";return}import{jsxDEV as Z$}from"react/jsx-dev-runtime";var sQ=({mode:$,initialConfig:Q,modelId:Y,onComplete:J,onCancel:Z})=>{let[X,q]=R$("provider"),[U,z]=R$(),[K,F]=R$(),[G,_]=R$(""),[O,N]=R$(),[H,B]=R$(!1),L=u9(),w=d9(U?.id),I=P0(!1);UZ((b,W)=>{if(W.ctrl&&b==="c"||W.meta&&b==="c")$==="setup"?I():Z()});let k=nQ(async(b)=>{if(!U||!K)return;B(!0),N(void 0);try{if(b?.trim())await z$().setApiKey(U.id,b.trim());let W={provider:U.id,model:K.id,displayName:Q?.displayName};if($==="setup")J(W);else if($==="add"){let R=await m0().addModel(W);await m0().setCurrentModel(R.id),J(W)}else if(Y)await m0().updateModel(Y,W),J(W)}catch(W){N(W instanceof Error?W.message:"保存配置失败"),B(!1)}}),v=nQ((b)=>{if(F(b),U?.configured)k();else if(U?.supportsApiKey)q("credential");else N(`${U?.name??"Provider"} 需要 OAuth 或环境凭证,请先在外部完成认证`)}),A=nQ(()=>{N(void 0);let b=i9(X);if(b)q(b)});return Z$(qZ,{flexDirection:"column",padding:1,children:[Z$(tQ,{bold:!0,color:"blue",children:$==="edit"?"编辑模型":"添加模型"},void 0,!1,void 0,this),X==="provider"&&Z$(o9,{...L,onSelect:(b)=>{z(b),q("model")},onCancel:$==="setup"?()=>{return}:Z},void 0,!1,void 0,this),X==="model"&&U&&Z$(r9,{provider:U,...w,onSelect:v,onCancel:A},void 0,!1,void 0,this),X==="credential"&&U&&Z$(p9,{provider:U,value:G,onChange:_,onSubmit:()=>void k(G),onCancel:A,error:O},void 0,!1,void 0,this),H&&Z$(tQ,{color:"yellow",children:"正在保存配置..."},void 0,!1,void 0,this),O&&X!=="credential"&&Z$(tQ,{color:"red",children:O},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useMemoizedFn as x$}from"ahooks";import{promises as e9}from"fs";import{Box as o0,Text as R0,useInput as GZ}from"ink";import n9 from"ink-select-input";import KZ from"ink-text-input";import OZ from"os";import S8 from"path";import{useEffect as zZ,useMemo as f8,useRef as _Z,useState as p1}from"react";import{jsxDEV as Q0}from"react/jsx-dev-runtime";var u$=[{key:"allow",label:"Allow"},{key:"ask",label:"Ask"},{key:"deny",label:"Deny"},{key:"info",label:"Info"}],NZ={allow:"Add a new rule...",ask:"Add a new rule...",deny:"Add a new rule..."},HZ={allow:"Allow permission rules",ask:"Ask permission rules",deny:"Deny permission rules"},t9={project:"[项目共享配置]",global:"[用户全局配置]",local:"[本地配置]"},WZ=["project","global","local"],FZ={allow:[],ask:[],deny:[]},LZ={localExists:!1,projectExists:!1,globalExists:!1},s9={allow:[],ask:[],deny:[]};function BZ($){let Q=(J)=>Array.isArray(J)?J.filter((Z)=>typeof Z==="string"):[],Y=$?.permissions??{};return{allow:Q(Y?.allow),ask:Q(Y?.ask),deny:Q(Y?.deny)}}async function wZ($){try{let Q=await e9.readFile($,"utf-8"),Y=JSON.parse(Q);return{exists:!0,raw:Y,permissions:BZ(Y)}}catch(Q){if(Q.code==="ENOENT")return{exists:!1,raw:{},permissions:{...s9}};return console.warn(`[PermissionsManager] Failed to read ${$}:`,Q),{exists:!0,raw:{},permissions:{...s9}}}}function bZ($,Q){let Y=$.padEnd(32," "),J=Q==="local"?`${t9[Q]} <- 可删除`:t9[Q];return`${Y} ${J}`}var $J=({onClose:$})=>{let Y=l0()==="permissions-manager",J=P0(!1),[Z,X]=p1(0),q=u$[Z].key,[U,z]=p1(FZ),[K,F]=p1(LZ),[G,_]=p1(!0),[O,N]=p1("list"),[H,B]=p1(""),[L,w]=p1(null),[I,k]=p1(null),v=_Z(!1),A=f8(()=>S8.join(t(),".blade","settings.local.json"),[]),b=f8(()=>S8.join(t(),".blade","settings.json"),[]),W=f8(()=>S8.join(OZ.homedir(),".blade","settings.json"),[]),R=x$(async()=>{_(!0);let x=await Promise.all([{source:"local",path:A},{source:"project",path:b},{source:"global",path:W}].map(async({source:s,path:_0})=>{let k0=await wZ(_0);return{source:s,path:_0,...k0}})),C={localExists:x.find((s)=>s.source==="local")?.exists??!1,projectExists:x.find((s)=>s.source==="project")?.exists??!1,globalExists:x.find((s)=>s.source==="global")?.exists??!1};F(C);let J0={allow:[],ask:[],deny:[]},F0=Object.fromEntries(x.map((s)=>[s.source,s]));["allow","ask","deny"].forEach((s)=>{WZ.forEach((_0)=>{(F0[_0]?.permissions[s]??[]).forEach((i0,p8)=>{let g8={key:`${_0}:${p8}:${i0}`,rule:i0,source:_0};J0[s].push(g8)})})}),z(J0),_(!1)});zZ(()=>{R()},[R]);let j=x$(async(f,x)=>{try{let C=S8.join(t(),".blade","settings.local.json"),J0={allow:[],ask:[],deny:[]};try{let s=await e9.readFile(C,"utf-8"),k0=JSON.parse(s).permissions||{};J0={allow:Array.isArray(k0.allow)?k0.allow:[],ask:Array.isArray(k0.ask)?k0.ask:[],deny:Array.isArray(k0.deny)?k0.deny:[]}}catch(s){}let F0=x(J0);await m0().updateConfig({permissions:F0},{scope:"local",immediate:!0}),await R()}catch(C){throw console.error("[PermissionsManager] 修改权限规则失败:",C),C}});GZ((f,x)=>{if(x.ctrl&&f==="c"||x.meta&&f==="c"){J();return}if(O==="locked"){if(v.current){v.current=!1;return}N("list"),w(null),k(null);return}if(x.escape){if(O==="list"||q==="info")$();else N("list"),B(""),w(null),k(null);return}if(O==="list"){if(x.tab&&x.shift)X((C)=>(C-1+u$.length)%u$.length);else if(x.tab)X((C)=>(C+1)%u$.length);else if(f?.toLowerCase()==="q")$()}},{isActive:Y});let E=x$((f)=>{let x=f.value;if(q==="info")return;if(x.type==="add"){N("add"),B(""),k(null);return}if(x.entry.source!=="local"){N("locked"),v.current=!0,w({tab:q,entry:x.entry}),k({type:"error",text:x.entry.source==="project"?"此规则定义在项目共享配置中,无法在此删除。":"此规则来自用户全局配置,无法在此删除。"});return}N("confirm-delete"),w({tab:q,entry:x.entry}),k(null)}),p=x$(async()=>{if(q==="info")return;let f=H.trim();if(!f){k({type:"error",text:"Permission rule 不能为空"});return}if(U[q].map((C)=>C.rule).includes(f)){k({type:"error",text:"该规则已存在"});return}try{await j(q,(C)=>{let J0={allow:[...C.allow],ask:[...C.ask],deny:[...C.deny]};return J0[q]=[...new Set([...C[q],f])],J0}),N("list"),B(""),k({type:"success",text:"已添加本地权限规则"})}catch(C){k({type:"error",text:`保存失败: ${C instanceof Error?C.message:"未知错误"}`})}}),V=x$(async()=>{if(!L)return;let{tab:f,entry:x}=L;try{await j(f,(C)=>{let J0={allow:[...C.allow],ask:[...C.ask],deny:[...C.deny]};return J0[f]=C[f].filter((F0)=>F0!==x.rule),J0}),N("list"),w(null),k({type:"success",text:"已删除本地权限规则"})}catch(C){k({type:"error",text:`删除失败: ${C instanceof Error?C.message:"未知错误"}`})}}),u=f8(()=>{if(q==="info")return[];let f=q;return[{key:"add-new-rule",label:`› ${NZ[f]}`,value:{type:"add"}},...U[f].map((C)=>({key:C.key,label:bZ(C.rule,C.source),value:{type:"rule",entry:C}}))]},[q,U]),T=()=>Q0(o0,{marginBottom:1,children:u$.map((f,x)=>Q0(o0,{marginRight:2,children:Q0(R0,{color:x===Z?"yellow":"gray",children:["[",f.label,"]"]},void 0,!0,void 0,this)},f.key,!1,void 0,this))},void 0,!1,void 0,this),P=()=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{children:"配置文件优先级(从高到低):"},void 0,!1,void 0,this),Q0(o0,{flexDirection:"column",marginLeft:2,children:[Q0(R0,{children:["1. .blade/settings.local.json (本地配置,不提交 Git)"," ",K.localExists?"[OK] 存在":"[X] 不存在"]},void 0,!0,void 0,this),Q0(R0,{children:["2. .blade/settings.json (项目配置,提交 Git)"," ",K.projectExists?"[OK] 存在":"[X] 不存在"]},void 0,!0,void 0,this),Q0(R0,{children:["3. ~/.blade/settings.json (用户全局配置)"," ",K.globalExists?"[OK] 存在":"[X] 不存在"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q0(R0,{children:"说明:"},void 0,!1,void 0,this),Q0(o0,{flexDirection:"column",marginLeft:2,children:[Q0(R0,{children:"- /permissions 命令只管理本地配置 (.blade/settings.local.json)"},void 0,!1,void 0,this),Q0(R0,{children:"- 修改全局或项目配置请直接编辑对应文件"},void 0,!1,void 0,this),Q0(R0,{children:"- 本地配置不会提交到 Git"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),y=(f)=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{bold:!0,children:HZ[f]},void 0,!1,void 0,this),Q0(R0,{children:"Permission rules are a tool name, optionally followed by a specifier in parentheses."},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"例如: WebFetch 或 Bash(ls:*)"},void 0,!1,void 0,this),Q0(o0,{marginTop:1,children:Q0(KZ,{value:H,onChange:B,onSubmit:p},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"Enter 提交 · Esc 取消"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y0=(f,x)=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{bold:!0,children:["Delete ",f," permission rule?"]},void 0,!0,void 0,this),Q0(R0,{children:x.rule},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"From project local settings"},void 0,!1,void 0,this),Q0(R0,{children:"Are you sure you want to delete this permission rule?"},void 0,!1,void 0,this),Q0(n9,{items:[{label:"Yes",value:"yes"},{label:"No",value:"no"}],onSelect:(C)=>{if(C.value==="yes")V();else N("list"),w(null)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r=(f)=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{bold:!0,children:"Cannot delete this rule"},void 0,!1,void 0,this),Q0(R0,{children:f.rule},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:f.source==="project"?"This rule is defined in .blade/settings.json. 请手动编辑该文件以移除规则。":"This rule is defined in ~/.blade/settings.json. 请手动编辑该文件以移除规则。"},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"按任意键继续"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S=(f)=>Q0(n9,{items:u,isFocused:O==="list",onSelect:E},void 0,!1,void 0,this),G0=()=>{if(G)return Q0(R0,{children:"加载中..."},void 0,!1,void 0,this);if(q==="info")return P();if(O==="add")return y(q);if(O==="confirm-delete"&&L)return Y0(L.tab,L.entry);if(O==="locked"&&L)return r(L.entry);return S(q)};return Q0(o0,{flexDirection:"column",borderStyle:"round",borderColor:Y?"cyan":"gray",padding:1,width:80,children:[Q0(R0,{color:"cyan",bold:!0,children:"权限管理器"},void 0,!1,void 0,this),T(),Q0(o0,{flexDirection:"column",gap:1,children:G0()},void 0,!1,void 0,this),I&&Q0(o0,{marginTop:1,children:Q0(R0,{color:I.type==="success"?"green":"red",children:I.text},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q0(o0,{marginTop:1,children:Q0(R0,{color:"gray",children:"Tab 切换视图 · Esc 关闭 · Q 退出"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Box as v0,Text as q0,useInput as AZ}from"ink";import{jsxDEV as c}from"react/jsx-dev-runtime";function QJ({onCancel:$}){let Q=D8(),Y=Q.getAll(),J=Q.getBySource(),Z=Q.getStats(),X=P0(!1,$);if(AZ((q,U)=>{if(U.escape)$?.();else if(U.ctrl&&q==="c"||U.meta&&q==="c")X()}),Y.length===0)return c(v0,{flexDirection:"column",paddingY:1,children:[c(v0,{marginBottom:1,children:c(q0,{bold:!0,color:"cyan",children:"插件管理器"},void 0,!1,void 0,this)},void 0,!1,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:"没有已加载的插件"},void 0,!1,void 0,this)},void 0,!1,void 0,this),c(v0,{marginTop:1,paddingLeft:2,flexDirection:"column",children:[c(q0,{color:"gray",children:"插件目录位置:"},void 0,!1,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• ~/.blade/plugins/ - 用户级插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• .blade/plugins/ - 项目级插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• --plugin-dir - CLI 指定的插件"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{marginTop:1,paddingLeft:2,children:c(q0,{color:"gray",children:"使用 /plugins install <url> 安装新插件"},void 0,!1,void 0,this)},void 0,!1,void 0,this),c(v0,{marginTop:1,children:c(q0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return c(v0,{flexDirection:"column",paddingY:1,children:[c(v0,{marginBottom:1,children:[c(q0,{bold:!0,color:"cyan",children:"插件管理器"},void 0,!1,void 0,this),c(q0,{color:"gray",children:[" (共 ",Z.total," 个插件)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,marginBottom:1,children:c(q0,{color:"gray",children:["启用: ",Z.active," | 禁用: ",Z.inactive," | 命令: ",Z.commands," | 技能:"," ",Z.skills," | 代理: ",Z.agents]},void 0,!0,void 0,this)},void 0,!1,void 0,this),J.cli.length>0&&c(v0,{flexDirection:"column",marginBottom:1,children:[c(v0,{paddingLeft:1,children:[c(q0,{bold:!0,color:"magenta",children:"CLI 指定"},void 0,!1,void 0,this),c(q0,{color:"gray",children:" (--plugin-dir)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.cli.map((q)=>{let U=q.status==="active"?"[on]":"[off]";return c(v0,{flexDirection:"column",paddingLeft:2,children:[c(q0,{children:[c(q0,{bold:!0,color:"green",children:[U," ",q.manifest.name]},void 0,!0,void 0,this),c(q0,{color:"gray",children:[" v",q.manifest.version]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:q.manifest.description},void 0,!1,void 0,this)},void 0,!1,void 0,this),q.commands.length>0&&c(v0,{paddingLeft:2,children:c(q0,{color:"blue",children:["命令:"," ",q.commands.map((z)=>`/${z.namespacedName}`).join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},q.manifest.name,!0,void 0,this)})]},void 0,!0,void 0,this),J.project.length>0&&c(v0,{flexDirection:"column",marginBottom:1,children:[c(v0,{paddingLeft:1,children:[c(q0,{bold:!0,color:"yellow",children:"项目级"},void 0,!1,void 0,this),c(q0,{color:"gray",children:" (.blade/plugins/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.project.map((q)=>{let U=q.status==="active"?"[on]":"[off]";return c(v0,{flexDirection:"column",paddingLeft:2,children:[c(q0,{children:[c(q0,{bold:!0,color:"green",children:[U," ",q.manifest.name]},void 0,!0,void 0,this),c(q0,{color:"gray",children:[" v",q.manifest.version]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:q.manifest.description},void 0,!1,void 0,this)},void 0,!1,void 0,this),q.commands.length>0&&c(v0,{paddingLeft:2,children:c(q0,{color:"blue",children:["命令:"," ",q.commands.map((z)=>`/${z.namespacedName}`).join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},q.manifest.name,!0,void 0,this)})]},void 0,!0,void 0,this),J.user.length>0&&c(v0,{flexDirection:"column",marginBottom:1,children:[c(v0,{paddingLeft:1,children:[c(q0,{bold:!0,color:"cyan",children:"用户级"},void 0,!1,void 0,this),c(q0,{color:"gray",children:" (~/.blade/plugins/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.user.map((q)=>{let U=q.status==="active"?"[on]":"[off]";return c(v0,{flexDirection:"column",paddingLeft:2,children:[c(q0,{children:[c(q0,{bold:!0,color:"green",children:[U," ",q.manifest.name]},void 0,!0,void 0,this),c(q0,{color:"gray",children:[" v",q.manifest.version]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:q.manifest.description},void 0,!1,void 0,this)},void 0,!1,void 0,this),q.commands.length>0&&c(v0,{paddingLeft:2,children:c(q0,{color:"blue",children:["命令:"," ",q.commands.map((z)=>`/${z.namespacedName}`).join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},q.manifest.name,!0,void 0,this)})]},void 0,!0,void 0,this),c(v0,{marginTop:1,paddingLeft:2,flexDirection:"column",children:[c(q0,{color:"gray",children:"可用命令:"},void 0,!1,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins list - 列出所有插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins info <name> - 显示插件详情"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins install <url> - 安装插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins enable/disable <name> - 启用/禁用插件"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{marginTop:1,children:c(q0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{Box as p0,Text as g0,useInput as JJ,useStdout as yZ}from"ink";import vZ from"ink-text-input";import eQ,{useCallback as d$,useMemo as RZ,useState as g1}from"react";import{jsxDEV as K0}from"react/jsx-dev-runtime";var PZ=eQ.memo(({option:$,index:Q,isSelected:Y,isMultiSelect:J,isHighlighted:Z})=>K0(p0,{flexDirection:"column",marginBottom:1,children:[K0(g0,{color:Z?"yellow":Y?"green":void 0,bold:Z,children:[J?Y?"(*) ":"( ) ":Z?"> ":" ",Q+1,". ",$.label]},void 0,!0,void 0,this),K0(p0,{marginLeft:4,children:K0(g0,{color:"gray",children:$.description},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)),IZ=eQ.memo(({questions:$,answers:Q})=>K0(p0,{flexDirection:"column",marginBottom:1,children:$.map((Y)=>{let J=Q[Y.header],Z=Array.isArray(J)?J.join(", "):J||"(no answer)";return K0(p0,{marginBottom:1,children:[K0(g0,{backgroundColor:"blue",color:"white",children:[" ",Y.header," "]},void 0,!0,void 0,this),K0(g0,{color:"green",children:[" ",Z]},void 0,!0,void 0,this)]},Y.header,!0,void 0,this)})},void 0,!1,void 0,this)),YJ=eQ.memo(({questions:$,onComplete:Q,onCancel:Y})=>{let{stdout:J}=yZ(),Z=J.columns||80,q=l0()==="confirmation-prompt",U=P0(!1),[z,K]=g1("answering"),[F,G]=g1(0),[_,O]=g1({}),[N,H]=g1(0),[B,L]=g1([]),[w,I]=g1(!1),[k,v]=g1(""),[A,b]=g1(0),W=$[F],R=RZ(()=>{if(!W)return[];return[...W.options.map((T)=>({label:T.label,value:T.label,description:T.description})),{label:"Type something...",value:"__other__",description:"Enter custom response"}]},[W]),j=d$((T)=>{let P={..._,[W.header]:T};if(O(P),F<$.length-1)G(F+1),H(0),L([]),I(!1),v("");else K("submit"),b(0)},[_,W?.header,F,$.length]),E=d$((T)=>{let P=R[T];if(!P)return;if(P.value==="__other__"){I(!0);return}if(W.multiSelect)L((y)=>y.includes(P.value)?y.filter((Y0)=>Y0!==P.value):[...y,P.value]);else j(P.value)},[R,W?.multiSelect,j]),p=d$((T)=>{if(T.trim())j(T.trim())},[j]),V=d$(()=>{K("answering"),G(0),H(0),L([]),I(!1)},[]),u=d$(()=>{Q(_)},[_,Q]);if(JJ((T,P)=>{if(P.ctrl&&T==="c"||P.meta&&T==="c"){U();return}if(w){if(P.escape)I(!1),v("");return}if(P.escape){Y();return}let y=parseInt(T);if(y>=1&&y<=R.length){E(y-1);return}if(P.upArrow){H((Y0)=>Y0>0?Y0-1:R.length-1);return}if(P.downArrow||P.tab){H((Y0)=>Y0<R.length-1?Y0+1:0);return}if(P.return){if(W.multiSelect&&B.length>0)j(B);else E(N);return}if(T===" "&&W.multiSelect){let Y0=R[N];if(Y0&&Y0.value!=="__other__")L((r)=>r.includes(Y0.value)?r.filter((S)=>S!==Y0.value):[...r,Y0.value]);return}},{isActive:q&&z==="answering"&&!w}),JJ((T,P)=>{if(P.ctrl&&T==="c"||P.meta&&T==="c"){U();return}if(P.escape){Y();return}if(P.upArrow||P.downArrow||P.tab){b((y)=>y===0?1:0);return}if(P.return){if(A===0)u();else V();return}if(T.toLowerCase()==="y"){u();return}if(T.toLowerCase()==="e"){V();return}},{isActive:q&&z==="submit"}),z==="submit")return K0(p0,{flexDirection:"column",borderStyle:"round",borderColor:q?"green":"gray",padding:1,width:Math.min(Z-4,80),children:[K0(p0,{marginBottom:1,children:K0(g0,{bold:!0,color:"green",children:"[OK] Review Your Answers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0(IZ,{questions:$,answers:_},void 0,!1,void 0,this),K0(p0,{flexDirection:"column",marginTop:1,children:[K0(g0,{color:A===0?"yellow":void 0,bold:A===0,children:[A===0?"> ":" ","[Y] Submit answers"]},void 0,!0,void 0,this),K0(g0,{color:A===1?"yellow":void 0,bold:A===1,children:[A===1?"> ":" ","[E] Edit answers"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),K0(p0,{marginTop:1,children:K0(g0,{color:"gray",children:"Enter to confirm · Up/Down to navigate · Y/E for quick select"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!W)return null;return K0(p0,{flexDirection:"column",borderStyle:"round",borderColor:q?"cyan":"gray",padding:1,width:Math.min(Z-4,80),children:[K0(p0,{marginBottom:1,children:[K0(g0,{backgroundColor:"blue",color:"white",children:[" ",W.header," "]},void 0,!0,void 0,this),K0(g0,{children:[" ",W.question]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w?K0(p0,{flexDirection:"column",marginTop:1,children:[K0(g0,{color:"yellow",children:"Enter your response:"},void 0,!1,void 0,this),K0(p0,{marginTop:1,children:[K0(g0,{color:"cyan",children:"> "},void 0,!1,void 0,this),K0(vZ,{value:k,onChange:v,onSubmit:p,focus:q},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0(p0,{marginTop:1,children:K0(g0,{color:"gray",children:"(Press Enter to submit, ESC to go back)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this):K0(p0,{flexDirection:"column",children:R.map((T,P)=>K0(PZ,{option:T,index:P,isSelected:B.includes(T.value),isMultiSelect:W.multiSelect,isHighlighted:N===P},T.value,!1,void 0,this))},void 0,!1,void 0,this),!w&&K0(p0,{marginTop:1,flexDirection:"column",children:[K0(g0,{color:"gray",children:W.multiSelect?"Space to toggle · Enter to confirm · 1-9 for quick select":"Enter to select · Up/Down or Tab to navigate · 1-9 for quick select"},void 0,!1,void 0,this),W.multiSelect&&B.length>0&&K0(g0,{color:"green",children:["Selected: ",B.join(", ")]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),$.length>1&&K0(p0,{marginTop:1,children:K0(g0,{color:"gray",children:["Question ",F+1," of ",$.length]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{basename as MZ}from"node:path";import{Box as I$,Text as $1,useInput as TZ}from"ink";import kZ from"ink-select-input";import{useEffect as $6,useMemo as P$,useRef as UJ,useState as V8}from"react";function ZJ($){return`${$.projectPath}\x00${$.sessionId}`}function XJ($,Q){if(Q!=="fork")return[...$];return $.filter((Y)=>Y.relationType!=="subagent")}function qJ($){return{title:$==="fork"?"选择要 fork 的会话:":"选择要恢复的会话:",instructions:"(Left/Right to page | Up/Down to select | Enter to confirm | Esc to cancel)"}}import{jsxDEV as C0}from"react/jsx-dev-runtime";function CZ($){let Q=new Date($),J=new Date().getTime()-Q.getTime(),Z=Math.floor(J/86400000);if(Z===0)return`今天 ${Q.getHours().toString().padStart(2,"0")}:${Q.getMinutes().toString().padStart(2,"0")}`;if(Z===1)return"昨天";if(Z<7)return`${Z}天前`;return`${Q.getMonth()+1}/${Q.getDate()}`}function SZ($){return MZ($)}function fZ($){switch($){case"queued":return"QUEUED";case"running":return"RUNNING";case"failed":return"FAILED";case"cancelled":return"CANCELLED";case"interrupted":return"INTERRUPTED";case"completed":return"DONE"}}var DZ=({isSelected:$})=>C0(I$,{marginRight:1,children:C0($1,{color:$?"cyan":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),VZ=({isSelected:$,label:Q})=>C0($1,{color:$?"cyan":"white",bold:$,children:Q},void 0,!1,void 0,this),l$=20,GJ=({intent:$,sessions:Q,onSelect:Y,onCancel:J})=>{let[Z,X]=V8([]),[q,U]=V8(!1),[z,K]=V8(0),[F,G]=V8(!1),_=UJ(!1),O=UJ(!0);$6(()=>{return O.current=!0,()=>{O.current=!1}},[]);let H=l0()==="session-selector",B=P0(!1);TZ((W,R)=>{if(R.ctrl&&W==="c"||R.meta&&W==="c"){B();return}if(_.current)return;if(R.escape&&J){J();return}if(R.leftArrow||W==="h"||W==="H"){if(z>0)K((j)=>j-1);return}if(R.rightArrow||W==="l"||W==="L"){if(z<k-1)K((j)=>j+1);return}},{isActive:H}),$6(()=>{if(Q){X(Q);return}(async()=>{U(!0);try{let R=await k1.listSessions({cwd:t(),includeSubagents:!1});X(R)}catch(R){console.error("[SessionSelector] Failed to load sessions:",R),X([])}finally{U(!1)}})()},[Q]);let L=P$(()=>XJ(Q||Z,$),[$,Q,Z]),w=P$(()=>qJ($),[$]),I=P$(()=>{return L.map((W)=>{let R=SZ(W.projectPath),j=CZ(W.lastMessageTime),E=`[${fZ(W.taskStatus)}]`,p=W.gitBranch?` (${W.gitBranch})`:"",V=W.hasErrors?" [!]":"",u=W.relationType==="subagent"?" ↳ subagent":W.relationType==="fork"?" ↳ fork":"";return{key:ZJ(W),label:`${E} ${j} | ${R}${p} | ${W.messageCount} 条消息${V}${u}`,value:W}})},[L]),k=P$(()=>Math.max(1,Math.ceil(I.length/l$)),[I.length]),v=P$(()=>{let W=z*l$;return I.slice(W,W+l$)},[I,z]),A=P$(()=>({start:z*l$+1,end:Math.min((z+1)*l$,I.length)}),[z,I.length]);$6(()=>{K(0)},[L.length]);let b=(W)=>{if(_.current)return;_.current=!0,G(!0);let R=()=>{if(!O.current)return;_.current=!1,G(!1)};Promise.resolve().then(()=>Y(W.value)).then(R,R)};if(q)return C0(I$,{flexDirection:"column",paddingX:2,paddingY:1,children:C0($1,{children:"正在加载会话列表..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(L.length===0)return C0(I$,{flexDirection:"column",paddingX:2,paddingY:1,children:[C0($1,{color:"yellow",children:"没有找到历史会话"},void 0,!1,void 0,this),C0($1,{dimColor:!0,children:[`
148
+ `).length}var lQ=kY.memo(({content:$,isStreaming:Q=!1,isExpanded:Y})=>{let J=W0(),Z=S9(()=>SY($),[$]),X=S9(()=>CY($),[$]),q=J.colors.info,U=J.colors.muted;return B1(dQ,{flexDirection:"column",marginBottom:1,children:[B1(dQ,{flexDirection:"row",children:[B1(y$,{color:q,children:Y?"v":">"},void 0,!1,void 0,this),B1(y$,{children:" "},void 0,!1,void 0,this),B1(y$,{color:U,children:["Thinking",Q?"...":` (${Z} lines)`]},void 0,!0,void 0,this),!Y&&!Q&&X&&B1(y$,{color:U,children:[" - ",X]},void 0,!0,void 0,this),B1(y$,{color:U,dimColor:!0,children:[" ","[Ctrl+T]"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y&&$&&B1(dQ,{marginLeft:2,marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,paddingY:0,children:B1(y$,{color:U,children:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});lQ.displayName="ThinkingBlock";import{Box as M8,Text as rQ}from"ink";import f9 from"react";import{jsxDEV as j1}from"react/jsx-dev-runtime";var D9=f9.memo(({tasks:$,visible:Q=!0,compact:Y=!1})=>{let{colors:J}=W0();if(!Q||$.length===0)return null;let Z={total:$.length,completed:$.filter((X)=>X.status==="completed").length,inProgress:$.filter((X)=>X.status==="in_progress").length};return j1(M8,{flexDirection:"column",borderStyle:"single",borderColor:J.border.light,paddingX:1,paddingY:Y?0:1,marginBottom:1,children:[j1(M8,{marginBottom:Y?0:1,children:[j1(rQ,{dimColor:!0,children:"Tasks "},void 0,!1,void 0,this),j1(rQ,{color:J.text.muted,children:[Z.completed,"/",Z.total]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j1(M8,{flexDirection:"column",children:$.map((X,q)=>j1(fY,{task:X,compact:Y},X.id||q,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}),fY=f9.memo(({task:$,compact:Q})=>{let Y,J=!1,Z;switch($.status){case"completed":Y="[OK]",J=!0,Z=$.subject;break;case"in_progress":Y=">",J=!1,Z=$.activeForm||$.subject;break;case"pending":default:Y="-",J=!0,Z=$.subject;break}return j1(M8,{paddingY:Q?0:0,children:j1(rQ,{dimColor:J,children:[Y," ",Z]},void 0,!0,void 0,this)},void 0,!1,void 0,this)});import{jsxDEV as S0}from"react/jsx-dev-runtime";var h9=VY.memo(()=>{let $=K6(),Q=k6(),Y=C6(),J=S6(),Z=M1(),X=F6(),q=b6(),U=n$(),z=M6(),K=T6(),F=O6(),G=D6(),_=f6(),O=N$(),N=y9(),{stdout:W}=DY(),B=P1(),[L,w]=aQ(null),[I,k]=aQ([]),[v,A]=aQ(new Set),b=h1(_),H=h1(null),R=h1(0),j=h1(0),E=h1(new Set),p=h1(new Set),V=h1([]),u=h1(null);w1(()=>{if(b.current!==_){if(G1())L1();if(W)W.write(T8.clearTerminal);B.incrementClearCount(),b.current=_}},[_,W,B]);let T=$,P=J;w1(()=>{if(!J||Z){u.current=null;return}if(u.current===J)return;if(u.current=J,G1())L1();if(W)W.write(T8.eraseScreen+T8.cursorTo(0,0));E.current=new Set,p.current=new Set(T.filter((f)=>f.role==="tool").map((f)=>f.id)),H.current=null,R.current=0,j.current=0,V.current=[],k([]),A(new Set),B.incrementClearCount(),B.clearFinalizingStreamingMessageId()},[J,Z,W,B,T]);let y=Q??J;w1(()=>{if(G1())L1();H.current=null,R.current=0,j.current=0,E.current=new Set,p.current=new Set(T.filter((f)=>f.role==="tool").map((f)=>f.id)),V.current=[],k([]),A(new Set)},[F]),w1(()=>{if(!y)return;if(H.current===y)return;H.current=y,R.current=0,j.current=0,p.current=new Set(T.filter((f)=>f.role==="tool").map((f)=>f.id)),V.current=[],k([])},[y,T]),w1(()=>{if(!y)return;let f=oQ(y);if(!f||f.length<=R.current)return;let x=f.slice(R.current);R.current=f.length;let C=x,J0=V.current;if(J0.length>0)if(C.some((k0)=>k0.type!=="empty"))C=[...J0,...C],V.current=[];else{V.current=[...J0,...C];return}let F0=C.length;while(F0>0&&C[F0-1].type==="empty")F0-=1;if(F0!==C.length)V.current=C.slice(F0),C=C.slice(0,F0);if(C.length===0)return;let s=j.current;j.current+=1;let _0=s>0;if(G1())L1();A((k0)=>{if(!y||k0.has(y))return k0;let i0=new Set(k0);return i0.add(y),i0}),k((k0)=>[...k0,S0(E1,{flexDirection:"column",children:S0(V1,{content:"",role:"assistant",terminalWidth:O,isPending:!1,hidePrefix:_0,noMargin:!0,blocksOverride:C,renderCodeBlocksAsPlainText:!1},void 0,!1,void 0,this)},`streaming-${y}-${s}`,!1,void 0,this)])},[y,Y.version,O,F]),w1(()=>{if(!y)return;let f=p.current,x=T.filter((C)=>C.role==="tool"&&!f.has(C.id)&&!E.current.has(C.id));if(x.length===0)return;if(G1())L1();for(let C of x)E.current.add(C.id);k((C)=>[...C,...x.map((J0)=>S0(E1,{flexDirection:"column",children:S0(V1,{content:J0.content,role:J0.role,terminalWidth:O,metadata:J0.metadata,isPending:!1,messageId:J0.id},void 0,!1,void 0,this)},`streaming-tool-${J0.id}`,!1,void 0,this))])},[y,T,O]),w1(()=>{if(!y){if(G1())L1();return}if(!G1())P9(O,N);else I9(O,N);let f=E9(y);if(!f||f.lines.length===0)return;let C=Math.max(1,N-8),J0=Math.max(0,f.lines.length-C),F0=f.lines.slice(-C),s=(oQ(y)?.length??0)>0;M9(F0,J0,f.mode,s)},[y,Y.version,N,O]),w1(()=>{if(!y&&G1())L1()},[y]),w1(()=>{if(L===null&&T.length>G){if(w(T.length),G1())L1();if(W)W.write(T8.clearTerminal);B.incrementClearCount()}},[T.length,G,L,W,B]);let Y0=j9(()=>{return X.some((f)=>f.status==="pending"||f.status==="in_progress")},[X]),r=_?0:L??0,S=r,G0=j9(()=>{let f=[];if(f.push(S0(C9,{},"header",!1,void 0,this)),S>0)f.push(S0(uQ,{collapsedCount:S},"collapsed-summary",!1,void 0,this));for(let x=r;x<T.length;x++){let C=T[x];if(P&&C.id===P)continue;if(C.role==="tool"&&E.current.has(C.id))continue;if(C.role==="assistant"&&v.has(C.id))continue;f.push(S0(E1,{flexDirection:"column",children:S0(V1,{content:C.content,role:C.role,terminalWidth:O,metadata:C.metadata,isPending:!1,messageId:C.id},void 0,!1,void 0,this)},C.id,!1,void 0,this))}return f},[T,r,S,O,P,v]);return S0(E1,{flexDirection:"column",paddingX:2,children:S0(E1,{flexDirection:"column",children:[S0(V9,{items:G0,children:(f)=>f},F,!1,void 0,this),z&&S0(E1,{marginBottom:1,children:S0(lQ,{content:z,isStreaming:Z,isExpanded:K},void 0,!1,void 0,this)},void 0,!1,void 0,this),I.length>0&&S0(V9,{items:I,children:(f)=>f},`streaming-${F}`,!1,void 0,this),q&&Y0&&S0(E1,{marginTop:1,children:S0(D9,{tasks:X,visible:!0,compact:!1},void 0,!1,void 0,this)},void 0,!1,void 0,this),U.map((f,x)=>S0(E1,{flexDirection:"column",children:S0(V1,{content:f.displayText,role:"user",terminalWidth:O},void 0,!1,void 0,this)},`pending-${x}`,!1,void 0,this))]},void 0,!0,void 0,this)},void 0,!1,void 0,this)});import{useMemoizedFn as k8,useMount as jY}from"ahooks";import{Box as e0,Text as y0,useFocus as EY,useFocusManager as hY,useInput as mY}from"ink";import pY from"ink-select-input";import{memo as gY,useMemo as cY,useState as C8}from"react";import{jsxDEV as X0}from"react/jsx-dev-runtime";var xY=({isSelected:$})=>X0(e0,{marginRight:1,children:X0(y0,{color:$?"yellow":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),uY=({isSelected:$,label:Q})=>X0(y0,{bold:$,color:$?"yellow":void 0,children:Q},void 0,!1,void 0,this),m9=gY(({onClose:$,onEdit:Q})=>{let Y=A6(),J=y6()??"",{isFocused:Z}=EY({id:"model-selector"}),X=hY(),[q,U]=C8(""),[z,K]=C8(!1),[F,G]=C8(null),_=P0(!1),[O]=C8(()=>{let A=process.stdout?.columns||80;return Math.max(20,A-8)});jY(()=>{if(X?.focus("model-selector"),Y.length>0)U(Y[0].id)}),mY((A,b)=>{if(z)return;if(b.ctrl&&A==="c"||b.meta&&A==="c"){_();return}if(b.escape){$();return}if(!Z)return;if(A==="d"||A==="D"){W();return}if((A==="e"||A==="E")&&Q)B()},{isActive:!0});let N=k8(async(A)=>{if(z)return;let b=A.value;if(b===J){$();return}K(!0),G(null);try{await m0().setCurrentModel(b),$()}catch(H){G(H.message),K(!1)}}),W=k8(async()=>{if(z||q===J)return;K(!0),G(null);try{if(await m0().removeModel(q),Y.length<=1)$()}catch(A){G(A.message)}finally{K(!1)}}),B=k8(()=>{if(z||!Q)return;let A=Y.find((b)=>b.id===q);if(!A)return;Q(A)}),L=k8((A)=>{U(A.value)}),w=cY(()=>{return Y.find((A)=>A.id===q)},[Y,q]),I=Y.map((A)=>{let b=A.id===J?" (当前)":"";return{label:iQ(A)+b,value:A.id}}),k=q===J;return X0(e0,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,width:"100%",children:[X0(e0,{flexDirection:"row",justifyContent:"space-between",marginBottom:1,children:[X0(y0,{bold:!0,color:"cyan",children:"模型管理"},void 0,!1,void 0,this),X0(y0,{dimColor:!0,children:[z?"处理中...":k?"Enter=关闭 • E=编辑 • Esc=取消":"Enter=切换 • D=删除 • E=编辑 • Esc=取消"," • Ctrl+C=退出"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X0(e0,{flexDirection:"row",children:[X0(e0,{flexDirection:"column",flexGrow:2,marginRight:2,borderStyle:"single",borderColor:"gray",padding:1,children:[X0(y0,{dimColor:!0,children:["已配置模型 (",Y.length,")"]},void 0,!0,void 0,this),X0(e0,{marginTop:1,children:X0(pY,{items:I,onSelect:N,onHighlight:L,indicatorComponent:xY,itemComponent:uY},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(e0,{flexDirection:"column",flexGrow:3,borderStyle:"single",borderColor:"gray",padding:1,children:[X0(y0,{dimColor:!0,children:"模型详情"},void 0,!1,void 0,this),X0(e0,{marginY:1,children:X0(y0,{color:k?"green":"yellow",children:k?"* 当前使用":"* 可切换"},void 0,!1,void 0,this)},void 0,!1,void 0,this),w?X0(e0,{flexDirection:"column",children:[X0(y0,{children:[X0(y0,{dimColor:!0,children:"名称: "},void 0,!1,void 0,this),X0(y0,{bold:!0,color:"cyan",children:iQ(w)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(y0,{children:[X0(y0,{dimColor:!0,children:"Provider: "},void 0,!1,void 0,this),X0(y0,{bold:!0,children:w.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(y0,{children:[X0(y0,{dimColor:!0,children:"Model: "},void 0,!1,void 0,this),X0(y0,{bold:!0,children:w.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.overrides?.baseUrl&&X0(y0,{children:[X0(y0,{dimColor:!0,children:"Base URL override: "},void 0,!1,void 0,this),X0(y0,{color:"blueBright",children:w.overrides.baseUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0(y0,{children:[X0(y0,{dimColor:!0,children:"Context Window: "},void 0,!1,void 0,this),X0(y0,{children:z$().resolveConfig(w).contextWindow},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):X0(y0,{dimColor:!0,children:"请选择一个模型查看详情"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F&&X0(e0,{marginTop:1,children:X0(y0,{color:"red",children:F},void 0,!1,void 0,this)},void 0,!1,void 0,this),X0(e0,{justifyContent:"center",marginTop:1,children:X0(y0,{dimColor:!0,children:"─".repeat(O)},void 0,!1,void 0,this)},void 0,!1,void 0,this),X0(e0,{justifyContent:"center",children:X0(y0,{dimColor:!0,children:"提示:D=删除 * E=编辑 * Up/Down=移动 * Enter/ESC=确认"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{useMemoizedFn as nQ}from"ahooks";import{Box as qZ,Text as tQ,useInput as UZ}from"ink";import{useState as R$}from"react";import{Box as J$,Text as b1,useInput as dY}from"ink";import lY from"ink-text-input";import{jsxDEV as D0}from"react/jsx-dev-runtime";var p9=({provider:$,value:Q,onChange:Y,onSubmit:J,onCancel:Z,error:X})=>{return dY((q,U)=>{if(U.escape)Z()}),D0(J$,{flexDirection:"column",children:[D0(J$,{marginBottom:1,children:D0(b1,{bold:!0,color:"blue",children:"Step 2: 输入 API Key"},void 0,!1,void 0,this)},void 0,!1,void 0,this),D0(J$,{marginBottom:1,children:D0(b1,{children:["Provider: ",D0(b1,{bold:!0,children:$.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),D0(J$,{marginBottom:1,children:D0(b1,{dimColor:!0,children:"API 密钥将存储在 ~/.blade/auth.json(权限 600),不会写入模型配置"},void 0,!1,void 0,this)},void 0,!1,void 0,this),D0(J$,{children:[D0(b1,{bold:!0,color:"cyan",children:[">"," "]},void 0,!0,void 0,this),D0(lY,{value:Q,onChange:Y,onSubmit:J,placeholder:"sk-...",mask:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&D0(J$,{marginTop:1,children:D0(b1,{color:"red",children:X},void 0,!1,void 0,this)},void 0,!1,void 0,this),D0(J$,{marginTop:1,children:D0(b1,{dimColor:!0,children:["输入完成后按 ",D0(b1,{bold:!0,children:"Enter"},void 0,!1,void 0,this),",",D0(b1,{bold:!0,children:"Esc"},void 0,!1,void 0,this)," 返回"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useEffect as x9,useState as v$}from"react";var u9=()=>{let[$,Q]=v$([]),[Y,J]=v$(!0),[Z,X]=v$(null);return x9(()=>{(async()=>{try{Q(await g9())}catch(U){X(U instanceof Error?U.message:"加载 Provider 列表失败")}finally{J(!1)}})()},[]),{providers:$,isLoading:Y,error:Z}},d9=($)=>{let[Q,Y]=v$([]),[J,Z]=v$(!1),[X,q]=v$(null);return x9(()=>{if(!$){Y([]);return}(async()=>{Z(!0),q(null);try{Y(await c9($))}catch(z){q(z instanceof Error?z.message:"加载模型列表失败")}finally{Z(!1)}})()},[$]),{models:Q,isLoading:J,error:X}};import{Box as A1,Text as X1,useInput as rY}from"ink";import aY from"ink-select-input";import oY from"ink-text-input";import{useMemo as l9,useState as iY}from"react";import{jsxDEV as M0,Fragment as eY}from"react/jsx-dev-runtime";var nY=({isSelected:$})=>M0(A1,{marginRight:1,children:M0(X1,{color:$?"yellow":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),tY=($)=>{let Q=[$.name];if($.contextWindow){let Y=$.contextWindow>=1e6?`${($.contextWindow/1e6).toFixed(1)}M`:$.contextWindow>=1000?`${Math.round($.contextWindow/1000)}K`:`${$.contextWindow}`;Q.push(`[${Y} ctx]`)}if($.reasoning)Q.push("[reasoning]");if($.input.includes("image"))Q.push("[vision]");if($.cost.input||$.cost.output)Q.push(`[$${$.cost.input}/$${$.cost.output}]`);return Q.join(" ")},sY=({isSelected:$,label:Q})=>M0(X1,{bold:$,color:$?"yellow":void 0,children:Q},void 0,!1,void 0,this),r9=({provider:$,models:Q,isLoading:Y,error:J,onSelect:Z,onCancel:X})=>{let[q,U]=iY("");rY((F,G)=>{if(G.escape)if(q)U("");else X()});let z=l9(()=>{if(!q)return Q;let F=q.toLowerCase();return Q.filter((G)=>G.name.toLowerCase().includes(F)||G.id.toLowerCase().includes(F))},[Q,q]),K=l9(()=>z.map((F)=>({key:F.id,label:tY(F),value:F})),[z]);if(Y)return M0(A1,{flexDirection:"column",children:M0(X1,{color:"yellow",children:["正在加载 ",$.name," 模型列表..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this);if(J)return M0(A1,{flexDirection:"column",children:[M0(X1,{color:"red",children:J},void 0,!1,void 0,this),M0(X1,{dimColor:!0,children:"按 Esc 返回"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return M0(A1,{flexDirection:"column",children:[M0(A1,{marginBottom:1,children:M0(X1,{bold:!0,color:"blue",children:"Step 3: 选择模型"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M0(A1,{marginBottom:1,children:M0(X1,{children:["Provider: ",M0(X1,{bold:!0,children:$.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M0(eY,{children:[M0(A1,{marginBottom:1,children:[M0(X1,{color:"cyan",children:"> "},void 0,!1,void 0,this),M0(oY,{value:q,onChange:U,placeholder:`搜索 ${Q.length} 个模型...`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M0(A1,{marginBottom:1,children:M0(X1,{dimColor:!0,children:"模型元数据来自内置 catalog"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M0(A1,{flexDirection:"column",height:12,children:M0(aY,{items:K,onSelect:(F)=>Z(F.value),indicatorComponent:nY,itemComponent:sY,limit:10},void 0,!1,void 0,this)},void 0,!1,void 0,this),z.length===0&&M0(X1,{color:"yellow",children:"内置 catalog 中没有匹配模型"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Box as Y$,Text as m1,useInput as $Z}from"ink";import QZ from"ink-select-input";import JZ from"ink-text-input";import{useMemo as a9,useState as YZ}from"react";import{jsxDEV as V0}from"react/jsx-dev-runtime";var ZZ=({isSelected:$})=>V0(Y$,{marginRight:1,children:V0(m1,{color:$?"yellow":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),XZ=({isSelected:$,label:Q})=>V0(m1,{bold:$,color:$?"yellow":void 0,children:Q},void 0,!1,void 0,this),o9=({providers:$,isLoading:Q,error:Y,onSelect:J,onCancel:Z})=>{let[X,q]=YZ("");$Z((K,F)=>{if(F.escape)if(X)q("");else Z()});let U=a9(()=>{if(!X)return $;let K=X.toLowerCase();return $.filter((F)=>F.name.toLowerCase().includes(K)||F.id.toLowerCase().includes(K))},[$,X]),z=a9(()=>U.map((K)=>({key:K.id,label:`${K.name} - ${K.modelCount} models${K.configured?" [configured]":""}`,value:K})),[U]);if(Q)return V0(Y$,{flexDirection:"column",children:V0(m1,{color:"yellow",children:"正在加载 Provider 列表..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(Y)return V0(Y$,{flexDirection:"column",children:[V0(m1,{color:"red",children:Y},void 0,!1,void 0,this),V0(m1,{dimColor:!0,children:"按 Esc 返回"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return V0(Y$,{flexDirection:"column",children:[V0(Y$,{marginBottom:1,children:V0(m1,{bold:!0,color:"blue",children:"Step 1: 选择 API 提供商"},void 0,!1,void 0,this)},void 0,!1,void 0,this),V0(Y$,{marginBottom:1,children:[V0(m1,{color:"cyan",children:"> "},void 0,!1,void 0,this),V0(JZ,{value:X,onChange:q,placeholder:`搜索 ${$.length} 个 Provider...`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),V0(Y$,{flexDirection:"column",height:12,children:V0(QZ,{items:z,onSelect:(K)=>J(K.value),indicatorComponent:ZZ,itemComponent:XZ,limit:10},void 0,!1,void 0,this)},void 0,!1,void 0,this),U.length===0&&V0(m1,{color:"yellow",children:"未找到匹配的 Provider,按 Esc 清除搜索"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};function i9($){if($==="model")return"provider";if($==="credential")return"model";return}import{jsxDEV as Z$}from"react/jsx-dev-runtime";var sQ=({mode:$,initialConfig:Q,modelId:Y,onComplete:J,onCancel:Z})=>{let[X,q]=R$("provider"),[U,z]=R$(),[K,F]=R$(),[G,_]=R$(""),[O,N]=R$(),[W,B]=R$(!1),L=u9(),w=d9(U?.id),I=P0(!1);UZ((b,H)=>{if(H.ctrl&&b==="c"||H.meta&&b==="c")$==="setup"?I():Z()});let k=nQ(async(b)=>{if(!U||!K)return;B(!0),N(void 0);try{if(b?.trim())await z$().setApiKey(U.id,b.trim());let H={provider:U.id,model:K.id,displayName:Q?.displayName};if($==="setup")J(H);else if($==="add"){let R=await m0().addModel(H);await m0().setCurrentModel(R.id),J(H)}else if(Y)await m0().updateModel(Y,H),J(H)}catch(H){N(H instanceof Error?H.message:"保存配置失败"),B(!1)}}),v=nQ((b)=>{if(F(b),U?.configured)k();else if(U?.supportsApiKey)q("credential");else N(`${U?.name??"Provider"} 需要 OAuth 或环境凭证,请先在外部完成认证`)}),A=nQ(()=>{N(void 0);let b=i9(X);if(b)q(b)});return Z$(qZ,{flexDirection:"column",padding:1,children:[Z$(tQ,{bold:!0,color:"blue",children:$==="edit"?"编辑模型":"添加模型"},void 0,!1,void 0,this),X==="provider"&&Z$(o9,{...L,onSelect:(b)=>{z(b),q("model")},onCancel:$==="setup"?()=>{return}:Z},void 0,!1,void 0,this),X==="model"&&U&&Z$(r9,{provider:U,...w,onSelect:v,onCancel:A},void 0,!1,void 0,this),X==="credential"&&U&&Z$(p9,{provider:U,value:G,onChange:_,onSubmit:()=>void k(G),onCancel:A,error:O},void 0,!1,void 0,this),W&&Z$(tQ,{color:"yellow",children:"正在保存配置..."},void 0,!1,void 0,this),O&&X!=="credential"&&Z$(tQ,{color:"red",children:O},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useMemoizedFn as x$}from"ahooks";import{promises as e9}from"fs";import{Box as o0,Text as R0,useInput as GZ}from"ink";import n9 from"ink-select-input";import KZ from"ink-text-input";import OZ from"os";import S8 from"path";import{useEffect as zZ,useMemo as f8,useRef as _Z,useState as p1}from"react";import{jsxDEV as Q0}from"react/jsx-dev-runtime";var u$=[{key:"allow",label:"Allow"},{key:"ask",label:"Ask"},{key:"deny",label:"Deny"},{key:"info",label:"Info"}],NZ={allow:"Add a new rule...",ask:"Add a new rule...",deny:"Add a new rule..."},HZ={allow:"Allow permission rules",ask:"Ask permission rules",deny:"Deny permission rules"},t9={project:"[项目共享配置]",global:"[用户全局配置]",local:"[本地配置]"},WZ=["project","global","local"],FZ={allow:[],ask:[],deny:[]},LZ={localExists:!1,projectExists:!1,globalExists:!1},s9={allow:[],ask:[],deny:[]};function BZ($){let Q=(J)=>Array.isArray(J)?J.filter((Z)=>typeof Z==="string"):[],Y=$?.permissions??{};return{allow:Q(Y?.allow),ask:Q(Y?.ask),deny:Q(Y?.deny)}}async function wZ($){try{let Q=await e9.readFile($,"utf-8"),Y=JSON.parse(Q);return{exists:!0,raw:Y,permissions:BZ(Y)}}catch(Q){if(Q.code==="ENOENT")return{exists:!1,raw:{},permissions:{...s9}};return console.warn(`[PermissionsManager] Failed to read ${$}:`,Q),{exists:!0,raw:{},permissions:{...s9}}}}function bZ($,Q){let Y=$.padEnd(32," "),J=Q==="local"?`${t9[Q]} <- 可删除`:t9[Q];return`${Y} ${J}`}var $J=({onClose:$})=>{let Y=l0()==="permissions-manager",J=P0(!1),[Z,X]=p1(0),q=u$[Z].key,[U,z]=p1(FZ),[K,F]=p1(LZ),[G,_]=p1(!0),[O,N]=p1("list"),[W,B]=p1(""),[L,w]=p1(null),[I,k]=p1(null),v=_Z(!1),A=f8(()=>S8.join(t(),".blade","settings.local.json"),[]),b=f8(()=>S8.join(t(),".blade","settings.json"),[]),H=f8(()=>S8.join(OZ.homedir(),".blade","settings.json"),[]),R=x$(async()=>{_(!0);let x=await Promise.all([{source:"local",path:A},{source:"project",path:b},{source:"global",path:H}].map(async({source:s,path:_0})=>{let k0=await wZ(_0);return{source:s,path:_0,...k0}})),C={localExists:x.find((s)=>s.source==="local")?.exists??!1,projectExists:x.find((s)=>s.source==="project")?.exists??!1,globalExists:x.find((s)=>s.source==="global")?.exists??!1};F(C);let J0={allow:[],ask:[],deny:[]},F0=Object.fromEntries(x.map((s)=>[s.source,s]));["allow","ask","deny"].forEach((s)=>{WZ.forEach((_0)=>{(F0[_0]?.permissions[s]??[]).forEach((i0,p8)=>{let g8={key:`${_0}:${p8}:${i0}`,rule:i0,source:_0};J0[s].push(g8)})})}),z(J0),_(!1)});zZ(()=>{R()},[R]);let j=x$(async(f,x)=>{try{let C=S8.join(t(),".blade","settings.local.json"),J0={allow:[],ask:[],deny:[]};try{let s=await e9.readFile(C,"utf-8"),k0=JSON.parse(s).permissions||{};J0={allow:Array.isArray(k0.allow)?k0.allow:[],ask:Array.isArray(k0.ask)?k0.ask:[],deny:Array.isArray(k0.deny)?k0.deny:[]}}catch(s){}let F0=x(J0);await m0().updateConfig({permissions:F0},{scope:"local",immediate:!0}),await R()}catch(C){throw console.error("[PermissionsManager] 修改权限规则失败:",C),C}});GZ((f,x)=>{if(x.ctrl&&f==="c"||x.meta&&f==="c"){J();return}if(O==="locked"){if(v.current){v.current=!1;return}N("list"),w(null),k(null);return}if(x.escape){if(O==="list"||q==="info")$();else N("list"),B(""),w(null),k(null);return}if(O==="list"){if(x.tab&&x.shift)X((C)=>(C-1+u$.length)%u$.length);else if(x.tab)X((C)=>(C+1)%u$.length);else if(f?.toLowerCase()==="q")$()}},{isActive:Y});let E=x$((f)=>{let x=f.value;if(q==="info")return;if(x.type==="add"){N("add"),B(""),k(null);return}if(x.entry.source!=="local"){N("locked"),v.current=!0,w({tab:q,entry:x.entry}),k({type:"error",text:x.entry.source==="project"?"此规则定义在项目共享配置中,无法在此删除。":"此规则来自用户全局配置,无法在此删除。"});return}N("confirm-delete"),w({tab:q,entry:x.entry}),k(null)}),p=x$(async()=>{if(q==="info")return;let f=W.trim();if(!f){k({type:"error",text:"Permission rule 不能为空"});return}if(U[q].map((C)=>C.rule).includes(f)){k({type:"error",text:"该规则已存在"});return}try{await j(q,(C)=>{let J0={allow:[...C.allow],ask:[...C.ask],deny:[...C.deny]};return J0[q]=[...new Set([...C[q],f])],J0}),N("list"),B(""),k({type:"success",text:"已添加本地权限规则"})}catch(C){k({type:"error",text:`保存失败: ${C instanceof Error?C.message:"未知错误"}`})}}),V=x$(async()=>{if(!L)return;let{tab:f,entry:x}=L;try{await j(f,(C)=>{let J0={allow:[...C.allow],ask:[...C.ask],deny:[...C.deny]};return J0[f]=C[f].filter((F0)=>F0!==x.rule),J0}),N("list"),w(null),k({type:"success",text:"已删除本地权限规则"})}catch(C){k({type:"error",text:`删除失败: ${C instanceof Error?C.message:"未知错误"}`})}}),u=f8(()=>{if(q==="info")return[];let f=q;return[{key:"add-new-rule",label:`› ${NZ[f]}`,value:{type:"add"}},...U[f].map((C)=>({key:C.key,label:bZ(C.rule,C.source),value:{type:"rule",entry:C}}))]},[q,U]),T=()=>Q0(o0,{marginBottom:1,children:u$.map((f,x)=>Q0(o0,{marginRight:2,children:Q0(R0,{color:x===Z?"yellow":"gray",children:["[",f.label,"]"]},void 0,!0,void 0,this)},f.key,!1,void 0,this))},void 0,!1,void 0,this),P=()=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{children:"配置文件优先级(从高到低):"},void 0,!1,void 0,this),Q0(o0,{flexDirection:"column",marginLeft:2,children:[Q0(R0,{children:["1. .blade/settings.local.json (本地配置,不提交 Git)"," ",K.localExists?"[OK] 存在":"[X] 不存在"]},void 0,!0,void 0,this),Q0(R0,{children:["2. .blade/settings.json (项目配置,提交 Git)"," ",K.projectExists?"[OK] 存在":"[X] 不存在"]},void 0,!0,void 0,this),Q0(R0,{children:["3. ~/.blade/settings.json (用户全局配置)"," ",K.globalExists?"[OK] 存在":"[X] 不存在"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q0(R0,{children:"说明:"},void 0,!1,void 0,this),Q0(o0,{flexDirection:"column",marginLeft:2,children:[Q0(R0,{children:"- /permissions 命令只管理本地配置 (.blade/settings.local.json)"},void 0,!1,void 0,this),Q0(R0,{children:"- 修改全局或项目配置请直接编辑对应文件"},void 0,!1,void 0,this),Q0(R0,{children:"- 本地配置不会提交到 Git"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),y=(f)=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{bold:!0,children:HZ[f]},void 0,!1,void 0,this),Q0(R0,{children:"Permission rules are a tool name, optionally followed by a specifier in parentheses."},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"例如: WebFetch 或 Bash(ls:*)"},void 0,!1,void 0,this),Q0(o0,{marginTop:1,children:Q0(KZ,{value:W,onChange:B,onSubmit:p},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"Enter 提交 · Esc 取消"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y0=(f,x)=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{bold:!0,children:["Delete ",f," permission rule?"]},void 0,!0,void 0,this),Q0(R0,{children:x.rule},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"From project local settings"},void 0,!1,void 0,this),Q0(R0,{children:"Are you sure you want to delete this permission rule?"},void 0,!1,void 0,this),Q0(n9,{items:[{label:"Yes",value:"yes"},{label:"No",value:"no"}],onSelect:(C)=>{if(C.value==="yes")V();else N("list"),w(null)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r=(f)=>Q0(o0,{flexDirection:"column",gap:1,children:[Q0(R0,{bold:!0,children:"Cannot delete this rule"},void 0,!1,void 0,this),Q0(R0,{children:f.rule},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:f.source==="project"?"This rule is defined in .blade/settings.json. 请手动编辑该文件以移除规则。":"This rule is defined in ~/.blade/settings.json. 请手动编辑该文件以移除规则。"},void 0,!1,void 0,this),Q0(R0,{color:"gray",children:"按任意键继续"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S=(f)=>Q0(n9,{items:u,isFocused:O==="list",onSelect:E},void 0,!1,void 0,this),G0=()=>{if(G)return Q0(R0,{children:"加载中..."},void 0,!1,void 0,this);if(q==="info")return P();if(O==="add")return y(q);if(O==="confirm-delete"&&L)return Y0(L.tab,L.entry);if(O==="locked"&&L)return r(L.entry);return S(q)};return Q0(o0,{flexDirection:"column",borderStyle:"round",borderColor:Y?"cyan":"gray",padding:1,width:80,children:[Q0(R0,{color:"cyan",bold:!0,children:"权限管理器"},void 0,!1,void 0,this),T(),Q0(o0,{flexDirection:"column",gap:1,children:G0()},void 0,!1,void 0,this),I&&Q0(o0,{marginTop:1,children:Q0(R0,{color:I.type==="success"?"green":"red",children:I.text},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q0(o0,{marginTop:1,children:Q0(R0,{color:"gray",children:"Tab 切换视图 · Esc 关闭 · Q 退出"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Box as v0,Text as q0,useInput as AZ}from"ink";import{jsxDEV as c}from"react/jsx-dev-runtime";function QJ({onCancel:$}){let Q=D8(),Y=Q.getAll(),J=Q.getBySource(),Z=Q.getStats(),X=P0(!1,$);if(AZ((q,U)=>{if(U.escape)$?.();else if(U.ctrl&&q==="c"||U.meta&&q==="c")X()}),Y.length===0)return c(v0,{flexDirection:"column",paddingY:1,children:[c(v0,{marginBottom:1,children:c(q0,{bold:!0,color:"cyan",children:"插件管理器"},void 0,!1,void 0,this)},void 0,!1,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:"没有已加载的插件"},void 0,!1,void 0,this)},void 0,!1,void 0,this),c(v0,{marginTop:1,paddingLeft:2,flexDirection:"column",children:[c(q0,{color:"gray",children:"插件目录位置:"},void 0,!1,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• ~/.blade/plugins/ - 用户级插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• .blade/plugins/ - 项目级插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• --plugin-dir - CLI 指定的插件"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{marginTop:1,paddingLeft:2,children:c(q0,{color:"gray",children:"使用 /plugins install <url> 安装新插件"},void 0,!1,void 0,this)},void 0,!1,void 0,this),c(v0,{marginTop:1,children:c(q0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return c(v0,{flexDirection:"column",paddingY:1,children:[c(v0,{marginBottom:1,children:[c(q0,{bold:!0,color:"cyan",children:"插件管理器"},void 0,!1,void 0,this),c(q0,{color:"gray",children:[" (共 ",Z.total," 个插件)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,marginBottom:1,children:c(q0,{color:"gray",children:["启用: ",Z.active," | 禁用: ",Z.inactive," | 命令: ",Z.commands," | 技能:"," ",Z.skills," | 代理: ",Z.agents]},void 0,!0,void 0,this)},void 0,!1,void 0,this),J.cli.length>0&&c(v0,{flexDirection:"column",marginBottom:1,children:[c(v0,{paddingLeft:1,children:[c(q0,{bold:!0,color:"magenta",children:"CLI 指定"},void 0,!1,void 0,this),c(q0,{color:"gray",children:" (--plugin-dir)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.cli.map((q)=>{let U=q.status==="active"?"[on]":"[off]";return c(v0,{flexDirection:"column",paddingLeft:2,children:[c(q0,{children:[c(q0,{bold:!0,color:"green",children:[U," ",q.manifest.name]},void 0,!0,void 0,this),c(q0,{color:"gray",children:[" v",q.manifest.version]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:q.manifest.description},void 0,!1,void 0,this)},void 0,!1,void 0,this),q.commands.length>0&&c(v0,{paddingLeft:2,children:c(q0,{color:"blue",children:["命令:"," ",q.commands.map((z)=>`/${z.namespacedName}`).join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},q.manifest.name,!0,void 0,this)})]},void 0,!0,void 0,this),J.project.length>0&&c(v0,{flexDirection:"column",marginBottom:1,children:[c(v0,{paddingLeft:1,children:[c(q0,{bold:!0,color:"yellow",children:"项目级"},void 0,!1,void 0,this),c(q0,{color:"gray",children:" (.blade/plugins/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.project.map((q)=>{let U=q.status==="active"?"[on]":"[off]";return c(v0,{flexDirection:"column",paddingLeft:2,children:[c(q0,{children:[c(q0,{bold:!0,color:"green",children:[U," ",q.manifest.name]},void 0,!0,void 0,this),c(q0,{color:"gray",children:[" v",q.manifest.version]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:q.manifest.description},void 0,!1,void 0,this)},void 0,!1,void 0,this),q.commands.length>0&&c(v0,{paddingLeft:2,children:c(q0,{color:"blue",children:["命令:"," ",q.commands.map((z)=>`/${z.namespacedName}`).join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},q.manifest.name,!0,void 0,this)})]},void 0,!0,void 0,this),J.user.length>0&&c(v0,{flexDirection:"column",marginBottom:1,children:[c(v0,{paddingLeft:1,children:[c(q0,{bold:!0,color:"cyan",children:"用户级"},void 0,!1,void 0,this),c(q0,{color:"gray",children:" (~/.blade/plugins/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.user.map((q)=>{let U=q.status==="active"?"[on]":"[off]";return c(v0,{flexDirection:"column",paddingLeft:2,children:[c(q0,{children:[c(q0,{bold:!0,color:"green",children:[U," ",q.manifest.name]},void 0,!0,void 0,this),c(q0,{color:"gray",children:[" v",q.manifest.version]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{paddingLeft:2,children:c(q0,{color:"gray",children:q.manifest.description},void 0,!1,void 0,this)},void 0,!1,void 0,this),q.commands.length>0&&c(v0,{paddingLeft:2,children:c(q0,{color:"blue",children:["命令:"," ",q.commands.map((z)=>`/${z.namespacedName}`).join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},q.manifest.name,!0,void 0,this)})]},void 0,!0,void 0,this),c(v0,{marginTop:1,paddingLeft:2,flexDirection:"column",children:[c(q0,{color:"gray",children:"可用命令:"},void 0,!1,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins list - 列出所有插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins info <name> - 显示插件详情"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins install <url> - 安装插件"]},void 0,!0,void 0,this),c(q0,{color:"gray",dimColor:!0,children:[" ","• /plugins enable/disable <name> - 启用/禁用插件"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c(v0,{marginTop:1,children:c(q0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{Box as p0,Text as g0,useInput as JJ,useStdout as yZ}from"ink";import vZ from"ink-text-input";import eQ,{useCallback as d$,useMemo as RZ,useState as g1}from"react";import{jsxDEV as K0}from"react/jsx-dev-runtime";var PZ=eQ.memo(({option:$,index:Q,isSelected:Y,isMultiSelect:J,isHighlighted:Z})=>K0(p0,{flexDirection:"column",marginBottom:1,children:[K0(g0,{color:Z?"yellow":Y?"green":void 0,bold:Z,children:[J?Y?"(*) ":"( ) ":Z?"> ":" ",Q+1,". ",$.label]},void 0,!0,void 0,this),K0(p0,{marginLeft:4,children:K0(g0,{color:"gray",children:$.description},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)),IZ=eQ.memo(({questions:$,answers:Q})=>K0(p0,{flexDirection:"column",marginBottom:1,children:$.map((Y)=>{let J=Q[Y.header],Z=Array.isArray(J)?J.join(", "):J||"(no answer)";return K0(p0,{marginBottom:1,children:[K0(g0,{backgroundColor:"blue",color:"white",children:[" ",Y.header," "]},void 0,!0,void 0,this),K0(g0,{color:"green",children:[" ",Z]},void 0,!0,void 0,this)]},Y.header,!0,void 0,this)})},void 0,!1,void 0,this)),YJ=eQ.memo(({questions:$,onComplete:Q,onCancel:Y})=>{let{stdout:J}=yZ(),Z=J.columns||80,q=l0()==="confirmation-prompt",U=P0(!1),[z,K]=g1("answering"),[F,G]=g1(0),[_,O]=g1({}),[N,W]=g1(0),[B,L]=g1([]),[w,I]=g1(!1),[k,v]=g1(""),[A,b]=g1(0),H=$[F],R=RZ(()=>{if(!H)return[];return[...H.options.map((T)=>({label:T.label,value:T.label,description:T.description})),{label:"Type something...",value:"__other__",description:"Enter custom response"}]},[H]),j=d$((T)=>{let P={..._,[H.header]:T};if(O(P),F<$.length-1)G(F+1),W(0),L([]),I(!1),v("");else K("submit"),b(0)},[_,H?.header,F,$.length]),E=d$((T)=>{let P=R[T];if(!P)return;if(P.value==="__other__"){I(!0);return}if(H.multiSelect)L((y)=>y.includes(P.value)?y.filter((Y0)=>Y0!==P.value):[...y,P.value]);else j(P.value)},[R,H?.multiSelect,j]),p=d$((T)=>{if(T.trim())j(T.trim())},[j]),V=d$(()=>{K("answering"),G(0),W(0),L([]),I(!1)},[]),u=d$(()=>{Q(_)},[_,Q]);if(JJ((T,P)=>{if(P.ctrl&&T==="c"||P.meta&&T==="c"){U();return}if(w){if(P.escape)I(!1),v("");return}if(P.escape){Y();return}let y=parseInt(T);if(y>=1&&y<=R.length){E(y-1);return}if(P.upArrow){W((Y0)=>Y0>0?Y0-1:R.length-1);return}if(P.downArrow||P.tab){W((Y0)=>Y0<R.length-1?Y0+1:0);return}if(P.return){if(H.multiSelect&&B.length>0)j(B);else E(N);return}if(T===" "&&H.multiSelect){let Y0=R[N];if(Y0&&Y0.value!=="__other__")L((r)=>r.includes(Y0.value)?r.filter((S)=>S!==Y0.value):[...r,Y0.value]);return}},{isActive:q&&z==="answering"&&!w}),JJ((T,P)=>{if(P.ctrl&&T==="c"||P.meta&&T==="c"){U();return}if(P.escape){Y();return}if(P.upArrow||P.downArrow||P.tab){b((y)=>y===0?1:0);return}if(P.return){if(A===0)u();else V();return}if(T.toLowerCase()==="y"){u();return}if(T.toLowerCase()==="e"){V();return}},{isActive:q&&z==="submit"}),z==="submit")return K0(p0,{flexDirection:"column",borderStyle:"round",borderColor:q?"green":"gray",padding:1,width:Math.min(Z-4,80),children:[K0(p0,{marginBottom:1,children:K0(g0,{bold:!0,color:"green",children:"[OK] Review Your Answers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0(IZ,{questions:$,answers:_},void 0,!1,void 0,this),K0(p0,{flexDirection:"column",marginTop:1,children:[K0(g0,{color:A===0?"yellow":void 0,bold:A===0,children:[A===0?"> ":" ","[Y] Submit answers"]},void 0,!0,void 0,this),K0(g0,{color:A===1?"yellow":void 0,bold:A===1,children:[A===1?"> ":" ","[E] Edit answers"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),K0(p0,{marginTop:1,children:K0(g0,{color:"gray",children:"Enter to confirm · Up/Down to navigate · Y/E for quick select"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!H)return null;return K0(p0,{flexDirection:"column",borderStyle:"round",borderColor:q?"cyan":"gray",padding:1,width:Math.min(Z-4,80),children:[K0(p0,{marginBottom:1,children:[K0(g0,{backgroundColor:"blue",color:"white",children:[" ",H.header," "]},void 0,!0,void 0,this),K0(g0,{children:[" ",H.question]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w?K0(p0,{flexDirection:"column",marginTop:1,children:[K0(g0,{color:"yellow",children:"Enter your response:"},void 0,!1,void 0,this),K0(p0,{marginTop:1,children:[K0(g0,{color:"cyan",children:"> "},void 0,!1,void 0,this),K0(vZ,{value:k,onChange:v,onSubmit:p,focus:q},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0(p0,{marginTop:1,children:K0(g0,{color:"gray",children:"(Press Enter to submit, ESC to go back)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this):K0(p0,{flexDirection:"column",children:R.map((T,P)=>K0(PZ,{option:T,index:P,isSelected:B.includes(T.value),isMultiSelect:H.multiSelect,isHighlighted:N===P},T.value,!1,void 0,this))},void 0,!1,void 0,this),!w&&K0(p0,{marginTop:1,flexDirection:"column",children:[K0(g0,{color:"gray",children:H.multiSelect?"Space to toggle · Enter to confirm · 1-9 for quick select":"Enter to select · Up/Down or Tab to navigate · 1-9 for quick select"},void 0,!1,void 0,this),H.multiSelect&&B.length>0&&K0(g0,{color:"green",children:["Selected: ",B.join(", ")]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),$.length>1&&K0(p0,{marginTop:1,children:K0(g0,{color:"gray",children:["Question ",F+1," of ",$.length]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});import{basename as MZ}from"node:path";import{Box as I$,Text as $1,useInput as TZ}from"ink";import kZ from"ink-select-input";import{useEffect as $6,useMemo as P$,useRef as UJ,useState as V8}from"react";function ZJ($){return`${$.projectPath}\x00${$.sessionId}`}function XJ($,Q){if(Q!=="fork")return[...$];return $.filter((Y)=>Y.relationType!=="subagent")}function qJ($){return{title:$==="fork"?"选择要 fork 的会话:":"选择要恢复的会话:",instructions:"(Left/Right to page | Up/Down to select | Enter to confirm | Esc to cancel)"}}import{jsxDEV as C0}from"react/jsx-dev-runtime";function CZ($){let Q=new Date($),J=new Date().getTime()-Q.getTime(),Z=Math.floor(J/86400000);if(Z===0)return`今天 ${Q.getHours().toString().padStart(2,"0")}:${Q.getMinutes().toString().padStart(2,"0")}`;if(Z===1)return"昨天";if(Z<7)return`${Z}天前`;return`${Q.getMonth()+1}/${Q.getDate()}`}function SZ($){return MZ($)}function fZ($){switch($){case"queued":return"QUEUED";case"running":return"RUNNING";case"failed":return"FAILED";case"cancelled":return"CANCELLED";case"interrupted":return"INTERRUPTED";case"completed":return"DONE"}}var DZ=({isSelected:$})=>C0(I$,{marginRight:1,children:C0($1,{color:$?"cyan":"gray",children:$?">":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),VZ=({isSelected:$,label:Q})=>C0($1,{color:$?"cyan":"white",bold:$,children:Q},void 0,!1,void 0,this),l$=20,GJ=({intent:$,sessions:Q,onSelect:Y,onCancel:J})=>{let[Z,X]=V8([]),[q,U]=V8(!1),[z,K]=V8(0),[F,G]=V8(!1),_=UJ(!1),O=UJ(!0);$6(()=>{return O.current=!0,()=>{O.current=!1}},[]);let W=l0()==="session-selector",B=P0(!1);TZ((H,R)=>{if(R.ctrl&&H==="c"||R.meta&&H==="c"){B();return}if(_.current)return;if(R.escape&&J){J();return}if(R.leftArrow||H==="h"||H==="H"){if(z>0)K((j)=>j-1);return}if(R.rightArrow||H==="l"||H==="L"){if(z<k-1)K((j)=>j+1);return}},{isActive:W}),$6(()=>{if(Q){X(Q);return}(async()=>{U(!0);try{let R=await k1.listSessions({cwd:t(),includeSubagents:!1});X(R)}catch(R){console.error("[SessionSelector] Failed to load sessions:",R),X([])}finally{U(!1)}})()},[Q]);let L=P$(()=>XJ(Q||Z,$),[$,Q,Z]),w=P$(()=>qJ($),[$]),I=P$(()=>{return L.map((H)=>{let R=SZ(H.taskSourceProjectPath??H.projectPath),j=CZ(H.lastMessageTime),E=`[${fZ(H.taskStatus)}]`,p=H.gitBranch?` (${H.gitBranch})`:"",V=H.hasErrors?" [!]":"",u=H.relationType==="subagent"?" ↳ subagent":H.relationType==="fork"?" ↳ fork":"",T=H.taskIsolation==="worktree"?` | wt:${H.taskWorktreeBranch??"managed"}`:H.taskIsolation==="local"?" | local":"",P=H.taskDiffStat?` | ${H.taskDiffStat.changedFiles} files +${H.taskDiffStat.additions} -${H.taskDiffStat.deletions}`:"";return{key:ZJ(H),label:`${E} ${j} | ${R}${p} | ${H.messageCount} 条消息${T}${P}${V}${u}`,value:H}})},[L]),k=P$(()=>Math.max(1,Math.ceil(I.length/l$)),[I.length]),v=P$(()=>{let H=z*l$;return I.slice(H,H+l$)},[I,z]),A=P$(()=>({start:z*l$+1,end:Math.min((z+1)*l$,I.length)}),[z,I.length]);$6(()=>{K(0)},[L.length]);let b=(H)=>{if(_.current)return;_.current=!0,G(!0);let R=()=>{if(!O.current)return;_.current=!1,G(!1)};Promise.resolve().then(()=>Y(H.value)).then(R,R)};if(q)return C0(I$,{flexDirection:"column",paddingX:2,paddingY:1,children:C0($1,{children:"正在加载会话列表..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(L.length===0)return C0(I$,{flexDirection:"column",paddingX:2,paddingY:1,children:[C0($1,{color:"yellow",children:"没有找到历史会话"},void 0,!1,void 0,this),C0($1,{dimColor:!0,children:[`
149
149
  `,"提示: 开始一次对话后,会话历史将保存到 ~/.blade/projects/"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return C0(I$,{flexDirection:"column",paddingX:2,paddingY:1,children:[C0($1,{bold:!0,color:"cyan",children:w.title},void 0,!1,void 0,this),C0($1,{dimColor:!0,children:[`
150
150
  `,w.instructions,`
151
- `]},void 0,!0,void 0,this),C0(kZ,{items:v,onSelect:b,isFocused:H&&!F,indicatorComponent:DZ,itemComponent:VZ},void 0,!1,void 0,this),F&&C0($1,{color:"cyan",children:$==="fork"?"Forking…":"Resuming…"},void 0,!1,void 0,this),C0(I$,{marginTop:1,flexDirection:"column",children:[C0($1,{dimColor:!0,children:["第 ",z+1,"/",k," 页 · 共 ",L.length," 个会话 · 显示"," ",A.start,"-",A.end]},void 0,!0,void 0,this),k>1&&C0(I$,{marginTop:1,children:[C0($1,{color:z>0?"cyan":"gray",children:z>0?"<< 上一页":" "},void 0,!1,void 0,this),C0($1,{children:" "},void 0,!1,void 0,this),C0($1,{color:z<k-1?"cyan":"gray",children:z<k-1?"下一页 >>":""},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Box as T0,Text as w0,useInput as jZ}from"ink";import{jsxDEV as o}from"react/jsx-dev-runtime";function OJ({onCancel:$}){let Y=KJ().getAll(),J=Y.filter((U)=>U.source==="builtin"),Z=Y.filter((U)=>U.source==="user"),X=Y.filter((U)=>U.source==="project"),q=P0(!1,$);if(jZ((U,z)=>{if(z.escape)$?.();else if(z.ctrl&&U==="c"||z.meta&&U==="c")q()}),Y.length===0)return o(T0,{flexDirection:"column",paddingY:1,children:[o(T0,{marginBottom:1,children:o(w0,{bold:!0,color:"cyan",children:"所有 Skills"},void 0,!1,void 0,this)},void 0,!1,void 0,this),o(T0,{paddingLeft:2,children:o(w0,{color:"gray",children:"没有找到任何 Skill"},void 0,!1,void 0,this)},void 0,!1,void 0,this),o(T0,{marginTop:1,paddingLeft:2,children:o(w0,{color:"gray",children:"配置文件位置: ~/.blade/skills/ 或 .blade/skills/"},void 0,!1,void 0,this)},void 0,!1,void 0,this),o(T0,{marginTop:1,children:o(w0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return o(T0,{flexDirection:"column",paddingY:1,children:[o(T0,{marginBottom:1,children:[o(w0,{bold:!0,color:"cyan",children:"所有 Skills"},void 0,!1,void 0,this),o(w0,{color:"gray",children:[" (找到 ",Y.length," 个)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X.length>0&&o(T0,{flexDirection:"column",marginBottom:1,children:[o(T0,{paddingLeft:1,children:[o(w0,{bold:!0,color:"yellow",children:"项目级"},void 0,!1,void 0,this),o(w0,{color:"gray",children:" (.blade/skills/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X.map((U)=>{let K=U.description.length>80?`${U.description.substring(0,80)}...`:U.description;return o(T0,{flexDirection:"column",paddingLeft:2,children:[o(w0,{children:[o(w0,{bold:!0,color:"green",children:["• ",U.name]},void 0,!0,void 0,this),o(w0,{color:"gray",children:[" - ",K]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U.allowedTools&&U.allowedTools.length>0&&o(T0,{paddingLeft:2,children:o(w0,{color:"gray",children:["工具: ",U.allowedTools.join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),o(T0,{paddingLeft:2,children:o(w0,{color:"gray",dimColor:!0,children:U.path},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},U.name,!0,void 0,this)})]},void 0,!0,void 0,this),Z.length>0&&o(T0,{flexDirection:"column",marginBottom:1,children:[o(T0,{paddingLeft:1,children:[o(w0,{bold:!0,color:"yellow",children:"用户级"},void 0,!1,void 0,this),o(w0,{color:"gray",children:" (~/.blade/skills/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Z.map((U)=>{let K=U.description.length>80?`${U.description.substring(0,80)}...`:U.description;return o(T0,{flexDirection:"column",paddingLeft:2,children:[o(w0,{children:[o(w0,{bold:!0,color:"green",children:["• ",U.name]},void 0,!0,void 0,this),o(w0,{color:"gray",children:[" - ",K]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U.allowedTools&&U.allowedTools.length>0&&o(T0,{paddingLeft:2,children:o(w0,{color:"gray",children:["工具: ",U.allowedTools.join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),o(T0,{paddingLeft:2,children:o(w0,{color:"gray",dimColor:!0,children:U.path},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},U.name,!0,void 0,this)})]},void 0,!0,void 0,this),J.length>0&&o(T0,{flexDirection:"column",marginBottom:1,children:[o(T0,{paddingLeft:1,children:[o(w0,{bold:!0,color:"cyan",children:"内置"},void 0,!1,void 0,this),o(w0,{color:"gray",children:" (builtin)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.map((U)=>{let K=U.description.length>80?`${U.description.substring(0,80)}...`:U.description;return o(T0,{flexDirection:"column",paddingLeft:2,children:[o(w0,{children:[o(w0,{bold:!0,color:"green",children:["• ",U.name]},void 0,!0,void 0,this),o(w0,{color:"gray",children:[" - ",K]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U.userInvocable&&o(T0,{paddingLeft:2,children:o(w0,{color:"blue",children:["命令: /",U.name]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},U.name,!0,void 0,this)})]},void 0,!0,void 0,this),o(T0,{marginTop:1,children:o(w0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{Box as EZ,Text as y1}from"ink";import hZ,{useEffect as mZ,useState as zJ}from"react";import{jsxDEV as Q1,Fragment as NJ}from"react/jsx-dev-runtime";var _J=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function pZ($){let Q=Math.floor($/1000);if(Q<60)return`${Q}s`;let Y=Math.floor(Q/60),J=Q%60;return`${Y}m ${J}s`}var HJ=hZ.memo(()=>{let $=$0((z)=>z.app.subagentProgress),Q=W0(),[Y,J]=zJ(0),[Z,X]=zJ(0);if(mZ(()=>{if(!$||$.status!=="running"){J(0),X(0);return}let z=setInterval(()=>{J((F)=>(F+1)%_J.length)},80),K=setInterval(()=>{X(Date.now()-$.startTime)},1000);return()=>{clearInterval(z),clearInterval(K)}},[$]),!$)return null;let q=$.status==="running"?_J[Y]:$.status==="completed"?"[OK]":"[X]",U=$.status==="running"?Q.colors.info:$.status==="completed"?Q.colors.success:Q.colors.error;return Q1(EZ,{paddingX:2,paddingY:0,flexDirection:"row",gap:1,children:[Q1(y1,{color:U,bold:!0,children:q},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.muted,children:"Subagent"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.text.primary,bold:!0,children:$.type},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.muted,children:"|"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.text.secondary,children:$.description},void 0,!1,void 0,this),$.currentTool&&Q1(NJ,{children:[Q1(y1,{color:Q.colors.muted,children:"|"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.warning,children:$.currentTool},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.status==="running"&&Z>0&&Q1(NJ,{children:[Q1(y1,{color:Q.colors.muted,children:"|"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.info,children:pZ(Z)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import{useMemoizedFn as gZ}from"ahooks";import{Box as K1,Text as g,useInput as cZ}from"ink";import xZ from"ink-select-input";import{useState as WJ}from"react";import{jsxDEV as m}from"react/jsx-dev-runtime";var FJ=X$.map(($)=>({label:$.label,value:$.id})),uZ=({theme:$})=>{let{colors:Q}=$;return m(K1,{flexDirection:"column",paddingLeft:1,paddingTop:1,children:[m(g,{bold:!0,color:Q.text.primary,children:"代码预览"},void 0,!1,void 0,this),m(g,{children:" "},void 0,!1,void 0,this),m(g,{color:Q.syntax.comment,children:"# function"},void 0,!1,void 0,this),m(g,{children:[m(g,{color:Q.syntax.keyword,children:"def"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.function,children:"fibonacci"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"("},void 0,!1,void 0,this),m(g,{color:Q.syntax.variable,children:"n"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"):"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.operator,children:"="},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.number,children:"0"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.number,children:"1"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.keyword,children:"for"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"_"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.keyword,children:"in"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.function,children:"range"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"("},void 0,!1,void 0,this),m(g,{color:Q.syntax.variable,children:"n"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"):"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.operator,children:"="},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.operator,children:"+"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.keyword,children:"return"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:" "},void 0,!1,void 0,this),m(g,{color:Q.error,children:["- print(",m(g,{color:Q.syntax.string,children:'"Hello, "'},void 0,!1,void 0,this)," + name)"]},void 0,!0,void 0,this),m(g,{color:Q.success,children:["+ print(",m(g,{color:Q.syntax.string,children:['f"Hello, ',"{","name","}",'"']},void 0,!0,void 0,this),")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},dZ=({theme:$})=>{let{colors:Q}=$;return m(K1,{flexDirection:"column",paddingLeft:1,paddingTop:1,children:[m(g,{children:" "},void 0,!1,void 0,this),m(g,{bold:!0,color:Q.text.primary,children:"颜色配置"},void 0,!1,void 0,this),m(g,{children:" "},void 0,!1,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Primary: "},void 0,!1,void 0,this),m(g,{color:Q.primary,children:Q.primary},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Success: "},void 0,!1,void 0,this),m(g,{color:Q.success,children:Q.success},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Error: "},void 0,!1,void 0,this),m(g,{color:Q.error,children:Q.error},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Warning: "},void 0,!1,void 0,this),m(g,{color:Q.warning,children:Q.warning},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Info: "},void 0,!1,void 0,this),m(g,{color:Q.info,children:Q.info},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},LJ=()=>{let $=I1(),Q=E0.getCurrentThemeName(),Y=X$.findIndex((N)=>N.label===Q),J=Y>=0?X$[Y].theme:X$[0].theme,[Z,X]=WJ(J),[q,U]=WJ(!1),z=gZ(async(N)=>{if(q)return;U(!0);try{await m0().setTheme(N.value),$.closeModal()}catch(H){console.error("主题切换失败:",H instanceof Error?H.message:H)}finally{U(!1)}}),K=(N)=>{let H=X$.find((B)=>B.id===N.value);if(H)X(H.theme)},G=l0()==="theme-selector",_=P0(!1);cZ((N,H)=>{if(H.ctrl&&N==="c"||H.meta&&N==="c"){_();return}if(H.escape&&!q)$.closeModal()},{isActive:G});let O=(N)=>{let{isSelected:H,label:B}=N,w=B===Q?"[OK]":" ";return m(g,{color:H?Z.colors.primary:Z.colors.text.primary,children:[w," ",B]},void 0,!0,void 0,this)};return m(K1,{flexDirection:"column",height:"100%",children:[m(K1,{paddingX:2,paddingY:1,borderStyle:"single",borderColor:Z.colors.border.light,children:m(g,{bold:!0,color:Z.colors.primary,children:"主题选择器"},void 0,!1,void 0,this)},void 0,!1,void 0,this),m(K1,{flexDirection:"row",flexGrow:1,children:[m(K1,{width:"40%",borderStyle:"single",borderColor:Z.colors.border.light,paddingX:1,children:m(K1,{flexDirection:"column",children:[m(K1,{paddingTop:1,paddingBottom:1,children:m(g,{bold:!0,color:Z.colors.text.primary,children:["可用主题 (",FJ.length,")"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),m(xZ,{items:FJ,initialIndex:Y>=0?Y:0,onSelect:z,onHighlight:K,itemComponent:O},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),m(K1,{width:"60%",flexDirection:"column",borderStyle:"single",borderColor:Z.colors.border.light,children:[m(uZ,{theme:Z},void 0,!1,void 0,this),m(dZ,{theme:Z},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),m(K1,{paddingX:2,paddingY:1,borderStyle:"single",borderColor:Z.colors.border.light,children:m(g,{color:Z.colors.text.muted,children:q?"正在保存...":"Enter: 选择主题 | Esc: 取消"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as b0}from"react/jsx-dev-runtime";var d0=T1("UI"),wJ=({debug:$,continue:Q,...Y})=>{if($)d0.debug("[Debug] BladeInterface props:",{permissionMode:Y.permissionMode,yolo:Y.yolo,maxTurns:Y.maxTurns,continue:Q});let J=j8(!1),Z=j8(!1),X=j8(!1),q=j8(null),U=H6(),z=W6(),K=a$(),F=B6(),G=L6(),_=I1(),O=P1(),N=R6(),H=G$(),B=M1(),L=v6();x1(()=>{if(E0.getCurrentThemeName()!==L)try{E0.setTheme(L)}catch{}},[L]);let w=U==="ready",I=U==="needsSetup",k=U==="idle",{confirmationState:v,confirmationHandler:A,handleResponse:b,dismissAll:W}=s6(),{executeCommand:R,handleAbort:j,cleanupAgent:E}=o6(Y.systemPrompt,Y.appendSystemPrompt,A,Y.maxTurns,W),{getPreviousCommand:p,getNextCommand:V,addToHistory:u}=n6();H2();let T=$2("",0),P=j0(async()=>{let l=H,z0;if(l==="default")z0="autoEdit";else if(l==="autoEdit")z0="plan";else if(l==="plan")z0="default";else z0="default";try{await m0().setPermissionMode(z0)}catch(f0){d0.error("权限模式切换失败:",f0 instanceof Error?f0.message:f0)}}),y=j0(async(l)=>{try{await m0().addModel({displayName:l.displayName,provider:l.provider,model:l.model,overrides:l.overrides}),_.setInitializationStatus("ready")}catch(z0){d0.error("初始化配置保存失败:",z0 instanceof Error?z0.message:z0),_.setInitializationStatus("ready")}}),Y0=j0(()=>{if(K==="shortcuts")_.closeModal();else _.setActiveModal("shortcuts")}),r=j0(async(l,z0,f0)=>{return J8({intent:z0,session:l,newSessionId:f0?.newSessionId,announceFork:f0?.announceFork},t(),O,E)}),S=j0(async(l,z0)=>{let f0=t(),G6=(await Q8(z0,f0)).find((uJ)=>uJ.sessionId===l);if(!G6)throw Error(`Session not found: ${l}`);return G6}),{showSuggestions:G0,suggestions:f,selectedSuggestionIndex:x}=N2(T,R,p,V,u,j,B,P,Y0,K==="shortcuts");x1(()=>{if(T.value&&K==="shortcuts")_.closeModal()},[T.value,K,_]);let C=j0(async()=>{X.current=!0;try{let l=Y.forkSession?"fork":"resume",z0=await Q8(l,t());if(z0.length===0){if(Y.forkSession){d0.error("没有可供 fork 的历史会话"),O1(1);return}O.addAssistantMessage("没有找到历史会话,开始新对话。");return}let f0=z0[0];await r(f0,l,{newSessionId:Y.forkSession?Y.sessionId:void 0,announceFork:Y.forkSession?!1:void 0})}catch(l){if(d0.error("[BladeInterface] 继续会话失败:",l),Y.forkSession){O1(1);return}O.addAssistantMessage("继续会话失败,开始新对话。")}}),J0=j0(async()=>{X.current=!0;try{if(typeof Y.resume==="string"&&Y.resume!=="true"){let f0=Y.forkSession?"fork":"resume",U6=await S(Y.resume,f0);await r(U6,f0,{newSessionId:Y.forkSession?Y.sessionId:void 0,announceFork:Y.forkSession?!1:void 0});return}let l=Y.forkSession?"fork":"resume",z0=await Q8(l,t());if(z0.length===0)d0.error("没有找到历史会话"),O1(1);_.showSessionSelector(z0,l)}catch(l){d0.error("[BladeInterface] 加载会话失败:",l),O1(1)}});x1(()=>{if(J.current)return;if(Q){J.current=!0,C();return}if(Y.resume)J.current=!0,J0()},[Q,Y.resume,C,J0]);let F0=j0(async(l)=>{let z0=v.details?.type;if(z0==="enterPlanMode"&&l.approved)try{await m0().setPermissionMode("plan"),d0.debug("[BladeInterface] Entered Plan mode")}catch(f0){d0.error("[BladeInterface] Failed to enter Plan mode:",f0)}if(z0==="exitPlanMode"&&l.approved)d0.debug("[BladeInterface] ExitPlanMode approved, Store auto-synced");b(l)}),s=j0(()=>{O.addAssistantMessage("设置已取消"),O.addAssistantMessage("Blade 需要 API 配置才能正常工作。"),O.addAssistantMessage("您可以稍后运行 Blade 重新进入设置向导。"),O1(0)}),_0=j0(()=>{_.closeModal()}),k0=j0(async(l)=>{try{await r(l,F?.intent??"resume"),_.closeModal()}catch(z0){d0.error("[BladeInterface] Failed to restore session:",z0),O.addAssistantMessage(`会话操作失败: ${z0 instanceof Error?z0.message:"未知错误"}`),_.closeModal()}}),i0=j0(()=>{if(Y.resume)O1(0);else _.closeModal()}),p8=j0((l)=>{_.showModelEditWizard(l)}),g8=j0((l)=>{O.addAssistantMessage(`已添加模型配置: ${l.displayName??l.model},并已切换到该模型`),_0()}),VJ=j0((l)=>{O.addAssistantMessage(`已更新模型配置: ${l.displayName??l.model}`),_0()});x1(()=>{if(I){N.setFocus("model-config-wizard");return}if(v.isVisible)N.setFocus("confirmation-prompt");else if(K==="sessionSelector")N.setFocus("session-selector");else if(K==="themeSelector")N.setFocus("theme-selector");else if(K==="modelSelector")N.setFocus("model-selector");else if(K==="modelAddWizard"||K==="modelEditWizard")N.setFocus("model-config-wizard");else if(K==="permissionsManager")N.setFocus("permissions-manager");else if(K==="agentsManager")N.setFocus("agents-manager");else if(K==="agentCreationWizard")N.setFocus("agent-creation-wizard");else if(K==="hooksManager")N.setFocus("hooks-manager");else if(K==="shortcuts")N.setFocus("main-input");else N.setFocus("main-input")},[I,v.isVisible,K,N.setFocus]),x1(()=>{if(!w||X.current)return;if(BJ().length>0){X.current=!0;return}X.current=!0,O.addAssistantMessage("请输入您的问题,我将为您提供帮助。")},[w]),x1(()=>{if(!z)return;if(q.current===z)return;if(q.current=z,U==="error")O.addAssistantMessage(`初始化失败: ${z}`);else O.addAssistantMessage(`${z}`),O.addAssistantMessage("请重新尝试设置,或检查文件权限")},[z,U,O.addAssistantMessage]);let jJ=j0(async(l)=>{try{await R({displayText:l,text:l,images:[],parts:[{type:"text",text:l}]})}catch(z0){let f0=z0 instanceof Error?z0.message:"无法发送初始消息";O.addAssistantMessage(`初始消息发送失败:${f0}`)}});x1(()=>{let l=Y.initialMessage?.trim();if(!l||Z.current||!w||I)return;Z.current=!0,u(l),jJ(l)},[Y.initialMessage,w,I,R,u]);let EJ=j0(async(l)=>{try{await m0().setPermissionMode(l)}catch(z0){d0.error("权限模式初始化失败:",z0 instanceof Error?z0.message:z0)}});if(x1(()=>{let l=Y.permissionMode;if($)d0.debug("[Debug] permissionMode from CLI:",l),d0.debug("[Debug] current permissionMode:",H);if(!l||l===H)return;EJ(l)},[Y.permissionMode,H]),k)return null;if(I)return b0(sQ,{mode:"setup",onComplete:y,onCancel:s},void 0,!1,void 0,this);if($)d0.debug("[Debug] 渲染主界面,条件检查:",{confirmationVisible:v.isVisible,activeModal:K});let Z6=K==="modelSelector",d1=G,T$=K==="modelAddWizard"?"add":K==="modelEditWizard"&&d1?"edit":null,hJ=Z6||Boolean(T$),mJ=K==="agentsManager",pJ=K==="agentCreationWizard",gJ=K==="skillsManager",cJ=K==="pluginsManager",xJ=d1?{displayName:d1.displayName,provider:d1.provider,model:d1.model,overrides:d1.overrides}:void 0,X6=v.isVisible&&v.details?v.details.type==="askUserQuestion"&&v.details.questions?b0(YJ,{questions:v.details.questions,onComplete:(l)=>F0({approved:!0,answers:l}),onCancel:()=>F0({approved:!1})},void 0,!1,void 0,this):b0(Q9,{details:v.details,onResponse:F0},void 0,!1,void 0,this):K==="themeSelector"?b0(LJ,{},void 0,!1,void 0,this):K==="permissionsManager"?b0($J,{onClose:_0},void 0,!1,void 0,this):K==="sessionSelector"?b0(GJ,{intent:F?.intent??"resume",sessions:F?.sessions,onSelect:k0,onCancel:i0},void 0,!1,void 0,this):K==="hooksManager"?b0(Y9,{onClose:_0},void 0,!1,void 0,this):null,q6=Boolean(X6);return b0(c1,{flexDirection:"column",width:"100%",overflow:"hidden",children:[X6,b0(c1,{flexDirection:"column",display:q6?"none":"flex",children:[b0(h9,{},void 0,!1,void 0,this),b0(HJ,{},void 0,!1,void 0,this),b0(A9,{paused:q6},void 0,!1,void 0,this),b0(H9,{input:T.value,cursorPosition:T.cursorPosition,onChange:T.setValue,onChangeCursorPosition:T.setCursorPosition,onAddPasteMapping:T.addPasteMapping,onAddImagePasteMapping:T.addImagePasteMapping},void 0,!1,void 0,this),Z6&&b0(c1,{marginTop:1,paddingX:2,children:b0(m9,{onClose:_0,onEdit:p8},void 0,!1,void 0,this)},void 0,!1,void 0,this),T$&&b0(c1,{marginTop:1,paddingX:2,children:b0(sQ,{mode:T$,modelId:d1?.id,initialConfig:T$==="edit"?xJ:void 0,onComplete:T$==="edit"?VJ:g8,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),mJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(w2,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),pJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(E$,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),gJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(OJ,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),cJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(QJ,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),b0(I2,{suggestions:f,selectedIndex:x,visible:G0&&!hJ},void 0,!1,void 0,this),b0(P2,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Box as lZ,Text as u1}from"ink";import rZ from"react";import{jsxDEV as v1}from"react/jsx-dev-runtime";class E8 extends rZ.Component{constructor($){super($);this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError($){return{hasError:!0,error:$,errorInfo:null}}componentDidCatch($,Q){this.setState({error:$,errorInfo:Q}),console.error("未捕获的错误:",$,Q)}render(){if(this.state.hasError)return v1(lZ,{flexDirection:"column",padding:1,borderStyle:"round",borderColor:"red",children:[v1(u1,{color:"red",children:"应用发生错误"},void 0,!1,void 0,this),v1(u1,{children:" "},void 0,!1,void 0,this),v1(u1,{color:"red",children:this.state.error?.message},void 0,!1,void 0,this),v1(u1,{children:" "},void 0,!1,void 0,this),v1(u1,{color:"gray",children:"错误详情:"},void 0,!1,void 0,this),v1(u1,{color:"gray",children:this.state.error?.stack},void 0,!1,void 0,this),v1(u1,{children:" "},void 0,!1,void 0,this),v1(u1,{color:"yellow",children:"请重启应用或联系开发者"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return this.props.children}}import{Box as q$,Text as R1,useInput as aZ}from"ink";import{useState as Q6}from"react";import{jsxDEV as c0}from"react/jsx-dev-runtime";var h8=[{key:"update",label:"Update now",description:`runs \`${AJ()}\``},{key:"skip",label:"Skip",description:""},{key:"skip_until_next",label:"Skip until next version",description:""}],vJ=({versionInfo:$,onComplete:Q})=>{let[Y,J]=Q6(0),[Z,X]=Q6(!1),[q,U]=Q6(null);aZ((K,F)=>{if(F.ctrl&&K==="c"){V$().shutdown("SIGINT",0);return}if(Z||q)return;if(F.upArrow||K==="k")J((G)=>G>0?G-1:h8.length-1);else if(F.downArrow||K==="j")J((G)=>G<h8.length-1?G+1:0);else if(F.return)z(h8[Y].key);else if(K==="1")z("update");else if(K==="2")z("skip");else if(K==="3")z("skip_until_next")});let z=async(K)=>{switch(K){case"update":{X(!0);let F=await yJ();U(F.message),setTimeout(()=>{V$().shutdown("SIGINT",0)},1500);break}case"skip":Q();break;case"skip_until_next":if($.latestVersion)await bJ($.latestVersion);Q();break}};if(q)return c0(q$,{flexDirection:"column",marginY:1,children:c0(R1,{children:q},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(Z)return c0(q$,{flexDirection:"column",marginY:1,children:c0(R1,{color:"cyan",children:"Updating..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return c0(q$,{flexDirection:"column",marginY:1,children:[c0(R1,{color:"yellow",bold:!0,children:["Update available! ",c0(R1,{color:"gray",children:[$.currentVersion," ","->"," ",$.latestVersion]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c0(q$,{marginTop:1,children:c0(R1,{color:"gray",children:["Release notes:"," ",c0(R1,{color:"cyan",underline:!0,children:$.releaseNotesUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),c0(q$,{flexDirection:"column",marginTop:1,children:h8.map((K,F)=>{let G=F===Y,_=G?"› ":" ",O=`${F+1}. `;return c0(q$,{children:c0(R1,{color:G?"cyan":void 0,children:[_,O,K.label,K.description&&c0(R1,{color:"gray",children:[" (",K.description,")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},K.key,!1,void 0,this)})},void 0,!1,void 0,this),c0(q$,{marginTop:1,children:c0(R1,{color:"gray",children:"Press enter to continue"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};function M$($){return($ instanceof Error?$.message:String($)).replace(/sk-[a-zA-Z0-9]{32,}/g,"sk-***").replace(/apiKey['":\s]+[a-zA-Z0-9-_]+/gi,"apiKey: ***").replace(/API_KEY['":\s=]+[a-zA-Z0-9-_]+/gi,"API_KEY=***")}import{jsxDEV as m8}from"react/jsx-dev-runtime";function iZ($){if(r0().config.actions.setConfig($),$.debug)console.log("[Debug] 模型配置检查通过,准备就绪");z1().setInitializationStatus("ready")}var R_=($)=>{let[Q,Y]=Y6(!1),[J,Z]=Y6(null),[X,q]=Y6(!1),U=J6((F,G)=>{let _=F instanceof Error?F.message:String(F);if(z1().setInitializationError(_),z1().setInitializationStatus("error"),Y(!0),G)console.error("[FAIL] 应用初始化失败:",_)}),z=J6(async()=>{try{let F=r0().config.config??PJ,G=IJ(F,$);if(iZ(G),G.resumeSessionId)MJ().restoreSession(G.resumeSessionId,[]);if(G.debug)console.error("[Debug] 运行时配置:",G);let _=G.theme;if(_&&E0.hasTheme(_)){if(E0.setTheme(_),$.debug)console.log(`[OK] 已加载主题: ${_}`)}try{let O=S1.loadFromStandardLocations();if($.agents)S1.applyOverrides(SJ($.agents));if($.debug&&O>0)console.log(`[OK] 已加载 ${O} 个 subagents: ${S1.getAllNames().join(", ")}`)}catch(O){if($.debug)console.warn("Subagents 加载失败:",M$(O))}try{let O=q1.getInstance();if(O.loadConfig(G.hooks||{}),$.debug&&G.hooks?.enabled)console.log("[OK] Hooks 系统已启用");let N=r0(),H=N.session.sessionId;if(RJ(H),O.isEnabled()){let B=N.config.config?.permissionMode||"default",L=!!$.resume,w=await O.executeSessionStartHooks({projectDir:t(),sessionId:H,permissionMode:B,isResume:L,resumeSessionId:typeof $.resume==="string"?$.resume:void 0});if(w.env){for(let[I,k]of Object.entries(w.env))process.env[I]=k;if($.debug)console.log("[OK] SessionStart hooks 注入环境变量:",Object.keys(w.env).join(", "))}if(w.warning&&$.debug)console.warn("SessionStart hooks 警告:",w.warning)}}catch(O){if($.debug)console.warn("Hooks 初始化失败:",M$(O))}try{let O=await kJ();if($.debug&&O.skills.length>0)console.log(`[OK] 已加载 ${O.skills.length} 个 skills: ${O.skills.map((N)=>N.name).join(", ")}`);if(O.errors.length>0&&$.debug)for(let N of O.errors)console.warn(`Skill 加载错误 (${N.path}): ${N.error}`)}catch(O){if($.debug)console.warn("Skills 初始化失败:",M$(O))}try{let O=await DJ(t());if($.debug&&O.commands.length>0)console.log(`[OK] 已加载 ${O.commands.length} 个自定义命令: ${O.commands.map((N)=>N.name).join(", ")}`);if(O.errors.length>0&&$.debug)for(let N of O.errors)console.warn(`自定义命令加载错误 (${N.path}): ${N.error}`)}catch(O){if($.debug)console.warn("自定义命令初始化失败:",M$(O))}try{let N=await D8().initialize(t(),$.pluginDir||[]);if($.debug&&N.plugins.length>0)console.log(`[OK] 已加载 ${N.plugins.length} 个插件: ${N.plugins.map((H)=>H.manifest.name).join(", ")}`);if(N.plugins.length>0){let H=await fJ();if($.debug){let{totalCommands:B,totalSkills:L,totalAgents:w,totalMcpServers:I}=H;console.log(` [OK] 已集成: ${B} 命令, ${L} 技能, ${w} 代理, ${I} MCP 服务器`)}}if(N.errors.length>0&&$.debug)for(let H of N.errors)console.warn(`插件加载错误 (${H.path}): ${H.error}`)}catch(O){if($.debug)console.warn("插件系统初始化失败:",M$(O))}Y8(async()=>{await CJ.getInstance().killAll(),await TJ.getInstance().disconnectAll(),q1.getInstance().cleanup()}),Y(!0)}catch(F){U(F,!!$.debug)}}),K=J6(async()=>{if($.versionCheckPromise){let F=await $.versionCheckPromise;if(F){Z(F),q(!0);return}}await z()});if(oZ(()=>{K()},[]),X&&J)return m8(E8,{children:m8(vJ,{versionInfo:J,onComplete:()=>{q(!1),z()}},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!Q)return null;return m8(E8,{children:m8(wJ,{...$},void 0,!1,void 0,this)},void 0,!1,void 0,this)};export{R_ as AppWrapper};
151
+ `]},void 0,!0,void 0,this),C0(kZ,{items:v,onSelect:b,isFocused:W&&!F,indicatorComponent:DZ,itemComponent:VZ},void 0,!1,void 0,this),F&&C0($1,{color:"cyan",children:$==="fork"?"Forking…":"Resuming…"},void 0,!1,void 0,this),C0(I$,{marginTop:1,flexDirection:"column",children:[C0($1,{dimColor:!0,children:["第 ",z+1,"/",k," 页 · 共 ",L.length," 个会话 · 显示"," ",A.start,"-",A.end]},void 0,!0,void 0,this),k>1&&C0(I$,{marginTop:1,children:[C0($1,{color:z>0?"cyan":"gray",children:z>0?"<< 上一页":" "},void 0,!1,void 0,this),C0($1,{children:" "},void 0,!1,void 0,this),C0($1,{color:z<k-1?"cyan":"gray",children:z<k-1?"下一页 >>":""},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Box as T0,Text as w0,useInput as jZ}from"ink";import{jsxDEV as o}from"react/jsx-dev-runtime";function OJ({onCancel:$}){let Y=KJ().getAll(),J=Y.filter((U)=>U.source==="builtin"),Z=Y.filter((U)=>U.source==="user"),X=Y.filter((U)=>U.source==="project"),q=P0(!1,$);if(jZ((U,z)=>{if(z.escape)$?.();else if(z.ctrl&&U==="c"||z.meta&&U==="c")q()}),Y.length===0)return o(T0,{flexDirection:"column",paddingY:1,children:[o(T0,{marginBottom:1,children:o(w0,{bold:!0,color:"cyan",children:"所有 Skills"},void 0,!1,void 0,this)},void 0,!1,void 0,this),o(T0,{paddingLeft:2,children:o(w0,{color:"gray",children:"没有找到任何 Skill"},void 0,!1,void 0,this)},void 0,!1,void 0,this),o(T0,{marginTop:1,paddingLeft:2,children:o(w0,{color:"gray",children:"配置文件位置: ~/.blade/skills/ 或 .blade/skills/"},void 0,!1,void 0,this)},void 0,!1,void 0,this),o(T0,{marginTop:1,children:o(w0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return o(T0,{flexDirection:"column",paddingY:1,children:[o(T0,{marginBottom:1,children:[o(w0,{bold:!0,color:"cyan",children:"所有 Skills"},void 0,!1,void 0,this),o(w0,{color:"gray",children:[" (找到 ",Y.length," 个)"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X.length>0&&o(T0,{flexDirection:"column",marginBottom:1,children:[o(T0,{paddingLeft:1,children:[o(w0,{bold:!0,color:"yellow",children:"项目级"},void 0,!1,void 0,this),o(w0,{color:"gray",children:" (.blade/skills/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X.map((U)=>{let K=U.description.length>80?`${U.description.substring(0,80)}...`:U.description;return o(T0,{flexDirection:"column",paddingLeft:2,children:[o(w0,{children:[o(w0,{bold:!0,color:"green",children:["• ",U.name]},void 0,!0,void 0,this),o(w0,{color:"gray",children:[" - ",K]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U.allowedTools&&U.allowedTools.length>0&&o(T0,{paddingLeft:2,children:o(w0,{color:"gray",children:["工具: ",U.allowedTools.join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),o(T0,{paddingLeft:2,children:o(w0,{color:"gray",dimColor:!0,children:U.path},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},U.name,!0,void 0,this)})]},void 0,!0,void 0,this),Z.length>0&&o(T0,{flexDirection:"column",marginBottom:1,children:[o(T0,{paddingLeft:1,children:[o(w0,{bold:!0,color:"yellow",children:"用户级"},void 0,!1,void 0,this),o(w0,{color:"gray",children:" (~/.blade/skills/)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Z.map((U)=>{let K=U.description.length>80?`${U.description.substring(0,80)}...`:U.description;return o(T0,{flexDirection:"column",paddingLeft:2,children:[o(w0,{children:[o(w0,{bold:!0,color:"green",children:["• ",U.name]},void 0,!0,void 0,this),o(w0,{color:"gray",children:[" - ",K]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U.allowedTools&&U.allowedTools.length>0&&o(T0,{paddingLeft:2,children:o(w0,{color:"gray",children:["工具: ",U.allowedTools.join(", ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),o(T0,{paddingLeft:2,children:o(w0,{color:"gray",dimColor:!0,children:U.path},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},U.name,!0,void 0,this)})]},void 0,!0,void 0,this),J.length>0&&o(T0,{flexDirection:"column",marginBottom:1,children:[o(T0,{paddingLeft:1,children:[o(w0,{bold:!0,color:"cyan",children:"内置"},void 0,!1,void 0,this),o(w0,{color:"gray",children:" (builtin)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.map((U)=>{let K=U.description.length>80?`${U.description.substring(0,80)}...`:U.description;return o(T0,{flexDirection:"column",paddingLeft:2,children:[o(w0,{children:[o(w0,{bold:!0,color:"green",children:["• ",U.name]},void 0,!0,void 0,this),o(w0,{color:"gray",children:[" - ",K]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U.userInvocable&&o(T0,{paddingLeft:2,children:o(w0,{color:"blue",children:["命令: /",U.name]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},U.name,!0,void 0,this)})]},void 0,!0,void 0,this),o(T0,{marginTop:1,children:o(w0,{dimColor:!0,children:"按 ESC 返回菜单"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{Box as EZ,Text as y1}from"ink";import hZ,{useEffect as mZ,useState as zJ}from"react";import{jsxDEV as Q1,Fragment as NJ}from"react/jsx-dev-runtime";var _J=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function pZ($){let Q=Math.floor($/1000);if(Q<60)return`${Q}s`;let Y=Math.floor(Q/60),J=Q%60;return`${Y}m ${J}s`}var HJ=hZ.memo(()=>{let $=$0((z)=>z.app.subagentProgress),Q=W0(),[Y,J]=zJ(0),[Z,X]=zJ(0);if(mZ(()=>{if(!$||$.status!=="running"){J(0),X(0);return}let z=setInterval(()=>{J((F)=>(F+1)%_J.length)},80),K=setInterval(()=>{X(Date.now()-$.startTime)},1000);return()=>{clearInterval(z),clearInterval(K)}},[$]),!$)return null;let q=$.status==="running"?_J[Y]:$.status==="completed"?"[OK]":"[X]",U=$.status==="running"?Q.colors.info:$.status==="completed"?Q.colors.success:Q.colors.error;return Q1(EZ,{paddingX:2,paddingY:0,flexDirection:"row",gap:1,children:[Q1(y1,{color:U,bold:!0,children:q},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.muted,children:"Subagent"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.text.primary,bold:!0,children:$.type},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.muted,children:"|"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.text.secondary,children:$.description},void 0,!1,void 0,this),$.currentTool&&Q1(NJ,{children:[Q1(y1,{color:Q.colors.muted,children:"|"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.warning,children:$.currentTool},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.status==="running"&&Z>0&&Q1(NJ,{children:[Q1(y1,{color:Q.colors.muted,children:"|"},void 0,!1,void 0,this),Q1(y1,{color:Q.colors.info,children:pZ(Z)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});import{useMemoizedFn as gZ}from"ahooks";import{Box as K1,Text as g,useInput as cZ}from"ink";import xZ from"ink-select-input";import{useState as WJ}from"react";import{jsxDEV as m}from"react/jsx-dev-runtime";var FJ=X$.map(($)=>({label:$.label,value:$.id})),uZ=({theme:$})=>{let{colors:Q}=$;return m(K1,{flexDirection:"column",paddingLeft:1,paddingTop:1,children:[m(g,{bold:!0,color:Q.text.primary,children:"代码预览"},void 0,!1,void 0,this),m(g,{children:" "},void 0,!1,void 0,this),m(g,{color:Q.syntax.comment,children:"# function"},void 0,!1,void 0,this),m(g,{children:[m(g,{color:Q.syntax.keyword,children:"def"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.function,children:"fibonacci"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"("},void 0,!1,void 0,this),m(g,{color:Q.syntax.variable,children:"n"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"):"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.operator,children:"="},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.number,children:"0"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.number,children:"1"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.keyword,children:"for"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"_"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.keyword,children:"in"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.function,children:"range"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"("},void 0,!1,void 0,this),m(g,{color:Q.syntax.variable,children:"n"},void 0,!1,void 0,this),m(g,{color:Q.text.primary,children:"):"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.operator,children:"="},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this),m(g,{color:Q.syntax.operator,children:","},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.operator,children:"+"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"b"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[" ",m(g,{color:Q.syntax.keyword,children:"return"},void 0,!1,void 0,this)," ",m(g,{color:Q.syntax.variable,children:"a"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:" "},void 0,!1,void 0,this),m(g,{color:Q.error,children:["- print(",m(g,{color:Q.syntax.string,children:'"Hello, "'},void 0,!1,void 0,this)," + name)"]},void 0,!0,void 0,this),m(g,{color:Q.success,children:["+ print(",m(g,{color:Q.syntax.string,children:['f"Hello, ',"{","name","}",'"']},void 0,!0,void 0,this),")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},dZ=({theme:$})=>{let{colors:Q}=$;return m(K1,{flexDirection:"column",paddingLeft:1,paddingTop:1,children:[m(g,{children:" "},void 0,!1,void 0,this),m(g,{bold:!0,color:Q.text.primary,children:"颜色配置"},void 0,!1,void 0,this),m(g,{children:" "},void 0,!1,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Primary: "},void 0,!1,void 0,this),m(g,{color:Q.primary,children:Q.primary},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Success: "},void 0,!1,void 0,this),m(g,{color:Q.success,children:Q.success},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Error: "},void 0,!1,void 0,this),m(g,{color:Q.error,children:Q.error},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Warning: "},void 0,!1,void 0,this),m(g,{color:Q.warning,children:Q.warning},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m(g,{children:[m(g,{color:Q.text.muted,children:"Info: "},void 0,!1,void 0,this),m(g,{color:Q.info,children:Q.info},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},LJ=()=>{let $=I1(),Q=E0.getCurrentThemeName(),Y=X$.findIndex((N)=>N.label===Q),J=Y>=0?X$[Y].theme:X$[0].theme,[Z,X]=WJ(J),[q,U]=WJ(!1),z=gZ(async(N)=>{if(q)return;U(!0);try{await m0().setTheme(N.value),$.closeModal()}catch(W){console.error("主题切换失败:",W instanceof Error?W.message:W)}finally{U(!1)}}),K=(N)=>{let W=X$.find((B)=>B.id===N.value);if(W)X(W.theme)},G=l0()==="theme-selector",_=P0(!1);cZ((N,W)=>{if(W.ctrl&&N==="c"||W.meta&&N==="c"){_();return}if(W.escape&&!q)$.closeModal()},{isActive:G});let O=(N)=>{let{isSelected:W,label:B}=N,w=B===Q?"[OK]":" ";return m(g,{color:W?Z.colors.primary:Z.colors.text.primary,children:[w," ",B]},void 0,!0,void 0,this)};return m(K1,{flexDirection:"column",height:"100%",children:[m(K1,{paddingX:2,paddingY:1,borderStyle:"single",borderColor:Z.colors.border.light,children:m(g,{bold:!0,color:Z.colors.primary,children:"主题选择器"},void 0,!1,void 0,this)},void 0,!1,void 0,this),m(K1,{flexDirection:"row",flexGrow:1,children:[m(K1,{width:"40%",borderStyle:"single",borderColor:Z.colors.border.light,paddingX:1,children:m(K1,{flexDirection:"column",children:[m(K1,{paddingTop:1,paddingBottom:1,children:m(g,{bold:!0,color:Z.colors.text.primary,children:["可用主题 (",FJ.length,")"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),m(xZ,{items:FJ,initialIndex:Y>=0?Y:0,onSelect:z,onHighlight:K,itemComponent:O},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),m(K1,{width:"60%",flexDirection:"column",borderStyle:"single",borderColor:Z.colors.border.light,children:[m(uZ,{theme:Z},void 0,!1,void 0,this),m(dZ,{theme:Z},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),m(K1,{paddingX:2,paddingY:1,borderStyle:"single",borderColor:Z.colors.border.light,children:m(g,{color:Z.colors.text.muted,children:q?"正在保存...":"Enter: 选择主题 | Esc: 取消"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as b0}from"react/jsx-dev-runtime";var d0=T1("UI"),wJ=({debug:$,continue:Q,...Y})=>{if($)d0.debug("[Debug] BladeInterface props:",{permissionMode:Y.permissionMode,yolo:Y.yolo,maxTurns:Y.maxTurns,continue:Q});let J=j8(!1),Z=j8(!1),X=j8(!1),q=j8(null),U=H6(),z=W6(),K=a$(),F=B6(),G=L6(),_=I1(),O=P1(),N=R6(),W=G$(),B=M1(),L=v6();x1(()=>{if(E0.getCurrentThemeName()!==L)try{E0.setTheme(L)}catch{}},[L]);let w=U==="ready",I=U==="needsSetup",k=U==="idle",{confirmationState:v,confirmationHandler:A,handleResponse:b,dismissAll:H}=s6(),{executeCommand:R,handleAbort:j,cleanupAgent:E}=o6(Y.systemPrompt,Y.appendSystemPrompt,A,Y.maxTurns,H),{getPreviousCommand:p,getNextCommand:V,addToHistory:u}=n6();H2();let T=$2("",0),P=j0(async()=>{let l=W,z0;if(l==="default")z0="autoEdit";else if(l==="autoEdit")z0="plan";else if(l==="plan")z0="default";else z0="default";try{await m0().setPermissionMode(z0)}catch(f0){d0.error("权限模式切换失败:",f0 instanceof Error?f0.message:f0)}}),y=j0(async(l)=>{try{await m0().addModel({displayName:l.displayName,provider:l.provider,model:l.model,overrides:l.overrides}),_.setInitializationStatus("ready")}catch(z0){d0.error("初始化配置保存失败:",z0 instanceof Error?z0.message:z0),_.setInitializationStatus("ready")}}),Y0=j0(()=>{if(K==="shortcuts")_.closeModal();else _.setActiveModal("shortcuts")}),r=j0(async(l,z0,f0)=>{return J8({intent:z0,session:l,newSessionId:f0?.newSessionId,announceFork:f0?.announceFork},t(),O,E)}),S=j0(async(l,z0)=>{let f0=t(),G6=(await Q8(z0,f0)).find((uJ)=>uJ.sessionId===l);if(!G6)throw Error(`Session not found: ${l}`);return G6}),{showSuggestions:G0,suggestions:f,selectedSuggestionIndex:x}=N2(T,R,p,V,u,j,B,P,Y0,K==="shortcuts");x1(()=>{if(T.value&&K==="shortcuts")_.closeModal()},[T.value,K,_]);let C=j0(async()=>{X.current=!0;try{let l=Y.forkSession?"fork":"resume",z0=await Q8(l,t());if(z0.length===0){if(Y.forkSession){d0.error("没有可供 fork 的历史会话"),O1(1);return}O.addAssistantMessage("没有找到历史会话,开始新对话。");return}let f0=z0[0];await r(f0,l,{newSessionId:Y.forkSession?Y.sessionId:void 0,announceFork:Y.forkSession?!1:void 0})}catch(l){if(d0.error("[BladeInterface] 继续会话失败:",l),Y.forkSession){O1(1);return}O.addAssistantMessage("继续会话失败,开始新对话。")}}),J0=j0(async()=>{X.current=!0;try{if(typeof Y.resume==="string"&&Y.resume!=="true"){let f0=Y.forkSession?"fork":"resume",U6=await S(Y.resume,f0);await r(U6,f0,{newSessionId:Y.forkSession?Y.sessionId:void 0,announceFork:Y.forkSession?!1:void 0});return}let l=Y.forkSession?"fork":"resume",z0=await Q8(l,t());if(z0.length===0)d0.error("没有找到历史会话"),O1(1);_.showSessionSelector(z0,l)}catch(l){d0.error("[BladeInterface] 加载会话失败:",l),O1(1)}});x1(()=>{if(J.current)return;if(Q){J.current=!0,C();return}if(Y.resume)J.current=!0,J0()},[Q,Y.resume,C,J0]);let F0=j0(async(l)=>{let z0=v.details?.type;if(z0==="enterPlanMode"&&l.approved)try{await m0().setPermissionMode("plan"),d0.debug("[BladeInterface] Entered Plan mode")}catch(f0){d0.error("[BladeInterface] Failed to enter Plan mode:",f0)}if(z0==="exitPlanMode"&&l.approved)d0.debug("[BladeInterface] ExitPlanMode approved, Store auto-synced");b(l)}),s=j0(()=>{O.addAssistantMessage("设置已取消"),O.addAssistantMessage("Blade 需要 API 配置才能正常工作。"),O.addAssistantMessage("您可以稍后运行 Blade 重新进入设置向导。"),O1(0)}),_0=j0(()=>{_.closeModal()}),k0=j0(async(l)=>{try{await r(l,F?.intent??"resume"),_.closeModal()}catch(z0){d0.error("[BladeInterface] Failed to restore session:",z0),O.addAssistantMessage(`会话操作失败: ${z0 instanceof Error?z0.message:"未知错误"}`),_.closeModal()}}),i0=j0(()=>{if(Y.resume)O1(0);else _.closeModal()}),p8=j0((l)=>{_.showModelEditWizard(l)}),g8=j0((l)=>{O.addAssistantMessage(`已添加模型配置: ${l.displayName??l.model},并已切换到该模型`),_0()}),VJ=j0((l)=>{O.addAssistantMessage(`已更新模型配置: ${l.displayName??l.model}`),_0()});x1(()=>{if(I){N.setFocus("model-config-wizard");return}if(v.isVisible)N.setFocus("confirmation-prompt");else if(K==="sessionSelector")N.setFocus("session-selector");else if(K==="themeSelector")N.setFocus("theme-selector");else if(K==="modelSelector")N.setFocus("model-selector");else if(K==="modelAddWizard"||K==="modelEditWizard")N.setFocus("model-config-wizard");else if(K==="permissionsManager")N.setFocus("permissions-manager");else if(K==="agentsManager")N.setFocus("agents-manager");else if(K==="agentCreationWizard")N.setFocus("agent-creation-wizard");else if(K==="hooksManager")N.setFocus("hooks-manager");else if(K==="shortcuts")N.setFocus("main-input");else N.setFocus("main-input")},[I,v.isVisible,K,N.setFocus]),x1(()=>{if(!w||X.current)return;if(BJ().length>0){X.current=!0;return}X.current=!0,O.addAssistantMessage("请输入您的问题,我将为您提供帮助。")},[w]),x1(()=>{if(!z)return;if(q.current===z)return;if(q.current=z,U==="error")O.addAssistantMessage(`初始化失败: ${z}`);else O.addAssistantMessage(`${z}`),O.addAssistantMessage("请重新尝试设置,或检查文件权限")},[z,U,O.addAssistantMessage]);let jJ=j0(async(l)=>{try{await R({displayText:l,text:l,images:[],parts:[{type:"text",text:l}]})}catch(z0){let f0=z0 instanceof Error?z0.message:"无法发送初始消息";O.addAssistantMessage(`初始消息发送失败:${f0}`)}});x1(()=>{let l=Y.initialMessage?.trim();if(!l||Z.current||!w||I)return;Z.current=!0,u(l),jJ(l)},[Y.initialMessage,w,I,R,u]);let EJ=j0(async(l)=>{try{await m0().setPermissionMode(l)}catch(z0){d0.error("权限模式初始化失败:",z0 instanceof Error?z0.message:z0)}});if(x1(()=>{let l=Y.permissionMode;if($)d0.debug("[Debug] permissionMode from CLI:",l),d0.debug("[Debug] current permissionMode:",W);if(!l||l===W)return;EJ(l)},[Y.permissionMode,W]),k)return null;if(I)return b0(sQ,{mode:"setup",onComplete:y,onCancel:s},void 0,!1,void 0,this);if($)d0.debug("[Debug] 渲染主界面,条件检查:",{confirmationVisible:v.isVisible,activeModal:K});let Z6=K==="modelSelector",d1=G,T$=K==="modelAddWizard"?"add":K==="modelEditWizard"&&d1?"edit":null,hJ=Z6||Boolean(T$),mJ=K==="agentsManager",pJ=K==="agentCreationWizard",gJ=K==="skillsManager",cJ=K==="pluginsManager",xJ=d1?{displayName:d1.displayName,provider:d1.provider,model:d1.model,overrides:d1.overrides}:void 0,X6=v.isVisible&&v.details?v.details.type==="askUserQuestion"&&v.details.questions?b0(YJ,{questions:v.details.questions,onComplete:(l)=>F0({approved:!0,answers:l}),onCancel:()=>F0({approved:!1})},void 0,!1,void 0,this):b0(Q9,{details:v.details,onResponse:F0},void 0,!1,void 0,this):K==="themeSelector"?b0(LJ,{},void 0,!1,void 0,this):K==="permissionsManager"?b0($J,{onClose:_0},void 0,!1,void 0,this):K==="sessionSelector"?b0(GJ,{intent:F?.intent??"resume",sessions:F?.sessions,onSelect:k0,onCancel:i0},void 0,!1,void 0,this):K==="hooksManager"?b0(Y9,{onClose:_0},void 0,!1,void 0,this):null,q6=Boolean(X6);return b0(c1,{flexDirection:"column",width:"100%",overflow:"hidden",children:[X6,b0(c1,{flexDirection:"column",display:q6?"none":"flex",children:[b0(h9,{},void 0,!1,void 0,this),b0(HJ,{},void 0,!1,void 0,this),b0(A9,{paused:q6},void 0,!1,void 0,this),b0(H9,{input:T.value,cursorPosition:T.cursorPosition,onChange:T.setValue,onChangeCursorPosition:T.setCursorPosition,onAddPasteMapping:T.addPasteMapping,onAddImagePasteMapping:T.addImagePasteMapping},void 0,!1,void 0,this),Z6&&b0(c1,{marginTop:1,paddingX:2,children:b0(m9,{onClose:_0,onEdit:p8},void 0,!1,void 0,this)},void 0,!1,void 0,this),T$&&b0(c1,{marginTop:1,paddingX:2,children:b0(sQ,{mode:T$,modelId:d1?.id,initialConfig:T$==="edit"?xJ:void 0,onComplete:T$==="edit"?VJ:g8,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),mJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(w2,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),pJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(E$,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),gJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(OJ,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),cJ&&b0(c1,{marginTop:1,paddingX:2,children:b0(QJ,{onComplete:_0,onCancel:_0},void 0,!1,void 0,this)},void 0,!1,void 0,this),b0(I2,{suggestions:f,selectedIndex:x,visible:G0&&!hJ},void 0,!1,void 0,this),b0(P2,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Box as lZ,Text as u1}from"ink";import rZ from"react";import{jsxDEV as v1}from"react/jsx-dev-runtime";class E8 extends rZ.Component{constructor($){super($);this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError($){return{hasError:!0,error:$,errorInfo:null}}componentDidCatch($,Q){this.setState({error:$,errorInfo:Q}),console.error("未捕获的错误:",$,Q)}render(){if(this.state.hasError)return v1(lZ,{flexDirection:"column",padding:1,borderStyle:"round",borderColor:"red",children:[v1(u1,{color:"red",children:"应用发生错误"},void 0,!1,void 0,this),v1(u1,{children:" "},void 0,!1,void 0,this),v1(u1,{color:"red",children:this.state.error?.message},void 0,!1,void 0,this),v1(u1,{children:" "},void 0,!1,void 0,this),v1(u1,{color:"gray",children:"错误详情:"},void 0,!1,void 0,this),v1(u1,{color:"gray",children:this.state.error?.stack},void 0,!1,void 0,this),v1(u1,{children:" "},void 0,!1,void 0,this),v1(u1,{color:"yellow",children:"请重启应用或联系开发者"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return this.props.children}}import{Box as q$,Text as R1,useInput as aZ}from"ink";import{useState as Q6}from"react";import{jsxDEV as c0}from"react/jsx-dev-runtime";var h8=[{key:"update",label:"Update now",description:`runs \`${AJ()}\``},{key:"skip",label:"Skip",description:""},{key:"skip_until_next",label:"Skip until next version",description:""}],vJ=({versionInfo:$,onComplete:Q})=>{let[Y,J]=Q6(0),[Z,X]=Q6(!1),[q,U]=Q6(null);aZ((K,F)=>{if(F.ctrl&&K==="c"){V$().shutdown("SIGINT",0);return}if(Z||q)return;if(F.upArrow||K==="k")J((G)=>G>0?G-1:h8.length-1);else if(F.downArrow||K==="j")J((G)=>G<h8.length-1?G+1:0);else if(F.return)z(h8[Y].key);else if(K==="1")z("update");else if(K==="2")z("skip");else if(K==="3")z("skip_until_next")});let z=async(K)=>{switch(K){case"update":{X(!0);let F=await yJ();U(F.message),setTimeout(()=>{V$().shutdown("SIGINT",0)},1500);break}case"skip":Q();break;case"skip_until_next":if($.latestVersion)await bJ($.latestVersion);Q();break}};if(q)return c0(q$,{flexDirection:"column",marginY:1,children:c0(R1,{children:q},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(Z)return c0(q$,{flexDirection:"column",marginY:1,children:c0(R1,{color:"cyan",children:"Updating..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return c0(q$,{flexDirection:"column",marginY:1,children:[c0(R1,{color:"yellow",bold:!0,children:["Update available! ",c0(R1,{color:"gray",children:[$.currentVersion," ","->"," ",$.latestVersion]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),c0(q$,{marginTop:1,children:c0(R1,{color:"gray",children:["Release notes:"," ",c0(R1,{color:"cyan",underline:!0,children:$.releaseNotesUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),c0(q$,{flexDirection:"column",marginTop:1,children:h8.map((K,F)=>{let G=F===Y,_=G?"› ":" ",O=`${F+1}. `;return c0(q$,{children:c0(R1,{color:G?"cyan":void 0,children:[_,O,K.label,K.description&&c0(R1,{color:"gray",children:[" (",K.description,")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},K.key,!1,void 0,this)})},void 0,!1,void 0,this),c0(q$,{marginTop:1,children:c0(R1,{color:"gray",children:"Press enter to continue"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};function M$($){return($ instanceof Error?$.message:String($)).replace(/sk-[a-zA-Z0-9]{32,}/g,"sk-***").replace(/apiKey['":\s]+[a-zA-Z0-9-_]+/gi,"apiKey: ***").replace(/API_KEY['":\s=]+[a-zA-Z0-9-_]+/gi,"API_KEY=***")}import{jsxDEV as m8}from"react/jsx-dev-runtime";function iZ($){if(r0().config.actions.setConfig($),$.debug)console.log("[Debug] 模型配置检查通过,准备就绪");z1().setInitializationStatus("ready")}var R_=($)=>{let[Q,Y]=Y6(!1),[J,Z]=Y6(null),[X,q]=Y6(!1),U=J6((F,G)=>{let _=F instanceof Error?F.message:String(F);if(z1().setInitializationError(_),z1().setInitializationStatus("error"),Y(!0),G)console.error("[FAIL] 应用初始化失败:",_)}),z=J6(async()=>{try{let F=r0().config.config??PJ,G=IJ(F,$);if(iZ(G),G.resumeSessionId)MJ().restoreSession(G.resumeSessionId,[]);if(G.debug)console.error("[Debug] 运行时配置:",G);let _=G.theme;if(_&&E0.hasTheme(_)){if(E0.setTheme(_),$.debug)console.log(`[OK] 已加载主题: ${_}`)}try{let O=S1.loadFromStandardLocations();if($.agents)S1.applyOverrides(SJ($.agents));if($.debug&&O>0)console.log(`[OK] 已加载 ${O} 个 subagents: ${S1.getAllNames().join(", ")}`)}catch(O){if($.debug)console.warn("Subagents 加载失败:",M$(O))}try{let O=q1.getInstance();if(O.loadConfig(G.hooks||{}),$.debug&&G.hooks?.enabled)console.log("[OK] Hooks 系统已启用");let N=r0(),W=N.session.sessionId;if(RJ(W),O.isEnabled()){let B=N.config.config?.permissionMode||"default",L=!!$.resume,w=await O.executeSessionStartHooks({projectDir:t(),sessionId:W,permissionMode:B,isResume:L,resumeSessionId:typeof $.resume==="string"?$.resume:void 0});if(w.env){for(let[I,k]of Object.entries(w.env))process.env[I]=k;if($.debug)console.log("[OK] SessionStart hooks 注入环境变量:",Object.keys(w.env).join(", "))}if(w.warning&&$.debug)console.warn("SessionStart hooks 警告:",w.warning)}}catch(O){if($.debug)console.warn("Hooks 初始化失败:",M$(O))}try{let O=await kJ();if($.debug&&O.skills.length>0)console.log(`[OK] 已加载 ${O.skills.length} 个 skills: ${O.skills.map((N)=>N.name).join(", ")}`);if(O.errors.length>0&&$.debug)for(let N of O.errors)console.warn(`Skill 加载错误 (${N.path}): ${N.error}`)}catch(O){if($.debug)console.warn("Skills 初始化失败:",M$(O))}try{let O=await DJ(t());if($.debug&&O.commands.length>0)console.log(`[OK] 已加载 ${O.commands.length} 个自定义命令: ${O.commands.map((N)=>N.name).join(", ")}`);if(O.errors.length>0&&$.debug)for(let N of O.errors)console.warn(`自定义命令加载错误 (${N.path}): ${N.error}`)}catch(O){if($.debug)console.warn("自定义命令初始化失败:",M$(O))}try{let N=await D8().initialize(t(),$.pluginDir||[]);if($.debug&&N.plugins.length>0)console.log(`[OK] 已加载 ${N.plugins.length} 个插件: ${N.plugins.map((W)=>W.manifest.name).join(", ")}`);if(N.plugins.length>0){let W=await fJ();if($.debug){let{totalCommands:B,totalSkills:L,totalAgents:w,totalMcpServers:I}=W;console.log(` [OK] 已集成: ${B} 命令, ${L} 技能, ${w} 代理, ${I} MCP 服务器`)}}if(N.errors.length>0&&$.debug)for(let W of N.errors)console.warn(`插件加载错误 (${W.path}): ${W.error}`)}catch(O){if($.debug)console.warn("插件系统初始化失败:",M$(O))}Y8(async()=>{await CJ.getInstance().killAll(),await TJ.getInstance().disconnectAll(),q1.getInstance().cleanup()}),Y(!0)}catch(F){U(F,!!$.debug)}}),K=J6(async()=>{if($.versionCheckPromise){let F=await $.versionCheckPromise;if(F){Z(F),q(!0);return}}await z()});if(oZ(()=>{K()},[]),X&&J)return m8(E8,{children:m8(vJ,{versionInfo:J,onComplete:()=>{q(!1),z()}},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!Q)return null;return m8(E8,{children:m8(wJ,{...$},void 0,!1,void 0,this)},void 0,!1,void 0,this)};export{R_ as AppWrapper};