blade-code 0.7.6 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blade.js +2 -2
- package/dist/{chunk-r0hc7wad.js → chunk-0b3m5qn6.js} +1 -1
- package/dist/chunk-0y895nft.js +9 -0
- package/dist/{chunk-krrm6bjr.js → chunk-2j3tb2dm.js} +1 -1
- package/dist/{chunk-rhvxr82g.js → chunk-2n8a87ds.js} +1 -1
- package/dist/{chunk-m3hsaaq5.js → chunk-2qckpa16.js} +1 -1
- package/dist/chunk-3fcze972.js +1 -0
- package/dist/{chunk-zr71r1z1.js → chunk-4n7fsts0.js} +1 -1
- package/dist/chunk-54vk4tw8.js +615 -0
- package/dist/{chunk-wstkn75a.js → chunk-5xjj88wd.js} +1 -1
- package/dist/{chunk-1y33d6xh.js → chunk-6087cgst.js} +1 -1
- package/dist/{chunk-npaj13y3.js → chunk-60se4kxq.js} +2 -2
- package/dist/chunk-6cry51vb.js +9 -0
- package/dist/{chunk-ezkbqmvd.js → chunk-6y58y4rx.js} +1 -1
- package/dist/{chunk-ebynn53v.js → chunk-778h8815.js} +2 -2
- package/dist/{chunk-pf45ctn7.js → chunk-7e5hzpmp.js} +1 -1
- package/dist/{chunk-x4fx52e7.js → chunk-89j9pm90.js} +3 -3
- package/dist/{chunk-ttf06k8y.js → chunk-8e0rv3j5.js} +3 -3
- package/dist/chunk-8p98nt9v.js +151 -0
- package/dist/chunk-94vj1hjp.js +1 -0
- package/dist/{chunk-qyfdt8h1.js → chunk-9ad7tt9s.js} +1 -1
- package/dist/chunk-c6rtexw1.js +4 -0
- package/dist/chunk-c8cxeve8.js +1 -0
- package/dist/{chunk-arwynrtf.js → chunk-d61d6m07.js} +2 -2
- package/dist/chunk-ebcmqx1k.js +2 -0
- package/dist/chunk-gsn659hw.js +1 -0
- package/dist/chunk-h79044h0.js +3 -0
- package/dist/chunk-kppxkh33.js +1 -0
- package/dist/{chunk-d9qh7bat.js → chunk-p7rf3zp8.js} +1 -1
- package/dist/{chunk-10q3krvh.js → chunk-ptt8s7nd.js} +1 -1
- package/dist/chunk-qnh7np1s.js +6 -0
- package/dist/chunk-ran4gsmy.js +1 -0
- package/dist/chunk-swyvd7hd.js +1 -0
- package/dist/chunk-t9zdypqp.js +2 -0
- package/dist/chunk-v61bja34.js +2 -0
- package/dist/{chunk-jhzf05kz.js → chunk-w1m1ehs1.js} +1 -1
- package/dist/chunk-x1khkevy.js +1563 -0
- package/dist/chunk-x24ddbhs.js +6 -0
- package/dist/{chunk-fceeqn6k.js → chunk-x466sb8s.js} +2 -2
- package/dist/{chunk-wg5nxtb2.js → chunk-yyw9bbfd.js} +1 -1
- package/dist/{chunk-64x50qbc.js → chunk-zet4zjc3.js} +1 -1
- package/dist/web/assets/{CodeBlockHighlighter-C86flFwh.js → CodeBlockHighlighter-C1cp8dDv.js} +1 -1
- package/dist/web/assets/FilePreview-B2anY2d1.js +7 -0
- package/dist/web/assets/{MarkdownRenderer-CW8WpEw1.js → MarkdownRenderer-BVfRG88x.js} +1 -1
- package/dist/web/assets/{McpModal-DnqrgBON.js → McpModal-BVvb-dzr.js} +1 -1
- package/dist/web/assets/{SettingsModal-CRNT-LCq.js → SettingsModal-aseVv-gp.js} +1 -1
- package/dist/web/assets/{SettingsStore-B2GIhfKs.js → SettingsStore-B87y64B4.js} +1 -1
- package/dist/web/assets/{SkillsModal-COQMbIdT.js → SkillsModal-BXYaF2KK.js} +1 -1
- package/dist/web/assets/{TerminalPanel-dCMUvQaH.js → TerminalPanel-B-NRhOXN.js} +1 -1
- package/dist/web/assets/index-9kl44E8k.js +9 -0
- package/dist/web/assets/index-CUVe9dGs.css +1 -0
- package/dist/web/assets/{useRequest-C7k7cDPD.js → useRequest-DITGl55G.js} +1 -1
- package/dist/web/assets/{vendor-icons-BKXQ7ALf.js → vendor-icons-BuFpOlRn.js} +38 -28
- package/dist/web/assets/{vendor-markdown-DIcugY1e.js → vendor-markdown-Bo4W9Tae.js} +1 -1
- package/dist/web/assets/vendor-radix-CESj0OOY.js +45 -0
- package/dist/web/assets/{vendor-react-Dm1xU4bP.js → vendor-react-BalntB5F.js} +2 -2
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chunk-1tzcptyb.js +0 -3
- package/dist/chunk-5accz8n9.js +0 -1
- package/dist/chunk-8raa4q9y.js +0 -1564
- package/dist/chunk-ad19yrq6.js +0 -1
- package/dist/chunk-bvn4e2vq.js +0 -1
- package/dist/chunk-cadngkwr.js +0 -2
- package/dist/chunk-cdx3hp1r.js +0 -9
- package/dist/chunk-g60w2r7f.js +0 -6
- package/dist/chunk-h7qab07x.js +0 -2
- package/dist/chunk-k76q8cyc.js +0 -151
- package/dist/chunk-n2yq1wn8.js +0 -9
- package/dist/chunk-q6sj33v8.js +0 -6
- package/dist/chunk-qedtzcp2.js +0 -1
- package/dist/chunk-t6qek6xk.js +0 -1
- package/dist/chunk-tyjns370.js +0 -1
- package/dist/chunk-ve6bvba4.js +0 -615
- package/dist/chunk-wdxbjvd5.js +0 -2
- package/dist/chunk-xj63cr29.js +0 -1
- package/dist/chunk-zmndvdgb.js +0 -4
- package/dist/web/assets/FilePreview-CbtOITD1.js +0 -7
- package/dist/web/assets/index-21gV5nOE.css +0 -1
- package/dist/web/assets/index-Cnz-_jPt.js +0 -10
- package/dist/web/assets/vendor-radix-2yBsoRqx.js +0 -45
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-
|
|
1
|
+
import"./chunk-zet4zjc3.js";var d={command:"install [target]",describe:"Install Blade native build. Use [target] to specify version (stable, latest, or specific version)",builder:(b)=>{return b.positional("target",{describe:"Version to install",type:"string",default:"stable",choices:["stable","latest"]}).option("force",{type:"boolean",describe:"Force reinstall",default:!1}).example([["$0 install","Install stable version"],["$0 install latest","Install latest version"],["$0 install --force","Force reinstall stable version"]])},handler:async(b)=>{console.log(`Installing Blade ${b.target}...`);try{if(b.force)console.log("Force reinstall enabled");console.log("Downloading..."),console.log("Installing..."),console.log("Installation completed successfully")}catch(c){console.error(`Error: Installation failed: ${c instanceof Error?c.message:"未知错误"}`),process.exit(1)}}};export{d as installCommands};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ca as O}from"./chunk-x466sb8s.js";import{Aa as J,Ca as L}from"./chunk-89j9pm90.js";import"./chunk-778h8815.js";import"./chunk-d61d6m07.js";import"./chunk-6y58y4rx.js";import"./chunk-2n8a87ds.js";import{Ab as H}from"./chunk-v61bja34.js";import"./chunk-h79044h0.js";import"./chunk-zet4zjc3.js";import P from"os";import E from"path";function _(q){return typeof q==="string"?q:void 0}function T(q){if(!Array.isArray(q))return;let z=[];for(let F of q)if(typeof F==="string")z.push(F);else if(F!=null)z.push(String(F));return z}function G(){console.log(`
|
|
2
2
|
blade mcp
|
|
3
3
|
`),console.log(`管理 MCP 服务器
|
|
4
4
|
`),console.log("Commands:"),console.log(" blade mcp add <name> <commandOrUrl> [args...] 添加 MCP 服务器"),console.log(" blade mcp remove <name> 删除 MCP 服务器 [aliases: rm]"),console.log(" blade mcp list 列出所有 MCP 服务器并检查健康状态 [aliases: ls]"),console.log(" blade mcp get <name> 获取服务器详情"),console.log(` blade mcp add-json <name> <json> 从 JSON 字符串添加服务器
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ab as _,vb as L}from"./chunk-v61bja34.js";import{execSync as F}from"child_process";import{existsSync as Q,readFileSync as O,realpathSync as b}from"fs";import*as V from"os";import*as H from"path";import{basename as J,isAbsolute as j,resolve as R}from"path";function G(z=_()){let q=z,M=f(q);return{workingDirectory:q,projectRoot:M,platform:`${V.platform()} (${V.arch()})`,nodeVersion:process.version,currentDate:new Date().toISOString().split("T")[0],homeDirectory:V.homedir()}}function Y(z,q){try{return F(q,{cwd:z,encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim()}catch{return null}}function v(z={}){let{includeGitSnapshot:q=!0,includeDirectoryListing:M=!0,workingDirectory:W}=z,B=G(W),$=Q(H.join(B.projectRoot,".git")),T=J(process.env.SHELL||"unknown"),A=["package.json","tsconfig.json","BLADE.md",".env.example"].filter((K)=>Q(H.join(B.projectRoot,K))).map((K)=>`- \`${H.join(B.projectRoot,K)}\``),N=`# Environment
|
|
2
2
|
You have been invoked in the following environment:
|
|
3
3
|
- Primary working directory: ${B.workingDirectory}
|
|
4
4
|
- Is a git repository: ${$?"true":"false"}
|
|
@@ -25,4 +25,4 @@ ${I.join(`
|
|
|
25
25
|
|
|
26
26
|
Project root directory listing:
|
|
27
27
|
${K}`}return N}function f(z){let q=z,M=null;while(q!==H.dirname(q)){if(Q(H.join(q,".git")))return q;if(Q(H.join(q,".blade")))return q;if(Q(H.join(q,".claude")))return q;if(!M&&Q(H.join(q,"package.json")))M=q;q=H.dirname(q)}return M??z}function x(z,q){let M=j(z)?z:R(q||process.cwd(),z),W;try{W=b(M)}catch{W=M}L(W)}
|
|
28
|
-
export{v as
|
|
28
|
+
export{v as da,f as ea,x as fa};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{B as _,H as L,K,P as T,Q as h,S as j,X as q,Z as b,_ as x}from"./chunk-x1khkevy.js";import"./chunk-9ad7tt9s.js";import{ca as I}from"./chunk-x466sb8s.js";import"./chunk-60se4kxq.js";import{va as S}from"./chunk-89j9pm90.js";import"./chunk-778h8815.js";import"./chunk-d61d6m07.js";import{_a as y}from"./chunk-54vk4tw8.js";import{qb as P}from"./chunk-6y58y4rx.js";import"./chunk-8e0rv3j5.js";import{ub as k}from"./chunk-2n8a87ds.js";import{Ab as E}from"./chunk-v61bja34.js";import"./chunk-0y895nft.js";import{Yb as B}from"./chunk-h79044h0.js";import"./chunk-zet4zjc3.js";import{Readable as d,Writable as p}from"node:stream";import*as N from"@agentclientprotocol/sdk";import A from"node:path";import{PROTOCOL_VERSION as g}from"@agentclientprotocol/sdk";import{nanoid as f}from"nanoid";var V=B("Agent");function O(z){return Object.fromEntries(z.map((H)=>[H.name,H.value]))}function v(z){if("command"in z)return{type:"stdio",command:z.command,args:z.args,env:O(z.env)};return{type:z.type,url:z.url,headers:O(z.headers)}}function c(z){return Object.fromEntries(z.map((H)=>[H.name,v(H)]))}function R(z){if(typeof z==="string")return z?[{type:"text",text:z}]:[];return z.flatMap((H)=>{if(H.type==="text")return H.text?[{type:"text",text:H.text}]:[];let J=H.image_url.url,Q=/^data:([^;,]+);base64,(.+)$/s.exec(J);if(!Q)return[{type:"text",text:"[Image]"}];return[{type:"image",mimeType:Q[1]??"image/png",data:Q[2]??""}]})}class w{id;cwd;connection;clientCapabilities;options;agent=null;runtime=null;pendingPrompt=null;pendingResumeRequested=!1;availableCommandsTimer=null;destroyed=!1;messages;mode="default";constructor(z,H,J,Q,X={}){this.id=z;this.cwd=H;this.connection=J;this.clientCapabilities=Q;this.options=X;this.messages=[...X.initialMessages??[]]}async initialize(){V.debug(`[AcpSession ${this.id}] Initializing...`),_.initializeSession(this.connection,this.id,this.clientCapabilities,this.cwd),V.debug(`[AcpSession ${this.id}] ACP service context initialized`);let z=this.options.mcpServers?c(this.options.mcpServers):void 0;this.runtime=await K.create({sessionId:this.id,workspaceRoot:this.cwd,...z?{mcpServers:z}:{}}),this.agent=await j.createWithRuntime(this.runtime,{sessionId:this.id}),V.debug(`[AcpSession ${this.id}] Agent created successfully`);let H=await this.runtime.getGoal();if(this.runtime.getPendingSteeringCount()>0||H?.status==="active")if(this.options.initialMessages===void 0)this.schedulePendingResume();else this.pendingResumeRequested=!0}async replayHistory(){for(let z of this.messages){if(!this.canSendUpdates())return;let H=z.role==="user"?"user_message_chunk":z.role==="assistant"?"agent_message_chunk":void 0;if(!H)continue;for(let J of R(z.content)){if(!this.canSendUpdates())return;if(!await this.sendUpdateAndWait({sessionUpdate:H,content:J}))return}}if(this.pendingResumeRequested)this.schedulePendingResume()}sendAvailableCommandsDelayed(){if(this.destroyed||this.connection.signal.aborted)return;if(this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer);V.debug(`[AcpSession ${this.id}] Scheduling available commands update (500ms delay)`),this.availableCommandsTimer=setTimeout(()=>{if(this.availableCommandsTimer=null,this.destroyed||this.connection.signal.aborted)return;this.sendAvailableCommands()},500)}async handleSlashCommand(z,H){try{V.debug(`[AcpSession ${this.id}] Executing slash command: ${z}`);let J={cwd:this.cwd,workspaceRoot:this.cwd,sessionId:this.id,messages:[...this.messages],rewind:{listCheckpoints:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listRewindCheckpoints()},execute:async(Z)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let $=await this.runtime.rewindSession(Z);return this.messages=[...$.messages],await this.agent?.destroy(),this.agent=await j.createWithRuntime(this.runtime,{sessionId:this.id}),$}},signal:H,acp:{sendMessage:(Z)=>{this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Z}})},sendToolStart:(Z,$,F)=>{let W=`tool_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,G=this.mapToolKind(F);this.sendUpdate({sessionUpdate:"tool_call",toolCallId:W,status:"in_progress",title:`${Z}`,content:[{type:"content",content:{type:"text",text:JSON.stringify($,null,2)}}],kind:G})},sendToolResult:(Z,$)=>{if($.summary)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:$.summary}})}}},Q=await b(z,J),X=Q.data?.action;if(X==="start_goal"||X==="resume_goal")this.schedulePendingResume();if(X==="rewind_session"&&Array.isArray(Q.data?.messages))this.messages=[...Q.data.messages];if((Q.message==="compact_completed"||Q.message==="compact_fallback")&&Q.data?.compactedMessages)this.messages=[...Q.data.compactedMessages];let Y=Q.content||Q.message;if(Y)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Y}});if(Q.error)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[FAIL] ${Q.error}`}});return{stopReason:Q.success?"end_turn":"cancelled"}}catch(J){return V.error(`[AcpSession ${this.id}] Slash command error:`,J),this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[FAIL] 命令执行失败: ${J instanceof Error?J.message:"未知错误"}`}}),{stopReason:"cancelled"}}}async sendAvailableCommands(){try{let z=x(),H=["model","permissions","theme","config","exit","ide"],Q=z.filter((X)=>!H.includes(X.name)).map((X)=>{let Y;if(X.usage){let Z=X.usage.replace(/^\/\w+\s*/,"").trim();if(Z)Y=Z}if(X.aliases?.length){let Z=`Aliases: ${X.aliases.join(", ")}`;Y=Y?`${Y} | ${Z}`:Z}return{name:X.name,description:X.description,input:Y?{hint:Y}:void 0}});V.info(`[AcpSession ${this.id}] Sending available commands: ${JSON.stringify(Q.map((X)=>X.name))}`),this.sendUpdate({sessionUpdate:"available_commands_update",availableCommands:Q}),V.info(`[AcpSession ${this.id}] Sent ${Q.length} available commands`)}catch(z){V.error(`[AcpSession ${this.id}] Failed to send available commands:`,z)}}async prompt(z,H={}){if(_.setCurrentSession(this.id),!this.agent||!this.runtime)throw Error("Session not initialized");let J=this.resolvePrompt(z.prompt);if(this.pendingPrompt){if(/^\/goal(?:\s|$)/i.test(J.trim()))return this.handleSlashCommand(J,this.pendingPrompt.signal);let X=await this.runtime.enqueueSteering(J,{allowBeforeTurn:!0});if(!X.accepted)throw Error(X.reason==="queue_full"?"Active turn steering queue is full":"Active turn is no longer steerable");if(V.debug(`[AcpSession ${this.id}] Queued steering for active turn (${X.queued})`),X.delivery==="next_turn")this.schedulePendingResume();return{stopReason:"end_turn"}}let Q=new AbortController;this.pendingPrompt=Q;try{if(V.debug(`[AcpSession ${this.id}] Received prompt: ${J.slice(0,100)}...`),q(J))return await this.handleSlashCommand(J,Q.signal);let X={sessionId:this.id,userId:"acp-user",workspaceRoot:this.cwd,messages:[...this.messages],signal:Q.signal,permissionMode:this.mapModeToPermissionMode(),confirmationHandler:{requestConfirmation:async(Y)=>{return this.requestPermission(Y)}}};if(await y(this.agent.chatStream(J,X,{pendingInputOnly:H.pendingInputOnly,goalContinuationOnly:H.goalContinuationOnly}),async(Y)=>{switch(Y.kind){case"content_delta":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Y.delta}});break;case"thinking_delta":this.sendUpdate({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:Y.delta}});break;case"tool_start":{let Z=Y.toolCall,$="function"in Z?Z.function.name:Z.type,F=this.mapToolKind(Y.toolKind);this.sendUpdate({sessionUpdate:"tool_call",toolCallId:Z.id,status:"in_progress",title:`Executing ${$}`,content:[],kind:F});break}case"tool_result":{let{toolCall:Z,result:$}=Y,F=[],W=$.metadata;if(W?.kind==="edit"&&typeof W.file_path==="string"&&typeof W.oldContent==="string"&&(typeof W.newContent==="string"||W.newContent===void 0))F.push({type:"diff",path:W.file_path,oldText:W.oldContent,newText:W.newContent??null});else{let D="function"in Z?Z.function.name:Z.type,C=h(T(D,$));F.push({type:"content",content:{type:"text",text:C}})}let G=$.success?"completed":"failed";this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:Z.id,status:G,content:F});break}case"task_update":this.sendPlanUpdate(Y.tasks);break;case"steering_applied":break;case"follow_up_started":for(let Z of Y.messages){if(!Z.recovered||Z.persisted)continue;for(let $ of R(Z.content))this.sendUpdate({sessionUpdate:"user_message_chunk",content:$})}if(Y.recovered>0)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[Resuming ${Y.recovered} queued instruction${Y.recovered===1?"":"s"} recovered after restart]
|
|
2
|
+
`}});break;case"goal_updated":if(Y.goal&&Y.goal.status!=="active")this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[Goal ${Y.goal.status}: ${Y.goal.objective}]
|
|
3
|
+
`}});break;case"goal_continuation_started":break;default:break}}),this.messages=[...X.messages],Q.signal.aborted)return{stopReason:"cancelled"};return{stopReason:"end_turn"}}catch(X){if(Q.signal.aborted||X instanceof Error&&X.name==="AbortError")return{stopReason:"cancelled"};throw V.error(`[AcpSession ${this.id}] Prompt error:`,X),X}finally{if(this.pendingPrompt===Q){if(this.pendingPrompt=null,!this.destroyed&&this.pendingResumeRequested)this.schedulePendingResume()}}}schedulePendingResume(){if(this.destroyed||this.connection.signal.aborted)return;this.pendingResumeRequested=!0,queueMicrotask(()=>{this.resumePendingIfIdle()})}async resumePendingIfIdle(){if(this.destroyed||this.connection.signal.aborted)return;if(this.pendingPrompt||!this.runtime||!this.agent)return;let z=this.runtime.getPendingSteeringCount()>0,J=(z?null:await this.runtime.getGoal())?.status==="active";if(!z&&!J){this.pendingResumeRequested=!1;return}this.pendingResumeRequested=!1,await this.prompt({sessionId:this.id,prompt:[]},{pendingInputOnly:z,goalContinuationOnly:J}).catch((Q)=>{V.error(`[AcpSession ${this.id}] Failed to resume pending input:`,Q)})}cancel(){if(V.info(`[AcpSession ${this.id}] Cancel requested`),this.pendingResumeRequested=!1,this.pendingPrompt)this.pendingPrompt.abort(),this.pendingPrompt=null,V.info(`[AcpSession ${this.id}] Cancelled successfully`);else V.warn(`[AcpSession ${this.id}] No pending prompt to cancel`)}async setMode(z){let H=["default","auto-edit","yolo","plan"];this.mode=H.includes(z)?z:"default",V.info(`[AcpSession ${this.id}] Mode set to: ${this.mode}`),this.sendUpdate({sessionUpdate:"current_mode_update",currentModeId:this.mode})}mapModeToPermissionMode(){switch(this.mode){case"yolo":return"yolo";case"auto-edit":return"autoEdit";case"plan":return"plan";case"default":default:return"default"}}shouldAutoApprove(z){switch(this.mode){case"yolo":return!0;case"auto-edit":return z==="readonly"||z==="write";case"plan":return z==="readonly";case"default":default:return!1}}async setModel(z){if(V.info(`[AcpSession ${this.id}] Model set to: ${z}`),this.pendingPrompt)throw Error("Cannot switch models while a prompt is active");if(!this.agent)throw Error("Session not initialized");await this.agent.switchModel(z)}async destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer),this.availableCommandsTimer=null;let z=this.agent,H=this.runtime;this.agent=null,this.runtime=null;let J,Q=async(X)=>{try{await X()}catch(Y){J??=Y}};if(await Q(()=>this.cancel()),z)await Q(()=>z.destroy());if(H)await Q(()=>H.dispose());if(await Q(()=>_.destroySession(this.id)),V.debug(`[AcpSession ${this.id}] Destroyed`),J!==void 0)throw J}resolvePrompt(z){let H=[];for(let J of z)if(J.type==="text")H.push(J.text);else if(J.type==="image")H.push(`[Image: ${J.mimeType}]`);else if(J.type==="resource"){let Q=J.resource;if("text"in Q)H.push(`<file path="${Q.uri}">
|
|
4
|
+
${Q.text}
|
|
5
|
+
</file>`)}else if(J.type==="resource_link")H.push(`[Resource: ${J.uri}]`);return H.join(`
|
|
6
|
+
`)}canSendUpdates(){return!this.destroyed&&!this.connection.signal.aborted}async sendUpdateAndWait(z){if(!this.canSendUpdates())return!1;return await this.connection.sessionUpdate({sessionId:this.id,update:z}),this.canSendUpdates()}sendUpdate(z){if(!this.canSendUpdates())return;let H={sessionId:this.id,update:z};this.connection.sessionUpdate(H).catch((J)=>{V.warn(`[AcpSession ${this.id}] Failed to send update:`,J)})}sendPlanUpdate(z){let H=z.map((J)=>({content:J.subject,priority:J.priority,status:J.status}));V.debug(`[AcpSession ${this.id}] Sending plan update with ${H.length} entries`),this.sendUpdate({sessionUpdate:"plan",entries:H})}async requestPermission(z){let H=this.pendingPrompt?.signal;if(z.type==="askUserQuestion")return this.requestUserQuestions(z,H);let J=z.kind?.toLowerCase()||"execute";if(this.shouldAutoApprove(J))return V.debug(`[AcpSession ${this.id}] Auto-approving ${J} in mode: ${this.mode}`),{approved:!0};if(this.mode==="plan"&&(J==="write"||J==="execute"))return V.debug(`[AcpSession ${this.id}] Rejecting ${J} in plan mode`),{approved:!1,reason:"Write and execute operations are not allowed in Plan mode"};try{let Q=f(),X=[];if(z.message)X.push({type:"content",content:{type:"text",text:z.message}});if(z.risks&&z.risks.length>0)X.push({type:"content",content:{type:"text",text:`Risks:
|
|
7
|
+
- ${z.risks.join(`
|
|
8
|
+
- `)}`}});let Y=this.mapToolKind(J),Z={sessionId:this.id,options:[{optionId:"allow_once",name:"Allow once",kind:"allow_once"},{optionId:"allow_always",name:"Always allow",kind:"allow_always"},{optionId:"reject_once",name:"Deny once",kind:"reject_once"},{optionId:"reject_always",name:"Always deny",kind:"reject_always"}],toolCall:{toolCallId:Q,status:"pending",title:z.title||"Permission Required",content:X,kind:Y}},$=await this.waitForClientInteraction(this.connection.requestPermission(Z),H);if(!$)return{approved:!1,reason:P};let F=$.outcome;if(F.outcome==="cancelled")return{approved:!1,reason:"User cancelled the permission request"};let W=F.optionId;if(W==="allow_always")return{approved:!0,scope:"project"};if(W==="reject_always")return{approved:!1,scope:"project",reason:"User permanently denied the permission request"};let G=W==="allow_once";return{approved:G,scope:"once",reason:G?void 0:"User denied the operation"}}catch(Q){return V.warn(`[AcpSession ${this.id}] Permission request failed:`,Q),{approved:!1,reason:"Permission request failed"}}}async requestUserQuestions(z,H){let J=z.questions??[];if(J.length===0)return{approved:!1,reason:"No structured questions were provided"};if(J.some((X)=>X.multiSelect))return{approved:!1,reason:"ACP does not support multi-select question responses"};let Q={};try{for(let[X,Y]of J.entries()){let Z=Y.options.map((G,D)=>`answer:${X}:${D}`),$=`answer:${X}:cancel`,F=await this.waitForClientInteraction(this.connection.requestPermission({sessionId:this.id,options:[...Y.options.map((G,D)=>({optionId:Z[D],name:G.label,kind:"allow_once"})),{optionId:$,name:"Cancel",kind:"reject_once"}],toolCall:{toolCallId:f(),status:"pending",title:Y.header,kind:"think",content:[{type:"content",content:{type:"text",text:[Y.question,...Y.options.map((G)=>`${G.label}: ${G.description}`)].join(`
|
|
9
|
+
`)}}]}}),H);if(!F)return{approved:!1,reason:P};if(F.outcome.outcome!=="selected")return{approved:!1,reason:"User cancelled the question prompt"};let W=Z.indexOf(F.outcome.optionId);if(W<0)return{approved:!1,reason:"User cancelled the question prompt"};Q[Y.header]=Y.options[W].label}return{approved:!0,answers:Q}}catch(X){return V.warn(`[AcpSession ${this.id}] Question request failed:`,X),{approved:!1,reason:"Question request failed"}}}async waitForClientInteraction(z,H){if(!H)return z;if(H.aborted)return;return new Promise((J,Q)=>{let X=!1,Y=($)=>{if(X)return;X=!0,H.removeEventListener("abort",Z),$()},Z=()=>Y(()=>J(void 0));if(H.addEventListener("abort",Z,{once:!0}),H.aborted)Z();z.then(($)=>Y(()=>J($)),($)=>Y(()=>Q($)))})}mapToolKind(z){return{readonly:"read",write:"edit",execute:"execute",read:"read",edit:"edit",delete:"delete",move:"move",search:"search",think:"think",fetch:"fetch"}[z||""]||"other"}}var U=B("Agent");class M{connection;sessions=new Map;sessionLoadQueues=new Map;clientCapabilities;destroyed=!1;constructor(z){this.connection=z}async initialize(z){return U.info("[BladeAgent] Initializing ACP connection"),U.debug(`[BladeAgent] Client capabilities: ${JSON.stringify(z.clientCapabilities)}`),this.clientCapabilities=z.clientCapabilities,{protocolVersion:g,agentCapabilities:{loadSession:!0,sessionCapabilities:{list:{},fork:{}},promptCapabilities:{image:!0,audio:!1,embeddedContext:!0},mcpCapabilities:{http:!0,sse:!0}}}}async authenticate(z){return}async newSession(z){this.assertNotDestroyed();let H=k("acp");U.info(`[BladeAgent] Creating new session: ${H}`),U.debug(`[BladeAgent] Session cwd: ${z.cwd||E()}`);let J=new w(H,z.cwd||E(),this.connection,this.clientCapabilities,{mcpServers:z.mcpServers});try{await J.initialize(),this.assertNotDestroyed()}catch(Q){throw await J.destroy().catch(()=>{return}),Q}return this.sessions.set(H,J),U.info(`[BladeAgent] Session ${H} created, scheduling available commands update`),J.sendAvailableCommandsDelayed(),this.buildChildSessionResponse(H)}async unstable_listSessions(z){if(z.cwd!=null&&!A.isAbsolute(z.cwd))throw Error("ACP session list cwd must be absolute");let H=await L.listSessionPage({cwd:z.cwd??void 0,cursor:z.cursor??void 0,limit:50,includeSubagents:!1});return{sessions:H.sessions.map((J)=>({sessionId:J.sessionId,cwd:J.projectPath,title:J.title??null,updatedAt:J.lastMessageTime})),nextCursor:H.nextCursor}}async unstable_forkSession(z){if(this.assertNotDestroyed(),!A.isAbsolute(z.cwd))throw Error("ACP session fork cwd must be absolute");let H=await L.forkSession(z.sessionId,{sourceProjectPath:z.cwd,targetProjectPath:z.cwd});this.assertNotDestroyed();let J=new w(H.sessionId,z.cwd,this.connection,this.clientCapabilities,{initialMessages:H.messages,mcpServers:z.mcpServers});try{await J.initialize(),this.assertNotDestroyed()}catch(Q){throw await J.destroy().catch(()=>{return}),Q}return this.sessions.set(H.sessionId,J),J.sendAvailableCommandsDelayed(),this.buildChildSessionResponse(H.sessionId)}async loadSession(z){this.assertNotDestroyed(),U.info(`[BladeAgent] Loading session: ${z.sessionId}`);let J=(this.sessionLoadQueues.get(z.sessionId)??Promise.resolve()).then(()=>this.replaceSession(z)),Q=J.then(()=>{return},()=>{return});this.sessionLoadQueues.set(z.sessionId,Q);try{return await J}finally{if(this.sessionLoadQueues.get(z.sessionId)===Q)this.sessionLoadQueues.delete(z.sessionId)}}async replaceSession(z){this.assertNotDestroyed();let H=this.sessions.get(z.sessionId);if(H)try{await H.destroy()}finally{if(this.sessions.get(z.sessionId)===H)this.sessions.delete(z.sessionId)}let J=await L.loadSession(z.sessionId,z.cwd),Q=new w(z.sessionId,z.cwd,this.connection,this.clientCapabilities,{initialMessages:J,mcpServers:z.mcpServers});try{await Q.initialize(),await Q.replayHistory(),this.assertNotDestroyed()}catch(X){throw await Q.destroy().catch(()=>{return}),X}return this.sessions.set(z.sessionId,Q),Q.sendAvailableCommandsDelayed(),this.buildSessionSetup()}buildChildSessionResponse(z){return{sessionId:z,...this.buildSessionSetup()}}assertNotDestroyed(){if(this.destroyed)throw Error("BladeAgent is destroyed")}buildSessionSetup(){let z=S(),H=z?.models||[],J=z?.currentModelId||H[0]?.id,Q=H.map((Y)=>({modelId:Y.id,name:Y.name||Y.id,description:Y.provider?`Provider: ${Y.provider}`:void 0}));return{modes:{availableModes:[{id:"default",name:"Default",description:"Ask for confirmation before all file edits and commands"},{id:"auto-edit",name:"Auto Edit",description:"Auto-approve file edits, ask for shell commands"},{id:"yolo",name:"Full Auto",description:"Auto-approve everything without confirmation"},{id:"plan",name:"Plan Only",description:"Read-only mode, no file changes or commands"}],currentModeId:"default"},models:Q.length>0?{availableModels:Q,currentModelId:J}:void 0}}async prompt(z){let H=this.sessions.get(z.sessionId);if(!H)throw Error(`Session not found: ${z.sessionId}`);return H.prompt(z)}async cancel(z){U.info(`[BladeAgent] Cancel notification received for session: ${z.sessionId}`);let H=this.sessions.get(z.sessionId);if(H)U.info("[BladeAgent] Found session, calling session.cancel()"),H.cancel();else U.warn(`[BladeAgent] Session not found for cancel: ${z.sessionId}`)}async setSessionMode(z){U.info(`[BladeAgent] Setting session mode: ${z.modeId}`);let H=this.sessions.get(z.sessionId);if(H)await H.setMode(z.modeId);return{}}async unstable_setSessionModel(z){U.info(`[BladeAgent] Setting session model: ${z.modelId}`);let H=this.sessions.get(z.sessionId);if(!H)throw Error(`Session not found: ${z.sessionId}`);return await H.setModel(z.modelId),{}}async destroy(){this.destroyed=!0,await Promise.all([...this.sessionLoadQueues.values()]),this.sessionLoadQueues.clear();let z;for(let H of this.sessions.values())try{await H.destroy()}catch(J){z??=J}this.sessions.clear();try{await I.getInstance().disconnectAll()}catch(H){z??=H}if(z!==void 0)throw z}}async function wz(){let z=p.toWeb(process.stdout),H=d.toWeb(process.stdin),J=N.ndJsonStream(z,H);await new N.AgentSideConnection((X)=>new M(X),J).closed}export{wz as runAcpIntegration};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function f(x){return x!==void 0&&typeof x.pattern==="string"&&typeof x.search_path==="string"}function b(x){return x!==void 0&&x.kind==="edit"&&typeof x.matches_found==="number"}function h(x){return x==="readonly"}var v="__aborted__";export{f as
|
|
1
|
+
function f(x){return x!==void 0&&typeof x.pattern==="string"&&typeof x.search_path==="string"}function b(x){return x!==void 0&&x.kind==="edit"&&typeof x.matches_found==="number"}function h(x){return x==="readonly"}var v="__aborted__";export{f as nb,b as ob,h as pb,v as qb};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ab as V,Cb as E,Db as L}from"./chunk-v61bja34.js";import{Yb as x}from"./chunk-h79044h0.js";var G={currentModelId:"",models:[],temperature:0,maxContextTokens:128000,maxOutputTokens:void 0,stream:!0,topP:0.9,topK:50,timeout:180000,theme:"dracula",uiTheme:"system",language:"zh-CN",fontSize:14,autoSaveSessions:!0,notifyBuild:!0,notifyErrors:!1,notifySounds:!1,privacyTelemetry:!1,privacyCrash:!0,debug:!1,mcpEnabled:!1,mcpServers:{},permissions:{allow:["Bash(pwd)","Bash(which *)","Bash(whoami)","Bash(hostname)","Bash(uname *)","Bash(date)","Bash(echo *)","Bash(ls *)","Bash(tree *)","Bash(git status)","Bash(git status -*)","Bash(git log *)","Bash(git diff *)","Bash(git show *)","Bash(git branch -* *)","Bash(git branch)","Bash(git tag -l *)","Bash(git tag --list *)","Bash(git stash list *)","Bash(git stash show *)","Bash(git rev-parse *)","Bash(git describe *)","Bash(git blame *)","Bash(git ls-files *)","Bash(git config --get *)","Bash(git config --list *)","Bash(git shortlog *)","Bash(git merge-base *)","Bash(git cat-file *)","Bash(git for-each-ref *)","Bash(git grep *)","Bash(git worktree list *)","Bash(git reflog show *)","Bash(git reflog)","Bash(git rev-list *)","Bash(git ls-remote *)","Bash(git remote -v)","Bash(git remote --verbose)","Bash(git remote)","Bash(gh pr view *)","Bash(gh pr list *)","Bash(gh pr diff *)","Bash(gh pr checks *)","Bash(gh pr status *)","Bash(gh issue view *)","Bash(gh issue list *)","Bash(gh issue status *)","Bash(gh run list *)","Bash(gh run view *)","Bash(gh repo view *)","Bash(gh auth status)","Bash(npm list *)","Bash(bun pm ls *)","Bash(npm view *)","Bash(npm outdated *)","Bash(pnpm list *)","Bash(yarn list *)","Bash(pip list *)","Bash(pip show *)"],ask:["Bash(curl *)","Bash(wget *)","Bash(aria2c *)","Bash(axel *)","Bash(rm -rf *)","Bash(rm -r *)","Bash(rm --recursive *)","Bash(nc *)","Bash(netcat *)","Bash(telnet *)","Bash(ncat *)"],deny:["Read(./.env)","Read(./.env.*)","Bash(rm -rf /)","Bash(rm -rf /*)","Bash(sudo *)","Bash(chmod 777 *)","Bash(bash *)","Bash(sh *)","Bash(zsh *)","Bash(fish *)","Bash(dash *)","Bash(eval *)","Bash(source *)","Bash(mkfs *)","Bash(fdisk *)","Bash(dd *)","Bash(format *)","Bash(parted *)","Bash(open http*)","Bash(open https*)","Bash(xdg-open http*)","Bash(xdg-open https*)"]},permissionMode:"default",hooks:{enabled:!1,defaultTimeout:60,timeoutBehavior:"ignore",failureBehavior:"ignore",maxConcurrentHooks:5,PreToolUse:[],PostToolUse:[],PostToolUseFailure:[],PermissionRequest:[],UserPromptSubmit:[],SessionStart:[],SessionEnd:[],Stop:[],SubagentStop:[],Notification:[],Compaction:[]},env:{},disableAllHooks:!1,maxTurns:-1};import{promises as T}from"fs";import{merge as A}from"lodash-es";import R from"os";import $ from"path";var S={sonnet:"claude-sonnet-4-20250514",opus:"claude-opus-4-20250514",haiku:"claude-3-5-haiku-20241022",claude:"claude-sonnet-4-20250514",gpt4o:"gpt-4o",gpt4:"gpt-4o",o1:"o1",o3:"o3","o4-mini":"o4-mini",deepseek:"deepseek-chat","deepseek-v3":"deepseek-chat","deepseek-r1":"deepseek-reasoner","deepseek-v4":"deepseek-v4-0324",gemini:"gemini-2.5-pro",flash:"gemini-2.5-flash",qwen:"qwen3-235b-a22b","qwen-max":"qwen-max","qwen-plus":"qwen-plus"};function I(H){let q=H.toLowerCase().trim();return S[q]??H}class N{static instance=null;runtimePermissionOverrides;constructor(){}static getInstance(){if(!N.instance)N.instance=new N;return N.instance}static resetInstance(){N.instance=null}async initialize(H){try{this.runtimePermissionOverrides=H?.permissions;let q=await this.loadConfigFiles(),J=await this.loadSettingsFiles(),K={...q,...J};if(H)K=this.mergeSettings(K,H);let Q=this.normalizeConfig(K),W={...G,...Q};if(this.resolveEnvInterpolation(W),process.env.BLADE_MODEL&&W.models?.length>0){let X=I(process.env.BLADE_MODEL),Y=W.models.find((Z)=>Z.id===X||Z.model===X||Z.id===process.env.BLADE_MODEL||Z.model===process.env.BLADE_MODEL);if(Y)W.currentModelId=Y.id}if(process.env.BLADE_API_KEY&&W.models?.length>0){let X=W.models.find((Y)=>Y.id===W.currentModelId);if(X)X.apiKey=process.env.BLADE_API_KEY}if(process.env.BLADE_BASE_URL&&W.models?.length>0){let X=W.models.find((Y)=>Y.id===W.currentModelId);if(X)X.baseUrl=process.env.BLADE_BASE_URL}if(process.env.BLADE_DEBUG)W.debug=process.env.BLADE_DEBUG==="1"||process.env.BLADE_DEBUG==="true"||process.env.BLADE_DEBUG;if(W.debug)console.log("[ConfigManager] Configuration loaded successfully");return W}catch(q){return console.error("[ConfigManager] Failed to initialize:",q),G}}async loadConfigFiles(){let H=$.join(R.homedir(),".blade","config.json"),q=$.join(V(),".blade","config.json"),J={},K=await this.loadJsonFile(H);if(K)J={...J,...K};let Q=await this.loadJsonFile(q);if(Q){let W={...J.mcpServers||{},...Q.mcpServers||{}};if(J={...J,...Q},Object.keys(W).length>0)J.mcpServers=W}return J}async loadSettingsFiles(){let H=$.join(R.homedir(),".blade","settings.json"),q=$.join(V(),".blade","settings.json"),J=$.join(V(),".blade","settings.local.json"),K={},Q=await this.loadJsonFile(H);if(Q)K=this.mergeSettings(K,Q);let W=await this.loadJsonFile(q);if(W)K=this.mergeSettings(K,W);let X=await this.loadJsonFile(J);if(X)K=this.mergeSettings(K,X);return K}async loadWorkspacePermissions(H,q){let J={allow:[...q.allow],ask:[...q.ask],deny:[...q.deny]};if($.resolve(H)!==$.resolve(V())){let Q=await this.loadWorkspacePermissionOverrides(V()),W=await this.loadJsonFile($.join(R.homedir(),".blade","settings.json")),X={allow:Array.from(new Set([...G.permissions.allow,...W?.permissions?.allow||[],...this.runtimePermissionOverrides?.allow||[]])),ask:Array.from(new Set([...G.permissions.ask,...W?.permissions?.ask||[],...this.runtimePermissionOverrides?.ask||[]])),deny:Array.from(new Set([...G.permissions.deny,...W?.permissions?.deny||[],...this.runtimePermissionOverrides?.deny||[]]))};for(let Y of["allow","ask","deny"]){let Z=new Set(Q[Y].filter((D)=>!X[Y].includes(D)));J[Y]=J[Y].filter((D)=>!Z.has(D))}}let K=await this.loadWorkspacePermissionOverrides(H);for(let Q of["allow","ask","deny"])J[Q]=Array.from(new Set([...J[Q],...K[Q]]));return J}async loadWorkspacePermissionOverrides(H){let q={allow:[],ask:[],deny:[]},J=[$.join(H,".blade","settings.json"),$.join(H,".blade","settings.local.json")];for(let K of J){let Q=await this.loadJsonFile(K);if(!Q?.permissions)continue;for(let W of["allow","ask","deny"])q[W]=Array.from(new Set([...q[W],...Q.permissions[W]||[]]))}return q}mergeSettings(H,q){let J={...JSON.parse(JSON.stringify(H)),...JSON.parse(JSON.stringify(q))};if(q.permissions)J.permissions={allow:Array.from(new Set([...H.permissions?.allow||[],...q.permissions.allow||[]])),ask:Array.from(new Set([...H.permissions?.ask||[],...q.permissions.ask||[]])),deny:Array.from(new Set([...H.permissions?.deny||[],...q.permissions.deny||[]]))};if(q.hooks)J.hooks=A({},J.hooks,q.hooks);if(q.env)J.env=A({},J.env,q.env);if(q.mcpServers)J.mcpServers={...J.mcpServers||{},...q.mcpServers};if(q.disableAllHooks!==void 0)J.disableAllHooks=q.disableAllHooks;if(q.permissionMode!==void 0)J.permissionMode=q.permissionMode;if(q.maxTurns!==void 0)J.maxTurns=q.maxTurns;return J}resolveEnvInterpolation(H){let q=/\$\{?([A-Z_][A-Z0-9_]*)(:-([^}]+))?\}?/g,J=(Q)=>{if(typeof Q==="string")return Q.replace(q,(W,X,Y,Z)=>{return process.env[X]||Z||W});if(Array.isArray(Q))return Q.map(J);if(typeof Q==="object"&&Q!==null){let W=Q;for(let[X,Y]of Object.entries(W))W[X]=J(Y);return W}return Q},K=H;for(let[Q,W]of Object.entries(K))K[Q]=J(W)}async loadJsonFile(H){try{if(await this.fileExists(H)){let q=await T.readFile(H,"utf-8");return JSON.parse(q)}}catch(q){console.warn(`[ConfigManager] Failed to load ${H}:`,q)}return null}async fileExists(H){try{return await T.access(H),!0}catch{return!1}}normalizeConfig(H){let q=JSON.parse(JSON.stringify(H)),J=(Q)=>Q.trim().replace(/^`|`$/g,""),K=(Q)=>{for(let[W,X]of Object.entries(Q))if(typeof X==="string")Q[W]=J(X);else if(Array.isArray(X))X.forEach((Y,Z)=>{if(typeof Y==="string")X[Z]=J(Y);else if(typeof Y==="object"&&Y!==null)K(Y)});else if(typeof X==="object"&&X!==null)K(X)};return K(q),q}validateConfig(H){let q=[],J=[];if(!H.models||H.models.length===0)q.push("没有可用的模型配置");if(!E(H.maxTurns))q.push(`maxTurns 必须是 ${L()}`);if(H.models&&H.models.length>0){if(!H.currentModelId)q.push("未设置当前模型 ID");else if(!H.models.find((Q)=>Q.id===H.currentModelId))q.push(`当前模型 ID "${H.currentModelId}" 在 models 列表中不存在`);for(let K of H.models){let Q=`模型 "${K.name||K.id}"`;if(!K.apiKey)J.push(`${Q}: apiKey 为空`);if(!K.model)q.push(`${Q}: model 字段必填`);if(!K.provider)q.push(`${Q}: provider 字段必填`);if(K.baseUrl&&!K.baseUrl.startsWith("http"))J.push(`${Q}: baseUrl "${K.baseUrl}" 不是有效的 HTTP URL`)}}if(J.length>0)console.warn(`[ConfigManager] 配置警告:
|
|
2
2
|
${J.map((K)=>` ⚠ ${K}`).join(`
|
|
3
3
|
`)}`);if(q.length>0)throw Error(`配置验证失败:
|
|
4
4
|
${q.map((K)=>` - ${K}`).join(`
|
|
@@ -23,4 +23,4 @@ ${q.map((K)=>` - ${K}`).join(`
|
|
|
23
23
|
}
|
|
24
24
|
]
|
|
25
25
|
}
|
|
26
|
-
`)}}function x(H,q={}){let J={...H};if(q.debug!==void 0)J.debug=q.debug===""?!0:q.debug;if(q.model){if(!H.models.some((Q)=>Q.id===q.model))throw Error(`模型配置未找到: ${q.model}`);J.currentModelId=q.model}if(q.yolo===!0)J.permissionMode="yolo";else if(q.permissionMode!==void 0)J.permissionMode=q.permissionMode;if(q.maxTurns!==void 0)J.maxTurns=q.maxTurns;return J.systemPrompt=q.systemPrompt,J.appendSystemPrompt=q.appendSystemPrompt,J.model=q.model,J.resumeSessionId=q.sessionId,J.forkSession=q.forkSession,J.allowedTools=q.allowedTools,J.disallowedTools=q.disallowedTools,J.mcpConfigPaths=q.mcpConfig,J.strictMcpConfig=q.strictMcpConfig,J.addDirs=q.addDir,J.outputFormat=q.outputFormat,J.inputFormat=q.inputFormat,J.print=q.print,J.includePartialMessages=q.includePartialMessages,J.replayUserMessages=q.replayUserMessages,J.agentsConfig=q.agents,J.settingSources=q.settingSources,J}import{promises as U}from"node:fs";import E from"node:os";import B from"node:path";import{Mutex as L}from"async-mutex";import{merge as S}from"lodash-es";import b from"write-file-atomic";var M=j("Service"),F={models:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},currentModelId:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},temperature:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},maxContextTokens:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},maxOutputTokens:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},timeout:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},theme:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},uiTheme:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},language:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},debug:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},fontSize:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},autoSaveSessions:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifyBuild:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifyErrors:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifySounds:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},privacyTelemetry:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},privacyCrash:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},permissionMode:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},permissions:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},hooks:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},env:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},disableAllHooks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxTurns:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},mcpServers:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},stream:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},topP:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},topK:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},mcpEnabled:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},systemPrompt:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},appendSystemPrompt:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},initialMessage:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},resumeSessionId:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},forkSession:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},allowedTools:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},disallowedTools:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},mcpConfigPaths:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},strictMcpConfig:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},addDirs:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},outputFormat:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},inputFormat:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},print:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},includePartialMessages:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},replayUserMessages:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},agentsConfig:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},settingSources:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1}},Jq=new Set(Object.entries(F).filter(([H,q])=>q.persistable).map(([H])=>H)),Kq=new Set(Object.entries(F).filter(([H,q])=>!q.persistable).map(([H])=>H));class z{static instance=null;pendingUpdates=new Map;timers=new Map;fileLocks=new Map;lastSaveError=null;debounceDelay=300;constructor(){}static getInstance(){if(!z.instance)z.instance=new z;return z.instance}static resetInstance(){if(z.instance)for(let H of z.instance.timers.values())clearTimeout(H);z.instance=null}async save(H,q={}){this.validatePersistableFields(H);let J=this.groupUpdatesByTarget(H,q.scope,q.projectDir);if(q.immediate)await Promise.all(Array.from(J.entries()).map(([K,Q])=>this.flushTarget(K,Q)));else for(let[K,Q]of J)this.scheduleSave(K,Q)}async flush(){for(let q of this.timers.values())clearTimeout(q);this.timers.clear();let H=Array.from(this.pendingUpdates.entries()).map(([q,J])=>this.flushTarget(q,J));this.pendingUpdates.clear(),await Promise.all(H)}getLastSaveError(){return this.lastSaveError}clearLastSaveError(){this.lastSaveError=null}async appendPermissionRule(H,q={}){await this.appendPermissionRuleForDecision(H,"allow",q)}async appendPermissionDenyRule(H,q={}){await this.appendPermissionRuleForDecision(H,"deny",q)}async appendPermissionRuleForDecision(H,q,J){let K=J.scope??"local",Q=this.resolveFilePath("settings",K,J.projectDir);await this.flushTargetWithModifier(Q,(W)=>{let X=W.permissions??{allow:[],ask:[],deny:[]},Y={allow:q==="allow"?this.dedupeArray([...X.allow||[],H]):X.allow||[],ask:X.ask||[],deny:q==="deny"?this.dedupeArray([...X.deny||[],H]):X.deny||[]};return{...W,permissions:Y}})}async appendLocalPermissionRule(H,q={}){await this.appendPermissionRule(H,{...q,scope:"local"})}async appendLocalPermissionDenyRule(H,q={}){await this.appendPermissionDenyRule(H,{...q,scope:"local"})}validatePersistableFields(H){for(let q of Object.keys(H)){let J=F[q];if(!J)throw Error(`Unknown config field: ${q}`);if(!J.persistable)throw Error(`Field "${q}" is non-persistable and cannot be saved to config files. Non-persistable fields are runtime-only and only valid for the current session.`)}}groupUpdatesByTarget(H,q,J){let K=new Map;for(let[Q,W]of Object.entries(H)){let X=F[Q];if(!X)continue;let Y=q??X.defaultScope,Z=this.resolveFilePath(X.target,Y,J);if(!K.has(Z))K.set(Z,{});K.get(Z)[Q]=W}return K}resolveFilePath(H,q,J){let K=J??V();if(H==="config")return q==="global"?B.join(E.homedir(),".blade","config.json"):B.join(K,".blade","config.json");switch(q){case"local":return B.join(K,".blade","settings.local.json");case"project":return B.join(K,".blade","settings.json");case"global":return B.join(E.homedir(),".blade","settings.json");default:return B.join(K,".blade","settings.local.json")}}scheduleSave(H,q){let J=this.pendingUpdates.get(H)??{},K=this.mergePendingUpdates(J,q);this.pendingUpdates.set(H,K);let Q=this.timers.get(H);if(Q)clearTimeout(Q);let W=setTimeout(async()=>{let X=this.pendingUpdates.get(H);if(X){this.pendingUpdates.delete(H),this.timers.delete(H);try{await this.flushTarget(H,X),this.lastSaveError=null}catch(Y){let Z=Y instanceof Error?Y:Error(String(Y));this.lastSaveError=Z,M.error(`Failed to save config to ${H}:`,Z.message),M.error("Stack trace:",Z.stack)}}},this.debounceDelay);this.timers.set(H,W)}mergePendingUpdates(H,q){let J={...H};for(let[K,Q]of Object.entries(q)){let W=F[K];if(!W){J[K]=Q;continue}switch(W.mergeStrategy){case"replace":J[K]=Q;break;case"append-dedupe":this.applyAppendDedupe(J,K,Q);break;case"deep-merge":this.applyDeepMerge(J,K,Q);break}}return J}async flushTarget(H,q){let J=this.fileLocks.get(H);if(!J)J=new L,this.fileLocks.set(H,J);await J.runExclusive(async()=>{await this.performWrite(H,q)})}async flushTargetWithModifier(H,q){let J=this.fileLocks.get(H);if(!J)J=new L,this.fileLocks.set(H,J);await J.runExclusive(async()=>{await U.mkdir(B.dirname(H),{recursive:!0,mode:493});let K={};try{let W=await U.readFile(H,"utf-8");K=JSON.parse(W)}catch{K={}}let Q=q(K);await this.atomicWrite(H,Q)})}async performWrite(H,q){await U.mkdir(B.dirname(H),{recursive:!0,mode:493});let J={};try{let Q=await U.readFile(H,"utf-8");J=JSON.parse(Q)}catch{J={}}let K={...J};for(let[Q,W]of Object.entries(q)){let X=F[Q];if(!X){K[Q]=W;continue}switch(X.mergeStrategy){case"replace":K[Q]=W;break;case"append-dedupe":this.applyAppendDedupe(K,Q,W);break;case"deep-merge":this.applyDeepMerge(K,Q,W);break}}await this.atomicWrite(H,K)}applyAppendDedupe(H,q,J){if(q==="permissions"&&typeof J==="object"&&J!==null){let K=H[q]??{allow:[],ask:[],deny:[]},Q=J;H[q]={allow:this.dedupeArray([...K.allow||[],...Q.allow||[]]),ask:this.dedupeArray([...K.ask||[],...Q.ask||[]]),deny:this.dedupeArray([...K.deny||[],...Q.deny||[]])}}else if(Array.isArray(J)){let K=Array.isArray(H[q])?H[q]:[];H[q]=this.dedupeArray([...K,...J])}else H[q]=J}applyDeepMerge(H,q,J){if(typeof J==="object"&&J!==null&&!Array.isArray(J)){let K=typeof H[q]==="object"&&H[q]!==null?H[q]:{};H[q]=S({},K,J)}else H[q]=J}dedupeArray(H){return Array.from(new Set(H))}async atomicWrite(H,q){await b(H,JSON.stringify(q,null,2),{mode:384,encoding:"utf-8"})}}function y(){return z.getInstance()}export{G as Aa,N as Ba,x as Ca,y as Da};
|
|
26
|
+
`)}}function b(H,q={}){let J={...H};if(q.debug!==void 0)J.debug=q.debug===""?!0:q.debug;if(q.model){if(!H.models.some((Q)=>Q.id===q.model))throw Error(`模型配置未找到: ${q.model}`);J.currentModelId=q.model}if(q.yolo===!0)J.permissionMode="yolo";else if(q.permissionMode!==void 0)J.permissionMode=q.permissionMode;if(q.maxTurns!==void 0)J.maxTurns=q.maxTurns;return J.systemPrompt=q.systemPrompt,J.appendSystemPrompt=q.appendSystemPrompt,J.model=q.model,J.resumeSessionId=q.sessionId,J.forkSession=q.forkSession,J.allowedTools=q.allowedTools,J.disallowedTools=q.disallowedTools,J.mcpConfigPaths=q.mcpConfig,J.strictMcpConfig=q.strictMcpConfig,J.addDirs=q.addDir,J.outputFormat=q.outputFormat,J.inputFormat=q.inputFormat,J.print=q.print,J.includePartialMessages=q.includePartialMessages,J.replayUserMessages=q.replayUserMessages,J.agentsConfig=q.agents,J.settingSources=q.settingSources,J}import{promises as U}from"node:fs";import M from"node:os";import B from"node:path";import{Mutex as j}from"async-mutex";import{merge as y}from"lodash-es";import k from"write-file-atomic";var w=x("Service"),F={models:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},currentModelId:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},temperature:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},maxContextTokens:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},maxOutputTokens:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},timeout:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},theme:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},uiTheme:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},language:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},debug:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},fontSize:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},autoSaveSessions:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifyBuild:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifyErrors:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifySounds:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},privacyTelemetry:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},privacyCrash:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},permissionMode:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},permissions:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},hooks:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},env:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},disableAllHooks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxTurns:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},mcpServers:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},stream:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},topP:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},topK:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},mcpEnabled:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},systemPrompt:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},appendSystemPrompt:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},initialMessage:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},resumeSessionId:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},forkSession:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},allowedTools:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},disallowedTools:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},mcpConfigPaths:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},strictMcpConfig:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},addDirs:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},outputFormat:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},inputFormat:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},print:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},includePartialMessages:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},replayUserMessages:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},agentsConfig:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},settingSources:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1}},Wq=new Set(Object.entries(F).filter(([H,q])=>q.persistable).map(([H])=>H)),Xq=new Set(Object.entries(F).filter(([H,q])=>!q.persistable).map(([H])=>H));class z{static instance=null;pendingUpdates=new Map;timers=new Map;fileLocks=new Map;lastSaveError=null;debounceDelay=300;constructor(){}static getInstance(){if(!z.instance)z.instance=new z;return z.instance}static resetInstance(){if(z.instance)for(let H of z.instance.timers.values())clearTimeout(H);z.instance=null}async save(H,q={}){this.validatePersistableFields(H);let J=this.groupUpdatesByTarget(H,q.scope,q.projectDir);if(q.immediate)await Promise.all(Array.from(J.entries()).map(([K,Q])=>this.flushTarget(K,Q)));else for(let[K,Q]of J)this.scheduleSave(K,Q)}async flush(){for(let q of this.timers.values())clearTimeout(q);this.timers.clear();let H=Array.from(this.pendingUpdates.entries()).map(([q,J])=>this.flushTarget(q,J));this.pendingUpdates.clear(),await Promise.all(H)}getLastSaveError(){return this.lastSaveError}clearLastSaveError(){this.lastSaveError=null}async appendPermissionRule(H,q={}){await this.appendPermissionRuleForDecision(H,"allow",q)}async appendPermissionDenyRule(H,q={}){await this.appendPermissionRuleForDecision(H,"deny",q)}async appendPermissionRuleForDecision(H,q,J){let K=J.scope??"local",Q=this.resolveFilePath("settings",K,J.projectDir);await this.flushTargetWithModifier(Q,(W)=>{let X=W.permissions??{allow:[],ask:[],deny:[]},Y={allow:q==="allow"?this.dedupeArray([...X.allow||[],H]):X.allow||[],ask:X.ask||[],deny:q==="deny"?this.dedupeArray([...X.deny||[],H]):X.deny||[]};return{...W,permissions:Y}})}async appendLocalPermissionRule(H,q={}){await this.appendPermissionRule(H,{...q,scope:"local"})}async appendLocalPermissionDenyRule(H,q={}){await this.appendPermissionDenyRule(H,{...q,scope:"local"})}validatePersistableFields(H){for(let q of Object.keys(H)){let J=F[q];if(!J)throw Error(`Unknown config field: ${q}`);if(!J.persistable)throw Error(`Field "${q}" is non-persistable and cannot be saved to config files. Non-persistable fields are runtime-only and only valid for the current session.`)}}groupUpdatesByTarget(H,q,J){let K=new Map;for(let[Q,W]of Object.entries(H)){let X=F[Q];if(!X)continue;let Y=q??X.defaultScope,Z=this.resolveFilePath(X.target,Y,J);if(!K.has(Z))K.set(Z,{});K.get(Z)[Q]=W}return K}resolveFilePath(H,q,J){let K=J??V();if(H==="config")return q==="global"?B.join(M.homedir(),".blade","config.json"):B.join(K,".blade","config.json");switch(q){case"local":return B.join(K,".blade","settings.local.json");case"project":return B.join(K,".blade","settings.json");case"global":return B.join(M.homedir(),".blade","settings.json");default:return B.join(K,".blade","settings.local.json")}}scheduleSave(H,q){let J=this.pendingUpdates.get(H)??{},K=this.mergePendingUpdates(J,q);this.pendingUpdates.set(H,K);let Q=this.timers.get(H);if(Q)clearTimeout(Q);let W=setTimeout(async()=>{let X=this.pendingUpdates.get(H);if(X){this.pendingUpdates.delete(H),this.timers.delete(H);try{await this.flushTarget(H,X),this.lastSaveError=null}catch(Y){let Z=Y instanceof Error?Y:Error(String(Y));this.lastSaveError=Z,w.error(`Failed to save config to ${H}:`,Z.message),w.error("Stack trace:",Z.stack)}}},this.debounceDelay);this.timers.set(H,W)}mergePendingUpdates(H,q){let J={...H};for(let[K,Q]of Object.entries(q)){let W=F[K];if(!W){J[K]=Q;continue}switch(W.mergeStrategy){case"replace":J[K]=Q;break;case"append-dedupe":this.applyAppendDedupe(J,K,Q);break;case"deep-merge":this.applyDeepMerge(J,K,Q);break}}return J}async flushTarget(H,q){let J=this.fileLocks.get(H);if(!J)J=new j,this.fileLocks.set(H,J);await J.runExclusive(async()=>{await this.performWrite(H,q)})}async flushTargetWithModifier(H,q){let J=this.fileLocks.get(H);if(!J)J=new j,this.fileLocks.set(H,J);await J.runExclusive(async()=>{await U.mkdir(B.dirname(H),{recursive:!0,mode:493});let K={};try{let W=await U.readFile(H,"utf-8");K=JSON.parse(W)}catch{K={}}let Q=q(K);await this.atomicWrite(H,Q)})}async performWrite(H,q){await U.mkdir(B.dirname(H),{recursive:!0,mode:493});let J={};try{let Q=await U.readFile(H,"utf-8");J=JSON.parse(Q)}catch{J={}}let K={...J};for(let[Q,W]of Object.entries(q)){let X=F[Q];if(!X){K[Q]=W;continue}switch(X.mergeStrategy){case"replace":K[Q]=W;break;case"append-dedupe":this.applyAppendDedupe(K,Q,W);break;case"deep-merge":this.applyDeepMerge(K,Q,W);break}}await this.atomicWrite(H,K)}applyAppendDedupe(H,q,J){if(q==="permissions"&&typeof J==="object"&&J!==null){let K=H[q]??{allow:[],ask:[],deny:[]},Q=J;H[q]={allow:this.dedupeArray([...K.allow||[],...Q.allow||[]]),ask:this.dedupeArray([...K.ask||[],...Q.ask||[]]),deny:this.dedupeArray([...K.deny||[],...Q.deny||[]])}}else if(Array.isArray(J)){let K=Array.isArray(H[q])?H[q]:[];H[q]=this.dedupeArray([...K,...J])}else H[q]=J}applyDeepMerge(H,q,J){if(typeof J==="object"&&J!==null&&!Array.isArray(J)){let K=typeof H[q]==="object"&&H[q]!==null?H[q]:{};H[q]=y({},K,J)}else H[q]=J}dedupeArray(H){return Array.from(new Set(H))}async atomicWrite(H,q){await k(H,JSON.stringify(q,null,2),{mode:384,encoding:"utf-8"})}}function C(){return z.getInstance()}export{G as Da,N as Ea,b as Fa,C as Ga};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as Q,g as R,h as T,i as W}from"./chunk-
|
|
1
|
+
import{f as Q,g as R,h as T,i as W}from"./chunk-t9zdypqp.js";import"./chunk-4n7fsts0.js";import"./chunk-x1khkevy.js";import"./chunk-9ad7tt9s.js";import"./chunk-x466sb8s.js";import"./chunk-60se4kxq.js";import{wa as J}from"./chunk-89j9pm90.js";import"./chunk-778h8815.js";import{Ia as M}from"./chunk-d61d6m07.js";import"./chunk-54vk4tw8.js";import"./chunk-6y58y4rx.js";import"./chunk-8e0rv3j5.js";import"./chunk-2n8a87ds.js";import"./chunk-v61bja34.js";import"./chunk-0y895nft.js";import"./chunk-h79044h0.js";import"./chunk-zet4zjc3.js";import b from"chalk";import H from"open";var $=`
|
|
2
2
|
____ _ _
|
|
3
3
|
| __ )| | __ _ __| | ___
|
|
4
4
|
| _ \\| |/ _\` |/ _\` |/ _ \\
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Ba as Y0,Da as w}from"./chunk-ebynn53v.js";import{qb as Q0}from"./chunk-rhvxr82g.js";import{nanoid as L0}from"nanoid";import{devtools as R0,subscribeWithSelector as I0}from"zustand/middleware";import{createStore as N0}from"zustand/vanilla";var G0={name:"ayu-dark",colors:{primary:"#ffcc66",secondary:"#bae67e",accent:"#73d0ff",success:"#bae67e",warning:"#ffcc66",error:"#ff3333",info:"#73d0ff",light:"#f0f0f0",dark:"#000000",muted:"#5c6773",highlight:"#2d323b",text:{primary:"#e6e1cf",secondary:"#bae67e",muted:"#5c6773",light:"#ffffff"},background:{primary:"#0f1419",secondary:"#14191f",dark:"#000000"},border:{light:"#2d323b",dark:"#000000"},syntax:{comment:"#5c6773",string:"#bae67e",number:"#ffcc66",keyword:"#ff8f40",function:"#73d0ff",variable:"#e6e1cf",operator:"#f29e74",type:"#73d0ff",tag:"#ff8f40",attr:"#ffd580",default:"#e6e1cf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.2)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2)"}},V0={name:"dracula",colors:{primary:"#bd93f9",secondary:"#ffb86c",accent:"#ff79c6",success:"#50fa7b",warning:"#f1fa8c",error:"#ff5555",info:"#8be9fd",light:"#f8f8f2",dark:"#282a36",muted:"#6272a4",highlight:"#44475a",text:{primary:"#f8f8f2",secondary:"#f1fa8c",muted:"#6272a4",light:"#ffffff"},background:{primary:"#282a36",secondary:"#44475a",dark:"#21222c"},border:{light:"#44475a",dark:"#000000"},syntax:{comment:"#6272a4",string:"#f1fa8c",number:"#bd93f9",keyword:"#ff79c6",function:"#50fa7b",variable:"#f8f8f2",operator:"#ff79c6",type:"#8be9fd",tag:"#ff79c6",attr:"#50fa7b",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 42, 54, 0.2)",base:"0 1px 3px 0 rgba(40, 42, 54, 0.3), 0 1px 2px 0 rgba(40, 42, 54, 0.2)",lg:"0 10px 15px -3px rgba(40, 42, 54, 0.3), 0 4px 6px -2px rgba(40, 42, 54, 0.2)"}},F0={name:"monokai",colors:{primary:"#66d9ef",secondary:"#a6e22e",accent:"#f92672",success:"#a6e22e",warning:"#e6db74",error:"#f92672",info:"#66d9ef",light:"#f8f8f2",dark:"#272822",muted:"#75715e",highlight:"#3e3d32",text:{primary:"#f8f8f2",secondary:"#e6db74",muted:"#75715e",light:"#ffffff"},background:{primary:"#272822",secondary:"#3e3d32",dark:"#1e1f1c"},border:{light:"#3e3d32",dark:"#000000"},syntax:{comment:"#75715e",string:"#e6db74",number:"#ae81ff",keyword:"#f92672",function:"#a6e22e",variable:"#f8f8f2",operator:"#f92672",type:"#66d9ef",tag:"#f92672",attr:"#a6e22e",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(39, 40, 34, 0.2)",base:"0 1px 3px 0 rgba(39, 40, 34, 0.3), 0 1px 2px 0 rgba(39, 40, 34, 0.2)",lg:"0 10px 15px -3px rgba(39, 40, 34, 0.3), 0 4px 6px -2px rgba(39, 40, 34, 0.2)"}},U0={name:"nord",colors:{primary:"#88c0d0",secondary:"#81a1c1",accent:"#b48ead",success:"#a3be8c",warning:"#ebcb8b",error:"#bf616a",info:"#88c0d0",light:"#eceff4",dark:"#2e3440",muted:"#4c566a",highlight:"#434c5e",text:{primary:"#eceff4",secondary:"#d8dee9",muted:"#4c566a",light:"#ffffff"},background:{primary:"#2e3440",secondary:"#3b4252",dark:"#242933"},border:{light:"#434c5e",dark:"#000000"},syntax:{comment:"#616e88",string:"#a3be8c",number:"#b48ead",keyword:"#81a1c1",function:"#88c0d0",variable:"#d8dee9",operator:"#81a1c1",type:"#8fbcbb",tag:"#81a1c1",attr:"#8fbcbb",default:"#eceff4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(46, 52, 64, 0.2)",base:"0 1px 3px 0 rgba(46, 52, 64, 0.3), 0 1px 2px 0 rgba(46, 52, 64, 0.2)",lg:"0 10px 15px -3px rgba(46, 52, 64, 0.3), 0 4px 6px -2px rgba(46, 52, 64, 0.2)"}},j0={name:"solarized-light",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#cb4b16",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#93a1a1",highlight:"#eee8d5",text:{primary:"#586e75",secondary:"#657b83",muted:"#93a1a1",light:"#002b36"},background:{primary:"#fdf6e3",secondary:"#eee8d5",dark:"#073642"},border:{light:"#eee8d5",dark:"#073642"},syntax:{comment:"#93a1a1",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#657b83",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#657b83"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(253, 246, 227, 0.2)",base:"0 1px 3px 0 rgba(253, 246, 227, 0.3), 0 1px 2px 0 rgba(253, 246, 227, 0.2)",lg:"0 10px 15px -3px rgba(253, 246, 227, 0.3), 0 4px 6px -2px rgba(253, 246, 227, 0.2)"}},J0={name:"solarized-dark",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#586e75",highlight:"#073642",text:{primary:"#839496",secondary:"#93a1a1",muted:"#586e75",light:"#fdf6e3"},background:{primary:"#002b36",secondary:"#073642",dark:"#001f29"},border:{light:"#073642",dark:"#000000"},syntax:{comment:"#586e75",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#839496",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#839496"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 43, 54, 0.2)",base:"0 1px 3px 0 rgba(0, 43, 54, 0.3), 0 1px 2px 0 rgba(0, 43, 54, 0.2)",lg:"0 10px 15px -3px rgba(0, 43, 54, 0.3), 0 4px 6px -2px rgba(0, 43, 54, 0.2)"}},H0={name:"tokyo-night",colors:{primary:"#7aa2f7",secondary:"#7dcfff",accent:"#bb9af7",success:"#9ece6a",warning:"#e0af68",error:"#f7768e",info:"#7aa2f7",light:"#c0caf5",dark:"#1a1b26",muted:"#565f89",highlight:"#292e42",text:{primary:"#a9b1d6",secondary:"#c0caf5",muted:"#565f89",light:"#ffffff"},background:{primary:"#1a1b26",secondary:"#292e42",dark:"#16161e"},border:{light:"#292e42",dark:"#000000"},syntax:{comment:"#565f89",string:"#9ece6a",number:"#ff9e64",keyword:"#bb9af7",function:"#7aa2f7",variable:"#c0caf5",operator:"#89ddff",type:"#7dcfff",tag:"#f7768e",attr:"#7aa2f7",default:"#a9b1d6"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(26, 27, 38, 0.2)",base:"0 1px 3px 0 rgba(26, 27, 38, 0.3), 0 1px 2px 0 rgba(26, 27, 38, 0.2)",lg:"0 10px 15px -3px rgba(26, 27, 38, 0.3), 0 4px 6px -2px rgba(26, 27, 38, 0.2)"}},z0={name:"github",colors:{primary:"#0969da",secondary:"#8250df",accent:"#bc4c00",success:"#1a7f37",warning:"#bc4c00",error:"#d1242f",info:"#0969da",light:"#f6f8fa",dark:"#24292f",muted:"#6e7781",highlight:"#ddf4ff",text:{primary:"#24292f",secondary:"#57606a",muted:"#6e7781",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f6f8fa",dark:"#24292f"},border:{light:"#d0d7de",dark:"#24292f"},syntax:{comment:"#6e7781",string:"#0a3069",number:"#0550ae",keyword:"#cf222e",function:"#8250df",variable:"#24292f",operator:"#cf222e",type:"#0550ae",tag:"#116329",attr:"#0550ae",default:"#24292f"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(255, 255, 255, 0.2)",base:"0 1px 3px 0 rgba(255, 255, 255, 0.3), 0 1px 2px 0 rgba(255, 255, 255, 0.2)",lg:"0 10px 15px -3px rgba(255, 255, 255, 0.3), 0 4px 6px -2px rgba(255, 255, 255, 0.2)"}},_0={name:"gruvbox",colors:{primary:"#83a598",secondary:"#8ec07c",accent:"#d3869b",success:"#b8bb26",warning:"#fabd2f",error:"#fb4934",info:"#83a598",light:"#fbf1c7",dark:"#282828",muted:"#928374",highlight:"#3c3836",text:{primary:"#ebdbb2",secondary:"#d5c4a1",muted:"#928374",light:"#ffffff"},background:{primary:"#282828",secondary:"#3c3836",dark:"#1d2021"},border:{light:"#3c3836",dark:"#000000"},syntax:{comment:"#928374",string:"#b8bb26",number:"#d3869b",keyword:"#fb4934",function:"#8ec07c",variable:"#ebdbb2",operator:"#fe8019",type:"#fabd2f",tag:"#fb4934",attr:"#b8bb26",default:"#ebdbb2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 40, 40, 0.2)",base:"0 1px 3px 0 rgba(40, 40, 40, 0.3), 0 1px 2px 0 rgba(40, 40, 40, 0.2)",lg:"0 10px 15px -3px rgba(40, 40, 40, 0.3), 0 4px 6px -2px rgba(40, 40, 40, 0.2)"}},W0={name:"one-dark",colors:{primary:"#61afef",secondary:"#c678dd",accent:"#e5c07b",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#56b6c2",light:"#abb2bf",dark:"#282c34",muted:"#5c6370",highlight:"#3e4451",text:{primary:"#abb2bf",secondary:"#c6c8d0",muted:"#5c6370",light:"#ffffff"},background:{primary:"#282c34",secondary:"#3e4451",dark:"#21252b"},border:{light:"#3e4451",dark:"#000000"},syntax:{comment:"#5c6370",string:"#98c379",number:"#d19a66",keyword:"#c678dd",function:"#61afef",variable:"#e06c75",operator:"#56b6c2",type:"#e5c07b",tag:"#e06c75",attr:"#d19a66",default:"#abb2bf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 44, 52, 0.2)",base:"0 1px 3px 0 rgba(40, 44, 52, 0.3), 0 1px 2px 0 rgba(40, 44, 52, 0.2)",lg:"0 10px 15px -3px rgba(40, 44, 52, 0.3), 0 4px 6px -2px rgba(40, 44, 52, 0.2)"}},u0={name:"catppuccin",colors:{primary:"#89b4fa",secondary:"#cba6f7",accent:"#f5c2e7",success:"#a6e3a1",warning:"#f9e2af",error:"#f38ba8",info:"#89dceb",light:"#cdd6f4",dark:"#11111b",muted:"#6c7086",highlight:"#181825",text:{primary:"#cdd6f4",secondary:"#bac2de",muted:"#6c7086",light:"#ffffff"},background:{primary:"#1e1e2e",secondary:"#181825",dark:"#11111b"},border:{light:"#181825",dark:"#000000"},syntax:{comment:"#6c7086",string:"#a6e3a1",number:"#fab387",keyword:"#cba6f7",function:"#89b4fa",variable:"#cdd6f4",operator:"#89dceb",type:"#f5c2e7",tag:"#f38ba8",attr:"#89b4fa",default:"#cdd6f4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(30, 30, 46, 0.2)",base:"0 1px 3px 0 rgba(30, 30, 46, 0.3), 0 1px 2px 0 rgba(30, 30, 46, 0.2)",lg:"0 10px 15px -3px rgba(30, 30, 46, 0.3), 0 4px 6px -2px rgba(30, 30, 46, 0.2)"}},K0={name:"rose-pine",colors:{primary:"#9ccfd8",secondary:"#c4a7e7",accent:"#f6c177",success:"#31748f",warning:"#f6c177",error:"#eb6f92",info:"#9ccfd8",light:"#e0def4",dark:"#191724",muted:"#6e6a86",highlight:"#1f1d2e",text:{primary:"#e0def4",secondary:"#cecacd",muted:"#6e6a86",light:"#ffffff"},background:{primary:"#191724",secondary:"#1f1d2e",dark:"#12101a"},border:{light:"#1f1d2e",dark:"#000000"},syntax:{comment:"#6e6a86",string:"#9ccfd8",number:"#ea9a97",keyword:"#c4a7e7",function:"#31748f",variable:"#e0def4",operator:"#f6c177",type:"#9ccfd8",tag:"#eb6f92",attr:"#f6c177",default:"#e0def4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(25, 23, 36, 0.2)",base:"0 1px 3px 0 rgba(25, 23, 36, 0.3), 0 1px 2px 0 rgba(25, 23, 36, 0.2)",lg:"0 10px 15px -3px rgba(25, 23, 36, 0.3), 0 4px 6px -2px rgba(25, 23, 36, 0.2)"}},q0={name:"kanagawa",colors:{primary:"#8ba4b0",secondary:"#a292a3",accent:"#c47fd5",success:"#76946a",warning:"#c0a36e",error:"#c34043",info:"#7e9cd8",light:"#dcd7ba",dark:"#1f1f28",muted:"#727169",highlight:"#2a2a37",text:{primary:"#dcd7ba",secondary:"#c8c093",muted:"#727169",light:"#ffffff"},background:{primary:"#1f1f28",secondary:"#2a2a37",dark:"#16161d"},border:{light:"#2a2a37",dark:"#000000"},syntax:{comment:"#727169",string:"#98bb6c",number:"#d27e99",keyword:"#957fb8",function:"#7e9cd8",variable:"#dcd7ba",operator:"#c0a36e",type:"#7aa89f",tag:"#c34043",attr:"#7fb4ca",default:"#dcd7ba"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(31, 31, 40, 0.2)",base:"0 1px 3px 0 rgba(31, 31, 40, 0.3), 0 1px 2px 0 rgba(31, 31, 40, 0.2)",lg:"0 10px 15px -3px rgba(31, 31, 40, 0.3), 0 4px 6px -2px rgba(31, 31, 40, 0.2)"}},g=[{id:"ayu-dark",label:"Ayu Dark",theme:G0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:V0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:F0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:U0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:j0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:J0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:H0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:z0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:_0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:W0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:u0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:K0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:q0,tags:["dark","japanese"]}];var c={primary:"#0066cc",secondary:"#6c757d",accent:"#e83e8c",success:"#28a745",warning:"#ffc107",error:"#dc3545",info:"#17a2b8",light:"#f8f9fa",dark:"#343a40",muted:"#6c757d",highlight:"#fff3cd",text:{primary:"#212529",secondary:"#6c757d",muted:"#6c757d",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f8f9fa",dark:"#343a40"},border:{light:"#dee2e6",dark:"#495057"},syntax:{comment:"#6c757d",string:"#28a745",number:"#e83e8c",keyword:"#007bff",function:"#17a2b8",variable:"#495057",operator:"#ffc107",type:"#007bff",tag:"#dc3545",attr:"#ffc107",default:"#212529"}},T={name:"default",colors:c,spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"}},w0={...T,name:"dark",colors:{...c,text:{primary:"#ffffff",secondary:"#e2e8f0",muted:"#94a3b8",light:"#000000"},background:{primary:"#1e293b",secondary:"#334155",dark:"#0f172a"},border:{light:"#475569",dark:"#64748b"},syntax:{comment:"#94a3b8",string:"#34d399",number:"#f472b6",keyword:"#60a5fa",function:"#06b6d4",variable:"#e2e8f0",operator:"#fbbf24",type:"#60a5fa",tag:"#fb7185",attr:"#fbbf24",default:"#ffffff"}}};class i{currentTheme=T;themes=new Map;constructor(){this.themes.set("default",T),this.themes.set("dark",w0);for(let X of g)this.themes.set(X.id,X.theme)}setTheme(X){let Z=this.themes.get(X);if(Z)this.currentTheme=Z;else throw Error(`Theme '${X}' not found`)}getTheme(){return this.currentTheme}getAvailableThemes(){return Array.from(this.themes.keys())}getCurrentThemeName(){return this.currentTheme.name}getThemeByName(X){return this.themes.get(X)}hasTheme(X){return this.themes.has(X)}}var o=new i;var O0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,subagentProgress:null},C=(X)=>({...O0,actions:{setInitializationStatus:(Z)=>{X((Q)=>({app:{...Q.app,initializationStatus:Z}}))},setInitializationError:(Z)=>{X((Q)=>({app:{...Q.app,initializationError:Z}}))},setActiveModal:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:Z}}))},showSessionSelector:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:"sessionSelector",sessionSelectorData:Z}}))},showModelEditWizard:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:"modelEditWizard",modelEditorTarget:Z}}))},closeModal:()=>{X((Z)=>({app:{...Z.app,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null}}))},setTasks:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Z}}))},updateTask:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Q.app.tasks.map((Y)=>Y.id===Z.id?Z:Y)}}))},setAwaitingSecondCtrlC:(Z)=>{X((Q)=>({app:{...Q.app,awaitingSecondCtrlC:Z}}))},setThinkingModeEnabled:(Z)=>{X((Q)=>({app:{...Q.app,thinkingModeEnabled:Z}}))},toggleThinkingMode:()=>{X((Z)=>({app:{...Z.app,thinkingModeEnabled:!Z.app.thinkingModeEnabled}}))},startSubagentProgress:(Z,Q,Y)=>{X(($)=>({app:{...$.app,subagentProgress:{id:Z,type:Q,description:Y,status:"running",startTime:Date.now()}}}))},updateSubagentTool:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,currentTool:Z}}}})},completeSubagentProgress:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,status:Z?"completed":"failed",currentTool:void 0}}}}),setTimeout(()=>{X((Q)=>({app:{...Q.app,subagentProgress:null}}))},1500)}}});var p0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},S=(X,Z)=>({...p0,actions:{setProcessing:(Q)=>{X((Y)=>({command:{...Y.command,isProcessing:Q}}))},createAbortController:()=>{let Q=Z().command.abortController;if(Q&&!Q.signal.aborted)Q.abort("interrupted-by-new-command");let Y=new AbortController;return X(($)=>({command:{...$.command,abortController:Y}})),Y},getAbortController:()=>{return Z().command.abortController},clearAbortController:(Q)=>{let Y=Z().command.abortController;if(Q!==void 0&&Y!==Q)return;X(($)=>({command:{...$.command,abortController:null}}))},abort:(Q)=>{let{abortController:Y}=Z().command;if(Y&&!Y.signal.aborted)Y.abort(Q??"user-cancel");X(($)=>({command:{...$.command,isProcessing:!1,pendingCommands:[]}}))},enqueueCommand:(Q)=>{X((Y)=>({command:{...Y.command,pendingCommands:[...Y.command.pendingCommands,Q]}}))},dequeueCommand:()=>{let{pendingCommands:Q}=Z().command;if(Q.length===0)return;let[Y,...$]=Q;return X((G)=>({command:{...G.command,pendingCommands:$}})),Y},clearQueue:()=>{X((Q)=>({command:{...Q.command,pendingCommands:[]}}))},setRecoveredSteeringCount:(Q)=>{X((Y)=>({command:{...Y.command,recoveredSteeringCount:Math.max(0,Q)}}))}}});var x0={config:null},f=(X)=>({...x0,actions:{setConfig:(Z)=>{X((Q)=>({config:{...Q.config,config:Z}}))},updateConfig:(Z)=>{X((Q)=>{if(!Q.config.config)throw Error(`[ConfigSlice] Config not initialized. Cannot update: ${JSON.stringify(Z)}`);return{config:{...Q.config,config:{...Q.config.config,...Z}}}})}}});var P0={currentFocus:"main-input",previousFocus:null},b=(X)=>({...P0,actions:{setFocus:(Z)=>{X((Q)=>({focus:{...Q.focus,currentFocus:Z,previousFocus:Q.focus.currentFocus}}))},restorePreviousFocus:()=>{X((Z)=>({focus:{...Z.focus,currentFocus:Z.focus.previousFocus||"main-input",previousFocus:null}}))}}});var h={"deepseek-chat":{input:0.27,output:1.1},"deepseek-coder":{input:0.14,output:0.28},"deepseek-reasoner":{input:0.55,output:2.19},"deepseek-v3":{input:0.27,output:1.1},"deepseek-v4":{input:0.27,output:1.1},"deepseek-v4-pro":{input:0.27,output:1.1},"deepseek-v4-0724":{input:0.27,output:1.1},"gpt-4o":{input:2.5,output:10},"gpt-4o-mini":{input:0.15,output:0.6},"gpt-4.1":{input:2,output:8},"gpt-4.1-mini":{input:0.4,output:1.6},"gpt-4.1-nano":{input:0.1,output:0.4},"gpt-4-turbo":{input:10,output:30},"gpt-4":{input:30,output:60},"gpt-3.5-turbo":{input:0.5,output:1.5},o1:{input:15,output:60},"o1-mini":{input:3,output:12},"o1-pro":{input:150,output:600},o3:{input:10,output:40},"o3-mini":{input:1.1,output:4.4},"o4-mini":{input:1.1,output:4.4},"claude-3.5-sonnet":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-3.5-haiku":{input:0.8,output:4,cacheRead:0.08,cacheWrite:1},"claude-sonnet-4":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-4-opus":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"claude-opus-4":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"qwen-plus":{input:0.8,output:2},"qwen-max":{input:2,output:6},"qwen-turbo":{input:0.3,output:0.6},"qwen3-235b":{input:2,output:8},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:0.15,output:0.6}};function v0(X){let Z=X.toLowerCase();if(h[Z])return h[Z];for(let[Q,Y]of Object.entries(h))if(Z.includes(Q)||Q.includes(Z))return Y;return}function l(X,Z,Q,Y,$){let G=v0(X);if(!G)return 0;let j=Z/1e6*G.input+Q/1e6*G.output;if(Y&&G.cacheRead)j+=Y/1e6*G.cacheRead;if($&&G.cacheWrite)j+=$/1e6*G.cacheWrite;return Math.round(j*1e6)/1e6}var U={codeBlock:/^```(\w+)?\s*$/,heading:/^ *(#{1,4}) +(.+)/,blockquote:/^(>+)\s?(.*)/,ulItem:/^([ \t]*)([-*+]) +(.+)/,olItem:/^([ \t]*)(\d+)\. +(.+)/,hr:/^ *([-*_] *){3,} *$/,table:/^\|(.+)\|$/,tableSeparator:/^\|[\s]*:?-+:?[\s]*(\|[\s]*:?-+:?[\s]*)+\|?$/,diffStart:/^<<<DIFF>>>$/,diffEnd:/^<<<\/DIFF>>>$/,commandMessage:/<command-message>(.*?)<\/command-message>/};function r0(X){let Z=[],Q=X.split(/\r?\n/),Y=!1,$=[],G=null,j=0,W=!1,H=[],u=[],q=!1,O=[],x=!1,z=[],F=0,V=!0;for(let p=0;p<Q.length;p++){let _=Q[p];if(q){if(_.match(U.diffEnd)){try{let K=JSON.parse(O.join(`
|
|
1
|
+
import{Ea as Y0,Ga as w}from"./chunk-778h8815.js";import{ub as Q0}from"./chunk-2n8a87ds.js";import{nanoid as L0}from"nanoid";import{devtools as R0,subscribeWithSelector as I0}from"zustand/middleware";import{createStore as N0}from"zustand/vanilla";var G0={name:"ayu-dark",colors:{primary:"#ffcc66",secondary:"#bae67e",accent:"#73d0ff",success:"#bae67e",warning:"#ffcc66",error:"#ff3333",info:"#73d0ff",light:"#f0f0f0",dark:"#000000",muted:"#5c6773",highlight:"#2d323b",text:{primary:"#e6e1cf",secondary:"#bae67e",muted:"#5c6773",light:"#ffffff"},background:{primary:"#0f1419",secondary:"#14191f",dark:"#000000"},border:{light:"#2d323b",dark:"#000000"},syntax:{comment:"#5c6773",string:"#bae67e",number:"#ffcc66",keyword:"#ff8f40",function:"#73d0ff",variable:"#e6e1cf",operator:"#f29e74",type:"#73d0ff",tag:"#ff8f40",attr:"#ffd580",default:"#e6e1cf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.2)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2)"}},V0={name:"dracula",colors:{primary:"#bd93f9",secondary:"#ffb86c",accent:"#ff79c6",success:"#50fa7b",warning:"#f1fa8c",error:"#ff5555",info:"#8be9fd",light:"#f8f8f2",dark:"#282a36",muted:"#6272a4",highlight:"#44475a",text:{primary:"#f8f8f2",secondary:"#f1fa8c",muted:"#6272a4",light:"#ffffff"},background:{primary:"#282a36",secondary:"#44475a",dark:"#21222c"},border:{light:"#44475a",dark:"#000000"},syntax:{comment:"#6272a4",string:"#f1fa8c",number:"#bd93f9",keyword:"#ff79c6",function:"#50fa7b",variable:"#f8f8f2",operator:"#ff79c6",type:"#8be9fd",tag:"#ff79c6",attr:"#50fa7b",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 42, 54, 0.2)",base:"0 1px 3px 0 rgba(40, 42, 54, 0.3), 0 1px 2px 0 rgba(40, 42, 54, 0.2)",lg:"0 10px 15px -3px rgba(40, 42, 54, 0.3), 0 4px 6px -2px rgba(40, 42, 54, 0.2)"}},F0={name:"monokai",colors:{primary:"#66d9ef",secondary:"#a6e22e",accent:"#f92672",success:"#a6e22e",warning:"#e6db74",error:"#f92672",info:"#66d9ef",light:"#f8f8f2",dark:"#272822",muted:"#75715e",highlight:"#3e3d32",text:{primary:"#f8f8f2",secondary:"#e6db74",muted:"#75715e",light:"#ffffff"},background:{primary:"#272822",secondary:"#3e3d32",dark:"#1e1f1c"},border:{light:"#3e3d32",dark:"#000000"},syntax:{comment:"#75715e",string:"#e6db74",number:"#ae81ff",keyword:"#f92672",function:"#a6e22e",variable:"#f8f8f2",operator:"#f92672",type:"#66d9ef",tag:"#f92672",attr:"#a6e22e",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(39, 40, 34, 0.2)",base:"0 1px 3px 0 rgba(39, 40, 34, 0.3), 0 1px 2px 0 rgba(39, 40, 34, 0.2)",lg:"0 10px 15px -3px rgba(39, 40, 34, 0.3), 0 4px 6px -2px rgba(39, 40, 34, 0.2)"}},U0={name:"nord",colors:{primary:"#88c0d0",secondary:"#81a1c1",accent:"#b48ead",success:"#a3be8c",warning:"#ebcb8b",error:"#bf616a",info:"#88c0d0",light:"#eceff4",dark:"#2e3440",muted:"#4c566a",highlight:"#434c5e",text:{primary:"#eceff4",secondary:"#d8dee9",muted:"#4c566a",light:"#ffffff"},background:{primary:"#2e3440",secondary:"#3b4252",dark:"#242933"},border:{light:"#434c5e",dark:"#000000"},syntax:{comment:"#616e88",string:"#a3be8c",number:"#b48ead",keyword:"#81a1c1",function:"#88c0d0",variable:"#d8dee9",operator:"#81a1c1",type:"#8fbcbb",tag:"#81a1c1",attr:"#8fbcbb",default:"#eceff4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(46, 52, 64, 0.2)",base:"0 1px 3px 0 rgba(46, 52, 64, 0.3), 0 1px 2px 0 rgba(46, 52, 64, 0.2)",lg:"0 10px 15px -3px rgba(46, 52, 64, 0.3), 0 4px 6px -2px rgba(46, 52, 64, 0.2)"}},j0={name:"solarized-light",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#cb4b16",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#93a1a1",highlight:"#eee8d5",text:{primary:"#586e75",secondary:"#657b83",muted:"#93a1a1",light:"#002b36"},background:{primary:"#fdf6e3",secondary:"#eee8d5",dark:"#073642"},border:{light:"#eee8d5",dark:"#073642"},syntax:{comment:"#93a1a1",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#657b83",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#657b83"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(253, 246, 227, 0.2)",base:"0 1px 3px 0 rgba(253, 246, 227, 0.3), 0 1px 2px 0 rgba(253, 246, 227, 0.2)",lg:"0 10px 15px -3px rgba(253, 246, 227, 0.3), 0 4px 6px -2px rgba(253, 246, 227, 0.2)"}},J0={name:"solarized-dark",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#586e75",highlight:"#073642",text:{primary:"#839496",secondary:"#93a1a1",muted:"#586e75",light:"#fdf6e3"},background:{primary:"#002b36",secondary:"#073642",dark:"#001f29"},border:{light:"#073642",dark:"#000000"},syntax:{comment:"#586e75",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#839496",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#839496"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 43, 54, 0.2)",base:"0 1px 3px 0 rgba(0, 43, 54, 0.3), 0 1px 2px 0 rgba(0, 43, 54, 0.2)",lg:"0 10px 15px -3px rgba(0, 43, 54, 0.3), 0 4px 6px -2px rgba(0, 43, 54, 0.2)"}},H0={name:"tokyo-night",colors:{primary:"#7aa2f7",secondary:"#7dcfff",accent:"#bb9af7",success:"#9ece6a",warning:"#e0af68",error:"#f7768e",info:"#7aa2f7",light:"#c0caf5",dark:"#1a1b26",muted:"#565f89",highlight:"#292e42",text:{primary:"#a9b1d6",secondary:"#c0caf5",muted:"#565f89",light:"#ffffff"},background:{primary:"#1a1b26",secondary:"#292e42",dark:"#16161e"},border:{light:"#292e42",dark:"#000000"},syntax:{comment:"#565f89",string:"#9ece6a",number:"#ff9e64",keyword:"#bb9af7",function:"#7aa2f7",variable:"#c0caf5",operator:"#89ddff",type:"#7dcfff",tag:"#f7768e",attr:"#7aa2f7",default:"#a9b1d6"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(26, 27, 38, 0.2)",base:"0 1px 3px 0 rgba(26, 27, 38, 0.3), 0 1px 2px 0 rgba(26, 27, 38, 0.2)",lg:"0 10px 15px -3px rgba(26, 27, 38, 0.3), 0 4px 6px -2px rgba(26, 27, 38, 0.2)"}},z0={name:"github",colors:{primary:"#0969da",secondary:"#8250df",accent:"#bc4c00",success:"#1a7f37",warning:"#bc4c00",error:"#d1242f",info:"#0969da",light:"#f6f8fa",dark:"#24292f",muted:"#6e7781",highlight:"#ddf4ff",text:{primary:"#24292f",secondary:"#57606a",muted:"#6e7781",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f6f8fa",dark:"#24292f"},border:{light:"#d0d7de",dark:"#24292f"},syntax:{comment:"#6e7781",string:"#0a3069",number:"#0550ae",keyword:"#cf222e",function:"#8250df",variable:"#24292f",operator:"#cf222e",type:"#0550ae",tag:"#116329",attr:"#0550ae",default:"#24292f"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(255, 255, 255, 0.2)",base:"0 1px 3px 0 rgba(255, 255, 255, 0.3), 0 1px 2px 0 rgba(255, 255, 255, 0.2)",lg:"0 10px 15px -3px rgba(255, 255, 255, 0.3), 0 4px 6px -2px rgba(255, 255, 255, 0.2)"}},_0={name:"gruvbox",colors:{primary:"#83a598",secondary:"#8ec07c",accent:"#d3869b",success:"#b8bb26",warning:"#fabd2f",error:"#fb4934",info:"#83a598",light:"#fbf1c7",dark:"#282828",muted:"#928374",highlight:"#3c3836",text:{primary:"#ebdbb2",secondary:"#d5c4a1",muted:"#928374",light:"#ffffff"},background:{primary:"#282828",secondary:"#3c3836",dark:"#1d2021"},border:{light:"#3c3836",dark:"#000000"},syntax:{comment:"#928374",string:"#b8bb26",number:"#d3869b",keyword:"#fb4934",function:"#8ec07c",variable:"#ebdbb2",operator:"#fe8019",type:"#fabd2f",tag:"#fb4934",attr:"#b8bb26",default:"#ebdbb2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 40, 40, 0.2)",base:"0 1px 3px 0 rgba(40, 40, 40, 0.3), 0 1px 2px 0 rgba(40, 40, 40, 0.2)",lg:"0 10px 15px -3px rgba(40, 40, 40, 0.3), 0 4px 6px -2px rgba(40, 40, 40, 0.2)"}},W0={name:"one-dark",colors:{primary:"#61afef",secondary:"#c678dd",accent:"#e5c07b",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#56b6c2",light:"#abb2bf",dark:"#282c34",muted:"#5c6370",highlight:"#3e4451",text:{primary:"#abb2bf",secondary:"#c6c8d0",muted:"#5c6370",light:"#ffffff"},background:{primary:"#282c34",secondary:"#3e4451",dark:"#21252b"},border:{light:"#3e4451",dark:"#000000"},syntax:{comment:"#5c6370",string:"#98c379",number:"#d19a66",keyword:"#c678dd",function:"#61afef",variable:"#e06c75",operator:"#56b6c2",type:"#e5c07b",tag:"#e06c75",attr:"#d19a66",default:"#abb2bf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 44, 52, 0.2)",base:"0 1px 3px 0 rgba(40, 44, 52, 0.3), 0 1px 2px 0 rgba(40, 44, 52, 0.2)",lg:"0 10px 15px -3px rgba(40, 44, 52, 0.3), 0 4px 6px -2px rgba(40, 44, 52, 0.2)"}},u0={name:"catppuccin",colors:{primary:"#89b4fa",secondary:"#cba6f7",accent:"#f5c2e7",success:"#a6e3a1",warning:"#f9e2af",error:"#f38ba8",info:"#89dceb",light:"#cdd6f4",dark:"#11111b",muted:"#6c7086",highlight:"#181825",text:{primary:"#cdd6f4",secondary:"#bac2de",muted:"#6c7086",light:"#ffffff"},background:{primary:"#1e1e2e",secondary:"#181825",dark:"#11111b"},border:{light:"#181825",dark:"#000000"},syntax:{comment:"#6c7086",string:"#a6e3a1",number:"#fab387",keyword:"#cba6f7",function:"#89b4fa",variable:"#cdd6f4",operator:"#89dceb",type:"#f5c2e7",tag:"#f38ba8",attr:"#89b4fa",default:"#cdd6f4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(30, 30, 46, 0.2)",base:"0 1px 3px 0 rgba(30, 30, 46, 0.3), 0 1px 2px 0 rgba(30, 30, 46, 0.2)",lg:"0 10px 15px -3px rgba(30, 30, 46, 0.3), 0 4px 6px -2px rgba(30, 30, 46, 0.2)"}},K0={name:"rose-pine",colors:{primary:"#9ccfd8",secondary:"#c4a7e7",accent:"#f6c177",success:"#31748f",warning:"#f6c177",error:"#eb6f92",info:"#9ccfd8",light:"#e0def4",dark:"#191724",muted:"#6e6a86",highlight:"#1f1d2e",text:{primary:"#e0def4",secondary:"#cecacd",muted:"#6e6a86",light:"#ffffff"},background:{primary:"#191724",secondary:"#1f1d2e",dark:"#12101a"},border:{light:"#1f1d2e",dark:"#000000"},syntax:{comment:"#6e6a86",string:"#9ccfd8",number:"#ea9a97",keyword:"#c4a7e7",function:"#31748f",variable:"#e0def4",operator:"#f6c177",type:"#9ccfd8",tag:"#eb6f92",attr:"#f6c177",default:"#e0def4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(25, 23, 36, 0.2)",base:"0 1px 3px 0 rgba(25, 23, 36, 0.3), 0 1px 2px 0 rgba(25, 23, 36, 0.2)",lg:"0 10px 15px -3px rgba(25, 23, 36, 0.3), 0 4px 6px -2px rgba(25, 23, 36, 0.2)"}},q0={name:"kanagawa",colors:{primary:"#8ba4b0",secondary:"#a292a3",accent:"#c47fd5",success:"#76946a",warning:"#c0a36e",error:"#c34043",info:"#7e9cd8",light:"#dcd7ba",dark:"#1f1f28",muted:"#727169",highlight:"#2a2a37",text:{primary:"#dcd7ba",secondary:"#c8c093",muted:"#727169",light:"#ffffff"},background:{primary:"#1f1f28",secondary:"#2a2a37",dark:"#16161d"},border:{light:"#2a2a37",dark:"#000000"},syntax:{comment:"#727169",string:"#98bb6c",number:"#d27e99",keyword:"#957fb8",function:"#7e9cd8",variable:"#dcd7ba",operator:"#c0a36e",type:"#7aa89f",tag:"#c34043",attr:"#7fb4ca",default:"#dcd7ba"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(31, 31, 40, 0.2)",base:"0 1px 3px 0 rgba(31, 31, 40, 0.3), 0 1px 2px 0 rgba(31, 31, 40, 0.2)",lg:"0 10px 15px -3px rgba(31, 31, 40, 0.3), 0 4px 6px -2px rgba(31, 31, 40, 0.2)"}},g=[{id:"ayu-dark",label:"Ayu Dark",theme:G0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:V0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:F0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:U0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:j0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:J0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:H0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:z0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:_0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:W0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:u0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:K0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:q0,tags:["dark","japanese"]}];var c={primary:"#0066cc",secondary:"#6c757d",accent:"#e83e8c",success:"#28a745",warning:"#ffc107",error:"#dc3545",info:"#17a2b8",light:"#f8f9fa",dark:"#343a40",muted:"#6c757d",highlight:"#fff3cd",text:{primary:"#212529",secondary:"#6c757d",muted:"#6c757d",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f8f9fa",dark:"#343a40"},border:{light:"#dee2e6",dark:"#495057"},syntax:{comment:"#6c757d",string:"#28a745",number:"#e83e8c",keyword:"#007bff",function:"#17a2b8",variable:"#495057",operator:"#ffc107",type:"#007bff",tag:"#dc3545",attr:"#ffc107",default:"#212529"}},T={name:"default",colors:c,spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"}},w0={...T,name:"dark",colors:{...c,text:{primary:"#ffffff",secondary:"#e2e8f0",muted:"#94a3b8",light:"#000000"},background:{primary:"#1e293b",secondary:"#334155",dark:"#0f172a"},border:{light:"#475569",dark:"#64748b"},syntax:{comment:"#94a3b8",string:"#34d399",number:"#f472b6",keyword:"#60a5fa",function:"#06b6d4",variable:"#e2e8f0",operator:"#fbbf24",type:"#60a5fa",tag:"#fb7185",attr:"#fbbf24",default:"#ffffff"}}};class i{currentTheme=T;themes=new Map;constructor(){this.themes.set("default",T),this.themes.set("dark",w0);for(let X of g)this.themes.set(X.id,X.theme)}setTheme(X){let Z=this.themes.get(X);if(Z)this.currentTheme=Z;else throw Error(`Theme '${X}' not found`)}getTheme(){return this.currentTheme}getAvailableThemes(){return Array.from(this.themes.keys())}getCurrentThemeName(){return this.currentTheme.name}getThemeByName(X){return this.themes.get(X)}hasTheme(X){return this.themes.has(X)}}var o=new i;var O0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,subagentProgress:null},C=(X)=>({...O0,actions:{setInitializationStatus:(Z)=>{X((Q)=>({app:{...Q.app,initializationStatus:Z}}))},setInitializationError:(Z)=>{X((Q)=>({app:{...Q.app,initializationError:Z}}))},setActiveModal:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:Z}}))},showSessionSelector:(Z,Q="resume")=>{X((Y)=>({app:{...Y.app,activeModal:"sessionSelector",sessionSelectorData:{intent:Q,sessions:Z}}}))},showModelEditWizard:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:"modelEditWizard",modelEditorTarget:Z}}))},closeModal:()=>{X((Z)=>({app:{...Z.app,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null}}))},setTasks:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Z}}))},updateTask:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Q.app.tasks.map((Y)=>Y.id===Z.id?Z:Y)}}))},setAwaitingSecondCtrlC:(Z)=>{X((Q)=>({app:{...Q.app,awaitingSecondCtrlC:Z}}))},setThinkingModeEnabled:(Z)=>{X((Q)=>({app:{...Q.app,thinkingModeEnabled:Z}}))},toggleThinkingMode:()=>{X((Z)=>({app:{...Z.app,thinkingModeEnabled:!Z.app.thinkingModeEnabled}}))},startSubagentProgress:(Z,Q,Y)=>{X(($)=>({app:{...$.app,subagentProgress:{id:Z,type:Q,description:Y,status:"running",startTime:Date.now()}}}))},updateSubagentTool:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,currentTool:Z}}}})},completeSubagentProgress:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,status:Z?"completed":"failed",currentTool:void 0}}}}),setTimeout(()=>{X((Q)=>({app:{...Q.app,subagentProgress:null}}))},1500)}}});var p0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},S=(X,Z)=>({...p0,actions:{setProcessing:(Q)=>{X((Y)=>({command:{...Y.command,isProcessing:Q}}))},createAbortController:()=>{let Q=Z().command.abortController;if(Q&&!Q.signal.aborted)Q.abort("interrupted-by-new-command");let Y=new AbortController;return X(($)=>({command:{...$.command,abortController:Y}})),Y},getAbortController:()=>{return Z().command.abortController},clearAbortController:(Q)=>{let Y=Z().command.abortController;if(Q!==void 0&&Y!==Q)return;X(($)=>({command:{...$.command,abortController:null}}))},abort:(Q)=>{let{abortController:Y}=Z().command;if(Y&&!Y.signal.aborted)Y.abort(Q??"user-cancel");X(($)=>({command:{...$.command,isProcessing:!1,pendingCommands:[]}}))},enqueueCommand:(Q)=>{X((Y)=>({command:{...Y.command,pendingCommands:[...Y.command.pendingCommands,Q]}}))},dequeueCommand:()=>{let{pendingCommands:Q}=Z().command;if(Q.length===0)return;let[Y,...$]=Q;return X((G)=>({command:{...G.command,pendingCommands:$}})),Y},clearQueue:()=>{X((Q)=>({command:{...Q.command,pendingCommands:[]}}))},setRecoveredSteeringCount:(Q)=>{X((Y)=>({command:{...Y.command,recoveredSteeringCount:Math.max(0,Q)}}))}}});var x0={config:null},f=(X)=>({...x0,actions:{setConfig:(Z)=>{X((Q)=>({config:{...Q.config,config:Z}}))},updateConfig:(Z)=>{X((Q)=>{if(!Q.config.config)throw Error(`[ConfigSlice] Config not initialized. Cannot update: ${JSON.stringify(Z)}`);return{config:{...Q.config,config:{...Q.config.config,...Z}}}})}}});var P0={currentFocus:"main-input",previousFocus:null},b=(X)=>({...P0,actions:{setFocus:(Z)=>{X((Q)=>({focus:{...Q.focus,currentFocus:Z,previousFocus:Q.focus.currentFocus}}))},restorePreviousFocus:()=>{X((Z)=>({focus:{...Z.focus,currentFocus:Z.focus.previousFocus||"main-input",previousFocus:null}}))}}});var h={"deepseek-chat":{input:0.27,output:1.1},"deepseek-coder":{input:0.14,output:0.28},"deepseek-reasoner":{input:0.55,output:2.19},"deepseek-v3":{input:0.27,output:1.1},"deepseek-v4":{input:0.27,output:1.1},"deepseek-v4-pro":{input:0.27,output:1.1},"deepseek-v4-0724":{input:0.27,output:1.1},"gpt-4o":{input:2.5,output:10},"gpt-4o-mini":{input:0.15,output:0.6},"gpt-4.1":{input:2,output:8},"gpt-4.1-mini":{input:0.4,output:1.6},"gpt-4.1-nano":{input:0.1,output:0.4},"gpt-4-turbo":{input:10,output:30},"gpt-4":{input:30,output:60},"gpt-3.5-turbo":{input:0.5,output:1.5},o1:{input:15,output:60},"o1-mini":{input:3,output:12},"o1-pro":{input:150,output:600},o3:{input:10,output:40},"o3-mini":{input:1.1,output:4.4},"o4-mini":{input:1.1,output:4.4},"claude-3.5-sonnet":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-3.5-haiku":{input:0.8,output:4,cacheRead:0.08,cacheWrite:1},"claude-sonnet-4":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-4-opus":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"claude-opus-4":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"qwen-plus":{input:0.8,output:2},"qwen-max":{input:2,output:6},"qwen-turbo":{input:0.3,output:0.6},"qwen3-235b":{input:2,output:8},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:0.15,output:0.6}};function v0(X){let Z=X.toLowerCase();if(h[Z])return h[Z];for(let[Q,Y]of Object.entries(h))if(Z.includes(Q)||Q.includes(Z))return Y;return}function l(X,Z,Q,Y,$){let G=v0(X);if(!G)return 0;let j=Z/1e6*G.input+Q/1e6*G.output;if(Y&&G.cacheRead)j+=Y/1e6*G.cacheRead;if($&&G.cacheWrite)j+=$/1e6*G.cacheWrite;return Math.round(j*1e6)/1e6}var U={codeBlock:/^```(\w+)?\s*$/,heading:/^ *(#{1,4}) +(.+)/,blockquote:/^(>+)\s?(.*)/,ulItem:/^([ \t]*)([-*+]) +(.+)/,olItem:/^([ \t]*)(\d+)\. +(.+)/,hr:/^ *([-*_] *){3,} *$/,table:/^\|(.+)\|$/,tableSeparator:/^\|[\s]*:?-+:?[\s]*(\|[\s]*:?-+:?[\s]*)+\|?$/,diffStart:/^<<<DIFF>>>$/,diffEnd:/^<<<\/DIFF>>>$/,commandMessage:/<command-message>(.*?)<\/command-message>/};function r0(X){let Z=[],Q=X.split(/\r?\n/),Y=!1,$=[],G=null,j=0,W=!1,H=[],u=[],q=!1,O=[],x=!1,z=[],F=0,V=!0;for(let p=0;p<Q.length;p++){let _=Q[p];if(q){if(_.match(U.diffEnd)){try{let K=JSON.parse(O.join(`
|
|
2
2
|
`));Z.push({type:"diff",content:"",diffData:{patch:K.patch,startLine:K.startLine,matchLine:K.matchLine}})}catch(K){Z.push({type:"text",content:O.join(`
|
|
3
3
|
`)})}q=!1,O=[],V=!1;continue}O.push(_);continue}if(_.match(U.diffStart)){q=!0,O=[],V=!1;continue}if(Y){let K=_.match(U.codeBlock),P=_.trim()==="```";if(K&&K[1])j++,$.push(_);else if(P)if(j>0)j--,$.push(_);else{let $0=$.join(`
|
|
4
4
|
`);Z.push({type:"code",content:$0,language:G||void 0}),Y=!1,$=[],G=null,j=0,V=!1}else $.push(_);continue}let r=_.match(U.codeBlock);if(r){Y=!0,G=r[1]||null,j=0,V=!1;continue}let E=_.match(U.table),Z0=_.match(U.tableSeparator);if(E&&!W){if(p+1<Q.length){if(Q[p+1].match(U.tableSeparator)){W=!0,H=E[1].split("|").map((P)=>P.trim()).filter((P)=>P.length>0),u=[],V=!1;continue}}}if(W&&Z0)continue;if(W&&E){let K=E[1].split("|").map((P)=>P.trim()).filter((P)=>P.length>0);while(K.length<H.length)K.push("");if(K.length>H.length)K.length=H.length;u.push(K);continue}if(W&&!E){if(H.length>0&&u.length>0)Z.push({type:"table",content:"",tableData:{headers:H,rows:u}});W=!1,H=[],u=[]}let N=_.match(U.blockquote);if(N){let K=N[1].length,P=N[2]||"";if(x&&K===F)z.push(P);else{if(x)Z.push({type:"blockquote",content:z.join(`
|
|
@@ -12,7 +12,7 @@ import{Ba as Y0,Da as w}from"./chunk-ebynn53v.js";import{qb as Q0}from"./chunk-r
|
|
|
12
12
|
`)})}Y.inDiff=!1,Y.diffContent=[],Y.lastLineEmpty=!1;return}Y.diffContent.push(X);return}if(X.match(U.diffStart)){Y.inDiff=!0,Y.diffContent=[],Y.lastLineEmpty=!1;return}if(Y.inCodeBlock){let F=X.match(U.codeBlock),V=X.trim()==="```";if(F&&F[1])Y.codeBlockDepth++,Y.codeBlockContent.push(X);else if(V)if(Y.codeBlockDepth>0)Y.codeBlockDepth--,Y.codeBlockContent.push(X);else s(Y,$);else Y.codeBlockContent.push(X);return}let G=X.match(U.codeBlock);if(G){Y.inCodeBlock=!0,Y.codeBlockLang=G[1]||null,Y.codeBlockDepth=0,Y.lastLineEmpty=!1;return}let j=X.match(U.table),W=X.match(U.tableSeparator);if(j&&!Y.inTable){Y.pendingTableHeader=X;return}if(Y.inTable&&W)return;if(Y.inTable&&j){let F=j[1].split("|").map((V)=>V.trim()).filter((V)=>V.length>0);while(F.length<Y.tableHeaders.length)F.push("");if(F.length>Y.tableHeaders.length)F.length=Y.tableHeaders.length;Y.tableRows.push(F);return}if(Y.inTable&&!j){if(a(Y,$),Q){k(X,Z,!1);return}}let H=X.match(U.blockquote);if(H){let F=H[1].length,V=H[2]||"";if(Y.inBlockquote&&F===Y.blockquoteLevel)Y.blockquoteLines.push(V);else{if(Y.inBlockquote)M(Y,$);Y.inBlockquote=!0,Y.blockquoteLevel=F,Y.blockquoteLines=[V]}Y.lastLineEmpty=!1;return}if(Y.inBlockquote)M(Y,$);let u=X.match(U.heading);if(u){$.push({type:"heading",content:u[2],level:u[1].length}),Y.lastLineEmpty=!1;return}let q=X.match(U.ulItem);if(q){$.push({type:"list",content:q[3],listType:"ul",marker:q[2],indentation:q[1].length}),Y.lastLineEmpty=!1;return}let O=X.match(U.olItem);if(O){$.push({type:"list",content:O[3],listType:"ol",marker:O[2],indentation:O[1].length}),Y.lastLineEmpty=!1;return}if(X.match(U.hr)){$.push({type:"hr",content:""}),Y.lastLineEmpty=!1;return}if(X.trim().length===0){if(!Y.lastLineEmpty)$.push({type:"empty",content:""}),Y.lastLineEmpty=!0;return}let z=X.match(U.commandMessage);if(z){$.push({type:"command-message",content:z[1]}),Y.lastLineEmpty=!1;return}$.push({type:"text",content:X}),Y.lastLineEmpty=!1}function c0(X,Z){if(!X||!Z)return;let Q=B0(X);if(Q.finalized)return;let Y=Q.pendingLine+Z,$=Y.split(`
|
|
13
13
|
`),G=Y.endsWith(`
|
|
14
14
|
`),j=G?$:$.slice(0,-1);Q.pendingLine=G?"":$[$.length-1]??"";for(let W of j)k(n(W),Q)}function i0(X){let Z=D.get(X);if(!Z||Z.finalized)return;if(Z.pendingLine)k(n(Z.pendingLine),Z),Z.pendingLine="";if(Z.state.pendingTableHeader!==null)Z.blocks.push({type:"text",content:Z.state.pendingTableHeader}),Z.state.pendingTableHeader=null;if(Z.state.inCodeBlock)s(Z.state,Z.blocks);if(Z.state.inTable)a(Z.state,Z.blocks);if(Z.state.inBlockquote)M(Z.state,Z.blocks);if(Z.state.inDiff)Z.blocks.push({type:"text",content:Z.state.diffContent.join(`
|
|
15
|
-
`)}),Z.state.inDiff=!1,Z.state.diffContent=[];while(Z.blocks.length>0&&Z.blocks[Z.blocks.length-1].type==="empty")Z.blocks.pop();Z.finalized=!0}function o0(X){let Z=D.get(X);if(!Z||!Z.finalized)return null;return Z.blocks}function l0(X){let Z=D.get(X);if(!Z)return null;return Z.blocks}function E0(X){let Z=D.get(X);if(!Z)return null;let Q=[],Y=Z.state;if(Y.inDiff)Q.push("<<<DIFF>>>"),Q.push(...Y.diffContent);else if(Y.inCodeBlock){let $=Y.codeBlockLang?`\`\`\`${Y.codeBlockLang}`:"```";Q.push($),Q.push(...Y.codeBlockContent)}else if(Y.inTable){if(Y.tableHeaders.length>0){Q.push(`| ${Y.tableHeaders.join(" | ")} |`),Q.push(`| ${Y.tableHeaders.map(()=>"---").join(" | ")} |`);for(let $ of Y.tableRows)Q.push(`| ${$.join(" | ")} |`)}}else if(Y.inBlockquote){let $=">".repeat(Y.blockquoteLevel)+" ";for(let G of Y.blockquoteLines)Q.push($+G)}else if(Y.pendingTableHeader)Q.push(Y.pendingTableHeader);if(Z.pendingLine)Q.push(Z.pendingLine);return Q.length>0?Q:null}function n0(X){let Z=D.get(X);if(!Z)return null;let Q="text";if(Z.state.inDiff)Q="diff";else if(Z.state.inCodeBlock)Q="code";else if(Z.state.inTable||Z.state.pendingTableHeader)Q="table";let Y=E0(X);if(!Y||Y.length===0)return null;return{lines:Y,mode:Q}}function a0(X){D.delete(X)}function I(){D.clear()}var t=2000,A=[];function A0(){let X=A;return A=[],X}var X0={inputTokens:0,outputTokens:0,totalTokens:0,maxContextTokens:200000,totalInputTokens:0,totalOutputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,turnCount:0,estimatedCostUsd:0},e={sessionId:Q0("tui"),messages:[],restoredContextMessages:null,restoredVisibleMessageCount:0,isCompacting:!1,currentCommand:null,error:null,isActive:!0,tokenUsage:{...X0},currentThinkingContent:null,thinkingExpanded:!1,clearCount:0,historyExpanded:!1,expandedMessageCount:100,currentStreamingMessageId:null,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,finalizingStreamingMessageId:null},m=(X,Z)=>({...e,actions:{addMessage:(Q)=>{X((Y)=>({session:{...Y.session,messages:[...Y.session.messages,Q],error:null}}))},addUserMessage:(Q)=>{let Y={id:`user-${Date.now()}-${Math.random()}`,role:"user",content:Q,timestamp:Date.now()};Z().session.actions.addMessage(Y)},addAssistantMessage:(Q,Y)=>{let $={id:`assistant-${Date.now()}-${Math.random()}`,role:"assistant",content:Q,timestamp:Date.now(),thinkingContent:Y};Z().session.actions.addMessage($)},addAssistantMessageAndClearThinking:(Q)=>{let Y=Z().session.currentThinkingContent,$={id:`assistant-${Date.now()}-${Math.random()}`,role:"assistant",content:Q,timestamp:Date.now(),thinkingContent:Y||void 0};X((G)=>({session:{...G.session,messages:[...G.session.messages,$],currentThinkingContent:null,error:null}}))},addToolMessage:(Q,Y)=>{let $={id:`tool-${Date.now()}-${Math.random()}`,role:"tool",content:Q,timestamp:Date.now(),metadata:Y};Z().session.actions.addMessage($)},setCompacting:(Q)=>{X((Y)=>({session:{...Y.session,isCompacting:Q}}))},setCommand:(Q)=>{X((Y)=>({session:{...Y.session,currentCommand:Q}}))},setError:(Q)=>{X((Y)=>({session:{...Y.session,error:Q}}))},clearMessages:()=>{I(),X((Q)=>({session:{...Q.session,messages:[],restoredContextMessages:null,restoredVisibleMessageCount:0,error:null,clearCount:Q.session.clearCount+1}}))},resetSession:()=>{I(),X((Q)=>({session:{...Q.session,...e,sessionId:Q.session.sessionId,isActive:!0}}))},restoreSession:(Q,Y,$)=>{I(),X((G)=>({session:{...G.session,sessionId:Q,messages:Y,restoredContextMessages:$??null,restoredVisibleMessageCount:$?Y.length:0,error:null,isActive:!0}}))},updateTokenUsage:(Q)=>{X((Y)=>{let $=Y.session.tokenUsage,G=(Q.inputTokens??0)-(Q.inputTokens!==void 0?$.inputTokens:0),j=(Q.outputTokens??0)-(Q.outputTokens!==void 0?$.outputTokens:0),W=$.totalInputTokens+Math.max(0,G),H=$.totalOutputTokens+Math.max(0,j),u=$.cacheReadTokens+(Q.cacheReadTokens??0),q=$.cacheWriteTokens+(Q.cacheWriteTokens??0),O=Y.config?.config,z=O?.models?.find((V)=>V.id===O.currentModelId)?.model??"",F=l(z,W,H,u,q);return{session:{...Y.session,tokenUsage:{...$,...Q,totalInputTokens:W,totalOutputTokens:H,cacheReadTokens:u,cacheWriteTokens:q,estimatedCostUsd:F}}}})},resetTokenUsage:()=>{X((Q)=>({session:{...Q.session,tokenUsage:{...X0}}}))},setCurrentThinkingContent:(Q)=>{if(Z().session.currentThinkingContent===Q)return;X((Y)=>({session:{...Y.session,currentThinkingContent:Q}}))},appendThinkingContent:(Q)=>{X((Y)=>({session:{...Y.session,currentThinkingContent:(Y.session.currentThinkingContent||"")+Q}}))},setThinkingExpanded:(Q)=>{X((Y)=>({session:{...Y.session,thinkingExpanded:Q}}))},toggleThinkingExpanded:()=>{X((Q)=>({session:{...Q.session,thinkingExpanded:!Q.session.thinkingExpanded}}))},setHistoryExpanded:(Q)=>{X((Y)=>({session:{...Y.session,historyExpanded:Q}}))},toggleHistoryExpanded:()=>{X((Q)=>({session:{...Q.session,historyExpanded:!Q.session.historyExpanded}}))},setExpandedMessageCount:(Q)=>{X((Y)=>({session:{...Y.session,expandedMessageCount:Q}}))},incrementClearCount:()=>{X((Q)=>({session:{...Q.session,clearCount:Q.session.clearCount+1}}))},startStreamingAssistantMessage:()=>{let Q=`assistant-${Date.now()}-${Math.random()}`,Y={id:Q,role:"assistant",content:"",timestamp:Date.now()};return A=[],X(($)=>({session:{...$.session,messages:[...$.session.messages,Y],currentStreamingMessageId:Q,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,error:null}})),Q},appendAssistantContent:(Q)=>{let Y=Z().session.currentStreamingMessageId,$=Y??`assistant-${Date.now()}-${Math.random()}`;return A.push(Q),X((G)=>{let j=(p)=>p.endsWith("\r")?p.slice(0,-1):p,W=Y?G.session.currentStreamingLines:[],H=Y?G.session.currentStreamingTail:"",u=Y?G.session.currentStreamingLineCount:0,q=Y?G.session.currentStreamingVersion:0,x=(H+Q).split(`
|
|
15
|
+
`)}),Z.state.inDiff=!1,Z.state.diffContent=[];while(Z.blocks.length>0&&Z.blocks[Z.blocks.length-1].type==="empty")Z.blocks.pop();Z.finalized=!0}function o0(X){let Z=D.get(X);if(!Z||!Z.finalized)return null;return Z.blocks}function l0(X){let Z=D.get(X);if(!Z)return null;return Z.blocks}function E0(X){let Z=D.get(X);if(!Z)return null;let Q=[],Y=Z.state;if(Y.inDiff)Q.push("<<<DIFF>>>"),Q.push(...Y.diffContent);else if(Y.inCodeBlock){let $=Y.codeBlockLang?`\`\`\`${Y.codeBlockLang}`:"```";Q.push($),Q.push(...Y.codeBlockContent)}else if(Y.inTable){if(Y.tableHeaders.length>0){Q.push(`| ${Y.tableHeaders.join(" | ")} |`),Q.push(`| ${Y.tableHeaders.map(()=>"---").join(" | ")} |`);for(let $ of Y.tableRows)Q.push(`| ${$.join(" | ")} |`)}}else if(Y.inBlockquote){let $=">".repeat(Y.blockquoteLevel)+" ";for(let G of Y.blockquoteLines)Q.push($+G)}else if(Y.pendingTableHeader)Q.push(Y.pendingTableHeader);if(Z.pendingLine)Q.push(Z.pendingLine);return Q.length>0?Q:null}function n0(X){let Z=D.get(X);if(!Z)return null;let Q="text";if(Z.state.inDiff)Q="diff";else if(Z.state.inCodeBlock)Q="code";else if(Z.state.inTable||Z.state.pendingTableHeader)Q="table";let Y=E0(X);if(!Y||Y.length===0)return null;return{lines:Y,mode:Q}}function a0(X){D.delete(X)}function I(){D.clear()}var t=2000,A=[];function A0(){let X=A;return A=[],X}var X0={inputTokens:0,outputTokens:0,totalTokens:0,maxContextTokens:200000,totalInputTokens:0,totalOutputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,turnCount:0,estimatedCostUsd:0},e={sessionId:Q0("tui"),messages:[],restoredContextMessages:null,restoredVisibleMessageCount:0,isCompacting:!1,currentCommand:null,error:null,isActive:!0,tokenUsage:{...X0},currentThinkingContent:null,thinkingExpanded:!1,clearCount:0,historyExpanded:!1,expandedMessageCount:100,currentStreamingMessageId:null,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,finalizingStreamingMessageId:null},m=(X,Z)=>({...e,actions:{addMessage:(Q)=>{X((Y)=>({session:{...Y.session,messages:[...Y.session.messages,Q],error:null}}))},addUserMessage:(Q)=>{let Y={id:`user-${Date.now()}-${Math.random()}`,role:"user",content:Q,timestamp:Date.now()};Z().session.actions.addMessage(Y)},addAssistantMessage:(Q,Y)=>{let $={id:`assistant-${Date.now()}-${Math.random()}`,role:"assistant",content:Q,timestamp:Date.now(),thinkingContent:Y};Z().session.actions.addMessage($)},addAssistantMessageAndClearThinking:(Q)=>{let Y=Z().session.currentThinkingContent,$={id:`assistant-${Date.now()}-${Math.random()}`,role:"assistant",content:Q,timestamp:Date.now(),thinkingContent:Y||void 0};X((G)=>({session:{...G.session,messages:[...G.session.messages,$],currentThinkingContent:null,error:null}}))},addToolMessage:(Q,Y)=>{let $={id:`tool-${Date.now()}-${Math.random()}`,role:"tool",content:Q,timestamp:Date.now(),metadata:Y};Z().session.actions.addMessage($)},setCompacting:(Q)=>{X((Y)=>({session:{...Y.session,isCompacting:Q}}))},setCommand:(Q)=>{X((Y)=>({session:{...Y.session,currentCommand:Q}}))},setError:(Q)=>{X((Y)=>({session:{...Y.session,error:Q}}))},clearMessages:()=>{I(),X((Q)=>({session:{...Q.session,messages:[],restoredContextMessages:null,restoredVisibleMessageCount:0,error:null,clearCount:Q.session.clearCount+1}}))},setCompactedContext:(Q)=>{X((Y)=>({session:{...Y.session,restoredContextMessages:[...Q],restoredVisibleMessageCount:Y.session.messages.length}}))},resetSession:()=>{I(),X((Q)=>({session:{...Q.session,...e,sessionId:Q.session.sessionId,isActive:!0}}))},restoreSession:(Q,Y,$)=>{I(),X((G)=>({session:{...G.session,sessionId:Q,messages:Y,restoredContextMessages:$??null,restoredVisibleMessageCount:$?Y.length:0,error:null,isActive:!0}}))},updateTokenUsage:(Q)=>{X((Y)=>{let $=Y.session.tokenUsage,G=(Q.inputTokens??0)-(Q.inputTokens!==void 0?$.inputTokens:0),j=(Q.outputTokens??0)-(Q.outputTokens!==void 0?$.outputTokens:0),W=$.totalInputTokens+Math.max(0,G),H=$.totalOutputTokens+Math.max(0,j),u=$.cacheReadTokens+(Q.cacheReadTokens??0),q=$.cacheWriteTokens+(Q.cacheWriteTokens??0),O=Y.config?.config,z=O?.models?.find((V)=>V.id===O.currentModelId)?.model??"",F=l(z,W,H,u,q);return{session:{...Y.session,tokenUsage:{...$,...Q,totalInputTokens:W,totalOutputTokens:H,cacheReadTokens:u,cacheWriteTokens:q,estimatedCostUsd:F}}}})},resetTokenUsage:()=>{X((Q)=>({session:{...Q.session,tokenUsage:{...X0}}}))},setCurrentThinkingContent:(Q)=>{if(Z().session.currentThinkingContent===Q)return;X((Y)=>({session:{...Y.session,currentThinkingContent:Q}}))},appendThinkingContent:(Q)=>{X((Y)=>({session:{...Y.session,currentThinkingContent:(Y.session.currentThinkingContent||"")+Q}}))},setThinkingExpanded:(Q)=>{X((Y)=>({session:{...Y.session,thinkingExpanded:Q}}))},toggleThinkingExpanded:()=>{X((Q)=>({session:{...Q.session,thinkingExpanded:!Q.session.thinkingExpanded}}))},setHistoryExpanded:(Q)=>{X((Y)=>({session:{...Y.session,historyExpanded:Q}}))},toggleHistoryExpanded:()=>{X((Q)=>({session:{...Q.session,historyExpanded:!Q.session.historyExpanded}}))},setExpandedMessageCount:(Q)=>{X((Y)=>({session:{...Y.session,expandedMessageCount:Q}}))},incrementClearCount:()=>{X((Q)=>({session:{...Q.session,clearCount:Q.session.clearCount+1}}))},startStreamingAssistantMessage:()=>{let Q=`assistant-${Date.now()}-${Math.random()}`,Y={id:Q,role:"assistant",content:"",timestamp:Date.now()};return A=[],X(($)=>({session:{...$.session,messages:[...$.session.messages,Y],currentStreamingMessageId:Q,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,error:null}})),Q},appendAssistantContent:(Q)=>{let Y=Z().session.currentStreamingMessageId,$=Y??`assistant-${Date.now()}-${Math.random()}`;return A.push(Q),X((G)=>{let j=(p)=>p.endsWith("\r")?p.slice(0,-1):p,W=Y?G.session.currentStreamingLines:[],H=Y?G.session.currentStreamingTail:"",u=Y?G.session.currentStreamingLineCount:0,q=Y?G.session.currentStreamingVersion:0,x=(H+Q).split(`
|
|
16
16
|
`),z=x.slice(0,-1).map(j),F=j(x[x.length-1]??""),V=W;if(z.length>0){if(V=[...W,...z],V.length>t){let p=V.length-t;V=V.slice(p)}}return{session:{...G.session,currentStreamingMessageId:$,currentStreamingLines:V,currentStreamingTail:F,currentStreamingLineCount:u+z.length,currentStreamingVersion:q+1,error:null}}}),$},finalizeStreamingMessage:(Q,Y)=>{let $=A0();X((G)=>{let j=G.session.currentStreamingMessageId,H=$.join("")+(Q||""),u=(G.session.currentThinkingContent||"")+(Y||"");if(H.length>0){let q={id:j||`assistant-${Date.now()}-${Math.random()}`,role:"assistant",content:H,timestamp:Date.now(),thinkingContent:u||void 0};return{session:{...G.session,messages:[...G.session.messages,q],currentStreamingMessageId:null,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,currentThinkingContent:null,finalizingStreamingMessageId:q.id}}}return{session:{...G.session,currentStreamingMessageId:null,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,currentThinkingContent:null,finalizingStreamingMessageId:null}}})},clearFinalizingStreamingMessageId:()=>{X((Q)=>({session:{...Q.session,finalizingStreamingMessageId:null}}))},discardStreamingMessage:()=>{A=[],X((Q)=>({session:{...Q.session,currentStreamingMessageId:null,currentStreamingChunks:[],currentStreamingLines:[],currentStreamingTail:"",currentStreamingLineCount:0,currentStreamingVersion:0,finalizingStreamingMessageId:null}}))}}});var y0=N0()(R0(I0((...X)=>({session:m(...X),app:C(...X),config:f(...X),focus:b(...X),command:S(...X)})),{name:"BladeStore",enabled:!0})),J=()=>y0.getState(),W1=()=>J().session.actions,u1=()=>J().app.actions,K1=()=>J().session.messages,v=()=>J().config.config,B=null;async function q1(){if(v()!==null)return;if(B)return B;return B=(async()=>{try{let Q=await Y0.getInstance().initialize();J().config.actions.setConfig(Q)}catch(Z){throw B=null,Error(`[FAIL] Store 未初始化且无法自动初始化
|
|
17
17
|
|
|
18
18
|
`+`原因: ${Z instanceof Error?Z.message:"未知错误"}
|
|
@@ -21,4 +21,4 @@ import{Ba as Y0,Da as w}from"./chunk-ebynn53v.js";import{qb as Q0}from"./chunk-r
|
|
|
21
21
|
`+`1. 配置文件格式正确 (~/.blade/config.json)
|
|
22
22
|
`+`2. 运行 blade 进行首次配置
|
|
23
23
|
`+"3. 配置文件权限正确")}finally{B=null}})(),B}var w1=()=>J().config.config?.models??[],O1=()=>{let X=v();if(!X)return;let Z=X.currentModelId;return X.models.find((Y)=>Y.id===Z)??X.models[0]},p1=(X)=>{let Z=v();if(!Z)return;return Z.models.find((Q)=>Q.id===X)},x1=()=>J().config.config?.mcpServers??{},P1=()=>J().app.thinkingModeEnabled,v1=()=>({setPermissionMode:async(X)=>{J().config.actions.updateConfig({permissionMode:X})},setTheme:async(X,Z={})=>{try{o.setTheme(X)}catch{return}J().config.actions.updateConfig({theme:X}),await w().save({theme:X},{scope:"global",...Z})},setLanguage:async(X,Z={})=>{J().config.actions.updateConfig({language:X}),await w().save({language:X},{scope:"global",...Z})},setDebug:async(X,Z={})=>{J().config.actions.updateConfig({debug:X}),await w().save({debug:X},{scope:"global",...Z})},setTemperature:async(X,Z={})=>{J().config.actions.updateConfig({temperature:X}),await w().save({temperature:X},{scope:"global",...Z})},updateConfig:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y={...Q};J().config.actions.updateConfig(X);try{await w().save(X,Z)}catch($){throw J().config.actions.setConfig(Y),$}},flush:async()=>{await w().flush()},appendPermissionAllowRule:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y=Q.permissions?.allow||[];if(!Y.includes(X)){let $=[...Y,X];J().config.actions.updateConfig({permissions:{...Q.permissions,allow:$}})}await w().appendPermissionRule(X,Z)},appendLocalPermissionAllowRule:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y=Q.permissions?.allow||[];if(!Y.includes(X)){let $=[...Y,X];J().config.actions.updateConfig({permissions:{...Q.permissions,allow:$}})}await w().appendLocalPermissionRule(X,Z)},setCurrentModel:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");if(!Q.models.find(($)=>$.id===X))throw Error(`Model not found: ${X}`);J().config.actions.updateConfig({currentModelId:X}),await w().save({currentModelId:X},{scope:"global",...Z})},addModel:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y="id"in X?X:{id:L0(),...X},G={models:[...Q.models,Y]};if(Q.models.length===0)G.currentModelId=Y.id;return J().config.actions.updateConfig(G),await w().save(G,{scope:"global",...Z}),Y},updateModel:async(X,Z,Q={})=>{let Y=v();if(!Y)throw Error("Config not initialized");let $=Y.models.findIndex((j)=>j.id===X);if($===-1)throw Error(`Model not found: ${X}`);let G=[...Y.models];G[$]={...G[$],...Z},J().config.actions.updateConfig({models:G}),await w().save({models:G},{scope:"global",...Q})},removeModel:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");if(Q.models.length===1)throw Error("Cannot remove the only model");let Y=Q.models.filter((G)=>G.id!==X),$={models:Y};if(Q.currentModelId===X)$.currentModelId=Y[0].id;J().config.actions.updateConfig($),await w().save($,{scope:"global",...Z})},addMcpServer:async(X,Z,Q={})=>{let Y=v();if(!Y)throw Error("Config not initialized");let G={...Y.mcpServers??{},[X]:Z};J().config.actions.updateConfig({mcpServers:G}),await w().save({mcpServers:G},{scope:"project",...Q})},removeMcpServer:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let $={...Q.mcpServers??{}};delete $[X],J().config.actions.updateConfig({mcpServers:$}),await w().save({mcpServers:$},{scope:"project",...Z})}});
|
|
24
|
-
export{g as
|
|
24
|
+
export{g as ga,o as ha,U as ia,r0 as ja,c0 as ka,i0 as la,o0 as ma,l0 as na,n0 as oa,a0 as pa,y0 as qa,J as ra,W1 as sa,u1 as ta,K1 as ua,v as va,q1 as wa,w1 as xa,O1 as ya,p1 as za,x1 as Aa,P1 as Ba,v1 as Ca};
|