blade-code 0.7.8 → 0.8.0
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-rnfd5ebv.js → chunk-06h100e2.js} +1 -1
- package/dist/chunk-07jvw0kn.js +1 -0
- package/dist/chunk-0dj326ms.js +5 -0
- package/dist/chunk-14erxdhd.js +1 -0
- package/dist/{chunk-48q9msfk.js → chunk-1pt090dg.js} +38 -38
- package/dist/{chunk-cjmxggke.js → chunk-1smf2dj3.js} +2 -2
- package/dist/chunk-34pdtz4q.js +3 -0
- package/dist/chunk-3gw66r7a.js +2 -0
- package/dist/chunk-49g067ek.js +41 -0
- package/dist/chunk-6es6av6j.js +2 -0
- package/dist/{chunk-g7caymjr.js → chunk-9ad7tt9s.js} +1 -1
- package/dist/{chunk-jm2xhnrv.js → chunk-9xkjb87h.js} +1 -1
- package/dist/chunk-a12tmmfr.js +1 -0
- package/dist/chunk-bggvft3z.js +1 -0
- package/dist/{chunk-0e0z8yc1.js → chunk-bm8vwfez.js} +2 -2
- package/dist/chunk-bxbagv76.js +9 -0
- package/dist/chunk-ctqf59q1.js +2 -0
- package/dist/chunk-d08wbxjr.js +1 -0
- package/dist/chunk-d4ex0qvs.js +2 -0
- package/dist/{chunk-f9ybv4ph.js → chunk-dr06x0cw.js} +1 -1
- package/dist/chunk-e4a240t7.js +34 -0
- package/dist/{chunk-4dmdn3a9.js → chunk-gsfkrr25.js} +1 -1
- package/dist/chunk-gytwh5y1.js +6 -0
- package/dist/chunk-hjx5n3dw.js +3 -0
- package/dist/chunk-hrnd3wjg.js +6 -0
- package/dist/chunk-j39q2kx7.js +1 -0
- package/dist/{chunk-4745ktjj.js → chunk-jakzknh3.js} +299 -299
- package/dist/chunk-jqr2pknb.js +151 -0
- package/dist/{chunk-t70aqrm4.js → chunk-jt62ctz7.js} +1 -1
- package/dist/{chunk-t2spryz0.js → chunk-kawv31m3.js} +1 -1
- package/dist/chunk-n8ymp6nd.js +1 -0
- package/dist/{chunk-s4mke0t6.js → chunk-nned222j.js} +1 -1
- package/dist/chunk-qwdbqjh7.js +22 -0
- package/dist/chunk-syj3anec.js +6 -0
- package/dist/chunk-tv4r86ez.js +24 -0
- package/dist/chunk-twem6p0g.js +2 -0
- package/dist/chunk-v3ctg84r.js +1 -0
- package/dist/chunk-v5rn5r1h.js +1 -0
- package/dist/{chunk-fb7amc2s.js → chunk-wmes2tt9.js} +1 -1
- package/dist/chunk-xhnyy54e.js +2 -0
- package/dist/{chunk-9kejtkey.js → chunk-ychj0e5q.js} +1 -1
- package/dist/{chunk-71n472hj.js → chunk-ydb9myhe.js} +1 -1
- package/dist/{chunk-6hn2jgw5.js → chunk-yhpm9azy.js} +1 -1
- package/dist/{chunk-g6ted982.js → chunk-yqxw7zz4.js} +1 -1
- package/dist/web/assets/{FilePreview-DRKRs8i2.js → FilePreview-DvgnEspB.js} +1 -1
- package/dist/web/assets/{MarkdownRenderer-DFqPpAnM.js → MarkdownRenderer-e1ZUy6jV.js} +1 -1
- package/dist/web/assets/{McpModal-CX5-hlNv.js → McpModal-Raois2g1.js} +1 -1
- package/dist/web/assets/SettingsModal-Dzuatoea.js +1 -0
- package/dist/web/assets/{SettingsStore-jup_Kikq.js → SettingsStore-BxDA0Usw.js} +1 -1
- package/dist/web/assets/{SkillsModal-DaAUrwXO.js → SkillsModal-Cg2-befH.js} +1 -1
- package/dist/web/assets/{TerminalPanel-DzlllDH7.js → TerminalPanel-CEoQI9Lu.js} +1 -1
- package/dist/web/assets/index-BvGeIa_-.js +16 -0
- package/dist/web/assets/index-DDJnZJcp.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +4 -11
- package/dist/chunk-1w6tqkxd.js +0 -34
- package/dist/chunk-2049tv49.js +0 -41
- package/dist/chunk-5be6qr2v.js +0 -2
- package/dist/chunk-67vzgcs5.js +0 -2
- package/dist/chunk-6811kbxn.js +0 -1
- package/dist/chunk-6js5wp6t.js +0 -1
- package/dist/chunk-6kp3z956.js +0 -9
- package/dist/chunk-78txnq4n.js +0 -151
- package/dist/chunk-7r1hm0qz.js +0 -6
- package/dist/chunk-a7yjnqhd.js +0 -3
- package/dist/chunk-bwaqaktn.js +0 -1
- package/dist/chunk-cb82rf5h.js +0 -1
- package/dist/chunk-ce11m8bq.js +0 -1
- package/dist/chunk-e4rhdg3h.js +0 -1
- package/dist/chunk-faq7ay4j.js +0 -24
- package/dist/chunk-ky8ctbdc.js +0 -1
- package/dist/chunk-mpskff34.js +0 -1
- package/dist/chunk-pd1yqxcv.js +0 -9
- package/dist/chunk-phhmmybg.js +0 -2
- package/dist/chunk-qnevwq1q.js +0 -2
- package/dist/chunk-r1spf93b.js +0 -26
- package/dist/chunk-z4c68ve0.js +0 -6
- package/dist/chunk-z9zbcenc.js +0 -6
- package/dist/web/assets/SettingsModal-CfR_q6N7.js +0 -1
- package/dist/web/assets/index-BJTSF3fc.js +0 -9
- package/dist/web/assets/index-CL6apjgo.css +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{p,q as i,r as s,s as r}from"./chunk-yqxw7zz4.js";import{t as y}from"./chunk-nned222j.js";import{v as u,w as m,x as l}from"./chunk-syj3anec.js";import{y as v}from"./chunk-twem6p0g.js";import{K as c,O as g,P as d,R as N,S as T}from"./chunk-jakzknh3.js";import"./chunk-9ad7tt9s.js";import"./chunk-e4a240t7.js";import"./chunk-bm8vwfez.js";import"./chunk-tv4r86ez.js";import"./chunk-qwdbqjh7.js";import"./chunk-d4ex0qvs.js";import"./chunk-6es6av6j.js";import{ab as h}from"./chunk-1pt090dg.js";import"./chunk-9xkjb87h.js";import"./chunk-49g067ek.js";import{Bb as z,wb as C,yb as q,zb as x}from"./chunk-ctqf59q1.js";import"./chunk-jt62ctz7.js";import{Hb as E,Ib as P,Jb as S}from"./chunk-gsfkrr25.js";import"./chunk-0dj326ms.js";import"./chunk-34pdtz4q.js";import"./chunk-hjx5n3dw.js";import"./chunk-dr06x0cw.js";import Rq from"yargs";import{hideBin as Hq}from"yargs/helpers";var W=1;function K(Y){return q.Object({event_version:q.Literal(W),...Y})}var Qq=K({type:q.Literal("content_delta"),delta:q.String()}),Yq=K({type:q.Literal("thinking_delta"),delta:q.String()}),Zq=K({type:q.Literal("thinking"),content:q.String()}),$q=K({type:q.Literal("stream_end")}),Bq=K({type:q.Literal("content"),content:q.String()}),k=z(["readonly","write","execute"]),Gq=K({type:q.Literal("tool_start"),tool_name:q.String(),summary:q.String(),target:q.Optional(q.String()),tool_kind:q.Optional(k)}),Xq=K({type:q.Literal("tool_result"),tool_name:q.String(),summary:q.String(),target:q.Optional(q.String()),tool_kind:q.Optional(k),success:q.Optional(q.Boolean()),error_type:q.Optional(q.String()),error_message:q.Optional(q.String())}),Uq=K({type:q.Literal("phase"),phase:z(["turn","searching","inspecting","target_hit","executing","completed"]),status:z(["ongoing","hit","done"]),message:q.String(),turn:q.Optional(q.Number()),tool_name:q.Optional(q.String()),target:q.Optional(q.String())}),Vq=K({type:q.Literal("tool_detail"),tool_name:q.String(),detail:q.String()}),Dq=K({type:q.Literal("task_update"),tasks:q.Array(N)}),Kq=K({type:q.Literal("subagent"),state:z(["spawned","completed"]),session_id:q.String(),subagent_type:q.Optional(q.String()),success:q.Optional(q.Boolean()),summary:q.Optional(q.String()),resumed_from:q.Optional(q.String()),root_agent_id:q.Optional(q.String()),resume_depth:q.Optional(q.Integer({minimum:0}))}),bq=K({type:q.Literal("token_usage"),input_tokens:q.Number(),output_tokens:q.Number(),total_tokens:q.Number(),max_context_tokens:q.Number(),cache_read_tokens:q.Optional(q.Number()),cache_write_tokens:q.Optional(q.Number()),cost_usd:q.Optional(q.Number())}),_q=K({type:q.Literal("compacting"),state:z(["started","completed"])}),zq=K({type:q.Literal("turn_limit"),turns_count:q.Number(),action:q.Literal("continue")}),Aq=K({type:q.Literal("output"),content:q.String(),exit_code:q.Number()}),Mq=K({type:q.Literal("error"),message:q.String()}),Sq=x(q.Union([Qq,Yq,Zq,$q,Bq,Gq,Xq,Uq,Vq,Dq,Kq,bq,_q,zq,Aq,Mq]));function O(Y,$){return{event_version:W,type:Y,...$}}function jq(Y){if(Y?.signal)return{signal:Y.signal,dispose:()=>{return}};let $=new AbortController,B=()=>$.abort("interrupt");return process.once("SIGINT",B),process.once("SIGTERM",B),{signal:$.signal,dispose:()=>{process.removeListener("SIGINT",B),process.removeListener("SIGTERM",B)}}}var fq=z(["text","jsonl"]),Iq=q.Object({headless:q.Optional(q.Boolean()),message:q.Optional(q.String()),_:q.Optional(q.Array(q.Union([q.String(),q.Number()]))),model:q.Optional(q.String()),systemPrompt:q.Optional(q.String()),appendSystemPrompt:q.Optional(q.String()),maxTurns:q.Optional(q.Refine(q.Integer({maximum:S}),(Y)=>Y===-1||Y>0,()=>"must be -1 or a positive integer")),permissionMode:q.Optional(q.Enum(E)),mcpConfig:q.Optional(q.Array(q.String())),strictMcpConfig:q.Optional(q.Boolean()),sessionId:q.Optional(q.String()),allowedTools:q.Optional(q.Array(q.String())),disallowedTools:q.Optional(q.Array(q.String())),agents:q.Optional(q.String()),continue:q.Optional(q.Boolean()),resume:q.Optional(q.Union([q.String(),q.Boolean()])),forkSession:q.Optional(q.Boolean()),outputFormat:q.Optional(fq)});class n{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(Y){this.openedThinking=Y}hasOpenThinking(){return this.openedThinking}completeStream(){let Y={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,Y}}function Jq(Y){return Y.issues.map(($)=>`${$.path.join(".")||"options"}: ${$.message}`).join("; ")}function Pq(Y){let $=C(Iq,Y);if(!$.success)throw Error(`Invalid headless options: ${Jq($.error)}`);return $.data}function Lq(Y){return Y.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",($)=>$.positional("message",{describe:"Message to process",type:"string"}).option("headless",{type:"boolean",describe:"Run full agent loop without Ink UI and print events to the terminal"}).option("model",{describe:"Model ID for this run",type:"string"}).option("system-prompt",{describe:"Replace the default system prompt",type:"string"}).option("append-system-prompt",{describe:"Append a system prompt to the default system prompt",type:"string"}).option("max-turns",{alias:["maxTurns"],describe:"Maximum conversation turns (-1: unlimited, N>0: limit to N turns)",type:"number"}).option("output-format",{alias:["outputFormat"],choices:["text","jsonl"],describe:"Headless output format",type:"string"}),async($)=>{if(!$.headless)return;let B=await Fq($);process.exit(B)})}function b(Y,$=""){Y.write(`${$}
|
|
2
|
+
`)}function xq(Y){return`[task] [${Y.status}] ${Y.subject}`}function Nq(){return{requestConfirmation:async(Y)=>({approved:!0,reason:"headless-auto-approved",scope:"session"})}}function Wq(Y){if(!(Y instanceof Error))return"Unknown error";let Q=Y.lastError??Y;if(Q.responseBody)try{let U=JSON.parse(Q.responseBody)?.error?.message;if(U)return Q.statusCode?`${U} (HTTP ${Q.statusCode})`:U}catch{}let Z=Y.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return Y.message}function kq(Y){return Y==="jsonl"?"jsonl":"text"}function F(Y,$){let B=(...Q)=>{for(let Z of Q){let D=$[Z];if(typeof D==="string"&&D.trim()!=="")return D}return};switch(Y){case"Read":case"Edit":case"Write":case"UndoEdit":return B("file_path");case"NotebookEdit":return B("notebook_path");case"Grep":return B("path","pattern");case"Glob":return B("pattern");case"WebFetch":return B("url");case"WebSearch":return B("query");case"Bash":return B("command","description");case"Task":return B("description");case"LSP":return B("filePath","operation");case"EnterWorktree":return B("name");case"ExitWorktree":return B("action");default:return}}function Oq(Y,$,B,Q){let Z=new Set(["Glob","Grep","WebSearch","LS"]),D=new Set(["Read","WebFetch"]);if(new Set(["Edit","Write","NotebookEdit","Bash","LSP","UndoEdit","EnterWorktree","ExitWorktree"]).has(Y)&&!Q.targetLocked)return{phase:"target_hit",status:"hit",message:`Target locked: ${$}`,shouldLockTarget:!0};if(Q.targetLocked)return{phase:"executing",status:"hit",message:B?`Working within target: ${$}`:`Executing: ${$}`,shouldLockTarget:!1};if(Z.has(Y))return{phase:"searching",status:"ongoing",message:`Still searching: ${$}`,shouldLockTarget:!1};if(D.has(Y))return{phase:"inspecting",status:"ongoing",message:`Inspecting candidate: ${$}`,shouldLockTarget:!1};return{phase:"executing",status:Q.targetLocked?"hit":"ongoing",message:`Executing: ${$}`,shouldLockTarget:!1}}function w(Y,$){let B=(Q,Z)=>{Y.stdout.write(`${JSON.stringify(O(Q,Z))}
|
|
3
|
+
`)};return{contentDelta(Q){if($==="jsonl"){B("content_delta",{delta:Q});return}Y.stdout.write(Q)},thinkingDelta(Q,Z){if($==="jsonl")return B("thinking_delta",{delta:Q}),Z;if(!Z)Y.stderr.write("[thinking] ");return Y.stderr.write(Q),!0},thinking(Q){if($==="jsonl"){B("thinking",{content:Q});return}b(Y.stderr,`[thinking] ${Q}`)},streamEnd(Q,Z){if($==="jsonl"){B("stream_end",{});return}if(Z)Y.stderr.write(`
|
|
4
|
+
`);if(Q)Y.stdout.write(`
|
|
5
|
+
`)},content(Q){if($==="jsonl"){B("content",{content:Q});return}b(Y.stdout,Q)},toolStart(Q,Z,D,U){if($==="jsonl"){B("tool_start",{tool_name:Q,summary:Z,target:D,tool_kind:U});return}b(Y.stderr,`[tool:start] ${Z}`)},toolResult(Q,Z,D,U,_){if($==="jsonl"){B("tool_result",{tool_name:Q,summary:Z,target:D,tool_kind:U,success:_?.success,error_type:_?.errorType,error_message:_?.errorMessage});return}b(Y.stderr,`[tool:result] ${Z}`)},phase(Q,Z,D,U={}){if($==="jsonl"){B("phase",{phase:Q,status:Z,message:D,turn:U.turn,tool_name:U.toolName,target:U.target});return}b(Y.stderr,`[phase:${Q}] ${D}`)},toolDetail(Q,Z){if($==="jsonl"){B("tool_detail",{tool_name:Q,detail:Z});return}b(Y.stderr,Z)},taskUpdate(Q){if($==="jsonl"){B("task_update",{tasks:Q});return}for(let Z of Q)b(Y.stderr,xq(Z))},subagent(Q){let Z=Q.kind==="subagent_spawned";if($==="jsonl"){B("subagent",{state:Z?"spawned":"completed",session_id:Q.sessionId,subagent_type:Z?Q.type:void 0,success:Z?void 0:Q.success,summary:Z?void 0:Q.summary,resumed_from:Q.resumedFrom,root_agent_id:Q.rootAgentId,resume_depth:Q.resumeDepth});return}b(Y.stderr,`[subagent:${Z?"spawned":"completed"}] ${Q.sessionId}${Q.resumedFrom?` resumed from ${Q.resumedFrom}`:""}`)},tokenUsage(Q){if($==="jsonl"){B("token_usage",{input_tokens:Q.inputTokens,output_tokens:Q.outputTokens,total_tokens:Q.totalTokens,max_context_tokens:Q.maxContextTokens,cache_read_tokens:Q.cacheReadTokens,cache_write_tokens:Q.cacheWriteTokens,cost_usd:Q.costUsd});return}b(Y.stderr,`[tokens] in=${Q.inputTokens} out=${Q.outputTokens} total=${Q.totalTokens} / ${Q.maxContextTokens}`)},compacting(Q){if($==="jsonl"){B("compacting",{state:Q?"started":"completed"});return}b(Y.stderr,Q?"[context] compacting started":"[context] compacting completed")},turnLimit(Q){if($==="jsonl"){B("turn_limit",{turns_count:Q,action:"continue"});return}b(Y.stderr,`[turn-limit] continuing after ${Q} turns`)},output(Q,Z=0){if($==="jsonl"){B("output",{content:Q,exit_code:Z});return}b(Z===0?Y.stdout:Y.stderr,Q)},error(Q){if($==="jsonl"){B("error",{message:Q});return}b(Y.stderr,Q)}}}async function Fq(Y,$={stdout:process.stdout,stderr:process.stderr},B){let Q="text",Z=w($,Q),D=new n,U={targetLocked:!1},_,A=jq(B);try{let X=Pq(Y);Q=kq(X.outputFormat),Z=w($,Q),await p();let o=await i(X),M=await s(o);if(M.mode==="output"){if(M.content)Z.output(M.content,M.exitCode??0);return M.exitCode??0}let L=X.permissionMode??"yolo",{sessionId:I,messages:a}=await r({sessionId:X.sessionId,continue:X.continue,resume:X.resume,forkSession:X.forkSession,fallbackSessionPrefix:"headless"}),t={messages:[...a],userId:"cli-user",sessionId:I,workspaceRoot:P(),permissionMode:L,signal:A.signal,confirmationHandler:Nq()};_=await c.create({sessionId:I,workspaceRoot:P(),modelId:X.model,mcpConfig:X.mcpConfig,strictMcpConfig:X.strictMcpConfig,agents:X.agents?v(X.agents):void 0});let e=X.maxTurns??_.getConfig().maxTurns,qq=await T.createWithRuntime(_,{sessionId:I,systemPrompt:X.systemPrompt,appendSystemPrompt:X.appendSystemPrompt,maxTurns:X.maxTurns,modelId:X.model,permissionMode:L,toolWhitelist:X.allowedTools,toolBlacklist:X.disallowedTools,mcpConfig:X.mcpConfig,strictMcpConfig:X.strictMcpConfig}),J=await h(qq.chatStream(M.content,t,{stream:!0,signal:A.signal,maxTurns:X.maxTurns,...e===-1?{onTurnLimitReached:async(V)=>{return Z.turnLimit(V.turnsCount),{continue:!0,reason:"headless-auto-continue"}}}:{}}),async(V)=>{switch(V.kind){case"content_delta":D.markAssistantContent(),Z.contentDelta(V.delta);break;case"thinking_delta":D.setThinkingOpened(Z.thinkingDelta(V.delta,D.hasOpenThinking()));break;case"stream_end":{let G=D.completeStream();Z.streamEnd(G.wroteAssistantContent,G.openedThinking);break}case"tool_start":{let G=V.toolCall;if(!("function"in G))break;if(["TaskCreate","TaskUpdate","TaskList"].includes(G.function.name))break;try{let R=JSON.parse(G.function.arguments),H=g(G.function.name,R),j=F(G.function.name,R),f=Oq(G.function.name,H,j,U);if(f.shouldLockTarget)U.targetLocked=!0;Z.phase(f.phase,f.status,f.message,{toolName:G.function.name,target:j}),Z.toolStart(G.function.name,H,j,V.toolKind)}catch{Z.phase(U.targetLocked?"executing":"searching",U.targetLocked?"hit":"ongoing",U.targetLocked?`Working within target: ${G.function.name}`:`Still searching: ${G.function.name}`,{toolName:G.function.name}),Z.toolStart(G.function.name,G.function.name,void 0,V.toolKind)}break}case"tool_result":{let G=V.toolCall;if(!("function"in G))break;let R;try{let j=JSON.parse(G.function.arguments);R=F(G.function.name,j)}catch{R=void 0}let H=d(G.function.name,V.result);if(Z.toolResult(G.function.name,H.summary,R,void 0,{success:V.result.success,errorType:V.result.error?.type,errorMessage:V.result.error?.message}),H.detail)Z.toolDetail(G.function.name,H.detail);break}case"token_usage":Z.tokenUsage(V.usage);break;case"compaction":Z.compacting(V.phase==="start");break;case"task_update":Z.taskUpdate(V.tasks);break;case"steering_applied":case"follow_up_started":case"goal_updated":case"goal_continuation_started":break;case"subagent_spawned":case"subagent_completed":Z.subagent(V);break;case"model_fallback":break;case"turn_start":if(V.turn===1)U.targetLocked=!1;Z.phase("turn",U.targetLocked?"hit":"ongoing",`Turn ${V.turn} started`,{turn:V.turn});break;default:{let G=V}}});if(J.metadata?.outputTruncated)Z.error("[warning] 输出因达到 token 上限被截断,部分内容可能不完整。");if(!J.success)return Z.error(`Error: ${J.error?.message??"Agent execution failed"}`),1;return Z.phase("completed","done","Headless run completed"),0}catch(X){if(D.hasOpenThinking()&&Q==="text")$.stderr.write(`
|
|
6
|
+
`);return Z.error(`Error: ${Wq(X)}`),1}finally{try{await _?.dispose()}finally{A.dispose()}}}async function tq(){if(!process.argv.slice(2).includes("--headless"))return!1;let{headless:B,"output-format":Q,"system-prompt":Z,"append-system-prompt":D,"max-turns":U,..._}=y,A=Rq(Hq(process.argv)).scriptName("blade").strict(!1).options(_).middleware([m,u,l]);return Lq(A),await A.parse(),!0}export{Fq as runHeadless,tq as handleHeadlessMode,Iq as HeadlessOptionsSchema};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Aa as k,Ba as l,Ca as m,qa as a,ra as b,sa as c,ta as d,ua as e,va as f,wa as g,xa as h,ya as i,za as j}from"./chunk-tv4r86ez.js";import"./chunk-qwdbqjh7.js";import"./chunk-jt62ctz7.js";import"./chunk-gsfkrr25.js";import"./chunk-34pdtz4q.js";import"./chunk-hjx5n3dw.js";import"./chunk-dr06x0cw.js";export{a as vanillaStore,c as sessionActions,l as getThinkingModeEnabled,b as getState,j as getModelById,e as getMessages,k as getMcpServers,i as getCurrentModel,f as getConfig,h as getAllModels,g as ensureStoreInitialized,m as configActions,d as appActions};
|