blade-code 0.6.3 → 0.7.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.
Files changed (76) hide show
  1. package/README.md +1 -1
  2. package/dist/blade.js +2 -2
  3. package/dist/{chunk-s53zeref.js → chunk-0afbeec0.js} +1 -1
  4. package/dist/chunk-2nnak657.js +6 -0
  5. package/dist/chunk-31chcjw6.js +2 -0
  6. package/dist/chunk-64jv62vs.js +1 -0
  7. package/dist/chunk-6f63v1mk.js +2 -0
  8. package/dist/{chunk-gn1acna6.js → chunk-7z6ba6t9.js} +1 -1
  9. package/dist/chunk-93xhspe5.js +1 -0
  10. package/dist/{chunk-8fq1wzv3.js → chunk-96w1szbp.js} +1 -1
  11. package/dist/{chunk-zfy765hj.js → chunk-c2b6ekqx.js} +1 -1
  12. package/dist/chunk-e21htmg4.js +2 -0
  13. package/dist/chunk-f76d6jxg.js +1 -0
  14. package/dist/chunk-fehae50v.js +1 -0
  15. package/dist/chunk-ft5nt5b5.js +6 -0
  16. package/dist/chunk-gertm8dw.js +157 -0
  17. package/dist/{chunk-b5nhr3na.js → chunk-gscq4fmx.js} +2 -2
  18. package/dist/{chunk-m7xm1ssb.js → chunk-gxnwrec6.js} +1 -1
  19. package/dist/{chunk-y57hcnk6.js → chunk-hc08zg54.js} +1 -1
  20. package/dist/chunk-hscq9623.js +1 -0
  21. package/dist/chunk-k4behavv.js +2 -0
  22. package/dist/{chunk-99gfk9b2.js → chunk-kk8akm7s.js} +1 -1
  23. package/dist/chunk-kpq18y6v.js +6 -0
  24. package/dist/{chunk-67dzm8te.js → chunk-m22zeqdy.js} +4 -4
  25. package/dist/{chunk-21zps3hb.js → chunk-mnw1xcwn.js} +2 -2
  26. package/dist/{chunk-j1ehsp0x.js → chunk-mt1c5da4.js} +2 -2
  27. package/dist/chunk-nsbhtvqd.js +1 -0
  28. package/dist/chunk-p9s685ta.js +1 -0
  29. package/dist/{chunk-63954vzc.js → chunk-pf33bn8s.js} +1 -1
  30. package/dist/chunk-phnararg.js +1 -0
  31. package/dist/{chunk-r9vneqaw.js → chunk-pkzy724w.js} +6 -6
  32. package/dist/{chunk-g54k7rea.js → chunk-q6c9qs9b.js} +2 -2
  33. package/dist/chunk-rzz6r1g9.js +41 -0
  34. package/dist/{chunk-7rjrzngk.js → chunk-sw6ngzbg.js} +1 -1
  35. package/dist/chunk-tn3xjczg.js +4 -0
  36. package/dist/chunk-v97f7je6.js +2138 -0
  37. package/dist/chunk-vzebrztg.js +9 -0
  38. package/dist/{chunk-39h8jdm3.js → chunk-wre40mf1.js} +1 -1
  39. package/dist/chunk-x46rv9sv.js +6 -0
  40. package/dist/chunk-ygta7118.js +1 -0
  41. package/dist/chunk-zd9stbct.js +618 -0
  42. package/dist/chunk-zjh9qqvq.js +1 -0
  43. package/dist/{chunk-9m9nqfc4.js → chunk-zmp3vdcj.js} +1 -1
  44. package/dist/web/assets/{FilePreview-R1mRzyRz.js → FilePreview-DLnUh-wQ.js} +1 -1
  45. package/dist/web/assets/{MarkdownRenderer-B46lJYAn.js → MarkdownRenderer-C5KTk9XG.js} +1 -1
  46. package/dist/web/assets/{McpModal-QRv5Ij61.js → McpModal-B9qJ4ewt.js} +1 -1
  47. package/dist/web/assets/{SettingsModal-D-mi6mUR.js → SettingsModal-DpeZ6cJb.js} +1 -1
  48. package/dist/web/assets/{SettingsStore-Dmo3sZ_R.js → SettingsStore-IzKtyAnM.js} +1 -1
  49. package/dist/web/assets/{SkillsModal-DNXjbjEs.js → SkillsModal-BDfzgJIj.js} +1 -1
  50. package/dist/web/assets/{TerminalPanel-DG_Q4UKr.js → TerminalPanel-B2iTF_CR.js} +1 -1
  51. package/dist/web/assets/{dialog-CsiChiYt.js → dialog-sI3ihAze.js} +1 -1
  52. package/dist/web/assets/{index-BeYCsOvo.js → index-D8mo0jzF.js} +8 -8
  53. package/dist/web/index.html +1 -1
  54. package/package.json +5 -2
  55. package/dist/chunk-08h3wmqh.js +0 -1
  56. package/dist/chunk-0b3f8r1e.js +0 -6
  57. package/dist/chunk-3ak4p05x.js +0 -1
  58. package/dist/chunk-563zye36.js +0 -1
  59. package/dist/chunk-5v2jzxpw.js +0 -2
  60. package/dist/chunk-8a2z6mgp.js +0 -6
  61. package/dist/chunk-8zh508xk.js +0 -2125
  62. package/dist/chunk-ambewjsk.js +0 -6
  63. package/dist/chunk-caw1bxy6.js +0 -1
  64. package/dist/chunk-drrgdzrf.js +0 -1
  65. package/dist/chunk-g7bw2nkz.js +0 -613
  66. package/dist/chunk-g7xh4e99.js +0 -1
  67. package/dist/chunk-gp3rn8f8.js +0 -1
  68. package/dist/chunk-kds0h72f.js +0 -6
  69. package/dist/chunk-kevt8v3j.js +0 -1
  70. package/dist/chunk-m1tnx0je.js +0 -157
  71. package/dist/chunk-n9mwp62v.js +0 -1
  72. package/dist/chunk-nrh2jage.js +0 -2
  73. package/dist/chunk-qjhxk0yp.js +0 -1
  74. package/dist/chunk-t344cq6m.js +0 -4
  75. package/dist/chunk-t44946na.js +0 -41
  76. package/dist/chunk-t7hd45rg.js +0 -8
@@ -1,6 +0,0 @@
1
- import{p as g,q as v,r as p,s as d}from"./chunk-t344cq6m.js";import{t as S}from"./chunk-8fq1wzv3.js";import{v as h,w as c,x as z}from"./chunk-8a2z6mgp.js";import{G as F,I as y,J as C,L,M as E}from"./chunk-8zh508xk.js";import"./chunk-r9vneqaw.js";import"./chunk-g54k7rea.js";import"./chunk-nrh2jage.js";import"./chunk-b5nhr3na.js";import"./chunk-21zps3hb.js";import"./chunk-67dzm8te.js";import{Ta as w}from"./chunk-g7bw2nkz.js";import"./chunk-3ak4p05x.js";import"./chunk-t44946na.js";import"./chunk-t7hd45rg.js";import{xb as T,yb as O}from"./chunk-39h8jdm3.js";import"./chunk-j1ehsp0x.js";import"./chunk-s53zeref.js";import Uq from"yargs";import{hideBin as Kq}from"yargs/helpers";import{z as b}from"zod";import{z as Q}from"zod";var N=1,_=Q.object({event_version:Q.literal(N)}),n=_.extend({type:Q.literal("content_delta"),delta:Q.string()}),r=_.extend({type:Q.literal("thinking_delta"),delta:Q.string()}),s=_.extend({type:Q.literal("thinking"),content:Q.string()}),o=_.extend({type:Q.literal("stream_end")}),a=_.extend({type:Q.literal("content"),content:Q.string()}),t=_.extend({type:Q.literal("tool_start"),tool_name:Q.string(),summary:Q.string(),target:Q.string().optional(),tool_kind:Q.enum(["readonly","write","execute"]).optional()}),e=_.extend({type:Q.literal("tool_result"),tool_name:Q.string(),summary:Q.string(),target:Q.string().optional(),tool_kind:Q.enum(["readonly","write","execute"]).optional()}),qq=_.extend({type:Q.literal("phase"),phase:Q.enum(["turn","searching","inspecting","target_hit","executing","completed"]),status:Q.enum(["ongoing","hit","done"]),message:Q.string(),turn:Q.number().optional(),tool_name:Q.string().optional(),target:Q.string().optional()}),Gq=_.extend({type:Q.literal("tool_detail"),tool_name:Q.string(),detail:Q.string()}),Qq=_.extend({type:Q.literal("task_update"),tasks:Q.array(L)}),Xq=_.extend({type:Q.literal("token_usage"),input_tokens:Q.number(),output_tokens:Q.number(),total_tokens:Q.number(),max_context_tokens:Q.number()}),Yq=_.extend({type:Q.literal("compacting"),state:Q.enum(["started","completed"])}),Zq=_.extend({type:Q.literal("turn_limit"),turns_count:Q.number(),action:Q.literal("continue")}),$q=_.extend({type:Q.literal("output"),content:Q.string(),exit_code:Q.number()}),bq=_.extend({type:Q.literal("error"),message:Q.string()}),Nq=Q.discriminatedUnion("type",[n,r,s,o,a,t,e,qq,Gq,Qq,Xq,Yq,Zq,$q,bq]);function W(G,X){return{event_version:N,type:G,...X}}var Aq=b.enum(["text","jsonl"]),Vq=b.object({headless:b.boolean().optional(),message:b.string().optional(),_:b.array(b.union([b.string(),b.number()])).optional(),model:b.string().optional(),systemPrompt:b.string().optional(),appendSystemPrompt:b.string().optional(),maxTurns:b.number().int().refine((G)=>G===-1||G>0,{message:"must be -1 or a positive integer"}).optional(),permissionMode:b.nativeEnum(T).optional(),mcpConfig:b.array(b.string()).optional(),strictMcpConfig:b.boolean().optional(),sessionId:b.string().optional(),allowedTools:b.array(b.string()).optional(),disallowedTools:b.array(b.string()).optional(),continue:b.boolean().optional(),resume:b.union([b.string(),b.boolean()]).optional(),outputFormat:Aq.optional()});class u{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(G){this.openedThinking=G}hasOpenThinking(){return this.openedThinking}completeStream(){let G={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,G}}function _q(G){return G.issues.map((X)=>`${X.path.join(".")||"options"}: ${X.message}`).join("; ")}function Dq(G){let X=Vq.safeParse(G);if(!X.success)throw Error(`Invalid headless options: ${_q(X.error)}`);return X.data}function Mq(G){return G.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",(X)=>X.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(X)=>{if(!X.headless)return;let Y=await Jq(X);process.exit(Y)})}function D(G,X=""){G.write(`${X}
2
- `)}function Rq(G){return`[task] [${G.status}] ${G.subject}`}function jq(){return{requestConfirmation:async(G)=>({approved:!0,reason:"headless-auto-approved",scope:"session"})}}function fq(G){if(!(G instanceof Error))return"Unknown error";let q=G.lastError??G;if(q.responseBody)try{let A=JSON.parse(q.responseBody)?.error?.message;if(A)return q.statusCode?`${A} (HTTP ${q.statusCode})`:A}catch{}let Z=G.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return G.message}function Bq(G){return G==="jsonl"?"jsonl":"text"}function k(G,X){let Y=(...q)=>{for(let Z of q){let U=X[Z];if(typeof U==="string"&&U.trim()!=="")return U}return};switch(G){case"Read":case"Edit":case"Write":case"UndoEdit":return Y("file_path");case"NotebookEdit":return Y("notebook_path");case"Grep":return Y("path","pattern");case"Glob":return Y("pattern");case"WebFetch":return Y("url");case"WebSearch":return Y("query");case"Bash":return Y("description","command");case"Task":return Y("description");case"LSP":return Y("filePath","operation");case"EnterWorktree":return Y("name");case"ExitWorktree":return Y("action");default:return}}function Iq(G,X,Y,q){let Z=new Set(["Glob","Grep","WebSearch","LS"]),U=new Set(["Read","WebFetch"]);if(new Set(["Edit","Write","NotebookEdit","Bash","LSP","UndoEdit","EnterWorktree","ExitWorktree"]).has(G)&&!q.targetLocked)return{phase:"target_hit",status:"hit",message:`Target locked: ${X}`,shouldLockTarget:!0};if(q.targetLocked)return{phase:"executing",status:"hit",message:Y?`Working within target: ${X}`:`Executing: ${X}`,shouldLockTarget:!1};if(Z.has(G))return{phase:"searching",status:"ongoing",message:`Still searching: ${X}`,shouldLockTarget:!1};if(U.has(G))return{phase:"inspecting",status:"ongoing",message:`Inspecting candidate: ${X}`,shouldLockTarget:!1};return{phase:"executing",status:q.targetLocked?"hit":"ongoing",message:`Executing: ${X}`,shouldLockTarget:!1}}function H(G,X){let Y=(q,Z)=>{G.stdout.write(`${JSON.stringify(W(q,Z))}
3
- `)};return{contentDelta(q){if(X==="jsonl"){Y("content_delta",{delta:q});return}G.stdout.write(q)},thinkingDelta(q,Z){if(X==="jsonl")return Y("thinking_delta",{delta:q}),Z;if(!Z)G.stderr.write("[thinking] ");return G.stderr.write(q),!0},thinking(q){if(X==="jsonl"){Y("thinking",{content:q});return}D(G.stderr,`[thinking] ${q}`)},streamEnd(q,Z){if(X==="jsonl"){Y("stream_end",{});return}if(Z)G.stderr.write(`
4
- `);if(q)G.stdout.write(`
5
- `)},content(q){if(X==="jsonl"){Y("content",{content:q});return}D(G.stdout,q)},toolStart(q,Z,U,A){if(X==="jsonl"){Y("tool_start",{tool_name:q,summary:Z,target:U,tool_kind:A});return}D(G.stderr,`[tool:start] ${Z}`)},toolResult(q,Z,U,A){if(X==="jsonl"){Y("tool_result",{tool_name:q,summary:Z,target:U,tool_kind:A});return}D(G.stderr,`[tool:result] ${Z}`)},phase(q,Z,U,A={}){if(X==="jsonl"){Y("phase",{phase:q,status:Z,message:U,turn:A.turn,tool_name:A.toolName,target:A.target});return}D(G.stderr,`[phase:${q}] ${U}`)},toolDetail(q,Z){if(X==="jsonl"){Y("tool_detail",{tool_name:q,detail:Z});return}D(G.stderr,Z)},taskUpdate(q){if(X==="jsonl"){Y("task_update",{tasks:q});return}for(let Z of q)D(G.stderr,Rq(Z))},tokenUsage(q){if(X==="jsonl"){Y("token_usage",{input_tokens:q.inputTokens,output_tokens:q.outputTokens,total_tokens:q.totalTokens,max_context_tokens:q.maxContextTokens});return}D(G.stderr,`[tokens] in=${q.inputTokens} out=${q.outputTokens} total=${q.totalTokens} / ${q.maxContextTokens}`)},compacting(q){if(X==="jsonl"){Y("compacting",{state:q?"started":"completed"});return}D(G.stderr,q?"[context] compacting started":"[context] compacting completed")},turnLimit(q){if(X==="jsonl"){Y("turn_limit",{turns_count:q,action:"continue"});return}D(G.stderr,`[turn-limit] continuing after ${q} turns`)},output(q,Z=0){if(X==="jsonl"){Y("output",{content:q,exit_code:Z});return}D(Z===0?G.stdout:G.stderr,q)},error(q){if(X==="jsonl"){Y("error",{message:q});return}D(G.stderr,q)}}}async function Jq(G,X={stdout:process.stdout,stderr:process.stderr}){let Y="text",q=H(X,Y),Z=new u,U={targetLocked:!1},A;try{let K=Dq(G);Y=Bq(K.outputFormat),q=H(X,Y),await g();let B=await v(K),M=await p(B);if(M.mode==="output"){if(M.content)q.output(M.content,M.exitCode??0);return M.exitCode??0}let P=K.permissionMode??"yolo",{sessionId:J,messages:m}=await d({sessionId:K.sessionId,continue:K.continue,resume:K.resume,fallbackSessionPrefix:"headless"}),l={messages:[...m],userId:"cli-user",sessionId:J,workspaceRoot:O(),permissionMode:P,confirmationHandler:jq()};A=await F.create({sessionId:J,modelId:K.model,mcpConfig:K.mcpConfig,strictMcpConfig:K.strictMcpConfig});let i=await E.createWithRuntime(A,{sessionId:J,systemPrompt:K.systemPrompt,appendSystemPrompt:K.appendSystemPrompt,maxTurns:K.maxTurns,modelId:K.model,permissionMode:P,toolWhitelist:K.allowedTools,toolBlacklist:K.disallowedTools,mcpConfig:K.mcpConfig,strictMcpConfig:K.strictMcpConfig}),x=await w(i.chatStream(M.content,l,{stream:!0,maxTurns:K.maxTurns,onTurnLimitReached:async(V)=>{return q.turnLimit(V.turnsCount),{continue:!0,reason:"headless-auto-continue"}}}),async(V)=>{switch(V.kind){case"content_delta":Z.markAssistantContent(),q.contentDelta(V.delta);break;case"thinking_delta":Z.setThinkingOpened(q.thinkingDelta(V.delta,Z.hasOpenThinking()));break;case"stream_end":{let $=Z.completeStream();q.streamEnd($.wroteAssistantContent,$.openedThinking);break}case"tool_start":{let $=V.toolCall;if(!("function"in $))break;if(["TaskCreate","TaskUpdate","TaskList"].includes($.function.name))break;try{let R=JSON.parse($.function.arguments),j=y($.function.name,R),f=k($.function.name,R),I=Iq($.function.name,j,f,U);if(I.shouldLockTarget)U.targetLocked=!0;q.phase(I.phase,I.status,I.message,{toolName:$.function.name,target:f}),q.toolStart($.function.name,j,f,V.toolKind)}catch{q.phase(U.targetLocked?"executing":"searching",U.targetLocked?"hit":"ongoing",U.targetLocked?`Working within target: ${$.function.name}`:`Still searching: ${$.function.name}`,{toolName:$.function.name}),q.toolStart($.function.name,$.function.name,void 0,V.toolKind)}break}case"tool_result":{let $=V.toolCall;if(!("function"in $))break;let R;try{let f=JSON.parse($.function.arguments);R=k($.function.name,f)}catch{R=void 0}let j=C($.function.name,V.result);if(q.toolResult($.function.name,j.summary,R,void 0),j.detail)q.toolDetail($.function.name,j.detail);break}case"token_usage":q.tokenUsage(V.usage);break;case"compaction":q.compacting(V.phase==="start");break;case"task_update":q.taskUpdate(V.tasks);break;case"subagent_spawned":case"subagent_completed":break;case"model_fallback":break;case"turn_start":if(V.turn===1)U.targetLocked=!1;q.phase("turn",U.targetLocked?"hit":"ongoing",`Turn ${V.turn} started`,{turn:V.turn});break;default:{let $=V}}});if(x.metadata?.outputTruncated)q.error("[warning] 输出因达到 token 上限被截断,部分内容可能不完整。");if(!x.success)return q.error(`Error: ${x.error?.message??"Agent execution failed"}`),1;return q.phase("completed","done","Headless run completed"),0}catch(K){if(Z.hasOpenThinking()&&Y==="text")X.stderr.write(`
6
- `);return q.error(`Error: ${fq(K)}`),1}finally{await A?.dispose()}}async function vq(){if(!process.argv.slice(2).includes("--headless"))return!1;let{headless:Y,"output-format":q,"system-prompt":Z,"append-system-prompt":U,"max-turns":A,...K}=S,B=Uq(Kq(process.argv)).scriptName("blade").strict(!1).options(K).middleware([h,c,z]);return Mq(B),await B.parse(),!0}export{Jq as runHeadless,vq as handleHeadlessMode,Vq as HeadlessOptionsSchema};
@@ -1 +0,0 @@
1
- import{sb as a}from"./chunk-t7hd45rg.js";import"./chunk-j1ehsp0x.js";import"./chunk-s53zeref.js";export{a as createChatServiceAsync};
@@ -1 +0,0 @@
1
- import{t as a,u as b}from"./chunk-8fq1wzv3.js";import"./chunk-nrh2jage.js";import"./chunk-s53zeref.js";export{a as globalOptions,b as cliConfig};